warscript 0.0.1-dev.aefeacb → 0.0.1-dev.b1ce140

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 (391) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/dummy.lua +4 -2
  4. package/core/types/effect.d.ts +12 -4
  5. package/core/types/effect.lua +67 -104
  6. package/core/types/frame.d.ts +1 -0
  7. package/core/types/frame.lua +136 -58
  8. package/core/types/handle.lua +9 -9
  9. package/core/types/item.d.ts +1 -0
  10. package/core/types/item.lua +1 -0
  11. package/core/types/player.d.ts +18 -1
  12. package/core/types/player.lua +76 -26
  13. package/core/types/playerCamera.d.ts +2 -0
  14. package/core/types/playerCamera.lua +123 -5
  15. package/core/types/playerColor.lua +4 -3
  16. package/core/types/sound.d.ts +18 -26
  17. package/core/types/sound.lua +99 -53
  18. package/core/types/tileCell.d.ts +11 -1
  19. package/core/types/tileCell.lua +97 -0
  20. package/core/types/timer.d.ts +9 -8
  21. package/core/types/timer.lua +45 -23
  22. package/core/types/unit.d.ts +5 -0
  23. package/core/types/unit.lua +5 -0
  24. package/core/util.d.ts +3 -1
  25. package/core/util.lua +109 -3
  26. package/decl/native.d.ts +1718 -964
  27. package/destroyable.d.ts +1 -0
  28. package/destroyable.lua +9 -0
  29. package/engine/behavior.d.ts +14 -1
  30. package/engine/behavior.lua +230 -70
  31. package/engine/behaviour/ability/apply-buff.lua +5 -5
  32. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  33. package/engine/behaviour/ability/damage.d.ts +13 -3
  34. package/engine/behaviour/ability/damage.lua +41 -49
  35. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  36. package/engine/behaviour/ability/emulate-impact.lua +23 -7
  37. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  38. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  39. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  40. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  41. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  42. package/engine/behaviour/ability/restore-mana.lua +6 -6
  43. package/engine/behaviour/ability.d.ts +17 -6
  44. package/engine/behaviour/ability.lua +81 -21
  45. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  46. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  47. package/engine/behaviour/unit.d.ts +41 -2
  48. package/engine/behaviour/unit.lua +270 -6
  49. package/engine/buff.d.ts +79 -27
  50. package/engine/buff.lua +454 -186
  51. package/engine/index.d.ts +2 -1
  52. package/engine/internal/ability.d.ts +11 -1
  53. package/engine/internal/ability.lua +104 -44
  54. package/engine/internal/item/ability.lua +63 -11
  55. package/engine/internal/item/fields.d.ts +12 -0
  56. package/engine/internal/item/fields.lua +33 -0
  57. package/engine/internal/item/owner-cache.d.ts +5 -0
  58. package/engine/internal/item/owner-cache.lua +4 -0
  59. package/engine/internal/item+owner.d.ts +2 -0
  60. package/engine/internal/item+owner.lua +37 -8
  61. package/engine/internal/item.d.ts +32 -16
  62. package/engine/internal/item.lua +257 -82
  63. package/engine/internal/mechanics/ability-duration.lua +1 -1
  64. package/engine/internal/mechanics/cast-ability.lua +6 -3
  65. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  66. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  67. package/engine/internal/misc/frame-coordinates.lua +21 -0
  68. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  69. package/engine/internal/misc/get-terrain-z.lua +11 -0
  70. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  71. package/engine/internal/misc/player-local-handle.lua +5 -0
  72. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  73. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  74. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  75. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  76. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  77. package/engine/internal/object-data/health-bonus.lua +16 -0
  78. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  79. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  80. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  81. package/engine/internal/object-data/mana-bonus.lua +16 -0
  82. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  83. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  84. package/engine/internal/unit/ability.d.ts +35 -0
  85. package/engine/internal/unit/ability.lua +113 -12
  86. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  87. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  88. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  89. package/engine/internal/unit/allowed-targets.lua +9 -1
  90. package/engine/internal/unit/appearance.d.ts +15 -0
  91. package/engine/internal/unit/appearance.lua +85 -0
  92. package/engine/internal/unit/attributes.d.ts +17 -0
  93. package/engine/internal/unit/attributes.lua +46 -0
  94. package/engine/internal/unit/bonus.d.ts +14 -0
  95. package/engine/internal/unit/bonus.lua +102 -8
  96. package/engine/internal/unit/buff.d.ts +2 -2
  97. package/engine/internal/unit/buff.lua +34 -19
  98. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  99. package/engine/internal/unit/equipment-inventory.lua +233 -0
  100. package/engine/internal/unit/expiration-timer.lua +1 -1
  101. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  102. package/engine/internal/unit/extended-inventory.lua +99 -0
  103. package/engine/internal/unit/fly-height.d.ts +7 -0
  104. package/engine/internal/unit/fly-height.lua +20 -0
  105. package/engine/internal/unit/ignore-events-items.lua +10 -1
  106. package/engine/internal/unit/interrupts.d.ts +12 -0
  107. package/engine/internal/unit/interrupts.lua +28 -0
  108. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  109. package/engine/internal/unit/inventory.lua +87 -0
  110. package/engine/internal/unit/item-container.d.ts +25 -0
  111. package/engine/internal/unit/item-container.lua +11 -0
  112. package/engine/internal/unit/item-order-events.d.ts +17 -0
  113. package/engine/internal/unit/item-order-events.lua +67 -0
  114. package/engine/internal/unit/item-slot.d.ts +27 -0
  115. package/engine/internal/unit/item-slot.lua +92 -0
  116. package/engine/internal/unit/main-selected.lua +12 -27
  117. package/engine/internal/unit/order.d.ts +20 -0
  118. package/engine/internal/unit/order.lua +136 -0
  119. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  120. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  121. package/engine/internal/unit/range-event.d.ts +12 -0
  122. package/engine/internal/unit/range-event.lua +90 -0
  123. package/engine/internal/unit/scale.d.ts +7 -0
  124. package/engine/internal/unit/scale.lua +20 -0
  125. package/engine/internal/unit+ability.d.ts +2 -1
  126. package/engine/internal/unit+ability.lua +73 -3
  127. package/engine/internal/unit+bonus.lua +3 -3
  128. package/engine/internal/unit+damage.d.ts +11 -11
  129. package/engine/internal/unit+damage.lua +43 -14
  130. package/engine/internal/unit+rally.lua +9 -31
  131. package/engine/internal/unit+spellSteal.lua +1 -2
  132. package/engine/internal/unit-missile-data.lua +58 -32
  133. package/engine/internal/unit-missile-launch.lua +65 -27
  134. package/engine/internal/unit.d.ts +43 -33
  135. package/engine/internal/unit.lua +391 -323
  136. package/engine/local-client.d.ts +28 -0
  137. package/engine/local-client.lua +324 -54
  138. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  139. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  140. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  141. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  142. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  143. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  144. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  145. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  146. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  147. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  148. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  149. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  150. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  151. package/engine/object-data/auxiliary/item-class.lua +2 -0
  152. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  153. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  154. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  155. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  156. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  157. package/engine/object-data/auxiliary/order-type.lua +2 -0
  158. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  159. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  160. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  161. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  162. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  163. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  164. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  165. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  166. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  167. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  168. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  169. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  170. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  171. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  172. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  173. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  174. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  175. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  176. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  177. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  178. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  179. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  180. package/engine/object-data/entry/ability-type/blank-configurable.lua +30 -0
  181. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  182. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  183. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  184. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  185. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  186. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  187. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  188. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  189. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  190. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  191. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  192. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  193. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  194. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  195. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  196. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  197. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  198. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  199. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  200. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  201. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  202. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  203. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  204. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  205. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  206. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  207. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  208. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  209. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  210. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  211. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  212. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  213. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  214. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  215. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  216. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  217. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  218. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  219. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  220. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  221. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  222. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  223. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  224. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  225. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  226. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  227. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  228. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  229. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  230. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  231. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  232. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  233. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  234. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  235. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  236. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  237. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  238. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  239. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  240. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  241. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  242. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  243. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  244. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  245. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  246. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  247. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  248. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  249. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  250. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  251. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  252. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  253. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  254. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  255. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  256. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  257. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  258. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  259. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  260. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  261. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  262. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  263. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  264. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  265. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  266. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  267. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  268. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  269. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  270. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  271. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  272. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  273. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  274. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  275. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  276. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  277. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  278. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  279. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  280. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  281. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  282. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  283. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  284. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  285. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  286. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  287. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  288. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  289. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  290. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  291. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  292. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  293. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  294. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  295. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  296. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  297. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  298. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  299. package/engine/object-data/entry/ability-type/web.lua +52 -0
  300. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  301. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  302. package/engine/object-data/entry/ability-type.d.ts +29 -14
  303. package/engine/object-data/entry/ability-type.lua +256 -17
  304. package/engine/object-data/entry/buff-type/applicable.lua +113 -104
  305. package/engine/object-data/entry/buff-type.d.ts +10 -12
  306. package/engine/object-data/entry/buff-type.lua +37 -27
  307. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  308. package/engine/object-data/entry/destructible-type.lua +181 -0
  309. package/engine/object-data/entry/item-type.d.ts +18 -3
  310. package/engine/object-data/entry/item-type.lua +84 -0
  311. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  312. package/engine/object-data/entry/lightning-type.lua +1 -1
  313. package/engine/object-data/entry/sound-preset.d.ts +19 -2
  314. package/engine/object-data/entry/sound-preset.lua +104 -0
  315. package/engine/object-data/entry/unit-type.d.ts +64 -6
  316. package/engine/object-data/entry/unit-type.lua +531 -85
  317. package/engine/object-data/entry/upgrade.d.ts +2 -2
  318. package/engine/object-data/entry.d.ts +6 -1
  319. package/engine/object-data/entry.lua +8 -0
  320. package/engine/object-field/ability.d.ts +4 -4
  321. package/engine/object-field/ability.lua +9 -8
  322. package/engine/object-field/item.d.ts +22 -0
  323. package/engine/object-field/item.lua +118 -0
  324. package/engine/object-field/unit.d.ts +72 -3
  325. package/engine/object-field/unit.lua +268 -7
  326. package/engine/object-field.d.ts +26 -7
  327. package/engine/object-field.lua +360 -119
  328. package/engine/random.d.ts +10 -0
  329. package/engine/random.lua +21 -0
  330. package/engine/standard/entries/ability-type.d.ts +3102 -7
  331. package/engine/standard/entries/ability-type.lua +0 -6
  332. package/engine/standard/entries/buff-type.d.ts +3 -0
  333. package/engine/standard/entries/buff-type.lua +3 -0
  334. package/engine/standard/entries/item-type.d.ts +1299 -0
  335. package/engine/standard/entries/item-type.lua +2 -0
  336. package/engine/standard/entries/lightning-type.d.ts +42 -15
  337. package/engine/standard/entries/lightning-type.lua +0 -14
  338. package/engine/standard/entries/unit-type.d.ts +5 -0
  339. package/engine/standard/entries/unit-type.lua +5 -0
  340. package/engine/standard/fields/ability.d.ts +2 -2
  341. package/engine/standard/fields/ability.lua +2 -2
  342. package/engine/standard/fields/item.d.ts +4 -0
  343. package/engine/standard/fields/item.lua +6 -0
  344. package/engine/standard/fields/unit.d.ts +12 -0
  345. package/engine/standard/fields/unit.lua +20 -0
  346. package/engine/synchronization.d.ts +11 -0
  347. package/engine/synchronization.lua +77 -0
  348. package/engine/text-tag.d.ts +36 -2
  349. package/engine/text-tag.lua +250 -10
  350. package/engine/unit.d.ts +11 -1
  351. package/engine/unit.lua +11 -1
  352. package/event.d.ts +1 -1
  353. package/lualib_bundle.lua +1 -1
  354. package/math.d.ts +2 -0
  355. package/math.lua +14 -0
  356. package/net/socket.lua +1 -1
  357. package/network.lua +25 -1
  358. package/objutil/buff.lua +12 -11
  359. package/objutil/object.lua +1 -1
  360. package/operation.d.ts +8 -1
  361. package/operation.lua +38 -18
  362. package/package.json +3 -23
  363. package/patch-lua.lua +15 -0
  364. package/patch-lualib.lua +1 -1
  365. package/utility/arrays.d.ts +2 -0
  366. package/utility/arrays.lua +11 -0
  367. package/utility/callback-array.d.ts +17 -0
  368. package/utility/callback-array.lua +61 -0
  369. package/utility/functions.d.ts +8 -0
  370. package/utility/functions.lua +13 -0
  371. package/utility/linked-map.d.ts +35 -0
  372. package/utility/linked-map.lua +107 -0
  373. package/utility/linked-set.d.ts +5 -1
  374. package/utility/linked-set.lua +49 -1
  375. package/utility/lua-maps.d.ts +15 -2
  376. package/utility/lua-maps.lua +53 -2
  377. package/utility/lua-sets.d.ts +2 -0
  378. package/utility/lua-sets.lua +7 -0
  379. package/utility/random.d.ts +102 -0
  380. package/utility/random.lua +273 -0
  381. package/utility/records.lua +20 -1
  382. package/utility/types.d.ts +3 -0
  383. package/utility/unordered-map.d.ts +27 -0
  384. package/utility/unordered-map.lua +99 -0
  385. package/core/types/order.d.ts +0 -25
  386. package/core/types/order.lua +0 -55
  387. package/engine/internal/unit/item.lua +0 -78
  388. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  389. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  390. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  391. /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,9 +29,6 @@ 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
