warscript 0.0.1-dev.75f6e33 → 0.0.1-dev.7769f27

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 (407) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/core/dummy.lua +4 -2
  4. package/core/types/effect.d.ts +12 -4
  5. package/core/types/effect.lua +67 -104
  6. package/core/types/frame.d.ts +16 -2
  7. package/core/types/frame.lua +141 -77
  8. package/core/types/handle.lua +9 -9
  9. package/core/types/item.d.ts +1 -0
  10. package/core/types/item.lua +1 -0
  11. package/core/types/player.d.ts +18 -1
  12. package/core/types/player.lua +76 -26
  13. package/core/types/playerCamera.d.ts +2 -0
  14. package/core/types/playerCamera.lua +123 -5
  15. package/core/types/playerColor.lua +4 -3
  16. package/core/types/sound.d.ts +18 -26
  17. package/core/types/sound.lua +99 -53
  18. package/core/types/tileCell.d.ts +18 -3
  19. package/core/types/tileCell.lua +108 -0
  20. package/core/types/timer.d.ts +9 -8
  21. package/core/types/timer.lua +45 -23
  22. package/core/types/unit.d.ts +5 -0
  23. package/core/types/unit.lua +5 -0
  24. package/core/util.d.ts +3 -1
  25. package/core/util.lua +109 -3
  26. package/decl/native.d.ts +1718 -964
  27. package/destroyable.d.ts +1 -0
  28. package/destroyable.lua +9 -0
  29. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  30. package/engine/ability-type-extended-tooltip.lua +44 -0
  31. package/engine/behavior.d.ts +14 -1
  32. package/engine/behavior.lua +230 -70
  33. package/engine/behaviour/ability/apply-buff.lua +5 -5
  34. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  35. package/engine/behaviour/ability/damage.d.ts +13 -3
  36. package/engine/behaviour/ability/damage.lua +41 -49
  37. package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
  38. package/engine/behaviour/ability/emulate-impact.lua +23 -7
  39. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  40. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  41. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  42. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  43. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  44. package/engine/behaviour/ability/restore-mana.lua +6 -6
  45. package/engine/behaviour/ability.d.ts +17 -6
  46. package/engine/behaviour/ability.lua +81 -21
  47. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  48. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  49. package/engine/behaviour/unit.d.ts +41 -2
  50. package/engine/behaviour/unit.lua +270 -6
  51. package/engine/buff.d.ts +79 -27
  52. package/engine/buff.lua +454 -186
  53. package/engine/index.d.ts +2 -1
  54. package/engine/internal/ability.d.ts +14 -1
  55. package/engine/internal/ability.lua +113 -44
  56. package/engine/internal/item/ability.lua +63 -11
  57. package/engine/internal/item/fields.d.ts +12 -0
  58. package/engine/internal/item/fields.lua +33 -0
  59. package/engine/internal/item/owner-cache.d.ts +5 -0
  60. package/engine/internal/item/owner-cache.lua +4 -0
  61. package/engine/internal/item+owner.d.ts +2 -0
  62. package/engine/internal/item+owner.lua +37 -8
  63. package/engine/internal/item.d.ts +32 -16
  64. package/engine/internal/item.lua +257 -82
  65. package/engine/internal/mechanics/ability-duration.lua +1 -1
  66. package/engine/internal/mechanics/cast-ability.lua +6 -3
  67. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  68. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  69. package/engine/internal/misc/frame-coordinates.lua +21 -0
  70. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  71. package/engine/internal/misc/get-terrain-z.lua +11 -0
  72. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  73. package/engine/internal/misc/player-local-handle.lua +5 -0
  74. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  75. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  76. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  77. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  78. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  79. package/engine/internal/object-data/health-bonus.lua +16 -0
  80. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  81. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  82. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  83. package/engine/internal/object-data/mana-bonus.lua +16 -0
  84. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  85. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  86. package/engine/internal/unit/ability.d.ts +35 -0
  87. package/engine/internal/unit/ability.lua +98 -9
  88. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  89. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  90. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  91. package/engine/internal/unit/allowed-targets.lua +9 -1
  92. package/engine/internal/unit/appearance.d.ts +15 -0
  93. package/engine/internal/unit/appearance.lua +85 -0
  94. package/engine/internal/unit/attributes.d.ts +17 -0
  95. package/engine/internal/unit/attributes.lua +46 -0
  96. package/engine/internal/unit/bonus.d.ts +14 -0
  97. package/engine/internal/unit/bonus.lua +102 -8
  98. package/engine/internal/unit/buff.d.ts +2 -2
  99. package/engine/internal/unit/buff.lua +34 -19
  100. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  101. package/engine/internal/unit/equipment-inventory.lua +233 -0
  102. package/engine/internal/unit/expiration-timer.lua +1 -1
  103. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  104. package/engine/internal/unit/extended-inventory.lua +99 -0
  105. package/engine/internal/unit/fly-height.d.ts +7 -0
  106. package/engine/internal/unit/fly-height.lua +20 -0
  107. package/engine/internal/unit/ignore-events-items.lua +10 -1
  108. package/engine/internal/unit/interrupts.d.ts +12 -0
  109. package/engine/internal/unit/interrupts.lua +28 -0
  110. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  111. package/engine/internal/unit/inventory.lua +87 -0
  112. package/engine/internal/unit/item-container.d.ts +25 -0
  113. package/engine/internal/unit/item-container.lua +11 -0
  114. package/engine/internal/unit/item-order-events.d.ts +17 -0
  115. package/engine/internal/unit/item-order-events.lua +67 -0
  116. package/engine/internal/unit/item-slot.d.ts +27 -0
  117. package/engine/internal/unit/item-slot.lua +92 -0
  118. package/engine/internal/unit/main-selected.lua +12 -27
  119. package/engine/internal/unit/order.d.ts +20 -0
  120. package/engine/internal/unit/order.lua +136 -0
  121. package/engine/internal/unit/range-event.d.ts +12 -0
  122. package/engine/internal/unit/range-event.lua +90 -0
  123. package/engine/internal/unit/scale.d.ts +7 -0
  124. package/engine/internal/unit/scale.lua +20 -0
  125. package/engine/internal/unit+ability.d.ts +2 -1
  126. package/engine/internal/unit+ability.lua +73 -3
  127. package/engine/internal/unit+bonus.lua +3 -3
  128. package/engine/internal/unit+damage.d.ts +11 -11
  129. package/engine/internal/unit+damage.lua +43 -14
  130. package/engine/internal/unit+rally.lua +9 -31
  131. package/engine/internal/unit+spellSteal.lua +1 -2
  132. package/engine/internal/unit-missile-data.lua +58 -32
  133. package/engine/internal/unit-missile-launch.lua +65 -27
  134. package/engine/internal/unit.d.ts +44 -34
  135. package/engine/internal/unit.lua +398 -324
  136. package/engine/local-client.d.ts +28 -0
  137. package/engine/local-client.lua +324 -54
  138. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  139. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  140. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -2
  141. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  142. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  143. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  144. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  145. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  146. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  147. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  148. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  149. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  150. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  151. package/engine/object-data/auxiliary/item-class.lua +2 -0
  152. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  153. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  154. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  155. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  156. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  157. package/engine/object-data/auxiliary/order-type.lua +2 -0
  158. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  159. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  160. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  161. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  162. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  163. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  164. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  165. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  166. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  167. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  168. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  169. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  170. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  171. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  172. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  173. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  174. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  175. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  176. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  177. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  178. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  179. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  180. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  181. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -0
  182. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  183. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  184. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  185. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  186. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  187. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  188. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  189. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  190. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  191. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  192. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  193. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  194. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  195. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  196. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  197. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  198. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  199. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  200. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  201. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  202. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  203. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  204. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  205. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  206. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  207. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  208. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  209. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  210. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  211. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  212. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  213. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  214. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  215. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  216. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  217. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  218. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  219. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  220. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  221. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  222. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  223. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  224. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  225. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  226. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  227. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  228. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  229. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  230. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  231. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  232. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  233. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  234. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  235. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  236. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  237. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  238. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  239. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  240. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  241. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  242. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  243. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  244. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  245. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  246. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  247. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  248. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  249. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  250. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  251. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  252. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  253. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  254. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  255. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  256. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  257. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  258. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  259. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  260. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  261. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  262. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  263. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  264. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  265. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  266. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  267. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  268. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  269. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  270. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  271. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  272. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  273. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  274. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  275. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  276. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  277. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  278. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  279. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  280. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  281. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  282. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  283. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  284. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  285. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  286. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  287. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  288. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  289. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  290. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  291. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  292. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  293. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  294. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  295. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  296. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  297. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  298. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  299. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  300. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  301. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  302. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  303. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  304. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  305. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  306. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  307. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  308. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  309. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  310. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  311. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  312. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  313. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  314. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  315. package/engine/object-data/entry/ability-type/web.lua +52 -0
  316. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  317. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  318. package/engine/object-data/entry/ability-type.d.ts +40 -15
  319. package/engine/object-data/entry/ability-type.lua +318 -21
  320. package/engine/object-data/entry/buff-type/applicable.lua +113 -104
  321. package/engine/object-data/entry/buff-type.d.ts +10 -12
  322. package/engine/object-data/entry/buff-type.lua +37 -27
  323. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  324. package/engine/object-data/entry/destructible-type.lua +181 -0
  325. package/engine/object-data/entry/item-type.d.ts +18 -3
  326. package/engine/object-data/entry/item-type.lua +84 -0
  327. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  328. package/engine/object-data/entry/lightning-type.lua +1 -1
  329. package/engine/object-data/entry/sound-preset.d.ts +19 -2
  330. package/engine/object-data/entry/sound-preset.lua +104 -0
  331. package/engine/object-data/entry/unit-type.d.ts +64 -6
  332. package/engine/object-data/entry/unit-type.lua +531 -85
  333. package/engine/object-data/entry/upgrade.d.ts +2 -2
  334. package/engine/object-data/entry.d.ts +6 -1
  335. package/engine/object-data/entry.lua +8 -0
  336. package/engine/object-field/ability.d.ts +4 -4
  337. package/engine/object-field/ability.lua +9 -8
  338. package/engine/object-field/item.d.ts +22 -0
  339. package/engine/object-field/item.lua +118 -0
  340. package/engine/object-field/unit.d.ts +72 -3
  341. package/engine/object-field/unit.lua +268 -7
  342. package/engine/object-field.d.ts +26 -7
  343. package/engine/object-field.lua +360 -119
  344. package/engine/random.d.ts +10 -0
  345. package/engine/random.lua +21 -0
  346. package/engine/standard/entries/ability-type.d.ts +3102 -7
  347. package/engine/standard/entries/ability-type.lua +0 -6
  348. package/engine/standard/entries/buff-type.d.ts +48 -0
  349. package/engine/standard/entries/buff-type.lua +46 -0
  350. package/engine/standard/entries/item-type.d.ts +1299 -0
  351. package/engine/standard/entries/item-type.lua +2 -0
  352. package/engine/standard/entries/lightning-type.d.ts +42 -15
  353. package/engine/standard/entries/lightning-type.lua +0 -14
  354. package/engine/standard/entries/unit-type.d.ts +5 -0
  355. package/engine/standard/entries/unit-type.lua +5 -0
  356. package/engine/standard/fields/ability.d.ts +2 -2
  357. package/engine/standard/fields/ability.lua +2 -2
  358. package/engine/standard/fields/item.d.ts +4 -0
  359. package/engine/standard/fields/item.lua +6 -0
  360. package/engine/standard/fields/unit.d.ts +12 -0
  361. package/engine/standard/fields/unit.lua +20 -0
  362. package/engine/synchronization.d.ts +11 -0
  363. package/engine/synchronization.lua +77 -0
  364. package/engine/text-tag.d.ts +36 -2
  365. package/engine/text-tag.lua +250 -10
  366. package/engine/unit.d.ts +11 -1
  367. package/engine/unit.lua +11 -1
  368. package/event.d.ts +1 -1
  369. package/lualib_bundle.lua +1 -1
  370. package/math.d.ts +2 -0
  371. package/math.lua +14 -0
  372. package/net/socket.lua +1 -1
  373. package/network.lua +25 -1
  374. package/objutil/buff.lua +12 -11
  375. package/objutil/object.lua +1 -1
  376. package/operation.d.ts +8 -1
  377. package/operation.lua +38 -18
  378. package/package.json +3 -23
  379. package/patch-lua.lua +15 -0
  380. package/patch-lualib.lua +1 -1
  381. package/utility/arrays.d.ts +9 -1
  382. package/utility/arrays.lua +28 -0
  383. package/utility/callback-array.d.ts +17 -0
  384. package/utility/callback-array.lua +61 -0
  385. package/utility/functions.d.ts +8 -0
  386. package/utility/functions.lua +13 -0
  387. package/utility/linked-map.d.ts +35 -0
  388. package/utility/linked-map.lua +107 -0
  389. package/utility/linked-set.d.ts +5 -1
  390. package/utility/linked-set.lua +49 -1
  391. package/utility/lua-maps.d.ts +15 -2
  392. package/utility/lua-maps.lua +53 -2
  393. package/utility/lua-sets.d.ts +2 -0
  394. package/utility/lua-sets.lua +7 -0
  395. package/utility/random.d.ts +102 -0
  396. package/utility/random.lua +273 -0
  397. package/utility/records.lua +20 -1
  398. package/utility/types.d.ts +3 -0
  399. package/utility/unordered-map.d.ts +27 -0
  400. package/utility/unordered-map.lua +99 -0
  401. package/core/types/order.d.ts +0 -25
  402. package/core/types/order.lua +0 -55
  403. package/engine/internal/unit/item.lua +0 -78
  404. /package/engine/internal/{object-data/armor-increase.d.ts → misc/damage-metadata-by-target.d.ts} +0 -0
  405. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  406. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  407. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -7,10 +7,10 @@ local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__InstanceOf = ____lualib.__TS__InstanceOf
