Immune.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. -- 免疫效果
  2. Immune = Buff:New()
  3. local immune0 = function(buff)
  4. return buff.type == BuffName.Control or buff.isDeBuff or buff.type == BuffName.DOT
  5. end
  6. local immune1 = function(buff)
  7. return buff.type == BuffName.Control
  8. end
  9. local immune2 = function(buff)
  10. return buff.type == BuffName.DOT
  11. end
  12. local immune3 = function(buff)
  13. return buff.type == BuffName.Shield and buff.shieldType == ShieldTypeName.AllReduce
  14. end
  15. --初始化Buff,通过传入一些自定义参数控制成长相关的数值
  16. function Immune:SetData(...)
  17. self.immuneType = ...
  18. self.isBuff = true
  19. self.IsOnlyImmune = false --唯一免疫不叠加
  20. -- 刷新排序等级
  21. self.sort = 4
  22. end
  23. --初始化后调用一次
  24. function Immune:OnStart()
  25. if self.IsOnlyImmune then
  26. local immune
  27. if self.immuneType == 0 then --免疫负面状态(控制状态、减益状态和持续伤害状态)
  28. immune = immune0
  29. elseif self.immuneType == 1 then --免疫控制状态
  30. immune = immune1
  31. elseif self.immuneType == 2 then --免疫dot
  32. immune = immune2
  33. elseif self.immuneType == 3 then --免疫无敌盾
  34. immune = immune3
  35. end
  36. for i = 1, self.target.buffFilter.size do
  37. if self.target.buffFilter.buffer[i] == immune then
  38. self.target.buffFilter:Remove(i)
  39. break
  40. end
  41. end
  42. end
  43. if self.immuneType == 0 then --免疫负面状态(控制状态、减益状态和持续伤害状态)
  44. self.target.buffFilter:Add(immune0)
  45. elseif self.immuneType == 1 then --免疫控制状态
  46. self.target.buffFilter:Add(immune1)
  47. elseif self.immuneType == 2 then --免疫dot
  48. self.target.buffFilter:Add(immune2)
  49. elseif self.immuneType == 3 then --免疫无敌盾
  50. self.target.buffFilter:Add(immune3)
  51. end
  52. end
  53. --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd
  54. function Immune:OnTrigger()
  55. return true
  56. end
  57. function Immune:OnImmuneTrigger()
  58. self.target.Event:DispatchEvent(BattleEventName.ImmuneTrigger, self)
  59. BattleLogic.Event:DispatchEvent(BattleEventName.ImmuneTrigger, self)
  60. end
  61. --效果结束时调用一次
  62. function Immune:OnEnd()
  63. local immune
  64. if self.immuneType == 0 then --免疫负面状态(控制状态、减益状态和持续伤害状态)
  65. immune = immune0
  66. elseif self.immuneType == 1 then --免疫控制状态
  67. immune = immune1
  68. elseif self.immuneType == 2 then --免疫dot
  69. immune = immune2
  70. elseif self.immuneType == 3 then --免疫无敌盾
  71. immune = immune3
  72. end
  73. for i = 1, self.target.buffFilter.size do
  74. if self.target.buffFilter.buffer[i] == immune then
  75. self.target.buffFilter:Remove(i)
  76. -- LogError("removed1!!!")
  77. break
  78. end
  79. end
  80. end
  81. --只有当cover字段为true时触发,返回true则被新效果覆盖
  82. function Immune:OnCover(newBuff)
  83. return true
  84. end
  85. -- 比较buff
  86. function Immune:OnCompare(buff)
  87. return buff.immuneType == self.immuneType
  88. end
  89. return Immune