warscript 0.0.1-dev.6745db1 → 0.0.1-dev.6817452

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 (334) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/dummy.lua +4 -2
  4. package/core/types/effect.d.ts +11 -1
  5. package/core/types/effect.lua +43 -77
  6. package/core/types/frame.d.ts +1 -0
  7. package/core/types/frame.lua +126 -46
  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 +73 -25
  13. package/core/types/playerCamera.lua +44 -0
  14. package/core/types/playerColor.lua +4 -3
  15. package/core/types/sound.d.ts +1 -1
  16. package/core/types/sound.lua +14 -9
  17. package/core/types/tileCell.d.ts +11 -1
  18. package/core/types/tileCell.lua +97 -0
  19. package/core/types/timer.d.ts +3 -2
  20. package/core/types/timer.lua +22 -2
  21. package/core/types/unit.d.ts +5 -0
  22. package/core/types/unit.lua +5 -0
  23. package/core/util.d.ts +3 -1
  24. package/core/util.lua +109 -3
  25. package/decl/native.d.ts +707 -9
  26. package/destroyable.d.ts +1 -0
  27. package/destroyable.lua +9 -0
  28. package/engine/behavior.d.ts +12 -1
  29. package/engine/behavior.lua +199 -65
  30. package/engine/behaviour/ability/apply-buff.lua +4 -4
  31. package/engine/behaviour/ability/apply-unit-behavior.lua +5 -0
  32. package/engine/behaviour/ability/damage.d.ts +4 -0
  33. package/engine/behaviour/ability/damage.lua +19 -15
  34. package/engine/behaviour/ability/emulate-impact.lua +5 -4
  35. package/engine/behaviour/ability/on-command-impact.d.ts +1 -0
  36. package/engine/behaviour/ability/on-command-impact.lua +1 -0
  37. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  38. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  39. package/engine/behaviour/ability.d.ts +13 -6
  40. package/engine/behaviour/ability.lua +56 -1
  41. package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
  42. package/engine/behaviour/unit/stun-immunity.lua +17 -7
  43. package/engine/behaviour/unit.d.ts +16 -5
  44. package/engine/behaviour/unit.lua +127 -22
  45. package/engine/buff.d.ts +73 -27
  46. package/engine/buff.lua +424 -193
  47. package/engine/index.d.ts +2 -1
  48. package/engine/internal/ability.d.ts +7 -1
  49. package/engine/internal/ability.lua +82 -45
  50. package/engine/internal/item/fields.d.ts +12 -0
  51. package/engine/internal/item/fields.lua +33 -0
  52. package/engine/internal/item/owner-cache.d.ts +5 -0
  53. package/engine/internal/item/owner-cache.lua +4 -0
  54. package/engine/internal/item+owner.d.ts +2 -0
  55. package/engine/internal/item+owner.lua +27 -4
  56. package/engine/internal/item.d.ts +27 -14
  57. package/engine/internal/item.lua +180 -82
  58. package/engine/internal/mechanics/cast-ability.lua +6 -3
  59. package/engine/internal/misc/unit-ability-level-natives.lua +12 -0
  60. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  61. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  62. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  63. package/engine/internal/object-data/health-bonus.lua +16 -0
  64. package/engine/internal/object-data/health-regeneration-rate-increase.d.ts +2 -0
  65. package/engine/internal/object-data/health-regeneration-rate-increase.lua +48 -0
  66. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  67. package/engine/internal/object-data/mana-bonus.lua +16 -0
  68. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  69. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  70. package/engine/internal/unit/ability.d.ts +14 -14
  71. package/engine/internal/unit/ability.lua +86 -47
  72. package/engine/internal/unit/add-item-to-slot-init.lua +3 -14
  73. package/engine/internal/unit/add-item-to-slot.lua +53 -12
  74. package/engine/internal/unit/appearance.d.ts +15 -0
  75. package/engine/internal/unit/appearance.lua +85 -0
  76. package/engine/internal/unit/attributes.d.ts +17 -0
  77. package/engine/internal/unit/attributes.lua +46 -0
  78. package/engine/internal/unit/bonus.d.ts +14 -0
  79. package/engine/internal/unit/bonus.lua +102 -8
  80. package/engine/internal/unit/buff.d.ts +2 -2
  81. package/engine/internal/unit/buff.lua +34 -19
  82. package/engine/internal/unit/equipment-inventory.d.ts +44 -0
  83. package/engine/internal/unit/equipment-inventory.lua +233 -0
  84. package/engine/internal/unit/expiration-timer.lua +1 -1
  85. package/engine/internal/unit/extended-inventory.d.ts +25 -0
  86. package/engine/internal/unit/extended-inventory.lua +99 -0
  87. package/engine/internal/unit/fly-height.d.ts +7 -0
  88. package/engine/internal/unit/fly-height.lua +20 -0
  89. package/engine/internal/unit/ignore-events-items.lua +10 -1
  90. package/engine/internal/unit/interrupts.d.ts +12 -0
  91. package/engine/internal/unit/interrupts.lua +28 -0
  92. package/engine/internal/unit/{item.d.ts → inventory.d.ts} +7 -3
  93. package/engine/internal/unit/inventory.lua +87 -0
  94. package/engine/internal/unit/item-container.d.ts +25 -0
  95. package/engine/internal/unit/item-container.lua +11 -0
  96. package/engine/internal/unit/item-order-events.d.ts +17 -0
  97. package/engine/internal/unit/item-order-events.lua +67 -0
  98. package/engine/internal/unit/item-slot.d.ts +27 -0
  99. package/engine/internal/unit/item-slot.lua +92 -0
  100. package/engine/internal/unit/main-selected.lua +12 -27
  101. package/engine/internal/unit/order.d.ts +3 -3
  102. package/engine/internal/unit/order.lua +10 -10
  103. package/engine/internal/unit/pseudo-passive-abilities.d.ts +2 -0
  104. package/engine/internal/unit/pseudo-passive-abilities.lua +11 -0
  105. package/engine/internal/unit/range-event.d.ts +12 -0
  106. package/engine/internal/unit/range-event.lua +90 -0
  107. package/engine/internal/unit/scale.d.ts +7 -0
  108. package/engine/internal/unit/scale.lua +20 -0
  109. package/engine/internal/unit+ability.d.ts +2 -1
  110. package/engine/internal/unit+ability.lua +63 -2
  111. package/engine/internal/unit+bonus.lua +3 -3
  112. package/engine/internal/unit+damage.d.ts +9 -0
  113. package/engine/internal/unit+damage.lua +33 -0
  114. package/engine/internal/unit+rally.lua +9 -31
  115. package/engine/internal/unit-missile-data.lua +58 -32
  116. package/engine/internal/unit-missile-launch.lua +64 -33
  117. package/engine/internal/unit.d.ts +18 -30
  118. package/engine/internal/unit.lua +188 -269
  119. package/engine/local-client.d.ts +28 -0
  120. package/engine/local-client.lua +324 -54
  121. package/engine/object-data/auxiliary/equipment-slot.d.ts +12 -0
  122. package/engine/object-data/auxiliary/equipment-slot.lua +2 -0
  123. package/engine/object-data/auxiliary/equipment-type.d.ts +12 -0
  124. package/engine/object-data/auxiliary/equipment-type.lua +26 -0
  125. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  126. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  127. package/engine/object-data/auxiliary/item-class.d.ts +11 -0
  128. package/engine/object-data/auxiliary/item-class.lua +2 -0
  129. package/engine/object-data/auxiliary/item-tag.d.ts +12 -0
  130. package/engine/object-data/auxiliary/item-tag.lua +2 -0
  131. package/engine/object-data/auxiliary/order-type.d.ts +939 -0
  132. package/engine/object-data/auxiliary/order-type.lua +2 -0
  133. package/engine/object-data/auxiliary/sound-set-name.d.ts +14 -3
  134. package/engine/object-data/auxiliary/unit-attribute.lua +1 -1
  135. package/engine/object-data/entry/ability-type/apprehend.d.ts +22 -0
  136. package/engine/object-data/entry/ability-type/apprehend.lua +66 -0
  137. package/engine/object-data/entry/ability-type/armor-bonus.d.ts +8 -0
  138. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  139. package/engine/object-data/entry/ability-type/aura-of-blight.d.ts +13 -0
  140. package/engine/object-data/entry/ability-type/aura-of-blight.lua +39 -0
  141. package/engine/object-data/entry/ability-type/banshee.d.ts +8 -0
  142. package/engine/object-data/entry/ability-type/banshee.lua +13 -0
  143. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.d.ts +12 -0
  144. package/engine/object-data/entry/ability-type/banshees-wail-damage-amp.lua +27 -0
  145. package/engine/object-data/entry/ability-type/banshees-wail.d.ts +31 -0
  146. package/engine/object-data/entry/ability-type/banshees-wail.lua +117 -0
  147. package/engine/object-data/entry/ability-type/battering-ram.d.ts +33 -0
  148. package/engine/object-data/entry/ability-type/battering-ram.lua +130 -0
  149. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +3 -0
  150. package/engine/object-data/entry/ability-type/blank-configurable.lua +30 -0
  151. package/engine/object-data/entry/ability-type/cleansing-fire.d.ts +27 -0
  152. package/engine/object-data/entry/ability-type/cleansing-fire.lua +104 -0
  153. package/engine/object-data/entry/ability-type/consecration.d.ts +15 -0
  154. package/engine/object-data/entry/ability-type/consecration.lua +52 -0
  155. package/engine/object-data/entry/ability-type/cooldown-reduction.d.ts +12 -0
  156. package/engine/object-data/entry/ability-type/cooldown-reduction.lua +39 -0
  157. package/engine/object-data/entry/ability-type/critical-strike-system.d.ts +18 -0
  158. package/engine/object-data/entry/ability-type/critical-strike-system.lua +65 -0
  159. package/engine/object-data/entry/ability-type/deathseeker-arrows.d.ts +21 -0
  160. package/engine/object-data/entry/ability-type/deathseeker-arrows.lua +78 -0
  161. package/engine/object-data/entry/ability-type/equipment-inventory-interface.d.ts +8 -0
  162. package/engine/object-data/entry/ability-type/equipment-inventory-interface.lua +13 -0
  163. package/engine/object-data/entry/ability-type/equipment-inventory.d.ts +13 -0
  164. package/engine/object-data/entry/ability-type/equipment-inventory.lua +27 -0
  165. package/engine/object-data/entry/ability-type/equipment.d.ts +13 -0
  166. package/engine/object-data/entry/ability-type/equipment.lua +27 -0
  167. package/engine/object-data/entry/ability-type/grant-talent-point.d.ts +8 -0
  168. package/engine/object-data/entry/ability-type/grant-talent-point.lua +13 -0
  169. package/engine/object-data/entry/ability-type/grim-conviction.d.ts +36 -0
  170. package/engine/object-data/entry/ability-type/grim-conviction.lua +131 -0
  171. package/engine/object-data/entry/ability-type/grit.d.ts +18 -0
  172. package/engine/object-data/entry/ability-type/grit.lua +65 -0
  173. package/engine/object-data/entry/ability-type/guiding-hand.d.ts +27 -0
  174. package/engine/object-data/entry/ability-type/guiding-hand.lua +104 -0
  175. package/engine/object-data/entry/ability-type/headsplitter.d.ts +27 -0
  176. package/engine/object-data/entry/ability-type/headsplitter.lua +104 -0
  177. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → healing-modifier.d.ts} +4 -3
  178. package/engine/object-data/entry/ability-type/healing-modifier.lua +26 -0
  179. package/engine/object-data/entry/ability-type/healing-ward-aura.d.ts +13 -0
  180. package/engine/object-data/entry/ability-type/healing-ward-aura.lua +39 -0
  181. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  182. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  183. package/engine/object-data/entry/ability-type/heroic-slash.d.ts +18 -0
  184. package/engine/object-data/entry/ability-type/heroic-slash.lua +65 -0
  185. package/engine/object-data/entry/ability-type/holy-wrath.d.ts +30 -0
  186. package/engine/object-data/entry/ability-type/holy-wrath.lua +117 -0
  187. package/engine/object-data/entry/ability-type/inspire-courage.d.ts +18 -0
  188. package/engine/object-data/entry/ability-type/inspire-courage.lua +65 -0
  189. package/engine/object-data/entry/ability-type/item-life-regeneration.d.ts +10 -0
  190. package/engine/object-data/entry/ability-type/item-life-regeneration.lua +26 -0
  191. package/engine/object-data/entry/ability-type/lights-mercy.d.ts +27 -0
  192. package/engine/object-data/entry/ability-type/lights-mercy.lua +104 -0
  193. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  194. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  195. package/engine/object-data/entry/ability-type/mana-efficiency.d.ts +12 -0
  196. package/engine/object-data/entry/ability-type/mana-efficiency.lua +39 -0
  197. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  198. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  199. package/engine/object-data/entry/ability-type/mind-control.d.ts +21 -0
  200. package/engine/object-data/entry/ability-type/mind-control.lua +78 -0
  201. package/engine/object-data/entry/ability-type/on-attack-cast-spell.d.ts +21 -0
  202. package/engine/object-data/entry/ability-type/on-attack-cast-spell.lua +52 -0
  203. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.d.ts +19 -0
  204. package/engine/object-data/entry/ability-type/on-basic-attack-cast-spell.lua +65 -0
  205. package/engine/object-data/entry/ability-type/on-hit-cast-spell.d.ts +15 -0
  206. package/engine/object-data/entry/ability-type/on-hit-cast-spell.lua +26 -0
  207. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.d.ts +6 -0
  208. package/engine/object-data/entry/ability-type/on-magic-attack-cast-spell.lua +12 -0
  209. package/engine/object-data/entry/ability-type/provoke.d.ts +21 -0
  210. package/engine/object-data/entry/ability-type/provoke.lua +66 -0
  211. package/engine/object-data/entry/ability-type/raise-the-banner.d.ts +9 -0
  212. package/engine/object-data/entry/ability-type/raise-the-banner.lua +26 -0
  213. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  214. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  215. package/engine/object-data/entry/ability-type/resolve.d.ts +12 -0
  216. package/engine/object-data/entry/ability-type/resolve.lua +39 -0
  217. package/engine/object-data/entry/ability-type/righteous-fury.d.ts +33 -0
  218. package/engine/object-data/entry/ability-type/righteous-fury.lua +130 -0
  219. package/engine/object-data/entry/ability-type/sacred-aura.d.ts +27 -0
  220. package/engine/object-data/entry/ability-type/sacred-aura.lua +104 -0
  221. package/engine/object-data/entry/ability-type/soul-lantern.d.ts +30 -0
  222. package/engine/object-data/entry/ability-type/soul-lantern.lua +117 -0
  223. package/engine/object-data/entry/ability-type/spell-amp.d.ts +15 -0
  224. package/engine/object-data/entry/ability-type/spell-amp.lua +52 -0
  225. package/engine/object-data/entry/ability-type/spell-critical-strike.d.ts +12 -0
  226. package/engine/object-data/entry/ability-type/spell-critical-strike.lua +39 -0
  227. package/engine/object-data/entry/ability-type/spell-vamp.d.ts +12 -0
  228. package/engine/object-data/entry/ability-type/spell-vamp.lua +39 -0
  229. package/engine/object-data/entry/ability-type/stackable-evasion.d.ts +9 -0
  230. package/engine/object-data/entry/ability-type/stackable-evasion.lua +13 -0
  231. package/engine/object-data/entry/ability-type/stackable-hardened-skin.d.ts +21 -0
  232. package/engine/object-data/entry/ability-type/stackable-hardened-skin.lua +78 -0
  233. package/engine/object-data/entry/ability-type/stackable-life-steal.d.ts +9 -0
  234. package/engine/object-data/entry/ability-type/stackable-life-steal.lua +26 -0
  235. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.d.ts +9 -0
  236. package/engine/object-data/entry/ability-type/stackable-spell-damage-reduction.lua +13 -0
  237. package/engine/object-data/entry/ability-type/stackable-thorn-shield.d.ts +9 -0
  238. package/engine/object-data/entry/ability-type/stackable-thorn-shield.lua +13 -0
  239. package/engine/object-data/entry/ability-type/stat-details.d.ts +12 -0
  240. package/engine/object-data/entry/ability-type/stat-details.lua +27 -0
  241. package/engine/object-data/entry/ability-type/surge-of-light.d.ts +33 -0
  242. package/engine/object-data/entry/ability-type/surge-of-light.lua +130 -0
  243. package/engine/object-data/entry/ability-type/sweeping-strike.d.ts +57 -0
  244. package/engine/object-data/entry/ability-type/sweeping-strike.lua +234 -0
  245. package/engine/object-data/entry/ability-type/talents.d.ts +12 -0
  246. package/engine/object-data/entry/ability-type/talents.lua +27 -0
  247. package/engine/object-data/entry/ability-type/unyielding-guard.d.ts +30 -0
  248. package/engine/object-data/entry/ability-type/unyielding-guard.lua +117 -0
  249. package/engine/object-data/entry/ability-type/valiant-charge.d.ts +27 -0
  250. package/engine/object-data/entry/ability-type/valiant-charge.lua +104 -0
  251. package/engine/object-data/entry/ability-type/warcry.d.ts +9 -0
  252. package/engine/object-data/entry/ability-type/warcry.lua +26 -0
  253. package/engine/object-data/entry/ability-type/withering-fire.d.ts +21 -0
  254. package/engine/object-data/entry/ability-type/withering-fire.lua +78 -0
  255. package/engine/object-data/entry/ability-type.d.ts +12 -3
  256. package/engine/object-data/entry/ability-type.lua +141 -5
  257. package/engine/object-data/entry/buff-type/applicable.lua +113 -109
  258. package/engine/object-data/entry/buff-type.d.ts +6 -2
  259. package/engine/object-data/entry/buff-type.lua +26 -0
  260. package/engine/object-data/entry/destructible-type.d.ts +32 -2
  261. package/engine/object-data/entry/destructible-type.lua +181 -0
  262. package/engine/object-data/entry/item-type.d.ts +18 -3
  263. package/engine/object-data/entry/item-type.lua +84 -0
  264. package/engine/object-data/entry/lightning-type.d.ts +6 -8
  265. package/engine/object-data/entry/lightning-type.lua +1 -1
  266. package/engine/object-data/entry/sound-preset.d.ts +2 -2
  267. package/engine/object-data/entry/unit-type.d.ts +51 -2
  268. package/engine/object-data/entry/unit-type.lua +415 -37
  269. package/engine/object-data/entry/upgrade.d.ts +2 -2
  270. package/engine/object-data/entry.d.ts +6 -1
  271. package/engine/object-data/entry.lua +8 -0
  272. package/engine/object-field/ability.d.ts +3 -3
  273. package/engine/object-field/ability.lua +9 -8
  274. package/engine/object-field/item.d.ts +22 -0
  275. package/engine/object-field/item.lua +118 -0
  276. package/engine/object-field/unit.d.ts +20 -5
  277. package/engine/object-field/unit.lua +61 -0
  278. package/engine/object-field.d.ts +12 -4
  279. package/engine/object-field.lua +273 -126
  280. package/engine/random.d.ts +10 -0
  281. package/engine/random.lua +21 -0
  282. package/engine/standard/entries/ability-type.d.ts +3102 -7
  283. package/engine/standard/entries/ability-type.lua +0 -6
  284. package/engine/standard/entries/item-type.d.ts +1299 -0
  285. package/engine/standard/entries/item-type.lua +2 -0
  286. package/engine/standard/entries/lightning-type.d.ts +42 -15
  287. package/engine/standard/entries/lightning-type.lua +0 -14
  288. package/engine/standard/entries/unit-type.d.ts +5 -0
  289. package/engine/standard/entries/unit-type.lua +5 -0
  290. package/engine/standard/fields/ability.d.ts +2 -2
  291. package/engine/standard/fields/ability.lua +2 -2
  292. package/engine/standard/fields/item.d.ts +4 -0
  293. package/engine/standard/fields/item.lua +6 -0
  294. package/engine/standard/fields/unit.d.ts +11 -3
  295. package/engine/standard/fields/unit.lua +15 -2
  296. package/engine/synchronization.d.ts +11 -0
  297. package/engine/synchronization.lua +77 -0
  298. package/engine/text-tag.lua +3 -2
  299. package/engine/unit.d.ts +10 -1
  300. package/engine/unit.lua +10 -1
  301. package/event.d.ts +1 -1
  302. package/lualib_bundle.lua +1 -1
  303. package/math.d.ts +2 -0
  304. package/math.lua +14 -0
  305. package/net/socket.lua +1 -1
  306. package/network.lua +25 -1
  307. package/objutil/buff.lua +11 -9
  308. package/objutil/object.lua +1 -1
  309. package/operation.d.ts +8 -1
  310. package/operation.lua +38 -18
  311. package/package.json +3 -23
  312. package/patch-lua.lua +15 -0
  313. package/patch-lualib.lua +1 -1
  314. package/utility/arrays.d.ts +1 -0
  315. package/utility/arrays.lua +8 -0
  316. package/utility/callback-array.d.ts +17 -0
  317. package/utility/callback-array.lua +61 -0
  318. package/utility/linked-map.d.ts +35 -0
  319. package/utility/linked-map.lua +107 -0
  320. package/utility/linked-set.d.ts +4 -1
  321. package/utility/linked-set.lua +46 -1
  322. package/utility/lua-maps.d.ts +11 -2
  323. package/utility/lua-maps.lua +33 -2
  324. package/utility/random.d.ts +102 -0
  325. package/utility/random.lua +273 -0
  326. package/utility/records.lua +20 -1
  327. package/utility/types.d.ts +3 -0
  328. package/utility/unordered-map.d.ts +27 -0
  329. package/utility/unordered-map.lua +99 -0
  330. package/engine/internal/unit/item.lua +0 -78
  331. /package/engine/internal/{object-data/armor-increase.d.ts → misc/unit-ability-level-natives.d.ts} +0 -0
  332. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  333. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  334. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -47,12 +47,10 @@ 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
