warscript 0.0.1-dev.d6e2c10 → 0.0.1-dev.d77b529

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 (303) hide show
  1. package/core/dummy.lua +4 -2
  2. package/core/types/effect.d.ts +11 -1
  3. package/core/types/effect.lua +43 -77
  4. package/core/types/frame.d.ts +1 -0
  5. package/core/types/frame.lua +112 -37
  6. package/core/types/handle.lua +9 -9
  7. package/core/types/item.d.ts +1 -0
  8. package/core/types/item.lua +1 -0
  9. package/core/types/player.d.ts +2 -1
  10. package/core/types/player.lua +18 -13
  11. package/core/types/playerColor.lua +4 -3
  12. package/core/types/sound.d.ts +1 -1
  13. package/core/types/sound.lua +14 -9
  14. package/core/types/unit.d.ts +5 -0
  15. package/core/types/unit.lua +5 -0
  16. package/core/util.d.ts +3 -1
  17. package/core/util.lua +109 -3
  18. package/decl/native.d.ts +705 -7
  19. package/engine/behavior.d.ts +4 -2
  20. package/engine/behavior.lua +69 -11
  21. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  22. package/engine/behaviour/ability/damage.d.ts +4 -0
  23. package/engine/behaviour/ability/damage.lua +19 -15
  24. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  25. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  26. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  27. package/engine/behaviour/ability.d.ts +11 -5
  28. package/engine/behaviour/ability.lua +54 -0
  29. package/engine/behaviour/unit/stun-immunity.d.ts +1 -1
  30. package/engine/behaviour/unit/stun-immunity.lua +5 -4
  31. package/engine/behaviour/unit.d.ts +1 -0
  32. package/engine/behaviour/unit.lua +14 -3
  33. package/engine/buff.d.ts +64 -25
  34. package/engine/buff.lua +345 -156
  35. package/engine/index.d.ts +2 -1
  36. package/engine/internal/ability.d.ts +4 -0
  37. package/engine/internal/ability.lua +56 -36
  38. package/engine/internal/item/fields.d.ts +12 -0
  39. package/engine/internal/item/fields.lua +33 -0
  40. package/engine/internal/item/owner-cache.d.ts +5 -0
  41. package/engine/internal/item/owner-cache.lua +4 -0
  42. package/engine/internal/item+owner.d.ts +2 -0
  43. package/engine/internal/item+owner.lua +27 -4
  44. package/engine/internal/item.d.ts +20 -5
  45. package/engine/internal/item.lua +146 -57
  46. package/engine/internal/mechanics/cast-ability.lua +6 -3
  47. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  48. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  49. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  50. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  51. package/engine/internal/object-data/health-bonus.lua +16 -0
  52. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  53. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  54. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  55. package/engine/internal/object-data/mana-bonus.lua +16 -0
  56. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  57. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  58. package/engine/internal/unit/ability.lua +15 -3
  59. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  60. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  61. package/engine/internal/unit/appearance.d.ts +15 -0
  62. package/engine/internal/unit/appearance.lua +85 -0
  63. package/engine/internal/unit/attributes.d.ts +17 -0
  64. package/engine/internal/unit/attributes.lua +46 -0
  65. package/engine/internal/unit/bonus.d.ts +14 -0
  66. package/engine/internal/unit/bonus.lua +102 -8
  67. package/engine/internal/unit/buff.d.ts +2 -2
  68. package/engine/internal/unit/buff.lua +34 -19
  69. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  70. package/engine/internal/unit/equipment-inventory.lua +233 -0
  71. package/engine/internal/unit/expiration-timer.lua +1 -1
  72. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  73. package/engine/internal/unit/extended-inventory.lua +99 -0
  74. package/engine/internal/unit/fly-height.lua +3 -3
  75. package/engine/internal/unit/ignore-events-items.lua +10 -1
  76. package/engine/internal/unit/interrupts.d.ts +12 -0
  77. package/engine/internal/unit/interrupts.lua +28 -0
  78. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  79. package/engine/internal/unit/inventory.lua +87 -0
  80. package/engine/internal/unit/item-container.d.ts +25 -0
  81. package/engine/internal/unit/item-container.lua +11 -0
  82. package/engine/internal/unit/item-order-events.d.ts +17 -0
  83. package/engine/internal/unit/item-order-events.lua +67 -0
  84. package/engine/internal/unit/item-slot.d.ts +27 -0
  85. package/engine/internal/unit/item-slot.lua +92 -0
  86. package/engine/internal/unit/order.d.ts +3 -3
  87. package/engine/internal/unit/order.lua +10 -10
  88. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  89. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  90. package/engine/internal/unit/range-event.d.ts +12 -0
  91. package/engine/internal/unit/range-event.lua +90 -0
  92. package/engine/internal/unit/scale.lua +3 -3
  93. package/engine/internal/unit+ability.d.ts +2 -1
  94. package/engine/internal/unit+ability.lua +63 -2
  95. package/engine/internal/unit+bonus.lua +3 -3
  96. package/engine/internal/unit+damage.d.ts +9 -0
  97. package/engine/internal/unit+damage.lua +33 -0
  98. package/engine/internal/unit+rally.lua +9 -31
  99. package/engine/internal/unit-missile-data.lua +58 -32
  100. package/engine/internal/unit-missile-launch.lua +25 -18
  101. package/engine/internal/unit.d.ts +3 -18
  102. package/engine/internal/unit.lua +97 -195
  103. package/engine/local-client.d.ts +27 -1
  104. package/engine/local-client.lua +298 -58
  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 +12 -0
  108. package/engine/object-data/auxiliary/equipment-type.lua +26 -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-class.d.ts +11 -0
  112. package/engine/object-data/auxiliary/item-class.lua +2 -0
  113. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  114. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  115. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  116. package/engine/object-data/auxiliary/order-type.lua +2 -0
  117. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  118. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  119. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  120. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  121. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  122. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  123. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  124. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  125. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  126. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  127. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  128. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  129. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  130. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  131. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  132. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  133. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  134. package/engine/object-data/entry/ability-type/blank-configurable.lua +30 -0
  135. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  136. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  137. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  138. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  139. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  140. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  141. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  142. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  143. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  144. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  145. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  146. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  147. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  148. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  149. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  150. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  151. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  152. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  153. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  154. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  155. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  156. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  157. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  158. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  159. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  160. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  161. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  162. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  163. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  164. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  165. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  166. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  167. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  168. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  169. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  170. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  171. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  172. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  173. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  174. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  175. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  176. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  177. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  178. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  179. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  180. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  181. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  182. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  183. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  184. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  185. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  186. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  187. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  188. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  189. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  190. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  191. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  192. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  193. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  194. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  195. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  196. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  197. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  198. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  199. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  200. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  201. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  202. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  203. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  204. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  205. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  206. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  207. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  208. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  209. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  210. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  211. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  212. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  213. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  214. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  215. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  216. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  217. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  218. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  219. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  220. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  221. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  222. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  223. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  224. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  225. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  226. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  227. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  228. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  229. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  230. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  231. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  232. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  233. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  234. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  235. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  236. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  237. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  238. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  239. package/engine/object-data/entry/ability-type.d.ts +18 -3
  240. package/engine/object-data/entry/ability-type.lua +222 -5
  241. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  242. package/engine/object-data/entry/buff-type.d.ts +6 -2
  243. package/engine/object-data/entry/buff-type.lua +26 -0
  244. package/engine/object-data/entry/destructible-type.d.ts +16 -2
  245. package/engine/object-data/entry/destructible-type.lua +91 -0
  246. package/engine/object-data/entry/item-type.d.ts +18 -3
  247. package/engine/object-data/entry/item-type.lua +84 -0
  248. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  249. package/engine/object-data/entry/lightning-type.lua +1 -1
  250. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  251. package/engine/object-data/entry/unit-type.d.ts +47 -2
  252. package/engine/object-data/entry/unit-type.lua +383 -49
  253. package/engine/object-data/entry/upgrade.d.ts +2 -2
  254. package/engine/object-data/entry.d.ts +6 -1
  255. package/engine/object-data/entry.lua +8 -0
  256. package/engine/object-field/ability.lua +2 -2
  257. package/engine/object-field/item.d.ts +22 -0
  258. package/engine/object-field/item.lua +118 -0
  259. package/engine/object-field/unit.d.ts +7 -4
  260. package/engine/object-field/unit.lua +4 -0
  261. package/engine/object-field.d.ts +3 -1
  262. package/engine/object-field.lua +177 -119
  263. package/engine/random.d.ts +1 -0
  264. package/engine/random.lua +8 -0
  265. package/engine/standard/entries/ability-type.d.ts +3102 -7
  266. package/engine/standard/entries/ability-type.lua +0 -6
  267. package/engine/standard/entries/item-type.d.ts +1299 -0
  268. package/engine/standard/entries/item-type.lua +2 -0
  269. package/engine/standard/entries/lightning-type.d.ts +42 -15
  270. package/engine/standard/entries/lightning-type.lua +0 -14
  271. package/engine/standard/entries/unit-type.d.ts +5 -0
  272. package/engine/standard/entries/unit-type.lua +5 -0
  273. package/engine/standard/fields/item.d.ts +4 -0
  274. package/engine/standard/fields/item.lua +6 -0
  275. package/engine/standard/fields/unit.d.ts +11 -5
  276. package/engine/standard/fields/unit.lua +13 -4
  277. package/engine/unit.d.ts +8 -1
  278. package/engine/unit.lua +8 -1
  279. package/event.d.ts +1 -1
  280. package/lualib_bundle.lua +1 -1
  281. package/math.d.ts +2 -0
  282. package/math.lua +14 -0
  283. package/network.lua +25 -1
  284. package/objutil/buff.lua +10 -8
  285. package/objutil/object.lua +1 -1
  286. package/operation.d.ts +8 -1
  287. package/operation.lua +38 -18
  288. package/package.json +3 -23
  289. package/patch-lua.lua +15 -0
  290. package/utility/linked-map.d.ts +35 -0
  291. package/utility/linked-map.lua +107 -0
  292. package/utility/linked-set.d.ts +3 -1
  293. package/utility/linked-set.lua +27 -0
  294. package/utility/random.d.ts +102 -0
  295. package/utility/random.lua +273 -0
  296. package/utility/records.lua +20 -1
  297. package/utility/unordered-map.d.ts +27 -0
  298. package/utility/unordered-map.lua +99 -0
  299. package/engine/internal/unit/item.lua +0 -78
  300. /package/engine/internal/{object-data/armor-increase.d.ts → misc/unit-ability-level-natives.d.ts} +0 -0
  301. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  302. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  303. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/engine/buff.lua CHANGED
