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

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