warscript 0.0.1-dev.24ac045 → 0.0.1-dev.24da7f2

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