warscript 0.0.1-dev.2af030d → 0.0.1-dev.2b3f95e

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 (500) hide show
  1. package/attributes.d.ts +6 -1
  2. package/attributes.lua +17 -1
  3. package/binaryreader.d.ts +1 -0
  4. package/binaryreader.lua +3 -0
  5. package/config.d.ts +5 -0
  6. package/config.lua +10 -0
  7. package/core/dummy.lua +4 -2
  8. package/core/types/effect.d.ts +24 -6
  9. package/core/types/effect.lua +169 -107
  10. package/core/types/frame.d.ts +29 -3
  11. package/core/types/frame.lua +222 -52
  12. package/core/types/group.d.ts +0 -1
  13. package/core/types/handle.lua +9 -9
  14. package/core/types/image.d.ts +0 -1
  15. package/core/types/item.d.ts +1 -0
  16. package/core/types/item.lua +1 -0
  17. package/core/types/missile.d.ts +2 -2
  18. package/core/types/missile.lua +14 -13
  19. package/core/types/player.d.ts +18 -1
  20. package/core/types/player.lua +76 -26
  21. package/core/types/playerCamera.d.ts +2 -0
  22. package/core/types/playerCamera.lua +123 -5
  23. package/core/types/playerColor.lua +4 -3
  24. package/core/types/sound.d.ts +18 -25
  25. package/core/types/sound.lua +113 -33
  26. package/core/types/tileCell.d.ts +18 -3
  27. package/core/types/tileCell.lua +108 -0
  28. package/core/types/timer.d.ts +9 -8
  29. package/core/types/timer.lua +45 -23
  30. package/core/types/unit.d.ts +5 -0
  31. package/core/types/unit.lua +13 -0
  32. package/core/util.d.ts +3 -1
  33. package/core/util.lua +127 -4
  34. package/decl/index.d.ts +1 -0
  35. package/decl/native.d.ts +1719 -964
  36. package/destroyable.d.ts +1 -0
  37. package/destroyable.lua +9 -0
  38. package/engine/ability-type-extended-tooltip.d.ts +8 -0
  39. package/engine/ability-type-extended-tooltip.lua +44 -0
  40. package/engine/ability.d.ts +1 -1
  41. package/engine/behavior.d.ts +24 -11
  42. package/engine/behavior.lua +233 -73
  43. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  44. package/engine/behaviour/ability/always-enabled.lua +31 -0
  45. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  46. package/engine/behaviour/ability/apply-buff.lua +36 -4
  47. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  48. package/engine/behaviour/ability/apply-unit-behavior.lua +6 -0
  49. package/engine/behaviour/ability/damage.d.ts +44 -11
  50. package/engine/behaviour/ability/damage.lua +89 -39
  51. package/engine/behaviour/ability/emulate-impact.d.ts +20 -0
  52. package/engine/behaviour/ability/emulate-impact.lua +117 -0
  53. package/engine/behaviour/ability/heal.d.ts +33 -6
  54. package/engine/behaviour/ability/heal.lua +89 -10
  55. package/engine/behaviour/ability/instant-impact.d.ts +14 -3
  56. package/engine/behaviour/ability/instant-impact.lua +20 -16
  57. package/engine/behaviour/ability/on-command-impact.d.ts +9 -0
  58. package/engine/behaviour/ability/on-command-impact.lua +26 -0
  59. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  60. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  61. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  62. package/engine/behaviour/ability/restore-mana.lua +29 -0
  63. package/engine/behaviour/ability.d.ts +43 -7
  64. package/engine/behaviour/ability.lua +264 -27
  65. package/engine/behaviour/unit/stun-immunity.d.ts +12 -7
  66. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  67. package/engine/behaviour/unit.d.ts +49 -4
  68. package/engine/behaviour/unit.lua +293 -2
  69. package/engine/buff.d.ts +189 -59
  70. package/engine/buff.lua +852 -281
  71. package/engine/game-map.d.ts +7 -0
  72. package/engine/game-map.lua +32 -0
  73. package/engine/index.d.ts +2 -1
  74. package/engine/internal/ability.d.ts +30 -14
  75. package/engine/internal/ability.lua +177 -104
  76. package/engine/internal/item/ability.lua +162 -4
  77. package/engine/internal/item/fields.d.ts +12 -0
  78. package/engine/internal/item/fields.lua +33 -0
  79. package/engine/internal/item/owner-cache.d.ts +5 -0
  80. package/engine/internal/item/owner-cache.lua +4 -0
  81. package/engine/internal/item+owner.d.ts +2 -0
  82. package/engine/internal/item+owner.lua +37 -8
  83. package/engine/internal/item.d.ts +34 -18
  84. package/engine/internal/item.lua +308 -102
  85. package/engine/internal/mechanics/ability-duration.lua +1 -1
  86. package/engine/internal/mechanics/cast-ability.lua +6 -3
  87. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  88. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  89. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  90. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  91. package/engine/internal/misc/frame-coordinates.lua +21 -0
  92. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  93. package/engine/internal/misc/get-terrain-z.lua +11 -0
  94. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  95. package/engine/internal/misc/player-local-handle.lua +5 -0
  96. package/engine/internal/misc/unit-ability-level-natives.d.ts +2 -0
  97. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  98. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  99. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  100. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  101. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  102. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  103. package/engine/internal/object-data/evasion-probability.lua +16 -0
  104. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  105. package/engine/internal/object-data/health-bonus.lua +16 -0
  106. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  107. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  108. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  109. package/engine/internal/object-data/mana-bonus.lua +16 -0
  110. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  111. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  112. package/engine/internal/object-data/returned-melee-damage-factor.d.ts +2 -0
  113. package/engine/internal/object-data/returned-melee-damage-factor.lua +21 -0
  114. package/engine/internal/unit/ability.d.ts +45 -1
  115. package/engine/internal/unit/ability.lua +144 -17
  116. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  117. package/engine/internal/unit/add-item-to-slot-init.lua +12 -0
  118. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  119. package/engine/internal/unit/add-item-to-slot.lua +93 -0
  120. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  121. package/engine/internal/unit/allowed-targets.lua +9 -1
  122. package/engine/internal/unit/appearance.d.ts +15 -0
  123. package/engine/internal/unit/appearance.lua +85 -0
  124. package/engine/internal/unit/attributes.d.ts +17 -0
  125. package/engine/internal/unit/attributes.lua +46 -0
  126. package/engine/internal/unit/bonus.d.ts +28 -8
  127. package/engine/internal/unit/bonus.lua +136 -9
  128. package/engine/internal/unit/buff.d.ts +2 -2
  129. package/engine/internal/unit/buff.lua +34 -19
  130. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  131. package/engine/internal/unit/equipment-inventory.lua +233 -0
  132. package/engine/internal/unit/expiration-timer.lua +1 -1
  133. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  134. package/engine/internal/unit/extended-inventory.lua +99 -0
  135. package/engine/internal/unit/fly-height.d.ts +7 -0
  136. package/engine/internal/unit/fly-height.lua +20 -0
  137. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  138. package/engine/internal/unit/ignore-events-items.lua +14 -0
  139. package/engine/internal/unit/interrupts.d.ts +12 -0
  140. package/engine/internal/unit/interrupts.lua +28 -0
  141. package/engine/internal/unit/inventory.d.ts +28 -0
  142. package/engine/internal/unit/inventory.lua +87 -0
  143. package/engine/internal/unit/item-container.d.ts +25 -0
  144. package/engine/internal/unit/item-container.lua +11 -0
  145. package/engine/internal/unit/item-order-events.d.ts +17 -0
  146. package/engine/internal/unit/item-order-events.lua +67 -0
  147. package/engine/internal/unit/item-slot.d.ts +27 -0
  148. package/engine/internal/unit/item-slot.lua +92 -0
  149. package/engine/internal/unit/main-selected.d.ts +13 -0
  150. package/engine/internal/unit/main-selected.lua +36 -0
  151. package/engine/internal/unit/order.d.ts +20 -0
  152. package/engine/internal/unit/order.lua +136 -0
  153. package/engine/internal/unit/range-event.d.ts +12 -0
  154. package/engine/internal/unit/range-event.lua +90 -0
  155. package/engine/internal/unit/scale.d.ts +7 -0
  156. package/engine/internal/unit/scale.lua +20 -0
  157. package/engine/internal/unit/shared-vision-counter.d.ts +18 -0
  158. package/engine/internal/unit/shared-vision-counter.lua +31 -0
  159. package/engine/internal/unit+ability.d.ts +2 -1
  160. package/engine/internal/unit+ability.lua +85 -5
  161. package/engine/internal/unit+bonus.lua +3 -3
  162. package/engine/internal/unit+damage.d.ts +12 -38
  163. package/engine/internal/unit+damage.lua +48 -45
  164. package/engine/internal/unit+rally.lua +9 -31
  165. package/engine/internal/unit+spellSteal.lua +1 -2
  166. package/engine/internal/unit+transport.lua +4 -10
  167. package/engine/internal/unit-missile-data.lua +96 -68
  168. package/engine/internal/unit-missile-launch.lua +74 -13
  169. package/engine/internal/unit.d.ts +67 -35
  170. package/engine/internal/unit.lua +508 -308
  171. package/engine/internal/utility.lua +12 -0
  172. package/engine/lightning.d.ts +12 -5
  173. package/engine/lightning.lua +52 -18
  174. package/engine/local-client.d.ts +35 -2
  175. package/engine/local-client.lua +367 -15
  176. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  177. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  178. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  179. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  180. package/engine/object-data/auxiliary/attachment-preset.d.ts +14 -3
  181. package/engine/object-data/auxiliary/attachment-preset.lua +11 -3
  182. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  183. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  184. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  185. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  186. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  187. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  188. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  189. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  190. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  191. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  192. package/engine/object-data/auxiliary/item-class.lua +2 -0
  193. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  194. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  195. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  196. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  197. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  198. package/engine/object-data/auxiliary/order-type.lua +2 -0
  199. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  200. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  201. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  202. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  203. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  204. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  205. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  206. package/engine/object-data/auxiliary/weapon-sound-type.d.ts +20 -14
  207. package/engine/object-data/auxiliary/weapon-sound-type.lua +58 -0
  208. package/engine/object-data/auxiliary/weapon-type.d.ts +25 -0
  209. package/engine/object-data/auxiliary/weapon-type.lua +2 -0
  210. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  211. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  212. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  213. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  214. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  215. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  216. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  217. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  218. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  219. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  220. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  221. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  222. package/engine/object-data/entry/ability-type/barrage.d.ts +12 -0
  223. package/engine/object-data/entry/ability-type/barrage.lua +52 -0
  224. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  225. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  226. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  227. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  228. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  229. package/engine/object-data/entry/ability-type/blank-configurable.lua +14 -3
  230. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.d.ts +23 -0
  231. package/engine/object-data/entry/ability-type/blank-passive-with-cooldown.lua +112 -0
  232. package/engine/object-data/entry/ability-type/blank-passive.d.ts +4 -1
  233. package/engine/object-data/entry/ability-type/blank-passive.lua +27 -7
  234. package/engine/object-data/entry/ability-type/breath-of-fire.d.ts +11 -0
  235. package/engine/object-data/entry/ability-type/breath-of-fire.lua +27 -0
  236. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  237. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  238. package/engine/object-data/entry/ability-type/channel.d.ts +2 -3
  239. package/engine/object-data/entry/ability-type/channel.lua +3 -3
  240. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  241. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  242. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  243. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  244. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  245. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  246. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  247. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  248. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  249. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  250. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  251. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  252. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  253. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  254. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  255. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  256. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  257. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  258. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  259. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  260. package/engine/object-data/entry/ability-type/exhume-corpses.d.ts +14 -0
  261. package/engine/object-data/entry/ability-type/exhume-corpses.lua +40 -0
  262. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  263. package/engine/object-data/entry/ability-type/firebolt.d.ts +7 -0
  264. package/engine/object-data/entry/ability-type/firebolt.lua +13 -0
  265. package/engine/object-data/entry/ability-type/flame-strike.d.ts +25 -0
  266. package/engine/object-data/entry/ability-type/flame-strike.lua +92 -0
  267. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  268. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  269. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  270. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  271. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  272. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  273. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  274. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  275. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  276. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  277. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  278. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  279. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  280. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  281. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  282. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  283. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  284. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  285. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  286. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  287. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  288. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  289. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  290. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  291. package/engine/object-data/entry/ability-type/life-drain.d.ts +37 -0
  292. package/engine/object-data/entry/ability-type/life-drain.lua +144 -0
  293. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  294. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  295. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  296. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  297. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  298. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  299. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  300. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  301. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  302. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  303. package/engine/object-data/entry/ability-type/mine.d.ts +10 -0
  304. package/engine/object-data/entry/ability-type/mine.lua +39 -0
  305. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  306. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  307. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  308. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  309. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  310. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  311. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  312. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  313. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  314. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  315. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  316. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  317. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  318. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  319. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  320. package/engine/object-data/entry/ability-type/rain-of-fire.d.ts +7 -0
  321. package/engine/object-data/entry/ability-type/rain-of-fire.lua +13 -0
  322. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  323. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  324. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  325. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  326. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  327. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  328. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  329. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  330. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  331. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  332. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  333. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  334. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  335. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  336. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  337. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  338. package/engine/object-data/entry/ability-type/soul-burn.d.ts +22 -0
  339. package/engine/object-data/entry/ability-type/soul-burn.lua +79 -0
  340. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  341. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  342. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  343. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  344. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  345. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  346. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  347. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  348. package/engine/object-data/entry/ability-type/spirit-touch.d.ts +2 -2
  349. package/engine/object-data/entry/ability-type/spirit-touch.lua +6 -6
  350. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  351. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  352. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  353. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  354. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  355. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  356. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  357. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  358. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  359. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  360. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  361. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  362. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  363. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  364. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  365. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  366. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  367. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  368. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  369. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  370. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  371. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  372. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  373. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  374. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  375. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  376. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  377. package/engine/object-data/entry/ability-type/web.lua +52 -0
  378. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  379. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  380. package/engine/object-data/entry/ability-type.d.ts +50 -22
  381. package/engine/object-data/entry/ability-type.lua +392 -47
  382. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  383. package/engine/object-data/entry/buff-type/applicable.lua +131 -139
  384. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  385. package/engine/object-data/entry/buff-type.d.ts +10 -13
  386. package/engine/object-data/entry/buff-type.lua +39 -29
  387. package/engine/object-data/entry/destructible-type.d.ts +32 -3
  388. package/engine/object-data/entry/destructible-type.lua +181 -0
  389. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  390. package/engine/object-data/entry/item-type.d.ts +32 -4
  391. package/engine/object-data/entry/item-type.lua +177 -2
  392. package/engine/object-data/entry/lightning-type.d.ts +6 -9
  393. package/engine/object-data/entry/lightning-type.lua +1 -1
  394. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  395. package/engine/object-data/entry/sound-preset.lua +140 -0
  396. package/engine/object-data/entry/unit-type.d.ts +81 -7
  397. package/engine/object-data/entry/unit-type.lua +619 -99
  398. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  399. package/engine/object-data/entry/upgrade.d.ts +2 -3
  400. package/engine/object-data/entry/upgrade.lua +4 -4
  401. package/engine/object-data/entry.d.ts +23 -17
  402. package/engine/object-data/entry.lua +68 -32
  403. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  404. package/engine/object-field/ability.d.ts +28 -5
  405. package/engine/object-field/ability.lua +61 -7
  406. package/engine/object-field/item.d.ts +22 -0
  407. package/engine/object-field/item.lua +118 -0
  408. package/engine/object-field/unit.d.ts +72 -3
  409. package/engine/object-field/unit.lua +268 -7
  410. package/engine/object-field.d.ts +26 -8
  411. package/engine/object-field.lua +362 -117
  412. package/engine/random.d.ts +11 -0
  413. package/engine/random.lua +30 -0
  414. package/engine/standard/entries/ability-type.d.ts +3102 -7
  415. package/engine/standard/entries/ability-type.lua +0 -6
  416. package/engine/standard/entries/buff-type.d.ts +48 -0
  417. package/engine/standard/entries/buff-type.lua +46 -0
  418. package/engine/standard/entries/item-type.d.ts +1299 -0
  419. package/engine/standard/entries/item-type.lua +2 -0
  420. package/engine/standard/entries/lightning-type.d.ts +42 -15
  421. package/engine/standard/entries/lightning-type.lua +0 -14
  422. package/engine/standard/entries/sound-preset.d.ts +10 -0
  423. package/engine/standard/entries/sound-preset.lua +10 -0
  424. package/engine/standard/entries/unit-type.d.ts +23 -0
  425. package/engine/standard/entries/unit-type.lua +23 -0
  426. package/engine/standard/fields/ability.d.ts +7 -5
  427. package/engine/standard/fields/ability.lua +7 -5
  428. package/engine/standard/fields/item.d.ts +4 -0
  429. package/engine/standard/fields/item.lua +6 -0
  430. package/engine/standard/fields/unit.d.ts +12 -0
  431. package/engine/standard/fields/unit.lua +20 -0
  432. package/engine/synchronization.d.ts +11 -0
  433. package/engine/synchronization.lua +77 -0
  434. package/engine/text-tag.d.ts +48 -2
  435. package/engine/text-tag.lua +287 -10
  436. package/engine/unit.d.ts +14 -0
  437. package/engine/unit.lua +23 -2
  438. package/event.d.ts +3 -4
  439. package/event.lua +9 -5
  440. package/index.d.ts +1 -0
  441. package/index.lua +1 -0
  442. package/lualib_bundle.lua +147 -43
  443. package/math/vec2.d.ts +2 -9
  444. package/math.d.ts +2 -2
  445. package/math.lua +14 -0
  446. package/net/socket.d.ts +7 -1
  447. package/net/socket.lua +45 -4
  448. package/network.d.ts +1 -0
  449. package/network.lua +28 -3
  450. package/objutil/ability.d.ts +0 -1
  451. package/objutil/buff.d.ts +0 -1
  452. package/objutil/buff.lua +13 -12
  453. package/objutil/object.d.ts +0 -1
  454. package/objutil/object.lua +1 -1
  455. package/objutil/unit.d.ts +0 -1
  456. package/objutil/unit.lua +8 -0
  457. package/operation.d.ts +8 -1
  458. package/operation.lua +38 -18
  459. package/package.json +3 -23
  460. package/patch-lua.d.ts +0 -0
  461. package/patch-lua.lua +25 -0
  462. package/patch-lualib.lua +1 -1
  463. package/patch-natives.lua +3 -0
  464. package/property.d.ts +55 -0
  465. package/property.lua +374 -0
  466. package/string.d.ts +16 -0
  467. package/string.lua +5 -0
  468. package/util/stream.d.ts +0 -1
  469. package/utility/arrays.d.ts +20 -6
  470. package/utility/arrays.lua +62 -3
  471. package/utility/bit-set.d.ts +0 -2
  472. package/utility/callback-array.d.ts +17 -0
  473. package/utility/callback-array.lua +61 -0
  474. package/utility/functions.d.ts +8 -0
  475. package/utility/functions.lua +13 -0
  476. package/utility/lazy.d.ts +2 -0
  477. package/utility/lazy.lua +14 -0
  478. package/utility/linked-map.d.ts +35 -0
  479. package/utility/linked-map.lua +107 -0
  480. package/utility/linked-set.d.ts +16 -4
  481. package/utility/linked-set.lua +54 -3
  482. package/utility/lua-maps.d.ts +16 -4
  483. package/utility/lua-maps.lua +53 -2
  484. package/utility/lua-sets.d.ts +3 -2
  485. package/utility/lua-sets.lua +7 -0
  486. package/utility/random.d.ts +102 -0
  487. package/utility/random.lua +273 -0
  488. package/utility/records.lua +20 -1
  489. package/utility/reflection.lua +11 -7
  490. package/utility/types.d.ts +4 -0
  491. package/utility/unordered-map.d.ts +27 -0
  492. package/utility/unordered-map.lua +99 -0
  493. package/core/mapbounds.d.ts +0 -8
  494. package/core/mapbounds.lua +0 -12
  495. package/core/types/order.d.ts +0 -25
  496. package/core/types/order.lua +0 -55
  497. /package/engine/internal/{object-data/armor-increase.d.ts → misc/ability-disable-counter.d.ts} +0 -0
  498. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  499. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  500. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -8,6 +8,9 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
