warscript 0.0.1-dev.8895ff6 → 0.0.1-dev.89bc33b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/core/dummy.lua +4 -2
  2. package/core/types/effect.d.ts +11 -1
  3. package/core/types/effect.lua +43 -77
  4. package/core/types/frame.d.ts +16 -2
  5. package/core/types/frame.lua +128 -67
  6. package/core/types/handle.lua +9 -9
  7. package/core/types/item.d.ts +1 -0
  8. package/core/types/item.lua +1 -0
  9. package/core/types/player.d.ts +2 -1
  10. package/core/types/player.lua +18 -13
  11. package/core/types/playerColor.lua +4 -3
  12. package/core/types/sound.d.ts +1 -1
  13. package/core/types/sound.lua +14 -9
  14. package/core/types/tileCell.d.ts +7 -2
  15. package/core/types/tileCell.lua +11 -0
  16. package/core/types/unit.d.ts +5 -0
  17. package/core/types/unit.lua +5 -0
  18. package/core/util.d.ts +3 -1
  19. package/core/util.lua +109 -3
  20. package/decl/native.d.ts +705 -7
  21. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  22. package/engine/ability-type-extended-tooltip.lua +44 -0
  23. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  24. package/engine/behaviour/ability/damage.d.ts +4 -0
  25. package/engine/behaviour/ability/damage.lua +19 -15
  26. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  27. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  28. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  29. package/engine/behaviour/ability.d.ts +11 -5
  30. package/engine/behaviour/ability.lua +54 -0
  31. package/engine/behaviour/unit.d.ts +1 -0
  32. package/engine/behaviour/unit.lua +1 -0
  33. package/engine/buff.d.ts +61 -27
  34. package/engine/buff.lua +304 -133
  35. package/engine/index.d.ts +2 -1
  36. package/engine/internal/ability.d.ts +7 -0
  37. package/engine/internal/ability.lua +65 -36
  38. package/engine/internal/item/fields.d.ts +12 -0
  39. package/engine/internal/item/fields.lua +33 -0
  40. package/engine/internal/item/owner-cache.d.ts +5 -0
  41. package/engine/internal/item/owner-cache.lua +4 -0
  42. package/engine/internal/item+owner.d.ts +2 -0
  43. package/engine/internal/item+owner.lua +27 -4
  44. package/engine/internal/item.d.ts +20 -5
  45. package/engine/internal/item.lua +146 -57
  46. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  47. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  48. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  49. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  50. package/engine/internal/object-data/health-bonus.lua +16 -0
  51. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  52. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  53. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  54. package/engine/internal/object-data/mana-bonus.lua +16 -0
  55. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  56. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  57. package/engine/internal/unit/appearance.d.ts +15 -0
  58. package/engine/internal/unit/appearance.lua +85 -0
  59. package/engine/internal/unit/bonus.d.ts +12 -0
  60. package/engine/internal/unit/bonus.lua +92 -8
  61. package/engine/internal/unit/buff.d.ts +2 -2
  62. package/engine/internal/unit/buff.lua +34 -19
  63. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  64. package/engine/internal/unit/equipment-inventory.lua +233 -0
  65. package/engine/internal/unit/expiration-timer.lua +1 -1
  66. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  67. package/engine/internal/unit/extended-inventory.lua +99 -0
  68. package/engine/internal/unit/ignore-events-items.lua +10 -1
  69. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  70. package/engine/internal/unit/inventory.lua +87 -0
  71. package/engine/internal/unit/item-container.d.ts +25 -0
  72. package/engine/internal/unit/item-container.lua +11 -0
  73. package/engine/internal/unit/item-order-events.d.ts +17 -0
  74. package/engine/internal/unit/item-order-events.lua +67 -0
  75. package/engine/internal/unit/item-slot.d.ts +27 -0
  76. package/engine/internal/unit/item-slot.lua +92 -0
  77. package/engine/internal/unit/order.d.ts +3 -3
  78. package/engine/internal/unit/order.lua +10 -10
  79. package/engine/internal/unit/range-event.d.ts +12 -0
  80. package/engine/internal/unit/range-event.lua +90 -0
  81. package/engine/internal/unit+ability.d.ts +2 -1
  82. package/engine/internal/unit+ability.lua +63 -2
  83. package/engine/internal/unit+bonus.lua +3 -3
  84. package/engine/internal/unit+damage.d.ts +9 -0
  85. package/engine/internal/unit+damage.lua +33 -0
  86. package/engine/internal/unit+rally.lua +9 -31
  87. package/engine/internal/unit-missile-data.lua +58 -32
  88. package/engine/internal/unit-missile-launch.lua +13 -13
  89. package/engine/internal/unit.d.ts +3 -11
  90. package/engine/internal/unit.lua +113 -152
  91. package/engine/local-client.d.ts +26 -0
  92. package/engine/local-client.lua +294 -54
  93. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  94. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  95. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  96. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  97. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  98. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  99. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  100. package/engine/object-data/auxiliary/item-class.lua +2 -0
  101. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  102. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  103. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  104. package/engine/object-data/auxiliary/order-type.lua +2 -0
  105. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  106. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  107. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  108. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  109. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  110. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  111. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  112. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  113. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  114. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  115. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  116. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  117. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  118. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  119. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  120. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  121. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  122. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  123. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  124. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  125. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  126. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  127. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  128. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  129. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  130. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  131. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  132. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  133. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  134. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  135. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  136. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  137. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  138. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  139. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  140. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  141. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  142. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  143. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  144. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  145. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  146. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  147. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  148. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  149. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  150. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  151. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  152. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  153. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  154. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  155. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  156. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  157. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  158. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  159. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  160. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  161. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  162. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  163. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  164. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  165. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  166. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  167. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  168. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  169. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  170. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  171. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  172. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  173. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  174. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  175. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  176. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  177. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  178. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  179. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  180. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  181. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  182. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  183. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  184. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  185. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  186. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  187. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  188. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  189. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  190. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  191. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  192. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  193. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  194. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  195. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  196. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  197. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  198. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  199. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  200. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  201. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  202. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  203. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  204. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  205. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  206. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  207. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  208. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  209. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  210. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  211. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  212. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  213. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  214. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  215. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  216. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  217. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  218. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  219. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  220. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  221. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  222. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  223. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  224. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  225. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  226. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  227. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  228. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  229. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  230. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  231. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  232. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  233. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  234. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  235. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  236. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  237. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  238. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  239. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  240. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  241. package/engine/object-data/entry/ability-type.d.ts +25 -6
  242. package/engine/object-data/entry/ability-type.lua +244 -8
  243. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  244. package/engine/object-data/entry/buff-type.d.ts +6 -2
  245. package/engine/object-data/entry/buff-type.lua +26 -0
  246. package/engine/object-data/entry/destructible-type.d.ts +6 -2
  247. package/engine/object-data/entry/destructible-type.lua +26 -0
  248. package/engine/object-data/entry/item-type.d.ts +18 -3
  249. package/engine/object-data/entry/item-type.lua +84 -0
  250. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  251. package/engine/object-data/entry/lightning-type.lua +1 -1
  252. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  253. package/engine/object-data/entry/unit-type.d.ts +47 -2
  254. package/engine/object-data/entry/unit-type.lua +383 -49
  255. package/engine/object-data/entry/upgrade.d.ts +2 -2
  256. package/engine/object-data/entry.d.ts +6 -1
  257. package/engine/object-data/entry.lua +8 -0
  258. package/engine/object-field/ability.lua +2 -2
  259. package/engine/object-field/item.d.ts +22 -0
  260. package/engine/object-field/item.lua +118 -0
  261. package/engine/object-field.d.ts +1 -1
  262. package/engine/object-field.lua +9 -7
  263. package/engine/random.d.ts +1 -0
  264. package/engine/random.lua +8 -0
  265. package/engine/standard/entries/ability-type.d.ts +3102 -7
  266. package/engine/standard/entries/ability-type.lua +0 -6
  267. package/engine/standard/entries/buff-type.d.ts +45 -0
  268. package/engine/standard/entries/buff-type.lua +43 -0
  269. package/engine/standard/entries/item-type.d.ts +1299 -0
  270. package/engine/standard/entries/item-type.lua +2 -0
  271. package/engine/standard/entries/lightning-type.d.ts +42 -15
  272. package/engine/standard/entries/lightning-type.lua +0 -14
  273. package/engine/standard/entries/unit-type.d.ts +5 -0
  274. package/engine/standard/entries/unit-type.lua +5 -0
  275. package/engine/standard/fields/item.d.ts +4 -0
  276. package/engine/standard/fields/item.lua +6 -0
  277. package/engine/unit.d.ts +6 -1
  278. package/engine/unit.lua +6 -1
  279. package/event.d.ts +1 -1
  280. package/lualib_bundle.lua +1 -1
  281. package/math.d.ts +2 -0
  282. package/math.lua +14 -0
  283. package/network.lua +25 -1
  284. package/objutil/buff.lua +1 -1
  285. package/objutil/object.lua +1 -1
  286. package/operation.d.ts +8 -1
  287. package/operation.lua +38 -18
  288. package/package.json +3 -23
  289. package/patch-lua.lua +15 -0
  290. package/utility/arrays.d.ts +7 -1
  291. package/utility/arrays.lua +17 -0
  292. package/utility/linked-map.d.ts +11 -2
  293. package/utility/linked-map.lua +41 -0
  294. package/utility/linked-set.d.ts +3 -1
  295. package/utility/linked-set.lua +23 -0
  296. package/utility/random.d.ts +102 -0
  297. package/utility/random.lua +273 -0
  298. package/utility/unordered-map.d.ts +27 -0
  299. package/utility/unordered-map.lua +99 -0
  300. package/engine/internal/unit/item.lua +0 -78
  301. /package/engine/internal/{object-data/armor-increase.d.ts → misc/unit-ability-level-natives.d.ts} +0 -0
  302. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  303. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  304. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/engine/buff.lua CHANGED
