warscript 0.0.1-dev.b34a02b → 0.0.1-dev.b356a12

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 (250) hide show
  1. package/attributes.d.ts +6 -0
  2. package/attributes.lua +17 -1
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +14 -6
  6. package/core/types/effect.lua +131 -35
  7. package/core/types/frame.d.ts +3 -0
  8. package/core/types/frame.lua +130 -22
  9. package/core/types/player.d.ts +16 -0
  10. package/core/types/player.lua +60 -15
  11. package/core/types/playerCamera.d.ts +2 -0
  12. package/core/types/playerCamera.lua +123 -5
  13. package/core/types/sound.d.ts +17 -24
  14. package/core/types/sound.lua +100 -25
  15. package/core/types/tileCell.d.ts +11 -1
  16. package/core/types/tileCell.lua +97 -0
  17. package/core/types/timer.d.ts +9 -8
  18. package/core/types/timer.lua +45 -23
  19. package/core/util.d.ts +1 -1
  20. package/core/util.lua +12 -1
  21. package/decl/native.d.ts +846 -790
  22. package/destroyable.d.ts +1 -0
  23. package/destroyable.lua +9 -0
  24. package/engine/behavior.d.ts +14 -1
  25. package/engine/behavior.lua +230 -70
  26. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  27. package/engine/behaviour/ability/always-enabled.lua +31 -0
  28. package/engine/behaviour/ability/apply-buff.d.ts +5 -0
  29. package/engine/behaviour/ability/apply-buff.lua +36 -4
  30. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  31. package/engine/behaviour/ability/damage.d.ts +12 -3
  32. package/engine/behaviour/ability/damage.lua +33 -39
  33. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  34. package/engine/behaviour/ability/emulate-impact.lua +43 -0
  35. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  36. package/engine/behaviour/ability/instant-impact.lua +4 -19
  37. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  38. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  39. package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
  40. package/engine/behaviour/ability/remove-buffs.lua +49 -0
  41. package/engine/behaviour/ability/restore-mana.d.ts +1 -1
  42. package/engine/behaviour/ability/restore-mana.lua +6 -6
  43. package/engine/behaviour/ability.d.ts +28 -7
  44. package/engine/behaviour/ability.lua +137 -43
  45. package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
  46. package/engine/behaviour/unit/stun-immunity.lua +57 -31
  47. package/engine/behaviour/unit.d.ts +40 -2
  48. package/engine/behaviour/unit.lua +269 -6
  49. package/engine/buff.d.ts +119 -54
  50. package/engine/buff.lua +565 -298
  51. package/engine/internal/ability.d.ts +22 -3
  52. package/engine/internal/ability.lua +133 -13
  53. package/engine/internal/item/ability.lua +162 -4
  54. package/engine/internal/item+owner.lua +12 -6
  55. package/engine/internal/item.d.ts +20 -19
  56. package/engine/internal/item.lua +191 -74
  57. package/engine/internal/mechanics/ability-duration.lua +1 -1
  58. package/engine/internal/mechanics/cast-ability.lua +6 -3
  59. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  60. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  61. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  62. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  63. package/engine/internal/misc/frame-coordinates.lua +21 -0
  64. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  65. package/engine/internal/misc/get-terrain-z.lua +11 -0
  66. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  67. package/engine/internal/misc/player-local-handle.lua +5 -0
  68. package/engine/internal/object-data/armor-bonus.d.ts +2 -0
  69. package/engine/internal/object-data/attribute-bonus.lua +2 -2
  70. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  71. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  72. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  73. package/engine/internal/object-data/evasion-probability.lua +16 -0
  74. package/engine/internal/object-data/health-bonus.d.ts +2 -0
  75. package/engine/internal/object-data/health-bonus.lua +16 -0
  76. package/engine/internal/object-data/mana-bonus.d.ts +2 -0
  77. package/engine/internal/object-data/mana-bonus.lua +16 -0
  78. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  79. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  80. package/engine/internal/unit/ability.d.ts +45 -1
  81. package/engine/internal/unit/ability.lua +128 -17
  82. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  83. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  84. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  85. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  86. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  87. package/engine/internal/unit/allowed-targets.lua +9 -1
  88. package/engine/internal/unit/attributes.d.ts +17 -0
  89. package/engine/internal/unit/attributes.lua +46 -0
  90. package/engine/internal/unit/bonus.d.ts +8 -0
  91. package/engine/internal/unit/bonus.lua +50 -3
  92. package/engine/internal/unit/fly-height.d.ts +7 -0
  93. package/engine/internal/unit/fly-height.lua +20 -0
  94. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  95. package/engine/internal/unit/ignore-events-items.lua +5 -0
  96. package/engine/internal/unit/interrupts.d.ts +12 -0
  97. package/engine/internal/unit/interrupts.lua +28 -0
  98. package/engine/internal/unit/item.d.ts +1 -0
  99. package/engine/internal/unit/item.lua +8 -4
  100. package/engine/internal/unit/main-selected.d.ts +13 -0
  101. package/engine/internal/unit/main-selected.lua +36 -0
  102. package/engine/internal/unit/order.d.ts +20 -0
  103. package/engine/internal/unit/order.lua +136 -0
  104. package/engine/internal/unit/range-event.d.ts +12 -0
  105. package/engine/internal/unit/range-event.lua +90 -0
  106. package/engine/internal/unit/scale.d.ts +7 -0
  107. package/engine/internal/unit/scale.lua +20 -0
  108. package/engine/internal/unit+ability.lua +10 -1
  109. package/engine/internal/unit+bonus.lua +3 -3
  110. package/engine/internal/unit+damage.d.ts +2 -11
  111. package/engine/internal/unit+damage.lua +10 -14
  112. package/engine/internal/unit+spellSteal.lua +1 -2
  113. package/engine/internal/unit-missile-launch.lua +52 -14
  114. package/engine/internal/unit.d.ts +56 -27
  115. package/engine/internal/unit.lua +469 -309
  116. package/engine/internal/utility.lua +12 -0
  117. package/engine/lightning.d.ts +12 -5
  118. package/engine/lightning.lua +48 -14
  119. package/engine/local-client.d.ts +6 -0
  120. package/engine/local-client.lua +77 -2
  121. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  122. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  123. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  124. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  125. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  126. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  127. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  128. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  129. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  130. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  131. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  132. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  133. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  134. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  135. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  136. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  137. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  138. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  139. package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
  140. package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
  141. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  142. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  143. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  144. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  145. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  146. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  147. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  148. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  149. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  150. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  151. package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
  152. package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
  153. package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
  154. package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -0
  155. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  156. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  157. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  158. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  159. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  160. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  161. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  162. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  163. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  164. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  165. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  166. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  167. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  168. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  169. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  170. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  171. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  172. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  173. package/engine/object-data/entry/ability-type/web.lua +52 -0
  174. package/engine/object-data/entry/ability-type.d.ts +21 -17
  175. package/engine/object-data/entry/ability-type.lua +177 -40
  176. package/engine/object-data/entry/buff-type/applicable.lua +122 -137
  177. package/engine/object-data/entry/buff-type.d.ts +6 -12
  178. package/engine/object-data/entry/buff-type.lua +13 -29
  179. package/engine/object-data/entry/destructible-type.d.ts +28 -2
  180. package/engine/object-data/entry/destructible-type.lua +155 -0
  181. package/engine/object-data/entry/item-type.d.ts +3 -1
  182. package/engine/object-data/entry/item-type.lua +15 -2
  183. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  184. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  185. package/engine/object-data/entry/sound-preset.lua +140 -0
  186. package/engine/object-data/entry/unit-type.d.ts +25 -5
  187. package/engine/object-data/entry/unit-type.lua +258 -93
  188. package/engine/object-data/entry/upgrade.d.ts +1 -1
  189. package/engine/object-data/entry/upgrade.lua +4 -4
  190. package/engine/object-data/entry.d.ts +16 -14
  191. package/engine/object-data/entry.lua +60 -32
  192. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  193. package/engine/object-field/ability.d.ts +12 -6
  194. package/engine/object-field/ability.lua +10 -6
  195. package/engine/object-field/unit.d.ts +72 -3
  196. package/engine/object-field/unit.lua +268 -7
  197. package/engine/object-field.d.ts +26 -7
  198. package/engine/object-field.lua +362 -117
  199. package/engine/random.d.ts +10 -0
  200. package/engine/random.lua +21 -0
  201. package/engine/standard/entries/buff-type.d.ts +3 -0
  202. package/engine/standard/entries/buff-type.lua +3 -0
  203. package/engine/standard/entries/sound-preset.d.ts +10 -0
  204. package/engine/standard/entries/sound-preset.lua +10 -0
  205. package/engine/standard/fields/ability.d.ts +4 -2
  206. package/engine/standard/fields/ability.lua +4 -2
  207. package/engine/standard/fields/unit.d.ts +12 -0
  208. package/engine/standard/fields/unit.lua +20 -0
  209. package/engine/synchronization.d.ts +11 -0
  210. package/engine/synchronization.lua +77 -0
  211. package/engine/text-tag.d.ts +36 -2
  212. package/engine/text-tag.lua +250 -10
  213. package/engine/unit.d.ts +8 -0
  214. package/engine/unit.lua +8 -0
  215. package/lualib_bundle.lua +1 -1
  216. package/math.d.ts +2 -0
  217. package/math.lua +14 -0
  218. package/net/socket.lua +1 -1
  219. package/objutil/buff.lua +11 -10
  220. package/objutil/object.lua +1 -1
  221. package/objutil/unit.lua +8 -0
  222. package/operation.lua +1 -4
  223. package/package.json +5 -5
  224. package/patch-lua.lua +15 -0
  225. package/patch-lualib.lua +1 -1
  226. package/utility/arrays.d.ts +10 -1
  227. package/utility/arrays.lua +45 -3
  228. package/utility/callback-array.d.ts +17 -0
  229. package/utility/callback-array.lua +61 -0
  230. package/utility/functions.d.ts +8 -0
  231. package/utility/functions.lua +13 -0
  232. package/utility/lazy.d.ts +2 -0
  233. package/utility/lazy.lua +14 -0
  234. package/utility/linked-map.d.ts +34 -0
  235. package/utility/linked-map.lua +101 -0
  236. package/utility/linked-set.d.ts +4 -1
  237. package/utility/linked-set.lua +43 -1
  238. package/utility/lua-maps.d.ts +15 -2
  239. package/utility/lua-maps.lua +53 -2
  240. package/utility/lua-sets.d.ts +2 -0
  241. package/utility/lua-sets.lua +7 -0
  242. package/utility/records.lua +20 -1
  243. package/utility/reflection.lua +11 -7
  244. package/utility/types.d.ts +3 -0
  245. package/core/types/order.d.ts +0 -25
  246. package/core/types/order.lua +0 -55
  247. /package/engine/internal/{object-data/armor-increase.d.ts → misc/ability-disable-counter.d.ts} +0 -0
  248. /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
  249. /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
  250. /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
