warscript 0.0.1-dev.f0a9ffe → 0.0.1-dev.f0daa48
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 +1 -0
- package/attributes.lua +9 -0
- 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 +1 -1
- package/core/types/tileCell.d.ts +11 -1
- package/core/types/tileCell.lua +97 -0
- package/core/types/timer.d.ts +3 -2
- package/core/types/timer.lua +22 -2
- package/decl/native.d.ts +2 -2
- package/destroyable.d.ts +1 -0
- package/destroyable.lua +9 -0
- package/engine/behavior.d.ts +12 -1
- package/engine/behavior.lua +199 -65
- package/engine/behaviour/ability/apply-buff.lua +4 -4
- package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
- package/engine/behaviour/ability/remove-buffs.lua +21 -0
- package/engine/behaviour/ability.d.ts +11 -6
- package/engine/behaviour/ability.lua +31 -1
- package/engine/behaviour/unit/stun-immunity.d.ts +9 -5
- package/engine/behaviour/unit/stun-immunity.lua +17 -7
- package/engine/behaviour/unit.d.ts +15 -5
- package/engine/behaviour/unit.lua +126 -22
- package/engine/buff.d.ts +64 -21
- package/engine/buff.lua +360 -178
- package/engine/internal/ability.d.ts +3 -1
- package/engine/internal/ability.lua +26 -9
- package/engine/internal/item+owner.lua +12 -6
- package/engine/internal/item.d.ts +13 -15
- package/engine/internal/item.lua +63 -49
- package/engine/internal/mechanics/cast-ability.lua +6 -3
- 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/armor-bonus.d.ts +2 -0
- package/engine/internal/object-data/attribute-bonus.lua +2 -2
- package/engine/internal/object-data/health-bonus.d.ts +2 -0
- package/engine/internal/object-data/health-bonus.lua +16 -0
- package/engine/internal/object-data/mana-bonus.d.ts +2 -0
- package/engine/internal/object-data/mana-bonus.lua +16 -0
- package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
- package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
- package/engine/internal/unit/ability.d.ts +14 -14
- package/engine/internal/unit/ability.lua +72 -45
- package/engine/internal/unit/attributes.d.ts +17 -0
- package/engine/internal/unit/attributes.lua +46 -0
- package/engine/internal/unit/bonus.d.ts +6 -0
- package/engine/internal/unit/bonus.lua +33 -3
- 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/item.lua +1 -1
- package/engine/internal/unit/main-selected.lua +12 -27
- package/engine/internal/unit/range-event.d.ts +12 -0
- package/engine/internal/unit/range-event.lua +90 -0
- package/engine/internal/unit/scale.d.ts +7 -0
- package/engine/internal/unit/scale.lua +20 -0
- package/engine/internal/unit+ability.lua +10 -1
- package/engine/internal/unit+bonus.lua +3 -3
- package/engine/internal/unit-missile-launch.lua +51 -20
- package/engine/internal/unit.d.ts +18 -22
- package/engine/internal/unit.lua +179 -200
- package/engine/local-client.d.ts +2 -0
- package/engine/local-client.lua +30 -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/unit-attribute.lua +1 -1
- package/engine/object-data/entry/ability-type/{armor-increase.d.ts → armor-bonus.d.ts} +3 -3
- package/engine/object-data/entry/ability-type/{armor-increase.lua → armor-bonus.lua} +9 -9
- package/engine/object-data/entry/ability-type/health-bonus.d.ts +8 -0
- package/engine/object-data/entry/ability-type/health-bonus.lua +26 -0
- package/engine/object-data/entry/ability-type/mana-bonus.d.ts +8 -0
- package/engine/object-data/entry/ability-type/mana-bonus.lua +26 -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/reincarnation.d.ts +8 -0
- package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
- package/engine/object-data/entry/ability-type.d.ts +2 -0
- package/engine/object-data/entry/ability-type.lua +88 -5
- package/engine/object-data/entry/buff-type/applicable.lua +113 -109
- 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 +4 -0
- package/engine/object-data/entry/unit-type.lua +76 -32
- package/engine/object-field/ability.d.ts +3 -3
- package/engine/object-field/ability.lua +9 -8
- package/engine/object-field/unit.d.ts +20 -5
- package/engine/object-field/unit.lua +61 -0
- package/engine/object-field.d.ts +12 -4
- package/engine/object-field.lua +273 -126
- package/engine/random.d.ts +10 -0
- package/engine/random.lua +21 -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 +11 -3
- package/engine/standard/fields/unit.lua +15 -2
- package/engine/synchronization.d.ts +11 -0
- package/engine/synchronization.lua +77 -0
- package/engine/text-tag.d.ts +1 -1
- package/engine/text-tag.lua +92 -17
- package/engine/unit.d.ts +5 -0
- package/engine/unit.lua +5 -0
- package/lualib_bundle.lua +118 -47
- package/net/socket.lua +1 -1
- package/objutil/buff.lua +10 -8
- package/objutil/object.lua +1 -1
- package/operation.lua +23 -17
- package/package.json +5 -5
- package/patch-lua.lua +15 -0
- package/patch-lualib.lua +1 -1
- package/utility/arrays.d.ts +1 -0
- package/utility/arrays.lua +8 -0
- package/utility/callback-array.d.ts +17 -0
- package/utility/callback-array.lua +61 -0
- package/utility/linked-map.d.ts +34 -0
- package/utility/linked-map.lua +101 -0
- package/utility/linked-set.d.ts +3 -1
- package/utility/linked-set.lua +40 -1
- package/utility/lua-maps.d.ts +11 -2
- package/utility/lua-maps.lua +33 -2
- package/utility/records.lua +20 -1
- package/utility/types.d.ts +3 -0
- /package/engine/internal/{object-data/armor-increase.d.ts → misc/frame-coordinates.d.ts} +0 -0
- /package/engine/internal/object-data/{armor-increase.lua → armor-bonus.lua} +0 -0
- /package/engine/object-data/entry/ability-type/{attribute-increase.d.ts → attribute-bonus.d.ts} +0 -0
- /package/engine/object-data/entry/ability-type/{attribute-increase.lua → attribute-bonus.lua} +0 -0
package/engine/internal/unit.lua
CHANGED
|
@@ -62,6 +62,10 @@ local ____attributes = require("attributes")
|
|
|
62
62
|
local isAttribute = ____attributes.isAttribute
|
|
63
63
|
local ____ability = require("engine.internal.item.ability")
|
|
64
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
|
|
65
69
|
local match = string.match
|
|
66
70
|
local ____tostring = _G.tostring
|
|
67
71
|
local setUnitAnimation = SetUnitAnimation
|
|
@@ -71,16 +75,12 @@ local getUnitRealField = BlzGetUnitRealField
|
|
|
71
75
|
local getHeroStr = GetHeroStr
|
|
72
76
|
local getHeroAgi = GetHeroAgi
|
|
73
77
|
local getHeroInt = GetHeroInt
|
|
74
|
-
local setHeroStr = SetHeroStr
|
|
75
|
-
local setHeroAgi = SetHeroAgi
|
|
76
|
-
local setHeroInt = SetHeroInt
|
|
77
78
|
local getUnitBooleanField = BlzGetUnitBooleanField
|
|
78
79
|
local getUnitStringField = BlzGetUnitStringField
|
|
79
80
|
local setUnitIntegerField = BlzSetUnitIntegerField
|
|
80
81
|
local setUnitRealField = BlzSetUnitRealField
|
|
81
82
|
local setUnitBooleanField = BlzSetUnitBooleanField
|
|
82
83
|
local setUnitStringField = BlzSetUnitStringField
|
|
83
|
-
local setUnitScale = SetUnitScale
|
|
84
84
|
local setUnitPosition = SetUnitPosition
|
|
85
85
|
local setUnitTimeScale = SetUnitTimeScale
|
|
86
86
|
local getHandleId = GetHandleId
|
|
@@ -108,7 +108,6 @@ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
|
|
|
108
108
|
local setUnitWeaponStringField = BlzSetUnitWeaponStringField
|
|
109
109
|
local getUnitAbilityLevel = GetUnitAbilityLevel
|
|
110
110
|
local unitDisableAbility = BlzUnitDisableAbility
|
|
111
|
-
local unitInterruptAttack = BlzUnitInterruptAttack
|
|
112
111
|
local isUnitInvisible = IsUnitInvisible
|
|
113
112
|
local isUnitVisible = IsUnitVisible
|
|
114
113
|
local getUnitX = GetUnitX
|
|
@@ -384,15 +383,27 @@ local modifiers = {
|
|
|
384
383
|
end,
|
|
385
384
|
armor = function(unit, value)
|
|
386
385
|
if UnitAddAbility(unit, armorBonusAbilityId) then
|
|
387
|
-
assert(
|
|
386
|
+
assert(
|
|
387
|
+
UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
|
|
388
|
+
"armor bonus ability must be made permanent",
|
|
389
|
+
unit
|
|
390
|
+
)
|
|
388
391
|
end
|
|
389
|
-
local ability = assert(
|
|
390
|
-
|
|
391
|
-
ability,
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
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
|
+
)
|
|
396
407
|
end
|
|
397
408
|
}
|
|
398
409
|
local getters = {
|
|
@@ -410,6 +421,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
|
|
|
410
421
|
self.unit = unit
|
|
411
422
|
self.index = index
|
|
412
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
|
+
)
|
|
413
437
|
__TS__SetDescriptor(
|
|
414
438
|
UnitWeapon.prototype,
|
|
415
439
|
"cooldown",
|
|
@@ -633,26 +657,30 @@ local fieldSetters = {
|
|
|
633
657
|
}
|
|
634
658
|
local dummies = {}
|
|
635
659
|
for ____, player in ipairs(Player.all) do
|
|
636
|
-
local dummy = assert(
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
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
|
+
)
|
|
643
671
|
ShowUnit(dummy, false)
|
|
644
672
|
dummies[player] = dummy
|
|
645
673
|
end
|
|
646
674
|
local function delayHealthChecksCallback(unit)
|
|
647
|
-
local counter = (unit[
|
|
675
|
+
local counter = (unit[104] or 0) - 1
|
|
648
676
|
if counter ~= 0 then
|
|
649
|
-
unit[
|
|
677
|
+
unit[104] = counter
|
|
650
678
|
return
|
|
651
679
|
end
|
|
652
|
-
unit[
|
|
653
|
-
local healthBonus = unit[
|
|
680
|
+
unit[104] = nil
|
|
681
|
+
local healthBonus = unit[105]
|
|
654
682
|
if healthBonus ~= nil then
|
|
655
|
-
unit[
|
|
683
|
+
unit[105] = nil
|
|
656
684
|
local handle = unit.handle
|
|
657
685
|
BlzSetUnitMaxHP(
|
|
658
686
|
handle,
|
|
@@ -682,41 +710,57 @@ function Unit.prototype.____constructor(self, handle)
|
|
|
682
710
|
nextSyncId = ____nextSyncId_1 + 1
|
|
683
711
|
self.syncId = ____nextSyncId_1
|
|
684
712
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
685
|
-
assert(
|
|
686
|
-
|
|
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
|
+
)
|
|
687
723
|
if unitAddAbility(
|
|
688
724
|
handle,
|
|
689
725
|
fourCC("Amrf")
|
|
690
726
|
) then
|
|
691
|
-
assert(
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
727
|
+
assert(
|
|
728
|
+
unitRemoveAbility(
|
|
729
|
+
handle,
|
|
730
|
+
fourCC("Amrf")
|
|
731
|
+
),
|
|
732
|
+
"fly ability must be removed after addition",
|
|
733
|
+
self
|
|
734
|
+
)
|
|
695
735
|
end
|
|
696
736
|
unitBySyncId[self.syncId] = self
|
|
697
737
|
local ____ = self.abilities
|
|
698
738
|
end
|
|
699
|
-
function Unit.prototype.getEvent(self,
|
|
700
|
-
self.events = self.events or (
|
|
701
|
-
local eventId = GetHandleId(
|
|
702
|
-
|
|
703
|
-
|
|
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(
|
|
704
745
|
TriggerEvent,
|
|
705
746
|
function(trigger)
|
|
706
|
-
TriggerRegisterUnitEvent(trigger, self.handle,
|
|
747
|
+
TriggerRegisterUnitEvent(trigger, self.handle, jevent)
|
|
707
748
|
end,
|
|
708
749
|
collector or (function() return {} end)
|
|
709
750
|
)
|
|
751
|
+
self.events:put(eventId, event)
|
|
710
752
|
end
|
|
711
|
-
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))
|
|
712
760
|
end
|
|
713
761
|
function Unit.prototype.onDestroy(self)
|
|
714
762
|
local handle = self.handle
|
|
715
|
-
self
|
|
716
|
-
self[108] = getUnitY(handle)
|
|
717
|
-
if not self._owner then
|
|
718
|
-
self._owner = Player:of(getOwningPlayer(handle))
|
|
719
|
-
end
|
|
763
|
+
self:saveData()
|
|
720
764
|
local abilities = self.abilities
|
|
721
765
|
for ____, ability in ipairs(abilities) do
|
|
722
766
|
ability:destroy()
|
|
@@ -752,7 +796,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
|
|
|
752
796
|
self._attackHandlers = handlers
|
|
753
797
|
if #handlers == 1 then
|
|
754
798
|
local handle = self.handle
|
|
755
|
-
assert(
|
|
799
|
+
assert(
|
|
800
|
+
unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
|
|
801
|
+
"attack handler ability must be added",
|
|
802
|
+
self
|
|
803
|
+
)
|
|
756
804
|
end
|
|
757
805
|
return handler
|
|
758
806
|
end
|
|
@@ -836,16 +884,18 @@ function Unit.prototype.queueAnimation(self, animation)
|
|
|
836
884
|
QueueUnitAnimation(self.handle, animation)
|
|
837
885
|
end
|
|
838
886
|
function Unit.prototype.chooseWeapon(self, target)
|
|
839
|
-
|
|
840
|
-
|
|
887
|
+
local firstWeapon = self.firstWeapon
|
|
888
|
+
if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
|
|
889
|
+
return firstWeapon
|
|
841
890
|
end
|
|
842
|
-
|
|
843
|
-
|
|
891
|
+
local secondWeapon = self.secondWeapon
|
|
892
|
+
if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
|
|
893
|
+
return secondWeapon
|
|
844
894
|
end
|
|
845
895
|
return nil
|
|
846
896
|
end
|
|
847
897
|
function Unit.prototype.delayHealthChecks(self)
|
|
848
|
-
self[
|
|
898
|
+
self[104] = (self[104] or 0) + 1
|
|
849
899
|
Timer:run(delayHealthChecksCallback, self)
|
|
850
900
|
end
|
|
851
901
|
function Unit.prototype.setPosition(self, x, y)
|
|
@@ -935,23 +985,21 @@ end
|
|
|
935
985
|
function Unit.prototype.hasAbility(self, abilityId)
|
|
936
986
|
return getUnitAbilityLevel(self.handle, abilityId) > 0
|
|
937
987
|
end
|
|
938
|
-
function Unit.prototype.
|
|
988
|
+
function Unit.prototype.getAbility(self, abilityId)
|
|
939
989
|
local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
|
|
940
990
|
return UnitAbility:of(ability, abilityId, self)
|
|
941
991
|
end
|
|
942
|
-
function Unit.prototype.removeAbility(self,
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
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
|
|
951
1000
|
end
|
|
952
|
-
return true
|
|
953
1001
|
end
|
|
954
|
-
return
|
|
1002
|
+
return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
|
|
955
1003
|
end
|
|
956
1004
|
function Unit.prototype.hideAbility(self, abilityId, flag)
|
|
957
1005
|
BlzUnitHideAbility(self.handle, abilityId, flag)
|
|
@@ -965,24 +1013,6 @@ end
|
|
|
965
1013
|
function Unit.prototype.endAbilityCooldown(self, abilityId)
|
|
966
1014
|
BlzEndUnitAbilityCooldown(self.handle, abilityId)
|
|
967
1015
|
end
|
|
968
|
-
function Unit.prototype.interruptMovement(self)
|
|
969
|
-
local handle = self.handle
|
|
970
|
-
unitDisableAbility(
|
|
971
|
-
handle,
|
|
972
|
-
fourCC("Amov"),
|
|
973
|
-
true,
|
|
974
|
-
false
|
|
975
|
-
)
|
|
976
|
-
unitDisableAbility(
|
|
977
|
-
handle,
|
|
978
|
-
fourCC("Amov"),
|
|
979
|
-
false,
|
|
980
|
-
false
|
|
981
|
-
)
|
|
982
|
-
end
|
|
983
|
-
function Unit.prototype.interruptAttack(self)
|
|
984
|
-
unitInterruptAttack(self.handle)
|
|
985
|
-
end
|
|
986
1016
|
function Unit.prototype.interruptCast(self, abilityId)
|
|
987
1017
|
local handle = self.handle
|
|
988
1018
|
unitDisableAbility(handle, abilityId, true, false)
|
|
@@ -1053,18 +1083,44 @@ function Unit.prototype.unpauseEx(self)
|
|
|
1053
1083
|
end
|
|
1054
1084
|
function Unit.prototype.incrementStunCounter(self)
|
|
1055
1085
|
local stunCounter = self[102] or 0
|
|
1056
|
-
if not self[101] or stunCounter >= 0 then
|
|
1086
|
+
if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
|
|
1057
1087
|
BlzPauseUnitEx(self.handle, true)
|
|
1058
1088
|
end
|
|
1059
1089
|
self[102] = stunCounter + 1
|
|
1060
1090
|
end
|
|
1061
1091
|
function Unit.prototype.decrementStunCounter(self)
|
|
1062
1092
|
local stunCounter = self[102] or 0
|
|
1063
|
-
if not self[101] or stunCounter >= 1 then
|
|
1093
|
+
if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
|
|
1064
1094
|
BlzPauseUnitEx(self.handle, false)
|
|
1065
1095
|
end
|
|
1066
1096
|
self[102] = stunCounter - 1
|
|
1067
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
|
|
1068
1124
|
function Unit.create(self, owner, id, x, y, facing, skinId)
|
|
1069
1125
|
local handle = skinId and BlzCreateUnitWithSkin(
|
|
1070
1126
|
owner.handle,
|
|
@@ -1351,19 +1407,6 @@ __TS__SetDescriptor(
|
|
|
1351
1407
|
},
|
|
1352
1408
|
true
|
|
1353
1409
|
)
|
|
1354
|
-
__TS__SetDescriptor(
|
|
1355
|
-
Unit.prototype,
|
|
1356
|
-
"strengthBase",
|
|
1357
|
-
{
|
|
1358
|
-
get = function(self)
|
|
1359
|
-
return getHeroStr(self.handle, false)
|
|
1360
|
-
end,
|
|
1361
|
-
set = function(self, strengthBase)
|
|
1362
|
-
setHeroStr(self.handle, strengthBase, true)
|
|
1363
|
-
end
|
|
1364
|
-
},
|
|
1365
|
-
true
|
|
1366
|
-
)
|
|
1367
1410
|
__TS__SetDescriptor(
|
|
1368
1411
|
Unit.prototype,
|
|
1369
1412
|
"strengthBonus",
|
|
@@ -1381,19 +1424,6 @@ __TS__SetDescriptor(
|
|
|
1381
1424
|
end},
|
|
1382
1425
|
true
|
|
1383
1426
|
)
|
|
1384
|
-
__TS__SetDescriptor(
|
|
1385
|
-
Unit.prototype,
|
|
1386
|
-
"agilityBase",
|
|
1387
|
-
{
|
|
1388
|
-
get = function(self)
|
|
1389
|
-
return getHeroAgi(self.handle, false)
|
|
1390
|
-
end,
|
|
1391
|
-
set = function(self, agilityBase)
|
|
1392
|
-
setHeroAgi(self.handle, agilityBase, true)
|
|
1393
|
-
end
|
|
1394
|
-
},
|
|
1395
|
-
true
|
|
1396
|
-
)
|
|
1397
1427
|
__TS__SetDescriptor(
|
|
1398
1428
|
Unit.prototype,
|
|
1399
1429
|
"agilityBonus",
|
|
@@ -1411,19 +1441,6 @@ __TS__SetDescriptor(
|
|
|
1411
1441
|
end},
|
|
1412
1442
|
true
|
|
1413
1443
|
)
|
|
1414
|
-
__TS__SetDescriptor(
|
|
1415
|
-
Unit.prototype,
|
|
1416
|
-
"intelligenceBase",
|
|
1417
|
-
{
|
|
1418
|
-
get = function(self)
|
|
1419
|
-
return getHeroInt(self.handle, false)
|
|
1420
|
-
end,
|
|
1421
|
-
set = function(self, intelligenceBase)
|
|
1422
|
-
setHeroInt(self.handle, intelligenceBase, true)
|
|
1423
|
-
end
|
|
1424
|
-
},
|
|
1425
|
-
true
|
|
1426
|
-
)
|
|
1427
1444
|
__TS__SetDescriptor(
|
|
1428
1445
|
Unit.prototype,
|
|
1429
1446
|
"intelligenceBonus",
|
|
@@ -1472,7 +1489,7 @@ __TS__SetDescriptor(
|
|
|
1472
1489
|
"isTeamGlowVisible",
|
|
1473
1490
|
{
|
|
1474
1491
|
get = function(self)
|
|
1475
|
-
return not self[
|
|
1492
|
+
return not self[107]
|
|
1476
1493
|
end,
|
|
1477
1494
|
set = function(self, isTeamGlowVisible)
|
|
1478
1495
|
BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
|
|
@@ -1482,7 +1499,7 @@ __TS__SetDescriptor(
|
|
|
1482
1499
|
else
|
|
1483
1500
|
____temp_7 = nil
|
|
1484
1501
|
end
|
|
1485
|
-
self[
|
|
1502
|
+
self[107] = ____temp_7
|
|
1486
1503
|
end
|
|
1487
1504
|
},
|
|
1488
1505
|
true
|
|
@@ -1492,7 +1509,7 @@ __TS__SetDescriptor(
|
|
|
1492
1509
|
"color",
|
|
1493
1510
|
{set = function(self, color)
|
|
1494
1511
|
SetUnitColor(self.handle, color.handle)
|
|
1495
|
-
if self[
|
|
1512
|
+
if self[107] then
|
|
1496
1513
|
BlzShowUnitTeamGlow(self.handle, false)
|
|
1497
1514
|
end
|
|
1498
1515
|
end},
|
|
@@ -1516,14 +1533,14 @@ __TS__SetDescriptor(
|
|
|
1516
1533
|
"maxHealth",
|
|
1517
1534
|
{
|
|
1518
1535
|
get = function(self)
|
|
1519
|
-
return BlzGetUnitMaxHP(self.handle) - (self[
|
|
1536
|
+
return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
|
|
1520
1537
|
end,
|
|
1521
1538
|
set = function(self, maxHealth)
|
|
1522
|
-
if maxHealth < 1 and self[
|
|
1523
|
-
self[
|
|
1539
|
+
if maxHealth < 1 and self[104] ~= nil then
|
|
1540
|
+
self[105] = (self[105] or 0) + (1 - maxHealth)
|
|
1524
1541
|
maxHealth = 1
|
|
1525
1542
|
end
|
|
1526
|
-
BlzSetUnitMaxHP(self.handle, maxHealth + (self[
|
|
1543
|
+
BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
|
|
1527
1544
|
end
|
|
1528
1545
|
},
|
|
1529
1546
|
true
|
|
@@ -1565,10 +1582,10 @@ __TS__SetDescriptor(
|
|
|
1565
1582
|
"health",
|
|
1566
1583
|
{
|
|
1567
1584
|
get = function(self)
|
|
1568
|
-
return GetWidgetLife(self.handle) - (self[
|
|
1585
|
+
return GetWidgetLife(self.handle) - (self[106] or 0)
|
|
1569
1586
|
end,
|
|
1570
1587
|
set = function(self, health)
|
|
1571
|
-
SetWidgetLife(self.handle, health + (self[
|
|
1588
|
+
SetWidgetLife(self.handle, health + (self[106] or 0))
|
|
1572
1589
|
end
|
|
1573
1590
|
},
|
|
1574
1591
|
true
|
|
@@ -1644,25 +1661,12 @@ __TS__SetDescriptor(
|
|
|
1644
1661
|
},
|
|
1645
1662
|
true
|
|
1646
1663
|
)
|
|
1647
|
-
__TS__SetDescriptor(
|
|
1648
|
-
Unit.prototype,
|
|
1649
|
-
"flyHeight",
|
|
1650
|
-
{
|
|
1651
|
-
get = function(self)
|
|
1652
|
-
return getUnitFlyHeight(self.handle)
|
|
1653
|
-
end,
|
|
1654
|
-
set = function(self, v)
|
|
1655
|
-
SetUnitFlyHeight(self.handle, v, 100000)
|
|
1656
|
-
end
|
|
1657
|
-
},
|
|
1658
|
-
true
|
|
1659
|
-
)
|
|
1660
1664
|
__TS__SetDescriptor(
|
|
1661
1665
|
Unit.prototype,
|
|
1662
1666
|
"x",
|
|
1663
1667
|
{
|
|
1664
1668
|
get = function(self)
|
|
1665
|
-
return self[
|
|
1669
|
+
return self[108] or getUnitX(self.handle)
|
|
1666
1670
|
end,
|
|
1667
1671
|
set = function(self, v)
|
|
1668
1672
|
SetUnitX(self.handle, v)
|
|
@@ -1675,7 +1679,7 @@ __TS__SetDescriptor(
|
|
|
1675
1679
|
"y",
|
|
1676
1680
|
{
|
|
1677
1681
|
get = function(self)
|
|
1678
|
-
return self[
|
|
1682
|
+
return self[109] or getUnitY(self.handle)
|
|
1679
1683
|
end,
|
|
1680
1684
|
set = function(self, v)
|
|
1681
1685
|
SetUnitY(self.handle, v)
|
|
@@ -1780,14 +1784,18 @@ __TS__SetDescriptor(
|
|
|
1780
1784
|
local handle = self.handle
|
|
1781
1785
|
if isPaused and not IsUnitPaused(handle) then
|
|
1782
1786
|
self[101] = true
|
|
1783
|
-
|
|
1784
|
-
|
|
1787
|
+
if (self[103] or 0) <= 0 then
|
|
1788
|
+
for _ = self[102] or 0, -1 do
|
|
1789
|
+
BlzPauseUnitEx(handle, true)
|
|
1790
|
+
end
|
|
1785
1791
|
end
|
|
1786
1792
|
PauseUnit(handle, true)
|
|
1787
1793
|
elseif not isPaused and IsUnitPaused(handle) then
|
|
1788
1794
|
PauseUnit(handle, false)
|
|
1789
|
-
|
|
1790
|
-
|
|
1795
|
+
if (self[103] or 0) <= 0 then
|
|
1796
|
+
for _ = self[102] or 0, -1 do
|
|
1797
|
+
BlzPauseUnitEx(handle, false)
|
|
1798
|
+
end
|
|
1791
1799
|
end
|
|
1792
1800
|
self[101] = nil
|
|
1793
1801
|
end
|
|
@@ -1845,20 +1853,6 @@ __TS__SetDescriptor(
|
|
|
1845
1853
|
},
|
|
1846
1854
|
true
|
|
1847
1855
|
)
|
|
1848
|
-
__TS__SetDescriptor(
|
|
1849
|
-
Unit.prototype,
|
|
1850
|
-
"scale",
|
|
1851
|
-
{
|
|
1852
|
-
get = function(self)
|
|
1853
|
-
return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
|
|
1854
|
-
end,
|
|
1855
|
-
set = function(self, v)
|
|
1856
|
-
setUnitScale(self.handle, v, v, v)
|
|
1857
|
-
setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
|
|
1858
|
-
end
|
|
1859
|
-
},
|
|
1860
|
-
true
|
|
1861
|
-
)
|
|
1862
1856
|
__TS__SetDescriptor(
|
|
1863
1857
|
Unit.prototype,
|
|
1864
1858
|
"timeScale",
|
|
@@ -1995,30 +1989,6 @@ __TS__SetDescriptor(
|
|
|
1995
1989
|
end},
|
|
1996
1990
|
true
|
|
1997
1991
|
)
|
|
1998
|
-
__TS__SetDescriptor(
|
|
1999
|
-
Unit.prototype,
|
|
2000
|
-
"onUnitInRange",
|
|
2001
|
-
{get = function(self)
|
|
2002
|
-
local handle = self.handle
|
|
2003
|
-
local onUnitInRange = setmetatable(
|
|
2004
|
-
{},
|
|
2005
|
-
{__index = function(self, value)
|
|
2006
|
-
local event = __TS__New(
|
|
2007
|
-
TriggerEvent,
|
|
2008
|
-
function(trigger)
|
|
2009
|
-
TriggerRegisterUnitInRangeSimple(trigger, value, handle)
|
|
2010
|
-
end,
|
|
2011
|
-
function() return ____exports.Unit:of(handle) end
|
|
2012
|
-
)
|
|
2013
|
-
rawset(self, value, event)
|
|
2014
|
-
return event
|
|
2015
|
-
end}
|
|
2016
|
-
)
|
|
2017
|
-
rawset(self, "onUnitInRange", onUnitInRange)
|
|
2018
|
-
return onUnitInRange
|
|
2019
|
-
end},
|
|
2020
|
-
true
|
|
2021
|
-
)
|
|
2022
1992
|
__TS__SetDescriptor(
|
|
2023
1993
|
Unit.prototype,
|
|
2024
1994
|
"onManaEqual",
|
|
@@ -2154,6 +2124,11 @@ __TS__SetDescriptor(
|
|
|
2154
2124
|
end},
|
|
2155
2125
|
true
|
|
2156
2126
|
)
|
|
2127
|
+
Unit.levelChangedEvent = __TS__New(
|
|
2128
|
+
____exports.UnitTriggerEvent,
|
|
2129
|
+
EVENT_PLAYER_HERO_LEVEL,
|
|
2130
|
+
function() return ____exports.Unit:of(getTriggerUnit()) end
|
|
2131
|
+
)
|
|
2157
2132
|
Unit.deathEvent = __TS__New(
|
|
2158
2133
|
____exports.UnitTriggerEvent,
|
|
2159
2134
|
EVENT_PLAYER_UNIT_DEATH,
|
|
@@ -2470,12 +2445,7 @@ Unit.onDamaging = (function()
|
|
|
2470
2445
|
preventRetaliation = damagingEventPreventRetaliation
|
|
2471
2446
|
}
|
|
2472
2447
|
if data.isAttack and source then
|
|
2473
|
-
|
|
2474
|
-
if weapon == -1 then
|
|
2475
|
-
local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
|
|
2476
|
-
weapon = 0
|
|
2477
|
-
end
|
|
2478
|
-
data.weapon = assert(source.weapons[weapon + 1])
|
|
2448
|
+
data.weapon = source:chooseWeapon(target)
|
|
2479
2449
|
end
|
|
2480
2450
|
if not data.isAttack or not source or not source._attackHandlers then
|
|
2481
2451
|
invoke(
|
|
@@ -2620,7 +2590,7 @@ Unit.onDamage = __TS__New(
|
|
|
2620
2590
|
invoke(event, source, target, evData)
|
|
2621
2591
|
if evData[0] ~= nil and target.health - evData.amount < 0.405 then
|
|
2622
2592
|
local bonusHealth = math.ceil(evData.amount)
|
|
2623
|
-
target[
|
|
2593
|
+
target[106] = (target[106] or 0) + bonusHealth
|
|
2624
2594
|
BlzSetUnitMaxHP(
|
|
2625
2595
|
target.handle,
|
|
2626
2596
|
BlzGetUnitMaxHP(target.handle) + bonusHealth
|
|
@@ -2634,7 +2604,7 @@ Unit.onDamage = __TS__New(
|
|
|
2634
2604
|
evData[0],
|
|
2635
2605
|
table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
|
|
2636
2606
|
)
|
|
2637
|
-
target[
|
|
2607
|
+
target[106] = (target[106] or 0) - bonusHealth
|
|
2638
2608
|
SetWidgetLife(
|
|
2639
2609
|
target.handle,
|
|
2640
2610
|
GetWidgetLife(target.handle) - bonusHealth
|
|
@@ -2670,10 +2640,14 @@ Unit.itemPickedUpEvent = __TS__New(
|
|
|
2670
2640
|
____exports.UnitTriggerEvent,
|
|
2671
2641
|
EVENT_PLAYER_UNIT_PICKUP_ITEM,
|
|
2672
2642
|
function()
|
|
2673
|
-
local
|
|
2674
|
-
local
|
|
2675
|
-
if getUnitTypeId(
|
|
2676
|
-
|
|
2643
|
+
local unitHandle = getTriggerUnit()
|
|
2644
|
+
local itemHandle = getManipulatedItem()
|
|
2645
|
+
if getUnitTypeId(unitHandle) ~= dummyUnitId and not (ignoreEventsItems[itemHandle] ~= nil) then
|
|
2646
|
+
local unit = ____exports.Unit:of(unitHandle)
|
|
2647
|
+
local item = Item:of(itemHandle)
|
|
2648
|
+
if item.owner ~= unit then
|
|
2649
|
+
return unit, item
|
|
2650
|
+
end
|
|
2677
2651
|
end
|
|
2678
2652
|
return IgnoreEvent
|
|
2679
2653
|
end
|
|
@@ -2693,7 +2667,7 @@ Unit.itemUsedEvent = __TS__New(
|
|
|
2693
2667
|
Unit.itemStackedEvent = __TS__New(
|
|
2694
2668
|
____exports.UnitTriggerEvent,
|
|
2695
2669
|
EVENT_PLAYER_UNIT_STACK_ITEM,
|
|
2696
|
-
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(
|
|
2670
|
+
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(BlzGetStackingItemTarget()), Item:of(BlzGetStackingItemSource()) end
|
|
2697
2671
|
)
|
|
2698
2672
|
__TS__ObjectDefineProperty(
|
|
2699
2673
|
Unit,
|
|
@@ -2780,6 +2754,10 @@ __TS__ObjectDefineProperty(
|
|
|
2780
2754
|
rawset(self, "destroyEvent", destroyEvent)
|
|
2781
2755
|
return destroyEvent
|
|
2782
2756
|
end}
|
|
2757
|
+
)
|
|
2758
|
+
Unit.synchronize = synchronizer(
|
|
2759
|
+
function(unit) return unit.syncId end,
|
|
2760
|
+
function(syncId) return unitBySyncId[syncId] end
|
|
2783
2761
|
);
|
|
2784
2762
|
(function(self)
|
|
2785
2763
|
local leaveAbilityIds = postcompile(function()
|
|
@@ -2809,7 +2787,8 @@ __TS__ObjectDefineProperty(
|
|
|
2809
2787
|
return
|
|
2810
2788
|
end
|
|
2811
2789
|
end
|
|
2812
|
-
unit:
|
|
2790
|
+
unit:saveData()
|
|
2791
|
+
Timer:run(unit, "destroy")
|
|
2813
2792
|
end)
|
|
2814
2793
|
end
|
|
2815
2794
|
end)(Unit)
|
package/engine/local-client.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Unit } from "../core/types/unit";
|
|
|
3
3
|
import { Async } from "../core/types/async";
|
|
4
4
|
import { Event, TriggerEvent } from "../event";
|
|
5
5
|
import { GraphicsMode } from "./index";
|
|
6
|
+
import { Color } from "../core/types/color";
|
|
6
7
|
export declare class LocalClient {
|
|
7
8
|
private constructor();
|
|
8
9
|
static readonly locale: string;
|
|
@@ -11,6 +12,7 @@ export declare class LocalClient {
|
|
|
11
12
|
static get isHD(): boolean;
|
|
12
13
|
static get graphicsMode(): GraphicsMode;
|
|
13
14
|
static get isActive(): boolean;
|
|
15
|
+
static pingMinimap(x: number, y: number, duration: number, ...parameters: [] | [red: number, green: number, blue: number, flashy?: boolean] | [color: Color, flashy?: boolean]): void;
|
|
14
16
|
static get mouseFocusUnit(): Async<Unit> | undefined;
|
|
15
17
|
static get mainSelectedUnit(): Async<Unit> | undefined;
|
|
16
18
|
static get mainSelectedUnitChangeEvent(): Event<[
|