module Annex # 一定割合で行動不可能になるステートのハッシュ。 # 「"ステート名前"=>(行動不可能になる確率)」の形式で書く。 CANT_ACT_STATES_HASH = {"麻痺"=>60, "重度の麻痺"=>80} # 行動できない時に表示されるテキスト。 # 「name」は該当アクターの名前に、「state」は該当ステートの名前になる。 # ""とすれば表示されない。 CANT_ACT_STATES_TEXT = "nameはstateのため行動できなかった" end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ○ フレーム更新 (メインフェーズ ステップ 2 : アクション開始) #-------------------------------------------------------------------------- alias new_resist_update_phase4_step2 update_phase4_step2 def update_phase4_step2 skip = false unless @active_battler.current_action.forcing skip = check_actor_skip end # 行動不可能な場合 if skip.is_a?(String) # アクション強制対象のバトラーをクリア $game_temp.forcing_battler = nil # ステップ 1 に移行 @phase4_step = 1 # テキスト表示 unless Annex::CANT_ACT_STATES_TEXT == "" # テキスト取得 text = Annex::CANT_ACT_STATES_TEXT.dup # nameをアクター名に変更 text.sub!(/name/, @active_battler.name) text.sub!(/state/, skip) # ヘルプウィンドウに行動できない旨を表示。 @help_window.set_text(text, 1) # 20フレーム待つ @wait_count = 20 end # 強制的にupdate処理まで飛ばす # (returnの処理はaliasの順番などによっては正常に動作しないため) update # 行動可能な場合 else # 呼び戻し new_resist_update_phase4_step2 end end #-------------------------------------------------------------------------- # ◎追加:行動可能かどうかの確認 #-------------------------------------------------------------------------- def check_actor_skip # CANT_ACT_STATES_HASHのステート名で順にチェック for name in Annex::CANT_ACT_STATES_HASH.keys # 該当するステートに掛かっていない場合次へ next if @active_battler.state_name?(name) == false # 乱数が行動不能になる確率より低ければtrueを返す if rand(100) < Annex::CANT_ACT_STATES_HASH[name] return name end end return false end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ◎ 追加 指定された名前のステートのIDを取得 # state_name : ステート名 #-------------------------------------------------------------------------- def get_state_id(state_name) for i in $data_states next if i == nil if i.name == state_name return (i.id) end end return 0 end #-------------------------------------------------------------------------- # ◎ 追加 指定された名前のステートになっているかの確認 # state_name : ステート名 #-------------------------------------------------------------------------- def state_name?(state_name) id = get_state_id(state_name) return state?(id) end end