warscript 0.0.1-dev.c59dd14 → 0.0.1-dev.c677d41

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 (270) 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/types/effect.d.ts +14 -6
  8. package/core/types/effect.lua +131 -35
  9. package/core/types/frame.d.ts +8 -1
  10. package/core/types/frame.lua +117 -22
  11. package/core/types/group.d.ts +0 -1
  12. package/core/types/handle.lua +1 -1
  13. package/core/types/image.d.ts +0 -1
  14. package/core/types/player.d.ts +16 -0
  15. package/core/types/player.lua +60 -15
  16. package/core/types/playerCamera.d.ts +2 -0
  17. package/core/types/playerCamera.lua +123 -5
  18. package/core/types/sound.d.ts +17 -24
  19. package/core/types/sound.lua +99 -24
  20. package/core/types/tileCell.d.ts +11 -1
  21. package/core/types/tileCell.lua +97 -0
  22. package/core/types/timer.d.ts +9 -8
  23. package/core/types/timer.lua +45 -23
  24. package/core/types/unit.lua +8 -0
  25. package/core/util.d.ts +1 -1
  26. package/core/util.lua +18 -1
  27. package/decl/index.d.ts +1 -0
  28. package/decl/native.d.ts +846 -790
  29. package/destroyable.d.ts +1 -0
  30. package/destroyable.lua +9 -0
  31. package/engine/ability.d.ts +1 -1
  32. package/engine/behavior.d.ts +24 -11
  33. package/engine/behavior.lua +233 -73
  34. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  35. package/engine/behaviour/ability/always-enabled.lua +31 -0
  36. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  37. package/engine/behaviour/ability/apply-buff.lua +36 -4
  38. package/engine/behaviour/ability/apply-unit-behavior.d.ts +6 -1
  39. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  40. package/engine/behaviour/ability/damage.d.ts +39 -11
  41. package/engine/behaviour/ability/damage.lua +83 -37
  42. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  43. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  44. package/engine/behaviour/ability/heal.d.ts +33 -6
  45. package/engine/behaviour/ability/heal.lua +89 -10
  46. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  47. package/engine/behaviour/ability/instant-impact.lua +4 -19
  48. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  49. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  50. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  51. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  52. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  53. package/engine/behaviour/ability/restore-mana.lua +29 -0
  54. package/engine/behaviour/ability.d.ts +22 -5
  55. package/engine/behaviour/ability.lua +113 -48
  56. package/engine/behaviour/unit/stun-immunity.d.ts +12 -7
  57. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  58. package/engine/behaviour/unit.d.ts +48 -4
  59. package/engine/behaviour/unit.lua +292 -2
  60. package/engine/buff.d.ts +121 -46
  61. package/engine/buff.lua +567 -248
  62. package/engine/game-map.d.ts +7 -0
  63. package/engine/game-map.lua +32 -0
  64. package/engine/internal/ability.d.ts +23 -14
  65. package/engine/internal/ability.lua +129 -85
  66. package/engine/internal/item/ability.lua +162 -4
  67. package/engine/internal/item+owner.lua +12 -6
  68. package/engine/internal/item.d.ts +20 -19
  69. package/engine/internal/item.lua +191 -74
  70. package/engine/internal/mechanics/ability-duration.lua +1 -1
  71. package/engine/internal/mechanics/cast-ability.lua +6 -3
  72. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  73. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  74. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  75. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  76. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  77. package/engine/internal/misc/frame-coordinates.lua +21 -0
  78. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  79. package/engine/internal/misc/get-terrain-z.lua +11 -0
  80. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  81. package/engine/internal/misc/player-local-handle.lua +5 -0
  82. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  83. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  84. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  85. package/engine/internal/object-data/evasion-probability.lua +16 -0
  86. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  87. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  88. package/engine/internal/unit/ability.d.ts +45 -1
  89. package/engine/internal/unit/ability.lua +128 -17
  90. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  91. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  92. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  93. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  94. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  95. package/engine/internal/unit/allowed-targets.lua +9 -1
  96. package/engine/internal/unit/attributes.d.ts +17 -0
  97. package/engine/internal/unit/attributes.lua +46 -0
  98. package/engine/internal/unit/bonus.d.ts +13 -8
  99. package/engine/internal/unit/bonus.lua +33 -1
  100. package/engine/internal/unit/fly-height.d.ts +7 -0
  101. package/engine/internal/unit/fly-height.lua +20 -0
  102. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  103. package/engine/internal/unit/ignore-events-items.lua +5 -0
  104. package/engine/internal/unit/interrupts.d.ts +12 -0
  105. package/engine/internal/unit/interrupts.lua +28 -0
  106. package/engine/internal/unit/item.d.ts +24 -0
  107. package/engine/internal/unit/item.lua +78 -0
  108. package/engine/internal/unit/main-selected.d.ts +13 -0
  109. package/engine/internal/unit/main-selected.lua +36 -0
  110. package/engine/internal/unit/order.d.ts +20 -0
  111. package/engine/internal/unit/order.lua +136 -0
  112. package/engine/internal/unit/scale.d.ts +7 -0
  113. package/engine/internal/unit/scale.lua +20 -0
  114. package/engine/internal/unit+ability.lua +12 -3
  115. package/engine/internal/unit+damage.d.ts +2 -11
  116. package/engine/internal/unit+damage.lua +10 -14
  117. package/engine/internal/unit+spellSteal.lua +1 -2
  118. package/engine/internal/unit+transport.lua +4 -10
  119. package/engine/internal/unit-missile-launch.lua +70 -13
  120. package/engine/internal/unit.d.ts +64 -31
  121. package/engine/internal/unit.lua +496 -262
  122. package/engine/internal/utility.lua +12 -0
  123. package/engine/lightning.d.ts +12 -5
  124. package/engine/lightning.lua +48 -14
  125. package/engine/local-client.d.ts +9 -2
  126. package/engine/local-client.lua +112 -0
  127. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  128. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  129. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  130. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  131. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -3
  132. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  133. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  134. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  135. package/engine/object-data/auxiliary/combat-classification.d.ts +0 -2
  136. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  137. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  138. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  139. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  140. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  141. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  142. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  143. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  144. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  145. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  146. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  147. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  148. package/engine/object-data/entry/ability-type/blank-configurable.d.ts +0 -1
  149. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  150. package/engine/object-data/entry/ability-type/blank-passive.d.ts +0 -1
  151. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  152. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  153. package/engine/object-data/entry/ability-type/channel.d.ts +0 -1
  154. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  155. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  156. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  157. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  158. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  159. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  160. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  161. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  162. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  163. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  164. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  165. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  166. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  167. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  168. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  169. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  170. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  171. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  172. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  173. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  174. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  175. package/engine/object-data/entry/ability-type/web.lua +52 -0
  176. package/engine/object-data/entry/ability-type.d.ts +19 -18
  177. package/engine/object-data/entry/ability-type.lua +93 -36
  178. package/engine/object-data/entry/buff-type/applicable.d.ts +0 -1
  179. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  180. package/engine/object-data/entry/buff-type/blank.d.ts +0 -1
  181. package/engine/object-data/entry/buff-type.d.ts +6 -13
  182. package/engine/object-data/entry/buff-type.lua +13 -29
  183. package/engine/object-data/entry/destructible-type.d.ts +28 -3
  184. package/engine/object-data/entry/destructible-type.lua +155 -0
  185. package/engine/object-data/entry/item-type/blank.d.ts +0 -1
  186. package/engine/object-data/entry/item-type.d.ts +15 -2
  187. package/engine/object-data/entry/item-type.lua +93 -2
  188. package/engine/object-data/entry/lightning-type.d.ts +1 -2
  189. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  190. package/engine/object-data/entry/sound-preset.lua +140 -0
  191. package/engine/object-data/entry/unit-type.d.ts +25 -6
  192. package/engine/object-data/entry/unit-type.lua +258 -93
  193. package/engine/object-data/entry/upgrade/blank.d.ts +0 -1
  194. package/engine/object-data/entry/upgrade.d.ts +1 -2
  195. package/engine/object-data/entry/upgrade.lua +4 -4
  196. package/engine/object-data/entry.d.ts +18 -17
  197. package/engine/object-data/entry.lua +60 -32
  198. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  199. package/engine/object-field/ability.d.ts +28 -5
  200. package/engine/object-field/ability.lua +59 -5
  201. package/engine/object-field/unit.d.ts +72 -3
  202. package/engine/object-field/unit.lua +268 -7
  203. package/engine/object-field.d.ts +25 -7
  204. package/engine/object-field.lua +359 -116
  205. package/engine/random.d.ts +10 -5
  206. package/engine/random.lua +13 -0
  207. package/engine/standard/entries/buff-type.d.ts +3 -0
  208. package/engine/standard/entries/buff-type.lua +3 -0
  209. package/engine/standard/entries/sound-preset.d.ts +10 -0
  210. package/engine/standard/entries/sound-preset.lua +10 -0
  211. package/engine/standard/fields/ability.d.ts +4 -2
  212. package/engine/standard/fields/ability.lua +4 -2
  213. package/engine/standard/fields/unit.d.ts +12 -0
  214. package/engine/standard/fields/unit.lua +20 -0
  215. package/engine/synchronization.d.ts +11 -0
  216. package/engine/synchronization.lua +77 -0
  217. package/engine/text-tag.d.ts +36 -2
  218. package/engine/text-tag.lua +250 -10
  219. package/engine/unit.d.ts +8 -0
  220. package/engine/unit.lua +17 -2
  221. package/event.d.ts +2 -3
  222. package/event.lua +9 -5
  223. package/index.d.ts +1 -0
  224. package/index.lua +1 -0
  225. package/lualib_bundle.lua +146 -42
  226. package/math/vec2.d.ts +2 -9
  227. package/math.d.ts +0 -2
  228. package/net/socket.d.ts +7 -1
  229. package/net/socket.lua +45 -4
  230. package/network.d.ts +1 -0
  231. package/network.lua +3 -2
  232. package/objutil/ability.d.ts +0 -1
  233. package/objutil/buff.d.ts +0 -1
  234. package/objutil/buff.lua +12 -11
  235. package/objutil/object.d.ts +0 -1
  236. package/objutil/unit.d.ts +0 -1
  237. package/objutil/unit.lua +8 -0
  238. package/package.json +13 -13
  239. package/patch-lua.d.ts +0 -0
  240. package/patch-lua.lua +25 -0
  241. package/patch-lualib.lua +1 -1
  242. package/property.d.ts +55 -0
  243. package/property.lua +374 -0
  244. package/string.d.ts +16 -0
  245. package/string.lua +5 -0
  246. package/util/stream.d.ts +0 -1
  247. package/utility/arrays.d.ts +13 -5
  248. package/utility/arrays.lua +45 -3
  249. package/utility/bit-set.d.ts +0 -2
  250. package/utility/callback-array.d.ts +17 -0
  251. package/utility/callback-array.lua +61 -0
  252. package/utility/functions.d.ts +8 -0
  253. package/utility/functions.lua +13 -0
  254. package/utility/lazy.d.ts +2 -0
  255. package/utility/lazy.lua +14 -0
  256. package/utility/linked-map.d.ts +26 -0
  257. package/utility/linked-map.lua +66 -0
  258. package/utility/linked-set.d.ts +13 -3
  259. package/utility/linked-set.lua +31 -3
  260. package/utility/lua-maps.d.ts +16 -4
  261. package/utility/lua-maps.lua +53 -2
  262. package/utility/lua-sets.d.ts +3 -2
  263. package/utility/lua-sets.lua +7 -0
  264. package/utility/records.lua +20 -1
  265. package/utility/reflection.lua +11 -7
  266. package/utility/types.d.ts +4 -0
  267. package/core/mapbounds.d.ts +0 -8
  268. package/core/mapbounds.lua +0 -12
  269. package/core/types/order.d.ts +0 -25
  270. package/core/types/order.lua +0 -55