@@ -15,7 +15,6 @@ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
15
15
  local Set = ____lualib.Set
16
16
  local __TS__Spread = ____lualib.__TS__Spread
17
17
  local ____exports = {}
18
- local mainSelectedUnitByPlayer
19
18
  local ____handle = require("core.types.handle")
20
19
  local Handle = ____handle.Handle
21
20
  local ____player = require("core.types.player")
@@ -51,38 +50,43 @@ local MANA_REGENERATION_RATE_BONUS_PER_INTELLIGENCE_POINT = ____constants.MANA_R
51
50
  local ____arrays = require("utility.arrays")
52
51
  local forEach = ____arrays.forEach
53
52
  local ____math = require("math")
54
- local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
55
53
  local min = ____math.min
56
- local MINIMUM_INTEGER = ____math.MINIMUM_INTEGER
57
- local ____local_2Dclient = require("engine.local-client")
58
- local LocalClient = ____local_2Dclient.LocalClient
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
59
69
  local match = string.match
60
70
  local ____tostring = _G.tostring
61
71
  local setUnitAnimation = SetUnitAnimation
62
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
63
72
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
64
- local queueUnitAnimation = QueueUnitAnimation
65
73
  local getUnitIntegerField = BlzGetUnitIntegerField
66
74
  local getUnitRealField = BlzGetUnitRealField
67
75
  local getHeroStr = GetHeroStr
68
76
  local getHeroAgi = GetHeroAgi
69
77
  local getHeroInt = GetHeroInt
70
- local setHeroStr = SetHeroStr
71
- local setHeroAgi = SetHeroAgi
72
- local setHeroInt = SetHeroInt
73
78
  local getUnitBooleanField = BlzGetUnitBooleanField
74
79
  local getUnitStringField = BlzGetUnitStringField
75
80
  local setUnitIntegerField = BlzSetUnitIntegerField
76
81
  local setUnitRealField = BlzSetUnitRealField
77
82
  local setUnitBooleanField = BlzSetUnitBooleanField
78
83
  local setUnitStringField = BlzSetUnitStringField
79
- local setUnitScale = SetUnitScale
80
84
  local setUnitPosition = SetUnitPosition
81
85
  local setUnitTimeScale = SetUnitTimeScale
82
86
  local getHandleId = GetHandleId
87
+ local getUnitCurrentOrder = GetUnitCurrentOrder
83
88
  local createUnit = CreateUnit
84
89
  local killUnit = KillUnit
85
- local setUnitExploded = SetUnitExploded
86
90
  local removeUnit = RemoveUnit
87
91
  local getUnitTypeId = GetUnitTypeId
88
92
  local isHeroUnitId = IsHeroUnitId
@@ -98,15 +102,12 @@ local getSpellTargetItem = GetSpellTargetItem
98
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
99
103
  local isUnitInRangeXY = IsUnitInRangeXY
100
104
  local isUnitInRange = IsUnitInRange
101
- local setResourceAmount = SetResourceAmount
102
- local getResourceAmount = GetResourceAmount
103
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
104
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
105
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
106
108
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
107
109
  local getUnitAbilityLevel = GetUnitAbilityLevel
108
110
  local unitDisableAbility = BlzUnitDisableAbility
109
- local unitInterruptAttack = BlzUnitInterruptAttack
110
111
  local isUnitInvisible = IsUnitInvisible
111
112
  local isUnitVisible = IsUnitVisible
112
113
  local getUnitX = GetUnitX
@@ -123,15 +124,9 @@ local getOrderedUnit = GetOrderedUnit
123
124
  local getIssuedOrderId = GetIssuedOrderId
124
125
  local isUnitInvulnerable = BlzIsUnitInvulnerable
125
126
  local unitAlive = UnitAlive
126
- local unitAddType = UnitAddType
127
- local unitRemoveType = UnitRemoveType
128
- local isUnitIllusion = IsUnitIllusion
129
- local isUnitType = IsUnitType
130
127
  local isUnitAlly = IsUnitAlly
131
128
  local isUnitEnemy = IsUnitEnemy
