wardofthorns.lua 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. local WardOfThorns = extend(Ability)
  2. WardOfThorns.runeReflect = 0
  3. WardOfThorns.runePerStack = 0
  4. function WardOfThorns:prehurt(amount, source, kind)
  5. if not source or not kind then return end
  6. local melee = source.range < 100
  7. if table.has(kind, 'attack') then
  8. local reflects = {.10, .25, .45, .70, 1.00}
  9. local reflect = self.runeReflect + reflects[self.unit:upgradeLevel('wardofthorns')]
  10. local function applyVigor()
  11. if self.unit:upgradeLevel('vigor') > 0 then
  12. local buff = self.unit.buffs:get('vigor')
  13. if buff then buff.maxStacks = 1 + self.unit:upgradeLevel('vigor') end
  14. buff = self.unit.buffs:add('vigor', {timer = 5})
  15. if self.unit:upgradeLevel('impenetrablehide') > 0 then
  16. buff.armor = (.05 + (.05 * self.unit:upgradeLevel('impenetrablehide') * buff.stacks))
  17. if self.unit:upgradeLevel('unbreakable') > 0 then
  18. buff.armorRangedMultiplier = 1.5
  19. end
  20. end
  21. end
  22. end
  23. if melee then
  24. source:hurt(amount * reflect, self.unit)
  25. applyVigor()
  26. ctx.particles:emit('damagereflect', self.unit.x, self.unit.y, 8)
  27. elseif self.unit:upgradeLevel('briarlance') > 0 then
  28. source:hurt(amount * reflect * .75, self.unit)
  29. applyVigor()
  30. ctx.particles:emit('damagereflect', self.unit.x, self.unit.y, 8)
  31. end
  32. end
  33. end
  34. function WardOfThorns:bonuses()
  35. local bonuses = {}
  36. if self.runeReflect > 0 then
  37. table.insert(bonuses, {'Runes', math.round(self.runeReflect * 100) .. '%', 'damage reflected'})
  38. end
  39. return bonuses
  40. end
  41. return WardOfThorns