warscript 0.0.1-dev.47f470c → 0.0.1-dev.4b6e45a

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 (424) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/dummy.lua +4 -2
  4. package/core/types/effect.d.ts +12 -4
  5. package/core/types/effect.lua +67 -104
  6. package/core/types/frame.d.ts +21 -2
  7. package/core/types/frame.lua +165 -87
  8. package/core/types/handle.lua +9 -9
  9. package/core/types/item.d.ts +1 -0
  10. package/core/types/item.lua +1 -0
  11. package/core/types/missile.lua +8 -7
  12. package/core/types/player.d.ts +18 -1
  13. package/core/types/player.lua +76 -26
  14. package/core/types/playerCamera.d.ts +2 -0
  15. package/core/types/playerCamera.lua +123 -5
  16. package/core/types/playerColor.lua +4 -3
  17. package/core/types/sound.d.ts +18 -26
  18. package/core/types/sound.lua +105 -55
  19. package/core/types/tileCell.d.ts +18 -3
  20. package/core/types/tileCell.lua +108 -0
  21. package/core/types/timer.d.ts +9 -8
  22. package/core/types/timer.lua +45 -23
  23. package/core/types/unit.d.ts +5 -0
  24. package/core/types/unit.lua +5 -0
  25. package/core/util.d.ts +3 -1
  26. package/core/util.lua +115 -4
  27. package/decl/native.d.ts +1719 -964
  28. package/destroyable.d.ts +1 -0
  29. package/destroyable.lua +9 -0
  30. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  31. package/engine/ability-type-extended-tooltip.lua +44 -0
  32. package/engine/behavior.d.ts +14 -1
  33. package/engine/behavior.lua +230 -70
  34. package/engine/behaviour/ability/apply-buff.lua +5 -5
  35. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  36. package/engine/behaviour/ability/damage.d.ts +13 -3
  37. package/engine/behaviour/ability/damage.lua +41 -49
  38. package/engine/behaviour/ability/emulate-impact.d.ts +15 -1
  39. package/engine/behaviour/ability/emulate-impact.lua +96 -7
  40. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  41. package/engine/behaviour/ability/instant-impact.lua +17 -2
  42. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  43. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  44. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  45. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  46. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  47. package/engine/behaviour/ability/restore-mana.lua +6 -6
  48. package/engine/behaviour/ability.d.ts +23 -6
  49. package/engine/behaviour/ability.lua +145 -29
  50. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  51. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  52. package/engine/behaviour/unit.d.ts +41 -2
  53. package/engine/behaviour/unit.lua +270 -6
  54. package/engine/buff.d.ts +130 -57
  55. package/engine/buff.lua +643 -294
  56. package/engine/index.d.ts +2 -1
  57. package/engine/internal/ability.d.ts +14 -1
  58. package/engine/internal/ability.lua +113 -44
  59. package/engine/internal/item/ability.lua +63 -11
  60. package/engine/internal/item/fields.d.ts +12 -0
  61. package/engine/internal/item/fields.lua +33 -0
  62. package/engine/internal/item/owner-cache.d.ts +5 -0
  63. package/engine/internal/item/owner-cache.lua +4 -0
  64. package/engine/internal/item+owner.d.ts +2 -0
  65. package/engine/internal/item+owner.lua +37 -8
  66. package/engine/internal/item.d.ts +32 -16
  67. package/engine/internal/item.lua +257 -82
  68. package/engine/internal/mechanics/ability-duration.lua +1 -1
  69. package/engine/internal/mechanics/cast-ability.lua +6 -3
  70. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  71. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  72. package/engine/internal/misc/frame-coordinates.lua +21 -0
  73. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  74. package/engine/internal/misc/get-terrain-z.lua +11 -0
  75. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  76. package/engine/internal/misc/player-local-handle.lua +5 -0
  77. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  78. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  79. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  80. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  81. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  82. package/engine/internal/object-data/health-bonus.lua +16 -0
  83. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  84. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  85. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  86. package/engine/internal/object-data/mana-bonus.lua +16 -0
  87. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  88. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  89. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  90. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  91. package/engine/internal/unit/ability.d.ts +35 -0
  92. package/engine/internal/unit/ability.lua +114 -9
  93. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  94. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  95. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  96. package/engine/internal/unit/allowed-targets.lua +9 -1
  97. package/engine/internal/unit/appearance.d.ts +15 -0
  98. package/engine/internal/unit/appearance.lua +85 -0
  99. package/engine/internal/unit/attributes.d.ts +17 -0
  100. package/engine/internal/unit/attributes.lua +46 -0
  101. package/engine/internal/unit/bonus.d.ts +17 -0
  102. package/engine/internal/unit/bonus.lua +113 -8
  103. package/engine/internal/unit/buff.d.ts +2 -2
  104. package/engine/internal/unit/buff.lua +34 -19
  105. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  106. package/engine/internal/unit/equipment-inventory.lua +233 -0
  107. package/engine/internal/unit/expiration-timer.lua +1 -1
  108. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  109. package/engine/internal/unit/extended-inventory.lua +99 -0
  110. package/engine/internal/unit/fly-height.d.ts +7 -0
  111. package/engine/internal/unit/fly-height.lua +20 -0
  112. package/engine/internal/unit/ignore-events-items.lua +10 -1
  113. package/engine/internal/unit/interrupts.d.ts +12 -0
  114. package/engine/internal/unit/interrupts.lua +28 -0
  115. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  116. package/engine/internal/unit/inventory.lua +87 -0
  117. package/engine/internal/unit/item-container.d.ts +25 -0
  118. package/engine/internal/unit/item-container.lua +11 -0
  119. package/engine/internal/unit/item-order-events.d.ts +17 -0
  120. package/engine/internal/unit/item-order-events.lua +67 -0
  121. package/engine/internal/unit/item-slot.d.ts +27 -0
  122. package/engine/internal/unit/item-slot.lua +92 -0
  123. package/engine/internal/unit/main-selected.lua +12 -27
  124. package/engine/internal/unit/order.d.ts +20 -0
  125. package/engine/internal/unit/order.lua +136 -0
  126. package/engine/internal/unit/range-event.d.ts +12 -0
  127. package/engine/internal/unit/range-event.lua +90 -0
  128. package/engine/internal/unit/scale.d.ts +7 -0
  129. package/engine/internal/unit/scale.lua +20 -0
  130. package/engine/internal/unit/shared-vision-counter.d.ts +18 -0
  131. package/engine/internal/unit/shared-vision-counter.lua +31 -0
  132. package/engine/internal/unit+ability.d.ts +2 -1
  133. package/engine/internal/unit+ability.lua +83 -3
  134. package/engine/internal/unit+bonus.lua +3 -3
  135. package/engine/internal/unit+damage.d.ts +11 -11
  136. package/engine/internal/unit+damage.lua +43 -14
  137. package/engine/internal/unit+rally.lua +9 -31
  138. package/engine/internal/unit+spellSteal.lua +1 -2
  139. package/engine/internal/unit-missile-data.lua +96 -68
  140. package/engine/internal/unit-missile-launch.lua +65 -27
  141. package/engine/internal/unit.d.ts +47 -34
  142. package/engine/internal/unit.lua +413 -323
  143. package/engine/lightning.lua +4 -4
  144. package/engine/local-client.d.ts +28 -0
  145. package/engine/local-client.lua +324 -54
  146. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  147. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  148. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -2
  149. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  150. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  151. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  152. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  153. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  154. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  155. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  156. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  157. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  158. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  159. package/engine/object-data/auxiliary/item-class.lua +2 -0
  160. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  161. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  162. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  163. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  164. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  165. package/engine/object-data/auxiliary/order-type.lua +2 -0
  166. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  167. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  168. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  169. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  170. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  171. package/engine/object-data/auxiliary/unit-weapon-type.d.ts +21 -0
  172. package/engine/object-data/auxiliary/unit-weapon-type.lua +2 -0
  173. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  174. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  175. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  176. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  177. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  178. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  179. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  180. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  181. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  182. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  183. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  184. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  185. package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
  186. package/engine/object-data/entry/ability-type/barrage.lua +52 -0
  187. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  188. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  189. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  190. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  191. package/engine/object-data/entry/ability-type/blank-configurable.lua +2 -11
  192. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  193. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  194. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  195. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  196. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  197. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  198. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  199. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  200. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  201. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  202. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  203. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  204. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  205. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  206. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  207. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  208. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  209. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  210. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  211. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  212. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  213. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  214. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  215. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  216. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  217. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  218. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  219. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  220. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  221. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  222. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  223. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  224. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  225. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  226. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  227. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  228. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  229. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  230. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  231. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  232. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  233. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  234. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  235. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  236. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  237. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  238. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  239. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  240. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  241. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  242. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  243. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  244. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  245. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  246. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  247. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  248. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  249. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  250. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  251. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  252. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  253. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  254. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  255. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  256. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  257. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  258. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  259. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  260. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  261. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  262. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  263. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  264. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  265. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  266. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  267. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  268. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  269. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  270. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  271. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  272. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  273. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  274. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  275. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  276. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  277. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  278. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  279. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  280. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  281. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  282. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  283. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  284. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  285. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  286. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  287. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  288. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  289. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  290. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  291. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  292. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  293. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  294. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  295. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  296. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  297. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  298. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  299. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  300. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  301. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  302. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  303. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  304. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  305. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  306. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  307. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  308. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  309. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  310. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  311. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  312. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  313. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  314. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  315. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  316. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  317. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  318. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  319. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  320. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  321. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  322. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  323. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  324. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  325. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  326. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  327. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  328. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  329. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  330. package/engine/object-data/entry/ability-type/web.lua +52 -0
  331. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  332. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  333. package/engine/object-data/entry/ability-type.d.ts +50 -21
  334. package/engine/object-data/entry/ability-type.lua +376 -27
  335. package/engine/object-data/entry/buff-type/applicable.lua +124 -108
  336. package/engine/object-data/entry/buff-type.d.ts +10 -12
  337. package/engine/object-data/entry/buff-type.lua +37 -27
  338. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  339. package/engine/object-data/entry/destructible-type.lua +181 -0
  340. package/engine/object-data/entry/item-type.d.ts +18 -3
  341. package/engine/object-data/entry/item-type.lua +84 -0
  342. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  343. package/engine/object-data/entry/lightning-type.lua +1 -1
  344. package/engine/object-data/entry/sound-preset.d.ts +19 -3
  345. package/engine/object-data/entry/sound-preset.lua +105 -15
  346. package/engine/object-data/entry/unit-type.d.ts +74 -6
  347. package/engine/object-data/entry/unit-type.lua +560 -100
  348. package/engine/object-data/entry/upgrade.d.ts +2 -2
  349. package/engine/object-data/entry.d.ts +8 -3
  350. package/engine/object-data/entry.lua +22 -7
  351. package/engine/object-field/ability.d.ts +4 -4
  352. package/engine/object-field/ability.lua +9 -8
  353. package/engine/object-field/item.d.ts +22 -0
  354. package/engine/object-field/item.lua +118 -0
  355. package/engine/object-field/unit.d.ts +72 -3
  356. package/engine/object-field/unit.lua +268 -7
  357. package/engine/object-field.d.ts +26 -7
  358. package/engine/object-field.lua +360 -119
  359. package/engine/random.d.ts +10 -0
  360. package/engine/random.lua +21 -0
  361. package/engine/standard/entries/ability-type.d.ts +3102 -7
  362. package/engine/standard/entries/ability-type.lua +0 -6
  363. package/engine/standard/entries/buff-type.d.ts +48 -0
  364. package/engine/standard/entries/buff-type.lua +46 -0
  365. package/engine/standard/entries/item-type.d.ts +1299 -0
  366. package/engine/standard/entries/item-type.lua +2 -0
  367. package/engine/standard/entries/lightning-type.d.ts +42 -15
  368. package/engine/standard/entries/lightning-type.lua +0 -14
  369. package/engine/standard/entries/unit-type.d.ts +5 -0
  370. package/engine/standard/entries/unit-type.lua +5 -0
  371. package/engine/standard/fields/ability.d.ts +4 -4
  372. package/engine/standard/fields/ability.lua +4 -4
  373. package/engine/standard/fields/item.d.ts +4 -0
  374. package/engine/standard/fields/item.lua +6 -0
  375. package/engine/standard/fields/unit.d.ts +12 -0
  376. package/engine/standard/fields/unit.lua +20 -0
  377. package/engine/synchronization.d.ts +11 -0
  378. package/engine/synchronization.lua +77 -0
  379. package/engine/text-tag.d.ts +48 -2
  380. package/engine/text-tag.lua +287 -10
  381. package/engine/unit.d.ts +12 -1
  382. package/engine/unit.lua +12 -1
  383. package/event.d.ts +1 -1
  384. package/lualib_bundle.lua +1 -1
  385. package/math.d.ts +2 -0
  386. package/math.lua +14 -0
  387. package/net/socket.lua +1 -1
  388. package/network.lua +25 -1
  389. package/objutil/buff.lua +12 -11
  390. package/objutil/object.lua +1 -1
  391. package/objutil/unit.lua +2 -2
  392. package/operation.d.ts +8 -1
  393. package/operation.lua +38 -18
  394. package/package.json +3 -23
  395. package/patch-lua.lua +15 -0
  396. package/patch-lualib.lua +1 -1
  397. package/utility/arrays.d.ts +9 -1
  398. package/utility/arrays.lua +28 -0
  399. package/utility/callback-array.d.ts +17 -0
  400. package/utility/callback-array.lua +61 -0
  401. package/utility/functions.d.ts +8 -0
  402. package/utility/functions.lua +13 -0
  403. package/utility/linked-map.d.ts +35 -0
  404. package/utility/linked-map.lua +107 -0
  405. package/utility/linked-set.d.ts +5 -1
  406. package/utility/linked-set.lua +49 -1
  407. package/utility/lua-maps.d.ts +15 -2
  408. package/utility/lua-maps.lua +53 -2
  409. package/utility/lua-sets.d.ts +2 -0
  410. package/utility/lua-sets.lua +7 -0
  411. package/utility/random.d.ts +102 -0
  412. package/utility/random.lua +273 -0
  413. package/utility/records.lua +20 -1
  414. package/utility/reflection.lua +11 -7
  415. package/utility/types.d.ts +3 -0
  416. package/utility/unordered-map.d.ts +27 -0
  417. package/utility/unordered-map.lua +99 -0
  418. package/core/types/order.d.ts +0 -25
  419. package/core/types/order.lua +0 -55
  420. package/engine/internal/unit/item.lua +0 -78
  421. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  422. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  423. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  424. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/engine/buff.lua CHANGED
