Project1

标题: 怎样让指定状态在受到特定属性攻击时有一定几率解除(... [打印本页]

作者: 世界第一中二    时间: 2019-1-29 14:35
标题: 怎样让指定状态在受到特定属性攻击时有一定几率解除(...
本帖最后由 世界第一中二 于 2019-1-30 16:52 编辑

rt
比如灼烧状态,在受到水属性伤害时,有90%几率解除
或者冰封状态,在受到火属性伤害时,有50%几率解除
类似这种效果应该怎么做?
ps:该伤害可以来自敌人、道具、以及自残技能,只要属性符合就能触发
作者: KB.Driver    时间: 2019-1-29 15:51


RUBY 代码复制
  1. #==============================================================================
  2. # ■ 特定属性攻击移除状态
  3. #------------------------------------------------------------------------------
  4. #  状态备注中写<移除属性 n,移除率 x%>
  5. #   例 <移除属性 3,移除率 90%>
  6. #
  7. #   遗憾的是,目前只能设置一个移除属性
  8. #==============================================================================
  9. class Game_Battler
  10.   #--------------------------------------------------------------------------
  11.   # ● [别名修改]受到伤害时解除状态
  12.   #--------------------------------------------------------------------------
  13.   alias remove_states_by_element_damage remove_states_by_damage
  14.   def remove_states_by_damage
  15.     remove_states_by_element_damage                  # 调用原方法
  16.     element_id = @result.item.damage.element_id      # 所受伤害属性
  17.     states.each do |state|
  18.       next unless state.remove_by_element?           # 由属性攻击移除?
  19.       next unless state.remove_element == element_id # 是所受伤害属性?
  20.       next unless rand(100) < state.remove_rate      # 概率符合?
  21.       remove_state(state.id)                         # 移除状态
  22.     end     
  23.   end
  24. end
  25.  
  26. class Game_ActionResult
  27.   #--------------------------------------------------------------------------
  28.   # ● [别名修改]生成伤害
  29.   #--------------------------------------------------------------------------
  30.   alias :make_damage_for_item :make_damage
  31.   def make_damage(value, item)
  32.     @item = item
  33.     make_damage_for_item(value, item)
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● [追加]物品/技能
  37.   #--------------------------------------------------------------------------
  38.   def item
  39.     @item
  40.   end
  41. end
  42.  
  43. class RPG::State
  44.   attr_reader :remove_element, :remove_rate
  45.   #--------------------------------------------------------------------------
  46.   # ● [追加]由属性攻击移除?
  47.   #--------------------------------------------------------------------------
  48.   def remove_by_element?
  49.     if note =~ /<移除属性[ :=]*(\d+)[ :=,]*移除率[ :=]*(\d+)%?>/
  50.       @remove_element, @remove_rate = $1.to_i, $2.to_i
  51.       return true
  52.     else
  53.       return false
  54.     end
  55.   end
  56. end


新建工程测试通过,如果有问题请报告。
水平有限,暂时没办法做到多个属性来移除。
另外,没有测试与技能多属性脚本的兼容性,这个咱不负责0 0




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