@@ -7,6 +7,9 @@ local __TS__Class = ____lualib.__TS__Class
7
7
  local __TS__ClassExtends = ____lualib.__TS__ClassExtends
8
8
  local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
9
9
  local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
10
+ local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
11
+ local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
12
+ local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
10
13
  local __TS__InstanceOf = ____lualib.__TS__InstanceOf
11
14
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
12
15
  local Set = ____lualib.Set
@@ -48,33 +51,42 @@ local ____arrays = require("utility.arrays")
48
51
  local forEach = ____arrays.forEach
49
52
  local ____math = require("math")
50
53
  local min = ____math.min
54
+ local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
55
+ local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
56
+ local ____attack_2Dtype = require("engine.object-data.auxiliary.attack-type")
57
+ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
58
+ local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
59
+ local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
60
+ local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
61
+ local ____attributes = require("attributes")
62
+ local isAttribute = ____attributes.isAttribute
63
+ local ____ability = require("engine.internal.item.ability")
64
+ local doUnitAbilityAction = ____ability.doUnitAbilityAction
65
+ local ____synchronization = require("engine.synchronization")
66
+ local synchronizer = ____synchronization.synchronizer
67
+ local ____linked_2Dmap = require("utility.linked-map")
68
+ local LinkedMap = ____linked_2Dmap.LinkedMap
51
69
  local match = string.match
52
70
  local ____tostring = _G.tostring
53
71
  local setUnitAnimation = SetUnitAnimation
54
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
55
72
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
56
- local queueUnitAnimation = QueueUnitAnimation
57
73
  local getUnitIntegerField = BlzGetUnitIntegerField
58
74
  local getUnitRealField = BlzGetUnitRealField
59
75
  local getHeroStr = GetHeroStr
60
76
  local getHeroAgi = GetHeroAgi
61
77
  local getHeroInt = GetHeroInt
62
- local setHeroStr = SetHeroStr
63
- local setHeroAgi = SetHeroAgi
64
- local setHeroInt = SetHeroInt
65
78
  local getUnitBooleanField = BlzGetUnitBooleanField
66
79
  local getUnitStringField = BlzGetUnitStringField
67
80
  local setUnitIntegerField = BlzSetUnitIntegerField
68
81
  local setUnitRealField = BlzSetUnitRealField
69
82
  local setUnitBooleanField = BlzSetUnitBooleanField
70
83
  local setUnitStringField = BlzSetUnitStringField
71
- local setUnitScale = SetUnitScale
72
84
  local setUnitPosition = SetUnitPosition
73
85
  local setUnitTimeScale = SetUnitTimeScale
74
86
  local getHandleId = GetHandleId
87
+ local getUnitCurrentOrder = GetUnitCurrentOrder
75
88
  local createUnit = CreateUnit
76
89
  local killUnit = KillUnit
77
- local setUnitExploded = SetUnitExploded
78
90
  local removeUnit = RemoveUnit
79
91
  local getUnitTypeId = GetUnitTypeId
80
92
  local isHeroUnitId = IsHeroUnitId
