本帖最后由 RaidenInfinity 于 2016-11-12 18:21 编辑
默认脚本里面,remove_states_by_damage 是这样的:
#-------------------------------------------------------------------------- # ● 受到伤害时解除状态 #-------------------------------------------------------------------------- def remove_states_by_damage states.each do |state| if state.remove_by_damage && rand(100) < state.chance_by_damage remove_state(state.id) end end end
#--------------------------------------------------------------------------
# ● 受到伤害时解除状态
#--------------------------------------------------------------------------
def remove_states_by_damage
states.each do |state|
if state.remove_by_damage && rand(100) < state.chance_by_damage
remove_state(state.id)
end
end
end
很明显,它并没有item这个局部变量/参数。
要有效地解决这个问题的话,需要使用一个实例变量(前缀@)来存着技能或道具的实例。
于是请安装下面的这段插件脚本:
class Game_Battler < Game_BattlerBase alias :es_item_apply :item_apply def item_apply(user, item) @item = item es_item_apply(user,item) end #将[1,2,3,4]改成你要免除解除状态的属性ID组 #如果只有一个的话,[1] 这样就行了 alias :es_remove_states_by_damage :remove_states_by_damage def remove_states_by_damage if @item if [1,2,3,4].include?(@item.damage.element_id) return end end es_remove_states_by_damage end end
class Game_Battler < Game_BattlerBase
alias :es_item_apply :item_apply
def item_apply(user, item)
@item = item
es_item_apply(user,item)
end
#将[1,2,3,4]改成你要免除解除状态的属性ID组
#如果只有一个的话,[1] 这样就行了
alias :es_remove_states_by_damage :remove_states_by_damage
def remove_states_by_damage
if @item
if [1,2,3,4].include?(@item.damage.element_id)
return
end
end
es_remove_states_by_damage
end
end
|