warscript 0.0.1-dev.b026cc2 → 0.0.1-dev.b23de5c

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 (235) 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 +6 -0
  8. package/core/types/frame.lua +113 -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 +99 -24
  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 +18 -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 +16 -3
  25. package/engine/behavior.lua +233 -73
  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 +8 -5
  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 +9 -3
  32. package/engine/behaviour/ability/damage.lua +26 -38
  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 +45 -2
  48. package/engine/behaviour/unit.lua +289 -6
  49. package/engine/buff.d.ts +128 -52
  50. package/engine/buff.lua +595 -270
  51. package/engine/internal/ability.d.ts +23 -14
  52. package/engine/internal/ability.lua +129 -85
  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.d.ts +2 -0
  60. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  61. package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
  62. package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
  63. package/engine/internal/misc/frame-coordinates.d.ts +2 -0
  64. package/engine/internal/misc/frame-coordinates.lua +21 -0
  65. package/engine/internal/misc/get-terrain-z.d.ts +2 -0
  66. package/engine/internal/misc/get-terrain-z.lua +11 -0
  67. package/engine/internal/misc/player-local-handle.d.ts +2 -0
  68. package/engine/internal/misc/player-local-handle.lua +5 -0
  69. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  70. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  71. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  72. package/engine/internal/object-data/evasion-probability.lua +16 -0
  73. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  74. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  75. package/engine/internal/unit/ability.d.ts +45 -1
  76. package/engine/internal/unit/ability.lua +128 -17
  77. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  78. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  79. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  80. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  81. package/engine/internal/unit/allowed-targets.d.ts +1 -1
  82. package/engine/internal/unit/allowed-targets.lua +9 -1
  83. package/engine/internal/unit/attributes.d.ts +17 -0
  84. package/engine/internal/unit/attributes.lua +46 -0
  85. package/engine/internal/unit/bonus.d.ts +8 -2
  86. package/engine/internal/unit/bonus.lua +33 -1
  87. package/engine/internal/unit/fly-height.d.ts +7 -0
  88. package/engine/internal/unit/fly-height.lua +20 -0
  89. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  90. package/engine/internal/unit/ignore-events-items.lua +5 -0
  91. package/engine/internal/unit/interrupts.d.ts +12 -0
  92. package/engine/internal/unit/interrupts.lua +28 -0
  93. package/engine/internal/unit/item.d.ts +24 -0
  94. package/engine/internal/unit/item.lua +78 -0
  95. package/engine/internal/unit/main-selected.d.ts +13 -0
  96. package/engine/internal/unit/main-selected.lua +36 -0
  97. package/engine/internal/unit/order.d.ts +20 -0
  98. package/engine/internal/unit/order.lua +136 -0
  99. package/engine/internal/unit/range-event.d.ts +12 -0
  100. package/engine/internal/unit/range-event.lua +90 -0
  101. package/engine/internal/unit/scale.d.ts +7 -0
  102. package/engine/internal/unit/scale.lua +20 -0
  103. package/engine/internal/unit+ability.lua +12 -3
  104. package/engine/internal/unit+damage.d.ts +2 -11
  105. package/engine/internal/unit+damage.lua +10 -14
  106. package/engine/internal/unit+spellSteal.lua +1 -2
  107. package/engine/internal/unit-missile-launch.lua +70 -13
  108. package/engine/internal/unit.d.ts +64 -30
  109. package/engine/internal/unit.lua +490 -285
  110. package/engine/internal/utility.lua +12 -0
  111. package/engine/lightning.d.ts +12 -5
  112. package/engine/lightning.lua +48 -14
  113. package/engine/local-client.d.ts +9 -2
  114. package/engine/local-client.lua +112 -0
  115. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  116. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  117. package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
  118. package/engine/object-data/auxiliary/armor-type.lua +46 -0
  119. package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
  120. package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
  121. package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
  122. package/engine/object-data/auxiliary/attack-type.lua +42 -0
  123. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  124. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  125. package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
  126. package/engine/object-data/auxiliary/movement-type.lua +22 -0
  127. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  128. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  129. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  130. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  131. package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
  132. package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
  133. package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
  134. package/engine/object-data/entry/ability-type/berserk.lua +13 -0
  135. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  136. package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
  137. package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
  138. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  139. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  140. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  141. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  142. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  143. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  144. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  145. package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
  146. package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
  147. package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
  148. package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
  149. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  150. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  151. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  152. package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
  153. package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
  154. package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
  155. package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
  156. package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
  157. package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
  158. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  159. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  160. package/engine/object-data/entry/ability-type/web.d.ts +12 -0
  161. package/engine/object-data/entry/ability-type/web.lua +52 -0
  162. package/engine/object-data/entry/ability-type.d.ts +21 -17
  163. package/engine/object-data/entry/ability-type.lua +177 -40
  164. package/engine/object-data/entry/buff-type/applicable.lua +18 -37
  165. package/engine/object-data/entry/buff-type.d.ts +6 -12
  166. package/engine/object-data/entry/buff-type.lua +13 -29
  167. package/engine/object-data/entry/destructible-type.d.ts +28 -2
  168. package/engine/object-data/entry/destructible-type.lua +155 -0
  169. package/engine/object-data/entry/item-type.d.ts +15 -1
  170. package/engine/object-data/entry/item-type.lua +93 -2
  171. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  172. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  173. package/engine/object-data/entry/sound-preset.lua +140 -0
  174. package/engine/object-data/entry/unit-type.d.ts +25 -5
  175. package/engine/object-data/entry/unit-type.lua +258 -93
  176. package/engine/object-data/entry/upgrade.d.ts +1 -1
  177. package/engine/object-data/entry/upgrade.lua +4 -4
  178. package/engine/object-data/entry.d.ts +16 -14
  179. package/engine/object-data/entry.lua +60 -32
  180. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  181. package/engine/object-field/ability.d.ts +28 -5
  182. package/engine/object-field/ability.lua +59 -5
  183. package/engine/object-field/unit.d.ts +72 -3
  184. package/engine/object-field/unit.lua +268 -7
  185. package/engine/object-field.d.ts +25 -6
  186. package/engine/object-field.lua +359 -116
  187. package/engine/random.d.ts +10 -0
  188. package/engine/random.lua +21 -0
  189. package/engine/standard/entries/buff-type.d.ts +3 -0
  190. package/engine/standard/entries/buff-type.lua +3 -0
  191. package/engine/standard/entries/sound-preset.d.ts +10 -0
  192. package/engine/standard/entries/sound-preset.lua +10 -0
  193. package/engine/standard/fields/ability.d.ts +4 -2
  194. package/engine/standard/fields/ability.lua +4 -2
  195. package/engine/standard/fields/unit.d.ts +12 -0
  196. package/engine/standard/fields/unit.lua +20 -0
  197. package/engine/synchronization.d.ts +11 -0
  198. package/engine/synchronization.lua +77 -0
  199. package/engine/text-tag.d.ts +36 -2
  200. package/engine/text-tag.lua +250 -10
  201. package/engine/unit.d.ts +9 -0
  202. package/engine/unit.lua +9 -0
  203. package/index.d.ts +1 -0
  204. package/index.lua +1 -0
  205. package/net/socket.d.ts +7 -1
  206. package/net/socket.lua +45 -4
  207. package/network.d.ts +1 -0
  208. package/network.lua +3 -2
  209. package/objutil/buff.lua +12 -11
  210. package/objutil/unit.lua +8 -0
  211. package/package.json +2 -2
  212. package/patch-lua.d.ts +0 -0
  213. package/patch-lua.lua +25 -0
  214. package/patch-lualib.lua +1 -1
  215. package/utility/arrays.d.ts +10 -1
  216. package/utility/arrays.lua +45 -3
  217. package/utility/callback-array.d.ts +17 -0
  218. package/utility/callback-array.lua +61 -0
  219. package/utility/functions.d.ts +8 -0
  220. package/utility/functions.lua +13 -0
  221. package/utility/lazy.d.ts +2 -0
  222. package/utility/lazy.lua +14 -0
  223. package/utility/linked-map.d.ts +34 -0
  224. package/utility/linked-map.lua +101 -0
  225. package/utility/linked-set.d.ts +15 -3
  226. package/utility/linked-set.lua +48 -3
  227. package/utility/lua-maps.d.ts +15 -2
  228. package/utility/lua-maps.lua +53 -2
  229. package/utility/lua-sets.d.ts +2 -0
  230. package/utility/lua-sets.lua +7 -0
  231. package/utility/records.lua +20 -1
  232. package/utility/reflection.lua +11 -7
  233. package/utility/types.d.ts +4 -0
  234. package/core/types/order.d.ts +0 -25
  235. package/core/types/order.lua +0 -55