10
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
11
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
12
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
13
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
13
16
  local __TS__Spread = ____lualib.__TS__Spread
@@ -44,37 +47,47 @@ local checkNotNull = ____preconditions.checkNotNull
44
47
  local ____constants = require("engine.constants")
45
48
  local HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT = ____constants.HEALTH_REGENERATION_RATE_BONUS_PER_STRENGTH_POINT
46
49
  local MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT = ____constants.MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT
47
- local ____arrays = require("utility.arrays")
48
- local forEach = ____arrays.forEach
49
- local ____math = require("math")
50
- local min = ____math.min
50
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
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 ____weapon_2Dsound_2Dtype = require("engine.object-data.auxiliary.weapon-sound-type")
55
+ local nativeToWeaponSoundType = ____weapon_2Dsound_2Dtype.nativeToWeaponSoundType
56
+ local weaponSoundTypeToNative = ____weapon_2Dsound_2Dtype.weaponSoundTypeToNative
57
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
58
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
59
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
60
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
61
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
62
+ local ____attributes = require("attributes")
63
+ local isAttribute = ____attributes.isAttribute
64
+ local ____ability = require("engine.internal.item.ability")
65
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
66
+ local ____synchronization = require("engine.synchronization")
67
+ local synchronizer = ____synchronization.synchronizer
68
+ local ____linked_2Dmap = require("utility.linked-map")
69
+ local LinkedMap = ____linked_2Dmap.LinkedMap
51
70
  local match = string.match
