warscript 0.0.1-dev.2ae9956 → 0.0.1-dev.2b3f95e

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