=begin ●SQ4風ステート耐性 ver1.0-------------------------------------(c)二段階直進  一度かかった状態異常などに対して耐性がつき、  その戦闘中は同じ状態異常などにかかりにくくすることが出来ます。  ○つかいかた  ・カスタマイズポイントにて、2回目以降かかりにくくしたいステートおよび   ステート付着率の計算式、補正値を設定します。  ・その戦闘中で一度かかったステートを再度付与しようとする場合は   ステート成功率にここで設定した補正を受けます。  ・耐性リセットステートとして設定したステートを受けると、   この効果で変化したステート耐性がすべて元に戻ります。     ・「抵抗しない」ステートについても適用できます。   強力だけど2回目以降は成功率が下がる補助ステートが作れたりします。 ○競合の可能性:Game_Battler,Game_Actor,Game_Enemy,Scene_Battleをエイリアス。         ▼ 素材 の下のほうに導入することを推奨します。 ○更新履歴 2012/ 8/24 ver1.0公開 =end #---------------------------------------------------------------------------- # ↓カスタマイズポイント module MAZ module SQ4 # この仕様を適用するステートID STATE = [2,3,4,5,6,7,8] # 補正率計算方式 # 0:減算…元々の成功率(%)から補正値を引いた確率になります。 # 元々が60%、補正値50%なら 60% - 50% = 10% になります。 # 計算結果が0以下のときは0%となります。 # 1:乗算…元々の成功率(%)に補正値を掛けた確率になります。 # 元々が60%、補正値50%なら 60% * 50% = 30% になります。 # ※「抵抗しない」ステートの元々の成功率は100%として扱います。 MODE = 0 # 2回目以降のステート付着率補正%(エネミー) RATE_E = 50 # 2回目以降のステート付着率補正%(アクター) RATE_P = 30 # 耐性リセットステートのID # ここで設定したステートにかかったときにステート耐性が初期値に戻ります。 RESET_STATE_ID = 20 end end # ↑カスタマイズポイントおわり #------------------------------------------------------------------------------ #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :resisting_state # 抵抗率上昇したステート #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias sq4_initialize initialize def initialize sq4_initialize @resisting_state = [] end #-------------------------------------------------------------------------- # ● ステートの付加 # state_id : ステート ID #-------------------------------------------------------------------------- alias sq4_add_state add_state def add_state(state_id) state = $data_states[state_id] s = true s = false if state == nil # ステートデータが無効 s = false if state_ignore?(state_id) # 無視すべきステート s = false if state?(state_id) # すでに付加されている s = false if state_offset?(state_id) # 相殺されるステート s = false if !$game_temp.in_battle # 戦闘中でない if s # 耐性リセットステートの処理 @resisting_state.clear if state_id == MAZ::SQ4::RESET_STATE_ID # 抵抗率上昇したステートに追加 @resisting_state.push(state_id) if MAZ::SQ4::STATE.include?(state_id) end sq4_add_state(state_id) end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● ステートの付加成功率の取得 # state_id : ステート ID #-------------------------------------------------------------------------- alias sq4_state_probability state_probability def state_probability(state_id) prob = sq4_state_probability(state_id) if @resisting_state.include?(state_id) case MAZ::SQ4::MODE when 0 # 減算 prob = [prob - MAZ::SQ4::RATE_P, 0].max when 1 # 乗算 prob = prob * MAZ::SQ4::RATE_P / 100 end end return prob end end #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● ステートの付加成功率の取得 # state_id : ステート ID #-------------------------------------------------------------------------- alias sq4_state_probability state_probability def state_probability(state_id) prob = sq4_state_probability(state_id) if @resisting_state.include?(state_id) case MAZ::SQ4::MODE when 0 # 減算 prob = [prob - MAZ::SQ4::RATE_E, 0].max when 1 # 乗算 prob = prob * MAZ::SQ4::RATE_E / 100 end end return prob end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias sq4_start start def start sq4_start #全員の耐性を初期化 ($game_party.members + $game_troop.members).each do |battler| battler.resisting_state.clear end end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- alias sq4_terminate terminate def terminate sq4_terminate #全員の耐性を初期化 $game_party.members.each do |battler| battler.resisting_state.clear end end end