Control.lua 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. Control = Buff:New()
  2. --初始化Buff,通过传入一些自定义参数控制成长相关的数值
  3. function Control:SetData(...)
  4. self.ctrlType = ...
  5. self.cover = true --控制效果可被覆盖
  6. -- 刷新排序等级
  7. self.sort = 4
  8. self.isDeBuff = true
  9. end
  10. --初始化后调用一次
  11. function Control:OnStart()
  12. if self.ctrlType == 1 then --眩晕
  13. self.target.ctrl_dizzy = true
  14. elseif self.ctrlType == 2 then --沉默
  15. self.target.ctrl_slient = true
  16. elseif self.ctrlType == 3 then --嘲讽(包括沉默)
  17. self.target.lockTarget = self.caster
  18. self.target.ctrl_slient = true
  19. elseif self.ctrlType == 4 then --禁疗
  20. self.target.ctrl_noheal = true
  21. elseif self.ctrlType == 5 then --致盲
  22. self.target.ctrl_blind = true
  23. elseif self.ctrlType == 7 then --麻痹
  24. self.target.ctrl_palsy = true
  25. elseif self.ctrlType == 8 then --< 冰冻
  26. self.target.ctrl_frozen = true
  27. self.frozen_beHitTimes = 0
  28. self.onRoleBeHit = function(caster)
  29. self.frozen_beHitTimes = self.frozen_beHitTimes + 1
  30. if self.frozen_beHitTimes == 3 then
  31. BattleLogic.BuffMgr:ClearBuff(self.target, function(buff)
  32. return buff.type == BuffName.Control and buff.ctrlType == ControlType.Frozen
  33. end)
  34. end
  35. end
  36. self.target.Event:AddEvent(BattleEventName.RoleBeHit, self.onRoleBeHit)
  37. elseif self.ctrlType == 9 then --< 混乱
  38. self.target.ctrl_chaos = true
  39. elseif self.ctrlType == 10 then --< 封印
  40. self.target.ctrl_seal = true
  41. end
  42. self.target.ctrltimes = self.target.ctrltimes + 1
  43. end
  44. --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd
  45. function Control:OnTrigger()
  46. return true
  47. end
  48. --效果结束时调用一次
  49. function Control:OnEnd()
  50. if self.ctrlType == 1 then --眩晕
  51. self.target.ctrl_dizzy = false
  52. elseif self.ctrlType == 2 then --沉默
  53. self.target.ctrl_slient = false
  54. elseif self.ctrlType == 3 then --嘲讽(包括沉默)
  55. self.target.lockTarget = nil
  56. self.target.ctrl_slient = false
  57. elseif self.ctrlType == 4 then --禁疗
  58. self.target.ctrl_noheal = false
  59. elseif self.ctrlType == 5 then --致盲
  60. self.target.ctrl_blind = false
  61. elseif self.ctrlType == 7 then --麻痹
  62. self.target.ctrl_palsy = false
  63. elseif self.ctrlType == 8 then --< 冰冻
  64. self.target.ctrl_frozen = false
  65. self.target.Event:RemoveEvent(BattleEventName.RoleBeHit, self.onRoleBeHit)
  66. elseif self.ctrlType == 9 then --< 混乱
  67. self.target.ctrl_chaos = false
  68. elseif self.ctrlType == 10 then --< 封印
  69. self.target.ctrl_seal = false
  70. end
  71. end
  72. --只有当cover字段为true时触发,返回true则被新效果覆盖
  73. function Control:OnCover(newBuff)
  74. -- LogError("new:"..newBuff.duration.." old:"..self.duration)
  75. if newBuff.ctrlType == self.ctrlType then
  76. if newBuff.duration < self.duration then
  77. newBuff.duration = self.duration
  78. newBuff.roundDuration = self.roundDuration
  79. end
  80. if newBuff.ctrlType == 8 then --冰冻 击碎次数不刷新
  81. newBuff.frozen_beHitTimes = self.frozen_beHitTimes
  82. end
  83. end
  84. return newBuff.ctrlType == self.ctrlType
  85. end
  86. -- 比较buff
  87. function Control:OnCompare(buff)
  88. return self.ctrlType == buff.ctrlType
  89. end
  90. return Control