warscript 0.0.1-dev.48e5280 → 0.0.1-dev.4b6e45a

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 (304) 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 +21 -2
  5. package/core/types/frame.lua +153 -78
  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/missile.lua +8 -7
  10. package/core/types/player.d.ts +2 -1
  11. package/core/types/player.lua +18 -13
  12. package/core/types/playerCamera.lua +1 -1
  13. package/core/types/playerColor.lua +4 -3
  14. package/core/types/sound.d.ts +1 -1
  15. package/core/types/sound.lua +14 -9
  16. package/core/types/tileCell.d.ts +7 -2
  17. package/core/types/tileCell.lua +11 -0
  18. package/core/types/unit.d.ts +5 -0
  19. package/core/types/unit.lua +5 -0
  20. package/core/util.d.ts +3 -1
  21. package/core/util.lua +109 -3
  22. package/decl/native.d.ts +706 -7
  23. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  24. package/engine/ability-type-extended-tooltip.lua +44 -0
  25. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  26. package/engine/behaviour/ability/damage.d.ts +4 -0
  27. package/engine/behaviour/ability/damage.lua +19 -15
  28. package/engine/behaviour/ability/emulate-impact.d.ts +14 -0
  29. package/engine/behaviour/ability/emulate-impact.lua +79 -5
  30. package/engine/behaviour/ability/instant-impact.d.ts +12 -1
  31. package/engine/behaviour/ability/instant-impact.lua +17 -2
  32. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  33. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  34. package/engine/behaviour/ability.d.ts +8 -0
  35. package/engine/behaviour/ability.lua +89 -8
  36. package/engine/behaviour/unit.d.ts +1 -0
  37. package/engine/behaviour/unit.lua +1 -0
  38. package/engine/buff.d.ts +79 -55
  39. package/engine/buff.lua +376 -246
  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/misc/unit-ability-level-natives.d.ts +2 -0
  52. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  53. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  54. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  55. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  56. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  57. package/engine/internal/unit/ability.lua +16 -0
  58. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  59. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  60. package/engine/internal/unit/appearance.d.ts +15 -0
  61. package/engine/internal/unit/appearance.lua +85 -0
  62. package/engine/internal/unit/bonus.d.ts +11 -0
  63. package/engine/internal/unit/bonus.lua +80 -5
  64. package/engine/internal/unit/buff.d.ts +2 -2
  65. package/engine/internal/unit/buff.lua +34 -19
  66. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  67. package/engine/internal/unit/equipment-inventory.lua +233 -0
  68. package/engine/internal/unit/expiration-timer.lua +1 -1
  69. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  70. package/engine/internal/unit/extended-inventory.lua +99 -0
  71. package/engine/internal/unit/ignore-events-items.lua +10 -1
  72. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  73. package/engine/internal/unit/inventory.lua +87 -0
  74. package/engine/internal/unit/item-container.d.ts +25 -0
  75. package/engine/internal/unit/item-container.lua +11 -0
  76. package/engine/internal/unit/item-order-events.d.ts +17 -0
  77. package/engine/internal/unit/item-order-events.lua +67 -0
  78. package/engine/internal/unit/item-slot.d.ts +27 -0
  79. package/engine/internal/unit/item-slot.lua +92 -0
  80. package/engine/internal/unit/order.d.ts +3 -3
  81. package/engine/internal/unit/order.lua +10 -10
  82. package/engine/internal/unit/shared-vision-counter.d.ts +18 -0
  83. package/engine/internal/unit/shared-vision-counter.lua +31 -0
  84. package/engine/internal/unit+ability.d.ts +2 -1
  85. package/engine/internal/unit+ability.lua +73 -2
  86. package/engine/internal/unit+damage.d.ts +9 -0
  87. package/engine/internal/unit+damage.lua +33 -0
  88. package/engine/internal/unit+rally.lua +9 -31
  89. package/engine/internal/unit-missile-data.lua +96 -68
  90. package/engine/internal/unit-missile-launch.lua +13 -13
  91. package/engine/internal/unit.d.ts +5 -10
  92. package/engine/internal/unit.lua +67 -101
  93. package/engine/lightning.lua +4 -4
  94. package/engine/local-client.d.ts +26 -0
  95. package/engine/local-client.lua +294 -54
  96. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -0
  97. package/engine/object-data/auxiliary/attachment-preset.lua +7 -0
  98. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  99. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  100. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  101. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  102. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  103. package/engine/object-data/auxiliary/item-class.lua +2 -0
  104. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  105. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  106. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  107. package/engine/object-data/auxiliary/order-type.lua +2 -0
  108. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  109. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  110. package/engine/object-data/auxiliary/unit-weapon-type.d.ts +21 -0
  111. package/engine/object-data/auxiliary/unit-weapon-type.lua +2 -0
  112. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  113. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  114. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  115. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  116. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  117. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  118. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  119. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  120. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  121. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  122. package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
  123. package/engine/object-data/entry/ability-type/barrage.lua +52 -0
  124. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  125. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  126. package/engine/object-data/entry/ability-type/blank-configurable.lua +2 -2
  127. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  128. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  129. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  130. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  131. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  132. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  133. package/engine/object-data/entry/ability-type/channel.d.ts +2 -2
  134. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  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/exhume-corpses.d.ts +14 -0
  152. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  153. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  154. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  155. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  156. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  157. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  158. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  159. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  160. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  161. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  162. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  163. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  164. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  165. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  166. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  167. package/engine/object-data/entry/ability-type/healing-modifier.d.ts +9 -0
  168. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  169. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  170. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  171. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  172. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  173. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  174. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  175. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  176. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  177. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  178. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  179. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  180. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  181. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  182. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  183. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  184. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  185. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  186. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  187. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  188. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  189. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  190. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  191. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  192. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  193. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  194. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  195. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  196. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  197. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  198. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  199. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  200. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  201. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  202. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  203. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  204. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  205. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  206. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  207. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  208. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  209. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  210. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  211. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  212. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  213. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  214. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  215. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  216. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  217. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  218. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  219. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  220. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  221. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  222. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  223. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  224. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  225. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  226. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  227. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  228. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  229. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  230. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  231. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  232. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  233. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  234. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  235. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  236. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  237. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  238. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  239. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  240. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  241. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  242. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  243. package/engine/object-data/entry/ability-type.d.ts +33 -8
  244. package/engine/object-data/entry/ability-type.lua +256 -48
  245. package/engine/object-data/entry/buff-type/applicable.lua +122 -111
  246. package/engine/object-data/entry/buff-type.d.ts +6 -2
  247. package/engine/object-data/entry/buff-type.lua +26 -0
  248. package/engine/object-data/entry/destructible-type.d.ts +6 -2
  249. package/engine/object-data/entry/destructible-type.lua +26 -0
  250. package/engine/object-data/entry/item-type.d.ts +18 -3
  251. package/engine/object-data/entry/item-type.lua +84 -0
  252. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  253. package/engine/object-data/entry/lightning-type.lua +1 -1
  254. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  255. package/engine/object-data/entry/unit-type.d.ts +57 -2
  256. package/engine/object-data/entry/unit-type.lua +412 -64
  257. package/engine/object-data/entry/upgrade.d.ts +2 -2
  258. package/engine/object-data/entry.d.ts +6 -1
  259. package/engine/object-data/entry.lua +8 -0
  260. package/engine/object-field/ability.lua +2 -2
  261. package/engine/object-field/item.d.ts +22 -0
  262. package/engine/object-field/item.lua +118 -0
  263. package/engine/object-field.d.ts +1 -1
  264. package/engine/object-field.lua +9 -7
  265. package/engine/random.lua +1 -1
  266. package/engine/standard/entries/ability-type.d.ts +3102 -7
  267. package/engine/standard/entries/ability-type.lua +0 -6
  268. package/engine/standard/entries/buff-type.d.ts +45 -0
  269. package/engine/standard/entries/buff-type.lua +43 -0
  270. package/engine/standard/entries/item-type.d.ts +1299 -0
  271. package/engine/standard/entries/item-type.lua +2 -0
  272. package/engine/standard/entries/lightning-type.d.ts +42 -15
  273. package/engine/standard/entries/lightning-type.lua +0 -14
  274. package/engine/standard/entries/unit-type.d.ts +5 -0
  275. package/engine/standard/entries/unit-type.lua +5 -0
  276. package/engine/standard/fields/ability.d.ts +2 -2
  277. package/engine/standard/fields/ability.lua +2 -2
  278. package/engine/standard/fields/item.d.ts +4 -0
  279. package/engine/standard/fields/item.lua +6 -0
  280. package/engine/text-tag.d.ts +13 -1
  281. package/engine/text-tag.lua +79 -42
  282. package/engine/unit.d.ts +6 -1
  283. package/engine/unit.lua +6 -1
  284. package/event.d.ts +1 -1
  285. package/lualib_bundle.lua +1 -1
  286. package/math.d.ts +2 -0
  287. package/math.lua +14 -0
  288. package/network.lua +25 -1
  289. package/objutil/buff.lua +1 -1
  290. package/objutil/object.lua +1 -1
  291. package/operation.d.ts +8 -1
  292. package/operation.lua +38 -18
  293. package/package.json +3 -23
  294. package/utility/arrays.d.ts +7 -1
  295. package/utility/arrays.lua +17 -0
  296. package/utility/linked-map.d.ts +2 -1
  297. package/utility/linked-map.lua +6 -0
  298. package/utility/linked-set.d.ts +1 -0
  299. package/utility/linked-set.lua +6 -0
  300. package/utility/random.d.ts +102 -0
  301. package/utility/random.lua +273 -0
  302. package/utility/unordered-map.d.ts +27 -0
  303. package/utility/unordered-map.lua +99 -0
  304. package/engine/internal/unit/item.lua +0 -78
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,12 @@
1
+ local ____exports = {}
2
+ ---
3
+ -- @internal The original natives, captured before `unit+ability` wraps them to report
4
+ -- ability level changes. For internal level juggling that must not be reported.
5
+ ____exports.rawSetUnitAbilityLevel = SetUnitAbilityLevel
6
+ ---
7
+ -- @internal
8
+ ____exports.rawIncUnitAbilityLevel = IncUnitAbilityLevel
9
+ ---
10
+ -- @internal
11
+ ____exports.rawDecUnitAbilityLevel = DecUnitAbilityLevel
12
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,48 @@
1
+ local ____exports = {}
2
+ local ____healing_2Dward_2Daura = require("engine.object-data.entry.ability-type.healing-ward-aura")
3
+ local HealingWardAuraAbilityType = ____healing_2Dward_2Daura.HealingWardAuraAbilityType
4
+ local ____item_2Dlife_2Dregeneration = require("engine.object-data.entry.ability-type.item-life-regeneration")
5
+ local ItemLifeRegenerationAbilityType = ____item_2Dlife_2Dregeneration.ItemLifeRegenerationAbilityType
6
+ local ____combat_2Dclassification = require("engine.object-data.auxiliary.combat-classification")
7
+ local combatClassificationsOf = ____combat_2Dclassification.combatClassificationsOf
8
+ local function createHealthRegenerationDummyAbilityType(healthRegeneration)
9
+ local abilityType = ItemLifeRegenerationAbilityType:create()
10
+ abilityType.isInternal = true
11
+ abilityType.isButtonVisible = false
12
+ abilityType.healthRegeneration = healthRegeneration
13
+ return abilityType.id
14
+ end
15
+ ---
16
+ -- @internal For use by internal systems. The ability at index `i` regenerates `2^i` hit
17
+ -- points per second; together they compose any value from 0 to 1023.
18
+ ____exports.HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_IDS = compiletime(function()
19
+ local abilityTypeIds = {}
20
+ for i = 0, 9 do
21
+ abilityTypeIds[i + 1] = createHealthRegenerationDummyAbilityType(1 << i)
22
+ end
23
+ return abilityTypeIds
24
+ end)
25
+ ---
26
+ -- @internal For use by internal systems.
27
+ ____exports.HEALTH_REGENERATION_RATE_DECREASE_DUMMY_VALUE = -1024
28
+ ---
29
+ -- @internal For use by internal systems. Shifts negative values into the positive range.
30
+ ____exports.HEALTH_REGENERATION_RATE_DECREASE_DUMMY_ABILITY_TYPE_ID = compiletime(function() return createHealthRegenerationDummyAbilityType(____exports.HEALTH_REGENERATION_RATE_DECREASE_DUMMY_VALUE) end)
31
+ ---
32
+ -- @internal For use by internal systems. Holds the fractional remainder; being an aura,
33
+ -- it accepts field writes but applies with the usual aura delay.
34
+ ____exports.FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_ID = compiletime(function()
35
+ local abilityType = HealingWardAuraAbilityType:create()
36
+ abilityType.isInternal = true
37
+ abilityType.isButtonVisible = false
38
+ abilityType.healthRegeneration = 0
39
+ abilityType.isHealthRegenerationPercentage = false
40
+ abilityType.allowedTargetCombatClassifications = combatClassificationsOf(4096)
41
+ abilityType.buffTypeIds = {}
42
+ abilityType.targetEffectPresets = {}
43
+ return abilityType.id
44
+ end)
45
+ ---
46
+ -- @internal For use by internal systems.
47
+ ____exports.FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_ABILITY_FIELD = ABILITY_RLF_AMOUNT_OF_HIT_POINTS_REGENERATED
48
+ return ____exports
@@ -0,0 +1,2 @@
1
+ /** @noSelfInFile */
2
+ export {};
@@ -0,0 +1,21 @@
1
+ local ____exports = {}
2
+ local ____spiked_2Dcarapace = require("engine.object-data.entry.ability-type.spiked-carapace")
3
+ local SpikedCarapaceAbilityType = ____spiked_2Dcarapace.SpikedCarapaceAbilityType
4
+ ---
5
+ -- @internal For use by internal systems.
6
+ --
7
+ -- Spiked Carapace returns the given factor of melee attack damage to the attacker; the engine
8
+ -- decides what counts as a melee attack.
9
+ ____exports.RETURNED_MELEE_DAMAGE_FACTOR_DUMMY_ABILITY_TYPE_ID = compiletime(function()
10
+ local abilityType = SpikedCarapaceAbilityType:create()
11
+ abilityType.isInternal = true
12
+ abilityType.isButtonVisible = false
13
+ abilityType.returnedDamageFactor = 0
14
+ abilityType.receivedDamageFactor = 1
15
+ abilityType.armorIncrease = 0
16
+ return abilityType.id
17
+ end)
18
+ ---
19
+ -- @internal For use by internal systems.
20
+ ____exports.RETURNED_MELEE_DAMAGE_FACTOR_ABILITY_FIELD = ABILITY_RLF_RETURNED_DAMAGE_FACTOR
21
+ return ____exports
@@ -397,6 +397,22 @@ local function invokeImpactEvent(unit, ability, ...)
397
397
  ability[impactCallbackIdAttribute] = nil
