#============================================================================== # ■ RGSS2 エネミー最適化行動スキル Ver1.00 by 星潟 #------------------------------------------------------------------------------ # 敵の行動に味方と同じような最適行動をとらせるスキルIDを設定できます。 # そのスキルIDのスキルが敵の行動として選択された際 # そのスキルを使用せず、アクター側の自動行動と同じように # そのエネミーに設定された使用可能なスキルの中から # 最適な物(行動評価値が高いスキル)を自動選択して使用します。 # この際、エネミーに設定した行動条件や優先度は完全に無視されます。 # # 最適化行動をとり、なおかつ使用スキルの対象がランダムでない場合 # 狙われ率を無視して対象を選択して来ます。 # また、あくまで自動行動で最適と判断されたスキルの為 # 本当の意味で最適化されている物とは言えません。 # (複数のエネミーが最適行動を取る場合、回復が単体に偏る等) # # 行動評価値の計算の基本部分はアクターと同じ為 # その部分の修正スクリプトがある場合、こちらにも影響があります。 #============================================================================== # スキルのメモ欄に設定。 #============================================================================== # <敵行動評価変動値:10> # # このスキルの評価として、本来の評価に加え、対象のHPを10%削れるのと # 同等の価値があると見做されます。 #------------------------------------------------------------------------------ # <最適行動時禁止> # # このスキルは最適化行動の際に使用するスキルに含まれません。 #============================================================================== # 敵のメモ欄に設定。 #============================================================================== # <最適行動時禁止:10> # # この敵は最適行動時にスキルID10を選択しません。 #------------------------------------------------------------------------------ # <最適行動時禁止:10,11,12> # # この敵は最適行動時にスキルID10、11、12を選択しません。 #------------------------------------------------------------------------------ # <最適行動時禁止:0> # # この敵は最適行動時に通常攻撃を選択しません。 #------------------------------------------------------------------------------ # <最適行動時禁止:0,-1,-2,-3> # # この敵は最適行動時に通常攻撃、防御、逃走、様子を見るを選択しません。 #============================================================================== module OptimisationEA #最適行動化スキルIDを指定。 SID = 85 #空の配列を用意。 V = [] #通常攻撃に対する評価値変動値を設定。 V[0] = 5 #防御に対する評価値変動値を設定。 V[1] = 1 #逃走に対する評価値変動値を設定。 V[2] = 1 #様子見に対する評価値変動値を設定。 V[3] = 1 #最適行動用評価値変動値設定用キーワードを指定。 Word1 = "敵行動評価変動値" #最適行動時に除外するスキル設定用キーワードを指定。 Word2 = "最適行動時禁止" end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # 戦闘行動の作成 #-------------------------------------------------------------------------- alias make_action_optimisation_ea make_action def make_action make_action_optimisation_ea return unless (@action.kind == 1 && @action.skill_id == OptimisationEA::SID) @action.clear action_list = [] eas = enemy.optimisation_use_seal for act in enemy.actions action = Game_BattleAction.new(self) action.kind = act.kind action.basic = act.basic action.skill_id = act.skill_id action.evaluate case act.kind when 0 b = action.basic next if eas.include?(-b) action.value += OptimisationEA::V[b].to_f / 100 when 1 s = $data_skills[act.skill_id] next if s.optimisation_use_seal next if eas.include?(act.skill_id) next unless skill_can_use?(s) action.value += eval(s.optimisation_evaluate).to_f / 100 end action_list.push(action) end return if action_list.empty? max_value = 0 sub = [] for action in action_list if action.value > max_value sub = [action] max_value = action.value elsif action.value == max_value sub.push(action) end end @action = sub[rand(sub.size)] end end class RPG::Skill < RPG::UsableItem #-------------------------------------------------------------------------- # 敵行動評価変動値 #-------------------------------------------------------------------------- def optimisation_evaluate @optimisation_evaluate ||= /<#{OptimisationEA::Word1}[::](\S+)>/ =~ note ? $1.to_s : "0" end #-------------------------------------------------------------------------- # 最適行動時禁止 #-------------------------------------------------------------------------- def optimisation_use_seal (@optimisation_use_seal ||= /<#{OptimisationEA::Word2}>/ =~ note ? 1 : 0) == 1 end end class RPG::Enemy #-------------------------------------------------------------------------- # 最適行動時禁止 #-------------------------------------------------------------------------- def optimisation_use_seal @optimisation_use_seal ||= create_optimisation_use_skill end #-------------------------------------------------------------------------- # 最適行動時禁止データ作成 #-------------------------------------------------------------------------- def create_optimisation_use_skill t = /<#{OptimisationEA::Word2}[::](\S+)>/ =~ note ? $1.to_s : "" (t.split(/\s*,\s*/).inject([]) {|r,i| r += [i.to_i]}).uniq end end