warscript 0.0.1-dev.b026cc2 → 0.0.1-dev.b1ce140

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