Curse.lua 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. Curse = Buff:New()
  2. --初始化Buff,通过传入一些自定义参数控制成长相关的数值
  3. function Curse:SetData(curseType, ...)
  4. self.curseType = curseType
  5. self.args = {...} --标记,结束回调
  6. self.cover = true
  7. -- 刷新排序等级
  8. self.sort = 4
  9. end
  10. --
  11. function Curse:ShareDamageTrigger(damagingFunc, atkRole, defRole, damage, skill, dotType, bCrit, damageType)
  12. if skill and defRole.camp == self.target.camp then
  13. -- 没有此印记的队友收到伤害
  14. if not BattleLogic.BuffMgr:HasBuff(defRole, BuffName.Curse, function(buff) return buff.curseType == CurseTypeName.ShareDamage end) then
  15. -- 计算拥有此印记人的数量
  16. local sdList = RoleManager.Query(function(role)
  17. return role.camp == self.target.camp and BattleLogic.BuffMgr:HasBuff(role, BuffName.Curse, function(buff) return buff.curseType == CurseTypeName.ShareDamage end)
  18. end)
  19. if sdList and #sdList ~= 0 then
  20. -- 计算收到的伤害
  21. local f1 = self.args[1] --平分伤害的百分比
  22. local sd = math.floor(BattleUtil.ErrorCorrection(damage * f1 / #sdList))
  23. if sd ~= 0 then
  24. BattleUtil.ApplyDamage(nil, atkRole, self.target, sd)
  25. end
  26. end
  27. end
  28. end
  29. end
  30. --初始化后调用一次
  31. function Curse:OnStart()
  32. if self.curseType == CurseTypeName.ShareDamage then
  33. BattleLogic.Event:AddEvent(BattleEventName.FinalDamage, self.ShareDamageTrigger, self)
  34. end
  35. end
  36. --间隔N帧触发,返回true时表示继续触发,返回false立刻触发OnEnd
  37. function Curse:OnTrigger()
  38. return true
  39. end
  40. --效果结束时调用一次
  41. function Curse:OnEnd()
  42. if self.curseType == CurseTypeName.ShareDamage then
  43. BattleLogic.Event:RemoveEvent(BattleEventName.FinalDamage, self.ShareDamageTrigger, self)
  44. end
  45. end
  46. --只有当cover字段为true时触发,返回true则被新效果覆盖
  47. function Curse:OnCover(newBuff)
  48. return self.curseType == newBuff.curseType
  49. end
  50. -- 比较buff
  51. function Curse:OnCompare(buff)
  52. return self.curseType == newBuff.curseType
  53. end
  54. return Curse