398
398
  eventInvoke(internalAbilityImpactEvent, unit, ability, ...)
399
399
  end
400
+ --- Invokes the impact events of a cast that never reaches its native impact, with the
401
+ -- cast's target: the common event and the one matching the target kind, as a real impact.
402
+ --
403
+ -- @internal For use by internal systems only.
404
+ ____exports.emulateAbilityImpactEvent = function(caster, ability, targetUnit, targetItem, targetDestructible, x, y)
405
+ eventInvoke(
406
+ internalAbilityImpactEvent,
407
+ caster,
408
+ ability,
409
+ targetUnit and targetUnit.handle,
410
+ targetItem and targetItem.handle,
411
+ targetDestructible and targetDestructible.handle,
412
+ x,
413
+ y
414
+ )
415
+ end
400
416
  internalAbilityChannelingStartEvent:addListener(
401
417
  999999,
402
418
  function(unit, ability, ...)
@@ -2,22 +2,11 @@ local ____exports = {}
2
2
  local ____unit = require("engine.internal.unit")
3
3
  local Unit = ____unit.Unit
4
4
  local ____add_2Ditem_2Dto_2Dslot = require("engine.internal.unit.add-item-to-slot")
5
- local fillerItems = ____add_2Ditem_2Dto_2Dslot.fillerItems
6
- local unitsWithFillerItems = ____add_2Ditem_2Dto_2Dslot.unitsWithFillerItems
7
- local setItemVisible = SetItemVisible
8
- local unitRemoveItem = UnitRemoveItem
5
+ local unitRemoveFillerItems = ____add_2Ditem_2Dto_2Dslot.unitRemoveFillerItems
9
6
  Unit.itemPickedUpEvent:addListener(
10
- 4,
7
+ 999999,
11
8
  function(unit)
12
- local handle = unit.handle
13
- if unitsWithFillerItems[handle] ~= nil then
14
- for previousSlot = 1, 6 do
15
- local fillerItem = fillerItems[previousSlot]
16
- unitRemoveItem(handle, fillerItem)
17
- setItemVisible(fillerItem, false)
18
- end
19
- unitsWithFillerItems[handle] = nil
20
- end
9
+ unitRemoveFillerItems(unit.handle)
21
10
  end
22
11
  )
23
12
  return ____exports
@@ -4,9 +4,14 @@ local BlankItemType = ____blank.BlankItemType
4
4
  local ____arrays = require("utility.arrays")
5
5
  local array = ____arrays.array
6
6
  local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
7
- local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
7
+ local ignoreEventsItemTypeIds = ____ignore_2Devents_2Ditems.ignoreEventsItemTypeIds
8
+ local ____item_2Dcontainer = require("engine.internal.unit.item-container")
9
+ local UNIT_EXTENDED_INVENTORY_SLOT_COUNT = ____item_2Dcontainer.UNIT_EXTENDED_INVENTORY_SLOT_COUNT
10
+ local UNIT_INVENTORY_SLOT_COUNT = ____item_2Dcontainer.UNIT_INVENTORY_SLOT_COUNT
8
11
  local setItemVisible = SetItemVisible
9
12
  local unitAddItem = UnitAddItem
13
+ local unitInventorySize = UnitInventorySize
14
+ local unitItemInBagSlot = UnitItemInBagSlot
10
15
  local unitItemInSlot = UnitItemInSlot
11
16
  local unitRemoveItem = UnitRemoveItem
12
17
  ---
@@ -16,14 +21,15 @@ ____exports.SLOT_FILLER_ITEM_TYPE_ID = compiletime(function()
16
21
  itemType.name = "[Warscript/Dummy] Slot Filler"
17
22
  return itemType.id
18
23
  end)
19
- ---
24
+ ignoreEventsItemTypeIds[____exports.SLOT_FILLER_ITEM_TYPE_ID] = true
25
+ --- Enough fillers to occupy every regular and extended inventory slot that precedes the last extended one.
26
+ --
20
27
  -- @internal For use by internal systems only.
21
28
  ____exports.fillerItems = array(
22
- 6,
29
+ UNIT_INVENTORY_SLOT_COUNT + UNIT_EXTENDED_INVENTORY_SLOT_COUNT,
23
30
  function()
24
31
  local item = CreateItem(____exports.SLOT_FILLER_ITEM_TYPE_ID, 0, 0)
25
32
  setItemVisible(item, false)
26
- ignoreEventsItems[item] = true
27
33
  return item
28
34
  end
29
35
  )
@@ -32,21 +38,56 @@ ____exports.fillerItems = array(
32
38
  ____exports.unitsWithFillerItems = {}
33
39
  ---
34
40
  -- @internal For use by internal systems only.
35
- ____exports.unitAddItemToSlot = function(unit, item, slot)
36
- for previousSlot = 0, slot - 1 do
37
- if unitItemInSlot(unit, previousSlot) == nil then
38
- unitAddItem(unit, ____exports.fillerItems[previousSlot + 1])
39
- ____exports.unitsWithFillerItems[unit] = true
41
+ ____exports.unitRemoveFillerItems = function(unit)
42
+ if ____exports.unitsWithFillerItems[unit] ~= nil then
43
+ for ____, fillerItem in ipairs(____exports.fillerItems) do
44
+ unitRemoveItem(unit, fillerItem)
45
+ setItemVisible(fillerItem, false)
46
+ end
47
+ ____exports.unitsWithFillerItems[unit] = nil
48
+ end
49
+ end
50
+ --- Adds an item to a unit so that it lands in a specific slot of its regular or extended inventory.
51
+ --
52
+ -- The engine fills slots in order (the regular inventory first, then the extended one), so every empty slot
53
+ -- preceding the target is temporarily occupied by a filler item. Unlike `moveslot` orders, this works
54
+ -- regardless of whether the unit can currently act.
55
+ --
56
+ -- @internal For use by internal systems only.
57
+ ____exports.unitAddItemToSlot = function(unit, item, slot, containerType)
58
+ if containerType == nil then
59
+ containerType = 0
60
+ end
61
+ local fillerCount = 0
62
+ local function fillEmptySlots(slotCount, itemInSlot)
63
+ for precedingSlot = 0, slotCount - 1 do
64
+ if itemInSlot(unit, precedingSlot) == nil then
65
+ unitAddItem(unit, ____exports.fillerItems[fillerCount + 1])
66
+ fillerCount = fillerCount + 1
67
+ end
40
68
  end
41
69
  end
42
- unitAddItem(unit, item)
70
+ if containerType == 0 then
71
+ fillEmptySlots(slot, unitItemInSlot)
72
+ else
73
+ fillEmptySlots(
74
+ unitInventorySize(unit),
75
+ unitItemInSlot
76
+ )
77
+ fillEmptySlots(slot, unitItemInBagSlot)
78
+ end
79
+ if fillerCount > 0 then
80
+ ____exports.unitsWithFillerItems[unit] = true
81
+ end
82
+ local result = unitAddItem(unit, item)
43
83
  if ____exports.unitsWithFillerItems[unit] ~= nil then
44
- for previousSlot = 0, slot - 1 do
45
- local fillerItem = ____exports.fillerItems[previousSlot + 1]
84
+ for fillerIndex = 0, fillerCount - 1 do
85
+ local fillerItem = ____exports.fillerItems[fillerIndex + 1]
46
86
  unitRemoveItem(unit, fillerItem)
47
87
  setItemVisible(fillerItem, false)
48
88
  end
49
89
  ____exports.unitsWithFillerItems[unit] = nil
50
90
  end
91
+ return result
51
92
  end
52
93
  return ____exports
@@ -0,0 +1,15 @@
1
+ /** @noSelfInFile */
2
+ declare module "../unit" {
3
+ interface Unit {
4
+ getAnimationDuration(this: Unit, animation: string | number): number;
5
+ setAurasEnabled(this: Unit, enabled: boolean, affectsUI?: boolean): void;
6
+ isHeroGlowAllowed: boolean;
7
+ maximumFlyHeight: number;
8
+ showsAirToGroundIndicator: boolean;
9
+ alwaysDisplaysHealth: boolean;
10
+ }
11
+ interface UnitWeapon {
12
+ resetAttack(this: UnitWeapon): void;
13
+ }
14
+ }
15
+ export {};
@@ -0,0 +1,85 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
3
+ local ____exports = {}
4
+ local ____unit = require("engine.internal.unit")
5
+ local Unit = ____unit.Unit
6
+ local UnitWeapon = ____unit.UnitWeapon
7
+ local allowHeroGlowOnUnit = AllowHeroGlowOnUnit
8
+ local disallowHeroGlowOnUnit = DisallowHeroGlowOnUnit
9
+ local getUnitAnimationDuration = BlzGetUnitAnimationDuration
10
+ local getUnitAnimationDurationByIndex = BlzGetUnitAnimationDurationByIndex
11
+ local getUnitBooleanField = BlzGetUnitBooleanField
12
+ local getUnitRealField = BlzGetUnitRealField
13
+ local heroGlowIsAllowedOnUnit = HeroGlowIsAllowedOnUnit
14
+ local resetUnitAttack = BlzResetUnitAttack
15
+ local setUnitBooleanField = BlzSetUnitBooleanField
16
+ local setUnitRealField = BlzSetUnitRealField
17
+ local unitEnableAuras = BlzUnitEnableAuras
18
+ Unit.prototype.getAnimationDuration = function(self, animation)
19
+ if type(animation) == "number" then
20
+ return getUnitAnimationDurationByIndex(self.handle, animation)
21
+ end
22
+ return getUnitAnimationDuration(self.handle, animation)
23
+ end
24
+ Unit.prototype.setAurasEnabled = function(self, enabled, affectsUI)
25
+ if affectsUI == nil then
26
+ affectsUI = true
27
+ end
28
+ unitEnableAuras(self.handle, enabled, affectsUI)
29
+ end
30
+ __TS__ObjectDefineProperty(
31
+ Unit.prototype,
32
+ "isHeroGlowAllowed",
33
+ {
34
+ get = function(self)
35
+ return heroGlowIsAllowedOnUnit(self.handle)
36
+ end,
37
+ set = function(self, allowed)
38
+ if allowed then
39
+ allowHeroGlowOnUnit(self.handle)
40
+ else
41
+ disallowHeroGlowOnUnit(self.handle)
42
+ end
43
+ end
44
+ }
45
+ )
46
+ __TS__ObjectDefineProperty(
47
+ Unit.prototype,
48
+ "maximumFlyHeight",
49
+ {
50
+ get = function(self)
51
+ return getUnitRealField(self.handle, UNIT_RF_FLY_MAX_HEIGHT)
52
+ end,
53
+ set = function(self, height)
54
+ setUnitRealField(self.handle, UNIT_RF_FLY_MAX_HEIGHT, height)
55
+ end
56
+ }
57
+ )
58
+ __TS__ObjectDefineProperty(
59
+ Unit.prototype,
60
+ "showsAirToGroundIndicator",
61
+ {
62
+ get = function(self)
63
+ return getUnitBooleanField(self.handle, UNIT_BF_SHOW_AIR_TO_GROUND)
64
+ end,
65
+ set = function(self, show)
66
+ setUnitBooleanField(self.handle, UNIT_BF_SHOW_AIR_TO_GROUND, show)
67
+ end
68
+ }
69
+ )
70
+ __TS__ObjectDefineProperty(
71
+ Unit.prototype,
72
+ "alwaysDisplaysHealth",
73
+ {
74
+ get = function(self)
75
+ return getUnitBooleanField(self.handle, UNIT_BF_FORCE_DISPLAY_HP)
76
+ end,
77
+ set = function(self, show)
78
+ setUnitBooleanField(self.handle, UNIT_BF_FORCE_DISPLAY_HP, show)
79
+ end
80
+ }
81
+ )
82
+ UnitWeapon.prototype.resetAttack = function(self)
83
+ resetUnitAttack(self.unit.handle, self.index)
84
+ end
85
+ return ____exports
@@ -13,8 +13,10 @@ export type UnitMovementSpeedFactorBonusId = UnitBonusId<"movementSpeedFactor">;
13
13
  export type UnitAutoAttackDamageBonusId = UnitBonusId<"autoAttackDamage">;
14
14
  export type UnitDamageFactorBonusId = UnitBonusId<"damageFactor">;
15
15
  export type UnitReceivedDamageFactorBonusId = UnitBonusId<"receivedDamageFactor">;
16
+ export type UnitReturnedMeleeDamageFactorBonusId = UnitBonusId<"returnedMeleeDamageFactor">;
16
17
  export type UnitEvasionProbabilityBonusId = UnitBonusId<"evasionProbability">;
17
18
  export type UnitManaRegenerationRateFactorBonusId = UnitBonusId<"manaRegenerationRateFactor">;
19
+ export type UnitHealthRegenerationRateBonusId = UnitBonusId<"healthRegenerationRate">;
18
20
  export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
19
21
  abilityTypeId: AbilityTypeId;
20
22
  field: jabilityintegerlevelfield;
@@ -26,6 +28,11 @@ export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
26
28
  } | {
27
29
  abilityTypeId?: undefined;
28
30
  valueByUnit: LuaMap<Unit, number>;
31
+ apply?: undefined;
32
+ } | {
33
+ abilityTypeId?: undefined;
34
+ valueByUnit?: undefined;
35
+ apply: (this: void, unitHandle: junit, value: number) => void;
29
36
  }) & {
30
37
  reduce: (this: void, array: number[]) => number;
31
38
  initialValue: number;
@@ -40,8 +47,12 @@ export declare namespace UnitBonusType {
40
47
  const AUTO_ATTACK_DAMAGE: UnitBonusType<UnitAutoAttackDamageBonusId>;
41
48
  const DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
42
49
  const RECEIVED_DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
50
+ /** The factor of melee attack damage returned to the attacker, as Spiked Carapace. */
51
+ const RETURNED_MELEE_DAMAGE_FACTOR: UnitBonusType<UnitReturnedMeleeDamageFactorBonusId>;
43
52
  const EVASION_PROBABILITY: UnitBonusType<UnitEvasionProbabilityBonusId>;
44
53
  const MANA_REGENERATION_RATE_FACTOR: UnitBonusType<UnitManaRegenerationRateFactorBonusId>;
54
+ /** Supported range: -1000 to 1000; the total is clamped to it. */
55
+ const HEALTH_REGENERATION_RATE: UnitBonusType<UnitHealthRegenerationRateBonusId>;
45
56
  }
46
57
  export declare const addUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, value: number) => Id;
