【解決済み】【RGSS3】自動戦闘AIについてここまでわかったのでどなたかヘルプ願います
Posted: 2016年8月01日(月) 03:33
RGSS3を読める方に二つほど質問です、自動戦闘AI強化の為にベースのスクリプトを弄ってるのですが
これは何をやりたいかと申しますと
敵対象の場合
・対象が瀕死ではない(HPが4分の1以上)場合、ダメージのない行動(弱体や状態異常)を優先します
・ダメージのある行動の場合、行動可能な対象と混乱していない対象を選びたがります
・更に対象のHPを見て一撃で倒せる可能性がある場合はそれを狙います
・最初から一撃で倒せる弱い敵を最優先で倒そうとします
味方対象の場合
・対象が瀕死ではない(HPが4分の1以上)場合、ダメージのない行動(強化や補助)を優先します
・更に対象のMPが少ない(4分の1以下)場合はMPを回復する行動を取りたがります
・回復スキルの場合、対象のHPが2分の1以下で優先し始め、瀕死(HPが4分の1以下)の対象を高確率で回復させます
・死亡した対象を最優先で蘇生させます
数値を微調整しながらテストプレイを繰り返しても前述の仕様になってるか
体感的に微妙すぎてもっといい弄り方があるのではないか…というお話です。
もう一つの質問はSupponの意味不明ブログというサイトのテクニックである
RGSS2備忘録その7 臨機応変に行動できる自動戦闘のアクター
これのACE版を作ろうとしたのですが
恐らくあの辺りの場所に
if @subject.actor?
@subject.自動行動の再抽選 if @subject.自動戦闘フラグがONか?
end
みたいな感じのものを入れればいいのではないのかと思うのですがそれ以上がわかりません
コード: 全て選択
#--------------------------------------------------------------------------
# ● スキル/アイテムの評価(ターゲット指定)
#--------------------------------------------------------------------------
def evaluate_item_with_target(target)
target.result.clear
target.make_damage_value(subject, item)
if item.for_opponent?
# return target.result.hp_damage.to_f / [target.hp, 1].max
n = target.result.hp_damage.to_f / [target.hp, 1].max
if target.hp > target.mhp / 4
n += 0.2 if target.result.hp_damage == 0
end
if target.result.hp_damage != 0
n += 0.2 if target.movable? && !target.confusion?
n += 0.3 if target.result.hp_damage > target.hp
n += 0.5 if target.result.hp_damage > target.mhp
end
else
recovery = [-target.result.hp_damage, target.mhp - target.hp].min
n = recovery.to_f / target.mhp
if target.hp > target.mhp / 4
n += 0.2 if target.result.hp_damage == 0
n += 0.1 if target.result.mp_damage != 0 && target.mp < target.mmp / 4
end
if target.result.hp_damage != 0
n += 0.3 if target.hp < target.mhp / 2
n += 0.2 if target.hp < target.mhp / 4
n += 0.5 if target.hp == 0
end
# return recovery.to_f / target.mhp
end
return n
end
敵対象の場合
・対象が瀕死ではない(HPが4分の1以上)場合、ダメージのない行動(弱体や状態異常)を優先します
・ダメージのある行動の場合、行動可能な対象と混乱していない対象を選びたがります
・更に対象のHPを見て一撃で倒せる可能性がある場合はそれを狙います
・最初から一撃で倒せる弱い敵を最優先で倒そうとします
味方対象の場合
・対象が瀕死ではない(HPが4分の1以上)場合、ダメージのない行動(強化や補助)を優先します
・更に対象のMPが少ない(4分の1以下)場合はMPを回復する行動を取りたがります
・回復スキルの場合、対象のHPが2分の1以下で優先し始め、瀕死(HPが4分の1以下)の対象を高確率で回復させます
・死亡した対象を最優先で蘇生させます
数値を微調整しながらテストプレイを繰り返しても前述の仕様になってるか
体感的に微妙すぎてもっといい弄り方があるのではないか…というお話です。
もう一つの質問はSupponの意味不明ブログというサイトのテクニックである
RGSS2備忘録その7 臨機応変に行動できる自動戦闘のアクター
これのACE版を作ろうとしたのですが
コード: 全て選択
#--------------------------------------------------------------------------
# ● 戦闘行動の処理
#--------------------------------------------------------------------------
def process_action
return if scene_changing?
if !@subject || !@subject.current_action
@subject = BattleManager.next_subject
end
return turn_end unless @subject
if @subject.current_action
@subject.current_action.prepare
#←ここにですね
if @subject.current_action.valid?
@status_window.open
execute_action
end
@subject.remove_current_action
end
process_action_end unless @subject.current_action
end
if @subject.actor?
@subject.自動行動の再抽選 if @subject.自動戦闘フラグがONか?
end
みたいな感じのものを入れればいいのではないのかと思うのですがそれ以上がわかりません