################## 敵味方ランダムで攻撃するステートの作成 ################## # # # 敵も味方もランダムで通常攻撃するステートを作成します。 # # # # CONFUSION_STATES配列で定義したステート名にかかると、 # # 敵・味方ランダムで通常攻撃するようになります。 # # # ############################################################################ # ここから設定 module Annex CONFUSION_STATES = ["混乱", "自暴自棄"] # 混乱ステートの名前 end # ここまで設定 #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ○ コマンド入力可能判定 #-------------------------------------------------------------------------- alias random_attack_state_inputable? inputable? def inputable? # 混乱しているならFalseを返す return false if check_state_by_array(Annex::CONFUSION_STATES) # 呼び戻したものをreturn return random_attack_state_inputable? end #-------------------------------------------------------------------------- # ◎ 追加 指定された名前のステートの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 #-------------------------------------------------------------------------- # ◎ 追加:複数のステートのうちどれか一つでも含まれているかの確認 # state_names : ステート名の配列 #-------------------------------------------------------------------------- def check_state_by_array(state_names) # 一つでも含まれていればtrueを返す for name in state_names if state_name?(name) return true end end return false end end class Scene_Battle #-------------------------------------------------------------------------- # ○ フレーム更新 (メインフェーズ ステップ 2 : アクション開始) #-------------------------------------------------------------------------- alias random_attack_state_update_phase4_step2 update_phase4_step2 def update_phase4_step2 # 強制アクションでなければ unless @active_battler.current_action.forcing # 混乱ステート名のステートに掛かっていれば if @active_battler.check_state_by_array(Annex::CONFUSION_STATES) # アクションに攻撃を設定 @active_battler.current_action.kind = 0 @active_battler.current_action.basic = 0 end end # 呼び戻し random_attack_state_update_phase4_step2 end #-------------------------------------------------------------------------- # ○ 基本アクション 結果作成 #-------------------------------------------------------------------------- alias random_attack_state_make_basic_action_result make_basic_action_result def make_basic_action_result # 混乱ステート名のステートに掛かっていれば if @active_battler.check_state_by_array(Annex::CONFUSION_STATES) # アニメーション ID を設定 @animation1_id = @active_battler.animation1_id @animation2_id = @active_battler.animation2_id # ターゲットを決定 actor_size = 0 for actor in $game_party.actors next if not actor.exist? actor_size += 1 end enemy_size = 0 for enemy in $game_troop.enemies next if not enemy.exist? enemy_size += 1 end # enemy_size + actor_size の乱数からターゲットをエネミーかアクターか決定 if rand(actor_size + enemy_size) < actor_size # ターゲットをアクターに設定 target = $game_party.random_target_actor else # ターゲットをエネミーに設定 target = $game_troop.random_target_enemy end # 対象側バトラーの配列を設定 @target_battlers = [target] # 通常攻撃の効果を適用 for target in @target_battlers target.attack_effect(@active_battler) end return end # 呼び戻し random_attack_state_make_basic_action_result end end