47
58
  export declare const removeUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, id: Id) => boolean;
@@ -1,4 +1,5 @@
1
1
  local ____exports = {}
2
+ local applyAbilityBonus, applyHealthRegenerationRateBonus
2
3
  local ____unit = require("engine.internal.unit")
3
4
  local Unit = ____unit.Unit
4
5
  local ____armor_2Dbonus = require("engine.internal.object-data.armor-bonus")
@@ -6,6 +7,8 @@ local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABIL
6
7
  local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
7
8
  local ____utility = require("engine.internal.utility")
8
9
  local addInternalAbility = ____utility.addInternalAbility
10
+ local ____unit_2Dability_2Dlevel_2Dnatives = require("engine.internal.misc.unit-ability-level-natives")
11
+ local rawSetUnitAbilityLevel = ____unit_2Dability_2Dlevel_2Dnatives.rawSetUnitAbilityLevel
9
12
  local ____arrays = require("utility.arrays")
10
13
  local product = ____arrays.product
11
14
  local sum = ____arrays.sum
@@ -33,6 +36,15 @@ local MANA_BONUS_DUMMY_ABILITY_TYPE_ID = ____mana_2Dbonus.MANA_BONUS_DUMMY_ABILI
33
36
  local ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor = require("engine.internal.object-data.mana-regeneration-rate-increase-factor")