52
71
  local ____tostring = _G.tostring
53
72
  local setUnitAnimation = SetUnitAnimation
54
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
55
73
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
56
- local queueUnitAnimation = QueueUnitAnimation
57
74
  local getUnitIntegerField = BlzGetUnitIntegerField
58
75
  local getUnitRealField = BlzGetUnitRealField
59
76
  local getHeroStr = GetHeroStr
60
77
  local getHeroAgi = GetHeroAgi
61
78
  local getHeroInt = GetHeroInt
62
- local setHeroStr = SetHeroStr
63
- local setHeroAgi = SetHeroAgi
64
- local setHeroInt = SetHeroInt
65
79
  local getUnitBooleanField = BlzGetUnitBooleanField
66
80
  local getUnitStringField = BlzGetUnitStringField
67
81
  local setUnitIntegerField = BlzSetUnitIntegerField
68
82
  local setUnitRealField = BlzSetUnitRealField
69
83
  local setUnitBooleanField = BlzSetUnitBooleanField
70
84
  local setUnitStringField = BlzSetUnitStringField
71
- local setUnitScale = SetUnitScale
72
85
  local setUnitPosition = SetUnitPosition
73
86
  local setUnitTimeScale = SetUnitTimeScale
74
87
  local getHandleId = GetHandleId
88
+ local getUnitCurrentOrder = GetUnitCurrentOrder
75
89
  local createUnit = CreateUnit
76
90
  local killUnit = KillUnit
77
- local setUnitExploded = SetUnitExploded
78
91
  local removeUnit = RemoveUnit
79
92
  local getUnitTypeId = GetUnitTypeId
80
93
  local isHeroUnitId = IsHeroUnitId
@@ -90,15 +103,12 @@ local getSpellTargetItem = GetSpellTargetItem
90
103
  local getSpellTargetDestructable = GetSpellTargetDestructable
91
104
  local isUnitInRangeXY = IsUnitInRangeXY
92
105
  local isUnitInRange = IsUnitInRange
93
- local setResourceAmount = SetResourceAmount
94
- local getResourceAmount = GetResourceAmount
95
106
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
96
107
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
97
108
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
98
109
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
99
110
  local getUnitAbilityLevel = GetUnitAbilityLevel
100
111
  local unitDisableAbility = BlzUnitDisableAbility
101
- local unitInterruptAttack = BlzUnitInterruptAttack
102
112
  local isUnitInvisible = IsUnitInvisible
103
113
  local isUnitVisible = IsUnitVisible
104
114
  local getUnitX = GetUnitX
@@ -115,15 +125,9 @@ local getOrderedUnit = GetOrderedUnit
115
125
  local getIssuedOrderId = GetIssuedOrderId
116
126
  local isUnitInvulnerable = BlzIsUnitInvulnerable
117
127
  local unitAlive = UnitAlive
118
- local unitAddType = UnitAddType
119
- local unitRemoveType = UnitRemoveType
120
- local isUnitIllusion = IsUnitIllusion
121
- local isUnitType = IsUnitType
122
128
  local isUnitAlly = IsUnitAlly
123
129
  local isUnitEnemy = IsUnitEnemy
124
130
  local getOwningPlayer = GetOwningPlayer
125
- local setUnitColor = SetUnitColor
126
- local showUnitTeamGlow = BlzShowUnitTeamGlow
127
131
  ____exports.UnitClassification = {}
128
132
  local UnitClassification = ____exports.UnitClassification
129
133
  do
@@ -133,6 +137,7 @@ do
133
137
  UnitClassification.GROUND = UNIT_TYPE_GROUND
134
138
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
135
139
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
140
+ UnitClassification.WORKER = UNIT_TYPE_PEON
136
141
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
137
142
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
138
143
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -279,16 +284,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
279
284
  end
280
285
  local function dispatch(event, idGetter, argsGetter)
281
286
  local initialized = false
