warscript 0.0.1-dev.d750e38 → 0.0.1-dev.d77b529

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 (413) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/dummy.lua +4 -2
  6. package/core/types/effect.d.ts +12 -4
  7. package/core/types/effect.lua +67 -104
  8. package/core/types/frame.d.ts +1 -0
  9. package/core/types/frame.lua +136 -58
  10. package/core/types/handle.lua +9 -9
  11. package/core/types/item.d.ts +1 -0
  12. package/core/types/item.lua +1 -0
  13. package/core/types/player.d.ts +18 -1
  14. package/core/types/player.lua +76 -26
  15. package/core/types/playerCamera.d.ts +2 -0
  16. package/core/types/playerCamera.lua +123 -5
  17. package/core/types/playerColor.lua +4 -3
  18. package/core/types/sound.d.ts +18 -25
  19. package/core/types/sound.lua +113 -33
  20. package/core/types/tileCell.d.ts +11 -1
  21. package/core/types/tileCell.lua +97 -0
  22. package/core/types/timer.d.ts +9 -8
  23. package/core/types/timer.lua +45 -23
  24. package/core/types/unit.d.ts +5 -0
  25. package/core/types/unit.lua +5 -0
  26. package/core/util.d.ts +3 -1
  27. package/core/util.lua +115 -4
  28. package/decl/native.d.ts +1718 -964
  29. package/destroyable.d.ts +1 -0
  30. package/destroyable.lua +9 -0
  31. package/engine/behavior.d.ts +14 -1
  32. package/engine/behavior.lua +230 -70
  33. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  34. package/engine/behaviour/ability/apply-buff.lua +36 -4
  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 +1 -1
  39. package/engine/behaviour/ability/emulate-impact.lua +23 -7
  40. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  41. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  42. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  43. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  44. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  45. package/engine/behaviour/ability/restore-mana.lua +6 -6
  46. package/engine/behaviour/ability.d.ts +17 -5
  47. package/engine/behaviour/ability.lua +97 -24
  48. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  49. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  50. package/engine/behaviour/unit.d.ts +41 -2
  51. package/engine/behaviour/unit.lua +270 -6
  52. package/engine/buff.d.ts +121 -59
  53. package/engine/buff.lua +605 -301
  54. package/engine/index.d.ts +2 -1
  55. package/engine/internal/ability.d.ts +11 -1
  56. package/engine/internal/ability.lua +104 -44
  57. package/engine/internal/item/ability.lua +63 -11
  58. package/engine/internal/item/fields.d.ts +12 -0
  59. package/engine/internal/item/fields.lua +33 -0
  60. package/engine/internal/item/owner-cache.d.ts +5 -0
  61. package/engine/internal/item/owner-cache.lua +4 -0
  62. package/engine/internal/item+owner.d.ts +2 -0
  63. package/engine/internal/item+owner.lua +37 -8
  64. package/engine/internal/item.d.ts +34 -18
  65. package/engine/internal/item.lua +308 -102
  66. package/engine/internal/mechanics/ability-duration.lua +1 -1
  67. package/engine/internal/mechanics/cast-ability.lua +6 -3
  68. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  69. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  70. package/engine/internal/misc/frame-coordinates.lua +21 -0
  71. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  72. package/engine/internal/misc/get-terrain-z.lua +11 -0
  73. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  74. package/engine/internal/misc/player-local-handle.lua +5 -0
  75. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  76. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  77. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  78. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  79. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  80. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  81. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  82. package/engine/internal/object-data/evasion-probability.lua +16 -0
  83. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  84. package/engine/internal/object-data/health-bonus.lua +16 -0
  85. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  86. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  87. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  88. package/engine/internal/object-data/mana-bonus.lua +16 -0
  89. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  90. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  91. package/engine/internal/unit/ability.d.ts +35 -0
  92. package/engine/internal/unit/ability.lua +113 -12
  93. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  94. package/engine/internal/unit/add-item-to-slot.lua +57 -14
  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 +16 -0
  102. package/engine/internal/unit/bonus.lua +119 -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/pseudo-passive-abilities.d.ts +2 -0
  127. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  128. package/engine/internal/unit/range-event.d.ts +12 -0
  129. package/engine/internal/unit/range-event.lua +90 -0
  130. package/engine/internal/unit/scale.d.ts +7 -0
  131. package/engine/internal/unit/scale.lua +20 -0
  132. package/engine/internal/unit+ability.d.ts +2 -1
  133. package/engine/internal/unit+ability.lua +73 -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 +58 -32
  140. package/engine/internal/unit-missile-launch.lua +65 -27
  141. package/engine/internal/unit.d.ts +43 -33
  142. package/engine/internal/unit.lua +391 -323
  143. package/engine/lightning.d.ts +4 -3
  144. package/engine/lightning.lua +22 -15
  145. package/engine/local-client.d.ts +28 -0
  146. package/engine/local-client.lua +324 -54
  147. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  148. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  149. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  150. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  151. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  152. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  153. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  154. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  155. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  156. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  157. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  158. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  159. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  160. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  161. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  162. package/engine/object-data/auxiliary/item-class.lua +2 -0
  163. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  164. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  165. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  166. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  167. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  168. package/engine/object-data/auxiliary/order-type.lua +2 -0
  169. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  170. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  171. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  172. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  173. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  174. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  175. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  176. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  177. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  178. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  179. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  180. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  181. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  182. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  183. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  184. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  185. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  186. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -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.d.ts +3 -0
  192. package/engine/object-data/entry/ability-type/blank-configurable.lua +42 -1
  193. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  194. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  195. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  196. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  197. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  198. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  199. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  200. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  201. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  202. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  203. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  204. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  205. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  206. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  207. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  208. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  209. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  210. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  211. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  212. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  213. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  214. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  215. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  216. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  217. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  218. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  219. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  220. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  221. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  222. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  223. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  224. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  225. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  226. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  227. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  228. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  229. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  230. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  231. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  232. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  233. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  234. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  235. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  236. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  237. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  238. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  239. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  240. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  241. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  242. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  243. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  244. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  245. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  246. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  247. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  248. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  249. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  250. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  251. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  252. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  253. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  254. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  255. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  256. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  257. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  258. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  259. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  260. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  261. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  262. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  263. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  264. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  265. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  266. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  267. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  268. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  269. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  270. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  271. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  272. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  273. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  274. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  275. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  276. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  277. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  278. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  279. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  280. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  281. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  282. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  283. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  284. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  285. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  286. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  287. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  288. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  289. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  290. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  291. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  292. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  293. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  294. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  295. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  296. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  297. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  298. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  299. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  300. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  301. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  302. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  303. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  304. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  305. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  306. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  307. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  308. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  309. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  310. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  311. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  312. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  313. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  314. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  315. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  316. package/engine/object-data/entry/ability-type/web.lua +52 -0
  317. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  318. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  319. package/engine/object-data/entry/ability-type.d.ts +36 -19
  320. package/engine/object-data/entry/ability-type.lua +307 -29
  321. package/engine/object-data/entry/buff-type/applicable.lua +122 -137
  322. package/engine/object-data/entry/buff-type.d.ts +10 -12
  323. package/engine/object-data/entry/buff-type.lua +39 -29
  324. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  325. package/engine/object-data/entry/destructible-type.lua +181 -0
  326. package/engine/object-data/entry/item-type.d.ts +18 -3
  327. package/engine/object-data/entry/item-type.lua +88 -4
  328. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  329. package/engine/object-data/entry/lightning-type.lua +1 -1
  330. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  331. package/engine/object-data/entry/sound-preset.lua +140 -0
  332. package/engine/object-data/entry/unit-type.d.ts +71 -6
  333. package/engine/object-data/entry/unit-type.lua +592 -93
  334. package/engine/object-data/entry/upgrade.d.ts +2 -2
  335. package/engine/object-data/entry/upgrade.lua +4 -4
  336. package/engine/object-data/entry.d.ts +21 -14
  337. package/engine/object-data/entry.lua +68 -32
  338. package/engine/object-field/ability.d.ts +4 -4
  339. package/engine/object-field/ability.lua +9 -8
  340. package/engine/object-field/item.d.ts +22 -0
  341. package/engine/object-field/item.lua +118 -0
  342. package/engine/object-field/unit.d.ts +72 -3
  343. package/engine/object-field/unit.lua +268 -7
  344. package/engine/object-field.d.ts +26 -7
  345. package/engine/object-field.lua +360 -119
  346. package/engine/random.d.ts +10 -0
  347. package/engine/random.lua +21 -0
  348. package/engine/standard/entries/ability-type.d.ts +3102 -7
  349. package/engine/standard/entries/ability-type.lua +0 -6
  350. package/engine/standard/entries/buff-type.d.ts +3 -0
  351. package/engine/standard/entries/buff-type.lua +3 -0
  352. package/engine/standard/entries/item-type.d.ts +1299 -0
  353. package/engine/standard/entries/item-type.lua +2 -0
  354. package/engine/standard/entries/lightning-type.d.ts +42 -15
  355. package/engine/standard/entries/lightning-type.lua +0 -14
  356. package/engine/standard/entries/sound-preset.d.ts +10 -0
  357. package/engine/standard/entries/sound-preset.lua +10 -0
  358. package/engine/standard/entries/unit-type.d.ts +5 -0
  359. package/engine/standard/entries/unit-type.lua +5 -0
  360. package/engine/standard/fields/ability.d.ts +2 -2
  361. package/engine/standard/fields/ability.lua +2 -2
  362. package/engine/standard/fields/item.d.ts +4 -0
  363. package/engine/standard/fields/item.lua +6 -0
  364. package/engine/standard/fields/unit.d.ts +12 -0
  365. package/engine/standard/fields/unit.lua +20 -0
  366. package/engine/synchronization.d.ts +11 -0
  367. package/engine/synchronization.lua +77 -0
  368. package/engine/text-tag.d.ts +36 -2
  369. package/engine/text-tag.lua +250 -10
  370. package/engine/unit.d.ts +11 -1
  371. package/engine/unit.lua +11 -1
  372. package/event.d.ts +1 -1
  373. package/lualib_bundle.lua +1 -1
  374. package/math.d.ts +2 -0
  375. package/math.lua +14 -0
  376. package/net/socket.lua +1 -1
  377. package/network.lua +25 -1
  378. package/objutil/buff.lua +12 -11
  379. package/objutil/object.lua +1 -1
  380. package/objutil/unit.lua +8 -0
  381. package/operation.d.ts +8 -1
  382. package/operation.lua +38 -18
  383. package/package.json +3 -23
  384. package/patch-lua.lua +15 -0
  385. package/patch-lualib.lua +1 -1
  386. package/utility/arrays.d.ts +2 -0
  387. package/utility/arrays.lua +11 -0
  388. package/utility/callback-array.d.ts +17 -0
  389. package/utility/callback-array.lua +61 -0
  390. package/utility/functions.d.ts +8 -0
  391. package/utility/functions.lua +13 -0
  392. package/utility/linked-map.d.ts +35 -0
  393. package/utility/linked-map.lua +107 -0
  394. package/utility/linked-set.d.ts +5 -1
  395. package/utility/linked-set.lua +49 -1
  396. package/utility/lua-maps.d.ts +15 -2
  397. package/utility/lua-maps.lua +53 -2
  398. package/utility/lua-sets.d.ts +2 -0
  399. package/utility/lua-sets.lua +7 -0
  400. package/utility/random.d.ts +102 -0
  401. package/utility/random.lua +273 -0
  402. package/utility/records.lua +20 -1
  403. package/utility/reflection.lua +11 -7
  404. package/utility/types.d.ts +3 -0
  405. package/utility/unordered-map.d.ts +27 -0
  406. package/utility/unordered-map.lua +99 -0
  407. package/core/types/order.d.ts +0 -25
  408. package/core/types/order.lua +0 -55
  409. package/engine/internal/unit/item.lua +0 -78
  410. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  411. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  412. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  413. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/engine/buff.lua CHANGED
