warscript 0.0.1-dev.29b3feb → 0.0.1-dev.29e90d8

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 (459) 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 +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 +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 +15 -4
  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 +148 -60
  60. package/engine/buff.lua +706 -310
  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 -17
  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/shared-vision-counter.d.ts +18 -0
  146. package/engine/internal/unit/shared-vision-counter.lua +31 -0
  147. package/engine/internal/unit+ability.d.ts +2 -1
  148. package/engine/internal/unit+ability.lua +83 -3
  149. package/engine/internal/unit+bonus.lua +3 -3
  150. package/engine/internal/unit+damage.d.ts +12 -38
  151. package/engine/internal/unit+damage.lua +48 -45
  152. package/engine/internal/unit+rally.lua +9 -31
  153. package/engine/internal/unit+spellSteal.lua +1 -2
  154. package/engine/internal/unit-missile-data.lua +96 -68
  155. package/engine/internal/unit-missile-launch.lua +69 -27
  156. package/engine/internal/unit.d.ts +52 -34
  157. package/engine/internal/unit.lua +468 -321
  158. package/engine/internal/utility.lua +12 -0
  159. package/engine/lightning.d.ts +12 -5
  160. package/engine/lightning.lua +52 -18
  161. package/engine/local-client.d.ts +28 -0
  162. package/engine/local-client.lua +324 -54
  163. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  164. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  165. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  166. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  167. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -2
  168. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  169. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  170. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  171. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  172. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  173. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  174. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  175. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  176. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  177. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  178. package/engine/object-data/auxiliary/item-class.lua +2 -0
  179. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  180. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  181. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  182. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  183. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  184. package/engine/object-data/auxiliary/order-type.lua +2 -0
  185. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  186. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  187. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  188. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  189. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  190. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  191. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  192. package/engine/object-data/auxiliary/weapon-sound-type.d.ts +20 -14
  193. package/engine/object-data/auxiliary/weapon-sound-type.lua +58 -0
  194. package/engine/object-data/auxiliary/weapon-type.d.ts +25 -0
  195. package/engine/object-data/auxiliary/weapon-type.lua +2 -0
  196. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  197. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  198. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  199. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  200. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  201. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  202. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  203. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  204. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  205. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  206. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  207. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  208. package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
  209. package/engine/object-data/entry/ability-type/barrage.lua +52 -0
  210. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  211. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  212. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  213. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  214. package/engine/object-data/entry/ability-type/blank-configurable.lua +14 -3
  215. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  216. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  217. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  218. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  219. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  220. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  221. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  222. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  223. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  224. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  225. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  226. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  227. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  228. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  229. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  230. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  231. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  232. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  233. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  234. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  235. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  236. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  237. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  238. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  239. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  240. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  241. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  242. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  243. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  244. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  245. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  246. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  247. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  248. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  249. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  250. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  251. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  252. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  253. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  254. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  255. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  256. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  257. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  258. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  259. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  260. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  261. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  262. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  263. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  264. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  265. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  266. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  267. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  268. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  269. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  270. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  271. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  272. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  273. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  274. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  275. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  276. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  277. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  278. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  279. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  280. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  281. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  282. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  283. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  284. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  285. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  286. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  287. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  288. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  289. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  290. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  291. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  292. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  293. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  294. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  295. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  296. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  297. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  298. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  299. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  300. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  301. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  302. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  303. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  304. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  305. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  306. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  307. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  308. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  309. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  310. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  311. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  312. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  313. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  314. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  315. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  316. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  317. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  318. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  319. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  320. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  321. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  322. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  323. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  324. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  325. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  326. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  327. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  328. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  329. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  330. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  331. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  332. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  333. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  334. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  335. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  336. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  337. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  338. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  339. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  340. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  341. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  342. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  343. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  344. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  345. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  346. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  347. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  348. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  349. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  350. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  351. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  352. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  353. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  354. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  355. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  356. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  357. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  358. package/engine/object-data/entry/ability-type/web.lua +52 -0
  359. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  360. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  361. package/engine/object-data/entry/ability-type.d.ts +50 -21
  362. package/engine/object-data/entry/ability-type.lua +392 -47
  363. package/engine/object-data/entry/buff-type/applicable.lua +131 -139
  364. package/engine/object-data/entry/buff-type.d.ts +10 -12
  365. package/engine/object-data/entry/buff-type.lua +39 -29
  366. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  367. package/engine/object-data/entry/destructible-type.lua +181 -0
  368. package/engine/object-data/entry/item-type.d.ts +20 -3
  369. package/engine/object-data/entry/item-type.lua +99 -2
  370. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  371. package/engine/object-data/entry/lightning-type.lua +1 -1
  372. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  373. package/engine/object-data/entry/sound-preset.lua +140 -0
  374. package/engine/object-data/entry/unit-type.d.ts +81 -6
  375. package/engine/object-data/entry/unit-type.lua +619 -99
  376. package/engine/object-data/entry/upgrade.d.ts +2 -2
  377. package/engine/object-data/entry/upgrade.lua +4 -4
  378. package/engine/object-data/entry.d.ts +21 -14
  379. package/engine/object-data/entry.lua +68 -32
  380. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  381. package/engine/object-field/ability.d.ts +12 -6
  382. package/engine/object-field/ability.lua +10 -6
  383. package/engine/object-field/item.d.ts +22 -0
  384. package/engine/object-field/item.lua +118 -0
  385. package/engine/object-field/unit.d.ts +72 -3
  386. package/engine/object-field/unit.lua +268 -7
  387. package/engine/object-field.d.ts +26 -7
  388. package/engine/object-field.lua +362 -117
  389. package/engine/random.d.ts +10 -0
  390. package/engine/random.lua +21 -0
  391. package/engine/standard/entries/ability-type.d.ts +3102 -7
  392. package/engine/standard/entries/ability-type.lua +0 -6
  393. package/engine/standard/entries/buff-type.d.ts +48 -0
  394. package/engine/standard/entries/buff-type.lua +46 -0
  395. package/engine/standard/entries/item-type.d.ts +1299 -0
  396. package/engine/standard/entries/item-type.lua +2 -0
  397. package/engine/standard/entries/lightning-type.d.ts +42 -15
  398. package/engine/standard/entries/lightning-type.lua +0 -14
  399. package/engine/standard/entries/sound-preset.d.ts +10 -0
  400. package/engine/standard/entries/sound-preset.lua +10 -0
  401. package/engine/standard/entries/unit-type.d.ts +5 -0
  402. package/engine/standard/entries/unit-type.lua +5 -0
  403. package/engine/standard/fields/ability.d.ts +6 -4
  404. package/engine/standard/fields/ability.lua +6 -4
  405. package/engine/standard/fields/item.d.ts +4 -0
  406. package/engine/standard/fields/item.lua +6 -0
  407. package/engine/standard/fields/unit.d.ts +12 -0
  408. package/engine/standard/fields/unit.lua +20 -0
  409. package/engine/synchronization.d.ts +11 -0
  410. package/engine/synchronization.lua +77 -0
  411. package/engine/text-tag.d.ts +48 -2
  412. package/engine/text-tag.lua +287 -10
  413. package/engine/unit.d.ts +13 -1
  414. package/engine/unit.lua +13 -1
  415. package/event.d.ts +1 -1
  416. package/lualib_bundle.lua +1 -1
  417. package/math.d.ts +2 -0
  418. package/math.lua +14 -0
  419. package/net/socket.lua +1 -1
  420. package/network.lua +25 -1
  421. package/objutil/buff.lua +12 -11
  422. package/objutil/object.lua +1 -1
  423. package/objutil/unit.lua +8 -0
  424. package/operation.d.ts +8 -1
  425. package/operation.lua +38 -18
  426. package/package.json +3 -23
  427. package/patch-lua.lua +15 -0
  428. package/patch-lualib.lua +1 -1
  429. package/patch-natives.lua +3 -0
  430. package/utility/arrays.d.ts +17 -2
  431. package/utility/arrays.lua +62 -3
  432. package/utility/callback-array.d.ts +17 -0
  433. package/utility/callback-array.lua +61 -0
  434. package/utility/functions.d.ts +8 -0
  435. package/utility/functions.lua +13 -0
  436. package/utility/lazy.d.ts +2 -0
  437. package/utility/lazy.lua +14 -0
  438. package/utility/linked-map.d.ts +35 -0
  439. package/utility/linked-map.lua +107 -0
  440. package/utility/linked-set.d.ts +5 -1
  441. package/utility/linked-set.lua +49 -1
  442. package/utility/lua-maps.d.ts +15 -2
  443. package/utility/lua-maps.lua +53 -2
  444. package/utility/lua-sets.d.ts +2 -0
  445. package/utility/lua-sets.lua +7 -0
  446. package/utility/random.d.ts +102 -0
  447. package/utility/random.lua +273 -0
  448. package/utility/records.lua +20 -1
  449. package/utility/reflection.lua +11 -7
  450. package/utility/types.d.ts +3 -0
  451. package/utility/unordered-map.d.ts +27 -0
  452. package/utility/unordered-map.lua +99 -0
  453. package/core/types/order.d.ts +0 -25
  454. package/core/types/order.lua +0 -55
  455. package/engine/internal/unit/item.lua +0 -84
  456. /package/engine/internal/{object-data/armor-increase.d.ts → misc/ability-disable-counter.d.ts} +0 -0
  457. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  458. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  459. /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,17 @@ 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,