56
54
  local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
57
55
  local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
58
56
  local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
@@ -62,6 +60,10 @@ local ____attributes = require("attributes")
62
60
  local isAttribute = ____attributes.isAttribute
63
61
  local ____ability = require("engine.internal.item.ability")
64
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
65
67
  local match = string.match
66
68
  local ____tostring = _G.tostring
67
69
  local setUnitAnimation = SetUnitAnimation
@@ -71,16 +73,12 @@ local getUnitRealField = BlzGetUnitRealField
71
73
  local getHeroStr = GetHeroStr
72
74
  local getHeroAgi = GetHeroAgi
73
75
  local getHeroInt = GetHeroInt
74
- local setHeroStr = SetHeroStr
75
- local setHeroAgi = SetHeroAgi
76
- local setHeroInt = SetHeroInt
77
76
  local getUnitBooleanField = BlzGetUnitBooleanField
78
77
  local getUnitStringField = BlzGetUnitStringField
79
78
  local setUnitIntegerField = BlzSetUnitIntegerField
80
79
  local setUnitRealField = BlzSetUnitRealField
81
80
  local setUnitBooleanField = BlzSetUnitBooleanField
82
81
  local setUnitStringField = BlzSetUnitStringField
83
- local setUnitScale = SetUnitScale
84
82
  local setUnitPosition = SetUnitPosition