@@ -16,6 +16,7 @@ local internalApplyBuff = ____applicable.internalApplyBuff
16
16
  local removeBuff = ____applicable.removeBuff
17
17
  local ____ability = require("engine.internal.ability")
18
18
  local Ability = ____ability.Ability
19
+ local UnitAbility = ____ability.UnitAbility
19
20
  local ____ability = require("engine.object-field.ability")
20
21
  local AbilityBooleanField = ____ability.AbilityBooleanField
21
22
  local AbilityNumberField = ____ability.AbilityNumberField
@@ -28,13 +29,11 @@ local ____math = require("math")
28
29
  local max = ____math.max
29
30
  local min = ____math.min
30
31
  local ____bonus = require("engine.internal.unit.bonus")
31
- local addOrUpdateOrRemoveUnitBonus = ____bonus.addOrUpdateOrRemoveUnitBonus
32
- local getUnitBonus = ____bonus.getUnitBonus
33
- local removeUnitBonus = ____bonus.removeUnitBonus
34
32
  local UnitBonusType = ____bonus.UnitBonusType
35
33
  local ____area_2Ddamage = require("engine.internal.mechanics.area-damage")
36
34
  local damageArea = ____area_2Ddamage.damageArea
37
35
  local ____preconditions = require("utility.preconditions")
36
+ local check = ____preconditions.check
38
37
  local checkNotNull = ____preconditions.checkNotNull
39
38
  local ____effect = require("core.types.effect")
40
39
  local Effect = ____effect.Effect
@@ -43,13 +42,22 @@ local BuffType = ____buff_2Dtype.BuffType
43
42
  local ____unit = require("engine.behaviour.unit")
44
43
  local UnitBehavior = ____unit.UnitBehavior
45
44
  local ____arrays = require("utility.arrays")
45
+ local emptyArray = ____arrays.emptyArray
46
46
  local forEach = ____arrays.forEach
47
+ local ____event = require("event")
48
+ local Event = ____event.Event
47
49
  local ____ability_2Dduration = require("engine.internal.mechanics.ability-duration")
48
50
  local getAbilityDuration = ____ability_2Dduration.getAbilityDuration
49
51
  local ____item = require("engine.internal.item")
50
52
  local Item = ____item.Item
51
53
  local ____destructable = require("core.types.destructable")
52
54
  local Destructable = ____destructable.Destructable
55
+ local ____ability = require("engine.standard.fields.ability")
56
+ local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
57
+ local ____ability = require("engine.behaviour.ability")
58
+ local AbilityBehavior = ____ability.AbilityBehavior
59
+ local ____records = require("utility.records")
60
+ local sortedKeysUnnested = ____records.sortedKeysUnnested
53
61
  local getUnitAbility = BlzGetUnitAbility
54
62
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
55
63
  local stringValueByBuffTypeIdByFieldId = {}