132
129
  local getOwningPlayer = GetOwningPlayer
133
- local setUnitColor = SetUnitColor
134
- local showUnitTeamGlow = BlzShowUnitTeamGlow
135
130
  ____exports.UnitClassification = {}
136
131
  local UnitClassification = ____exports.UnitClassification
137
132
  do
@@ -141,6 +136,7 @@ do
141
136
  UnitClassification.GROUND = UNIT_TYPE_GROUND
142
137
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
143
138
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
139
+ UnitClassification.WORKER = UNIT_TYPE_PEON
144
140
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
145
141
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
146
142
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -348,6 +344,9 @@ local function dispatchAbility(event)
348
344
  }
349
345
  )
350
346
  end
347
+ local function damagingEventPreventRetaliation(self)
348
+ self[0] = true
349
+ end
351
350
  local function damageEventPreventDeath(self, callback, ...)
352
351
  if self[0] ~= nil then
353
352
  return
@@ -359,7 +358,14 @@ local function damageEventPreventDeath(self, callback, ...)
359
358
  rawset(self, 1 + i, (select(i, ...)))
360
359
  end
361
360
  end
362
- 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
+ }
363
369
  local jlimitopByOperator = {
364
370
  [0] = LESS_THAN_OR_EQUAL,
365
371
  [1] = LESS_THAN_OR_EQUAL,
@@ -377,15 +383,27 @@ local modifiers = {
377
383
  end,
378
384
  armor = function(unit, value)
379
385
  if UnitAddAbility(unit, armorBonusAbilityId) then
380
- assert(UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId))
386
+ assert(
387
+ UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
388
+ "armor bonus ability must be made permanent",
389
+ unit
390
+ )
381
391
  end
382
- local ability = assert(BlzGetUnitAbility(unit, armorBonusAbilityId))
383
- assert(BlzSetAbilityRealLevelField(
384
- ability,
385
- armorBonusField,
386
- 0,
387
- BlzGetAbilityRealLevelField(ability, armorBonusField, 0) + value
388
- ))
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
+ )
389
407
  end
390
408
  }
391
409
  local getters = {
@@ -403,6 +421,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
403
421
  self.unit = unit
404
422
  self.index = index
405
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
+ )
406
437
  __TS__SetDescriptor(
407
438
  UnitWeapon.prototype,
408
439
  "cooldown",
@@ -437,6 +468,19 @@ __TS__SetDescriptor(
437
468
  },
438
469
  true
439
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
+ )
440
484
  __TS__SetDescriptor(
441
485
  UnitWeapon.prototype,
442
486
  "damageBase",
@@ -567,17 +611,6 @@ local function retrieveAbility(unit, ability, abilityId)
567
611
  ____exports.Unit:of(unit)
568
612
  )
569
613
  end
570
- if not unitAddAbility(unit, abilityId) then
571
- if getUnitAbility(unit, abilityId) == ability then
572
- return UnitAbility:of(
573
- ability,
574
- abilityId,
575
- ____exports.Unit:of(unit)
576
- )
577
- end
578
- else
579
- unitRemoveAbility(unit, abilityId)
580
- end
581
614
  for i = 0, unitInventorySize(unit) - 1 do
582
615
  local item = unitItemInSlot(unit, i)
583
616
  if getItemAbility(item, abilityId) == ability then
@@ -624,26 +657,30 @@ local fieldSetters = {
624
657
  }
625
658
  local dummies = {}
626
659
  for ____, player in ipairs(Player.all) do
627
- local dummy = assert(createUnit(
628
- player.handle,
629
- dummyUnitId,
630
- 0,
631
- 0,
632
- 270
633
- ))
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
+ )
634
671
  ShowUnit(dummy, false)
635
672
  dummies[player] = dummy
636
673
  end
637
674
  local function delayHealthChecksCallback(unit)
638
- local counter = (unit[103] or 0) - 1
675
+ local counter = (unit[104] or 0) - 1
639
676
  if counter ~= 0 then
640
- unit[103] = counter
677
+ unit[104] = counter
641
678
  return
642
679
  end
643
- unit[103] = nil
644
- local healthBonus = unit[104]
680
+ unit[104] = nil
681
+ local healthBonus = unit[105]
645
682
  if healthBonus ~= nil then
646
- unit[104] = nil
683
+ unit[105] = nil
647
684
  local handle = unit.handle
648
685
  BlzSetUnitMaxHP(
649
686
  handle,
@@ -652,50 +689,78 @@ local function delayHealthChecksCallback(unit)
652
689
  end
653
690
  end
654
691
  local nextSyncId = 1
655
- local unitBySyncId = setmetatable({}, {__mode = "k"})
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
656
703
  ____exports.Unit = __TS__Class()
657
704
  local Unit = ____exports.Unit
658
705
  Unit.name = "Unit"
659
706
  __TS__ClassExtends(Unit, Handle)
660
707
  function Unit.prototype.____constructor(self, handle)
661
708
  Handle.prototype.____constructor(self, handle)
662
- local ____nextSyncId_0 = nextSyncId
663
- nextSyncId = ____nextSyncId_0 + 1
664
- self[100] = ____nextSyncId_0
709
+ local ____nextSyncId_1 = nextSyncId
710
+ nextSyncId = ____nextSyncId_1 + 1
711
+ self.syncId = ____nextSyncId_1
665
712
  self._owner = Player:of(getOwningPlayer(handle))
666
- assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
667
- 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
+ )
668
723
  if unitAddAbility(
669
724
  handle,
670
725
  fourCC("Amrf")
671
726
  ) then
672
- assert(unitRemoveAbility(
673
- handle,
674
- fourCC("Amrf")
675
- ))
727
+ assert(
728
+ unitRemoveAbility(
729
+ handle,
730
+ fourCC("Amrf")
731
+ ),
732
+ "fly ability must be removed after addition",
733
+ self
734
+ )
676
735
  end
677
- unitBySyncId[self[100]] = self
736
+ unitBySyncId[self.syncId] = self
678
737
  local ____ = self.abilities
679
738
  end
680
- function Unit.prototype.getEvent(self, event, collector)
681
- self.events = self.events or ({})
682
- local eventId = GetHandleId(event)
683
- if not self.events[eventId] then
684
- 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(
685
745
  TriggerEvent,
686
746
  function(trigger)
687
- TriggerRegisterUnitEvent(trigger, self.handle, event)
747
+ TriggerRegisterUnitEvent(trigger, self.handle, jevent)
688
748
  end,
689
749
  collector or (function() return {} end)
690
750
  )
751
+ self.events:put(eventId, event)
691
752
  end
692
- return self.events[eventId]
753
+ return event
754
+ end
755
+ function Unit.prototype.saveData(self)
756
+ local handle = self.handle
757
+ self[108] = self[108] or getUnitX(handle)
758
+ self[109] = self[109] or getUnitY(handle)
759
+ self._owner = self._owner or Player:of(getOwningPlayer(handle))
693
760
  end
694
761
  function Unit.prototype.onDestroy(self)
695
762
  local handle = self.handle
696
- if not self._owner then
697
- self._owner = Player:of(getOwningPlayer(handle))
698
- end
763
+ self:saveData()
699
764
  local abilities = self.abilities
700
765
  for ____, ability in ipairs(abilities) do
701
766
  ability:destroy()
@@ -731,7 +796,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
731
796
  self._attackHandlers = handlers
732
797
  if #handlers == 1 then
733
798
  local handle = self.handle