85
83
  local setUnitTimeScale = SetUnitTimeScale
86
84
  local getHandleId = GetHandleId
@@ -108,7 +106,6 @@ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
108
106
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
109
107
  local getUnitAbilityLevel = GetUnitAbilityLevel
110
108
  local unitDisableAbility = BlzUnitDisableAbility
111
- local unitInterruptAttack = BlzUnitInterruptAttack
112
109
  local isUnitInvisible = IsUnitInvisible
113
110
  local isUnitVisible = IsUnitVisible
114
111
  local getUnitX = GetUnitX
@@ -384,15 +381,27 @@ local modifiers = {
384
381
  end,
385
382
  armor = function(unit, value)
386
383
  if UnitAddAbility(unit, armorBonusAbilityId) then
387
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
384
+ assert(
385
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
386
+ "armor bonus ability must be made permanent",
387
+ unit
388
+ )
388
389
  end
389
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
390
- assert(BlzSetAbilityRealLevelField(
391
- ability,
392
- armorBonusField,
393
- 0,
394
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
395
- ))
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
+ )
396
405
  end
397
406
  }
398
407
  local getters = {
@@ -410,6 +419,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
410
419
  self.unit = unit
411
420
  self.index = index
412
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
+ )
413
435
  __TS__SetDescriptor(
414
436
  UnitWeapon.prototype,
415
437
  "cooldown",
@@ -568,8 +590,6 @@ __TS__SetDescriptor(
568
590
  },
569
591
  true
570
592
  )
