warscript 0.0.1-dev.bb34489 → 0.0.1-dev.bc4cd10

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