warscript 0.0.1-dev.9af2d1a → 0.0.1-dev.9bcb501

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