34
37
  local MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD = ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor.MANA_REGENERATION_RATE_INCREASE_FACTOR_ABILITY_FIELD
35
38
  local MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____mana_2Dregeneration_2Drate_2Dincrease_2Dfactor.MANA_REGENERATION_RATE_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID
39
+ local ____health_2Dregeneration_2Drate_2Dincrease = require("engine.internal.object-data.health-regeneration-rate-increase")
40
+ local FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_ABILITY_FIELD = ____health_2Dregeneration_2Drate_2Dincrease.FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_ABILITY_FIELD
41
+ local FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_ID = ____health_2Dregeneration_2Drate_2Dincrease.FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_ID
42
+ local HEALTH_REGENERATION_RATE_DECREASE_DUMMY_ABILITY_TYPE_ID = ____health_2Dregeneration_2Drate_2Dincrease.HEALTH_REGENERATION_RATE_DECREASE_DUMMY_ABILITY_TYPE_ID
43
+ local HEALTH_REGENERATION_RATE_DECREASE_DUMMY_VALUE = ____health_2Dregeneration_2Drate_2Dincrease.HEALTH_REGENERATION_RATE_DECREASE_DUMMY_VALUE
44
+ local HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_IDS = ____health_2Dregeneration_2Drate_2Dincrease.HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_IDS
45
+ local ____returned_2Dmelee_2Ddamage_2Dfactor = require("engine.internal.object-data.returned-melee-damage-factor")
46
+ local RETURNED_MELEE_DAMAGE_FACTOR_ABILITY_FIELD = ____returned_2Dmelee_2Ddamage_2Dfactor.RETURNED_MELEE_DAMAGE_FACTOR_ABILITY_FIELD
47
+ local RETURNED_MELEE_DAMAGE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____returned_2Dmelee_2Ddamage_2Dfactor.RETURNED_MELEE_DAMAGE_FACTOR_DUMMY_ABILITY_TYPE_ID
36
48
  local damageFactorByUnit = {}
