############################ エネミーの思考強化 ############################ # # # 敵の思考を一部強化します。 # # 強化可能な項目は以下の通り。 # # # # ・スキルが使えない時にそのスキル使おうとするか否か # # たとえば沈黙状態や、SPが足りない時などに技を使おうとして # # 「何もしない」になることがあるので、使えるかを確認するかどうか。 # # trueにすると、使えないスキルを使おうとしなくなります。 # # 敵ごとに設定することはできません。 # # # # ・レーティング最大と最小の差をどの程度まで許容するか # # デフォルト行動の候補のすべての中でレーティングが最大のものから # # 3以上の差があるものは行動の候補に追加されません。 # # たとえばレーティング10の行動が候補に入っている場合、 # # デフォルトではレーティング7以下の行動は絶対に起こしません。 # # この値を設定可能にしました。 # # ちなみに0にすると一切の行動をしなくなります。 # # # ############################################################################ # ここから設定 module Annex SKILL_USABLE_CHECK = true # スキルを行動の候補に入れる際に、スキルが使用可能かを確認する # true : チェックをして、使えない場合は候補に入れない # false : チェックをせず、使えないスキルを使用しようとした場合「何もしない」になる MAX_RATE = 3 # 最大のレーティング値(デフォルトでは3) end # ここまで設定 #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● アクション作成 (再定義) #-------------------------------------------------------------------------- def make_action # カレントアクションをクリア self.current_action.clear # 動けない場合 unless self.movable? # メソッド終了 return end # 現在有効なアクションを抽出 available_actions = [] rating_max = 0 # ☆ココから追加 # 乱数の初期化 srand(Integer(Time.new) + rand(256)) # ☆ココまで追加 for action in self.actions # ターン 条件確認 n = $game_temp.battle_turn a = action.condition_turn_a b = action.condition_turn_b if (b == 0 and n != a) or (b > 0 and (n < 1 or n < a or n % b != a % b)) next end # HP 条件確認 if self.hp * 100.0 / self.maxhp > action.condition_hp next end # レベル 条件確認 if $game_party.max_level < action.condition_level next end # スイッチ 条件確認 switch_id = action.condition_switch_id if switch_id > 0 and $game_switches[switch_id] == false next end # ☆ココから追加 # スキル使用可能かどうかを確認 if action.kind == 1 and Annex::SKILL_USABLE_CHECK unless self.skill_can_use?(action.skill_id) next end end # ☆ココまで追加 # 条件に該当 : このアクションを追加 available_actions.push(action) if action.rating > rating_max rating_max = action.rating end end # ☆ココから変更 # レーティングの合計が 0 の場合 return return if rating_max == 0 # 0 〜 MAX_RATE-1 までの乱数の作成 value = rand(Annex::MAX_RATE) # 最大のレーティング値より value 以上低いものを配列から除外 available_actions.reject!{|a| a.rating < rating_max - value} # アクションの決定 action = available_actions[rand(available_actions.size)] self.current_action.kind = action.kind self.current_action.basic = action.basic self.current_action.skill_id = action.skill_id self.current_action.decide_random_target_for_enemy return # ☆ココまで変更 end end