@@ -14,8 +14,10 @@ local Unit = ____unit.Unit
14
14
  local ____applicable = require("engine.object-data.entry.buff-type.applicable")
15
15
  local internalApplyBuff = ____applicable.internalApplyBuff
16
16
  local removeBuff = ____applicable.removeBuff
17
+ local removeBuffApplicator = ____applicable.removeBuffApplicator
17
18
  local ____ability = require("engine.internal.ability")
18
19
  local Ability = ____ability.Ability
20
+ local UnitAbility = ____ability.UnitAbility
19
21
  local ____ability = require("engine.object-field.ability")
20
22
  local AbilityBooleanField = ____ability.AbilityBooleanField
21
23
  local AbilityNumberField = ____ability.AbilityNumberField
@@ -28,9 +30,6 @@ local ____math = require("math")
28
30
  local max = ____math.max
29
31
  local min = ____math.min
30
32
  local ____bonus = require("engine.internal.unit.bonus")
31
- local addOrUpdateOrRemoveUnitBonus = ____bonus.addOrUpdateOrRemoveUnitBonus
32
- local getUnitBonus = ____bonus.getUnitBonus
33
- local removeUnitBonus = ____bonus.removeUnitBonus
34
33
  local UnitBonusType = ____bonus.UnitBonusType
35
34
  local ____area_2Ddamage = require("engine.internal.mechanics.area-damage")
36
35
  local damageArea = ____area_2Ddamage.damageArea
@@ -44,6 +43,7 @@ local BuffType = ____buff_2Dtype.BuffType
44
43
  local ____unit = require("engine.behaviour.unit")
45
44
  local UnitBehavior = ____unit.UnitBehavior
46
45
  local ____arrays = require("utility.arrays")
46
+ local emptyArray = ____arrays.emptyArray
47
47
  local forEach = ____arrays.forEach
48
48
  local ____event = require("event")
49
49
  local Event = ____event.Event
@@ -53,6 +53,15 @@ local ____item = require("engine.internal.item")
53
53
  local Item = ____item.Item
54
54
  local ____destructable = require("core.types.destructable")
55
55
  local Destructable = ____destructable.Destructable
56
+ local ____ability = require("engine.standard.fields.ability")
57
+ local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
58
+ local ____ability = require("engine.behaviour.ability")
59
+ local AbilityBehavior = ____ability.AbilityBehavior
60
+ local ____records = require("utility.records")
61
+ local sortedKeysUnnested = ____records.sortedKeysUnnested
62
+ local ____sound = require("core.types.sound")
63
+ local Sound3D = ____sound.Sound3D
64
+ local SoundSettings = ____sound.SoundSettings
56
65
  local getUnitAbility = BlzGetUnitAbility
57
66
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
58
67
  local stringValueByBuffTypeIdByFieldId = {}
