warscript 0.0.1-dev.2bde093 → 0.0.1-dev.32c305a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/attributes.d.ts +5 -0
- package/attributes.lua +8 -1
- package/core/types/order.d.ts +1 -0
- package/core/types/order.lua +11 -1
- package/engine/behaviour/ability/damage.d.ts +2 -1
- package/engine/behaviour/ability/damage.lua +21 -36
- package/engine/behaviour/ability/emulate-impact.lua +9 -2
- package/engine/behaviour/ability.lua +1 -1
- package/engine/behaviour/unit.d.ts +15 -0
- package/engine/behaviour/unit.lua +114 -4
- package/engine/internal/ability.d.ts +4 -0
- package/engine/internal/ability.lua +17 -0
- package/engine/internal/item/ability.lua +12 -10
- package/engine/internal/item.d.ts +2 -1
- package/engine/internal/item.lua +71 -3
- package/engine/internal/unit/ability.d.ts +5 -0
- package/engine/internal/unit/ability.lua +14 -0
- package/engine/internal/unit/allowed-targets.d.ts +1 -1
- package/engine/internal/unit/allowed-targets.lua +9 -1
- package/engine/internal/unit-missile-launch.lua +1 -1
- package/engine/internal/unit.d.ts +10 -2
- package/engine/internal/unit.lua +91 -8
- package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
- package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
- package/package.json +1 -1
package/attributes.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
|
+
declare const marker: {};
|
|
2
3
|
export type Attribute<T> = {
|
|
3
4
|
readonly __attribute: unique symbol;
|
|
4
5
|
readonly __type: T;
|
|
6
|
+
readonly __marker: typeof marker;
|
|
5
7
|
} & symbol;
|
|
8
|
+
export declare const attribute: <T>() => Attribute<T>;
|
|
9
|
+
export declare const isAttribute: (value: unknown) => value is Attribute<unknown>;
|
|
6
10
|
export declare namespace Attribute {
|
|
7
11
|
const create: <T>() => Attribute<T>;
|
|
8
12
|
}
|
|
@@ -10,3 +14,4 @@ export declare class AttributesHolder {
|
|
|
10
14
|
readonly get: (<T>(attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGetMethod">;
|
|
11
15
|
readonly set: (<T>(attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSetMethod">;
|
|
12
16
|
}
|
|
17
|
+
export {};
|
package/attributes.lua
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local ____exports = {}
|
|
4
|
+
local marker = {}
|
|
5
|
+
____exports.attribute = function()
|
|
6
|
+
return {__marker = marker}
|
|
7
|
+
end
|
|
8
|
+
____exports.isAttribute = function(value)
|
|
9
|
+
return type(value) == "table" and rawget(value, "__marker") == marker
|
|
10
|
+
end
|
|
4
11
|
____exports.Attribute = {}
|
|
5
12
|
local Attribute = ____exports.Attribute
|
|
6
13
|
do
|
|
7
14
|
Attribute.create = function()
|
|
8
|
-
return {}
|
|
15
|
+
return {__marker = marker}
|
|
9
16
|
end
|
|
10
17
|
end
|
|
11
18
|
____exports.AttributesHolder = __TS__Class()
|
package/core/types/order.d.ts
CHANGED
package/core/types/order.lua
CHANGED
|
@@ -3,16 +3,25 @@ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
|
3
3
|
local ____exports = {}
|
|
4
4
|
local ____unit = require("core.types.unit")
|
|
5
5
|
local Unit = ____unit.Unit
|
|
6
|
+
local ____game = require("core.game")
|
|
7
|
+
local elapsedTime = ____game.elapsedTime
|
|
6
8
|
local getUnitCurrentOrder = GetUnitCurrentOrder
|
|
7
9
|
local orders = setmetatable({}, {__mode = "k"})
|
|
8
10
|
Unit.onImmediateOrder:addListener(function(unit, orderId)
|
|
9
|
-
orders[unit] = {
|
|
11
|
+
orders[unit] = {
|
|
12
|
+
id = orderId,
|
|
13
|
+
startX = unit.x,
|
|
14
|
+
startY = unit.y,
|
|
15
|
+
issueTime = elapsedTime(),
|
|
16
|
+
type = "immediate"
|
|
17
|
+
}
|
|
10
18
|
end)
|
|
11
19
|
Unit.onPointOrder:addListener(function(unit, orderId, x, y)
|
|
12
20
|
orders[unit] = {
|
|
13
21
|
id = orderId,
|
|
14
22
|
startX = unit.x,
|
|
15
23
|
startY = unit.y,
|
|
24
|
+
issueTime = elapsedTime(),
|
|
16
25
|
type = "point",
|
|
17
26
|
targetX = x,
|
|
18
27
|
targetY = y
|
|
@@ -23,6 +32,7 @@ Unit.onTargetOrder:addListener(function(unit, orderId, target)
|
|
|
23
32
|
id = orderId,
|
|
24
33
|
startX = unit.x,
|
|
25
34
|
startY = unit.y,
|
|
35
|
+
issueTime = elapsedTime(),
|
|
26
36
|
type = "target",
|
|
27
37
|
target = target
|
|
28
38
|
}
|
|
@@ -21,11 +21,12 @@ export type DamageAreaAbilityBehaviorParameters = DamageAbilityBehaviorParameter
|
|
|
21
21
|
areaOfEffect?: AbilityDependentValue<number>;
|
|
22
22
|
allowedTargetCombatClassifications?: AbilityDependentValue<CombatClassifications>;
|
|
23
23
|
};
|
|
24
|
-
declare abstract class DamageAbilityBehavior<T extends DamageAbilityBehaviorParameters = DamageAbilityBehaviorParameters> extends AbilityBehavior {
|
|
24
|
+
export declare abstract class DamageAbilityBehavior<T extends DamageAbilityBehaviorParameters = DamageAbilityBehaviorParameters> extends AbilityBehavior {
|
|
25
25
|
protected readonly damage: AbilityDependentValue<number>;
|
|
26
26
|
protected readonly parameters?: T | undefined;
|
|
27
27
|
protected constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: T | undefined);
|
|
28
28
|
protected calculateDamage(caster: Unit): number;
|
|
29
|
+
protected damageTarget(caster: Unit, target: Widget, damage?: number): void;
|
|
29
30
|
}
|
|
30
31
|
export declare class DamageSelfAbilityBehavior extends DamageAbilityBehavior {
|
|
31
32
|
constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: DamageAbilityBehaviorParameters);
|
|
@@ -9,7 +9,8 @@ local Unit = ____unit.Unit
|
|
|
9
9
|
local ____ability = require("engine.standard.fields.ability")
|
|
10
10
|
local ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD = ____ability.ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD
|
|
11
11
|
local AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD = ____ability.AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD
|
|
12
|
-
|
|
12
|
+
____exports.DamageAbilityBehavior = __TS__Class()
|
|
13
|
+
local DamageAbilityBehavior = ____exports.DamageAbilityBehavior
|
|
13
14
|
DamageAbilityBehavior.name = "DamageAbilityBehavior"
|
|
14
15
|
__TS__ClassExtends(DamageAbilityBehavior, AbilityBehavior)
|
|
15
16
|
function DamageAbilityBehavior.prototype.____constructor(self, ability, damage, parameters)
|
|
@@ -34,18 +35,11 @@ function DamageAbilityBehavior.prototype.calculateDamage(self, caster)
|
|
|
34
35
|
end
|
|
35
36
|
return damage
|
|
36
37
|
end
|
|
37
|
-
|
|
38
|
-
local DamageSelfAbilityBehavior = ____exports.DamageSelfAbilityBehavior
|
|
39
|
-
DamageSelfAbilityBehavior.name = "DamageSelfAbilityBehavior"
|
|
40
|
-
__TS__ClassExtends(DamageSelfAbilityBehavior, DamageAbilityBehavior)
|
|
41
|
-
function DamageSelfAbilityBehavior.prototype.____constructor(self, ability, damage, parameters)
|
|
42
|
-
DamageAbilityBehavior.prototype.____constructor(self, ability, damage, parameters)
|
|
43
|
-
end
|
|
44
|
-
function DamageSelfAbilityBehavior.prototype.onImpact(self, caster)
|
|
38
|
+
function DamageAbilityBehavior.prototype.damageTarget(self, caster, target, damage)
|
|
45
39
|
local parameters = self.parameters
|
|
46
40
|
caster:damageTarget(
|
|
47
|
-
|
|
48
|
-
self:calculateDamage(caster),
|
|
41
|
+
target,
|
|
42
|
+
damage or self:calculateDamage(caster),
|
|
49
43
|
nil,
|
|
50
44
|
nil,
|
|
51
45
|
self:resolveCurrentAbilityDependentValue(parameters and parameters.attackType),
|
|
@@ -54,31 +48,31 @@ function DamageSelfAbilityBehavior.prototype.onImpact(self, caster)
|
|
|
54
48
|
self:resolveCurrentAbilityDependentValue(parameters and parameters.metadata)
|
|
55
49
|
)
|
|
56
50
|
end
|
|
51
|
+
____exports.DamageSelfAbilityBehavior = __TS__Class()
|
|
52
|
+
local DamageSelfAbilityBehavior = ____exports.DamageSelfAbilityBehavior
|
|
53
|
+
DamageSelfAbilityBehavior.name = "DamageSelfAbilityBehavior"
|
|
54
|
+
__TS__ClassExtends(DamageSelfAbilityBehavior, ____exports.DamageAbilityBehavior)
|
|
55
|
+
function DamageSelfAbilityBehavior.prototype.____constructor(self, ability, damage, parameters)
|
|
56
|
+
DamageSelfAbilityBehavior.____super.prototype.____constructor(self, ability, damage, parameters)
|
|
57
|
+
end
|
|
58
|
+
function DamageSelfAbilityBehavior.prototype.onImpact(self, caster)
|
|
59
|
+
self:damageTarget(caster, caster)
|
|
60
|
+
end
|
|
57
61
|
____exports.DamageTargetAbilityBehavior = __TS__Class()
|
|
58
62
|
local DamageTargetAbilityBehavior = ____exports.DamageTargetAbilityBehavior
|
|
59
63
|
DamageTargetAbilityBehavior.name = "DamageTargetAbilityBehavior"
|
|
60
|
-
__TS__ClassExtends(DamageTargetAbilityBehavior, DamageAbilityBehavior)
|
|
64
|
+
__TS__ClassExtends(DamageTargetAbilityBehavior, ____exports.DamageAbilityBehavior)
|
|
61
65
|
function DamageTargetAbilityBehavior.prototype.____constructor(self, ability, damage, parameters)
|
|
62
|
-
|
|
66
|
+
DamageTargetAbilityBehavior.____super.prototype.____constructor(self, ability, damage, parameters)
|
|
63
67
|
end
|
|
64
68
|
function DamageTargetAbilityBehavior.prototype.onWidgetTargetImpact(self, caster, target)
|
|
65
|
-
|
|
66
|
-
caster:damageTarget(
|
|
67
|
-
target,
|
|
68
|
-
self:calculateDamage(caster),
|
|
69
|
-
nil,
|
|
70
|
-
nil,
|
|
71
|
-
self:resolveCurrentAbilityDependentValue(parameters and parameters.attackType),
|
|
72
|
-
parameters and parameters.damageType,
|
|
73
|
-
parameters and parameters.weaponType,
|
|
74
|
-
self:resolveCurrentAbilityDependentValue(parameters and parameters.metadata)
|
|
75
|
-
)
|
|
69
|
+
self:damageTarget(caster, target)
|
|
76
70
|
end
|
|
77
71
|
local DamageAreaAbilityBehavior = __TS__Class()
|
|
78
72
|
DamageAreaAbilityBehavior.name = "DamageAreaAbilityBehavior"
|
|
79
|
-
__TS__ClassExtends(DamageAreaAbilityBehavior, DamageAbilityBehavior)
|
|
73
|
+
__TS__ClassExtends(DamageAreaAbilityBehavior, ____exports.DamageAbilityBehavior)
|
|
80
74
|
function DamageAreaAbilityBehavior.prototype.____constructor(self, ability, damage, parameters)
|
|
81
|
-
|
|
75
|
+
DamageAreaAbilityBehavior.____super.prototype.____constructor(self, ability, damage, parameters)
|
|
82
76
|
end
|
|
83
77
|
function DamageAreaAbilityBehavior.prototype.damageArea(self, caster, x, y)
|
|
84
78
|
local parameters = self.parameters
|
|
@@ -95,16 +89,7 @@ function DamageAreaAbilityBehavior.prototype.damageArea(self, caster, x, y)
|
|
|
95
89
|
damage = maximumDamage / #targets
|
|
96
90
|
end
|
|
97
91
|
for ____, target in ipairs(targets) do
|
|
98
|
-
|
|
99
|
-
target,
|
|
100
|
-
damage,
|
|
101
|
-
nil,
|
|
102
|
-
nil,
|
|
103
|
-
self:resolveCurrentAbilityDependentValue(parameters and parameters.attackType),
|
|
104
|
-
parameters and parameters.damageType,
|
|
105
|
-
parameters and parameters.weaponType,
|
|
106
|
-
self:resolveCurrentAbilityDependentValue(parameters and parameters.metadata)
|
|
107
|
-
)
|
|
92
|
+
self:damageTarget(caster, target, damage)
|
|
108
93
|
end
|
|
109
94
|
end
|
|
110
95
|
____exports.DamageSelfAreaAbilityBehavior = __TS__Class()
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
4
5
|
local ____exports = {}
|
|
5
6
|
local ____ability = require("engine.behaviour.ability")
|
|
6
7
|
local AbilityBehavior = ____ability.AbilityBehavior
|
|
8
|
+
local ____unit = require("engine.internal.unit")
|
|
9
|
+
local Unit = ____unit.Unit
|
|
7
10
|
local ____ability = require("engine.standard.fields.ability")
|
|
8
11
|
local COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD = ____ability.COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD
|
|
9
12
|
local MANA_COST_ABILITY_INTEGER_LEVEL_FIELD = ____ability.MANA_COST_ABILITY_INTEGER_LEVEL_FIELD
|
|
@@ -13,6 +16,10 @@ local MINIMUM_POSITIVE_NORMALIZED_FLOAT = ____math.MINIMUM_POSITIVE_NORMALIZED_F
|
|
|
13
16
|
local ____sound = require("core.types.sound")
|
|
14
17
|
local Sound3D = ____sound.Sound3D
|
|
15
18
|
local SoundSettings = ____sound.SoundSettings
|
|
19
|
+
local ____ability = require("engine.internal.ability")
|
|
20
|
+
local UnitAbility = ____ability.UnitAbility
|
|
21
|
+
local ____event = require("event")
|
|
22
|
+
local Event = ____event.Event
|
|
16
23
|
____exports.EmulateImpactAbilityBehavior = __TS__Class()
|
|
17
24
|
local EmulateImpactAbilityBehavior = ____exports.EmulateImpactAbilityBehavior
|
|
18
25
|
EmulateImpactAbilityBehavior.name = "EmulateImpactAbilityBehavior"
|
|
@@ -20,7 +27,7 @@ __TS__ClassExtends(EmulateImpactAbilityBehavior, AbilityBehavior)
|
|
|
20
27
|
function EmulateImpactAbilityBehavior.prototype.emulateImpact(self, caster)
|
|
21
28
|
local manaCost = self:resolveCurrentAbilityDependentValue(MANA_COST_ABILITY_INTEGER_LEVEL_FIELD)
|
|
22
29
|
local cooldown = self:resolveCurrentAbilityDependentValue(COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD)
|
|
23
|
-
if self.ability.cooldownRemaining ~= 0 or caster.mana < manaCost then
|
|
30
|
+
if self.ability.cooldownRemaining ~= 0 or caster.mana < manaCost or __TS__InstanceOf(self.ability, UnitAbility) and self.ability.isDisabled then
|
|
24
31
|
return
|
|
25
32
|
end
|
|
26
33
|
caster.mana = caster.mana - manaCost
|
|
@@ -30,6 +37,6 @@ function EmulateImpactAbilityBehavior.prototype.emulateImpact(self, caster)
|
|
|
30
37
|
if soundPresetId ~= "" then
|
|
31
38
|
Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, caster)
|
|
32
39
|
end
|
|
33
|
-
|
|
40
|
+
Event.invoke(Unit.abilityImpactEvent, caster, self.ability)
|
|
34
41
|
end
|
|
35
42
|
return ____exports
|
|
@@ -274,7 +274,7 @@ __TS__SetDescriptor(
|
|
|
274
274
|
Unit.abilityDestructibleTargetChannelingStartEvent:addListener(createUnitEventListener("onDestructibleTargetChannelingStart"))
|
|
275
275
|
Unit.abilityPointTargetChannelingStartEvent:addListener(createUnitEventListener("onPointTargetChannelingStart"))
|
|
276
276
|
Unit.abilityNoTargetChannelingStartEvent:addListener(createUnitEventListener("onNoTargetChannelingStart"))
|
|
277
|
-
Unit.
|
|
277
|
+
Unit.abilityImpactEvent:addListener(createUnitEventListener("onImpact"))
|
|
278
278
|
Unit.abilityWidgetTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onWidgetTargetImpact"))
|
|
279
279
|
Unit.abilityUnitTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onUnitTargetImpact"))
|
|
280
280
|
Unit.abilityItemTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onItemTargetImpact"))
|
|
@@ -6,23 +6,38 @@ import "../internal/unit+ability";
|
|
|
6
6
|
import "../internal/unit-missile-launch";
|
|
7
7
|
import { Item } from "../internal/item";
|
|
8
8
|
import type { AbilityBehavior } from "./ability";
|
|
9
|
+
import { Event } from "../../event";
|
|
10
|
+
import { Destructor } from "../../destroyable";
|
|
11
|
+
import type { Widget } from "../../core/types/widget";
|
|
9
12
|
export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
|
|
10
13
|
export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
|
|
11
14
|
constructor(unit: Unit);
|
|
15
|
+
protected onDestroy(): Destructor;
|
|
12
16
|
readonly sourceAbilityBehavior?: AbilityBehavior;
|
|
13
17
|
get unit(): Unit;
|
|
18
|
+
registerInRangeUnitEvent<T extends string, Args extends any[]>(this: UnitBehavior<PeriodicActionParameters> & Record<T, (this: this, unit: Unit, ...args: Args) => unknown>, event: Event<[Unit, ...Args]>, range: number, listener: T): void;
|
|
19
|
+
onImmediateOrder(orderId: number): void;
|
|
20
|
+
onTargetOrder(orderId: number, target: Widget): void;
|
|
21
|
+
onPointOrder(orderId: number, x: number, y: number): void;
|
|
14
22
|
onAutoAttackStart(target: Unit): void;
|
|
15
23
|
onAutoAttackFinish(target: Unit): void;
|
|
24
|
+
onTargetingAutoAttackStart(source: Unit): void;
|
|
25
|
+
onTargetingAutoAttackFinish(source: Unit): void;
|
|
16
26
|
onDamageDealing(target: Unit, event: DamagingEvent): void;
|
|
17
27
|
onDamageDealt(target: Unit, event: DamageEvent): void;
|
|
18
28
|
onDamageReceiving(source: Unit | undefined, event: DamagingEvent): void;
|
|
19
29
|
onDamageReceived(source: Unit | undefined, event: DamageEvent): void;
|
|
20
30
|
onAbilityGained(ability: Ability): void;
|
|
21
31
|
onAbilityLost(ability: Ability): void;
|
|
32
|
+
onAbilityChannelingStart(ability: Ability): void;
|
|
33
|
+
onAbilityImpact(ability: Ability): void;
|
|
34
|
+
onAbilityChannelingFinish(ability: Ability): void;
|
|
35
|
+
onAbilityStop(ability: Ability): void;
|
|
22
36
|
onItemDropped(item: Item): void;
|
|
23
37
|
onItemPickedUp(item: Item): void;
|
|
24
38
|
onItemUsed(item: Item): void;
|
|
25
39
|
onItemStacked(item: Item): void;
|
|
40
|
+
onItemChargesChanged(item: Item): void;
|
|
26
41
|
onKill(target: Unit): void;
|
|
27
42
|
onDeath(source: Unit | undefined): void;
|
|
28
43
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local __TS__New = ____lualib.__TS__New
|
|
4
5
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
6
|
local ____exports = {}
|
|
6
7
|
local ____behavior = require("engine.behavior")
|
|
@@ -9,6 +10,17 @@ local ____unit = require("engine.internal.unit")
|
|
|
9
10
|
local Unit = ____unit.Unit
|
|
10
11
|
require("engine.internal.unit+ability")
|
|
11
12
|
require("engine.internal.unit-missile-launch")
|
|
13
|
+
local ____linked_2Dset = require("utility.linked-set")
|
|
14
|
+
local LinkedSet = ____linked_2Dset.LinkedSet
|
|
15
|
+
local ____lua_2Dmaps = require("utility.lua-maps")
|
|
16
|
+
local getOrPut = ____lua_2Dmaps.getOrPut
|
|
17
|
+
local mutableLuaMap = ____lua_2Dmaps.mutableLuaMap
|
|
18
|
+
local ____lua_2Dsets = require("utility.lua-sets")
|
|
19
|
+
local mutableLuaSet = ____lua_2Dsets.mutableLuaSet
|
|
20
|
+
local behaviorsByEvent = {}
|
|
21
|
+
local rangeByBehaviorByEvent = {}
|
|
22
|
+
local listenerByBehaviorByEvent = {}
|
|
23
|
+
local eventsByBehavior = {}
|
|
12
24
|
____exports.UnitBehavior = __TS__Class()
|
|
13
25
|
local UnitBehavior = ____exports.UnitBehavior
|
|
14
26
|
UnitBehavior.name = "UnitBehavior"
|
|
@@ -16,10 +28,66 @@ __TS__ClassExtends(UnitBehavior, Behavior)
|
|
|
16
28
|
function UnitBehavior.prototype.____constructor(self, unit)
|
|
17
29
|
Behavior.prototype.____constructor(self, unit)
|
|
18
30
|
end
|
|
31
|
+
function UnitBehavior.prototype.onDestroy(self)
|
|
32
|
+
local events = eventsByBehavior[self]
|
|
33
|
+
if events ~= nil then
|
|
34
|
+
for event in pairs(events) do
|
|
35
|
+
local ____opt_0 = behaviorsByEvent[event]
|
|
36
|
+
if ____opt_0 ~= nil then
|
|
37
|
+
____opt_0:remove(self)
|
|
38
|
+
end
|
|
39
|
+
local ____opt_2 = rangeByBehaviorByEvent[event]
|
|
40
|
+
if ____opt_2 ~= nil then
|
|
41
|
+
____opt_2[self] = nil
|
|
42
|
+
end
|
|
43
|
+
local ____opt_4 = listenerByBehaviorByEvent[event]
|
|
44
|
+
if ____opt_4 ~= nil then
|
|
45
|
+
____opt_4[self] = nil
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
eventsByBehavior[self] = nil
|
|
49
|
+
end
|
|
50
|
+
return Behavior.prototype.onDestroy(self)
|
|
51
|
+
end
|
|
52
|
+
function UnitBehavior.prototype.registerInRangeUnitEvent(self, event, range, listener)
|
|
53
|
+
local rangeByBehavior = getOrPut(rangeByBehaviorByEvent, event, mutableLuaMap)
|
|
54
|
+
rangeByBehavior[self] = range
|
|
55
|
+
local listenerByBehavior = getOrPut(listenerByBehaviorByEvent, event, mutableLuaMap)
|
|
56
|
+
listenerByBehavior[self] = listener
|
|
57
|
+
getOrPut(eventsByBehavior, self, mutableLuaSet)[event] = true
|
|
58
|
+
local behaviors = behaviorsByEvent[event]
|
|
59
|
+
if behaviors == nil then
|
|
60
|
+
event:addListener(function(unit, ...)
|
|
61
|
+
local behaviors = behaviorsByEvent[event]
|
|
62
|
+
if behaviors ~= nil then
|
|
63
|
+
for behavior in pairs(behaviors) do
|
|
64
|
+
local range = rangeByBehavior[behavior]
|
|
65
|
+
if range ~= nil and unit:getCollisionDistanceTo(behavior.unit) <= range then
|
|
66
|
+
local ____self_6 = behavior
|
|
67
|
+
____self_6[listenerByBehavior[behavior]](____self_6, unit, ...)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end)
|
|
72
|
+
behaviors = __TS__New(LinkedSet)
|
|
73
|
+
behaviorsByEvent[event] = behaviors
|
|
74
|
+
end
|
|
75
|
+
behaviors:add(self)
|
|
76
|
+
end
|
|
77
|
+
function UnitBehavior.prototype.onImmediateOrder(self, orderId)
|
|
78
|
+
end
|
|
79
|
+
function UnitBehavior.prototype.onTargetOrder(self, orderId, target)
|
|
80
|
+
end
|
|
81
|
+
function UnitBehavior.prototype.onPointOrder(self, orderId, x, y)
|
|
82
|
+
end
|
|
19
83
|
function UnitBehavior.prototype.onAutoAttackStart(self, target)
|
|
20
84
|
end
|
|
21
85
|
function UnitBehavior.prototype.onAutoAttackFinish(self, target)
|
|
22
86
|
end
|
|
87
|
+
function UnitBehavior.prototype.onTargetingAutoAttackStart(self, source)
|
|
88
|
+
end
|
|
89
|
+
function UnitBehavior.prototype.onTargetingAutoAttackFinish(self, source)
|
|
90
|
+
end
|
|
23
91
|
function UnitBehavior.prototype.onDamageDealing(self, target, event)
|
|
24
92
|
end
|
|
25
93
|
function UnitBehavior.prototype.onDamageDealt(self, target, event)
|
|
@@ -32,6 +100,14 @@ function UnitBehavior.prototype.onAbilityGained(self, ability)
|
|
|
32
100
|
end
|
|
33
101
|
function UnitBehavior.prototype.onAbilityLost(self, ability)
|
|
34
102
|
end
|
|
103
|
+
function UnitBehavior.prototype.onAbilityChannelingStart(self, ability)
|
|
104
|
+
end
|
|
105
|
+
function UnitBehavior.prototype.onAbilityImpact(self, ability)
|
|
106
|
+
end
|
|
107
|
+
function UnitBehavior.prototype.onAbilityChannelingFinish(self, ability)
|
|
108
|
+
end
|
|
109
|
+
function UnitBehavior.prototype.onAbilityStop(self, ability)
|
|
110
|
+
end
|
|
35
111
|
function UnitBehavior.prototype.onItemDropped(self, item)
|
|
36
112
|
end
|
|
37
113
|
function UnitBehavior.prototype.onItemPickedUp(self, item)
|
|
@@ -40,6 +116,8 @@ function UnitBehavior.prototype.onItemUsed(self, item)
|
|
|
40
116
|
end
|
|
41
117
|
function UnitBehavior.prototype.onItemStacked(self, item)
|
|
42
118
|
end
|
|
119
|
+
function UnitBehavior.prototype.onItemChargesChanged(self, item)
|
|
120
|
+
end
|
|
43
121
|
function UnitBehavior.prototype.onKill(self, target)
|
|
44
122
|
end
|
|
45
123
|
function UnitBehavior.prototype.onDeath(self, source)
|
|
@@ -53,11 +131,28 @@ __TS__SetDescriptor(
|
|
|
53
131
|
true
|
|
54
132
|
);
|
|
55
133
|
(function(self)
|
|
134
|
+
Unit.onImmediateOrder:addListener(function(source, orderId)
|
|
135
|
+
____exports.UnitBehavior:forAll(source, "onImmediateOrder", orderId)
|
|
136
|
+
end)
|
|
137
|
+
Unit.onTargetOrder:addListener(function(source, orderId, target)
|
|
138
|
+
____exports.UnitBehavior:forAll(source, "onTargetOrder", orderId, target)
|
|
139
|
+
end)
|
|
140
|
+
Unit.onPointOrder:addListener(function(source, orderId, x, y)
|
|
141
|
+
____exports.UnitBehavior:forAll(
|
|
142
|
+
source,
|
|
143
|
+
"onPointOrder",
|
|
144
|
+
orderId,
|
|
145
|
+
x,
|
|
146
|
+
y
|
|
147
|
+
)
|
|
148
|
+
end)
|
|
56
149
|
Unit.autoAttackStartEvent:addListener(function(source, target)
|
|
57
150
|
____exports.UnitBehavior:forAll(source, "onAutoAttackStart", target)
|
|
151
|
+
____exports.UnitBehavior:forAll(target, "onTargetingAutoAttackStart", source)
|
|
58
152
|
end)
|
|
59
153
|
Unit.autoAttackFinishEvent:addListener(function(source, target)
|
|
60
154
|
____exports.UnitBehavior:forAll(source, "onAutoAttackFinish", target)
|
|
155
|
+
____exports.UnitBehavior:forAll(target, "onTargetingAutoAttackFinish", source)
|
|
61
156
|
end)
|
|
62
157
|
Unit.onDamaging:addListener(function(source, target, event)
|
|
63
158
|
if source ~= nil then
|
|
@@ -71,11 +166,23 @@ __TS__SetDescriptor(
|
|
|
71
166
|
end
|
|
72
167
|
____exports.UnitBehavior:forAll(target, "onDamageReceived", source, event)
|
|
73
168
|
end)
|
|
74
|
-
Unit.abilityGainedEvent:addListener(function(source,
|
|
75
|
-
____exports.UnitBehavior:forAll(source, "onAbilityGained",
|
|
169
|
+
Unit.abilityGainedEvent:addListener(function(source, ability)
|
|
170
|
+
____exports.UnitBehavior:forAll(source, "onAbilityGained", ability)
|
|
76
171
|
end)
|
|
77
|
-
Unit.abilityLostEvent:addListener(function(source,
|
|
78
|
-
____exports.UnitBehavior:forAll(source, "onAbilityLost",
|
|
172
|
+
Unit.abilityLostEvent:addListener(function(source, ability)
|
|
173
|
+
____exports.UnitBehavior:forAll(source, "onAbilityLost", ability)
|
|
174
|
+
end)
|
|
175
|
+
Unit.abilityChannelingStartEvent:addListener(function(source, ability)
|
|
176
|
+
____exports.UnitBehavior:forAll(source, "onAbilityChannelingStart", ability)
|
|
177
|
+
end)
|
|
178
|
+
Unit.abilityImpactEvent:addListener(function(source, ability)
|
|
179
|
+
____exports.UnitBehavior:forAll(source, "onAbilityImpact", ability)
|
|
180
|
+
end)
|
|
181
|
+
Unit.abilityChannelingFinishEvent:addListener(function(source, ability)
|
|
182
|
+
____exports.UnitBehavior:forAll(source, "onAbilityChannelingFinish", ability)
|
|
183
|
+
end)
|
|
184
|
+
Unit.abilityStopEvent:addListener(function(source, ability)
|
|
185
|
+
____exports.UnitBehavior:forAll(source, "onAbilityStop", ability)
|
|
79
186
|
end)
|
|
80
187
|
Unit.deathEvent:addListener(function(target, source)
|
|
81
188
|
if source ~= nil then
|
|
@@ -95,6 +202,9 @@ __TS__SetDescriptor(
|
|
|
95
202
|
Unit.itemStackedEvent:addListener(function(unit, item)
|
|
96
203
|
____exports.UnitBehavior:forAll(unit, "onItemStacked", item)
|
|
97
204
|
end)
|
|
205
|
+
Unit.itemChargesChangedEvent:addListener(function(unit, item)
|
|
206
|
+
____exports.UnitBehavior:forAll(unit, "onItemChargesChanged", item)
|
|
207
|
+
end)
|
|
98
208
|
end)(UnitBehavior)
|
|
99
209
|
Unit.destroyEvent:addListener(function(unit)
|
|
100
210
|
____exports.UnitBehavior:forAll(unit, "destroy")
|
|
@@ -55,9 +55,13 @@ export declare class UnrecognizedAbility extends Ability {
|
|
|
55
55
|
export declare class UnitAbility extends Ability {
|
|
56
56
|
readonly owner: Unit;
|
|
57
57
|
private readonly u;
|
|
58
|
+
private d?;
|
|
58
59
|
constructor(handle: jability, typeId: number, owner: Unit);
|
|
59
60
|
incrementHideCounter(): void;
|
|
60
61
|
decrementHideCounter(): void;
|
|
62
|
+
incrementDisableCounter(): void;
|
|
63
|
+
decrementDisableCounter(): void;
|
|
64
|
+
get isDisabled(): boolean;
|
|
61
65
|
get level(): number;
|
|
62
66
|
set level(v: number);
|
|
63
67
|
get cooldownRemaining(): number;
|
|
@@ -38,6 +38,7 @@ local getHandleId = GetHandleId
|
|
|
38
38
|
local getItemBooleanField = BlzGetItemBooleanField
|
|
39
39
|
local setItemBooleanField = BlzSetItemBooleanField
|
|
40
40
|
local unitHideAbility = BlzUnitHideAbility
|
|
41
|
+
local unitDisableAbility = BlzUnitDisableAbility
|
|
41
42
|
local match = string.match
|
|
42
43
|
local ____type = _G.type
|
|
43
44
|
local ____tostring = _G.tostring
|
|
@@ -402,9 +403,25 @@ end
|
|
|
402
403
|
function UnitAbility.prototype.decrementHideCounter(self)
|
|
403
404
|
unitHideAbility(self.u, self.typeId, false)
|
|
404
405
|
end
|
|
406
|
+
function UnitAbility.prototype.incrementDisableCounter(self)
|
|
407
|
+
unitDisableAbility(self.u, self.typeId, true, false)
|
|
408
|
+
self.d = (self.d or 0) + 1
|
|
409
|
+
end
|
|
410
|
+
function UnitAbility.prototype.decrementDisableCounter(self)
|
|
411
|
+
unitDisableAbility(self.u, self.typeId, false, false)
|
|
412
|
+
self.d = (self.d or 0) - 1
|
|
413
|
+
end
|
|
405
414
|
function UnitAbility.prototype.interruptCast(self)
|
|
406
415
|
self.owner:interruptCast(self.typeId)
|
|
407
416
|
end
|
|
417
|
+
__TS__SetDescriptor(
|
|
418
|
+
UnitAbility.prototype,
|
|
419
|
+
"isDisabled",
|
|
420
|
+
{get = function(self)
|
|
421
|
+
return self.d ~= nil and self.d > 0
|
|
422
|
+
end},
|
|
423
|
+
true
|
|
424
|
+
)
|
|
408
425
|
__TS__SetDescriptor(
|
|
409
426
|
UnitAbility.prototype,
|
|
410
427
|
"level",
|
|
@@ -55,22 +55,24 @@ local COOLDOWN_STARTER_ITEM_TYPE_ID = compiletime(function()
|
|
|
55
55
|
itemType.activelyUsed = true
|
|
56
56
|
return itemType.id
|
|
57
57
|
end)
|
|
58
|
-
|
|
58
|
+
---
|
|
59
|
+
-- @internal For use by internal systems only.
|
|
60
|
+
____exports.itemAbilityDummy = assert(CreateUnit(
|
|
59
61
|
Player.neutralVictim.handle,
|
|
60
62
|
dummyUnitId,
|
|
61
63
|
0,
|
|
62
64
|
0,
|
|
63
65
|
270
|
|
64
66
|
))
|
|
65
|
-
local cooldownStarterItem = UnitAddItemById(
|
|
67
|
+
local cooldownStarterItem = UnitAddItemById(____exports.itemAbilityDummy, COOLDOWN_STARTER_ITEM_TYPE_ID)
|
|
66
68
|
local cooldownStarterAbility = BlzGetItemAbility(cooldownStarterItem, COOLDOWN_STARTER_ABILITY_TYPE_ID)
|
|
67
|
-
ShowUnit(
|
|
69
|
+
ShowUnit(____exports.itemAbilityDummy, false)
|
|
68
70
|
local function startItemCooldownInternal(handle, cooldown)
|
|
69
71
|
local cooldownGroup = getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP)
|
|
70
72
|
setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, COOLDOWN_STARTER_ABILITY_TYPE_ID)
|
|
71
73
|
setAbilityRealLevelField(cooldownStarterAbility, ABILITY_RLF_COOLDOWN, 0, cooldown)
|
|
72
|
-
unitResetCooldown(
|
|
73
|
-
unitUseItem(
|
|
74
|
+
unitResetCooldown(____exports.itemAbilityDummy)
|
|
75
|
+
unitUseItem(____exports.itemAbilityDummy, cooldownStarterItem)
|
|
74
76
|
Timer:run(restoreCooldownGroup, handle, cooldownGroup)
|
|
75
77
|
end
|
|
76
78
|
restoreCooldownGroup = function(handle, cooldownGroup)
|
|
@@ -85,7 +87,7 @@ ____exports.startItemCooldown = function(handle, owner, cooldown)
|
|
|
85
87
|
end
|
|
86
88
|
---
|
|
87
89
|
-- @internal For use by internal systems only.
|
|
88
|
-
____exports.abilityActionDummy =
|
|
90
|
+
____exports.abilityActionDummy = ____exports.itemAbilityDummy
|
|
89
91
|
---
|
|
90
92
|
-- @internal For use by internal systems only.
|
|
91
93
|
____exports.doAbilityAction = function(handle, action, ...)
|
|
@@ -104,11 +106,11 @@ ____exports.doAbilityAction = function(handle, action, ...)
|
|
|
104
106
|
end
|
|
105
107
|
x = getItemX(handle)
|
|
106
108
|
y = getItemY(handle)
|
|
107
|
-
unitAddItem(
|
|
109
|
+
unitAddItem(____exports.itemAbilityDummy, handle)
|
|
108
110
|
end
|
|
109
111
|
local result = action(handle, ...)
|
|
110
112
|
if not isOwned then
|
|
111
|
-
unitRemoveItem(
|
|
113
|
+
unitRemoveItem(____exports.itemAbilityDummy, handle)
|
|
112
114
|
setItemPosition(handle, x, y)
|
|
113
115
|
if isPowerup then
|
|
114
116
|
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
@@ -139,9 +141,9 @@ ____exports.doAbilityActionForceDummy = function(handle, owner, action, ...)
|
|
|
139
141
|
isPowerup = true
|
|
140
142
|
end
|
|
141
143
|
unitRemoveItem(owner, handle)
|
|
142
|
-
unitAddItem(
|
|
144
|
+
unitAddItem(____exports.itemAbilityDummy, handle)
|
|
143
145
|
local result = action(handle, ...)
|
|
144
|
-
unitRemoveItem(
|
|
146
|
+
unitRemoveItem(____exports.itemAbilityDummy, handle)
|
|
145
147
|
unitAddItemToSlot(owner, handle, slot)
|
|
146
148
|
if isPowerup then
|
|
147
149
|
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
@@ -7,7 +7,6 @@ import { ItemAbility } from "./ability";
|
|
|
7
7
|
import { AbilityTypeId } from "../object-data/entry/ability-type";
|
|
8
8
|
import type { ItemTypeId } from "../object-data/entry/item-type";
|
|
9
9
|
type DefenseType = 0 | 1 | 2 | 3 | 4 | 5;
|
|
10
|
-
export declare const addAndGetAbility: (handle: jitem, abilityTypeId: AbilityTypeId) => jability | null;
|
|
11
10
|
declare const enum ItemPropertyKey {
|
|
12
11
|
ABILITIES = 100,
|
|
13
12
|
LUA_INDEX_BY_ABILITY_TYPE_ID = 101
|
|
@@ -74,6 +73,7 @@ export declare class Item extends Handle<jitem> {
|
|
|
74
73
|
set position(v: Vec2);
|
|
75
74
|
set charges(v: number);
|
|
76
75
|
get charges(): number;
|
|
76
|
+
consumeCharge(): boolean;
|
|
77
77
|
addAbility(abilityTypeId: AbilityTypeId): ItemAbility | undefined;
|
|
78
78
|
removeAbility(abilityTypeId: AbilityTypeId): boolean;
|
|
79
79
|
hasAbility(abilityTypeId: AbilityTypeId): boolean;
|
|
@@ -83,5 +83,6 @@ export declare class Item extends Handle<jitem> {
|
|
|
83
83
|
static getInRect(rect: ReadonlyRect): Item[];
|
|
84
84
|
static get onCreate(): Event<[Item]>;
|
|
85
85
|
static get destroyEvent(): Event<[Item]>;
|
|
86
|
+
static readonly chargesChangedEvent: Event<[Item]>;
|
|
86
87
|
}
|
|
87
88
|
export {};
|
package/engine/internal/item.lua
CHANGED
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__New = ____lualib.__TS__New
|
|
2
3
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
4
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
5
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
6
|
local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
6
7
|
local __TS__Delete = ____lualib.__TS__Delete
|
|
7
8
|
local ____exports = {}
|
|
9
|
+
local invoke
|
|
8
10
|
local ____handle = require("core.types.handle")
|
|
9
11
|
local Handle = ____handle.Handle
|
|
10
12
|
local ____color = require("core.types.color")
|
|
11
13
|
local Color = ____color.Color
|
|
14
|
+
local ____event = require("event")
|
|
15
|
+
local Event = ____event.Event
|
|
12
16
|
local ____rect = require("core.types.rect")
|
|
13
17
|
local Rect = ____rect.Rect
|
|
14
18
|
local ____ability = require("engine.internal.ability")
|
|
15
19
|
local ItemAbility = ____ability.ItemAbility
|
|
16
20
|
local ____ability = require("engine.internal.item.ability")
|
|
17
21
|
local doAbilityAction = ____ability.doAbilityAction
|
|
22
|
+
local doAbilityActionForceDummy = ____ability.doAbilityActionForceDummy
|
|
23
|
+
local itemAbilityDummy = ____ability.itemAbilityDummy
|
|
18
24
|
local ____dummy_2Ditem = require("engine.internal.object-data.dummy-item")
|
|
19
25
|
local DUMMY_ITEM_ID = ____dummy_2Ditem.DUMMY_ITEM_ID
|
|
20
26
|
local ____add_2Ditem_2Dto_2Dslot = require("engine.internal.unit.add-item-to-slot")
|
|
21
27
|
local SLOT_FILLER_ITEM_TYPE_ID = ____add_2Ditem_2Dto_2Dslot.SLOT_FILLER_ITEM_TYPE_ID
|
|
22
28
|
local ____vec2 = require("math.vec2")
|
|
23
29
|
local distance = ____vec2.distance
|
|
30
|
+
local itemChargesChangeEvent = __TS__New(Event)
|
|
24
31
|
local itemAddAbility = BlzItemAddAbility
|
|
25
32
|
local itemRemoveAbility = BlzItemRemoveAbility
|
|
26
33
|
local getItemAbility = BlzGetItemAbility
|
|
@@ -36,10 +43,26 @@ local getEnumItem = GetEnumItem
|
|
|
36
43
|
local getItemTypeId = GetItemTypeId
|
|
37
44
|
local getItemX = GetItemX
|
|
38
45
|
local getItemY = GetItemY
|
|
46
|
+
local getItemCharges = GetItemCharges
|
|
47
|
+
local setItemCharges = SetItemCharges
|
|
48
|
+
local unitRemoveAbility = UnitRemoveAbility
|
|
49
|
+
local unitUseItem = UnitUseItem
|
|
50
|
+
local unitUseItemPoint = UnitUseItemPoint
|
|
51
|
+
local unitUseItemTarget = UnitUseItemTarget
|
|
52
|
+
_G.SetItemCharges = function(whichItem, charges)
|
|
53
|
+
setItemCharges(whichItem, charges)
|
|
54
|
+
invoke(
|
|
55
|
+
itemChargesChangeEvent,
|
|
56
|
+
____exports.Item:of(whichItem)
|
|
57
|
+
)
|
|
58
|
+
end
|
|
39
59
|
local getItemIntegerField = BlzGetItemIntegerField
|
|
40
60
|
local setItemBooleanField = BlzSetItemBooleanField
|
|
41
61
|
local getItemBooleanField = BlzGetItemBooleanField
|
|
62
|
+
invoke = Event.invoke
|
|
42
63
|
local enumRect = Rect:create(0, 0, 0, 0).handle
|
|
64
|
+
---
|
|
65
|
+
-- @internal For use by internal systems only.
|
|
43
66
|
____exports.addAndGetAbility = function(handle, abilityTypeId)
|
|
44
67
|
if itemAddAbility(handle, abilityTypeId) then
|
|
45
68
|
return getItemAbility(handle, abilityTypeId)
|
|
@@ -65,6 +88,23 @@ local function getItemAbilities(handle, item)
|
|
|
65
88
|
end
|
|
66
89
|
return abilities
|
|
67
90
|
end
|
|
91
|
+
local function consumeCharge(handle)
|
|
92
|
+
do
|
|
93
|
+
local i = 0
|
|
94
|
+
local ability = getItemAbilityByIndex(handle, i)
|
|
95
|
+
while ability ~= nil do
|
|
96
|
+
unitRemoveAbility(
|
|
97
|
+
itemAbilityDummy,
|
|
98
|
+
getAbilityId(ability)
|
|
99
|
+
)
|
|
100
|
+
do
|
|
101
|
+
i = i + 1
|
|
102
|
+
ability = getItemAbilityByIndex(handle, i)
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
return unitUseItem(itemAbilityDummy, handle) or unitUseItemPoint(itemAbilityDummy, handle, 0, 0) or unitUseItemTarget(itemAbilityDummy, handle, itemAbilityDummy)
|
|
107
|
+
end
|
|
68
108
|
local targetCollection
|
|
69
109
|
local targetCollectionNextIndex
|
|
70
110
|
local centerX
|
|
@@ -116,6 +156,32 @@ end
|
|
|
116
156
|
function Item.create(self, id, x, y, skinId)
|
|
117
157
|
return self:of(BlzCreateItemWithSkin(id, x, y, skinId or id))
|
|
118
158
|
end
|
|
159
|
+
function Item.prototype.consumeCharge(self)
|
|
160
|
+
local handle = self.handle
|
|
161
|
+
local charges = getItemCharges(handle)
|
|
162
|
+
if charges >= 2 then
|
|
163
|
+
setItemCharges(handle, charges - 1)
|
|
164
|
+
invoke(itemChargesChangeEvent, self)
|
|
165
|
+
return true
|
|
166
|
+
end
|
|
167
|
+
if charges == 1 then
|
|
168
|
+
if getItemBooleanField(handle, ITEM_BF_PERISHABLE) then
|
|
169
|
+
self:destroy()
|
|
170
|
+
return true
|
|
171
|
+
end
|
|
172
|
+
if not getItemBooleanField(handle, ITEM_BF_ACTIVELY_USED) then
|
|
173
|
+
setItemCharges(handle, 0)
|
|
174
|
+
invoke(itemChargesChangeEvent, self)
|
|
175
|
+
return true
|
|
176
|
+
end
|
|
177
|
+
local ____doAbilityActionForceDummy_2 = doAbilityActionForceDummy
|
|
178
|
+
local ____opt_0 = self.owner
|
|
179
|
+
____doAbilityActionForceDummy_2(handle, ____opt_0 and ____opt_0.handle, consumeCharge)
|
|
180
|
+
invoke(itemChargesChangeEvent, self)
|
|
181
|
+
return true
|
|
182
|
+
end
|
|
183
|
+
return false
|
|
184
|
+
end
|
|
119
185
|
function Item.prototype.addAbility(self, abilityTypeId)
|
|
120
186
|
local nativeAbility = doAbilityAction(self.handle, ____exports.addAndGetAbility, abilityTypeId)
|
|
121
187
|
if nativeAbility ~= nil then
|
|
@@ -301,7 +367,7 @@ __TS__SetDescriptor(
|
|
|
301
367
|
"perishable",
|
|
302
368
|
{
|
|
303
369
|
get = function(self)
|
|
304
|
-
return
|
|
370
|
+
return getItemBooleanField(self.handle, ITEM_BF_PERISHABLE)
|
|
305
371
|
end,
|
|
306
372
|
set = function(self, v)
|
|
307
373
|
BlzSetItemBooleanField(self.handle, ITEM_BF_PERISHABLE, v)
|
|
@@ -557,10 +623,11 @@ __TS__SetDescriptor(
|
|
|
557
623
|
"charges",
|
|
558
624
|
{
|
|
559
625
|
get = function(self)
|
|
560
|
-
return
|
|
626
|
+
return getItemCharges(self.handle)
|
|
561
627
|
end,
|
|
562
628
|
set = function(self, v)
|
|
563
|
-
|
|
629
|
+
setItemCharges(self.handle, v)
|
|
630
|
+
invoke(itemChargesChangeEvent, self)
|
|
564
631
|
end
|
|
565
632
|
},
|
|
566
633
|
true
|
|
@@ -587,6 +654,7 @@ __TS__ObjectDefineProperty(
|
|
|
587
654
|
return self.onDestroyEvent
|
|
588
655
|
end}
|
|
589
656
|
)
|
|
657
|
+
Item.chargesChangedEvent = itemChargesChangeEvent
|
|
590
658
|
local getManipulatedItem = GetManipulatedItem
|
|
591
659
|
local trigger = CreateTrigger()
|
|
592
660
|
TriggerRegisterAnyUnitEventBJ(trigger, EVENT_PLAYER_UNIT_PICKUP_ITEM)
|
|
@@ -131,6 +131,11 @@ declare module "../unit" {
|
|
|
131
131
|
const abilityNoTargetChannelingStartEvent: DispatchingEvent<[Unit, Ability]>;
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
+
declare module "../unit" {
|
|
135
|
+
namespace Unit {
|
|
136
|
+
const abilityImpactEvent: DispatchingEvent<[Unit, Ability]>;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
134
139
|
declare module "../unit" {
|
|
135
140
|
namespace Unit {
|
|
136
141
|
const abilityChannelingFinishEvent: DispatchingEvent<[Unit, Ability]>;
|
|
@@ -21,6 +21,8 @@ local ____preconditions = require("utility.preconditions")
|
|
|
21
21
|
local checkNotNull = ____preconditions.checkNotNull
|
|
22
22
|
local ____lazy = require("utility.lazy")
|
|
23
23
|
local lazyRecord = ____lazy.lazyRecord
|
|
24
|
+
local ____timer = require("core.types.timer")
|
|
25
|
+
local Timer = ____timer.Timer
|
|
24
26
|
local eventInvoke = Event.invoke
|
|
25
27
|
local condition = Condition
|
|
26
28
|
local createTrigger = CreateTrigger
|
|
@@ -345,6 +347,18 @@ rawset(
|
|
|
345
347
|
extractAbilityTypeId
|
|
346
348
|
)
|
|
347
349
|
)
|
|
350
|
+
local internalAbilityImpactEvent = __TS__New(Event)
|
|
351
|
+
internalAbilityChannelingStartEvent:addListener(function(...)
|
|
352
|
+
Timer:run(eventInvoke, internalAbilityImpactEvent, ...)
|
|
353
|
+
end)
|
|
354
|
+
rawset(
|
|
355
|
+
Unit,
|
|
356
|
+
"abilityImpactEvent",
|
|
357
|
+
createDispatchingEvent(
|
|
358
|
+
createCommonEvent(internalAbilityImpactEvent),
|
|
359
|
+
extractAbilityTypeId
|
|
360
|
+
)
|
|
361
|
+
)
|
|
348
362
|
rawset(
|
|
349
363
|
Unit,
|
|
350
364
|
"abilityChannelingFinishEvent",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { CombatClassifications } from "../../object-data/auxiliary/combat-classification";
|
|
3
3
|
declare module "../unit" {
|
|
4
4
|
interface Unit {
|
|
5
|
-
isAllowedTarget(this: Unit, source: Unit, allowedTargetCombatClassifications
|
|
5
|
+
isAllowedTarget(this: Unit, source: Unit, allowedTargetCombatClassifications?: CombatClassifications): boolean;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
8
|
declare module "../unit" {
|
|
@@ -5,7 +5,15 @@ local initializeFilterTargetState = ____combat_2Dclassification.initializeFilter
|
|
|
5
5
|
local ____unit = require("engine.internal.unit")
|
|
6
6
|
local Unit = ____unit.Unit
|
|
7
7
|
Unit.prototype.isAllowedTarget = function(self, source, allowedTargetCombatClassifications)
|
|
8
|
-
|
|
8
|
+
if allowedTargetCombatClassifications ~= nil then
|
|
9
|
+
initializeFilterTargetState(source, allowedTargetCombatClassifications)
|
|
10
|
+
return filterTarget(self)
|
|
11
|
+
end
|
|
12
|
+
initializeFilterTargetState(source, source.firstWeapon.allowedTargetCombatClassifications)
|
|
13
|
+
if filterTarget(self) then
|
|
14
|
+
return true
|
|
15
|
+
end
|
|
16
|
+
initializeFilterTargetState(source, source.secondWeapon.allowedTargetCombatClassifications)
|
|
9
17
|
return filterTarget(self)
|
|
10
18
|
end
|
|
11
19
|
Unit.getAllowedTargetsInRange = function(source, allowedTargetCombatClassifications, x, y, range)
|
|
@@ -44,7 +44,7 @@ local function timerCallback(source, target)
|
|
|
44
44
|
Event.invoke(autoAttackFinishEvent, source, target)
|
|
45
45
|
end
|
|
46
46
|
Unit.autoAttackStartEvent:addListener(function(source, target)
|
|
47
|
-
local attackPoint = source.
|
|
47
|
+
local attackPoint = (source:chooseWeapon(target) or source.firstWeapon).impactDelay
|
|
48
48
|
local timer = Timer:simple(attackPoint, timerCallback, source, target)
|
|
49
49
|
eventTimerByUnit[source] = timer
|
|
50
50
|
end)
|
|
@@ -14,6 +14,7 @@ import { CombatClassification, CombatClassifications } from "../object-data/auxi
|
|
|
14
14
|
import { MovementType } from "../object-data/auxiliary/movement-type";
|
|
15
15
|
import { UnitAttribute } from "../object-data/auxiliary/unit-attribute";
|
|
16
16
|
import { AttackType } from "../object-data/auxiliary/attack-type";
|
|
17
|
+
import { AttributesHolder } from "../../attributes";
|
|
17
18
|
export type UnitClassification = junittype;
|
|
18
19
|
export declare namespace UnitClassification {
|
|
19
20
|
const STRUCTURE: junittype;
|
|
@@ -22,6 +23,7 @@ export declare namespace UnitClassification {
|
|
|
22
23
|
const GROUND: junittype;
|
|
23
24
|
const SUMMONED: junittype;
|
|
24
25
|
const MECHANICAL: junittype;
|
|
26
|
+
const WORKER: junittype;
|
|
25
27
|
const ANCIENT: junittype;
|
|
26
28
|
const SUICIDAL: junittype;
|
|
27
29
|
const TAUREN: junittype;
|
|
@@ -39,7 +41,7 @@ type AbilityDispatcherTable<T extends any[] = []> = {
|
|
|
39
41
|
readonly [id: number]: Event<[Unit, Ability, ...T]>;
|
|
40
42
|
};
|
|
41
43
|
type AbilityEventDispatcher<T extends any[] = []> = Event<[Unit, Ability, ...T]> & AbilityDispatcherTable<T>;
|
|
42
|
-
export interface DamagingEvent {
|
|
44
|
+
export interface DamagingEvent extends AttributesHolder {
|
|
43
45
|
amount: number;
|
|
44
46
|
attackType: AttackType;
|
|
45
47
|
damageType: jdamagetype;
|
|
@@ -48,8 +50,9 @@ export interface DamagingEvent {
|
|
|
48
50
|
readonly isAttack: boolean;
|
|
49
51
|
readonly originalAmount: number;
|
|
50
52
|
readonly originalMetadata: unknown;
|
|
53
|
+
preventRetaliation(this: DamagingEvent): void;
|
|
51
54
|
}
|
|
52
|
-
export type DamageEvent = DamagingEvent & {
|
|
55
|
+
export type DamageEvent = Omit<DamagingEvent, "preventRetaliation"> & {
|
|
53
56
|
preventDeath<P extends any[]>(this: DamageEvent, callback: (this: void, ...parameters: P) => any, ...parameters: P): void;
|
|
54
57
|
};
|
|
55
58
|
export type AttackDamageEvent = DamagingEvent & {
|
|
@@ -81,6 +84,8 @@ export declare class UnitWeapon {
|
|
|
81
84
|
set cooldown(cooldown: number);
|
|
82
85
|
get damage(): [minimumDamage: number, maximumDamage: number];
|
|
83
86
|
set damage([minimumDamage, maximumDamage]: [number, number]);
|
|
87
|
+
get allowedTargetCombatClassifications(): CombatClassifications;
|
|
88
|
+
set allowedTargetCombatClassifications(allowedTargetCombatClassifications: CombatClassifications);
|
|
84
89
|
get damageBase(): number;
|
|
85
90
|
set damageBase(damageBase: number);
|
|
86
91
|
get damageDiceCount(): number;
|
|
@@ -162,6 +167,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
162
167
|
get weapons(): [UnitWeapon, UnitWeapon];
|
|
163
168
|
get firstWeapon(): UnitWeapon;
|
|
164
169
|
get secondWeapon(): UnitWeapon;
|
|
170
|
+
chooseWeapon(target: Unit): UnitWeapon | undefined;
|
|
165
171
|
get level(): number;
|
|
166
172
|
set level(v: number);
|
|
167
173
|
get xp(): number;
|
|
@@ -294,6 +300,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
294
300
|
get onUnitInRange(): Record<number, Event<[Unit]>>;
|
|
295
301
|
get onManaEqual(): Record<number, Event<[Unit, number]>>;
|
|
296
302
|
get manaEvent(): Record<Operator, Record<number, Event<[Unit]>>>;
|
|
303
|
+
get targetAcquiredEvent(): Event;
|
|
297
304
|
get onSelect(): Event;
|
|
298
305
|
get onDeselect(): Event;
|
|
299
306
|
get onImmediateOrder(): Event<[number]>;
|
|
@@ -347,6 +354,7 @@ export declare class Unit extends Handle<junit> {
|
|
|
347
354
|
static itemPickedUpEvent: UnitTriggerEvent<[Item]>;
|
|
348
355
|
static itemUsedEvent: UnitTriggerEvent<[Item]>;
|
|
349
356
|
static itemStackedEvent: UnitTriggerEvent<[Item]>;
|
|
357
|
+
static get itemChargesChangedEvent(): Event<[unit: Unit, item: Item]>;
|
|
350
358
|
static get itemUseOrderEvent(): Event<[unit: Unit, item: Item]>;
|
|
351
359
|
static get itemMoveOrderEvent(): Event<[
|
|
352
360
|
unit: Unit,
|
package/engine/internal/unit.lua
CHANGED
|
@@ -58,13 +58,12 @@ local attackTypeToNative = ____attack_2Dtype.attackTypeToNative
|
|
|
58
58
|
local nativeToAttackType = ____attack_2Dtype.nativeToAttackType
|
|
59
59
|
local ____damage_2Dmetadata_2Dby_2Dtarget = require("engine.internal.misc.damage-metadata-by-target")
|
|
60
60
|
local damageMetadataByTarget = ____damage_2Dmetadata_2Dby_2Dtarget.damageMetadataByTarget
|
|
61
|
+
local ____attributes = require("attributes")
|
|
62
|
+
local isAttribute = ____attributes.isAttribute
|
|
61
63
|
local match = string.match
|
|
62
64
|
local ____tostring = _G.tostring
|
|
63
65
|
local setUnitAnimation = SetUnitAnimation
|
|
64
|
-
local setUnitAnimationWithRarity = SetUnitAnimationWithRarity
|
|
65
66
|
local setUnitAnimationByIndex = SetUnitAnimationByIndex
|
|
66
|
-
local resetUnitAnimation = ResetUnitAnimation
|
|
67
|
-
local queueUnitAnimation = QueueUnitAnimation
|
|
68
67
|
local getUnitIntegerField = BlzGetUnitIntegerField
|
|
69
68
|
local getUnitRealField = BlzGetUnitRealField
|
|
70
69
|
local getHeroStr = GetHeroStr
|
|
@@ -140,6 +139,7 @@ do
|
|
|
140
139
|
UnitClassification.GROUND = UNIT_TYPE_GROUND
|
|
141
140
|
UnitClassification.SUMMONED = UNIT_TYPE_SUMMONED
|
|
142
141
|
UnitClassification.MECHANICAL = UNIT_TYPE_MECHANICAL
|
|
142
|
+
UnitClassification.WORKER = UNIT_TYPE_PEON
|
|
143
143
|
UnitClassification.ANCIENT = UNIT_TYPE_ANCIENT
|
|
144
144
|
UnitClassification.SUICIDAL = UNIT_TYPE_SAPPER
|
|
145
145
|
UnitClassification.TAUREN = UNIT_TYPE_TAUREN
|
|
@@ -347,6 +347,9 @@ local function dispatchAbility(event)
|
|
|
347
347
|
}
|
|
348
348
|
)
|
|
349
349
|
end
|
|
350
|
+
local function damagingEventPreventRetaliation(self)
|
|
351
|
+
self[0] = true
|
|
352
|
+
end
|
|
350
353
|
local function damageEventPreventDeath(self, callback, ...)
|
|
351
354
|
if self[0] ~= nil then
|
|
352
355
|
return
|
|
@@ -443,6 +446,19 @@ __TS__SetDescriptor(
|
|
|
443
446
|
},
|
|
444
447
|
true
|
|
445
448
|
)
|
|
449
|
+
__TS__SetDescriptor(
|
|
450
|
+
UnitWeapon.prototype,
|
|
451
|
+
"allowedTargetCombatClassifications",
|
|
452
|
+
{
|
|
453
|
+
get = function(self)
|
|
454
|
+
return BlzGetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index)
|
|
455
|
+
end,
|
|
456
|
+
set = function(self, allowedTargetCombatClassifications)
|
|
457
|
+
BlzSetUnitWeaponIntegerField(self.unit.handle, UNIT_WEAPON_IF_ATTACK_TARGETS_ALLOWED, self.index, allowedTargetCombatClassifications)
|
|
458
|
+
end
|
|
459
|
+
},
|
|
460
|
+
true
|
|
461
|
+
)
|
|
446
462
|
__TS__SetDescriptor(
|
|
447
463
|
UnitWeapon.prototype,
|
|
448
464
|
"damageBase",
|
|
@@ -801,16 +817,25 @@ function Unit.prototype.playAnimation(self, animation, rarity)
|
|
|
801
817
|
if type(animation) == "number" then
|
|
802
818
|
setUnitAnimationByIndex(self.handle, animation)
|
|
803
819
|
elseif rarity then
|
|
804
|
-
|
|
820
|
+
SetUnitAnimationWithRarity(self.handle, animation, rarity)
|
|
805
821
|
else
|
|
806
822
|
setUnitAnimation(self.handle, animation)
|
|
807
823
|
end
|
|
808
824
|
end
|
|
809
825
|
function Unit.prototype.resetAnimation(self)
|
|
810
|
-
|
|
826
|
+
ResetUnitAnimation(self.handle)
|
|
811
827
|
end
|
|
812
828
|
function Unit.prototype.queueAnimation(self, animation)
|
|
813
|
-
|
|
829
|
+
QueueUnitAnimation(self.handle, animation)
|
|
830
|
+
end
|
|
831
|
+
function Unit.prototype.chooseWeapon(self, target)
|
|
832
|
+
if target:isAllowedTarget(self, self.firstWeapon.allowedTargetCombatClassifications) then
|
|
833
|
+
return self.firstWeapon
|
|
834
|
+
end
|
|
835
|
+
if target:isAllowedTarget(target, self.secondWeapon.allowedTargetCombatClassifications) then
|
|
836
|
+
return self.secondWeapon
|
|
837
|
+
end
|
|
838
|
+
return nil
|
|
814
839
|
end
|
|
815
840
|
function Unit.prototype.delayHealthChecks(self)
|
|
816
841
|
self[103] = (self[103] or 0) + 1
|
|
@@ -2048,6 +2073,14 @@ __TS__SetDescriptor(
|
|
|
2048
2073
|
end},
|
|
2049
2074
|
true
|
|
2050
2075
|
)
|
|
2076
|
+
__TS__SetDescriptor(
|
|
2077
|
+
Unit.prototype,
|
|
2078
|
+
"targetAcquiredEvent",
|
|
2079
|
+
{get = function(self)
|
|
2080
|
+
return self:getEvent(EVENT_UNIT_ACQUIRED_TARGET)
|
|
2081
|
+
end},
|
|
2082
|
+
true
|
|
2083
|
+
)
|
|
2051
2084
|
__TS__SetDescriptor(
|
|
2052
2085
|
Unit.prototype,
|
|
2053
2086
|
"onSelect",
|
|
@@ -2420,7 +2453,8 @@ Unit.onDamaging = (function()
|
|
|
2420
2453
|
metadata = metadata,
|
|
2421
2454
|
isAttack = BlzGetEventIsAttack(),
|
|
2422
2455
|
originalAmount = GetEventDamage(),
|
|
2423
|
-
originalMetadata = metadata
|
|
2456
|
+
originalMetadata = metadata,
|
|
2457
|
+
preventRetaliation = damagingEventPreventRetaliation
|
|
2424
2458
|
}
|
|
2425
2459
|
if data.isAttack and source then
|
|
2426
2460
|
local weapon = BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 1) and (BlzGetUnitWeaponBooleanField(source.handle, UNIT_WEAPON_BF_ATTACKS_ENABLED, 0) and -1 or 1) or 0
|
|
@@ -2449,6 +2483,20 @@ Unit.onDamaging = (function()
|
|
|
2449
2483
|
}
|
|
2450
2484
|
)
|
|
2451
2485
|
)
|
|
2486
|
+
if data[0] and source then
|
|
2487
|
+
local sourceOwner = source.owner.handle
|
|
2488
|
+
data[1] = sourceOwner
|
|
2489
|
+
local targetOwner = target.owner.handle
|
|
2490
|
+
data[2] = targetOwner
|
|
2491
|
+
if not GetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE) then
|
|
2492
|
+
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, true)
|
|
2493
|
+
data[3] = true
|
|
2494
|
+
end
|
|
2495
|
+
if not GetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE) then
|
|
2496
|
+
SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, true)
|
|
2497
|
+
data[4] = true
|
|
2498
|
+
end
|
|
2499
|
+
end
|
|
2452
2500
|
damagingEventByTarget[target] = data
|
|
2453
2501
|
return
|
|
2454
2502
|
end
|
|
@@ -2526,12 +2574,32 @@ Unit.onDamage = __TS__New(
|
|
|
2526
2574
|
originalMetadata = damagingEvent and damagingEvent.originalMetadata,
|
|
2527
2575
|
preventDeath = damageEventPreventDeath
|
|
2528
2576
|
}
|
|
2577
|
+
if damagingEvent then
|
|
2578
|
+
for key, value in pairs(damagingEvent) do
|
|
2579
|
+
if isAttribute(key) then
|
|
2580
|
+
data[key] = value
|
|
2581
|
+
end
|
|
2582
|
+
end
|
|
2583
|
+
local sourceOwner = damagingEvent[1]
|
|
2584
|
+
if sourceOwner then
|
|
2585
|
+
local targetOwner = damagingEvent[2]
|
|
2586
|
+
if damagingEvent[3] then
|
|
2587
|
+
SetPlayerAlliance(sourceOwner, targetOwner, ALLIANCE_PASSIVE, false)
|
|
2588
|
+
end
|
|
2589
|
+
if damagingEvent[4] then
|
|
2590
|
+
SetPlayerAlliance(targetOwner, sourceOwner, ALLIANCE_PASSIVE, false)
|
|
2591
|
+
end
|
|
2592
|
+
end
|
|
2593
|
+
end
|
|
2529
2594
|
local evData = setmetatable(
|
|
2530
2595
|
{},
|
|
2531
2596
|
{
|
|
2532
2597
|
__index = data,
|
|
2533
2598
|
__newindex = function(self, key, value)
|
|
2534
|
-
damageSetters[key]
|
|
2599
|
+
local damageSetter = damageSetters[key]
|
|
2600
|
+
if damageSetter ~= nil then
|
|
2601
|
+
damageSetter(value)
|
|
2602
|
+
end
|
|
2535
2603
|
data[key] = value
|
|
2536
2604
|
end
|
|
2537
2605
|
}
|
|
@@ -2614,6 +2682,21 @@ Unit.itemStackedEvent = __TS__New(
|
|
|
2614
2682
|
EVENT_PLAYER_UNIT_STACK_ITEM,
|
|
2615
2683
|
function() return ____exports.Unit:of(getTriggerUnit()), Item:of(getManipulatedItem()) end
|
|
2616
2684
|
)
|
|
2685
|
+
__TS__ObjectDefineProperty(
|
|
2686
|
+
Unit,
|
|
2687
|
+
"itemChargesChangedEvent",
|
|
2688
|
+
{get = function(self)
|
|
2689
|
+
local event = __TS__New(Event)
|
|
2690
|
+
Item.chargesChangedEvent:addListener(function(item)
|
|
2691
|
+
local unit = item.owner
|
|
2692
|
+
if unit ~= nil then
|
|
2693
|
+
invoke(event, unit, item)
|
|
2694
|
+
end
|
|
2695
|
+
end)
|
|
2696
|
+
rawset(self, "itemChargesChangedEvent", event)
|
|
2697
|
+
return event
|
|
2698
|
+
end}
|
|
2699
|
+
)
|
|
2617
2700
|
__TS__ObjectDefineProperty(
|
|
2618
2701
|
Unit,
|
|
2619
2702
|
"itemUseOrderEvent",
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { AbilityType, AbilityTypeId } from "../ability-type";
|
|
3
|
+
import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
|
|
4
|
+
export declare class PermanentInvisibilityAbilityType extends AbilityType {
|
|
5
|
+
static readonly BASE_ID: AbilityTypeId;
|
|
6
|
+
get shouldAutoAcquireAttackTargets(): boolean[];
|
|
7
|
+
set shouldAutoAcquireAttackTargets(shouldAutoAcquireAttackTargets: ObjectDataEntryLevelFieldValueSupplier<boolean>);
|
|
8
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
|
+
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
|
+
local ____exports = {}
|
|
6
|
+
local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
|
|
7
|
+
local AbilityType = ____ability_2Dtype.AbilityType
|
|
8
|
+
____exports.PermanentInvisibilityAbilityType = __TS__Class()
|
|
9
|
+
local PermanentInvisibilityAbilityType = ____exports.PermanentInvisibilityAbilityType
|
|
10
|
+
PermanentInvisibilityAbilityType.name = "PermanentInvisibilityAbilityType"
|
|
11
|
+
__TS__ClassExtends(PermanentInvisibilityAbilityType, AbilityType)
|
|
12
|
+
PermanentInvisibilityAbilityType.BASE_ID = fourCC("Apiv")
|
|
13
|
+
__TS__SetDescriptor(
|
|
14
|
+
PermanentInvisibilityAbilityType.prototype,
|
|
15
|
+
"shouldAutoAcquireAttackTargets",
|
|
16
|
+
{
|
|
17
|
+
get = function(self)
|
|
18
|
+
return self:getBooleanLevelField("Gho1")
|
|
19
|
+
end,
|
|
20
|
+
set = function(self, shouldAutoAcquireAttackTargets)
|
|
21
|
+
self:setBooleanLevelField("Gho1", shouldAutoAcquireAttackTargets)
|
|
22
|
+
end
|
|
23
|
+
},
|
|
24
|
+
true
|
|
25
|
+
)
|
|
26
|
+
return ____exports
|
package/package.json
CHANGED