10
11
  local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
12
  local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
13
  local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
13
- local __TS__InstanceOf = ____lualib.__TS__InstanceOf
14
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
15
15
  local Set = ____lualib.Set
16
16
  local __TS__Spread = ____lualib.__TS__Spread
@@ -47,40 +47,44 @@ local checkNotNull = ____preconditions.checkNotNull
47
47
  local ____constants = require("engine.constants")
48
48
  local HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT = ____constants.HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT
49
49
  local MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT = ____constants.MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT
50
- local ____arrays = require("utility.arrays")
51
- local forEach = ____arrays.forEach
52
- local ____math = require("math")
53
- local min = ____math.min
54
50
  local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
- local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
51
+ local isItemIgnoredInEvents = ____ignore_2Devents_2Ditems.isItemIgnoredInEvents
52
+ local ____owner_2Dcache = require("engine.internal.item.owner-cache")
53
+ local ownerByItem = ____owner_2Dcache.ownerByItem
54
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
55
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
56
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
57
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
58
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
59
+ local ____attributes = require("attributes")
60
+ local isAttribute = ____attributes.isAttribute
61
+ local ____ability = require("engine.internal.item.ability")
62
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
63
+ local ____synchronization = require("engine.synchronization")
64
+ local synchronizer = ____synchronization.synchronizer
65
+ local ____linked_2Dmap = require("utility.linked-map")
66
+ local LinkedMap = ____linked_2Dmap.LinkedMap
56
67
  local match = string.match
57
68
  local ____tostring = _G.tostring
58
69
  local setUnitAnimation = SetUnitAnimation
59
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
60
70
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
61
- local queueUnitAnimation = QueueUnitAnimation
62
71
  local getUnitIntegerField = BlzGetUnitIntegerField
63
72
  local getUnitRealField = BlzGetUnitRealField
64
73
  local getHeroStr = GetHeroStr
65
74
  local getHeroAgi = GetHeroAgi
66
75
  local getHeroInt = GetHeroInt
67
- local setHeroStr = SetHeroStr
68
- local setHeroAgi = SetHeroAgi
69
- local setHeroInt = SetHeroInt
70
76
  local getUnitBooleanField = BlzGetUnitBooleanField