571
- local unitInventorySize = UnitInventorySize
572
- local unitItemInSlot = UnitItemInSlot
573
593
  local getItemAbility = BlzGetItemAbility
574
594
  local getUnitAbility = BlzGetUnitAbility
575
595
  local getUnitAbilityByIndex = BlzGetUnitAbilityByIndex
@@ -587,8 +607,8 @@ local function retrieveAbility(unit, ability, abilityId)
587
607
  ____exports.Unit:of(unit)
588
608
  )
589
609
  end
590
- for i = 0, unitInventorySize(unit) - 1 do
591
- local item = unitItemInSlot(unit, i)
610
+ for i = 0, UnitInventorySize(unit) - 1 do
611
+ local item = UnitItemInSlot(unit, i)
592
612
  if getItemAbility(item, abilityId) == ability then
593
613
  return ItemAbility:of(
594
614
  ability,
@@ -633,26 +653,30 @@ local fieldSetters = {
633
653
  }
634
654
  local dummies = {}
635
655
  for ____, player in ipairs(Player.all) do
636
- local dummy = assert(createUnit(
637
- player.handle,
638
- dummyUnitId,
639
- 0,
640
- 0,
641
- 270
642
- ))
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
+ )
643
667
  ShowUnit(dummy, false)
644
668
  dummies[player] = dummy