734
- assert(unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId))
799
+ assert(
800
+ unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
801
+ "attack handler ability must be added",
802
+ self
803
+ )
735
804
  end
736
805
  return handler
737
806
  end
@@ -760,17 +829,17 @@ function Unit.prototype.addModifier(self, property, modifier)
760
829
  end}
761
830
  end
762
831
  function Unit.prototype.hasCombatClassification(self, combatClassification)
763
- local ____combatClassification_1 = combatClassification
764
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_1 == ____combatClassification_1
832
+ local ____combatClassification_2 = combatClassification
833
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
765
834
  end
766
835
  function Unit.prototype.addClassification(self, classification)
767
- return unitAddType(self.handle, classification)
836
+ return UnitAddType(self.handle, classification)
768
837
  end
769
838
  function Unit.prototype.removeClassification(self, classification)
770
- return unitRemoveType(self.handle, classification)
839
+ return UnitRemoveType(self.handle, classification)
771
840
  end
772
841
  function Unit.prototype.hasClassification(self, classification)
773
- return isUnitType(self.handle, classification)
842
+ return IsUnitType(self.handle, classification)
774
843
  end
775
844
  function Unit.prototype.isVisibleTo(self, player)
776
845
  return isUnitVisible(self.handle, player.handle)
@@ -779,13 +848,13 @@ function Unit.prototype.isInvisibleTo(self, player)
779
848
  return isUnitInvisible(self.handle, player.handle)
780
849
  end
781
850
  function Unit.prototype.isInRangeOf(self, x, y, range)
782
- local ____temp_2
851
+ local ____temp_3
783
852
  if type(x) == "number" then
784
- ____temp_2 = isUnitInRangeXY(self.handle, x, y, range)
853
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
785
854
  else
786
- ____temp_2 = isUnitInRange(self.handle, x.handle, y)
855
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
787
856
  end
788
- return ____temp_2
857
+ return ____temp_3
789
858
  end
790
859
  function Unit.prototype.isAllyOf(self, unit)