145
+ sharesVisionWithSource = true
118
146
  }
119
147
  local function resolveEnumValue(ability, level, value)
120
148
  if value == nil or type(value) == "number" then
@@ -165,20 +193,28 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
165
193
  end
166
194
  end
167
195
  local buffBooleanParameters = {
196
+ "destroysOnMaximumDamageAbsorbed",
197
+ "turnsIntoGhost",
168
198
  "stuns",
169
199
  "ignoresStunImmunity",
170
200
  "disablesAutoAttack",
171
201
  "providesInvulnerability",
172
202
  "killsOnExpiration",
173
- "explodesOnExpiration"
203
+ "explodesOnExpiration",
204
+ "sharesVisionWithSource"
174
205
  }
175
206
  local buffNumberParameters = {
176
207
  "durationIncreaseOnAutoAttack",
177
208
  "attackSpeedIncreaseFactor",
178
209
  "movementSpeedIncreaseFactor",
210
+ "manaRegenerationRateIncreaseFactor",
211
+ "evasionProbability",
179
212
  "armorIncrease",
213
+ "maxHealthIncrease",
214
+ "maxManaIncrease",
180
215
  "damageFactor",
181
216
  "receivedDamageFactor",
217
+ "returnedMeleeDamageFactor",
182
218
  "maximumAutoAttackCount",
183
219
  "maximumDamageDealtEventCount",
184
220
  "maximumDamageReceivedEventCount",
@@ -189,7 +225,10 @@ local buffNumberParameters = {
189
225
  "healingPerInterval",
190
226
  "healingOverDuration",
191
227
  "damageOnExpiration",
192
- "healingOnExpiration"
228
+ "healingOnExpiration",
229
+ "absorbedDamageFactor",
230
+ "maximumDamageAbsorbed",
231
+ "abilityCooldownFactor"
193
232
  }
194
233
  local unsuccessfulApplicationMarker = {}
195
234
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -216,25 +255,51 @@ local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
216
255
  return checkNotNull(firstNativeBuffTypeId)
217
256
  end
218
257
  local function destroyBuffIfItHasSameUniqueGroup(buff, uniqueGroup)
219
- if buff[103] == uniqueGroup then
258
+ if buff[104] == uniqueGroup then
220
259
  buff:destroy()
221
260
  end
222
261
  end
223
262
  local function destroyBuff(buff)
224
263
  buff:destroy()
225
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
226
287
  local function expireBuff(buff)
227
- local remainingDamageOverDuration = buff[112] or 0
228
- 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
229
294
  if remainingDamageOverDuration ~= 0 or remainingHealingOverDuration ~= 0 then
230
295
  buff:flashSpecialEffect()
231
296
  if remainingDamageOverDuration ~= 0 then
232
- (buff[101] or buff[100]):damageTarget(buff[100], remainingDamageOverDuration)
233
- buff[112] = nil
297
+ (buff[102] or buff[101]):damageTarget(buff[101], remainingDamageOverDuration)
298
+ buff[114] = nil
234
299
  end
235
300
  if remainingHealingOverDuration ~= 0 then
236
- (buff[101] or buff[100]):healTarget(buff[100], remainingHealingOverDuration)
237
- buff[117] = nil
301
+ (buff[102] or buff[101]):healTarget(buff[101], remainingHealingOverDuration)
302
+ buff[119] = nil
238
303
  end
239
304
  end
240
305
  Timer:run(destroyBuff, buff)
@@ -242,56 +307,58 @@ local function expireBuff(buff)
242
307
  end
243
308
  local function buffDamageIntervalInitialTimerCallback(buff)
244
309
  buffDamageIntervalTimerCallback(buff)
245
- local timer = buff[113]
246
- local damageInterval = buff[111]
310
+ local timer = buff[115]
311
+ local damageInterval = buff[113]
247
312
  if timer ~= nil and damageInterval ~= nil and damageInterval > 0 then
248
313
  timer:start(damageInterval, true, buffDamageIntervalTimerCallback, buff)
249
314
  end
250
315
  end
251
316
  buffDamageIntervalTimerCallback = function(buff)
252
317
  buff:flashSpecialEffect()
253
- local source = buff[101] or buff[100]
254
- local remainingDamageOverDuration = buff[112] or 0
318
+ local source = buff[102] or buff[101]
319
+ local remainingDamageOverDuration = buff[114] or 0
255
320
  if remainingDamageOverDuration ~= 0 then
256
- local damageInterval = buff[111] or 0
321
+ local damageInterval = buff[113] or 0
257
322
  if damageInterval ~= 0 then
258
323
  local damage = remainingDamageOverDuration / (1 + buff.remainingDuration / damageInterval)
259
- source:damageTarget(buff[100], damage)
260
- buff[112] = remainingDamageOverDuration - damage
324
+ source:damageTarget(buff[101], damage)
325
+ buff[114] = remainingDamageOverDuration - damage
261
326
  end
262
327
  end
263
- local damagePerInterval = buff[110] or 0
328
+ local damagePerInterval = buff[112] or 0
264
329
  if remainingDamageOverDuration == 0 or damagePerInterval ~= 0 then
265
- source:damageTarget(buff[100], damagePerInterval)
330
+ source:damageTarget(buff[101], damagePerInterval)
266
331
  end
267
332
  end
268
333
  local function buffHealingIntervalInitialTimerCallback(buff)
269
334
  buffHealingIntervalTimerCallback(buff)
270
- local timer = buff[118]
271
- local healingInterval = buff[116]
335
+ local timer = buff[120]
336
+ local healingInterval = buff[118]
272
337
  if timer ~= nil and healingInterval ~= nil and healingInterval > 0 then
273
338
  timer:start(healingInterval, true, buffHealingIntervalTimerCallback, buff)
274
339
  end
275
340
  end
276
341
  buffHealingIntervalTimerCallback = function(buff)
277
- if buff[116] ~= buff[111] then
342
+ if buff[118] ~= buff[113] then
278
343
  buff:flashSpecialEffect()
279
344
  end
280
- local source = buff[101] or buff[100]
281
- local remainingHealingOverDuration = buff[117] or 0
345
+ local source = buff[102] or buff[101]
346
+ local remainingHealingOverDuration = buff[119] or 0
282
347
  if remainingHealingOverDuration ~= 0 then
283
- local healingInterval = buff[116] or 0
348
+ local healingInterval = buff[118] or 0
284
349
  if healingInterval ~= 0 then
285
350
  local healing = remainingHealingOverDuration / (1 + buff.remainingDuration / healingInterval)
286
- source:healTarget(buff[100], healing)
287
- buff[117] = remainingHealingOverDuration - healing
351
+ source:healTarget(buff[101], healing)
352
+ buff[119] = remainingHealingOverDuration - healing
288
353
  end
289
354
  end
290
- local healingPerInterval = buff[115] or 0
355
+ local healingPerInterval = buff[117] or 0
291
356
  if remainingHealingOverDuration == 0 or healingPerInterval ~= 0 then
292
- source:healTarget(buff[100], healingPerInterval)
357
+ source:healTarget(buff[101], healingPerInterval)
293
358
  end
294
359
  end
360
+ local buffCreatedEvent = __TS__New(Event)
361
+ local buffBeingDestroyedEvent = __TS__New(Event)
295
362
  ____exports.Buff = __TS__Class()
296
363
  local Buff = ____exports.Buff
297
364
  Buff.name = "Buff"
@@ -300,38 +367,44 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
300
367
  UnitBehavior.prototype.____constructor(self, _unit)
301
368
  self._unit = _unit
302
369
  self.parameters = nil
303
- self[100] = _unit
370
+ self[100] = 0
371
+ self[101] = _unit
304
372
  local typeId
305
373
  local polarity
306
374
  local resistanceType
307
375
  local ability
376
+ local abilityBehavior
308
377
  if type(typeIdOrTypeIds) ~= "number" then
309
378
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
310
379
  polarity = resistanceTypeOrPolarity
311
380
  resistanceType = abilityOrParametersOrResistanceType
312
- 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
313
385
  ability = parametersOrAbility
314
- else
315
- ability = nil
386
+ elseif parametersOrAbility ~= nil then
316
387
  parameters = parametersOrAbility
317
388
  end
318
389
  else
319
390
  typeId = typeIdOrTypeIds
320
391
  polarity = polarityOrTypeIdSelectionPolicy
321
392
  resistanceType = resistanceTypeOrPolarity
322
- 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
323
398
  ability = abilityOrParametersOrResistanceType
324
399
  parameters = parametersOrAbility
325
- else
326
- ability = nil
400
+ elseif abilityOrParametersOrResistanceType ~= nil then
327
401
  parameters = abilityOrParametersOrResistanceType
402
+ else
403
+ parameters = parametersOrAbility
328
404
  end
329
405
  end
406
+ self.sourceAbilityBehavior = abilityBehavior
330
407
  self.typeId = typeId
331
- if not __TS__InstanceOf(ability, Ability) then
332
- parameters = ability
333
- ability = nil
334
- end
335
408
  local defaultParameters = self.constructor.defaultParameters
336
409
  local level = parameters and parameters.level or defaultParameters.level
337
410
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -356,14 +429,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
356
429
  end
357
430
  self.polarity = resolveEnumValue(ability, level, polarity)
358
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
359
437
  local buffByTypeId = buffByTypeIdByUnit[_unit]
360
438
  if buffByTypeId == nil then
361
439
  buffByTypeId = {}
362
440
  buffByTypeIdByUnit[_unit] = buffByTypeId
363
441
  end
364
- local ____opt_13 = buffByTypeId[typeId]
365
- if ____opt_13 ~= nil then
366
- ____opt_13:destroy()
442
+ self.previousBuff = buffByTypeId[typeId]
443
+ local ____opt_15 = self.previousBuff
444
+ if ____opt_15 ~= nil then
445
+ ____opt_15:destroy()
367
446
  end
368
447
  local uniqueGroup = parameters and parameters.uniqueGroup or defaultParameters and defaultParameters.uniqueGroup
369
448
  if uniqueGroup ~= nil then
@@ -377,13 +456,16 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
377
456
  level,
378
457
  duration,
379
458
  spellStealPriority,
380
- learnLevelMinimum
459
+ learnLevelMinimum,
460
+ missProbability
381
461
  ) then
