warscript 0.0.1-dev.4363c65 → 0.0.1-dev.43d3477

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