282
- local x = {}
283
287
  return setmetatable(
284
- x,
288
+ {},
285
289
  {
286
290
  __index = function(self, id)
287
291
  if type(id) ~= "number" then
288
292
  return event[id]
289
293
  end
290
294
  if not initialized then
291
- local invoke = Event.invoke
292
295
  event:addListener(function(...)
293
296
  local id = idGetter(...)
294
297
  local dispatched = rawget(self, id)
@@ -326,7 +329,6 @@ local function dispatchAbility(event)
326
329
  return event[id]
327
330
  end
328
331
  if not initialized then
329
- local invoke = Event.invoke
330
332
  event:addListener(function(unit, ability, ...)
331
333
  local dispatched = rawget(self, ability.typeId)
332
334
  if dispatched ~= nil then
@@ -343,6 +345,9 @@ local function dispatchAbility(event)
343
345
  }
344
346
  )
345
347
  end
348
+ local function damagingEventPreventRetaliation(self)
349
+ self[0] = true
350
+ end
346
351
  local function damageEventPreventDeath(self, callback, ...)
347
352
  if self[0] ~= nil then
348
353
  return
@@ -354,7 +359,16 @@ local function damageEventPreventDeath(self, callback, ...)
354
359
  rawset(self, 1 + i, (select(i, ...)))
355
360
  end
356
361
  end
357
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
362
+ local damageSetters = {
363
+ amount = BlzSetEventDamage,
364
+ attackType = function(attackType)
365
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
366
+ end,
367
+ damageType = BlzSetEventDamageType,
368
+ weaponSoundType = function(weaponSoundType)
369
+ return BlzSetEventWeaponType(weaponSoundTypeToNative(weaponSoundType))
370
+ end
371
+ }
358
372
  local jlimitopByOperator = {
359
373
  [0] = LESS_THAN_OR_EQUAL,
360
374
  [1] = LESS_THAN_OR_EQUAL,
@@ -372,15 +386,27 @@ local modifiers = {
372
386
  end,
373
387
  armor = function(unit, value)
374
388
  if UnitAddAbility(unit, armorBonusAbilityId) then
375
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
389
+ assert(
390
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
391
+ "armor bonus ability must be made permanent",
392
+ unit
393
+ )
376
394
  end
377
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
378
- assert(BlzSetAbilityRealLevelField(
379
- ability,
380
- armorBonusField,
381
- 0,
382
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
383
- ))
395
+ local ability = assert(
396
+ BlzGetUnitAbility(unit, armorBonusAbilityId),
397
+ "armor bonus ability must be existing",
398
+ unit
399
+ )
400
+ assert(
401
+ BlzSetAbilityRealLevelField(
402
+ ability,
403
+ armorBonusField,
404
+ 0,
405
+ BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
406
+ ),
407
+ "armor bonus ability field must be set",
408
+ unit
409
+ )
384
410
  end
385
411
  }
386
412
  local getters = {
@@ -398,6 +424,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
398
424
  self.unit = unit
399
425
  self.index = index
400
426
  end
427
+ __TS__SetDescriptor(
428
+ UnitWeapon.prototype,
429
+ "isEnabled",
430
+ {
431
+ get = function(self)
432
+ return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
433
+ end,
434
+ set = function(self, isEnabled)
435
+ BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
436
+ end
437
+ },
438
+ true
439
+ )
401
440
  __TS__SetDescriptor(
402
441
  UnitWeapon.prototype,
403
442
  "cooldown",
@@ -432,6 +471,45 @@ __TS__SetDescriptor(
432
471
  },
433
472
  true
434
473
  )
474
+ __TS__SetDescriptor(
475
+ UnitWeapon.prototype,
476
+ "allowedTargetCombatClassifications",
477
+ {
478
+ get = function(self)
479
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
480
+ end,
481
+ set = function(self, allowedTargetCombatClassifications)
482
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
483
+ end
484
+ },
485
+ true
486
+ )
487
+ __TS__SetDescriptor(
488
+ UnitWeapon.prototype,
489
+ "type",
490
+ {
491
+ get = function(self)
492
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_WEAPON_TYPE, self.index)
493
+ end,
494
+ set = function(self, ____type)
495
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_WEAPON_TYPE, self.index, ____type)
496
+ end
497
+ },
498
+ true
499
+ )
500
+ __TS__SetDescriptor(
501
+ UnitWeapon.prototype,
502
+ "soundType",
503
+ {
504
+ get = function(self)
505
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_WEAPON_SOUND, self.index)
506
+ end,
507
+ set = function(self, soundType)
508
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_WEAPON_SOUND, self.index, soundType)
509
+ end
510
+ },
511
+ true
512
+ )
435
513
  __TS__SetDescriptor(
436
514
  UnitWeapon.prototype,
437
515
  "damageBase",
@@ -543,8 +621,6 @@ __TS__SetDescriptor(
543
621
  },
544
622
  true
545
623
  )
546
- local unitInventorySize = UnitInventorySize
547
- local unitItemInSlot = UnitItemInSlot
548
624
  local getItemAbility = BlzGetItemAbility
549
625
  local getUnitAbility = BlzGetUnitAbility
550
626
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -562,19 +638,8 @@ local function retrieveAbility(unit, ability, abilityId)
562
638
  ____exports.Unit:of(unit)
563
639
  )
564
640
  end
565
- if not unitAddAbility(unit, abilityId) then
566
- if getUnitAbility(unit, abilityId) == ability then
567
- return UnitAbility:of(
568
- ability,
569
- abilityId,
570
- ____exports.Unit:of(unit)
571
- )
572
- end
573
- else
574
- unitRemoveAbility(unit, abilityId)
575
- end
576
- for i = 0, unitInventorySize(unit) - 1 do
577
- local item = unitItemInSlot(unit, i)
641
+ for i = 0, UnitInventorySize(unit) - 1 do
642
+ local item = UnitItemInSlot(unit, i)
578
643
  if getItemAbility(item, abilityId) == ability then
579
644
  return ItemAbility:of(
580
645
  ability,
@@ -619,26 +684,30 @@ local fieldSetters = {
619
684
  }
620
685
  local dummies = {}
621
686
  for ____, player in ipairs(Player.all) do
622
- local dummy = assert(createUnit(
623
- player.handle,
624
- dummyUnitId,
625
- 0,
626
- 0,
627
- 270
628
- ))
687
+ local dummy = assert(
688
+ createUnit(
689
+ player.handle,
690
+ dummyUnitId,
691
+ 0,
692
+ 0,
693
+ 270
694
+ ),
695
+ "dummy must be created",
696
+ player
697
+ )
629
698
  ShowUnit(dummy, false)
630
699
  dummies[player] = dummy
631
700
  end
632
701
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
702
+ local counter = (unit[104] or 0) - 1
634
703
  if counter ~= 0 then
635
- unit[102] = counter
704
+ unit[104] = counter
636
705
  return
637
706
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
707
+ unit[104] = nil
708
+ local healthBonus = unit[105]
640
709
  if healthBonus ~= nil then
641
- unit[103] = nil
710
+ unit[105] = nil
642
711
  local handle = unit.handle
643
712
  BlzSetUnitMaxHP(
644
713
  handle,
@@ -646,45 +715,79 @@ local function delayHealthChecksCallback(unit)
646
715
  )
647
716
  end
648
717
  end
718
+ local nextSyncId = 1
719
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
720
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
721
+ local function addAbility(unit, abilityTypeId)
722
+ local ____unitAddAbility_result_0
723
+ if unitAddAbility(unit, abilityTypeId) then
724
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
725
+ else
726
+ ____unitAddAbility_result_0 = nil
727
+ end
728
+ return ____unitAddAbility_result_0
729
+ end
649
730
  ____exports.Unit = __TS__Class()
650
731
  local Unit = ____exports.Unit
651
732
  Unit.name = "Unit"
652
733
  __TS__ClassExtends(Unit, Handle)
653
734
  function Unit.prototype.____constructor(self, handle)
654
735
  Handle.prototype.____constructor(self, handle)
736
+ local ____nextSyncId_1 = nextSyncId
737
+ nextSyncId = ____nextSyncId_1 + 1
738
+ self.syncId = ____nextSyncId_1
655
739
  self._owner = Player:of(getOwningPlayer(handle))
656
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
- assert(unitAddAbility(handle, morphDetectAbilityId))
740
+ assert(
741
+ unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId),
742
+ "leave detection ability must be added",
743
+ self
744
+ )
745
+ assert(
746
+ unitAddAbility(handle, morphDetectAbilityId),
747
+ "morph detection ability must be added",
748
+ self
749
+ )
658
750
  if unitAddAbility(
659
751
  handle,
660
752
  fourCC("Amrf")
661
753
  ) then
662
- assert(unitRemoveAbility(
663
- handle,
664
- fourCC("Amrf")
665
- ))
754
+ assert(
755
+ unitRemoveAbility(
756
+ handle,
757
+ fourCC("Amrf")
758
+ ),
759
+ "fly ability must be removed after addition",
760
+ self
761
+ )
666
762
  end
763
+ unitBySyncId[self.syncId] = self
667
764
  local ____ = self.abilities
668
765
  end
669
- function Unit.prototype.getEvent(self, event, collector)
670
- self.events = self.events or ({})
671
- local eventId = GetHandleId(event)
672
- if not self.events[eventId] then
673
- self.events[eventId] = __TS__New(
766
+ function Unit.prototype.getEvent(self, jevent, collector)
767
+ self.events = self.events or __TS__New(LinkedMap)
768
+ local eventId = GetHandleId(jevent)
769
+ local event = self.events:get(eventId)
770
+ if event == nil then
771
+ event = __TS__New(
674
772
  TriggerEvent,
675
773
  function(trigger)
676
- TriggerRegisterUnitEvent(trigger, self.handle, event)
774
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
677
775
  end,
678
776
  collector or (function() return {} end)
679
777
  )
778
+ self.events:put(eventId, event)
680
779
  end
681
- return self.events[eventId]
780
+ return event
781
+ end
782
+ function Unit.prototype.saveData(self)
783
+ local handle = self.handle
784
+ self[108] = self[108] or getUnitX(handle)
785
+ self[109] = self[109] or getUnitY(handle)
786
+ self._owner = self._owner or Player:of(getOwningPlayer(handle))
682
787
  end
683
788
  function Unit.prototype.onDestroy(self)
684
789
  local handle = self.handle
685
- if not self._owner then
686
- self._owner = Player:of(getOwningPlayer(handle))
687
- end
790
+ self:saveData()
688
791
  local abilities = self.abilities
689
792
  for ____, ability in ipairs(abilities) do
690
793
  ability:destroy()
@@ -702,7 +805,9 @@ function Unit.prototype.onDestroy(self)
702
805
  end
703
806
  local eventsToDestroy = self._eventsToDestroy
704
807
  if eventsToDestroy ~= nil then
705
- forEach(eventsToDestroy, "destroy")
808
+ for ____, event in ipairs(eventsToDestroy) do
809
+ event:destroy()
810
+ end
706
811
  end
707
812
  if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
708
813
  unitRemoveAbility(handle, leaveDetectAbilityId)
@@ -720,7 +825,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
720
825
  self._attackHandlers = handlers
721
826
  if #handlers == 1 then
722
827
  local handle = self.handle
723
- assert(unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId))
828
+ assert(
829
+ unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
830
+ "attack handler ability must be added",
831
+ self
832
+ )
724
833
  end
725
834
  return handler
726
835
  end
@@ -749,17 +858,17 @@ function Unit.prototype.addModifier(self, property, modifier)
749
858
  end}
750
859
  end
751
860
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
861
+ local ____combatClassification_2 = combatClassification
862
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
754
863
  end
755
864
  function Unit.prototype.addClassification(self, classification)
