warscript 0.0.1-dev.2ce63f3 → 0.0.1-dev.2d7cb44

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