@@ -51,33 +51,42 @@ local ____arrays = require("utility.arrays")
51
51
  local forEach = ____arrays.forEach
52
52
  local ____math = require("math")
53
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
54
69
  local match = string.match
55
70
  local ____tostring = _G.tostring
56
71
  local setUnitAnimation = SetUnitAnimation
57
- local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
58
72
  local setUnitAnimationByIndex = SetUnitAnimationByIndex
59
- local queueUnitAnimation = QueueUnitAnimation
60
73
  local getUnitIntegerField = BlzGetUnitIntegerField
61
74
  local getUnitRealField = BlzGetUnitRealField
62
75
  local getHeroStr = GetHeroStr
63
76
  local getHeroAgi = GetHeroAgi
64
77
  local getHeroInt = GetHeroInt
65
- local setHeroStr = SetHeroStr
66
- local setHeroAgi = SetHeroAgi
67
- local setHeroInt = SetHeroInt
68
78
  local getUnitBooleanField = BlzGetUnitBooleanField
69
79
  local getUnitStringField = BlzGetUnitStringField
70
80
  local setUnitIntegerField = BlzSetUnitIntegerField
71
81
  local setUnitRealField = BlzSetUnitRealField
72
82
  local setUnitBooleanField = BlzSetUnitBooleanField
73
83
  local setUnitStringField = BlzSetUnitStringField
74
- local setUnitScale = SetUnitScale
75
84
  local setUnitPosition = SetUnitPosition
76
85
  local setUnitTimeScale = SetUnitTimeScale
77
86
  local getHandleId = GetHandleId
87
+ local getUnitCurrentOrder = GetUnitCurrentOrder
78
88
  local createUnit = CreateUnit
79
89
  local killUnit = KillUnit
80
- local setUnitExploded = SetUnitExploded
81
90
  local removeUnit = RemoveUnit
82
91
  local getUnitTypeId = GetUnitTypeId
83
92
  local isHeroUnitId = IsHeroUnitId
@@ -93,15 +102,12 @@ local getSpellTargetItem = GetSpellTargetItem
93
102
  local getSpellTargetDestructable = GetSpellTargetDestructable
94
103
  local isUnitInRangeXY = IsUnitInRangeXY
95
104
  local isUnitInRange = IsUnitInRange
96
- local setResourceAmount = SetResourceAmount
97
- local getResourceAmount = GetResourceAmount
98
105
  local getUnitWeaponRealField = BlzGetUnitWeaponRealField
