############### 徐々にステート解除率が変動するステートの作成 ############### # # # 一定ターンが経過した後、毎ターンダイスを降ってステートが解除されるか。 # # といった計算方式でステートの自然解除が計算されますが、 # # 一定ターンが経過してからは、 # # 毎ターン徐々にステート解除率が上昇するステートを作成します。 # # # # 「確率変動:」の後に上昇する割合を半角数字で入力してください。 # # # # 例えば5ターン目以降毎ターン 10% ずつ解除率を上昇させたいなら、 # # 「確率変動:10」という名前の属性を作成。 # # ステートの属性防御の所で「確率変動:10」にチェックを入れてください。 # # # # ちなみにステート解除率が徐々に低下するステートも同様に製作可能です。 # # 「確率変動:-10」ならば10%ずつ解除率が低下します。 # # # # この「確率変動:」の部分は設定で変更可能です。 # # # ############################################################################ # ここから設定 module Annex TURN_STEP_STATE_CODE = "確率変動:" # この名前の後につけられた数字だけ上昇 end # ここまで設定 #============================================================================== # ■ State #============================================================================== module RPG class State #------------------------------------------------------------------------ # ○ オブジェクト初期化 #------------------------------------------------------------------------ alias state_turn_step_initialize initialize def initialize state_turn_step_initialize @turn_step = nil end #------------------------------------------------------------------------ # ◎ 追加 変動値の取得 #------------------------------------------------------------------------ def turn_step # まだ変動値を取得してないなら取得する if @turn_step == nil @turn_step = get_turn_step end return @turn_step end #------------------------------------------------------------------------ # ◎ 追加 変動値の算出 #------------------------------------------------------------------------ def get_turn_step for i in @guard_element_set if $data_system.elements[i] =~ /#{Annex::TURN_STEP_STATE_CODE}([\-]?[0-9]+)/ return $1.to_i end end # なかった場合 0 を返す return 0 end end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● ステート自然解除 (ターンごとに呼び出し) (再定義) #-------------------------------------------------------------------------- def remove_states_auto for i in @states_turn.keys.clone # ☆ココから変更 # ターン値を減算 @states_turn[i] -= 1 if @states_turn[i] <= 0 # ステート自然解除の条件に合致するか確認 if remove_check($data_states[i], @states_turn[i]) remove_state(i) end end # ☆ココまで変更 end end #-------------------------------------------------------------------------- # ◎ 追加 ステート解除の計算 # state : ステート # turn : 経過ターン #-------------------------------------------------------------------------- def remove_check(state, turn) # ステート解除率 = 初期値 + 超過ターン数 * ターンによる変動値 prob = [state.turn_step * turn.abs + state.auto_release_prob, 0].max return rand(100) < prob end end