756
- return unitAddType(self.handle, classification)
865
+ return UnitAddType(self.handle, classification)
757
866
  end
758
867
  function Unit.prototype.removeClassification(self, classification)
759
- return unitRemoveType(self.handle, classification)
868
+ return UnitRemoveType(self.handle, classification)
760
869
  end
761
870
  function Unit.prototype.hasClassification(self, classification)
762
- return isUnitType(self.handle, classification)
871
+ return IsUnitType(self.handle, classification)
763
872
  end
764
873
  function Unit.prototype.isVisibleTo(self, player)
765
874
  return isUnitVisible(self.handle, player.handle)
@@ -768,13 +877,19 @@ function Unit.prototype.isInvisibleTo(self, player)
768
877
  return isUnitInvisible(self.handle, player.handle)
769
878
  end
770
879
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
880
+ local ____temp_4
772
881
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
882
+ ____temp_4 = isUnitInRangeXY(self.handle, x, y, range)
774
883
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
884
+ local ____temp_3
885
+ if __TS__InstanceOf(x, ____exports.Unit) then
886
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
887
+ else
888
+ ____temp_3 = isUnitInRangeXY(self.handle, x.x, x.y, range)
889
+ end
890
+ ____temp_4 = ____temp_3
776
891
  end
777
- return ____temp_1
892
+ return ____temp_4
778
893
  end
779
894
  function Unit.prototype.isAllyOf(self, unit)