@@ -44,6 +42,7 @@ local BuffType = ____buff_2Dtype.BuffType
44
42
  local ____unit = require("engine.behaviour.unit")
45
43
  local UnitBehavior = ____unit.UnitBehavior
46
44
  local ____arrays = require("utility.arrays")
45
+ local emptyArray = ____arrays.emptyArray
47
46
  local forEach = ____arrays.forEach
48
47
  local ____event = require("event")
49
48
  local Event = ____event.Event
@@ -53,6 +52,12 @@ local ____item = require("engine.internal.item")
53
52
  local Item = ____item.Item
54
53
  local ____destructable = require("core.types.destructable")
55
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
56
61
  local getUnitAbility = BlzGetUnitAbility
57
62
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
58
63
  local stringValueByBuffTypeIdByFieldId = {}
@@ -98,9 +103,11 @@ local buffParametersKeys = {
98
103
  damageIncrease = true,
99
104
  damageIncreaseFactor = true,
100
105
  armorIncrease = true,
101
- armorIncreaseFactor = true,
106
+ maxHealthIncrease = true,
107
+ maxManaIncrease = true,
102
108
  attackSpeedIncreaseFactor = true,
103
109
  movementSpeedIncreaseFactor = true,
110
+ manaRegenerationRateIncreaseFactor = true,
104
111
  evasionProbability = true,
105
112
  missProbability = true,
106
113
  damageFactor = true,
@@ -109,6 +116,7 @@ local buffParametersKeys = {
109
116
  durationIncreaseOnAutoAttack = true,
110
117
  maximumDuration = true,
111
118
  maximumRemainingDuration = true,
119
+ turnsIntoGhost = true,
112
120
  stuns = true,
113
121
  ignoresStunImmunity = true,
114
122
  providesStunImmunity = true,
@@ -119,11 +127,15 @@ local buffParametersKeys = {
119
127
  maximumAutoAttackCount = true,
120
128
  maximumDamageDealtEventCount = true,
121
129
  maximumDamageReceivedEventCount = true,
130
+ absorbedDamageFactor = true,
131
+ maximumDamageAbsorbed = true,
132
+ destroysOnMaximumDamageAbsorbed = true,
122
133
  uniqueGroup = true,
123
134
  damageOnExpiration = true,
124
135
  healingOnExpiration = true,
125
136
  killsOnExpiration = true,
126
- explodesOnExpiration = true
137
+ explodesOnExpiration = true,
138
+ abilityCooldownFactor = true
127
139
  }
128
140
  local function resolveEnumValue(ability, level, value)
129
141
  if value == nil or type(value) == "number" then
@@ -174,6 +186,8 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
174
186
  end
175
187
  end
176
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
190
+ "turnsIntoGhost",
177
191
  "stuns",
178
192
  "ignoresStunImmunity",
179
193
  "disablesAutoAttack",
@@ -185,8 +199,11 @@ local buffNumberParameters = {
185
199
  "durationIncreaseOnAutoAttack",
186
200
  "attackSpeedIncreaseFactor",
187
201
  "movementSpeedIncreaseFactor",
202
+ "manaRegenerationRateIncreaseFactor",
188
203
  "evasionProbability",
189
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
190
207
  "damageFactor",
191
208
  "receivedDamageFactor",
192
209
  "maximumAutoAttackCount",
@@ -199,7 +216,10 @@ local buffNumberParameters = {
199
216
  "healingPerInterval",
200
217
  "healingOverDuration",
201
218
  "damageOnExpiration",
202
- "healingOnExpiration"
219
+ "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
222
+ "abilityCooldownFactor"
203
223
  }
204
224
  local unsuccessfulApplicationMarker = {}
205
225
  local function selectBuffTypeIdWithLeastDuration(buffTypeIds, unit)
@@ -234,6 +254,10 @@ local function destroyBuff(buff)
234
254
  buff:destroy()
235
255
  end
236
256
  local function expireBuff(buff)
257
+ if buff.isDestroyed or buff[100] ~= 1 then
258
+ return
259
+ end
260
+ buff[100] = 2
237
261
  local remainingDamageOverDuration = buff[113] or 0
238
262
  local remainingHealingOverDuration = buff[113] or 0
239
263
  if remainingDamageOverDuration ~= 0 or remainingHealingOverDuration ~= 0 then
@@ -302,7 +326,8 @@ buffHealingIntervalTimerCallback = function(buff)
302
326
  source:healTarget(buff[101], healingPerInterval)
303
327
  end
304
328
  end
305
- local buffDestroyEvent = __TS__New(Event)
329
+ local buffCreatedEvent = __TS__New(Event)
330
+ local buffBeingDestroyedEvent = __TS__New(Event)
306
331
  ____exports.Buff = __TS__Class()
307
332
  local Buff = ____exports.Buff
308
333
  Buff.name = "Buff"
@@ -317,33 +342,38 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
317
342
  local polarity
318
343
  local resistanceType
319
344
  local ability
345
+ local abilityBehavior
320
346
  if type(typeIdOrTypeIds) ~= "number" then
321
347
  typeId = selectBuffTypeIdWithLeastDuration(typeIdOrTypeIds, _unit)
322
348
  polarity = resistanceTypeOrPolarity
323
349
  resistanceType = abilityOrParametersOrResistanceType
324
- 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
325
354
  ability = parametersOrAbility
326
- else
327
- ability = nil
355
+ elseif parametersOrAbility ~= nil then
328
356
  parameters = parametersOrAbility
329
357
  end
330
358
  else
331
359
  typeId = typeIdOrTypeIds
332
360
  polarity = polarityOrTypeIdSelectionPolicy
333
361
  resistanceType = resistanceTypeOrPolarity
334
- 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
335
367
  ability = abilityOrParametersOrResistanceType
336
368
  parameters = parametersOrAbility
337
- else
338
- ability = nil
369
+ elseif abilityOrParametersOrResistanceType ~= nil then
339
370
  parameters = abilityOrParametersOrResistanceType
371
+ else
372
+ parameters = parametersOrAbility
340
373
  end
341
374
  end
375
+ self.sourceAbilityBehavior = abilityBehavior
342
376
  self.typeId = typeId
343
- if not __TS__InstanceOf(ability, Ability) then
344
- parameters = ability
345
- ability = nil
346
- end
347
377
  local defaultParameters = self.constructor.defaultParameters
348
378
  local level = parameters and parameters.level or defaultParameters.level
349
379
  local spellStealPriority = parameters and parameters.spellStealPriority or defaultParameters.spellStealPriority
@@ -371,14 +401,15 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
371
401
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
372
402
  if missProbability ~= nil then
373
403
  missProbability = resolveNumberValue(ability, level, missProbability)
374
- self[141] = missProbability
404
+ self[146] = missProbability
375
405
  end
376
406
  local buffByTypeId = buffByTypeIdByUnit[_unit]
377
407
  if buffByTypeId == nil then
378
408
  buffByTypeId = {}
379
409
  buffByTypeIdByUnit[_unit] = buffByTypeId
380
410
  end
381
- local ____opt_15 = buffByTypeId[typeId]
411
+ self.previousBuff = buffByTypeId[typeId]
412
+ local ____opt_15 = self.previousBuff
382
413
  if ____opt_15 ~= nil then
383
414
  ____opt_15:destroy()
384
415
  end
@@ -454,24 +485,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
454
485
  abilityTypeIds = {}
455
486
  self._abilityTypeIds = abilityTypeIds
456
487
  end
457
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
488
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
489
+ local abilityParameters = checkNotNull(parametersAbilityTypeIds[abilityTypeId])
458
490
  local addedAbility = _unit:addAbility(abilityTypeId)
459
491
  if addedAbility ~= nil then
460
492
  _unit:makeAbilityPermanent(abilityTypeId, true)
461
493
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
462
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
463
- if abilityParameterKey == "isButtonVisible" then
464
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
465
- _unit:hideAbility(abilityTypeId, true)
466
- end
467
- elseif abilityParameterKey ~= "level" then
468
- abilityParameterKey:setValue(
469
- addedAbility,
470
- resolveNumberValue(ability, level, abilityParameterValue)
471
- )
472
- end
494
+ if abilityParameters.isButtonVisible == false then
495
+ _unit:hideAbility(abilityTypeId, true)
473
496
  end
474
- abilityTypeIds[abilityTypeId] = true
497
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
498
+ field[1]:setValue(
499
+ addedAbility,
500
+ resolveNumberValue(ability, level, field[2])
501
+ )
502
+ end
503
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
475
504
  end
476
505
  end
477
506
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -483,18 +512,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
483
512
  self._behaviors = behaviors
484
513
  end
485
514
  end
486
- local additionalParameters = {}
487
- for key, value in pairs(parameters) do
488
- if not buffParametersKeys[key] then
489
- if ability then
490
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
491
- else
492
- 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
493
524
  end
494
525
  end
495
- end
496
- if (next(additionalParameters)) ~= nil then
497
- self.parameters = additionalParameters
526
+ if (next(additionalParameters)) ~= nil then
527
+ self.parameters = additionalParameters
528
+ end
498
529
  end
499
530
  end
500
531
  if duration ~= nil and duration > 0 then
@@ -504,65 +535,79 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
504
535
  end
505
536
  self:onCreate()
506
537
  self[100] = 1
538
+ Event.invoke(buffCreatedEvent, self)
507
539
  end
508
- function Buff.prototype.getUnitBonus(self, bonusType)
509
- local ____opt_38 = self._bonusIdByBonusType
510
- local bonusId = ____opt_38 and ____opt_38[bonusType]
511
- return bonusId == nil and 0 or getUnitBonus(self._unit, bonusType, bonusId)
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
546
+ end
512
547
  end
513
- function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
514
- local bonusIdByBonusType = self._bonusIdByBonusType
515
- if bonusIdByBonusType == nil then
516
- bonusIdByBonusType = {}
517
- self._bonusIdByBonusType = bonusIdByBonusType
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
518
554
  end
519
- bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
520
555
  end
521
556
  function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
557
+ self:flash(
558
+ self[105],
559
+ stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin",
560
+ widgetOrXOrParametersOrDuration,
561
+ yOrParametersOrDuration,
562
+ parametersOrDuration
563
+ )
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)
522
575
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
523
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
576
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
524
577
  else
525
578
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
526
- local ____Effect_42 = Effect
527
- local ____Effect_flash_43 = Effect.flash
528
- local ____array_41 = __TS__SparseArrayNew(
529
- self[105],
530
- isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
531
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
532
- )
533
- local ____isWidgetProvided_40
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
534
583
  if isWidgetProvided then
535
- ____isWidgetProvided_40 = yOrParametersOrDuration
584
+ ____isWidgetProvided_38 = yOrParametersOrDuration
536
585
  else
537
- ____isWidgetProvided_40 = widgetOrXOrParametersOrDuration
586
+ ____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
538
587
  end
539
- __TS__SparseArrayPush(____array_41, ____isWidgetProvided_40)
540
- ____Effect_flash_43(
541
- ____Effect_42,
542
- __TS__SparseArraySpread(____array_41)
588
+ __TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
589
+ ____Effect_flash_41(
590
+ ____Effect_40,
591
+ __TS__SparseArraySpread(____array_39)
543
592
  )
544
593
  end
545
594
  end
546
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
547
- local isWidgetProvided = type(widgetOrDuration) == "table"
548
- local ____Effect_46 = Effect
549
- local ____Effect_flash_47 = Effect.flash
550
- local ____array_45 = __TS__SparseArrayNew(
551
- self[106],
552
- isWidgetProvided and widgetOrDuration or self._unit,
553
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
554
- )
555
- local ____isWidgetProvided_44
556
- if isWidgetProvided then
557
- ____isWidgetProvided_44 = duration
558
- else
559
- ____isWidgetProvided_44 = widgetOrDuration
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
560
610
  end
561
- __TS__SparseArrayPush(____array_45, ____isWidgetProvided_44)
562
- ____Effect_flash_47(
563
- ____Effect_46,
564
- __TS__SparseArraySpread(____array_45)
565
- )
566
611
  end
567
612
  function Buff.prototype.onCreate(self)
568
613
  end
@@ -592,26 +637,33 @@ function Buff.prototype.onDestroy(self)
592
637
  behavior:destroy()
593
638
  end
594
639
  end
595
- if self[137] 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
596
650
  unit:decrementDisableAutoAttackCounter()
597
651
  end
598
- if self[135] then
599
- if self[136] then
600
- unit:decrementStunCounter()
652
+ if self[140] then
653
+ if self[141] then
654
+ unit:decrementForceStunCounter()
601
655
  end
602
656
  unit:decrementStunCounter()
603
657
  end
658
+ if self[139] then
659
+ unit:decrementGhostCounter()
660
+ end
604
661
  if self._abilityTypeIds ~= nil then
605
- for abilityTypeId in pairs(self._abilityTypeIds) do
662
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
606
663
  unit:removeAbility(abilityTypeId)
607
664
  end
608
665
  end
609
- if self._bonusIdByBonusType ~= nil then
610
- for bonusType, bonusId in pairs(self._bonusIdByBonusType) do
611
- removeUnitBonus(unit, bonusType, bonusId)
612
- end
613
- end
614
- Event.invoke(buffDestroyEvent, self)
666
+ Event.invoke(buffBeingDestroyedEvent, self)
615
667
  self[100] = 3
616
668
  return UnitBehavior.prototype.onDestroy(self)
617
669
  end
@@ -640,13 +692,15 @@ function Buff.apply(self, ...)
640
692
  end
641
693
  end
642
694
  function Buff.getByTypeId(self, unit, typeId)
643
- local ____opt_48 = buffByTypeIdByUnit[unit]
644
- local buff = ____opt_48 and ____opt_48[typeId]
695
+ local ____opt_42 = buffByTypeIdByUnit[unit]
696
+ local buff = ____opt_42 and ____opt_42[typeId]
645
697
  if __TS__InstanceOf(buff, self) then
646
698
  return buff
647
699
  end
648
700
  return nil
649
701
  end
702
+ function Buff.prototype.onDispel(self, source)
703
+ end
650
704
  function Buff.prototype.onExpiration(self)
651
705
  local unit = self.unit
652
706
  if self[120] ~= nil then
@@ -655,9 +709,9 @@ function Buff.prototype.onExpiration(self)
655
709
  if self[121] ~= nil then
656
710
  (self[102] or unit):healTarget(unit, self[120] or 0)
657
711
  end
658
- if self[140] then
712
+ if self[145] then
659
713
  unit:explode()
660
- elseif self[139] then
714
+ elseif self[144] then
661
715
  unit:kill()
662
716
  end
663
717
  end
@@ -712,6 +766,18 @@ function Buff.prototype.onDamageDealt(self, target, event)
712
766
  end
713
767
  function Buff.prototype.onDamageReceived(self, source, event)
714
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
715
781
  local damageReceivedEventCount = (self[133] or 0) + 1
716
782
  self[133] = damageReceivedEventCount
717
783
  if damageReceivedEventCount == self[134] then
@@ -799,8 +865,8 @@ __TS__SetDescriptor(
799
865
  return
800
866
  end
801
867
  self[112] = damageInterval
802
- local ____opt_50 = self._timer
803
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
868
+ local ____opt_45 = self._timer
869
+ local elapsed = ____opt_45 and ____opt_45.elapsed or 0
804
870
  local timer = self[114]
805
871
  if timer == nil then
806
872
  timer = Timer:create()
@@ -879,8 +945,8 @@ __TS__SetDescriptor(
879
945
  return
880
946
  end
881
947
  self[117] = healingInterval
882
- local ____opt_52 = self._timer
883
- local elapsed = ____opt_52 and ____opt_52.elapsed or 0
948
+ local ____opt_47 = self._timer
949
+ local elapsed = ____opt_47 and ____opt_47.elapsed or 0
884
950
  local timer = self[119]
885
951
  if timer == nil then
886
952
  timer = Timer:create()
@@ -961,30 +1027,79 @@ __TS__SetDescriptor(
961
1027
  },
962
1028
  true
963
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
+ )
964
1079
  __TS__SetDescriptor(
965
1080
  Buff.prototype,
966
1081
  "stuns",
967
1082
  {
968
1083
  get = function(self)
969
- local ____self__135_54 = self[135]
970
- if ____self__135_54 == nil then
971
- ____self__135_54 = false
1084
+ local ____self__140_50 = self[140]
1085
+ if ____self__140_50 == nil then
1086
+ ____self__140_50 = false
972
1087
  end
973
- return ____self__135_54
1088
+ return ____self__140_50
974
1089
  end,
975
1090
  set = function(self, stuns)
976
- if not stuns and self[135] then
977
- if self[136] then
978
- self.object:decrementStunCounter()
1091
+ if not stuns and self[140] then
1092
+ if self[141] then
1093
+ self.object:decrementForceStunCounter()
979
1094
  end
980
1095
  self.object:decrementStunCounter()
981
- self[135] = nil
982
- elseif stuns and not self[135] then
983
- if self[136] then
984
- self.object:incrementStunCounter()
1096
+ self[140] = nil
1097
+ elseif stuns and not self[140] then
1098
+ if self[141] then
1099
+ self.object:incrementForceStunCounter()
985
1100
  end
986
1101
  self.object:incrementStunCounter()
987
- self[135] = true
1102
+ self[140] = true
988
1103
  end
989
1104
  end
990
1105
  },
@@ -995,23 +1110,23 @@ __TS__SetDescriptor(
995
1110
  "ignoresStunImmunity",
996
1111
  {
997
1112
  get = function(self)
998
- local ____self__136_55 = self[136]
999
- if ____self__136_55 == nil then
1000
- ____self__136_55 = false
1113
+ local ____self__141_51 = self[141]
1114
+ if ____self__141_51 == nil then
1115
+ ____self__141_51 = false
1001
1116
  end
1002
- return ____self__136_55
1117
+ return ____self__141_51
1003
1118
  end,
1004
1119
  set = function(self, ignoresStunImmunity)
1005
- if not ignoresStunImmunity and self[136] then
1006
- if self[135] then
1007
- self.object:decrementStunCounter()
1120
+ if not ignoresStunImmunity and self[141] then
1121
+ if self[140] then
1122
+ self.object:decrementForceStunCounter()
1008
1123
  end
1009
- self[136] = nil
1010
- elseif ignoresStunImmunity and not self[136] then
1011
- if self[135] then
1012
- self.object:incrementStunCounter()
1124
+ self[141] = nil
1125
+ elseif ignoresStunImmunity and not self[141] then
1126
+ if self[140] then
1127
+ self.object:incrementForceStunCounter()
1013
1128
  end
1014
- self[136] = true
1129
+ self[141] = true
1015
1130
  end
1016
1131
  end
1017
1132
  },
@@ -1022,19 +1137,19 @@ __TS__SetDescriptor(
1022
1137
  "disablesAutoAttack",
1023
1138
  {
1024
1139
  get = function(self)
1025
- local ____self__137_56 = self[137]
1026
- if ____self__137_56 == nil then
1027
- ____self__137_56 = false
1140
+ local ____self__142_52 = self[142]
1141
+ if ____self__142_52 == nil then
1142
+ ____self__142_52 = false
1028
1143
  end
1029
- return ____self__137_56
1144
+ return ____self__142_52
1030
1145
  end,
1031
1146
  set = function(self, disablesAutoAttack)
1032
- if not disablesAutoAttack and self[137] then
1147
+ if not disablesAutoAttack and self[142] then
1033
1148
  self.object:decrementDisableAutoAttackCounter()
1034
- self[137] = nil
1035
- elseif disablesAutoAttack and not self[137] then
1149
+ self[142] = nil
1150
+ elseif disablesAutoAttack and not self[142] then
1036
1151
  self.object:incrementDisableAutoAttackCounter()
1037
- self[137] = true
1152
+ self[142] = true
1038
1153
  end
1039
1154
  end
1040
1155
  },
@@ -1045,19 +1160,19 @@ __TS__SetDescriptor(
1045
1160
  "providesInvulnerability",
1046
1161
  {
1047
1162
  get = function(self)
1048
- local ____self__138_57 = self[138]
1049
- if ____self__138_57 == nil then
1050
- ____self__138_57 = false
1163
+ local ____self__143_53 = self[143]
1164
+ if ____self__143_53 == nil then
1165
+ ____self__143_53 = false
1051
1166
  end
1052
- return ____self__138_57
1167
+ return ____self__143_53
1053
1168
  end,
1054
1169
  set = function(self, providesInvulnerability)
1055
- if not providesInvulnerability and self[138] then
1170
+ if not providesInvulnerability and self[143] then
1056
1171
  self.object:decrementInvulnerabilityCounter()
1057
- self[138] = nil
1058
- elseif providesInvulnerability and not self[138] then
1172
+ self[143] = nil
1173
+ elseif providesInvulnerability and not self[143] then
1059
1174
  self.object:incrementInvulnerabilityCounter()
1060
- self[138] = true
1175
+ self[143] = true
1061
1176
  end
1062
1177
  end
1063
1178
  },
@@ -1068,17 +1183,17 @@ __TS__SetDescriptor(
1068
1183
  "killsOnExpiration",
1069
1184
  {
1070
1185
  get = function(self)
1071
- local ____self__139_58 = self[139]
1072
- if ____self__139_58 == nil then
1073
- ____self__139_58 = false
1186
+ local ____self__144_54 = self[144]
1187
+ if ____self__144_54 == nil then
1188
+ ____self__144_54 = false
1074
1189
  end
1075
- return ____self__139_58
1190
+ return ____self__144_54
1076
1191
  end,
1077
1192
  set = function(self, killsOnExpiration)
1078
- if not killsOnExpiration and self[139] then
1079
- self[139] = nil
1080
- elseif killsOnExpiration and not self[139] then
1081
- self[139] = 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
1082
1197
  end
1083
1198
  end
1084
1199
  },
@@ -1089,17 +1204,17 @@ __TS__SetDescriptor(
1089
1204
  "explodesOnExpiration",
1090
1205
  {
1091
1206
  get = function(self)
1092
- local ____self__140_59 = self[140]
1093
- if ____self__140_59 == nil then
1094
- ____self__140_59 = false
1207
+ local ____self__145_55 = self[145]
1208
+ if ____self__145_55 == nil then
1209
+ ____self__145_55 = false
1095
1210
  end
1096
- return ____self__140_59
1211
+ return ____self__145_55
1097
1212
  end,
1098
1213
  set = function(self, killsOnExpiration)
1099
- if not killsOnExpiration and self[140] then
1100
- self[140] = nil
1101
- elseif killsOnExpiration and not self[140] then
1102
- self[140] = 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
1103
1218
  end
1104
1219
  end
1105
1220
  },
@@ -1208,12 +1323,39 @@ __TS__SetDescriptor(
1208
1323
  },
1209
1324
  true
1210
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
+ )
1211
1339
  __TS__SetDescriptor(
1212
1340
  Buff.prototype,
1213
1341
  "duration",
1214
- {get = function(self)
1215
- return self[103]
1216
- 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
+ },
1217
1359
  true
1218
1360
  )
1219
1361
  __TS__SetDescriptor(
@@ -1221,13 +1363,13 @@ __TS__SetDescriptor(
1221
1363
  "remainingDuration",
1222
1364
  {
1223
1365
  get = function(self)
1224
- local ____opt_60 = self._timer
1225
- return ____opt_60 and ____opt_60.remaining or 0
1366
+ local ____opt_56 = self._timer
1367
+ return ____opt_56 and ____opt_56.remaining or 0
1226
1368
  end,
1227
1369
  set = function(self, remainingDuration)
1228
- local ____remainingDuration_64 = remainingDuration
1229
- local ____opt_62 = self._timer
1230
- local remainingDurationDelta = ____remainingDuration_64 - (____opt_62 and ____opt_62.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)
1231
1373
  if remainingDurationDelta ~= 0 then
1232
1374
  self[103] = self[103] + remainingDurationDelta
1233
1375
  if remainingDuration <= 0 then
@@ -1242,7 +1384,7 @@ __TS__SetDescriptor(
1242
1384
  remainingDuration,
1243
1385
  self._spellStealPriority,
1244
1386
  self._learnLevelMinimum,
1245
- self[141]
1387
+ self[146]
1246
1388
  ) then
1247
1389
  local timer = self._timer
1248
1390
  if timer == nil then
@@ -1257,37 +1399,134 @@ __TS__SetDescriptor(
1257
1399
  },
1258
1400
  true
1259
1401
  )
1260
- Buff.destroyEvent = buffDestroyEvent;
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;
1261
1495
  (function(self)
1262
- local function destroyBuffIfNeeded(buff)
1263
- if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
1264
- 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
1265
1504
  end
1266
1505
  end
1267
- ____exports.checkBuff = function(unit, buffTypeId)
1506
+ ____exports.checkBuff = function(unit, buffTypeId, isDispel, source)
1268
1507
  local buffByTypeId = buffByTypeIdByUnit[unit]
1269
1508
  if buffByTypeId ~= nil then
1270
1509
  local buff = buffByTypeId[buffTypeId]
1271
1510
  if buff ~= nil then
1272
- destroyBuffIfNeeded(buff)
1511
+ destroyBuffIfNeeded(buff, isDispel, source)
1273
1512
  end
1274
1513
  end
1275
1514
  end
1276
- ____exports.checkBuffs = function(unit)
1277
- ____exports.Buff:forAll(unit, destroyBuffIfNeeded)
1515
+ ____exports.checkBuffs = function(unit, isDispel, source)
1516
+ ____exports.Buff:forAll(unit, destroyBuffIfNeeded, isDispel, source)
1278
1517
  end
1279
1518
  Unit.abilityChannelingStartEvent:addListener(
1280
1519
  0,
1281
1520
  function(caster)
1282
- ____exports.checkBuffs(caster)
1283
- Timer:run(____exports.checkBuffs, caster)
1521
+ ____exports.checkBuffs(caster, true, caster)
1522
+ Timer:run(____exports.checkBuffs, caster, true, caster)
1284
1523
  end
1285
1524
  )
1286
1525
  Unit.abilityUnitTargetChannelingStartEvent:addListener(
1287
1526
  0,
1288
1527
  function(caster, ability, target)
1289
- ____exports.checkBuffs(target)
1290
- Timer:run(____exports.checkBuffs, target)
1528
+ ____exports.checkBuffs(target, true, caster)
1529
+ Timer:run(____exports.checkBuffs, target, true, caster)
1291
1530
  end
1292
1531
  )
1293
1532
  Unit.abilityPointTargetChannelingStartEvent:addListener(
@@ -1298,18 +1537,47 @@ Buff.destroyEvent = buffDestroyEvent;
1298
1537
  y,
1299
1538
  ability:getField(ABILITY_RLF_AREA_OF_EFFECT)
1300
1539
  )
1301
- forEach(units, ____exports.checkBuffs)
1302
- 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
1303
1565
  end
1304
1566
  )
1305
1567
  Unit.onDamage:addListener(
1306
1568
  0,
1307
1569
  function(source, target)
1308
1570
  if source ~= nil then
1309
- ____exports.checkBuffs(source)
1571
+ Timer:run(____exports.checkBuffs, source, false)
1310
1572
  end
1311
- ____exports.checkBuffs(target)
1573
+ Timer:run(____exports.checkBuffs, target, false)
1312
1574
  end
1313
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)
1314
1582
  end)(Buff)
1315
1583
  return ____exports