@@ -95,15 +103,20 @@ local buffParametersKeys = {
95
103
  damageIncrease = true,
96
104
  damageIncreaseFactor = true,
97
105
  armorIncrease = true,
98
- armorIncreaseFactor = true,
106
+ maxHealthIncrease = true,
107
+ maxManaIncrease = true,
99
108
  attackSpeedIncreaseFactor = true,
100
109
  movementSpeedIncreaseFactor = true,
110
+ manaRegenerationRateIncreaseFactor = true,
111
+ evasionProbability = true,
112
+ missProbability = true,
101
113
  damageFactor = true,
102
114
  receivedDamageFactor = true,
103
115
  receivedMagicDamageFactor = true,
104
116
  durationIncreaseOnAutoAttack = true,
105
117
  maximumDuration = true,
106
118
  maximumRemainingDuration = true,
119
+ turnsIntoGhost = true,
107
120
  stuns = true,
108
121
  ignoresStunImmunity = true,
109
122
  providesStunImmunity = true,
@@ -114,11 +127,15 @@ local buffParametersKeys = {
114
127
  maximumAutoAttackCount = true,
115
128
  maximumDamageDealtEventCount = true,
116
129
  maximumDamageReceivedEventCount = true,
130
+ absorbedDamageFactor = true,
131
+ maximumDamageAbsorbed = true,
132
+ destroysOnMaximumDamageAbsorbed = true,
117
133
  uniqueGroup = true,
118
134
  damageOnExpiration = true,
119
135
  healingOnExpiration = true,
120
136
  killsOnExpiration = true,
121
- explodesOnExpiration = true
137
+ explodesOnExpiration = true,
138
+ abilityCooldownFactor = true
122
139
  }
123
140
  local function resolveEnumValue(ability, level, value)
124
141
  if value == nil or type(value) == "number" then
@@ -169,6 +186,8 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
169
186
  end
170
187
  end
171
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
190
+ "turnsIntoGhost",
172
191
  "stuns",
173
192
  "ignoresStunImmunity",
174
193
  "disablesAutoAttack",
@@ -180,7 +199,11 @@ local buffNumberParameters = {
180
199
  "durationIncreaseOnAutoAttack",
181
200
  "attackSpeedIncreaseFactor",
182
201
  "movementSpeedIncreaseFactor",
202
+ "manaRegenerationRateIncreaseFactor",
203
+ "evasionProbability",
183
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
184
207
  "damageFactor",
185
208
  "receivedDamageFactor",
186
209
  "maximumAutoAttackCount",
@@ -193,7 +216,10 @@ local buffNumberParameters = {
193
216
  "healingPerInterval",
194
217
  "healingOverDuration",
195
218
  "damageOnExpiration",
196
- "healingOnExpiration"
219
+ "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
222
+ "abilityCooldownFactor"
197
223
  }
198
224
  local unsuccessfulApplicationMarker = {}
199
225
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -220,7 +246,7 @@ local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
220
246
  return checkNotNull(firstNativeBuffTypeId)
221
247
  end
222
248
  local function destroyBuffIfItHasSameUniqueGroup(buff, uniqueGroup)
223
- if buff[103] == uniqueGroup then
249
+ if buff[104] == uniqueGroup then
224
250
  buff:destroy()
225
251
  end
226
252
  end
@@ -228,17 +254,21 @@ local function destroyBuff(buff)
228
254
  buff:destroy()
229
255
  end
230
256
  local function expireBuff(buff)
231
- local remainingDamageOverDuration = buff[112] or 0
232
- local remainingHealingOverDuration = buff[112] or 0
257
+ if buff.isDestroyed or buff[100] ~= 1 then
258
+ return
259
+ end
260
+ buff[100] = 2
261
+ local remainingDamageOverDuration = buff[113] or 0
262
+ local remainingHealingOverDuration = buff[113] or 0
233
263
  if remainingDamageOverDuration ~= 0 or remainingHealingOverDuration ~= 0 then
234
264
  buff:flashSpecialEffect()
235
265
  if remainingDamageOverDuration ~= 0 then
236
- (buff[101] or buff[100]):damageTarget(buff[100], remainingDamageOverDuration)
237
- buff[112] = nil
266
+ (buff[102] or buff[101]):damageTarget(buff[101], remainingDamageOverDuration)
267
+ buff[113] = nil
238
268
  end
239
269
  if remainingHealingOverDuration ~= 0 then
240
- (buff[101] or buff[100]):healTarget(buff[100], remainingHealingOverDuration)
241
- buff[117] = nil
270
+ (buff[102] or buff[101]):healTarget(buff[101], remainingHealingOverDuration)
271
+ buff[118] = nil
242
272
  end
243
273
  end
244
274
  Timer:run(destroyBuff, buff)
@@ -246,56 +276,58 @@ local function expireBuff(buff)
246
276
  end
247
277
  local function buffDamageIntervalInitialTimerCallback(buff)
248
278
  buffDamageIntervalTimerCallback(buff)
249
- local timer = buff[113]
250
- local damageInterval = buff[111]
279
+ local timer = buff[114]
280
+ local damageInterval = buff[112]
251
281
  if timer ~= nil and damageInterval ~= nil and damageInterval > 0 then
252
282
  timer:start(damageInterval, true, buffDamageIntervalTimerCallback, buff)
253
283
  end
254
284
  end
255
285
  buffDamageIntervalTimerCallback = function(buff)
256
286
  buff:flashSpecialEffect()
257
- local source = buff[101] or buff[100]
258
- local remainingDamageOverDuration = buff[112] or 0
287
+ local source = buff[102] or buff[101]
288
+ local remainingDamageOverDuration = buff[113] or 0
259
289
  if remainingDamageOverDuration ~= 0 then
260
- local damageInterval = buff[111] or 0
290
+ local damageInterval = buff[112] or 0
261
291
  if damageInterval ~= 0 then
262
292
  local damage = remainingDamageOverDuration / (1 + buff.remainingDuration / damageInterval)
263
- source:damageTarget(buff[100], damage)
264
- buff[112] = remainingDamageOverDuration - damage
293
+ source:damageTarget(buff[101], damage)
294
+ buff[113] = remainingDamageOverDuration - damage
265
295
  end
266
296
  end
267
- local damagePerInterval = buff[110] or 0
297
+ local damagePerInterval = buff[111] or 0
268
298
  if remainingDamageOverDuration == 0 or damagePerInterval ~= 0 then
269
- source:damageTarget(buff[100], damagePerInterval)
299
+ source:damageTarget(buff[101], damagePerInterval)
270
300
  end
271
301
  end
272
302
  local function buffHealingIntervalInitialTimerCallback(buff)
273
303
  buffHealingIntervalTimerCallback(buff)
274
- local timer = buff[118]
275
- local healingInterval = buff[116]
304
+ local timer = buff[119]
305
+ local healingInterval = buff[117]
276
306
  if timer ~= nil and healingInterval ~= nil and healingInterval > 0 then
277
307
  timer:start(healingInterval, true, buffHealingIntervalTimerCallback, buff)
278
308
  end
279
309
  end
280
310
  buffHealingIntervalTimerCallback = function(buff)
281
- if buff[116] ~= buff[111] then
311
+ if buff[117] ~= buff[112] then
282
312
  buff:flashSpecialEffect()
283
313
  end
284
- local source = buff[101] or buff[100]
285
- local remainingHealingOverDuration = buff[117] or 0
314
+ local source = buff[102] or buff[101]
315
+ local remainingHealingOverDuration = buff[118] or 0
286
316
  if remainingHealingOverDuration ~= 0 then
287
- local healingInterval = buff[116] or 0
317
+ local healingInterval = buff[117] or 0
288
318
  if healingInterval ~= 0 then
289
319
  local healing = remainingHealingOverDuration / (1 + buff.remainingDuration / healingInterval)
290
- source:healTarget(buff[100], healing)
291
- buff[117] = remainingHealingOverDuration - healing
320
+ source:healTarget(buff[101], healing)
321
+ buff[118] = remainingHealingOverDuration - healing
292
322
  end
293
323
  end
294
- local healingPerInterval = buff[115] or 0
324
+ local healingPerInterval = buff[116] or 0
295
325
  if remainingHealingOverDuration == 0 or healingPerInterval ~= 0 then
296
- source:healTarget(buff[100], healingPerInterval)
326
+ source:healTarget(buff[101], healingPerInterval)
297
327
  end
298
328
  end
329
+ local buffCreatedEvent = __TS__New(Event)
330
+ local buffBeingDestroyedEvent = __TS__New(Event)
299
331
  ____exports.Buff = __TS__Class()
300
332
  local Buff = ____exports.Buff
301
333
  Buff.name = "Buff"
@@ -304,38 +336,44 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
304
336
  UnitBehavior.prototype.____constructor(self, _unit)
305
337
  self._unit = _unit
306
338
  self.parameters = nil
307
- self[100] = _unit
339
+ self[100] = 0
340
+ self[101] = _unit
308
341
  local typeId
309
342
  local polarity
310
343
  local resistanceType
311
344
  local ability
345
+ local abilityBehavior
312
346
  if type(typeIdOrTypeIds) ~= "number" then
313
347
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
314
348
  polarity = resistanceTypeOrPolarity
315
349
  resistanceType = abilityOrParametersOrResistanceType
316
- if __TS__InstanceOf(parametersOrAbility, Ability) then
350
+ if __TS__InstanceOf(parametersOrAbility, AbilityBehavior) then
351
+ abilityBehavior = parametersOrAbility
352
+ ability = abilityBehavior.ability
353
+ elseif __TS__InstanceOf(parametersOrAbility, Ability) then
317
354
  ability = parametersOrAbility
318
- else
319
- ability = nil
355
+ elseif parametersOrAbility ~= nil then
320
356
  parameters = parametersOrAbility
321
357
  end
322
358
  else
323
359
  typeId = typeIdOrTypeIds
324
360
  polarity = polarityOrTypeIdSelectionPolicy
325
361
  resistanceType = resistanceTypeOrPolarity
326
- if __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
362
+ if __TS__InstanceOf(abilityOrParametersOrResistanceType, AbilityBehavior) then
363
+ abilityBehavior = abilityOrParametersOrResistanceType
364
+ ability = abilityBehavior.ability
365
+ parameters = parametersOrAbility
366
+ elseif __TS__InstanceOf(abilityOrParametersOrResistanceType, Ability) then
327
367
  ability = abilityOrParametersOrResistanceType
328
368
  parameters = parametersOrAbility
329
- else
330
- ability = nil
369
+ elseif abilityOrParametersOrResistanceType ~= nil then
331
370
  parameters = abilityOrParametersOrResistanceType
371
+ else
372
+ parameters = parametersOrAbility
332
373
  end
333
374
  end
375
+ self.sourceAbilityBehavior = abilityBehavior
334
376
  self.typeId = typeId
335
- if not __TS__InstanceOf(ability, Ability) then
336
- parameters = ability
337
- ability = nil
338
- end
339
377
  local defaultParameters = self.constructor.defaultParameters
340
378
  local level = parameters and parameters.level or defaultParameters.level
341
379
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -360,14 +398,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
360
398
  end
361
399
  self.polarity = resolveEnumValue(ability, level, polarity)
362
400
  self.resistanceType = resolveEnumValue(ability, level, resistanceType)
401
+ local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
402
+ if missProbability ~= nil then
403
+ missProbability = resolveNumberValue(ability, level, missProbability)
404
+ self[146] = missProbability
405
+ end
363
406
  local buffByTypeId = buffByTypeIdByUnit[_unit]
364
407
  if buffByTypeId == nil then
365
408
  buffByTypeId = {}
366
409
  buffByTypeIdByUnit[_unit] = buffByTypeId
367
410
  end
368
- local ____opt_13 = buffByTypeId[typeId]
369
- if ____opt_13 ~= nil then
370
- ____opt_13:destroy()
411
+ self.previousBuff = buffByTypeId[typeId]
412
+ local ____opt_15 = self.previousBuff
413
+ if ____opt_15 ~= nil then
414
+ ____opt_15:destroy()
371
415
  end
372
416
  local uniqueGroup = parameters and parameters.uniqueGroup or defaultParameters and defaultParameters.uniqueGroup
373
417
  if uniqueGroup ~= nil then
@@ -381,13 +425,16 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
381
425
  level,
382
426
  duration,
383
427
  spellStealPriority,
384
- learnLevelMinimum
428
+ learnLevelMinimum,
429
+ missProbability
385
430
  ) then
431
+ self[100] = 1
386
432
  UnitBehavior.prototype.destroy(self)
387
433
  error(unsuccessfulApplicationMarker, 0)
388
434
  end
389
435
  local handle = BlzGetUnitAbility(_unit.handle, typeId)
390
436
  if handle == nil then
437
+ self[100] = 1
391
438
  UnitBehavior.prototype.destroy(self)
392
439
  error(unsuccessfulApplicationMarker, 0)
393
440
  end
@@ -396,20 +443,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
396
443
  self._level = level
397
444
  self._spellStealPriority = spellStealPriority
398
445
  self._learnLevelMinimum = learnLevelMinimum
399
- self[101] = source
400
- self[102] = duration or 0
401
- self[103] = uniqueGroup
402
- self[104] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_EFFECT, 0)
403
- self[105] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_SPECIAL, 0)
446
+ self[102] = source
447
+ self[103] = duration or 0
448
+ self[104] = uniqueGroup
449
+ self[105] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_EFFECT, 0)
450
+ self[106] = BlzGetAbilityStringLevelField(self.handle, ABILITY_SLF_SPECIAL, 0)
404
451
  if parameters ~= nil or (next(defaultParameters)) ~= nil then