462
+ self[100] = 1
382
463
  UnitBehavior.prototype.destroy(self)
383
464
  error(unsuccessfulApplicationMarker, 0)
384
465
  end
385
466
  local handle = BlzGetUnitAbility(_unit.handle, typeId)
386
467
  if handle == nil then
468
+ self[100] = 1
387
469
  UnitBehavior.prototype.destroy(self)
388
470
  error(unsuccessfulApplicationMarker, 0)
389
471
  end
@@ -392,20 +474,21 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
392
474
  self._level = level
393
475
  self._spellStealPriority = spellStealPriority
394
476
  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)
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)
400
483
  if parameters ~= nil or (next(defaultParameters)) ~= nil then
401
484
  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]
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]
407
490
  end
408
- if resolveBooleanValue(____ability_22, ____level_23, ____temp_21) then
491
+ if resolveBooleanValue(____ability_28, ____level_29, ____temp_27) then
409
492
  self[buffBooleanParameter] = true
410
493
  end
411
494
  end
@@ -421,11 +504,11 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
421
504
  end
422
505
  local maximumDuration = parameters and parameters.maximumDuration or defaultParameters.maximumDuration
423
506
  if maximumDuration ~= nil then
424
- self[107] = resolveNumberValue(ability, level, maximumDuration)
507
+ self[109] = resolveNumberValue(ability, level, maximumDuration)
425
508
  end
