warscript 0.0.1-dev.87b6c38 → 0.0.1-dev.8895725
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/core/types/frame.lua +47 -1
- package/core/types/handle.lua +6 -9
- package/core/types/item.d.ts +1 -0
- package/core/types/item.lua +1 -0
- package/core/types/player.d.ts +1 -1
- package/core/types/player.lua +12 -11
- package/core/types/sound.lua +1 -1
- package/destroyable.d.ts +1 -0
- package/destroyable.lua +9 -0
- package/engine/behavior.d.ts +4 -2
- package/engine/behavior.lua +69 -11
- package/engine/behaviour/ability/damage.d.ts +3 -0
- package/engine/behaviour/ability/damage.lua +8 -2
- package/engine/behaviour/ability/emulate-impact.lua +5 -4
- package/engine/behaviour/ability.d.ts +9 -5
- package/engine/behaviour/ability.lua +29 -0
- package/engine/behaviour/unit/stun-immunity.d.ts +1 -1
- package/engine/behaviour/unit/stun-immunity.lua +5 -4
- package/engine/behaviour/unit.lua +13 -3
- package/engine/buff.d.ts +56 -19
- package/engine/buff.lua +283 -142
- package/engine/internal/ability.lua +15 -15
- package/engine/internal/item/fields.d.ts +12 -0
- package/engine/internal/item/fields.lua +33 -0
- package/engine/internal/item.d.ts +4 -5
- package/engine/internal/item.lua +37 -40
- package/engine/internal/mechanics/cast-ability.lua +6 -3
- 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/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.lua +3 -3
- package/engine/internal/unit/interrupts.d.ts +12 -0
- package/engine/internal/unit/interrupts.lua +28 -0
- package/engine/internal/unit/range-event.d.ts +12 -0
- package/engine/internal/unit/range-event.lua +90 -0
- package/engine/internal/unit/scale.lua +3 -3
- package/engine/internal/unit+bonus.lua +3 -3
- package/engine/internal/unit-missile-launch.lua +12 -5
- package/engine/internal/unit.d.ts +2 -9
- package/engine/internal/unit.lua +79 -121
- package/engine/local-client.d.ts +6 -1
- package/engine/local-client.lua +60 -5
- 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 +84 -4
- package/engine/object-data/entry/buff-type/applicable.lua +113 -109
- package/engine/object-data/entry/destructible-type.d.ts +12 -0
- package/engine/object-data/entry/destructible-type.lua +78 -0
- package/engine/object-field/ability.lua +2 -2
- package/engine/object-field/item.d.ts +22 -0
- package/engine/object-field/item.lua +118 -0
- package/engine/object-field/unit.d.ts +7 -4
- package/engine/object-field/unit.lua +4 -0
- package/engine/object-field.d.ts +3 -1
- package/engine/object-field.lua +177 -119
- package/engine/random.d.ts +1 -0
- package/engine/random.lua +8 -0
- package/engine/standard/fields/item.d.ts +4 -0
- package/engine/standard/fields/item.lua +6 -0
- package/engine/standard/fields/unit.d.ts +11 -5
- package/engine/standard/fields/unit.lua +13 -4
- package/engine/unit.d.ts +3 -0
- package/engine/unit.lua +3 -0
- package/lualib_bundle.lua +1 -1
- package/math.d.ts +2 -0
- package/math.lua +14 -0
- package/objutil/buff.lua +9 -7
- package/objutil/object.lua +1 -1
- package/operation.lua +1 -4
- package/package.json +5 -5
- package/patch-lua.lua +15 -0
- package/utility/linked-map.d.ts +35 -0
- package/utility/linked-map.lua +107 -0
- package/utility/linked-set.d.ts +3 -1
- package/utility/linked-set.lua +27 -0
- package/utility/records.lua +20 -1
- package/utility/unordered-map.d.ts +27 -0
- package/utility/unordered-map.lua +99 -0
- /package/engine/internal/object-data/{armor-increase.d.ts → armor-bonus.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
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__New = ____lualib.__TS__New
|
|
3
|
+
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
4
|
+
local ____exports = {}
|
|
5
|
+
local ____event = require("event")
|
|
6
|
+
local Event = ____event.Event
|
|
7
|
+
local InitializingEvent = ____event.InitializingEvent
|
|
8
|
+
local TriggerEvent = ____event.TriggerEvent
|
|
9
|
+
local ____unit = require("engine.internal.unit")
|
|
10
|
+
local Unit = ____unit.Unit
|
|
11
|
+
local ____timer = require("core.types.timer")
|
|
12
|
+
local Timer = ____timer.Timer
|
|
13
|
+
local ____attributes = require("attributes")
|
|
14
|
+
local attribute = ____attributes.attribute
|
|
15
|
+
local ____linked_2Dmap = require("utility.linked-map")
|
|
16
|
+
local mutableLinkedMap = ____linked_2Dmap.mutableLinkedMap
|
|
17
|
+
local ____linked_2Dset = require("utility.linked-set")
|
|
18
|
+
local LinkedSet = ____linked_2Dset.LinkedSet
|
|
19
|
+
local mutableLinkedSet = ____linked_2Dset.mutableLinkedSet
|
|
20
|
+
local getTriggerUnit = GetTriggerUnit
|
|
21
|
+
local triggerRegisterUnitInRange = TriggerRegisterUnitInRange
|
|
22
|
+
local eventInvoke = Event.invoke
|
|
23
|
+
__TS__ObjectDefineProperty(
|
|
24
|
+
Unit.prototype,
|
|
25
|
+
"unitInRangeEvent",
|
|
26
|
+
{get = function(self)
|
|
27
|
+
local unit = self
|
|
28
|
+
local handle = self.handle
|
|
29
|
+
local unitInRangeEvent = setmetatable(
|
|
30
|
+
{},
|
|
31
|
+
{__index = function(self, value)
|
|
32
|
+
local event = __TS__New(
|
|
33
|
+
TriggerEvent,
|
|
34
|
+
function(trigger)
|
|
35
|
+
triggerRegisterUnitInRange(trigger, handle, value, nil)
|
|
36
|
+
end,
|
|
37
|
+
function() return unit, value, Unit:of(getTriggerUnit()) end
|
|
38
|
+
)
|
|
39
|
+
rawset(self, value, event)
|
|
40
|
+
return event
|
|
41
|
+
end}
|
|
42
|
+
)
|
|
43
|
+
rawset(self, "unitInRangeEvent", unitInRangeEvent)
|
|
44
|
+
return unitInRangeEvent
|
|
45
|
+
end}
|
|
46
|
+
)
|
|
47
|
+
local units = __TS__New(LinkedSet)
|
|
48
|
+
local unitsInRangeByRangeAttribute = attribute()
|
|
49
|
+
local function registerUnitOfRangeEvent(unit, range, unitInRange)
|
|
50
|
+
units:add(unit)
|
|
51
|
+
unit:getOrPut(unitsInRangeByRangeAttribute, mutableLinkedMap):getOrPut(range, mutableLinkedSet):add(unitInRange)
|
|
52
|
+
end
|
|
53
|
+
__TS__ObjectDefineProperty(
|
|
54
|
+
Unit.prototype,
|
|
55
|
+
"unitOutOfRangeEvent",
|
|
56
|
+
{get = function(self)
|
|
57
|
+
local unit = self
|
|
58
|
+
local unitOutOfRangeEvent = setmetatable(
|
|
59
|
+
{},
|
|
60
|
+
{__index = function(self, value)
|
|
61
|
+
local event = __TS__New(
|
|
62
|
+
InitializingEvent,
|
|
63
|
+
function()
|
|
64
|
+
unit.unitInRangeEvent[value]:addListener(999999, registerUnitOfRangeEvent)
|
|
65
|
+
end
|
|
66
|
+
)
|
|
67
|
+
rawset(self, value, event)
|
|
68
|
+
return event
|
|
69
|
+
end}
|
|
70
|
+
)
|
|
71
|
+
rawset(self, "unitOutOfRangeEvent", unitOutOfRangeEvent)
|
|
72
|
+
return unitOutOfRangeEvent
|
|
73
|
+
end}
|
|
74
|
+
)
|
|
75
|
+
Timer.onPeriod[1]:addListener(function()
|
|
76
|
+
for unit in pairs(units) do
|
|
77
|
+
local unitsInRangeByRange = unit[unitsInRangeByRangeAttribute]
|
|
78
|
+
if unitsInRangeByRange ~= nil then
|
|
79
|
+
for range, unitsInRange in pairs(unitsInRangeByRange) do
|
|
80
|
+
for unitInRange in pairs(unitsInRange) do
|
|
81
|
+
if unit:getDistanceTo(unitInRange) > range then
|
|
82
|
+
unitsInRange:remove(unitInRange)
|
|
83
|
+
eventInvoke(unit.unitOutOfRangeEvent[range], unit, range, unitInRange)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end)
|
|
90
|
+
return ____exports
|
|
@@ -4,16 +4,16 @@ local ____exports = {}
|
|
|
4
4
|
local ____unit = require("engine.internal.unit")
|
|
5
5
|
local Unit = ____unit.Unit
|
|
6
6
|
local ____unit = require("engine.standard.fields.unit")
|
|
7
|
-
local
|
|
7
|
+
local SCALING_VALUE_UNIT_FIELD = ____unit.SCALING_VALUE_UNIT_FIELD
|
|
8
8
|
__TS__ObjectDefineProperty(
|
|
9
9
|
Unit.prototype,
|
|
10
10
|
"scale",
|
|
11
11
|
{
|
|
12
12
|
get = function(self)
|
|
13
|
-
return
|
|
13
|
+
return SCALING_VALUE_UNIT_FIELD:getValue(self)
|
|
14
14
|
end,
|
|
15
15
|
set = function(self, value)
|
|
16
|
-
|
|
16
|
+
SCALING_VALUE_UNIT_FIELD:setValue(self, value)
|
|
17
17
|
end
|
|
18
18
|
}
|
|
19
19
|
)
|
|
@@ -3,9 +3,9 @@ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
|
3
3
|
local ____exports = {}
|
|
4
4
|
local ____unit = require("engine.internal.unit")
|
|
5
5
|
local Unit = ____unit.Unit
|
|
6
|
-
local
|
|
7
|
-
local ARMOR_BONUS_DUMMY_ABILITY_FIELD =
|
|
8
|
-
local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID =
|
|
6
|
+
local ____armor_2Dbonus = require("engine.internal.object-data.armor-bonus")
|
|
7
|
+
local ARMOR_BONUS_DUMMY_ABILITY_FIELD = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_FIELD
|
|
8
|
+
local ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID = ____armor_2Dbonus.ARMOR_BONUS_DUMMY_ABILITY_TYPE_ID
|
|
9
9
|
local getUnitAbility = BlzGetUnitAbility
|
|
10
10
|
local setAbilityRealLevelField = BlzSetAbilityRealLevelField
|
|
11
11
|
local unitAddAbility = UnitAddAbility
|
|
@@ -36,11 +36,18 @@ local instantOrderIds = luaSetOf(
|
|
|
36
36
|
orderId("undivineshield"),
|
|
37
37
|
orderId("unimmolation")
|
|
38
38
|
)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
---
|
|
40
|
+
-- @internal For use by internal systems only.
|
|
41
|
+
____exports.resetAutoAttackTimer = function(unit)
|
|
42
|
+
if units:remove(unit) then
|
|
43
|
+
unit[targetAttribute] = nil
|
|
44
|
+
unit[impactDelayAttribute] = nil
|
|
45
|
+
unit[passedTimeAttribute] = nil
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
local function reset(unit, orderId)
|
|
49
|
+
if not (instantOrderIds[orderId] ~= nil) then
|
|
50
|
+
____exports.resetAutoAttackTimer(unit)
|
|
44
51
|
end
|
|
45
52
|
end
|
|
46
53
|
Unit.onImmediateOrder:addListener(reset)
|
|
@@ -139,6 +139,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
139
139
|
private _fields?;
|
|
140
140
|
private getEvent;
|
|
141
141
|
constructor(handle: junit);
|
|
142
|
+
private saveData;
|
|
142
143
|
protected onDestroy(): HandleDestructor;
|
|
143
144
|
addAttackHandler(condition: AttackHandlerCondition, action: AttackHandlerAction): AttackHandler;
|
|
144
145
|
removeAttackHandler(handler: AttackHandler): boolean;
|
|
@@ -177,16 +178,10 @@ export declare class Unit extends Handle<junit> {
|
|
|
177
178
|
set xp(v: number);
|
|
178
179
|
get primaryAttribute(): UnitAttribute;
|
|
179
180
|
set primaryAttribute(primaryAttribute: UnitAttribute);
|
|
180
|
-
get strengthBase(): number;
|
|
181
|
-
set strengthBase(strengthBase: number);
|
|
182
181
|
get strengthBonus(): number;
|
|
183
182
|
get strength(): number;
|
|
184
|
-
get agilityBase(): number;
|
|
185
|
-
set agilityBase(agilityBase: number);
|
|
186
183
|
get agilityBonus(): number;
|
|
187
184
|
get agility(): number;
|
|
188
|
-
get intelligenceBase(): number;
|
|
189
|
-
set intelligenceBase(intelligenceBase: number);
|
|
190
185
|
get intelligenceBonus(): number;
|
|
191
186
|
get intelligence(): number;
|
|
192
187
|
get name(): string;
|
|
@@ -277,8 +272,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
277
272
|
getAbilityRemainingCooldown(abilityId: number): number;
|
|
278
273
|
startAbilityCooldown(abilityId: number, cooldown: number): void;
|
|
279
274
|
endAbilityCooldown(abilityId: number): void;
|
|
280
|
-
interruptMovement(): void;
|
|
281
|
-
interruptAttack(): void;
|
|
282
275
|
interruptCast(abilityId: number): void;
|
|
283
276
|
getDistanceTo(target: Unit | Vec2): number;
|
|
284
277
|
getCollisionDistanceTo(...target: [Unit] | [targetX: number, targetY: number]): number;
|
|
@@ -299,7 +292,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
299
292
|
set waygateDestination(v: Vec2);
|
|
300
293
|
get waygateDestination(): Vec2;
|
|
301
294
|
get abilities(): ReadonlyArray<UnitAbility>;
|
|
302
|
-
get onUnitInRange(): Record<number, Event<[Unit]>>;
|
|
303
295
|
get onManaEqual(): Record<number, Event<[Unit, number]>>;
|
|
304
296
|
get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
|
|
305
297
|
get targetAcquiredEvent(): Event;
|
|
@@ -318,6 +310,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
318
310
|
static getInCollisionRange(x: number, y: number, range: number, predicate?: (unit: Unit) => boolean): Unit[];
|
|
319
311
|
static getInSector(pos: Vec2, range: number, offsetAngle: number, centralAngle: number): Unit[];
|
|
320
312
|
static getSelectionOf(player: Player, target?: Unit[]): Unit[];
|
|
313
|
+
static readonly levelChangedEvent: UnitTriggerEvent<[]>;
|
|
321
314
|
static readonly deathEvent: UnitTriggerEvent<[Unit]>;
|
|
322
315
|
static readonly onDecay: UnitTriggerEvent<[]>;
|
|
323
316
|
static readonly onResurrect: InitializingEvent<[Unit], void>;
|
package/engine/internal/unit.lua
CHANGED
|
@@ -64,6 +64,8 @@ local ____ability = require("engine.internal.item.ability")
|
|
|
64
64
|
local doUnitAbilityAction = ____ability.doUnitAbilityAction
|
|
65
65
|
local ____synchronization = require("engine.synchronization")
|
|
66
66
|
local synchronizer = ____synchronization.synchronizer
|
|
67
|
+
local ____linked_2Dmap = require("utility.linked-map")
|
|
68
|
+
local LinkedMap = ____linked_2Dmap.LinkedMap
|
|
67
69
|
local match = string.match
|
|
68
70
|
local ____tostring = _G.tostring
|
|
69
71
|
local setUnitAnimation = SetUnitAnimation
|
|
@@ -73,16 +75,12 @@ local getUnitRealField = BlzGetUnitRealField
|
|
|
73
75
|
local getHeroStr = GetHeroStr
|
|
74
76
|
local getHeroAgi = GetHeroAgi
|
|
75
77
|
local getHeroInt = GetHeroInt
|
|
76
|
-
local setHeroStr = SetHeroStr
|
|
77
|
-
local setHeroAgi = SetHeroAgi
|
|
78
|
-
local setHeroInt = SetHeroInt
|
|
79
78
|
local getUnitBooleanField = BlzGetUnitBooleanField
|
|
80
79
|
local getUnitStringField = BlzGetUnitStringField
|
|
81
80
|
local setUnitIntegerField = BlzSetUnitIntegerField
|
|
82
81
|
local setUnitRealField = BlzSetUnitRealField
|
|
83
82
|
local setUnitBooleanField = BlzSetUnitBooleanField
|
|
84
83
|
local setUnitStringField = BlzSetUnitStringField
|
|
85
|
-
local setUnitScale = SetUnitScale
|
|
86
84
|
local setUnitPosition = SetUnitPosition
|
|
87
85
|
local setUnitTimeScale = SetUnitTimeScale
|
|
88
86
|
local getHandleId = GetHandleId
|
|
@@ -110,7 +108,6 @@ local getUnitWeaponStringField = BlzGetUnitWeaponStringField
|
|
|
110
108
|
local setUnitWeaponStringField = BlzSetUnitWeaponStringField
|
|
111
109
|
local getUnitAbilityLevel = GetUnitAbilityLevel
|
|
112
110
|
local unitDisableAbility = BlzUnitDisableAbility
|
|
113
|
-
local unitInterruptAttack = BlzUnitInterruptAttack
|
|
114
111
|
local isUnitInvisible = IsUnitInvisible
|
|
115
112
|
local isUnitVisible = IsUnitVisible
|
|
116
113
|
local getUnitX = GetUnitX
|
|
@@ -386,15 +383,27 @@ local modifiers = {
|
|
|
386
383
|
end,
|
|
387
384
|
armor = function(unit, value)
|
|
388
385
|
if UnitAddAbility(unit, armorBonusAbilityId) then
|
|
389
|
-
assert(
|
|
386
|
+
assert(
|
|
387
|
+
UnitMakeAbilityPermanent(unit, true, armorBonusAbilityId),
|
|
388
|
+
"armor bonus ability must be made permanent",
|
|
389
|
+
unit
|
|
390
|
+
)
|
|
390
391
|
end
|
|
391
|
-
local ability = assert(
|
|
392
|
-
|
|
393
|
-
ability,
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
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
|
+
)
|
|
398
407
|
end
|
|
399
408
|
}
|
|
400
409
|
local getters = {
|
|
@@ -648,13 +657,17 @@ local fieldSetters = {
|
|
|
648
657
|
}
|
|
649
658
|
local dummies = {}
|
|
650
659
|
for ____, player in ipairs(Player.all) do
|
|
651
|
-
local dummy = assert(
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
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
|
+
)
|
|
658
671
|
ShowUnit(dummy, false)
|
|
659
672
|
dummies[player] = dummy
|
|
660
673
|
end
|
|
@@ -697,41 +710,57 @@ function Unit.prototype.____constructor(self, handle)
|
|
|
697
710
|
nextSyncId = ____nextSyncId_1 + 1
|
|
698
711
|
self.syncId = ____nextSyncId_1
|
|
699
712
|
self._owner = Player:of(getOwningPlayer(handle))
|
|
700
|
-
assert(
|
|
701
|
-
|
|
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
|
+
)
|
|
702
723
|
if unitAddAbility(
|
|
703
724
|
handle,
|
|
704
725
|
fourCC("Amrf")
|
|
705
726
|
) then
|
|
706
|
-
assert(
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
727
|
+
assert(
|
|
728
|
+
unitRemoveAbility(
|
|
729
|
+
handle,
|
|
730
|
+
fourCC("Amrf")
|
|
731
|
+
),
|
|
732
|
+
"fly ability must be removed after addition",
|
|
733
|
+
self
|
|
734
|
+
)
|
|
710
735
|
end
|
|
711
736
|
unitBySyncId[self.syncId] = self
|
|
712
737
|
local ____ = self.abilities
|
|
713
738
|
end
|
|
714
|
-
function Unit.prototype.getEvent(self,
|
|
715
|
-
self.events = self.events or (
|
|
716
|
-
local eventId = GetHandleId(
|
|
717
|
-
|
|
718
|
-
|
|
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(
|
|
719
745
|
TriggerEvent,
|
|
720
746
|
function(trigger)
|
|
721
|
-
TriggerRegisterUnitEvent(trigger, self.handle,
|
|
747
|
+
TriggerRegisterUnitEvent(trigger, self.handle, jevent)
|
|
722
748
|
end,
|
|
723
749
|
collector or (function() return {} end)
|
|
724
750
|
)
|
|
751
|
+
self.events:put(eventId, event)
|
|
725
752
|
end
|
|
726
|
-
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))
|
|
727
760
|
end
|
|
728
761
|
function Unit.prototype.onDestroy(self)
|
|
729
762
|
local handle = self.handle
|
|
730
|
-
self
|
|
731
|
-
self[109] = getUnitY(handle)
|
|
732
|
-
if not self._owner then
|
|
733
|
-
self._owner = Player:of(getOwningPlayer(handle))
|
|
734
|
-
end
|
|
763
|
+
self:saveData()
|
|
735
764
|
local abilities = self.abilities
|
|
736
765
|
for ____, ability in ipairs(abilities) do
|
|
737
766
|
ability:destroy()
|
|
@@ -767,7 +796,11 @@ function Unit.prototype.addAttackHandler(self, condition, action)
|
|
|
767
796
|
self._attackHandlers = handlers
|
|
768
797
|
if #handlers == 1 then
|
|
769
798
|
local handle = self.handle
|
|
770
|
-
assert(
|
|
799
|
+
assert(
|
|
800
|
+
unitAddAbility(handle, attackHandlerAbilityId) and UnitMakeAbilityPermanent(handle, true, attackHandlerAbilityId),
|
|
801
|
+
"attack handler ability must be added",
|
|
802
|
+
self
|
|
803
|
+
)
|
|
771
804
|
end
|
|
772
805
|
return handler
|
|
773
806
|
end
|
|
@@ -980,24 +1013,6 @@ end
|
|
|
980
1013
|
function Unit.prototype.endAbilityCooldown(self, abilityId)
|
|
981
1014
|
BlzEndUnitAbilityCooldown(self.handle, abilityId)
|
|
982
1015
|
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
|
|
998
|
-
function Unit.prototype.interruptAttack(self)
|
|
999
|
-
unitInterruptAttack(self.handle)
|
|
1000
|
-
end
|
|
1001
1016
|
function Unit.prototype.interruptCast(self, abilityId)
|
|
1002
1017
|
local handle = self.handle
|
|
1003
1018
|
unitDisableAbility(handle, abilityId, true, false)
|
|
@@ -1392,19 +1407,6 @@ __TS__SetDescriptor(
|
|
|
1392
1407
|
},
|
|
1393
1408
|
true
|
|
1394
1409
|
)
|
|
1395
|
-
__TS__SetDescriptor(
|
|
1396
|
-
Unit.prototype,
|
|
1397
|
-
"strengthBase",
|
|
1398
|
-
{
|
|
1399
|
-
get = function(self)
|
|
1400
|
-
return getHeroStr(self.handle, false)
|
|
1401
|
-
end,
|
|
1402
|
-
set = function(self, strengthBase)
|
|
1403
|
-
setHeroStr(self.handle, strengthBase, true)
|
|
1404
|
-
end
|
|
1405
|
-
},
|
|
1406
|
-
true
|
|
1407
|
-
)
|
|
1408
1410
|
__TS__SetDescriptor(
|
|
1409
1411
|
Unit.prototype,
|
|
1410
1412
|
"strengthBonus",
|
|
@@ -1422,19 +1424,6 @@ __TS__SetDescriptor(
|
|
|
1422
1424
|
end},
|
|
1423
1425
|
true
|
|
1424
1426
|
)
|
|
1425
|
-
__TS__SetDescriptor(
|
|
1426
|
-
Unit.prototype,
|
|
1427
|
-
"agilityBase",
|
|
1428
|
-
{
|
|
1429
|
-
get = function(self)
|
|
1430
|
-
return getHeroAgi(self.handle, false)
|
|
1431
|
-
end,
|
|
1432
|
-
set = function(self, agilityBase)
|
|
1433
|
-
setHeroAgi(self.handle, agilityBase, true)
|
|
1434
|
-
end
|
|
1435
|
-
},
|
|
1436
|
-
true
|
|
1437
|
-
)
|
|
1438
1427
|
__TS__SetDescriptor(
|
|
1439
1428
|
Unit.prototype,
|
|
1440
1429
|
"agilityBonus",
|
|
@@ -1452,19 +1441,6 @@ __TS__SetDescriptor(
|
|
|
1452
1441
|
end},
|
|
1453
1442
|
true
|
|
1454
1443
|
)
|
|
1455
|
-
__TS__SetDescriptor(
|
|
1456
|
-
Unit.prototype,
|
|
1457
|
-
"intelligenceBase",
|
|
1458
|
-
{
|
|
1459
|
-
get = function(self)
|
|
1460
|
-
return getHeroInt(self.handle, false)
|
|
1461
|
-
end,
|
|
1462
|
-
set = function(self, intelligenceBase)
|
|
1463
|
-
setHeroInt(self.handle, intelligenceBase, true)
|
|
1464
|
-
end
|
|
1465
|
-
},
|
|
1466
|
-
true
|
|
1467
|
-
)
|
|
1468
1444
|
__TS__SetDescriptor(
|
|
1469
1445
|
Unit.prototype,
|
|
1470
1446
|
"intelligenceBonus",
|
|
@@ -2013,30 +1989,6 @@ __TS__SetDescriptor(
|
|
|
2013
1989
|
end},
|
|
2014
1990
|
true
|
|
2015
1991
|
)
|
|
2016
|
-
__TS__SetDescriptor(
|
|
2017
|
-
Unit.prototype,
|
|
2018
|
-
"onUnitInRange",
|
|
2019
|
-
{get = function(self)
|
|
2020
|
-
local handle = self.handle
|
|
2021
|
-
local onUnitInRange = setmetatable(
|
|
2022
|
-
{},
|
|
2023
|
-
{__index = function(self, value)
|
|
2024
|
-
local event = __TS__New(
|
|
2025
|
-
TriggerEvent,
|
|
2026
|
-
function(trigger)
|
|
2027
|
-
TriggerRegisterUnitInRangeSimple(trigger, value, handle)
|
|
2028
|
-
end,
|
|
2029
|
-
function() return ____exports.Unit:of(handle) end
|
|
2030
|
-
)
|
|
2031
|
-
rawset(self, value, event)
|
|
2032
|
-
return event
|
|
2033
|
-
end}
|
|
2034
|
-
)
|
|
2035
|
-
rawset(self, "onUnitInRange", onUnitInRange)
|
|
2036
|
-
return onUnitInRange
|
|
2037
|
-
end},
|
|
2038
|
-
true
|
|
2039
|
-
)
|
|
2040
1992
|
__TS__SetDescriptor(
|
|
2041
1993
|
Unit.prototype,
|
|
2042
1994
|
"onManaEqual",
|
|
@@ -2172,6 +2124,11 @@ __TS__SetDescriptor(
|
|
|
2172
2124
|
end},
|
|
2173
2125
|
true
|
|
2174
2126
|
)
|
|
2127
|
+
Unit.levelChangedEvent = __TS__New(
|
|
2128
|
+
____exports.UnitTriggerEvent,
|
|
2129
|
+
EVENT_PLAYER_HERO_LEVEL,
|
|
2130
|
+
function() return ____exports.Unit:of(getTriggerUnit()) end
|
|
2131
|
+
)
|
|
2175
2132
|
Unit.deathEvent = __TS__New(
|
|
2176
2133
|
____exports.UnitTriggerEvent,
|
|
2177
2134
|
EVENT_PLAYER_UNIT_DEATH,
|
|
@@ -2830,7 +2787,8 @@ Unit.synchronize = synchronizer(
|
|
|
2830
2787
|
return
|
|
2831
2788
|
end
|
|
2832
2789
|
end
|
|
2833
|
-
unit:
|
|
2790
|
+
unit:saveData()
|
|
2791
|
+
Timer:run(unit, "destroy")
|
|
2834
2792
|
end)
|
|
2835
2793
|
end
|
|
2836
2794
|
end)(Unit)
|
package/engine/local-client.d.ts
CHANGED
|
@@ -12,12 +12,17 @@ export declare class LocalClient {
|
|
|
12
12
|
static get isHD(): boolean;
|
|
13
13
|
static get graphicsMode(): GraphicsMode;
|
|
14
14
|
static get isActive(): boolean;
|
|
15
|
-
static
|
|
15
|
+
static get isMinimized(): boolean;
|
|
16
|
+
static pingMinimap(x: number, y: number, duration: number, ...parameters: [] | [red: number, green: number, blue: number, flashy?: boolean] | [color: Color, flashy?: boolean]): void;
|
|
16
17
|
static get mouseFocusUnit(): Async<Unit> | undefined;
|
|
17
18
|
static get mainSelectedUnit(): Async<Unit> | undefined;
|
|
18
19
|
static get mainSelectedUnitChangeEvent(): Event<[
|
|
19
20
|
previousMainSelectedUnit: Unit | undefined,
|
|
20
21
|
newMainSelectedUnit: Unit | undefined
|
|
21
22
|
]>;
|
|
23
|
+
static get isInTargetingMode(): boolean;
|
|
24
|
+
static readonly targetingModeEnterEvent: Event<[]>;
|
|
25
|
+
static readonly targetingModeLeaveEvent: Event<[]>;
|
|
26
|
+
static readonly targetingModeStateChangeEvent: Event<[]>;
|
|
22
27
|
static readonly onDisconnect: TriggerEvent<[]>;
|
|
23
28
|
}
|
package/engine/local-client.lua
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
|
|
3
|
+
local __TS__New = ____lualib.__TS__New
|
|
3
4
|
local __TS__Class = ____lualib.__TS__Class
|
|
4
5
|
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
5
6
|
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
6
|
-
local __TS__New = ____lualib.__TS__New
|
|
7
7
|
local ____exports = {}
|
|
8
|
+
local actualizeTargetingModeState
|
|
8
9
|
local ____unit = require("core.types.unit")
|
|
9
10
|
local Unit = ____unit.Unit
|
|
10
11
|
local ____event = require("event")
|
|
@@ -18,6 +19,8 @@ local ____timer = require("core.types.timer")
|
|
|
18
19
|
local Timer = ____timer.Timer
|
|
19
20
|
local ____color = require("core.types.color")
|
|
20
21
|
local Color = ____color.Color
|
|
22
|
+
local ____arrays = require("utility.arrays")
|
|
23
|
+
local array = ____arrays.array
|
|
21
24
|
local loadTOCFile = BlzLoadTOCFile
|
|
22
25
|
local getLocalClientWidth = BlzGetLocalClientWidth
|
|
23
26
|
local getLocalClientHeight = BlzGetLocalClientHeight
|
|
@@ -62,12 +65,16 @@ local function compareUnitsSelectionPriority(a, b)
|
|
|
62
65
|
end
|
|
63
66
|
local mainSelectedUnitChangeEvent
|
|
64
67
|
local previousMainSelectedUnit
|
|
68
|
+
local lastTargetingModeState = false
|
|
69
|
+
local targetingModeEnterEvent = __TS__New(Event)
|
|
70
|
+
local targetingModeLeaveEvent = __TS__New(Event)
|
|
71
|
+
local targetingModeStateChangeEvent = __TS__New(Event)
|
|
65
72
|
____exports.LocalClient = __TS__Class()
|
|
66
73
|
local LocalClient = ____exports.LocalClient
|
|
67
74
|
LocalClient.name = "LocalClient"
|
|
68
75
|
function LocalClient.prototype.____constructor(self)
|
|
69
76
|
end
|
|
70
|
-
function LocalClient.pingMinimap(self, x, y, duration, redOrColor,
|
|
77
|
+
function LocalClient.pingMinimap(self, x, y, duration, redOrColor, greenOrFlashy, blue, flashy)
|
|
71
78
|
if redOrColor == nil then
|
|
72
79
|
pingMinimap(x, y, duration)
|
|
73
80
|
elseif __TS__InstanceOf(redOrColor, Color) then
|
|
@@ -78,7 +85,7 @@ function LocalClient.pingMinimap(self, x, y, duration, redOrColor, greenOrExtraE
|
|
|
78
85
|
redOrColor.r,
|
|
79
86
|
redOrColor.g,
|
|
80
87
|
redOrColor.b,
|
|
81
|
-
|
|
88
|
+
greenOrFlashy or false
|
|
82
89
|
)
|
|
83
90
|
else
|
|
84
91
|
pingMinimapEx(
|
|
@@ -86,9 +93,9 @@ function LocalClient.pingMinimap(self, x, y, duration, redOrColor, greenOrExtraE
|
|
|
86
93
|
y,
|
|
87
94
|
duration,
|
|
88
95
|
redOrColor,
|
|
89
|
-
|
|
96
|
+
greenOrFlashy,
|
|
90
97
|
blue,
|
|
91
|
-
|
|
98
|
+
flashy or false
|
|
92
99
|
)
|
|
93
100
|
end
|
|
94
101
|
end
|
|
@@ -128,6 +135,13 @@ __TS__ObjectDefineProperty(
|
|
|
128
135
|
return isLocalClientActive()
|
|
129
136
|
end}
|
|
130
137
|
)
|
|
138
|
+
__TS__ObjectDefineProperty(
|
|
139
|
+
LocalClient,
|
|
140
|
+
"isMinimized",
|
|
141
|
+
{get = function(self)
|
|
142
|
+
return getLocalClientHeight() == 0
|
|
143
|
+
end}
|
|
144
|
+
)
|
|
131
145
|
__TS__ObjectDefineProperty(
|
|
132
146
|
LocalClient,
|
|
133
147
|
"mouseFocusUnit",
|
|
@@ -181,6 +195,16 @@ __TS__ObjectDefineProperty(
|
|
|
181
195
|
return mainSelectedUnitChangeEvent
|
|
182
196
|
end}
|
|
183
197
|
)
|
|
198
|
+
__TS__ObjectDefineProperty(
|
|
199
|
+
LocalClient,
|
|
200
|
+
"isInTargetingMode",
|
|
201
|
+
{get = function(self)
|
|
202
|
+
return actualizeTargetingModeState()
|
|
203
|
+
end}
|
|
204
|
+
)
|
|
205
|
+
LocalClient.targetingModeEnterEvent = targetingModeEnterEvent
|
|
206
|
+
LocalClient.targetingModeLeaveEvent = targetingModeLeaveEvent
|
|
207
|
+
LocalClient.targetingModeStateChangeEvent = targetingModeStateChangeEvent
|
|
184
208
|
LocalClient.onDisconnect = __TS__New(
|
|
185
209
|
TriggerEvent,
|
|
186
210
|
function(trigger)
|
|
@@ -188,6 +212,37 @@ LocalClient.onDisconnect = __TS__New(
|
|
|
188
212
|
end,
|
|
189
213
|
function() return end
|
|
190
214
|
)
|
|
215
|
+
local commandButtons = array(
|
|
216
|
+
12,
|
|
217
|
+
function(i) return Frame:byOrigin(ORIGIN_FRAME_COMMAND_BUTTON, i) end
|
|
218
|
+
)
|
|
219
|
+
local function getTargetingModeState()
|
|
220
|
+
for i = 0, 10 do
|
|
221
|
+
if commandButtons[i + 1].visible then
|
|
222
|
+
return false
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
return commandButtons[12].visible
|
|
226
|
+
end
|
|
227
|
+
actualizeTargetingModeState = function()
|
|
228
|
+
if getTargetingModeState() then
|
|
229
|
+
if not lastTargetingModeState then
|
|
230
|
+
lastTargetingModeState = true
|
|
231
|
+
Event.invoke(targetingModeEnterEvent)
|
|
232
|
+
Event.invoke(targetingModeStateChangeEvent)
|
|
233
|
+
end
|
|
234
|
+
return true
|
|
235
|
+
end
|
|
236
|
+
if lastTargetingModeState then
|
|
237
|
+
lastTargetingModeState = false
|
|
238
|
+
Event.invoke(targetingModeLeaveEvent)
|
|
239
|
+
Event.invoke(targetingModeStateChangeEvent)
|
|
240
|
+
end
|
|
241
|
+
return false
|
|
242
|
+
end
|
|
243
|
+
Timer.onPeriod[1 / 64]:addListener(function()
|
|
244
|
+
actualizeTargetingModeState()
|
|
245
|
+
end)
|
|
191
246
|
warpack.afterMapInit(function()
|
|
192
247
|
rawset(
|
|
193
248
|
____exports.LocalClient,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
local ____exports = {}
|
|
2
|
-
____exports.UnitAttribute = UnitAttribute or ({})
|
|
2
|
+
____exports.UnitAttribute = ____exports.UnitAttribute or ({})
|
|
3
3
|
____exports.UnitAttribute.STRENGTH = 1
|
|
4
4
|
____exports.UnitAttribute[____exports.UnitAttribute.STRENGTH] = "STRENGTH"
|
|
5
5
|
____exports.UnitAttribute.INTELLIGENCE = 2
|