#--------------------------------------------------------------------------
# ● 行动的价值评价(自动战斗用)
# 自动设置 @value 和 @target_index 。
#--------------------------------------------------------------------------
def evaluate
@value = 0
evaluate_item if valid?#如果可以行动则开始计算评价
@value += rand if @value > 0#评价为正数时加上一个随机数(0-1)
self#[color=Red][b]返回自身??????[/b][/color]
end
#--------------------------------------------------------------------------
# ● 技能/物品的评价
# 按我的理解:评价只根据目标数量和伤害来进行计算,当目标为全体时,每一个目标都会给评价加分;当目标为单体时,则评分为当前目标的分数。
#--------------------------------------------------------------------------
def evaluate_item
item_target_candidates.each do |target|#对每一个技能的候选目标进行获取
value = evaluate_item_with_target(target)#对指定的目标计算评价
if item.for_all?#如果技能作用于全体
@value += value#将计算得来的评价累加到已有评价
elsif value > @value#或者如果计算出来的评价大于已有评价
@value = value#将已有评价重新赋值为计算出的评价
@target_index = target.index#技能目标赋值为当前计算的目标
end
end
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#将目标受到的伤害经过计算后返回评价。当伤害越高,目标的生命值越低,评价越高
else#如果技能不是对敌人有效(对队友有效的情况)
recovery = [-target.result.hp_damage, target.mhp - target.hp].min#计算目标实际受到的治疗量。治疗溢出忽略不计。
return recovery.to_f / target.mhp#将治疗量进行计算后返回评价。当治疗越高,目标的最大生命值越低,评价越高。
end
end