426
509
  local maximumRemainingDuration = parameters and parameters.maximumRemainingDuration or defaultParameters.maximumRemainingDuration
427
510
  if maximumRemainingDuration ~= nil then
428
- self[108] = resolveNumberValue(ability, level, maximumRemainingDuration)
511
+ self[110] = resolveNumberValue(ability, level, maximumRemainingDuration)
429
512
  end
430
513
  local parametersAbilityTypeIds = parameters and parameters.abilityTypeIds or defaultParameters.abilityTypeIds
431
514
  if parametersAbilityTypeIds ~= nil then
@@ -434,24 +517,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
434
517
  abilityTypeIds = {}
435
518
  self._abilityTypeIds = abilityTypeIds
436
519
  end
437
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
520
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
521
+ local abilityParameters = checkNotNull(parametersAbilityTypeIds[abilityTypeId])
438
522
  local addedAbility = _unit:addAbility(abilityTypeId)
439
523
  if addedAbility ~= nil then
440
524
  _unit:makeAbilityPermanent(abilityTypeId, true)
441
525
  _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
526
+ if abilityParameters.isButtonVisible == false then
527
+ _unit:hideAbility(abilityTypeId, true)
453
528
  end
454
- abilityTypeIds[abilityTypeId] = true
529
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
530
+ field[1]:setValue(
531
+ addedAbility,
532
+ resolveNumberValue(ability, level, field[2])
533
+ )
534
+ end
535
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
455
536
  end
456
537
  end
457
538
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -463,18 +544,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
463
544
  self._behaviors = behaviors
464
545
  end
465
546
  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
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
473
556
  end
474
557
  end
475
- end
476
- if (next(additionalParameters)) ~= nil then
477
- self.parameters = additionalParameters
558
+ if (next(additionalParameters)) ~= nil then
559
+ self.parameters = additionalParameters
560
+ end
478
561
  end
479
562
  end
480
563
  if duration ~= nil and duration > 0 then
@@ -482,77 +565,107 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
482
565
  timer:start(duration, false, expireBuff, self)
483
566
  self._timer = timer
484
567
  end
568
+ self:onCreate()
569
+ self[100] = 1
570
+ Event.invoke(buffCreatedEvent, self)
485
571
  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
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
496
578
  end
497
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
498
579
  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
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
513
586
  end
514
- __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
515
- ____Effect_flash_41(
516
- ____Effect_40,
517
- __TS__SparseArraySpread(____array_39)
587
+ end
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
518
595
  )
519
596
  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"
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
528
604
  )