@@ -98,17 +107,21 @@ local buffParametersKeys = {
98
107
  damageIncrease = true,
99
108
  damageIncreaseFactor = true,
100
109
  armorIncrease = true,
101
- armorIncreaseFactor = true,
110
+ maxHealthIncrease = true,
111
+ maxManaIncrease = true,
102
112
  attackSpeedIncreaseFactor = true,
103
113
  movementSpeedIncreaseFactor = true,
114
+ manaRegenerationRateIncreaseFactor = true,
104
115
  evasionProbability = true,
105
116
  missProbability = true,
106
117
  damageFactor = true,
107
118
  receivedDamageFactor = true,
119
+ returnedMeleeDamageFactor = true,
108
120
  receivedMagicDamageFactor = true,
109
121
  durationIncreaseOnAutoAttack = true,
110
122
  maximumDuration = true,
111
123
  maximumRemainingDuration = true,
124
+ turnsIntoGhost = true,
112
125
  stuns = true,
113
126
  ignoresStunImmunity = true,
114
127
  providesStunImmunity = true,
@@ -119,11 +132,17 @@ local buffParametersKeys = {
119
132
  maximumAutoAttackCount = true,
120
133
  maximumDamageDealtEventCount = true,
121
134
  maximumDamageReceivedEventCount = true,
135
+ absorbedDamageFactor = true,
136
+ maximumDamageAbsorbed = true,
137
+ destroysOnMaximumDamageAbsorbed = true,
122
138
  uniqueGroup = true,
139
+ destructionSoundPresetId = true,
123
140
  damageOnExpiration = true,
124
141
  healingOnExpiration = true,
125
142
  killsOnExpiration = true,
126
- explodesOnExpiration = true
143
+ explodesOnExpiration = true,
144
+ abilityCooldownFactor = true,
145
+ sharesVisionWithSource = true
127
146
  }
128
147
  local function resolveEnumValue(ability, level, value)
129
148
  if value == nil or type(value) == "number" then
@@ -174,21 +193,28 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
174
193
  end
175
194
  end
176
195
  local buffBooleanParameters = {
196
+ "destroysOnMaximumDamageAbsorbed",
197
+ "turnsIntoGhost",
177
198
  "stuns",
178
199
  "ignoresStunImmunity",
179
200
  "disablesAutoAttack",
180
201
  "providesInvulnerability",
181
202
  "killsOnExpiration",
182
- "explodesOnExpiration"
203
+ "explodesOnExpiration",
204
+ "sharesVisionWithSource"
183
205
  }
184
206
  local buffNumberParameters = {
185
207
  "durationIncreaseOnAutoAttack",
186
208
  "attackSpeedIncreaseFactor",
187
209
  "movementSpeedIncreaseFactor",
210
+ "manaRegenerationRateIncreaseFactor",
188
211
  "evasionProbability",
189
212
  "armorIncrease",
213
+ "maxHealthIncrease",
214
+ "maxManaIncrease",
190
215
  "damageFactor",
191
216
  "receivedDamageFactor",
217
+ "returnedMeleeDamageFactor",
192
218
  "maximumAutoAttackCount",
193
219
  "maximumDamageDealtEventCount",
194
220
  "maximumDamageReceivedEventCount",
@@ -199,7 +225,10 @@ local buffNumberParameters = {
199
225
  "healingPerInterval",
200
226
  "healingOverDuration",
201
227
  "damageOnExpiration",
202
- "healingOnExpiration"
228
+ "healingOnExpiration",
229
+ "absorbedDamageFactor",
230
+ "maximumDamageAbsorbed",
231
+ "abilityCooldownFactor"
203
232
  }
204
233
  local unsuccessfulApplicationMarker = {}
205
234
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -233,18 +262,44 @@ end
233
262
  local function destroyBuff(buff)
234
263
  buff:destroy()
235
264
  end
265
+ local function destroyBuffOnDeath(buff)
266
+ if buff[100] == 0 then
267
+ Timer:run(destroyBuff, buff)
268
+ else
269
+ buff:destroy()
270
+ end
271
+ end
272
+ local function shareVisionWithSource(buff)
273
+ local source = buff[102]
274
+ if source ~= nil then
275
+ local player = source.owner
276
+ buff[101]:incrementSharedVisionCounter(player)
277
+ buff[151] = player
278
+ end
279
+ end
280
+ local function unshareVisionWithSource(buff)
281
+ local player = buff[151]
282
+ if player ~= nil then
283
+ buff[101]:decrementSharedVisionCounter(player)
284
+ buff[151] = nil
285
+ end
286
+ end
236
287
  local function expireBuff(buff)
237
- local remainingDamageOverDuration = buff[113] or 0
238
- local remainingHealingOverDuration = buff[113] or 0
288
+ if buff.isDestroyed or buff[100] ~= 1 then
289
+ return
290
+ end
291
+ buff[100] = 2
292
+ local remainingDamageOverDuration = buff[114] or 0
293
+ local remainingHealingOverDuration = buff[114] or 0
239
294
  if remainingDamageOverDuration ~= 0 or remainingHealingOverDuration ~= 0 then
240
295
  buff:flashSpecialEffect()
241
296
  if remainingDamageOverDuration ~= 0 then
242
297
  (buff[102] or buff[101]):damageTarget(buff[101], remainingDamageOverDuration)
243
- buff[113] = nil
298
+ buff[114] = nil
244
299
  end
245
300
  if remainingHealingOverDuration ~= 0 then
246
301
  (buff[102] or buff[101]):healTarget(buff[101], remainingHealingOverDuration)
247
- buff[118] = nil
302
+ buff[119] = nil
248
303
  end
249
304
  end
250
305
  Timer:run(destroyBuff, buff)
@@ -252,8 +307,8 @@ local function expireBuff(buff)
252
307
  end
253
308
  local function buffDamageIntervalInitialTimerCallback(buff)
254
309
  buffDamageIntervalTimerCallback(buff)
255
- local timer = buff[114]
256
- local damageInterval = buff[112]
310
+ local timer = buff[115]
311
+ local damageInterval = buff[113]
257
312
  if timer ~= nil and damageInterval ~= nil and damageInterval > 0 then
258
313
  timer:start(damageInterval, true, buffDamageIntervalTimerCallback, buff)
259
314
  end
@@ -261,48 +316,49 @@ end
261
316
  buffDamageIntervalTimerCallback = function(buff)
262
317
  buff:flashSpecialEffect()
263
318
  local source = buff[102] or buff[101]
264
- local remainingDamageOverDuration = buff[113] or 0
319
+ local remainingDamageOverDuration = buff[114] or 0
265
320
  if remainingDamageOverDuration ~= 0 then
266
- local damageInterval = buff[112] or 0
321
+ local damageInterval = buff[113] or 0
267
322
  if damageInterval ~= 0 then
268
323
  local damage = remainingDamageOverDuration / (1 + buff.remainingDuration / damageInterval)
269
324
  source:damageTarget(buff[101], damage)
270
- buff[113] = remainingDamageOverDuration - damage
325
+ buff[114] = remainingDamageOverDuration - damage
271
326
  end
272
327
  end
273
- local damagePerInterval = buff[111] or 0
328
+ local damagePerInterval = buff[112] or 0
274
329
  if remainingDamageOverDuration == 0 or damagePerInterval ~= 0 then
275
330
  source:damageTarget(buff[101], damagePerInterval)
276
331
  end
277
332
  end
278
333
  local function buffHealingIntervalInitialTimerCallback(buff)
279
334
  buffHealingIntervalTimerCallback(buff)
280
- local timer = buff[119]
281
- local healingInterval = buff[117]
335
+ local timer = buff[120]
336
+ local healingInterval = buff[118]
282
337
  if timer ~= nil and healingInterval ~= nil and healingInterval > 0 then
283
338
  timer:start(healingInterval, true, buffHealingIntervalTimerCallback, buff)
284
339
  end
285
340
  end
286
341
  buffHealingIntervalTimerCallback = function(buff)
287
- if buff[117] ~= buff[112] then
342
+ if buff[118] ~= buff[113] then
288
343
  buff:flashSpecialEffect()
289
344
  end
290
345
  local source = buff[102] or buff[101]
291
- local remainingHealingOverDuration = buff[118] or 0
346
+ local remainingHealingOverDuration = buff[119] or 0
292
347
  if remainingHealingOverDuration ~= 0 then
293
- local healingInterval = buff[117] or 0
348
+ local healingInterval = buff[118] or 0
294
349
  if healingInterval ~= 0 then
295
350
  local healing = remainingHealingOverDuration / (1 + buff.remainingDuration / healingInterval)
296
351
  source:healTarget(buff[101], healing)
297
- buff[118] = remainingHealingOverDuration - healing
352
+ buff[119] = remainingHealingOverDuration - healing
298
353
  end
299
354
  end
300
- local healingPerInterval = buff[116] or 0
355
+ local healingPerInterval = buff[117] or 0
301
356
  if remainingHealingOverDuration == 0 or healingPerInterval ~= 0 then
302
357
  source:healTarget(buff[101], healingPerInterval)
303
358
  end
304
359
  end
305
- local buffDestroyEvent = __TS__New(Event)
360
+ local buffCreatedEvent = __TS__New(Event)
361
+ local buffBeingDestroyedEvent = __TS__New(Event)
306
362
  ____exports.Buff = __TS__Class()
307
363
  local Buff = ____exports.Buff
308
364
  Buff.name = "Buff"
@@ -317,33 +373,38 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
317
373
  local polarity
318
374
  local resistanceType
319
375
  local ability
376
+ local abilityBehavior
320
377
  if type(typeIdOrTypeIds) ~= "number" then
321
378
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
322
379
  polarity = resistanceTypeOrPolarity
323
380
  resistanceType = abilityOrParametersOrResistanceType
324
- if __TS__InstanceOf(parametersOrAbility, Ability) then
381
+ if __TS__InstanceOf(parametersOrAbility, AbilityBehavior) then
382
+ abilityBehavior = parametersOrAbility
383
+ ability = abilityBehavior.ability
384
+ elseif __TS__InstanceOf(parametersOrAbility, Ability) then
325
385
  ability = parametersOrAbility
326
- else
327
- ability = nil
386
+ elseif parametersOrAbility ~= nil then
328
387
  parameters = parametersOrAbility
329
388
  end
330
389
  else
331
390
  typeId = typeIdOrTypeIds
332
391
  polarity = polarityOrTypeIdSelectionPolicy
333
392
  resistanceType = resistanceTypeOrPolarity
334
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
393
+ if __TS__InstanceOf(abilityOrParametersOrResistanceType, AbilityBehavior) then
394
+ abilityBehavior = abilityOrParametersOrResistanceType
395
+ ability = abilityBehavior.ability
396
+ parameters = parametersOrAbility
397
+ elseif __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
335
398
  ability = abilityOrParametersOrResistanceType
336
399
  parameters = parametersOrAbility
337
- else
338
- ability = nil
400
+ elseif abilityOrParametersOrResistanceType ~= nil then
339
401
  parameters = abilityOrParametersOrResistanceType
402
+ else
403
+ parameters = parametersOrAbility
340
404
  end
341
405
  end
406
+ self.sourceAbilityBehavior = abilityBehavior
342
407
  self.typeId = typeId
343
- if not __TS__InstanceOf(ability, Ability) then
344
- parameters = ability
345
- ability = nil
346
- end
347
408
  local defaultParameters = self.constructor.defaultParameters
348
409
  local level = parameters and parameters.level or defaultParameters.level
349
410
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -371,14 +432,15 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
371
432
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
372
433
  if missProbability ~= nil then
373
434
  missProbability = resolveNumberValue(ability, level, missProbability)
374
- self[141] = missProbability
435
+ self[147] = missProbability
375
436
  end
376
437
  local buffByTypeId = buffByTypeIdByUnit[_unit]
377
438
  if buffByTypeId == nil then
378
439
  buffByTypeId = {}
379
440
  buffByTypeIdByUnit[_unit] = buffByTypeId
380
441
  end
381
- local ____opt_15 = buffByTypeId[typeId]
442
+ self.previousBuff = buffByTypeId[typeId]
443
+ local ____opt_15 = self.previousBuff
382
444
  if ____opt_15 ~= nil then
383
445
  ____opt_15:destroy()
384
446
  end
@@ -415,17 +477,18 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
415
477
  self[102] = source
416
478
  self[103] = duration or 0
417
479
  self[104] = uniqueGroup
418
- self[105] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_EFFECT, 0)
419
- self[106] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_SPECIAL, 0)
480
+ self[105] = parameters and parameters.destructionSoundPresetId or defaultParameters and defaultParameters.destructionSoundPresetId
481
+ self[106] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_EFFECT, 0)
482
+ self[107] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_SPECIAL, 0)
420
483
  if parameters ~= nil or (next(defaultParameters)) ~= nil then