@@ -90,15 +102,12 @@ local getSpellTargetItem = GetSpellTargetItem
90
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
91
103
  local isUnitInRangeXY = IsUnitInRangeXY
92
104
  local isUnitInRange = IsUnitInRange
93
- local setResourceAmount = SetResourceAmount
94
- local getResourceAmount = GetResourceAmount
95
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
96
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
97
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
98
108
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
99
109
  local getUnitAbilityLevel = GetUnitAbilityLevel
100
110
  local unitDisableAbility = BlzUnitDisableAbility
101
- local unitInterruptAttack = BlzUnitInterruptAttack
102
111
  local isUnitInvisible = IsUnitInvisible
103
112
  local isUnitVisible = IsUnitVisible
104
113
  local getUnitX = GetUnitX
@@ -115,15 +124,9 @@ local getOrderedUnit = GetOrderedUnit
115
124
  local getIssuedOrderId = GetIssuedOrderId
116
125
  local isUnitInvulnerable = BlzIsUnitInvulnerable
117
126
  local unitAlive = UnitAlive
118
- local unitAddType = UnitAddType
119
- local unitRemoveType = UnitRemoveType
120
- local isUnitIllusion = IsUnitIllusion
121
- local isUnitType = IsUnitType
122
127
  local isUnitAlly = IsUnitAlly
123
128
  local isUnitEnemy = IsUnitEnemy
124
129
  local getOwningPlayer = GetOwningPlayer
125
- local setUnitColor = SetUnitColor
126
- local showUnitTeamGlow = BlzShowUnitTeamGlow
127
130
  ____exports.UnitClassification = {}
128
131
  local UnitClassification = ____exports.UnitClassification
129
132
  do
@@ -133,6 +136,7 @@ do
133
136
  UnitClassification.GROUND = UNIT_TYPE_GROUND
134
137
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
135
138
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
139
+ UnitClassification.WORKER = UNIT_TYPE_PEON
136
140
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
137
141
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
138
142
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -279,16 +283,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
279
283
  end
280
284
  local function dispatch(event, idGetter, argsGetter)
281
285
  local initialized = false