529
- local ____isWidgetProvided_42
530
- if isWidgetProvided then
531
- ____isWidgetProvided_42 = duration
605
+ end
606
+ function Buff.prototype.flash(self, modelPath, attachmentPoint, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
607
+ if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
608
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
532
609
  else
533
- ____isWidgetProvided_42 = widgetOrDuration
610
+ local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
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
615
+ if isWidgetProvided then
616
+ ____isWidgetProvided_42 = yOrParametersOrDuration
617
+ else
618
+ ____isWidgetProvided_42 = widgetOrXOrParametersOrDuration
619
+ end
620
+ __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
621
+ ____Effect_flash_45(
622
+ ____Effect_44,
623
+ __TS__SparseArraySpread(____array_43)
624
+ )
625
+ end
626
+ end
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
534
642
  end
535
- __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
536
- ____Effect_flash_45(
537
- ____Effect_44,
538
- __TS__SparseArraySpread(____array_43)
539
- )
643
+ end
644
+ function Buff.prototype.onCreate(self)
540
645
  end
541
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
542
649
  local unit = self._unit
650
+ local destructionSoundPresetId = self[105]
651
+ if destructionSoundPresetId ~= nil then
652
+ Sound3D:playFromLabel(destructionSoundPresetId, SoundSettings.Ability, unit)
653
+ end
543
654
  if getUnitAbility(unit.handle, self.typeId) == self.handle then
544
655
  removeBuff(unit.handle, self.typeId)
656
+ else
657
+ removeBuffApplicator(unit.handle, self.typeId)
545
658
  end
546
659
  buffByTypeIdByUnit[unit][self.typeId] = nil
547
- local healingIntervalTimer = self[118]
660
+ local healingIntervalTimer = self[120]
548
661
  if healingIntervalTimer ~= nil then
549
662
  healingIntervalTimer:destroy()
550
- self[118] = nil
663
+ self[120] = nil
551
664
  end
552
- local damageIntervalTimer = self[113]
665
+ local damageIntervalTimer = self[115]
553
666
  if damageIntervalTimer ~= nil then
554
667
  damageIntervalTimer:destroy()
555
- self[113] = nil
668
+ self[115] = nil
556
669
  end
557
670
  if self._timer ~= nil then
558
671
  self._timer:destroy()
@@ -562,25 +675,35 @@ function Buff.prototype.onDestroy(self)
562
675
  behavior:destroy()
563
676
  end
564
677
  end
565
- 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
566
688
  unit:decrementDisableAutoAttackCounter()
567
689
  end
568
- if self[134] then
569
- if self[135] then
570
- unit:decrementStunCounter()
690
+ if self[141] then
691
+ if self[142] then
692
+ unit:decrementForceStunCounter()
571
693
  end
572
694
  unit:decrementStunCounter()
573
695
  end
696
+ if self[140] then
697
+ unit:decrementGhostCounter()
698
+ end
699
+ unshareVisionWithSource(self)
574
700
  if self._abilityTypeIds ~= nil then
575
- for abilityTypeId in pairs(self._abilityTypeIds) do
701
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
576
702
  unit:removeAbility(abilityTypeId)
577
703
  end
578
704
  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
705
+ Event.invoke(buffBeingDestroyedEvent, self)
706
+ self[100] = 3
584
707
  return UnitBehavior.prototype.onDestroy(self)
585
708
  end
586
709
  function Buff.apply(self, ...)
@@ -615,74 +738,88 @@ function Buff.getByTypeId(self, unit, typeId)
615
738
  end
616
739
  return nil
617
740
  end
741
+ function Buff.prototype.onDispel(self, source)
742
+ end
618
743
  function Buff.prototype.onExpiration(self)
619
744
  local unit = self.unit
620
- if self[119] ~= nil then
621
- (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)
622
747
  end
623
- if self[120] ~= nil then
624
- (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)
625
750
  end
626
- if self[139] then
751
+ if self[146] then
627
752
  unit:explode()
628
- elseif self[138] then
753
+ elseif self[145] then
629
754
  unit:kill()
630
755
  end
631
756
  end
632
757
  function Buff.prototype.onDeath(self, source)
633
758
  local unit = self.unit
634
- if self[121] ~= nil then
759
+ if self[123] ~= nil then
635
760
  damageArea(
636
- self[101] or unit,
637
- self[121],
761
+ self[102] or unit,
762
+ self[123],
638
763
  unit.x,
639
764
  unit.y,
640
- self[123] or 0,
641
- self[122] or 0,
642
765
  self[125] or 0,
643
766
  self[124] or 0,
644
767
  self[127] or 0,
645
- self[126] or 0
768
+ self[126] or 0,
769
+ self[129] or 0,
770
+ self[128] or 0
646
771
  )
647
772
  end
648
773
  end
649
774
  function Buff.prototype.onDamageDealt(self, target, event)
650
775
  if event.isAttack then
651
- if self[106] ~= nil then
652
- local durationIncrease = self[106]
653
- local maximumDuration = self[107] or 0
776
+ if self[108] ~= nil then
777
+ local durationIncrease = self[108]
778
+ local maximumDuration = self[109] or 0
654
779
  if maximumDuration > 0 then
655
780
  durationIncrease = min(
656
781
  durationIncrease,
657
- max(0, maximumDuration - self[102])
782
+ max(0, maximumDuration - self[103])
658
783
  )
659
784
  end
660
785
  local remainingDuration = self.remainingDuration + durationIncrease
661
- local maximumRemainingDuration = self[108] or 0
786
+ local maximumRemainingDuration = self[110] or 0
662
787
  if maximumRemainingDuration > 0 then
663
788
  remainingDuration = min(remainingDuration, maximumRemainingDuration)
664
789
  end
665
790
  self.remainingDuration = remainingDuration
666
791
  end
667
- local autoAttackCount = (self[128] or 0) + 1
668
- self[128] = autoAttackCount
669
- if autoAttackCount == self[129] then
792
+ local autoAttackCount = (self[130] or 0) + 1
793
+ self[130] = autoAttackCount
794
+ if autoAttackCount == self[131] then
670
795
  self:destroy()
671
796
  end
672
797
  end
673
798
  if event.originalAmount ~= 0 then
674
- local damageDealtEventCount = (self[130] or 0) + 1
675
- self[130] = damageDealtEventCount
676
- if damageDealtEventCount == self[131] then
799
+ local damageDealtEventCount = (self[132] or 0) + 1
800
+ self[132] = damageDealtEventCount
801
+ if damageDealtEventCount == self[133] then
677
802
  self:destroy()
678
803
  end
679
804
  end
680
805
  end
681
806
  function Buff.prototype.onDamageReceived(self, source, event)
682
807
  if event.originalAmount ~= 0 then
683
- local damageReceivedEventCount = (self[132] or 0) + 1
684
- self[132] = damageReceivedEventCount
685
- 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
686
823
  self:destroy()
687
824
  end
688
825
  end
@@ -692,7 +829,7 @@ __TS__SetDescriptor(
692
829
  Buff.prototype,
693
830
  "source",
694
831
  {get = function(self)
695
- return self[101] or self._unit
832
+ return self[102] or self._unit
696
833
  end},
697
834
  true
698
835
  )
@@ -709,13 +846,13 @@ __TS__SetDescriptor(
709
846
  "remainingDamageOverDuration",
710
847
  {
711
848
  get = function(self)
712
- return self[112] or 0
849
+ return self[114] or 0
713
850
  end,
714
851
  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
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
719
856
  end
720
857
  },
721
858
  true
@@ -725,13 +862,13 @@ __TS__SetDescriptor(
725
862
  "damageOverDuration",
726
863
  {
727
864
  get = function(self)
728
- return self[109] or 0
865
+ return self[111] or 0
729
866
  end,
730
867
  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
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
735
872
  end
736
873
  },
737
874
  true
@@ -741,10 +878,10 @@ __TS__SetDescriptor(
741
878
  "damagePerInterval",
742
879
  {
743
880
  get = function(self)
744
- return self[110] or 0
881
+ return self[112] or 0
745
882
  end,
746
883
  set = function(self, damagePerInterval)
747
- self[110] = damagePerInterval ~= 0 and damagePerInterval or nil
884
+ self[112] = damagePerInterval ~= 0 and damagePerInterval or nil
748
885
  end
749
886
  },
750
887
  true
@@ -754,25 +891,25 @@ __TS__SetDescriptor(
754
891
  "damageInterval",
755
892
  {
756
893
  get = function(self)
757
- return self[111] or 0
894
+ return self[113] or 0
758
895
  end,
759
896
  set = function(self, damageInterval)
760
897
  if damageInterval <= 0 then
761
- self[111] = damageInterval ~= 0 and damageInterval or nil
762
- local timer = self[113]
898
+ self[113] = damageInterval ~= 0 and damageInterval or nil
899
+ local timer = self[115]
763
900
  if timer ~= nil then
764
901
  timer:destroy()
765
- self[113] = nil
902
+ self[115] = nil
766
903
  end
767
904
  return
768
905
  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]
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]
773
910
  if timer == nil then
774
911
  timer = Timer:create()
775
- self[113] = timer
912
+ self[115] = timer
776
913
  end
777
914
  local initialDelay = damageInterval - (elapsed >= damageInterval and math.fmod(elapsed, damageInterval) or elapsed)
778
915
  if initialDelay == damageInterval then
@@ -789,13 +926,13 @@ __TS__SetDescriptor(
789
926
  "remainingHealingOverDuration",
790
927
  {
791
928
  get = function(self)
792
- return self[117] or 0
929
+ return self[119] or 0
793
930
  end,
794
931
  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
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
799
936
  end
800
937
  },
801
938
  true
@@ -805,13 +942,13 @@ __TS__SetDescriptor(
805
942
  "healingOverDuration",
806
943
  {
807
944
  get = function(self)
808
- return self[114] or 0
945
+ return self[116] or 0
809
946
  end,
810
947
  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
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
815
952
  end
816
953
  },
817
954
  true
@@ -821,10 +958,10 @@ __TS__SetDescriptor(
821
958
  "healingPerInterval",
822
959
  {
823
960
  get = function(self)
824
- return self[115] or 0
961
+ return self[117] or 0
825
962
  end,
826
963
  set = function(self, healingPerInterval)
827
- self[115] = healingPerInterval ~= 0 and healingPerInterval or nil
964
+ self[117] = healingPerInterval ~= 0 and healingPerInterval or nil
828
965
  end
829
966
  },
830
967
  true
@@ -834,25 +971,25 @@ __TS__SetDescriptor(
834
971
  "healingInterval",
835
972
  {
836
973
  get = function(self)
837
- return self[116] or 0
974
+ return self[118] or 0
838
975
  end,
839
976
  set = function(self, healingInterval)
840
977
  if healingInterval <= 0 then
841
- self[116] = healingInterval ~= 0 and healingInterval or nil
842
- local timer = self[118]
978
+ self[118] = healingInterval ~= 0 and healingInterval or nil
979
+ local timer = self[120]
843
980
  if timer ~= nil then
844
981
  timer:destroy()
845
- self[118] = nil
982
+ self[120] = nil
846
983
  end
847
984
  return
848
985
  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]
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]
853
990
  if timer == nil then
854
991
  timer = Timer:create()
855
- self[118] = timer
992
+ self[120] = timer
856
993
  end
857
994
  local initialDelay = healingInterval - (elapsed >= healingInterval and math.fmod(elapsed, healingInterval) or elapsed)
858
995
  if initialDelay == healingInterval then
@@ -869,10 +1006,10 @@ __TS__SetDescriptor(
869
1006
  "damageOnExpiration",
870
1007
  {
871
1008
  get = function(self)
872
- return self[119] or 0
1009
+ return self[121] or 0
873
1010
  end,
874
1011
  set = function(self, damageOnExpiration)
875
- self[119] = damageOnExpiration ~= 0 and damageOnExpiration or nil
1012
+ self[121] = damageOnExpiration ~= 0 and damageOnExpiration or nil
876
1013
  end
877
1014
  },
878
1015
  true
@@ -882,10 +1019,10 @@ __TS__SetDescriptor(
882
1019
  "healingOnExpiration",
883
1020
  {
884
1021
  get = function(self)
885
- return self[120] or 0
1022
+ return self[122] or 0
886
1023
  end,
887
1024
  set = function(self, healingOnExpiration)
888
- self[120] = healingOnExpiration ~= 0 and healingOnExpiration or nil
1025
+ self[122] = healingOnExpiration ~= 0 and healingOnExpiration or nil
889
1026
  end
890
1027
  },
891
1028
  true
@@ -916,6 +1053,19 @@ __TS__SetDescriptor(
916
1053
  },
917
1054
  true
918
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
+ )
919
1069
  __TS__SetDescriptor(
920
1070
  Buff.prototype,
921
1071
  "armorIncrease",
@@ -929,30 +1079,79 @@ __TS__SetDescriptor(
929
1079
  },
930
1080
  true
931
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
+ )
932
1131
  __TS__SetDescriptor(
933
1132
  Buff.prototype,
934
1133
  "stuns",
935
1134
  {
936
1135
  get = function(self)
937
- local ____self__134_52 = self[134]
938
- if ____self__134_52 == nil then
939
- ____self__134_52 = false
1136
+ local ____self__141_54 = self[141]
1137
+ if ____self__141_54 == nil then
1138
+ ____self__141_54 = false
940
1139
  end
941
- return ____self__134_52
1140
+ return ____self__141_54
942
1141
  end,
943
1142
  set = function(self, stuns)
944
- if not stuns and self[134] then
945
- if self[135] then
946
- self.object:decrementStunCounter()
1143
+ if not stuns and self[141] then
1144
+ if self[142] then
1145
+ self.object:decrementForceStunCounter()
947
1146
  end
948
1147
  self.object:decrementStunCounter()
949
- self[134] = nil
950
- elseif stuns and not self[134] then
951
- if self[135] then
952
- self.object:incrementStunCounter()
1148
+ self[141] = nil
1149
+ elseif stuns and not self[141] then
1150
+ if self[142] then
1151
+ self.object:incrementForceStunCounter()
953
1152
  end
954
1153
  self.object:incrementStunCounter()
955
- self[134] = true
1154
+ self[141] = true
956
1155
  end
957
1156
  end
958
1157
  },
@@ -963,23 +1162,23 @@ __TS__SetDescriptor(
963
1162
  "ignoresStunImmunity",
964
1163
  {
965
1164
  get = function(self)
966
- local ____self__135_53 = self[135]
967
- if ____self__135_53 == nil then
968
- ____self__135_53 = false
1165
+ local ____self__142_55 = self[142]
1166
+ if ____self__142_55 == nil then
1167
+ ____self__142_55 = false
969
1168
  end
970
- return ____self__135_53
1169
+ return ____self__142_55
971
1170
  end,
972
1171
  set = function(self, ignoresStunImmunity)
973
- if not ignoresStunImmunity and self[135] then
974
- if self[134] then
975
- self.object:decrementStunCounter()
1172
+ if not ignoresStunImmunity and self[142] then
1173
+ if self[141] then
1174
+ self.object:decrementForceStunCounter()
976
1175
  end
977
- self[135] = nil
978
- elseif ignoresStunImmunity and not self[135] then
979
- if self[134] then
980
- self.object:incrementStunCounter()
1176
+ self[142] = nil
1177
+ elseif ignoresStunImmunity and not self[142] then
1178
+ if self[141] then
1179
+ self.object:incrementForceStunCounter()
981
1180
  end
982
- self[135] = true
1181
+ self[142] = true
983
1182
  end
984
1183
  end
985
1184
  },
@@ -990,19 +1189,19 @@ __TS__SetDescriptor(
990
1189
  "disablesAutoAttack",
991
1190
  {
992
1191
  get = function(self)
993
- local ____self__136_54 = self[136]
994
- if ____self__136_54 == nil then
995
- ____self__136_54 = false
1192
+ local ____self__143_56 = self[143]
1193
+ if ____self__143_56 == nil then
1194
+ ____self__143_56 = false
996
1195
  end
997
- return ____self__136_54
1196
+ return ____self__143_56
998
1197
  end,
999
1198
  set = function(self, disablesAutoAttack)
1000
- if not disablesAutoAttack and self[136] then
1199
+ if not disablesAutoAttack and self[143] then
1001
1200
  self.object:decrementDisableAutoAttackCounter()
1002
- self[136] = nil
1003
- elseif disablesAutoAttack and not self[136] then
1201
+ self[143] = nil
1202
+ elseif disablesAutoAttack and not self[143] then
1004
1203
  self.object:incrementDisableAutoAttackCounter()
1005
- self[136] = true
1204
+ self[143] = true
1006
1205
  end
1007
1206
  end
1008
1207
  },
@@ -1013,19 +1212,19 @@ __TS__SetDescriptor(
1013
1212
  "providesInvulnerability",
1014
1213
  {
1015
1214
  get = function(self)
1016
- local ____self__137_55 = self[137]
1017
- if ____self__137_55 == nil then
1018
- ____self__137_55 = false
1215
+ local ____self__144_57 = self[144]
1216
+ if ____self__144_57 == nil then
1217
+ ____self__144_57 = false
1019
1218
  end
1020
- return ____self__137_55
1219
+ return ____self__144_57
1021
1220
  end,
1022
1221
  set = function(self, providesInvulnerability)
1023
- if not providesInvulnerability and self[137] then
1222
+ if not providesInvulnerability and self[144] then
1024
1223
  self.object:decrementInvulnerabilityCounter()
1025
- self[137] = nil
1026
- elseif providesInvulnerability and not self[137] then
1224
+ self[144] = nil
1225
+ elseif providesInvulnerability and not self[144] then
1027
1226
  self.object:incrementInvulnerabilityCounter()
1028
- self[137] = true
1227
+ self[144] = true
1029
1228
  end
1030
1229
  end
1031
1230
  },
@@ -1036,17 +1235,17 @@ __TS__SetDescriptor(
1036
1235
  "killsOnExpiration",
1037
1236
  {
1038
1237
  get = function(self)
1039
- local ____self__138_56 = self[138]
1040
- if ____self__138_56 == nil then
1041
- ____self__138_56 = false
1238
+ local ____self__145_58 = self[145]
1239
+ if ____self__145_58 == nil then
1240
+ ____self__145_58 = false
1042
1241
  end
1043
- return ____self__138_56
1242
+ return ____self__145_58
1044
1243
  end,
1045
1244
  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
1245
+ if not killsOnExpiration and self[145] then
1246
+ self[145] = nil
1247
+ elseif killsOnExpiration and not self[145] then
1248
+ self[145] = true
1050
1249
  end
1051
1250
  end
1052
1251
  },
@@ -1057,17 +1256,40 @@ __TS__SetDescriptor(
1057
1256
  "explodesOnExpiration",
1058
1257
  {
1059
1258
  get = function(self)
1060
- local ____self__139_57 = self[139]
1061
- if ____self__139_57 == nil then
1062
- ____self__139_57 = false
1259
+ local ____self__146_59 = self[146]
1260
+ if ____self__146_59 == nil then
1261
+ ____self__146_59 = false
1063
1262
  end
1064
- return ____self__139_57
1263
+ return ____self__146_59
1065
1264
  end,
1066
1265
  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
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)
1071
1293
  end
1072
1294
  end
1073
1295
  },
@@ -1078,13 +1300,13 @@ __TS__SetDescriptor(
1078
1300
  "maximumDamageDealtEventCount",
1079
1301
  {
1080
1302
  get = function(self)
1081
- return self[131] or 0
1303
+ return self[133] or 0
1082
1304
  end,
1083
1305
  set = function(self, maximumDamageDealtEventCount)
1084
1306
  if maximumDamageDealtEventCount == 0 then
1085
- self[131] = nil
1307
+ self[133] = nil
1086
1308
  else
1087
- self[131] = maximumDamageDealtEventCount
1309
+ self[133] = maximumDamageDealtEventCount
1088
1310
  end
1089
1311
  end
1090
1312
  },
@@ -1095,13 +1317,13 @@ __TS__SetDescriptor(
1095
1317
  "maximumDamageReceivedEventCount",
1096
1318
  {
1097
1319
  get = function(self)
1098
- return self[133] or 0
1320
+ return self[135] or 0
1099
1321
  end,
1100
1322
  set = function(self, maximumDamageReceivedEventCount)
1101
1323
  if maximumDamageReceivedEventCount == 0 then
1102
- self[133] = nil
1324
+ self[135] = nil
1103
1325
  else
1104
- self[133] = maximumDamageReceivedEventCount
1326
+ self[135] = maximumDamageReceivedEventCount
1105
1327
  end
1106
1328
  end
1107
1329
  },
@@ -1112,13 +1334,13 @@ __TS__SetDescriptor(
1112
1334
  "maximumAutoAttackCount",
1113
1335
  {
1114
1336
  get = function(self)
1115
- return self[129] or 0
1337
+ return self[131] or 0
1116
1338
  end,
1117
1339
  set = function(self, maximumAutoAttackCount)
1118
1340
  if maximumAutoAttackCount == 0 then
1119
- self[129] = nil
1341
+ self[131] = nil
1120
1342
  else
1121
- self[129] = maximumAutoAttackCount
1343
+ self[131] = maximumAutoAttackCount
1122
1344
  end
1123
1345
  end
1124
1346
  },
@@ -1129,10 +1351,10 @@ __TS__SetDescriptor(
1129
1351
  "durationIncreaseOnAutoAttack",
1130
1352
  {
1131
1353
  get = function(self)
1132
- return self[106] or 0
1354
+ return self[108] or 0
1133
1355
  end,
1134
1356
  set = function(self, durationIncreaseOnAutoAttack)
1135
- self[106] = durationIncreaseOnAutoAttack
1357
+ self[108] = durationIncreaseOnAutoAttack
1136
1358
  end
1137
1359
  },
1138
1360
  true
@@ -1163,12 +1385,52 @@ __TS__SetDescriptor(
1163
1385
  },
1164
1386
  true
1165
1387
  )
1388
+ __TS__SetDescriptor(
1389
+ Buff.prototype,
1390
+ "evasionProbability",
1391
+ {
1392
+ get = function(self)
1393
+ return self:getUnitBonus(UnitBonusType.EVASION_PROBABILITY)
1394
+ end,
1395
+ set = function(self, evasionProbability)
1396
+ self:addOrUpdateOrRemoveUnitBonus(UnitBonusType.EVASION_PROBABILITY, evasionProbability)
1397
+ end
1398
+ },
1399
+ true
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
+ )
1166
1414
  __TS__SetDescriptor(
1167
1415
  Buff.prototype,
1168
1416
  "duration",
1169
- {get = function(self)
1170
- return self[102]
1171
- 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
+ },
1172
1434
  true
1173
1435
  )
1174
1436
  __TS__SetDescriptor(
@@ -1176,15 +1438,15 @@ __TS__SetDescriptor(
1176
1438
  "remainingDuration",
1177
1439
  {
1178
1440
  get = function(self)
1179
- local ____opt_58 = self._timer
1180
- 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
1181
1443
  end,
1182
1444
  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)
1445
+ local ____remainingDuration_65 = remainingDuration
1446
+ local ____opt_63 = self._timer
1447
+ local remainingDurationDelta = ____remainingDuration_65 - (____opt_63 and ____opt_63.remaining or 0)
1186
1448
  if remainingDurationDelta ~= 0 then
1187
- self[102] = self[102] + remainingDurationDelta
1449
+ self[103] = self[103] + remainingDurationDelta
1188
1450
  if remainingDuration <= 0 then
1189
1451
  Timer:run(destroyBuff, self)
1190
1452
  else
@@ -1196,7 +1458,8 @@ __TS__SetDescriptor(
1196
1458
  self._level,
1197
1459
  remainingDuration,
1198
1460
  self._spellStealPriority,
1199
- self._learnLevelMinimum
1461
+ self._learnLevelMinimum,
1462
+ self[147]
1200
1463
  ) then
1201
1464
  local timer = self._timer
1202
1465
  if timer == nil then
@@ -1210,37 +1473,135 @@ __TS__SetDescriptor(
1210
1473
  end
1211
1474
  },
1212
1475
  true
1213
- );
1476
+ )
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;
1214
1570
  (function(self)
1215
- local function destroyBuffIfNeeded(buff)
1216
- if getUnitAbility(buff[100].handle, buff.typeId) ~= buff.handle then
1217
- 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
1218
1579
  end
1219
1580
  end
1220
- ____exports.checkBuff = function(unit, buffTypeId)
1581
+ ____exports.checkBuff = function(unit, buffTypeId, isDispel, source)
1221
1582
  local buffByTypeId = buffByTypeIdByUnit[unit]
1222
1583
  if buffByTypeId ~= nil then
1223
1584
  local buff = buffByTypeId[buffTypeId]
1224
1585
  if buff ~= nil then
1225
- destroyBuffIfNeeded(buff)
1586
+ destroyBuffIfNeeded(buff, isDispel, source)
1226
1587
  end
1227
1588
  end
1228
1589
  end
1229
- ____exports.checkBuffs = function(unit)
1230
- ____exports.Buff:forAll(unit, destroyBuffIfNeeded)
1590
+ ____exports.checkBuffs = function(unit, isDispel, source)
1591
+ ____exports.Buff:forAll(unit, destroyBuffIfNeeded, isDispel, source)
1231
1592
  end
1232
1593
  Unit.abilityChannelingStartEvent:addListener(
1233
1594
  0,
1234
1595
  function(caster)
1235
- ____exports.checkBuffs(caster)
1236
- Timer:run(____exports.checkBuffs, caster)
1596
+ ____exports.checkBuffs(caster, true, caster)
1597
+ Timer:run(____exports.checkBuffs, caster, true, caster)
1237
1598
  end
1238
1599
  )
1239
1600
  Unit.abilityUnitTargetChannelingStartEvent:addListener(
1240
1601
  0,
1241
1602
  function(caster, ability, target)
1242
- ____exports.checkBuffs(target)
1243
- Timer:run(____exports.checkBuffs, target)
1603
+ ____exports.checkBuffs(target, true, caster)
1604
+ Timer:run(____exports.checkBuffs, target, true, caster)
1244
1605
  end
1245
1606
  )
1246
1607
  Unit.abilityPointTargetChannelingStartEvent:addListener(
@@ -1251,18 +1612,53 @@ __TS__SetDescriptor(
1251
1612
  y,
1252
1613
  ability:getField(ABILITY_RLF_AREA_OF_EFFECT)
1253
1614
  )
1254
- forEach(units, ____exports.checkBuffs)
1255
- 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
1256
1640
  end
1257
1641
  )
1258
1642
  Unit.onDamage:addListener(
1259
1643
  0,
1260
1644
  function(source, target)
1261
1645
  if source ~= nil then
1262
- ____exports.checkBuffs(source)
1646
+ Timer:run(____exports.checkBuffs, source, false)
1263
1647
  end
1264
- ____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)
1265
1655
  end
1266
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)
1267
1663
  end)(Buff)
1268
1664
  return ____exports