421
484
  for ____, buffBooleanParameter in ipairs(buffBooleanParameters) do
422
- local ____ability_24 = ability
423
- local ____level_25 = level
424
- local ____temp_23 = parameters and parameters[buffBooleanParameter]
425
- if ____temp_23 == nil then
426
- ____temp_23 = defaultParameters[buffBooleanParameter]
485
+ local ____ability_28 = ability
486
+ local ____level_29 = level
487
+ local ____temp_27 = parameters and parameters[buffBooleanParameter]
488
+ if ____temp_27 == nil then
489
+ ____temp_27 = defaultParameters[buffBooleanParameter]
427
490
  end
428
- if resolveBooleanValue(____ability_24, ____level_25, ____temp_23) then
491
+ if resolveBooleanValue(____ability_28, ____level_29, ____temp_27) then
429
492
  self[buffBooleanParameter] = true
430
493
  end
431
494
  end
@@ -441,11 +504,11 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
441
504
  end
442
505
  local maximumDuration = parameters and parameters.maximumDuration or defaultParameters.maximumDuration
443
506
  if maximumDuration ~= nil then
444
- self[108] = resolveNumberValue(ability, level, maximumDuration)
507
+ self[109] = resolveNumberValue(ability, level, maximumDuration)
445
508
  end
446
509
  local maximumRemainingDuration = parameters and parameters.maximumRemainingDuration or defaultParameters.maximumRemainingDuration
447
510
  if maximumRemainingDuration ~= nil then
448
- self[109] = resolveNumberValue(ability, level, maximumRemainingDuration)
511
+ self[110] = resolveNumberValue(ability, level, maximumRemainingDuration)
449
512
  end
450
513
  local parametersAbilityTypeIds = parameters and parameters.abilityTypeIds or defaultParameters.abilityTypeIds
451
514
  if parametersAbilityTypeIds ~= nil then
@@ -454,24 +517,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
454
517
  abilityTypeIds = {}
455
518
  self._abilityTypeIds = abilityTypeIds
456
519
  end
457
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
520
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
521
+ local abilityParameters = checkNotNull(parametersAbilityTypeIds[abilityTypeId])
458
522
  local addedAbility = _unit:addAbility(abilityTypeId)
459
523
  if addedAbility ~= nil then
460
524
  _unit:makeAbilityPermanent(abilityTypeId, true)
461
525
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
462
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
463
- if abilityParameterKey == "isButtonVisible" then
464
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
465
- _unit:hideAbility(abilityTypeId, true)
466
- end
467
- elseif abilityParameterKey ~= "level" then
468
- abilityParameterKey:setValue(
469
- addedAbility,
470
- resolveNumberValue(ability, level, abilityParameterValue)
471
- )
472
- end
526
+ if abilityParameters.isButtonVisible == false then
527
+ _unit:hideAbility(abilityTypeId, true)
473
528
  end
474
- abilityTypeIds[abilityTypeId] = true
529
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
530
+ field[1]:setValue(
531
+ addedAbility,
532
+ resolveNumberValue(ability, level, field[2])
533
+ )
534
+ end
535
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
475
536
  end
476
537
  end
477
538
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -483,18 +544,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
483
544
  self._behaviors = behaviors
484
545
  end
485
546
  end
486
- local additionalParameters = {}
487
- for key, value in pairs(parameters) do
488
- if not buffParametersKeys[key] then
489
- if ability then
490
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
491
- else
492
- additionalParameters[key] = value
547
+ if parameters ~= nil then
548
+ local additionalParameters = {}
549
+ for ____, key in ipairs(sortedKeysUnnested(parameters)) do
550
+ if not buffParametersKeys[key] then
551
+ if ability then
552
+ additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, parameters[key])
553
+ else
554
+ additionalParameters[key] = parameters[key]
555
+ end
493
556
  end
494
557
  end
495
- end
496
- if (next(additionalParameters)) ~= nil then
497
- self.parameters = additionalParameters
558
+ if (next(additionalParameters)) ~= nil then
559
+ self.parameters = additionalParameters
560
+ end
498
561
  end
499
562
  end
500
563
  if duration ~= nil and duration > 0 then
@@ -504,65 +567,79 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
504
567
  end
505
568
  self:onCreate()
506
569
  self[100] = 1
570
+ Event.invoke(buffCreatedEvent, self)
507
571
  end
508
- function Buff.prototype.getUnitBonus(self, bonusType)
509
- local ____opt_38 = self._bonusIdByBonusType
510
- local bonusId = ____opt_38 and ____opt_38[bonusType]
511
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
572
+ function Buff.prototype.onAbilityGained(self, ability)
573
+ if __TS__InstanceOf(ability, UnitAbility) then
574
+ local abilityCooldownModifier = self[149]
575
+ if abilityCooldownModifier then
576
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
577
+ end
578
+ end
512
579
  end
513
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
514
- local bonusIdByBonusType = self._bonusIdByBonusType
515
- if bonusIdByBonusType == nil then
516
- bonusIdByBonusType = {}
517
- self._bonusIdByBonusType = bonusIdByBonusType
580
+ function Buff.prototype.onAbilityLost(self, ability)
581
+ if __TS__InstanceOf(ability, UnitAbility) then
582
+ local abilityCooldownModifier = self[149]
583
+ if abilityCooldownModifier then
584
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
585
+ end
518
586
  end
519
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
520
587
  end