37
49
  local receivedDamageFactorByUnit = {}
38
50
  local function atLeastOnceProbability(array)
@@ -89,6 +101,14 @@ do
89
101
  }
90
102
  UnitBonusType.DAMAGE_FACTOR = {reduce = product, valueByUnit = damageFactorByUnit, initialValue = 1}
91
103
  UnitBonusType.RECEIVED_DAMAGE_FACTOR = {reduce = product, valueByUnit = receivedDamageFactorByUnit, initialValue = 1}
104
+ --- The factor of melee attack damage returned to the attacker, as Spiked Carapace.
105
+ UnitBonusType.RETURNED_MELEE_DAMAGE_FACTOR = {
106
+ abilityTypeId = RETURNED_MELEE_DAMAGE_FACTOR_DUMMY_ABILITY_TYPE_ID,
107
+ field = RETURNED_MELEE_DAMAGE_FACTOR_ABILITY_FIELD,
108
+ integer = false,
109
+ reduce = sum,
110
+ initialValue = 0
111
+ }
92
112
  UnitBonusType.EVASION_PROBABILITY = {
93
113
  abilityTypeId = EVASION_PROBABILITY_DUMMY_ABILITY_TYPE_ID,
94
114
  field = EVASION_PROBABILITY_ABILITY_FIELD,
@@ -103,33 +123,88 @@ do
103
123
  reduce = sum,
104
124
  initialValue = 0
105
125
  }
