warscript 0.0.1-dev.3370e98 → 0.0.1-dev.33b52d0

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