warscript 0.0.1-dev.3eed609 → 0.0.1-dev.3f0a5ea

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