#============================================================================== # ■ RGSS3 パーティ能力詳細設定 Ver1.02 by 星潟 #------------------------------------------------------------------------------ # 「半減する」・「二倍にする」・「無効にする」等と # 大雑把なパーティ能力の効果を詳細に設定できるようなシステムを追加します。 # 特徴を有する項目(アクター・職業・装備品・ステート等)の # メモ欄に特定の書式で書き込む事で設定を行います。 # # 例 # <エンカウント率増減:-25> # エンカウント率を25%減少させます。 # # <先制攻撃率増減:10> # 先制攻撃率を10%増加させます。 # # <獲得金額率増減:50> # 獲得金額率を50%増加させます。 # # <ドロップ率増減:70> # アイテムドロップ率を70%増加させます。 #------------------------------------------------------------------------------ # Ver1.01 キャッシュ化による軽量化。 # 効果を加算にするか乗算にするかを選択できるように変更。 #------------------------------------------------------------------------------ # Ver1.02 戦闘に参加していないパーティメンバーのパーティ能力を # 得られるようにする機能を追加。 # Ver1.01の加算/乗算の計算が異常だった不具合を修正。 #============================================================================== module DETAIL_PTA #このスクリプトによるパーティ能力の効果を加算にするか乗算にするかを設定します。 #0で乗算、1で加算とします。 #プレイヤーに効果を明確に実感させたい場合は1をお勧めします。 TYPE = 1 #戦闘に参加していないメンバーのパーティ能力も得られるようにするかどうかを設定します。 #trueで有効、falseで無効にします。 UNBM = true #エンカウント率増減効果設定の為のキーワードを設定します。(変更不要) WORD1 = "エンカウント率増減" #先制攻撃率増減効果設定の為のキーワードを設定します。(変更不要) WORD2 = "先制攻撃率増減" #獲得金額率増減効果設定の為のキーワードを設定します。(変更不要) WORD3 = "獲得金額率増減" #ドロップ率増減効果設定の為のキーワードを設定します。(変更不要) WORD4 = "ドロップ率増減" end class Game_BattlerBase #-------------------------------------------------------------------------- # パーティ能力詳細データ(個人) #-------------------------------------------------------------------------- def extra_pta(n) #0に各特徴のパーティ能力詳細値を加算した値を返す。 feature_objects.inject(0) {|r, f| r += f.extra_pta[n]} end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # パーティ能力詳細データ(パーティ) #-------------------------------------------------------------------------- def extra_pta(n) #100に各アクターの先制攻撃率を加算した値を作成。 array = DETAIL_PTA::UNBM ? all_members : battle_members data = array.inject(DETAIL_PTA::TYPE == 0 ? 100 : 0) {|r, actor| r += actor.extra_pta(n)} #0でない場合は100.0で除算。 data /= 100.0 if data != 0 #0より小さい場合は0とする。 data = 0 if data < 0 #値を返す。 data end #-------------------------------------------------------------------------- # パーティ能力の所持判定 #-------------------------------------------------------------------------- alias party_ability_un_battle_members party_ability def party_ability(ability_id) #戦闘参加メンバーのみパーティ能力の判定を行う場合は本来の処理を行い #そうでない場合は全メンバーで判定する。 return party_ability_un_battle_members(ability_id) if !DETAIL_PTA::UNBM all_members.any? {|actor| actor.party_ability(ability_id) } end #-------------------------------------------------------------------------- # 先制攻撃の確率計算 #-------------------------------------------------------------------------- alias rate_preemptive_enh_st rate_preemptive def rate_preemptive(troop_agi) #本来の処理にパーティ能力詳細のデータを乗算する。 case DETAIL_PTA::TYPE when 0;rate_preemptive_enh_st(troop_agi) * $game_party.extra_pta(1) when 1;rate_preemptive_enh_st(troop_agi) + $game_party.extra_pta(1) end end end class Game_Player < Game_Character #-------------------------------------------------------------------------- # エンカウント進行値の取得 #-------------------------------------------------------------------------- alias encounter_progress_value_enh_st encounter_progress_value def encounter_progress_value #本来の処理にパーティ能力詳細のデータを乗算する。 case DETAIL_PTA::TYPE when 0;encounter_progress_value_enh_st * $game_party.extra_pta(0) when 1;encounter_progress_value_enh_st + $game_party.extra_pta(0) end end end class Game_Troop < Game_Unit #-------------------------------------------------------------------------- # お金の合計計算 #-------------------------------------------------------------------------- alias gold_total_enh_st gold_total def gold_total #そのままでは小数点以下が生じる為、整数にする。 gold_total_enh_st.to_i end #-------------------------------------------------------------------------- # お金の倍率を取得 #-------------------------------------------------------------------------- alias gold_rate_enh_st gold_rate def gold_rate #本来の処理にパーティ能力詳細のデータを乗算する。 case DETAIL_PTA::TYPE when 0;gold_rate_enh_st * $game_party.extra_pta(2) when 1;gold_rate_enh_st + $game_party.extra_pta(2) end end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ドロップアイテム取得率の倍率を取得 #-------------------------------------------------------------------------- alias drop_item_rate_enh_st drop_item_rate def drop_item_rate #本来の処理にパーティ能力詳細のデータを乗算する。 case DETAIL_PTA::TYPE when 0;drop_item_rate_enh_st * $game_party.extra_pta(3) when 1;drop_item_rate_enh_st + $game_party.extra_pta(3) end end end class RPG::BaseItem #-------------------------------------------------------------------------- # パーティ能力詳細データ #-------------------------------------------------------------------------- def extra_pta #キャッシュが存在する場合はキャッシュを返す。 return @extra_pta if @extra_pta != nil #0が4つ入った配列を作成。 @extra_pta = [0] * 4 #各行からデータを取得。 self.note.each_line {|l| #データ別に判別ワードを取得。 4.times {|i| case i when 0;word = DETAIL_PTA::WORD1#エンカウント率増減 when 1;word = DETAIL_PTA::WORD2#先制攻撃率増減 when 2;word = DETAIL_PTA::WORD3#獲得金額率増減 when 3;word = DETAIL_PTA::WORD4#ドロップ率増減 end #判別を用いてデータを取得。 memo = l.scan(/<#{word}[::](\S+)>/).flatten #データを取得出来た場合、配列の然るべき箇所に、そのデータを加算。 @extra_pta[i] += memo[0].to_i if memo != nil && !memo.empty?}} #データを返す。 @extra_pta end end