#============================================================================== # ■ RGSS3 パーティ能力詳細設定 Ver2.00 by 星潟 #------------------------------------------------------------------------------ # 「半減する」・「二倍にする」・「無効にする」等と # 大雑把なパーティ能力の効果を詳細に設定できるようなシステムを追加します。 #============================================================================== # 特徴を有する項目(アクター・職業・装備品・ステート等)のメモ欄に設定。 #------------------------------------------------------------------------------ # <エンカウント率増減:-25> # # エンカウント率を25%減少させます。 #------------------------------------------------------------------------------ # <不意打ち率増減:10> # # 不意打ち率を10%増加させます。 # (不意討ちではなく不意打ちと記述する必要があるので変換注意!) #------------------------------------------------------------------------------ # <先制攻撃率増減:10> # # 先制攻撃率を10%増加させます。 #------------------------------------------------------------------------------ # <獲得金額率増減:50> # # 獲得金額率を50%増加させます。 #------------------------------------------------------------------------------ # <ドロップ率増減:70> # # アイテムドロップ率を70%増加させます。 #============================================================================== # Ver1.01 キャッシュ化による軽量化。 # 効果を加算にするか乗算にするかを選択できるように変更。 #------------------------------------------------------------------------------ # Ver1.02 戦闘に参加していないパーティメンバーのパーティ能力を # 得られるようにする機能を追加。 # Ver1.01の加算/乗算の計算が異常だった不具合を修正。 #------------------------------------------------------------------------------ # Ver2.00 減少処理が正常に動作していない不具合を修正。 # 不意打ちに関する処理を実装。 # 更に乗算と加算の処理分けを複数個所で実装。 # 処理内容を統合・効率化。 #============================================================================== module DETAIL_PTA #空の配列を4種類用意。(変更不要) WORDS = [] TYPE1 = [] TYPE2 = [] TYPE3 = [] #------------------------------------------------------------------------------ #戦闘に参加していないメンバーのパーティ能力も #得られるようにするかどうかを設定します。 #trueで有効、falseで無効にします。 UNBM = true #------------------------------------------------------------------------------ #エンカウント率増減設定用のキーワードを設定します。 WORDS[0] = "エンカウント率増減" #エンカウント率増減設定の特徴データ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE1[0] = false #エンカウント率増減設定のアクターデータ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE2[0] = false #エンカウント率増減設定によって本来のエンカウント率に対し #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE3[0] = false #------------------------------------------------------------------------------ #不意打ち率増減設定用のキーワードを設定します。 WORDS[1] = "不意打ち率増減" #不意打ち率増減設定の特徴データ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE1[1] = false #不意打ち率増減設定のアクターデータ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE2[1] = false #不意打ち率増減設定によって本来の不意打ち率に対し #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE3[1] = false #------------------------------------------------------------------------------ #先制攻撃率増減設定用のキーワードを設定します。 WORDS[2] = "先制攻撃率増減" #先制攻撃率増減設定の特徴データ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE1[2] = false #先制攻撃率増減設定のアクターデータ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE2[2] = false #先制攻撃率増減設定によって本来の先制攻撃率に対し #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE3[2] = false #------------------------------------------------------------------------------ #獲得金額率増減設定用のキーワードを設定します。 WORDS[3] = "獲得金額率増減" #獲得金額率増減設定の特徴データ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE1[3] = false #獲得金額率増減設定のアクターデータ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE2[3] = false #獲得金額率増減設定によって本来の獲得金額率に対し #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE3[3] = false #------------------------------------------------------------------------------ #ドロップ率増減設定用のキーワードを設定します。 WORDS[4] = "ドロップ率増減" #ドロップ率増減設定の特徴データ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE1[4] = false #ドロップ率増減設定のアクターデータ間での値を #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE2[4] = false #ドロップ率増減設定によって本来のドロップ率に対し #乗算にするか加算にするかを設定します。 #trueで乗算、falseで加算とします。 TYPE3[4] = false end class Game_BattlerBase #-------------------------------------------------------------------------- # パーティ能力詳細データ(個人) #-------------------------------------------------------------------------- def extra_pta(type) flag = DETAIL_PTA::TYPE1[type] data = feature_objects.inject(flag ? 100 : 0) {|r, f| n = f.extra_pta[type] r = flag ? r * (100 + n) / 100.0 : r + n} data -= 100 if flag data end end class Game_Party < Game_Unit #-------------------------------------------------------------------------- # パーティ能力詳細データ(パーティ) #-------------------------------------------------------------------------- def extra_pta(type) flag = DETAIL_PTA::TYPE2[type] array = DETAIL_PTA::UNBM ? all_members : battle_members data = array.inject(flag ? 100 : 0) {|r, actor| n = actor.extra_pta(type) r = flag ? r * (100 + n) / 100.0 : r + n} data -= 100 if flag data /= 100.0 if data != 0 data end #-------------------------------------------------------------------------- # パーティ能力詳細設定適用 #-------------------------------------------------------------------------- def pta_totalize(base,type) change = $game_party.extra_pta(type) rate = DETAIL_PTA::TYPE3[type] ? base * (1.0 + change) : base + change rate < 0 ? 0 : rate rate 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_surprise_enh_st rate_surprise def rate_surprise(troop_agi) pta_totalize(rate_surprise_enh_st(troop_agi),1) end #-------------------------------------------------------------------------- # 先制攻撃の確率計算 #-------------------------------------------------------------------------- alias rate_preemptive_enh_st rate_preemptive def rate_preemptive(troop_agi) pta_totalize(rate_preemptive_enh_st(troop_agi),2) end end class Game_Player < Game_Character #-------------------------------------------------------------------------- # エンカウント進行値の取得 #-------------------------------------------------------------------------- alias encounter_progress_value_enh_st encounter_progress_value def encounter_progress_value $game_party.pta_totalize(encounter_progress_value_enh_st,0) 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 $game_party.pta_totalize(gold_rate_enh_st,3) end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ドロップアイテム取得率の倍率を取得 #-------------------------------------------------------------------------- alias drop_item_rate_enh_st drop_item_rate def drop_item_rate $game_party.pta_totalize(drop_item_rate_enh_st,4) end end class RPG::BaseItem #-------------------------------------------------------------------------- # パーティ能力詳細データ #-------------------------------------------------------------------------- def extra_pta @extra_pta ||= create_extra_pta end #-------------------------------------------------------------------------- # パーティ能力詳細データの作成 #-------------------------------------------------------------------------- def create_extra_pta a = [0] * 5 DETAIL_PTA::WORDS.each_with_index {|w,i| a[i] += $1.to_i if /<#{w}[::](\S+)>/ =~ note} a end end