126
+ --- Supported range: -1000 to 1000; the total is clamped to it.
127
+ UnitBonusType.HEALTH_REGENERATION_RATE = {
128
+ apply = function(unitHandle, value) return applyHealthRegenerationRateBonus(unitHandle, value) end,
129
+ reduce = sum,
130
+ initialValue = 0
131
+ }
106
132
  end
107
133
  local bonusesByUnitByBonusType = {}
108
134
  local nextId = 1
135
+ local ceil = math.ceil
136
+ local floor = math.floor
137
+ local max = math.max
138
+ local min = math.min
109
139
  local function processUnitBonus(unit, bonusType, bonusesArray)
110
140
  local unitHandle = unit.handle
111
141
  local totalValue = bonusType.reduce(bonusesArray)
112
142
  local abilityTypeId = bonusType.abilityTypeId
113
143
  if abilityTypeId == nil then
114
144
  local valueByUnit = bonusType.valueByUnit
115
- if totalValue == bonusType.initialValue then
145
+ if valueByUnit == nil then
146
+ bonusType.apply(unitHandle, totalValue)
147
+ elseif totalValue == bonusType.initialValue then
116
148
  valueByUnit[unit] = nil
117
149
  else
118
150
  valueByUnit[unit] = totalValue
119
151
  end
