PropertyChange.lua 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. PropertyChange = Buff:New()
  2. --初始化Buff,通过传入一些自定义参数控制成长相关的数值
  3. function PropertyChange:SetData(...)
  4. self.propertyName,
  5. self.Value,
  6. self.changeType,
  7. self.propertyChangeType = ... --< 属性状态
  8. self.cover = false --
  9. self.layer = 1
  10. self.maxLayer = 0
  11. if self.changeType == 1 then --加算
  12. self.isBuff = true
  13. elseif self.changeType == 2 then --乘加算(百分比属性加算)
  14. self.isBuff = true
  15. elseif self.changeType == 3 then --减算
  16. self.isDeBuff = true
  17. elseif self.changeType == 4 then --乘减算(百分比属性减算)
  18. self.isDeBuff = true
  19. end
  20. -- 刷新排序等级
  21. self.sort = 4
  22. self.isEveryRound = false
  23. end
  24. --初始化后调用一次
  25. function PropertyChange:OnStart()
  26. if self.changeType == 1 then --加算
  27. self.delta = self.target.data:AddValue(self.propertyName, self.Value)
  28. elseif self.changeType == 2 then --乘加算(百分比属性加算)
  29. self.delta = self.target.data:AddPencentValue(self.propertyName, self.Value)
  30. elseif self.changeType == 3 then --减算
  31. self.delta = self.target.data:SubValue(self.propertyName, self.Value)
  32. elseif self.changeType == 4 then --乘减算(百分比属性减算)
  33. self.delta = self.target.data:SubPencentValue(self.propertyName, self.Value)
  34. end
  35. end
  36. --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd
  37. function PropertyChange:OnTrigger()
  38. if self.isEveryRound then
  39. self:OnStart()
  40. end
  41. return true
  42. end
  43. --效果结束时调用一次
  44. function PropertyChange:OnEnd()
  45. if self.changeType == 3 or self.changeType == 4 then
  46. self.target.data:AddValue(self.propertyName, self.delta)
  47. else
  48. self.target.data:SubDeltaValue(self.propertyName, self.delta)
  49. end
  50. --> 冰封触发冰冻
  51. if self.propertyChangeType == 4 then
  52. end
  53. end
  54. --只有当Cover字段为true时触发,返回true则被新效果覆盖
  55. function PropertyChange:OnCover(newBuff)
  56. local b = self:OnCompare(newBuff)
  57. if b then
  58. if newBuff.maxLayer == 0 then
  59. newBuff.layer = newBuff.layer + self.layer
  60. newBuff.Value = newBuff.Value + self.Value
  61. else
  62. if self.layer < newBuff.maxLayer then
  63. newBuff.Value = newBuff.Value + self.Value
  64. else
  65. newBuff.Value = self.Value
  66. end
  67. newBuff.layer = math.min(newBuff.layer + self.layer, newBuff.maxLayer)
  68. end
  69. end
  70. return b
  71. end
  72. -- 比较buff
  73. function PropertyChange:OnCompare(buff)
  74. return self.changeType == buff.changeType and self.propertyName == buff.propertyName and self.duration == buff.duration
  75. end
  76. return PropertyChange