warscript 0.0.1-dev.9c98c3a → 0.0.1-dev.9d07b64

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