加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
在Game_Action类的evaluate和evaluate_item方法用来计算技能/物品的使用评分,用来进行自动战斗。
脚本如下:
#-------------------------------------------------------------------------- # ● 行动的价值评价(自动战斗用) # 自动设置 @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
#--------------------------------------------------------------------------
# ● 行动的价值评价(自动战斗用)
# 自动设置 @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
简而言之:评价计算的机制是:无论是单体技能还是群体技能,都会对每一个目标计算评价,在最后进行累加(单体技能只有一个目标,因此没有累加)。目标的评价由伤害/治疗决定,并且忽略溢出。因此,伤害/治疗越高,目标生命值/最大生命值越低,评价越高。对于伤害技能而言,评价高表示该技能容易一击杀死敌人;对于治疗技能而言,评价高表示该技能容易一击回满状态。但是过高的评价会造成技能浪费。
以上就是我根据脚本理解而来的系统评价行动的机制,不知道是不是正确的,希望各位指教。
另:脚本中我有注释了一行红色加粗的文字,我暂时不知道这句话的意义。望知道的告知! |