645
669
  end
646
670
  local function delayHealthChecksCallback(unit)
647
- local counter = (unit[103] or 0) - 1
671
+ local counter = (unit[104] or 0) - 1
648
672
  if counter ~= 0 then
649
- unit[103] = counter
673
+ unit[104] = counter
650
674
  return
651
675
  end
652
- unit[103] = nil
653
- local healthBonus = unit[104]
676
+ unit[104] = nil
677
+ local healthBonus = unit[105]
654
678
  if healthBonus ~= nil then
655
- unit[104] = nil
679
+ unit[105] = nil
656
680
  local handle = unit.handle
657
681
  BlzSetUnitMaxHP(
658
682
  handle,
@@ -682,41 +706,57 @@ function Unit.prototype.____constructor(self, handle)
682
706
  nextSyncId = ____nextSyncId_1 + 1
683
707
  self.syncId = ____nextSyncId_1
684
708
  self._owner = Player:of(getOwningPlayer(handle))
685
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
686
- 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
+ )
687
719
  if unitAddAbility(
688
720
  handle,
689
721
  fourCC("Amrf")
690
722
  ) then
691
- assert(unitRemoveAbility(
692
- handle,
693
- fourCC("Amrf")
694
- ))
723
+ assert(
724
+ unitRemoveAbility(
725
+ handle,
726
+ fourCC("Amrf")
727
+ ),
728
+ "fly ability must be removed after addition",
729
+ self
730
+ )
695
731
  end
696
732
  unitBySyncId[self.syncId] = self
697
733
  local ____ = self.abilities
698
734
  end
699
- function Unit.prototype.getEvent(self, event, collector)
700
- self.events = self.events or ({})
701
- local eventId = GetHandleId(event)
702
- if not self.events[eventId] then
703
- 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(
704
741
  TriggerEvent,
705
742
  function(trigger)
706
- TriggerRegisterUnitEvent(trigger, self.handle, event)
743
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
707
744
  end,
708
745
  collector or (function() return {} end)
709
746
  )
747
+ self.events:put(eventId, event)
710
748
  end
711
- 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))
712
756
  end
713
757
  function Unit.prototype.onDestroy(self)
714
758
  local handle = self.handle
715
- self[107] = getUnitX(handle)
716
- self[108] = getUnitY(handle)
717
- if not self._owner then
718
- self._owner = Player:of(getOwningPlayer(handle))
719
- end
759
+ self:saveData()
720
760
  local abilities = self.abilities
721
761
  for ____, ability in ipairs(abilities) do
722
762
  ability:destroy()
@@ -734,7 +774,9 @@ function Unit.prototype.onDestroy(self)
734
774
  end
735
775
  local eventsToDestroy = self._eventsToDestroy
736
776
  if eventsToDestroy ~= nil then
737
- forEach(eventsToDestroy, "destroy")
777
+ for ____, event in ipairs(eventsToDestroy) do
778
+ event:destroy()
779
+ end
738
780
  end
739
781
  if getUnitAbilityLevel(handle, leaveDetectAbilityId) > 0 then
740
782
  unitRemoveAbility(handle, leaveDetectAbilityId)
@@ -752,7 +794,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
752
794
  self._attackHandlers = handlers
753
795
  if #handlers == 1 then
754
796
  local handle = self.handle
755
- 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
+ )
756
802
  end
757
803
  return handler
758
804
  end
@@ -836,16 +882,18 @@ function Unit.prototype.queueAnimation(self, animation)
836
882
  QueueUnitAnimation(self.handle, animation)
837
883
  end
838
884
  function Unit.prototype.chooseWeapon(self, target)
839
- if target:isAllowedTarget(self, self.firstWeapon.allowedTargetCombatClassifications) then
840
- return self.firstWeapon
885
+ local firstWeapon = self.firstWeapon
886
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
887
+ return firstWeapon
841
888
  end
842
- if target:isAllowedTarget(target, self.secondWeapon.allowedTargetCombatClassifications) then
843
- return self.secondWeapon
889
+ local secondWeapon = self.secondWeapon
890
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
891
+ return secondWeapon
844
892
  end
845
893
  return nil
846
894
  end
847
895
  function Unit.prototype.delayHealthChecks(self)
848
- self[103] = (self[103] or 0) + 1
896
+ self[104] = (self[104] or 0) + 1
849
897
  Timer:run(delayHealthChecksCallback, self)
850
898
  end
851
899
  function Unit.prototype.setPosition(self, x, y)
@@ -909,7 +957,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
909
957
  return UnitDropItemSlot(self.handle, item.handle, slot)
910
958
  end
911
959
  function Unit.prototype.itemInSlot(self, slot)
912
- return Item:of(unitItemInSlot(self.handle, slot))
960
+ return Item:of(UnitItemInSlot(self.handle, slot))
913
961
  end
914
962
  function Unit.prototype.addAbility(self, abilityId)
