PropertyChange.lua 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. self.probability = 0 --< 特殊概率
  12. self.probaFrozenFix = 0 --< 冰封结界修订参数
  13. -- LogError("propertyName "..self.propertyName.." changeType"..self.changeType.." propertyChangeType"..self.propertyChangeType)
  14. if self.changeType == 1 then --加算
  15. self.isBuff = true
  16. if self.Value < 0 then
  17. self.isBuff =false
  18. self.isDeBuff = true
  19. else
  20. self.isBuff=true
  21. self.isDeBuff=false
  22. end
  23. elseif self.changeType == 2 then --乘加算(百分比属性加算)
  24. self.isBuff = true
  25. self.isDeBuff =false
  26. elseif self.changeType == 3 then --减算
  27. self.isDeBuff = true
  28. if self.Value < 0 then
  29. self.isDeBuff =false
  30. self.isBuff = true
  31. else
  32. self.isBuff =false
  33. self.isDeBuff=true
  34. end
  35. elseif self.changeType == 4 then --乘减算(百分比属性减算)
  36. self.isDeBuff = true
  37. self.isBuff =false
  38. end
  39. -- 刷新排序等级
  40. self.sort = 4
  41. self.isEveryRound = false
  42. end
  43. --初始化后调用一次
  44. function PropertyChange:OnStart()
  45. BattleLogManager.Log(
  46. "propstart",
  47. "self.propertyName:",self.propertyName
  48. )
  49. if self.changeType == 1 then --加算
  50. self.delta = self.target.data:AddValue(self.propertyName, self.Value)
  51. elseif self.changeType == 2 then --乘加算(百分比属性加算)
  52. self.delta = self.target.data:AddPencentValue(self.propertyName, self.Value)
  53. elseif self.changeType == 3 then --减算
  54. self.delta = self.target.data:SubValue(self.propertyName, self.Value)
  55. elseif self.changeType == 4 then --乘减算(百分比属性减算)
  56. self.delta = self.target.data:SubPencentValue(self.propertyName, self.Value)
  57. end
  58. --> 4 冰封结界(修改22攻击加成,如果BUFF自然消失50%概率在下回合开始直接对其冰冻1回合)
  59. if self.propertyName == RoleDataName.AttackAddition and self.propertyChangeType == PropertyChangeType.Icebound then
  60. self.probability = 0.5
  61. local OnBuffPropertyChangeIcebound = function(_probability)
  62. self.probability = self.probability - _probability
  63. if self.probability + self.probaFrozenFix >= 1 then
  64. self.disperse = true
  65. BattleUtil.RandomControl(1, ControlType.Frozen, self.caster, self.target, 1)
  66. end
  67. end
  68. self.target.Event:AddEvent(BattleEventName.BuffPropertyChangeIcebound, OnBuffPropertyChangeIcebound)
  69. end
  70. end
  71. --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd
  72. function PropertyChange:OnTrigger()
  73. if self.isEveryRound then
  74. self:OnStart()
  75. end
  76. return true
  77. end
  78. --效果结束时调用一次
  79. --> isPass 是否过期调用
  80. function PropertyChange:OnEnd(isPass)
  81. if self.changeType == 3 or self.changeType == 4 then
  82. self.target.data:AddValue(self.propertyName, self.delta)
  83. else
  84. self.target.data:SubDeltaValue(self.propertyName, self.delta)
  85. end
  86. --> 冰封触发冰冻 4 冰封结界(修改22攻击加成,如果BUFF自然消失50%概率在下回合开始直接对其冰冻1回合)
  87. if isPass and self.propertyName == RoleDataName.AttackAddition and self.propertyChangeType == PropertyChangeType.Icebound then
  88. BattleUtil.RandomControl(self.probability + self.probaFrozenFix, ControlType.Frozen, self.caster, self.target, 1)
  89. end
  90. end
  91. --只有当Cover字段为true时触发,返回true则被新效果覆盖
  92. function PropertyChange:OnCover(newBuff)
  93. local b = self:OnCompare(newBuff)
  94. if b then
  95. if newBuff.maxLayer == 0 then
  96. newBuff.layer = newBuff.layer + self.layer
  97. newBuff.Value = newBuff.Value + self.Value
  98. else
  99. if self.layer < newBuff.maxLayer then
  100. newBuff.Value = newBuff.Value + self.Value
  101. else
  102. newBuff.Value = self.Value
  103. end
  104. newBuff.layer = math.min(newBuff.layer + self.layer, newBuff.maxLayer)
  105. end
  106. end
  107. return b
  108. end
  109. -- 不叠加增加数量
  110. -- 只有当Cover字段为true时触发,返回true则被新效果覆盖 且数值不会叠加
  111. -- 仅在层数一样的时候
  112. function PropertyChange:SetAsOnly(maxlayerid)
  113. if self.isCover then
  114. self.layer=maxlayerid
  115. end
  116. end
  117. -- 比较buff
  118. function PropertyChange:OnCompare(buff)
  119. return self.changeType == buff.changeType and self.propertyName == buff.propertyName and self.duration == buff.duration and self.propertyChangeType == buff.propertyChangeType
  120. end
  121. return PropertyChange