warscript 0.0.1-dev.b34a02b → 0.0.1-dev.b37c533
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/types/effect.d.ts +13 -3
- package/core/types/effect.lua +116 -17
- package/core/types/frame.d.ts +3 -0
- package/core/types/frame.lua +59 -0
- package/core/util.d.ts +1 -1
- package/core/util.lua +6 -0
- package/engine/behaviour/ability/always-enabled.d.ts +7 -0
- package/engine/behaviour/ability/always-enabled.lua +31 -0
- package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
- package/engine/behaviour/ability/emulate-impact.lua +28 -0
- package/engine/behaviour/ability/instant-impact.d.ts +2 -2
- package/engine/behaviour/ability/instant-impact.lua +4 -19
- package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
- package/engine/behaviour/ability/on-command-impact.lua +25 -0
- package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
- package/engine/behaviour/ability/remove-buffs.lua +28 -0
- package/engine/behaviour/ability.d.ts +14 -3
- package/engine/behaviour/ability.lua +79 -33
- package/engine/buff.d.ts +6 -1
- package/engine/buff.lua +29 -18
- package/engine/internal/ability.d.ts +15 -2
- package/engine/internal/ability.lua +86 -4
- package/engine/internal/item/ability.lua +106 -0
- package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
- package/engine/internal/misc/ability-disable-counter.lua +13 -0
- package/engine/internal/unit/ability.d.ts +10 -1
- package/engine/internal/unit/ability.lua +36 -14
- 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.d.ts +1 -0
- package/engine/internal/unit/item.lua +56 -2
- package/engine/internal/unit/main-selected.d.ts +13 -0
- package/engine/internal/unit/main-selected.lua +51 -0
- package/engine/internal/unit.d.ts +12 -2
- package/engine/internal/unit.lua +80 -53
- package/engine/internal/utility.lua +12 -0
- package/engine/local-client.lua +2 -1
- package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
- package/engine/object-data/entry/ability-type.lua +8 -12
- package/engine/object-data/entry/item-type.d.ts +2 -0
- package/engine/object-data/entry/item-type.lua +13 -0
- package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
- package/engine/object-field/ability.d.ts +9 -3
- package/engine/object-field/ability.lua +3 -0
- package/engine/object-field.d.ts +2 -2
- package/engine/object-field.lua +4 -0
- package/engine/standard/fields/ability.d.ts +2 -0
- package/engine/standard/fields/ability.lua +2 -0
- package/engine/unit.d.ts +1 -0
- package/engine/unit.lua +1 -0
- package/package.json +1 -1
- package/utility/arrays.d.ts +8 -1
- package/utility/arrays.lua +34 -3
- package/utility/lazy.d.ts +2 -0
- package/utility/lazy.lua +14 -0
|
@@ -1,9 +1,11 @@
|
|
|
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 = {}
|
|
8
|
+
local createUnitEventListener
|
|
7
9
|
local ____behavior = require("engine.behavior")
|
|
8
10
|
local Behavior = ____behavior.Behavior
|
|
9
11
|
local ____unit = require("engine.unit")
|
|
@@ -14,6 +16,8 @@ local ____effect = require("core.types.effect")
|
|
|
14
16
|
local Effect = ____effect.Effect
|
|
15
17
|
local ____ability = require("engine.standard.fields.ability")
|
|
16
18
|
local AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
19
|
+
local CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = ____ability.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD
|
|
20
|
+
local CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
17
21
|
local EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
18
22
|
local MISSILE_ARC_ABILITY_FLOAT_FIELD = ____ability.MISSILE_ARC_ABILITY_FLOAT_FIELD
|
|
19
23
|
local MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
@@ -21,24 +25,33 @@ local MISSILE_SPEED_ABILITY_INTEGER_FIELD = ____ability.MISSILE_SPEED_ABILITY_IN
|
|
|
21
25
|
local SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD = ____ability.SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD
|
|
22
26
|
local SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = ____ability.SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD
|
|
23
27
|
local ____ability = require("engine.object-field.ability")
|
|
28
|
+
local AbilityField = ____ability.AbilityField
|
|
29
|
+
local AbilityLevelField = ____ability.AbilityLevelField
|
|
24
30
|
local resolveCurrentAbilityDependentValue = ____ability.resolveCurrentAbilityDependentValue
|
|
25
31
|
local ____timer = require("core.types.timer")
|
|
26
32
|
local Timer = ____timer.Timer
|
|
27
|
-
local ____missile = require("core.types.missile")
|
|
28
|
-
local Missile = ____missile.Missile
|
|
29
33
|
local createBehaviorFunctionsByAbilityTypeId = {}
|
|
30
|
-
local
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
local exclusiveOnImpactHandlerAbilityBehaviorByAbility = setmetatable({}, {__mode = "k"})
|
|
35
|
+
local function createZeroTimerUnitEventListener(key)
|
|
36
|
+
local unitEventListener = createUnitEventListener(key)
|
|
37
|
+
return function(unit, ability, ...)
|
|
38
|
+
Timer:run(unitEventListener, unit, ability, ...)
|
|
33
39
|
end
|
|
34
40
|
end
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
createUnitEventListener = function(key)
|
|
42
|
+
return function(unit, ability, ...)
|
|
43
|
+
____exports.AbilityBehavior:forAll(ability, key, unit, ...)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
local registeredCommandEventIds = {}
|
|
47
|
+
local subscribedValuesByAbilityBehavior = {}
|
|
48
|
+
local ____class_2 = __TS__Class()
|
|
49
|
+
____class_2.name = ""
|
|
50
|
+
function ____class_2.prototype.____constructor(self, abilityBehavior)
|
|
38
51
|
self.abilityBehavior = abilityBehavior
|
|
39
52
|
end
|
|
40
53
|
__TS__SetDescriptor(
|
|
41
|
-
|
|
54
|
+
____class_2.prototype,
|
|
42
55
|
"art",
|
|
43
56
|
{get = function(self)
|
|
44
57
|
return MISSILE_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.abilityBehavior.ability, 0)
|
|
@@ -46,7 +59,7 @@ __TS__SetDescriptor(
|
|
|
46
59
|
true
|
|
47
60
|
)
|
|
48
61
|
__TS__SetDescriptor(
|
|
49
|
-
|
|
62
|
+
____class_2.prototype,
|
|
50
63
|
"arc",
|
|
51
64
|
{get = function(self)
|
|
52
65
|
return MISSILE_ARC_ABILITY_FLOAT_FIELD:getValue(self.abilityBehavior.ability)
|
|
@@ -54,7 +67,7 @@ __TS__SetDescriptor(
|
|
|
54
67
|
true
|
|
55
68
|
)
|
|
56
69
|
__TS__SetDescriptor(
|
|
57
|
-
|
|
70
|
+
____class_2.prototype,
|
|
58
71
|
"speed",
|
|
59
72
|
{get = function(self)
|
|
60
73
|
return MISSILE_SPEED_ABILITY_INTEGER_FIELD:getValue(self.abilityBehavior.ability)
|
|
@@ -65,12 +78,48 @@ ____exports.AbilityBehavior = __TS__Class()
|
|
|
65
78
|
local AbilityBehavior = ____exports.AbilityBehavior
|
|
66
79
|
AbilityBehavior.name = "AbilityBehavior"
|
|
67
80
|
__TS__ClassExtends(AbilityBehavior, Behavior)
|
|
68
|
-
function AbilityBehavior.prototype.____constructor(self, ability)
|
|
81
|
+
function AbilityBehavior.prototype.____constructor(self, ability, parameters)
|
|
69
82
|
Behavior.prototype.____constructor(self, ability)
|
|
83
|
+
if parameters and parameters.isExclusiveOnImpactHandler then
|
|
84
|
+
exclusiveOnImpactHandlerAbilityBehaviorByAbility[ability] = self
|
|
85
|
+
end
|
|
86
|
+
self:onCreate()
|
|
87
|
+
end
|
|
88
|
+
function AbilityBehavior.prototype.onDestroy(self)
|
|
89
|
+
subscribedValuesByAbilityBehavior[self] = nil
|
|
90
|
+
return Behavior.prototype.onDestroy(self)
|
|
91
|
+
end
|
|
92
|
+
function AbilityBehavior.prototype.subscribe(self, value)
|
|
93
|
+
if __TS__InstanceOf(value, AbilityField) or __TS__InstanceOf(value, AbilityLevelField) then
|
|
94
|
+
local subscribedValues = subscribedValuesByAbilityBehavior[self]
|
|
95
|
+
if subscribedValues == nil then
|
|
96
|
+
subscribedValues = {}
|
|
97
|
+
subscribedValuesByAbilityBehavior[self] = subscribedValues
|
|
98
|
+
end
|
|
99
|
+
subscribedValues[value] = true
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
function AbilityBehavior.prototype.registerCommandEvent(self, orderTypeStringId)
|
|
103
|
+
if orderTypeStringId == nil then
|
|
104
|
+
orderTypeStringId = self.ability.orderTypeStringId
|
|
105
|
+
end
|
|
106
|
+
local commandEventId = (tostring(self.ability.typeId) .. "#") .. orderTypeStringId
|
|
107
|
+
if not (registeredCommandEventIds[commandEventId] ~= nil) then
|
|
108
|
+
registeredCommandEventIds[commandEventId] = true
|
|
109
|
+
Unit.abilityCommandEvent[self.ability.typeId][orderTypeStringId]:addListener(createUnitEventListener("onCommand"))
|
|
110
|
+
end
|
|
70
111
|
end
|
|
71
112
|
function AbilityBehavior.prototype.resolveCurrentAbilityDependentValue(self, value)
|
|
72
113
|
return resolveCurrentAbilityDependentValue(self.ability, value)
|
|
73
114
|
end
|
|
115
|
+
function AbilityBehavior.prototype.flashCasterEffect(self, widget)
|
|
116
|
+
local attachmentPoint = CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
|
|
117
|
+
Effect:flash(
|
|
118
|
+
CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
119
|
+
widget,
|
|
120
|
+
attachmentPoint ~= "" and attachmentPoint or "origin"
|
|
121
|
+
)
|
|
122
|
+
end
|
|
74
123
|
function AbilityBehavior.prototype.flashAreaEffect(self, x, y, ...)
|
|
75
124
|
Effect:flash(
|
|
76
125
|
AREA_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
@@ -104,15 +153,9 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrDurati
|
|
|
104
153
|
)
|
|
105
154
|
end
|
|
106
155
|
end
|
|
107
|
-
function AbilityBehavior.prototype.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
source,
|
|
111
|
-
target,
|
|
112
|
-
invokeOnMissileArrival,
|
|
113
|
-
self,
|
|
114
|
-
...
|
|
115
|
-
)
|
|
156
|
+
function AbilityBehavior.prototype.onCreate(self)
|
|
157
|
+
end
|
|
158
|
+
function AbilityBehavior.prototype.onValueChange(self, _value)
|
|
116
159
|
end
|
|
117
160
|
function AbilityBehavior.prototype.onMissileArrival(self, ...)
|
|
118
161
|
end
|
|
@@ -120,6 +163,8 @@ function AbilityBehavior.prototype.onUnitGainAbility(self, _unit)
|
|
|
120
163
|
end
|
|
121
164
|
function AbilityBehavior.prototype.onUnitLoseAbility(self, _unit)
|
|
122
165
|
end
|
|
166
|
+
function AbilityBehavior.prototype.onCommand(self, caster, orderTypeStringId)
|
|
167
|
+
end
|
|
123
168
|
function AbilityBehavior.prototype.onCastingStart(self, caster)
|
|
124
169
|
end
|
|
125
170
|
function AbilityBehavior.prototype.onCastingFinish(self, caster)
|
|
@@ -179,7 +224,7 @@ __TS__SetDescriptor(
|
|
|
179
224
|
end},
|
|
180
225
|
true
|
|
181
226
|
)
|
|
182
|
-
AbilityBehavior.MissileLaunchConfig =
|
|
227
|
+
AbilityBehavior.MissileLaunchConfig = ____class_2
|
|
183
228
|
__TS__SetDescriptor(
|
|
184
229
|
AbilityBehavior.prototype,
|
|
185
230
|
"missileLaunchConfig",
|
|
@@ -191,17 +236,6 @@ __TS__SetDescriptor(
|
|
|
191
236
|
true
|
|
192
237
|
);
|
|
193
238
|
(function(self)
|
|
194
|
-
local function createUnitEventListener(key)
|
|
195
|
-
return function(unit, ability, ...)
|
|
196
|
-
____exports.AbilityBehavior:forAll(ability, key, unit, ...)
|
|
197
|
-
end
|
|
198
|
-
end
|
|
199
|
-
local function createZeroTimerUnitEventListener(key)
|
|
200
|
-
local unitEventListener = createUnitEventListener(key)
|
|
201
|
-
return function(unit, ability, ...)
|
|
202
|
-
Timer:run(unitEventListener, unit, ability, ...)
|
|
203
|
-
end
|
|
204
|
-
end
|
|
205
239
|
Unit.abilityGainedEvent:addListener(createUnitEventListener("onUnitGainAbility"))
|
|
206
240
|
Unit.abilityLostEvent:addListener(createUnitEventListener("onUnitLoseAbility"))
|
|
207
241
|
Unit.abilityCastingStartEvent:addListener(createUnitEventListener("onCastingStart"))
|
|
@@ -223,6 +257,18 @@ __TS__SetDescriptor(
|
|
|
223
257
|
Unit.abilityChannelingFinishEvent:addListener(createUnitEventListener("onChannelingFinish"))
|
|
224
258
|
Unit.abilityStopEvent:addListener(createUnitEventListener("onStop"))
|
|
225
259
|
end)(AbilityBehavior)
|
|
260
|
+
local function checkBehaviorOnValueChange(behavior, field)
|
|
261
|
+
local subscribedValues = subscribedValuesByAbilityBehavior[behavior]
|
|
262
|
+
if subscribedValues ~= nil and subscribedValues[field] ~= nil then
|
|
263
|
+
behavior:onValueChange(field)
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
AbilityField.valueChangeEvent:addListener(function(ability, field)
|
|
267
|
+
____exports.AbilityBehavior:forAll(ability, checkBehaviorOnValueChange, field)
|
|
268
|
+
end)
|
|
269
|
+
AbilityLevelField.valueChangeEvent:addListener(function(ability, field)
|
|
270
|
+
____exports.AbilityBehavior:forAll(ability, checkBehaviorOnValueChange, field)
|
|
271
|
+
end)
|
|
226
272
|
Ability.onCreate:addListener(function(ability)
|
|
227
273
|
local createBehaviorFunctions = createBehaviorFunctionsByAbilityTypeId[ability.typeId]
|
|
228
274
|
if createBehaviorFunctions ~= nil then
|
package/engine/buff.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { BuffResistanceType } from "./object-data/auxiliary/buff-resistance-type
|
|
|
8
8
|
import { AbilityBooleanField, AbilityBooleanLevelField, AbilityCombatClassificationsLevelField, AbilityDependentValue, AbilityEnumLevelField, AbilityIntegerField, AbilityIntegerLevelField, AbilityNumberField, AbilityNumberLevelField } from "./object-field/ability";
|
|
9
9
|
import { CombatClassifications } from "./object-data/auxiliary/combat-classification";
|
|
10
10
|
import { IsExactlyAny, Prohibit, ReadonlyNonEmptyArray } from "../utility/types";
|
|
11
|
+
import { EffectParameters } from "../core/types/effect";
|
|
11
12
|
import { UnitBehavior } from "./behaviour/unit";
|
|
12
13
|
import type { Widget } from "../core/types/widget";
|
|
13
14
|
import { Destructor } from "../destroyable";
|
|
@@ -250,8 +251,12 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
|
|
|
250
251
|
get duration(): number;
|
|
251
252
|
get remainingDuration(): number;
|
|
252
253
|
set remainingDuration(remainingDuration: number);
|
|
253
|
-
flashEffect(...parameters: [
|
|
254
|
+
flashEffect(...parameters: [
|
|
255
|
+
...widgetOrXY: [] | [Widget] | [x: number, x: number],
|
|
256
|
+
...parametersOrDuration: [] | [EffectParameters] | [number]
|
|
257
|
+
]): void;
|
|
254
258
|
flashSpecialEffect(...parameters: [...widget: [] | [Widget], ...duration: [] | [number]]): void;
|
|
259
|
+
protected onCreate(): void;
|
|
255
260
|
protected onDestroy(): Destructor;
|
|
256
261
|
static apply<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, ...args: Args): T | undefined;
|
|
257
262
|
static getByTypeId<T extends Buff<any>, Args extends any[]>(this: BuffConstructor<T, Args>, unit: Unit, typeId: ApplicableBuffTypeId): T | undefined;
|
package/engine/buff.lua
CHANGED
|
@@ -46,6 +46,10 @@ local ____arrays = require("utility.arrays")
|
|
|
46
46
|
local forEach = ____arrays.forEach
|
|
47
47
|
local ____ability_2Dduration = require("engine.internal.mechanics.ability-duration")
|
|
48
48
|
local getAbilityDuration = ____ability_2Dduration.getAbilityDuration
|
|
49
|
+
local ____item = require("engine.internal.item")
|
|
50
|
+
local Item = ____item.Item
|
|
51
|
+
local ____destructable = require("core.types.destructable")
|
|
52
|
+
local Destructable = ____destructable.Destructable
|
|
49
53
|
local getUnitAbility = BlzGetUnitAbility
|
|
50
54
|
local stringValueByBuffTypeIdByFieldId = postcompile(function()
|
|
51
55
|
local stringValueByBuffTypeIdByFieldId = {}
|
|
@@ -482,6 +486,7 @@ function Buff.prototype.____constructor(self, _unit, typeIdOrTypeIds, polarityOr
|
|
|
482
486
|
timer:start(duration, false, expireBuff, self)
|
|
483
487
|
self._timer = timer
|
|
484
488
|
end
|
|
489
|
+
self:onCreate()
|
|
485
490
|
end
|
|
486
491
|
function Buff.prototype.getUnitBonus(self, bonusType)
|
|
487
492
|
local ____opt_36 = self._bonusIdByBonusType
|
|
@@ -496,26 +501,30 @@ function Buff.prototype.addOrUpdateOrRemoveUnitBonus(self, bonusType, value)
|
|
|
496
501
|
end
|
|
497
502
|
bonusIdByBonusType[bonusType] = addOrUpdateOrRemoveUnitBonus(self._unit, bonusType, bonusIdByBonusType[bonusType], value)
|
|
498
503
|
end
|
|
499
|
-
function Buff.prototype.flashEffect(self,
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
local ____Effect_flash_41 = Effect.flash
|
|
503
|
-
local ____array_39 = __TS__SparseArrayNew(
|
|
504
|
-
self[104],
|
|
505
|
-
isWidgetProvided and widgetOrDuration or self._unit,
|
|
506
|
-
stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
|
|
507
|
-
)
|
|
508
|
-
local ____isWidgetProvided_38
|
|
509
|
-
if isWidgetProvided then
|
|
510
|
-
____isWidgetProvided_38 = duration
|
|
504
|
+
function Buff.prototype.flashEffect(self, widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
|
|
505
|
+
if type(widgetOrXOrParametersOrDuration) == "number" and type(yOrParametersOrDuration) == "number" then
|
|
506
|
+
Effect:flash(self[104], widgetOrXOrParametersOrDuration, yOrParametersOrDuration, parametersOrDuration)
|
|
511
507
|
else
|
|
512
|
-
|
|
508
|
+
local isWidgetProvided = __TS__InstanceOf(widgetOrXOrParametersOrDuration, Unit) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Item) or __TS__InstanceOf(widgetOrXOrParametersOrDuration, Destructable)
|
|
509
|
+
local ____Effect_40 = Effect
|
|
510
|
+
local ____Effect_flash_41 = Effect.flash
|
|
511
|
+
local ____array_39 = __TS__SparseArrayNew(
|
|
512
|
+
self[104],
|
|
513
|
+
isWidgetProvided and widgetOrXOrParametersOrDuration or self._unit,
|
|
514
|
+
stringValueByBuffTypeIdByFieldId[fourCC("feft")][self.typeId] or "origin"
|
|
515
|
+
)
|
|
516
|
+
local ____isWidgetProvided_38
|
|
517
|
+
if isWidgetProvided then
|
|
518
|
+
____isWidgetProvided_38 = yOrParametersOrDuration
|
|
519
|
+
else
|
|
520
|
+
____isWidgetProvided_38 = widgetOrXOrParametersOrDuration
|
|
521
|
+
end
|
|
522
|
+
__TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
|
|
523
|
+
____Effect_flash_41(
|
|
524
|
+
____Effect_40,
|
|
525
|
+
__TS__SparseArraySpread(____array_39)
|
|
526
|
+
)
|
|
513
527
|
end
|
|
514
|
-
__TS__SparseArrayPush(____array_39, ____isWidgetProvided_38)
|
|
515
|
-
____Effect_flash_41(
|
|
516
|
-
____Effect_40,
|
|
517
|
-
__TS__SparseArraySpread(____array_39)
|
|
518
|
-
)
|
|
519
528
|
end
|
|
520
529
|
function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
|
|
521
530
|
local isWidgetProvided = type(widgetOrDuration) == "table"
|
|
@@ -538,6 +547,8 @@ function Buff.prototype.flashSpecialEffect(self, widgetOrDuration, duration)
|
|
|
538
547
|
__TS__SparseArraySpread(____array_43)
|
|
539
548
|
)
|
|
540
549
|
end
|
|
550
|
+
function Buff.prototype.onCreate(self)
|
|
551
|
+
end
|
|
541
552
|
function Buff.prototype.onDestroy(self)
|
|
542
553
|
local unit = self._unit
|
|
543
554
|
if getUnitAbility(unit.handle, self.typeId) == self.handle then
|
|
@@ -12,7 +12,8 @@ export declare abstract class Ability extends Handle<jability> {
|
|
|
12
12
|
protected constructor(handle: jability, typeId: number);
|
|
13
13
|
toString(): string;
|
|
14
14
|
get parentTypeId(): number;
|
|
15
|
-
get
|
|
15
|
+
get orderTypeStringId(): string;
|
|
16
|
+
get orderTypeId(): number;
|
|
16
17
|
abstract readonly owner: Unit | Item;
|
|
17
18
|
getSnapshot(): AbilitySnapshot;
|
|
18
19
|
hasField(field: jabilityfield | number): boolean;
|
|
@@ -34,6 +35,9 @@ export declare abstract class Ability extends Handle<jability> {
|
|
|
34
35
|
setField(field: jabilitystringlevelfield, level: number, value: string): boolean;
|
|
35
36
|
get levelCount(): number;
|
|
36
37
|
abstract get level(): number;
|
|
38
|
+
abstract get cooldownRemaining(): number;
|
|
39
|
+
abstract set cooldownRemaining(cooldownRemaining: number);
|
|
40
|
+
abstract interruptCast(): void;
|
|
37
41
|
static get onCreate(): Event<[Ability]>;
|
|
38
42
|
static get destroyEvent(): Event<[Ability]>;
|
|
39
43
|
}
|
|
@@ -44,15 +48,21 @@ export declare class UnrecognizedAbility extends Ability {
|
|
|
44
48
|
readonly owner: Unit;
|
|
45
49
|
constructor(typeId: number, owner: Unit);
|
|
46
50
|
get level(): number;
|
|
51
|
+
get cooldownRemaining(): number;
|
|
52
|
+
set cooldownRemaining(_: number);
|
|
53
|
+
interruptCast(): void;
|
|
47
54
|
}
|
|
48
55
|
export declare class UnitAbility extends Ability {
|
|
49
56
|
readonly owner: Unit;
|
|
50
57
|
private readonly u;
|
|
51
58
|
constructor(handle: jability, typeId: number, owner: Unit);
|
|
59
|
+
incrementHideCounter(): void;
|
|
60
|
+
decrementHideCounter(): void;
|
|
52
61
|
get level(): number;
|
|
53
62
|
set level(v: number);
|
|
54
63
|
get cooldownRemaining(): number;
|
|
55
|
-
set cooldownRemaining(
|
|
64
|
+
set cooldownRemaining(cooldownRemaining: number);
|
|
65
|
+
interruptCast(): void;
|
|
56
66
|
static get onCreate(): Event<[UnitAbility]>;
|
|
57
67
|
static get onDestroy(): Event<[UnitAbility]>;
|
|
58
68
|
}
|
|
@@ -76,6 +86,9 @@ export declare class ItemAbility extends Ability {
|
|
|
76
86
|
setField(field: jabilitybooleanlevelfield, level: number, value: boolean): boolean;
|
|
77
87
|
setField(field: jabilitystringlevelfield, level: number, value: string): boolean;
|
|
78
88
|
get level(): number;
|
|
89
|
+
get cooldownRemaining(): number;
|
|
90
|
+
set cooldownRemaining(cooldownRemaining: number);
|
|
91
|
+
interruptCast(): void;
|
|
79
92
|
static get onCreate(): Event<[ItemAbility]>;
|
|
80
93
|
static get onDestroy(): Event<[ItemAbility]>;
|
|
81
94
|
}
|
|
@@ -10,7 +10,10 @@ local ____exports = {}
|
|
|
10
10
|
local ____handle = require("core.types.handle")
|
|
11
11
|
local Handle = ____handle.Handle
|
|
12
12
|
local ____ability = require("engine.internal.item.ability")
|
|
13
|
+
local abilityActionDummy = ____ability.abilityActionDummy
|
|
13
14
|
local doAbilityAction = ____ability.doAbilityAction
|
|
15
|
+
local doAbilityActionForceDummy = ____ability.doAbilityActionForceDummy
|
|
16
|
+
local startItemCooldown = ____ability.startItemCooldown
|
|
14
17
|
local getUnitAbilityLevel = GetUnitAbilityLevel
|
|
15
18
|
local setUnitAbilityLevel = SetUnitAbilityLevel
|
|
16
19
|
local setAbilityIntegerField = BlzSetAbilityIntegerField
|
|
@@ -32,6 +35,9 @@ local getAbilityStringLevelField = BlzGetAbilityStringLevelField
|
|
|
32
35
|
local getUnitAbilityCooldownRemaining = BlzGetUnitAbilityCooldownRemaining
|
|
33
36
|
local startUnitAbilityCooldown = BlzStartUnitAbilityCooldown
|
|
34
37
|
local getHandleId = GetHandleId
|
|
38
|
+
local getItemBooleanField = BlzGetItemBooleanField
|
|
39
|
+
local setItemBooleanField = BlzSetItemBooleanField
|
|
40
|
+
local unitHideAbility = BlzUnitHideAbility
|
|
35
41
|
local match = string.match
|
|
36
42
|
local ____type = _G.type
|
|
37
43
|
local ____tostring = _G.tostring
|
|
@@ -295,10 +301,18 @@ __TS__SetDescriptor(
|
|
|
295
301
|
)
|
|
296
302
|
__TS__SetDescriptor(
|
|
297
303
|
Ability.prototype,
|
|
298
|
-
"
|
|
304
|
+
"orderTypeStringId",
|
|
299
305
|
{get = function(self)
|
|
300
306
|
local field = orderIdFieldByParentTypeId[self.parentTypeId]
|
|
301
|
-
return
|
|
307
|
+
return field ~= nil and getAbilityStringLevelField(self.handle, field, self.level) or (orders[self.parentTypeId] or "")
|
|
308
|
+
end},
|
|
309
|
+
true
|
|
310
|
+
)
|
|
311
|
+
__TS__SetDescriptor(
|
|
312
|
+
Ability.prototype,
|
|
313
|
+
"orderTypeId",
|
|
314
|
+
{get = function(self)
|
|
315
|
+
return order2orderId(self.orderTypeStringId)
|
|
302
316
|
end},
|
|
303
317
|
true
|
|
304
318
|
)
|
|
@@ -317,6 +331,17 @@ __TS__SetDescriptor(
|
|
|
317
331
|
end},
|
|
318
332
|
true
|
|
319
333
|
)
|
|
334
|
+
__TS__SetDescriptor(
|
|
335
|
+
Ability.prototype,
|
|
336
|
+
"cooldownRemaining",
|
|
337
|
+
{
|
|
338
|
+
get = function(self)
|
|
339
|
+
end,
|
|
340
|
+
set = function(self, cooldownRemaining)
|
|
341
|
+
end
|
|
342
|
+
},
|
|
343
|
+
true
|
|
344
|
+
)
|
|
320
345
|
__TS__ObjectDefineProperty(
|
|
321
346
|
Ability,
|
|
322
347
|
"onCreate",
|
|
@@ -340,6 +365,8 @@ function UnrecognizedAbility.prototype.____constructor(self, typeId, owner)
|
|
|
340
365
|
UnrecognizedAbility.____super.prototype.____constructor(self, nil, typeId)
|
|
341
366
|
self.owner = owner
|
|
342
367
|
end
|
|
368
|
+
function UnrecognizedAbility.prototype.interruptCast(self)
|
|
369
|
+
end
|
|
343
370
|
__TS__SetDescriptor(
|
|
344
371
|
UnrecognizedAbility.prototype,
|
|
345
372
|
"level",
|
|
@@ -348,6 +375,18 @@ __TS__SetDescriptor(
|
|
|
348
375
|
end},
|
|
349
376
|
true
|
|
350
377
|
)
|
|
378
|
+
__TS__SetDescriptor(
|
|
379
|
+
UnrecognizedAbility.prototype,
|
|
380
|
+
"cooldownRemaining",
|
|
381
|
+
{
|
|
382
|
+
get = function(self)
|
|
383
|
+
return 0
|
|
384
|
+
end,
|
|
385
|
+
set = function(self, _)
|
|
386
|
+
end
|
|
387
|
+
},
|
|
388
|
+
true
|
|
389
|
+
)
|
|
351
390
|
____exports.UnitAbility = __TS__Class()
|
|
352
391
|
local UnitAbility = ____exports.UnitAbility
|
|
353
392
|
UnitAbility.name = "UnitAbility"
|
|
@@ -357,6 +396,15 @@ function UnitAbility.prototype.____constructor(self, handle, typeId, owner)
|
|
|
357
396
|
self.owner = owner
|
|
358
397
|
self.u = owner.handle
|
|
359
398
|
end
|
|
399
|
+
function UnitAbility.prototype.incrementHideCounter(self)
|
|
400
|
+
unitHideAbility(self.u, self.typeId, true)
|
|
401
|
+
end
|
|
402
|
+
function UnitAbility.prototype.decrementHideCounter(self)
|
|
403
|
+
unitHideAbility(self.u, self.typeId, false)
|
|
404
|
+
end
|
|
405
|
+
function UnitAbility.prototype.interruptCast(self)
|
|
406
|
+
self.owner:interruptCast(self.typeId)
|
|
407
|
+
end
|
|
360
408
|
__TS__SetDescriptor(
|
|
361
409
|
UnitAbility.prototype,
|
|
362
410
|
"level",
|
|
@@ -377,8 +425,8 @@ __TS__SetDescriptor(
|
|
|
377
425
|
get = function(self)
|
|
378
426
|
return getUnitAbilityCooldownRemaining(self.u, self.typeId)
|
|
379
427
|
end,
|
|
380
|
-
set = function(self,
|
|
381
|
-
startUnitAbilityCooldown(self.u, self.typeId,
|
|
428
|
+
set = function(self, cooldownRemaining)
|
|
429
|
+
startUnitAbilityCooldown(self.u, self.typeId, cooldownRemaining)
|
|
382
430
|
end
|
|
383
431
|
},
|
|
384
432
|
true
|
|
@@ -403,6 +451,11 @@ end
|
|
|
403
451
|
local function setAbilityField(_, ability, field, levelOrValue, value)
|
|
404
452
|
return ____exports.Ability.prototype.setField(ability, field, levelOrValue, value)
|
|
405
453
|
end
|
|
454
|
+
local function getAbilityCooldown(_, abilityTypeId)
|
|
455
|
+
return getUnitAbilityCooldownRemaining(abilityActionDummy, abilityTypeId)
|
|
456
|
+
end
|
|
457
|
+
local function doNothing()
|
|
458
|
+
end
|
|
406
459
|
____exports.ItemAbility = __TS__Class()
|
|
407
460
|
local ItemAbility = ____exports.ItemAbility
|
|
408
461
|
ItemAbility.name = "ItemAbility"
|
|
@@ -430,6 +483,14 @@ function ItemAbility.prototype.setField(self, field, levelOrValue, value)
|
|
|
430
483
|
value
|
|
431
484
|
)
|
|
432
485
|
end
|
|
486
|
+
function ItemAbility.prototype.interruptCast(self)
|
|
487
|
+
local handle = self.owner.handle
|
|
488
|
+
local activelyUsed = getItemBooleanField(handle, ITEM_BF_ACTIVELY_USED)
|
|
489
|
+
if activelyUsed then
|
|
490
|
+
setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, false)
|
|
491
|
+
setItemBooleanField(handle, ITEM_BF_ACTIVELY_USED, true)
|
|
492
|
+
end
|
|
493
|
+
end
|
|
433
494
|
__TS__SetDescriptor(
|
|
434
495
|
ItemAbility.prototype,
|
|
435
496
|
"level",
|
|
@@ -438,6 +499,27 @@ __TS__SetDescriptor(
|
|
|
438
499
|
end},
|
|
439
500
|
true
|
|
440
501
|
)
|
|
502
|
+
__TS__SetDescriptor(
|
|
503
|
+
ItemAbility.prototype,
|
|
504
|
+
"cooldownRemaining",
|
|
505
|
+
{
|
|
506
|
+
get = function(self)
|
|
507
|
+
local item = self.owner
|
|
508
|
+
local ____doAbilityActionForceDummy_4 = doAbilityActionForceDummy
|
|
509
|
+
local ____item_handle_3 = item.handle
|
|
510
|
+
local ____opt_1 = item.owner
|
|
511
|
+
return ____doAbilityActionForceDummy_4(____item_handle_3, ____opt_1 and ____opt_1.handle, getAbilityCooldown, self.typeId)
|
|
512
|
+
end,
|
|
513
|
+
set = function(self, cooldownRemaining)
|
|
514
|
+
local item = self.owner
|
|
515
|
+
local ____startItemCooldown_8 = startItemCooldown
|
|
516
|
+
local ____item_handle_7 = item.handle
|
|
517
|
+
local ____opt_5 = item.owner
|
|
518
|
+
____startItemCooldown_8(____item_handle_7, ____opt_5 and ____opt_5.handle, cooldownRemaining)
|
|
519
|
+
end
|
|
520
|
+
},
|
|
521
|
+
true
|
|
522
|
+
)
|
|
441
523
|
__TS__ObjectDefineProperty(
|
|
442
524
|
ItemAbility,
|
|
443
525
|
"onCreate",
|
|
@@ -1,16 +1,59 @@
|
|
|
1
1
|
local ____exports = {}
|
|
2
|
+
local restoreCooldownGroup
|
|
2
3
|
local ____player = require("core.types.player")
|
|
3
4
|
local Player = ____player.Player
|
|
4
5
|
local ____dummy = require("objutil.dummy")
|
|
5
6
|
local dummyUnitId = ____dummy.dummyUnitId
|
|
7
|
+
local ____utility = require("engine.internal.utility")
|
|
8
|
+
local findUnitItemSlot = ____utility.findUnitItemSlot
|
|
9
|
+
local ____blank = require("engine.object-data.entry.item-type.blank")
|
|
10
|
+
local BlankItemType = ____blank.BlankItemType
|
|
11
|
+
local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
|
|
12
|
+
local abilityTypeIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.abilityTypeIdGenerator
|
|
13
|
+
local ____math = require("math")
|
|
14
|
+
local MINIMUM_POSITIVE_NORMALIZED_FLOAT = ____math.MINIMUM_POSITIVE_NORMALIZED_FLOAT
|
|
15
|
+
local ____timer = require("core.types.timer")
|
|
16
|
+
local Timer = ____timer.Timer
|
|
17
|
+
local ____ignore_2Devents_2Ditems = require("engine.internal.unit.ignore-events-items")
|
|
18
|
+
local ignoreEventsItems = ____ignore_2Devents_2Ditems.ignoreEventsItems
|
|
6
19
|
local isItemOwned = IsItemOwned
|
|
7
20
|
local isItemPowerup = IsItemPowerup
|
|
8
21
|
local getItemX = GetItemX
|
|
9
22
|
local getItemY = GetItemY
|
|
23
|
+
local setAbilityRealLevelField = BlzSetAbilityRealLevelField
|
|
24
|
+
local setItemIntegerField = BlzSetItemIntegerField
|
|
25
|
+
local getItemIntegerField = BlzGetItemIntegerField
|
|
10
26
|
local setItemBooleanField = BlzSetItemBooleanField
|
|
11
27
|
local setItemPosition = SetItemPosition
|
|
12
28
|
local unitAddItem = UnitAddItem
|
|
29
|
+
local unitDropItemSlot = UnitDropItemSlot
|
|
13
30
|
local unitRemoveItem = UnitRemoveItem
|
|
31
|
+
local unitUseItem = UnitUseItem
|
|
32
|
+
local unitResetCooldown = UnitResetCooldown
|
|
33
|
+
local COOLDOWN_STARTER_ABILITY_TYPE_ID = compiletime(function()
|
|
34
|
+
if not currentMap then
|
|
35
|
+
return 0
|
|
36
|
+
end
|
|
37
|
+
local abilityType = currentMap.objects.ability:newObject(
|
|
38
|
+
util.id2s(abilityTypeIdGenerator:next()),
|
|
39
|
+
"Absk"
|
|
40
|
+
)
|
|
41
|
+
abilityType["bsk1+0"] = 0
|
|
42
|
+
abilityType["bsk2+0"] = 0
|
|
43
|
+
abilityType["bsk3+0"] = 0
|
|
44
|
+
abilityType["amcs+0"] = 0
|
|
45
|
+
abilityType["adur+0"] = MINIMUM_POSITIVE_NORMALIZED_FLOAT
|
|
46
|
+
abilityType["ahdu+0"] = MINIMUM_POSITIVE_NORMALIZED_FLOAT
|
|
47
|
+
return util.s2id(abilityType.id)
|
|
48
|
+
end)
|
|
49
|
+
local COOLDOWN_STARTER_ITEM_TYPE_ID = compiletime(function()
|
|
50
|
+
local itemType = BlankItemType:create()
|
|
51
|
+
itemType.name = "[Warscript/Dummy] Item Cooldown Starter"
|
|
52
|
+
itemType.abilityTypeIds = {COOLDOWN_STARTER_ABILITY_TYPE_ID}
|
|
53
|
+
itemType.cooldownGroupId = COOLDOWN_STARTER_ABILITY_TYPE_ID
|
|
54
|
+
itemType.activelyUsed = true
|
|
55
|
+
return itemType.id
|
|
56
|
+
end)
|
|
14
57
|
local dummy = assert(CreateUnit(
|
|
15
58
|
Player.neutralVictim.handle,
|
|
16
59
|
dummyUnitId,
|
|
@@ -18,10 +61,37 @@ local dummy = assert(CreateUnit(
|
|
|
18
61
|
0,
|
|
19
62
|
270
|
|
20
63
|
))
|
|
64
|
+
local cooldownStarterItem = UnitAddItemById(dummy, COOLDOWN_STARTER_ITEM_TYPE_ID)
|
|
65
|
+
local cooldownStarterAbility = BlzGetItemAbility(cooldownStarterItem, COOLDOWN_STARTER_ABILITY_TYPE_ID)
|
|
21
66
|
ShowUnit(dummy, false)
|
|
67
|
+
local function startItemCooldownInternal(handle, cooldown)
|
|
68
|
+
local cooldownGroup = getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP)
|
|
69
|
+
setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, COOLDOWN_STARTER_ABILITY_TYPE_ID)
|
|
70
|
+
setAbilityRealLevelField(cooldownStarterAbility, ABILITY_RLF_COOLDOWN, 0, cooldown)
|
|
71
|
+
unitResetCooldown(dummy)
|
|
72
|
+
unitUseItem(dummy, cooldownStarterItem)
|
|
73
|
+
Timer:run(restoreCooldownGroup, handle, cooldownGroup)
|
|
74
|
+
end
|
|
75
|
+
restoreCooldownGroup = function(handle, cooldownGroup)
|
|
76
|
+
if getItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP) == COOLDOWN_STARTER_ABILITY_TYPE_ID then
|
|
77
|
+
setItemIntegerField(handle, ITEM_IF_COOLDOWN_GROUP, cooldownGroup)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
---
|
|
81
|
+
-- @internal For use by internal systems only.
|
|
82
|
+
____exports.startItemCooldown = function(handle, owner, cooldown)
|
|
83
|
+
____exports.doAbilityActionForceDummy(handle, owner, startItemCooldownInternal, cooldown)
|
|
84
|
+
end
|
|
85
|
+
---
|
|
86
|
+
-- @internal For use by internal systems only.
|
|
87
|
+
____exports.abilityActionDummy = dummy
|
|
22
88
|
---
|
|
23
89
|
-- @internal For use by internal systems only.
|
|
24
90
|
____exports.doAbilityAction = function(handle, action, ...)
|
|
91
|
+
local isAlreadyIgnoredInEvents = ignoreEventsItems[handle] ~= nil
|
|
92
|
+
if not isAlreadyIgnoredInEvents then
|
|
93
|
+
ignoreEventsItems[handle] = true
|
|
94
|
+
end
|
|
25
95
|
local isOwned = isItemOwned(handle)
|
|
26
96
|
local isPowerup
|
|
27
97
|
local x
|
|
@@ -43,6 +113,42 @@ ____exports.doAbilityAction = function(handle, action, ...)
|
|
|
43
113
|
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
44
114
|
end
|
|
45
115
|
end
|
|
116
|
+
if not isAlreadyIgnoredInEvents then
|
|
117
|
+
ignoreEventsItems[handle] = nil
|
|
118
|
+
end
|
|
119
|
+
return result
|
|
120
|
+
end
|
|
121
|
+
---
|
|
122
|
+
-- @internal For use by internal systems only.
|
|
123
|
+
____exports.doAbilityActionForceDummy = function(handle, owner, action, ...)
|
|
124
|
+
if owner == nil then
|
|
125
|
+
return ____exports.doAbilityAction(handle, action, ...)
|
|
126
|
+
end
|
|
127
|
+
local slot = findUnitItemSlot(owner, handle)
|
|
128
|
+
if slot == nil then
|
|
129
|
+
return ____exports.doAbilityAction(handle, action, ...)
|
|
130
|
+
end
|
|
131
|
+
local isAlreadyIgnoredInEvents = ignoreEventsItems[handle] ~= nil
|
|
132
|
+
if not isAlreadyIgnoredInEvents then
|
|
133
|
+
ignoreEventsItems[handle] = true
|
|
134
|
+
end
|
|
135
|
+
local isPowerup
|
|
136
|
+
if isItemPowerup(handle) then
|
|
137
|
+
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, false)
|
|
138
|
+
isPowerup = true
|
|
139
|
+
end
|
|
140
|
+
unitRemoveItem(owner, handle)
|
|
141
|
+
unitAddItem(dummy, handle)
|
|
142
|
+
local result = action(handle, ...)
|
|
143
|
+
unitRemoveItem(dummy, handle)
|
|
144
|
+
unitAddItem(owner, handle)
|
|
145
|
+
unitDropItemSlot(owner, handle, slot)
|
|
146
|
+
if isPowerup then
|
|
147
|
+
setItemBooleanField(handle, ITEM_BF_USE_AUTOMATICALLY_WHEN_ACQUIRED, true)
|
|
148
|
+
end
|
|
149
|
+
if not isAlreadyIgnoredInEvents then
|
|
150
|
+
ignoreEventsItems[handle] = nil
|
|
151
|
+
end
|
|
46
152
|
return result
|
|
47
153
|
end
|
|
48
154
|
return ____exports
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
local ____exports = {}
|
|
2
|
+
local disableAbility = BlzUnitDisableAbility
|
|
3
|
+
---
|
|
4
|
+
-- @internal For use by internal systems only.
|
|
5
|
+
____exports.increaseAbilityDisableCounter = function(unit, abilityTypeId, times)
|
|
6
|
+
for _ = 1, times do
|
|
7
|
+
disableAbility(unit, abilityTypeId, true, false)
|
|
8
|
+
end
|
|
9
|
+
for _ = times, -1 do
|
|
10
|
+
disableAbility(unit, abilityTypeId, false, false)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
return ____exports
|