warscript 0.0.1-dev.e4a5fce → 0.0.1-dev.e72b4b0
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/config.d.ts +5 -0
- package/config.lua +10 -0
- package/core/types/effect.d.ts +2 -3
- package/core/types/effect.lua +95 -48
- package/core/types/sound.d.ts +17 -24
- package/core/types/sound.lua +99 -24
- package/core/types/timer.d.ts +6 -7
- package/core/types/timer.lua +18 -21
- package/core/util.d.ts +1 -1
- package/core/util.lua +12 -1
- package/decl/native.d.ts +840 -786
- package/engine/behaviour/ability/apply-buff.d.ts +5 -0
- package/engine/behaviour/ability/apply-buff.lua +32 -0
- package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
- package/engine/behaviour/ability/damage.d.ts +9 -3
- package/engine/behaviour/ability/damage.lua +26 -38
- package/engine/behaviour/ability/emulate-impact.lua +20 -8
- package/engine/behaviour/ability/on-command-impact.lua +7 -0
- package/engine/behaviour/ability.d.ts +12 -3
- package/engine/behaviour/ability.lua +67 -8
- package/engine/behaviour/unit.d.ts +24 -0
- package/engine/behaviour/unit.lua +150 -4
- package/engine/buff.d.ts +56 -41
- package/engine/buff.lua +295 -228
- package/engine/internal/ability.d.ts +15 -1
- package/engine/internal/ability.lua +84 -2
- package/engine/internal/item/ability.lua +112 -4
- package/engine/internal/item.d.ts +7 -4
- package/engine/internal/item.lua +131 -28
- package/engine/internal/mechanics/ability-duration.lua +1 -1
- package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
- package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
- package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
- package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
- package/engine/internal/object-data/evasion-probability.d.ts +2 -0
- package/engine/internal/object-data/evasion-probability.lua +16 -0
- package/engine/internal/unit/ability.d.ts +35 -0
- package/engine/internal/unit/ability.lua +62 -0
- package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
- package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
- package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
- package/engine/internal/unit/add-item-to-slot.lua +52 -0
- package/engine/internal/unit/allowed-targets.d.ts +1 -1
- package/engine/internal/unit/allowed-targets.lua +9 -1
- package/engine/internal/unit/bonus.d.ts +2 -0
- package/engine/internal/unit/bonus.lua +17 -0
- package/engine/internal/unit/ignore-events-items.d.ts +2 -0
- package/engine/internal/unit/ignore-events-items.lua +5 -0
- package/engine/internal/unit/item.lua +6 -12
- package/engine/internal/unit/order.d.ts +20 -0
- package/engine/internal/unit/order.lua +136 -0
- package/engine/internal/unit+damage.d.ts +2 -11
- package/engine/internal/unit+damage.lua +10 -14
- package/engine/internal/unit+spellSteal.lua +1 -2
- package/engine/internal/unit-missile-launch.lua +1 -1
- package/engine/internal/unit.d.ts +30 -5
- package/engine/internal/unit.lua +247 -50
- package/engine/internal/utility.lua +12 -0
- package/engine/lightning.d.ts +12 -5
- package/engine/lightning.lua +48 -14
- package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
- package/engine/object-data/auxiliary/animation-name.lua +16 -0
- package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
- package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
- package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
- package/engine/object-data/auxiliary/attack-type.lua +42 -0
- package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
- package/engine/object-data/auxiliary/movement-type.lua +22 -0
- package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
- package/engine/object-data/auxiliary/sound-eax.lua +2 -0
- package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
- package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
- package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
- package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
- package/engine/object-data/entry/ability-type/berserk.lua +13 -0
- package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
- package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
- package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
- package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
- package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
- package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
- package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
- package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
- 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/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
- package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
- package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
- package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
- package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
- package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
- package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
- package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
- package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
- package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
- package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
- package/engine/object-data/entry/ability-type/web.d.ts +12 -0
- package/engine/object-data/entry/ability-type/web.lua +52 -0
- package/engine/object-data/entry/ability-type.d.ts +19 -17
- package/engine/object-data/entry/ability-type.lua +89 -33
- package/engine/object-data/entry/buff-type/applicable.lua +18 -37
- package/engine/object-data/entry/buff-type.d.ts +6 -12
- package/engine/object-data/entry/buff-type.lua +13 -29
- package/engine/object-data/entry/destructible-type.d.ts +1 -1
- package/engine/object-data/entry/item-type.d.ts +3 -1
- package/engine/object-data/entry/item-type.lua +15 -2
- package/engine/object-data/entry/lightning-type.d.ts +1 -1
- package/engine/object-data/entry/sound-preset.d.ts +33 -0
- package/engine/object-data/entry/sound-preset.lua +140 -0
- package/engine/object-data/entry/unit-type.d.ts +10 -3
- package/engine/object-data/entry/unit-type.lua +155 -92
- package/engine/object-data/entry/upgrade.d.ts +1 -1
- package/engine/object-data/entry/upgrade.lua +4 -4
- package/engine/object-data/entry.d.ts +16 -14
- package/engine/object-data/entry.lua +60 -32
- package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
- package/engine/object-field/ability.d.ts +6 -3
- package/engine/object-field/ability.lua +3 -0
- package/engine/object-field/unit.d.ts +50 -3
- package/engine/object-field/unit.lua +186 -7
- package/engine/object-field.d.ts +17 -6
- package/engine/object-field.lua +187 -89
- package/engine/standard/entries/buff-type.d.ts +3 -0
- package/engine/standard/entries/buff-type.lua +3 -0
- package/engine/standard/entries/sound-preset.d.ts +10 -0
- package/engine/standard/entries/sound-preset.lua +10 -0
- package/engine/standard/fields/unit.d.ts +3 -0
- package/engine/standard/fields/unit.lua +5 -0
- package/engine/text-tag.d.ts +36 -2
- package/engine/text-tag.lua +175 -10
- package/engine/unit.d.ts +2 -0
- package/engine/unit.lua +2 -0
- package/objutil/buff.lua +1 -2
- package/objutil/unit.lua +8 -0
- package/package.json +2 -2
- package/utility/arrays.d.ts +1 -0
- package/utility/arrays.lua +3 -0
- package/utility/functions.d.ts +1 -0
- package/utility/functions.lua +1 -0
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +3 -0
- package/utility/lua-maps.d.ts +4 -0
- package/utility/lua-maps.lua +20 -0
- package/utility/lua-sets.d.ts +1 -0
- package/utility/lua-sets.lua +3 -0
- package/utility/reflection.lua +11 -7
- package/core/types/order.d.ts +0 -25
- package/core/types/order.lua +0 -55
|
@@ -33,4 +33,9 @@ export declare class ApplyBuffTargetAreaAbilityBehavior<T extends BuffConstructo
|
|
|
33
33
|
onPointTargetImpact(caster: Unit, x: number, y: number): void;
|
|
34
34
|
onWidgetTargetImpact(caster: Unit, target: Widget): void;
|
|
35
35
|
}
|
|
36
|
+
export declare class ApplyBuffChannelingTargetAbilityBehavior<T extends BuffConstructor = typeof Buff> extends ApplyBuffAbilityBehavior<T> {
|
|
37
|
+
private buff?;
|
|
38
|
+
onUnitTargetChannelingStart(caster: Unit, target: Unit): void;
|
|
39
|
+
onStop(): void;
|
|
40
|
+
}
|
|
36
41
|
export {};
|
|
@@ -123,4 +123,36 @@ function ApplyBuffTargetAreaAbilityBehavior.prototype.onWidgetTargetImpact(self,
|
|
|
123
123
|
self.applyBuff(unit)
|
|
124
124
|
end
|
|
125
125
|
end
|
|
126
|
+
local behaviorByBuff = {}
|
|
127
|
+
____exports.ApplyBuffChannelingTargetAbilityBehavior = __TS__Class()
|
|
128
|
+
local ApplyBuffChannelingTargetAbilityBehavior = ____exports.ApplyBuffChannelingTargetAbilityBehavior
|
|
129
|
+
ApplyBuffChannelingTargetAbilityBehavior.name = "ApplyBuffChannelingTargetAbilityBehavior"
|
|
130
|
+
__TS__ClassExtends(ApplyBuffChannelingTargetAbilityBehavior, ____exports.ApplyBuffAbilityBehavior)
|
|
131
|
+
function ApplyBuffChannelingTargetAbilityBehavior.prototype.onUnitTargetChannelingStart(self, caster, target)
|
|
132
|
+
local previousBuff = self.buff
|
|
133
|
+
if previousBuff ~= nil then
|
|
134
|
+
behaviorByBuff[previousBuff] = nil
|
|
135
|
+
previousBuff:destroy()
|
|
136
|
+
end
|
|
137
|
+
local buff = self.applyBuff(target)
|
|
138
|
+
if buff ~= nil then
|
|
139
|
+
behaviorByBuff[buff] = self
|
|
140
|
+
end
|
|
141
|
+
self.buff = buff
|
|
142
|
+
end
|
|
143
|
+
function ApplyBuffChannelingTargetAbilityBehavior.prototype.onStop(self)
|
|
144
|
+
local buff = self.buff
|
|
145
|
+
if buff ~= nil then
|
|
146
|
+
behaviorByBuff[buff] = nil
|
|
147
|
+
buff:destroy()
|
|
148
|
+
self.buff = nil
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
Buff.destroyEvent:addListener(function(buff)
|
|
152
|
+
local behavior = behaviorByBuff[buff]
|
|
153
|
+
if behavior ~= nil then
|
|
154
|
+
behaviorByBuff[buff] = nil
|
|
155
|
+
behavior.ability:interruptCast()
|
|
156
|
+
end
|
|
157
|
+
end)
|
|
126
158
|
return ____exports
|
|
@@ -41,6 +41,7 @@ function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitGainAbility(self, unit
|
|
|
41
41
|
____opt_0:destroy()
|
|
42
42
|
end
|
|
43
43
|
self.unitBehavior = __TS__New(self.unitBehaviorConstructor, unit)
|
|
44
|
+
self.unitBehavior.sourceAbilityBehavior = self
|
|
44
45
|
self:update()
|
|
45
46
|
end
|
|
46
47
|
function ApplyUnitBehaviorAbilityBehavior.prototype.onUnitLoseAbility(self)
|
|
@@ -4,23 +4,29 @@ import { Ability } from "../../internal/ability";
|
|
|
4
4
|
import { Unit } from "../../internal/unit";
|
|
5
5
|
import { AbilityDependentValue } from "../../object-field/ability";
|
|
6
6
|
import { Widget } from "../../../core/types/widget";
|
|
7
|
-
import {
|
|
7
|
+
import { DamageType, WeaponType } from "../../internal/unit+damage";
|
|
8
|
+
import { CombatClassifications } from "../../object-data/auxiliary/combat-classification";
|
|
9
|
+
import { AttackType } from "../../object-data/auxiliary/attack-type";
|
|
8
10
|
export type DamageAbilityBehaviorParameters = {
|
|
9
11
|
damagePerStrength?: AbilityDependentValue<number>;
|
|
10
12
|
damagePerAgility?: AbilityDependentValue<number>;
|
|
11
13
|
damagePerIntelligence?: AbilityDependentValue<number>;
|
|
12
|
-
attackType?: AttackType
|
|
14
|
+
attackType?: AbilityDependentValue<AttackType>;
|
|
13
15
|
damageType?: DamageType;
|
|
14
16
|
weaponType?: WeaponType;
|
|
17
|
+
metadata?: AbilityDependentValue<string | number | boolean>;
|
|
15
18
|
};
|
|
16
19
|
export type DamageAreaAbilityBehaviorParameters = DamageAbilityBehaviorParameters & {
|
|
17
20
|
maximumDamage?: AbilityDependentValue<number>;
|
|
21
|
+
areaOfEffect?: AbilityDependentValue<number>;
|
|
22
|
+
allowedTargetCombatClassifications?: AbilityDependentValue<CombatClassifications>;
|
|
18
23
|
};
|
|
19
|
-
declare abstract class DamageAbilityBehavior<T extends DamageAbilityBehaviorParameters = DamageAbilityBehaviorParameters> extends AbilityBehavior {
|
|
24
|
+
export declare abstract class DamageAbilityBehavior<T extends DamageAbilityBehaviorParameters = DamageAbilityBehaviorParameters> extends AbilityBehavior {
|
|
20
25
|
protected readonly damage: AbilityDependentValue<number>;
|
|
21
26
|
protected readonly parameters?: T | undefined;
|
|
22
27
|
protected constructor(ability: Ability, damage: AbilityDependentValue<number>, parameters?: T | undefined);
|
|
23
28
|
protected calculateDamage(caster: Unit): number;
|
|
29
|
+
protected damageTarget(caster: Unit, target: Widget, damage?: number): void;
|
|
24
30
|
}
|
|
25
31
|
export declare class DamageSelfAbilityBehavior extends DamageAbilityBehavior {
|
|
26
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,58 +35,53 @@ 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
|
-
parameters and parameters.attackType,
|
|
45
|
+
self:resolveCurrentAbilityDependentValue(parameters and parameters.attackType),
|
|
52
46
|
parameters and parameters.damageType,
|
|
53
|
-
parameters and parameters.weaponType
|
|
47
|
+
parameters and parameters.weaponType,
|
|
48
|
+
self:resolveCurrentAbilityDependentValue(parameters and parameters.metadata)
|
|
54
49
|
)
|
|
55
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
|
|
56
61
|
____exports.DamageTargetAbilityBehavior = __TS__Class()
|
|
57
62
|
local DamageTargetAbilityBehavior = ____exports.DamageTargetAbilityBehavior
|
|
58
63
|
DamageTargetAbilityBehavior.name = "DamageTargetAbilityBehavior"
|
|
59
|
-
__TS__ClassExtends(DamageTargetAbilityBehavior, DamageAbilityBehavior)
|
|
64
|
+
__TS__ClassExtends(DamageTargetAbilityBehavior, ____exports.DamageAbilityBehavior)
|
|
60
65
|
function DamageTargetAbilityBehavior.prototype.____constructor(self, ability, damage, parameters)
|
|
61
|
-
|
|
66
|
+
DamageTargetAbilityBehavior.____super.prototype.____constructor(self, ability, damage, parameters)
|
|
62
67
|
end
|
|
63
68
|
function DamageTargetAbilityBehavior.prototype.onWidgetTargetImpact(self, caster, target)
|
|
64
|
-
|
|
65
|
-
caster:damageTarget(
|
|
66
|
-
target,
|
|
67
|
-
self:calculateDamage(caster),
|
|
68
|
-
nil,
|
|
69
|
-
nil,
|
|
70
|
-
parameters and parameters.attackType,
|
|
71
|
-
parameters and parameters.damageType,
|
|
72
|
-
parameters and parameters.weaponType
|
|
73
|
-
)
|
|
69
|
+
self:damageTarget(caster, target)
|
|
74
70
|
end
|
|
75
71
|
local DamageAreaAbilityBehavior = __TS__Class()
|
|
76
72
|
DamageAreaAbilityBehavior.name = "DamageAreaAbilityBehavior"
|
|
77
|
-
__TS__ClassExtends(DamageAreaAbilityBehavior, DamageAbilityBehavior)
|
|
73
|
+
__TS__ClassExtends(DamageAreaAbilityBehavior, ____exports.DamageAbilityBehavior)
|
|
78
74
|
function DamageAreaAbilityBehavior.prototype.____constructor(self, ability, damage, parameters)
|
|
79
|
-
|
|
75
|
+
DamageAreaAbilityBehavior.____super.prototype.____constructor(self, ability, damage, parameters)
|
|
80
76
|
end
|
|
81
77
|
function DamageAreaAbilityBehavior.prototype.damageArea(self, caster, x, y)
|
|
82
78
|
local parameters = self.parameters
|
|
83
79
|
local targets = Unit.getAllowedTargetsInCollisionRange(
|
|
84
80
|
caster,
|
|
85
|
-
self:resolveCurrentAbilityDependentValue(ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD),
|
|
81
|
+
self:resolveCurrentAbilityDependentValue(parameters and parameters.allowedTargetCombatClassifications or ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD),
|
|
86
82
|
x,
|
|
87
83
|
y,
|
|
88
|
-
self:resolveCurrentAbilityDependentValue(AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD)
|
|
84
|
+
self:resolveCurrentAbilityDependentValue(parameters and parameters.areaOfEffect or AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD)
|
|
89
85
|
)
|
|
90
86
|
local damage = self:calculateDamage(caster)
|
|
91
87
|
local maximumDamage = self:resolveCurrentAbilityDependentValue(parameters and parameters.maximumDamage or 0)
|
|
@@ -93,15 +89,7 @@ function DamageAreaAbilityBehavior.prototype.damageArea(self, caster, x, y)
|
|
|
93
89
|
damage = maximumDamage / #targets
|
|
94
90
|
end
|
|
95
91
|
for ____, target in ipairs(targets) do
|
|
96
|
-
|
|
97
|
-
target,
|
|
98
|
-
damage,
|
|
99
|
-
nil,
|
|
100
|
-
nil,
|
|
101
|
-
parameters and parameters.attackType,
|
|
102
|
-
parameters and parameters.damageType,
|
|
103
|
-
parameters and parameters.weaponType
|
|
104
|
-
)
|
|
92
|
+
self:damageTarget(caster, target, damage)
|
|
105
93
|
end
|
|
106
94
|
end
|
|
107
95
|
____exports.DamageSelfAreaAbilityBehavior = __TS__Class()
|
|
@@ -1,30 +1,42 @@
|
|
|
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
|
+
local ____math = require("math")
|
|
14
|
+
local max = ____math.max
|
|
15
|
+
local MINIMUM_POSITIVE_NORMALIZED_FLOAT = ____math.MINIMUM_POSITIVE_NORMALIZED_FLOAT
|
|
16
|
+
local ____sound = require("core.types.sound")
|
|
17
|
+
local Sound3D = ____sound.Sound3D
|
|
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
|
|
10
23
|
____exports.EmulateImpactAbilityBehavior = __TS__Class()
|
|
11
24
|
local EmulateImpactAbilityBehavior = ____exports.EmulateImpactAbilityBehavior
|
|
12
25
|
EmulateImpactAbilityBehavior.name = "EmulateImpactAbilityBehavior"
|
|
13
26
|
__TS__ClassExtends(EmulateImpactAbilityBehavior, AbilityBehavior)
|
|
14
27
|
function EmulateImpactAbilityBehavior.prototype.emulateImpact(self, caster)
|
|
15
|
-
local abilityTypeId = self.ability.typeId
|
|
16
28
|
local manaCost = self:resolveCurrentAbilityDependentValue(MANA_COST_ABILITY_INTEGER_LEVEL_FIELD)
|
|
17
29
|
local cooldown = self:resolveCurrentAbilityDependentValue(COOLDOWN_ABILITY_FLOAT_LEVEL_FIELD)
|
|
18
|
-
if
|
|
30
|
+
if self.ability.cooldownRemaining ~= 0 or caster.mana < manaCost or __TS__InstanceOf(self.ability, UnitAbility) and self.ability.isDisabled then
|
|
19
31
|
return
|
|
20
32
|
end
|
|
21
33
|
caster.mana = caster.mana - manaCost
|
|
22
|
-
|
|
23
|
-
caster:interruptCast(self.ability.typeId)
|
|
24
|
-
else
|
|
25
|
-
caster:startAbilityCooldown(self.ability.typeId, cooldown)
|
|
26
|
-
end
|
|
34
|
+
self.ability.cooldownRemaining = max(cooldown, MINIMUM_POSITIVE_NORMALIZED_FLOAT)
|
|
27
35
|
self:flashCasterEffect(caster)
|
|
28
|
-
|
|
36
|
+
local soundPresetId = self.ability:getField(ABILITY_SF_EFFECT_SOUND)
|
|
37
|
+
if soundPresetId ~= "" then
|
|
38
|
+
Sound3D:playFromLabel(soundPresetId, SoundSettings.Ability, caster)
|
|
39
|
+
end
|
|
40
|
+
Event.invoke(Unit.abilityImpactEvent, caster, self.ability)
|
|
29
41
|
end
|
|
30
42
|
return ____exports
|
|
@@ -2,6 +2,8 @@ local ____lualib = require("lualib_bundle")
|
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
4
|
local ____exports = {}
|
|
5
|
+
local ____unit = require("engine.internal.unit")
|
|
6
|
+
local Unit = ____unit.Unit
|
|
5
7
|
local ____emulate_2Dimpact = require("engine.behaviour.ability.emulate-impact")
|
|
6
8
|
local EmulateImpactAbilityBehavior = ____emulate_2Dimpact.EmulateImpactAbilityBehavior
|
|
7
9
|
____exports.OnCommandImpactAbilityBehavior = __TS__Class()
|
|
@@ -15,4 +17,9 @@ end
|
|
|
15
17
|
function OnCommandImpactAbilityBehavior.prototype.onCommand(self, caster)
|
|
16
18
|
self:emulateImpact(caster)
|
|
17
19
|
end
|
|
20
|
+
Unit.itemUseOrderEvent:addListener(function(unit, item)
|
|
21
|
+
for ____, ability in ipairs(item.abilities) do
|
|
22
|
+
____exports.OnCommandImpactAbilityBehavior:forAll(ability, "onCommand", unit)
|
|
23
|
+
end
|
|
24
|
+
end)
|
|
18
25
|
return ____exports
|
|
@@ -7,7 +7,8 @@ import { Widget } from "../../core/types/widget";
|
|
|
7
7
|
import { Item } from "../internal/item";
|
|
8
8
|
import { Destructable } from "../../core/types/destructable";
|
|
9
9
|
import { EffectParameters } from "../../core/types/effect";
|
|
10
|
-
import { AbilityDependentValue } from "../object-field/ability";
|
|
10
|
+
import { AbilityDependentValue, ReadonlySubscribableAbilityDependentValue, SubscribableAbilityDependentValue } from "../object-field/ability";
|
|
11
|
+
import { Destructor } from "../../destroyable";
|
|
11
12
|
export type AbilityBehaviorConstructor<Args extends any[]> = new (ability: Ability, ...args: Args) => AbilityBehavior;
|
|
12
13
|
export type AbilityBehaviorParameters = {
|
|
13
14
|
isExclusiveOnImpactHandler?: boolean;
|
|
@@ -17,17 +18,25 @@ export declare abstract class AbilityBehavior<Parameters extends {
|
|
|
17
18
|
missileParameters?: any[];
|
|
18
19
|
} = {}> extends Behavior<Ability, NonNullable<Parameters["periodicActionParameters"]>> {
|
|
19
20
|
constructor(ability: Ability, parameters?: AbilityBehaviorParameters);
|
|
21
|
+
protected onDestroy(): Destructor;
|
|
22
|
+
protected subscribe<T extends boolean | number | string>(value: SubscribableAbilityDependentValue<T>): void;
|
|
20
23
|
protected registerCommandEvent(orderTypeStringId?: string): void;
|
|
21
24
|
get ability(): Ability;
|
|
25
|
+
get unit(): Unit | undefined;
|
|
22
26
|
protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value: AbilityDependentValue<T>): T;
|
|
23
27
|
protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value?: AbilityDependentValue<T>): T | undefined;
|
|
24
|
-
protected flashCasterEffect(widget: Widget): void;
|
|
28
|
+
protected flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
29
|
+
protected flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
25
30
|
protected flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
26
31
|
protected flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
27
|
-
protected flashSpecialEffect(...args: [
|
|
32
|
+
protected flashSpecialEffect(...args: [
|
|
33
|
+
...pointOrWidget: [x: number, y: number] | [widget: Widget],
|
|
34
|
+
...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]
|
|
35
|
+
]): void;
|
|
28
36
|
private static MissileLaunchConfig;
|
|
29
37
|
private get missileLaunchConfig();
|
|
30
38
|
protected onCreate(): void;
|
|
39
|
+
onValueChange(_value: ReadonlySubscribableAbilityDependentValue<string | number | boolean>): void;
|
|
31
40
|
onMissileArrival(...parameters: NonNullable<Parameters["missileParameters"]>): void;
|
|
32
41
|
onUnitGainAbility(_unit: Unit): void;
|
|
33
42
|
onUnitLoseAbility(_unit: Unit): void;
|
|
@@ -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__InstanceOf = ____lualib.__TS__InstanceOf
|
|
4
5
|
local __TS__New = ____lualib.__TS__New
|
|
5
6
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
6
7
|
local ____exports = {}
|
|
@@ -23,7 +24,11 @@ local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL
|
|
|
23
24
|
local MISSILE_SPEED_ABILITY_INTEGER_FIELD = ____ability.MISSILE_SPEED_ABILITY_INTEGER_FIELD
|
|
24
25
|
local SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD = ____ability.SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD
|
|
25
26
|
local SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
27
|
+
local TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
|
|
28
|
+
local TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
26
29
|
local ____ability = require("engine.object-field.ability")
|
|
30
|
+
local AbilityField = ____ability.AbilityField
|
|
31
|
+
local AbilityLevelField = ____ability.AbilityLevelField
|
|
27
32
|
local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
|
|
28
33
|
local ____timer = require("core.types.timer")
|
|
29
34
|
local Timer = ____timer.Timer
|
|
@@ -41,6 +46,7 @@ createUnitEventListener = function(key)
|
|
|
41
46
|
end
|
|
42
47
|
end
|
|
43
48
|
local registeredCommandEventIds = {}
|
|
49
|
+
local subscribedValuesByAbilityBehavior = {}
|
|
44
50
|
local ____class_2 = __TS__Class()
|
|
45
51
|
____class_2.name = ""
|
|
46
52
|
function ____class_2.prototype.____constructor(self, abilityBehavior)
|
|
@@ -81,6 +87,20 @@ function AbilityBehavior.prototype.____constructor(self, ability, parameters)
|
|
|
81
87
|
end
|
|
82
88
|
self:onCreate()
|
|
83
89
|
end
|
|
90
|
+
function AbilityBehavior.prototype.onDestroy(self)
|
|
91
|
+
subscribedValuesByAbilityBehavior[self] = nil
|
|
92
|
+
return Behavior.prototype.onDestroy(self)
|
|
93
|
+
end
|
|
94
|
+
function AbilityBehavior.prototype.subscribe(self, value)
|
|
95
|
+
if __TS__InstanceOf(value, AbilityField) or __TS__InstanceOf(value, AbilityLevelField) then
|
|
96
|
+
local subscribedValues = subscribedValuesByAbilityBehavior[self]
|
|
97
|
+
if subscribedValues == nil then
|
|
98
|
+
subscribedValues = {}
|
|
99
|
+
subscribedValuesByAbilityBehavior[self] = subscribedValues
|
|
100
|
+
end
|
|
101
|
+
subscribedValues[value] = true
|
|
102
|
+
end
|
|
103
|
+
end
|
|
84
104
|
function AbilityBehavior.prototype.registerCommandEvent(self, orderTypeStringId)
|
|
85
105
|
if orderTypeStringId == nil then
|
|
86
106
|
orderTypeStringId = self.ability.orderTypeStringId
|
|
@@ -94,12 +114,22 @@ end
|
|
|
94
114
|
function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
|
|
95
115
|
return resolveCurrentAbilityDependentValue(self.ability, value)
|
|
96
116
|
end
|
|
97
|
-
function AbilityBehavior.prototype.flashCasterEffect(self, widget)
|
|
117
|
+
function AbilityBehavior.prototype.flashCasterEffect(self, widget, ...)
|
|
98
118
|
local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
|
|
99
119
|
Effect:flash(
|
|
100
120
|
CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
101
121
|
widget,
|
|
102
|
-
attachmentPoint ~= "" and attachmentPoint or "origin"
|
|
122
|
+
attachmentPoint ~= "" and attachmentPoint or "origin",
|
|
123
|
+
...
|
|
124
|
+
)
|
|
125
|
+
end
|
|
126
|
+
function AbilityBehavior.prototype.flashTargetEffect(self, widget, ...)
|
|
127
|
+
local attachmentPoint = TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
|
|
128
|
+
Effect:flash(
|
|
129
|
+
TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
130
|
+
widget,
|
|
131
|
+
attachmentPoint ~= "" and attachmentPoint or "origin",
|
|
132
|
+
...
|
|
103
133
|
)
|
|
104
134
|
end
|
|
105
135
|
function AbilityBehavior.prototype.flashAreaEffect(self, x, y, ...)
|
|
@@ -118,25 +148,30 @@ function AbilityBehavior.prototype.flashEffect(self, x, y, ...)
|
|
|
118
148
|
...
|
|
119
149
|
)
|
|
120
150
|
end
|
|
121
|
-
function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget,
|
|
151
|
+
function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParametersOrDuration, durationOrParameters, parameters)
|
|
122
152
|
if type(xOrWidget) == "number" then
|
|
123
153
|
Effect:flash(
|
|
124
154
|
SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
125
155
|
xOrWidget,
|
|
126
|
-
|
|
127
|
-
|
|
156
|
+
yOrParametersOrDuration,
|
|
157
|
+
durationOrParameters,
|
|
158
|
+
parameters
|
|
128
159
|
)
|
|
129
160
|
else
|
|
161
|
+
local attachmentPoint = SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
|
|
130
162
|
Effect:flash(
|
|
131
163
|
SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
132
164
|
xOrWidget,
|
|
133
|
-
|
|
134
|
-
|
|
165
|
+
attachmentPoint ~= "" and attachmentPoint or "origin",
|
|
166
|
+
yOrParametersOrDuration,
|
|
167
|
+
durationOrParameters
|
|
135
168
|
)
|
|
136
169
|
end
|
|
137
170
|
end
|
|
138
171
|
function AbilityBehavior.prototype.onCreate(self)
|
|
139
172
|
end
|
|
173
|
+
function AbilityBehavior.prototype.onValueChange(self, _value)
|
|
174
|
+
end
|
|
140
175
|
function AbilityBehavior.prototype.onMissileArrival(self, ...)
|
|
141
176
|
end
|
|
142
177
|
function AbilityBehavior.prototype.onUnitGainAbility(self, _unit)
|
|
@@ -204,6 +239,18 @@ __TS__SetDescriptor(
|
|
|
204
239
|
end},
|
|
205
240
|
true
|
|
206
241
|
)
|
|
242
|
+
__TS__SetDescriptor(
|
|
243
|
+
AbilityBehavior.prototype,
|
|
244
|
+
"unit",
|
|
245
|
+
{get = function(self)
|
|
246
|
+
local owner = self.object.owner
|
|
247
|
+
if __TS__InstanceOf(owner, Unit) then
|
|
248
|
+
return owner
|
|
249
|
+
end
|
|
250
|
+
return owner.owner
|
|
251
|
+
end},
|
|
252
|
+
true
|
|
253
|
+
)
|
|
207
254
|
AbilityBehavior.MissileLaunchConfig = ____class_2
|
|
208
255
|
__TS__SetDescriptor(
|
|
209
256
|
AbilityBehavior.prototype,
|
|
@@ -227,7 +274,7 @@ __TS__SetDescriptor(
|
|
|
227
274
|
Unit.abilityDestructibleTargetChannelingStartEvent:addListener(createUnitEventListener("onDestructibleTargetChannelingStart"))
|
|
228
275
|
Unit.abilityPointTargetChannelingStartEvent:addListener(createUnitEventListener("onPointTargetChannelingStart"))
|
|
229
276
|
Unit.abilityNoTargetChannelingStartEvent:addListener(createUnitEventListener("onNoTargetChannelingStart"))
|
|
230
|
-
Unit.
|
|
277
|
+
Unit.abilityImpactEvent:addListener(createUnitEventListener("onImpact"))
|
|
231
278
|
Unit.abilityWidgetTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onWidgetTargetImpact"))
|
|
232
279
|
Unit.abilityUnitTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onUnitTargetImpact"))
|
|
233
280
|
Unit.abilityItemTargetChannelingStartEvent:addListener(createZeroTimerUnitEventListener("onItemTargetImpact"))
|
|
@@ -237,6 +284,18 @@ __TS__SetDescriptor(
|
|
|
237
284
|
Unit.abilityChannelingFinishEvent:addListener(createUnitEventListener("onChannelingFinish"))
|
|
238
285
|
Unit.abilityStopEvent:addListener(createUnitEventListener("onStop"))
|
|
239
286
|
end)(AbilityBehavior)
|
|
287
|
+
local function checkBehaviorOnValueChange(behavior, field)
|
|
288
|
+
local subscribedValues = subscribedValuesByAbilityBehavior[behavior]
|
|
289
|
+
if subscribedValues ~= nil and subscribedValues[field] ~= nil then
|
|
290
|
+
behavior:onValueChange(field)
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
AbilityField.valueChangeEvent:addListener(function(ability, field)
|
|
294
|
+
____exports.AbilityBehavior:forAll(ability, checkBehaviorOnValueChange, field)
|
|
295
|
+
end)
|
|
296
|
+
AbilityLevelField.valueChangeEvent:addListener(function(ability, field)
|
|
297
|
+
____exports.AbilityBehavior:forAll(ability, checkBehaviorOnValueChange, field)
|
|
298
|
+
end)
|
|
240
299
|
Ability.onCreate:addListener(function(ability)
|
|
241
300
|
local createBehaviorFunctions = createBehaviorFunctionsByAbilityTypeId[ability.typeId]
|
|
242
301
|
if createBehaviorFunctions ~= nil then
|
|
@@ -5,22 +5,46 @@ import { DamageEvent, DamagingEvent, Unit } from "../internal/unit";
|
|
|
5
5
|
import "../internal/unit+ability";
|
|
6
6
|
import "../internal/unit-missile-launch";
|
|
7
7
|
import { Item } from "../internal/item";
|
|
8
|
+
import type { AbilityBehavior } from "./ability";
|
|
9
|
+
import { Event } from "../../event";
|
|
10
|
+
import { Destructor } from "../../destroyable";
|
|
11
|
+
import type { Widget } from "../../core/types/widget";
|
|
12
|
+
import { Destructable } from "../../core/types/destructable";
|
|
8
13
|
export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
|
|
9
14
|
export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
|
|
10
15
|
constructor(unit: Unit);
|
|
16
|
+
protected onDestroy(): Destructor;
|
|
17
|
+
readonly sourceAbilityBehavior?: AbilityBehavior;
|
|
11
18
|
get unit(): Unit;
|
|
19
|
+
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;
|
|
20
|
+
onImmediateOrder(orderId: number): void;
|
|
21
|
+
onTargetOrder(orderId: number, target: Widget): void;
|
|
22
|
+
onPointOrder(orderId: number, x: number, y: number): void;
|
|
12
23
|
onAutoAttackStart(target: Unit): void;
|
|
13
24
|
onAutoAttackFinish(target: Unit): void;
|
|
25
|
+
onTargetingAutoAttackStart(source: Unit): void;
|
|
26
|
+
onTargetingAutoAttackFinish(source: Unit): void;
|
|
14
27
|
onDamageDealing(target: Unit, event: DamagingEvent): void;
|
|
15
28
|
onDamageDealt(target: Unit, event: DamageEvent): void;
|
|
16
29
|
onDamageReceiving(source: Unit | undefined, event: DamagingEvent): void;
|
|
17
30
|
onDamageReceived(source: Unit | undefined, event: DamageEvent): void;
|
|
18
31
|
onAbilityGained(ability: Ability): void;
|
|
19
32
|
onAbilityLost(ability: Ability): void;
|
|
33
|
+
onAbilityChannelingStart(ability: Ability): void;
|
|
34
|
+
onAbilityImpact(ability: Ability): void;
|
|
35
|
+
onAbilityWidgetTargetImpact(ability: Ability, target: Widget): void;
|
|
36
|
+
onAbilityUnitTargetImpact(ability: Ability, target: Unit): void;
|
|
37
|
+
onAbilityItemTargetImpact(ability: Ability, target: Item): void;
|
|
38
|
+
onAbilityDestructibleTargetImpact(ability: Ability, target: Destructable): void;
|
|
39
|
+
onAbilityPointTargetImpact(ability: Ability, x: number, y: number): void;
|
|
40
|
+
onAbilityNoTargetImpact(ability: Ability): void;
|
|
41
|
+
onAbilityChannelingFinish(ability: Ability): void;
|
|
42
|
+
onAbilityStop(ability: Ability): void;
|
|
20
43
|
onItemDropped(item: Item): void;
|
|
21
44
|
onItemPickedUp(item: Item): void;
|
|
22
45
|
onItemUsed(item: Item): void;
|
|
23
46
|
onItemStacked(item: Item): void;
|
|
47
|
+
onItemChargesChanged(item: Item): void;
|
|
24
48
|
onKill(target: Unit): void;
|
|
25
49
|
onDeath(source: Unit | undefined): void;
|
|
26
50
|
}
|