99
106
  local setUnitWeaponRealField = BlzSetUnitWeaponRealField
100
107
  local getUnitWeaponStringField = BlzGetUnitWeaponStringField
101
108
  local setUnitWeaponStringField = BlzSetUnitWeaponStringField
102
109
  local getUnitAbilityLevel = GetUnitAbilityLevel
103
110
  local unitDisableAbility = BlzUnitDisableAbility
104
- local unitInterruptAttack = BlzUnitInterruptAttack
105
111
  local isUnitInvisible = IsUnitInvisible
106
112
  local isUnitVisible = IsUnitVisible
107
113
  local getUnitX = GetUnitX
@@ -118,15 +124,9 @@ local getOrderedUnit = GetOrderedUnit
118
124
  local getIssuedOrderId = GetIssuedOrderId
119
125
  local isUnitInvulnerable = BlzIsUnitInvulnerable
120
126
  local unitAlive = UnitAlive
121
- local unitAddType = UnitAddType
122
- local unitRemoveType = UnitRemoveType
123
- local isUnitIllusion = IsUnitIllusion
124
- local isUnitType = IsUnitType
125
127
  local isUnitAlly = IsUnitAlly
126
128
  local isUnitEnemy = IsUnitEnemy
127
129
  local getOwningPlayer = GetOwningPlayer
128
- local setUnitColor = SetUnitColor
129
- local showUnitTeamGlow = BlzShowUnitTeamGlow
130
130
  ____exports.UnitClassification = {}
131
131
  local UnitClassification = ____exports.UnitClassification
132
132
  do
@@ -136,6 +136,7 @@ do
136
136
  UnitClassification.GROUND = UNIT_TYPE_GROUND
137
137
  UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
138
138
  UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
139
+ UnitClassification.WORKER = UNIT_TYPE_PEON
139
140
  UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
140
141
  UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
141
142
  UnitClassification.TAUREN = UNIT_TYPE_TAUREN
@@ -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,45 +688,79 @@ 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
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))
682
760
  end
683
761
  function Unit.prototype.onDestroy(self)
684
762
  local handle = self.handle
685
- if not self._owner then
686
- self._owner = Player:of(getOwningPlayer(handle))
687
- end
763
+ self:saveData()
688
764
  local abilities = self.abilities
689
765
  for ____, ability in ipairs(abilities) do
690
766
  ability:destroy()
@@ -720,7 +796,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
720
796
  self._attackHandlers = handlers
721
797
  if #handlers == 1 then
722
798
  local handle = self.handle
723
- 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
+ )
724
804
  end
725
805
  return handler
726
806
  end
@@ -749,17 +829,17 @@ function Unit.prototype.addModifier(self, property, modifier)
749
829
  end}
750
830
  end
751
831
  function Unit.prototype.hasCombatClassification(self, combatClassification)
752
- local ____combatClassification_0 = combatClassification
753
- return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_0 == ____combatClassification_0
832
+ local ____combatClassification_2 = combatClassification
833
+ return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
754
834
  end
755
835
  function Unit.prototype.addClassification(self, classification)
756
- return unitAddType(self.handle, classification)
836
+ return UnitAddType(self.handle, classification)
757
837
  end
758
838
  function Unit.prototype.removeClassification(self, classification)
759
- return unitRemoveType(self.handle, classification)
839
+ return UnitRemoveType(self.handle, classification)
760
840
  end
761
841
  function Unit.prototype.hasClassification(self, classification)
762
- return isUnitType(self.handle, classification)
842
+ return IsUnitType(self.handle, classification)
763
843
  end
764
844
  function Unit.prototype.isVisibleTo(self, player)
765
845
  return isUnitVisible(self.handle, player.handle)
@@ -768,13 +848,13 @@ function Unit.prototype.isInvisibleTo(self, player)
768
848
  return isUnitInvisible(self.handle, player.handle)
769
849
  end
770
850
  function Unit.prototype.isInRangeOf(self, x, y, range)
771
- local ____temp_1
851
+ local ____temp_3
772
852
  if type(x) == "number" then
773
- ____temp_1 = isUnitInRangeXY(self.handle, x, y, range)
853
+ ____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
774
854
  else
775
- ____temp_1 = isUnitInRange(self.handle, x.handle, y)
855
+ ____temp_3 = isUnitInRange(self.handle, x.handle, y)
776
856
  end
777
- return ____temp_1
857
+ return ____temp_3
778
858
  end
779
859
  function Unit.prototype.isAllyOf(self, unit)