120
152
  return
121
153
  end
122
- if totalValue == bonusType.initialValue then
154
+ applyAbilityBonus(
155
+ unitHandle,
156
+ abilityTypeId,
157
+ bonusType.field,
158
+ bonusType.integer,
159
+ totalValue,
160
+ bonusType.initialValue
161
+ )
162
+ end
163
+ applyAbilityBonus = function(unitHandle, abilityTypeId, field, integer, value, initialValue)
164
+ if value == initialValue then
123
165
  UnitRemoveAbility(unitHandle, abilityTypeId)
124
166
  return
125
167
  end
126
168
  local abilityHandle = checkNotNull(addInternalAbility(unitHandle, abilityTypeId))
127
- check((bonusType.integer and BlzSetAbilityIntegerLevelField or BlzSetAbilityRealLevelField)(abilityHandle, bonusType.field, 0, totalValue))
169
+ check((integer and BlzSetAbilityIntegerLevelField or BlzSetAbilityRealLevelField)(abilityHandle, field, 0, value))
128
170
  BlzSetAbilityIntegerField(abilityHandle, ABILITY_IF_LEVELS, 2)
129
- SetUnitAbilityLevel(unitHandle, abilityTypeId, 2)
130
- SetUnitAbilityLevel(unitHandle, abilityTypeId, 1)
171
+ rawSetUnitAbilityLevel(unitHandle, abilityTypeId, 2)
172
+ rawSetUnitAbilityLevel(unitHandle, abilityTypeId, 1)
131
173
  BlzSetAbilityIntegerField(abilityHandle, ABILITY_IF_LEVELS, 1)
132
174
  end
175
+ local function setInternalAbilityPresence(unitHandle, abilityTypeId, present)
176
+ if present then
177
+ addInternalAbility(unitHandle, abilityTypeId)
178
+ else
179
+ UnitRemoveAbility(unitHandle, abilityTypeId)
180
+ end
181
+ end
182
+ local MINIMUM_HEALTH_REGENERATION_RATE_BONUS = -1000
183
+ local MAXIMUM_HEALTH_REGENERATION_RATE_BONUS = 1000
184
+ applyHealthRegenerationRateBonus = function(unitHandle, value)
185
+ value = max(
186
+ MINIMUM_HEALTH_REGENERATION_RATE_BONUS,
187
+ min(value, MAXIMUM_HEALTH_REGENERATION_RATE_BONUS)
188
+ )
189
+ local integerValue = value < 0 and ceil(value) or floor(value)
190
+ local remainder = integerValue
191
+ setInternalAbilityPresence(unitHandle, HEALTH_REGENERATION_RATE_DECREASE_DUMMY_ABILITY_TYPE_ID, remainder < 0)
192
+ if remainder < 0 then
193
+ remainder = remainder - HEALTH_REGENERATION_RATE_DECREASE_DUMMY_VALUE
194
+ end
195
+ for ____, abilityTypeId in ipairs(HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_IDS) do
196
+ setInternalAbilityPresence(unitHandle, abilityTypeId, remainder % 2 == 1)
197
+ remainder = floor(remainder / 2)
198
+ end
199
+ applyAbilityBonus(
200
+ unitHandle,
201
+ FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_DUMMY_ABILITY_TYPE_ID,
202
+ FRACTIONAL_HEALTH_REGENERATION_RATE_INCREASE_ABILITY_FIELD,
203
+ false,
204
+ value - integerValue,
205
+ 0
206
+ )
207
+ end
133
208
  ____exports.addUnitBonus = function(unit, bonusType, value)
134
209
  local bonusesByUnit = bonusesByUnitByBonusType[bonusType]
135
210
  if bonusesByUnit == nil then
@@ -32,7 +32,7 @@ declare module "../unit" {
32
32
  * @param includeAuras Whether to remove aura buffs. Default `true`.
33
33
  * @param autoDispel Unknown. Default `false`.
34
34
  */
35
- removeBuffs(polarity?: BuffPolarity, resistanceType?: BuffResistanceType, includeExpirationTimers?: boolean, includeAuras?: boolean, autoDispel?: boolean): void;
36
- removeBuffs(buffTypeIds: number[]): void;
35
+ removeBuffs(polarity?: BuffPolarity, resistanceType?: BuffResistanceType, includeExpirationTimers?: boolean, includeAuras?: boolean, autoDispel?: boolean): number;
36
+ removeBuffs(buffTypeIds: number[]): number;
37
37
  }
38
38
  }
@@ -1,7 +1,3 @@
1
- local ____lualib = require("lualib_bundle")
2
- local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
3
- local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
4
- local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
5
1
  local ____exports = {}
6
2
  local ____buff = require("engine.buff")
7
3
  local checkBuff = ____buff.checkBuff
@@ -19,7 +15,7 @@ Unit.prototype.hasBuff = function(self, buffTypeId)
19
15
  end
20
16
  Unit.prototype.removeBuff = function(self, buffTypeId)