@@ -42,6 +42,7 @@ local BuffType = ____buff_2Dtype.BuffType
42
42
  local ____unit = require("engine.behaviour.unit")
43
43
  local UnitBehavior = ____unit.UnitBehavior
44
44
  local ____arrays = require("utility.arrays")
45
+ local emptyArray = ____arrays.emptyArray
45
46
  local forEach = ____arrays.forEach
46
47
  local ____event = require("event")
47
48
  local Event = ____event.Event
@@ -55,6 +56,8 @@ local ____ability = require("engine.standard.fields.ability")
55
56
  local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
56
57
  local ____ability = require("engine.behaviour.ability")
57
58
  local AbilityBehavior = ____ability.AbilityBehavior
59
+ local ____records = require("utility.records")
60
+ local sortedKeysUnnested = ____records.sortedKeysUnnested
58
61
  local getUnitAbility = BlzGetUnitAbility
59
62
  local stringValueByBuffTypeIdByFieldId = postcompile(function()
60
63
  local stringValueByBuffTypeIdByFieldId = {}
@@ -100,9 +103,11 @@ local buffParametersKeys = {
100
103
  damageIncrease = true,
101
104
  damageIncreaseFactor = true,
102
105
  armorIncrease = true,
103
- armorIncreaseFactor = true,
106
+ maxHealthIncrease = true,
107
+ maxManaIncrease = true,
104
108
  attackSpeedIncreaseFactor = true,
105
109
  movementSpeedIncreaseFactor = true,
110
+ manaRegenerationRateIncreaseFactor = true,
106
111
  evasionProbability = true,
107
112
  missProbability = true,
108
113
  damageFactor = true,
@@ -122,6 +127,9 @@ local buffParametersKeys = {
122
127
  maximumAutoAttackCount = true,
123
128
  maximumDamageDealtEventCount = true,
124
129
  maximumDamageReceivedEventCount = true,
130
+ absorbedDamageFactor = true,
131
+ maximumDamageAbsorbed = true,
132
+ destroysOnMaximumDamageAbsorbed = true,
125
133
  uniqueGroup = true,
126
134
  damageOnExpiration = true,
127
135
  healingOnExpiration = true,
@@ -178,6 +186,7 @@ local function resolveAndSetNumberValue(buff, property, ability, level, value, d
178
186
  end
179
187
  end
180
188
  local buffBooleanParameters = {
189
+ "destroysOnMaximumDamageAbsorbed",
181
190
  "turnsIntoGhost",
182
191
  "stuns",
183
192
  "ignoresStunImmunity",
@@ -190,8 +199,11 @@ local buffNumberParameters = {
190
199
  "durationIncreaseOnAutoAttack",
191
200
  "attackSpeedIncreaseFactor",
192
201
  "movementSpeedIncreaseFactor",
202
+ "manaRegenerationRateIncreaseFactor",
193
203
  "evasionProbability",
194
204
  "armorIncrease",
205
+ "maxHealthIncrease",
206
+ "maxManaIncrease",
195
207
  "damageFactor",
196
208
  "receivedDamageFactor",
197
209
  "maximumAutoAttackCount",
@@ -205,6 +217,8 @@ local buffNumberParameters = {
205
217
  "healingOverDuration",
206
218
  "damageOnExpiration",
207
219
  "healingOnExpiration",
220
+ "absorbedDamageFactor",
221
+ "maximumDamageAbsorbed",
208
222
  "abilityCooldownFactor"
209
223
  }
210
224
  local unsuccessfulApplicationMarker = {}
@@ -240,6 +254,10 @@ local function destroyBuff(buff)
240
254
  buff:destroy()
241
255
  end
242
256
  local function expireBuff(buff)
257
+ if buff.isDestroyed or buff[100] ~= 1 then
258
+ return
259
+ end
260
+ buff[100] = 2
243
261
  local remainingDamageOverDuration = buff[113] or 0
244
262
  local remainingHealingOverDuration = buff[113] or 0
245
263
  if remainingDamageOverDuration ~= 0 or remainingHealingOverDuration ~= 0 then
@@ -383,14 +401,15 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
383
401
  local missProbability = parameters and parameters.missProbability or defaultParameters.missProbability
384
402
  if missProbability ~= nil then
385
403
  missProbability = resolveNumberValue(ability, level, missProbability)
386
- self[142] = missProbability
404
+ self[146] = missProbability
387
405
  end
388
406
  local buffByTypeId = buffByTypeIdByUnit[_unit]
389
407
  if buffByTypeId == nil then
390
408
  buffByTypeId = {}
391
409
  buffByTypeIdByUnit[_unit] = buffByTypeId
392
410
  end
393
- local ____opt_15 = buffByTypeId[typeId]
411
+ self.previousBuff = buffByTypeId[typeId]
412
+ local ____opt_15 = self.previousBuff
394
413
  if ____opt_15 ~= nil then
395
414
  ____opt_15:destroy()
396
415
  end
@@ -466,24 +485,22 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
466
485
  abilityTypeIds = {}
467
486
  self._abilityTypeIds = abilityTypeIds
468
487
  end
469
- for abilityTypeId, abilityParameters in pairs(parametersAbilityTypeIds) do
488
+ for ____, abilityTypeId in ipairs(sortedKeysUnnested(parametersAbilityTypeIds)) do
489
+ local abilityParameters = checkNotNull(parametersAbilityTypeIds[abilityTypeId])
470
490
  local addedAbility = _unit:addAbility(abilityTypeId)
471
491
  if addedAbility ~= nil then
472
492
  _unit:makeAbilityPermanent(abilityTypeId, true)
473
493
  _unit:setAbilityLevel(abilityTypeId, 1 + (abilityParameters.level or ability and ability.level or 0))
474
- for abilityParameterKey, abilityParameterValue in pairs(abilityParameters) do
475
- if abilityParameterKey == "isButtonVisible" then
476
- if not resolveBooleanValue(ability, level, abilityParameterValue) then
477
- _unit:hideAbility(abilityTypeId, true)
478
- end
479
- elseif abilityParameterKey ~= "level" then
480
- abilityParameterKey:setValue(
481
- addedAbility,
482
- resolveNumberValue(ability, level, abilityParameterValue)
483
- )
484
- end
494
+ if abilityParameters.isButtonVisible == false then
495
+ _unit:hideAbility(abilityTypeId, true)
496
+ end
497
+ for ____, field in ipairs(abilityParameters.fields or emptyArray()) do
498
+ field[1]:setValue(
499
+ addedAbility,
500
+ resolveNumberValue(ability, level, field[2])
501
+ )
485
502
  end
486
- abilityTypeIds[abilityTypeId] = true
503
+ abilityTypeIds[#abilityTypeIds + 1] = abilityTypeId
487
504
  end
488
505
  end
489
506
  local behaviorConstructors = parameters and parameters.behaviorConstructors or defaultParameters.behaviorConstructors
@@ -495,18 +512,20 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
495
512
  self._behaviors = behaviors
496
513
  end
497
514
  end
498
- local additionalParameters = {}
499
- for key, value in pairs(parameters) do
500
- if not buffParametersKeys[key] then
501
- if ability then
502
- additionalParameters[key] = resolveCurrentAbilityDependentValue(ability, value)
503
- else
504
- 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
505
524
  end
506
525
  end
507
- end
508
- if (next(additionalParameters)) ~= nil then
509
- self.parameters = additionalParameters
526
+ if (next(additionalParameters)) ~= nil then
527
+ self.parameters = additionalParameters
528
+ end
510
529
  end
511
530
  end
512
531
  if duration ~= nil and duration > 0 then
@@ -520,7 +539,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
520
539
  end
521
540
  function Buff.prototype.onAbilityGained(self, ability)
522
541
  if __TS__InstanceOf(ability, UnitAbility) then
523
- local abilityCooldownModifier = self[144]
542
+ local abilityCooldownModifier = self[148]
524
543
  if abilityCooldownModifier then
525
544
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, abilityCooldownModifier)
526
545
  end
@@ -528,24 +547,38 @@ function Buff.prototype.onAbilityGained(self, ability)
528
547
  end
529
548
  function Buff.prototype.onAbilityLost(self, ability)
530
549
  if __TS__InstanceOf(ability, UnitAbility) then
531
- local abilityCooldownModifier = self[144]
550
+ local abilityCooldownModifier = self[148]
532
551
  if abilityCooldownModifier then
533
552
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, abilityCooldownModifier)
534
553
  end
535
554
  end
536
555
  end
537
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)
538
575
  if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
539
- Effect:flash(self[105], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
576
+ Effect:flash(modelPath, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
540
577
  else
541
578
  local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
542
579
  local ____Effect_40 = Effect
543
580
  local ____Effect_flash_41 = Effect.flash
544
- local ____array_39 = __TS__SparseArrayNew(
545
- self[105],
546
- isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
547
- stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
548
- )
581
+ local ____array_39 = __TS__SparseArrayNew(modelPath, isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit, attachmentPoint)
549
582
  local ____isWidgetProvided_38
550
583
  if isWidgetProvided then
551
584
  ____isWidgetProvided_38 = yOrParametersOrDuration
@@ -559,26 +592,22 @@ function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrPa
559
592
  )
560
593
  end
561
594
  end
562
- function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
563
- local isWidgetProvided = type(widgetOrDuration) == "table"
564
- local ____Effect_44 = Effect
565
- local ____Effect_flash_45 = Effect.flash
566
- local ____array_43 = __TS__SparseArrayNew(
567
- self[106],
568
- isWidgetProvided and widgetOrDuration or self._unit,
569
- stringValueByBuffTypeIdByFieldId[fourCC("fspt")][self.typeId] or "origin"
570
- )
571
- local ____isWidgetProvided_42
572
- if isWidgetProvided then
573
- ____isWidgetProvided_42 = duration
574
- else
575
- ____isWidgetProvided_42 = 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
576
610
  end
577
- __TS__SparseArrayPush(____array_43, ____isWidgetProvided_42)
578
- ____Effect_flash_45(
579
- ____Effect_44,
580
- __TS__SparseArraySpread(____array_43)
581
- )
582
611
  end
583
612
  function Buff.prototype.onCreate(self)
584
613
  end
@@ -608,29 +637,29 @@ function Buff.prototype.onDestroy(self)
608
637
  behavior:destroy()
609
638
  end
610
639
  end
611
- local previousAbilityCooldownModifier = self[144]
640
+ local previousAbilityCooldownModifier = self[148]
612
641
  if previousAbilityCooldownModifier then
613
642
  for ____, ability in ipairs(self._unit.abilities) do
614
643
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
615
644
  end
616
645
  end
617
- if self[139] then
646
+ if self[143] then
618
647
  unit:decrementInvulnerabilityCounter()
619
648
  end
620
- if self[138] then
649
+ if self[142] then
621
650
  unit:decrementDisableAutoAttackCounter()
622
651
  end
623
- if self[136] then
624
- if self[137] then
652
+ if self[140] then
653
+ if self[141] then
625
654
  unit:decrementForceStunCounter()
626
655
  end
627
656
  unit:decrementStunCounter()
628
657
  end
629
- if self[135] then
658
+ if self[139] then
630
659
  unit:decrementGhostCounter()
631
660
  end
632
661
  if self._abilityTypeIds ~= nil then
633
- for abilityTypeId in pairs(self._abilityTypeIds) do
662
+ for ____, abilityTypeId in ipairs(self._abilityTypeIds) do
634
663
  unit:removeAbility(abilityTypeId)
635
664
  end
636
665
  end
@@ -663,13 +692,15 @@ function Buff.apply(self, ...)
663
692
  end
664
693
  end
665
694
  function Buff.getByTypeId(self, unit, typeId)
666
- local ____opt_46 = buffByTypeIdByUnit[unit]
667
- local buff = ____opt_46 and ____opt_46[typeId]
695
+ local ____opt_42 = buffByTypeIdByUnit[unit]
696
+ local buff = ____opt_42 and ____opt_42[typeId]
668
697
  if __TS__InstanceOf(buff, self) then
669
698
  return buff
670
699
  end
671
700
  return nil
672
701
  end
702
+ function Buff.prototype.onDispel(self, source)
703
+ end
673
704
  function Buff.prototype.onExpiration(self)
674
705
  local unit = self.unit
675
706
  if self[120] ~= nil then
@@ -678,9 +709,9 @@ function Buff.prototype.onExpiration(self)
678
709
  if self[121] ~= nil then
679
710
  (self[102] or unit):healTarget(unit, self[120] or 0)
680
711
  end
681
- if self[141] then
712
+ if self[145] then
682
713
  unit:explode()
683
- elseif self[140] then
714
+ elseif self[144] then
684
715
  unit:kill()
685
716
  end
686
717
  end
@@ -735,6 +766,18 @@ function Buff.prototype.onDamageDealt(self, target, event)
735
766
  end
736
767
  function Buff.prototype.onDamageReceived(self, source, event)
737
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
738
781
  local damageReceivedEventCount = (self[133] or 0) + 1
739
782
  self[133] = damageReceivedEventCount
740
783
  if damageReceivedEventCount == self[134] then
@@ -822,8 +865,8 @@ __TS__SetDescriptor(
822
865
  return
823
866
  end
824
867
  self[112] = damageInterval
825
- local ____opt_48 = self._timer
826
- local elapsed = ____opt_48 and ____opt_48.elapsed or 0
868
+ local ____opt_45 = self._timer
869
+ local elapsed = ____opt_45 and ____opt_45.elapsed or 0
827
870
  local timer = self[114]
828
871
  if timer == nil then
829
872
  timer = Timer:create()
@@ -902,8 +945,8 @@ __TS__SetDescriptor(
902
945
  return
903
946
  end
904
947
  self[117] = healingInterval
905
- local ____opt_50 = self._timer
906
- local elapsed = ____opt_50 and ____opt_50.elapsed or 0
948
+ local ____opt_47 = self._timer
949
+ local elapsed = ____opt_47 and ____opt_47.elapsed or 0
907
950
  local timer = self[119]
908
951
  if timer == nil then
909
952
  timer = Timer:create()
@@ -984,24 +1027,50 @@ __TS__SetDescriptor(
984
1027
  },
985
1028
  true
986
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
+ )
987
1056
  __TS__SetDescriptor(
988
1057
  Buff.prototype,
989
1058
  "turnsIntoGhost",
990
1059
  {
991
1060
  get = function(self)
992
- local ____self__135_52 = self[135]
993
- if ____self__135_52 == nil then
994
- ____self__135_52 = false
1061
+ local ____self__139_49 = self[139]
1062
+ if ____self__139_49 == nil then
1063
+ ____self__139_49 = false
995
1064
  end
996
- return ____self__135_52
1065
+ return ____self__139_49
997
1066
  end,
998
1067
  set = function(self, turnsIntoGhost)
999
- if not turnsIntoGhost and self[135] then
1068
+ if not turnsIntoGhost and self[139] then
1000
1069
  self.object:decrementGhostCounter()
1001
- self[135] = nil
1002
- elseif turnsIntoGhost and not self[135] then
1070
+ self[139] = nil
1071
+ elseif turnsIntoGhost and not self[139] then
1003
1072
  self.object:incrementGhostCounter()
1004
- self[135] = true
1073
+ self[139] = true
1005
1074
  end
1006
1075
  end
1007
1076
  },
@@ -1012,25 +1081,25 @@ __TS__SetDescriptor(
1012
1081
  "stuns",
1013
1082
  {
1014
1083
  get = function(self)
1015
- local ____self__136_53 = self[136]
1016
- if ____self__136_53 == nil then
1017
- ____self__136_53 = false
1084
+ local ____self__140_50 = self[140]
1085
+ if ____self__140_50 == nil then
1086
+ ____self__140_50 = false
1018
1087
  end
1019
- return ____self__136_53
1088
+ return ____self__140_50
1020
1089
  end,
1021
1090
  set = function(self, stuns)
1022
- if not stuns and self[136] then
1023
- if self[137] then
1091
+ if not stuns and self[140] then
1092
+ if self[141] then
1024
1093
  self.object:decrementForceStunCounter()
1025
1094
  end
1026
1095
  self.object:decrementStunCounter()
1027
- self[136] = nil
1028
- elseif stuns and not self[136] then
1029
- if self[137] then
1096
+ self[140] = nil
1097
+ elseif stuns and not self[140] then
1098
+ if self[141] then
1030
1099
  self.object:incrementForceStunCounter()
1031
1100
  end
1032
1101
  self.object:incrementStunCounter()
1033
- self[136] = true
1102
+ self[140] = true
1034
1103
  end
1035
1104
  end
1036
1105
  },
@@ -1041,23 +1110,23 @@ __TS__SetDescriptor(
1041
1110
  "ignoresStunImmunity",
1042
1111
  {
1043
1112
  get = function(self)
1044
- local ____self__137_54 = self[137]
1045
- if ____self__137_54 == nil then
1046
- ____self__137_54 = false
1113
+ local ____self__141_51 = self[141]
1114
+ if ____self__141_51 == nil then
1115
+ ____self__141_51 = false
1047
1116
  end
1048
- return ____self__137_54
1117
+ return ____self__141_51
1049
1118
  end,
1050
1119
  set = function(self, ignoresStunImmunity)
1051
- if not ignoresStunImmunity and self[137] then
1052
- if self[136] then
1120
+ if not ignoresStunImmunity and self[141] then
1121
+ if self[140] then
1053
1122
  self.object:decrementForceStunCounter()
1054
1123
  end
1055
- self[137] = nil
1056
- elseif ignoresStunImmunity and not self[137] then
1057
- if self[136] then
1124
+ self[141] = nil
1125
+ elseif ignoresStunImmunity and not self[141] then
1126
+ if self[140] then
1058
1127
  self.object:incrementForceStunCounter()
1059
1128
  end
1060
- self[137] = true
1129
+ self[141] = true
1061
1130
  end
1062
1131
  end
1063
1132
  },
@@ -1068,19 +1137,19 @@ __TS__SetDescriptor(
1068
1137
  "disablesAutoAttack",
1069
1138
  {
1070
1139
  get = function(self)
1071
- local ____self__138_55 = self[138]
1072
- if ____self__138_55 == nil then
1073
- ____self__138_55 = false
1140
+ local ____self__142_52 = self[142]
1141
+ if ____self__142_52 == nil then
1142
+ ____self__142_52 = false
1074
1143
  end
1075
- return ____self__138_55
1144
+ return ____self__142_52
1076
1145
  end,
1077
1146
  set = function(self, disablesAutoAttack)
1078
- if not disablesAutoAttack and self[138] then
1147
+ if not disablesAutoAttack and self[142] then
1079
1148
  self.object:decrementDisableAutoAttackCounter()
1080
- self[138] = nil
1081
- elseif disablesAutoAttack and not self[138] then
1149
+ self[142] = nil
1150
+ elseif disablesAutoAttack and not self[142] then
1082
1151
  self.object:incrementDisableAutoAttackCounter()
1083
- self[138] = true
1152
+ self[142] = true
1084
1153
  end
1085
1154
  end
1086
1155
  },
@@ -1091,19 +1160,19 @@ __TS__SetDescriptor(
1091
1160
  "providesInvulnerability",
1092
1161
  {
1093
1162
  get = function(self)
1094
- local ____self__139_56 = self[139]
1095
- if ____self__139_56 == nil then
1096
- ____self__139_56 = false
1163
+ local ____self__143_53 = self[143]
1164
+ if ____self__143_53 == nil then
1165
+ ____self__143_53 = false
1097
1166
  end
1098
- return ____self__139_56
1167
+ return ____self__143_53
1099
1168
  end,
1100
1169
  set = function(self, providesInvulnerability)
1101
- if not providesInvulnerability and self[139] then
1170
+ if not providesInvulnerability and self[143] then
1102
1171
  self.object:decrementInvulnerabilityCounter()
1103
- self[139] = nil
1104
- elseif providesInvulnerability and not self[139] then
1172
+ self[143] = nil
1173
+ elseif providesInvulnerability and not self[143] then
1105
1174
  self.object:incrementInvulnerabilityCounter()
1106
- self[139] = true
1175
+ self[143] = true
1107
1176
  end
1108
1177
  end
1109
1178
  },
@@ -1114,17 +1183,17 @@ __TS__SetDescriptor(
1114
1183
  "killsOnExpiration",
1115
1184
  {
1116
1185
  get = function(self)
1117
- local ____self__140_57 = self[140]
1118
- if ____self__140_57 == nil then
1119
- ____self__140_57 = false
1186
+ local ____self__144_54 = self[144]
1187
+ if ____self__144_54 == nil then
1188
+ ____self__144_54 = false
1120
1189
  end
1121
- return ____self__140_57
1190
+ return ____self__144_54
1122
1191
  end,
1123
1192
  set = function(self, killsOnExpiration)
1124
- if not killsOnExpiration and self[140] then
1125
- self[140] = nil
1126
- elseif killsOnExpiration and not self[140] then
1127
- 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
1128
1197
  end
1129
1198
  end
1130
1199
  },
@@ -1135,17 +1204,17 @@ __TS__SetDescriptor(
1135
1204
  "explodesOnExpiration",
1136
1205
  {
1137
1206
  get = function(self)
1138
- local ____self__141_58 = self[141]
1139
- if ____self__141_58 == nil then
1140
- ____self__141_58 = false
1207
+ local ____self__145_55 = self[145]
1208
+ if ____self__145_55 == nil then
1209
+ ____self__145_55 = false
1141
1210
  end
1142
- return ____self__141_58
1211
+ return ____self__145_55
1143
1212
  end,
1144
1213
  set = function(self, killsOnExpiration)
1145
- if not killsOnExpiration and self[141] then
1146
- self[141] = nil
1147
- elseif killsOnExpiration and not self[141] then
1148
- 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
1149
1218
  end
1150
1219
  end
1151
1220
  },
@@ -1254,12 +1323,39 @@ __TS__SetDescriptor(
1254
1323
  },
1255
1324
  true
1256
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
+ )
1257
1339
  __TS__SetDescriptor(
1258
1340
  Buff.prototype,
1259
1341
  "duration",
1260
- {get = function(self)
1261
- return self[103]
1262
- 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
+ },
1263
1359
  true
1264
1360
  )
1265
1361
  __TS__SetDescriptor(
@@ -1267,13 +1363,13 @@ __TS__SetDescriptor(
1267
1363
  "remainingDuration",
1268
1364
  {
1269
1365
  get = function(self)
1270
- local ____opt_59 = self._timer
1271
- return ____opt_59 and ____opt_59.remaining or 0
1366
+ local ____opt_56 = self._timer
1367
+ return ____opt_56 and ____opt_56.remaining or 0
1272
1368
  end,
1273
1369
  set = function(self, remainingDuration)
1274
- local ____remainingDuration_63 = remainingDuration
1275
- local ____opt_61 = self._timer
1276
- local remainingDurationDelta = ____remainingDuration_63 - (____opt_61 and ____opt_61.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)
1277
1373
  if remainingDurationDelta ~= 0 then
1278
1374
  self[103] = self[103] + remainingDurationDelta
1279
1375
  if remainingDuration <= 0 then
@@ -1288,7 +1384,7 @@ __TS__SetDescriptor(
1288
1384
  remainingDuration,
1289
1385
  self._spellStealPriority,
1290
1386
  self._learnLevelMinimum,
1291
- self[142]
1387
+ self[146]
1292
1388
  ) then
1293
1389
  local timer = self._timer
1294
1390
  if timer == nil then
@@ -1303,15 +1399,80 @@ __TS__SetDescriptor(
1303
1399
  },
1304
1400
  true
1305
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
+ )
1306
1467
  __TS__SetDescriptor(
1307
1468
  Buff.prototype,
1308
1469
  "abilityCooldownFactor",
1309
1470
  {
1310
1471
  get = function(self)
1311
- return self[143] or 1
1472
+ return self[147] or 1
1312
1473
  end,
1313
1474
  set = function(self, abilityCooldownFactor)
1314
- local previousAbilityCooldownModifier = self[144]
1475
+ local previousAbilityCooldownModifier = self[148]
1315
1476
  if previousAbilityCooldownModifier then
1316
1477
  for ____, ability in ipairs(self._unit.abilities) do
1317
1478
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:removeModifier(ability, previousAbilityCooldownModifier)
@@ -1323,8 +1484,8 @@ __TS__SetDescriptor(
1323
1484
  for ____, ability in ipairs(self._unit.abilities) do
1324
1485
  COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD:applyModifier(ability, modifier)
1325
1486
  end
1326
- self[144] = modifier
1327
- self[143] = abilityCooldownFactor
1487
+ self[148] = modifier
1488
+ self[147] = abilityCooldownFactor
1328
1489
  end
1329
1490
  },
1330
1491
  true
@@ -1332,35 +1493,40 @@ __TS__SetDescriptor(
1332
1493
  Buff.createdEvent = buffCreatedEvent
1333
1494
  Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1334
1495
  (function(self)
1335
- local function destroyBuffIfNeeded(buff)
1336
- if getUnitAbility(buff[101].handle, buff.typeId) ~= buff.handle and buff[100] == 1 then
1337
- 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
1338
1504
  end
1339
1505
  end
1340
- ____exports.checkBuff = function(unit, buffTypeId)
1506
+ ____exports.checkBuff = function(unit, buffTypeId, isDispel, source)
1341
1507
  local buffByTypeId = buffByTypeIdByUnit[unit]
1342
1508
  if buffByTypeId ~= nil then
1343
1509
  local buff = buffByTypeId[buffTypeId]
1344
1510
  if buff ~= nil then
1345
- destroyBuffIfNeeded(buff)
1511
+ destroyBuffIfNeeded(buff, isDispel, source)
1346
1512
  end
1347
1513
  end
1348
1514
  end
1349
- ____exports.checkBuffs = function(unit)
1350
- ____exports.Buff:forAll(unit, destroyBuffIfNeeded)
1515
+ ____exports.checkBuffs = function(unit, isDispel, source)
1516
+ ____exports.Buff:forAll(unit, destroyBuffIfNeeded, isDispel, source)
1351
1517
  end
1352
1518
  Unit.abilityChannelingStartEvent:addListener(
1353
1519
  0,
1354
1520
  function(caster)
1355
- ____exports.checkBuffs(caster)
1356
- Timer:run(____exports.checkBuffs, caster)
1521
+ ____exports.checkBuffs(caster, true, caster)
1522
+ Timer:run(____exports.checkBuffs, caster, true, caster)
1357
1523
  end
1358
1524
  )
1359
1525
  Unit.abilityUnitTargetChannelingStartEvent:addListener(
1360
1526
  0,
1361
1527
  function(caster, ability, target)
1362
- ____exports.checkBuffs(target)
1363
- Timer:run(____exports.checkBuffs, target)
1528
+ ____exports.checkBuffs(target, true, caster)
1529
+ Timer:run(____exports.checkBuffs, target, true, caster)
1364
1530
  end
1365
1531
  )
1366
1532
  Unit.abilityPointTargetChannelingStartEvent:addListener(
@@ -1371,17 +1537,40 @@ Buff.beingDestroyedEvent = buffBeingDestroyedEvent;
1371
1537
  y,
1372
1538
  ability:getField(ABILITY_RLF_AREA_OF_EFFECT)
1373
1539
  )
1374
- forEach(units, ____exports.checkBuffs)
1375
- 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
1376
1565
  end
1377
1566
  )
1378
1567
  Unit.onDamage:addListener(
1379
1568
  0,
1380
1569
  function(source, target)
1381
1570
  if source ~= nil then
1382
- ____exports.checkBuffs(source)
1571
+ Timer:run(____exports.checkBuffs, source, false)
1383
1572
  end
1384
- ____exports.checkBuffs(target)
1573
+ Timer:run(____exports.checkBuffs, target, false)
1385
1574
  end
1386
1575
  )
1387
1576
  buffCreatedEvent:addListener(function(buff)