warscript 0.0.1-dev.7278154 → 0.0.1-dev.72f8823
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 +14 -9
- package/core/types/player.d.ts +15 -0
- package/core/types/player.lua +53 -13
- package/core/types/playerCamera.lua +44 -0
- 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 +8 -2
- package/decl/native.d.ts +2 -2
- package/engine/behavior.d.ts +8 -1
- package/engine/behavior.lua +97 -65
- package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
- package/engine/behaviour/ability/remove-buffs.lua +21 -0
- package/engine/behaviour/unit/stun-immunity.d.ts +8 -4
- package/engine/behaviour/unit/stun-immunity.lua +12 -3
- package/engine/behaviour/unit.d.ts +7 -3
- package/engine/behaviour/unit.lua +31 -2
- package/engine/buff.d.ts +10 -1
- package/engine/buff.lua +60 -7
- package/engine/internal/ability.lua +6 -5
- package/engine/internal/item.d.ts +13 -15
- package/engine/internal/item.lua +59 -48
- package/engine/internal/unit/ability.d.ts +14 -14
- package/engine/internal/unit/ability.lua +72 -45
- 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/scale.d.ts +7 -0
- package/engine/internal/unit/scale.lua +20 -0
- package/engine/internal/unit-missile-launch.lua +44 -20
- package/engine/internal/unit.d.ts +15 -12
- package/engine/internal/unit.lua +89 -69
- package/engine/local-client.d.ts +2 -0
- package/engine/local-client.lua +30 -0
- package/engine/object-data/entry/ability-type.lua +4 -1
- package/engine/object-field/unit.d.ts +13 -1
- package/engine/object-field/unit.lua +57 -0
- package/engine/object-field.d.ts +7 -1
- package/engine/object-field.lua +199 -112
- package/engine/random.d.ts +9 -0
- package/engine/random.lua +13 -0
- package/engine/standard/fields/unit.d.ts +3 -1
- package/engine/standard/fields/unit.lua +4 -0
- package/engine/synchronization.d.ts +11 -0
- package/engine/synchronization.lua +77 -0
- package/engine/text-tag.lua +3 -2
- package/engine/unit.d.ts +2 -0
- package/engine/unit.lua +2 -0
- package/net/socket.lua +1 -1
- package/objutil/buff.lua +1 -1
- package/package.json +2 -2
- 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 +5 -1
- package/utility/callback-array.lua +16 -1
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +19 -1
- package/utility/lua-maps.d.ts +11 -2
- package/utility/lua-maps.lua +33 -2
- package/utility/types.d.ts +3 -0
|
@@ -9,11 +9,18 @@ local ____timer = require("core.types.timer")
|
|
|
9
9
|
local Timer = ____timer.Timer
|
|
10
10
|
local ____lua_2Dsets = require("utility.lua-sets")
|
|
11
11
|
local luaSetOf = ____lua_2Dsets.luaSetOf
|
|
12
|
+
local ____attributes = require("attributes")
|
|
13
|
+
local attribute = ____attributes.attribute
|
|
14
|
+
local ____linked_2Dset = require("utility.linked-set")
|
|
15
|
+
local LinkedSet = ____linked_2Dset.LinkedSet
|
|
12
16
|
local ____math = require("math")
|
|
13
|
-
local
|
|
17
|
+
local ceil = ____math.ceil
|
|
14
18
|
local autoAttackFinishEvent = __TS__New(Event)
|
|
15
19
|
rawset(Unit, "autoAttackFinishEvent", autoAttackFinishEvent)
|
|
16
|
-
local
|
|
20
|
+
local units = __TS__New(LinkedSet)
|
|
21
|
+
local targetAttribute = attribute()
|
|
22
|
+
local impactDelayAttribute = attribute()
|
|
23
|
+
local passedTimeAttribute = attribute()
|
|
17
24
|
local instantOrderIds = luaSetOf(
|
|
18
25
|
orderId("avatar"),
|
|
19
26
|
orderId("berserk"),
|
|
@@ -30,29 +37,46 @@ local instantOrderIds = luaSetOf(
|
|
|
30
37
|
orderId("unimmolation")
|
|
31
38
|
)
|
|
32
39
|
local function reset(source, orderId)
|
|
33
|
-
if not (instantOrderIds[orderId] ~= nil) then
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
eventTimerByUnit[source] = nil
|
|
38
|
-
end
|
|
40
|
+
if not (instantOrderIds[orderId] ~= nil) and units:remove(source) then
|
|
41
|
+
source[targetAttribute] = nil
|
|
42
|
+
source[impactDelayAttribute] = nil
|
|
43
|
+
source[passedTimeAttribute] = nil
|
|
39
44
|
end
|
|
40
45
|
end
|
|
41
46
|
Unit.onImmediateOrder:addListener(reset)
|
|
42
47
|
Unit.onPointOrder:addListener(reset)
|
|
43
48
|
Unit.onTargetOrder:addListener(reset)
|
|
44
|
-
local
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
local timerPeriod = 1 / 64
|
|
50
|
+
local function invokeEvent(unit)
|
|
51
|
+
units:remove(unit)
|
|
52
|
+
local target = unit[targetAttribute]
|
|
53
|
+
unit[targetAttribute] = nil
|
|
54
|
+
unit[impactDelayAttribute] = nil
|
|
55
|
+
unit[passedTimeAttribute] = nil
|
|
56
|
+
Event.invoke(autoAttackFinishEvent, unit, target)
|
|
57
|
+
end
|
|
58
|
+
local function checkUnit(unit)
|
|
59
|
+
local passedTime = unit[passedTimeAttribute] + timerPeriod
|
|
60
|
+
local impactDelay = unit[impactDelayAttribute]
|
|
61
|
+
if passedTime >= impactDelay and ceil(passedTime / 0.02) >= ceil(impactDelay / 0.02) then
|
|
62
|
+
invokeEvent(unit)
|
|
63
|
+
else
|
|
64
|
+
unit[passedTimeAttribute] = passedTime
|
|
65
|
+
end
|
|
47
66
|
end
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
local timer = Timer:simple(
|
|
51
|
-
attackPoint + min(0.001, attackPoint / 2),
|
|
52
|
-
timerCallback,
|
|
53
|
-
source,
|
|
54
|
-
target
|
|
55
|
-
)
|
|
56
|
-
eventTimerByUnit[source] = timer
|
|
67
|
+
Timer.onPeriod[timerPeriod]:addListener(function()
|
|
68
|
+
units:forEach(checkUnit)
|
|
57
69
|
end)
|
|
70
|
+
Unit.autoAttackStartEvent:addListener(
|
|
71
|
+
999999,
|
|
72
|
+
function(source, target)
|
|
73
|
+
if source[targetAttribute] ~= nil then
|
|
74
|
+
invokeEvent(source)
|
|
75
|
+
end
|
|
76
|
+
source[targetAttribute] = target
|
|
77
|
+
source[impactDelayAttribute] = (source:chooseWeapon(target) or source.firstWeapon).impactDelay
|
|
78
|
+
source[passedTimeAttribute] = -timerPeriod
|
|
79
|
+
units:add(source)
|
|
80
|
+
end
|
|
81
|
+
)
|
|
58
82
|
return ____exports
|
|
@@ -80,6 +80,8 @@ export declare class UnitWeapon {
|
|
|
80
80
|
readonly unit: Unit;
|
|
81
81
|
readonly index: 0 | 1;
|
|
82
82
|
constructor(unit: Unit, index: 0 | 1);
|
|
83
|
+
get isEnabled(): boolean;
|
|
84
|
+
set isEnabled(isEnabled: boolean);
|
|
83
85
|
get cooldown(): number;
|
|
84
86
|
set cooldown(cooldown: number);
|
|
85
87
|
get damage(): [minimumDamage: number, maximumDamage: number];
|
|
@@ -107,12 +109,13 @@ declare const enum UnitPropertyKey {
|
|
|
107
109
|
SYNC_ID = 100,
|
|
108
110
|
IS_PAUSED = 101,
|
|
109
111
|
STUN_COUNTER = 102,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
112
|
+
FORCE_STUN_COUNTER = 103,
|
|
113
|
+
DELAY_HEALTH_CHECKS_COUNTER = 104,
|
|
114
|
+
DELAY_HEALTH_CHECKS_HEALTH_BONUS = 105,
|
|
115
|
+
PREVENT_DEATH_HEALTH_BONUS = 106,
|
|
116
|
+
IS_TEAM_GLOW_HIDDEN = 107,
|
|
117
|
+
LAST_X = 108,
|
|
118
|
+
LAST_Y = 109
|
|
116
119
|
}
|
|
117
120
|
export type UnitSyncId = number & {
|
|
118
121
|
readonly __unitSyncId: unique symbol;
|
|
@@ -121,6 +124,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
121
124
|
readonly syncId: UnitSyncId;
|
|
122
125
|
private [UnitPropertyKey.IS_PAUSED]?;
|
|
123
126
|
private [UnitPropertyKey.STUN_COUNTER]?;
|
|
127
|
+
private [UnitPropertyKey.FORCE_STUN_COUNTER]?;
|
|
124
128
|
private [UnitPropertyKey.DELAY_HEALTH_CHECKS_COUNTER]?;
|
|
125
129
|
private [UnitPropertyKey.DELAY_HEALTH_CHECKS_HEALTH_BONUS]?;
|
|
126
130
|
private [UnitPropertyKey.PREVENT_DEATH_HEALTH_BONUS]?;
|
|
@@ -216,8 +220,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
216
220
|
set facing(v: number);
|
|
217
221
|
get speed(): number;
|
|
218
222
|
set speed(v: number);
|
|
219
|
-
get flyHeight(): number;
|
|
220
|
-
set flyHeight(v: number);
|
|
221
223
|
get x(): number;
|
|
222
224
|
set x(v: number);
|
|
223
225
|
get y(): number;
|
|
@@ -241,8 +243,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
241
243
|
get isInvulnerable(): boolean;
|
|
242
244
|
get vertexColor(): Color;
|
|
243
245
|
set vertexColor(v: Color);
|
|
244
|
-
get scale(): number;
|
|
245
|
-
set scale(v: number);
|
|
246
246
|
get timeScale(): number;
|
|
247
247
|
set timeScale(v: number);
|
|
248
248
|
get collisionSize(): number;
|
|
@@ -271,8 +271,8 @@ export declare class Unit extends Handle<junit> {
|
|
|
271
271
|
setAbilityLevel(abilityId: number, level: number): number;
|
|
272
272
|
getAbilityLevel(abilityId: number): number;
|
|
273
273
|
hasAbility(abilityId: number): boolean;
|
|
274
|
-
|
|
275
|
-
removeAbility(
|
|
274
|
+
getAbility(abilityId: number): UnitAbility | undefined;
|
|
275
|
+
removeAbility(abilityTypeId: number): boolean;
|
|
276
276
|
hideAbility(abilityId: number, flag: boolean): void;
|
|
277
277
|
getAbilityRemainingCooldown(abilityId: number): number;
|
|
278
278
|
startAbilityCooldown(abilityId: number, cooldown: number): void;
|
|
@@ -292,6 +292,8 @@ export declare class Unit extends Handle<junit> {
|
|
|
292
292
|
unpauseEx(): void;
|
|
293
293
|
incrementStunCounter(): void;
|
|
294
294
|
decrementStunCounter(): void;
|
|
295
|
+
incrementForceStunCounter(): void;
|
|
296
|
+
decrementForceStunCounter(): void;
|
|
295
297
|
set waygateActive(v: boolean);
|
|
296
298
|
get waygateActive(): boolean;
|
|
297
299
|
set waygateDestination(v: Vec2);
|
|
@@ -373,5 +375,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
373
375
|
setField(field: junitstringfield, value: string): boolean;
|
|
374
376
|
toString(): string;
|
|
375
377
|
static getBySyncId(syncId: UnitSyncId): Unit | undefined;
|
|
378
|
+
static synchronize: (player: Player, object: Unit | undefined) => Promise<Unit | undefined>;
|
|
376
379
|
}
|
|
377
380
|
export {};
|
package/engine/internal/unit.lua
CHANGED
|
@@ -62,6 +62,8 @@ 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
|
|
65
67
|
local match = string.match
|
|
66
68
|
local ____tostring = _G.tostring
|
|
67
69
|
local setUnitAnimation = SetUnitAnimation
|
|
@@ -410,6 +412,19 @@ function UnitWeapon.prototype.____constructor(self, unit, index)
|
|
|
410
412
|
self.unit = unit
|
|
411
413
|
self.index = index
|
|
412
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
|
+
)
|
|
413
428
|
__TS__SetDescriptor(
|
|
414
429
|
UnitWeapon.prototype,
|
|
415
430
|
"cooldown",
|
|
@@ -644,15 +659,15 @@ for ____, player in ipairs(Player.all) do
|
|
|
644
659
|
dummies[player] = dummy
|
|
645
660
|
end
|
|
646
661
|
local function delayHealthChecksCallback(unit)
|
|
647
|
-
local counter = (unit[
|
|
662
|
+
local counter = (unit[104] or 0) - 1
|
|
648
663
|
if counter ~= 0 then
|
|
649
|
-
unit[
|
|
664
|
+
unit[104] = counter
|
|
650
665
|
return
|
|
651
666
|
end
|
|
652
|
-
unit[
|
|
653
|
-
local healthBonus = unit[
|
|
667
|
+
unit[104] = nil
|
|
668
|
+
local healthBonus = unit[105]
|
|
654
669
|
if healthBonus ~= nil then
|
|
655
|
-
unit[
|
|
670
|
+
unit[105] = nil
|
|
656
671
|
local handle = unit.handle
|
|
657
672
|
BlzSetUnitMaxHP(
|
|
658
673
|
handle,
|
|
@@ -712,8 +727,8 @@ function Unit.prototype.getEvent(self, event, collector)
|
|
|
712
727
|
end
|
|
713
728
|
function Unit.prototype.onDestroy(self)
|
|
714
729
|
local handle = self.handle
|
|
715
|
-
self[
|
|
716
|
-
self[
|
|
730
|
+
self[108] = getUnitX(handle)
|
|
731
|
+
self[109] = getUnitY(handle)
|
|
717
732
|
if not self._owner then
|
|
718
733
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
719
734
|
end
|
|
@@ -836,16 +851,18 @@ function Unit.prototype.queueAnimation(self, animation)
|
|
|
836
851
|
QueueUnitAnimation(self.handle, animation)
|
|
837
852
|
end
|
|
838
853
|
function Unit.prototype.chooseWeapon(self, target)
|
|
839
|
-
|
|
840
|
-
|
|
854
|
+
local firstWeapon = self.firstWeapon
|
|
855
|
+
if firstWeapon.isEnabled and target:isAllowedTarget(self, firstWeapon.allowedTargetCombatClassifications) then
|
|
856
|
+
return firstWeapon
|
|
841
857
|
end
|
|
842
|
-
|
|
843
|
-
|
|
858
|
+
local secondWeapon = self.secondWeapon
|
|
859
|
+
if secondWeapon.isEnabled and target:isAllowedTarget(target, secondWeapon.allowedTargetCombatClassifications) then
|
|
860
|
+
return secondWeapon
|
|
844
861
|
end
|
|
845
862
|
return nil
|
|
846
863
|
end
|
|
847
864
|
function Unit.prototype.delayHealthChecks(self)
|
|
848
|
-
self[
|
|
865
|
+
self[104] = (self[104] or 0) + 1
|
|
849
866
|
Timer:run(delayHealthChecksCallback, self)
|
|
850
867
|
end
|
|
851
868
|
function Unit.prototype.setPosition(self, x, y)
|
|
@@ -935,20 +952,21 @@ end
|
|
|
935
952
|
function Unit.prototype.hasAbility(self, abilityId)
|
|
936
953
|
return getUnitAbilityLevel(self.handle, abilityId) > 0
|
|
937
954
|
end
|
|
938
|
-
function Unit.prototype.
|
|
955
|
+
function Unit.prototype.getAbility(self, abilityId)
|
|
939
956
|
local ability = doUnitAbilityAction(self.handle, abilityId, getUnitAbility, abilityId)
|
|
940
957
|
return UnitAbility:of(ability, abilityId, self)
|
|
941
958
|
end
|
|
942
|
-
function Unit.prototype.removeAbility(self,
|
|
959
|
+
function Unit.prototype.removeAbility(self, abilityTypeId)
|
|
943
960
|
local abilities = self.abilities
|
|
944
961
|
for i = 1, #abilities do
|
|
945
|
-
if abilities[i].typeId ==
|
|
946
|
-
abilities[i]
|
|
962
|
+
if abilities[i].typeId == abilityTypeId then
|
|
963
|
+
local ability = abilities[i]
|
|
947
964
|
tremove(abilities, i)
|
|
965
|
+
ability:destroy()
|
|
948
966
|
return true
|
|
949
967
|
end
|
|
950
968
|
end
|
|
951
|
-
return
|
|
969
|
+
return doUnitAbilityAction(self.handle, abilityTypeId, unitRemoveAbility, abilityTypeId)
|
|
952
970
|
end
|
|
953
971
|
function Unit.prototype.hideAbility(self, abilityId, flag)
|
|
954
972
|
BlzUnitHideAbility(self.handle, abilityId, flag)
|
|
@@ -1050,18 +1068,44 @@ function Unit.prototype.unpauseEx(self)
|
|
|
1050
1068
|
end
|
|
1051
1069
|
function Unit.prototype.incrementStunCounter(self)
|
|
1052
1070
|
local stunCounter = self[102] or 0
|
|
1053
|
-
if not self[101] or stunCounter >= 0 then
|
|
1071
|
+
if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 0 then
|
|
1054
1072
|
BlzPauseUnitEx(self.handle, true)
|
|
1055
1073
|
end
|
|
1056
1074
|
self[102] = stunCounter + 1
|
|
1057
1075
|
end
|
|
1058
1076
|
function Unit.prototype.decrementStunCounter(self)
|
|
1059
1077
|
local stunCounter = self[102] or 0
|
|
1060
|
-
if not self[101] or stunCounter >= 1 then
|
|
1078
|
+
if not self[101] and (self[103] or 0) <= 0 or stunCounter >= 1 then
|
|
1061
1079
|
BlzPauseUnitEx(self.handle, false)
|
|
1062
1080
|
end
|
|
1063
1081
|
self[102] = stunCounter - 1
|
|
1064
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
|
|
1065
1109
|
function Unit.create(self, owner, id, x, y, facing, skinId)
|
|
1066
1110
|
local handle = skinId and BlzCreateUnitWithSkin(
|
|
1067
1111
|
owner.handle,
|
|
@@ -1469,7 +1513,7 @@ __TS__SetDescriptor(
|
|
|
1469
1513
|
"isTeamGlowVisible",
|
|
1470
1514
|
{
|
|
1471
1515
|
get = function(self)
|
|
1472
|
-
return not self[
|
|
1516
|
+
return not self[107]
|
|
1473
1517
|
end,
|
|
1474
1518
|
set = function(self, isTeamGlowVisible)
|
|
1475
1519
|
BlzShowUnitTeamGlow(self.handle, isTeamGlowVisible)
|
|
@@ -1479,7 +1523,7 @@ __TS__SetDescriptor(
|
|
|
1479
1523
|
else
|
|
1480
1524
|
____temp_7 = nil
|
|
1481
1525
|
end
|
|
1482
|
-
self[
|
|
1526
|
+
self[107] = ____temp_7
|
|
1483
1527
|
end
|
|
1484
1528
|
},
|
|
1485
1529
|
true
|
|
@@ -1489,7 +1533,7 @@ __TS__SetDescriptor(
|
|
|
1489
1533
|
"color",
|
|
1490
1534
|
{set = function(self, color)
|
|
1491
1535
|
SetUnitColor(self.handle, color.handle)
|
|
1492
|
-
if self[
|
|
1536
|
+
if self[107] then
|
|
1493
1537
|
BlzShowUnitTeamGlow(self.handle, false)
|
|
1494
1538
|
end
|
|
1495
1539
|
end},
|
|
@@ -1513,14 +1557,14 @@ __TS__SetDescriptor(
|
|
|
1513
1557
|
"maxHealth",
|
|
1514
1558
|
{
|
|
1515
1559
|
get = function(self)
|
|
1516
|
-
return BlzGetUnitMaxHP(self.handle) - (self[
|
|
1560
|
+
return BlzGetUnitMaxHP(self.handle) - (self[105] or 0) - (self[106] or 0)
|
|
1517
1561
|
end,
|
|
1518
1562
|
set = function(self, maxHealth)
|
|
1519
|
-
if maxHealth < 1 and self[
|
|
1520
|
-
self[
|
|
1563
|
+
if maxHealth < 1 and self[104] ~= nil then
|
|
1564
|
+
self[105] = (self[105] or 0) + (1 - maxHealth)
|
|
1521
1565
|
maxHealth = 1
|
|
1522
1566
|
end
|
|
1523
|
-
BlzSetUnitMaxHP(self.handle, maxHealth + (self[
|
|
1567
|
+
BlzSetUnitMaxHP(self.handle, maxHealth + (self[106] or 0))
|
|
1524
1568
|
end
|
|
1525
1569
|
},
|
|
1526
1570
|
true
|
|
@@ -1562,10 +1606,10 @@ __TS__SetDescriptor(
|
|
|
1562
1606
|
"health",
|
|
1563
1607
|
{
|
|
1564
1608
|
get = function(self)
|
|
1565
|
-
return GetWidgetLife(self.handle) - (self[
|
|
1609
|
+
return GetWidgetLife(self.handle) - (self[106] or 0)
|
|
1566
1610
|
end,
|
|
1567
1611
|
set = function(self, health)
|
|
1568
|
-
SetWidgetLife(self.handle, health + (self[
|
|
1612
|
+
SetWidgetLife(self.handle, health + (self[106] or 0))
|
|
1569
1613
|
end
|
|
1570
1614
|
},
|
|
1571
1615
|
true
|
|
@@ -1641,25 +1685,12 @@ __TS__SetDescriptor(
|
|
|
1641
1685
|
},
|
|
1642
1686
|
true
|
|
1643
1687
|
)
|
|
1644
|
-
__TS__SetDescriptor(
|
|
1645
|
-
Unit.prototype,
|
|
1646
|
-
"flyHeight",
|
|
1647
|
-
{
|
|
1648
|
-
get = function(self)
|
|
1649
|
-
return getUnitFlyHeight(self.handle)
|
|
1650
|
-
end,
|
|
1651
|
-
set = function(self, v)
|
|
1652
|
-
SetUnitFlyHeight(self.handle, v, 100000)
|
|
1653
|
-
end
|
|
1654
|
-
},
|
|
1655
|
-
true
|
|
1656
|
-
)
|
|
1657
1688
|
__TS__SetDescriptor(
|
|
1658
1689
|
Unit.prototype,
|
|
1659
1690
|
"x",
|
|
1660
1691
|
{
|
|
1661
1692
|
get = function(self)
|
|
1662
|
-
return self[
|
|
1693
|
+
return self[108] or getUnitX(self.handle)
|
|
1663
1694
|
end,
|
|
1664
1695
|
set = function(self, v)
|
|
1665
1696
|
SetUnitX(self.handle, v)
|
|
@@ -1672,7 +1703,7 @@ __TS__SetDescriptor(
|
|
|
1672
1703
|
"y",
|
|
1673
1704
|
{
|
|
1674
1705
|
get = function(self)
|
|
1675
|
-
return self[
|
|
1706
|
+
return self[109] or getUnitY(self.handle)
|
|
1676
1707
|
end,
|
|
1677
1708
|
set = function(self, v)
|
|
1678
1709
|
SetUnitY(self.handle, v)
|
|
@@ -1777,14 +1808,18 @@ __TS__SetDescriptor(
|
|
|
1777
1808
|
local handle = self.handle
|
|
1778
1809
|
if isPaused and not IsUnitPaused(handle) then
|
|
1779
1810
|
self[101] = true
|
|
1780
|
-
|
|
1781
|
-
|
|
1811
|
+
if (self[103] or 0) <= 0 then
|
|
1812
|
+
for _ = self[102] or 0, -1 do
|
|
1813
|
+
BlzPauseUnitEx(handle, true)
|
|
1814
|
+
end
|
|
1782
1815
|
end
|
|
1783
1816
|
PauseUnit(handle, true)
|
|
1784
1817
|
elseif not isPaused and IsUnitPaused(handle) then
|
|
1785
1818
|
PauseUnit(handle, false)
|
|
1786
|
-
|
|
1787
|
-
|
|
1819
|
+
if (self[103] or 0) <= 0 then
|
|
1820
|
+
for _ = self[102] or 0, -1 do
|
|
1821
|
+
BlzPauseUnitEx(handle, false)
|
|
1822
|
+
end
|
|
1788
1823
|
end
|
|
1789
1824
|
self[101] = nil
|
|
1790
1825
|
end
|
|
@@ -1842,20 +1877,6 @@ __TS__SetDescriptor(
|
|
|
1842
1877
|
},
|
|
1843
1878
|
true
|
|
1844
1879
|
)
|
|
1845
|
-
__TS__SetDescriptor(
|
|
1846
|
-
Unit.prototype,
|
|
1847
|
-
"scale",
|
|
1848
|
-
{
|
|
1849
|
-
get = function(self)
|
|
1850
|
-
return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
|
|
1851
|
-
end,
|
|
1852
|
-
set = function(self, v)
|
|
1853
|
-
setUnitScale(self.handle, v, v, v)
|
|
1854
|
-
setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
|
|
1855
|
-
end
|
|
1856
|
-
},
|
|
1857
|
-
true
|
|
1858
|
-
)
|
|
1859
1880
|
__TS__SetDescriptor(
|
|
1860
1881
|
Unit.prototype,
|
|
1861
1882
|
"timeScale",
|
|
@@ -2467,12 +2488,7 @@ Unit.onDamaging = (function()
|
|
|
2467
2488
|
preventRetaliation = damagingEventPreventRetaliation
|
|
2468
2489
|
}
|
|
2469
2490
|
if data.isAttack and source then
|
|
2470
|
-
|
|
2471
|
-
if weapon == -1 then
|
|
2472
|
-
local targetsAllowed = BlzGetUnitWeaponIntegerField(source.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, 0)
|
|
2473
|
-
weapon = 0
|
|
2474
|
-
end
|
|
2475
|
-
data.weapon = assert(source.weapons[weapon + 1])
|
|
2491
|
+
data.weapon = source:chooseWeapon(target)
|
|
2476
2492
|
end
|
|
2477
2493
|
if not data.isAttack or not source or not source._attackHandlers then
|
|
2478
2494
|
invoke(
|
|
@@ -2617,7 +2633,7 @@ Unit.onDamage = __TS__New(
|
|
|
2617
2633
|
invoke(event, source, target, evData)
|
|
2618
2634
|
if evData[0] ~= nil and target.health - evData.amount < 0.405 then
|
|
2619
2635
|
local bonusHealth = math.ceil(evData.amount)
|
|
2620
|
-
target[
|
|
2636
|
+
target[106] = (target[106] or 0) + bonusHealth
|
|
2621
2637
|
BlzSetUnitMaxHP(
|
|
2622
2638
|
target.handle,
|
|
2623
2639
|
BlzGetUnitMaxHP(target.handle) + bonusHealth
|
|
@@ -2631,7 +2647,7 @@ Unit.onDamage = __TS__New(
|
|
|
2631
2647
|
evData[0],
|
|
2632
2648
|
table.unpack(evData, 1 + 1, 1 + (evData[1] or 0))
|
|
2633
2649
|
)
|
|
2634
|
-
target[
|
|
2650
|
+
target[106] = (target[106] or 0) - bonusHealth
|
|
2635
2651
|
SetWidgetLife(
|
|
2636
2652
|
target.handle,
|
|
2637
2653
|
GetWidgetLife(target.handle) - bonusHealth
|
|
@@ -2781,6 +2797,10 @@ __TS__ObjectDefineProperty(
|
|
|
2781
2797
|
rawset(self, "destroyEvent", destroyEvent)
|
|
2782
2798
|
return destroyEvent
|
|
2783
2799
|
end}
|
|
2800
|
+
)
|
|
2801
|
+
Unit.synchronize = synchronizer(
|
|
2802
|
+
function(unit) return unit.syncId end,
|
|
2803
|
+
function(syncId) return unitBySyncId[syncId] end
|
|
2784
2804
|
);
|
|
2785
2805
|
(function(self)
|
|
2786
2806
|
local leaveAbilityIds = postcompile(function()
|
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, extraEffects?: boolean] | [color: Color, extraEffects?: boolean]): void;
|
|
14
16
|
static get mouseFocusUnit(): Async<Unit> | undefined;
|
|
15
17
|
static get mainSelectedUnit(): Async<Unit> | undefined;
|
|
16
18
|
static get mainSelectedUnitChangeEvent(): Event<[
|
package/engine/local-client.lua
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
|
|
3
3
|
local __TS__Class = ____lualib.__TS__Class
|
|
4
|
+
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
4
5
|
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
5
6
|
local __TS__New = ____lualib.__TS__New
|
|
6
7
|
local ____exports = {}
|
|
@@ -15,6 +16,8 @@ local ____player = require("core.types.player")
|
|
|
15
16
|
local Player = ____player.Player
|
|
16
17
|
local ____timer = require("core.types.timer")
|
|
17
18
|
local Timer = ____timer.Timer
|
|
19
|
+
local ____color = require("core.types.color")
|
|
20
|
+
local Color = ____color.Color
|
|
18
21
|
local loadTOCFile = BlzLoadTOCFile
|
|
19
22
|
local getLocalClientWidth = BlzGetLocalClientWidth
|
|
20
23
|
local getLocalClientHeight = BlzGetLocalClientHeight
|
|
@@ -25,6 +28,8 @@ local getMouseFocusUnit = BlzGetMouseFocusUnit
|
|
|
25
28
|
local getUnitRealField = BlzGetUnitRealField
|
|
26
29
|
local getUnitTypeId = GetUnitTypeId
|
|
27
30
|
local getLocale = BlzGetLocale
|
|
31
|
+
local pingMinimap = PingMinimap
|
|
32
|
+
local pingMinimapEx = PingMinimapEx
|
|
28
33
|
local tableSort = table.sort
|
|
29
34
|
local tocPath = "_warscript\\IsHD.toc"
|
|
30
35
|
compiletime(function()
|
|
@@ -62,6 +67,31 @@ local LocalClient = ____exports.LocalClient
|
|
|
62
67
|
LocalClient.name = "LocalClient"
|
|
63
68
|
function LocalClient.prototype.____constructor(self)
|
|
64
69
|
end
|
|
70
|
+
function LocalClient.pingMinimap(self, x, y, duration, redOrColor, greenOrExtraEffects, blue, extraEffects)
|
|
71
|
+
if redOrColor == nil then
|
|
72
|
+
pingMinimap(x, y, duration)
|
|
73
|
+
elseif __TS__InstanceOf(redOrColor, Color) then
|
|
74
|
+
pingMinimapEx(
|
|
75
|
+
x,
|
|
76
|
+
y,
|
|
77
|
+
duration,
|
|
78
|
+
redOrColor.r,
|
|
79
|
+
redOrColor.g,
|
|
80
|
+
redOrColor.b,
|
|
81
|
+
greenOrExtraEffects or false
|
|
82
|
+
)
|
|
83
|
+
else
|
|
84
|
+
pingMinimapEx(
|
|
85
|
+
x,
|
|
86
|
+
y,
|
|
87
|
+
duration,
|
|
88
|
+
redOrColor,
|
|
89
|
+
greenOrExtraEffects,
|
|
90
|
+
blue,
|
|
91
|
+
extraEffects or false
|
|
92
|
+
)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
65
95
|
LocalClient.locale = getLocale()
|
|
66
96
|
__TS__ObjectDefineProperty(
|
|
67
97
|
LocalClient,
|
|
@@ -38,6 +38,8 @@ local ____sound = require("core.types.sound")
|
|
|
38
38
|
local isSoundLabelCustom = ____sound.isSoundLabelCustom
|
|
39
39
|
local Sound3D = ____sound.Sound3D
|
|
40
40
|
local SoundSettings = ____sound.SoundSettings
|
|
41
|
+
local ____lua_2Dsets = require("utility.lua-sets")
|
|
42
|
+
local luaSetOf = ____lua_2Dsets.luaSetOf
|
|
41
43
|
local castAnimationFQNByAbilityTypeId = {}
|
|
42
44
|
local isButtonVisibleFalseAbilityTypes = {}
|
|
43
45
|
local casterCastingEffectPresetsByAbilityTypeId = {}
|
|
@@ -1004,9 +1006,10 @@ for abilityTypeId, soundPresetId in pairs(postcompile(function() return targetEf
|
|
|
1004
1006
|
)
|
|
1005
1007
|
end
|
|
1006
1008
|
end
|
|
1009
|
+
local unsupportedEffectSoundAbilityTypeIds = luaSetOf(fourCC("AAns"))
|
|
1007
1010
|
Unit.abilityChannelingStartEvent:addListener(function(caster, ability)
|
|
1008
1011
|
local soundPresetId = ability:getField(ABILITY_SF_EFFECT_SOUND)
|
|
1009
|
-
if isSoundLabelCustom(soundPresetId) then
|
|
1012
|
+
if isSoundLabelCustom(soundPresetId) or soundPresetId ~= "" and unsupportedEffectSoundAbilityTypeIds[ability.parentTypeId] ~= nil then
|
|
1010
1013
|
Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, caster)
|
|
1011
1014
|
end
|
|
1012
1015
|
end)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import { Unit } from "../internal/unit";
|
|
3
|
-
import { ObjectField, ObjectLevelField, ObjectLevelFieldValueChangeEvent, ReadonlyObjectLevelFieldType } from "../object-field";
|
|
3
|
+
import { ObjectField, ObjectFieldValueChangeEvent, ObjectLevelField, ObjectLevelFieldValueChangeEvent, ReadonlyObjectFieldType, ReadonlyObjectLevelFieldType } from "../object-field";
|
|
4
4
|
import { UnitType, UnitTypeId } from "../object-data/entry/unit-type";
|
|
5
5
|
import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
|
|
6
6
|
import { AttackType } from "../object-data/auxiliary/attack-type";
|
|
@@ -9,30 +9,35 @@ export declare abstract class UnitField<ValueType extends number | string | bool
|
|
|
9
9
|
protected get instanceClass(): typeof Unit;
|
|
10
10
|
protected getObjectDataEntryId(instance: Unit): UnitTypeId;
|
|
11
11
|
protected hasNativeFieldValue(): boolean;
|
|
12
|
+
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitField>>;
|
|
12
13
|
}
|
|
13
14
|
export declare class UnitBooleanField extends UnitField<boolean, junitbooleanfield> {
|
|
14
15
|
protected get defaultValue(): boolean;
|
|
15
16
|
protected getNativeFieldById(id: number): junitbooleanfield;
|
|
16
17
|
protected getNativeFieldValue(instance: Unit): boolean;
|
|
17
18
|
protected setNativeFieldValue(instance: Unit, value: boolean): boolean;
|
|
19
|
+
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitBooleanField>>;
|
|
18
20
|
}
|
|
19
21
|
export declare class UnitFloatField extends UnitField<number, junitrealfield> {
|
|
20
22
|
protected get defaultValue(): number;
|
|
21
23
|
protected getNativeFieldById(id: number): junitrealfield;
|
|
22
24
|
protected getNativeFieldValue(instance: Unit): number;
|
|
23
25
|
protected setNativeFieldValue(instance: Unit, value: number): boolean;
|
|
26
|
+
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitFloatField>>;
|
|
24
27
|
}
|
|
25
28
|
export declare class UnitIntegerField extends UnitField<number, junitintegerfield> {
|
|
26
29
|
protected get defaultValue(): number;
|
|
27
30
|
protected getNativeFieldById(id: number): junitintegerfield;
|
|
28
31
|
protected getNativeFieldValue(instance: Unit): number;
|
|
29
32
|
protected setNativeFieldValue(instance: Unit, value: number): boolean;
|
|
33
|
+
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitIntegerField>>;
|
|
30
34
|
}
|
|
31
35
|
export declare class UnitStringField extends UnitField<string, junitstringfield> {
|
|
32
36
|
protected get defaultValue(): string;
|
|
33
37
|
protected getNativeFieldById(id: number): junitstringfield;
|
|
34
38
|
protected getNativeFieldValue(instance: Unit): string;
|
|
35
39
|
protected setNativeFieldValue(instance: Unit, value: string): boolean;
|
|
40
|
+
static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<UnitStringField>>;
|
|
36
41
|
}
|
|
37
42
|
type junitweaponfield = junitweaponbooleanfield | junitweaponintegerfield | junitweaponrealfield | junitweaponstringfield;
|
|
38
43
|
export declare abstract class UnitWeaponField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType extends junitweaponfield = junitweaponfield> extends ObjectLevelField<UnitType, Unit, ValueType, InputValueType, NativeFieldType> {
|
|
@@ -63,8 +68,15 @@ export declare class UnitClassificationsField extends UnitField<UnitClassificati
|
|
|
63
68
|
protected getNativeFieldValue(instance: Unit): UnitClassifications;
|
|
64
69
|
protected setNativeFieldValue(instance: Unit, value: UnitClassifications): boolean;
|
|
65
70
|
}
|
|
71
|
+
export declare class UnitFlyHeightField extends UnitFloatField {
|
|
72
|
+
protected getNativeFieldValue(instance: Unit): number;
|
|
73
|
+
protected setNativeFieldValue(instance: Unit, value: number): boolean;
|
|
74
|
+
}
|
|
66
75
|
export declare class UnitPropulsionWindowField extends UnitFloatField {
|
|
67
76
|
protected getNativeFieldValue(instance: Unit): number;
|
|
68
77
|
protected setNativeFieldValue(instance: Unit, value: number): boolean;
|
|
69
78
|
}
|
|
79
|
+
export declare class UnitScalingValueField extends UnitFloatField {
|
|
80
|
+
protected setNativeFieldValue(instance: Unit, value: number): boolean;
|
|
81
|
+
}
|
|
70
82
|
export {};
|