Project1

标题: 请问如何让某一属性的攻击不会解除受攻击解除的状态 [打印本页]

作者: jianyulei    时间: 2016-11-12 17:50
标题: 请问如何让某一属性的攻击不会解除受攻击解除的状态
本帖最后由 jianyulei 于 2016-11-12 18:14 编辑

我在  def remove_states_by_damage段的解除条件判断里面添加if item.damage.element_id != 1
但不知道为何damage会报错,请问应该怎么写才能让设置了100%受攻击解除的状态在受到某一属性攻击时不被解除?


QQ图片20161112181311.png (5.08 KB, 下载次数: 16)

QQ图片20161112181311.png

作者: RaidenInfinity    时间: 2016-11-12 18:19
本帖最后由 RaidenInfinity 于 2016-11-12 18:21 编辑

默认脚本里面,remove_states_by_damage 是这样的:

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 受到伤害时解除状态
  3.   #--------------------------------------------------------------------------
  4.   def remove_states_by_damage
  5.     states.each do |state|
  6.       if state.remove_by_damage && rand(100) < state.chance_by_damage
  7.         remove_state(state.id)
  8.       end
  9.     end
  10.   end


很明显,它并没有item这个局部变量/参数。

要有效地解决这个问题的话,需要使用一个实例变量(前缀@)来存着技能或道具的实例。

于是请安装下面的这段插件脚本:

RUBY 代码复制
  1. class Game_Battler < Game_BattlerBase
  2.   alias :es_item_apply :item_apply
  3.   def item_apply(user, item)
  4.     @item = item
  5.     es_item_apply(user,item)
  6.   end
  7.  
  8.   #将[1,2,3,4]改成你要免除解除状态的属性ID组
  9.   #如果只有一个的话,[1] 这样就行了
  10.   alias :es_remove_states_by_damage :remove_states_by_damage
  11.   def remove_states_by_damage
  12.     if @item
  13.       if [1,2,3,4].include?(@item.damage.element_id)
  14.           return
  15.       end
  16.     end  
  17.     es_remove_states_by_damage
  18.   end
  19.  
  20. end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1