warscript 0.0.1-dev.8bfb72f → 0.0.1-dev.8d8d605

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