warscript 0.0.1-dev.e7b1f67 → 0.0.1-dev.eb92d79
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/binaryreader.d.ts +1 -0
- package/binaryreader.lua +3 -0
- package/core/types/frame.d.ts +4 -0
- package/core/types/frame.lua +22 -1
- package/core/util.d.ts +1 -1
- package/core/util.lua +6 -0
- package/engine/behavior.d.ts +4 -4
- package/engine/behaviour/ability/apply-buff.d.ts +3 -5
- package/engine/behaviour/ability/damage.d.ts +33 -11
- package/engine/behaviour/ability/damage.lua +89 -31
- package/engine/behaviour/ability/heal.d.ts +33 -6
- package/engine/behaviour/ability/heal.lua +89 -10
- package/engine/behaviour/ability/restore-mana.d.ts +15 -0
- package/engine/behaviour/ability/restore-mana.lua +29 -0
- package/engine/behaviour/unit.d.ts +5 -0
- package/engine/behaviour/unit.lua +20 -0
- package/engine/buff.d.ts +60 -18
- package/engine/buff.lua +239 -62
- package/engine/game-map.d.ts +7 -0
- package/engine/game-map.lua +32 -0
- package/engine/internal/ability.d.ts +1 -11
- package/engine/internal/ability.lua +2 -78
- package/engine/internal/item+owner.lua +2 -2
- package/engine/internal/unit/bonus.d.ts +4 -2
- package/engine/internal/unit/bonus.lua +6 -1
- package/engine/internal/unit/item.d.ts +23 -0
- package/engine/internal/unit/item.lua +74 -0
- package/engine/internal/unit+ability.lua +2 -2
- package/engine/internal/unit+transport.lua +4 -10
- package/engine/internal/unit-missile-launch.lua +24 -5
- package/engine/internal/unit.d.ts +6 -4
- package/engine/internal/unit.lua +45 -31
- package/engine/object-data/entry/item-type.d.ts +12 -0
- package/engine/object-data/entry/item-type.lua +78 -0
- package/engine/object-field/ability.d.ts +17 -0
- package/engine/object-field/ability.lua +51 -1
- package/engine/unit.d.ts +1 -0
- package/engine/unit.lua +1 -0
- package/lualib_bundle.lua +7 -2
- package/net/socket.d.ts +7 -1
- package/net/socket.lua +45 -4
- package/network.d.ts +1 -0
- package/network.lua +3 -2
- package/objutil/buff.lua +1 -1
- package/package.json +2 -2
- package/property.d.ts +55 -0
- package/property.lua +374 -0
- package/utility/linked-set.d.ts +11 -2
- package/utility/linked-set.lua +5 -2
- package/utility/types.d.ts +1 -0
- package/core/mapbounds.d.ts +0 -8
- package/core/mapbounds.lua +0 -12
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
4
|
+
local ____exports = {}
|
|
5
|
+
local ____rect = require("core.types.rect")
|
|
6
|
+
local Rect = ____rect.Rect
|
|
7
|
+
local ____region = require("core.types.region")
|
|
8
|
+
local Region = ____region.Region
|
|
9
|
+
____exports.GameMap = __TS__Class()
|
|
10
|
+
local GameMap = ____exports.GameMap
|
|
11
|
+
GameMap.name = "GameMap"
|
|
12
|
+
function GameMap.prototype.____constructor(self)
|
|
13
|
+
end
|
|
14
|
+
__TS__ObjectDefineProperty(
|
|
15
|
+
GameMap,
|
|
16
|
+
"worldBoundsRect",
|
|
17
|
+
{get = function(self)
|
|
18
|
+
local rect = Rect:of(GetWorldBounds())
|
|
19
|
+
rawset(self, "worldBoundsRect", rect)
|
|
20
|
+
return rect
|
|
21
|
+
end}
|
|
22
|
+
)
|
|
23
|
+
__TS__ObjectDefineProperty(
|
|
24
|
+
GameMap,
|
|
25
|
+
"worldBoundsRegion",
|
|
26
|
+
{get = function(self)
|
|
27
|
+
local region = Region:create(self.worldBoundsRect)
|
|
28
|
+
rawset(self, "worldBoundsRegion", region)
|
|
29
|
+
return region
|
|
30
|
+
end}
|
|
31
|
+
)
|
|
32
|
+
return ____exports
|
|
@@ -4,14 +4,6 @@ import { Event } from "../../event";
|
|
|
4
4
|
import type { Item } from "../../core/types/item";
|
|
5
5
|
import type { Unit } from "./unit";
|
|
6
6
|
import type { AbilityTypeId } from "../object-data/entry/ability-type";
|
|
7
|
-
interface Fields<K, V> {
|
|
8
|
-
set(field: K, value: V): boolean;
|
|
9
|
-
get(field: K): V;
|
|
10
|
-
has(field: K): boolean;
|
|
11
|
-
}
|
|
12
|
-
interface AbilityLevel {
|
|
13
|
-
realFields: Fields<jabilityreallevelfield, number>;
|
|
14
|
-
}
|
|
15
7
|
export type jabilityfield = jabilityintegerfield | jabilityrealfield | jabilitybooleanfield | jabilitystringfield | jabilityintegerlevelfield | jabilityreallevelfield | jabilitybooleanlevelfield | jabilitystringlevelfield;
|
|
16
8
|
export declare class AbilitySnapshot {
|
|
17
9
|
}
|
|
@@ -40,8 +32,7 @@ export declare abstract class Ability extends Handle<jability> {
|
|
|
40
32
|
setField(field: jabilityintegerlevelfield | jabilityreallevelfield, level: number, value: number): boolean;
|
|
41
33
|
setField(field: jabilitybooleanlevelfield, level: number, value: boolean): boolean;
|
|
42
34
|
setField(field: jabilitystringlevelfield, level: number, value: string): boolean;
|
|
43
|
-
get
|
|
44
|
-
get levels(): readonly AbilityLevel[];
|
|
35
|
+
get levelCount(): number;
|
|
45
36
|
abstract get level(): number;
|
|
46
37
|
static get onCreate(): Event<[Ability]>;
|
|
47
38
|
static get destroyEvent(): Event<[Ability]>;
|
|
@@ -88,4 +79,3 @@ export declare class ItemAbility extends Ability {
|
|
|
88
79
|
static get onCreate(): Event<[ItemAbility]>;
|
|
89
80
|
static get onDestroy(): Event<[ItemAbility]>;
|
|
90
81
|
}
|
|
91
|
-
export {};
|
|
@@ -2,7 +2,6 @@ local ____lualib = require("lualib_bundle")
|
|
|
2
2
|
local __TS__ArrayMap = ____lualib.__TS__ArrayMap
|
|
3
3
|
local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
|
|
4
4
|
local __TS__Class = ____lualib.__TS__Class
|
|
5
|
-
local __TS__New = ____lualib.__TS__New
|
|
6
5
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
7
6
|
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
8
7
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
@@ -33,7 +32,6 @@ local getAbilityStringLevelField = BlzGetAbilityStringLevelField
|
|
|
33
32
|
local getUnitAbilityCooldownRemaining = BlzGetUnitAbilityCooldownRemaining
|
|
34
33
|
local startUnitAbilityCooldown = BlzStartUnitAbilityCooldown
|
|
35
34
|
local getHandleId = GetHandleId
|
|
36
|
-
local getItemAbility = BlzGetItemAbility
|
|
37
35
|
local match = string.match
|
|
38
36
|
local ____type = _G.type
|
|
39
37
|
local ____tostring = _G.tostring
|
|
@@ -151,55 +149,6 @@ local orders = postcompile(function()
|
|
|
151
149
|
end
|
|
152
150
|
return orders
|
|
153
151
|
end)
|
|
154
|
-
local RealFields = __TS__Class()
|
|
155
|
-
RealFields.name = "RealFields"
|
|
156
|
-
function RealFields.prototype.____constructor(self, handle)
|
|
157
|
-
self.handle = handle
|
|
158
|
-
end
|
|
159
|
-
function RealFields.prototype.set(self, field, value)
|
|
160
|
-
return BlzSetAbilityRealField(self.handle, field, value)
|
|
161
|
-
end
|
|
162
|
-
function RealFields.prototype.get(self, field)
|
|
163
|
-
return BlzGetAbilityRealField(self.handle, field)
|
|
164
|
-
end
|
|
165
|
-
function RealFields.prototype.has(self, field)
|
|
166
|
-
local handle = self.handle
|
|
167
|
-
return BlzSetAbilityRealField(
|
|
168
|
-
handle,
|
|
169
|
-
field,
|
|
170
|
-
BlzGetAbilityRealField(handle, field)
|
|
171
|
-
)
|
|
172
|
-
end
|
|
173
|
-
local RealLevelFields = __TS__Class()
|
|
174
|
-
RealLevelFields.name = "RealLevelFields"
|
|
175
|
-
function RealLevelFields.prototype.____constructor(self, handle, level)
|
|
176
|
-
self.handle = handle
|
|
177
|
-
self.level = level
|
|
178
|
-
end
|
|
179
|
-
function RealLevelFields.prototype.set(self, field, value)
|
|
180
|
-
return BlzSetAbilityRealLevelField(self.handle, field, self.level, value)
|
|
181
|
-
end
|
|
182
|
-
function RealLevelFields.prototype.get(self, field)
|
|
183
|
-
return BlzGetAbilityRealLevelField(self.handle, field, self.level)
|
|
184
|
-
end
|
|
185
|
-
function RealLevelFields.prototype.has(self, field)
|
|
186
|
-
local handle = self.handle
|
|
187
|
-
return BlzSetAbilityRealLevelField(
|
|
188
|
-
handle,
|
|
189
|
-
field,
|
|
190
|
-
0,
|
|
191
|
-
BlzGetAbilityRealLevelField(handle, field, 0)
|
|
192
|
-
)
|
|
193
|
-
end
|
|
194
|
-
local realLevelMetatable = {__index = self}
|
|
195
|
-
local levelDescriptors = {realFields = function(self, handle, level)
|
|
196
|
-
return __TS__New(RealLevelFields, handle, level)
|
|
197
|
-
end}
|
|
198
|
-
local levelMetatable = {__index = function(self, key)
|
|
199
|
-
local fields = levelDescriptors[key](levelDescriptors, self.handle, self.level)
|
|
200
|
-
rawset(self, key, fields)
|
|
201
|
-
return fields
|
|
202
|
-
end}
|
|
203
152
|
local fieldGetters = {
|
|
204
153
|
abilityintegerfield = function(ability, field)
|
|
205
154
|
return getAbilityIntegerField(ability.handle, field)
|
|
@@ -355,34 +304,9 @@ __TS__SetDescriptor(
|
|
|
355
304
|
)
|
|
356
305
|
__TS__SetDescriptor(
|
|
357
306
|
Ability.prototype,
|
|
358
|
-
"
|
|
307
|
+
"levelCount",
|
|
359
308
|
{get = function(self)
|
|
360
|
-
|
|
361
|
-
rawset(self, "realFields", realFields)
|
|
362
|
-
return realFields
|
|
363
|
-
end},
|
|
364
|
-
true
|
|
365
|
-
)
|
|
366
|
-
__TS__SetDescriptor(
|
|
367
|
-
Ability.prototype,
|
|
368
|
-
"levels",
|
|
369
|
-
{get = function(self)
|
|
370
|
-
local handle = self.handle
|
|
371
|
-
local levels = setmetatable(
|
|
372
|
-
{},
|
|
373
|
-
{
|
|
374
|
-
__len = function(self)
|
|
375
|
-
return BlzGetAbilityIntegerField(handle, ABILITY_IF_LEVELS)
|
|
376
|
-
end,
|
|
377
|
-
__index = function(self, i)
|
|
378
|
-
local level = setmetatable({handle = handle, level = i - 1}, levelMetatable)
|
|
379
|
-
self[i] = level
|
|
380
|
-
return level
|
|
381
|
-
end
|
|
382
|
-
}
|
|
383
|
-
)
|
|
384
|
-
rawset(self, "levels", levels)
|
|
385
|
-
return levels
|
|
309
|
+
return self:getField(ABILITY_IF_LEVELS)
|
|
386
310
|
end},
|
|
387
311
|
true
|
|
388
312
|
)
|
|
@@ -6,10 +6,10 @@ local Item = ____item.Item
|
|
|
6
6
|
local ____unit = require("engine.internal.unit")
|
|
7
7
|
local Unit = ____unit.Unit
|
|
8
8
|
local ownerByItem = setmetatable({}, {__mode = "kv"})
|
|
9
|
-
Unit.
|
|
9
|
+
Unit.itemPickedUpEvent:addListener(function(unit, item)
|
|
10
10
|
ownerByItem[item] = unit
|
|
11
11
|
end)
|
|
12
|
-
Unit.
|
|
12
|
+
Unit.itemDroppedEvent:addListener(function(unit, item)
|
|
13
13
|
ownerByItem[item] = nil
|
|
14
14
|
end)
|
|
15
15
|
__TS__ObjectDefineProperty(
|
|
@@ -8,7 +8,8 @@ export type UnitBonusId<Brand extends string = any> = number & {
|
|
|
8
8
|
export type UnitArmorBonusId = UnitBonusId<"armor">;
|
|
9
9
|
export type UnitAttackSpeedFactorBonusId = UnitBonusId<"attackSpeedFactor">;
|
|
10
10
|
export type UnitMovementSpeedFactorBonusId = UnitBonusId<"movementSpeedFactor">;
|
|
11
|
-
export type
|
|
11
|
+
export type UnitAutoAttackDamageBonusId = UnitBonusId<"autoAttackDamage">;
|
|
12
|
+
export type UnitDamageFactorBonusId = UnitBonusId<"damageFactor">;
|
|
12
13
|
export type UnitReceivedDamageFactorBonusId = UnitBonusId<"receivedDamageFactor">;
|
|
13
14
|
export type UnitBonusType<Id extends UnitBonusId = UnitBonusId> = ({
|
|
14
15
|
abilityTypeId: AbilityTypeId;
|
|
@@ -30,7 +31,8 @@ export declare namespace UnitBonusType {
|
|
|
30
31
|
const ARMOR: UnitBonusType<UnitArmorBonusId>;
|
|
31
32
|
const ATTACK_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
|
|
32
33
|
const MOVEMENT_SPEED_FACTOR: UnitBonusType<UnitAttackSpeedFactorBonusId>;
|
|
33
|
-
const
|
|
34
|
+
const AUTO_ATTACK_DAMAGE: UnitBonusType<UnitAutoAttackDamageBonusId>;
|
|
35
|
+
const DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
|
|
34
36
|
const RECEIVED_DAMAGE_FACTOR: UnitBonusType<UnitReceivedDamageFactorBonusId>;
|
|
35
37
|
}
|
|
36
38
|
export declare const addUnitBonus: <Id extends UnitBonusId>(unit: Unit, bonusType: UnitBonusType<Id>, value: number) => Id;
|
|
@@ -21,6 +21,7 @@ local AUTO_ATTACK_DAMAGE_INCREASE_DUMMY_ABILITY_TYPE_ID = ____auto_2Dattack_2Dda
|
|
|
21
21
|
local ____movement_2Dspeed_2Dincrease_2Dfactor = require("engine.internal.object-data.movement-speed-increase-factor")
|
|
22
22
|
local MOVEMENT_SPEED_INCREASE_FACTOR_ABILITY_FIELD = ____movement_2Dspeed_2Dincrease_2Dfactor.MOVEMENT_SPEED_INCREASE_FACTOR_ABILITY_FIELD
|
|
23
23
|
local MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID = ____movement_2Dspeed_2Dincrease_2Dfactor.MOVEMENT_SPEED_INCREASE_FACTOR_DUMMY_ABILITY_TYPE_ID
|
|
24
|
+
local damageFactorByUnit = {}
|
|
24
25
|
local receivedDamageFactorByUnit = {}
|
|
25
26
|
____exports.UnitBonusType = {}
|
|
26
27
|
local UnitBonusType = ____exports.UnitBonusType
|
|
@@ -46,13 +47,14 @@ do
|
|
|
46
47
|
reduce = sum,
|
|
47
48
|
initialValue = 0
|
|
48
49
|
}
|
|
49
|
-
UnitBonusType.
|
|
50
|
+
UnitBonusType.AUTO_ATTACK_DAMAGE = {
|
|
50
51
|
abilityTypeId = AUTO_ATTACK_DAMAGE_INCREASE_DUMMY_ABILITY_TYPE_ID,
|
|
51
52
|
field = AUTO_ATTACK_DAMAGE_INCREASE_ABILITY_FIELD,
|
|
52
53
|
integer = false,
|
|
53
54
|
reduce = sum,
|
|
54
55
|
initialValue = 0
|
|
55
56
|
}
|
|
57
|
+
UnitBonusType.DAMAGE_FACTOR = {reduce = product, valueByUnit = damageFactorByUnit, initialValue = 1}
|
|
56
58
|
UnitBonusType.RECEIVED_DAMAGE_FACTOR = {reduce = product, valueByUnit = receivedDamageFactorByUnit, initialValue = 1}
|
|
57
59
|
end
|
|
58
60
|
local bonusesByUnitByBonusType = {}
|
|
@@ -180,6 +182,9 @@ end
|
|
|
180
182
|
Unit.onDamage:addListener(
|
|
181
183
|
4,
|
|
182
184
|
function(source, target, event)
|
|
185
|
+
if source ~= nil and damageFactorByUnit[source] ~= nil then
|
|
186
|
+
event.amount = event.amount * damageFactorByUnit[source]
|
|
187
|
+
end
|
|
183
188
|
if receivedDamageFactorByUnit[target] ~= nil then
|
|
184
189
|
event.amount = event.amount * receivedDamageFactorByUnit[target]
|
|
185
190
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { Item } from "../item";
|
|
3
|
+
export interface UnitItems extends ReadonlyArray<Item | undefined> {
|
|
4
|
+
readonly length: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
5
|
+
[0]: Item | undefined;
|
|
6
|
+
[1]: Item | undefined;
|
|
7
|
+
[2]: Item | undefined;
|
|
8
|
+
[3]: Item | undefined;
|
|
9
|
+
[4]: Item | undefined;
|
|
10
|
+
[5]: Item | undefined;
|
|
11
|
+
}
|
|
12
|
+
export declare class UnitItems {
|
|
13
|
+
constructor(handle: junit);
|
|
14
|
+
protected __newindex(slot: number, item: Item | undefined): void;
|
|
15
|
+
protected __index(key: string | number): unknown;
|
|
16
|
+
protected __len(): number;
|
|
17
|
+
protected __ipairs(): LuaIterator<LuaMultiReturn<[number, Item | undefined]>, junit>;
|
|
18
|
+
}
|
|
19
|
+
declare module "../unit" {
|
|
20
|
+
interface Unit {
|
|
21
|
+
readonly items: UnitItems;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__New = ____lualib.__TS__New
|
|
4
|
+
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
5
|
+
local ____exports = {}
|
|
6
|
+
local ____item = require("engine.internal.item")
|
|
7
|
+
local Item = ____item.Item
|
|
8
|
+
local ____unit = require("engine.internal.unit")
|
|
9
|
+
local Unit = ____unit.Unit
|
|
10
|
+
local rawset = _G.rawset
|
|
11
|
+
local ____type = _G.type
|
|
12
|
+
local isItemPowerup = IsItemPowerup
|
|
13
|
+
local setItemBooleanField = BlzSetItemBooleanField
|
|
14
|
+
local unitAddItem = UnitAddItem
|
|
15
|
+
local unitDropItemSlot = UnitDropItemSlot
|
|
16
|
+
local unitInventorySize = UnitInventorySize
|
|
17
|
+
local unitItemInSlot = UnitItemInSlot
|
|
18
|
+
local unitRemoveItemFromSlot = UnitRemoveItemFromSlot
|
|
19
|
+
local handleByUnitItems = setmetatable({}, {__mode = "k"})
|
|
20
|
+
local function unitItemsNext(handle, index)
|
|
21
|
+
local slot = index & 7
|
|
22
|
+
if index >> 3 == slot then
|
|
23
|
+
return nil, nil
|
|
24
|
+
end
|
|
25
|
+
return index + 1, Item:of(unitItemInSlot(handle, slot))
|
|
26
|
+
end
|
|
27
|
+
____exports.UnitItems = __TS__Class()
|
|
28
|
+
local UnitItems = ____exports.UnitItems
|
|
29
|
+
UnitItems.name = "UnitItems"
|
|
30
|
+
function UnitItems.prototype.____constructor(self, handle)
|
|
31
|
+
handleByUnitItems[self] = handle
|
|
32
|
+
end
|
|
33
|
+
function UnitItems.prototype.__newindex(self, slot, item)
|
|
34
|
+
local handle = handleByUnitItems[self]
|
|
35
|
+
if slot < 1 or slot > unitInventorySize(handle) then
|
|
36
|
+
return
|
|
37
|
+
end
|
|
38
|
+
unitRemoveItemFromSlot(handle, slot - 1)
|
|
39
|
+
if item ~= nil then
|
|
40
|
+
local itemHandle = item.handle
|
|
41
|
+
local isPowerup = isItemPowerup(itemHandle)
|
|
42
|
+
if isPowerup then
|
|
43
|
+
setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
|
|
44
|
+
end
|
|
45
|
+
unitAddItem(handle, itemHandle)
|
|
46
|
+
unitDropItemSlot(handle, itemHandle, slot - 1)
|
|
47
|
+
if isPowerup then
|
|
48
|
+
setItemBooleanField(itemHandle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
function UnitItems.prototype.__index(self, key)
|
|
53
|
+
if ____type(key) == "number" then
|
|
54
|
+
return Item:of(unitItemInSlot(handleByUnitItems[self], key - 1))
|
|
55
|
+
end
|
|
56
|
+
return rawget(____exports.UnitItems.prototype, key)
|
|
57
|
+
end
|
|
58
|
+
function UnitItems.prototype.__len(self)
|
|
59
|
+
return unitInventorySize(handleByUnitItems[self])
|
|
60
|
+
end
|
|
61
|
+
function UnitItems.prototype.__ipairs(self)
|
|
62
|
+
local handle = handleByUnitItems[self]
|
|
63
|
+
return unitItemsNext, handle, unitInventorySize(handle) << 3
|
|
64
|
+
end
|
|
65
|
+
__TS__ObjectDefineProperty(
|
|
66
|
+
Unit.prototype,
|
|
67
|
+
"items",
|
|
68
|
+
{get = function(self)
|
|
69
|
+
local items = __TS__New(____exports.UnitItems, self.handle)
|
|
70
|
+
rawset(self, "items", items)
|
|
71
|
+
return items
|
|
72
|
+
end}
|
|
73
|
+
)
|
|
74
|
+
return ____exports
|
|
@@ -40,7 +40,7 @@ ItemAbility.onCreate:addListener(
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
)
|
|
43
|
-
Unit.
|
|
43
|
+
Unit.itemPickedUpEvent:addListener(
|
|
44
44
|
0,
|
|
45
45
|
function(unit, item)
|
|
46
46
|
for ____, ability in ipairs(item.abilities) do
|
|
@@ -48,7 +48,7 @@ Unit.onItemPickup:addListener(
|
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
)
|
|
51
|
-
Unit.
|
|
51
|
+
Unit.itemDroppedEvent:addListener(
|
|
52
52
|
4,
|
|
53
53
|
function(unit, item)
|
|
54
54
|
for ____, ability in ipairs(item.abilities) do
|
|
@@ -6,9 +6,8 @@ local ____unit = require("engine.internal.unit")
|
|
|
6
6
|
local Unit = ____unit.Unit
|
|
7
7
|
local ____event = require("event")
|
|
8
8
|
local Event = ____event.Event
|
|
9
|
-
local
|
|
10
|
-
local
|
|
11
|
-
local boundRegion = ____mapbounds.boundRegion
|
|
9
|
+
local ____game_2Dmap = require("engine.game-map")
|
|
10
|
+
local GameMap = ____game_2Dmap.GameMap
|
|
12
11
|
local eventInvoke = Event.invoke
|
|
13
12
|
local tableRemove = table.remove
|
|
14
13
|
local ____assert = _G.assert
|
|
@@ -58,8 +57,8 @@ triggerAddCondition(
|
|
|
58
57
|
deboard(unit)
|
|
59
58
|
end
|
|
60
59
|
if not unitAlive(handle) then
|
|
61
|
-
unit.x =
|
|
62
|
-
unit.y =
|
|
60
|
+
unit.x = GameMap.worldBoundsRect.maxX
|
|
61
|
+
unit.y = GameMap.worldBoundsRect.maxY
|
|
63
62
|
end
|
|
64
63
|
local transport = Unit:of(getTransportUnit())
|
|
65
64
|
transportByUnit[unit] = transport
|
|
@@ -68,11 +67,6 @@ triggerAddCondition(
|
|
|
68
67
|
eventInvoke(onBoardEvent, unit, transport)
|
|
69
68
|
end)
|
|
70
69
|
)
|
|
71
|
-
boundRegion.onUnitEnter:addListener(function(unit)
|
|
72
|
-
if transportByUnit[unit] ~= nil and not isUnitLoaded(unit.handle) then
|
|
73
|
-
deboard(unit)
|
|
74
|
-
end
|
|
75
|
-
end)
|
|
76
70
|
Unit.deathEvent:addListener(function(unit)
|
|
77
71
|
if transportByUnit[unit] ~= nil then
|
|
78
72
|
deboard(unit)
|
|
@@ -7,14 +7,33 @@ local ____event = require("event")
|
|
|
7
7
|
local Event = ____event.Event
|
|
8
8
|
local ____timer = require("core.types.timer")
|
|
9
9
|
local Timer = ____timer.Timer
|
|
10
|
+
local ____lua_2Dsets = require("utility.lua-sets")
|
|
11
|
+
local luaSetOf = ____lua_2Dsets.luaSetOf
|
|
10
12
|
local autoAttackFinishEvent = __TS__New(Event)
|
|
11
13
|
rawset(Unit, "autoAttackFinishEvent", autoAttackFinishEvent)
|
|
12
14
|
local eventTimerByUnit = {}
|
|
13
|
-
local
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
local instantOrderIds = luaSetOf(
|
|
16
|
+
orderId("avatar"),
|
|
17
|
+
orderId("berserk"),
|
|
18
|
+
orderId("divineshield"),
|
|
19
|
+
orderId("immolation"),
|
|
20
|
+
orderId("moveslot0"),
|
|
21
|
+
orderId("moveslot1"),
|
|
22
|
+
orderId("moveslot2"),
|
|
23
|
+
orderId("moveslot3"),
|
|
24
|
+
orderId("moveslot4"),
|
|
25
|
+
orderId("moveslot5"),
|
|
26
|
+
orderId("unavatar"),
|
|
27
|
+
orderId("undivineshield"),
|
|
28
|
+
orderId("unimmolation")
|
|
29
|
+
)
|
|
30
|
+
local function reset(source, orderId)
|
|
31
|
+
if not (instantOrderIds[orderId] ~= nil) then
|
|
32
|
+
local eventTimer = eventTimerByUnit[source]
|
|
33
|
+
if eventTimer then
|
|
34
|
+
eventTimer:destroy()
|
|
35
|
+
eventTimerByUnit[source] = nil
|
|
36
|
+
end
|
|
18
37
|
end
|
|
19
38
|
end
|
|
20
39
|
Unit.onImmediateOrder:addListener(reset)
|
|
@@ -42,6 +42,7 @@ export interface DamagingEvent {
|
|
|
42
42
|
damageType: jdamagetype;
|
|
43
43
|
weaponType: jweapontype;
|
|
44
44
|
readonly isAttack: boolean;
|
|
45
|
+
readonly originalAmount: number;
|
|
45
46
|
}
|
|
46
47
|
export type DamageEvent = DamagingEvent & {
|
|
47
48
|
preventDeath<P extends any[]>(this: DamageEvent, callback: (this: void, ...parameters: P) => any, ...parameters: P): void;
|
|
@@ -227,7 +228,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
227
228
|
isSelected(player: Player): boolean;
|
|
228
229
|
explode(): void;
|
|
229
230
|
kill(): void;
|
|
230
|
-
revive(
|
|
231
|
+
revive(x: number, y: number, doEffect?: boolean): void;
|
|
231
232
|
healTarget(target: Widget, amount: number): void;
|
|
232
233
|
useItem(item: Item): boolean;
|
|
233
234
|
issueImmediateOrder(order: number): boolean;
|
|
@@ -322,9 +323,10 @@ export declare class Unit extends Handle<junit> {
|
|
|
322
323
|
static readonly autoAttackStartEvent: UnitTriggerEvent<[Unit]>;
|
|
323
324
|
static readonly onDamaging: Event<[source: Unit | undefined, target: Unit, event: DamagingEvent]>;
|
|
324
325
|
static readonly onDamage: InitializingEvent<[source: Unit | undefined, target: Unit, event: DamageEvent], jtrigger>;
|
|
325
|
-
static
|
|
326
|
-
static
|
|
327
|
-
static
|
|
326
|
+
static itemDroppedEvent: UnitTriggerEvent<[Item]>;
|
|
327
|
+
static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
|
|
328
|
+
static itemUsedEvent: UnitTriggerEvent<[Item]>;
|
|
329
|
+
static itemStackedEvent: UnitTriggerEvent<[Item]>;
|
|
328
330
|
static get onCreate(): EventDispatcher<[Unit], [Unit]>;
|
|
329
331
|
static get destroyEvent(): EventDispatcher<[Unit], [Unit]>;
|
|
330
332
|
getField(field: junitintegerfield | junitrealfield): number;
|
package/engine/internal/unit.lua
CHANGED
|
@@ -7,6 +7,9 @@ local __TS__Class = ____lualib.__TS__Class
|
|
|
7
7
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
8
8
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
9
9
|
local __TS__ArraySetLength = ____lualib.__TS__ArraySetLength
|
|
10
|
+
local __TS__SparseArrayNew = ____lualib.__TS__SparseArrayNew
|
|
11
|
+
local __TS__SparseArrayPush = ____lualib.__TS__SparseArrayPush
|
|
12
|
+
local __TS__SparseArraySpread = ____lualib.__TS__SparseArraySpread
|
|
10
13
|
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
11
14
|
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
12
15
|
local Set = ____lualib.Set
|
|
@@ -279,16 +282,14 @@ function UnitTriggerEvent.prototype.____constructor(self, eventType, c)
|
|
|
279
282
|
end
|
|
280
283
|
local function dispatch(event, idGetter, argsGetter)
|
|
281
284
|
local initialized = false
|
|
282
|
-
local x = {}
|
|
283
285
|
return setmetatable(
|
|
284
|
-
|
|
286
|
+
{},
|
|
285
287
|
{
|
|
286
288
|
__index = function(self, id)
|
|
287
289
|
if type(id) ~= "number" then
|
|
288
290
|
return event[id]
|
|
289
291
|
end
|
|
290
292
|
if not initialized then
|
|
291
|
-
local invoke = Event.invoke
|
|
292
293
|
event:addListener(function(...)
|
|
293
294
|
local id = idGetter(...)
|
|
294
295
|
local dispatched = rawget(self, id)
|
|
@@ -326,7 +327,6 @@ local function dispatchAbility(event)
|
|
|
326
327
|
return event[id]
|
|
327
328
|
end
|
|
328
329
|
if not initialized then
|
|
329
|
-
local invoke = Event.invoke
|
|
330
330
|
event:addListener(function(unit, ability, ...)
|
|
331
331
|
local dispatched = rawget(self, ability.typeId)
|
|
332
332
|
if dispatched ~= nil then
|
|
@@ -817,8 +817,15 @@ end
|
|
|
817
817
|
function Unit.prototype.kill(self)
|
|
818
818
|
killUnit(self.handle)
|
|
819
819
|
end
|
|
820
|
-
function Unit.prototype.revive(self,
|
|
821
|
-
|
|
820
|
+
function Unit.prototype.revive(self, x, y, doEffect)
|
|
821
|
+
local ____ReviveHero_4 = ReviveHero
|
|
822
|
+
local ____array_3 = __TS__SparseArrayNew(self.handle, x, y)
|
|
823
|
+
local ____doEffect_2 = doEffect
|
|
824
|
+
if ____doEffect_2 == nil then
|
|
825
|
+
____doEffect_2 = false
|
|
826
|
+
end
|
|
827
|
+
__TS__SparseArrayPush(____array_3, ____doEffect_2)
|
|
828
|
+
____ReviveHero_4(__TS__SparseArraySpread(____array_3))
|
|
822
829
|
end
|
|
823
830
|
function Unit.prototype.healTarget(self, target, amount)
|
|
824
831
|
if __TS__InstanceOf(target, ____exports.Unit) and target:hasAbility(fourCC("BIhm")) then
|
|
@@ -858,7 +865,7 @@ function Unit.prototype.dropItemSlot(self, item, slot)
|
|
|
858
865
|
return UnitDropItemSlot(self.handle, item.handle, slot)
|
|
859
866
|
end
|
|
860
867
|
function Unit.prototype.itemInSlot(self, slot)
|
|
861
|
-
return Item:of(
|
|
868
|
+
return Item:of(unitItemInSlot(self.handle, slot))
|
|
862
869
|
end
|
|
863
870
|
function Unit.prototype.addAbility(self, abilityId)
|
|
864
871
|
if unitAddAbility(self.handle, abilityId) then
|
|
@@ -1385,13 +1392,13 @@ __TS__SetDescriptor(
|
|
|
1385
1392
|
end,
|
|
1386
1393
|
set = function(self, isTeamGlowVisible)
|
|
1387
1394
|
showUnitTeamGlow(self.handle, isTeamGlowVisible)
|
|
1388
|
-
local
|
|
1395
|
+
local ____temp_5
|
|
1389
1396
|
if not isTeamGlowVisible then
|
|
1390
|
-
|
|
1397
|
+
____temp_5 = true
|
|
1391
1398
|
else
|
|
1392
|
-
|
|
1399
|
+
____temp_5 = nil
|
|
1393
1400
|
end
|
|
1394
|
-
self[105] =
|
|
1401
|
+
self[105] = ____temp_5
|
|
1395
1402
|
end
|
|
1396
1403
|
},
|
|
1397
1404
|
true
|
|
@@ -2055,7 +2062,6 @@ Unit.onDecay = __TS__New(
|
|
|
2055
2062
|
Unit.onResurrect = __TS__New(
|
|
2056
2063
|
InitializingEvent,
|
|
2057
2064
|
function(event)
|
|
2058
|
-
local invoke = Event.invoke
|
|
2059
2065
|
local dead = setmetatable({}, {__mode = "k"})
|
|
2060
2066
|
____exports.Unit.deathEvent:addListener(function(unit)
|
|
2061
2067
|
dead[unit] = true
|
|
@@ -2071,10 +2077,15 @@ Unit.onResurrect = __TS__New(
|
|
|
2071
2077
|
Unit.morphEvent = __TS__New(
|
|
2072
2078
|
InitializingEvent,
|
|
2073
2079
|
function(event)
|
|
2080
|
+
local function ifNotLeft(unit)
|
|
2081
|
+
local handle = unit.handle
|
|
2082
|
+
if getUnitAbilityLevel(handle, leaveDetectAbilityId) ~= 0 and unitAddAbility(handle, morphDetectAbilityId) then
|
|
2083
|
+
invoke(event, unit)
|
|
2084
|
+
end
|
|
2085
|
+
end
|
|
2074
2086
|
____exports.Unit.onImmediateOrder[orderId("undefend")]:addListener(function(unit)
|
|
2075
2087
|
if getUnitAbilityLevel(unit.handle, morphDetectAbilityId) == 0 then
|
|
2076
|
-
|
|
2077
|
-
Timer:run(Event.invoke, event, unit)
|
|
2088
|
+
Timer:run(ifNotLeft, unit)
|
|
2078
2089
|
end
|
|
2079
2090
|
end)
|
|
2080
2091
|
end
|
|
@@ -2112,27 +2123,26 @@ Unit.onSpellEffect = dispatchId(__TS__New(
|
|
|
2112
2123
|
Unit.onTargetCast = dispatchId(__TS__New(
|
|
2113
2124
|
InitializingEvent,
|
|
2114
2125
|
function(event)
|
|
2115
|
-
local invoke = Event.invoke
|
|
2116
2126
|
local function listener(unit, id)
|
|
2117
|
-
local
|
|
2127
|
+
local ____GetSpellTargetUnit_result_8
|
|
2118
2128
|
if GetSpellTargetUnit() then
|
|
2119
|
-
|
|
2129
|
+
____GetSpellTargetUnit_result_8 = ____exports.Unit:of(GetSpellTargetUnit())
|
|
2120
2130
|
else
|
|
2121
|
-
local
|
|
2131
|
+
local ____GetSpellTargetItem_result_7
|
|
2122
2132
|
if GetSpellTargetItem() then
|
|
2123
|
-
|
|
2133
|
+
____GetSpellTargetItem_result_7 = Item:of(GetSpellTargetItem())
|
|
2124
2134
|
else
|
|
2125
|
-
local
|
|
2135
|
+
local ____GetSpellTargetDestructable_result_6
|
|
2126
2136
|
if GetSpellTargetDestructable() then
|
|
2127
|
-
|
|
2137
|
+
____GetSpellTargetDestructable_result_6 = Destructable:of(GetSpellTargetDestructable())
|
|
2128
2138
|
else
|
|
2129
|
-
|
|
2139
|
+
____GetSpellTargetDestructable_result_6 = nil
|
|
2130
2140
|
end
|
|
2131
|
-
|
|
2141
|
+
____GetSpellTargetItem_result_7 = ____GetSpellTargetDestructable_result_6
|
|
2132
2142
|
end
|
|
2133
|
-
|
|
2143
|
+
____GetSpellTargetUnit_result_8 = ____GetSpellTargetItem_result_7
|
|
2134
2144
|
end
|
|
2135
|
-
local target =
|
|
2145
|
+
local target = ____GetSpellTargetUnit_result_8
|
|
2136
2146
|
if target then
|
|
2137
2147
|
invoke(event, unit, id, target)
|
|
2138
2148
|
end
|
|
@@ -2329,7 +2339,6 @@ Unit.autoAttackStartEvent = __TS__New(
|
|
|
2329
2339
|
)
|
|
2330
2340
|
Unit.onDamaging = (function()
|
|
2331
2341
|
local event = __TS__New(Event)
|
|
2332
|
-
local invoke = Event.invoke
|
|
2333
2342
|
local trigger = CreateTrigger()
|
|
2334
2343
|
TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGING)
|
|
2335
2344
|
TriggerAddCondition(
|
|
@@ -2428,7 +2437,6 @@ end)()
|
|
|
2428
2437
|
Unit.onDamage = __TS__New(
|
|
2429
2438
|
InitializingEvent,
|
|
2430
2439
|
function(event)
|
|
2431
|
-
local invoke = Event.invoke
|
|
2432
2440
|
local trigger = CreateTrigger()
|
|
2433
2441
|
TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_DAMAGED)
|
|
2434
2442
|
TriggerAddCondition(
|
|
@@ -2444,6 +2452,7 @@ Unit.onDamage = __TS__New(
|
|
|
2444
2452
|
damageType = BlzGetEventDamageType(),
|
|
2445
2453
|
weaponType = BlzGetEventWeaponType(),
|
|
2446
2454
|
isAttack = BlzGetEventIsAttack(),
|
|
2455
|
+
originalAmount = GetEventDamage(),
|
|
2447
2456
|
preventDeath = damageEventPreventDeath
|
|
2448
2457
|
}
|
|
2449
2458
|
local evData = setmetatable(
|
|
@@ -2494,7 +2503,7 @@ Unit.onDamage = __TS__New(
|
|
|
2494
2503
|
DestroyTrigger(trigger)
|
|
2495
2504
|
end
|
|
2496
2505
|
)
|
|
2497
|
-
Unit.
|
|
2506
|
+
Unit.itemDroppedEvent = __TS__New(
|
|
2498
2507
|
____exports.UnitTriggerEvent,
|
|
2499
2508
|
EVENT_PLAYER_UNIT_DROP_ITEM,
|
|
2500
2509
|
function()
|
|
@@ -2505,7 +2514,7 @@ Unit.onItemDrop = __TS__New(
|
|
|
2505
2514
|
return IgnoreEvent
|
|
2506
2515
|
end
|
|
2507
2516
|
)
|
|
2508
|
-
Unit.
|
|
2517
|
+
Unit.itemPickedUpEvent = __TS__New(
|
|
2509
2518
|
____exports.UnitTriggerEvent,
|
|
2510
2519
|
EVENT_PLAYER_UNIT_PICKUP_ITEM,
|
|
2511
2520
|
function()
|
|
@@ -2516,10 +2525,15 @@ Unit.onItemPickup = __TS__New(
|
|
|
2516
2525
|
return IgnoreEvent
|
|
2517
2526
|
end
|
|
2518
2527
|
)
|
|
2519
|
-
Unit.
|
|
2528
|
+
Unit.itemUsedEvent = __TS__New(
|
|
2520
2529
|
____exports.UnitTriggerEvent,
|
|
2521
2530
|
EVENT_PLAYER_UNIT_USE_ITEM,
|
|
2522
|
-
function() return ____exports.Unit:of(
|
|
2531
|
+
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
|
|
2532
|
+
)
|
|
2533
|
+
Unit.itemStackedEvent = __TS__New(
|
|
2534
|
+
____exports.UnitTriggerEvent,
|
|
2535
|
+
EVENT_PLAYER_UNIT_STACK_ITEM,
|
|
2536
|
+
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
|
|
2523
2537
|
)
|
|
2524
2538
|
__TS__ObjectDefineProperty(
|
|
2525
2539
|
Unit,
|