405
452
  for ____, buffBooleanParameter in ipairs(buffBooleanParameters) do
406
- local ____ability_22 = ability
407
- local ____level_23 = level
408
- local ____temp_21 = parameters and parameters[buffBooleanParameter]
409
- if ____temp_21 == nil then
410
- ____temp_21 = defaultParameters[buffBooleanParameter]
453
+ local ____ability_24 = ability
454
+ local ____level_25 = level
455
+ local ____temp_23 = parameters and parameters[buffBooleanParameter]
456
+ if ____temp_23 == nil then
457
+ ____temp_23 = defaultParameters[buffBooleanParameter]
411
458
  end
412
- if resolveBooleanValue(____ability_22, ____level_23, ____temp_21) then
459
+ if resolveBooleanValue(____ability_24, ____level_25, ____temp_23) then
413
460
  self[buffBooleanParameter] = true
414
461
  end
415
462
  end
@@ -425,11 +472,11 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
425
472
  end
426
473
  local maximumDuration = parameters and parameters.maximumDuration or defaultParameters.maximumDuration
427
474
  if maximumDuration ~= nil then
428
- self[107] = resolveNumberValue(ability, level, maximumDuration)
475
+ self[108] = resolveNumberValue(ability, level, maximumDuration)
429
476
  end
430
477
  local maximumRemainingDuration = parameters and parameters.maximumRemainingDuration or defaultParameters.maximumRemainingDuration
431
478
  if maximumRemainingDuration ~= nil then
432
- self[108] = resolveNumberValue(ability, level, maximumRemainingDuration)
479
+ self[109] = resolveNumberValue(ability, level, maximumRemainingDuration)
433
480
  end
434
481
  local parametersAbilityTypeIds = parameters and parameters.abilityTypeIds or defaultParameters.abilityTypeIds
435
482
  if parametersAbilityTypeIds ~= nil then
@@ -438,24 +485,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
438
485
  abilityTypeIds = {}
439
486
  self._abilityTypeIds = abilityTypeIds
440
487
  end
441
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
488
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
489
+ local abilityParameters = checkNotNull(parametersAbilityTypeIds[abilityTypeId])
442
490
  local addedAbility = _unit:addAbility(abilityTypeId)
443
491
  if addedAbility ~= nil then
444
492
  _unit:makeAbilityPermanent(abilityTypeId, true)
445
493
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
446
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
447
- if abilityParameterKey == "isButtonVisible" then
448
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
449
- _unit:hideAbility(abilityTypeId, true)
450
- end
451
- elseif abilityParameterKey ~= "level" then
452
- abilityParameterKey:setValue(
453
- addedAbility,
454
- resolveNumberValue(ability, level, abilityParameterValue)
455
- )
456
- end
494
+ if abilityParameters.isButtonVisible == false then
495
+ _unit:hideAbility(abilityTypeId, true)
457
496
  end
458
- abilityTypeIds[abilityTypeId] = true
497
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
498
+ field[1]:setValue(
499
+ addedAbility,
500
+ resolveNumberValue(ability, level, field[2])
501
+ )
502
+ end
503
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
459
504
  end
460
505
  end
461
506
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -467,18 +512,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
467
512
  self._behaviors = behaviors
468
513
  end
469
514
  end
470
- local additionalParameters = {}
471
- for key, value in pairs(parameters) do
472
- if not buffParametersKeys[key] then
473
- if ability then
474
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
475
- else
476
- additionalParameters[key] = value
515
+ if parameters ~= nil then
516
+ local additionalParameters = {}
517
+ for ____, key in ipairs(sortedKeysUnnested(parameters)) do
518
+ if not buffParametersKeys[key] then
519
+ if ability then
520
+ additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, parameters[key])
521
+ else
522
+ additionalParameters[key] = parameters[key]
523
+ end
477
524
  end
478
525
  end
479
- end
480
- if (next(additionalParameters)) ~= nil then
481
- self.parameters = additionalParameters
526
+ if (next(additionalParameters)) ~= nil then
527
+ self.parameters = additionalParameters
528
+ end
482
529
  end
483
530
  end
484
531
  if duration ~= nil and duration > 0 then
@@ -487,32 +534,51 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
487
534
  self._timer = timer
488
535
  end
489
536
  self:onCreate()
537
+ self[100] = 1
538
+ Event.invoke(buffCreatedEvent, self)
490
539
  end
491
- function Buff.prototype.getUnitBonus(self, bonusType)
492
- local ____opt_36 = self._bonusIdByBonusType
493
- local bonusId = ____opt_36 and ____opt_36[bonusType]
494
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
540
+ function Buff.prototype.onAbilityGained(self, ability)
541
+ if __TS__InstanceOf(ability, UnitAbility) then
542
+ local abilityCooldownModifier = self[148]
543
+ if abilityCooldownModifier then
544
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
545
+ end
546
+ end
495
547
  end
496
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
497
- local bonusIdByBonusType = self._bonusIdByBonusType
498
- if bonusIdByBonusType == nil then
499
- bonusIdByBonusType = {}
500
- self._bonusIdByBonusType = bonusIdByBonusType
548
+ function Buff.prototype.onAbilityLost(self, ability)
549
+ if __TS__InstanceOf(ability, UnitAbility) then
550
+ local abilityCooldownModifier = self[148]
551
+ if abilityCooldownModifier then
552
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
553
+ end
501
554
  end
502
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
503
555
  end
504
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)
505
575
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
506
- Effect:flash(self[104], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
576
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
507
577
  else
508
578
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
509
579
  local ____Effect_40 = Effect
510
580
  local ____Effect_flash_41 = Effect.flash
511
- local ____array_39 = __TS__SparseArrayNew(
512
- self[104],
513
- isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
514
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
515
- )
581
+ local ____array_39 = __TS__SparseArrayNew(modelPath, isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit, attachmentPoint)
516
582
  local ____isWidgetProvided_38
517
583
  if isWidgetProvided then
518
584
  ____isWidgetProvided_38 = yOrParametersOrDuration
@@ -526,44 +592,42 @@ function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrPa
526
592
  )