521
588
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
589
+ self:flash(
590
+ self[106],
591
+ stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin",
592
+ widgetOrXOrParametersOrDuration,
593
+ yOrParametersOrDuration,
594
+ parametersOrDuration
595
+ )
596
+ end
597
+ function Buff.prototype.flashSpecialEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
598
+ self:flash(
599
+ self[107],
600
+ stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin",
601
+ widgetOrXOrParametersOrDuration,
602
+ yOrParametersOrDuration,
603
+ parametersOrDuration
604
+ )
605
+ end
606
+ function Buff.prototype.flash(self, modelPath, attachmentPoint, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
522
607
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
523
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
608
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
524
609
  else
525
610
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
526
- local ____Effect_42 = Effect
527
- local ____Effect_flash_43 = Effect.flash
528
- local ____array_41 = __TS__SparseArrayNew(
529
- self[105],
530
- isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
531
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
532
- )
533
- local ____isWidgetProvided_40
611
+ local ____Effect_44 = Effect
612
+ local ____Effect_flash_45 = Effect.flash
613
+ local ____array_43 = __TS__SparseArrayNew(modelPath, isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit, attachmentPoint)
614
+ local ____isWidgetProvided_42
534
615
  if isWidgetProvided then
535
- ____isWidgetProvided_40 = yOrParametersOrDuration
616
+ ____isWidgetProvided_42 = yOrParametersOrDuration
536
617
  else
537
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
618
+ ____isWidgetProvided_42 = widgetOrXOrParametersOrDuration
538
619
  end
539
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
540
- ____Effect_flash_43(
541
- ____Effect_42,
542
- __TS__SparseArraySpread(____array_41)
620
+ __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
621
+ ____Effect_flash_45(
622
+ ____Effect_44,
623
+ __TS__SparseArraySpread(____array_43)
543
624
  )
544
625
  end
545
626
  end
546
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
547
- local isWidgetProvided = type(widgetOrDuration) == "table"
548
- local ____Effect_46 = Effect
549
- local ____Effect_flash_47 = Effect.flash
550
- local ____array_45 = __TS__SparseArrayNew(
551
- self[106],
552
- isWidgetProvided and widgetOrDuration or self._unit,
553
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
554
- )
555
- local ____isWidgetProvided_44
556
- if isWidgetProvided then
557
- ____isWidgetProvided_44 = duration
558
- else
559
- ____isWidgetProvided_44 = widgetOrDuration
627
+ function Buff.prototype.expire(self)
628
+ expireBuff(self)
629
+ end
630
+ function Buff.prototype.dispel(self, source)
631
+ if self.isDestroyed or self[100] ~= 1 then
632
+ return
633
+ end
634
+ self[100] = 2
635
+ do
636
+ pcall(function()
637
+ self:onDispel(source)
638
+ end)
639
+ do
640
+ self:destroy()
641
+ end
560
642
  end
561
- __TS__SparseArrayPush(____array_45, ____isWidgetProvided_44)
562
- ____Effect_flash_47(
563
- ____Effect_46,
564
- __TS__SparseArraySpread(____array_45)
565
- )
566
643
  end
567
644
  function Buff.prototype.onCreate(self)
568
645
  end
@@ -570,19 +647,25 @@ function Buff.prototype.onDestroy(self)
570
647
  check(self[100] ~= 0, "Cannot destroy a buff that has not finished creating yet.")
571
648
  self[100] = 2
572
649
  local unit = self._unit
650
+ local destructionSoundPresetId = self[105]
651
+ if destructionSoundPresetId ~= nil then
652
+ Sound3D:playFromLabel(destructionSoundPresetId, SoundSettings.Ability, unit)
653
+ end
573
654
  if getUnitAbility(unit.handle, self.typeId) == self.handle then
574
655
  removeBuff(unit.handle, self.typeId)
656
+ else
657
+ removeBuffApplicator(unit.handle, self.typeId)
575
658
  end
576
659
  buffByTypeIdByUnit[unit][self.typeId] = nil
577
- local healingIntervalTimer = self[119]
660
+ local healingIntervalTimer = self[120]
578
661
  if healingIntervalTimer ~= nil then
579
662
  healingIntervalTimer:destroy()
580
- self[119] = nil
663
+ self[120] = nil
581
664
  end
582
- local damageIntervalTimer = self[114]
665
+ local damageIntervalTimer = self[115]
583
666
  if damageIntervalTimer ~= nil then
584
667
  damageIntervalTimer:destroy()
585
- self[114] = nil
668
+ self[115] = nil
586
669
  end
587
670
  if self._timer ~= nil then
588
671
  self._timer:destroy()
@@ -592,26 +675,34 @@ function Buff.prototype.onDestroy(self)
592
675
  behavior:destroy()
593
676
  end
594
677
  end
595
- if self[137] then
678
+ local previousAbilityCooldownModifier = self[149]
679
+ if previousAbilityCooldownModifier then
680
+ for ____, ability in ipairs(self._unit.abilities) do
681
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
682
+ end
683
+ end
684
+ if self[144] then
685
+ unit:decrementInvulnerabilityCounter()
686
+ end
687
+ if self[143] then
596
688
  unit:decrementDisableAutoAttackCounter()
597
689
  end
598
- if self[135] then
599
- if self[136] then
600
- unit:decrementStunCounter()
690
+ if self[141] then
691
+ if self[142] then
692
+ unit:decrementForceStunCounter()
601
693
  end
602
694
  unit:decrementStunCounter()
603
695
  end
696
+ if self[140] then
697
+ unit:decrementGhostCounter()
698
+ end
699
+ unshareVisionWithSource(self)
604
700
  if self._abilityTypeIds ~= nil then
605
- for abilityTypeId in pairs(self._abilityTypeIds) do
701
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
606
702
  unit:removeAbility(abilityTypeId)
607
703
  end
608
704
  end
609
- if self._bonusIdByBonusType ~= nil then
610
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
611
- removeUnitBonus(unit, bonusType, bonusId)
612
- end
613
- end
614
- Event.invoke(buffDestroyEvent, self)
705
+ Event.invoke(buffBeingDestroyedEvent, self)
615
706
  self[100] = 3
616
707
  return UnitBehavior.prototype.onDestroy(self)
617
708
  end
@@ -640,49 +731,51 @@ function Buff.apply(self, ...)
640
731
  end
641
732
  end
642
733
  function Buff.getByTypeId(self, unit, typeId)
643
- local ____opt_48 = buffByTypeIdByUnit[unit]
644
- local buff = ____opt_48 and ____opt_48[typeId]
734
+ local ____opt_46 = buffByTypeIdByUnit[unit]
735
+ local buff = ____opt_46 and ____opt_46[typeId]
645
736
  if __TS__InstanceOf(buff, self) then
646
737
  return buff
647
738
  end
648
739
  return nil
649
740
  end
741
+ function Buff.prototype.onDispel(self, source)
742
+ end
650
743
  function Buff.prototype.onExpiration(self)
651
744
  local unit = self.unit
652
- if self[120] ~= nil then
653
- (self[102] or unit):damageTarget(unit, self[120] or 0)
654
- end
655
745
  if self[121] ~= nil then
656
- (self[102] or unit):healTarget(unit, self[120] or 0)
746
+ (self[102] or unit):damageTarget(unit, self[121] or 0)
657
747
  end
658
- if self[140] then
748
+ if self[122] ~= nil then
749
+ (self[102] or unit):healTarget(unit, self[121] or 0)
750
+ end
751
+ if self[146] then
659
752
  unit:explode()
660
- elseif self[139] then
753
+ elseif self[145] then
661
754
  unit:kill()
662
755
  end
663
756
  end
664
757
  function Buff.prototype.onDeath(self, source)
665
758
  local unit = self.unit
666
- if self[122] ~= nil then
759
+ if self[123] ~= nil then
667
760
  damageArea(
668
761
  self[102] or unit,
669
- self[122],
762
+ self[123],
670
763
  unit.x,
671
764
  unit.y,
765
+ self[125] or 0,
672
766
  self[124] or 0,
673
- self[123] or 0,
767
+ self[127] or 0,
674
768
  self[126] or 0,
675
- self[125] or 0,
676
- self[128] or 0,
677
- self[127] or 0
769
+ self[129] or 0,
770
+ self[128] or 0
678
771
  )
679
772
  end
680
773
  end
681
774
  function Buff.prototype.onDamageDealt(self, target, event)
682
775
  if event.isAttack then
683
- if self[107] ~= nil then
684
- local durationIncrease = self[107]
685
- local maximumDuration = self[108] or 0
776
+ if self[108] ~= nil then
777
+ local durationIncrease = self[108]
778
+ local maximumDuration = self[109] or 0
686
779
  if maximumDuration > 0 then
687
780
  durationIncrease = min(
688
781
  durationIncrease,
@@ -690,31 +783,43 @@ function Buff.prototype.onDamageDealt(self, target, event)
690
783
  )
691
784
  end
692
785
  local remainingDuration = self.remainingDuration + durationIncrease
693
- local maximumRemainingDuration = self[109] or 0
786
+ local maximumRemainingDuration = self[110] or 0
694
787
  if maximumRemainingDuration > 0 then
695
788
  remainingDuration = min(remainingDuration, maximumRemainingDuration)
696
789
  end
697
790
  self.remainingDuration = remainingDuration
698
791
  end
699
- local autoAttackCount = (self[129] or 0) + 1
700
- self[129] = autoAttackCount
701
- if autoAttackCount == self[130] then
792
+ local autoAttackCount = (self[130] or 0) + 1
793
+ self[130] = autoAttackCount
794
+ if autoAttackCount == self[131] then
702
795
  self:destroy()
703
796
  end
704
797
  end
705
798
  if event.originalAmount ~= 0 then
706
- local damageDealtEventCount = (self[131] or 0) + 1
707
- self[131] = damageDealtEventCount
708
- if damageDealtEventCount == self[132] then
799
+ local damageDealtEventCount = (self[132] or 0) + 1
800
+ self[132] = damageDealtEventCount
801
+ if damageDealtEventCount == self[133] then
709
802
  self:destroy()
710
803
  end
711
804
  end
712
805
  end
713
806
  function Buff.prototype.onDamageReceived(self, source, event)
714
807
  if event.originalAmount ~= 0 then
715
- local damageReceivedEventCount = (self[133] or 0) + 1
716
- self[133] = damageReceivedEventCount
717
- if damageReceivedEventCount == self[134] then
808
+ local absorbedDamage = min(event.amount * (self[136] or 1), (self[137] or 0) - (self[138] or 0))
809
+ if absorbedDamage > 0 then
810
+ event.amount = event.amount - absorbedDamage
811
+ self[138] = (self[138] or 0) + absorbedDamage
812
+ local ____self__139_48 = self[139]
813
+ if ____self__139_48 == nil then
814
+ ____self__139_48 = true
815
+ end
816
+ if ____self__139_48 and self[138] >= (self[137] or 0) then
817
+ self:destroy()
818
+ end
819
+ end
820
+ local damageReceivedEventCount = (self[134] or 0) + 1
821
+ self[134] = damageReceivedEventCount
822
+ if damageReceivedEventCount == self[135] then
718
823
  self:destroy()
719
824
  end
720
825
  end
@@ -741,13 +846,13 @@ __TS__SetDescriptor(
741
846
  "remainingDamageOverDuration",
742
847
  {
743
848
  get = function(self)
744
- return self[113] or 0
849
+ return self[114] or 0
745
850
  end,
746
851
  set = function(self, remainingDamageOverDuration)
747
- local remainingDamageOverDurationDelta = remainingDamageOverDuration - (self[113] or 0)
748
- self[113] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
749
- local damageOverDuration = (self[110] or 0) + remainingDamageOverDurationDelta
750
- self[110] = damageOverDuration ~= 0 and damageOverDuration or nil
852
+ local remainingDamageOverDurationDelta = remainingDamageOverDuration - (self[114] or 0)
853
+ self[114] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
854
+ local damageOverDuration = (self[111] or 0) + remainingDamageOverDurationDelta
855
+ self[111] = damageOverDuration ~= 0 and damageOverDuration or nil
751
856
  end
752
857
  },
753
858
  true
@@ -757,13 +862,13 @@ __TS__SetDescriptor(
757
862
  "damageOverDuration",
758
863
  {
759
864
  get = function(self)
760
- return self[110] or 0
865
+ return self[111] or 0
761
866
  end,
762
867
  set = function(self, damageOverDuration)
763
- local damageOverDurationDelta = damageOverDuration - (self[110] or 0)
764
- self[110] = damageOverDuration ~= 0 and damageOverDuration or nil
765
- local remainingDamageOverDuration = (self[113] or 0) + damageOverDurationDelta
766
- self[113] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
868
+ local damageOverDurationDelta = damageOverDuration - (self[111] or 0)
869
+ self[111] = damageOverDuration ~= 0 and damageOverDuration or nil
870
+ local remainingDamageOverDuration = (self[114] or 0) + damageOverDurationDelta
871
+ self[114] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
767
872
  end
768
873
  },
769
874
  true
@@ -773,10 +878,10 @@ __TS__SetDescriptor(
773
878
  "damagePerInterval",
774
879
  {
775
880
  get = function(self)
776
- return self[111] or 0
881
+ return self[112] or 0
777
882
  end,
778
883
  set = function(self, damagePerInterval)
779
- self[111] = damagePerInterval ~= 0 and damagePerInterval or nil
884
+ self[112] = damagePerInterval ~= 0 and damagePerInterval or nil
780
885
  end
781
886
  },
782
887
  true
@@ -786,25 +891,25 @@ __TS__SetDescriptor(
786
891
  "damageInterval",
787
892
  {
788
893
  get = function(self)
789
- return self[112] or 0
894
+ return self[113] or 0
790
895
  end,
791
896
  set = function(self, damageInterval)
792
897
  if damageInterval <= 0 then
793
- self[112] = damageInterval ~= 0 and damageInterval or nil
794
- local timer = self[114]
898
+ self[113] = damageInterval ~= 0 and damageInterval or nil
899
+ local timer = self[115]
795
900
  if timer ~= nil then
796
901
  timer:destroy()
797
- self[114] = nil
902
+ self[115] = nil
798
903
  end
799
904
  return
800
905
  end
801
- self[112] = damageInterval
802
- local ____opt_50 = self._timer
803
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
804
- local timer = self[114]
906
+ self[113] = damageInterval
907
+ local ____opt_49 = self._timer
908
+ local elapsed = ____opt_49 and ____opt_49.elapsed or 0
909
+ local timer = self[115]
805
910
  if timer == nil then
806
911
  timer = Timer:create()
807
- self[114] = timer
912
+ self[115] = timer
808
913
  end
809
914
  local initialDelay = damageInterval - (elapsed >= damageInterval and math.fmod(elapsed, damageInterval) or elapsed)
810
915
  if initialDelay == damageInterval then
@@ -821,13 +926,13 @@ __TS__SetDescriptor(
821
926
  "remainingHealingOverDuration",
822
927
  {
823
928
  get = function(self)
824
- return self[118] or 0
929
+ return self[119] or 0
825
930
  end,
826
931
  set = function(self, remainingHealingOverDuration)
827
- local remainingHealingOverDurationDelta = remainingHealingOverDuration - (self[118] or 0)
828
- self[113] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
829
- local healingOverDuration = (self[115] or 0) + remainingHealingOverDurationDelta
830
- self[115] = healingOverDuration ~= 0 and healingOverDuration or nil
932
+ local remainingHealingOverDurationDelta = remainingHealingOverDuration - (self[119] or 0)
933
+ self[114] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
934
+ local healingOverDuration = (self[116] or 0) + remainingHealingOverDurationDelta
935
+ self[116] = healingOverDuration ~= 0 and healingOverDuration or nil
831
936
  end
832
937
  },
833
938
  true
@@ -837,13 +942,13 @@ __TS__SetDescriptor(
837
942
  "healingOverDuration",
838
943
  {
839
944
  get = function(self)
840
- return self[115] or 0
945
+ return self[116] or 0
841
946
  end,
842
947
  set = function(self, healingOverDuration)
843
- local healingOverDurationDelta = healingOverDuration - (self[115] or 0)
844
- self[115] = healingOverDuration ~= 0 and healingOverDuration or nil
845
- local remainingHealingOverDuration = (self[118] or 0) + healingOverDurationDelta
846
- self[118] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
948
+ local healingOverDurationDelta = healingOverDuration - (self[116] or 0)
949
+ self[116] = healingOverDuration ~= 0 and healingOverDuration or nil
950
+ local remainingHealingOverDuration = (self[119] or 0) + healingOverDurationDelta
951
+ self[119] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
847
952
  end
848
953
  },
849
954
  true
@@ -853,10 +958,10 @@ __TS__SetDescriptor(
853
958
  "healingPerInterval",
854
959
  {
855
960
  get = function(self)
856
- return self[116] or 0
961
+ return self[117] or 0
857
962
  end,
858
963
  set = function(self, healingPerInterval)
859
- self[116] = healingPerInterval ~= 0 and healingPerInterval or nil
964
+ self[117] = healingPerInterval ~= 0 and healingPerInterval or nil
860
965
  end
861
966
  },
862
967
  true
@@ -866,25 +971,25 @@ __TS__SetDescriptor(
866
971
  "healingInterval",
867
972
  {
868
973
  get = function(self)
869
- return self[117] or 0
974
+ return self[118] or 0
870
975
  end,
871
976
  set = function(self, healingInterval)
872
977
  if healingInterval <= 0 then
873
- self[117] = healingInterval ~= 0 and healingInterval or nil
874
- local timer = self[119]
978
+ self[118] = healingInterval ~= 0 and healingInterval or nil
979
+ local timer = self[120]
875
980
  if timer ~= nil then
876
981
  timer:destroy()
877
- self[119] = nil
982
+ self[120] = nil
878
983
  end
879
984
  return
880
985
  end
881
- self[117] = healingInterval
882
- local ____opt_52 = self._timer
883
- local elapsed = ____opt_52 and ____opt_52.elapsed or 0
884
- local timer = self[119]
986
+ self[118] = healingInterval
987
+ local ____opt_51 = self._timer
988
+ local elapsed = ____opt_51 and ____opt_51.elapsed or 0
989
+ local timer = self[120]
885
990
  if timer == nil then
886
991
  timer = Timer:create()
887
- self[119] = timer
992
+ self[120] = timer
888
993
  end
889
994
  local initialDelay = healingInterval - (elapsed >= healingInterval and math.fmod(elapsed, healingInterval) or elapsed)
890
995
  if initialDelay == healingInterval then
@@ -901,10 +1006,10 @@ __TS__SetDescriptor(
901
1006
  "damageOnExpiration",
902
1007
  {
903
1008
  get = function(self)
904
- return self[120] or 0
1009
+ return self[121] or 0
905
1010
  end,
906
1011
  set = function(self, damageOnExpiration)
907
- self[120] = damageOnExpiration ~= 0 and damageOnExpiration or nil
1012
+ self[121] = damageOnExpiration ~= 0 and damageOnExpiration or nil
908
1013
  end
909
1014
  },
910
1015
  true
@@ -914,10 +1019,10 @@ __TS__SetDescriptor(
914
1019
  "healingOnExpiration",
915
1020
  {
916
1021
  get = function(self)
917
- return self[121] or 0
1022
+ return self[122] or 0
918
1023
  end,
919
1024
  set = function(self, healingOnExpiration)
920
- self[121] = healingOnExpiration ~= 0 and healingOnExpiration or nil
1025
+ self[122] = healingOnExpiration ~= 0 and healingOnExpiration or nil
921
1026
  end
922
1027
  },
923
1028
  true
@@ -948,6 +1053,19 @@ __TS__SetDescriptor(
948
1053
  },
949
1054
  true
950
1055
  )
1056
+ __TS__SetDescriptor(
1057
+ Buff.prototype,
1058
+ "returnedMeleeDamageFactor",
1059
+ {
1060
+ get = function(self)
1061
+ return self:getUnitBonus(UnitBonusType.RETURNED_MELEE_DAMAGE_FACTOR)
1062
+ end,
1063
+ set = function(self, returnedMeleeDamageFactor)
1064
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.RETURNED_MELEE_DAMAGE_FACTOR, returnedMeleeDamageFactor)
1065
+ end
1066
+ },
1067
+ true
1068
+ )
951
1069
  __TS__SetDescriptor(
952
1070
  Buff.prototype,
953
1071
  "armorIncrease",
@@ -961,30 +1079,79 @@ __TS__SetDescriptor(
961
1079
  },
962
1080
  true
963
1081
  )
1082
+ __TS__SetDescriptor(
1083
+ Buff.prototype,
1084
+ "maxHealthIncrease",
1085
+ {
1086
+ get = function(self)
1087
+ return self:getUnitBonus(UnitBonusType.HEALTH)
1088
+ end,
1089
+ set = function(self, maxHealthIncrease)
1090
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.HEALTH, maxHealthIncrease)
1091
+ end
1092
+ },
1093
+ true
1094
+ )
1095
+ __TS__SetDescriptor(
1096
+ Buff.prototype,
1097
+ "maxManaIncrease",
1098
+ {
1099
+ get = function(self)
1100
+ return self:getUnitBonus(UnitBonusType.MANA)
1101
+ end,
1102
+ set = function(self, maxManaIncrease)
1103
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA, maxManaIncrease)
1104
+ end
1105
+ },
1106
+ true
1107
+ )
1108
+ __TS__SetDescriptor(
1109
+ Buff.prototype,
1110
+ "turnsIntoGhost",
1111
+ {
1112
+ get = function(self)
1113
+ local ____self__140_53 = self[140]
1114
+ if ____self__140_53 == nil then
1115
+ ____self__140_53 = false
1116
+ end
1117
+ return ____self__140_53
1118
+ end,
1119
+ set = function(self, turnsIntoGhost)
1120
+ if not turnsIntoGhost and self[140] then
1121
+ self.object:decrementGhostCounter()
1122
+ self[140] = nil
1123
+ elseif turnsIntoGhost and not self[140] then
1124
+ self.object:incrementGhostCounter()
1125
+ self[140] = true
1126
+ end
1127
+ end
1128
+ },
1129
+ true
1130
+ )
964
1131
  __TS__SetDescriptor(
965
1132
  Buff.prototype,
966
1133
  "stuns",
967
1134
  {
968
1135
  get = function(self)
969
- local ____self__135_54 = self[135]
970
- if ____self__135_54 == nil then
971
- ____self__135_54 = false
1136
+ local ____self__141_54 = self[141]
1137
+ if ____self__141_54 == nil then
1138
+ ____self__141_54 = false
972
1139
  end
973
- return ____self__135_54
1140
+ return ____self__141_54
974
1141
  end,
975
1142
  set = function(self, stuns)
976
- if not stuns and self[135] then
977
- if self[136] then
978
- self.object:decrementStunCounter()
1143
+ if not stuns and self[141] then
1144
+ if self[142] then
1145
+ self.object:decrementForceStunCounter()
979
1146
  end
980
1147
  self.object:decrementStunCounter()
981
- self[135] = nil
982
- elseif stuns and not self[135] then
983
- if self[136] then
984
- self.object:incrementStunCounter()
1148
+ self[141] = nil
1149
+ elseif stuns and not self[141] then
1150
+ if self[142] then
1151
+ self.object:incrementForceStunCounter()
985
1152
  end
986
1153
  self.object:incrementStunCounter()
987
- self[135] = true
1154
+ self[141] = true
988
1155
  end
989
1156
  end
990
1157
  },
@@ -995,23 +1162,23 @@ __TS__SetDescriptor(
995
1162
  "ignoresStunImmunity",
996
1163
  {
997
1164
  get = function(self)
998
- local ____self__136_55 = self[136]
999
- if ____self__136_55 == nil then
1000
- ____self__136_55 = false
1165
+ local ____self__142_55 = self[142]
1166
+ if ____self__142_55 == nil then
1167
+ ____self__142_55 = false
1001
1168
  end
1002
- return ____self__136_55
1169
+ return ____self__142_55
1003
1170
  end,
1004
1171
  set = function(self, ignoresStunImmunity)
1005
- if not ignoresStunImmunity and self[136] then
1006
- if self[135] then
1007
- self.object:decrementStunCounter()
1172
+ if not ignoresStunImmunity and self[142] then
1173
+ if self[141] then
1174
+ self.object:decrementForceStunCounter()
1008
1175
  end
1009
- self[136] = nil
1010
- elseif ignoresStunImmunity and not self[136] then
1011
- if self[135] then
1012
- self.object:incrementStunCounter()
1176
+ self[142] = nil
1177
+ elseif ignoresStunImmunity and not self[142] then
1178
+ if self[141] then
1179
+ self.object:incrementForceStunCounter()
1013
1180
  end
1014
- self[136] = true
1181
+ self[142] = true
1015
1182
  end
1016
1183
  end
1017
1184
  },
@@ -1022,19 +1189,19 @@ __TS__SetDescriptor(
1022
1189
  "disablesAutoAttack",
1023
1190
  {
1024
1191
  get = function(self)
1025
- local ____self__137_56 = self[137]
1026
- if ____self__137_56 == nil then
1027
- ____self__137_56 = false
1192
+ local ____self__143_56 = self[143]
1193
+ if ____self__143_56 == nil then
1194
+ ____self__143_56 = false
1028
1195
  end
1029
- return ____self__137_56
1196
+ return ____self__143_56
1030
1197
  end,
1031
1198
  set = function(self, disablesAutoAttack)
1032
- if not disablesAutoAttack and self[137] then
1199
+ if not disablesAutoAttack and self[143] then
1033
1200
  self.object:decrementDisableAutoAttackCounter()
1034
- self[137] = nil
1035
- elseif disablesAutoAttack and not self[137] then
1201
+ self[143] = nil
1202
+ elseif disablesAutoAttack and not self[143] then
1036
1203
  self.object:incrementDisableAutoAttackCounter()
1037
- self[137] = true
1204
+ self[143] = true
1038
1205
  end
1039
1206
  end
1040
1207
  },
@@ -1045,19 +1212,19 @@ __TS__SetDescriptor(
1045
1212
  "providesInvulnerability",
1046
1213
  {
1047
1214
  get = function(self)
1048
- local ____self__138_57 = self[138]
1049
- if ____self__138_57 == nil then
1050
- ____self__138_57 = false
1215
+ local ____self__144_57 = self[144]
1216
+ if ____self__144_57 == nil then
1217
+ ____self__144_57 = false
1051
1218
  end
1052
- return ____self__138_57
1219
+ return ____self__144_57
1053
1220
  end,
1054
1221
  set = function(self, providesInvulnerability)
1055
- if not providesInvulnerability and self[138] then
1222
+ if not providesInvulnerability and self[144] then
1056
1223
  self.object:decrementInvulnerabilityCounter()
1057
- self[138] = nil
1058
- elseif providesInvulnerability and not self[138] then
1224
+ self[144] = nil
1225
+ elseif providesInvulnerability and not self[144] then
1059
1226
  self.object:incrementInvulnerabilityCounter()
1060
- self[138] = true
1227
+ self[144] = true
1061
1228
  end
1062
1229
  end
1063
1230
  },
@@ -1068,17 +1235,17 @@ __TS__SetDescriptor(
1068
1235
  "killsOnExpiration",
1069
1236
  {
1070
1237
  get = function(self)
1071
- local ____self__139_58 = self[139]
1072
- if ____self__139_58 == nil then
1073
- ____self__139_58 = false
1238
+ local ____self__145_58 = self[145]
1239
+ if ____self__145_58 == nil then
1240
+ ____self__145_58 = false
1074
1241
  end
1075
- return ____self__139_58
1242
+ return ____self__145_58
1076
1243
  end,
1077
1244
  set = function(self, killsOnExpiration)
1078
- if not killsOnExpiration and self[139] then
1079
- self[139] = nil
1080
- elseif killsOnExpiration and not self[139] then
1081
- self[139] = true
1245
+ if not killsOnExpiration and self[145] then
1246
+ self[145] = nil
1247
+ elseif killsOnExpiration and not self[145] then
1248
+ self[145] = true
1082
1249
  end
1083
1250
  end
1084
1251
  },
@@ -1089,17 +1256,40 @@ __TS__SetDescriptor(
1089
1256
  "explodesOnExpiration",
1090
1257
  {
1091
1258
  get = function(self)
1092
- local ____self__140_59 = self[140]
1093
- if ____self__140_59 == nil then
1094
- ____self__140_59 = false
1259
+ local ____self__146_59 = self[146]
1260
+ if ____self__146_59 == nil then
1261
+ ____self__146_59 = false
1095
1262
  end
1096
- return ____self__140_59
1263
+ return ____self__146_59
1097
1264
  end,
1098
1265
  set = function(self, killsOnExpiration)
1099
- if not killsOnExpiration and self[140] then
1100
- self[140] = nil
1101
- elseif killsOnExpiration and not self[140] then
1102
- self[140] = true
1266
+ if not killsOnExpiration and self[146] then
1267
+ self[146] = nil
1268
+ elseif killsOnExpiration and not self[146] then
1269
+ self[146] = true
1270
+ end
1271
+ end
1272
+ },
1273
+ true
1274
+ )
1275
+ __TS__SetDescriptor(
1276
+ Buff.prototype,
1277
+ "sharesVisionWithSource",
1278
+ {
1279
+ get = function(self)
1280
+ local ____self__150_60 = self[150]
1281
+ if ____self__150_60 == nil then
1282
+ ____self__150_60 = false
1283
+ end
1284
+ return ____self__150_60
1285
+ end,
1286
+ set = function(self, sharesVisionWithSource)
1287
+ if not sharesVisionWithSource and self[150] then
1288
+ unshareVisionWithSource(self)
1289
+ self[150] = nil
1290
+ elseif sharesVisionWithSource and not self[150] then
1291
+ self[150] = true
1292
+ shareVisionWithSource(self)
1103
1293
  end
1104
1294
  end
1105
1295
  },
@@ -1110,13 +1300,13 @@ __TS__SetDescriptor(
1110
1300
  "maximumDamageDealtEventCount",
1111
1301
  {
1112
1302
  get = function(self)
1113
- return self[132] or 0
1303
+ return self[133] or 0
1114
1304
  end,
1115
1305
  set = function(self, maximumDamageDealtEventCount)
1116
1306
  if maximumDamageDealtEventCount == 0 then
1117
- self[132] = nil
1307
+ self[133] = nil
1118
1308
  else
1119
- self[132] = maximumDamageDealtEventCount
1309
+ self[133] = maximumDamageDealtEventCount
1120
1310
  end
1121
1311
  end
1122
1312
  },
@@ -1127,13 +1317,13 @@ __TS__SetDescriptor(
1127
1317
  "maximumDamageReceivedEventCount",
1128
1318
  {
1129
1319
  get = function(self)
1130
- return self[134] or 0
1320
+ return self[135] or 0
1131
1321
  end,
1132
1322
  set = function(self, maximumDamageReceivedEventCount)
1133
1323
  if maximumDamageReceivedEventCount == 0 then
1134
- self[134] = nil
1324
+ self[135] = nil
1135
1325
  else
1136
- self[134] = maximumDamageReceivedEventCount
1326
+ self[135] = maximumDamageReceivedEventCount
1137
1327
  end
1138
1328
  end
1139
1329
  },
@@ -1144,13 +1334,13 @@ __TS__SetDescriptor(
1144
1334
  "maximumAutoAttackCount",
1145
1335
  {
1146
1336
  get = function(self)
1147
- return self[130] or 0
1337
+ return self[131] or 0
1148
1338
  end,
1149
1339
  set = function(self, maximumAutoAttackCount)
1150
1340
  if maximumAutoAttackCount == 0 then
1151
- self[130] = nil
1341
+ self[131] = nil
1152
1342
  else
1153
- self[130] = maximumAutoAttackCount
1343
+ self[131] = maximumAutoAttackCount
1154
1344
  end
1155
1345
  end
1156
1346
  },
@@ -1161,10 +1351,10 @@ __TS__SetDescriptor(
1161
1351
  "durationIncreaseOnAutoAttack",
1162
1352
  {
1163
1353
  get = function(self)
1164
- return self[107] or 0
1354
+ return self[108] or 0
1165
1355
  end,
1166
1356
  set = function(self, durationIncreaseOnAutoAttack)
1167
- self[107] = durationIncreaseOnAutoAttack
1357
+ self[108] = durationIncreaseOnAutoAttack
1168
1358
  end
1169
1359
  },
1170
1360
  true
@@ -1208,12 +1398,39 @@ __TS__SetDescriptor(
1208
1398
  },
1209
1399
  true
1210
1400
  )
1401
+ __TS__SetDescriptor(
1402
+ Buff.prototype,
1403
+ "manaRegenerationRateIncreaseFactor",
1404
+ {
1405
+ get = function(self)
1406
+ return self:getUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR)
1407
+ end,
1408
+ set = function(self, manaRegenerationRateIncreaseFactor)
1409
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR, manaRegenerationRateIncreaseFactor)
1410
+ end
1411
+ },
1412
+ true
1413
+ )
1211
1414
  __TS__SetDescriptor(
1212
1415
  Buff.prototype,
1213
1416
  "duration",
1214
- {get = function(self)
1215
- return self[103]
1216
- end},
1417
+ {
1418
+ get = function(self)
1419
+ return self[103]
1420
+ end,
1421
+ set = function(self, duration)
1422
+ if duration <= 0 then
1423
+ local timer = self._timer
1424
+ if timer ~= nil then
1425
+ timer:destroy()
1426
+ self._timer = nil
1427
+ end
1428
+ self[103] = 0
1429
+ else
1430
+ self.remainingDuration = self.remainingDuration + (duration - self[103])
1431
+ end
1432
+ end
1433
+ },
1217
1434
  true
1218
1435
  )
1219
1436
  __TS__SetDescriptor(
@@ -1221,13 +1438,13 @@ __TS__SetDescriptor(
1221
1438
  "remainingDuration",
1222
1439
  {
1223
1440
  get = function(self)
1224
- local ____opt_60 = self._timer
1225
- return ____opt_60 and ____opt_60.remaining or 0
1441
+ local ____opt_61 = self._timer
1442
+ return ____opt_61 and ____opt_61.remaining or 0
1226
1443
  end,
1227
1444
  set = function(self, remainingDuration)
1228
- local ____remainingDuration_64 = remainingDuration
1229
- local ____opt_62 = self._timer
1230
- local remainingDurationDelta = ____remainingDuration_64 - (____opt_62 and ____opt_62.remaining or 0)
1445
+ local ____remainingDuration_65 = remainingDuration
1446
+ local ____opt_63 = self._timer
1447
+ local remainingDurationDelta = ____remainingDuration_65 - (____opt_63 and ____opt_63.remaining or 0)
1231
1448
  if remainingDurationDelta ~= 0 then
1232
1449
  self[103] = self[103] + remainingDurationDelta
1233
1450
  if remainingDuration <= 0 then
@@ -1242,7 +1459,7 @@ __TS__SetDescriptor(
1242
1459
  remainingDuration,
1243
1460
  self._spellStealPriority,
1244
1461
  self._learnLevelMinimum,
1245
- self[141]
1462
+ self[147]
1246
1463
  ) then
1247
1464
  local timer = self._timer
1248
1465
  if timer == nil then
@@ -1257,37 +1474,134 @@ __TS__SetDescriptor(
1257
1474
  },
1258
1475
  true
1259
1476
  )
1260
- Buff.destroyEvent = buffDestroyEvent;
1477
+ __TS__SetDescriptor(
1478
+ Buff.prototype,
1479
+ "absorbedDamageFactor",
1480
+ {
1481
+ get = function(self)
1482
+ return self[136] or 1
1483
+ end,
1484
+ set = function(self, absorbedDamageFactor)
1485
+ if absorbedDamageFactor == 1 then
1486
+ self[136] = nil
1487
+ else
1488
+ self[136] = absorbedDamageFactor
1489
+ end
1490
+ end
1491
+ },
1492
+ true
1493
+ )
1494
+ __TS__SetDescriptor(
1495
+ Buff.prototype,
1496
+ "maximumDamageAbsorbed",
1497
+ {
1498
+ get = function(self)
1499
+ return self[137] or 0
1500
+ end,
1501
+ set = function(self, maximumDamageAbsorbed)
1502
+ if maximumDamageAbsorbed == 0 then
1503
+ self[137] = nil
1504
+ else
1505
+ self[137] = maximumDamageAbsorbed
1506
+ end
1507
+ end
1508
+ },
1509
+ true
1510
+ )
1511
+ __TS__SetDescriptor(
1512
+ Buff.prototype,
1513
+ "damageAbsorbed",
1514
+ {get = function(self)
1515
+ return self[138] or 0
1516
+ end},
1517
+ true
1518
+ )
1519
+ __TS__SetDescriptor(
1520
+ Buff.prototype,
1521
+ "destroysOnMaximumDamageAbsorbed",
1522
+ {
1523
+ get = function(self)
1524
+ local ____self__139_66 = self[139]
1525
+ if ____self__139_66 == nil then
1526
+ ____self__139_66 = true
1527
+ end
1528
+ return ____self__139_66
1529
+ end,
1530
+ set = function(self, destroysOnMaximumDamageAbsorbed)
1531
+ local ____destroysOnMaximumDamageAbsorbed_67
1532
+ if destroysOnMaximumDamageAbsorbed then
1533
+ ____destroysOnMaximumDamageAbsorbed_67 = nil
1534
+ else
1535
+ ____destroysOnMaximumDamageAbsorbed_67 = false
1536
+ end
1537
+ self[139] = ____destroysOnMaximumDamageAbsorbed_67
1538
+ end
1539
+ },
1540
+ true
1541
+ )
1542
+ __TS__SetDescriptor(
1543
+ Buff.prototype,
1544
+ "abilityCooldownFactor",
1545
+ {
1546
+ get = function(self)
1547
+ return self[148] or 1
1548
+ end,
1549
+ set = function(self, abilityCooldownFactor)
1550
+ local previousAbilityCooldownModifier = self[149]
1551
+ if previousAbilityCooldownModifier then
1552
+ for ____, ability in ipairs(self._unit.abilities) do
1553
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
1554
+ end
1555
+ end
1556
+ local function modifier(ability, level, cooldown)
1557
+ return cooldown * abilityCooldownFactor
1558
+ end
1559
+ for ____, ability in ipairs(self._unit.abilities) do
1560
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1561
+ end
1562
+ self[149] = modifier
1563
+ self[148] = abilityCooldownFactor
1564
+ end
1565
+ },
1566
+ true
1567
+ )
1568
+ Buff.createdEvent = buffCreatedEvent
1569
+ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1261
1570
  (function(self)
1262
- local function destroyBuffIfNeeded(buff)
1263
- if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
1264
- buff:destroy()
1571
+ local function destroyBuffIfNeeded(buff, isDispel, source)
1572
+ local currentHandle = getUnitAbility(buff[101].handle, buff.typeId)
1573
+ if currentHandle ~= buff.handle and buff[100] == 1 then
1574
+ if isDispel and currentHandle == nil and buff.unit.isAlive and buff.resistanceType == 1 and (buff._timer == nil or buff.remainingDuration > 0) then
1575
+ buff:dispel(source)
1576
+ else
1577
+ buff:destroy()
1578
+ end
1265
1579
  end
1266
1580
  end
1267
- ____exports.checkBuff = function(unit, buffTypeId)
1581
+ ____exports.checkBuff = function(unit, buffTypeId, isDispel, source)
1268
1582
  local buffByTypeId = buffByTypeIdByUnit[unit]
1269
1583
  if buffByTypeId ~= nil then
1270
1584
  local buff = buffByTypeId[buffTypeId]
1271
1585
  if buff ~= nil then
1272
- destroyBuffIfNeeded(buff)
1586
+ destroyBuffIfNeeded(buff, isDispel, source)
1273
1587
  end
1274
1588
  end
1275
1589
  end
1276
- ____exports.checkBuffs = function(unit)
1277
- ____exports.Buff:forAll(unit, destroyBuffIfNeeded)
1590
+ ____exports.checkBuffs = function(unit, isDispel, source)
1591
+ ____exports.Buff:forAll(unit, destroyBuffIfNeeded, isDispel, source)
1278
1592
  end
1279
1593
  Unit.abilityChannelingStartEvent:addListener(
1280
1594
  0,
1281
1595
  function(caster)
1282
- ____exports.checkBuffs(caster)
1283
- Timer:run(____exports.checkBuffs, caster)
1596
+ ____exports.checkBuffs(caster, true, caster)
1597
+ Timer:run(____exports.checkBuffs, caster, true, caster)
1284
1598
  end
1285
1599
  )
1286
1600
  Unit.abilityUnitTargetChannelingStartEvent:addListener(
1287
1601
  0,
1288
1602
  function(caster, ability, target)
1289
- ____exports.checkBuffs(target)
1290
- Timer:run(____exports.checkBuffs, target)
1603
+ ____exports.checkBuffs(target, true, caster)
1604
+ Timer:run(____exports.checkBuffs, target, true, caster)
1291
1605
  end
1292
1606
  )
1293
1607
  Unit.abilityPointTargetChannelingStartEvent:addListener(
@@ -1298,18 +1612,53 @@ Buff.destroyEvent = buffDestroyEvent;
1298
1612
  y,
1299
1613
  ability:getField(ABILITY_RLF_AREA_OF_EFFECT)
1300
1614
  )
1301
- forEach(units, ____exports.checkBuffs)
1302
- Timer:run(forEach, units, ____exports.checkBuffs)
1615
+ forEach(units, ____exports.checkBuffs, true, caster)
1616
+ Timer:run(
1617
+ forEach,
1618
+ units,
1619
+ ____exports.checkBuffs,
1620
+ true,
1621
+ caster
1622
+ )
1623
+ end
1624
+ )
1625
+ Unit.abilityNoTargetChannelingStartEvent:addListener(
1626
+ 0,
1627
+ function(caster, ability)
1628
+ local radius = ability:getField(ABILITY_RLF_AREA_OF_EFFECT)
1629
+ if radius > 0 then
1630
+ local units = Unit:getInCollisionRange(caster.x, caster.y, radius)
1631
+ forEach(units, ____exports.checkBuffs, true, caster)
1632
+ Timer:run(
1633
+ forEach,
1634
+ units,
1635
+ ____exports.checkBuffs,
1636
+ true,
1637
+ caster
1638
+ )
1639
+ end
1303
1640
  end
1304
1641
  )
1305
1642
  Unit.onDamage:addListener(
1306
1643
  0,
1307
1644
  function(source, target)
1308
1645
  if source ~= nil then
1309
- ____exports.checkBuffs(source)
1646
+ Timer:run(____exports.checkBuffs, source, false)
1310
1647
  end
1311
- ____exports.checkBuffs(target)
1648
+ Timer:run(____exports.checkBuffs, target, false)
1649
+ end
1650
+ )
1651
+ Unit.deathEvent:addListener(
1652
+ -999999,
1653
+ function(unit)
1654
+ ____exports.Buff:forAll(unit, destroyBuffOnDeath)
1312
1655
  end
1313
1656
  )
1657
+ buffCreatedEvent:addListener(function(buff)
1658
+ UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1659
+ end)
1660
+ buffBeingDestroyedEvent:addListener(function(buff)
1661
+ UnitBehavior:forAll(buff.unit, "onBuffLost", buff)
1662
+ end)
1314
1663
  end)(Buff)
1315
1664
  return ____exports