21
17
  if removeBuff(self.handle, buffTypeId) then
22
- checkBuff(self, buffTypeId)
18
+ checkBuff(self, buffTypeId, false)
23
19
  return true
24
20
  end
25
21
  return false
@@ -46,36 +42,55 @@ Unit.prototype.countBuffs = function(self, polarity, resistanceType, includeExpi
46
42
  )
47
43
  end
48
44
  Unit.prototype.removeBuffs = function(self, polarityOrBuffTypeIds, resistanceType, includeExpirationTimers, includeAuras, autoDispel)
45
+ local handle = self.handle
46
+ local cnt
49
47
  if type(polarityOrBuffTypeIds) == "table" then
50
- local handle = self.handle
48
+ cnt = 0
51
49
  for i = 1, #polarityOrBuffTypeIds do
52
- unitRemoveAbility(handle, polarityOrBuffTypeIds[i])
50
+ cnt = cnt + (unitRemoveAbility(handle, polarityOrBuffTypeIds[i]) and 1 or 0)
53
51
  end
54
52
  else
55
- local ____array_3 = __TS__SparseArrayNew(
56
- self.handle,
57
- (polarityOrBuffTypeIds or 3) & 1 ~= 0,
58
- (polarityOrBuffTypeIds or 3) & 2 ~= 0,
59
- (resistanceType or 0) & 1 ~= 0,
60
- (resistanceType or 0) & 2 ~= 0
61
- )
53
+ local positive = (polarityOrBuffTypeIds or 3) & 1 ~= 0
54
+ local negative = (polarityOrBuffTypeIds or 3) & 2 ~= 0
55
+ local magic = (resistanceType or 0) & 1 ~= 0
56
+ local physical = (resistanceType or 0) & 2 ~= 0
62
57
  local ____includeExpirationTimers_0 = includeExpirationTimers
63
58
  if ____includeExpirationTimers_0 == nil then
64
59
  ____includeExpirationTimers_0 = true
65
60
  end
66
- __TS__SparseArrayPush(____array_3, ____includeExpirationTimers_0)
61
+ includeExpirationTimers = ____includeExpirationTimers_0
67
62
  local ____includeAuras_1 = includeAuras
68
63
  if ____includeAuras_1 == nil then
69
64
  ____includeAuras_1 = true
70
65
  end
71
- __TS__SparseArrayPush(____array_3, ____includeAuras_1)
66
+ includeAuras = ____includeAuras_1
72
67
  local ____autoDispel_2 = autoDispel
73
68
  if ____autoDispel_2 == nil then
74
69
  ____autoDispel_2 = false
75
70
  end
76
- __TS__SparseArrayPush(____array_3, ____autoDispel_2)
77
- unitRemoveBuffsEx(__TS__SparseArraySpread(____array_3))
71
+ autoDispel = ____autoDispel_2
72
+ cnt = unitCountBuffsEx(
73
+ handle,
74
+ positive,
75
+ negative,
76
+ magic,
77
+ physical,
78
+ includeExpirationTimers,
79
+ includeAuras,
80
+ autoDispel
81
+ )
82
+ unitRemoveBuffsEx(
83
+ handle,
84
+ positive,
85
+ negative,
86
+ magic,
87
+ physical,
88
+ includeExpirationTimers,
89
+ includeAuras,
90
+ autoDispel
91
+ )
78
92
  end
79
- checkBuffs(self)
93
+ checkBuffs(self, false)
94
+ return cnt
80
95
  end
81
96
  return ____exports
@@ -0,0 +1,44 @@
1
+ /** @noSelfInFile */
2
+ import { Item } from "../item";
3
+ import { EquipmentSlot } from "../../object-data/auxiliary/equipment-slot";
4
+ import { EquipmentType } from "../../object-data/auxiliary/equipment-type";
5
+ import type { UnitItemContainer } from "./item-container";
6
+ export interface UnitEquipmentInventory extends UnitItemContainer {
7
+ }
8
+ /**
9
+ * A live view of a unit's equipment inventory, indexed by {@link EquipmentSlot}.
10
+ *
11
+ * Equipment slots are typed, so the engine picks the slot itself when equipping: slot assignment frees
12
+ * the requested slot and then equips the item. The only type with two slots is the ring; equipping into
13
+ * ALTERNATE_RING temporarily occupies RING with a filler ring, mirroring the regular inventory's approach.
14
+ */
15
+ export declare class UnitEquipmentInventory {
16
+ constructor(handle: junit);
17
+ equip(item: Item): boolean;
18
+ unequip(item: Item): void;
19
+ unequipSlot(slot: EquipmentSlot): Item | undefined;
20
+ has(item: Item): boolean;
21
+ hasAny(): boolean;
22
+ isSlotEmpty(slot: EquipmentSlot): boolean;
23
+ hasType(type: EquipmentType): boolean;
24
+ canEquipType(type: EquipmentType): boolean;
25
+ findSlot(item: Item): EquipmentSlot | undefined;
26
+ protected __newindex(slot: number, item: Item | undefined): void;
27
+ protected __index(key: string | number): unknown;
28
+ protected __len(): number;
29
+ protected __ipairs(): LuaIterator<LuaMultiReturn<[number, Item | undefined]>, junit>;
30
+ }
31
+ declare module "../unit" {
32
+ interface Unit {
33
+ readonly equipmentInventory: UnitEquipmentInventory;
34
+ }
35
+ namespace Unit {
36
+ const itemEquippedEvent: UnitTriggerEvent<[item: Item]>;
37
+ const itemUnequippedEvent: UnitTriggerEvent<[item: Item]>;
38
+ let itemStackedEvent: UnitTriggerEvent<[
39
+ target: Item,
40
+ source: Item,
41
+ previousTargetCharges: number
42
+ ]>;
43
+ }
44
+ }