282
- local x = {}
283
286
  return setmetatable(
284
- x,
287
+ {},
285
288
  {
286
289
  __index = function(self, id)
287
290
  if type(id) ~= "number" then
288
291
  return event[id]
289
292
  end
290
293
  if not initialized then
291
- local invoke = Event.invoke
292
294
  event:addListener(function(...)
293
295
  local id = idGetter(...)
294
296
  local dispatched = rawget(self, id)
@@ -326,7 +328,6 @@ local function dispatchAbility(event)
326
328
  return event[id]
327
329
  end
328
330
  if not initialized then
329
- local invoke = Event.invoke
330
331
  event:addListener(function(unit, ability, ...)
331
332
  local dispatched = rawget(self, ability.typeId)
332
333
  if dispatched ~= nil then
@@ -343,6 +344,9 @@ local function dispatchAbility(event)
343
344
  }
344
345
  )
345
346
  end
347
+ local function damagingEventPreventRetaliation(self)
348
+ self[0] = true
349
+ end
346
350
  local function damageEventPreventDeath(self, callback, ...)
347
351
  if self[0] ~= nil then
348
352
  return
@@ -354,7 +358,14 @@ local function damageEventPreventDeath(self, callback, ...)
354
358
  rawset(self, 1 + i, (select(i, ...)))
355
359
  end
356
360
  end
357
- local damageSetters = {amount = BlzSetEventDamage, attackType = BlzSetEventAttackType, damageType = BlzSetEventDamageType, weaponType = BlzSetEventWeaponType}
361
+ local damageSetters = {
362
+ amount = BlzSetEventDamage,
363
+ attackType = function(attackType)
364
+ return BlzSetEventAttackType(attackTypeToNative(attackType))
365
+ end,
366
+ damageType = BlzSetEventDamageType,
367
+ weaponType = BlzSetEventWeaponType
368
+ }
358
369
  local jlimitopByOperator = {
359
370
  [0] = LESS_THAN_OR_EQUAL,
360
371
  [1] = LESS_THAN_OR_EQUAL,
@@ -372,15 +383,27 @@ local modifiers = {
372
383
  end,
373
384
  armor = function(unit, value)
374
385
  if UnitAddAbility(unit, armorBonusAbilityId) then
375
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
386
+ assert(
387
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
388
+ "armor bonus ability must be made permanent",
389
+ unit
390
+ )
376
391
  end
377
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
378
- assert(BlzSetAbilityRealLevelField(
379
- ability,
380
- armorBonusField,
381
- 0,
382
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
383
- ))
392
+ local ability = assert(
393
+ BlzGetUnitAbility(unit, armorBonusAbilityId),
394
+ "armor bonus ability must be existing",
395
+ unit
396
+ )
397
+ assert(
398
+ BlzSetAbilityRealLevelField(
399
+ ability,
400
+ armorBonusField,
401
+ 0,
402
+ BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
403
+ ),
404
+ "armor bonus ability field must be set",
405
+ unit
406
+ )
384
407
  end
385
408
  }
386
409
  local getters = {
@@ -398,6 +421,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
398
421
  self.unit = unit
399
422
  self.index = index
400
423
  end
424
+ __TS__SetDescriptor(
425
+ UnitWeapon.prototype,
426
+ "isEnabled",
427
+ {
428
+ get = function(self)
429
+ return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
430
+ end,
431
+ set = function(self, isEnabled)
432
+ BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
433
+ end
434
+ },
435
+ true
436
+ )
401
437
  __TS__SetDescriptor(
402
438
  UnitWeapon.prototype,
403
439
  "cooldown",
@@ -432,6 +468,19 @@ __TS__SetDescriptor(
432
468
  },
433
469
  true
434
470
  )
471
+ __TS__SetDescriptor(
472
+ UnitWeapon.prototype,
473
+ "allowedTargetCombatClassifications",
474
+ {
475
+ get = function(self)
476
+ return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
477
+ end,
478
+ set = function(self, allowedTargetCombatClassifications)
479
+ BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
480
+ end
481
+ },
482
+ true
483
+ )
435
484
  __TS__SetDescriptor(
436
485
  UnitWeapon.prototype,
437
486
  "damageBase",
@@ -562,17 +611,6 @@ local function retrieveAbility(unit, ability, abilityId)
562
611
  ____exports.Unit:of(unit)
563
612
  )
564
613
  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
614
  for i = 0, unitInventorySize(unit) - 1 do
577
615
  local item = unitItemInSlot(unit, i)
578
616
  if getItemAbility(item, abilityId) == ability then
@@ -619,26 +657,30 @@ local fieldSetters = {
619
657
  }
620
658
  local dummies = {}
621
659
  for ____, player in ipairs(Player.all) do
622
- local dummy = assert(createUnit(
623
- player.handle,
624
- dummyUnitId,
625
- 0,
626
- 0,
627
- 270
628
- ))
660
+ local dummy = assert(
661
+ createUnit(
662
+ player.handle,
663
+ dummyUnitId,
664
+ 0,
665
+ 0,
666
+ 270
667
+ ),
668
+ "dummy must be created",
669
+ player
670
+ )
629
671
  ShowUnit(dummy, false)
630
672
  dummies[player] = dummy
631
673
  end
632
674
  local function delayHealthChecksCallback(unit)
633
- local counter = (unit[102] or 0) - 1
675
+ local counter = (unit[104] or 0) - 1
634
676
  if counter ~= 0 then
635
- unit[102] = counter
677
+ unit[104] = counter
636
678
  return
637
679
  end
638
- unit[102] = nil
639
- local healthBonus = unit[103]
680
+ unit[104] = nil
681
+ local healthBonus = unit[105]
640
682
  if healthBonus ~= nil then
641
- unit[103] = nil
683
+ unit[105] = nil
642
684
  local handle = unit.handle
643
685
  BlzSetUnitMaxHP(
644
686
  handle,
@@ -646,42 +688,74 @@ local function delayHealthChecksCallback(unit)
646
688
  )
647
689
  end
648
690
  end
691
+ local nextSyncId = 1
692
+ local unitBySyncId = setmetatable({}, {__mode = "v"})
693
+ local damagingEventByTarget = setmetatable({}, {__mode = "k"})
694
+ local function addAbility(unit, abilityTypeId)
695
+ local ____unitAddAbility_result_0
696
+ if unitAddAbility(unit, abilityTypeId) then
697
+ ____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
698
+ else
699
+ ____unitAddAbility_result_0 = nil
700
+ end
701
+ return ____unitAddAbility_result_0
702
+ end
649
703
  ____exports.Unit = __TS__Class()
650
704
  local Unit = ____exports.Unit
651
705
  Unit.name = "Unit"
652
706
  __TS__ClassExtends(Unit, Handle)
653
707
  function Unit.prototype.____constructor(self, handle)
654
708
  Handle.prototype.____constructor(self, handle)
709
+ local ____nextSyncId_1 = nextSyncId
710
+ nextSyncId = ____nextSyncId_1 + 1
711
+ self.syncId = ____nextSyncId_1
655
712
  self._owner = Player:of(getOwningPlayer(handle))
656
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
657
- assert(unitAddAbility(handle, morphDetectAbilityId))
713
+ assert(
714
+ unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId),
715
+ "leave detection ability must be added",
716
+ self
717
+ )
718
+ assert(
719
+ unitAddAbility(handle, morphDetectAbilityId),
720
+ "morph detection ability must be added",
721
+ self
722
+ )
658
723
  if unitAddAbility(
659
724
  handle,
660
725
  fourCC("Amrf")
661
726
  ) then
662
- assert(unitRemoveAbility(
663
- handle,
664
- fourCC("Amrf")
665
- ))
727
+ assert(
728
+ unitRemoveAbility(
729
+ handle,
730
+ fourCC("Amrf")
731
+ ),
732
+ "fly ability must be removed after addition",
733
+ self
734
+ )
666
735
  end
736
+ unitBySyncId[self.syncId] = self
667
737
  local ____ = self.abilities
668
738
  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(
739
+ function Unit.prototype.getEvent(self, jevent, collector)
740
+ self.events = self.events or __TS__New(LinkedMap)
741
+ local eventId = GetHandleId(jevent)
742
+ local event = self.events:get(eventId)
743
+ if event == nil then
744
+ event = __TS__New(
674
745
  TriggerEvent,
675
746
  function(trigger)
676
- TriggerRegisterUnitEvent(trigger, self.handle, event)
747
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
677
748
  end,
678
749
  collector or (function() return {} end)
679
750
  )
751
+ self.events:put(eventId, event)
680
752
  end
681
- return self.events[eventId]
753
+ return event
682
754
  end
683
755
  function Unit.prototype.onDestroy(self)
684
756
  local handle = self.handle
757
+ self[108] = getUnitX(handle)
758
+ self[109] = getUnitY(handle)
685
759
  if not self._owner then
686
760
  self._owner = Player:of(getOwningPlayer(handle))
687
761
  end
@@ -720,7 +794,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
720
794
  self._attackHandlers = handlers
721
795
  if #handlers == 1 then
722
796
  local handle = self.handle
723
- 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
+ )
724
802
  end
725
803
  return handler
726
804
  end
@@ -749,17 +827,17 @@ function Unit.prototype.addModifier(self, property, modifier)
749
827
  end}
750
828
  end
751
829
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
830
+ local ____combatClassification_2 = combatClassification
831
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
754
832
  end
755
833
  function Unit.prototype.addClassification(self, classification)
756
- return unitAddType(self.handle, classification)
834
+ return UnitAddType(self.handle, classification)
757
835
  end
758
836
  function Unit.prototype.removeClassification(self, classification)
759
- return unitRemoveType(self.handle, classification)
837
+ return UnitRemoveType(self.handle, classification)
760
838
  end
761
839
  function Unit.prototype.hasClassification(self, classification)
762
- return isUnitType(self.handle, classification)
840
+ return IsUnitType(self.handle, classification)
763
841
  end
764
842
  function Unit.prototype.isVisibleTo(self, player)
765
843
  return isUnitVisible(self.handle, player.handle)
@@ -768,13 +846,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
846
  return isUnitInvisible(self.handle, player.handle)
769
847
  end
770
848
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
849
+ local ____temp_3
772
850
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
851
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
774
852
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
853
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
776
854
  end
777
- return ____temp_1
855
+ return ____temp_3
778
856
  end
779
857
  function Unit.prototype.isAllyOf(self, unit)
780
858
  return isUnitAlly(
@@ -792,16 +870,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
792
870
  if type(animation) == "number" then
793
871
  setUnitAnimationByIndex(self.handle, animation)
794
872
  elseif rarity then
795
- setUnitAnimationWithRarity(self.handle, animation, rarity)
873
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
796
874
  else
797
875
  setUnitAnimation(self.handle, animation)
798
876
  end
799
877
  end
878
+ function Unit.prototype.resetAnimation(self)
879
+ ResetUnitAnimation(self.handle)
880
+ end
800
881
  function Unit.prototype.queueAnimation(self, animation)
801
- queueUnitAnimation(self.handle, animation)
882
+ QueueUnitAnimation(self.handle, animation)
883
+ end
884
+ function Unit.prototype.chooseWeapon(self, target)
885
+ local firstWeapon = self.firstWeapon
886
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
887
+ return firstWeapon
888
+ end
889
+ local secondWeapon = self.secondWeapon
890
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
891
+ return secondWeapon
892
+ end
893
+ return nil
802
894
  end
803
895
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
896
+ self[104] = (self[104] or 0) + 1
805
897
  Timer:run(delayHealthChecksCallback, self)
806
898
  end
807
899
  function Unit.prototype.setPosition(self, x, y)
@@ -811,14 +903,21 @@ function Unit.prototype.isSelected(self, player)
811
903
  return IsUnitSelected(self.handle, player.handle)
812
904
  end
813
905
  function Unit.prototype.explode(self)
814
- setUnitExploded(self.handle, true)
906
+ SetUnitExploded(self.handle, true)
815
907
  killUnit(self.handle)
816
908
  end
817
909
  function Unit.prototype.kill(self)
818
910
  killUnit(self.handle)
819
911
  end
820
- function Unit.prototype.revive(self, pos, doEffect)
821
- ReviveHero(self.handle, pos.x, pos.y, doEffect)
912
+ function Unit.prototype.revive(self, x, y, doEffect)
913
+ local ____ReviveHero_6 = ReviveHero
914
+ local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
915
+ local ____doEffect_4 = doEffect
916
+ if ____doEffect_4 == nil then
917
+ ____doEffect_4 = false
918
+ end
919
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
920
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
822
921
  end
823
922
  function Unit.prototype.healTarget(self, target, amount)
824
923
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -858,20 +957,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
858
957
  return UnitDropItemSlot(self.handle, item.handle, slot)
859
958
  end
860
959
  function Unit.prototype.itemInSlot(self, slot)
861
- return Item:of(UnitItemInSlot(self.handle, slot))
960
+ return Item:of(unitItemInSlot(self.handle, slot))
862
961
  end
863
962
  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
- )
963
+ local ability = UnitAbility:of(
964
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
965
+ abilityId,
966
+ self
967
+ )
968
+ if ability ~= nil then
870
969
  local abilities = self.abilities
871
970
  abilities[#abilities + 1] = ability
872
- return ability
873
971
  end
874
- return nil
972
+ return ability
875
973
  end
876
974
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
877
975
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -885,31 +983,21 @@ end
885
983
  function Unit.prototype.hasAbility(self, abilityId)
886
984
  return getUnitAbilityLevel(self.handle, abilityId) > 0
887
985
  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
- )
986
+ function Unit.prototype.getAbility(self, abilityId)
987
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
988
+ return UnitAbility:of(ability, abilityId, self)
899
989
  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
908
- 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
909
998
  end
910
- return true
911
999
  end
912
- return false
1000
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
913
1001
  end
914
1002
  function Unit.prototype.hideAbility(self, abilityId, flag)
915
1003
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -923,12 +1011,16 @@ end
923
1011
  function Unit.prototype.endAbilityCooldown(self, abilityId)
924
1012
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
925
1013
  end
926
- function Unit.prototype.interruptAttack(self)
927
- unitInterruptAttack(self.handle)
928
- end
929
1014
  function Unit.prototype.interruptCast(self, abilityId)
930
- unitDisableAbility(self.handle, abilityId, true, false)
931
- unitDisableAbility(self.handle, abilityId, false, false)
1015
+ local handle = self.handle
1016
+ unitDisableAbility(handle, abilityId, true, false)
1017
+ Timer:run(
1018
+ unitDisableAbility,
1019
+ handle,
1020
+ abilityId,
1021
+ false,
1022
+ false
1023
+ )
932
1024
  end
933
1025
  function Unit.prototype.getDistanceTo(self, target)
934
1026
  local handle = self.handle
@@ -988,18 +1080,44 @@ function Unit.prototype.unpauseEx(self)
988
1080
  self:decrementStunCounter()
989
1081
  end
990
1082
  function Unit.prototype.incrementStunCounter(self)
991
- local stunCounter = self[101] or 0
992
- if not self[100] or stunCounter >= 0 then
1083
+ local stunCounter = self[102] or 0
1084
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
993
1085
  BlzPauseUnitEx(self.handle, true)
994
1086
  end
995
- self[101] = stunCounter + 1
1087
+ self[102] = stunCounter + 1
996
1088
  end
997
1089
  function Unit.prototype.decrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 1 then
1090
+ local stunCounter = self[102] or 0
1091
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1000
1092
  BlzPauseUnitEx(self.handle, false)
1001
1093
  end
1002
- self[101] = stunCounter - 1
1094
+ self[102] = stunCounter - 1
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
1003
1121
  end
1004
1122
  function Unit.create(self, owner, id, x, y, facing, skinId)
1005
1123
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1101,8 +1219,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1101
1219
  )
1102
1220
  return targetCollection
1103
1221
  end
1104
- function Unit.getSelectionOf(self, player)
1105
- targetCollection = {}
1222
+ function Unit.getSelectionOf(self, player, target)
1223
+ if target == nil then
1224
+ target = {}
1225
+ end
1226
+ targetCollection = target
1106
1227
  targetCollectionNextIndex = 1
1107
1228
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1108
1229
  return targetCollection
@@ -1124,6 +1245,9 @@ end
1124
1245
  function Unit.prototype.__tostring(self)
1125
1246
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1126
1247
  end
1248
+ function Unit.getBySyncId(self, syncId)
1249
+ return unitBySyncId[syncId]
1250
+ end
1127
1251
  __TS__SetDescriptor(
1128
1252
  Unit.prototype,
1129
1253
  "_deltas",
@@ -1183,7 +1307,15 @@ __TS__SetDescriptor(
1183
1307
  Unit.prototype,
1184
1308
  "isIllusion",
1185
1309
  {get = function(self)
1186
- return isUnitIllusion(self.handle)
1310
+ return IsUnitIllusion(self.handle)
1311
+ end},
1312
+ true
1313
+ )
1314
+ __TS__SetDescriptor(
1315
+ Unit.prototype,
1316
+ "isStunned",
1317
+ {get = function(self)
1318
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1187
1319
  end},
1188
1320
  true
1189
1321
  )
@@ -1262,13 +1394,13 @@ __TS__SetDescriptor(
1262
1394
  )
1263
1395
  __TS__SetDescriptor(
1264
1396
  Unit.prototype,
1265
- "strengthBase",
1397
+ "primaryAttribute",
1266
1398
  {
1267
1399
  get = function(self)
1268
- return getHeroStr(self.handle, false)
1400
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1269
1401
  end,
1270
- set = function(self, strengthBase)
1271
- setHeroStr(self.handle, strengthBase, true)
1402
+ set = function(self, primaryAttribute)
1403
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1272
1404
  end
1273
1405
  },
1274
1406
  true
@@ -1290,19 +1422,6 @@ __TS__SetDescriptor(
1290
1422
  end},
1291
1423
  true
1292
1424
  )
1293
- __TS__SetDescriptor(
1294
- Unit.prototype,
1295
- "agilityBase",
1296
- {
1297
- get = function(self)
1298
- return getHeroAgi(self.handle, false)
1299
- end,
1300
- set = function(self, agilityBase)
1301
- setHeroAgi(self.handle, agilityBase, true)
1302
- end
1303
- },
1304
- true
1305
- )
1306
1425
  __TS__SetDescriptor(
1307
1426
  Unit.prototype,
1308
1427
  "agilityBonus",
@@ -1320,19 +1439,6 @@ __TS__SetDescriptor(
1320
1439
  end},
1321
1440
  true
1322
1441
  )
1323
- __TS__SetDescriptor(
1324
- Unit.prototype,
1325
- "intelligenceBase",
1326
- {
1327
- get = function(self)
1328
- return getHeroInt(self.handle, false)
1329
- end,
1330
- set = function(self, intelligenceBase)
1331
- setHeroInt(self.handle, intelligenceBase, true)
1332
- end
1333
- },
1334
- true
1335
- )
1336
1442
  __TS__SetDescriptor(
1337
1443
  Unit.prototype,
1338
1444
  "intelligenceBonus",
@@ -1381,17 +1487,17 @@ __TS__SetDescriptor(
1381
1487
  "isTeamGlowVisible",
1382
1488
  {
1383
1489
  get = function(self)
1384
- return not self[105]
1490
+ return not self[107]
1385
1491
  end,
1386
1492
  set = function(self, isTeamGlowVisible)
1387
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1388
- local ____temp_2
1493
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1494
+ local ____temp_7
1389
1495
  if not isTeamGlowVisible then
1390
- ____temp_2 = true
1496
+ ____temp_7 = true
1391
1497
  else
1392
- ____temp_2 = nil
1498
+ ____temp_7 = nil
1393
1499
  end
1394
- self[105] = ____temp_2
1500
+ self[107] = ____temp_7
1395
1501
  end
1396
1502
  },
1397
1503
  true
@@ -1400,9 +1506,9 @@ __TS__SetDescriptor(
1400
1506
  Unit.prototype,
1401
1507
  "color",
1402
1508
  {set = function(self, color)
1403
- setUnitColor(self.handle, color.handle)
1404
- if self[105] then
1405
- showUnitTeamGlow(self.handle, false)
1509
+ SetUnitColor(self.handle, color.handle)
1510
+ if self[107] then
1511
+ BlzShowUnitTeamGlow(self.handle, false)
1406
1512
  end
1407
1513
  end},
1408
1514
  true
@@ -1425,14 +1531,14 @@ __TS__SetDescriptor(
1425
1531
  "maxHealth",
1426
1532
  {
1427
1533
  get = function(self)
1428
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1534
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1429
1535
  end,
1430
1536
  set = function(self, maxHealth)
1431
- if maxHealth < 1 and self[102] ~= nil then
1432
- self[103] = (self[103] or 0) + (1 - maxHealth)
1537
+ if maxHealth < 1 and self[104] ~= nil then
1538
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1433
1539
  maxHealth = 1
1434
1540
  end
1435
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1541
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1436
1542
  end
1437
1543
  },
1438
1544
  true
@@ -1474,10 +1580,10 @@ __TS__SetDescriptor(
1474
1580
  "health",
1475
1581
  {
1476
1582
  get = function(self)
1477
- return GetWidgetLife(self.handle) - (self[104] or 0)
1583
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1478
1584
  end,
1479
1585
  set = function(self, health)
1480
- SetWidgetLife(self.handle, health + (self[104] or 0))
1586
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1481
1587
  end
1482
1588
  },
1483
1589
  true
@@ -1553,25 +1659,12 @@ __TS__SetDescriptor(
1553
1659
  },
1554
1660
  true
1555
1661
  )
1556
- __TS__SetDescriptor(
1557
- Unit.prototype,
1558
- "flyHeight",
1559
- {
1560
- get = function(self)
1561
- return getUnitFlyHeight(self.handle)
1562
- end,
1563
- set = function(self, v)
1564
- SetUnitFlyHeight(self.handle, v, 100000)
1565
- end
1566
- },
1567
- true
1568
- )
1569
1662
  __TS__SetDescriptor(
1570
1663
  Unit.prototype,
1571
1664
  "x",
1572
1665
  {
1573
1666
  get = function(self)
1574
- return getUnitX(self.handle)
1667
+ return self[108] or getUnitX(self.handle)
1575
1668
  end,
1576
1669
  set = function(self, v)
1577
1670
  SetUnitX(self.handle, v)
@@ -1584,7 +1677,7 @@ __TS__SetDescriptor(
1584
1677
  "y",
1585
1678
  {
1586
1679
  get = function(self)
1587
- return getUnitY(self.handle)
1680
+ return self[109] or getUnitY(self.handle)
1588
1681
  end,
1589
1682
  set = function(self, v)
1590
1683
  SetUnitY(self.handle, v)
@@ -1670,10 +1763,10 @@ __TS__SetDescriptor(
1670
1763
  "gold",
1671
1764
  {
1672
1765
  get = function(self)
1673
- return getResourceAmount(self.handle)
1766
+ return GetResourceAmount(self.handle)
1674
1767
  end,
1675
1768
  set = function(self, gold)
1676
- setResourceAmount(self.handle, gold)
1769
+ SetResourceAmount(self.handle, gold)
1677
1770
  end
1678
1771
  },
1679
1772
  true
@@ -1688,17 +1781,21 @@ __TS__SetDescriptor(
1688
1781
  set = function(self, isPaused)
1689
1782
  local handle = self.handle
1690
1783
  if isPaused and not IsUnitPaused(handle) then
1691
- self[100] = true
1692
- for _ = self[101] or 0, -1 do
1693
- BlzPauseUnitEx(handle, true)
1784
+ self[101] = true
1785
+ if (self[103] or 0) <= 0 then
1786
+ for _ = self[102] or 0, -1 do
1787
+ BlzPauseUnitEx(handle, true)
1788
+ end
1694
1789
  end
1695
1790
  PauseUnit(handle, true)
1696
1791
  elseif not isPaused and IsUnitPaused(handle) then
1697
1792
  PauseUnit(handle, false)
1698
- for _ = self[101] or 0, -1 do
1699
- 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
1700
1797
  end
1701
- self[100] = nil
1798
+ self[101] = nil
1702
1799
  end
1703
1800
  end
1704
1801
  },
@@ -1754,20 +1851,6 @@ __TS__SetDescriptor(
1754
1851
  },
1755
1852
  true
1756
1853
  )
1757
- __TS__SetDescriptor(
1758
- Unit.prototype,
1759
- "scale",
1760
- {
1761
- get = function(self)
1762
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1763
- end,
1764
- set = function(self, v)
1765
- setUnitScale(self.handle, v, v, v)
1766
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1767
- end
1768
- },
1769
- true
1770
- )
1771
1854
  __TS__SetDescriptor(
1772
1855
  Unit.prototype,
1773
1856
  "timeScale",
@@ -1801,6 +1884,19 @@ __TS__SetDescriptor(
1801
1884
  end},
1802
1885
  true
1803
1886
  )
1887
+ __TS__SetDescriptor(
1888
+ Unit.prototype,
1889
+ "movementType",
1890
+ {
1891
+ get = function(self)
1892
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1893
+ end,
1894
+ set = function(self, movementType)
1895
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1896
+ end
1897
+ },
1898
+ true
1899
+ )
1804
1900
  __TS__SetDescriptor(
1805
1901
  Unit.prototype,
1806
1902
  "pathing",
@@ -1982,6 +2078,14 @@ __TS__SetDescriptor(
1982
2078
  end},
1983
2079
  true
1984
2080
  )
2081
+ __TS__SetDescriptor(
2082
+ Unit.prototype,
2083
+ "targetAcquiredEvent",
2084
+ {get = function(self)
2085
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2086
+ end},
2087
+ true
2088
+ )
1985
2089
  __TS__SetDescriptor(
1986
2090
  Unit.prototype,
1987
2091
  "onSelect",
@@ -2042,6 +2146,11 @@ __TS__SetDescriptor(
2042
2146
  end},
2043
2147
  true
2044
2148
  )
2149
+ Unit.levelChangedEvent = __TS__New(
2150
+ ____exports.UnitTriggerEvent,
2151
+ EVENT_PLAYER_HERO_LEVEL,
2152
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2153
+ )
2045
2154
  Unit.deathEvent = __TS__New(
2046
2155
  ____exports.UnitTriggerEvent,
2047
2156
  EVENT_PLAYER_UNIT_DEATH,
@@ -2055,7 +2164,6 @@ Unit.onDecay = __TS__New(
2055
2164
  Unit.onResurrect = __TS__New(
2056
2165
  InitializingEvent,
2057
2166
  function(event)
2058
- local invoke = Event.invoke
2059
2167
  local dead = setmetatable({}, {__mode = "k"})
2060
2168
  ____exports.Unit.deathEvent:addListener(function(unit)
2061
2169
  dead[unit] = true
@@ -2071,10 +2179,15 @@ Unit.onResurrect = __TS__New(
2071
2179
  Unit.morphEvent = __TS__New(
2072
2180
  InitializingEvent,
2073
2181
  function(event)
2182
+ local function ifNotLeft(unit)
2183
+ local handle = unit.handle
2184
+ if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
2185
+ invoke(event, unit)
2186
+ end
2187
+ end
2074
2188
  ____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
2075
2189
  if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
2076
- assert(unitAddAbility(unit.handle, morphDetectAbilityId))
2077
- Timer:run(Event.invoke, event, unit)
2190
+ Timer:run(ifNotLeft, unit)
2078
2191
  end
2079
2192
  end)
2080
2193
  end
@@ -2112,27 +2225,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
2112
2225
  Unit.onTargetCast = dispatchId(__TS__New(
2113
2226
  InitializingEvent,
2114
2227
  function(event)
2115
- local invoke = Event.invoke
2116
2228
  local function listener(unit, id)
2117
- local ____GetSpellTargetUnit_result_5
2229
+ local ____GetSpellTargetUnit_result_10
2118
2230
  if GetSpellTargetUnit() then
2119
- ____GetSpellTargetUnit_result_5 = ____exports.Unit:of(GetSpellTargetUnit())
2231
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2120
2232
  else
2121
- local ____GetSpellTargetItem_result_4
2233
+ local ____GetSpellTargetItem_result_9
2122
2234
  if GetSpellTargetItem() then
2123
- ____GetSpellTargetItem_result_4 = Item:of(GetSpellTargetItem())
2235
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2124
2236
  else
2125
- local ____GetSpellTargetDestructable_result_3
2237
+ local ____GetSpellTargetDestructable_result_8
2126
2238
  if GetSpellTargetDestructable() then
2127
- ____GetSpellTargetDestructable_result_3 = Destructable:of(GetSpellTargetDestructable())
2239
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2128
2240
  else
2129
- ____GetSpellTargetDestructable_result_3 = nil
2241
+ ____GetSpellTargetDestructable_result_8 = nil
2130
2242
  end
2131
- ____GetSpellTargetItem_result_4 = ____GetSpellTargetDestructable_result_3
2243
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2132
2244
  end
2133
- ____GetSpellTargetUnit_result_5 = ____GetSpellTargetItem_result_4
2245
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2134
2246
  end
2135
- local target = ____GetSpellTargetUnit_result_5
2247
+ local target = ____GetSpellTargetUnit_result_10
2136
2248
  if target then
2137
2249
  invoke(event, unit, id, target)
2138
2250
  end
@@ -2304,10 +2416,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2304
2416
  ____exports.UnitTriggerEvent,
2305
2417
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2306
2418
  function()
2307
- local unit = ____exports.Unit:of(getOrderedUnit())
2308
- local issuedOrderId = getIssuedOrderId()
2309
- if unit ~= nil and unit.state == 1 then
2310
- return unit, issuedOrderId
2419
+ local handle = getOrderedUnit()
2420
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2421
+ local unit = ____exports.Unit:of(handle)
2422
+ if unit.state == 1 then
2423
+ return unit, getIssuedOrderId()
2424
+ end
2311
2425
  end
2312
2426
  return IgnoreEvent
2313
2427
  end
@@ -2329,7 +2443,6 @@ Unit.autoAttackStartEvent = __TS__New(
2329
2443
  )
2330
2444
  Unit.onDamaging = (function()
2331
2445
  local event = __TS__New(Event)
2332
- local invoke = Event.invoke
2333
2446
  local trigger = CreateTrigger()
2334
2447
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
2335
2448
  TriggerAddCondition(
@@ -2339,38 +2452,57 @@ Unit.onDamaging = (function()
2339
2452
  if source and source.typeId == dummyUnitId then
2340
2453
  source = nil
2341
2454
  end
2342
- local target = BlzGetEventDamageTarget()
2455
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2456
+ local metadata = damageMetadataByTarget[target]
2457
+ damageMetadataByTarget[target] = nil
2343
2458
  local data = {
2344
2459
  amount = GetEventDamage(),
2345
- attackType = BlzGetEventAttackType(),
2460
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2346
2461
  damageType = BlzGetEventDamageType(),
2347
2462
  weaponType = BlzGetEventWeaponType(),
2348
- isAttack = BlzGetEventIsAttack()
2463
+ metadata = metadata,
2464
+ isAttack = BlzGetEventIsAttack(),
2465
+ originalAmount = GetEventDamage(),
2466
+ originalMetadata = metadata,
2467
+ preventRetaliation = damagingEventPreventRetaliation
2349
2468
  }
2350
2469
  if data.isAttack and source then
2351
- 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
2352
- if weapon == -1 then
2353
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2354
- weapon = 0
2355
- end
2356
- data.weapon = assert(source.weapons[weapon + 1])
2470
+ data.weapon = source:chooseWeapon(target)
2357
2471
  end
2358
2472
  if not data.isAttack or not source or not source._attackHandlers then
2359
2473
  invoke(
2360
2474
  event,
2361
2475
  source,
2362
- ____exports.Unit:of(target),
2476
+ target,
2363
2477
  setmetatable(
2364
2478
  {},
2365
2479
  {
2366
2480
  __index = data,
2367
2481
  __newindex = function(self, key, value)
2368
- damageSetters[key](value)
2482
+ local damageSetter = damageSetters[key]
2483
+ if damageSetter ~= nil then
2484
+ damageSetter(value)
2485
+ end
2369
2486
  data[key] = value
2370
2487
  end
2371
2488
  }
2372
2489
  )
2373
2490
  )
2491
+ if data[0] and source then
2492
+ local sourceOwner = source.owner.handle
2493
+ data[1] = sourceOwner
2494
+ local targetOwner = target.owner.handle
2495
+ data[2] = targetOwner
2496
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2497
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2498
+ data[3] = true
2499
+ end
2500
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2501
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2502
+ data[4] = true
2503
+ end
2504
+ end
2505
+ damagingEventByTarget[target] = data
2374
2506
  return
2375
2507
  end
2376
2508
  BlzSetEventDamage(0)
@@ -2378,7 +2510,7 @@ Unit.onDamaging = (function()
2378
2510
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2379
2511
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2380
2512
  local sourceOwner = source.owner.handle
2381
- local targetOwner = GetOwningPlayer(target)
2513
+ local targetOwner = target.owner.handle
2382
2514
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2383
2515
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2384
2516
  Timer:run(function()
@@ -2394,23 +2526,19 @@ Unit.onDamaging = (function()
2394
2526
  for ____, ____value in ipairs(source._attackHandlers) do
2395
2527
  local condition = ____value[1]
2396
2528
  local action = ____value[2]
2397
- if condition(
2398
- source,
2399
- ____exports.Unit:of(target),
2400
- data
2401
- ) then
2529
+ if condition(source, target, data) then
2402
2530
  action(
2403
2531
  source,
2404
- ____exports.Unit:of(target),
2532
+ target,
2405
2533
  setmetatable(
2406
2534
  {fire = function()
2407
2535
  UnitDamageTarget(
2408
2536
  source.handle,
2409
- target,
2537
+ target.handle,
2410
2538
  data.amount,
2411
2539
  true,
2412
2540
  true,
2413
- data.attackType,
2541
+ attackTypeToNative(data.attackType),
2414
2542
  data.damageType,
2415
2543
  data.weaponType
2416
2544
  )
@@ -2428,7 +2556,6 @@ end)()
2428
2556
  Unit.onDamage = __TS__New(
2429
2557
  InitializingEvent,
2430
2558
  function(event)
2431
- local invoke = Event.invoke
2432
2559
  local trigger = CreateTrigger()
2433
2560
  TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
2434
2561
  TriggerAddCondition(
@@ -2438,29 +2565,54 @@ Unit.onDamage = __TS__New(
2438
2565
  if source and source.typeId == dummyUnitId then
2439
2566
  source = nil
2440
2567
  end
2568
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2569
+ local damagingEvent = damagingEventByTarget[target]
2570
+ damagingEventByTarget[target] = nil
2441
2571
  local data = {
2442
2572
  amount = GetEventDamage(),
2443
- attackType = BlzGetEventAttackType(),
2573
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2444
2574
  damageType = BlzGetEventDamageType(),
2445
2575
  weaponType = BlzGetEventWeaponType(),
2576
+ metadata = damagingEvent and damagingEvent.metadata,
2446
2577
  isAttack = BlzGetEventIsAttack(),
2578
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2579
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2447
2580
  preventDeath = damageEventPreventDeath
2448
2581
  }
2582
+ if damagingEvent then
2583
+ for key, value in pairs(damagingEvent) do
2584
+ if isAttribute(key) then
2585
+ data[key] = value
2586
+ end
2587
+ end
2588
+ local sourceOwner = damagingEvent[1]
2589
+ if sourceOwner then
2590
+ local targetOwner = damagingEvent[2]
2591
+ if damagingEvent[3] then
2592
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2593
+ end
2594
+ if damagingEvent[4] then
2595
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2596
+ end
2597
+ end
2598
+ end
2449
2599
  local evData = setmetatable(
2450
2600
  {},
2451
2601
  {
2452
2602
  __index = data,
2453
2603
  __newindex = function(self, key, value)
2454
- damageSetters[key](value)
2604
+ local damageSetter = damageSetters[key]
2605
+ if damageSetter ~= nil then
2606
+ damageSetter(value)
2607
+ end
2455
2608
  data[key] = value
2456
2609
  end
2457
2610
  }
2458
2611
  )
2459
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2460
2612
  invoke(event, source, target, evData)
2461
2613
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2462
2614
  local bonusHealth = math.ceil(evData.amount)
2463
- target[104] = (target[104] or 0) + bonusHealth
2615
+ target[106] = (target[106] or 0) + bonusHealth
2464
2616
  BlzSetUnitMaxHP(
2465
2617
  target.handle,
2466
2618
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2474,7 +2626,7 @@ Unit.onDamage = __TS__New(
2474
2626
  evData[0],
2475
2627
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2476
2628
  )
2477
- target[104] = (target[104] or 0) - bonusHealth
2629
+ target[106] = (target[106] or 0) - bonusHealth
2478
2630
  SetWidgetLife(
2479
2631
  target.handle,
2480
2632
  GetWidgetLife(target.handle) - bonusHealth
@@ -2494,32 +2646,110 @@ Unit.onDamage = __TS__New(
2494
2646
  DestroyTrigger(trigger)
2495
2647
  end
2496
2648
  )
2497
- Unit.onItemDrop = __TS__New(
2649
+ Unit.itemDroppedEvent = __TS__New(
2498
2650
  ____exports.UnitTriggerEvent,
2499
2651
  EVENT_PLAYER_UNIT_DROP_ITEM,
2500
2652
  function()
2501
2653
  local unit = getTriggerUnit()
2502
- if getUnitTypeId(unit) ~= dummyUnitId then
2503
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2654
+ local item = getManipulatedItem()
2655
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2656
+ return ____exports.Unit:of(unit), Item:of(item)
2504
2657
  end
2505
2658
  return IgnoreEvent
2506
2659
  end
2507
2660
  )
2508
- Unit.onItemPickup = __TS__New(
2661
+ Unit.itemPickedUpEvent = __TS__New(
2509
2662
  ____exports.UnitTriggerEvent,
2510
2663
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2511
2664
  function()
2512
- local unit = getTriggerUnit()
2513
- if getUnitTypeId(unit) ~= dummyUnitId then
2514
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2665
+ local unitHandle = getTriggerUnit()
2666
+ local itemHandle = getManipulatedItem()
2667
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2668
+ local unit = ____exports.Unit:of(unitHandle)
2669
+ local item = Item:of(itemHandle)
2670
+ if item.owner ~= unit then
2671
+ return unit, item
2672
+ end
2515
2673
  end
2516
2674
  return IgnoreEvent
2517
2675
  end
2518
2676
  )
2519
- Unit.onItemUse = __TS__New(
2677
+ Unit.itemUsedEvent = __TS__New(
2520
2678
  ____exports.UnitTriggerEvent,
2521
2679
  EVENT_PLAYER_UNIT_USE_ITEM,
2522
- function() return ____exports.Unit:of(GetTriggerUnit()), Item:of(GetManipulatedItem()) end
2680
+ function()
2681
+ local unit = getTriggerUnit()
2682
+ local item = getManipulatedItem()
2683
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2684
+ return ____exports.Unit:of(unit), Item:of(item)
2685
+ end
2686
+ return IgnoreEvent
2687
+ end
2688
+ )
2689
+ Unit.itemStackedEvent = __TS__New(
2690
+ ____exports.UnitTriggerEvent,
2691
+ EVENT_PLAYER_UNIT_STACK_ITEM,
2692
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2693
+ )
2694
+ __TS__ObjectDefineProperty(
2695
+ Unit,
2696
+ "itemChargesChangedEvent",
2697
+ {get = function(self)
2698
+ local event = __TS__New(Event)
2699
+ Item.chargesChangedEvent:addListener(function(item)
2700
+ local unit = item.owner
2701
+ if unit ~= nil then
2702
+ invoke(event, unit, item)
2703
+ end
2704
+ end)
2705
+ rawset(self, "itemChargesChangedEvent", event)
2706
+ return event
2707
+ end}
2708
+ )
2709
+ __TS__ObjectDefineProperty(
2710
+ Unit,
2711
+ "itemUseOrderEvent",
2712
+ {get = function(self)
2713
+ local event = __TS__New(Event)
2714
+ for order = orderId("useslot0"), orderId("useslot5") do
2715
+ local slot = order - orderId("useslot0")
2716
+ local function listener(unit)
2717
+ local item = unit.items[slot + 1]
2718
+ if item ~= nil then
2719
+ invoke(event, unit, item)
2720
+ end
2721
+ end
2722
+ self.onImmediateOrder[order]:addListener(listener)
2723
+ self.onTargetOrder[order]:addListener(listener)
2724
+ self.onPointOrder[order]:addListener(listener)
2725
+ end
2726
+ rawset(self, "itemUseOrderEvent", event)
2727
+ return event
2728
+ end}
2729
+ )
2730
+ __TS__ObjectDefineProperty(
2731
+ Unit,
2732
+ "itemMoveOrderEvent",
2733
+ {get = function(self)
2734
+ local event = __TS__New(Event)
2735
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2736
+ local slotTo = order - orderId("moveslot0")
2737
+ self.onTargetOrder[order]:addListener(function(unit, item)
2738
+ local slotFrom = unit.items:findSlot(item)
2739
+ if slotFrom ~= nil then
2740
+ invoke(
2741
+ event,
2742
+ unit,
2743
+ item,
2744
+ slotFrom,
2745
+ slotTo
2746
+ )
2747
+ end
2748
+ end)
2749
+ end
2750
+ rawset(self, "itemMoveOrderEvent", event)
2751
+ return event
2752
+ end}
2523
2753
  )
2524
2754
  __TS__ObjectDefineProperty(
2525
2755
  Unit,
@@ -2546,6 +2776,10 @@ __TS__ObjectDefineProperty(
2546
2776
  rawset(self, "destroyEvent", destroyEvent)
2547
2777
  return destroyEvent
2548
2778
  end}
2779
+ )
2780
+ Unit.synchronize = synchronizer(
2781
+ function(unit) return unit.syncId end,
2782
+ function(syncId) return unitBySyncId[syncId] end
2549
2783
  );
2550
2784
  (function(self)
2551
2785
  local leaveAbilityIds = postcompile(function()