warscript 0.0.1-dev.e0e46c4 → 0.0.1-dev.e147c49

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