915
963
  local ability = UnitAbility:of(
@@ -935,23 +983,21 @@ end
935
983
  function Unit.prototype.hasAbility(self, abilityId)
936
984
  return getUnitAbilityLevel(self.handle, abilityId) > 0
937
985
  end
938
- function Unit.prototype.getAbilityById(self, abilityId)
986
+ function Unit.prototype.getAbility(self, abilityId)
939
987
  local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
940
988
  return UnitAbility:of(ability, abilityId, self)
941
989
  end
942
- function Unit.prototype.removeAbility(self, abilityId)
943
- if doUnitAbilityAction(self.handle, abilityId, unitRemoveAbility, abilityId) then
944
- local abilities = self.abilities
945
- for i = 1, #abilities do
946
- if abilities[i].typeId == abilityId then
947
- abilities[i]:destroy()
948
- tremove(abilities, i)
949
- return true
950
- end
990
+ function Unit.prototype.removeAbility(self, abilityTypeId)
991
+ local abilities = self.abilities
992
+ for i = 1, #abilities do
993
+ if abilities[i].typeId == abilityTypeId then
994
+ local ability = abilities[i]
995
+ tremove(abilities, i)
996
+ ability:destroy()
997
+ return true
951
998
  end
952
- return true
953
999
  end
954
- return false
1000
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
955
1001
  end
956
1002
  function Unit.prototype.hideAbility(self, abilityId, flag)
957
1003
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -965,24 +1011,6 @@ end
965
1011
  function Unit.prototype.endAbilityCooldown(self, abilityId)
966
1012
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
967
1013
  end
968
- function Unit.prototype.interruptMovement(self)
969
- local handle = self.handle
970
- unitDisableAbility(
971
- handle,
972
- fourCC("Amov"),
973
- true,
974
- false
975
- )
976
- unitDisableAbility(
977
- handle,
978
- fourCC("Amov"),
979
- false,
980
- false
981
- )
982
- end
983
- function Unit.prototype.interruptAttack(self)
984
- unitInterruptAttack(self.handle)
985
- end
986
1014
  function Unit.prototype.interruptCast(self, abilityId)
987
1015
  local handle = self.handle
988
1016
  unitDisableAbility(handle, abilityId, true, false)
@@ -1053,18 +1081,44 @@ function Unit.prototype.unpauseEx(self)
1053
1081
  end
1054
1082
  function Unit.prototype.incrementStunCounter(self)
1055
1083
  local stunCounter = self[102] or 0
1056
- if not self[101] or stunCounter >= 0 then
1084
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1057
1085
  BlzPauseUnitEx(self.handle, true)
1058
1086
  end
1059
1087
  self[102] = stunCounter + 1
1060
1088
  end
1061
1089
  function Unit.prototype.decrementStunCounter(self)
1062
1090
  local stunCounter = self[102] or 0
1063
- if not self[101] or stunCounter >= 1 then
1091
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1064
1092
  BlzPauseUnitEx(self.handle, false)
1065
1093
  end
1066
1094
  self[102] = stunCounter - 1
1067
1095
  end
1096
+ function Unit.prototype.incrementForceStunCounter(self)
1097
+ local forceStunCounter = self[103] or 0
1098
+ if forceStunCounter == 0 then
1099
+ local handle = self.handle
1100
+ if not self[101] then
1101
+ for _ = self[102] or 0, -1 do
1102
+ BlzPauseUnitEx(handle, true)
1103
+ end
1104
+ end
1105
+ BlzPauseUnitEx(handle, true)
1106
+ end
1107
+ self[103] = forceStunCounter + 1
1108
+ end
1109
+ function Unit.prototype.decrementForceStunCounter(self)
1110
+ local forceStunCounter = self[103] or 0
1111
+ if forceStunCounter == 1 then
1112
+ local handle = self.handle
1113
+ if not self[101] then
1114
+ for _ = self[102] or 0, -1 do
1115
+ BlzPauseUnitEx(handle, false)
1116
+ end
1117
+ end
1118
+ BlzPauseUnitEx(handle, false)
1119
+ end
1120
+ self[103] = forceStunCounter - 1
1121
+ end
1068
1122
  function Unit.create(self, owner, id, x, y, facing, skinId)
1069
1123
  local handle = skinId and BlzCreateUnitWithSkin(
1070
1124
  owner.handle,
@@ -1261,7 +1315,7 @@ __TS__SetDescriptor(
1261
1315
  Unit.prototype,
1262
1316
  "isStunned",
1263
1317
  {get = function(self)
1264
- return getUnitCurrentOrder(self.handle) == orderId("stunned")
1318
+ return getUnitCurrentOrder(self.handle) == 851973
1265
1319
  end},
1266
1320
  true
1267
1321
  )
@@ -1351,19 +1405,6 @@ __TS__SetDescriptor(
1351
1405
  },
1352
1406
  true
1353
1407
  )
1354
- __TS__SetDescriptor(
1355
- Unit.prototype,
1356
- "strengthBase",
1357
- {
1358
- get = function(self)
1359
- return getHeroStr(self.handle, false)
1360
- end,
1361
- set = function(self, strengthBase)
1362
- setHeroStr(self.handle, strengthBase, true)
1363
- end
1364
- },
1365
- true
1366
- )
1367
1408
  __TS__SetDescriptor(
1368
1409
  Unit.prototype,
1369
1410
  "strengthBonus",
@@ -1381,19 +1422,6 @@ __TS__SetDescriptor(
1381
1422
  end},
1382
1423
  true
1383
1424
  )
1384
- __TS__SetDescriptor(
1385
- Unit.prototype,
1386
- "agilityBase",
1387
- {
1388
- get = function(self)
1389
- return getHeroAgi(self.handle, false)
1390
- end,
1391
- set = function(self, agilityBase)
1392
- setHeroAgi(self.handle, agilityBase, true)
1393
- end
1394
- },
1395
- true
1396
- )
1397
1425
  __TS__SetDescriptor(
1398
1426
  Unit.prototype,
1399
1427
  "agilityBonus",
@@ -1411,19 +1439,6 @@ __TS__SetDescriptor(
1411
1439
  end},
1412
1440
  true
1413
1441
  )
1414
- __TS__SetDescriptor(
1415
- Unit.prototype,
1416
- "intelligenceBase",
1417
- {
1418
- get = function(self)
1419
- return getHeroInt(self.handle, false)
1420
- end,
1421
- set = function(self, intelligenceBase)
1422
- setHeroInt(self.handle, intelligenceBase, true)
1423
- end
1424
- },
1425
- true
1426
- )
1427
1442
  __TS__SetDescriptor(
1428
1443
  Unit.prototype,
1429
1444
  "intelligenceBonus",
@@ -1472,7 +1487,7 @@ __TS__SetDescriptor(
1472
1487
  "isTeamGlowVisible",
1473
1488
  {
1474
1489
  get = function(self)
1475
- return not self[106]
1490
+ return not self[107]
1476
1491
  end,
1477
1492
  set = function(self, isTeamGlowVisible)
1478
1493
  BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
@@ -1482,7 +1497,7 @@ __TS__SetDescriptor(
1482
1497
  else
1483
1498
  ____temp_7 = nil
1484
1499
  end
1485
- self[106] = ____temp_7
1500
+ self[107] = ____temp_7
1486
1501
  end
1487
1502
  },
1488
1503
  true
@@ -1492,7 +1507,7 @@ __TS__SetDescriptor(
1492
1507
  "color",
1493
1508
  {set = function(self, color)
1494
1509
  SetUnitColor(self.handle, color.handle)
1495
- if self[106] then
1510
+ if self[107] then
1496
1511
  BlzShowUnitTeamGlow(self.handle, false)
1497
1512
  end
1498
1513
  end},
@@ -1516,14 +1531,14 @@ __TS__SetDescriptor(
1516
1531
  "maxHealth",
1517
1532
  {
1518
1533
  get = function(self)
1519
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1534
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1520
1535
  end,
1521
1536
  set = function(self, maxHealth)
1522
- if maxHealth < 1 and self[103] ~= nil then
1523
- self[104] = (self[104] or 0) + (1 - maxHealth)
1537
+ if maxHealth < 1 and self[104] ~= nil then
1538
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1524
1539
  maxHealth = 1
1525
1540
  end
1526
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1541
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1527
1542
  end
1528
1543
  },
1529
1544
  true
@@ -1565,10 +1580,10 @@ __TS__SetDescriptor(
1565
1580
  "health",
1566
1581
  {
1567
1582
  get = function(self)
1568
- return GetWidgetLife(self.handle) - (self[105] or 0)
1583
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1569
1584
  end,
1570
1585
  set = function(self, health)
1571
- SetWidgetLife(self.handle, health + (self[105] or 0))
1586
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1572
1587
  end
1573
1588
  },
1574
1589
  true
@@ -1644,25 +1659,12 @@ __TS__SetDescriptor(
1644
1659
  },
1645
1660
  true
1646
1661
  )
1647
- __TS__SetDescriptor(
1648
- Unit.prototype,
1649
- "flyHeight",
1650
- {
1651
- get = function(self)
1652
- return getUnitFlyHeight(self.handle)
1653
- end,
1654
- set = function(self, v)
1655
- SetUnitFlyHeight(self.handle, v, 100000)
1656
- end
1657
- },
1658
- true
1659
- )
1660
1662
  __TS__SetDescriptor(
1661
1663
  Unit.prototype,
1662
1664
  "x",
1663
1665
  {
1664
1666
  get = function(self)
1665
- return self[107] or getUnitX(self.handle)
1667
+ return self[108] or getUnitX(self.handle)
1666
1668
  end,
1667
1669
  set = function(self, v)
1668
1670
  SetUnitX(self.handle, v)
@@ -1675,7 +1677,7 @@ __TS__SetDescriptor(
1675
1677
  "y",
1676
1678
  {
1677
1679
  get = function(self)
1678
- return self[108] or getUnitY(self.handle)
1680
+ return self[109] or getUnitY(self.handle)
1679
1681
  end,
1680
1682
  set = function(self, v)
1681
1683
  SetUnitY(self.handle, v)
@@ -1780,14 +1782,18 @@ __TS__SetDescriptor(
1780
1782
  local handle = self.handle
1781
1783
  if isPaused and not IsUnitPaused(handle) then
1782
1784
  self[101] = true
1783
- for _ = self[102] or 0, -1 do
1784
- BlzPauseUnitEx(handle, true)
1785
+ if (self[103] or 0) <= 0 then
1786
+ for _ = self[102] or 0, -1 do
1787
+ BlzPauseUnitEx(handle, true)
1788
+ end
1785
1789
  end
1786
1790
  PauseUnit(handle, true)
1787
1791
  elseif not isPaused and IsUnitPaused(handle) then
1788
1792
  PauseUnit(handle, false)
1789
- for _ = self[102] or 0, -1 do
1790
- BlzPauseUnitEx(handle, false)
1793
+ if (self[103] or 0) <= 0 then
1794
+ for _ = self[102] or 0, -1 do
1795
+ BlzPauseUnitEx(handle, false)
1796
+ end
1791
1797
  end
1792
1798
  self[101] = nil
1793
1799
  end
@@ -1845,20 +1851,6 @@ __TS__SetDescriptor(
1845
1851
  },
1846
1852
  true
1847
1853
  )
1848
- __TS__SetDescriptor(
1849
- Unit.prototype,
1850
- "scale",
1851
- {
1852
- get = function(self)
1853
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1854
- end,
1855
- set = function(self, v)
1856
- setUnitScale(self.handle, v, v, v)
1857
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1858
- end
1859
- },
1860
- true
1861
- )
1862
1854
  __TS__SetDescriptor(
1863
1855
  Unit.prototype,
1864
1856
  "timeScale",
@@ -1885,7 +1877,7 @@ __TS__SetDescriptor(
1885
1877
  Unit.prototype,
1886
1878
  "pathingCollisionRange",
1887
1879
  {get = function(self)
1888
- return 16 * (min(
1880
+ return 16 * (math.min(
1889
1881
  getUnitCollisionSize(self.handle) // 16,
1890
1882
  3
1891
1883
  ) + 1)
@@ -1995,30 +1987,6 @@ __TS__SetDescriptor(
1995
1987
  end},
1996
1988
  true
1997
1989
  )
1998
- __TS__SetDescriptor(
1999
- Unit.prototype,
2000
- "onUnitInRange",
2001
- {get = function(self)
2002
- local handle = self.handle
2003
- local onUnitInRange = setmetatable(
2004
- {},
2005
- {__index = function(self, value)
2006
- local event = __TS__New(
2007
- TriggerEvent,
2008
- function(trigger)
2009
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
2010
- end,
2011
- function() return ____exports.Unit:of(handle) end
2012
- )
2013
- rawset(self, value, event)
2014
- return event
2015
- end}
2016
- )
2017
- rawset(self, "onUnitInRange", onUnitInRange)
2018
- return onUnitInRange
2019
- end},
2020
- true
2021
- )
2022
1990
  __TS__SetDescriptor(
2023
1991
  Unit.prototype,
2024
1992
  "onManaEqual",
@@ -2154,6 +2122,11 @@ __TS__SetDescriptor(
2154
2122
  end},
2155
2123
  true
2156
2124
  )
2125
+ Unit.levelChangedEvent = __TS__New(
2126
+ ____exports.UnitTriggerEvent,
2127
+ EVENT_PLAYER_HERO_LEVEL,
2128
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2129
+ )
2157
2130
  Unit.deathEvent = __TS__New(
2158
2131
  ____exports.UnitTriggerEvent,
2159
2132
  EVENT_PLAYER_UNIT_DEATH,
@@ -2171,7 +2144,7 @@ Unit.onResurrect = __TS__New(
2171
2144
  ____exports.Unit.deathEvent:addListener(function(unit)
2172
2145
  dead[unit] = true
2173
2146
  end)
2174
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2147
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2175
2148
  if dead[unit] and not IsUnitType(unit.handle, UNIT_TYPE_DEAD) then
2176
2149
  dead[unit] = false
2177
2150
  invoke(event, unit)
@@ -2188,7 +2161,7 @@ Unit.morphEvent = __TS__New(
2188
2161
  invoke(event, unit)
2189
2162
  end
2190
2163
  end
2191
- ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2164
+ ____exports.Unit.onImmediateOrder[852056]:addListener(function(unit)
2192
2165
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2193
2166
  Timer:run(ifNotLeft, unit)
2194
2167
  end
@@ -2470,12 +2443,7 @@ Unit.onDamaging = (function()
2470
2443
  preventRetaliation = damagingEventPreventRetaliation
2471
2444
  }
2472
2445
  if data.isAttack and source then
2473
- 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
2474
- if weapon == -1 then
2475
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2476
- weapon = 0
2477
- end
2478
- data.weapon = assert(source.weapons[weapon + 1])
2446
+ data.weapon = source:chooseWeapon(target)
2479
2447
  end
2480
2448
  if not data.isAttack or not source or not source._attackHandlers then
2481
2449
  invoke(
@@ -2620,7 +2588,7 @@ Unit.onDamage = __TS__New(
2620
2588
  invoke(event, source, target, evData)
2621
2589
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2622
2590
  local bonusHealth = math.ceil(evData.amount)
2623
- target[105] = (target[105] or 0) + bonusHealth
2591
+ target[106] = (target[106] or 0) + bonusHealth
2624
2592
  BlzSetUnitMaxHP(
2625
2593
  target.handle,
2626
2594
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2634,7 +2602,7 @@ Unit.onDamage = __TS__New(
2634
2602
  evData[0],
2635
2603
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2636
2604
  )
2637
- target[105] = (target[105] or 0) - bonusHealth
2605
+ target[106] = (target[106] or 0) - bonusHealth
2638
2606
  SetWidgetLife(
2639
2607
  target.handle,
2640
2608
  GetWidgetLife(target.handle) - bonusHealth
@@ -2660,7 +2628,7 @@ Unit.itemDroppedEvent = __TS__New(
2660
2628
  function()
2661
2629
  local unit = getTriggerUnit()
2662
2630
  local item = getManipulatedItem()
2663
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2631
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2664
2632
  return ____exports.Unit:of(unit), Item:of(item)
2665
2633
  end
2666
2634
  return IgnoreEvent
@@ -2672,10 +2640,10 @@ Unit.itemPickedUpEvent = __TS__New(
2672
2640
  function()
2673
2641
  local unitHandle = getTriggerUnit()
2674
2642
  local itemHandle = getManipulatedItem()
2675
- if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2643
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not isItemIgnoredInEvents(itemHandle) then
2676
2644
  local unit = ____exports.Unit:of(unitHandle)
2677
2645
  local item = Item:of(itemHandle)
2678
- if item.owner ~= unit then
2646
+ if ownerByItem[item] ~= unit then
2679
2647
  return unit, item
2680
2648
  end
2681
2649
  end
@@ -2688,17 +2656,12 @@ Unit.itemUsedEvent = __TS__New(
2688
2656
  function()
2689
2657
  local unit = getTriggerUnit()
2690
2658
  local item = getManipulatedItem()
2691
- if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2659
+ if getUnitTypeId(unit) ~= dummyUnitId and not isItemIgnoredInEvents(item) then
2692
2660
  return ____exports.Unit:of(unit), Item:of(item)
2693
2661
  end
2694
2662
  return IgnoreEvent
2695
2663
  end
2696
2664
  )
2697
- Unit.itemStackedEvent = __TS__New(
2698
- ____exports.UnitTriggerEvent,
2699
- EVENT_PLAYER_UNIT_STACK_ITEM,
2700
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2701
- )
2702
2665
  __TS__ObjectDefineProperty(
2703
2666
  Unit,
2704
2667
  "itemChargesChangedEvent",
@@ -2714,51 +2677,6 @@ __TS__ObjectDefineProperty(
2714
2677
  return event
2715
2678
  end}
2716
2679
  )
2717
- __TS__ObjectDefineProperty(
2718
- Unit,
2719
- "itemUseOrderEvent",
2720
- {get = function(self)
2721
- local event = __TS__New(Event)
2722
- for order = orderId("useslot0"), orderId("useslot5") do
2723
- local slot = order - orderId("useslot0")
2724
- local function listener(unit)
2725
- local item = unit.items[slot + 1]
2726
- if item ~= nil then
2727
- invoke(event, unit, item)
2728
- end
2729
- end
2730
- self.onImmediateOrder[order]:addListener(listener)
2731
- self.onTargetOrder[order]:addListener(listener)
2732
- self.onPointOrder[order]:addListener(listener)
2733
- end
2734
- rawset(self, "itemUseOrderEvent", event)
2735
- return event
2736
- end}
2737
- )
2738
- __TS__ObjectDefineProperty(
2739
- Unit,
2740
- "itemMoveOrderEvent",
2741
- {get = function(self)
2742
- local event = __TS__New(Event)
2743
- for order = orderId("moveslot0"), orderId("moveslot5") do
2744
- local slotTo = order - orderId("moveslot0")
2745
- self.onTargetOrder[order]:addListener(function(unit, item)
2746
- local slotFrom = unit.items:findSlot(item)
2747
- if slotFrom ~= nil then
2748
- invoke(
2749
- event,
2750
- unit,
2751
- item,
2752
- slotFrom,
2753
- slotTo
2754
- )
2755
- end
2756
- end)
2757
- end
2758
- rawset(self, "itemMoveOrderEvent", event)
2759
- return event
2760
- end}
2761
- )
2762
2680
  __TS__ObjectDefineProperty(
2763
2681
  Unit,
2764
2682
  "onCreate",
@@ -2784,6 +2702,10 @@ __TS__ObjectDefineProperty(
2784
2702
  rawset(self, "destroyEvent", destroyEvent)
2785
2703
  return destroyEvent
2786
2704
  end}
2705
+ )
2706
+ Unit.synchronize = synchronizer(
2707
+ function(unit) return unit.syncId end,
2708
+ function(syncId) return unitBySyncId[syncId] end
2787
2709
  );
2788
2710
  (function(self)
2789
2711
  local leaveAbilityIds = postcompile(function()
@@ -2801,11 +2723,7 @@ __TS__ObjectDefineProperty(
2801
2723
  function(____, id) return fourCC(id) end
2802
2724
  )
2803
2725
  end)
2804
- for ____, leaveOrderId in ipairs({
2805
- orderId("undefend"),
2806
- orderId("magicundefense"),
2807
- orderId("unimmolation")
2808
- }) do
2726
+ for ____, leaveOrderId in ipairs({852056, 852479, 852178}) do
2809
2727
  ____exports.Unit.onImmediateOrder[leaveOrderId]:addListener(function(unit)
2810
2728
  local handle = unit.handle
2811
2729
  for i = 1, #leaveAbilityIds do
@@ -2813,7 +2731,8 @@ __TS__ObjectDefineProperty(
2813
2731
  return
2814
2732
  end
2815
2733
  end
2816
- unit:destroy()
2734
+ unit:saveData()
2735
+ Timer:run(unit, "destroy")
2817
2736
  end)
2818
2737
  end
2819
2738
  end)(Unit)