527
593
  end
528
594
  end
529
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
530
- local isWidgetProvided = type(widgetOrDuration) == "table"
531
- local ____Effect_44 = Effect
532
- local ____Effect_flash_45 = Effect.flash
533
- local ____array_43 = __TS__SparseArrayNew(
534
- self[105],
535
- isWidgetProvided and widgetOrDuration or self._unit,
536
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
537
- )
538
- local ____isWidgetProvided_42
539
- if isWidgetProvided then
540
- ____isWidgetProvided_42 = duration
541
- else
542
- ____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
543
610
  end
544
- __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
545
- ____Effect_flash_45(
546
- ____Effect_44,
547
- __TS__SparseArraySpread(____array_43)
548
- )
549
611
  end
550
612
  function Buff.prototype.onCreate(self)
551
613
  end
552
614
  function Buff.prototype.onDestroy(self)
615
+ check(self[100] ~= 0, "Cannot destroy a buff that has not finished creating yet.")
616
+ self[100] = 2
553
617
  local unit = self._unit
554
618
  if getUnitAbility(unit.handle, self.typeId) == self.handle then
555
619
  removeBuff(unit.handle, self.typeId)
556
620
  end
557
621
  buffByTypeIdByUnit[unit][self.typeId] = nil
558
- local healingIntervalTimer = self[118]
622
+ local healingIntervalTimer = self[119]
559
623
  if healingIntervalTimer ~= nil then
560
624
  healingIntervalTimer:destroy()
561
- self[118] = nil
625
+ self[119] = nil
562
626
  end
563
- local damageIntervalTimer = self[113]
627
+ local damageIntervalTimer = self[114]
564
628
  if damageIntervalTimer ~= nil then
565
629
  damageIntervalTimer:destroy()
566
- self[113] = nil
630
+ self[114] = nil
567
631
  end
568
632
  if self._timer ~= nil then
569
633
  self._timer:destroy()
@@ -573,25 +637,34 @@ function Buff.prototype.onDestroy(self)
573
637
  behavior:destroy()
574
638
  end
575
639
  end
576
- if self[136] then
640
+ local previousAbilityCooldownModifier = self[148]
641
+ if previousAbilityCooldownModifier then
642
+ for ____, ability in ipairs(self._unit.abilities) do
643
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
644
+ end
645
+ end
646
+ if self[143] then
647
+ unit:decrementInvulnerabilityCounter()
648
+ end
649
+ if self[142] then
577
650
  unit:decrementDisableAutoAttackCounter()
578
651
  end
579
- if self[134] then
580
- if self[135] then
581
- unit:decrementStunCounter()
652
+ if self[140] then
653
+ if self[141] then
654
+ unit:decrementForceStunCounter()
582
655
  end
583
656
  unit:decrementStunCounter()
584
657
  end
658
+ if self[139] then
659
+ unit:decrementGhostCounter()
660
+ end
585
661
  if self._abilityTypeIds ~= nil then
586
- for abilityTypeId in pairs(self._abilityTypeIds) do
662
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
587
663
  unit:removeAbility(abilityTypeId)
588
664
  end
589
665
  end
590
- if self._bonusIdByBonusType ~= nil then
591
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
592
- removeUnitBonus(unit, bonusType, bonusId)
593
- end
594
- end
666
+ Event.invoke(buffBeingDestroyedEvent, self)
667
+ self[100] = 3
595
668
  return UnitBehavior.prototype.onDestroy(self)
596
669
  end
597
670
  function Buff.apply(self, ...)
@@ -619,81 +692,95 @@ function Buff.apply(self, ...)
619
692
  end
620
693
  end
621
694
  function Buff.getByTypeId(self, unit, typeId)
622
- local ____opt_46 = buffByTypeIdByUnit[unit]
623
- local buff = ____opt_46 and ____opt_46[typeId]
695
+ local ____opt_42 = buffByTypeIdByUnit[unit]
696
+ local buff = ____opt_42 and ____opt_42[typeId]
624
697
  if __TS__InstanceOf(buff, self) then
625
698
  return buff
626
699
  end
627
700
  return nil
628
701
  end
702
+ function Buff.prototype.onDispel(self, source)
703
+ end
629
704
  function Buff.prototype.onExpiration(self)
630
705
  local unit = self.unit
631
- if self[119] ~= nil then
632
- (self[101] or unit):damageTarget(unit, self[119] or 0)
633
- end
634
706
  if self[120] ~= nil then
635
- (self[101] or unit):healTarget(unit, self[119] or 0)
707
+ (self[102] or unit):damageTarget(unit, self[120] or 0)
636
708
  end
637
- if self[139] then
709
+ if self[121] ~= nil then
710
+ (self[102] or unit):healTarget(unit, self[120] or 0)
711
+ end
712
+ if self[145] then
638
713
  unit:explode()
639
- elseif self[138] then
714
+ elseif self[144] then
640
715
  unit:kill()
641
716
  end
642
717
  end
643
718
  function Buff.prototype.onDeath(self, source)
644
719
  local unit = self.unit
645
- if self[121] ~= nil then
720
+ if self[122] ~= nil then
646
721
  damageArea(
647
- self[101] or unit,
648
- self[121],
722
+ self[102] or unit,
723
+ self[122],
649
724
  unit.x,
650
725
  unit.y,
726
+ self[124] or 0,
651
727
  self[123] or 0,
652
- self[122] or 0,
728
+ self[126] or 0,
653
729
  self[125] or 0,
654
- self[124] or 0,
655
- self[127] or 0,
656
- self[126] or 0
730
+ self[128] or 0,
731
+ self[127] or 0
657
732
  )
658
733
  end
659
734
  end
660
735
  function Buff.prototype.onDamageDealt(self, target, event)
661
736
  if event.isAttack then
662
- if self[106] ~= nil then
663
- local durationIncrease = self[106]
664
- local maximumDuration = self[107] or 0
737
+ if self[107] ~= nil then
738
+ local durationIncrease = self[107]
739
+ local maximumDuration = self[108] or 0
665
740
  if maximumDuration > 0 then
666
741
  durationIncrease = min(
667
742
  durationIncrease,
668
- max(0, maximumDuration - self[102])
743
+ max(0, maximumDuration - self[103])
669
744
  )
670
745
  end
671
746
  local remainingDuration = self.remainingDuration + durationIncrease
672
- local maximumRemainingDuration = self[108] or 0
747
+ local maximumRemainingDuration = self[109] or 0
673
748
  if maximumRemainingDuration > 0 then
674
749
  remainingDuration = min(remainingDuration, maximumRemainingDuration)
675
750
  end
676
751
  self.remainingDuration = remainingDuration
677
752
  end
678
- local autoAttackCount = (self[128] or 0) + 1
679
- self[128] = autoAttackCount
680
- if autoAttackCount == self[129] then
753
+ local autoAttackCount = (self[129] or 0) + 1
754
+ self[129] = autoAttackCount
755
+ if autoAttackCount == self[130] then
681
756
  self:destroy()
682
757
  end
683
758
  end
684
759
  if event.originalAmount ~= 0 then
685
- local damageDealtEventCount = (self[130] or 0) + 1
686
- self[130] = damageDealtEventCount
687
- if damageDealtEventCount == self[131] then
760
+ local damageDealtEventCount = (self[131] or 0) + 1
761
+ self[131] = damageDealtEventCount
762
+ if damageDealtEventCount == self[132] then
688
763
  self:destroy()
689
764
  end
690
765
  end
691
766
  end
692
767
  function Buff.prototype.onDamageReceived(self, source, event)
693
768
  if event.originalAmount ~= 0 then
694
- local damageReceivedEventCount = (self[132] or 0) + 1
695
- self[132] = damageReceivedEventCount
696
- if damageReceivedEventCount == self[133] 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
781
+ local damageReceivedEventCount = (self[133] or 0) + 1
782
+ self[133] = damageReceivedEventCount
783
+ if damageReceivedEventCount == self[134] then
697
784
  self:destroy()
698
785
  end
699
786
  end
@@ -703,7 +790,7 @@ __TS__SetDescriptor(
703
790
  Buff.prototype,
704
791
  "source",
705
792
  {get = function(self)
706
- return self[101] or self._unit
793
+ return self[102] or self._unit
707
794
  end},
708
795
  true
709
796
  )