780
895
  return isUnitAlly(
@@ -792,16 +907,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
792
907
  if type(animation) == "number" then
793
908
  setUnitAnimationByIndex(self.handle, animation)
794
909
  elseif rarity then
795
- setUnitAnimationWithRarity(self.handle, animation, rarity)
910
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
796
911
  else
797
912
  setUnitAnimation(self.handle, animation)
798
913
  end
799
914
  end
915
+ function Unit.prototype.resetAnimation(self)
916
+ ResetUnitAnimation(self.handle)
917
+ end
800
918
  function Unit.prototype.queueAnimation(self, animation)
801
- queueUnitAnimation(self.handle, animation)
919
+ QueueUnitAnimation(self.handle, animation)
920
+ end
921
+ function Unit.prototype.chooseWeapon(self, target)
922
+ local firstWeapon = self.firstWeapon
923
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
924
+ return firstWeapon
925
+ end
926
+ local secondWeapon = self.secondWeapon
927
+ if secondWeapon.isEnabled and target:isAllowedTarget(self, secondWeapon.allowedTargetCombatClassifications) then
928
+ return secondWeapon
929
+ end
930
+ return nil
802
931
  end
803
932
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
933
+ self[104] = (self[104] or 0) + 1
805
934
  Timer:run(delayHealthChecksCallback, self)
806
935
  end
807
936
  function Unit.prototype.setPosition(self, x, y)
@@ -811,14 +940,21 @@ function Unit.prototype.isSelected(self, player)
811
940
  return IsUnitSelected(self.handle, player.handle)
812
941
  end
813
942
  function Unit.prototype.explode(self)
814
- setUnitExploded(self.handle, true)
943
+ SetUnitExploded(self.handle, true)
815
944
  killUnit(self.handle)
816
945
  end
817
946
  function Unit.prototype.kill(self)
818
947
  killUnit(self.handle)
819
948
  end
820
- function Unit.prototype.revive(self, pos, doEffect)
821
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
949
+ function Unit.prototype.revive(self, x, y, doEffect)
950
+ local ____ReviveHero_7 = ReviveHero
951
+ local ____array_6 = __TS__SparseArrayNew(self.handle, x, y)
952
+ local ____doEffect_5 = doEffect
953
+ if ____doEffect_5 == nil then
954
+ ____doEffect_5 = false
955
+ end
956
+ __TS__SparseArrayPush(____array_6, ____doEffect_5)
957
+ ____ReviveHero_7(__TS__SparseArraySpread(____array_6))
822
958
  end
823
959
  function Unit.prototype.healTarget(self, target, amount)
824
960
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -861,17 +997,16 @@ function Unit.prototype.itemInSlot(self, slot)
861
997
  return Item:of(UnitItemInSlot(self.handle, slot))
862
998
  end
863
999
  function Unit.prototype.addAbility(self, abilityId)
864
- if unitAddAbility(self.handle, abilityId) then
865
- local ability = UnitAbility:of(
866
- checkNotNull(getUnitAbility(self.handle, abilityId)),
867
- abilityId,
868
- self
869
- )
1000
+ local ability = UnitAbility:of(
1001
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
1002
+ abilityId,
1003
+ self
1004
+ )
1005
+ if ability ~= nil then
870
1006
  local abilities = self.abilities
871
1007
  abilities[#abilities + 1] = ability
872
- return ability
873
1008
  end
874
- return nil
1009
+ return ability
875
1010
  end
876
1011
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
877
1012
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -885,47 +1020,47 @@ end
885
1020
  function Unit.prototype.hasAbility(self, abilityId)
886
1021
  return getUnitAbilityLevel(self.handle, abilityId) > 0
887
1022
  end
888
- function Unit.prototype.getAbilityById(self, abilityId)
889
- local handle = self.handle
890
- if unitAddAbility(handle, abilityId) then
891
- assert(unitRemoveAbility(handle, abilityId))
892
- return nil
893
- end
894
- return UnitAbility:of(
895
- getUnitAbility(self.handle, abilityId),
896
- abilityId,
897
- self
898
- )
1023
+ function Unit.prototype.getAbility(self, abilityId)
1024
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
1025
+ return UnitAbility:of(ability, abilityId, self)
899
1026
  end
900
- function Unit.prototype.removeAbility(self, abilityId)
901
- if unitRemoveAbility(self.handle, abilityId) then
902
- local abilities = self.abilities
903
- for i = 1, #abilities do
904
- if abilities[i].typeId == abilityId then
905
- abilities[i]:destroy()
906
- tremove(abilities, i)
907
- return true
1027
+ function Unit.prototype.removeAbility(self, abilityTypeId)
1028
+ local abilities = self.abilities
1029
+ for i = 1, #abilities do
1030
+ if abilities[i].typeId == abilityTypeId then
1031
+ local ability = abilities[i]
1032
+ tremove(abilities, i)
1033
+ if ability.state == 2 then
1034
+ break
908
1035
  end
1036
+ ability:destroy()
1037
+ return true
909
1038
  end
910
- return true
911
1039
  end
912
- return false
1040
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
913
1041
  end
914
1042
  function Unit.prototype.hideAbility(self, abilityId, flag)
915
1043
  BlzUnitHideAbility(self.handle, abilityId, flag)
916
1044
  end
1045
+ function Unit.prototype.getAbilityRemainingCooldown(self, abilityId)
1046
+ return BlzGetUnitAbilityCooldownRemaining(self.handle, abilityId)
1047
+ end
917
1048
  function Unit.prototype.startAbilityCooldown(self, abilityId, cooldown)
918
1049
  BlzStartUnitAbilityCooldown(self.handle, abilityId, cooldown)
919
1050
  end
920
1051
  function Unit.prototype.endAbilityCooldown(self, abilityId)
921
1052
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
922
1053
  end
923
- function Unit.prototype.interruptAttack(self)
924
- unitInterruptAttack(self.handle)
925
- end
926
1054
  function Unit.prototype.interruptCast(self, abilityId)
927
- unitDisableAbility(self.handle, abilityId, true, false)
928
- unitDisableAbility(self.handle, abilityId, false, false)
1055
+ local handle = self.handle
1056
+ unitDisableAbility(handle, abilityId, true, false)
1057
+ Timer:run(
1058
+ unitDisableAbility,
1059
+ handle,
1060
+ abilityId,
1061
+ false,
1062
+ false
1063
+ )
929
1064
  end
930
1065
  function Unit.prototype.getDistanceTo(self, target)
931
1066
  local handle = self.handle
@@ -985,18 +1120,44 @@ function Unit.prototype.unpauseEx(self)
985
1120
  self:decrementStunCounter()
986
1121
  end
987
1122
  function Unit.prototype.incrementStunCounter(self)
988
- local stunCounter = self[101] or 0
989
- if not self[100] or stunCounter >= 0 then
1123
+ local stunCounter = self[102] or 0
1124
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
990
1125
  BlzPauseUnitEx(self.handle, true)
991
1126
  end
992
- self[101] = stunCounter + 1
1127
+ self[102] = stunCounter + 1
993
1128
  end
994
1129
  function Unit.prototype.decrementStunCounter(self)
995
- local stunCounter = self[101] or 0
996
- if not self[100] or stunCounter >= 1 then
1130
+ local stunCounter = self[102] or 0
1131
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
997
1132
  BlzPauseUnitEx(self.handle, false)
998
1133
  end
999
- self[101] = stunCounter - 1
1134
+ self[102] = stunCounter - 1
1135
+ end
1136
+ function Unit.prototype.incrementForceStunCounter(self)
1137
+ local forceStunCounter = self[103] or 0
1138
+ if forceStunCounter == 0 then
1139
+ local handle = self.handle
1140
+ if not self[101] then
1141
+ for _ = self[102] or 0, -1 do
1142
+ BlzPauseUnitEx(handle, true)
1143
+ end
1144
+ end
1145
+ BlzPauseUnitEx(handle, true)
1146
+ end
1147
+ self[103] = forceStunCounter + 1
1148
+ end
1149
+ function Unit.prototype.decrementForceStunCounter(self)
1150
+ local forceStunCounter = self[103] or 0
1151
+ if forceStunCounter == 1 then
1152
+ local handle = self.handle
1153
+ if not self[101] then
1154
+ for _ = self[102] or 0, -1 do
1155
+ BlzPauseUnitEx(handle, false)
1156
+ end
1157
+ end
1158
+ BlzPauseUnitEx(handle, false)
1159
+ end
1160
+ self[103] = forceStunCounter - 1
1000
1161
  end
1001
1162
  function Unit.create(self, owner, id, x, y, facing, skinId)
1002
1163
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1098,8 +1259,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1098
1259
  )
1099
1260
  return targetCollection
1100
1261
  end
1101
- function Unit.getSelectionOf(self, player)
1102
- targetCollection = {}
1262
+ function Unit.getSelectionOf(self, player, target)
1263
+ if target == nil then
1264
+ target = {}
1265
+ end
1266
+ targetCollection = target
1103
1267
  targetCollectionNextIndex = 1
1104
1268
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1105
1269
  return targetCollection
@@ -1121,6 +1285,9 @@ end
1121
1285
  function Unit.prototype.__tostring(self)
1122
1286
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1123
1287
  end
1288
+ function Unit.getBySyncId(self, syncId)
1289
+ return unitBySyncId[syncId]
1290
+ end
1124
1291
  __TS__SetDescriptor(
1125
1292
  Unit.prototype,
1126
1293
  "_deltas",
@@ -1180,7 +1347,15 @@ __TS__SetDescriptor(
1180
1347
  Unit.prototype,
1181
1348
  "isIllusion",
1182
1349
  {get = function(self)
1183
- return isUnitIllusion(self.handle)
1350
+ return IsUnitIllusion(self.handle)
1351
+ end},
1352
+ true
1353
+ )
1354
+ __TS__SetDescriptor(
1355
+ Unit.prototype,
1356
+ "isStunned",
1357
+ {get = function(self)
1358
+ return getUnitCurrentOrder(self.handle) == 851973
1184
1359
  end},
1185
1360
  true
1186
1361
  )
@@ -1259,13 +1434,13 @@ __TS__SetDescriptor(
1259
1434
  )
1260
1435
  __TS__SetDescriptor(
1261
1436
  Unit.prototype,
1262
- "strengthBase",
1437
+ "primaryAttribute",
1263
1438
  {
1264
1439
  get = function(self)
1265
- return getHeroStr(self.handle, false)
1440
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1266
1441
  end,
1267
- set = function(self, strengthBase)
1268
- setHeroStr(self.handle, strengthBase, true)
1442
+ set = function(self, primaryAttribute)
1443
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1269
1444
  end
1270
1445
  },
1271
1446
  true
@@ -1287,19 +1462,6 @@ __TS__SetDescriptor(
1287
1462
  end},
1288
1463
  true
1289
1464
  )
1290
- __TS__SetDescriptor(
1291
- Unit.prototype,
1292
- "agilityBase",
1293
- {
1294
- get = function(self)
1295
- return getHeroAgi(self.handle, false)
1296
- end,
1297
- set = function(self, agilityBase)
1298
- setHeroAgi(self.handle, agilityBase, true)
1299
- end
1300
- },
1301
- true
1302
- )
1303
1465
  __TS__SetDescriptor(
1304
1466
  Unit.prototype,
1305
1467
  "agilityBonus",
@@ -1317,19 +1479,6 @@ __TS__SetDescriptor(
1317
1479
  end},
1318
1480
  true
1319
1481
  )
1320
- __TS__SetDescriptor(
1321
- Unit.prototype,
1322
- "intelligenceBase",
1323
- {
1324
- get = function(self)
1325
- return getHeroInt(self.handle, false)
1326
- end,
1327
- set = function(self, intelligenceBase)
1328
- setHeroInt(self.handle, intelligenceBase, true)
1329
- end
1330
- },
1331
- true
1332
- )
1333
1482
  __TS__SetDescriptor(
1334
1483
  Unit.prototype,
1335
1484
  "intelligenceBonus",
@@ -1378,17 +1527,17 @@ __TS__SetDescriptor(
1378
1527
  "isTeamGlowVisible",
1379
1528
  {
1380
1529
  get = function(self)
1381
- return not self[105]
1530
+ return not self[107]
1382
1531
  end,
1383
1532
  set = function(self, isTeamGlowVisible)
1384
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1385
- local ____temp_2
1533
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1534
+ local ____temp_8
1386
1535
  if not isTeamGlowVisible then
1387
- ____temp_2 = true
1536
+ ____temp_8 = true
1388
1537
  else
1389
- ____temp_2 = nil
1538
+ ____temp_8 = nil
1390
1539
  end
1391
- self[105] = ____temp_2
1540
+ self[107] = ____temp_8
1392
1541
  end
1393
1542
  },
1394
1543
  true
@@ -1397,9 +1546,9 @@ __TS__SetDescriptor(
1397
1546
  Unit.prototype,
1398
1547
  "color",
1399
1548
  {set = function(self, color)
1400
- setUnitColor(self.handle, color.handle)
1401
- if self[105] then
1402
- showUnitTeamGlow(self.handle, false)
1549
+ SetUnitColor(self.handle, color.handle)
1550
+ if self[107] then
1551
+ BlzShowUnitTeamGlow(self.handle, false)
1403
1552
  end
1404
1553
  end},
1405
1554
  true
@@ -1422,14 +1571,14 @@ __TS__SetDescriptor(
1422
1571
  "maxHealth",
1423
1572
  {
1424
1573
  get = function(self)
1425
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1574
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1426
1575
  end,
1427
1576
  set = function(self, maxHealth)
1428
- if maxHealth < 1 and self[102] ~= nil then
1429
- self[103] = (self[103] or 0) + (1 - maxHealth)
1577
+ if maxHealth < 1 and self[104] ~= nil then
1578
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1430
1579
  maxHealth = 1
1431
1580
  end
1432
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1581
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1433
1582
  end
1434
1583
  },
1435
1584
  true
@@ -1471,10 +1620,10 @@ __TS__SetDescriptor(
1471
1620
  "health",
1472
1621
  {
1473
1622
  get = function(self)
1474
- return GetWidgetLife(self.handle) - (self[104] or 0)
1623
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1475
1624
  end,
1476
1625
  set = function(self, health)
1477
- SetWidgetLife(self.handle, health + (self[104] or 0))
1626
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1478
1627
  end
1479
1628
  },
1480
1629
  true
@@ -1550,25 +1699,12 @@ __TS__SetDescriptor(
1550
1699
  },
1551
1700
  true
1552
1701
  )
1553
- __TS__SetDescriptor(
1554
- Unit.prototype,
1555
- "flyHeight",
1556
- {
1557
- get = function(self)
1558
- return getUnitFlyHeight(self.handle)
1559
- end,
1560
- set = function(self, v)
1561
- SetUnitFlyHeight(self.handle, v, 100000)
1562
- end
1563
- },
1564
- true
1565
- )
1566
1702
  __TS__SetDescriptor(
1567
1703
  Unit.prototype,
1568
1704
  "x",
1569
1705
  {
1570
1706
  get = function(self)
1571
- return getUnitX(self.handle)
1707
+ return self[108] or getUnitX(self.handle)
1572
1708
  end,
1573
1709
  set = function(self, v)
1574
1710
  SetUnitX(self.handle, v)
@@ -1581,7 +1717,7 @@ __TS__SetDescriptor(
1581
1717
  "y",
1582
1718
  {
1583
1719
  get = function(self)
1584
- return getUnitY(self.handle)
1720
+ return self[109] or getUnitY(self.handle)
1585
1721
  end,
1586
1722
  set = function(self, v)
1587
1723
  SetUnitY(self.handle, v)
@@ -1667,10 +1803,10 @@ __TS__SetDescriptor(
1667
1803
  "gold",
1668
1804
  {
1669
1805
  get = function(self)
1670
- return getResourceAmount(self.handle)
1806
+ return GetResourceAmount(self.handle)
1671
1807
  end,
1672
1808
  set = function(self, gold)
1673
- setResourceAmount(self.handle, gold)
1809
+ SetResourceAmount(self.handle, gold)
1674
1810
  end
1675
1811
  },
1676
1812
  true
@@ -1685,17 +1821,21 @@ __TS__SetDescriptor(
1685
1821
  set = function(self, isPaused)
1686
1822
  local handle = self.handle
1687
1823
  if isPaused and not IsUnitPaused(handle) then
1688
- self[100] = true
1689
- for _ = self[101] or 0, -1 do
1690
- BlzPauseUnitEx(handle, true)
1824
+ self[101] = true
1825
+ if (self[103] or 0) <= 0 then
1826
+ for _ = self[102] or 0, -1 do
1827
+ BlzPauseUnitEx(handle, true)
1828
+ end
1691
1829
  end
1692
1830
  PauseUnit(handle, true)
1693
1831
  elseif not isPaused and IsUnitPaused(handle) then
1694
1832
  PauseUnit(handle, false)
1695
- for _ = self[101] or 0, -1 do
1696
- BlzPauseUnitEx(handle, false)
1833
+ if (self[103] or 0) <= 0 then
1834
+ for _ = self[102] or 0, -1 do
1835
+ BlzPauseUnitEx(handle, false)
1836
+ end
1697
1837
  end
1698
- self[100] = nil
1838
+ self[101] = nil
1699
1839
  end
1700
1840
  end
1701
1841
  },
@@ -1751,20 +1891,6 @@ __TS__SetDescriptor(
1751
1891
  },
1752
1892
  true
1753
1893
  )
1754
- __TS__SetDescriptor(
1755
- Unit.prototype,
1756
- "scale",
1757
- {
1758
- get = function(self)
1759
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1760
- end,
1761
- set = function(self, v)
1762
- setUnitScale(self.handle, v, v, v)
1763
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1764
- end
1765
- },
1766
- true
1767
- )
1768
1894
  __TS__SetDescriptor(
1769
1895
  Unit.prototype,
1770
1896
  "timeScale",
@@ -1791,13 +1917,26 @@ __TS__SetDescriptor(
1791
1917
  Unit.prototype,
1792
1918
  "pathingCollisionRange",
1793
1919
  {get = function(self)
1794
- return 16 * (min(
1920
+ return 16 * (math.min(
1795
1921
  getUnitCollisionSize(self.handle) // 16,
1796
1922
  3
1797
1923
  ) + 1)
1798
1924
  end},
1799
1925
  true
1800
1926
  )
1927
+ __TS__SetDescriptor(
1928
+ Unit.prototype,
1929
+ "movementType",
1930
+ {
1931
+ get = function(self)
1932
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1933
+ end,
1934
+ set = function(self, movementType)
1935
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1936
+ end
1937
+ },
1938
+ true
1939
+ )
1801
1940
  __TS__SetDescriptor(
1802
1941
  Unit.prototype,
1803
1942
  "pathing",
@@ -1888,30 +2027,6 @@ __TS__SetDescriptor(
1888
2027
  end},
1889
2028
  true
1890
2029
  )
1891
- __TS__SetDescriptor(
1892
- Unit.prototype,
1893
- "onUnitInRange",
1894
- {get = function(self)
1895
- local handle = self.handle
1896
- local onUnitInRange = setmetatable(
1897
- {},
1898
- {__index = function(self, value)
1899
- local event = __TS__New(
1900
- TriggerEvent,
1901
- function(trigger)
1902
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1903
- end,
1904
- function() return ____exports.Unit:of(handle) end
1905
- )
1906
- rawset(self, value, event)
1907
- return event
1908
- end}
1909
- )
1910
- rawset(self, "onUnitInRange", onUnitInRange)
1911
- return onUnitInRange
1912
- end},
1913
- true
1914
- )
1915
2030
  __TS__SetDescriptor(
1916
2031
  Unit.prototype,
1917
2032
  "onManaEqual",
@@ -1979,6 +2094,14 @@ __TS__SetDescriptor(
1979
2094
  end},
1980
2095
  true
1981
2096
  )
2097
+ __TS__SetDescriptor(
2098
+ Unit.prototype,
2099
+ "targetAcquiredEvent",
2100
+ {get = function(self)
2101
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2102
+ end},
2103
+ true
2104
+ )
1982
2105
  __TS__SetDescriptor(
1983
2106
  Unit.prototype,
1984
2107
  "onSelect",
@@ -2039,6 +2162,11 @@ __TS__SetDescriptor(
2039
2162
  end},
2040
2163
  true
2041
2164
  )
2165
+ Unit.levelChangedEvent = __TS__New(
2166
+ ____exports.UnitTriggerEvent,
2167
+ EVENT_PLAYER_HERO_LEVEL,
2168
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2169
+ )
2042
2170
  Unit.deathEvent = __TS__New(
2043
2171
  ____exports.UnitTriggerEvent,
2044
2172
  EVENT_PLAYER_UNIT_DEATH,
@@ -2052,12 +2180,11 @@ Unit.onDecay = __TS__New(
2052
2180
  Unit.onResurrect = __TS__New(
2053
2181
  InitializingEvent,
2054
2182
  function(event)
2055
- local invoke = Event.invoke
2056
2183
  local dead = setmetatable({}, {__mode = "k"})
2057
2184
  ____exports.Unit.deathEvent:addListener(function(unit)
2058
2185
  dead[unit] = true
2059
2186
  end)
2060
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2187
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2061
2188
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2062
2189
  dead[unit] = false
2063
2190
  invoke(event, unit)
@@ -2068,10 +2195,15 @@ Unit.onResurrect = __TS__New(
2068
2195
  Unit.morphEvent = __TS__New(
2069
2196
  InitializingEvent,
2070
2197
  function(event)
2071
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2198
+ local function ifNotLeft(unit)
2199
+ local handle = unit.handle
2200
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2201
+ invoke(event, unit)
2202
+ end
2203
+ end
2204
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2072
2205
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2073
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2074
- Timer:run(Event.invoke, event, unit)
2206
+ Timer:run(ifNotLeft, unit)
2075
2207
  end
2076
2208
  end)
2077
2209
  end
@@ -2109,27 +2241,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2109
2241
  Unit.onTargetCast = dispatchId(__TS__New(
2110
2242
  InitializingEvent,
2111
2243
  function(event)
2112
- local invoke = Event.invoke
2113
2244
  local function listener(unit, id)
2114
- local ____GetSpellTargetUnit_result_5
2245
+ local ____GetSpellTargetUnit_result_11
2115
2246
  if GetSpellTargetUnit() then
2116
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2247
+ ____GetSpellTargetUnit_result_11 = ____exports.Unit:of(GetSpellTargetUnit())
2117
2248
  else
2118
- local ____GetSpellTargetItem_result_4
2249
+ local ____GetSpellTargetItem_result_10
2119
2250
  if GetSpellTargetItem() then
2120
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2251
+ ____GetSpellTargetItem_result_10 = Item:of(GetSpellTargetItem())
2121
2252
  else
2122
- local ____GetSpellTargetDestructable_result_3
2253
+ local ____GetSpellTargetDestructable_result_9
2123
2254
  if GetSpellTargetDestructable() then
2124
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2255
+ ____GetSpellTargetDestructable_result_9 = Destructable:of(GetSpellTargetDestructable())
2125
2256
  else
2126
- ____GetSpellTargetDestructable_result_3 = nil
2257
+ ____GetSpellTargetDestructable_result_9 = nil
2127
2258
  end
2128
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2259
+ ____GetSpellTargetItem_result_10 = ____GetSpellTargetDestructable_result_9
2129
2260
  end
2130
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2261
+ ____GetSpellTargetUnit_result_11 = ____GetSpellTargetItem_result_10
2131
2262
  end
2132
- local target = ____GetSpellTargetUnit_result_5
2263
+ local target = ____GetSpellTargetUnit_result_11
2133
2264
  if target then
2134
2265
  invoke(event, unit, id, target)
2135
2266
  end
@@ -2301,10 +2432,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2301
2432
  ____exports.UnitTriggerEvent,
2302
2433
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2303
2434
  function()
2304
- local unit = ____exports.Unit:of(getOrderedUnit())
2305
- local issuedOrderId = getIssuedOrderId()
2306
- if unit ~= nil and unit.state == 1 then
2307
- return unit, issuedOrderId
2435
+ local handle = getOrderedUnit()
2436
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2437
+ local unit = ____exports.Unit:of(handle)
2438
+ if unit.state == 1 then
2439
+ return unit, getIssuedOrderId()
2440
+ end
2308
2441
  end
2309
2442
  return IgnoreEvent
2310
2443
  end
@@ -2326,7 +2459,6 @@ Unit.autoAttackStartEvent = __TS__New(
2326
2459
  )
2327
2460
  Unit.onDamaging = (function()
2328
2461
  local event = __TS__New(Event)
2329
- local invoke = Event.invoke
2330
2462
  local trigger = CreateTrigger()
2331
2463
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2332
2464
  TriggerAddCondition(
@@ -2336,38 +2468,57 @@ Unit.onDamaging = (function()
2336
2468
  if source and source.typeId == dummyUnitId then
2337
2469
  source = nil
2338
2470
  end
2339
- local target = BlzGetEventDamageTarget()
2471
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2472
+ local metadata = damageMetadataByTarget[target]
2473
+ damageMetadataByTarget[target] = nil
2340
2474
  local data = {
2341
2475
  amount = GetEventDamage(),
2342
- attackType = BlzGetEventAttackType(),
2476
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2343
2477
  damageType = BlzGetEventDamageType(),
2344
- weaponType = BlzGetEventWeaponType(),
2345
- isAttack = BlzGetEventIsAttack()
2478
+ weaponSoundType = nativeToWeaponSoundType(BlzGetEventWeaponType()),
2479
+ metadata = metadata,
2480
+ isAttack = BlzGetEventIsAttack(),
2481
+ originalAmount = GetEventDamage(),
2482
+ originalMetadata = metadata,
2483
+ preventRetaliation = damagingEventPreventRetaliation
2346
2484
  }
2347
2485
  if data.isAttack and source then
2348
- 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
2349
- if weapon == -1 then
2350
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2351
- weapon = 0
2352
- end
2353
- data.weapon = assert(source.weapons[weapon + 1])
2486
+ data.weapon = source:chooseWeapon(target)
2354
2487
  end
2355
2488
  if not data.isAttack or not source or not source._attackHandlers then
2356
2489
  invoke(
2357
2490
  event,
2358
2491
  source,
2359
- ____exports.Unit:of(target),
2492
+ target,
2360
2493
  setmetatable(
2361
2494
  {},
2362
2495
  {
2363
2496
  __index = data,
2364
2497
  __newindex = function(self, key, value)
2365
- damageSetters[key](value)
2498
+ local damageSetter = damageSetters[key]
2499
+ if damageSetter ~= nil then
2500
+ damageSetter(value)
2501
+ end
2366
2502
  data[key] = value
2367
2503
  end
2368
2504
  }
2369
2505
  )
2370
2506
  )
2507
+ if data[0] and source then
2508
+ local sourceOwner = source.owner.handle
2509
+ data[1] = sourceOwner
2510
+ local targetOwner = target.owner.handle
2511
+ data[2] = targetOwner
2512
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2513
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2514
+ data[3] = true
2515
+ end
2516
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2517
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2518
+ data[4] = true
2519
+ end
2520
+ end
2521
+ damagingEventByTarget[target] = data
2371
2522
  return
2372
2523
  end
2373
2524
  BlzSetEventDamage(0)
@@ -2375,7 +2526,7 @@ Unit.onDamaging = (function()
2375
2526
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2376
2527
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2377
2528
  local sourceOwner = source.owner.handle
2378
- local targetOwner = GetOwningPlayer(target)
2529
+ local targetOwner = target.owner.handle
2379
2530
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2380
2531
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2381
2532
  Timer:run(function()
@@ -2391,25 +2542,21 @@ Unit.onDamaging = (function()
2391
2542
  for ____, ____value in ipairs(source._attackHandlers) do
2392
2543
  local condition = ____value[1]
2393
2544
  local action = ____value[2]
2394
- if condition(
2395
- source,
2396
- ____exports.Unit:of(target),
2397
- data
2398
- ) then
2545
+ if condition(source, target, data) then
2399
2546
  action(
2400
2547
  source,
2401
- ____exports.Unit:of(target),
2548
+ target,
2402
2549
  setmetatable(
2403
2550
  {fire = function()
2404
2551
  UnitDamageTarget(
2405
2552
  source.handle,
2406
- target,
2553
+ target.handle,
2407
2554
  data.amount,
2408
2555
  true,
2409
2556
  true,
2410
- data.attackType,
2557
+ attackTypeToNative(data.attackType),
2411
2558
  data.damageType,
2412
- data.weaponType
2559
+ weaponSoundTypeToNative(data.weaponSoundType)
2413
2560
  )
2414
2561
  end},
2415
2562
  {__index = data, __newindex = data}
@@ -2425,7 +2572,6 @@ end)()
2425
2572
  Unit.onDamage = __TS__New(
2426
2573
  InitializingEvent,
2427
2574
  function(event)
2428
- local invoke = Event.invoke
2429
2575
  local trigger = CreateTrigger()
2430
2576
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2431
2577
  TriggerAddCondition(
@@ -2435,29 +2581,54 @@ Unit.onDamage = __TS__New(
2435
2581
  if source and source.typeId == dummyUnitId then
2436
2582
  source = nil
2437
2583
  end
2584
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2585
+ local damagingEvent = damagingEventByTarget[target]
2586
+ damagingEventByTarget[target] = nil
2438
2587
  local data = {
2439
2588
  amount = GetEventDamage(),
2440
- attackType = BlzGetEventAttackType(),
2589
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2441
2590
  damageType = BlzGetEventDamageType(),
2442
- weaponType = BlzGetEventWeaponType(),
2591
+ weaponSoundType = nativeToWeaponSoundType(BlzGetEventWeaponType()),
2592
+ metadata = damagingEvent and damagingEvent.metadata,
2443
2593
  isAttack = BlzGetEventIsAttack(),
2594
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2595
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2444
2596
  preventDeath = damageEventPreventDeath
2445
2597
  }
2598
+ if damagingEvent then
2599
+ for key, value in pairs(damagingEvent) do
2600
+ if isAttribute(key) then
2601
+ data[key] = value
2602
+ end
2603
+ end
2604
+ local sourceOwner = damagingEvent[1]
2605
+ if sourceOwner then
2606
+ local targetOwner = damagingEvent[2]
2607
+ if damagingEvent[3] then
2608
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2609
+ end
2610
+ if damagingEvent[4] then
2611
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2612
+ end
2613
+ end
2614
+ end
2446
2615
  local evData = setmetatable(
2447
2616
  {},
2448
2617
  {
2449
2618
  __index = data,
2450
2619
  __newindex = function(self, key, value)
2451
- damageSetters[key](value)
2620
+ local damageSetter = damageSetters[key]
2621
+ if damageSetter ~= nil then
2622
+ damageSetter(value)
2623
+ end
2452
2624
  data[key] = value
2453
2625
  end
2454
2626
  }
2455
2627
  )
2456
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2457
2628
  invoke(event, source, target, evData)
2458
2629
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2459
2630
  local bonusHealth = math.ceil(evData.amount)
2460
- target[104] = (target[104] or 0) + bonusHealth
2631
+ target[106] = (target[106] or 0) + bonusHealth
2461
2632
  BlzSetUnitMaxHP(
2462
2633
  target.handle,
2463
2634
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2471,7 +2642,7 @@ Unit.onDamage = __TS__New(
2471
2642
  evData[0],
2472
2643
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2473
2644
  )
2474
- target[104] = (target[104] or 0) - bonusHealth
2645
+ target[106] = (target[106] or 0) - bonusHealth
2475
2646
  SetWidgetLife(
2476
2647
  target.handle,
2477
2648
  GetWidgetLife(target.handle) - bonusHealth
@@ -2491,32 +2662,60 @@ Unit.onDamage = __TS__New(
2491
2662
  DestroyTrigger(trigger)
2492
2663
  end
2493
2664
  )
2494
- Unit.onItemDrop = __TS__New(
2665
+ Unit.itemDroppedEvent = __TS__New(
2495
2666
  ____exports.UnitTriggerEvent,
2496
2667
  EVENT_PLAYER_UNIT_DROP_ITEM,
2497
2668
  function()
2498
2669
  local unit = getTriggerUnit()
2499
- if getUnitTypeId(unit) ~= dummyUnitId then
2500
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2670
+ local item = getManipulatedItem()
2671
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2672
+ return ____exports.Unit:of(unit), Item:of(item)
2501
2673
  end
2502
2674
  return IgnoreEvent
2503
2675
  end
2504
2676
  )
2505
- Unit.onItemPickup = __TS__New(
2677
+ Unit.itemPickedUpEvent = __TS__New(
2506
2678
  ____exports.UnitTriggerEvent,
2507
2679
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2508
2680
  function()
2509
- local unit = getTriggerUnit()
2510
- if getUnitTypeId(unit) ~= dummyUnitId then
2511
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2681
+ local unitHandle = getTriggerUnit()
2682
+ local itemHandle = getManipulatedItem()
2683
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not isItemIgnoredInEvents(itemHandle) then
2684
+ local unit = ____exports.Unit:of(unitHandle)
2685
+ local item = Item:of(itemHandle)
2686
+ if ownerByItem[item] ~= unit then
2687
+ return unit, item
2688
+ end
2512
2689
  end
2513
2690
  return IgnoreEvent
2514
2691
  end
2515
2692
  )
2516
- Unit.onItemUse = __TS__New(
2693
+ Unit.itemUsedEvent = __TS__New(
2517
2694
  ____exports.UnitTriggerEvent,
2518
2695
  EVENT_PLAYER_UNIT_USE_ITEM,
2519
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2696
+ function()
2697
+ local unit = getTriggerUnit()
2698
+ local item = getManipulatedItem()
2699
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2700
+ return ____exports.Unit:of(unit), Item:of(item)
2701
+ end
2702
+ return IgnoreEvent
2703
+ end
2704
+ )
2705
+ __TS__ObjectDefineProperty(
2706
+ Unit,
2707
+ "itemChargesChangedEvent",
2708
+ {get = function(self)
2709
+ local event = __TS__New(Event)
2710
+ Item.chargesChangedEvent:addListener(function(item)
2711
+ local unit = item.owner
2712
+ if unit ~= nil then
2713
+ invoke(event, unit, item)
2714
+ end
2715
+ end)
2716
+ rawset(self, "itemChargesChangedEvent", event)
2717
+ return event
2718
+ end}
2520
2719
  )
2521
2720
  __TS__ObjectDefineProperty(
2522
2721
  Unit,
@@ -2543,6 +2742,10 @@ __TS__ObjectDefineProperty(
2543
2742
  rawset(self, "destroyEvent", destroyEvent)
2544
2743
  return destroyEvent
2545
2744
  end}
2745
+ )
2746
+ Unit.synchronize = synchronizer(
2747
+ function(unit) return unit.syncId end,
2748
+ function(syncId) return unitBySyncId[syncId] end
2546
2749
  );
2547
2750
  (function(self)
2548
2751
  local leaveAbilityIds = postcompile(function()
@@ -2560,11 +2763,7 @@ __TS__ObjectDefineProperty(
2560
2763
  function(____, id) return fourCC(id) end
2561
2764
  )
2562
2765
  end)
2563
- for ____, leaveOrderId in ipairs({
2564
- orderId("undefend"),
2565
- orderId("magicundefense"),
2566
- orderId("unimmolation")
2567
- }) do
2766
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2568
2767
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2569
2768
  local handle = unit.handle
2570
2769
  for i = 1, #leaveAbilityIds do
@@ -2572,7 +2771,8 @@ __TS__ObjectDefineProperty(
2572
2771
  return
2573
2772
  end
2574
2773
  end
2575
- unit:destroy()
2774
+ unit:saveData()
2775
+ Timer:run(unit, "destroy")
2576
2776
  end)
2577
2777
  end
2578
2778
  end)(Unit)