71
77
  local getUnitStringField = BlzGetUnitStringField
72
78
  local setUnitIntegerField = BlzSetUnitIntegerField
73
79
  local setUnitRealField = BlzSetUnitRealField
74
80
  local setUnitBooleanField = BlzSetUnitBooleanField
75
81
  local setUnitStringField = BlzSetUnitStringField
76
- local setUnitScale = SetUnitScale
77
82
  local setUnitPosition = SetUnitPosition
78
83
  local setUnitTimeScale = SetUnitTimeScale
79
84
  local getHandleId = GetHandleId
80
85
  local getUnitCurrentOrder = GetUnitCurrentOrder
81
86
  local createUnit = CreateUnit
82
87
  local killUnit = KillUnit
83
- local setUnitExploded = SetUnitExploded
84
88
  local removeUnit = RemoveUnit
85
89
  local getUnitTypeId = GetUnitTypeId
86
90
  local isHeroUnitId = IsHeroUnitId
@@ -96,15 +100,12 @@ local getSpellTargetItem = GetSpellTargetItem
96
100
  local getSpellTargetDestructable = GetSpellTargetDestructable
97
101
  local isUnitInRangeXY = IsUnitInRangeXY
98
102
  local isUnitInRange = IsUnitInRange
99
- local setResourceAmount = SetResourceAmount
100
- local getResourceAmount = GetResourceAmount
101
103
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
102
104
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
103
105
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
104
106
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
105
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
106
108
  local unitDisableAbility = BlzUnitDisableAbility
107
- local unitInterruptAttack = BlzUnitInterruptAttack
108
109
  local isUnitInvisible = IsUnitInvisible
109
110
  local isUnitVisible = IsUnitVisible
110
111
  local getUnitX = GetUnitX
@@ -121,15 +122,9 @@ local getOrderedUnit = GetOrderedUnit
121
122
  local getIssuedOrderId = GetIssuedOrderId
122
123
  local isUnitInvulnerable = BlzIsUnitInvulnerable
123
124
  local unitAlive = UnitAlive
124
- local unitAddType = UnitAddType
125
- local unitRemoveType = UnitRemoveType
126
- local isUnitIllusion = IsUnitIllusion
127
- local isUnitType = IsUnitType
128
125
  local isUnitAlly = IsUnitAlly
129
126
  local isUnitEnemy = IsUnitEnemy
130
127
  local getOwningPlayer = GetOwningPlayer
131
- local setUnitColor = SetUnitColor
132
- local showUnitTeamGlow = BlzShowUnitTeamGlow
133
128
  ____exports.UnitClassification = {}
134
129
  local UnitClassification = ____exports.UnitClassification
135
130
  do
@@ -139,6 +134,7 @@ do
139
134
  UnitClassification.GROUND = UNIT_TYPE_GROUND
140
135
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
141
136
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
137
+ UnitClassification.WORKER = UNIT_TYPE_PEON
142
138
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
143
139
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
144
140
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -346,6 +342,9 @@ local function dispatchAbility(event)
346
342
  }
347
343
  )
348
344
  end
345
+ local function damagingEventPreventRetaliation(self)
346
+ self[0] = true
347
+ end
349
348
  local function damageEventPreventDeath(self, callback, ...)
350
349
  if self[0] ~= nil then
351
350
  return
@@ -357,7 +356,14 @@ local function damageEventPreventDeath(self, callback, ...)
357
356
  rawset(self, 1 + i, (select(i, ...)))
358
357
  end
359
358
  end