791
860
  return isUnitAlly(
@@ -803,16 +872,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
803
872
  if type(animation) == "number" then
804
873
  setUnitAnimationByIndex(self.handle, animation)
805
874
  elseif rarity then
806
- setUnitAnimationWithRarity(self.handle, animation, rarity)
875
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
807
876
  else
808
877
  setUnitAnimation(self.handle, animation)
809
878
  end
810
879
  end
880
+ function Unit.prototype.resetAnimation(self)
881
+ ResetUnitAnimation(self.handle)
882
+ end
811
883
  function Unit.prototype.queueAnimation(self, animation)
812
- queueUnitAnimation(self.handle, animation)
884
+ QueueUnitAnimation(self.handle, animation)
885
+ end
886
+ function Unit.prototype.chooseWeapon(self, target)
887
+ local firstWeapon = self.firstWeapon
888
+ if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
889
+ return firstWeapon
890
+ end
891
+ local secondWeapon = self.secondWeapon
892
+ if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
893
+ return secondWeapon
894
+ end
895
+ return nil
813
896
  end
814
897
  function Unit.prototype.delayHealthChecks(self)
815
- self[103] = (self[103] or 0) + 1
898
+ self[104] = (self[104] or 0) + 1
816
899
  Timer:run(delayHealthChecksCallback, self)
817
900
  end
818
901
  function Unit.prototype.setPosition(self, x, y)
@@ -822,21 +905,21 @@ function Unit.prototype.isSelected(self, player)
822
905
  return IsUnitSelected(self.handle, player.handle)
823
906
  end
824
907
  function Unit.prototype.explode(self)
825
- setUnitExploded(self.handle, true)
908
+ SetUnitExploded(self.handle, true)
826
909
  killUnit(self.handle)
827
910
  end
828
911
  function Unit.prototype.kill(self)
829
912
  killUnit(self.handle)
830
913
  end
831
914
  function Unit.prototype.revive(self, x, y, doEffect)
832
- local ____ReviveHero_5 = ReviveHero
833
- local ____array_4 = __TS__SparseArrayNew(self.handle, x, y)
834
- local ____doEffect_3 = doEffect
835
- if ____doEffect_3 == nil then
836
- ____doEffect_3 = false
915
+ local ____ReviveHero_6 = ReviveHero
916
+ local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
917
+ local ____doEffect_4 = doEffect
918
+ if ____doEffect_4 == nil then
919
+ ____doEffect_4 = false
837
920
  end
838
- __TS__SparseArrayPush(____array_4, ____doEffect_3)
839
- ____ReviveHero_5(__TS__SparseArraySpread(____array_4))
921
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
922
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
840
923
  end
841
924
  function Unit.prototype.healTarget(self, target, amount)
842
925
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -879,17 +962,16 @@ function Unit.prototype.itemInSlot(self, slot)
879
962
  return Item:of(unitItemInSlot(self.handle, slot))
880
963
  end
881
964
  function Unit.prototype.addAbility(self, abilityId)
882
- if unitAddAbility(self.handle, abilityId) then
883
- local ability = UnitAbility:of(
884
- checkNotNull(getUnitAbility(self.handle, abilityId)),
885
- abilityId,
886
- self
887
- )
965
+ local ability = UnitAbility:of(
966
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
967
+ abilityId,
968
+ self
969
+ )
970
+ if ability ~= nil then
888
971
  local abilities = self.abilities
889
972
  abilities[#abilities + 1] = ability
890
- return ability
891
973
  end
892
- return nil
974
+ return ability
893
975
  end
894
976
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
895
977
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -903,31 +985,21 @@ end
903
985
  function Unit.prototype.hasAbility(self, abilityId)
904
986
  return getUnitAbilityLevel(self.handle, abilityId) > 0
905
987
  end
906
- function Unit.prototype.getAbilityById(self, abilityId)
907
- local handle = self.handle
908
- if unitAddAbility(handle, abilityId) then
909
- assert(unitRemoveAbility(handle, abilityId))
910
- return nil
911
- end
912
- return UnitAbility:of(
913
- getUnitAbility(self.handle, abilityId),
914
- abilityId,
915
- self
916
- )
988
+ function Unit.prototype.getAbility(self, abilityId)
989
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
990
+ return UnitAbility:of(ability, abilityId, self)
917
991
  end
918
- function Unit.prototype.removeAbility(self, abilityId)
919
- if unitRemoveAbility(self.handle, abilityId) then
920
- local abilities = self.abilities
921
- for i = 1, #abilities do
922
- if abilities[i].typeId == abilityId then
923
- abilities[i]:destroy()
924
- tremove(abilities, i)
925
- return true
926
- end
992
+ function Unit.prototype.removeAbility(self, abilityTypeId)
993
+ local abilities = self.abilities
994
+ for i = 1, #abilities do
995
+ if abilities[i].typeId == abilityTypeId then
996
+ local ability = abilities[i]
997
+ tremove(abilities, i)
998
+ ability:destroy()
999
+ return true
927
1000
  end
928
- return true
929
1001
  end
930
- return false
1002
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
931
1003
  end
932
1004
  function Unit.prototype.hideAbility(self, abilityId, flag)
933
1005
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -941,12 +1013,16 @@ end
941
1013
  function Unit.prototype.endAbilityCooldown(self, abilityId)
942
1014
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
943
1015
  end
944
- function Unit.prototype.interruptAttack(self)
945
- unitInterruptAttack(self.handle)
946
- end
947
1016
  function Unit.prototype.interruptCast(self, abilityId)
948
- unitDisableAbility(self.handle, abilityId, true, false)
949
- unitDisableAbility(self.handle, abilityId, false, false)
1017
+ local handle = self.handle
1018
+ unitDisableAbility(handle, abilityId, true, false)
1019
+ Timer:run(
1020
+ unitDisableAbility,
1021
+ handle,
1022
+ abilityId,
1023
+ false,
1024
+ false
1025
+ )
950
1026
  end
951
1027
  function Unit.prototype.getDistanceTo(self, target)
952
1028
  local handle = self.handle
@@ -1007,18 +1083,44 @@ function Unit.prototype.unpauseEx(self)
1007
1083
  end
1008
1084
  function Unit.prototype.incrementStunCounter(self)
1009
1085
  local stunCounter = self[102] or 0
1010
- if not self[101] or stunCounter >= 0 then
1086
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1011
1087
  BlzPauseUnitEx(self.handle, true)
1012
1088
  end
1013
1089
  self[102] = stunCounter + 1
1014
1090
  end
1015
1091
  function Unit.prototype.decrementStunCounter(self)
1016
1092
  local stunCounter = self[102] or 0
1017
- if not self[101] or stunCounter >= 1 then
1093
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1018
1094
  BlzPauseUnitEx(self.handle, false)
1019
1095
  end
1020
1096
  self[102] = stunCounter - 1
1021
1097
  end
1098
+ function Unit.prototype.incrementForceStunCounter(self)
1099
+ local forceStunCounter = self[103] or 0
1100
+ if forceStunCounter == 0 then
1101
+ local handle = self.handle
1102
+ if not self[101] then
1103
+ for _ = self[102] or 0, -1 do
1104
+ BlzPauseUnitEx(handle, true)
1105
+ end
1106
+ end
1107
+ BlzPauseUnitEx(handle, true)
1108
+ end
1109
+ self[103] = forceStunCounter + 1
1110
+ end
1111
+ function Unit.prototype.decrementForceStunCounter(self)
1112
+ local forceStunCounter = self[103] or 0
1113
+ if forceStunCounter == 1 then
1114
+ local handle = self.handle
1115
+ if not self[101] then
1116
+ for _ = self[102] or 0, -1 do
1117
+ BlzPauseUnitEx(handle, false)
1118
+ end
1119
+ end
1120
+ BlzPauseUnitEx(handle, false)
1121
+ end
1122
+ self[103] = forceStunCounter - 1
1123
+ end
1022
1124
  function Unit.create(self, owner, id, x, y, facing, skinId)
1023
1125
  local handle = skinId and BlzCreateUnitWithSkin(
1024
1126
  owner.handle,
@@ -1145,8 +1247,8 @@ end
1145
1247
  function Unit.prototype.__tostring(self)
1146
1248
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1147
1249
  end
1148
- function Unit.getMainSelectedOf(self, player)
1149
- return mainSelectedUnitByPlayer[player]
1250
+ function Unit.getBySyncId(self, syncId)
1251
+ return unitBySyncId[syncId]
1150
1252
  end
1151
1253
  __TS__SetDescriptor(
1152
1254
  Unit.prototype,
@@ -1207,7 +1309,15 @@ __TS__SetDescriptor(
1207
1309
  Unit.prototype,
1208
1310
  "isIllusion",
1209
1311
  {get = function(self)
1210
- return isUnitIllusion(self.handle)
1312
+ return IsUnitIllusion(self.handle)
1313
+ end},
1314
+ true
1315
+ )
1316
+ __TS__SetDescriptor(
1317
+ Unit.prototype,
1318
+ "isStunned",
1319
+ {get = function(self)
1320
+ return getUnitCurrentOrder(self.handle) == orderId("stunned")
1211
1321
  end},
1212
1322
  true
1213
1323
  )
@@ -1286,13 +1396,13 @@ __TS__SetDescriptor(
1286
1396
  )
1287
1397
  __TS__SetDescriptor(
1288
1398
  Unit.prototype,
1289
- "strengthBase",
1399
+ "primaryAttribute",
1290
1400
  {
1291
1401
  get = function(self)
1292
- return getHeroStr(self.handle, false)
1402
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1293
1403
  end,
1294
- set = function(self, strengthBase)
1295
- setHeroStr(self.handle, strengthBase, true)
1404
+ set = function(self, primaryAttribute)
1405
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1296
1406
  end
1297
1407
  },
1298
1408
  true
@@ -1314,19 +1424,6 @@ __TS__SetDescriptor(
1314
1424
  end},
1315
1425
  true
1316
1426
  )
1317
- __TS__SetDescriptor(
1318
- Unit.prototype,
1319
- "agilityBase",
1320
- {
1321
- get = function(self)
1322
- return getHeroAgi(self.handle, false)
1323
- end,
1324
- set = function(self, agilityBase)
1325
- setHeroAgi(self.handle, agilityBase, true)
1326
- end
1327
- },
1328
- true
1329
- )
1330
1427
  __TS__SetDescriptor(
1331
1428
  Unit.prototype,
1332
1429
  "agilityBonus",
@@ -1344,19 +1441,6 @@ __TS__SetDescriptor(
1344
1441
  end},
1345
1442
  true
1346
1443
  )
1347
- __TS__SetDescriptor(
1348
- Unit.prototype,
1349
- "intelligenceBase",
1350
- {
1351
- get = function(self)
1352
- return getHeroInt(self.handle, false)
1353
- end,
1354
- set = function(self, intelligenceBase)
1355
- setHeroInt(self.handle, intelligenceBase, true)
1356
- end
1357
- },
1358
- true
1359
- )
1360
1444
  __TS__SetDescriptor(
1361
1445
  Unit.prototype,
1362
1446
  "intelligenceBonus",
@@ -1405,17 +1489,17 @@ __TS__SetDescriptor(
1405
1489
  "isTeamGlowVisible",
1406
1490
  {
1407
1491
  get = function(self)
1408
- return not self[106]
1492
+ return not self[107]
1409
1493
  end,
1410
1494
  set = function(self, isTeamGlowVisible)
1411
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1412
- local ____temp_6
1495
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1496
+ local ____temp_7
1413
1497
  if not isTeamGlowVisible then
1414
- ____temp_6 = true
1498
+ ____temp_7 = true
1415
1499
  else
1416
- ____temp_6 = nil
1500
+ ____temp_7 = nil
1417
1501
  end
1418
- self[106] = ____temp_6
1502
+ self[107] = ____temp_7
1419
1503
  end
1420
1504
  },
1421
1505
  true
@@ -1424,9 +1508,9 @@ __TS__SetDescriptor(
1424
1508
  Unit.prototype,
1425
1509
  "color",
1426
1510
  {set = function(self, color)
1427
- setUnitColor(self.handle, color.handle)
1428
- if self[106] then
1429
- showUnitTeamGlow(self.handle, false)
1511
+ SetUnitColor(self.handle, color.handle)
1512
+ if self[107] then
1513
+ BlzShowUnitTeamGlow(self.handle, false)
1430
1514
  end
1431
1515
  end},
1432
1516
  true
@@ -1449,14 +1533,14 @@ __TS__SetDescriptor(
1449
1533
  "maxHealth",
1450
1534
  {
1451
1535
  get = function(self)
1452
- return BlzGetUnitMaxHP(self.handle) - (self[104] or 0) - (self[105] or 0)
1536
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1453
1537
  end,
1454
1538
  set = function(self, maxHealth)
1455
- if maxHealth < 1 and self[103] ~= nil then
1456
- self[104] = (self[104] or 0) + (1 - maxHealth)
1539
+ if maxHealth < 1 and self[104] ~= nil then
1540
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1457
1541
  maxHealth = 1
1458
1542
  end
1459
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[105] or 0))
1543
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1460
1544
  end
1461
1545
  },
1462
1546
  true
@@ -1498,10 +1582,10 @@ __TS__SetDescriptor(
1498
1582
  "health",
1499
1583
  {
1500
1584
  get = function(self)
1501
- return GetWidgetLife(self.handle) - (self[105] or 0)
1585
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1502
1586
  end,
1503
1587
  set = function(self, health)
1504
- SetWidgetLife(self.handle, health + (self[105] or 0))
1588
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1505
1589
  end
1506
1590
  },
1507
1591
  true
@@ -1577,25 +1661,12 @@ __TS__SetDescriptor(
1577
1661
  },
1578
1662
  true
1579
1663
  )
1580
- __TS__SetDescriptor(
1581
- Unit.prototype,
1582
- "flyHeight",
1583
- {
1584
- get = function(self)
1585
- return getUnitFlyHeight(self.handle)
1586
- end,
1587
- set = function(self, v)
1588
- SetUnitFlyHeight(self.handle, v, 100000)
1589
- end
1590
- },
1591
- true
1592
- )
1593
1664
  __TS__SetDescriptor(
1594
1665
  Unit.prototype,
1595
1666
  "x",
1596
1667
  {
1597
1668
  get = function(self)
1598
- return getUnitX(self.handle)
1669
+ return self[108] or getUnitX(self.handle)
1599
1670
  end,
1600
1671
  set = function(self, v)
1601
1672
  SetUnitX(self.handle, v)
@@ -1608,7 +1679,7 @@ __TS__SetDescriptor(
1608
1679
  "y",
1609
1680
  {
1610
1681
  get = function(self)
1611
- return getUnitY(self.handle)
1682
+ return self[109] or getUnitY(self.handle)
1612
1683
  end,
1613
1684
  set = function(self, v)
1614
1685
  SetUnitY(self.handle, v)
@@ -1694,10 +1765,10 @@ __TS__SetDescriptor(
1694
1765
  "gold",
1695
1766
  {
1696
1767
  get = function(self)
1697
- return getResourceAmount(self.handle)
1768
+ return GetResourceAmount(self.handle)
1698
1769
  end,
1699
1770
  set = function(self, gold)
1700
- setResourceAmount(self.handle, gold)
1771
+ SetResourceAmount(self.handle, gold)
1701
1772
  end
1702
1773
  },
1703
1774
  true
@@ -1713,14 +1784,18 @@ __TS__SetDescriptor(
1713
1784
  local handle = self.handle
1714
1785
  if isPaused and not IsUnitPaused(handle) then
1715
1786
  self[101] = true
1716
- for _ = self[102] or 0, -1 do
1717
- BlzPauseUnitEx(handle, true)
1787
+ if (self[103] or 0) <= 0 then
1788
+ for _ = self[102] or 0, -1 do
1789
+ BlzPauseUnitEx(handle, true)
1790
+ end
1718
1791
  end
1719
1792
  PauseUnit(handle, true)
1720
1793
  elseif not isPaused and IsUnitPaused(handle) then
1721
1794
  PauseUnit(handle, false)
1722
- for _ = self[102] or 0, -1 do
1723
- BlzPauseUnitEx(handle, false)
1795
+ if (self[103] or 0) <= 0 then
1796
+ for _ = self[102] or 0, -1 do
1797
+ BlzPauseUnitEx(handle, false)
1798
+ end
1724
1799
  end
1725
1800
  self[101] = nil
1726
1801
  end
@@ -1778,20 +1853,6 @@ __TS__SetDescriptor(
1778
1853
  },
1779
1854
  true
1780
1855
  )
1781
- __TS__SetDescriptor(
1782
- Unit.prototype,
1783
- "scale",
1784
- {
1785
- get = function(self)
1786
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1787
- end,
1788
- set = function(self, v)
1789
- setUnitScale(self.handle, v, v, v)
1790
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1791
- end
1792
- },
1793
- true
1794
- )
1795
1856
  __TS__SetDescriptor(
1796
1857
  Unit.prototype,
1797
1858
  "timeScale",
@@ -1825,6 +1886,19 @@ __TS__SetDescriptor(
1825
1886
  end},
1826
1887
  true
1827
1888
  )
1889
+ __TS__SetDescriptor(
1890
+ Unit.prototype,
1891
+ "movementType",
1892
+ {
1893
+ get = function(self)
1894
+ return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
1895
+ end,
1896
+ set = function(self, movementType)
1897
+ setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
1898
+ end
1899
+ },
1900
+ true
1901
+ )
1828
1902
  __TS__SetDescriptor(
1829
1903
  Unit.prototype,
1830
1904
  "pathing",
@@ -1915,30 +1989,6 @@ __TS__SetDescriptor(
1915
1989
  end},
1916
1990
  true
1917
1991
  )
1918
- __TS__SetDescriptor(
1919
- Unit.prototype,
1920
- "onUnitInRange",
1921
- {get = function(self)
1922
- local handle = self.handle
1923
- local onUnitInRange = setmetatable(
1924
- {},
1925
- {__index = function(self, value)
1926
- local event = __TS__New(
1927
- TriggerEvent,
1928
- function(trigger)
1929
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1930
- end,
1931
- function() return ____exports.Unit:of(handle) end
1932
- )
1933
- rawset(self, value, event)
1934
- return event
1935
- end}
1936
- )
1937
- rawset(self, "onUnitInRange", onUnitInRange)
1938
- return onUnitInRange
1939
- end},
1940
- true
1941
- )
1942
1992
  __TS__SetDescriptor(
1943
1993
  Unit.prototype,
1944
1994
  "onManaEqual",
@@ -2006,6 +2056,14 @@ __TS__SetDescriptor(
2006
2056
  end},
2007
2057
  true
2008
2058
  )
2059
+ __TS__SetDescriptor(
2060
+ Unit.prototype,
2061
+ "targetAcquiredEvent",
2062
+ {get = function(self)
2063
+ return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
2064
+ end},
2065
+ true
2066
+ )
2009
2067
  __TS__SetDescriptor(
2010
2068
  Unit.prototype,
2011
2069
  "onSelect",
@@ -2066,6 +2124,11 @@ __TS__SetDescriptor(
2066
2124
  end},
2067
2125
  true
2068
2126
  )
2127
+ Unit.levelChangedEvent = __TS__New(
2128
+ ____exports.UnitTriggerEvent,
2129
+ EVENT_PLAYER_HERO_LEVEL,
2130
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2131
+ )
2069
2132
  Unit.deathEvent = __TS__New(
2070
2133
  ____exports.UnitTriggerEvent,
2071
2134
  EVENT_PLAYER_UNIT_DEATH,
@@ -2141,25 +2204,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2141
2204
  InitializingEvent,
2142
2205
  function(event)
2143
2206
  local function listener(unit, id)
2144
- local ____GetSpellTargetUnit_result_9
2207
+ local ____GetSpellTargetUnit_result_10
2145
2208
  if GetSpellTargetUnit() then
2146
- ____GetSpellTargetUnit_result_9 = ____exports.Unit:of(GetSpellTargetUnit())
2209
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2147
2210
  else
2148
- local ____GetSpellTargetItem_result_8
2211
+ local ____GetSpellTargetItem_result_9
2149
2212
  if GetSpellTargetItem() then
2150
- ____GetSpellTargetItem_result_8 = Item:of(GetSpellTargetItem())
2213
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2151
2214
  else
2152
- local ____GetSpellTargetDestructable_result_7
2215
+ local ____GetSpellTargetDestructable_result_8
2153
2216
  if GetSpellTargetDestructable() then
2154
- ____GetSpellTargetDestructable_result_7 = Destructable:of(GetSpellTargetDestructable())
2217
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2155
2218
  else
2156
- ____GetSpellTargetDestructable_result_7 = nil
2219
+ ____GetSpellTargetDestructable_result_8 = nil
2157
2220
  end
2158
- ____GetSpellTargetItem_result_8 = ____GetSpellTargetDestructable_result_7
2221
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2159
2222
  end
2160
- ____GetSpellTargetUnit_result_9 = ____GetSpellTargetItem_result_8
2223
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2161
2224
  end
2162
- local target = ____GetSpellTargetUnit_result_9
2225
+ local target = ____GetSpellTargetUnit_result_10
2163
2226
  if target then
2164
2227
  invoke(event, unit, id, target)
2165
2228
  end
@@ -2331,10 +2394,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2331
2394
  ____exports.UnitTriggerEvent,
2332
2395
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2333
2396
  function()
2334
- local unit = ____exports.Unit:of(getOrderedUnit())
2335
- local issuedOrderId = getIssuedOrderId()
2336
- if unit ~= nil and unit.state == 1 then
2337
- return unit, issuedOrderId
2397
+ local handle = getOrderedUnit()
2398
+ if handle ~= nil and getUnitTypeId(handle) ~= dummyUnitId then
2399
+ local unit = ____exports.Unit:of(handle)
2400
+ if unit.state == 1 then
2401
+ return unit, getIssuedOrderId()
2402
+ end
2338
2403
  end
2339
2404
  return IgnoreEvent
2340
2405
  end
@@ -2365,38 +2430,57 @@ Unit.onDamaging = (function()
2365
2430
  if source and source.typeId == dummyUnitId then
2366
2431
  source = nil
2367
2432
  end
2368
- local target = BlzGetEventDamageTarget()
2433
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2434
+ local metadata = damageMetadataByTarget[target]
2435
+ damageMetadataByTarget[target] = nil
2369
2436
  local data = {
2370
2437
  amount = GetEventDamage(),
2371
- attackType = BlzGetEventAttackType(),
2438
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2372
2439
  damageType = BlzGetEventDamageType(),
2373
2440
  weaponType = BlzGetEventWeaponType(),
2374
- isAttack = BlzGetEventIsAttack()
2441
+ metadata = metadata,
2442
+ isAttack = BlzGetEventIsAttack(),
2443
+ originalAmount = GetEventDamage(),
2444
+ originalMetadata = metadata,
2445
+ preventRetaliation = damagingEventPreventRetaliation
2375
2446
  }
2376
2447
  if data.isAttack and source then
2377
- 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
2378
- if weapon == -1 then
2379
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2380
- weapon = 0
2381
- end
2382
- data.weapon = assert(source.weapons[weapon + 1])
2448
+ data.weapon = source:chooseWeapon(target)
2383
2449
  end
2384
2450
  if not data.isAttack or not source or not source._attackHandlers then
2385
2451
  invoke(
2386
2452
  event,
2387
2453
  source,
2388
- ____exports.Unit:of(target),
2454
+ target,
2389
2455
  setmetatable(
2390
2456
  {},
2391
2457
  {
2392
2458
  __index = data,
2393
2459
  __newindex = function(self, key, value)
2394
- damageSetters[key](value)
2460
+ local damageSetter = damageSetters[key]
2461
+ if damageSetter ~= nil then
2462
+ damageSetter(value)
2463
+ end
2395
2464
  data[key] = value
2396
2465
  end
2397
2466
  }
2398
2467
  )
2399
2468
  )
2469
+ if data[0] and source then
2470
+ local sourceOwner = source.owner.handle
2471
+ data[1] = sourceOwner
2472
+ local targetOwner = target.owner.handle
2473
+ data[2] = targetOwner
2474
+ if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2475
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2476
+ data[3] = true
2477
+ end
2478
+ if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
2479
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
2480
+ data[4] = true
2481
+ end
2482
+ end
2483
+ damagingEventByTarget[target] = data
2400
2484
  return
2401
2485
  end
2402
2486
  BlzSetEventDamage(0)
@@ -2404,7 +2488,7 @@ Unit.onDamaging = (function()
2404
2488
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2405
2489
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2406
2490
  local sourceOwner = source.owner.handle
2407
- local targetOwner = GetOwningPlayer(target)
2491
+ local targetOwner = target.owner.handle
2408
2492
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2409
2493
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2410
2494
  Timer:run(function()
@@ -2420,23 +2504,19 @@ Unit.onDamaging = (function()
2420
2504
  for ____, ____value in ipairs(source._attackHandlers) do
2421
2505
  local condition = ____value[1]
2422
2506
  local action = ____value[2]
2423
- if condition(
2424
- source,
2425
- ____exports.Unit:of(target),
2426
- data
2427
- ) then
2507
+ if condition(source, target, data) then
2428
2508
  action(
2429
2509
  source,
2430
- ____exports.Unit:of(target),
2510
+ target,
2431
2511
  setmetatable(
2432
2512
  {fire = function()
2433
2513
  UnitDamageTarget(
2434
2514
  source.handle,
2435
- target,
2515
+ target.handle,
2436
2516
  data.amount,
2437
2517
  true,
2438
2518
  true,
2439
- data.attackType,
2519
+ attackTypeToNative(data.attackType),
2440
2520
  data.damageType,
2441
2521
  data.weaponType
2442
2522
  )
@@ -2463,30 +2543,54 @@ Unit.onDamage = __TS__New(
2463
2543
  if source and source.typeId == dummyUnitId then
2464
2544
  source = nil
2465
2545
  end
2546
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2547
+ local damagingEvent = damagingEventByTarget[target]
2548
+ damagingEventByTarget[target] = nil
2466
2549
  local data = {
2467
2550
  amount = GetEventDamage(),
2468
- attackType = BlzGetEventAttackType(),
2551
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2469
2552
  damageType = BlzGetEventDamageType(),
2470
2553
  weaponType = BlzGetEventWeaponType(),
2554
+ metadata = damagingEvent and damagingEvent.metadata,
2471
2555
  isAttack = BlzGetEventIsAttack(),
2472
- originalAmount = GetEventDamage(),
2556
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2557
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2473
2558
  preventDeath = damageEventPreventDeath
2474
2559
  }
2560
+ if damagingEvent then
2561
+ for key, value in pairs(damagingEvent) do
2562
+ if isAttribute(key) then
2563
+ data[key] = value
2564
+ end
2565
+ end
2566
+ local sourceOwner = damagingEvent[1]
2567
+ if sourceOwner then
2568
+ local targetOwner = damagingEvent[2]
2569
+ if damagingEvent[3] then
2570
+ SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
2571
+ end
2572
+ if damagingEvent[4] then
2573
+ SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
2574
+ end
2575
+ end
2576
+ end
2475
2577
  local evData = setmetatable(
2476
2578
  {},
2477
2579
  {
2478
2580
  __index = data,
2479
2581
  __newindex = function(self, key, value)
2480
- damageSetters[key](value)
2582
+ local damageSetter = damageSetters[key]
2583
+ if damageSetter ~= nil then
2584
+ damageSetter(value)
2585
+ end
2481
2586
  data[key] = value
2482
2587
  end
2483
2588
  }
2484
2589
  )
2485
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2486
2590
  invoke(event, source, target, evData)
2487
2591
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2488
2592
  local bonusHealth = math.ceil(evData.amount)
2489
- target[105] = (target[105] or 0) + bonusHealth
2593
+ target[106] = (target[106] or 0) + bonusHealth
2490
2594
  BlzSetUnitMaxHP(
2491
2595
  target.handle,
2492
2596
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2500,7 +2604,7 @@ Unit.onDamage = __TS__New(
2500
2604
  evData[0],
2501
2605
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2502
2606
  )
2503
- target[105] = (target[105] or 0) - bonusHealth
2607
+ target[106] = (target[106] or 0) - bonusHealth
2504
2608
  SetWidgetLife(
2505
2609
  target.handle,
2506
2610
  GetWidgetLife(target.handle) - bonusHealth
@@ -2525,8 +2629,9 @@ Unit.itemDroppedEvent = __TS__New(
2525
2629
  EVENT_PLAYER_UNIT_DROP_ITEM,
2526
2630
  function()
2527
2631
  local unit = getTriggerUnit()
2528
- if getUnitTypeId(unit) ~= dummyUnitId then
2529
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2632
+ local item = getManipulatedItem()
2633
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2634
+ return ____exports.Unit:of(unit), Item:of(item)
2530
2635
  end
2531
2636
  return IgnoreEvent
2532
2637
  end
@@ -2535,9 +2640,14 @@ Unit.itemPickedUpEvent = __TS__New(
2535
2640
  ____exports.UnitTriggerEvent,
2536
2641
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2537
2642
  function()
2538
- local unit = getTriggerUnit()
2539
- if getUnitTypeId(unit) ~= dummyUnitId then
2540
- return ____exports.Unit:of(unit), Item:of(getManipulatedItem())
2643
+ local unitHandle = getTriggerUnit()
2644
+ local itemHandle = getManipulatedItem()
2645
+ if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
2646
+ local unit = ____exports.Unit:of(unitHandle)
2647
+ local item = Item:of(itemHandle)
2648
+ if item.owner ~= unit then
2649
+ return unit, item
2650
+ end
2541
2651
  end
2542
2652
  return IgnoreEvent
2543
2653
  end
@@ -2545,12 +2655,79 @@ Unit.itemPickedUpEvent = __TS__New(
2545
2655
  Unit.itemUsedEvent = __TS__New(
2546
2656
  ____exports.UnitTriggerEvent,
2547
2657
  EVENT_PLAYER_UNIT_USE_ITEM,
2548
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2658
+ function()
2659
+ local unit = getTriggerUnit()
2660
+ local item = getManipulatedItem()
2661
+ if getUnitTypeId(unit) ~= dummyUnitId and not (ignoreEventsItems[item] ~= nil) then
2662
+ return ____exports.Unit:of(unit), Item:of(item)
2663
+ end
2664
+ return IgnoreEvent
2665
+ end
2549
2666
  )
2550
2667
  Unit.itemStackedEvent = __TS__New(
2551
2668
  ____exports.UnitTriggerEvent,
2552
2669
  EVENT_PLAYER_UNIT_STACK_ITEM,
2553
- function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
2670
+ function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
2671
+ )
2672
+ __TS__ObjectDefineProperty(
2673
+ Unit,
2674
+ "itemChargesChangedEvent",
2675
+ {get = function(self)
2676
+ local event = __TS__New(Event)
2677
+ Item.chargesChangedEvent:addListener(function(item)
2678
+ local unit = item.owner
2679
+ if unit ~= nil then
2680
+ invoke(event, unit, item)
2681
+ end
2682
+ end)
2683
+ rawset(self, "itemChargesChangedEvent", event)
2684
+ return event
2685
+ end}
2686
+ )
2687
+ __TS__ObjectDefineProperty(
2688
+ Unit,
2689
+ "itemUseOrderEvent",
2690
+ {get = function(self)
2691
+ local event = __TS__New(Event)
2692
+ for order = orderId("useslot0"), orderId("useslot5") do
2693
+ local slot = order - orderId("useslot0")
2694
+ local function listener(unit)
2695
+ local item = unit.items[slot + 1]
2696
+ if item ~= nil then
2697
+ invoke(event, unit, item)
2698
+ end
2699
+ end
2700
+ self.onImmediateOrder[order]:addListener(listener)
2701
+ self.onTargetOrder[order]:addListener(listener)
2702
+ self.onPointOrder[order]:addListener(listener)
2703
+ end
2704
+ rawset(self, "itemUseOrderEvent", event)
2705
+ return event
2706
+ end}
2707
+ )
2708
+ __TS__ObjectDefineProperty(
2709
+ Unit,
2710
+ "itemMoveOrderEvent",
2711
+ {get = function(self)
2712
+ local event = __TS__New(Event)
2713
+ for order = orderId("moveslot0"), orderId("moveslot5") do
2714
+ local slotTo = order - orderId("moveslot0")
2715
+ self.onTargetOrder[order]:addListener(function(unit, item)
2716
+ local slotFrom = unit.items:findSlot(item)
2717
+ if slotFrom ~= nil then
2718
+ invoke(
2719
+ event,
2720
+ unit,
2721
+ item,
2722
+ slotFrom,
2723
+ slotTo
2724
+ )
2725
+ end
2726
+ end)
2727
+ end
2728
+ rawset(self, "itemMoveOrderEvent", event)
2729
+ return event
2730
+ end}
2554
2731
  )
2555
2732
  __TS__ObjectDefineProperty(
2556
2733
  Unit,
@@ -2577,6 +2754,10 @@ __TS__ObjectDefineProperty(
2577
2754
  rawset(self, "destroyEvent", destroyEvent)
2578
2755
  return destroyEvent
2579
2756
  end}
2757
+ )
2758
+ Unit.synchronize = synchronizer(
2759
+ function(unit) return unit.syncId end,
2760
+ function(syncId) return unitBySyncId[syncId] end
2580
2761
  );
2581
2762
  (function(self)
2582
2763
  local leaveAbilityIds = postcompile(function()
@@ -2606,30 +2787,9 @@ __TS__ObjectDefineProperty(
2606
2787
  return
2607
2788
  end
2608
2789
  end
2609
- unit:destroy()
2790
+ unit:saveData()
2791
+ Timer:run(unit, "destroy")
2610
2792
  end)
2611
2793
  end
2612
2794
  end)(Unit)
2613
- mainSelectedUnitByPlayer = {}
2614
- local syncSlider = BlzCreateFrameByType(
2615
- "SLIDER",
2616
- "UnitSyncId",
2617
- BlzGetOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),
2618
- "",
2619
- 0
2620
- )
2621
- BlzFrameSetMinMaxValue(syncSlider, MINIMUM_INTEGER, MAXIMUM_INTEGER)
2622
- LocalClient.mainSelectedUnitChangeEvent:addListener(function()
2623
- local ____opt_10 = LocalClient.mainSelectedUnit
2624
- local syncId = ____opt_10 and ____opt_10[100]
2625
- BlzFrameSetValue(syncSlider, syncId or 0)
2626
- end)
2627
- local trg = CreateTrigger()
2628
- BlzTriggerRegisterFrameEvent(trg, syncSlider, FRAMEEVENT_SLIDER_VALUE_CHANGED)
2629
- TriggerAddAction(
2630
- trg,
2631
- function()
2632
- mainSelectedUnitByPlayer[Player:of(GetTriggerPlayer())] = unitBySyncId[BlzGetTriggerFrameValue()]
2633
- end
2634
- )
2635
2795
  return ____exports