warscript 0.0.1-dev.0b2f1d6 → 0.0.1-dev.0d18530

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