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.
- package/attributes.d.ts +6 -0
- package/attributes.lua +17 -1
- package/config.d.ts +5 -0
- package/config.lua +10 -0
- package/core/types/effect.d.ts +14 -6
- package/core/types/effect.lua +131 -35
- package/core/types/frame.d.ts +6 -0
- package/core/types/frame.lua +113 -22
- package/core/types/player.d.ts +16 -0
- package/core/types/player.lua +60 -15
- package/core/types/playerCamera.d.ts +2 -0
- package/core/types/playerCamera.lua +123 -5
- package/core/types/sound.d.ts +17 -24
- package/core/types/sound.lua +99 -24
- package/core/types/tileCell.d.ts +11 -1
- package/core/types/tileCell.lua +97 -0
- package/core/types/timer.d.ts +9 -8
- package/core/types/timer.lua +45 -23
- package/core/util.d.ts +1 -1
- package/core/util.lua +18 -1
- package/decl/native.d.ts +846 -790
- package/destroyable.d.ts +1 -0
- package/destroyable.lua +9 -0
- package/engine/behavior.d.ts +16 -3
- package/engine/behavior.lua +233 -73
- package/engine/behaviour/ability/always-enabled.d.ts +7 -0
- package/engine/behaviour/ability/always-enabled.lua +31 -0
- package/engine/behaviour/ability/apply-buff.d.ts +8 -5
- package/engine/behaviour/ability/apply-buff.lua +36 -4
- package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
- package/engine/behaviour/ability/damage.d.ts +9 -3
- package/engine/behaviour/ability/damage.lua +26 -38
- package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
- package/engine/behaviour/ability/emulate-impact.lua +43 -0
- package/engine/behaviour/ability/instant-impact.d.ts +2 -2
- package/engine/behaviour/ability/instant-impact.lua +4 -19
- package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
- package/engine/behaviour/ability/on-command-impact.lua +25 -0
- package/engine/behaviour/ability/remove-buffs.d.ts +25 -0
- package/engine/behaviour/ability/remove-buffs.lua +49 -0
- package/engine/behaviour/ability/restore-mana.d.ts +1 -1
- package/engine/behaviour/ability/restore-mana.lua +6 -6
- package/engine/behaviour/ability.d.ts +28 -7
- package/engine/behaviour/ability.lua +137 -43
- package/engine/behaviour/unit/stun-immunity.d.ts +12 -6
- package/engine/behaviour/unit/stun-immunity.lua +57 -31
- package/engine/behaviour/unit.d.ts +45 -2
- package/engine/behaviour/unit.lua +289 -6
- package/engine/buff.d.ts +128 -52
- package/engine/buff.lua +595 -270
- package/engine/internal/ability.d.ts +23 -14
- package/engine/internal/ability.lua +129 -85
- package/engine/internal/item/ability.lua +162 -4
- package/engine/internal/item+owner.lua +12 -6
- package/engine/internal/item.d.ts +20 -19
- package/engine/internal/item.lua +191 -74
- package/engine/internal/mechanics/ability-duration.lua +1 -1
- package/engine/internal/mechanics/cast-ability.lua +6 -3
- package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
- package/engine/internal/misc/ability-disable-counter.lua +13 -0
- package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
- package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
- package/engine/internal/misc/frame-coordinates.d.ts +2 -0
- package/engine/internal/misc/frame-coordinates.lua +21 -0
- package/engine/internal/misc/get-terrain-z.d.ts +2 -0
- package/engine/internal/misc/get-terrain-z.lua +11 -0
- package/engine/internal/misc/player-local-handle.d.ts +2 -0
- package/engine/internal/misc/player-local-handle.lua +5 -0
- package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
- package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
- package/engine/internal/object-data/evasion-probability.d.ts +2 -0
- package/engine/internal/object-data/evasion-probability.lua +16 -0
- package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
- package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
- package/engine/internal/unit/ability.d.ts +45 -1
- package/engine/internal/unit/ability.lua +128 -17
- package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
- package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
- package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
- package/engine/internal/unit/add-item-to-slot.lua +52 -0
- package/engine/internal/unit/allowed-targets.d.ts +1 -1
- package/engine/internal/unit/allowed-targets.lua +9 -1
- package/engine/internal/unit/attributes.d.ts +17 -0
- package/engine/internal/unit/attributes.lua +46 -0
- package/engine/internal/unit/bonus.d.ts +8 -2
- package/engine/internal/unit/bonus.lua +33 -1
- package/engine/internal/unit/fly-height.d.ts +7 -0
- package/engine/internal/unit/fly-height.lua +20 -0
- package/engine/internal/unit/ignore-events-items.d.ts +2 -0
- package/engine/internal/unit/ignore-events-items.lua +5 -0
- package/engine/internal/unit/interrupts.d.ts +12 -0
- package/engine/internal/unit/interrupts.lua +28 -0
- package/engine/internal/unit/item.d.ts +24 -0
- package/engine/internal/unit/item.lua +78 -0
- package/engine/internal/unit/main-selected.d.ts +13 -0
- package/engine/internal/unit/main-selected.lua +36 -0
- package/engine/internal/unit/order.d.ts +20 -0
- package/engine/internal/unit/order.lua +136 -0
- package/engine/internal/unit/range-event.d.ts +12 -0
- package/engine/internal/unit/range-event.lua +90 -0
- package/engine/internal/unit/scale.d.ts +7 -0
- package/engine/internal/unit/scale.lua +20 -0
- package/engine/internal/unit+ability.lua +12 -3
- package/engine/internal/unit+damage.d.ts +2 -11
- package/engine/internal/unit+damage.lua +10 -14
- package/engine/internal/unit+spellSteal.lua +1 -2
- package/engine/internal/unit-missile-launch.lua +70 -13
- package/engine/internal/unit.d.ts +64 -30
- package/engine/internal/unit.lua +490 -285
- package/engine/internal/utility.lua +12 -0
- package/engine/lightning.d.ts +12 -5
- package/engine/lightning.lua +48 -14
- package/engine/local-client.d.ts +9 -2
- package/engine/local-client.lua +112 -0
- package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
- package/engine/object-data/auxiliary/animation-name.lua +16 -0
- package/engine/object-data/auxiliary/armor-type.d.ts +11 -0
- package/engine/object-data/auxiliary/armor-type.lua +46 -0
- package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
- package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
- package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
- package/engine/object-data/auxiliary/attack-type.lua +42 -0
- package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
- package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
- package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
- package/engine/object-data/auxiliary/movement-type.lua +22 -0
- package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
- package/engine/object-data/auxiliary/sound-eax.lua +2 -0
- package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
- package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
- package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
- package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
- package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
- package/engine/object-data/entry/ability-type/berserk.lua +13 -0
- package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
- package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
- package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
- package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
- package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
- package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
- package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
- package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
- package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
- package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
- package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
- package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
- package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
- package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
- package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
- package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
- package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
- package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
- package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
- package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
- package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
- package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
- package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
- package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
- package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
- package/engine/object-data/entry/ability-type/web.d.ts +12 -0
- package/engine/object-data/entry/ability-type/web.lua +52 -0
- package/engine/object-data/entry/ability-type.d.ts +21 -17
- package/engine/object-data/entry/ability-type.lua +177 -40
- package/engine/object-data/entry/buff-type/applicable.lua +18 -37
- package/engine/object-data/entry/buff-type.d.ts +6 -12
- package/engine/object-data/entry/buff-type.lua +13 -29
- package/engine/object-data/entry/destructible-type.d.ts +28 -2
- package/engine/object-data/entry/destructible-type.lua +155 -0
- package/engine/object-data/entry/item-type.d.ts +15 -1
- package/engine/object-data/entry/item-type.lua +93 -2
- package/engine/object-data/entry/lightning-type.d.ts +1 -1
- package/engine/object-data/entry/sound-preset.d.ts +33 -0
- package/engine/object-data/entry/sound-preset.lua +140 -0
- package/engine/object-data/entry/unit-type.d.ts +25 -5
- package/engine/object-data/entry/unit-type.lua +258 -93
- package/engine/object-data/entry/upgrade.d.ts +1 -1
- package/engine/object-data/entry/upgrade.lua +4 -4
- package/engine/object-data/entry.d.ts +16 -14
- package/engine/object-data/entry.lua +60 -32
- package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
- package/engine/object-field/ability.d.ts +28 -5
- package/engine/object-field/ability.lua +59 -5
- package/engine/object-field/unit.d.ts +72 -3
- package/engine/object-field/unit.lua +268 -7
- package/engine/object-field.d.ts +25 -6
- package/engine/object-field.lua +359 -116
- package/engine/random.d.ts +10 -0
- package/engine/random.lua +21 -0
- package/engine/standard/entries/buff-type.d.ts +3 -0
- package/engine/standard/entries/buff-type.lua +3 -0
- package/engine/standard/entries/sound-preset.d.ts +10 -0
- package/engine/standard/entries/sound-preset.lua +10 -0
- package/engine/standard/fields/ability.d.ts +4 -2
- package/engine/standard/fields/ability.lua +4 -2
- package/engine/standard/fields/unit.d.ts +12 -0
- package/engine/standard/fields/unit.lua +20 -0
- package/engine/synchronization.d.ts +11 -0
- package/engine/synchronization.lua +77 -0
- package/engine/text-tag.d.ts +36 -2
- package/engine/text-tag.lua +250 -10
- package/engine/unit.d.ts +9 -0
- package/engine/unit.lua +9 -0
- package/index.d.ts +1 -0
- package/index.lua +1 -0
- package/net/socket.d.ts +7 -1
- package/net/socket.lua +45 -4
- package/network.d.ts +1 -0
- package/network.lua +3 -2
- package/objutil/buff.lua +12 -11
- package/objutil/unit.lua +8 -0
- package/package.json +2 -2
- package/patch-lua.d.ts +0 -0
- package/patch-lua.lua +25 -0
- package/patch-lualib.lua +1 -1
- package/utility/arrays.d.ts +10 -1
- package/utility/arrays.lua +45 -3
- package/utility/callback-array.d.ts +17 -0
- package/utility/callback-array.lua +61 -0
- package/utility/functions.d.ts +8 -0
- package/utility/functions.lua +13 -0
- package/utility/lazy.d.ts +2 -0
- package/utility/lazy.lua +14 -0
- package/utility/linked-map.d.ts +34 -0
- package/utility/linked-map.lua +101 -0
- package/utility/linked-set.d.ts +15 -3
- package/utility/linked-set.lua +48 -3
- package/utility/lua-maps.d.ts +15 -2
- package/utility/lua-maps.lua +53 -2
- package/utility/lua-sets.d.ts +2 -0
- package/utility/lua-sets.lua +7 -0
- package/utility/records.lua +20 -1
- package/utility/reflection.lua +11 -7
- package/utility/types.d.ts +4 -0
- package/core/types/order.d.ts +0 -25
- package/core/types/order.lua +0 -55
package/engine/internal/unit.lua
CHANGED
|
@@ -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 = {
|
|
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(
|
|
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(
|
|
378
|
-
|
|
379
|
-
ability,
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
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(
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
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[
|
|
675
|
+
local counter = (unit[104] or 0) - 1
|
|
634
676
|
if counter ~= 0 then
|
|
635
|
-
unit[
|
|
677
|
+
unit[104] = counter
|
|
636
678
|
return
|
|
637
679
|
end
|
|
638
|
-
unit[
|
|
639
|
-
local healthBonus = unit[
|
|
680
|
+
unit[104] = nil
|
|
681
|
+
local healthBonus = unit[105]
|
|
640
682
|
if healthBonus ~= nil then
|
|
641
|
-
unit[
|
|
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(
|
|
657
|
-
|
|
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(
|
|
663
|
-
|
|
664
|
-
|
|
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,
|
|
670
|
-
self.events = self.events or (
|
|
671
|
-
local eventId = GetHandleId(
|
|
672
|
-
|
|
673
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
|
753
|
-
return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) &
|
|
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
|
|
836
|
+
return UnitAddType(self.handle, classification)
|
|
757
837
|
end
|
|
758
838
|
function Unit.prototype.removeClassification(self, classification)
|
|
759
|
-
return
|
|
839
|
+
return UnitRemoveType(self.handle, classification)
|
|
760
840
|
end
|
|
761
841
|
function Unit.prototype.hasClassification(self, classification)
|
|
762
|
-
return
|
|
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
|
|
851
|
+
local ____temp_3
|
|
772
852
|
if type(x) == "number" then
|
|
773
|
-
|
|
853
|
+
____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
|
|
774
854
|
else
|
|
775
|
-
|
|
855
|
+
____temp_3 = isUnitInRange(self.handle, x.handle, y)
|
|
776
856
|
end
|
|
777
|
-
return
|
|
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
|
-
|
|
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
|
-
|
|
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[
|
|
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
|
-
|
|
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
|
|
822
|
-
local
|
|
823
|
-
local
|
|
824
|
-
if
|
|
825
|
-
|
|
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(
|
|
828
|
-
|
|
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(
|
|
962
|
+
return Item:of(unitItemInSlot(self.handle, slot))
|
|
869
963
|
end
|
|
870
964
|
function Unit.prototype.addAbility(self, abilityId)
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
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
|
|
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.
|
|
896
|
-
local
|
|
897
|
-
|
|
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,
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
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
|
|
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
|
-
|
|
938
|
-
unitDisableAbility(
|
|
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[
|
|
999
|
-
if not self[
|
|
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[
|
|
1089
|
+
self[102] = stunCounter + 1
|
|
1003
1090
|
end
|
|
1004
1091
|
function Unit.prototype.decrementStunCounter(self)
|
|
1005
|
-
local stunCounter = self[
|
|
1006
|
-
if not self[
|
|
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[
|
|
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
|
-
|
|
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
|
|
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
|
-
"
|
|
1399
|
+
"primaryAttribute",
|
|
1273
1400
|
{
|
|
1274
1401
|
get = function(self)
|
|
1275
|
-
return
|
|
1402
|
+
return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
|
|
1276
1403
|
end,
|
|
1277
|
-
set = function(self,
|
|
1278
|
-
|
|
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[
|
|
1492
|
+
return not self[107]
|
|
1392
1493
|
end,
|
|
1393
1494
|
set = function(self, isTeamGlowVisible)
|
|
1394
|
-
|
|
1395
|
-
local
|
|
1495
|
+
BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
|
|
1496
|
+
local ____temp_7
|
|
1396
1497
|
if not isTeamGlowVisible then
|
|
1397
|
-
|
|
1498
|
+
____temp_7 = true
|
|
1398
1499
|
else
|
|
1399
|
-
|
|
1500
|
+
____temp_7 = nil
|
|
1400
1501
|
end
|
|
1401
|
-
self[
|
|
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
|
-
|
|
1411
|
-
if self[
|
|
1412
|
-
|
|
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[
|
|
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[
|
|
1439
|
-
self[
|
|
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[
|
|
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[
|
|
1585
|
+
return GetWidgetLife(self.handle) - (self[106] or 0)
|
|
1485
1586
|
end,
|
|
1486
1587
|
set = function(self, health)
|
|
1487
|
-
SetWidgetLife(self.handle, health + (self[
|
|
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
|
|
1768
|
+
return GetResourceAmount(self.handle)
|
|
1681
1769
|
end,
|
|
1682
1770
|
set = function(self, gold)
|
|
1683
|
-
|
|
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[
|
|
1699
|
-
|
|
1700
|
-
|
|
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
|
-
|
|
1706
|
-
|
|
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[
|
|
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
|
|
2207
|
+
local ____GetSpellTargetUnit_result_10
|
|
2128
2208
|
if GetSpellTargetUnit() then
|
|
2129
|
-
|
|
2209
|
+
____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
|
|
2130
2210
|
else
|
|
2131
|
-
local
|
|
2211
|
+
local ____GetSpellTargetItem_result_9
|
|
2132
2212
|
if GetSpellTargetItem() then
|
|
2133
|
-
|
|
2213
|
+
____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
|
|
2134
2214
|
else
|
|
2135
|
-
local
|
|
2215
|
+
local ____GetSpellTargetDestructable_result_8
|
|
2136
2216
|
if GetSpellTargetDestructable() then
|
|
2137
|
-
|
|
2217
|
+
____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
|
|
2138
2218
|
else
|
|
2139
|
-
|
|
2219
|
+
____GetSpellTargetDestructable_result_8 = nil
|
|
2140
2220
|
end
|
|
2141
|
-
|
|
2221
|
+
____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
|
|
2142
2222
|
end
|
|
2143
|
-
|
|
2223
|
+
____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
|
|
2144
2224
|
end
|
|
2145
|
-
local target =
|
|
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
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2454
|
+
target,
|
|
2372
2455
|
setmetatable(
|
|
2373
2456
|
{},
|
|
2374
2457
|
{
|
|
2375
2458
|
__index = data,
|
|
2376
2459
|
__newindex = function(self, key, value)
|
|
2377
|
-
damageSetters[key]
|
|
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 =
|
|
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
|
-
|
|
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]
|
|
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[
|
|
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[
|
|
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.
|
|
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
|
-
|
|
2511
|
-
|
|
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.
|
|
2639
|
+
Unit.itemPickedUpEvent = __TS__New(
|
|
2517
2640
|
____exports.UnitTriggerEvent,
|
|
2518
2641
|
EVENT_PLAYER_UNIT_PICKUP_ITEM,
|
|
2519
2642
|
function()
|
|
2520
|
-
local
|
|
2521
|
-
|
|
2522
|
-
|
|
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.
|
|
2655
|
+
Unit.itemUsedEvent = __TS__New(
|
|
2528
2656
|
____exports.UnitTriggerEvent,
|
|
2529
2657
|
EVENT_PLAYER_UNIT_USE_ITEM,
|
|
2530
|
-
function()
|
|
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:
|
|
2790
|
+
unit:saveData()
|
|
2791
|
+
Timer:run(unit, "destroy")
|
|
2587
2792
|
end)
|
|
2588
2793
|
end
|
|
2589
2794
|
end)(Unit)
|