@@ -103,7 +103,8 @@ local buffParametersKeys = {
103
103
  damageIncrease = true,
104
104
  damageIncreaseFactor = true,
105
105
  armorIncrease = true,
106
- armorIncreaseFactor = true,
106
+ maxHealthIncrease = true,
107
+ maxManaIncrease = true,
107
108
  attackSpeedIncreaseFactor = true,
108
109
  movementSpeedIncreaseFactor = true,
109
110
  manaRegenerationRateIncreaseFactor = true,
@@ -126,6 +127,9 @@ local buffParametersKeys = {
126
127
  maximumAutoAttackCount = true,
127
128
  maximumDamageDealtEventCount = true,
128
129
  maximumDamageReceivedEventCount = true,
130
+ absorbedDamageFactor = true,
131
+ maximumDamageAbsorbed = true,
132
+ destroysOnMaximumDamageAbsorbed = true,
129
133
  uniqueGroup = true,
130
134
  damageOnExpiration = true,
131
135
  healingOnExpiration = true,
@@ -182,6 +186,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
182
186
  end
183
187
  end
184
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
185
190
  "turnsIntoGhost",
186
191
  "stuns",
187
192
  "ignoresStunImmunity",
@@ -197,6 +202,8 @@ local buffNumberParameters = {
197
202
  "manaRegenerationRateIncreaseFactor",
198
203
  "evasionProbability",
199
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
200
207
  "damageFactor",
201
208
  "receivedDamageFactor",
202
209
  "maximumAutoAttackCount",
@@ -210,6 +217,8 @@ local buffNumberParameters = {
210
217
  "healingOverDuration",
211
218
  "damageOnExpiration",
212
219
  "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
213
222
  "abilityCooldownFactor"
214
223
  }
215
224
  local unsuccessfulApplicationMarker = {}
@@ -245,6 +254,10 @@ local function destroyBuff(buff)
245
254
  buff:destroy()
246
255
  end
247
256
  local function expireBuff(buff)
257
+ if buff.isDestroyed or buff[100] ~= 1 then
258
+ return
259
+ end
260
+ buff[100] = 2
248
261
  local remainingDamageOverDuration = buff[113] or 0
249
262
  local remainingHealingOverDuration = buff[113] or 0
250
263
  if remainingDamageOverDuration ~= 0 or remainingHealingOverDuration ~= 0 then
@@ -388,14 +401,15 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
388
401
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
389
402
  if missProbability ~= nil then
390
403
  missProbability = resolveNumberValue(ability, level, missProbability)
391
- self[142] = missProbability
404
+ self[146] = missProbability
392
405
  end
393
406
  local buffByTypeId = buffByTypeIdByUnit[_unit]
394
407
  if buffByTypeId == nil then
395
408
  buffByTypeId = {}
396
409
  buffByTypeIdByUnit[_unit] = buffByTypeId
397
410
  end
398
- local ____opt_15 = buffByTypeId[typeId]
411
+ self.previousBuff = buffByTypeId[typeId]
412
+ local ____opt_15 = self.previousBuff
399
413
  if ____opt_15 ~= nil then
400
414
  ____opt_15:destroy()
401
415
  end
@@ -472,7 +486,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
472
486
  self._abilityTypeIds = abilityTypeIds
473
487
  end
474
488
  for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
475
- local abilityParameters = parametersAbilityTypeIds[abilityTypeId]
489
+ local abilityParameters = checkNotNull(parametersAbilityTypeIds[abilityTypeId])
476
490
  local addedAbility = _unit:addAbility(abilityTypeId)
477
491
  if addedAbility ~= nil then
478
492
  _unit:makeAbilityPermanent(abilityTypeId, true)
@@ -525,7 +539,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
525
539
  end
526
540
  function Buff.prototype.onAbilityGained(self, ability)
527
541
  if __TS__InstanceOf(ability, UnitAbility) then
528
- local abilityCooldownModifier = self[144]
542
+ local abilityCooldownModifier = self[148]
529
543
  if abilityCooldownModifier then
530
544
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
531
545
  end
@@ -533,24 +547,38 @@ function Buff.prototype.onAbilityGained(self, ability)
533
547
  end
534
548
  function Buff.prototype.onAbilityLost(self, ability)
535
549
  if __TS__InstanceOf(ability, UnitAbility) then
536
- local abilityCooldownModifier = self[144]
550
+ local abilityCooldownModifier = self[148]
537
551
  if abilityCooldownModifier then
538
552
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
539
553
  end
540
554
  end
541
555
  end
542
556
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
557
+ self:flash(
558
+ self[105],
559
+ stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin",
560
+ widgetOrXOrParametersOrDuration,
561
+ yOrParametersOrDuration,
562
+ parametersOrDuration
563
+ )
564
+ end
565
+ function Buff.prototype.flashSpecialEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
566
+ self:flash(
567
+ self[106],
568
+ stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin",
569
+ widgetOrXOrParametersOrDuration,
570
+ yOrParametersOrDuration,
571
+ parametersOrDuration
572
+ )
573
+ end
574
+ function Buff.prototype.flash(self, modelPath, attachmentPoint, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
543
575
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
544
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
576
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
545
577
  else
546
578
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
547
579
  local ____Effect_40 = Effect
548
580
  local ____Effect_flash_41 = Effect.flash
549
- local ____array_39 = __TS__SparseArrayNew(
550
- self[105],
551
- isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
552
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
553
- )
581
+ local ____array_39 = __TS__SparseArrayNew(modelPath, isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit, attachmentPoint)
554
582
  local ____isWidgetProvided_38
555
583
  if isWidgetProvided then
556
584
  ____isWidgetProvided_38 = yOrParametersOrDuration
@@ -564,26 +592,22 @@ function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrPa
564
592
  )
565
593
  end
566
594
  end
567
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
568
- local isWidgetProvided = type(widgetOrDuration) == "table"
569
- local ____Effect_44 = Effect
570
- local ____Effect_flash_45 = Effect.flash
571
- local ____array_43 = __TS__SparseArrayNew(
572
- self[106],
573
- isWidgetProvided and widgetOrDuration or self._unit,
574
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
575
- )
576
- local ____isWidgetProvided_42
577
- if isWidgetProvided then
578
- ____isWidgetProvided_42 = duration
579
- else
580
- ____isWidgetProvided_42 = widgetOrDuration
595
+ function Buff.prototype.expire(self)
596
+ expireBuff(self)
597
+ end
598
+ function Buff.prototype.dispel(self, source)
599
+ if self.isDestroyed or self[100] ~= 1 then
600
+ return
601
+ end
602
+ self[100] = 2
603
+ do
604
+ pcall(function()
605
+ self:onDispel(source)
606
+ end)
607
+ do
608
+ self:destroy()
609
+ end
581
610
  end
582
- __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
583
- ____Effect_flash_45(
584
- ____Effect_44,
585
- __TS__SparseArraySpread(____array_43)
586
- )
587
611
  end
588
612
  function Buff.prototype.onCreate(self)
589
613
  end
@@ -613,25 +637,25 @@ function Buff.prototype.onDestroy(self)
613
637
  behavior:destroy()
614
638
  end
615
639
  end
616
- local previousAbilityCooldownModifier = self[144]
640
+ local previousAbilityCooldownModifier = self[148]
617
641
  if previousAbilityCooldownModifier then
618
642
  for ____, ability in ipairs(self._unit.abilities) do
619
643
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
620
644
  end
621
645
  end
622
- if self[139] then
646
+ if self[143] then
623
647
  unit:decrementInvulnerabilityCounter()
624
648
  end
625
- if self[138] then
649
+ if self[142] then
626
650
  unit:decrementDisableAutoAttackCounter()
627
651
  end
628
- if self[136] then
629
- if self[137] then
652
+ if self[140] then
653
+ if self[141] then
630
654
  unit:decrementForceStunCounter()
631
655
  end
632
656
  unit:decrementStunCounter()
633
657
  end
634
- if self[135] then
658
+ if self[139] then
635
659
  unit:decrementGhostCounter()
636
660
  end
637
661
  if self._abilityTypeIds ~= nil then
@@ -668,13 +692,15 @@ function Buff.apply(self, ...)
668
692
  end
669
693
  end
670
694
  function Buff.getByTypeId(self, unit, typeId)
671
- local ____opt_46 = buffByTypeIdByUnit[unit]
672
- local buff = ____opt_46 and ____opt_46[typeId]
695
+ local ____opt_42 = buffByTypeIdByUnit[unit]
696
+ local buff = ____opt_42 and ____opt_42[typeId]
673
697
  if __TS__InstanceOf(buff, self) then
674
698
  return buff
675
699
  end
676
700
  return nil
677
701
  end
702
+ function Buff.prototype.onDispel(self, source)
703
+ end
678
704
  function Buff.prototype.onExpiration(self)
679
705
  local unit = self.unit
680
706
  if self[120] ~= nil then
@@ -683,9 +709,9 @@ function Buff.prototype.onExpiration(self)
683
709
  if self[121] ~= nil then
684
710
  (self[102] or unit):healTarget(unit, self[120] or 0)
685
711
  end
686
- if self[141] then
712
+ if self[145] then
687
713
  unit:explode()
688
- elseif self[140] then
714
+ elseif self[144] then
689
715
  unit:kill()
690
716
  end
691
717
  end
@@ -740,6 +766,18 @@ function Buff.prototype.onDamageDealt(self, target, event)
740
766
  end
741
767
  function Buff.prototype.onDamageReceived(self, source, event)
742
768
  if event.originalAmount ~= 0 then
769
+ local absorbedDamage = min(event.amount * (self[135] or 1), (self[136] or 0) - (self[137] or 0))
770
+ if absorbedDamage > 0 then
771
+ event.amount = event.amount - absorbedDamage
772
+ self[137] = (self[137] or 0) + absorbedDamage
773
+ local ____self__138_44 = self[138]
774
+ if ____self__138_44 == nil then
775
+ ____self__138_44 = true
776
+ end
777
+ if ____self__138_44 and self[137] >= (self[136] or 0) then
778
+ self:destroy()
779
+ end
780
+ end
743
781
  local damageReceivedEventCount = (self[133] or 0) + 1
744
782
  self[133] = damageReceivedEventCount
745
783
  if damageReceivedEventCount == self[134] then
@@ -827,8 +865,8 @@ __TS__SetDescriptor(
827
865
  return
828
866
  end
829
867
  self[112] = damageInterval
830
- local ____opt_48 = self._timer
831
- local elapsed = ____opt_48 and ____opt_48.elapsed or 0
868
+ local ____opt_45 = self._timer
869
+ local elapsed = ____opt_45 and ____opt_45.elapsed or 0
832
870
  local timer = self[114]
833
871
  if timer == nil then
834
872
  timer = Timer:create()
@@ -907,8 +945,8 @@ __TS__SetDescriptor(
907
945
  return
908
946
  end
909
947
  self[117] = healingInterval
910
- local ____opt_50 = self._timer
911
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
948
+ local ____opt_47 = self._timer
949
+ local elapsed = ____opt_47 and ____opt_47.elapsed or 0
912
950
  local timer = self[119]
913
951
  if timer == nil then
914
952
  timer = Timer:create()
@@ -989,24 +1027,50 @@ __TS__SetDescriptor(
989
1027
  },
990
1028
  true
991
1029
  )
1030
+ __TS__SetDescriptor(
1031
+ Buff.prototype,
1032
+ "maxHealthIncrease",
1033
+ {
1034
+ get = function(self)
1035
+ return self:getUnitBonus(UnitBonusType.HEALTH)
1036
+ end,
1037
+ set = function(self, maxHealthIncrease)
1038
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.HEALTH, maxHealthIncrease)
1039
+ end
1040
+ },
1041
+ true
1042
+ )
1043
+ __TS__SetDescriptor(
1044
+ Buff.prototype,
1045
+ "maxManaIncrease",
1046
+ {
1047
+ get = function(self)
1048
+ return self:getUnitBonus(UnitBonusType.MANA)
1049
+ end,
1050
+ set = function(self, maxManaIncrease)
1051
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA, maxManaIncrease)
1052
+ end
1053
+ },
1054
+ true
1055
+ )
992
1056
  __TS__SetDescriptor(
993
1057
  Buff.prototype,
994
1058
  "turnsIntoGhost",
995
1059
  {
996
1060
  get = function(self)
997
- local ____self__135_52 = self[135]
998
- if ____self__135_52 == nil then
999
- ____self__135_52 = false
1061
+ local ____self__139_49 = self[139]
1062
+ if ____self__139_49 == nil then
1063
+ ____self__139_49 = false
1000
1064
  end
1001
- return ____self__135_52
1065
+ return ____self__139_49
1002
1066
  end,
1003
1067
  set = function(self, turnsIntoGhost)
1004
- if not turnsIntoGhost and self[135] then
1068
+ if not turnsIntoGhost and self[139] then
1005
1069
  self.object:decrementGhostCounter()
1006
- self[135] = nil
1007
- elseif turnsIntoGhost and not self[135] then
1070
+ self[139] = nil
1071
+ elseif turnsIntoGhost and not self[139] then
1008
1072
  self.object:incrementGhostCounter()
1009
- self[135] = true
1073
+ self[139] = true
1010
1074
  end
1011
1075
  end
1012
1076
  },
@@ -1017,25 +1081,25 @@ __TS__SetDescriptor(
1017
1081
  "stuns",
1018
1082
  {
1019
1083
  get = function(self)
1020
- local ____self__136_53 = self[136]
1021
- if ____self__136_53 == nil then
1022
- ____self__136_53 = false
1084
+ local ____self__140_50 = self[140]
1085
+ if ____self__140_50 == nil then
1086
+ ____self__140_50 = false
1023
1087
  end
1024
- return ____self__136_53
1088
+ return ____self__140_50
1025
1089
  end,
1026
1090
  set = function(self, stuns)
1027
- if not stuns and self[136] then
1028
- if self[137] then
1091
+ if not stuns and self[140] then
1092
+ if self[141] then
1029
1093
  self.object:decrementForceStunCounter()
1030
1094
  end
1031
1095
  self.object:decrementStunCounter()
1032
- self[136] = nil
1033
- elseif stuns and not self[136] then
1034
- if self[137] then
1096
+ self[140] = nil
1097
+ elseif stuns and not self[140] then
1098
+ if self[141] then
1035
1099
  self.object:incrementForceStunCounter()
1036
1100
  end
1037
1101
  self.object:incrementStunCounter()
1038
- self[136] = true
1102
+ self[140] = true
1039
1103
  end
1040
1104
  end
1041
1105
  },
@@ -1046,23 +1110,23 @@ __TS__SetDescriptor(
1046
1110
  "ignoresStunImmunity",
1047
1111
  {
1048
1112
  get = function(self)
1049
- local ____self__137_54 = self[137]
1050
- if ____self__137_54 == nil then
1051
- ____self__137_54 = false
1113
+ local ____self__141_51 = self[141]
1114
+ if ____self__141_51 == nil then
1115
+ ____self__141_51 = false
1052
1116
  end
1053
- return ____self__137_54
1117
+ return ____self__141_51
1054
1118
  end,
1055
1119
  set = function(self, ignoresStunImmunity)
1056
- if not ignoresStunImmunity and self[137] then
1057
- if self[136] then
1120
+ if not ignoresStunImmunity and self[141] then
1121
+ if self[140] then
1058
1122
  self.object:decrementForceStunCounter()
1059
1123
  end
1060
- self[137] = nil
1061
- elseif ignoresStunImmunity and not self[137] then
1062
- if self[136] then
1124
+ self[141] = nil
1125
+ elseif ignoresStunImmunity and not self[141] then
1126
+ if self[140] then
1063
1127
  self.object:incrementForceStunCounter()
1064
1128
  end
1065
- self[137] = true
1129
+ self[141] = true
1066
1130
  end
1067
1131
  end
1068
1132
  },
@@ -1073,19 +1137,19 @@ __TS__SetDescriptor(
1073
1137
  "disablesAutoAttack",
1074
1138
  {
1075
1139
  get = function(self)
1076
- local ____self__138_55 = self[138]
1077
- if ____self__138_55 == nil then
1078
- ____self__138_55 = false
1140
+ local ____self__142_52 = self[142]
1141
+ if ____self__142_52 == nil then
1142
+ ____self__142_52 = false
1079
1143
  end
1080
- return ____self__138_55
1144
+ return ____self__142_52
1081
1145
  end,
1082
1146
  set = function(self, disablesAutoAttack)
1083
- if not disablesAutoAttack and self[138] then
1147
+ if not disablesAutoAttack and self[142] then
1084
1148
  self.object:decrementDisableAutoAttackCounter()
1085
- self[138] = nil
1086
- elseif disablesAutoAttack and not self[138] then
1149
+ self[142] = nil
1150
+ elseif disablesAutoAttack and not self[142] then
1087
1151
  self.object:incrementDisableAutoAttackCounter()
1088
- self[138] = true
1152
+ self[142] = true
1089
1153
  end
1090
1154
  end
1091
1155
  },
@@ -1096,19 +1160,19 @@ __TS__SetDescriptor(
1096
1160
  "providesInvulnerability",
1097
1161
  {
1098
1162
  get = function(self)
1099
- local ____self__139_56 = self[139]
1100
- if ____self__139_56 == nil then
1101
- ____self__139_56 = false
1163
+ local ____self__143_53 = self[143]
1164
+ if ____self__143_53 == nil then
1165
+ ____self__143_53 = false
1102
1166
  end
1103
- return ____self__139_56
1167
+ return ____self__143_53
1104
1168
  end,
1105
1169
  set = function(self, providesInvulnerability)
1106
- if not providesInvulnerability and self[139] then
1170
+ if not providesInvulnerability and self[143] then
1107
1171
  self.object:decrementInvulnerabilityCounter()
1108
- self[139] = nil
1109
- elseif providesInvulnerability and not self[139] then
1172
+ self[143] = nil
1173
+ elseif providesInvulnerability and not self[143] then
1110
1174
  self.object:incrementInvulnerabilityCounter()
1111
- self[139] = true
1175
+ self[143] = true
1112
1176
  end
1113
1177
  end
1114
1178
  },
@@ -1119,17 +1183,17 @@ __TS__SetDescriptor(
1119
1183
  "killsOnExpiration",
1120
1184
  {
1121
1185
  get = function(self)
1122
- local ____self__140_57 = self[140]
1123
- if ____self__140_57 == nil then
1124
- ____self__140_57 = false
1186
+ local ____self__144_54 = self[144]
1187
+ if ____self__144_54 == nil then
1188
+ ____self__144_54 = false
1125
1189
  end
1126
- return ____self__140_57
1190
+ return ____self__144_54
1127
1191
  end,
1128
1192
  set = function(self, killsOnExpiration)
1129
- if not killsOnExpiration and self[140] then
1130
- self[140] = nil
1131
- elseif killsOnExpiration and not self[140] then
1132
- self[140] = true
1193
+ if not killsOnExpiration and self[144] then
1194
+ self[144] = nil
1195
+ elseif killsOnExpiration and not self[144] then
1196
+ self[144] = true
1133
1197
  end
1134
1198
  end
1135
1199
  },
@@ -1140,17 +1204,17 @@ __TS__SetDescriptor(
1140
1204
  "explodesOnExpiration",
1141
1205
  {
1142
1206
  get = function(self)
1143
- local ____self__141_58 = self[141]
1144
- if ____self__141_58 == nil then
1145
- ____self__141_58 = false
1207
+ local ____self__145_55 = self[145]
1208
+ if ____self__145_55 == nil then
1209
+ ____self__145_55 = false
1146
1210
  end
1147
- return ____self__141_58
1211
+ return ____self__145_55
1148
1212
  end,
1149
1213
  set = function(self, killsOnExpiration)
1150
- if not killsOnExpiration and self[141] then
1151
- self[141] = nil
1152
- elseif killsOnExpiration and not self[141] then
1153
- self[141] = true
1214
+ if not killsOnExpiration and self[145] then
1215
+ self[145] = nil
1216
+ elseif killsOnExpiration and not self[145] then
1217
+ self[145] = true
1154
1218
  end
1155
1219
  end
1156
1220
  },
@@ -1275,9 +1339,23 @@ __TS__SetDescriptor(
1275
1339
  __TS__SetDescriptor(
1276
1340
  Buff.prototype,
1277
1341
  "duration",
1278
- {get = function(self)
1279
- return self[103]
1280
- end},
1342
+ {
1343
+ get = function(self)
1344
+ return self[103]
1345
+ end,
1346
+ set = function(self, duration)
1347
+ if duration <= 0 then
1348
+ local timer = self._timer
1349
+ if timer ~= nil then
1350
+ timer:destroy()
1351
+ self._timer = nil
1352
+ end
1353
+ self[103] = 0
1354
+ else
1355
+ self.remainingDuration = self.remainingDuration + (duration - self[103])
1356
+ end
1357
+ end
1358
+ },
1281
1359
  true
1282
1360
  )
1283
1361
  __TS__SetDescriptor(
@@ -1285,13 +1363,13 @@ __TS__SetDescriptor(
1285
1363
  "remainingDuration",
1286
1364
  {
1287
1365
  get = function(self)
1288
- local ____opt_59 = self._timer
1289
- return ____opt_59 and ____opt_59.remaining or 0
1366
+ local ____opt_56 = self._timer
1367
+ return ____opt_56 and ____opt_56.remaining or 0
1290
1368
  end,
1291
1369
  set = function(self, remainingDuration)
1292
- local ____remainingDuration_63 = remainingDuration
1293
- local ____opt_61 = self._timer
1294
- local remainingDurationDelta = ____remainingDuration_63 - (____opt_61 and ____opt_61.remaining or 0)
1370
+ local ____remainingDuration_60 = remainingDuration
1371
+ local ____opt_58 = self._timer
1372
+ local remainingDurationDelta = ____remainingDuration_60 - (____opt_58 and ____opt_58.remaining or 0)
1295
1373
  if remainingDurationDelta ~= 0 then
1296
1374
  self[103] = self[103] + remainingDurationDelta
1297
1375
  if remainingDuration <= 0 then
@@ -1306,7 +1384,7 @@ __TS__SetDescriptor(
1306
1384
  remainingDuration,
1307
1385
  self._spellStealPriority,
1308
1386
  self._learnLevelMinimum,
1309
- self[142]
1387
+ self[146]
1310
1388
  ) then
1311
1389
  local timer = self._timer
1312
1390
  if timer == nil then
@@ -1321,15 +1399,80 @@ __TS__SetDescriptor(
1321
1399
  },
1322
1400
  true
1323
1401
  )
1402
+ __TS__SetDescriptor(
1403
+ Buff.prototype,
1404
+ "absorbedDamageFactor",
1405
+ {
1406
+ get = function(self)
1407
+ return self[135] or 1
1408
+ end,
1409
+ set = function(self, absorbedDamageFactor)
1410
+ if absorbedDamageFactor == 1 then
1411
+ self[135] = nil
1412
+ else
1413
+ self[135] = absorbedDamageFactor
1414
+ end
1415
+ end
1416
+ },
1417
+ true
1418
+ )
1419
+ __TS__SetDescriptor(
1420
+ Buff.prototype,
1421
+ "maximumDamageAbsorbed",
1422
+ {
1423
+ get = function(self)
1424
+ return self[136] or 0
1425
+ end,
1426
+ set = function(self, maximumDamageAbsorbed)
1427
+ if maximumDamageAbsorbed == 0 then
1428
+ self[136] = nil
1429
+ else
1430
+ self[136] = maximumDamageAbsorbed
1431
+ end
1432
+ end
1433
+ },
1434
+ true
1435
+ )
1436
+ __TS__SetDescriptor(
1437
+ Buff.prototype,
1438
+ "damageAbsorbed",
1439
+ {get = function(self)
1440
+ return self[137] or 0
1441
+ end},
1442
+ true
1443
+ )
1444
+ __TS__SetDescriptor(
1445
+ Buff.prototype,
1446
+ "destroysOnMaximumDamageAbsorbed",
1447
+ {
1448
+ get = function(self)
1449
+ local ____self__138_61 = self[138]
1450
+ if ____self__138_61 == nil then
1451
+ ____self__138_61 = true
1452
+ end
1453
+ return ____self__138_61
1454
+ end,
1455
+ set = function(self, destroysOnMaximumDamageAbsorbed)
1456
+ local ____destroysOnMaximumDamageAbsorbed_62
1457
+ if destroysOnMaximumDamageAbsorbed then
1458
+ ____destroysOnMaximumDamageAbsorbed_62 = nil
1459
+ else
1460
+ ____destroysOnMaximumDamageAbsorbed_62 = false
1461
+ end
1462
+ self[138] = ____destroysOnMaximumDamageAbsorbed_62
1463
+ end
1464
+ },
1465
+ true
1466
+ )
1324
1467
  __TS__SetDescriptor(
1325
1468
  Buff.prototype,
1326
1469
  "abilityCooldownFactor",
1327
1470
  {
1328
1471
  get = function(self)
1329
- return self[143] or 1
1472
+ return self[147] or 1
1330
1473
  end,
1331
1474
  set = function(self, abilityCooldownFactor)
1332
- local previousAbilityCooldownModifier = self[144]
1475
+ local previousAbilityCooldownModifier = self[148]
1333
1476
  if previousAbilityCooldownModifier then
1334
1477
  for ____, ability in ipairs(self._unit.abilities) do
1335
1478
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
@@ -1341,8 +1484,8 @@ __TS__SetDescriptor(
1341
1484
  for ____, ability in ipairs(self._unit.abilities) do
1342
1485
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1343
1486
  end
1344
- self[144] = modifier
1345
- self[143] = abilityCooldownFactor
1487
+ self[148] = modifier
1488
+ self[147] = abilityCooldownFactor
1346
1489
  end
1347
1490
  },
1348
1491
  true
@@ -1350,35 +1493,40 @@ __TS__SetDescriptor(
1350
1493
  Buff.createdEvent = buffCreatedEvent
1351
1494
  Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1352
1495
  (function(self)
1353
- local function destroyBuffIfNeeded(buff)
1354
- if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
1355
- buff:destroy()
1496
+ local function destroyBuffIfNeeded(buff, isDispel, source)
1497
+ local currentHandle = getUnitAbility(buff[101].handle, buff.typeId)
1498
+ if currentHandle ~= buff.handle and buff[100] == 1 then
1499
+ if isDispel and currentHandle == nil and buff.unit.isAlive and buff.resistanceType == 1 and (buff._timer == nil or buff.remainingDuration > 0) then
1500
+ buff:dispel(source)
1501
+ else
1502
+ buff:destroy()
1503
+ end
1356
1504
  end
1357
1505
  end
1358
- ____exports.checkBuff = function(unit, buffTypeId)
1506
+ ____exports.checkBuff = function(unit, buffTypeId, isDispel, source)
1359
1507
  local buffByTypeId = buffByTypeIdByUnit[unit]
1360
1508
  if buffByTypeId ~= nil then
1361
1509
  local buff = buffByTypeId[buffTypeId]
1362
1510
  if buff ~= nil then
1363
- destroyBuffIfNeeded(buff)
1511
+ destroyBuffIfNeeded(buff, isDispel, source)
1364
1512
  end
1365
1513
  end
1366
1514
  end
1367
- ____exports.checkBuffs = function(unit)
1368
- ____exports.Buff:forAll(unit, destroyBuffIfNeeded)
1515
+ ____exports.checkBuffs = function(unit, isDispel, source)
1516
+ ____exports.Buff:forAll(unit, destroyBuffIfNeeded, isDispel, source)
1369
1517
  end
1370
1518
  Unit.abilityChannelingStartEvent:addListener(
1371
1519
  0,
1372
1520
  function(caster)
1373
- ____exports.checkBuffs(caster)
1374
- Timer:run(____exports.checkBuffs, caster)
1521
+ ____exports.checkBuffs(caster, true, caster)
1522
+ Timer:run(____exports.checkBuffs, caster, true, caster)
1375
1523
  end
1376
1524
  )
1377
1525
  Unit.abilityUnitTargetChannelingStartEvent:addListener(
1378
1526
  0,
1379
1527
  function(caster, ability, target)
1380
- ____exports.checkBuffs(target)
1381
- Timer:run(____exports.checkBuffs, target)
1528
+ ____exports.checkBuffs(target, true, caster)
1529
+ Timer:run(____exports.checkBuffs, target, true, caster)
1382
1530
  end
1383
1531
  )
1384
1532
  Unit.abilityPointTargetChannelingStartEvent:addListener(
@@ -1389,17 +1537,40 @@ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1389
1537
  y,
1390
1538
  ability:getField(ABILITY_RLF_AREA_OF_EFFECT)
1391
1539
  )
1392
- forEach(units, ____exports.checkBuffs)
1393
- Timer:run(forEach, units, ____exports.checkBuffs)
1540
+ forEach(units, ____exports.checkBuffs, true, caster)
1541
+ Timer:run(
1542
+ forEach,
1543
+ units,
1544
+ ____exports.checkBuffs,
1545
+ true,
1546
+ caster
1547
+ )
1548
+ end
1549
+ )
1550
+ Unit.abilityNoTargetChannelingStartEvent:addListener(
1551
+ 0,
1552
+ function(caster, ability)
1553
+ local radius = ability:getField(ABILITY_RLF_AREA_OF_EFFECT)
1554
+ if radius > 0 then
1555
+ local units = Unit:getInCollisionRange(caster.x, caster.y, radius)
1556
+ forEach(units, ____exports.checkBuffs, true, caster)
1557
+ Timer:run(
1558
+ forEach,
1559
+ units,
1560
+ ____exports.checkBuffs,
1561
+ true,
1562
+ caster
1563
+ )
1564
+ end
1394
1565
  end
1395
1566
  )
1396
1567
  Unit.onDamage:addListener(
1397
1568
  0,
1398
1569
  function(source, target)
1399
1570
  if source ~= nil then
1400
- ____exports.checkBuffs(source)
1571
+ Timer:run(____exports.checkBuffs, source, false)
1401
1572
  end
1402
- ____exports.checkBuffs(target)
1573
+ Timer:run(____exports.checkBuffs, target, false)
1403
1574
  end
1404
1575
  )
1405
1576
  buffCreatedEvent:addListener(function(buff)