780
860
  return isUnitAlly(
@@ -792,16 +872,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
792
872
  if type(animation) == "number" then
793
873
  setUnitAnimationByIndex(self.handle, animation)
794
874
  elseif rarity then
795
- setUnitAnimationWithRarity(self.handle, animation, rarity)
875
+ SetUnitAnimationWithRarity(self.handle, animation, rarity)
796
876
  else
797
877
  setUnitAnimation(self.handle, animation)
798
878
  end
799
879
  end
880
+ function Unit.prototype.resetAnimation(self)
881
+ ResetUnitAnimation(self.handle)
882
+ end
800
883
  function Unit.prototype.queueAnimation(self, animation)
801
- 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
802
896
  end
803
897
  function Unit.prototype.delayHealthChecks(self)
804
- self[102] = (self[102] or 0) + 1
898
+ self[104] = (self[104] or 0) + 1
805
899
  Timer:run(delayHealthChecksCallback, self)
806
900
  end
807
901
  function Unit.prototype.setPosition(self, x, y)
@@ -811,21 +905,21 @@ function Unit.prototype.isSelected(self, player)
811
905
  return IsUnitSelected(self.handle, player.handle)
812
906
  end
813
907
  function Unit.prototype.explode(self)
814
- setUnitExploded(self.handle, true)
908
+ SetUnitExploded(self.handle, true)
815
909
  killUnit(self.handle)
816
910
  end
817
911
  function Unit.prototype.kill(self)
818
912
  killUnit(self.handle)
819
913
  end
820
914
  function Unit.prototype.revive(self, x, y, doEffect)
821
- local ____ReviveHero_4 = ReviveHero
822
- local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
823
- local ____doEffect_2 = doEffect
824
- if ____doEffect_2 == nil then
825
- ____doEffect_2 = 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
826
920
  end
827
- __TS__SparseArrayPush(____array_3, ____doEffect_2)
828
- ____ReviveHero_4(__TS__SparseArraySpread(____array_3))
921
+ __TS__SparseArrayPush(____array_5, ____doEffect_4)
922
+ ____ReviveHero_6(__TS__SparseArraySpread(____array_5))
829
923
  end
830
924
  function Unit.prototype.healTarget(self, target, amount)
831
925
  if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
@@ -865,20 +959,19 @@ function Unit.prototype.dropItemSlot(self, item, slot)
865
959
  return UnitDropItemSlot(self.handle, item.handle, slot)
866
960
  end
867
961
  function Unit.prototype.itemInSlot(self, slot)
868
- return Item:of(UnitItemInSlot(self.handle, slot))
962
+ return Item:of(unitItemInSlot(self.handle, slot))
869
963
  end
870
964
  function Unit.prototype.addAbility(self, abilityId)
871
- if unitAddAbility(self.handle, abilityId) then
872
- local ability = UnitAbility:of(
873
- checkNotNull(getUnitAbility(self.handle, abilityId)),
874
- abilityId,
875
- self
876
- )
965
+ local ability = UnitAbility:of(
966
+ doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
967
+ abilityId,
968
+ self
969
+ )
970
+ if ability ~= nil then
877
971
  local abilities = self.abilities
878
972
  abilities[#abilities + 1] = ability
879
- return ability
880
973
  end
881
- return nil
974
+ return ability
882
975
  end
883
976
  function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
884
977
  return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
@@ -892,31 +985,21 @@ end
892
985
  function Unit.prototype.hasAbility(self, abilityId)
893
986
  return getUnitAbilityLevel(self.handle, abilityId) > 0
894
987
  end
895
- function Unit.prototype.getAbilityById(self, abilityId)
896
- local handle = self.handle
897
- if unitAddAbility(handle, abilityId) then
898
- assert(unitRemoveAbility(handle, abilityId))
899
- return nil
900
- end
901
- return UnitAbility:of(
902
- getUnitAbility(self.handle, abilityId),
903
- abilityId,
904
- self
905
- )
988
+ function Unit.prototype.getAbility(self, abilityId)
989
+ local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
990
+ return UnitAbility:of(ability, abilityId, self)
906
991
  end
907
- function Unit.prototype.removeAbility(self, abilityId)
908
- if unitRemoveAbility(self.handle, abilityId) then
909
- local abilities = self.abilities
910
- for i = 1, #abilities do
911
- if abilities[i].typeId == abilityId then
912
- abilities[i]:destroy()
913
- tremove(abilities, i)
914
- return true
915
- 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
916
1000
  end
917
- return true
918
1001
  end
919
- return false
1002
+ return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
920
1003
  end
921
1004
  function Unit.prototype.hideAbility(self, abilityId, flag)
922
1005
  BlzUnitHideAbility(self.handle, abilityId, flag)
@@ -930,12 +1013,16 @@ end
930
1013
  function Unit.prototype.endAbilityCooldown(self, abilityId)
931
1014
  BlzEndUnitAbilityCooldown(self.handle, abilityId)
932
1015
  end
933
- function Unit.prototype.interruptAttack(self)
934
- unitInterruptAttack(self.handle)
935
- end
936
1016
  function Unit.prototype.interruptCast(self, abilityId)
937
- unitDisableAbility(self.handle, abilityId, true, false)
938
- 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
+ )
939
1026
  end
940
1027
  function Unit.prototype.getDistanceTo(self, target)
941
1028
  local handle = self.handle
@@ -995,18 +1082,44 @@ function Unit.prototype.unpauseEx(self)
995
1082
  self:decrementStunCounter()
996
1083
  end
997
1084
  function Unit.prototype.incrementStunCounter(self)
998
- local stunCounter = self[101] or 0
999
- if not self[100] or stunCounter >= 0 then
1085
+ local stunCounter = self[102] or 0
1086
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
1000
1087
  BlzPauseUnitEx(self.handle, true)
1001
1088
  end
1002
- self[101] = stunCounter + 1
1089
+ self[102] = stunCounter + 1
1003
1090
  end
1004
1091
  function Unit.prototype.decrementStunCounter(self)
1005
- local stunCounter = self[101] or 0
1006
- if not self[100] or stunCounter >= 1 then
1092
+ local stunCounter = self[102] or 0
1093
+ if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
1007
1094
  BlzPauseUnitEx(self.handle, false)
1008
1095
  end
1009
- self[101] = stunCounter - 1
1096
+ self[102] = stunCounter - 1
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
1010
1123
  end
1011
1124
  function Unit.create(self, owner, id, x, y, facing, skinId)
1012
1125
  local handle = skinId and BlzCreateUnitWithSkin(
@@ -1108,8 +1221,11 @@ function Unit.getInSector(self, pos, range, offsetAngle, centralAngle)
1108
1221
  )
1109
1222
  return targetCollection
1110
1223
  end
1111
- function Unit.getSelectionOf(self, player)
1112
- targetCollection = {}
1224
+ function Unit.getSelectionOf(self, player, target)
1225
+ if target == nil then
1226
+ target = {}
1227
+ end
1228
+ targetCollection = target
1113
1229
  targetCollectionNextIndex = 1
1114
1230
  GroupEnumUnitsSelected(dummyGroup, player.handle, collectIntoTarget)
1115
1231
  return targetCollection
@@ -1131,6 +1247,9 @@ end
1131
1247
  function Unit.prototype.__tostring(self)
1132
1248
  return (((self.constructor.name .. "$") .. util.id2s(self.typeId)) .. "@") .. tostring(getHandleId(self.handle))
1133
1249
  end
1250
+ function Unit.getBySyncId(self, syncId)
1251
+ return unitBySyncId[syncId]
1252
+ end
1134
1253
  __TS__SetDescriptor(
1135
1254
  Unit.prototype,
1136
1255
  "_deltas",
@@ -1190,7 +1309,15 @@ __TS__SetDescriptor(
1190
1309
  Unit.prototype,
1191
1310
  "isIllusion",
1192
1311
  {get = function(self)
1193
- 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")
1194
1321
  end},
1195
1322
  true
1196
1323
  )
@@ -1269,13 +1396,13 @@ __TS__SetDescriptor(
1269
1396
  )
1270
1397
  __TS__SetDescriptor(
1271
1398
  Unit.prototype,
1272
- "strengthBase",
1399
+ "primaryAttribute",
1273
1400
  {
1274
1401
  get = function(self)
1275
- return getHeroStr(self.handle, false)
1402
+ return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
1276
1403
  end,
1277
- set = function(self, strengthBase)
1278
- setHeroStr(self.handle, strengthBase, true)
1404
+ set = function(self, primaryAttribute)
1405
+ setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
1279
1406
  end
1280
1407
  },
1281
1408
  true
@@ -1297,19 +1424,6 @@ __TS__SetDescriptor(
1297
1424
  end},
1298
1425
  true
1299
1426
  )
1300
- __TS__SetDescriptor(
1301
- Unit.prototype,
1302
- "agilityBase",
1303
- {
1304
- get = function(self)
1305
- return getHeroAgi(self.handle, false)
1306
- end,
1307
- set = function(self, agilityBase)
1308
- setHeroAgi(self.handle, agilityBase, true)
1309
- end
1310
- },
1311
- true
1312
- )
1313
1427
  __TS__SetDescriptor(
1314
1428
  Unit.prototype,
1315
1429
  "agilityBonus",
@@ -1327,19 +1441,6 @@ __TS__SetDescriptor(
1327
1441
  end},
1328
1442
  true
1329
1443
  )
1330
- __TS__SetDescriptor(
1331
- Unit.prototype,
1332
- "intelligenceBase",
1333
- {
1334
- get = function(self)
1335
- return getHeroInt(self.handle, false)
1336
- end,
1337
- set = function(self, intelligenceBase)
1338
- setHeroInt(self.handle, intelligenceBase, true)
1339
- end
1340
- },
1341
- true
1342
- )
1343
1444
  __TS__SetDescriptor(
1344
1445
  Unit.prototype,
1345
1446
  "intelligenceBonus",
@@ -1388,17 +1489,17 @@ __TS__SetDescriptor(
1388
1489
  "isTeamGlowVisible",
1389
1490
  {
1390
1491
  get = function(self)
1391
- return not self[105]
1492
+ return not self[107]
1392
1493
  end,
1393
1494
  set = function(self, isTeamGlowVisible)
1394
- showUnitTeamGlow(self.handle, isTeamGlowVisible)
1395
- local ____temp_5
1495
+ BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
1496
+ local ____temp_7
1396
1497
  if not isTeamGlowVisible then
1397
- ____temp_5 = true
1498
+ ____temp_7 = true
1398
1499
  else
1399
- ____temp_5 = nil
1500
+ ____temp_7 = nil
1400
1501
  end
1401
- self[105] = ____temp_5
1502
+ self[107] = ____temp_7
1402
1503
  end
1403
1504
  },
1404
1505
  true
@@ -1407,9 +1508,9 @@ __TS__SetDescriptor(
1407
1508
  Unit.prototype,
1408
1509
  "color",
1409
1510
  {set = function(self, color)
1410
- setUnitColor(self.handle, color.handle)
1411
- if self[105] then
1412
- showUnitTeamGlow(self.handle, false)
1511
+ SetUnitColor(self.handle, color.handle)
1512
+ if self[107] then
1513
+ BlzShowUnitTeamGlow(self.handle, false)
1413
1514
  end
1414
1515
  end},
1415
1516
  true
@@ -1432,14 +1533,14 @@ __TS__SetDescriptor(
1432
1533
  "maxHealth",
1433
1534
  {
1434
1535
  get = function(self)
1435
- return BlzGetUnitMaxHP(self.handle) - (self[103] or 0) - (self[104] or 0)
1536
+ return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
1436
1537
  end,
1437
1538
  set = function(self, maxHealth)
1438
- if maxHealth < 1 and self[102] ~= nil then
1439
- self[103] = (self[103] or 0) + (1 - maxHealth)
1539
+ if maxHealth < 1 and self[104] ~= nil then
1540
+ self[105] = (self[105] or 0) + (1 - maxHealth)
1440
1541
  maxHealth = 1
1441
1542
  end
1442
- BlzSetUnitMaxHP(self.handle, maxHealth + (self[104] or 0))
1543
+ BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
1443
1544
  end
1444
1545
  },
1445
1546
  true
@@ -1481,10 +1582,10 @@ __TS__SetDescriptor(
1481
1582
  "health",
1482
1583
  {
1483
1584
  get = function(self)
1484
- return GetWidgetLife(self.handle) - (self[104] or 0)
1585
+ return GetWidgetLife(self.handle) - (self[106] or 0)
1485
1586
  end,
1486
1587
  set = function(self, health)
1487
- SetWidgetLife(self.handle, health + (self[104] or 0))
1588
+ SetWidgetLife(self.handle, health + (self[106] or 0))
1488
1589
  end
1489
1590
  },
1490
1591
  true
@@ -1560,25 +1661,12 @@ __TS__SetDescriptor(
1560
1661
  },
1561
1662
  true
1562
1663
  )
1563
- __TS__SetDescriptor(
1564
- Unit.prototype,
1565
- "flyHeight",
1566
- {
1567
- get = function(self)
1568
- return getUnitFlyHeight(self.handle)
1569
- end,
1570
- set = function(self, v)
1571
- SetUnitFlyHeight(self.handle, v, 100000)
1572
- end
1573
- },
1574
- true
1575
- )
1576
1664
  __TS__SetDescriptor(
1577
1665
  Unit.prototype,
1578
1666
  "x",
1579
1667
  {
1580
1668
  get = function(self)
1581
- return getUnitX(self.handle)
1669
+ return self[108] or getUnitX(self.handle)
1582
1670
  end,
1583
1671
  set = function(self, v)
1584
1672
  SetUnitX(self.handle, v)
@@ -1591,7 +1679,7 @@ __TS__SetDescriptor(
1591
1679
  "y",
1592
1680
  {
1593
1681
  get = function(self)
1594
- return getUnitY(self.handle)
1682
+ return self[109] or getUnitY(self.handle)
1595
1683
  end,
1596
1684
  set = function(self, v)
1597
1685
  SetUnitY(self.handle, v)
@@ -1677,10 +1765,10 @@ __TS__SetDescriptor(
1677
1765
  "gold",
1678
1766
  {
1679
1767
  get = function(self)
1680
- return getResourceAmount(self.handle)
1768
+ return GetResourceAmount(self.handle)
1681
1769
  end,
1682
1770
  set = function(self, gold)
1683
- setResourceAmount(self.handle, gold)
1771
+ SetResourceAmount(self.handle, gold)
1684
1772
  end
1685
1773
  },
1686
1774
  true
@@ -1695,17 +1783,21 @@ __TS__SetDescriptor(
1695
1783
  set = function(self, isPaused)
1696
1784
  local handle = self.handle
1697
1785
  if isPaused and not IsUnitPaused(handle) then
1698
- self[100] = true
1699
- for _ = self[101] or 0, -1 do
1700
- BlzPauseUnitEx(handle, true)
1786
+ self[101] = true
1787
+ if (self[103] or 0) <= 0 then
1788
+ for _ = self[102] or 0, -1 do
1789
+ BlzPauseUnitEx(handle, true)
1790
+ end
1701
1791
  end
1702
1792
  PauseUnit(handle, true)
1703
1793
  elseif not isPaused and IsUnitPaused(handle) then
1704
1794
  PauseUnit(handle, false)
1705
- for _ = self[101] or 0, -1 do
1706
- 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
1707
1799
  end
1708
- self[100] = nil
1800
+ self[101] = nil
1709
1801
  end
1710
1802
  end
1711
1803
  },
@@ -1761,20 +1853,6 @@ __TS__SetDescriptor(
1761
1853
  },
1762
1854
  true
1763
1855
  )
1764
- __TS__SetDescriptor(
1765
- Unit.prototype,
1766
- "scale",
1767
- {
1768
- get = function(self)
1769
- return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
1770
- end,
1771
- set = function(self, v)
1772
- setUnitScale(self.handle, v, v, v)
1773
- setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
1774
- end
1775
- },
1776
- true
1777
- )
1778
1856
  __TS__SetDescriptor(
1779
1857
  Unit.prototype,
1780
1858
  "timeScale",
@@ -1808,6 +1886,19 @@ __TS__SetDescriptor(
1808
1886
  end},
1809
1887
  true
1810
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
+ )
1811
1902
  __TS__SetDescriptor(
1812
1903
  Unit.prototype,
1813
1904
  "pathing",
@@ -1898,30 +1989,6 @@ __TS__SetDescriptor(
1898
1989
  end},
1899
1990
  true
1900
1991
  )
1901
- __TS__SetDescriptor(
1902
- Unit.prototype,
1903
- "onUnitInRange",
1904
- {get = function(self)
1905
- local handle = self.handle
1906
- local onUnitInRange = setmetatable(
1907
- {},
1908
- {__index = function(self, value)
1909
- local event = __TS__New(
1910
- TriggerEvent,
1911
- function(trigger)
1912
- TriggerRegisterUnitInRangeSimple(trigger, value, handle)
1913
- end,
1914
- function() return ____exports.Unit:of(handle) end
1915
- )
1916
- rawset(self, value, event)
1917
- return event
1918
- end}
1919
- )
1920
- rawset(self, "onUnitInRange", onUnitInRange)
1921
- return onUnitInRange
1922
- end},
1923
- true
1924
- )
1925
1992
  __TS__SetDescriptor(
1926
1993
  Unit.prototype,
1927
1994
  "onManaEqual",
@@ -1989,6 +2056,14 @@ __TS__SetDescriptor(
1989
2056
  end},
1990
2057
  true
1991
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
+ )
1992
2067
  __TS__SetDescriptor(
1993
2068
  Unit.prototype,
1994
2069
  "onSelect",
@@ -2049,6 +2124,11 @@ __TS__SetDescriptor(
2049
2124
  end},
2050
2125
  true
2051
2126
  )
2127
+ Unit.levelChangedEvent = __TS__New(
2128
+ ____exports.UnitTriggerEvent,
2129
+ EVENT_PLAYER_HERO_LEVEL,
2130
+ function() return ____exports.Unit:of(getTriggerUnit()) end
2131
+ )
2052
2132
  Unit.deathEvent = __TS__New(
2053
2133
  ____exports.UnitTriggerEvent,
2054
2134
  EVENT_PLAYER_UNIT_DEATH,
@@ -2124,25 +2204,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
2124
2204
  InitializingEvent,
2125
2205
  function(event)
2126
2206
  local function listener(unit, id)
2127
- local ____GetSpellTargetUnit_result_8
2207
+ local ____GetSpellTargetUnit_result_10
2128
2208
  if GetSpellTargetUnit() then
2129
- ____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
2209
+ ____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
2130
2210
  else
2131
- local ____GetSpellTargetItem_result_7
2211
+ local ____GetSpellTargetItem_result_9
2132
2212
  if GetSpellTargetItem() then
2133
- ____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
2213
+ ____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
2134
2214
  else
2135
- local ____GetSpellTargetDestructable_result_6
2215
+ local ____GetSpellTargetDestructable_result_8
2136
2216
  if GetSpellTargetDestructable() then
2137
- ____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
2217
+ ____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
2138
2218
  else
2139
- ____GetSpellTargetDestructable_result_6 = nil
2219
+ ____GetSpellTargetDestructable_result_8 = nil
2140
2220
  end
2141
- ____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
2221
+ ____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
2142
2222
  end
2143
- ____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
2223
+ ____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
2144
2224
  end
2145
- local target = ____GetSpellTargetUnit_result_8
2225
+ local target = ____GetSpellTargetUnit_result_10
2146
2226
  if target then
2147
2227
  invoke(event, unit, id, target)
2148
2228
  end
@@ -2314,10 +2394,12 @@ Unit.onImmediateOrder = dispatchId(__TS__New(
2314
2394
  ____exports.UnitTriggerEvent,
2315
2395
  EVENT_PLAYER_UNIT_ISSUED_ORDER,
2316
2396
  function()
2317
- local unit = ____exports.Unit:of(getOrderedUnit())
2318
- local issuedOrderId = getIssuedOrderId()
2319
- if unit ~= nil and unit.state == 1 then
2320
- 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
2321
2403
  end
2322
2404
  return IgnoreEvent
2323
2405
  end
@@ -2348,38 +2430,57 @@ Unit.onDamaging = (function()
2348
2430
  if source and source.typeId == dummyUnitId then
2349
2431
  source = nil
2350
2432
  end
2351
- local target = BlzGetEventDamageTarget()
2433
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2434
+ local metadata = damageMetadataByTarget[target]
2435
+ damageMetadataByTarget[target] = nil
2352
2436
  local data = {
2353
2437
  amount = GetEventDamage(),
2354
- attackType = BlzGetEventAttackType(),
2438
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2355
2439
  damageType = BlzGetEventDamageType(),
2356
2440
  weaponType = BlzGetEventWeaponType(),
2357
- isAttack = BlzGetEventIsAttack()
2441
+ metadata = metadata,
2442
+ isAttack = BlzGetEventIsAttack(),
2443
+ originalAmount = GetEventDamage(),
2444
+ originalMetadata = metadata,
2445
+ preventRetaliation = damagingEventPreventRetaliation
2358
2446
  }
2359
2447
  if data.isAttack and source then
2360
- 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
2361
- if weapon == -1 then
2362
- local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
2363
- weapon = 0
2364
- end
2365
- data.weapon = assert(source.weapons[weapon + 1])
2448
+ data.weapon = source:chooseWeapon(target)
2366
2449
  end
2367
2450
  if not data.isAttack or not source or not source._attackHandlers then
2368
2451
  invoke(
2369
2452
  event,
2370
2453
  source,
2371
- ____exports.Unit:of(target),
2454
+ target,
2372
2455
  setmetatable(
2373
2456
  {},
2374
2457
  {
2375
2458
  __index = data,
2376
2459
  __newindex = function(self, key, value)
2377
- damageSetters[key](value)
2460
+ local damageSetter = damageSetters[key]
2461
+ if damageSetter ~= nil then
2462
+ damageSetter(value)
2463
+ end
2378
2464
  data[key] = value
2379
2465
  end
2380
2466
  }
2381
2467
  )
2382
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
2383
2484
  return
2384
2485
  end
2385
2486
  BlzSetEventDamage(0)
@@ -2387,7 +2488,7 @@ Unit.onDamaging = (function()
2387
2488
  BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
2388
2489
  BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
2389
2490
  local sourceOwner = source.owner.handle
2390
- local targetOwner = GetOwningPlayer(target)
2491
+ local targetOwner = target.owner.handle
2391
2492
  if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
2392
2493
  SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
2393
2494
  Timer:run(function()
@@ -2403,23 +2504,19 @@ Unit.onDamaging = (function()
2403
2504
  for ____, ____value in ipairs(source._attackHandlers) do
2404
2505
  local condition = ____value[1]
2405
2506
  local action = ____value[2]
2406
- if condition(
2407
- source,
2408
- ____exports.Unit:of(target),
2409
- data
2410
- ) then
2507
+ if condition(source, target, data) then
2411
2508
  action(
2412
2509
  source,
2413
- ____exports.Unit:of(target),
2510
+ target,
2414
2511
  setmetatable(
2415
2512
  {fire = function()
2416
2513
  UnitDamageTarget(
2417
2514
  source.handle,
2418
- target,
2515
+ target.handle,
2419
2516
  data.amount,
2420
2517
  true,
2421
2518
  true,
2422
- data.attackType,
2519
+ attackTypeToNative(data.attackType),
2423
2520
  data.damageType,
2424
2521
  data.weaponType
2425
2522
  )
@@ -2446,29 +2543,54 @@ Unit.onDamage = __TS__New(
2446
2543
  if source and source.typeId == dummyUnitId then
2447
2544
  source = nil
2448
2545
  end
2546
+ local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2547
+ local damagingEvent = damagingEventByTarget[target]
2548
+ damagingEventByTarget[target] = nil
2449
2549
  local data = {
2450
2550
  amount = GetEventDamage(),
2451
- attackType = BlzGetEventAttackType(),
2551
+ attackType = nativeToAttackType(BlzGetEventAttackType()),
2452
2552
  damageType = BlzGetEventDamageType(),
2453
2553
  weaponType = BlzGetEventWeaponType(),
2554
+ metadata = damagingEvent and damagingEvent.metadata,
2454
2555
  isAttack = BlzGetEventIsAttack(),
2556
+ originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
2557
+ originalMetadata = damagingEvent and damagingEvent.originalMetadata,
2455
2558
  preventDeath = damageEventPreventDeath
2456
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
2457
2577
  local evData = setmetatable(
2458
2578
  {},
2459
2579
  {
2460
2580
  __index = data,
2461
2581
  __newindex = function(self, key, value)
2462
- damageSetters[key](value)
2582
+ local damageSetter = damageSetters[key]
2583
+ if damageSetter ~= nil then
2584
+ damageSetter(value)
2585
+ end
2463
2586
  data[key] = value
2464
2587
  end
2465
2588
  }
2466
2589
  )
2467
- local target = ____exports.Unit:of(BlzGetEventDamageTarget())
2468
2590
  invoke(event, source, target, evData)
2469
2591
  if evData[0] ~= nil and target.health - evData.amount < 0.405 then
2470
2592
  local bonusHealth = math.ceil(evData.amount)
2471
- target[104] = (target[104] or 0) + bonusHealth
2593
+ target[106] = (target[106] or 0) + bonusHealth
2472
2594
  BlzSetUnitMaxHP(
2473
2595
  target.handle,
2474
2596
  BlzGetUnitMaxHP(target.handle) + bonusHealth
@@ -2482,7 +2604,7 @@ Unit.onDamage = __TS__New(
2482
2604
  evData[0],
2483
2605
  table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
2484
2606
  )
2485
- target[104] = (target[104] or 0) - bonusHealth
2607
+ target[106] = (target[106] or 0) - bonusHealth
2486
2608
  SetWidgetLife(
2487
2609
  target.handle,
2488
2610
  GetWidgetLife(target.handle) - bonusHealth
@@ -2502,32 +2624,110 @@ Unit.onDamage = __TS__New(
2502
2624
  DestroyTrigger(trigger)
2503
2625
  end
2504
2626
  )
2505
- Unit.onItemDrop = __TS__New(
2627
+ Unit.itemDroppedEvent = __TS__New(
2506
2628
  ____exports.UnitTriggerEvent,
2507
2629
  EVENT_PLAYER_UNIT_DROP_ITEM,
2508
2630
  function()
2509
2631
  local unit = getTriggerUnit()
2510
- if getUnitTypeId(unit) ~= dummyUnitId then
2511
- 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)
2512
2635
  end
2513
2636
  return IgnoreEvent
2514
2637
  end
2515
2638
  )
2516
- Unit.onItemPickup = __TS__New(
2639
+ Unit.itemPickedUpEvent = __TS__New(
2517
2640
  ____exports.UnitTriggerEvent,
2518
2641
  EVENT_PLAYER_UNIT_PICKUP_ITEM,
2519
2642
  function()
2520
- local unit = getTriggerUnit()
2521
- if getUnitTypeId(unit) ~= dummyUnitId then
2522
- 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
2523
2651
  end
2524
2652
  return IgnoreEvent
2525
2653
  end
2526
2654
  )
2527
- Unit.onItemUse = __TS__New(
2655
+ Unit.itemUsedEvent = __TS__New(
2528
2656
  ____exports.UnitTriggerEvent,
2529
2657
  EVENT_PLAYER_UNIT_USE_ITEM,
2530
- 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
2666
+ )
2667
+ Unit.itemStackedEvent = __TS__New(
2668
+ ____exports.UnitTriggerEvent,
2669
+ EVENT_PLAYER_UNIT_STACK_ITEM,
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}
2531
2731
  )
2532
2732
  __TS__ObjectDefineProperty(
2533
2733
  Unit,
@@ -2554,6 +2754,10 @@ __TS__ObjectDefineProperty(
2554
2754
  rawset(self, "destroyEvent", destroyEvent)
2555
2755
  return destroyEvent
2556
2756
  end}
2757
+ )
2758
+ Unit.synchronize = synchronizer(
2759
+ function(unit) return unit.syncId end,
2760
+ function(syncId) return unitBySyncId[syncId] end
2557
2761
  );
2558
2762
  (function(self)
2559
2763
  local leaveAbilityIds = postcompile(function()
@@ -2583,7 +2787,8 @@ __TS__ObjectDefineProperty(
2583
2787
  return
2584
2788
  end
2585
2789
  end
2586
- unit:destroy()
2790
+ unit:saveData()
2791
+ Timer:run(unit, "destroy")
2587
2792
  end)
2588
2793
  end
2589
2794
  end)(Unit)