360
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
359
+ local damageSetters = {
360
+ amount = BlzSetEventDamage,
361
+ attackType = function(attackType)
362
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
363
+ end,
364
+ damageType = BlzSetEventDamageType,
365
+ weaponType = BlzSetEventWeaponType
366
+ }
361
367
  local jlimitopByOperator = {
362
368
  [0] = LESS_THAN_OR_EQUAL,
363
369
  [1] = LESS_THAN_OR_EQUAL,
@@ -375,15 +381,27 @@ local modifiers = {
375
381
  end,
376
382
  armor = function(unit, value)
377
383
  if UnitAddAbility(unit, armorBonusAbilityId) then
378
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
384
+ assert(
385
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
386
+ "armor bonus ability must be made permanent",
387
+ unit
388
+ )
379
389
  end
380
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
381
- assert(BlzSetAbilityRealLevelField(
382
- ability,
383
- armorBonusField,
384
- 0,
385
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
386
- ))
390
+ local ability = assert(
391
+ BlzGetUnitAbility(unit, armorBonusAbilityId),
392
+ "armor bonus ability must be existing",
393
+ unit
394
+ )
395
+ assert(
396
+ BlzSetAbilityRealLevelField(
397
+ ability,
398
+ armorBonusField,
399
+ 0,
400
+ BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
401
+ ),
402
+ "armor bonus ability field must be set",
403
+ unit
404
+ )
387
405
  end
388
406
  }
389
407
  local getters = {
@@ -401,6 +419,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
401
419
  self.unit = unit
402
420
  self.index = index
403
421
  end
422
+ __TS__SetDescriptor(
423
+ UnitWeapon.prototype,
424
+ "isEnabled",
425
+ {
426
+ get = function(self)
427
+ return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
428
+ end,
429
+ set = function(self, isEnabled)
430
+ BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
431
+ end
432
+ },
433
+ true
434
+ )
404
435
  __TS__SetDescriptor(
405
436
  UnitWeapon.prototype,
406
437
  "cooldown",
@@ -435,6 +466,19 @@ __TS__SetDescriptor(
435
466
  },
436
467
  true
437
468
  )
469
+ __TS__SetDescriptor(
470
+ UnitWeapon.prototype,
471
+ "allowedTargetCombatClassifications",
472
+ {
473
+ get = function(self)
474
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
475
+ end,
476
+ set = function(self, allowedTargetCombatClassifications)
477
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
478
+ end
479
+ },
480
+ true
481
+ )
438
482
  __TS__SetDescriptor(
439
483
  UnitWeapon.prototype,
440
484
  "damageBase",
@@ -546,8 +590,6 @@ __TS__SetDescriptor(
546
590
  },
547
591
  true
548
592
  )
549
- local unitInventorySize = UnitInventorySize
550
- local unitItemInSlot = UnitItemInSlot
551
593
  local getItemAbility = BlzGetItemAbility
552
594
  local getUnitAbility = BlzGetUnitAbility
553
595
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -565,8 +607,8 @@ local function retrieveAbility(unit, ability, abilityId)
565
607
  ____exports.Unit:of(unit)
566
608
  )
567
609
  end
568
- for i = 0, unitInventorySize(unit) - 1 do
569
- local item = unitItemInSlot(unit, i)
610
+ for i = 0, UnitInventorySize(unit) - 1 do
611
+ local item = UnitItemInSlot(unit, i)
570
612
  if getItemAbility(item, abilityId) == ability then
571
613
  return ItemAbility:of(
572
614
  ability,
@@ -611,26 +653,30 @@ local fieldSetters = {
611
653
  }
612
654
  local dummies = {}
613
655
  for ____, player in ipairs(Player.all) do
614
- local dummy = assert(createUnit(
615
- player.handle,
616
- dummyUnitId,
617
- 0,
618
- 0,
619
- 270
620
- ))
656
+ local dummy = assert(
657
+ createUnit(
658
+ player.handle,
659
+ dummyUnitId,
660
+ 0,
661
+ 0,
662
+ 270
663
+ ),
664
+ "dummy must be created",
665
+ player
666
+ )
621
667
  ShowUnit(dummy, false)
622
668
  dummies[player] = dummy
623
669
  end
624
670
  local function delayHealthChecksCallback(unit)
625
- local counter = (unit[103] or 0) - 1
671
+ local counter = (unit[104] or 0) - 1
626
672
  if counter ~= 0 then
627
- unit[103] = counter
673
+ unit[104] = counter
628
674
  return
629
675
  end
630
- unit[103] = nil
631
- local healthBonus = unit[104]
676
+ unit[104] = nil
677
+ local healthBonus = unit[105]
632
678
  if healthBonus ~= nil then
633
- unit[104] = nil
679
+ unit[105] = nil
634
680
  local handle = unit.handle
635
681
  BlzSetUnitMaxHP(
636
682
  handle,
@@ -639,50 +685,78 @@ local function delayHealthChecksCallback(unit)
639
685
  end
640
686
  end
641
687
  local nextSyncId = 1
642
- local unitBySyncId = setmetatable({}, {__mode = "k"})
688
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
689
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
690
+ local function addAbility(unit, abilityTypeId)
691
+ local ____unitAddAbility_result_0
692
+ if unitAddAbility(unit, abilityTypeId) then
693
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
694
+ else
695
+ ____unitAddAbility_result_0 = nil
696
+ end
697
+ return ____unitAddAbility_result_0
698
+ end
643
699
  ____exports.Unit = __TS__Class()
644
700
  local Unit = ____exports.Unit
645
701
  Unit.name = "Unit"
646
702
  __TS__ClassExtends(Unit, Handle)
647
703
  function Unit.prototype.____constructor(self, handle)
648
704
  Handle.prototype.____constructor(self, handle)
649
- local ____nextSyncId_0 = nextSyncId
650
- nextSyncId = ____nextSyncId_0 + 1
651
- self.syncId = ____nextSyncId_0
705
+ local ____nextSyncId_1 = nextSyncId
706
+ nextSyncId = ____nextSyncId_1 + 1
707
+ self.syncId = ____nextSyncId_1
652
708
  self._owner = Player:of(getOwningPlayer(handle))
653
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
654
- assert(unitAddAbility(handle, morphDetectAbilityId))
709
+ assert(
710
+ unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId),
711
+ "leave detection ability must be added",
712
+ self
713
+ )
714
+ assert(
715
+ unitAddAbility(handle, morphDetectAbilityId),
716
+ "morph detection ability must be added",
717
+ self
718
+ )
655
719
  if unitAddAbility(
656
720
  handle,
657
721
  fourCC("Amrf")
658
722
  ) then
659
- assert(unitRemoveAbility(
660
- handle,
661
- fourCC("Amrf")
662
- ))
723
+ assert(
724
+ unitRemoveAbility(
725
+ handle,
726
+ fourCC("Amrf")
727
+ ),
728
+ "fly ability must be removed after addition",
729
+ self
730
+ )
663
731
  end
664
732
  unitBySyncId[self.syncId] = self
665
733
  local ____ = self.abilities
666
734
  end
667
- function Unit.prototype.getEvent(self, event, collector)
668
- self.events = self.events or ({})
669
- local eventId = GetHandleId(event)
670
- if not self.events[eventId] then
671
- self.events[eventId] = __TS__New(
735
+ function Unit.prototype.getEvent(self, jevent, collector)
736
+ self.events = self.events or __TS__New(LinkedMap)
737
+ local eventId = GetHandleId(jevent)
738
+ local event = self.events:get(eventId)
739
+ if event == nil then
740
+ event = __TS__New(
672
741
  TriggerEvent,
673
742
  function(trigger)
674
- TriggerRegisterUnitEvent(trigger, self.handle, event)
743
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
675
744
  end,
676
745
  collector or (function() return {} end)
677
746
  )
747
+ self.events:put(eventId, event)
678
748
  end
679
- return self.events[eventId]
749
+ return event
750
+ end
751
+ function Unit.prototype.saveData(self)
752
+ local handle = self.handle
753
+ self[108] = self[108] or getUnitX(handle)
754
+ self[109] = self[109] or getUnitY(handle)
755
+ self._owner = self._owner or Player:of(getOwningPlayer(handle))
680
756
  end
681
757
  function Unit.prototype.onDestroy(self)
682
758
  local handle = self.handle
683
- if not self._owner then
684
- self._owner = Player:of(getOwningPlayer(handle))
685
- end
759
+ self:saveData()
686
760
  local abilities = self.abilities
687
761
  for ____, ability in ipairs(abilities) do
688
762
  ability:destroy()
@@ -700,7 +774,9 @@ function Unit.prototype.onDestroy(self)
700
774
  end
701
775
  local eventsToDestroy = self._eventsToDestroy
702
776
  if eventsToDestroy ~= nil then
703
- forEach(eventsToDestroy, "destroy")
777
+ for ____, event in ipairs(eventsToDestroy) do
778
+ event:destroy()
779
+ end
704
780
  end
705
781
  if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
706
782
  unitRemoveAbility(handle, leaveDetectAbilityId)
@@ -718,7 +794,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
718
794
  self._attackHandlers = handlers
719
795
  if #handlers == 1 then
720
796
  local handle = self.handle
721
- assert(unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId))
797
+ assert(
798
+ unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
799
+ "attack handler ability must be added",
800
+ self
801
+ )
722
802
  end
723
803
  return handler
724
804
  end
@@ -747,17 +827,17 @@ function Unit.prototype.addModifier(self, property, modifier)
747
827
  end}
748
828
  end
749
829
  function Unit.prototype.hasCombatClassification(self, combatClassification)
750
- local ____combatClassification_1 = combatClassification
751
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
830
+ local ____combatClassification_2 = combatClassification
831
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
752
832
  end
753
833
  function Unit.prototype.addClassification(self, classification)
754
- return unitAddType(self.handle, classification)
834
+ return UnitAddType(self.handle, classification)
755
835
  end
756
836
  function Unit.prototype.removeClassification(self, classification)
757
- return unitRemoveType(self.handle, classification)
837
+ return UnitRemoveType(self.handle, classification)
758
838
  end
759
839
  function Unit.prototype.hasClassification(self, classification)
760
- return isUnitType(self.handle, classification)
840
+ return IsUnitType(self.handle, classification)
761
841
  end
762
842
  function Unit.prototype.isVisibleTo(self, player)
763
843
  return isUnitVisible(self.handle, player.handle)
@@ -766,13 +846,19 @@ function Unit.prototype.isInvisibleTo(self, player)
766
846
  return isUnitInvisible(self.handle, player.handle)
767
847
  end
768
848
  function Unit.prototype.isInRangeOf(self, x, y, range)
769
- local ____temp_2
849
+ local ____temp_4
770
850
  if type(x) == "number" then
771
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
851
+ ____temp_4 = isUnitInRangeXY(self.handle, x, y, range)
772
852
  else
773
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
853
+ local ____temp_3
854
+ if __TS__InstanceOf(x, ____exports.Unit) then
855
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
856
+ else
857
+ ____temp_3 = isUnitInRangeXY(self.handle, x.x, x.y, range)
858
+ end
859
+ ____temp_4 = ____temp_3
774
860
  end
775
- return ____temp_2
861
+ return ____temp_4
776
862
  end
777
863
  function Unit.prototype.isAllyOf(self, unit)
778
864
  return isUnitAlly(
@@ -790,16 +876,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
790
876
  if type(animation) == "number" then
791
877
  setUnitAnimationByIndex(self.handle, animation)
792
878
  elseif rarity then
793
- setUnitAnimationWithRarity(self.handle, animation, rarity)
879
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
794
880
  else
795
881
  setUnitAnimation(self.handle, animation)
796
882
  end
797
883
  end
884
+ function Unit.prototype.resetAnimation(self)
885
+ ResetUnitAnimation(self.handle)
886
+ end
798
887
  function Unit.prototype.queueAnimation(self, animation)
799
- queueUnitAnimation(self.handle, animation)
888
+ QueueUnitAnimation(self.handle, animation)
889
+ end
890
+ function Unit.prototype.chooseWeapon(self, target)
891
+ local firstWeapon = self.firstWeapon
892
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
893
+ return firstWeapon
894
+ end
895
+ local secondWeapon = self.secondWeapon
896
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
897
+ return secondWeapon
898
+ end
899
+ return nil
800
900
  end
801
901
  function Unit.prototype.delayHealthChecks(self)
802
- self[103] = (self[103] or 0) + 1
902
+ self[104] = (self[104] or 0) + 1
803
903
  Timer:run(delayHealthChecksCallback, self)
804
904
  end
805
905
  function Unit.prototype.setPosition(self, x, y)
@@ -809,21 +909,21 @@ function Unit.prototype.isSelected(self, player)
809
909
  return IsUnitSelected(self.handle, player.handle)
810
910
  end
811
911
  function Unit.prototype.explode(self)
812
- setUnitExploded(self.handle, true)
912
+ SetUnitExploded(self.handle, true)
813
913
  killUnit(self.handle)
814
914
  end
815
915
  function Unit.prototype.kill(self)
816
916
  killUnit(self.handle)
817
917
  end
818
918
  function Unit.prototype.revive(self, x, y, doEffect)
819
- local ____ReviveHero_5 = ReviveHero
820
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
821
- local ____doEffect_3 = doEffect
822
- if ____doEffect_3 == nil then
823
- ____doEffect_3 = false
919
+ local ____ReviveHero_7 = ReviveHero
920
+ local ____array_6 = __TS__SparseArrayNew(self.handle, x, y)
921
+ local ____doEffect_5 = doEffect
922
+ if ____doEffect_5 == nil then
923
+ ____doEffect_5 = false
824
924
  end
825
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
826
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
925
+ __TS__SparseArrayPush(____array_6, ____doEffect_5)
926
+ ____ReviveHero_7(__TS__SparseArraySpread(____array_6))
827
927
  end
828
928
  function Unit.prototype.healTarget(self, target, amount)
829
929
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -863,20 +963,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
863
963
  return UnitDropItemSlot(self.handle, item.handle, slot)
864
964
  end
865
965
  function Unit.prototype.itemInSlot(self, slot)
866
- return Item:of(unitItemInSlot(self.handle, slot))
966
+ return Item:of(UnitItemInSlot(self.handle, slot))
867
967
  end
868
968
  function Unit.prototype.addAbility(self, abilityId)
869
- if unitAddAbility(self.handle, abilityId) then
870
- local ability = UnitAbility:of(
871
- checkNotNull(getUnitAbility(self.handle, abilityId)),
872
- abilityId,
873
- self
874
- )
969
+ local ability = UnitAbility:of(
970
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
971
+ abilityId,
972
+ self
973
+ )
974
+ if ability ~= nil then
875
975
  local abilities = self.abilities
876
976
  abilities[#abilities + 1] = ability
877
- return ability
878
977
  end
879
- return nil
978
+ return ability
880
979
  end
881
980
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
882
981
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -890,31 +989,21 @@ end
890
989
  function Unit.prototype.hasAbility(self, abilityId)
891
990
  return getUnitAbilityLevel(self.handle, abilityId) > 0
892
991
  end
893
- function Unit.prototype.getAbilityById(self, abilityId)
894
- local handle = self.handle
895
- if unitAddAbility(handle, abilityId) then
896
- assert(unitRemoveAbility(handle, abilityId))
897
- return nil
898
- end
899
- return UnitAbility:of(
900
- getUnitAbility(self.handle, abilityId),
901
- abilityId,
902
- self
903
- )
992
+ function Unit.prototype.getAbility(self, abilityId)
993
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
994
+ return UnitAbility:of(ability, abilityId, self)
904
995
  end
905
- function Unit.prototype.removeAbility(self, abilityId)
906
- if unitRemoveAbility(self.handle, abilityId) then
907
- local abilities = self.abilities
908
- for i = 1, #abilities do
909
- if abilities[i].typeId == abilityId then
910
- abilities[i]:destroy()
911
- tremove(abilities, i)
912
- return true
913
- end
996
+ function Unit.prototype.removeAbility(self, abilityTypeId)
997
+ local abilities = self.abilities
998
+ for i = 1, #abilities do
999
+ if abilities[i].typeId == abilityTypeId then
1000
+ local ability = abilities[i]
1001
+ tremove(abilities, i)
1002
+ ability:destroy()
1003
+ return true
914
1004
  end
915
- return true
916
1005
  end
917
- return false
1006
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
918
1007
  end
919
1008
  function Unit.prototype.hideAbility(self, abilityId, flag)
920
1009
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -928,9 +1017,6 @@ end
928
1017
  function Unit.prototype.endAbilityCooldown(self, abilityId)
929
1018
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
930
1019
  end
931
- function Unit.prototype.interruptAttack(self)
932
- unitInterruptAttack(self.handle)
933
- end
934
1020
  function Unit.prototype.interruptCast(self, abilityId)
935
1021
  local handle = self.handle
936
1022
  unitDisableAbility(handle, abilityId, true, false)
@@ -1001,18 +1087,44 @@ function Unit.prototype.unpauseEx(self)
1001
1087
  end
1002
1088
  function Unit.prototype.incrementStunCounter(self)
1003
1089
  local stunCounter = self[102] or 0
1004
- if not self[101] or stunCounter >= 0 then
1090
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1005
1091
  BlzPauseUnitEx(self.handle, true)
1006
1092
  end
1007
1093
  self[102] = stunCounter + 1
1008
1094
  end
1009
1095
  function Unit.prototype.decrementStunCounter(self)
1010
1096
  local stunCounter = self[102] or 0
1011
- if not self[101] or stunCounter >= 1 then
1097
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1012
1098
  BlzPauseUnitEx(self.handle, false)
1013
1099
  end
1014
1100
  self[102] = stunCounter - 1
1015
1101
  end
1102
+ function Unit.prototype.incrementForceStunCounter(self)
1103
+ local forceStunCounter = self[103] or 0
1104
+ if forceStunCounter == 0 then
1105
+ local handle = self.handle
1106
+ if not self[101] then
1107
+ for _ = self[102] or 0, -1 do
1108
+ BlzPauseUnitEx(handle, true)
1109
+ end
1110
+ end
1111
+ BlzPauseUnitEx(handle, true)
1112
+ end
1113
+ self[103] = forceStunCounter + 1
1114
+ end
1115
+ function Unit.prototype.decrementForceStunCounter(self)
1116
+ local forceStunCounter = self[103] or 0
1117
+ if forceStunCounter == 1 then
1118
+ local handle = self.handle
1119
+ if not self[101] then
1120
+ for _ = self[102] or 0, -1 do
1121
+ BlzPauseUnitEx(handle, false)
1122
+ end
1123
+ end
1124
+ BlzPauseUnitEx(handle, false)
1125
+ end
1126
+ self[103] = forceStunCounter - 1
1127
+ end
1016
1128
  function Unit.create(self, owner, id, x, y, facing, skinId)
1017
1129
  local handle = skinId and BlzCreateUnitWithSkin(
1018
1130
  owner.handle,
@@ -1201,7 +1313,7 @@ __TS__SetDescriptor(
1201
1313
  Unit.prototype,
1202
1314
  "isIllusion",
1203
1315
  {get = function(self)
1204
- return isUnitIllusion(self.handle)
1316
+ return IsUnitIllusion(self.handle)
1205
1317
  end},
1206
1318
  true
1207
1319
  )
@@ -1209,7 +1321,7 @@ __TS__SetDescriptor(
1209
1321
  Unit.prototype,
1210
1322
  "isStunned",
1211
1323
  {get = function(self)
1212
- return getUnitCurrentOrder(self.handle) == orderId("stunned")
1324
+ return getUnitCurrentOrder(self.handle) == 851973
1213
1325
  end},
1214
1326
  true
1215
1327
  )
@@ -1288,13 +1400,13 @@ __TS__SetDescriptor(
1288
1400
  )
1289
1401
  __TS__SetDescriptor(
1290
1402
  Unit.prototype,
1291
- "strengthBase",
1403
+ "primaryAttribute",
1292
1404
  {
1293
1405
  get = function(self)
1294
- return getHeroStr(self.handle, false)
1406
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1295
1407
  end,
1296
- set = function(self, strengthBase)
1297
- setHeroStr(self.handle, strengthBase, true)
1408
+ set = function(self, primaryAttribute)
1409
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1298
1410
  end
1299
1411
  },
1300
1412
  true
@@ -1316,19 +1428,6 @@ __TS__SetDescriptor(
1316
1428
  end},
1317
1429
  true
1318
1430
  )
1319
- __TS__SetDescriptor(
1320
- Unit.prototype,
1321
- "agilityBase",
1322
- {
1323
- get = function(self)
1324
- return getHeroAgi(self.handle, false)
1325
- end,
1326
- set = function(self, agilityBase)
1327
- setHeroAgi(self.handle, agilityBase, true)
1328
- end
1329
- },
1330
- true
1331
- )
1332
1431
  __TS__SetDescriptor(
1333
1432
  Unit.prototype,
1334
1433
  "agilityBonus",
@@ -1346,19 +1445,6 @@ __TS__SetDescriptor(
1346
1445
  end},
1347
1446
  true
1348
1447
  )
1349
- __TS__SetDescriptor(
1350
- Unit.prototype,
1351
- "intelligenceBase",
1352
- {
1353
- get = function(self)
1354
- return getHeroInt(self.handle, false)
1355
- end,
1356
- set = function(self, intelligenceBase)
1357
- setHeroInt(self.handle, intelligenceBase, true)
1358
- end
1359
- },
1360
- true
1361
- )
1362
1448
  __TS__SetDescriptor(
1363
1449
  Unit.prototype,
1364
1450
  "intelligenceBonus",
@@ -1407,17 +1493,17 @@ __TS__SetDescriptor(
1407
1493
  "isTeamGlowVisible",
1408
1494
  {
1409
1495
  get = function(self)
1410
- return not self[106]
1496
+ return not self[107]
1411
1497
  end,
1412
1498
  set = function(self, isTeamGlowVisible)
1413
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1414
- local ____temp_6
1499
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1500
+ local ____temp_8
1415
1501
  if not isTeamGlowVisible then
1416
- ____temp_6 = true
1502
+ ____temp_8 = true
1417
1503
  else
1418
- ____temp_6 = nil
1504
+ ____temp_8 = nil
1419
1505
  end
1420
- self[106] = ____temp_6
1506
+ self[107] = ____temp_8
1421
1507
  end
1422
1508
  },
1423
1509
  true
@@ -1426,9 +1512,9 @@ __TS__SetDescriptor(
1426
1512
  Unit.prototype,
1427
1513
  "color",
1428
1514
  {set = function(self, color)
1429
- setUnitColor(self.handle, color.handle)
1430
- if self[106] then
1431
- showUnitTeamGlow(self.handle, false)
1515
+ SetUnitColor(self.handle, color.handle)
1516
+ if self[107] then
1517
+ BlzShowUnitTeamGlow(self.handle, false)
1432
1518
  end
1433
1519
  end},
1434
1520
  true
@@ -1451,14 +1537,14 @@ __TS__SetDescriptor(
1451
1537
  "maxHealth",
1452
1538
  {
1453
1539
  get = function(self)
1454
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1540
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1455
1541
  end,
1456
1542
  set = function(self, maxHealth)
1457
- if maxHealth < 1 and self[103] ~= nil then
1458
- self[104] = (self[104] or 0) + (1 - maxHealth)
1543
+ if maxHealth < 1 and self[104] ~= nil then
1544
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1459
1545
  maxHealth = 1
1460
1546
  end
1461
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1547
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1462
1548
  end
1463
1549
  },
1464
1550
  true
@@ -1500,10 +1586,10 @@ __TS__SetDescriptor(
1500
1586
  "health",
1501
1587
  {
1502
1588
  get = function(self)
1503
- return GetWidgetLife(self.handle) - (self[105] or 0)
1589
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1504
1590
  end,
1505
1591
  set = function(self, health)
1506
- SetWidgetLife(self.handle, health + (self[105] or 0))
1592
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1507
1593
  end
1508
1594
  },
1509
1595
  true
@@ -1579,25 +1665,12 @@ __TS__SetDescriptor(
1579
1665
  },
1580
1666
  true
1581
1667
  )
1582
- __TS__SetDescriptor(
1583
- Unit.prototype,
1584
- "flyHeight",
1585
- {
1586
- get = function(self)
1587
- return getUnitFlyHeight(self.handle)
1588
- end,
1589
- set = function(self, v)
1590
- SetUnitFlyHeight(self.handle, v, 100000)
1591
- end
1592
- },
1593
- true
1594
- )
1595
1668
  __TS__SetDescriptor(
1596
1669
  Unit.prototype,
1597
1670
  "x",
1598
1671
  {
1599
1672
  get = function(self)
1600
- return getUnitX(self.handle)
1673
+ return self[108] or getUnitX(self.handle)
1601
1674
  end,
1602
1675
  set = function(self, v)
1603
1676
  SetUnitX(self.handle, v)
@@ -1610,7 +1683,7 @@ __TS__SetDescriptor(
1610
1683
  "y",
1611
1684
  {
1612
1685
  get = function(self)
1613
- return getUnitY(self.handle)
1686
+ return self[109] or getUnitY(self.handle)
1614
1687
  end,
1615
1688
  set = function(self, v)
1616
1689
  SetUnitY(self.handle, v)
@@ -1696,10 +1769,10 @@ __TS__SetDescriptor(
1696
1769
  "gold",
1697
1770
  {
1698
1771
  get = function(self)
1699
- return getResourceAmount(self.handle)
1772
+ return GetResourceAmount(self.handle)
1700
1773
  end,
1701
1774
  set = function(self, gold)
1702
- setResourceAmount(self.handle, gold)
1775
+ SetResourceAmount(self.handle, gold)
1703
1776
  end
1704
1777
  },
1705
1778
  true
@@ -1715,14 +1788,18 @@ __TS__SetDescriptor(
1715
1788
  local handle = self.handle
1716
1789
  if isPaused and not IsUnitPaused(handle) then
1717
1790
  self[101] = true
1718
- for _ = self[102] or 0, -1 do
1719
- BlzPauseUnitEx(handle, true)
1791
+ if (self[103] or 0) <= 0 then
1792
+ for _ = self[102] or 0, -1 do
1793
+ BlzPauseUnitEx(handle, true)
1794
+ end
1720
1795
  end
1721
1796
  PauseUnit(handle, true)
1722
1797
  elseif not isPaused and IsUnitPaused(handle) then
1723
1798
  PauseUnit(handle, false)
1724
- for _ = self[102] or 0, -1 do
1725
- BlzPauseUnitEx(handle, false)
1799
+ if (self[103] or 0) <= 0 then
1800
+ for _ = self[102] or 0, -1 do
1801
+ BlzPauseUnitEx(handle, false)
1802
+ end
1726
1803
  end
1727
1804
  self[101] = nil
1728
1805
  end
@@ -1780,20 +1857,6 @@ __TS__SetDescriptor(
1780
1857
  },
1781
1858
  true
1782
1859
  )
1783
- __TS__SetDescriptor(
1784
- Unit.prototype,
1785
- "scale",
1786
- {
1787
- get = function(self)
1788
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1789
- end,
1790
- set = function(self, v)
1791
- setUnitScale(self.handle, v, v, v)
1792
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1793
- end
1794
- },
1795
- true
1796
- )
1797
1860
  __TS__SetDescriptor(
1798
1861
  Unit.prototype,
1799
1862
  "timeScale",
@@ -1820,13 +1883,26 @@ __TS__SetDescriptor(
1820
1883
  Unit.prototype,
1821
1884
  "pathingCollisionRange",
1822
1885
  {get = function(self)
1823
- return 16 * (min(
1886
+ return 16 * (math.min(
1824
1887
  getUnitCollisionSize(self.handle) // 16,
1825
1888
  3
1826
1889
  ) + 1)
1827
1890
  end},
1828
1891
  true
1829
1892
  )
1893
+ __TS__SetDescriptor(
1894
+ Unit.prototype,
1895
+ "movementType",
1896
+ {
1897
+ get = function(self)
1898
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1899
+ end,
1900
+ set = function(self, movementType)
1901
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1902
+ end
1903
+ },
1904
+ true
1905
+ )
1830
1906
  __TS__SetDescriptor(
1831
1907
  Unit.prototype,
1832
1908
  "pathing",
@@ -1917,30 +1993,6 @@ __TS__SetDescriptor(
1917
1993
  end},
1918
1994
  true
1919
1995
  )
1920
- __TS__SetDescriptor(
1921
- Unit.prototype,
1922
- "onUnitInRange",
1923
- {get = function(self)
1924
- local handle = self.handle
1925
- local onUnitInRange = setmetatable(
1926
- {},
1927
- {__index = function(self, value)
1928
- local event = __TS__New(
1929
- TriggerEvent,
1930
- function(trigger)
1931
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1932
- end,
1933
- function() return ____exports.Unit:of(handle) end
1934
- )
1935
- rawset(self, value, event)
1936
- return event
1937
- end}
1938
- )
1939
- rawset(self, "onUnitInRange", onUnitInRange)
1940
- return onUnitInRange
1941
- end},
1942
- true
1943
- )
1944
1996
  __TS__SetDescriptor(
1945
1997
  Unit.prototype,
1946
1998
  "onManaEqual",
@@ -2008,6 +2060,14 @@ __TS__SetDescriptor(
2008
2060
  end},
2009
2061
  true
2010
2062
  )
2063
+ __TS__SetDescriptor(
2064
+ Unit.prototype,
2065
+ "targetAcquiredEvent",
2066
+ {get = function(self)
2067
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2068
+ end},
2069
+ true
2070
+ )
2011
2071
  __TS__SetDescriptor(
2012
2072
  Unit.prototype,
2013
2073
  "onSelect",
@@ -2068,6 +2128,11 @@ __TS__SetDescriptor(
2068
2128
  end},
2069
2129
  true
2070
2130
  )
2131
+ Unit.levelChangedEvent = __TS__New(
2132
+ ____exports.UnitTriggerEvent,
2133
+ EVENT_PLAYER_HERO_LEVEL,
2134
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2135
+ )
2071
2136
  Unit.deathEvent = __TS__New(
2072
2137
  ____exports.UnitTriggerEvent,
2073
2138
  EVENT_PLAYER_UNIT_DEATH,
@@ -2085,7 +2150,7 @@ Unit.onResurrect = __TS__New(
2085
2150
  ____exports.Unit.deathEvent:addListener(function(unit)
2086
2151
  dead[unit] = true
2087
2152
  end)
2088
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2153
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2089
2154
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2090
2155
  dead[unit] = false
2091
2156
  invoke(event, unit)
@@ -2102,7 +2167,7 @@ Unit.morphEvent = __TS__New(
2102
2167
  invoke(event, unit)
2103
2168
  end
2104
2169
  end
2105
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2170
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2106
2171
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2107
2172
  Timer:run(ifNotLeft, unit)
2108
2173
  end
@@ -2143,25 +2208,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2143
2208
  InitializingEvent,
2144
2209
  function(event)
2145
2210
  local function listener(unit, id)
2146
- local ____GetSpellTargetUnit_result_9
2211
+ local ____GetSpellTargetUnit_result_11
2147
2212
  if GetSpellTargetUnit() then
2148
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2213
+ ____GetSpellTargetUnit_result_11 = ____exports.Unit:of(GetSpellTargetUnit())
2149
2214
  else
2150
- local ____GetSpellTargetItem_result_8
2215
+ local ____GetSpellTargetItem_result_10
2151
2216
  if GetSpellTargetItem() then
2152
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2217
+ ____GetSpellTargetItem_result_10 = Item:of(GetSpellTargetItem())
2153
2218
  else
2154
- local ____GetSpellTargetDestructable_result_7
2219
+ local ____GetSpellTargetDestructable_result_9
2155
2220
  if GetSpellTargetDestructable() then
2156
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2221
+ ____GetSpellTargetDestructable_result_9 = Destructable:of(GetSpellTargetDestructable())
2157
2222
  else
2158
- ____GetSpellTargetDestructable_result_7 = nil
2223
+ ____GetSpellTargetDestructable_result_9 = nil
2159
2224
  end
2160
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2225
+ ____GetSpellTargetItem_result_10 = ____GetSpellTargetDestructable_result_9
2161
2226
  end
2162
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2227
+ ____GetSpellTargetUnit_result_11 = ____GetSpellTargetItem_result_10
2163
2228
  end
2164
- local target = ____GetSpellTargetUnit_result_9
2229
+ local target = ____GetSpellTargetUnit_result_11
2165
2230
  if target then
2166
2231
  invoke(event, unit, id, target)
2167
2232
  end
@@ -2369,38 +2434,57 @@ Unit.onDamaging = (function()
2369
2434
  if source and source.typeId == dummyUnitId then
2370
2435
  source = nil
2371
2436
  end
2372
- local target = BlzGetEventDamageTarget()
2437
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2438
+ local metadata = damageMetadataByTarget[target]
2439
+ damageMetadataByTarget[target] = nil
2373
2440
  local data = {
2374
2441
  amount = GetEventDamage(),
2375
- attackType = BlzGetEventAttackType(),
2442
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2376
2443
  damageType = BlzGetEventDamageType(),
2377
2444
  weaponType = BlzGetEventWeaponType(),
2378
- isAttack = BlzGetEventIsAttack()
2445
+ metadata = metadata,
2446
+ isAttack = BlzGetEventIsAttack(),
2447
+ originalAmount = GetEventDamage(),
2448
+ originalMetadata = metadata,
2449
+ preventRetaliation = damagingEventPreventRetaliation
2379
2450
  }
2380
2451
  if data.isAttack and source then
2381
- local weapon = BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 1) and (BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 0) and -1 or 1) or 0
2382
- if weapon == -1 then
2383
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2384
- weapon = 0
2385
- end
2386
- data.weapon = assert(source.weapons[weapon + 1])
2452
+ data.weapon = source:chooseWeapon(target)
2387
2453
  end
2388
2454
  if not data.isAttack or not source or not source._attackHandlers then
2389
2455
  invoke(
2390
2456
  event,
2391
2457
  source,
2392
- ____exports.Unit:of(target),
2458
+ target,
2393
2459
  setmetatable(
2394
2460
  {},
2395
2461
  {
2396
2462
  __index = data,
2397
2463
  __newindex = function(self, key, value)
2398
- damageSetters[key](value)
2464
+ local damageSetter = damageSetters[key]
2465
+ if damageSetter ~= nil then
2466
+ damageSetter(value)
2467
+ end
2399
2468
  data[key] = value
2400
2469
  end
2401
2470
  }
2402
2471
  )
2403
2472
  )
2473
+ if data[0] and source then
2474
+ local sourceOwner = source.owner.handle
2475
+ data[1] = sourceOwner
2476
+ local targetOwner = target.owner.handle
2477
+ data[2] = targetOwner
2478
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2479
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2480
+ data[3] = true
2481
+ end
2482
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2483
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2484
+ data[4] = true
2485
+ end
2486
+ end
2487
+ damagingEventByTarget[target] = data
2404
2488
  return
2405
2489
  end
2406
2490
  BlzSetEventDamage(0)
@@ -2408,7 +2492,7 @@ Unit.onDamaging = (function()
2408
2492
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2409
2493
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2410
2494
  local sourceOwner = source.owner.handle
2411
- local targetOwner = GetOwningPlayer(target)
2495
+ local targetOwner = target.owner.handle
2412
2496
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2413
2497
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2414
2498
  Timer:run(function()
@@ -2424,23 +2508,19 @@ Unit.onDamaging = (function()
2424
2508
  for ____, ____value in ipairs(source._attackHandlers) do
2425
2509
  local condition = ____value[1]
2426
2510
  local action = ____value[2]
2427
- if condition(
2428
- source,
2429
- ____exports.Unit:of(target),
2430
- data
2431
- ) then
2511
+ if condition(source, target, data) then
2432
2512
  action(
2433
2513
  source,
2434
- ____exports.Unit:of(target),
2514
+ target,
2435
2515
  setmetatable(
2436
2516
  {fire = function()
2437
2517
  UnitDamageTarget(
2438
2518
  source.handle,
2439
- target,
2519
+ target.handle,
2440
2520
  data.amount,
2441
2521
  true,
2442
2522
  true,
2443
- data.attackType,
2523
+ attackTypeToNative(data.attackType),
2444
2524
  data.damageType,
2445
2525
  data.weaponType
2446
2526
  )
@@ -2467,30 +2547,54 @@ Unit.onDamage = __TS__New(
2467
2547
  if source and source.typeId == dummyUnitId then
2468
2548
  source = nil
2469
2549
  end
2550
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2551
+ local damagingEvent = damagingEventByTarget[target]
2552
+ damagingEventByTarget[target] = nil
2470
2553
  local data = {
2471
2554
  amount = GetEventDamage(),
2472
- attackType = BlzGetEventAttackType(),
2555
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2473
2556
  damageType = BlzGetEventDamageType(),
2474
2557
  weaponType = BlzGetEventWeaponType(),
2558
+ metadata = damagingEvent and damagingEvent.metadata,
2475
2559
  isAttack = BlzGetEventIsAttack(),
2476
- originalAmount = GetEventDamage(),
2560
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2561
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2477
2562
  preventDeath = damageEventPreventDeath
2478
2563
  }
2564
+ if damagingEvent then
2565
+ for key, value in pairs(damagingEvent) do
2566
+ if isAttribute(key) then
2567
+ data[key] = value
2568
+ end
2569
+ end
2570
+ local sourceOwner = damagingEvent[1]
2571
+ if sourceOwner then
2572
+ local targetOwner = damagingEvent[2]
2573
+ if damagingEvent[3] then
2574
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2575
+ end
2576
+ if damagingEvent[4] then
2577
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2578
+ end
2579
+ end
2580
+ end
2479
2581
  local evData = setmetatable(
2480
2582
  {},
2481
2583
  {
2482
2584
  __index = data,
2483
2585
  __newindex = function(self, key, value)
2484
- damageSetters[key](value)
2586
+ local damageSetter = damageSetters[key]
2587
+ if damageSetter ~= nil then
2588
+ damageSetter(value)
2589
+ end
2485
2590
  data[key] = value
2486
2591
  end
2487
2592
  }
2488
2593
  )
2489
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2490
2594
  invoke(event, source, target, evData)
2491
2595
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2492
2596
  local bonusHealth = math.ceil(evData.amount)
2493
- target[105] = (target[105] or 0) + bonusHealth
2597
+ target[106] = (target[106] or 0) + bonusHealth
2494
2598
  BlzSetUnitMaxHP(
2495
2599
  target.handle,
2496
2600
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2504,7 +2608,7 @@ Unit.onDamage = __TS__New(
2504
2608
  evData[0],
2505
2609
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2506
2610
  )
2507
- target[105] = (target[105] or 0) - bonusHealth
2611
+ target[106] = (target[106] or 0) - bonusHealth
2508
2612
  SetWidgetLife(
2509
2613
  target.handle,
2510
2614
  GetWidgetLife(target.handle) - bonusHealth
@@ -2530,7 +2634,7 @@ Unit.itemDroppedEvent = __TS__New(
2530
2634
  function()
2531
2635
  local unit = getTriggerUnit()
2532
2636
  local item = getManipulatedItem()
2533
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2637
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2534
2638
  return ____exports.Unit:of(unit), Item:of(item)
2535
2639
  end
2536
2640
  return IgnoreEvent
@@ -2540,10 +2644,14 @@ Unit.itemPickedUpEvent = __TS__New(
2540
2644
  ____exports.UnitTriggerEvent,
2541
2645
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2542
2646
  function()
2543
- local unit = getTriggerUnit()
2544
- local item = getManipulatedItem()
2545
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2546
- return ____exports.Unit:of(unit), Item:of(item)
2647
+ local unitHandle = getTriggerUnit()
2648
+ local itemHandle = getManipulatedItem()
2649
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not isItemIgnoredInEvents(itemHandle) then
2650
+ local unit = ____exports.Unit:of(unitHandle)
2651
+ local item = Item:of(itemHandle)
2652
+ if ownerByItem[item] ~= unit then
2653
+ return unit, item
2654
+ end
2547
2655
  end
2548
2656
  return IgnoreEvent
2549
2657
  end
@@ -2554,59 +2662,24 @@ Unit.itemUsedEvent = __TS__New(
2554
2662
  function()
2555
2663
  local unit = getTriggerUnit()
2556
2664
  local item = getManipulatedItem()
2557
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2665
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2558
2666
  return ____exports.Unit:of(unit), Item:of(item)
2559
2667
  end
2560
2668
  return IgnoreEvent
2561
2669
  end
2562
2670
  )
2563
- Unit.itemStackedEvent = __TS__New(
2564
- ____exports.UnitTriggerEvent,
2565
- EVENT_PLAYER_UNIT_STACK_ITEM,
2566
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2567
- )
2568
2671
  __TS__ObjectDefineProperty(
2569
2672
  Unit,
2570
- "itemUseOrderEvent",
2673
+ "itemChargesChangedEvent",
2571
2674
  {get = function(self)
2572
2675
  local event = __TS__New(Event)
2573
- for order = orderId("useslot0"), orderId("useslot5") do
2574
- local slot = order - orderId("useslot0")
2575
- local function listener(unit)
2576
- local item = unit.items[slot + 1]
2577
- if item ~= nil then
2578
- invoke(event, unit, item)
2579
- end
2676
+ Item.chargesChangedEvent:addListener(function(item)
2677
+ local unit = item.owner
2678
+ if unit ~= nil then
2679
+ invoke(event, unit, item)
2580
2680
  end
2581
- self.onImmediateOrder[order]:addListener(listener)
2582
- self.onTargetOrder[order]:addListener(listener)
2583
- self.onPointOrder[order]:addListener(listener)
2584
- end
2585
- rawset(self, "itemUseOrderEvent", event)
2586
- return event
2587
- end}
2588
- )
2589
- __TS__ObjectDefineProperty(
2590
- Unit,
2591
- "itemMoveOrderEvent",
2592
- {get = function(self)
2593
- local event = __TS__New(Event)
2594
- for order = orderId("moveslot0"), orderId("moveslot5") do
2595
- local slotTo = order - orderId("moveslot0")
2596
- self.onTargetOrder[order]:addListener(function(unit, item)
2597
- local slotFrom = unit.items:findSlot(item)
2598
- if slotFrom ~= nil then
2599
- invoke(
2600
- event,
2601
- unit,
2602
- item,
2603
- slotFrom,
2604
- slotTo
2605
- )
2606
- end
2607
- end)
2608
- end
2609
- rawset(self, "itemMoveOrderEvent", event)
2681
+ end)
2682
+ rawset(self, "itemChargesChangedEvent", event)
2610
2683
  return event
2611
2684
  end}
2612
2685
  )
@@ -2635,6 +2708,10 @@ __TS__ObjectDefineProperty(
2635
2708
  rawset(self, "destroyEvent", destroyEvent)
2636
2709
  return destroyEvent
2637
2710
  end}
2711
+ )
2712
+ Unit.synchronize = synchronizer(
2713
+ function(unit) return unit.syncId end,
2714
+ function(syncId) return unitBySyncId[syncId] end
2638
2715
  );
2639
2716
  (function(self)
2640
2717
  local leaveAbilityIds = postcompile(function()
@@ -2652,11 +2729,7 @@ __TS__ObjectDefineProperty(
2652
2729
  function(____, id) return fourCC(id) end
2653
2730
  )
2654
2731
  end)
2655
- for ____, leaveOrderId in ipairs({
2656
- orderId("undefend"),
2657
- orderId("magicundefense"),
2658
- orderId("unimmolation")
2659
- }) do
2732
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2660
2733
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2661
2734
  local handle = unit.handle
2662
2735
  for i = 1, #leaveAbilityIds do
@@ -2664,7 +2737,8 @@ __TS__ObjectDefineProperty(
2664
2737
  return
2665
2738
  end
2666
2739
  end
2667
- unit:destroy()
2740
+ unit:saveData()
2741
+ Timer:run(unit, "destroy")
2668
2742
  end)
2669
2743
  end
2670
2744
  end)(Unit)