有什么问题吗?楼主的思路没错呀
假设RPG::UsableItem类定义了方法always_critical?(必爆)、critical_rate(暴击倍率)
并且假设如果技能没有备注的话,critical_rate返回false
看楼主应该已经会定义了
Game_Battler有这段脚本
#--------------------------------------------------------------------------
# ● 计算技能/物品的必杀几率
#--------------------------------------------------------------------------
def item_cri( user, item)
return 1 if item.always_critical ? # 加这行。最好使用alias的方法,这里不再赘述。
item.damage .critical ? user.cri * ( 1 - cev) : 0
end
#...
#--------------------------------------------------------------------------
# ● 计算伤害
#--------------------------------------------------------------------------
def make_damage_value( user, item)
value = item.damage .eval ( user, self , $game_variables )
value *= item_element_rate( user, item)
value *= pdr if item.physical ?
value *= mdr if item.magical ?
value *= rec if item.damage .recover ?
# value = apply_critical(value) if @result.critical 原来的代码
if @result .critical
# 如果技能没有特殊效果,还是用原来的算法
# 当然也可以直接把一般技能的critical_rate设为3
value = item.critical_rate ? value * item.critical_rate : apply_critical( value)
end
value = apply_variance( value, item.damage .variance )
value = apply_guard( value)
@result .make_damage ( value.to_i , item)
end
#--------------------------------------------------------------------------
# ● 计算技能/物品的必杀几率
#--------------------------------------------------------------------------
def item_cri( user, item)
return 1 if item.always_critical ? # 加这行。最好使用alias的方法,这里不再赘述。
item.damage .critical ? user.cri * ( 1 - cev) : 0
end
#...
#--------------------------------------------------------------------------
# ● 计算伤害
#--------------------------------------------------------------------------
def make_damage_value( user, item)
value = item.damage .eval ( user, self , $game_variables )
value *= item_element_rate( user, item)
value *= pdr if item.physical ?
value *= mdr if item.magical ?
value *= rec if item.damage .recover ?
# value = apply_critical(value) if @result.critical 原来的代码
if @result .critical
# 如果技能没有特殊效果,还是用原来的算法
# 当然也可以直接把一般技能的critical_rate设为3
value = item.critical_rate ? value * item.critical_rate : apply_critical( value)
end
value = apply_variance( value, item.damage .variance )
value = apply_guard( value)
@result .make_damage ( value.to_i , item)
end
其他效果类似处理