@@ -720,13 +807,13 @@ __TS__SetDescriptor(
720
807
  "remainingDamageOverDuration",
721
808
  {
722
809
  get = function(self)
723
- return self[112] or 0
810
+ return self[113] or 0
724
811
  end,
725
812
  set = function(self, remainingDamageOverDuration)
726
- local remainingDamageOverDurationDelta = remainingDamageOverDuration - (self[112] or 0)
727
- self[112] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
728
- local damageOverDuration = (self[109] or 0) + remainingDamageOverDurationDelta
729
- self[109] = damageOverDuration ~= 0 and damageOverDuration or nil
813
+ local remainingDamageOverDurationDelta = remainingDamageOverDuration - (self[113] or 0)
814
+ self[113] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
815
+ local damageOverDuration = (self[110] or 0) + remainingDamageOverDurationDelta
816
+ self[110] = damageOverDuration ~= 0 and damageOverDuration or nil
730
817
  end
731
818
  },
732
819
  true
@@ -736,13 +823,13 @@ __TS__SetDescriptor(
736
823
  "damageOverDuration",
737
824
  {
738
825
  get = function(self)
739
- return self[109] or 0
826
+ return self[110] or 0
740
827
  end,
741
828
  set = function(self, damageOverDuration)
742
- local damageOverDurationDelta = damageOverDuration - (self[109] or 0)
743
- self[109] = damageOverDuration ~= 0 and damageOverDuration or nil
744
- local remainingDamageOverDuration = (self[112] or 0) + damageOverDurationDelta
745
- self[112] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
829
+ local damageOverDurationDelta = damageOverDuration - (self[110] or 0)
830
+ self[110] = damageOverDuration ~= 0 and damageOverDuration or nil
831
+ local remainingDamageOverDuration = (self[113] or 0) + damageOverDurationDelta
832
+ self[113] = remainingDamageOverDuration ~= 0 and remainingDamageOverDuration or nil
746
833
  end
747
834
  },
748
835
  true
@@ -752,10 +839,10 @@ __TS__SetDescriptor(
752
839
  "damagePerInterval",
753
840
  {
754
841
  get = function(self)
755
- return self[110] or 0
842
+ return self[111] or 0
756
843
  end,
757
844
  set = function(self, damagePerInterval)
758
- self[110] = damagePerInterval ~= 0 and damagePerInterval or nil
845
+ self[111] = damagePerInterval ~= 0 and damagePerInterval or nil
759
846
  end
760
847
  },
761
848
  true
@@ -765,25 +852,25 @@ __TS__SetDescriptor(
765
852
  "damageInterval",
766
853
  {
767
854
  get = function(self)
768
- return self[111] or 0
855
+ return self[112] or 0
769
856
  end,
770
857
  set = function(self, damageInterval)
771
858
  if damageInterval <= 0 then
772
- self[111] = damageInterval ~= 0 and damageInterval or nil
773
- local timer = self[113]
859
+ self[112] = damageInterval ~= 0 and damageInterval or nil
860
+ local timer = self[114]
774
861
  if timer ~= nil then
775
862
  timer:destroy()
776
- self[113] = nil
863
+ self[114] = nil
777
864
  end
778
865
  return
779
866
  end
780
- self[111] = damageInterval
781
- local ____opt_48 = self._timer
782
- local elapsed = ____opt_48 and ____opt_48.elapsed or 0
783
- local timer = self[113]
867
+ self[112] = damageInterval
868
+ local ____opt_45 = self._timer
869
+ local elapsed = ____opt_45 and ____opt_45.elapsed or 0
870
+ local timer = self[114]
784
871
  if timer == nil then
785
872
  timer = Timer:create()
786
- self[113] = timer
873
+ self[114] = timer
787
874
  end
788
875
  local initialDelay = damageInterval - (elapsed >= damageInterval and math.fmod(elapsed, damageInterval) or elapsed)
789
876
  if initialDelay == damageInterval then
@@ -800,13 +887,13 @@ __TS__SetDescriptor(
800
887
  "remainingHealingOverDuration",
801
888
  {
802
889
  get = function(self)
803
- return self[117] or 0
890
+ return self[118] or 0
804
891
  end,
805
892
  set = function(self, remainingHealingOverDuration)
806
- local remainingHealingOverDurationDelta = remainingHealingOverDuration - (self[117] or 0)
807
- self[112] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
808
- local healingOverDuration = (self[114] or 0) + remainingHealingOverDurationDelta
809
- self[114] = healingOverDuration ~= 0 and healingOverDuration or nil
893
+ local remainingHealingOverDurationDelta = remainingHealingOverDuration - (self[118] or 0)
894
+ self[113] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
895
+ local healingOverDuration = (self[115] or 0) + remainingHealingOverDurationDelta
896
+ self[115] = healingOverDuration ~= 0 and healingOverDuration or nil
810
897
  end
811
898
  },
812
899
  true
@@ -816,13 +903,13 @@ __TS__SetDescriptor(
816
903
  "healingOverDuration",
817
904
  {
818
905
  get = function(self)
819
- return self[114] or 0
906
+ return self[115] or 0
820
907
  end,
821
908
  set = function(self, healingOverDuration)
822
- local healingOverDurationDelta = healingOverDuration - (self[114] or 0)
823
- self[114] = healingOverDuration ~= 0 and healingOverDuration or nil
824
- local remainingHealingOverDuration = (self[117] or 0) + healingOverDurationDelta
825
- self[117] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
909
+ local healingOverDurationDelta = healingOverDuration - (self[115] or 0)
910
+ self[115] = healingOverDuration ~= 0 and healingOverDuration or nil
911
+ local remainingHealingOverDuration = (self[118] or 0) + healingOverDurationDelta
912
+ self[118] = remainingHealingOverDuration ~= 0 and remainingHealingOverDuration or nil
826
913
  end
827
914
  },
828
915
  true
@@ -832,10 +919,10 @@ __TS__SetDescriptor(
832
919
  "healingPerInterval",
833
920
  {
834
921
  get = function(self)
835
- return self[115] or 0
922
+ return self[116] or 0
836
923
  end,
837
924
  set = function(self, healingPerInterval)
838
- self[115] = healingPerInterval ~= 0 and healingPerInterval or nil
925
+ self[116] = healingPerInterval ~= 0 and healingPerInterval or nil
839
926
  end
840
927
  },
841
928
  true
@@ -845,25 +932,25 @@ __TS__SetDescriptor(
845
932
  "healingInterval",
846
933
  {
847
934
  get = function(self)
848
- return self[116] or 0
935
+ return self[117] or 0
849
936
  end,
850
937
  set = function(self, healingInterval)
851
938
  if healingInterval <= 0 then
852
- self[116] = healingInterval ~= 0 and healingInterval or nil
853
- local timer = self[118]
939
+ self[117] = healingInterval ~= 0 and healingInterval or nil
940
+ local timer = self[119]
854
941
  if timer ~= nil then
855
942
  timer:destroy()
856
- self[118] = nil
943
+ self[119] = nil
857
944
  end
858
945
  return
859
946
  end
860
- self[116] = healingInterval
861
- local ____opt_50 = self._timer
862
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
863
- local timer = self[118]
947
+ self[117] = healingInterval
948
+ local ____opt_47 = self._timer
949
+ local elapsed = ____opt_47 and ____opt_47.elapsed or 0
950
+ local timer = self[119]
864
951
  if timer == nil then
865
952
  timer = Timer:create()
866
- self[118] = timer
953
+ self[119] = timer
867
954
  end
868
955
  local initialDelay = healingInterval - (elapsed >= healingInterval and math.fmod(elapsed, healingInterval) or elapsed)
869
956
  if initialDelay == healingInterval then
@@ -880,10 +967,10 @@ __TS__SetDescriptor(
880
967
  "damageOnExpiration",
881
968
  {
882
969
  get = function(self)
883
- return self[119] or 0
970
+ return self[120] or 0
884
971
  end,
885
972
  set = function(self, damageOnExpiration)
886
- self[119] = damageOnExpiration ~= 0 and damageOnExpiration or nil
973
+ self[120] = damageOnExpiration ~= 0 and damageOnExpiration or nil
887
974
  end
888
975
  },
889
976
  true
@@ -893,10 +980,10 @@ __TS__SetDescriptor(
893
980
  "healingOnExpiration",
894
981
  {
895
982
  get = function(self)
896
- return self[120] or 0
983
+ return self[121] or 0
897
984
  end,
898
985
  set = function(self, healingOnExpiration)
899
- self[120] = healingOnExpiration ~= 0 and healingOnExpiration or nil
986
+ self[121] = healingOnExpiration ~= 0 and healingOnExpiration or nil
900
987
  end
901
988
  },
902
989
  true
@@ -940,30 +1027,79 @@ __TS__SetDescriptor(
940
1027
  },
941
1028
  true
942
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
+ )
1056
+ __TS__SetDescriptor(
1057
+ Buff.prototype,
1058
+ "turnsIntoGhost",
1059
+ {
1060
+ get = function(self)
1061
+ local ____self__139_49 = self[139]
1062
+ if ____self__139_49 == nil then
1063
+ ____self__139_49 = false
1064
+ end
1065
+ return ____self__139_49
1066
+ end,
1067
+ set = function(self, turnsIntoGhost)
1068
+ if not turnsIntoGhost and self[139] then
1069
+ self.object:decrementGhostCounter()
1070
+ self[139] = nil
1071
+ elseif turnsIntoGhost and not self[139] then
1072
+ self.object:incrementGhostCounter()
1073
+ self[139] = true
1074
+ end
1075
+ end
1076
+ },
1077
+ true
1078
+ )
943
1079
  __TS__SetDescriptor(
944
1080
  Buff.prototype,
945
1081
  "stuns",
946
1082
  {
947
1083
  get = function(self)
948
- local ____self__134_52 = self[134]
949
- if ____self__134_52 == nil then
950
- ____self__134_52 = false
1084
+ local ____self__140_50 = self[140]
1085
+ if ____self__140_50 == nil then
1086
+ ____self__140_50 = false
951
1087
  end
952
- return ____self__134_52
1088
+ return ____self__140_50
953
1089
  end,
954
1090
  set = function(self, stuns)
955
- if not stuns and self[134] then
956
- if self[135] then
957
- self.object:decrementStunCounter()
1091
+ if not stuns and self[140] then
1092
+ if self[141] then
1093
+ self.object:decrementForceStunCounter()
958
1094
  end
959
1095
  self.object:decrementStunCounter()
960
- self[134] = nil
961
- elseif stuns and not self[134] then
962
- if self[135] then
963
- self.object:incrementStunCounter()
1096
+ self[140] = nil
1097
+ elseif stuns and not self[140] then
1098
+ if self[141] then
1099
+ self.object:incrementForceStunCounter()
964
1100
  end
965
1101
  self.object:incrementStunCounter()
966
- self[134] = true
1102
+ self[140] = true
967
1103
  end
968
1104
  end
969
1105
  },
@@ -974,23 +1110,23 @@ __TS__SetDescriptor(
974
1110
  "ignoresStunImmunity",
975
1111
  {
976
1112
  get = function(self)
977
- local ____self__135_53 = self[135]
978
- if ____self__135_53 == nil then
979
- ____self__135_53 = false
1113
+ local ____self__141_51 = self[141]
1114
+ if ____self__141_51 == nil then
1115
+ ____self__141_51 = false
980
1116
  end
981
- return ____self__135_53
1117
+ return ____self__141_51
982
1118
  end,
983
1119
  set = function(self, ignoresStunImmunity)
984
- if not ignoresStunImmunity and self[135] then
985
- if self[134] then
986
- self.object:decrementStunCounter()
1120
+ if not ignoresStunImmunity and self[141] then
1121
+ if self[140] then
1122
+ self.object:decrementForceStunCounter()
987
1123
  end
988
- self[135] = nil
989
- elseif ignoresStunImmunity and not self[135] then
990
- if self[134] then
991
- self.object:incrementStunCounter()
1124
+ self[141] = nil
1125
+ elseif ignoresStunImmunity and not self[141] then
1126
+ if self[140] then
1127
+ self.object:incrementForceStunCounter()
992
1128
  end
993
- self[135] = true
1129
+ self[141] = true
994
1130
  end
995
1131
  end
996
1132
  },
@@ -1001,19 +1137,19 @@ __TS__SetDescriptor(
1001
1137
  "disablesAutoAttack",
1002
1138
  {
1003
1139
  get = function(self)
1004
- local ____self__136_54 = self[136]
1005
- if ____self__136_54 == nil then
1006
- ____self__136_54 = false
1140
+ local ____self__142_52 = self[142]
1141
+ if ____self__142_52 == nil then
1142
+ ____self__142_52 = false
1007
1143
  end
1008
- return ____self__136_54
1144
+ return ____self__142_52
1009
1145
  end,
1010
1146
  set = function(self, disablesAutoAttack)
1011
- if not disablesAutoAttack and self[136] then
1147
+ if not disablesAutoAttack and self[142] then
1012
1148
  self.object:decrementDisableAutoAttackCounter()
1013
- self[136] = nil
1014
- elseif disablesAutoAttack and not self[136] then
1149
+ self[142] = nil
1150
+ elseif disablesAutoAttack and not self[142] then
1015
1151
  self.object:incrementDisableAutoAttackCounter()
1016
- self[136] = true
1152
+ self[142] = true
1017
1153
  end
1018
1154
  end
1019
1155
  },
@@ -1024,19 +1160,19 @@ __TS__SetDescriptor(
1024
1160
  "providesInvulnerability",
1025
1161
  {
1026
1162
  get = function(self)
1027
- local ____self__137_55 = self[137]
1028
- if ____self__137_55 == nil then
1029
- ____self__137_55 = false
1163
+ local ____self__143_53 = self[143]
1164
+ if ____self__143_53 == nil then
1165
+ ____self__143_53 = false
1030
1166
  end
1031
- return ____self__137_55
1167
+ return ____self__143_53
1032
1168
  end,
1033
1169
  set = function(self, providesInvulnerability)
1034
- if not providesInvulnerability and self[137] then
1170
+ if not providesInvulnerability and self[143] then
1035
1171
  self.object:decrementInvulnerabilityCounter()
1036
- self[137] = nil
1037
- elseif providesInvulnerability and not self[137] then
1172
+ self[143] = nil
1173
+ elseif providesInvulnerability and not self[143] then
1038
1174
  self.object:incrementInvulnerabilityCounter()
1039
- self[137] = true
1175
+ self[143] = true
1040
1176
  end
1041
1177
  end
1042
1178
  },
@@ -1047,17 +1183,17 @@ __TS__SetDescriptor(
1047
1183
  "killsOnExpiration",
1048
1184
  {
1049
1185
  get = function(self)
1050
- local ____self__138_56 = self[138]
1051
- if ____self__138_56 == nil then
1052
- ____self__138_56 = false
1186
+ local ____self__144_54 = self[144]
1187
+ if ____self__144_54 == nil then
1188
+ ____self__144_54 = false
1053
1189
  end
1054
- return ____self__138_56
1190
+ return ____self__144_54
1055
1191
  end,
1056
1192
  set = function(self, killsOnExpiration)
1057
- if not killsOnExpiration and self[138] then
1058
- self[138] = nil
1059
- elseif killsOnExpiration and not self[138] then
1060
- self[138] = 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
1061
1197
  end
1062
1198
  end
1063
1199
  },
@@ -1068,17 +1204,17 @@ __TS__SetDescriptor(
1068
1204
  "explodesOnExpiration",
1069
1205
  {
1070
1206
  get = function(self)
1071
- local ____self__139_57 = self[139]
1072
- if ____self__139_57 == nil then
1073
- ____self__139_57 = false
1207
+ local ____self__145_55 = self[145]
1208
+ if ____self__145_55 == nil then
1209
+ ____self__145_55 = false
1074
1210
  end
1075
- return ____self__139_57
1211
+ return ____self__145_55
1076
1212
  end,
1077
1213
  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
1214
+ if not killsOnExpiration and self[145] then
1215
+ self[145] = nil
1216
+ elseif killsOnExpiration and not self[145] then
1217
+ self[145] = true
1082
1218
  end
1083
1219
  end
1084
1220
  },
@@ -1089,13 +1225,13 @@ __TS__SetDescriptor(
1089
1225
  "maximumDamageDealtEventCount",
1090
1226
  {
1091
1227
  get = function(self)
1092
- return self[131] or 0
1228
+ return self[132] or 0
1093
1229
  end,
1094
1230
  set = function(self, maximumDamageDealtEventCount)
1095
1231
  if maximumDamageDealtEventCount == 0 then
1096
- self[131] = nil
1232
+ self[132] = nil
1097
1233
  else
1098
- self[131] = maximumDamageDealtEventCount
1234
+ self[132] = maximumDamageDealtEventCount
1099
1235
  end
1100
1236
  end
1101
1237
  },
@@ -1106,13 +1242,13 @@ __TS__SetDescriptor(
1106
1242
  "maximumDamageReceivedEventCount",
1107
1243
  {
1108
1244
  get = function(self)
1109
- return self[133] or 0
1245
+ return self[134] or 0
1110
1246
  end,
1111
1247
  set = function(self, maximumDamageReceivedEventCount)
1112
1248
  if maximumDamageReceivedEventCount == 0 then
1113
- self[133] = nil
1249
+ self[134] = nil
1114
1250
  else
1115
- self[133] = maximumDamageReceivedEventCount
1251
+ self[134] = maximumDamageReceivedEventCount
1116
1252
  end
1117
1253
  end
1118
1254
  },
@@ -1123,13 +1259,13 @@ __TS__SetDescriptor(
1123
1259
  "maximumAutoAttackCount",
1124
1260
  {
1125
1261
  get = function(self)
1126
- return self[129] or 0
1262
+ return self[130] or 0
1127
1263
  end,
1128
1264
  set = function(self, maximumAutoAttackCount)
1129
1265
  if maximumAutoAttackCount == 0 then
1130
- self[129] = nil
1266
+ self[130] = nil
1131
1267
  else
1132
- self[129] = maximumAutoAttackCount
1268
+ self[130] = maximumAutoAttackCount
1133
1269
  end
1134
1270
  end
1135
1271
  },
@@ -1140,10 +1276,10 @@ __TS__SetDescriptor(
1140
1276
  "durationIncreaseOnAutoAttack",
1141
1277
  {
1142
1278
  get = function(self)
1143
- return self[106] or 0
1279
+ return self[107] or 0
1144
1280
  end,
1145
1281
  set = function(self, durationIncreaseOnAutoAttack)
1146
- self[106] = durationIncreaseOnAutoAttack
1282
+ self[107] = durationIncreaseOnAutoAttack
1147
1283
  end
1148
1284
  },
1149
1285
  true
@@ -1174,12 +1310,52 @@ __TS__SetDescriptor(
1174
1310
  },
1175
1311
  true
1176
1312
  )
1313
+ __TS__SetDescriptor(
1314
+ Buff.prototype,
1315
+ "evasionProbability",
1316
+ {
1317
+ get = function(self)
1318
+ return self:getUnitBonus(UnitBonusType.EVASION_PROBABILITY)
1319
+ end,
1320
+ set = function(self, evasionProbability)
1321
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.EVASION_PROBABILITY, evasionProbability)
1322
+ end
1323
+ },
1324
+ true
1325
+ )
1326
+ __TS__SetDescriptor(
1327
+ Buff.prototype,
1328
+ "manaRegenerationRateIncreaseFactor",
1329
+ {
1330
+ get = function(self)
1331
+ return self:getUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR)
1332
+ end,
1333
+ set = function(self, manaRegenerationRateIncreaseFactor)
1334
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.MANA_REGENERATION_RATE_FACTOR, manaRegenerationRateIncreaseFactor)
1335
+ end
1336
+ },
1337
+ true
1338
+ )
1177
1339
  __TS__SetDescriptor(
1178
1340
  Buff.prototype,
1179
1341
  "duration",
1180
- {get = function(self)
1181
- return self[102]
1182
- 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
+ },
1183
1359
  true
1184
1360
  )
1185
1361
  __TS__SetDescriptor(
@@ -1187,15 +1363,15 @@ __TS__SetDescriptor(
1187
1363
  "remainingDuration",
1188
1364
  {
1189
1365
  get = function(self)
1190
- local ____opt_58 = self._timer
1191
- return ____opt_58 and ____opt_58.remaining or 0
1366
+ local ____opt_56 = self._timer
1367
+ return ____opt_56 and ____opt_56.remaining or 0
1192
1368
  end,
1193
1369
  set = function(self, remainingDuration)
1194
- local ____remainingDuration_62 = remainingDuration
1195
- local ____opt_60 = self._timer
1196
- local remainingDurationDelta = ____remainingDuration_62 - (____opt_60 and ____opt_60.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)
1197
1373
  if remainingDurationDelta ~= 0 then
1198
- self[102] = self[102] + remainingDurationDelta
1374
+ self[103] = self[103] + remainingDurationDelta
1199
1375
  if remainingDuration <= 0 then
1200
1376
  Timer:run(destroyBuff, self)
1201
1377
  else
@@ -1207,7 +1383,8 @@ __TS__SetDescriptor(
1207
1383
  self._level,
1208
1384
  remainingDuration,
1209
1385
  self._spellStealPriority,
1210
- self._learnLevelMinimum
1386
+ self._learnLevelMinimum,
1387
+ self[146]
1211
1388
  ) then
1212
1389
  local timer = self._timer
1213
1390
  if timer == nil then
@@ -1221,37 +1398,135 @@ __TS__SetDescriptor(
1221
1398
  end
1222
1399
  },
1223
1400
  true
1224
- );
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
+ )
1467
+ __TS__SetDescriptor(
1468
+ Buff.prototype,
1469
+ "abilityCooldownFactor",
1470
+ {
1471
+ get = function(self)
1472
+ return self[147] or 1
1473
+ end,
1474
+ set = function(self, abilityCooldownFactor)
1475
+ local previousAbilityCooldownModifier = self[148]
1476
+ if previousAbilityCooldownModifier then
1477
+ for ____, ability in ipairs(self._unit.abilities) do
1478
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
1479
+ end
1480
+ end
1481
+ local function modifier(ability, level, cooldown)
1482
+ return cooldown * abilityCooldownFactor
1483
+ end
1484
+ for ____, ability in ipairs(self._unit.abilities) do
1485
+ COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1486
+ end
1487
+ self[148] = modifier
1488
+ self[147] = abilityCooldownFactor
1489
+ end
1490
+ },
1491
+ true
1492
+ )
1493
+ Buff.createdEvent = buffCreatedEvent
1494
+ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1225
1495
  (function(self)
1226
- local function destroyBuffIfNeeded(buff)
1227
- if getUnitAbility(buff[100].handle, buff.typeId) ~= buff.handle then
1228
- 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
1229
1504
  end
1230
1505
  end
1231
- ____exports.checkBuff = function(unit, buffTypeId)
1506
+ ____exports.checkBuff = function(unit, buffTypeId, isDispel, source)
1232
1507
  local buffByTypeId = buffByTypeIdByUnit[unit]
1233
1508
  if buffByTypeId ~= nil then
1234
1509
  local buff = buffByTypeId[buffTypeId]
1235
1510
  if buff ~= nil then
1236
- destroyBuffIfNeeded(buff)
1511
+ destroyBuffIfNeeded(buff, isDispel, source)
1237
1512
  end
1238
1513
  end
1239
1514
  end
1240
- ____exports.checkBuffs = function(unit)
1241
- ____exports.Buff:forAll(unit, destroyBuffIfNeeded)
1515
+ ____exports.checkBuffs = function(unit, isDispel, source)
1516
+ ____exports.Buff:forAll(unit, destroyBuffIfNeeded, isDispel, source)
1242
1517
  end
1243
1518
  Unit.abilityChannelingStartEvent:addListener(
1244
1519
  0,
1245
1520
  function(caster)
1246
- ____exports.checkBuffs(caster)
1247
- Timer:run(____exports.checkBuffs, caster)
1521
+ ____exports.checkBuffs(caster, true, caster)
1522
+ Timer:run(____exports.checkBuffs, caster, true, caster)
1248
1523
  end
1249
1524
  )
1250
1525
  Unit.abilityUnitTargetChannelingStartEvent:addListener(
1251
1526
  0,
1252
1527
  function(caster, ability, target)
1253
- ____exports.checkBuffs(target)
1254
- Timer:run(____exports.checkBuffs, target)
1528
+ ____exports.checkBuffs(target, true, caster)
1529
+ Timer:run(____exports.checkBuffs, target, true, caster)
1255
1530
  end
1256
1531
  )
1257
1532
  Unit.abilityPointTargetChannelingStartEvent:addListener(
@@ -1262,18 +1537,47 @@ __TS__SetDescriptor(
1262
1537
  y,
1263
1538
  ability:getField(ABILITY_RLF_AREA_OF_EFFECT)
1264
1539
  )
1265
- forEach(units, ____exports.checkBuffs)
1266
- 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
1267
1565
  end
1268
1566
  )
1269
1567
  Unit.onDamage:addListener(
1270
1568
  0,
1271
1569
  function(source, target)
1272
1570
  if source ~= nil then
1273
- ____exports.checkBuffs(source)
1571
+ Timer:run(____exports.checkBuffs, source, false)
1274
1572
  end
1275
- ____exports.checkBuffs(target)
1573
+ Timer:run(____exports.checkBuffs, target, false)
1276
1574
  end
1277
1575
  )
1576
+ buffCreatedEvent:addListener(function(buff)
1577
+ UnitBehavior:forAll(buff.unit, "onBuffGained", buff)
1578
+ end)
1579
+ buffBeingDestroyedEvent:addListener(function(buff)
1580
+ UnitBehavior:forAll(buff.unit, "onBuffLost", buff)
1581
+ end)
1278
1582
  end)(Buff)
1279
1583
  return ____exports