warscript 0.0.1-dev.effa673 → 0.0.1-dev.f074376
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/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.lua +5 -0
- 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 +2 -1
- package/engine/behaviour/ability.lua +10 -18
- package/engine/behaviour/unit/stun-immunity.d.ts +11 -5
- package/engine/behaviour/unit/stun-immunity.lua +53 -28
- package/engine/behaviour/unit.d.ts +39 -3
- package/engine/behaviour/unit.lua +259 -6
- package/engine/buff.d.ts +17 -6
- package/engine/buff.lua +160 -97
- 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/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/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/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 +45 -14
- package/engine/internal/unit.d.ts +39 -19
- package/engine/internal/unit.lua +329 -169
- 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 +1 -1
- package/engine/object-data/auxiliary/attachment-preset.lua +3 -2
- 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/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/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/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.lua +11 -3
- 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/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 +23 -6
- package/engine/object-field.lua +335 -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 +7 -0
- package/engine/standard/fields/unit.lua +13 -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 +3 -0
- package/engine/unit.lua +3 -0
- package/net/socket.lua +1 -1
- package/objutil/buff.lua +2 -3
- package/package.json +2 -2
- 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-set.d.ts +2 -0
- package/utility/linked-set.lua +22 -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/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,13 +53,21 @@ 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
|
|
56
67
|
local match = string.match
|
|
57
68
|
local ____tostring = _G.tostring
|
|
58
69
|
local setUnitAnimation = SetUnitAnimation
|
|
59
|
-
local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
|
|
60
70
|
local setUnitAnimationByIndex = SetUnitAnimationByIndex
|
|
61
|
-
local resetUnitAnimation = ResetUnitAnimation
|
|
62
|
-
local queueUnitAnimation = QueueUnitAnimation
|
|
63
71
|
local getUnitIntegerField = BlzGetUnitIntegerField
|
|
64
72
|
local getUnitRealField = BlzGetUnitRealField
|
|
65
73
|
local getHeroStr = GetHeroStr
|
|
@@ -81,7 +89,6 @@ local getHandleId = GetHandleId
|
|
|
81
89
|
local getUnitCurrentOrder = GetUnitCurrentOrder
|
|
82
90
|
local createUnit = CreateUnit
|
|
83
91
|
local killUnit = KillUnit
|
|
84
|
-
local setUnitExploded = SetUnitExploded
|
|
85
92
|
local removeUnit = RemoveUnit
|
|
86
93
|
local getUnitTypeId = GetUnitTypeId
|
|
87
94
|
local isHeroUnitId = IsHeroUnitId
|
|
@@ -97,8 +104,6 @@ local getSpellTargetItem = GetSpellTargetItem
|
|
|
97
104
|
local getSpellTargetDestructable = GetSpellTargetDestructable
|
|
98
105
|
local isUnitInRangeXY = IsUnitInRangeXY
|
|
99
106
|
local isUnitInRange = IsUnitInRange
|
|
100
|
-
local setResourceAmount = SetResourceAmount
|
|
101
|
-
local getResourceAmount = GetResourceAmount
|
|
102
107
|
local getUnitWeaponRealField = BlzGetUnitWeaponRealField
|
|
103
108
|
local setUnitWeaponRealField = BlzSetUnitWeaponRealField
|
|
104
109
|
local getUnitWeaponStringField = BlzGetUnitWeaponStringField
|
|
@@ -122,15 +127,9 @@ local getOrderedUnit = GetOrderedUnit
|
|
|
122
127
|
local getIssuedOrderId = GetIssuedOrderId
|
|
123
128
|
local isUnitInvulnerable = BlzIsUnitInvulnerable
|
|
124
129
|
local unitAlive = UnitAlive
|
|
125
|
-
local unitAddType = UnitAddType
|
|
126
|
-
local unitRemoveType = UnitRemoveType
|
|
127
|
-
local isUnitIllusion = IsUnitIllusion
|
|
128
|
-
local isUnitType = IsUnitType
|
|
129
130
|
local isUnitAlly = IsUnitAlly
|
|
130
131
|
local isUnitEnemy = IsUnitEnemy
|
|
131
132
|
local getOwningPlayer = GetOwningPlayer
|
|
132
|
-
local setUnitColor = SetUnitColor
|
|
133
|
-
local showUnitTeamGlow = BlzShowUnitTeamGlow
|
|
134
133
|
____exports.UnitClassification = {}
|
|
135
134
|
local UnitClassification = ____exports.UnitClassification
|
|
136
135
|
do
|
|
@@ -140,6 +139,7 @@ do
|
|
|
140
139
|
UnitClassification.GROUND = UNIT_TYPE_GROUND
|
|
141
140
|
UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
|
|
142
141
|
UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
|
|
142
|
+
UnitClassification.WORKER = UNIT_TYPE_PEON
|
|
143
143
|
UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
|
|
144
144
|
UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
|
|
145
145
|
UnitClassification.TAUREN = UNIT_TYPE_TAUREN
|
|
@@ -347,6 +347,9 @@ local function dispatchAbility(event)
|
|
|
347
347
|
}
|
|
348
348
|
)
|
|
349
349
|
end
|
|
350
|
+
local function damagingEventPreventRetaliation(self)
|
|
351
|
+
self[0] = true
|
|
352
|
+
end
|
|
350
353
|
local function damageEventPreventDeath(self, callback, ...)
|
|
351
354
|
if self[0] ~= nil then
|
|
352
355
|
return
|
|
@@ -358,7 +361,14 @@ local function damageEventPreventDeath(self, callback, ...)
|
|
|
358
361
|
rawset(self, 1 + i, (select(i, ...)))
|
|
359
362
|
end
|
|
360
363
|
end
|
|
361
|
-
local damageSetters = {
|
|
364
|
+
local damageSetters = {
|
|
365
|
+
amount = BlzSetEventDamage,
|
|
366
|
+
attackType = function(attackType)
|
|
367
|
+
return BlzSetEventAttackType(attackTypeToNative(attackType))
|
|
368
|
+
end,
|
|
369
|
+
damageType = BlzSetEventDamageType,
|
|
370
|
+
weaponType = BlzSetEventWeaponType
|
|
371
|
+
}
|
|
362
372
|
local jlimitopByOperator = {
|
|
363
373
|
[0] = LESS_THAN_OR_EQUAL,
|
|
364
374
|
[1] = LESS_THAN_OR_EQUAL,
|
|
@@ -402,6 +412,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
|
|
|
402
412
|
self.unit = unit
|
|
403
413
|
self.index = index
|
|
404
414
|
end
|
|
415
|
+
__TS__SetDescriptor(
|
|
416
|
+
UnitWeapon.prototype,
|
|
417
|
+
"isEnabled",
|
|
418
|
+
{
|
|
419
|
+
get = function(self)
|
|
420
|
+
return BlzGetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index)
|
|
421
|
+
end,
|
|
422
|
+
set = function(self, isEnabled)
|
|
423
|
+
BlzSetUnitWeaponBooleanField(self.unit.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, self.index, isEnabled)
|
|
424
|
+
end
|
|
425
|
+
},
|
|
426
|
+
true
|
|
427
|
+
)
|
|
405
428
|
__TS__SetDescriptor(
|
|
406
429
|
UnitWeapon.prototype,
|
|
407
430
|
"cooldown",
|
|
@@ -436,6 +459,19 @@ __TS__SetDescriptor(
|
|
|
436
459
|
},
|
|
437
460
|
true
|
|
438
461
|
)
|
|
462
|
+
__TS__SetDescriptor(
|
|
463
|
+
UnitWeapon.prototype,
|
|
464
|
+
"allowedTargetCombatClassifications",
|
|
465
|
+
{
|
|
466
|
+
get = function(self)
|
|
467
|
+
return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
|
|
468
|
+
end,
|
|
469
|
+
set = function(self, allowedTargetCombatClassifications)
|
|
470
|
+
BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
|
|
471
|
+
end
|
|
472
|
+
},
|
|
473
|
+
true
|
|
474
|
+
)
|
|
439
475
|
__TS__SetDescriptor(
|
|
440
476
|
UnitWeapon.prototype,
|
|
441
477
|
"damageBase",
|
|
@@ -623,15 +659,15 @@ for ____, player in ipairs(Player.all) do
|
|
|
623
659
|
dummies[player] = dummy
|
|
624
660
|
end
|
|
625
661
|
local function delayHealthChecksCallback(unit)
|
|
626
|
-
local counter = (unit[
|
|
662
|
+
local counter = (unit[104] or 0) - 1
|
|
627
663
|
if counter ~= 0 then
|
|
628
|
-
unit[
|
|
664
|
+
unit[104] = counter
|
|
629
665
|
return
|
|
630
666
|
end
|
|
631
|
-
unit[
|
|
632
|
-
local healthBonus = unit[
|
|
667
|
+
unit[104] = nil
|
|
668
|
+
local healthBonus = unit[105]
|
|
633
669
|
if healthBonus ~= nil then
|
|
634
|
-
unit[
|
|
670
|
+
unit[105] = nil
|
|
635
671
|
local handle = unit.handle
|
|
636
672
|
BlzSetUnitMaxHP(
|
|
637
673
|
handle,
|
|
@@ -640,16 +676,26 @@ local function delayHealthChecksCallback(unit)
|
|
|
640
676
|
end
|
|
641
677
|
end
|
|
642
678
|
local nextSyncId = 1
|
|
643
|
-
local unitBySyncId = setmetatable({}, {__mode = "
|
|
679
|
+
local unitBySyncId = setmetatable({}, {__mode = "v"})
|
|
680
|
+
local damagingEventByTarget = setmetatable({}, {__mode = "k"})
|
|
681
|
+
local function addAbility(unit, abilityTypeId)
|
|
682
|
+
local ____unitAddAbility_result_0
|
|
683
|
+
if unitAddAbility(unit, abilityTypeId) then
|
|
684
|
+
____unitAddAbility_result_0 = getUnitAbility(unit, abilityTypeId)
|
|
685
|
+
else
|
|
686
|
+
____unitAddAbility_result_0 = nil
|
|
687
|
+
end
|
|
688
|
+
return ____unitAddAbility_result_0
|
|
689
|
+
end
|
|
644
690
|
____exports.Unit = __TS__Class()
|
|
645
691
|
local Unit = ____exports.Unit
|
|
646
692
|
Unit.name = "Unit"
|
|
647
693
|
__TS__ClassExtends(Unit, Handle)
|
|
648
694
|
function Unit.prototype.____constructor(self, handle)
|
|
649
695
|
Handle.prototype.____constructor(self, handle)
|
|
650
|
-
local
|
|
651
|
-
nextSyncId =
|
|
652
|
-
self.syncId =
|
|
696
|
+
local ____nextSyncId_1 = nextSyncId
|
|
697
|
+
nextSyncId = ____nextSyncId_1 + 1
|
|
698
|
+
self.syncId = ____nextSyncId_1
|
|
653
699
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
654
700
|
assert(unitAddAbility(handle, leaveDetectAbilityId) and UnitMakeAbilityPermanent(handle, true, leaveDetectAbilityId))
|
|
655
701
|
assert(unitAddAbility(handle, morphDetectAbilityId))
|
|
@@ -681,8 +727,8 @@ function Unit.prototype.getEvent(self, event, collector)
|
|
|
681
727
|
end
|
|
682
728
|
function Unit.prototype.onDestroy(self)
|
|
683
729
|
local handle = self.handle
|
|
684
|
-
self[
|
|
685
|
-
self[
|
|
730
|
+
self[108] = getUnitX(handle)
|
|
731
|
+
self[109] = getUnitY(handle)
|
|
686
732
|
if not self._owner then
|
|
687
733
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
688
734
|
end
|
|
@@ -750,17 +796,17 @@ function Unit.prototype.addModifier(self, property, modifier)
|
|
|
750
796
|
end}
|
|
751
797
|
end
|
|
752
798
|
function Unit.prototype.hasCombatClassification(self, combatClassification)
|
|
753
|
-
local
|
|
754
|
-
return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) &
|
|
799
|
+
local ____combatClassification_2 = combatClassification
|
|
800
|
+
return getUnitIntegerField(self.handle, UNIT_IF_TARGETED_AS) & ____combatClassification_2 == ____combatClassification_2
|
|
755
801
|
end
|
|
756
802
|
function Unit.prototype.addClassification(self, classification)
|
|
757
|
-
return
|
|
803
|
+
return UnitAddType(self.handle, classification)
|
|
758
804
|
end
|
|
759
805
|
function Unit.prototype.removeClassification(self, classification)
|
|
760
|
-
return
|
|
806
|
+
return UnitRemoveType(self.handle, classification)
|
|
761
807
|
end
|
|
762
808
|
function Unit.prototype.hasClassification(self, classification)
|
|
763
|
-
return
|
|
809
|
+
return IsUnitType(self.handle, classification)
|
|
764
810
|
end
|
|
765
811
|
function Unit.prototype.isVisibleTo(self, player)
|
|
766
812
|
return isUnitVisible(self.handle, player.handle)
|
|
@@ -769,13 +815,13 @@ function Unit.prototype.isInvisibleTo(self, player)
|
|
|
769
815
|
return isUnitInvisible(self.handle, player.handle)
|
|
770
816
|
end
|
|
771
817
|
function Unit.prototype.isInRangeOf(self, x, y, range)
|
|
772
|
-
local
|
|
818
|
+
local ____temp_3
|
|
773
819
|
if type(x) == "number" then
|
|
774
|
-
|
|
820
|
+
____temp_3 = isUnitInRangeXY(self.handle, x, y, range)
|
|
775
821
|
else
|
|
776
|
-
|
|
822
|
+
____temp_3 = isUnitInRange(self.handle, x.handle, y)
|
|
777
823
|
end
|
|
778
|
-
return
|
|
824
|
+
return ____temp_3
|
|
779
825
|
end
|
|
780
826
|
function Unit.prototype.isAllyOf(self, unit)
|
|
781
827
|
return isUnitAlly(
|
|
@@ -793,19 +839,30 @@ function Unit.prototype.playAnimation(self, animation, rarity)
|
|
|
793
839
|
if type(animation) == "number" then
|
|
794
840
|
setUnitAnimationByIndex(self.handle, animation)
|
|
795
841
|
elseif rarity then
|
|
796
|
-
|
|
842
|
+
SetUnitAnimationWithRarity(self.handle, animation, rarity)
|
|
797
843
|
else
|
|
798
844
|
setUnitAnimation(self.handle, animation)
|
|
799
845
|
end
|
|
800
846
|
end
|
|
801
847
|
function Unit.prototype.resetAnimation(self)
|
|
802
|
-
|
|
848
|
+
ResetUnitAnimation(self.handle)
|
|
803
849
|
end
|
|
804
850
|
function Unit.prototype.queueAnimation(self, animation)
|
|
805
|
-
|
|
851
|
+
QueueUnitAnimation(self.handle, animation)
|
|
852
|
+
end
|
|
853
|
+
function Unit.prototype.chooseWeapon(self, target)
|
|
854
|
+
local firstWeapon = self.firstWeapon
|
|
855
|
+
if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
|
|
856
|
+
return firstWeapon
|
|
857
|
+
end
|
|
858
|
+
local secondWeapon = self.secondWeapon
|
|
859
|
+
if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
|
|
860
|
+
return secondWeapon
|
|
861
|
+
end
|
|
862
|
+
return nil
|
|
806
863
|
end
|
|
807
864
|
function Unit.prototype.delayHealthChecks(self)
|
|
808
|
-
self[
|
|
865
|
+
self[104] = (self[104] or 0) + 1
|
|
809
866
|
Timer:run(delayHealthChecksCallback, self)
|
|
810
867
|
end
|
|
811
868
|
function Unit.prototype.setPosition(self, x, y)
|
|
@@ -815,21 +872,21 @@ function Unit.prototype.isSelected(self, player)
|
|
|
815
872
|
return IsUnitSelected(self.handle, player.handle)
|
|
816
873
|
end
|
|
817
874
|
function Unit.prototype.explode(self)
|
|
818
|
-
|
|
875
|
+
SetUnitExploded(self.handle, true)
|
|
819
876
|
killUnit(self.handle)
|
|
820
877
|
end
|
|
821
878
|
function Unit.prototype.kill(self)
|
|
822
879
|
killUnit(self.handle)
|
|
823
880
|
end
|
|
824
881
|
function Unit.prototype.revive(self, x, y, doEffect)
|
|
825
|
-
local
|
|
826
|
-
local
|
|
827
|
-
local
|
|
828
|
-
if
|
|
829
|
-
|
|
882
|
+
local ____ReviveHero_6 = ReviveHero
|
|
883
|
+
local ____array_5 = __TS__SparseArrayNew(self.handle, x, y)
|
|
884
|
+
local ____doEffect_4 = doEffect
|
|
885
|
+
if ____doEffect_4 == nil then
|
|
886
|
+
____doEffect_4 = false
|
|
830
887
|
end
|
|
831
|
-
__TS__SparseArrayPush(
|
|
832
|
-
|
|
888
|
+
__TS__SparseArrayPush(____array_5, ____doEffect_4)
|
|
889
|
+
____ReviveHero_6(__TS__SparseArraySpread(____array_5))
|
|
833
890
|
end
|
|
834
891
|
function Unit.prototype.healTarget(self, target, amount)
|
|
835
892
|
if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
|
|
@@ -872,17 +929,16 @@ function Unit.prototype.itemInSlot(self, slot)
|
|
|
872
929
|
return Item:of(unitItemInSlot(self.handle, slot))
|
|
873
930
|
end
|
|
874
931
|
function Unit.prototype.addAbility(self, abilityId)
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
932
|
+
local ability = UnitAbility:of(
|
|
933
|
+
doUnitAbilityAction(self.handle, abilityId, addAbility, abilityId),
|
|
934
|
+
abilityId,
|
|
935
|
+
self
|
|
936
|
+
)
|
|
937
|
+
if ability ~= nil then
|
|
881
938
|
local abilities = self.abilities
|
|
882
939
|
abilities[#abilities + 1] = ability
|
|
883
|
-
return ability
|
|
884
940
|
end
|
|
885
|
-
return
|
|
941
|
+
return ability
|
|
886
942
|
end
|
|
887
943
|
function Unit.prototype.makeAbilityPermanent(self, abilityId, permanent)
|
|
888
944
|
return UnitMakeAbilityPermanent(self.handle, permanent, abilityId)
|
|
@@ -896,31 +952,21 @@ end
|
|
|
896
952
|
function Unit.prototype.hasAbility(self, abilityId)
|
|
897
953
|
return getUnitAbilityLevel(self.handle, abilityId) > 0
|
|
898
954
|
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
|
-
)
|
|
955
|
+
function Unit.prototype.getAbility(self, abilityId)
|
|
956
|
+
local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
|
|
957
|
+
return UnitAbility:of(ability, abilityId, self)
|
|
910
958
|
end
|
|
911
|
-
function Unit.prototype.removeAbility(self,
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
end
|
|
959
|
+
function Unit.prototype.removeAbility(self, abilityTypeId)
|
|
960
|
+
local abilities = self.abilities
|
|
961
|
+
for i = 1, #abilities do
|
|
962
|
+
if abilities[i].typeId == abilityTypeId then
|
|
963
|
+
local ability = abilities[i]
|
|
964
|
+
tremove(abilities, i)
|
|
965
|
+
ability:destroy()
|
|
966
|
+
return true
|
|
920
967
|
end
|
|
921
|
-
return true
|
|
922
968
|
end
|
|
923
|
-
return
|
|
969
|
+
return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
|
|
924
970
|
end
|
|
925
971
|
function Unit.prototype.hideAbility(self, abilityId, flag)
|
|
926
972
|
BlzUnitHideAbility(self.handle, abilityId, flag)
|
|
@@ -934,6 +980,21 @@ end
|
|
|
934
980
|
function Unit.prototype.endAbilityCooldown(self, abilityId)
|
|
935
981
|
BlzEndUnitAbilityCooldown(self.handle, abilityId)
|
|
936
982
|
end
|
|
983
|
+
function Unit.prototype.interruptMovement(self)
|
|
984
|
+
local handle = self.handle
|
|
985
|
+
unitDisableAbility(
|
|
986
|
+
handle,
|
|
987
|
+
fourCC("Amov"),
|
|
988
|
+
true,
|
|
989
|
+
false
|
|
990
|
+
)
|
|
991
|
+
unitDisableAbility(
|
|
992
|
+
handle,
|
|
993
|
+
fourCC("Amov"),
|
|
994
|
+
false,
|
|
995
|
+
false
|
|
996
|
+
)
|
|
997
|
+
end
|
|
937
998
|
function Unit.prototype.interruptAttack(self)
|
|
938
999
|
unitInterruptAttack(self.handle)
|
|
939
1000
|
end
|
|
@@ -1007,18 +1068,44 @@ function Unit.prototype.unpauseEx(self)
|
|
|
1007
1068
|
end
|
|
1008
1069
|
function Unit.prototype.incrementStunCounter(self)
|
|
1009
1070
|
local stunCounter = self[102] or 0
|
|
1010
|
-
if not self[101] or stunCounter >= 0 then
|
|
1071
|
+
if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
|
|
1011
1072
|
BlzPauseUnitEx(self.handle, true)
|
|
1012
1073
|
end
|
|
1013
1074
|
self[102] = stunCounter + 1
|
|
1014
1075
|
end
|
|
1015
1076
|
function Unit.prototype.decrementStunCounter(self)
|
|
1016
1077
|
local stunCounter = self[102] or 0
|
|
1017
|
-
if not self[101] or stunCounter >= 1 then
|
|
1078
|
+
if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
|
|
1018
1079
|
BlzPauseUnitEx(self.handle, false)
|
|
1019
1080
|
end
|
|
1020
1081
|
self[102] = stunCounter - 1
|
|
1021
1082
|
end
|
|
1083
|
+
function Unit.prototype.incrementForceStunCounter(self)
|
|
1084
|
+
local forceStunCounter = self[103] or 0
|
|
1085
|
+
if forceStunCounter == 0 then
|
|
1086
|
+
local handle = self.handle
|
|
1087
|
+
if not self[101] then
|
|
1088
|
+
for _ = self[102] or 0, -1 do
|
|
1089
|
+
BlzPauseUnitEx(handle, true)
|
|
1090
|
+
end
|
|
1091
|
+
end
|
|
1092
|
+
BlzPauseUnitEx(handle, true)
|
|
1093
|
+
end
|
|
1094
|
+
self[103] = forceStunCounter + 1
|
|
1095
|
+
end
|
|
1096
|
+
function Unit.prototype.decrementForceStunCounter(self)
|
|
1097
|
+
local forceStunCounter = self[103] or 0
|
|
1098
|
+
if forceStunCounter == 1 then
|
|
1099
|
+
local handle = self.handle
|
|
1100
|
+
if not self[101] then
|
|
1101
|
+
for _ = self[102] or 0, -1 do
|
|
1102
|
+
BlzPauseUnitEx(handle, false)
|
|
1103
|
+
end
|
|
1104
|
+
end
|
|
1105
|
+
BlzPauseUnitEx(handle, false)
|
|
1106
|
+
end
|
|
1107
|
+
self[103] = forceStunCounter - 1
|
|
1108
|
+
end
|
|
1022
1109
|
function Unit.create(self, owner, id, x, y, facing, skinId)
|
|
1023
1110
|
local handle = skinId and BlzCreateUnitWithSkin(
|
|
1024
1111
|
owner.handle,
|
|
@@ -1207,7 +1294,7 @@ __TS__SetDescriptor(
|
|
|
1207
1294
|
Unit.prototype,
|
|
1208
1295
|
"isIllusion",
|
|
1209
1296
|
{get = function(self)
|
|
1210
|
-
return
|
|
1297
|
+
return IsUnitIllusion(self.handle)
|
|
1211
1298
|
end},
|
|
1212
1299
|
true
|
|
1213
1300
|
)
|
|
@@ -1292,6 +1379,19 @@ __TS__SetDescriptor(
|
|
|
1292
1379
|
},
|
|
1293
1380
|
true
|
|
1294
1381
|
)
|
|
1382
|
+
__TS__SetDescriptor(
|
|
1383
|
+
Unit.prototype,
|
|
1384
|
+
"primaryAttribute",
|
|
1385
|
+
{
|
|
1386
|
+
get = function(self)
|
|
1387
|
+
return getUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE)
|
|
1388
|
+
end,
|
|
1389
|
+
set = function(self, primaryAttribute)
|
|
1390
|
+
setUnitIntegerField(self.handle, UNIT_IF_PRIMARY_ATTRIBUTE, primaryAttribute)
|
|
1391
|
+
end
|
|
1392
|
+
},
|
|
1393
|
+
true
|
|
1394
|
+
)
|
|
1295
1395
|
__TS__SetDescriptor(
|
|
1296
1396
|
Unit.prototype,
|
|
1297
1397
|
"strengthBase",
|
|
@@ -1413,17 +1513,17 @@ __TS__SetDescriptor(
|
|
|
1413
1513
|
"isTeamGlowVisible",
|
|
1414
1514
|
{
|
|
1415
1515
|
get = function(self)
|
|
1416
|
-
return not self[
|
|
1516
|
+
return not self[107]
|
|
1417
1517
|
end,
|
|
1418
1518
|
set = function(self, isTeamGlowVisible)
|
|
1419
|
-
|
|
1420
|
-
local
|
|
1519
|
+
BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
|
|
1520
|
+
local ____temp_7
|
|
1421
1521
|
if not isTeamGlowVisible then
|
|
1422
|
-
|
|
1522
|
+
____temp_7 = true
|
|
1423
1523
|
else
|
|
1424
|
-
|
|
1524
|
+
____temp_7 = nil
|
|
1425
1525
|
end
|
|
1426
|
-
self[
|
|
1526
|
+
self[107] = ____temp_7
|
|
1427
1527
|
end
|
|
1428
1528
|
},
|
|
1429
1529
|
true
|
|
@@ -1432,9 +1532,9 @@ __TS__SetDescriptor(
|
|
|
1432
1532
|
Unit.prototype,
|
|
1433
1533
|
"color",
|
|
1434
1534
|
{set = function(self, color)
|
|
1435
|
-
|
|
1436
|
-
if self[
|
|
1437
|
-
|
|
1535
|
+
SetUnitColor(self.handle, color.handle)
|
|
1536
|
+
if self[107] then
|
|
1537
|
+
BlzShowUnitTeamGlow(self.handle, false)
|
|
1438
1538
|
end
|
|
1439
1539
|
end},
|
|
1440
1540
|
true
|
|
@@ -1457,14 +1557,14 @@ __TS__SetDescriptor(
|
|
|
1457
1557
|
"maxHealth",
|
|
1458
1558
|
{
|
|
1459
1559
|
get = function(self)
|
|
1460
|
-
return BlzGetUnitMaxHP(self.handle) - (self[
|
|
1560
|
+
return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
|
|
1461
1561
|
end,
|
|
1462
1562
|
set = function(self, maxHealth)
|
|
1463
|
-
if maxHealth < 1 and self[
|
|
1464
|
-
self[
|
|
1563
|
+
if maxHealth < 1 and self[104] ~= nil then
|
|
1564
|
+
self[105] = (self[105] or 0) + (1 - maxHealth)
|
|
1465
1565
|
maxHealth = 1
|
|
1466
1566
|
end
|
|
1467
|
-
BlzSetUnitMaxHP(self.handle, maxHealth + (self[
|
|
1567
|
+
BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
|
|
1468
1568
|
end
|
|
1469
1569
|
},
|
|
1470
1570
|
true
|
|
@@ -1506,10 +1606,10 @@ __TS__SetDescriptor(
|
|
|
1506
1606
|
"health",
|
|
1507
1607
|
{
|
|
1508
1608
|
get = function(self)
|
|
1509
|
-
return GetWidgetLife(self.handle) - (self[
|
|
1609
|
+
return GetWidgetLife(self.handle) - (self[106] or 0)
|
|
1510
1610
|
end,
|
|
1511
1611
|
set = function(self, health)
|
|
1512
|
-
SetWidgetLife(self.handle, health + (self[
|
|
1612
|
+
SetWidgetLife(self.handle, health + (self[106] or 0))
|
|
1513
1613
|
end
|
|
1514
1614
|
},
|
|
1515
1615
|
true
|
|
@@ -1585,25 +1685,12 @@ __TS__SetDescriptor(
|
|
|
1585
1685
|
},
|
|
1586
1686
|
true
|
|
1587
1687
|
)
|
|
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
1688
|
__TS__SetDescriptor(
|
|
1602
1689
|
Unit.prototype,
|
|
1603
1690
|
"x",
|
|
1604
1691
|
{
|
|
1605
1692
|
get = function(self)
|
|
1606
|
-
return self[
|
|
1693
|
+
return self[108] or getUnitX(self.handle)
|
|
1607
1694
|
end,
|
|
1608
1695
|
set = function(self, v)
|
|
1609
1696
|
SetUnitX(self.handle, v)
|
|
@@ -1616,7 +1703,7 @@ __TS__SetDescriptor(
|
|
|
1616
1703
|
"y",
|
|
1617
1704
|
{
|
|
1618
1705
|
get = function(self)
|
|
1619
|
-
return self[
|
|
1706
|
+
return self[109] or getUnitY(self.handle)
|
|
1620
1707
|
end,
|
|
1621
1708
|
set = function(self, v)
|
|
1622
1709
|
SetUnitY(self.handle, v)
|
|
@@ -1702,10 +1789,10 @@ __TS__SetDescriptor(
|
|
|
1702
1789
|
"gold",
|
|
1703
1790
|
{
|
|
1704
1791
|
get = function(self)
|
|
1705
|
-
return
|
|
1792
|
+
return GetResourceAmount(self.handle)
|
|
1706
1793
|
end,
|
|
1707
1794
|
set = function(self, gold)
|
|
1708
|
-
|
|
1795
|
+
SetResourceAmount(self.handle, gold)
|
|
1709
1796
|
end
|
|
1710
1797
|
},
|
|
1711
1798
|
true
|
|
@@ -1721,14 +1808,18 @@ __TS__SetDescriptor(
|
|
|
1721
1808
|
local handle = self.handle
|
|
1722
1809
|
if isPaused and not IsUnitPaused(handle) then
|
|
1723
1810
|
self[101] = true
|
|
1724
|
-
|
|
1725
|
-
|
|
1811
|
+
if (self[103] or 0) <= 0 then
|
|
1812
|
+
for _ = self[102] or 0, -1 do
|
|
1813
|
+
BlzPauseUnitEx(handle, true)
|
|
1814
|
+
end
|
|
1726
1815
|
end
|
|
1727
1816
|
PauseUnit(handle, true)
|
|
1728
1817
|
elseif not isPaused and IsUnitPaused(handle) then
|
|
1729
1818
|
PauseUnit(handle, false)
|
|
1730
|
-
|
|
1731
|
-
|
|
1819
|
+
if (self[103] or 0) <= 0 then
|
|
1820
|
+
for _ = self[102] or 0, -1 do
|
|
1821
|
+
BlzPauseUnitEx(handle, false)
|
|
1822
|
+
end
|
|
1732
1823
|
end
|
|
1733
1824
|
self[101] = nil
|
|
1734
1825
|
end
|
|
@@ -1786,20 +1877,6 @@ __TS__SetDescriptor(
|
|
|
1786
1877
|
},
|
|
1787
1878
|
true
|
|
1788
1879
|
)
|
|
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
1880
|
__TS__SetDescriptor(
|
|
1804
1881
|
Unit.prototype,
|
|
1805
1882
|
"timeScale",
|
|
@@ -1833,6 +1910,19 @@ __TS__SetDescriptor(
|
|
|
1833
1910
|
end},
|
|
1834
1911
|
true
|
|
1835
1912
|
)
|
|
1913
|
+
__TS__SetDescriptor(
|
|
1914
|
+
Unit.prototype,
|
|
1915
|
+
"movementType",
|
|
1916
|
+
{
|
|
1917
|
+
get = function(self)
|
|
1918
|
+
return getUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE)
|
|
1919
|
+
end,
|
|
1920
|
+
set = function(self, movementType)
|
|
1921
|
+
setUnitIntegerField(self.handle, UNIT_IF_MOVE_TYPE, movementType)
|
|
1922
|
+
end
|
|
1923
|
+
},
|
|
1924
|
+
true
|
|
1925
|
+
)
|
|
1836
1926
|
__TS__SetDescriptor(
|
|
1837
1927
|
Unit.prototype,
|
|
1838
1928
|
"pathing",
|
|
@@ -2014,6 +2104,14 @@ __TS__SetDescriptor(
|
|
|
2014
2104
|
end},
|
|
2015
2105
|
true
|
|
2016
2106
|
)
|
|
2107
|
+
__TS__SetDescriptor(
|
|
2108
|
+
Unit.prototype,
|
|
2109
|
+
"targetAcquiredEvent",
|
|
2110
|
+
{get = function(self)
|
|
2111
|
+
return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
|
|
2112
|
+
end},
|
|
2113
|
+
true
|
|
2114
|
+
)
|
|
2017
2115
|
__TS__SetDescriptor(
|
|
2018
2116
|
Unit.prototype,
|
|
2019
2117
|
"onSelect",
|
|
@@ -2149,25 +2247,25 @@ Unit.onTargetCast = dispatchId(__TS__New(
|
|
|
2149
2247
|
InitializingEvent,
|
|
2150
2248
|
function(event)
|
|
2151
2249
|
local function listener(unit, id)
|
|
2152
|
-
local
|
|
2250
|
+
local ____GetSpellTargetUnit_result_10
|
|
2153
2251
|
if GetSpellTargetUnit() then
|
|
2154
|
-
|
|
2252
|
+
____GetSpellTargetUnit_result_10 = ____exports.Unit:of(GetSpellTargetUnit())
|
|
2155
2253
|
else
|
|
2156
|
-
local
|
|
2254
|
+
local ____GetSpellTargetItem_result_9
|
|
2157
2255
|
if GetSpellTargetItem() then
|
|
2158
|
-
|
|
2256
|
+
____GetSpellTargetItem_result_9 = Item:of(GetSpellTargetItem())
|
|
2159
2257
|
else
|
|
2160
|
-
local
|
|
2258
|
+
local ____GetSpellTargetDestructable_result_8
|
|
2161
2259
|
if GetSpellTargetDestructable() then
|
|
2162
|
-
|
|
2260
|
+
____GetSpellTargetDestructable_result_8 = Destructable:of(GetSpellTargetDestructable())
|
|
2163
2261
|
else
|
|
2164
|
-
|
|
2262
|
+
____GetSpellTargetDestructable_result_8 = nil
|
|
2165
2263
|
end
|
|
2166
|
-
|
|
2264
|
+
____GetSpellTargetItem_result_9 = ____GetSpellTargetDestructable_result_8
|
|
2167
2265
|
end
|
|
2168
|
-
|
|
2266
|
+
____GetSpellTargetUnit_result_10 = ____GetSpellTargetItem_result_9
|
|
2169
2267
|
end
|
|
2170
|
-
local target =
|
|
2268
|
+
local target = ____GetSpellTargetUnit_result_10
|
|
2171
2269
|
if target then
|
|
2172
2270
|
invoke(event, unit, id, target)
|
|
2173
2271
|
end
|
|
@@ -2375,38 +2473,57 @@ Unit.onDamaging = (function()
|
|
|
2375
2473
|
if source and source.typeId == dummyUnitId then
|
|
2376
2474
|
source = nil
|
|
2377
2475
|
end
|
|
2378
|
-
local target = BlzGetEventDamageTarget()
|
|
2476
|
+
local target = ____exports.Unit:of(BlzGetEventDamageTarget())
|
|
2477
|
+
local metadata = damageMetadataByTarget[target]
|
|
2478
|
+
damageMetadataByTarget[target] = nil
|
|
2379
2479
|
local data = {
|
|
2380
2480
|
amount = GetEventDamage(),
|
|
2381
|
-
attackType = BlzGetEventAttackType(),
|
|
2481
|
+
attackType = nativeToAttackType(BlzGetEventAttackType()),
|
|
2382
2482
|
damageType = BlzGetEventDamageType(),
|
|
2383
2483
|
weaponType = BlzGetEventWeaponType(),
|
|
2384
|
-
|
|
2484
|
+
metadata = metadata,
|
|
2485
|
+
isAttack = BlzGetEventIsAttack(),
|
|
2486
|
+
originalAmount = GetEventDamage(),
|
|
2487
|
+
originalMetadata = metadata,
|
|
2488
|
+
preventRetaliation = damagingEventPreventRetaliation
|
|
2385
2489
|
}
|
|
2386
2490
|
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])
|
|
2491
|
+
data.weapon = source:chooseWeapon(target)
|
|
2393
2492
|
end
|
|
2394
2493
|
if not data.isAttack or not source or not source._attackHandlers then
|
|
2395
2494
|
invoke(
|
|
2396
2495
|
event,
|
|
2397
2496
|
source,
|
|
2398
|
-
|
|
2497
|
+
target,
|
|
2399
2498
|
setmetatable(
|
|
2400
2499
|
{},
|
|
2401
2500
|
{
|
|
2402
2501
|
__index = data,
|
|
2403
2502
|
__newindex = function(self, key, value)
|
|
2404
|
-
damageSetters[key]
|
|
2503
|
+
local damageSetter = damageSetters[key]
|
|
2504
|
+
if damageSetter ~= nil then
|
|
2505
|
+
damageSetter(value)
|
|
2506
|
+
end
|
|
2405
2507
|
data[key] = value
|
|
2406
2508
|
end
|
|
2407
2509
|
}
|
|
2408
2510
|
)
|
|
2409
2511
|
)
|
|
2512
|
+
if data[0] and source then
|
|
2513
|
+
local sourceOwner = source.owner.handle
|
|
2514
|
+
data[1] = sourceOwner
|
|
2515
|
+
local targetOwner = target.owner.handle
|
|
2516
|
+
data[2] = targetOwner
|
|
2517
|
+
if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
|
|
2518
|
+
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
|
|
2519
|
+
data[3] = true
|
|
2520
|
+
end
|
|
2521
|
+
if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
|
|
2522
|
+
SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
|
|
2523
|
+
data[4] = true
|
|
2524
|
+
end
|
|
2525
|
+
end
|
|
2526
|
+
damagingEventByTarget[target] = data
|
|
2410
2527
|
return
|
|
2411
2528
|
end
|
|
2412
2529
|
BlzSetEventDamage(0)
|
|
@@ -2414,7 +2531,7 @@ Unit.onDamaging = (function()
|
|
|
2414
2531
|
BlzSetEventDamageType(DAMAGE_TYPE_UNKNOWN)
|
|
2415
2532
|
BlzSetEventWeaponType(WEAPON_TYPE_WHOKNOWS)
|
|
2416
2533
|
local sourceOwner = source.owner.handle
|
|
2417
|
-
local targetOwner =
|
|
2534
|
+
local targetOwner = target.owner.handle
|
|
2418
2535
|
if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
|
|
2419
2536
|
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
|
|
2420
2537
|
Timer:run(function()
|
|
@@ -2430,23 +2547,19 @@ Unit.onDamaging = (function()
|
|
|
2430
2547
|
for ____, ____value in ipairs(source._attackHandlers) do
|
|
2431
2548
|
local condition = ____value[1]
|
|
2432
2549
|
local action = ____value[2]
|
|
2433
|
-
if condition(
|
|
2434
|
-
source,
|
|
2435
|
-
____exports.Unit:of(target),
|
|
2436
|
-
data
|
|
2437
|
-
) then
|
|
2550
|
+
if condition(source, target, data) then
|
|
2438
2551
|
action(
|
|
2439
2552
|
source,
|
|
2440
|
-
|
|
2553
|
+
target,
|
|
2441
2554
|
setmetatable(
|
|
2442
2555
|
{fire = function()
|
|
2443
2556
|
UnitDamageTarget(
|
|
2444
2557
|
source.handle,
|
|
2445
|
-
target,
|
|
2558
|
+
target.handle,
|
|
2446
2559
|
data.amount,
|
|
2447
2560
|
true,
|
|
2448
2561
|
true,
|
|
2449
|
-
data.attackType,
|
|
2562
|
+
attackTypeToNative(data.attackType),
|
|
2450
2563
|
data.damageType,
|
|
2451
2564
|
data.weaponType
|
|
2452
2565
|
)
|
|
@@ -2473,30 +2586,54 @@ Unit.onDamage = __TS__New(
|
|
|
2473
2586
|
if source and source.typeId == dummyUnitId then
|
|
2474
2587
|
source = nil
|
|
2475
2588
|
end
|
|
2589
|
+
local target = ____exports.Unit:of(BlzGetEventDamageTarget())
|
|
2590
|
+
local damagingEvent = damagingEventByTarget[target]
|
|
2591
|
+
damagingEventByTarget[target] = nil
|
|
2476
2592
|
local data = {
|
|
2477
2593
|
amount = GetEventDamage(),
|
|
2478
|
-
attackType = BlzGetEventAttackType(),
|
|
2594
|
+
attackType = nativeToAttackType(BlzGetEventAttackType()),
|
|
2479
2595
|
damageType = BlzGetEventDamageType(),
|
|
2480
2596
|
weaponType = BlzGetEventWeaponType(),
|
|
2597
|
+
metadata = damagingEvent and damagingEvent.metadata,
|
|
2481
2598
|
isAttack = BlzGetEventIsAttack(),
|
|
2482
|
-
originalAmount = GetEventDamage(),
|
|
2599
|
+
originalAmount = damagingEvent and damagingEvent.originalAmount or GetEventDamage(),
|
|
2600
|
+
originalMetadata = damagingEvent and damagingEvent.originalMetadata,
|
|
2483
2601
|
preventDeath = damageEventPreventDeath
|
|
2484
2602
|
}
|
|
2603
|
+
if damagingEvent then
|
|
2604
|
+
for key, value in pairs(damagingEvent) do
|
|
2605
|
+
if isAttribute(key) then
|
|
2606
|
+
data[key] = value
|
|
2607
|
+
end
|
|
2608
|
+
end
|
|
2609
|
+
local sourceOwner = damagingEvent[1]
|
|
2610
|
+
if sourceOwner then
|
|
2611
|
+
local targetOwner = damagingEvent[2]
|
|
2612
|
+
if damagingEvent[3] then
|
|
2613
|
+
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
|
|
2614
|
+
end
|
|
2615
|
+
if damagingEvent[4] then
|
|
2616
|
+
SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
|
|
2617
|
+
end
|
|
2618
|
+
end
|
|
2619
|
+
end
|
|
2485
2620
|
local evData = setmetatable(
|
|
2486
2621
|
{},
|
|
2487
2622
|
{
|
|
2488
2623
|
__index = data,
|
|
2489
2624
|
__newindex = function(self, key, value)
|
|
2490
|
-
damageSetters[key]
|
|
2625
|
+
local damageSetter = damageSetters[key]
|
|
2626
|
+
if damageSetter ~= nil then
|
|
2627
|
+
damageSetter(value)
|
|
2628
|
+
end
|
|
2491
2629
|
data[key] = value
|
|
2492
2630
|
end
|
|
2493
2631
|
}
|
|
2494
2632
|
)
|
|
2495
|
-
local target = ____exports.Unit:of(BlzGetEventDamageTarget())
|
|
2496
2633
|
invoke(event, source, target, evData)
|
|
2497
2634
|
if evData[0] ~= nil and target.health - evData.amount < 0.405 then
|
|
2498
2635
|
local bonusHealth = math.ceil(evData.amount)
|
|
2499
|
-
target[
|
|
2636
|
+
target[106] = (target[106] or 0) + bonusHealth
|
|
2500
2637
|
BlzSetUnitMaxHP(
|
|
2501
2638
|
target.handle,
|
|
2502
2639
|
BlzGetUnitMaxHP(target.handle) + bonusHealth
|
|
@@ -2510,7 +2647,7 @@ Unit.onDamage = __TS__New(
|
|
|
2510
2647
|
evData[0],
|
|
2511
2648
|
table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
|
|
2512
2649
|
)
|
|
2513
|
-
target[
|
|
2650
|
+
target[106] = (target[106] or 0) - bonusHealth
|
|
2514
2651
|
SetWidgetLife(
|
|
2515
2652
|
target.handle,
|
|
2516
2653
|
GetWidgetLife(target.handle) - bonusHealth
|
|
@@ -2546,10 +2683,14 @@ Unit.itemPickedUpEvent = __TS__New(
|
|
|
2546
2683
|
____exports.UnitTriggerEvent,
|
|
2547
2684
|
EVENT_PLAYER_UNIT_PICKUP_ITEM,
|
|
2548
2685
|
function()
|
|
2549
|
-
local
|
|
2550
|
-
local
|
|
2551
|
-
if getUnitTypeId(
|
|
2552
|
-
|
|
2686
|
+
local unitHandle = getTriggerUnit()
|
|
2687
|
+
local itemHandle = getManipulatedItem()
|
|
2688
|
+
if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
|
|
2689
|
+
local unit = ____exports.Unit:of(unitHandle)
|
|
2690
|
+
local item = Item:of(itemHandle)
|
|
2691
|
+
if item.owner ~= unit then
|
|
2692
|
+
return unit, item
|
|
2693
|
+
end
|
|
2553
2694
|
end
|
|
2554
2695
|
return IgnoreEvent
|
|
2555
2696
|
end
|
|
@@ -2569,7 +2710,22 @@ Unit.itemUsedEvent = __TS__New(
|
|
|
2569
2710
|
Unit.itemStackedEvent = __TS__New(
|
|
2570
2711
|
____exports.UnitTriggerEvent,
|
|
2571
2712
|
EVENT_PLAYER_UNIT_STACK_ITEM,
|
|
2572
|
-
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(
|
|
2713
|
+
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
|
|
2714
|
+
)
|
|
2715
|
+
__TS__ObjectDefineProperty(
|
|
2716
|
+
Unit,
|
|
2717
|
+
"itemChargesChangedEvent",
|
|
2718
|
+
{get = function(self)
|
|
2719
|
+
local event = __TS__New(Event)
|
|
2720
|
+
Item.chargesChangedEvent:addListener(function(item)
|
|
2721
|
+
local unit = item.owner
|
|
2722
|
+
if unit ~= nil then
|
|
2723
|
+
invoke(event, unit, item)
|
|
2724
|
+
end
|
|
2725
|
+
end)
|
|
2726
|
+
rawset(self, "itemChargesChangedEvent", event)
|
|
2727
|
+
return event
|
|
2728
|
+
end}
|
|
2573
2729
|
)
|
|
2574
2730
|
__TS__ObjectDefineProperty(
|
|
2575
2731
|
Unit,
|
|
@@ -2641,6 +2797,10 @@ __TS__ObjectDefineProperty(
|
|
|
2641
2797
|
rawset(self, "destroyEvent", destroyEvent)
|
|
2642
2798
|
return destroyEvent
|
|
2643
2799
|
end}
|
|
2800
|
+
)
|
|
2801
|
+
Unit.synchronize = synchronizer(
|
|
2802
|
+
function(unit) return unit.syncId end,
|
|
2803
|
+
function(syncId) return unitBySyncId[syncId] end
|
|
2644
2804
|
);
|
|
2645
2805
|
(function(self)
|
|
2646
2806
|
local leaveAbilityIds = postcompile(function()
|