以下引用光郎于2007-12-30 20:43:37的发言:
自动战斗的人要比我方等级高装备好。
新手师父,大将军,言情刺客等因剧情暂时加入的人。通常是不死+保证游戏可通过剧情战斗的存在。
#--------------------------------------------------------------------------
# ● 戦闘行動の作成 (自動戦闘用)
#--------------------------------------------------------------------------
def make_action
@action.clear
return unless movable?
action_list = []
action = Game_BattleAction.new(self)
action.set_attack
action.evaluate
action_list.push(action)
for skill in skills
action = Game_BattleAction.new(self)
action.set_skill(skill.id)
action.evaluate
action_list.push(action)
end
max_value = 0
for action in action_list
if action.value > max_value
@action = action
max_value = action.value
end
end
end
#--------------------------------------------------------------------------
# ● 行動の価値評価 (自動戦闘用)
# @value および @target_index を自動的に設定する。
#--------------------------------------------------------------------------
def evaluate
if attack?
evaluate_attack
elsif skill?
evaluate_skill
else
@value = 0
end
if @value > 0
@value + rand(nil)
end
end
#--------------------------------------------------------------------------
# ● 通常攻撃の評価
#--------------------------------------------------------------------------
def evaluate_attack
@value = 0
for target in opponents_unit.existing_members
value = evaluate_attack_with_target(target)
if value > @value
@value = value
@target_index = target.index
end
end
end
#--------------------------------------------------------------------------
# ● 通常攻撃の評価 (ターゲット指定)
# target : 対象バトラー
#--------------------------------------------------------------------------
def evaluate_attack_with_target(target)
target.clear_action_results
target.make_attack_damage_value(battler)
return target.hp_damage.to_f / [target.hp, 1].max
end
#--------------------------------------------------------------------------
# ● スキルの評価
#--------------------------------------------------------------------------
def evaluate_skill
@value = 0
unless battler.skill_can_use?(skill)
return
end
if skill.for_opponent?
targets = opponents_unit.existing_members
elsif skill.for_user?
targets = [battler]
elsif skill.for_dead_friend?
targets = friends_unit.dead_members
else
targets = friends_unit.existing_members
end
for target in targets
value = evaluate_skill_with_target(target)
if skill.for_all?
@value += value
elsif value > @value
@value = value
@target_index = target.index
end
end
end
#--------------------------------------------------------------------------
# ● スキルの評価 (ターゲット指定)
# target : 対象バトラー
#--------------------------------------------------------------------------
def evaluate_skill_with_target(target)
target.clear_action_results
target.make_obj_damage_value(battler, skill)
if skill.for_opponent?
return target.hp_damage.to_f / [target.hp, 1].max
else
recovery = [-target.hp_damage, target.maxhp - target.hp].min
return recovery.to_f / target.maxhp
end
end
以下引用veal于2007-12-31 8:10:55的发言:
RMVX的自动战斗是有AI的,不是XP那种随机行动
大概就是评估每个行动(普通攻击、每种特技对每个可能的目标等等)的价值,然后取价值最大的作为最终行动。
以下引用veal于2007-12-31 8:18:43的发言:
特别的是自动行动角色不会用物品..估计杂兵战用了某个珍贵药品的话会被主角打死吧
另外那句rand(nil)很强大..
以下引用v2sam于2008-1-11 11:31:58的发言:
有精确到 HP<10% 就逃跑 if逃跑失败就自杀的AI么? 哈哈哈哈
以上纯水,VX试用版组件限制数量搞得很多事情无法落实.
以下引用Eclair于2008-1-11 23:10:56的发言:
撒..小小的失望下...
看到标题偶当作优游的处女脚本呢...
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |