warscript 0.0.1-dev.3642572 → 0.0.1-dev.37ce2c3

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