warscript 0.0.1-dev.46e7a52 → 0.0.1-dev.4724d95
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.d.ts +1 -0
- package/core/types/frame.lua +112 -37
- 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 +2 -1
- package/core/types/player.lua +16 -12
- package/core/types/sound.lua +1 -1
- package/core/types/tileCell.d.ts +2 -1
- package/core/types/tileCell.lua +5 -0
- package/destroyable.d.ts +1 -0
- package/destroyable.lua +9 -0
- package/engine/behavior.d.ts +10 -2
- package/engine/behavior.lua +157 -76
- package/engine/behaviour/ability/apply-buff.lua +4 -4
- 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 +11 -6
- package/engine/behaviour/ability.lua +31 -1
- package/engine/behaviour/unit/stun-immunity.d.ts +7 -5
- package/engine/behaviour/unit/stun-immunity.lua +6 -5
- package/engine/behaviour/unit.d.ts +7 -3
- package/engine/behaviour/unit.lua +101 -24
- package/engine/buff.d.ts +65 -18
- package/engine/buff.lua +351 -147
- 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/ability.lua +12 -2
- 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/pseudo-passive-abilities.d.ts +2 -0
- package/engine/internal/unit/pseudo-passive-abilities.lua +8 -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.d.ts +7 -0
- package/engine/internal/unit/scale.lua +20 -0
- package/engine/internal/unit+bonus.lua +3 -3
- package/engine/internal/unit-missile-launch.lua +12 -5
- package/engine/internal/unit.d.ts +2 -13
- package/engine/internal/unit.lua +79 -148
- 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/blank-configurable.d.ts +3 -0
- package/engine/object-data/entry/ability-type/blank-configurable.lua +29 -0
- 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 +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.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 +20 -5
- package/engine/object-field/unit.lua +61 -0
- package/engine/object-field.d.ts +10 -2
- package/engine/object-field.lua +268 -123
- package/engine/random.d.ts +1 -0
- package/engine/random.lua +8 -0
- package/engine/standard/fields/ability.d.ts +2 -2
- package/engine/standard/fields/ability.lua +2 -2
- 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 -3
- package/engine/standard/fields/unit.lua +15 -2
- package/engine/text-tag.lua +2 -1
- package/engine/unit.d.ts +5 -0
- package/engine/unit.lua +5 -0
- package/event.d.ts +1 -1
- package/lualib_bundle.lua +1 -1
- package/math.d.ts +2 -0
- package/math.lua +14 -0
- package/network.lua +25 -1
- package/objutil/buff.lua +9 -7
- package/objutil/object.lua +1 -1
- package/operation.d.ts +8 -1
- package/operation.lua +38 -18
- 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/random.d.ts +102 -0
- package/utility/random.lua +273 -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,12 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { Event } from "../../../event";
|
|
3
|
+
declare module "../unit" {
|
|
4
|
+
interface Unit {
|
|
5
|
+
readonly unitInRangeEvent: Record<number, Event<[unit: Unit, range: number, unitInRange: Unit]>>;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
declare module "../unit" {
|
|
9
|
+
interface Unit {
|
|
10
|
+
readonly unitOutOfRangeEvent: Record<number, Event<[unit: Unit, range: number, unitOutOfRange: Unit]>>;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
3
|
+
local ____exports = {}
|
|
4
|
+
local ____unit = require("engine.internal.unit")
|
|
5
|
+
local Unit = ____unit.Unit
|
|
6
|
+
local ____unit = require("engine.standard.fields.unit")
|
|
7
|
+
local SCALING_VALUE_UNIT_FIELD = ____unit.SCALING_VALUE_UNIT_FIELD
|
|
8
|
+
__TS__ObjectDefineProperty(
|
|
9
|
+
Unit.prototype,
|
|
10
|
+
"scale",
|
|
11
|
+
{
|
|
12
|
+
get = function(self)
|
|
13
|
+
return SCALING_VALUE_UNIT_FIELD:getValue(self)
|
|
14
|
+
end,
|
|
15
|
+
set = function(self, value)
|
|
16
|
+
SCALING_VALUE_UNIT_FIELD:setValue(self, value)
|
|
17
|
+
end
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
return ____exports
|
|
@@ -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;
|
|
@@ -220,8 +215,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
220
215
|
set facing(v: number);
|
|
221
216
|
get speed(): number;
|
|
222
217
|
set speed(v: number);
|
|
223
|
-
get flyHeight(): number;
|
|
224
|
-
set flyHeight(v: number);
|
|
225
218
|
get x(): number;
|
|
226
219
|
set x(v: number);
|
|
227
220
|
get y(): number;
|
|
@@ -245,8 +238,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
245
238
|
get isInvulnerable(): boolean;
|
|
246
239
|
get vertexColor(): Color;
|
|
247
240
|
set vertexColor(v: Color);
|
|
248
|
-
get scale(): number;
|
|
249
|
-
set scale(v: number);
|
|
250
241
|
get timeScale(): number;
|
|
251
242
|
set timeScale(v: number);
|
|
252
243
|
get collisionSize(): number;
|
|
@@ -281,8 +272,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
281
272
|
getAbilityRemainingCooldown(abilityId: number): number;
|
|
282
273
|
startAbilityCooldown(abilityId: number, cooldown: number): void;
|
|
283
274
|
endAbilityCooldown(abilityId: number): void;
|
|
284
|
-
interruptMovement(): void;
|
|
285
|
-
interruptAttack(): void;
|
|
286
275
|
interruptCast(abilityId: number): void;
|
|
287
276
|
getDistanceTo(target: Unit | Vec2): number;
|
|
288
277
|
getCollisionDistanceTo(...target: [Unit] | [targetX: number, targetY: number]): number;
|
|
@@ -303,7 +292,6 @@ export declare class Unit extends Handle<junit> {
|
|
|
303
292
|
set waygateDestination(v: Vec2);
|
|
304
293
|
get waygateDestination(): Vec2;
|
|
305
294
|
get abilities(): ReadonlyArray<UnitAbility>;
|
|
306
|
-
get onUnitInRange(): Record<number, Event<[Unit]>>;
|
|
307
295
|
get onManaEqual(): Record<number, Event<[Unit, number]>>;
|
|
308
296
|
get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
|
|
309
297
|
get targetAcquiredEvent(): Event;
|
|
@@ -322,6 +310,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
322
310
|
static getInCollisionRange(x: number, y: number, range: number, predicate?: (unit: Unit) => boolean): Unit[];
|
|
323
311
|
static getInSector(pos: Vec2, range: number, offsetAngle: number, centralAngle: number): Unit[];
|
|
324
312
|
static getSelectionOf(player: Player, target?: Unit[]): Unit[];
|
|
313
|
+
static readonly levelChangedEvent: UnitTriggerEvent<[]>;
|
|
325
314
|
static readonly deathEvent: UnitTriggerEvent<[Unit]>;
|
|
326
315
|
static readonly onDecay: UnitTriggerEvent<[]>;
|
|
327
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",
|
|
@@ -1685,19 +1661,6 @@ __TS__SetDescriptor(
|
|
|
1685
1661
|
},
|
|
1686
1662
|
true
|
|
1687
1663
|
)
|
|
1688
|
-
__TS__SetDescriptor(
|
|
1689
|
-
Unit.prototype,
|
|
1690
|
-
"flyHeight",
|
|
1691
|
-
{
|
|
1692
|
-
get = function(self)
|
|
1693
|
-
return getUnitFlyHeight(self.handle)
|
|
1694
|
-
end,
|
|
1695
|
-
set = function(self, v)
|
|
1696
|
-
SetUnitFlyHeight(self.handle, v, 100000)
|
|
1697
|
-
end
|
|
1698
|
-
},
|
|
1699
|
-
true
|
|
1700
|
-
)
|
|
1701
1664
|
__TS__SetDescriptor(
|
|
1702
1665
|
Unit.prototype,
|
|
1703
1666
|
"x",
|
|
@@ -1890,20 +1853,6 @@ __TS__SetDescriptor(
|
|
|
1890
1853
|
},
|
|
1891
1854
|
true
|
|
1892
1855
|
)
|
|
1893
|
-
__TS__SetDescriptor(
|
|
1894
|
-
Unit.prototype,
|
|
1895
|
-
"scale",
|
|
1896
|
-
{
|
|
1897
|
-
get = function(self)
|
|
1898
|
-
return getUnitRealField(self.handle, UNIT_RF_SCALING_VALUE)
|
|
1899
|
-
end,
|
|
1900
|
-
set = function(self, v)
|
|
1901
|
-
setUnitScale(self.handle, v, v, v)
|
|
1902
|
-
setUnitRealField(self.handle, UNIT_RF_SCALING_VALUE, v)
|
|
1903
|
-
end
|
|
1904
|
-
},
|
|
1905
|
-
true
|
|
1906
|
-
)
|
|
1907
1856
|
__TS__SetDescriptor(
|
|
1908
1857
|
Unit.prototype,
|
|
1909
1858
|
"timeScale",
|
|
@@ -2040,30 +1989,6 @@ __TS__SetDescriptor(
|
|
|
2040
1989
|
end},
|
|
2041
1990
|
true
|
|
2042
1991
|
)
|
|
2043
|
-
__TS__SetDescriptor(
|
|
2044
|
-
Unit.prototype,
|
|
2045
|
-
"onUnitInRange",
|
|
2046
|
-
{get = function(self)
|
|
2047
|
-
local handle = self.handle
|
|
2048
|
-
local onUnitInRange = setmetatable(
|
|
2049
|
-
{},
|
|
2050
|
-
{__index = function(self, value)
|
|
2051
|
-
local event = __TS__New(
|
|
2052
|
-
TriggerEvent,
|
|
2053
|
-
function(trigger)
|
|
2054
|
-
TriggerRegisterUnitInRangeSimple(trigger, value, handle)
|
|
2055
|
-
end,
|
|
2056
|
-
function() return ____exports.Unit:of(handle) end
|
|
2057
|
-
)
|
|
2058
|
-
rawset(self, value, event)
|
|
2059
|
-
return event
|
|
2060
|
-
end}
|
|
2061
|
-
)
|
|
2062
|
-
rawset(self, "onUnitInRange", onUnitInRange)
|
|
2063
|
-
return onUnitInRange
|
|
2064
|
-
end},
|
|
2065
|
-
true
|
|
2066
|
-
)
|
|
2067
1992
|
__TS__SetDescriptor(
|
|
2068
1993
|
Unit.prototype,
|
|
2069
1994
|
"onManaEqual",
|
|
@@ -2199,6 +2124,11 @@ __TS__SetDescriptor(
|
|
|
2199
2124
|
end},
|
|
2200
2125
|
true
|
|
2201
2126
|
)
|
|
2127
|
+
Unit.levelChangedEvent = __TS__New(
|
|
2128
|
+
____exports.UnitTriggerEvent,
|
|
2129
|
+
EVENT_PLAYER_HERO_LEVEL,
|
|
2130
|
+
function() return ____exports.Unit:of(getTriggerUnit()) end
|
|
2131
|
+
)
|
|
2202
2132
|
Unit.deathEvent = __TS__New(
|
|
2203
2133
|
____exports.UnitTriggerEvent,
|
|
2204
2134
|
EVENT_PLAYER_UNIT_DEATH,
|
|
@@ -2857,7 +2787,8 @@ Unit.synchronize = synchronizer(
|
|
|
2857
2787
|
return
|
|
2858
2788
|
end
|
|
2859
2789
|
end
|
|
2860
|
-
unit:
|
|
2790
|
+
unit:saveData()
|
|
2791
|
+
Timer:run(unit, "destroy")
|
|
2861
2792
|
end)
|
|
2862
2793
|
end
|
|
2863
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
|
}
|