#============================================================================== # ■ RGSS3 ステート付与時耐性累積ステート Ver1.00 by 星潟 #------------------------------------------------------------------------------ # ステートを付与された時、その戦闘中に限り # そのステートへの有効度が増減するステートを作成できるようになります。 # (戦闘終了によりリセットされます) # これにより、最初は毒が効くが連続して付与していると # 耐性がついていき、最終的に付与されなくなるようなゲームシステムを作成出来ます。 #============================================================================== # ステートのメモ欄に耐性累積値を指定します。 # 指定しない場合、全て0の扱いになります。 #------------------------------------------------------------------------------ # <耐性累積値:5> # # この場合、このステートを1回付与される度に有効度が5%ずつ減少します。 # (かかり辛くなります) #------------------------------------------------------------------------------ # <耐性累積値:-5> # # この場合、このステートを1回付与される度に有効度が5%ずつ増加します。 # (かかりやすくなります) #============================================================================== module AddedStateRate #耐性累積ステート設定用キーワードを指定。 Word = "耐性累積値" #状態異常耐性計算式タイプを指定。 #trueで乗算、falseで加算。 Type = true #全回復等のステート消去によって累積した耐性も削除されるかを指定。 #trueで削除、falseで維持。 Reco = false end class Game_BattlerBase #-------------------------------------------------------------------------- # ステート有効度の取得 #-------------------------------------------------------------------------- alias state_rate_resist_plus state_rate def state_rate(state_id) b = state_rate_resist_plus(state_id) * 100 if AddedStateRate::Type b = [b * (100 - added_state_rate_d(state_id)) / 100,0].max else b = [b - added_state_rate_d(state_id),0].max end b / 100 end #-------------------------------------------------------------------------- # ステート情報をクリア #-------------------------------------------------------------------------- alias clear_states_resist_plus clear_states def clear_states clear_states_resist_plus clear_add_state_rate if AddedStateRate::Reco end #-------------------------------------------------------------------------- # 累積ステート回数をクリア #-------------------------------------------------------------------------- def clear_add_state_rate @added_state_rate = {} end #-------------------------------------------------------------------------- # 累積ステート有効度の取得(実際に用いる値) #-------------------------------------------------------------------------- def added_state_rate_d(state_id) r = added_state_rate(state_id) r ? r : 0 end #-------------------------------------------------------------------------- # 累積ステート有効度の取得 #-------------------------------------------------------------------------- def added_state_rate(state_id) @added_state_rate ||= {} @added_state_rate[state_id] end #-------------------------------------------------------------------------- # 累積ステート有効度の加算 #-------------------------------------------------------------------------- def added_state_rate_plus(state_id) d = added_state_rate(state_id) @added_state_rate[state_id] = (d ? d : 0) + $data_states[state_id].resist_plus end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # 戦闘終了処理 #-------------------------------------------------------------------------- alias on_battle_end_state_resist_plus on_battle_end def on_battle_end on_battle_end_state_resist_plus clear_add_state_rate end #-------------------------------------------------------------------------- # ステートの付加 #-------------------------------------------------------------------------- alias add_state_state_resist_plus add_state def add_state(state_id) flag = state_addable?(state_id) && SceneManager.scene_is?(Scene_Battle) add_state_state_resist_plus(state_id) added_state_rate_plus(state_id) if flag end end class RPG::State < RPG::BaseItem #-------------------------------------------------------------------------- # 累積ステート有効度増加値 #-------------------------------------------------------------------------- def resist_plus @resist_plus ||= /<#{AddedStateRate::Word}[::](\S+)>/ =~ note ? $1.to_i : 0 end end