warscript 0.0.1-dev.5a50e5d → 0.0.1-dev.5d49132
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/core/types/effect.d.ts +1 -3
- package/core/types/effect.lua +26 -29
- package/core/types/frame.lua +24 -21
- 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 -25
- package/core/types/sound.lua +85 -44
- 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/decl/native.d.ts +846 -790
- package/destroyable.d.ts +1 -0
- package/destroyable.lua +9 -0
- package/engine/behavior.d.ts +14 -1
- package/engine/behavior.lua +230 -70
- package/engine/behaviour/ability/apply-buff.lua +5 -5
- package/engine/behaviour/ability/damage.d.ts +6 -3
- package/engine/behaviour/ability/damage.lua +24 -36
- package/engine/behaviour/ability/emulate-impact.d.ts +1 -1
- package/engine/behaviour/ability/emulate-impact.lua +18 -3
- package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
- package/engine/behaviour/ability/remove-buffs.lua +21 -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 +6 -2
- package/engine/behaviour/ability.lua +16 -22
- 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 +39 -3
- package/engine/behaviour/unit.lua +269 -6
- package/engine/buff.d.ts +21 -8
- package/engine/buff.lua +187 -121
- package/engine/internal/ability.d.ts +7 -1
- package/engine/internal/ability.lua +49 -9
- package/engine/internal/item/ability.lua +63 -11
- package/engine/internal/item+owner.lua +12 -6
- package/engine/internal/item.d.ts +18 -17
- package/engine/internal/item.lua +135 -49
- package/engine/internal/mechanics/ability-duration.lua +1 -1
- package/engine/internal/mechanics/cast-ability.lua +6 -3
- 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/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 +35 -0
- package/engine/internal/unit/ability.lua +98 -9
- 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 +2 -0
- package/engine/internal/unit/bonus.lua +10 -0
- package/engine/internal/unit/fly-height.d.ts +7 -0
- package/engine/internal/unit/fly-height.lua +20 -0
- package/engine/internal/unit/interrupts.d.ts +12 -0
- package/engine/internal/unit/interrupts.lua +28 -0
- package/engine/internal/unit/main-selected.lua +12 -27
- package/engine/internal/unit/order.d.ts +20 -0
- package/engine/internal/unit/order.lua +136 -0
- package/engine/internal/unit/scale.d.ts +7 -0
- package/engine/internal/unit/scale.lua +20 -0
- package/engine/internal/unit+ability.lua +10 -1
- 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 +52 -14
- package/engine/internal/unit.d.ts +40 -26
- package/engine/internal/unit.lua +382 -240
- package/engine/local-client.d.ts +2 -0
- package/engine/local-client.lua +30 -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/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/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/ensnare.d.ts +12 -0
- package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
- 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/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/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 +11 -11
- package/engine/object-data/entry/ability-type.lua +35 -13
- package/engine/object-data/entry/buff-type/applicable.lua +5 -0
- package/engine/object-data/entry/buff-type.d.ts +5 -11
- package/engine/object-data/entry/buff-type.lua +11 -27
- package/engine/object-data/entry/destructible-type.d.ts +27 -1
- package/engine/object-data/entry/destructible-type.lua +155 -0
- package/engine/object-data/entry/sound-preset.d.ts +17 -0
- package/engine/object-data/entry/sound-preset.lua +104 -0
- package/engine/object-data/entry/unit-type.d.ts +17 -4
- package/engine/object-data/entry/unit-type.lua +197 -85
- package/engine/object-field/ability.d.ts +4 -4
- package/engine/object-field/ability.lua +7 -6
- 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 +357 -118
- package/engine/random.d.ts +9 -0
- package/engine/random.lua +13 -0
- package/engine/standard/entries/buff-type.d.ts +3 -0
- package/engine/standard/entries/buff-type.lua +3 -0
- package/engine/standard/fields/ability.d.ts +2 -2
- package/engine/standard/fields/ability.lua +2 -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 +5 -0
- package/engine/unit.lua +5 -0
- package/net/socket.lua +1 -1
- package/objutil/buff.lua +11 -10
- package/package.json +2 -2
- package/patch-lua.lua +15 -0
- package/patch-lualib.lua +1 -1
- package/utility/arrays.d.ts +2 -0
- package/utility/arrays.lua +11 -0
- 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/linked-map.d.ts +26 -0
- package/utility/linked-map.lua +66 -0
- package/utility/linked-set.d.ts +2 -0
- package/utility/linked-set.lua +26 -1
- 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/types.d.ts +3 -0
- package/core/types/order.d.ts +0 -25
- package/core/types/order.lua +0 -55
package/engine/internal/unit.lua
CHANGED
|
@@ -53,35 +53,40 @@ local ____math = require("math")
|
|
|
53
53
|
local min = ____math.min
|
|
54
54
|
local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
|
|
55
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
|
|
56
69
|
local match = string.match
|
|
57
70
|
local ____tostring = _G.tostring
|
|
58
71
|
local setUnitAnimation = SetUnitAnimation
|
|
59
|
-
local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
|
|
60
72
|
local setUnitAnimationByIndex = SetUnitAnimationByIndex
|
|
61
|
-
local resetUnitAnimation = ResetUnitAnimation
|
|
62
|
-
local queueUnitAnimation = QueueUnitAnimation
|
|
63
73
|
local getUnitIntegerField = BlzGetUnitIntegerField
|
|
64
74
|
local getUnitRealField = BlzGetUnitRealField
|
|
65
75
|
local getHeroStr = GetHeroStr
|
|
66
76
|
local getHeroAgi = GetHeroAgi
|
|
67
77
|
local getHeroInt = GetHeroInt
|
|
68
|
-
local setHeroStr = SetHeroStr
|
|
69
|
-
local setHeroAgi = SetHeroAgi
|
|
70
|
-
local setHeroInt = SetHeroInt
|
|
71
78
|
local getUnitBooleanField = BlzGetUnitBooleanField
|
|
72
79
|
local getUnitStringField = BlzGetUnitStringField
|
|
73
80
|
local setUnitIntegerField = BlzSetUnitIntegerField
|
|
74
81
|
local setUnitRealField = BlzSetUnitRealField
|
|
75
82
|
local setUnitBooleanField = BlzSetUnitBooleanField
|
|
76
83
|
local setUnitStringField = BlzSetUnitStringField
|
|
77
|
-
local setUnitScale = SetUnitScale
|
|
78
84
|
local setUnitPosition = SetUnitPosition
|
|
79
85
|
local setUnitTimeScale = SetUnitTimeScale
|
|
80
86
|
local getHandleId = GetHandleId
|
|
81
87
|
local getUnitCurrentOrder = GetUnitCurrentOrder
|
|
82
88
|
local createUnit = CreateUnit
|
|
83
89
|
local killUnit = KillUnit
|
|
84
|
-
local setUnitExploded = SetUnitExploded
|
|
85
90
|
local removeUnit = RemoveUnit
|
|
86
91
|
local getUnitTypeId = GetUnitTypeId
|
|
87
92
|
local isHeroUnitId = IsHeroUnitId
|
|
@@ -97,15 +102,12 @@ local getSpellTargetItem = GetSpellTargetItem
|
|
|
97
102
|
local getSpellTargetDestructable = GetSpellTargetDestructable
|
|
98
103
|
local isUnitInRangeXY = IsUnitInRangeXY
|
|
99
104
|
local isUnitInRange = IsUnitInRange
|
|
100
|
-
local setResourceAmount = SetResourceAmount
|
|
101
|
-
local getResourceAmount = GetResourceAmount
|
|
102
105
|
local getUnitWeaponRealField = BlzGetUnitWeaponRealField
|
|
103
106
|
local setUnitWeaponRealField = BlzSetUnitWeaponRealField
|
|
104
107
|
local getUnitWeaponStringField = BlzGetUnitWeaponStringField
|
|
105
108
|
local setUnitWeaponStringField = BlzSetUnitWeaponStringField
|
|
106
109
|
local getUnitAbilityLevel = GetUnitAbilityLevel
|
|
107
110
|
local unitDisableAbility = BlzUnitDisableAbility
|
|
108
|
-
local unitInterruptAttack = BlzUnitInterruptAttack
|
|
109
111
|
local isUnitInvisible = IsUnitInvisible
|
|
110
112
|
local isUnitVisible = IsUnitVisible
|
|
111
113
|
local getUnitX = GetUnitX
|
|
@@ -122,15 +124,9 @@ local getOrderedUnit = GetOrderedUnit
|
|
|
122
124
|
local getIssuedOrderId = GetIssuedOrderId
|
|
123
125
|
local isUnitInvulnerable = BlzIsUnitInvulnerable
|
|
124
126
|
local unitAlive = UnitAlive
|
|
125
|
-
local unitAddType = UnitAddType
|
|
126
|
-
local unitRemoveType = UnitRemoveType
|
|
127
|
-
local isUnitIllusion = IsUnitIllusion
|
|
128
|
-
local isUnitType = IsUnitType
|
|
129
127
|
local isUnitAlly = IsUnitAlly
|
|
130
128
|
local isUnitEnemy = IsUnitEnemy
|
|
131
129
|
local getOwningPlayer = GetOwningPlayer
|
|
132
|
-
local setUnitColor = SetUnitColor
|
|
133
|
-
local showUnitTeamGlow = BlzShowUnitTeamGlow
|
|
134
130
|
____exports.UnitClassification = {}
|
|
135
131
|
local UnitClassification = ____exports.UnitClassification
|
|
136
132
|
do
|
|
@@ -140,6 +136,7 @@ do
|
|
|
140
136
|
UnitClassification.GROUND = UNIT_TYPE_GROUND
|
|
141
137
|
UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
|
|
142
138
|
UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
|
|
139
|
+
UnitClassification.WORKER = UNIT_TYPE_PEON
|
|
143
140
|
UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
|
|
144
141
|
UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
|
|
145
142
|
UnitClassification.TAUREN = UNIT_TYPE_TAUREN
|
|
@@ -347,6 +344,9 @@ local function dispatchAbility(event)
|
|
|
347
344
|
}
|
|
348
345
|
)
|
|
349
346
|
end
|
|
347
|
+
local function damagingEventPreventRetaliation(self)
|
|
348
|
+
self[0] = true
|
|
349
|
+
end
|
|
350
350
|
local function damageEventPreventDeath(self, callback, ...)
|
|
351
351
|
if self[0] ~= nil then
|
|
352
352
|
return
|
|
@@ -358,7 +358,14 @@ local function damageEventPreventDeath(self, callback, ...)
|
|
|
358
358
|
rawset(self, 1 + i, (select(i, ...)))
|
|
359
359
|
end
|
|
360
360
|
end
|
|
361
|
-
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
|
+
}
|
|
362
369
|
local jlimitopByOperator = {
|
|
363
370
|
[0] = LESS_THAN_OR_EQUAL,
|
|
364
371
|
[1] = LESS_THAN_OR_EQUAL,
|
|
@@ -376,15 +383,27 @@ local modifiers = {
|
|
|
376
383
|
end,
|
|
377
384
|
armor = function(unit, value)
|
|
378
385
|
if UnitAddAbility(unit, armorBonusAbilityId) then
|
|
379
|
-
assert(
|
|
386
|
+
assert(
|
|
387
|
+
UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
|
|
388
|
+
"armor bonus ability must be made permanent",
|
|
389
|
+
unit
|
|
390
|
+
)
|
|
380
391
|
end
|
|
381
|
-
local ability = assert(
|
|
382
|
-
|
|
383
|
-
ability,
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
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
|
+
)
|
|
388
407
|
end
|
|
389
408
|
}
|
|
390
409
|
local getters = {
|
|
@@ -402,6 +421,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
|
|
|
402
421
|
self.unit = unit
|
|
403
422
|
self.index = index
|
|
404
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
|
+
)
|
|
405
437
|
__TS__SetDescriptor(
|
|
406
438
|
UnitWeapon.prototype,
|
|
407
439
|
"cooldown",
|
|
@@ -436,6 +468,19 @@ __TS__SetDescriptor(
|
|
|
436
468
|
},
|
|
437
469
|
true
|
|
438
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
|
+
)
|
|
439
484
|
__TS__SetDescriptor(
|
|
440
485
|
UnitWeapon.prototype,
|
|
441
486
|
"damageBase",
|
|
@@ -612,26 +657,30 @@ local fieldSetters = {
|
|
|
612
657
|
}
|
|
613
658
|
local dummies = {}
|
|
614
659
|
for ____, player in ipairs(Player.all) do
|
|
615
|
-
local dummy = assert(
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
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
|
+
)
|
|
622
671
|
ShowUnit(dummy, false)
|
|
623
672
|
dummies[player] = dummy
|
|
624
673
|
end
|
|
625
674
|
local function delayHealthChecksCallback(unit)
|
|
626
|
-
local counter = (unit[
|
|
675
|
+
local counter = (unit[104] or 0) - 1
|
|
627
676
|
if counter ~= 0 then
|
|
628
|
-
unit[
|
|
677
|
+
unit[104] = counter
|
|
629
678
|
return
|
|
630
679
|
end
|
|
631
|
-
unit[
|
|
632
|
-
local healthBonus = unit[
|
|
680
|
+
unit[104] = nil
|
|
681
|
+
local healthBonus = unit[105]
|
|
633
682
|
if healthBonus ~= nil then
|
|
634
|
-
unit[
|
|
683
|
+
unit[105] = nil
|
|
635
684
|
local handle = unit.handle
|
|
636
685
|
BlzSetUnitMaxHP(
|
|
637
686
|
handle,
|
|
@@ -640,52 +689,78 @@ local function delayHealthChecksCallback(unit)
|
|
|
640
689
|
end
|
|
641
690
|
end
|
|
642
691
|
local nextSyncId = 1
|
|
643
|
-
local unitBySyncId = setmetatable({}, {__mode = "
|
|
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
|
|
644
703
|
____exports.Unit = __TS__Class()
|
|
645
704
|
local Unit = ____exports.Unit
|
|
646
705
|
Unit.name = "Unit"
|
|
647
706
|
__TS__ClassExtends(Unit, Handle)
|
|
648
707
|
function Unit.prototype.____constructor(self, handle)
|
|
649
708
|
Handle.prototype.____constructor(self, handle)
|
|
650
|
-
local
|
|
651
|
-
nextSyncId =
|
|
652
|
-
self.syncId =
|
|
709
|
+
local ____nextSyncId_1 = nextSyncId
|
|
710
|
+
nextSyncId = ____nextSyncId_1 + 1
|
|
711
|
+
self.syncId = ____nextSyncId_1
|
|
653
712
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
654
|
-
assert(
|
|
655
|
-
|
|
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
|
+
)
|
|
656
723
|
if unitAddAbility(
|
|
657
724
|
handle,
|
|
658
725
|
fourCC("Amrf")
|
|
659
726
|
) then
|
|
660
|
-
assert(
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
727
|
+
assert(
|
|
728
|
+
unitRemoveAbility(
|
|
729
|
+
handle,
|
|
730
|
+
fourCC("Amrf")
|
|
731
|
+
),
|
|
732
|
+
"fly ability must be removed after addition",
|
|
733
|
+
self
|
|
734
|
+
)
|
|
664
735
|
end
|
|
665
736
|
unitBySyncId[self.syncId] = self
|
|
666
737
|
local ____ = self.abilities
|
|
667
738
|
end
|
|
668
|
-
function Unit.prototype.getEvent(self,
|
|
669
|
-
self.events = self.events or (
|
|
670
|
-
local eventId = GetHandleId(
|
|
671
|
-
|
|
672
|
-
|
|
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(
|
|
673
745
|
TriggerEvent,
|
|
674
746
|
function(trigger)
|
|
675
|
-
TriggerRegisterUnitEvent(trigger, self.handle,
|
|
747
|
+
TriggerRegisterUnitEvent(trigger, self.handle, jevent)
|
|
676
748
|
end,
|
|
677
749
|
collector or (function() return {} end)
|
|
678
750
|
)
|
|
751
|
+
self.events:put(eventId, event)
|
|
679
752
|
end
|
|
680
|
-
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))
|
|
681
760
|
end
|
|
682
761
|
function Unit.prototype.onDestroy(self)
|
|
683
762
|
local handle = self.handle
|
|
684
|
-
self
|
|
685
|
-
self[108] = getUnitY(handle)
|
|
686
|
-
if not self._owner then
|
|
687
|
-
self._owner = Player:of(getOwningPlayer(handle))
|
|
688
|
-
end
|
|
763
|
+
self:saveData()
|
|
689
764
|
local abilities = self.abilities
|
|
690
765
|
for ____, ability in ipairs(abilities) do
|
|
691
766
|
ability:destroy()
|
|
@@ -721,7 +796,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
|
|
|
721
796
|
self._attackHandlers = handlers
|
|
722
797
|
if #handlers == 1 then
|
|
723
798
|
local handle = self.handle
|
|
724
|
-
assert(
|
|
799
|
+
assert(
|
|
800
|
+
unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
|
|
801
|
+
"attack handler ability must be added",
|
|
802
|
+
self
|
|
803
|
+
)
|
|
725
804
|
end
|
|
726
805
|
return handler
|
|
727
806
|
end
|
|
@@ -750,17 +829,17 @@ function Unit.prototype.addModifier(self, property, modifier)
|
|
|
750
829
|
end}
|
|
751
830
|
end
|
|
752
831
|
function Unit.prototype.hasCombatClassification(self, combatClassification)
|
|
753
|
-
local
|
|
754
|
-
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
|
|
755
834
|
end
|
|
756
835
|
function Unit.prototype.addClassification(self, classification)
|
|
757
|
-
return
|
|
836
|
+
return UnitAddType(self.handle, classification)
|
|
758
837
|
end
|
|
759
838
|
function Unit.prototype.removeClassification(self, classification)
|
|
760
|
-
return
|
|
839
|
+
return UnitRemoveType(self.handle, classification)
|
|
761
840
|
end
|
|
762
841
|
function Unit.prototype.hasClassification(self, classification)
|
|
763
|
-
return
|
|
842
|
+
return IsUnitType(self.handle, classification)
|
|
764
843
|
end
|
|
765
844
|
function Unit.prototype.isVisibleTo(self, player)
|
|
766
845
|
return isUnitVisible(self.handle, player.handle)
|
|
@@ -769,13 +848,13 @@ function Unit.prototype.isInvisibleTo(self, player)
|
|
|
769
848
|
return isUnitInvisible(self.handle, player.handle)
|
|
770
849
|
end
|
|
771
850
|
function Unit.prototype.isInRangeOf(self, x, y, range)
|
|
772
|
-
local
|
|
851
|
+
local ____temp_3
|
|
773
852
|
if type(x) == "number" then
|
|
774
|
-
|
|
853
|
+
____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
|
|
775
854
|
else
|
|
776
|
-
|
|
855
|
+
____temp_3 = isUnitInRange(self.handle, x.handle, y)
|
|
777
856
|
end
|
|
778
|
-
return
|
|
857
|
+
return ____temp_3
|
|
779
858
|
end
|
|
780
859
|
function Unit.prototype.isAllyOf(self, unit)
|
|
781
860
|
return isUnitAlly(
|
|
@@ -793,19 +872,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
|
|
|
793
872
|
if type(animation) == "number" then
|
|
794
873
|
setUnitAnimationByIndex(self.handle, animation)
|
|
795
874
|
elseif rarity then
|
|
796
|
-
|
|
875
|
+
SetUnitAnimationWithRarity(self.handle, animation, rarity)
|
|
797
876
|
else
|
|
798
877
|
setUnitAnimation(self.handle, animation)
|
|
799
878
|
end
|
|
800
879
|
end
|
|
801
880
|
function Unit.prototype.resetAnimation(self)
|
|
802
|
-
|
|
881
|
+
ResetUnitAnimation(self.handle)
|
|
803
882
|
end
|
|
804
883
|
function Unit.prototype.queueAnimation(self, animation)
|
|
805
|
-
|
|
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
|
|
806
896
|
end
|
|
807
897
|
function Unit.prototype.delayHealthChecks(self)
|
|
808
|
-
self[
|
|
898
|
+
self[104] = (self[104] or 0) + 1
|
|
809
899
|
Timer:run(delayHealthChecksCallback, self)
|
|
810
900
|
end
|
|
811
901
|
function Unit.prototype.setPosition(self, x, y)
|
|
@@ -815,21 +905,21 @@ function Unit.prototype.isSelected(self, player)
|
|
|
815
905
|
return IsUnitSelected(self.handle, player.handle)
|
|
816
906
|
end
|
|
817
907
|
function Unit.prototype.explode(self)
|
|
818
|
-
|
|
908
|
+
SetUnitExploded(self.handle, true)
|
|
819
909
|
killUnit(self.handle)
|
|
820
910
|
end
|
|
821
911
|
function Unit.prototype.kill(self)
|
|
822
912
|
killUnit(self.handle)
|
|
823
913
|
end
|
|
824
914
|
function Unit.prototype.revive(self, x, y, doEffect)
|
|
825
|
-
local
|
|
826
|
-
local
|
|
827
|
-
local
|
|
828
|
-
if
|
|
829
|
-
|
|
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
|
|
830
920
|
end
|
|
831
|
-
__TS__SparseArrayPush(
|
|
832
|
-
|
|
921
|
+
__TS__SparseArrayPush(____array_5, ____doEffect_4)
|
|
922
|
+
____ReviveHero_6(__TS__SparseArraySpread(____array_5))
|
|
833
923
|
end
|
|
834
924
|
function Unit.prototype.healTarget(self, target, amount)
|
|
835
925
|
if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
|
|
@@ -872,17 +962,16 @@ function Unit.prototype.itemInSlot(self, slot)
|
|
|
872
962
|
return Item:of(unitItemInSlot(self.handle, slot))
|
|
873
963
|
end
|
|
874
964
|
function Unit.prototype.addAbility(self, abilityId)
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
965
|
+
local ability = UnitAbility:of(
|
|
966
|
+
doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
|
|
967
|
+
abilityId,
|
|
968
|
+
self
|
|
969
|
+
)
|
|
970
|
+
if ability ~= nil then
|
|
881
971
|
local abilities = self.abilities
|
|
882
972
|
abilities[#abilities + 1] = ability
|
|
883
|
-
return ability
|
|
884
973
|
end
|
|
885
|
-
return
|
|
974
|
+
return ability
|
|
886
975
|
end
|
|
887
976
|
function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
|
|
888
977
|
return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
|
|
@@ -896,31 +985,21 @@ end
|
|
|
896
985
|
function Unit.prototype.hasAbility(self, abilityId)
|
|
897
986
|
return getUnitAbilityLevel(self.handle, abilityId) > 0
|
|
898
987
|
end
|
|
899
|
-
function Unit.prototype.
|
|
900
|
-
local
|
|
901
|
-
|
|
902
|
-
assert(unitRemoveAbility(handle, abilityId))
|
|
903
|
-
return nil
|
|
904
|
-
end
|
|
905
|
-
return UnitAbility:of(
|
|
906
|
-
getUnitAbility(self.handle, abilityId),
|
|
907
|
-
abilityId,
|
|
908
|
-
self
|
|
909
|
-
)
|
|
988
|
+
function Unit.prototype.getAbility(self, abilityId)
|
|
989
|
+
local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
|
|
990
|
+
return UnitAbility:of(ability, abilityId, self)
|
|
910
991
|
end
|
|
911
|
-
function Unit.prototype.removeAbility(self,
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
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
|
|
920
1000
|
end
|
|
921
|
-
return true
|
|
922
1001
|
end
|
|
923
|
-
return
|
|
1002
|
+
return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
|
|
924
1003
|
end
|
|
925
1004
|
function Unit.prototype.hideAbility(self, abilityId, flag)
|
|
926
1005
|
BlzUnitHideAbility(self.handle, abilityId, flag)
|
|
@@ -934,9 +1013,6 @@ end
|
|
|
934
1013
|
function Unit.prototype.endAbilityCooldown(self, abilityId)
|
|
935
1014
|
BlzEndUnitAbilityCooldown(self.handle, abilityId)
|
|
936
1015
|
end
|
|
937
|
-
function Unit.prototype.interruptAttack(self)
|
|
938
|
-
unitInterruptAttack(self.handle)
|
|
939
|
-
end
|
|
940
1016
|
function Unit.prototype.interruptCast(self, abilityId)
|
|
941
1017
|
local handle = self.handle
|
|
942
1018
|
unitDisableAbility(handle, abilityId, true, false)
|
|
@@ -1007,18 +1083,44 @@ function Unit.prototype.unpauseEx(self)
|
|
|
1007
1083
|
end
|
|
1008
1084
|
function Unit.prototype.incrementStunCounter(self)
|
|
1009
1085
|
local stunCounter = self[102] or 0
|
|
1010
|
-
if not self[101] or stunCounter >= 0 then
|
|
1086
|
+
if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
|
|
1011
1087
|
BlzPauseUnitEx(self.handle, true)
|
|
1012
1088
|
end
|
|
1013
1089
|
self[102] = stunCounter + 1
|
|
1014
1090
|
end
|
|
1015
1091
|
function Unit.prototype.decrementStunCounter(self)
|
|
1016
1092
|
local stunCounter = self[102] or 0
|
|
1017
|
-
if not self[101] or stunCounter >= 1 then
|
|
1093
|
+
if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
|
|
1018
1094
|
BlzPauseUnitEx(self.handle, false)
|
|
1019
1095
|
end
|
|
1020
1096
|
self[102] = stunCounter - 1
|
|
1021
1097
|
end
|
|
1098
|
+
function Unit.prototype.incrementForceStunCounter(self)
|
|
1099
|
+
local forceStunCounter = self[103] or 0
|
|
1100
|
+
if forceStunCounter == 0 then
|
|
1101
|
+
local handle = self.handle
|
|
1102
|
+
if not self[101] then
|
|
1103
|
+
for _ = self[102] or 0, -1 do
|
|
1104
|
+
BlzPauseUnitEx(handle, true)
|
|
1105
|
+
end
|
|
1106
|
+
end
|
|
1107
|
+
BlzPauseUnitEx(handle, true)
|
|
1108
|
+
end
|
|
1109
|
+
self[103] = forceStunCounter + 1
|
|
1110
|
+
end
|
|
1111
|
+
function Unit.prototype.decrementForceStunCounter(self)
|
|
1112
|
+
local forceStunCounter = self[103] or 0
|
|
1113
|
+
if forceStunCounter == 1 then
|
|
1114
|
+
local handle = self.handle
|
|
1115
|
+
if not self[101] then
|
|
1116
|
+
for _ = self[102] or 0, -1 do
|
|
1117
|
+
BlzPauseUnitEx(handle, false)
|
|
1118
|
+
end
|
|
1119
|
+
end
|
|
1120
|
+
BlzPauseUnitEx(handle, false)
|
|
1121
|
+
end
|
|
1122
|
+
self[103] = forceStunCounter - 1
|
|
1123
|
+
end
|
|
1022
1124
|
function Unit.create(self, owner, id, x, y, facing, skinId)
|
|
1023
1125
|
local handle = skinId and BlzCreateUnitWithSkin(
|
|
1024
1126
|
owner.handle,
|
|
@@ -1207,7 +1309,7 @@ __TS__SetDescriptor(
|
|
|
1207
1309
|
Unit.prototype,
|
|
1208
1310
|
"isIllusion",
|
|
1209
1311
|
{get = function(self)
|
|
1210
|
-
return
|
|
1312
|
+
return IsUnitIllusion(self.handle)
|
|
1211
1313
|
end},
|
|
1212
1314
|
true
|
|
1213
1315
|
)
|
|
@@ -1294,13 +1396,13 @@ __TS__SetDescriptor(
|
|
|
1294
1396
|
)
|
|
1295
1397
|
__TS__SetDescriptor(
|
|
1296
1398
|
Unit.prototype,
|
|
1297
|
-
"
|
|
1399
|
+
"primaryAttribute",
|
|
1298
1400
|
{
|
|
1299
1401
|
get = function(self)
|
|
1300
|
-
return
|
|
1402
|
+
return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
|
|
1301
1403
|
end,
|
|
1302
|
-
set = function(self,
|
|
1303
|
-
|
|
1404
|
+
set = function(self, primaryAttribute)
|
|
1405
|
+
setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
|
|
1304
1406
|
end
|
|
1305
1407
|
},
|
|
1306
1408
|
true
|
|
@@ -1322,19 +1424,6 @@ __TS__SetDescriptor(
|
|
|
1322
1424
|
end},
|
|
1323
1425
|
true
|
|
1324
1426
|
)
|
|
1325
|
-
__TS__SetDescriptor(
|
|
1326
|
-
Unit.prototype,
|
|
1327
|
-
"agilityBase",
|
|
1328
|
-
{
|
|
1329
|
-
get = function(self)
|
|
1330
|
-
return getHeroAgi(self.handle, false)
|
|
1331
|
-
end,
|
|
1332
|
-
set = function(self, agilityBase)
|
|
1333
|
-
setHeroAgi(self.handle, agilityBase, true)
|
|
1334
|
-
end
|
|
1335
|
-
},
|
|
1336
|
-
true
|
|
1337
|
-
)
|
|
1338
1427
|
__TS__SetDescriptor(
|
|
1339
1428
|
Unit.prototype,
|
|
1340
1429
|
"agilityBonus",
|
|
@@ -1352,19 +1441,6 @@ __TS__SetDescriptor(
|
|
|
1352
1441
|
end},
|
|
1353
1442
|
true
|
|
1354
1443
|
)
|
|
1355
|
-
__TS__SetDescriptor(
|
|
1356
|
-
Unit.prototype,
|
|
1357
|
-
"intelligenceBase",
|
|
1358
|
-
{
|
|
1359
|
-
get = function(self)
|
|
1360
|
-
return getHeroInt(self.handle, false)
|
|
1361
|
-
end,
|
|
1362
|
-
set = function(self, intelligenceBase)
|
|
1363
|
-
setHeroInt(self.handle, intelligenceBase, true)
|
|
1364
|
-
end
|
|
1365
|
-
},
|
|
1366
|
-
true
|
|
1367
|
-
)
|
|
1368
1444
|
__TS__SetDescriptor(
|
|
1369
1445
|
Unit.prototype,
|
|
1370
1446
|
"intelligenceBonus",
|
|
@@ -1413,17 +1489,17 @@ __TS__SetDescriptor(
|
|
|
1413
1489
|
"isTeamGlowVisible",
|
|
1414
1490
|
{
|
|
1415
1491
|
get = function(self)
|
|
1416
|
-
return not self[
|
|
1492
|
+
return not self[107]
|
|
1417
1493
|
end,
|
|
1418
1494
|
set = function(self, isTeamGlowVisible)
|
|
1419
|
-
|
|
1420
|
-
local
|
|
1495
|
+
BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
|
|
1496
|
+
local ____temp_7
|
|
1421
1497
|
if not isTeamGlowVisible then
|
|
1422
|
-
|
|
1498
|
+
____temp_7 = true
|
|
1423
1499
|
else
|
|
1424
|
-
|
|
1500
|
+
____temp_7 = nil
|
|
1425
1501
|
end
|
|
1426
|
-
self[
|
|
1502
|
+
self[107] = ____temp_7
|
|
1427
1503
|
end
|
|
1428
1504
|
},
|
|
1429
1505
|
true
|
|
@@ -1432,9 +1508,9 @@ __TS__SetDescriptor(
|
|
|
1432
1508
|
Unit.prototype,
|
|
1433
1509
|
"color",
|
|
1434
1510
|
{set = function(self, color)
|
|
1435
|
-
|
|
1436
|
-
if self[
|
|
1437
|
-
|
|
1511
|
+
SetUnitColor(self.handle, color.handle)
|
|
1512
|
+
if self[107] then
|
|
1513
|
+
BlzShowUnitTeamGlow(self.handle, false)
|
|
1438
1514
|
end
|
|
1439
1515
|
end},
|
|
1440
1516
|
true
|
|
@@ -1457,14 +1533,14 @@ __TS__SetDescriptor(
|
|
|
1457
1533
|
"maxHealth",
|
|
1458
1534
|
{
|
|
1459
1535
|
get = function(self)
|
|
1460
|
-
return BlzGetUnitMaxHP(self.handle) - (self[
|
|
1536
|
+
return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
|
|
1461
1537
|
end,
|
|
1462
1538
|
set = function(self, maxHealth)
|
|
1463
|
-
if maxHealth < 1 and self[
|
|
1464
|
-
self[
|
|
1539
|
+
if maxHealth < 1 and self[104] ~= nil then
|
|
1540
|
+
self[105] = (self[105] or 0) + (1 - maxHealth)
|
|
1465
1541
|
maxHealth = 1
|
|
1466
1542
|
end
|
|
1467
|
-
BlzSetUnitMaxHP(self.handle, maxHealth + (self[
|
|
1543
|
+
BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
|
|
1468
1544
|
end
|
|
1469
1545
|
},
|
|
1470
1546
|
true
|
|
@@ -1506,10 +1582,10 @@ __TS__SetDescriptor(
|
|
|
1506
1582
|
"health",
|
|
1507
1583
|
{
|
|
1508
1584
|
get = function(self)
|
|
1509
|
-
return GetWidgetLife(self.handle) - (self[
|
|
1585
|
+
return GetWidgetLife(self.handle) - (self[106] or 0)
|
|
1510
1586
|
end,
|
|
1511
1587
|
set = function(self, health)
|
|
1512
|
-
SetWidgetLife(self.handle, health + (self[
|
|
1588
|
+
SetWidgetLife(self.handle, health + (self[106] or 0))
|
|
1513
1589
|
end
|
|
1514
1590
|
},
|
|
1515
1591
|
true
|
|
@@ -1585,25 +1661,12 @@ __TS__SetDescriptor(
|
|
|
1585
1661
|
},
|
|
1586
1662
|
true
|
|
1587
1663
|
)
|
|
1588
|
-
__TS__SetDescriptor(
|
|
1589
|
-
Unit.prototype,
|
|
1590
|
-
"flyHeight",
|
|
1591
|
-
{
|
|
1592
|
-
get = function(self)
|
|
1593
|
-
return getUnitFlyHeight(self.handle)
|
|
1594
|
-
end,
|
|
1595
|
-
set = function(self, v)
|
|
1596
|
-
SetUnitFlyHeight(self.handle, v, 100000)
|
|
1597
|
-
end
|
|
1598
|
-
},
|
|
1599
|
-
true
|
|
1600
|
-
)
|
|
1601
1664
|
__TS__SetDescriptor(
|
|
1602
1665
|
Unit.prototype,
|
|
1603
1666
|
"x",
|
|
1604
1667
|
{
|
|
1605
1668
|
get = function(self)
|
|
1606
|
-
return self[
|
|
1669
|
+
return self[108] or getUnitX(self.handle)
|
|
1607
1670
|
end,
|
|
1608
1671
|
set = function(self, v)
|
|
1609
1672
|
SetUnitX(self.handle, v)
|
|
@@ -1616,7 +1679,7 @@ __TS__SetDescriptor(
|
|
|
1616
1679
|
"y",
|
|
1617
1680
|
{
|
|
1618
1681
|
get = function(self)
|
|
1619
|
-
return self[
|
|
1682
|
+
return self[109] or getUnitY(self.handle)
|
|
1620
1683
|
end,
|
|
1621
1684
|
set = function(self, v)
|
|
1622
1685
|
SetUnitY(self.handle, v)
|
|
@@ -1702,10 +1765,10 @@ __TS__SetDescriptor(
|
|
|
1702
1765
|
"gold",
|
|
1703
1766
|
{
|
|
1704
1767
|
get = function(self)
|
|
1705
|
-
return
|
|
1768
|
+
return GetResourceAmount(self.handle)
|
|
1706
1769
|
end,
|
|
1707
1770
|
set = function(self, gold)
|
|
1708
|
-
|
|
1771
|
+
SetResourceAmount(self.handle, gold)
|
|
1709
1772
|
end
|
|
1710
1773
|
},
|
|
1711
1774
|
true
|
|
@@ -1721,14 +1784,18 @@ __TS__SetDescriptor(
|
|
|
1721
1784
|
local handle = self.handle
|
|
1722
1785
|
if isPaused and not IsUnitPaused(handle) then
|
|
1723
1786
|
self[101] = true
|
|
1724
|
-
|
|
1725
|
-
|
|
1787
|
+
if (self[103] or 0) <= 0 then
|
|
1788
|
+
for _ = self[102] or 0, -1 do
|
|
1789
|
+
BlzPauseUnitEx(handle, true)
|
|
1790
|
+
end
|
|
1726
1791
|
end
|
|
1727
1792
|
PauseUnit(handle, true)
|
|
1728
1793
|
elseif not isPaused and IsUnitPaused(handle) then
|
|
1729
1794
|
PauseUnit(handle, false)
|
|
1730
|
-
|
|
1731
|
-
|
|
1795
|
+
if (self[103] or 0) <= 0 then
|
|
1796
|
+
for _ = self[102] or 0, -1 do
|
|
1797
|
+
BlzPauseUnitEx(handle, false)
|
|
1798
|
+
end
|
|
1732
1799
|
end
|
|
1733
1800
|
self[101] = nil
|
|
1734
1801
|
end
|
|
@@ -1786,20 +1853,6 @@ __TS__SetDescriptor(
|
|
|
1786
1853
|
},
|
|
1787
1854
|
true
|
|
1788
1855
|
)
|
|
1789
|
-
__TS__SetDescriptor(
|
|
1790
|
-
Unit.prototype,
|
|
1791
|
-
"scale",
|
|
1792
|
-
{
|
|
1793
|
-
get = function(self)
|
|
1794
|
-
return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
|
|
1795
|
-
end,
|
|
1796
|
-
set = function(self, v)
|
|
1797
|
-
setUnitScale(self.handle, v, v, v)
|
|
1798
|
-
setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
|
|
1799
|
-
end
|
|
1800
|
-
},
|
|
1801
|
-
true
|
|
1802
|
-
)
|
|
1803
1856
|
__TS__SetDescriptor(
|
|
1804
1857
|
Unit.prototype,
|
|
1805
1858
|
"timeScale",
|
|
@@ -1833,6 +1886,19 @@ __TS__SetDescriptor(
|
|
|
1833
1886
|
end},
|
|
1834
1887
|
true
|
|
1835
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
|
+
)
|
|
1836
1902
|
__TS__SetDescriptor(
|
|
1837
1903
|
Unit.prototype,
|
|
1838
1904
|
"pathing",
|
|
@@ -2014,6 +2080,14 @@ __TS__SetDescriptor(
|
|
|
2014
2080
|
end},
|
|
2015
2081
|
true
|
|
2016
2082
|
)
|
|
2083
|
+
__TS__SetDescriptor(
|
|
2084
|
+
Unit.prototype,
|
|
2085
|
+
"targetAcquiredEvent",
|
|
2086
|
+
{get = function(self)
|
|
2087
|
+
return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
|
|
2088
|
+
end},
|
|
2089
|
+
true
|
|
2090
|
+
)
|
|
2017
2091
|
__TS__SetDescriptor(
|
|
2018
2092
|
Unit.prototype,
|
|
2019
2093
|
"onSelect",
|
|
@@ -2074,6 +2148,11 @@ __TS__SetDescriptor(
|
|
|
2074
2148
|
end},
|
|
2075
2149
|
true
|
|
2076
2150
|
)
|
|
2151
|
+
Unit.levelChangedEvent = __TS__New(
|
|
2152
|
+
____exports.UnitTriggerEvent,
|
|
2153
|
+
EVENT_PLAYER_HERO_LEVEL,
|
|
2154
|
+
function() return ____exports.Unit:of(getTriggerUnit()) end
|
|
2155
|
+
)
|
|
2077
2156
|
Unit.deathEvent = __TS__New(
|
|
2078
2157
|
____exports.UnitTriggerEvent,
|
|
2079
2158
|
EVENT_PLAYER_UNIT_DEATH,
|
|
@@ -2149,25 +2228,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
|
|
|
2149
2228
|
InitializingEvent,
|
|
2150
2229
|
function(event)
|
|
2151
2230
|
local function listener(unit, id)
|
|
2152
|
-
local
|
|
2231
|
+
local ____GetSpellTargetUnit_result_10
|
|
2153
2232
|
if GetSpellTargetUnit() then
|
|
2154
|
-
|
|
2233
|
+
____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
|
|
2155
2234
|
else
|
|
2156
|
-
local
|
|
2235
|
+
local ____GetSpellTargetItem_result_9
|
|
2157
2236
|
if GetSpellTargetItem() then
|
|
2158
|
-
|
|
2237
|
+
____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
|
|
2159
2238
|
else
|
|
2160
|
-
local
|
|
2239
|
+
local ____GetSpellTargetDestructable_result_8
|
|
2161
2240
|
if GetSpellTargetDestructable() then
|
|
2162
|
-
|
|
2241
|
+
____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
|
|
2163
2242
|
else
|
|
2164
|
-
|
|
2243
|
+
____GetSpellTargetDestructable_result_8 = nil
|
|
2165
2244
|
end
|
|
2166
|
-
|
|
2245
|
+
____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
|
|
2167
2246
|
end
|
|
2168
|
-
|
|
2247
|
+
____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
|
|
2169
2248
|
end
|
|
2170
|
-
local target =
|
|
2249
|
+
local target = ____GetSpellTargetUnit_result_10
|
|
2171
2250
|
if target then
|
|
2172
2251
|
invoke(event, unit, id, target)
|
|
2173
2252
|
end
|
|
@@ -2375,38 +2454,57 @@ Unit.onDamaging = (function()
|
|
|
2375
2454
|
if source and source.typeId == dummyUnitId then
|
|
2376
2455
|
source = nil
|
|
2377
2456
|
end
|
|
2378
|
-
local target = BlzGetEventDamageTarget()
|
|
2457
|
+
local target = ____exports.Unit:of(BlzGetEventDamageTarget())
|
|
2458
|
+
local metadata = damageMetadataByTarget[target]
|
|
2459
|
+
damageMetadataByTarget[target] = nil
|
|
2379
2460
|
local data = {
|
|
2380
2461
|
amount = GetEventDamage(),
|
|
2381
|
-
attackType = BlzGetEventAttackType(),
|
|
2462
|
+
attackType = nativeToAttackType(BlzGetEventAttackType()),
|
|
2382
2463
|
damageType = BlzGetEventDamageType(),
|
|
2383
2464
|
weaponType = BlzGetEventWeaponType(),
|
|
2384
|
-
|
|
2465
|
+
metadata = metadata,
|
|
2466
|
+
isAttack = BlzGetEventIsAttack(),
|
|
2467
|
+
originalAmount = GetEventDamage(),
|
|
2468
|
+
originalMetadata = metadata,
|
|
2469
|
+
preventRetaliation = damagingEventPreventRetaliation
|
|
2385
2470
|
}
|
|
2386
2471
|
if data.isAttack and source then
|
|
2387
|
-
|
|
2388
|
-
if weapon == -1 then
|
|
2389
|
-
local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
|
|
2390
|
-
weapon = 0
|
|
2391
|
-
end
|
|
2392
|
-
data.weapon = assert(source.weapons[weapon + 1])
|
|
2472
|
+
data.weapon = source:chooseWeapon(target)
|
|
2393
2473
|
end
|
|
2394
2474
|
if not data.isAttack or not source or not source._attackHandlers then
|
|
2395
2475
|
invoke(
|
|
2396
2476
|
event,
|
|
2397
2477
|
source,
|
|
2398
|
-
|
|
2478
|
+
target,
|
|
2399
2479
|
setmetatable(
|
|
2400
2480
|
{},
|
|
2401
2481
|
{
|
|
2402
2482
|
__index = data,
|
|
2403
2483
|
__newindex = function(self, key, value)
|
|
2404
|
-
damageSetters[key]
|
|
2484
|
+
local damageSetter = damageSetters[key]
|
|
2485
|
+
if damageSetter ~= nil then
|
|
2486
|
+
damageSetter(value)
|
|
2487
|
+
end
|
|
2405
2488
|
data[key] = value
|
|
2406
2489
|
end
|
|
2407
2490
|
}
|
|
2408
2491
|
)
|
|
2409
2492
|
)
|
|
2493
|
+
if data[0] and source then
|
|
2494
|
+
local sourceOwner = source.owner.handle
|
|
2495
|
+
data[1] = sourceOwner
|
|
2496
|
+
local targetOwner = target.owner.handle
|
|
2497
|
+
data[2] = targetOwner
|
|
2498
|
+
if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
|
|
2499
|
+
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
|
|
2500
|
+
data[3] = true
|
|
2501
|
+
end
|
|
2502
|
+
if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
|
|
2503
|
+
SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
|
|
2504
|
+
data[4] = true
|
|
2505
|
+
end
|
|
2506
|
+
end
|
|
2507
|
+
damagingEventByTarget[target] = data
|
|
2410
2508
|
return
|
|
2411
2509
|
end
|
|
2412
2510
|
BlzSetEventDamage(0)
|
|
@@ -2414,7 +2512,7 @@ Unit.onDamaging = (function()
|
|
|
2414
2512
|
BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
|
|
2415
2513
|
BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
|
|
2416
2514
|
local sourceOwner = source.owner.handle
|
|
2417
|
-
local targetOwner =
|
|
2515
|
+
local targetOwner = target.owner.handle
|
|
2418
2516
|
if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
|
|
2419
2517
|
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
|
|
2420
2518
|
Timer:run(function()
|
|
@@ -2430,23 +2528,19 @@ Unit.onDamaging = (function()
|
|
|
2430
2528
|
for ____, ____value in ipairs(source._attackHandlers) do
|
|
2431
2529
|
local condition = ____value[1]
|
|
2432
2530
|
local action = ____value[2]
|
|
2433
|
-
if condition(
|
|
2434
|
-
source,
|
|
2435
|
-
____exports.Unit:of(target),
|
|
2436
|
-
data
|
|
2437
|
-
) then
|
|
2531
|
+
if condition(source, target, data) then
|
|
2438
2532
|
action(
|
|
2439
2533
|
source,
|
|
2440
|
-
|
|
2534
|
+
target,
|
|
2441
2535
|
setmetatable(
|
|
2442
2536
|
{fire = function()
|
|
2443
2537
|
UnitDamageTarget(
|
|
2444
2538
|
source.handle,
|
|
2445
|
-
target,
|
|
2539
|
+
target.handle,
|
|
2446
2540
|
data.amount,
|
|
2447
2541
|
true,
|
|
2448
2542
|
true,
|
|
2449
|
-
data.attackType,
|
|
2543
|
+
attackTypeToNative(data.attackType),
|
|
2450
2544
|
data.damageType,
|
|
2451
2545
|
data.weaponType
|
|
2452
2546
|
)
|
|
@@ -2473,30 +2567,54 @@ Unit.onDamage = __TS__New(
|
|
|
2473
2567
|
if source and source.typeId == dummyUnitId then
|
|
2474
2568
|
source = nil
|
|
2475
2569
|
end
|
|
2570
|
+
local target = ____exports.Unit:of(BlzGetEventDamageTarget())
|
|
2571
|
+
local damagingEvent = damagingEventByTarget[target]
|
|
2572
|
+
damagingEventByTarget[target] = nil
|
|
2476
2573
|
local data = {
|
|
2477
2574
|
amount = GetEventDamage(),
|
|
2478
|
-
attackType = BlzGetEventAttackType(),
|
|
2575
|
+
attackType = nativeToAttackType(BlzGetEventAttackType()),
|
|
2479
2576
|
damageType = BlzGetEventDamageType(),
|
|
2480
2577
|
weaponType = BlzGetEventWeaponType(),
|
|
2578
|
+
metadata = damagingEvent and damagingEvent.metadata,
|
|
2481
2579
|
isAttack = BlzGetEventIsAttack(),
|
|
2482
|
-
originalAmount = GetEventDamage(),
|
|
2580
|
+
originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
|
|
2581
|
+
originalMetadata = damagingEvent and damagingEvent.originalMetadata,
|
|
2483
2582
|
preventDeath = damageEventPreventDeath
|
|
2484
2583
|
}
|
|
2584
|
+
if damagingEvent then
|
|
2585
|
+
for key, value in pairs(damagingEvent) do
|
|
2586
|
+
if isAttribute(key) then
|
|
2587
|
+
data[key] = value
|
|
2588
|
+
end
|
|
2589
|
+
end
|
|
2590
|
+
local sourceOwner = damagingEvent[1]
|
|
2591
|
+
if sourceOwner then
|
|
2592
|
+
local targetOwner = damagingEvent[2]
|
|
2593
|
+
if damagingEvent[3] then
|
|
2594
|
+
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
|
|
2595
|
+
end
|
|
2596
|
+
if damagingEvent[4] then
|
|
2597
|
+
SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
|
|
2598
|
+
end
|
|
2599
|
+
end
|
|
2600
|
+
end
|
|
2485
2601
|
local evData = setmetatable(
|
|
2486
2602
|
{},
|
|
2487
2603
|
{
|
|
2488
2604
|
__index = data,
|
|
2489
2605
|
__newindex = function(self, key, value)
|
|
2490
|
-
damageSetters[key]
|
|
2606
|
+
local damageSetter = damageSetters[key]
|
|
2607
|
+
if damageSetter ~= nil then
|
|
2608
|
+
damageSetter(value)
|
|
2609
|
+
end
|
|
2491
2610
|
data[key] = value
|
|
2492
2611
|
end
|
|
2493
2612
|
}
|
|
2494
2613
|
)
|
|
2495
|
-
local target = ____exports.Unit:of(BlzGetEventDamageTarget())
|
|
2496
2614
|
invoke(event, source, target, evData)
|
|
2497
2615
|
if evData[0] ~= nil and target.health - evData.amount < 0.405 then
|
|
2498
2616
|
local bonusHealth = math.ceil(evData.amount)
|
|
2499
|
-
target[
|
|
2617
|
+
target[106] = (target[106] or 0) + bonusHealth
|
|
2500
2618
|
BlzSetUnitMaxHP(
|
|
2501
2619
|
target.handle,
|
|
2502
2620
|
BlzGetUnitMaxHP(target.handle) + bonusHealth
|
|
@@ -2510,7 +2628,7 @@ Unit.onDamage = __TS__New(
|
|
|
2510
2628
|
evData[0],
|
|
2511
2629
|
table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
|
|
2512
2630
|
)
|
|
2513
|
-
target[
|
|
2631
|
+
target[106] = (target[106] or 0) - bonusHealth
|
|
2514
2632
|
SetWidgetLife(
|
|
2515
2633
|
target.handle,
|
|
2516
2634
|
GetWidgetLife(target.handle) - bonusHealth
|
|
@@ -2546,10 +2664,14 @@ Unit.itemPickedUpEvent = __TS__New(
|
|
|
2546
2664
|
____exports.UnitTriggerEvent,
|
|
2547
2665
|
EVENT_PLAYER_UNIT_PICKUP_ITEM,
|
|
2548
2666
|
function()
|
|
2549
|
-
local
|
|
2550
|
-
local
|
|
2551
|
-
if getUnitTypeId(
|
|
2552
|
-
|
|
2667
|
+
local unitHandle = getTriggerUnit()
|
|
2668
|
+
local itemHandle = getManipulatedItem()
|
|
2669
|
+
if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
|
|
2670
|
+
local unit = ____exports.Unit:of(unitHandle)
|
|
2671
|
+
local item = Item:of(itemHandle)
|
|
2672
|
+
if item.owner ~= unit then
|
|
2673
|
+
return unit, item
|
|
2674
|
+
end
|
|
2553
2675
|
end
|
|
2554
2676
|
return IgnoreEvent
|
|
2555
2677
|
end
|
|
@@ -2569,7 +2691,22 @@ Unit.itemUsedEvent = __TS__New(
|
|
|
2569
2691
|
Unit.itemStackedEvent = __TS__New(
|
|
2570
2692
|
____exports.UnitTriggerEvent,
|
|
2571
2693
|
EVENT_PLAYER_UNIT_STACK_ITEM,
|
|
2572
|
-
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(
|
|
2694
|
+
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
|
|
2695
|
+
)
|
|
2696
|
+
__TS__ObjectDefineProperty(
|
|
2697
|
+
Unit,
|
|
2698
|
+
"itemChargesChangedEvent",
|
|
2699
|
+
{get = function(self)
|
|
2700
|
+
local event = __TS__New(Event)
|
|
2701
|
+
Item.chargesChangedEvent:addListener(function(item)
|
|
2702
|
+
local unit = item.owner
|
|
2703
|
+
if unit ~= nil then
|
|
2704
|
+
invoke(event, unit, item)
|
|
2705
|
+
end
|
|
2706
|
+
end)
|
|
2707
|
+
rawset(self, "itemChargesChangedEvent", event)
|
|
2708
|
+
return event
|
|
2709
|
+
end}
|
|
2573
2710
|
)
|
|
2574
2711
|
__TS__ObjectDefineProperty(
|
|
2575
2712
|
Unit,
|
|
@@ -2641,6 +2778,10 @@ __TS__ObjectDefineProperty(
|
|
|
2641
2778
|
rawset(self, "destroyEvent", destroyEvent)
|
|
2642
2779
|
return destroyEvent
|
|
2643
2780
|
end}
|
|
2781
|
+
)
|
|
2782
|
+
Unit.synchronize = synchronizer(
|
|
2783
|
+
function(unit) return unit.syncId end,
|
|
2784
|
+
function(syncId) return unitBySyncId[syncId] end
|
|
2644
2785
|
);
|
|
2645
2786
|
(function(self)
|
|
2646
2787
|
local leaveAbilityIds = postcompile(function()
|
|
@@ -2670,7 +2811,8 @@ __TS__ObjectDefineProperty(
|
|
|
2670
2811
|
return
|
|
2671
2812
|
end
|
|
2672
2813
|
end
|
|
2673
|
-
unit:
|
|
2814
|
+
unit:saveData()
|
|
2815
|
+
Timer:run(unit, "destroy")
|
|
2674
2816
|
end)
|
|
2675
2817
|
end
|
|
2676
2818
|
end)(Unit)
|