warscript 0.0.1-dev.f48f7bb → 0.0.1-dev.f5421e8
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/config.d.ts +5 -0
- package/config.lua +10 -0
- package/core/types/effect.d.ts +1 -3
- package/core/types/effect.lua +26 -29
- package/core/types/sound.d.ts +17 -24
- package/core/types/sound.lua +94 -24
- package/core/types/timer.d.ts +6 -7
- package/core/types/timer.lua +18 -21
- package/core/util.lua +6 -1
- 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 +3 -0
- package/engine/behaviour/ability/damage.lua +2 -2
- package/engine/behaviour/ability.d.ts +7 -2
- package/engine/behaviour/ability.lua +34 -7
- package/engine/behaviour/unit.d.ts +2 -0
- package/engine/buff.d.ts +56 -41
- package/engine/buff.lua +295 -228
- package/engine/internal/ability.lua +0 -2
- package/engine/internal/item/ability.lua +3 -3
- package/engine/internal/item.d.ts +2 -2
- package/engine/internal/item.lua +56 -25
- package/engine/internal/mechanics/ability-duration.lua +1 -1
- 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/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/bonus.d.ts +2 -0
- package/engine/internal/unit/bonus.lua +17 -0
- package/engine/internal/unit/item.lua +3 -48
- package/engine/internal/unit.d.ts +7 -1
- package/engine/internal/unit.lua +17 -2
- 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/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/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/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/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 +74 -21
- package/engine/object-data/entry/buff-type/applicable.lua +13 -37
- package/engine/object-data/entry/buff-type.d.ts +1 -1
- package/engine/object-data/entry/buff-type.lua +2 -2
- package/engine/object-data/entry/destructible-type.d.ts +1 -1
- package/engine/object-data/entry/item-type.d.ts +1 -1
- package/engine/object-data/entry/item-type.lua +4 -4
- 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 +8 -1
- package/engine/object-data/entry/unit-type.lua +61 -8
- 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/standard/entries/sound-preset.d.ts +10 -0
- package/engine/standard/entries/sound-preset.lua +10 -0
- package/engine/unit.d.ts +1 -0
- package/engine/unit.lua +1 -0
- package/objutil/unit.lua +8 -0
- package/package.json +2 -2
- package/utility/reflection.lua +11 -7
package/config.d.ts
ADDED
package/config.lua
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__Class = ____lualib.__TS__Class
|
|
3
|
+
local ____exports = {}
|
|
4
|
+
____exports.WarscriptConfig = __TS__Class()
|
|
5
|
+
local WarscriptConfig = ____exports.WarscriptConfig
|
|
6
|
+
WarscriptConfig.name = "WarscriptConfig"
|
|
7
|
+
function WarscriptConfig.prototype.____constructor(self)
|
|
8
|
+
end
|
|
9
|
+
WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH = true
|
|
10
|
+
return ____exports
|
package/core/types/effect.d.ts
CHANGED
|
@@ -30,12 +30,10 @@ export declare class Effect extends Handle<jeffect> {
|
|
|
30
30
|
set pitch(pitch: number);
|
|
31
31
|
get roll(): number;
|
|
32
32
|
set roll(roll: number);
|
|
33
|
-
static create<T extends Effect>(this: typeof Effect & (new (handle: jeffect) => T),
|
|
34
|
-
static createTarget<T extends Effect>(this: typeof Effect & (new (handle: jeffect) => T), model: string, target: Widget, attachPoint: string): T;
|
|
33
|
+
static create<T extends Effect>(this: typeof Effect & (new (handle: jeffect) => T), modelPath: string, xOrWidget: number | Widget, yOrAttachmentPoint?: number | string, parameters?: EffectParameters): T;
|
|
35
34
|
static flash(modelPath: string, ...args: [
|
|
36
35
|
...pointOrWidget: [x: number, y: number] | [widget: Widget, attachmentPoint?: string],
|
|
37
36
|
...parametersOrDuration: [parametersOrDuration?: EffectParameters | number] | [duration?: number, parameters?: EffectParameters]
|
|
38
37
|
]): void;
|
|
39
|
-
static flashTarget(model: string, target: Widget, attachPoint: string, duration?: number): void;
|
|
40
38
|
}
|
|
41
39
|
export {};
|
package/core/types/effect.lua
CHANGED
|
@@ -4,7 +4,7 @@ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
|
4
4
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
5
|
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
6
6
|
local ____exports = {}
|
|
7
|
-
local dummyPlayer, flash
|
|
7
|
+
local dummyPlayer, addSpecialEffectInternal, flash
|
|
8
8
|
local ____handle = require("core.types.handle")
|
|
9
9
|
local Handle = ____handle.Handle
|
|
10
10
|
local ____playerColor = require("core.types.playerColor")
|
|
@@ -119,6 +119,7 @@ local function setSpecialEffectColor(effect, color)
|
|
|
119
119
|
dummyPlayer.color = dummyColor
|
|
120
120
|
end
|
|
121
121
|
local setters = {scale = setSpecialEffectScale, color = setSpecialEffectColor, pitch = setSpecialEffectPitchDegrees, roll = setSpecialEffectRollDegrees}
|
|
122
|
+
local setterProperties = {"scale", "color", "pitch", "roll"}
|
|
122
123
|
dummyPlayer = Player.neutralExtra
|
|
123
124
|
local temporaryEffects = {}
|
|
124
125
|
local temporaryEffectsDurations = {}
|
|
@@ -177,11 +178,14 @@ function Effect.prototype.onDestroy(self)
|
|
|
177
178
|
destroyEffect(self.handle)
|
|
178
179
|
return Handle.prototype.onDestroy(self)
|
|
179
180
|
end
|
|
180
|
-
function Effect.create(self,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
181
|
+
function Effect.create(self, modelPath, xOrWidget, yOrAttachmentPoint, parameters)
|
|
182
|
+
local effect = self:of(addSpecialEffectInternal(modelPath, xOrWidget, yOrAttachmentPoint, parameters))
|
|
183
|
+
if parameters ~= nil then
|
|
184
|
+
effect[100] = parameters.color
|
|
185
|
+
effect[101] = parameters.pitch
|
|
186
|
+
effect[102] = parameters.roll
|
|
187
|
+
end
|
|
188
|
+
return effect
|
|
185
189
|
end
|
|
186
190
|
function Effect.flash(self, modelPath, xOrWidget, yOrOrAttachmentPoint, parametersOrDuration, parameters)
|
|
187
191
|
if type(parametersOrDuration) ~= "number" then
|
|
@@ -206,24 +210,12 @@ function Effect.flash(self, modelPath, xOrWidget, yOrOrAttachmentPoint, paramete
|
|
|
206
210
|
parameters
|
|
207
211
|
)
|
|
208
212
|
end
|
|
209
|
-
function Effect.flashTarget(self, model, target, attachPoint, duration)
|
|
210
|
-
local effect = addSpecialEffectTarget(model, target.handle, attachPoint)
|
|
211
|
-
if effect ~= nil then
|
|
212
|
-
if duration and duration > 0 then
|
|
213
|
-
temporaryEffectsCount = temporaryEffectsCount + 1
|
|
214
|
-
temporaryEffects[temporaryEffectsCount] = effect
|
|
215
|
-
temporaryEffectsDurations[temporaryEffectsCount] = duration
|
|
216
|
-
else
|
|
217
|
-
destroyEffect(effect)
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
end
|
|
221
213
|
__TS__SetDescriptor(
|
|
222
214
|
Effect.prototype,
|
|
223
215
|
"color",
|
|
224
216
|
{
|
|
225
217
|
get = function(self)
|
|
226
|
-
return self[100] or PlayerColor.
|
|
218
|
+
return self[100] or PlayerColor.red
|
|
227
219
|
end,
|
|
228
220
|
set = function(self, color)
|
|
229
221
|
setSpecialEffectColor(self.handle, color)
|
|
@@ -273,30 +265,35 @@ __TS__SetDescriptor(
|
|
|
273
265
|
},
|
|
274
266
|
true
|
|
275
267
|
)
|
|
276
|
-
|
|
268
|
+
addSpecialEffectInternal = function(modelPath, xOrWidget, yOrAttachmentPoint, parameters)
|
|
277
269
|
local coordinatesProvided = type(xOrWidget) == "number"
|
|
278
270
|
local isPositional = coordinatesProvided or (parameters and parameters.detached) == true
|
|
279
271
|
local x = not isPositional and 0 or (coordinatesProvided and xOrWidget or xOrWidget.x)
|
|
280
|
-
local y = not isPositional and 0 or (coordinatesProvided and
|
|
281
|
-
local effect = isPositional and addSpecialEffect(modelPath, x, y) or addSpecialEffectTarget(modelPath, xOrWidget.handle,
|
|
282
|
-
if isPositional and not coordinatesProvided and (parameters and parameters.scale) == nil and __TS__InstanceOf(xOrWidget, Unit) then
|
|
283
|
-
setSpecialEffectScale(effect, xOrWidget.scale)
|
|
284
|
-
end
|
|
272
|
+
local y = not isPositional and 0 or (coordinatesProvided and yOrAttachmentPoint or xOrWidget.y)
|
|
273
|
+
local effect = isPositional and addSpecialEffect(modelPath, x, y) or addSpecialEffectTarget(modelPath, xOrWidget.handle, yOrAttachmentPoint or "origin")
|
|
285
274
|
if parameters ~= nil then
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
275
|
+
if isPositional and parameters.scale == nil and __TS__InstanceOf(xOrWidget, Unit) then
|
|
276
|
+
setSpecialEffectScale(effect, xOrWidget.scale)
|
|
277
|
+
end
|
|
278
|
+
for ____, property in ipairs(setterProperties) do
|
|
279
|
+
local value = parameters[property]
|
|
280
|
+
if value ~= nil then
|
|
281
|
+
setters[property](effect, value)
|
|
289
282
|
end
|
|
290
283
|
end
|
|
291
284
|
if isPositional and parameters.zOffset ~= nil then
|
|
292
285
|
moveLocation(location, x, y)
|
|
293
286
|
local z = __TS__InstanceOf(xOrWidget, Unit) and getLocationZ(location) + xOrWidget.flyHeight or getLocationZ(location)
|
|
294
|
-
|
|
287
|
+
setSpecialEffectZ(
|
|
295
288
|
effect,
|
|
296
289
|
z + parameters.zOffset * (parameters.scaleZOffset and getSpecialEffectScale(effect) or 1)
|
|
297
290
|
)
|
|
298
291
|
end
|
|
299
292
|
end
|
|
293
|
+
return effect
|
|
294
|
+
end
|
|
295
|
+
flash = function(modelPath, xOrWidget, yOrAttachmentPoint, duration, parameters)
|
|
296
|
+
local effect = addSpecialEffectInternal(modelPath, xOrWidget, yOrAttachmentPoint, parameters)
|
|
300
297
|
if duration ~= nil and duration > 0 then
|
|
301
298
|
temporaryEffectsCount = temporaryEffectsCount + 1
|
|
302
299
|
temporaryEffects[temporaryEffectsCount] = effect
|
package/core/types/sound.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import { Handle, HandleDestructor } from "./handle";
|
|
3
3
|
import { Unit } from "./unit";
|
|
4
|
+
import { SoundEax } from "../../engine/object-data/auxiliary/sound-eax";
|
|
4
5
|
export declare enum SoundChannel {
|
|
5
6
|
General = 0,
|
|
6
7
|
UnitSelection = 1,
|
|
@@ -18,16 +19,7 @@ export declare enum SoundChannel {
|
|
|
18
19
|
Birth = 13,
|
|
19
20
|
Fire = 14
|
|
20
21
|
}
|
|
21
|
-
export
|
|
22
|
-
Default = "DefaultEAXON",
|
|
23
|
-
Acknowledgements = "HeroAcksEAX",
|
|
24
|
-
Environment = "DoodadsEAX",
|
|
25
|
-
Drums = "KotoDrumsEAX",
|
|
26
|
-
Attacks = "CombatSoundsEAX",
|
|
27
|
-
Abilities = "SpellsEAX",
|
|
28
|
-
Missiles = "MissilesEAX"
|
|
29
|
-
}
|
|
30
|
-
export type SoundPreset = Readonly<{
|
|
22
|
+
export type SoundSettings = Readonly<{
|
|
31
23
|
channel?: SoundChannel;
|
|
32
24
|
eax?: SoundEax;
|
|
33
25
|
fadeInRate?: number;
|
|
@@ -36,19 +28,19 @@ export type SoundPreset = Readonly<{
|
|
|
36
28
|
volume?: number;
|
|
37
29
|
pitch?: number;
|
|
38
30
|
}>;
|
|
39
|
-
export type
|
|
31
|
+
export type Sound3DSettings = SoundSettings & Readonly<{
|
|
40
32
|
stopWhenOutOfRange?: boolean;
|
|
41
33
|
minDistance?: number;
|
|
42
34
|
maxDistance?: number;
|
|
43
35
|
distanceCutoff?: number;
|
|
44
36
|
}>;
|
|
45
|
-
export declare namespace
|
|
46
|
-
const UI:
|
|
47
|
-
const Music:
|
|
48
|
-
const Attack:
|
|
49
|
-
const Ability:
|
|
50
|
-
const AbilityLooping:
|
|
51
|
-
const Missile:
|
|
37
|
+
export declare namespace SoundSettings {
|
|
38
|
+
const UI: SoundSettings;
|
|
39
|
+
const Music: SoundSettings;
|
|
40
|
+
const Attack: Sound3DSettings;
|
|
41
|
+
const Ability: Sound3DSettings;
|
|
42
|
+
const AbilityLooping: Sound3DSettings;
|
|
43
|
+
const Missile: Sound3DSettings;
|
|
52
44
|
}
|
|
53
45
|
export declare class Sound extends Handle<jsound, [fadeOut?: boolean]> {
|
|
54
46
|
private _volume?;
|
|
@@ -58,12 +50,13 @@ export declare class Sound extends Handle<jsound, [fadeOut?: boolean]> {
|
|
|
58
50
|
start(milliseconds?: number): void;
|
|
59
51
|
stop(fadeOut?: boolean): void;
|
|
60
52
|
restart(milliseconds?: number): void;
|
|
61
|
-
static play(fileName: string, preset:
|
|
62
|
-
static create(fileName: string, preset:
|
|
53
|
+
static play(fileName: string, preset: SoundSettings): void;
|
|
54
|
+
static create(fileName: string, preset: SoundSettings): Sound;
|
|
63
55
|
}
|
|
64
56
|
export declare class Sound3D extends Sound {
|
|
65
|
-
static playAtPosition(fileName: string, preset:
|
|
66
|
-
static playOnUnit(fileName: string, preset:
|
|
67
|
-
static
|
|
68
|
-
static
|
|
57
|
+
static playAtPosition(fileName: string, preset: Sound3DSettings, x?: number, y?: number, z?: number): void;
|
|
58
|
+
static playOnUnit(fileName: string, preset: Sound3DSettings, unit: Unit): void;
|
|
59
|
+
static playFromLabel(label: string, preset: Sound3DSettings, ...positionOrUnit: [Unit] | [number, number, number?]): void;
|
|
60
|
+
static createAtPosition(fileName: string, preset: Sound3DSettings, x?: number, y?: number, z?: number): Sound3D;
|
|
61
|
+
static createOnUnit(fileName: string, preset: Sound3DSettings, unit: Unit): Sound3D;
|
|
69
62
|
}
|
package/core/types/sound.lua
CHANGED
|
@@ -5,15 +5,18 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
|
5
5
|
local ____exports = {}
|
|
6
6
|
local ____handle = require("core.types.handle")
|
|
7
7
|
local Handle = ____handle.Handle
|
|
8
|
+
local ____sound_2Dpreset = require("engine.object-data.entry.sound-preset")
|
|
9
|
+
local SoundPreset = ____sound_2Dpreset.SoundPreset
|
|
10
|
+
local ____random = require("engine.random")
|
|
11
|
+
local randomInteger = ____random.randomInteger
|
|
8
12
|
local createSound = CreateSound
|
|
13
|
+
local createSoundFromLabel = CreateSoundFromLabel
|
|
9
14
|
local setSoundPitch = SetSoundPitch
|
|
10
15
|
local setSoundChannel = SetSoundChannel
|
|
11
16
|
local setSoundPosition = SetSoundPosition
|
|
12
17
|
local setSoundVolume = SetSoundVolume
|
|
13
18
|
local setSoundDistances = SetSoundDistances
|
|
14
19
|
local setSoundDistanceCutoff = SetSoundDistanceCutoff
|
|
15
|
-
local setSoundConeAngles = SetSoundConeAngles
|
|
16
|
-
local setSoundConeOrientation = SetSoundConeOrientation
|
|
17
20
|
local startSound = StartSound
|
|
18
21
|
local setSoundPlayPosition = SetSoundPlayPosition
|
|
19
22
|
local stopSound = StopSound
|
|
@@ -50,29 +53,21 @@ ____exports.SoundChannel.Birth = 13
|
|
|
50
53
|
____exports.SoundChannel[____exports.SoundChannel.Birth] = "Birth"
|
|
51
54
|
____exports.SoundChannel.Fire = 14
|
|
52
55
|
____exports.SoundChannel[____exports.SoundChannel.Fire] = "Fire"
|
|
53
|
-
____exports.
|
|
54
|
-
|
|
55
|
-
____exports.SoundEax.Acknowledgements = "HeroAcksEAX"
|
|
56
|
-
____exports.SoundEax.Environment = "DoodadsEAX"
|
|
57
|
-
____exports.SoundEax.Drums = "KotoDrumsEAX"
|
|
58
|
-
____exports.SoundEax.Attacks = "CombatSoundsEAX"
|
|
59
|
-
____exports.SoundEax.Abilities = "SpellsEAX"
|
|
60
|
-
____exports.SoundEax.Missiles = "MissilesEAX"
|
|
61
|
-
____exports.SoundPreset = {}
|
|
62
|
-
local SoundPreset = ____exports.SoundPreset
|
|
56
|
+
____exports.SoundSettings = {}
|
|
57
|
+
local SoundSettings = ____exports.SoundSettings
|
|
63
58
|
do
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
SoundSettings.UI = {channel = ____exports.SoundChannel.UI, eax = "DefaultEAXON", fadeInRate = 12700, fadeOutRate = 12700}
|
|
60
|
+
SoundSettings.Music = {
|
|
66
61
|
channel = ____exports.SoundChannel.Music,
|
|
67
|
-
eax =
|
|
62
|
+
eax = "DefaultEAXON",
|
|
68
63
|
fadeInRate = 12700,
|
|
69
64
|
fadeOutRate = 12700,
|
|
70
65
|
looping = true
|
|
71
66
|
}
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
SoundSettings.Attack = {channel = ____exports.SoundChannel.Combat, eax = "CombatSoundsEAX", fadeInRate = 10, fadeOutRate = 10}
|
|
68
|
+
SoundSettings.Ability = {
|
|
74
69
|
channel = ____exports.SoundChannel.Animations,
|
|
75
|
-
eax =
|
|
70
|
+
eax = "SpellsEAX",
|
|
76
71
|
stopWhenOutOfRange = true,
|
|
77
72
|
volume = 127,
|
|
78
73
|
fadeInRate = 1,
|
|
@@ -82,9 +77,9 @@ do
|
|
|
82
77
|
maxDistance = 3500,
|
|
83
78
|
distanceCutoff = 3000
|
|
84
79
|
}
|
|
85
|
-
|
|
80
|
+
SoundSettings.AbilityLooping = {
|
|
86
81
|
channel = ____exports.SoundChannel.Birth,
|
|
87
|
-
eax =
|
|
82
|
+
eax = "SpellsEAX",
|
|
88
83
|
looping = true,
|
|
89
84
|
stopWhenOutOfRange = true,
|
|
90
85
|
volume = 127,
|
|
@@ -95,9 +90,9 @@ do
|
|
|
95
90
|
maxDistance = 3000,
|
|
96
91
|
distanceCutoff = 3000
|
|
97
92
|
}
|
|
98
|
-
|
|
93
|
+
SoundSettings.Missile = {
|
|
99
94
|
channel = ____exports.SoundChannel.Animations,
|
|
100
|
-
eax =
|
|
95
|
+
eax = "MissilesEAX",
|
|
101
96
|
stopWhenOutOfRange = true,
|
|
102
97
|
volume = 127,
|
|
103
98
|
fadeInRate = 1,
|
|
@@ -108,6 +103,24 @@ do
|
|
|
108
103
|
distanceCutoff = 3000
|
|
109
104
|
}
|
|
110
105
|
end
|
|
106
|
+
local customSoundPresetDataByLabel = postcompile(function()
|
|
107
|
+
local customSoundPresetDataByLabel = {}
|
|
108
|
+
for ____, soundPreset in ipairs(SoundPreset:getAll()) do
|
|
109
|
+
if soundPreset.isCustom then
|
|
110
|
+
customSoundPresetDataByLabel[soundPreset.id] = {
|
|
111
|
+
filePaths = soundPreset.filePaths,
|
|
112
|
+
volume = soundPreset.volume,
|
|
113
|
+
pitch = soundPreset.pitch,
|
|
114
|
+
channel = soundPreset.channel,
|
|
115
|
+
minimumDistance = soundPreset.minimumDistance,
|
|
116
|
+
maximumDistance = soundPreset.maximumDistance,
|
|
117
|
+
distanceCutoff = soundPreset.distanceCutoff,
|
|
118
|
+
eax = soundPreset.eax
|
|
119
|
+
}
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
return customSoundPresetDataByLabel
|
|
123
|
+
end)
|
|
111
124
|
local function createPresetSound(fileName, preset)
|
|
112
125
|
local ____fileName_1 = fileName
|
|
113
126
|
local ____preset_looping_0 = preset.looping
|
|
@@ -121,7 +134,7 @@ local function createPresetSound(fileName, preset)
|
|
|
121
134
|
true,
|
|
122
135
|
preset.fadeInRate or 12700,
|
|
123
136
|
preset.fadeOutRate or 12700,
|
|
124
|
-
preset.eax or
|
|
137
|
+
preset.eax or "DefaultEAXON"
|
|
125
138
|
)
|
|
126
139
|
setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
|
|
127
140
|
setSoundVolume(sound, preset.volume or 127)
|
|
@@ -144,7 +157,7 @@ local function createPreset3DSound(fileName, preset)
|
|
|
144
157
|
____preset_stopWhenOutOfRange_3,
|
|
145
158
|
preset.fadeInRate or 12700,
|
|
146
159
|
preset.fadeOutRate or 12700,
|
|
147
|
-
preset.eax or
|
|
160
|
+
preset.eax or "DefaultEAXON"
|
|
148
161
|
)
|
|
149
162
|
setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
|
|
150
163
|
setSoundVolume(sound, preset.volume or 127)
|
|
@@ -153,6 +166,53 @@ local function createPreset3DSound(fileName, preset)
|
|
|
153
166
|
setSoundDistanceCutoff(sound, preset.distanceCutoff or 1500)
|
|
154
167
|
return sound
|
|
155
168
|
end
|
|
169
|
+
local function createPreset3DSoundFromLabel(label, preset)
|
|
170
|
+
local customSoundPresetData = customSoundPresetDataByLabel[label]
|
|
171
|
+
if customSoundPresetData == nil then
|
|
172
|
+
local ____label_7 = label
|
|
173
|
+
local ____preset_looping_5 = preset.looping
|
|
174
|
+
if ____preset_looping_5 == nil then
|
|
175
|
+
____preset_looping_5 = false
|
|
176
|
+
end
|
|
177
|
+
local ____preset_stopWhenOutOfRange_6 = preset.stopWhenOutOfRange
|
|
178
|
+
if ____preset_stopWhenOutOfRange_6 == nil then
|
|
179
|
+
____preset_stopWhenOutOfRange_6 = true
|
|
180
|
+
end
|
|
181
|
+
return createSoundFromLabel(
|
|
182
|
+
____label_7,
|
|
183
|
+
____preset_looping_5,
|
|
184
|
+
true,
|
|
185
|
+
____preset_stopWhenOutOfRange_6,
|
|
186
|
+
preset.fadeInRate or 12700,
|
|
187
|
+
preset.fadeOutRate or 12700
|
|
188
|
+
)
|
|
189
|
+
else
|
|
190
|
+
local ____customSoundPresetData_filePaths_index_10 = customSoundPresetData.filePaths[randomInteger(#customSoundPresetData.filePaths - 1) + 1]
|
|
191
|
+
local ____preset_looping_8 = preset.looping
|
|
192
|
+
if ____preset_looping_8 == nil then
|
|
193
|
+
____preset_looping_8 = false
|
|
194
|
+
end
|
|
195
|
+
local ____preset_stopWhenOutOfRange_9 = preset.stopWhenOutOfRange
|
|
196
|
+
if ____preset_stopWhenOutOfRange_9 == nil then
|
|
197
|
+
____preset_stopWhenOutOfRange_9 = true
|
|
198
|
+
end
|
|
199
|
+
local sound = createSound(
|
|
200
|
+
____customSoundPresetData_filePaths_index_10,
|
|
201
|
+
____preset_looping_8,
|
|
202
|
+
true,
|
|
203
|
+
____preset_stopWhenOutOfRange_9,
|
|
204
|
+
preset.fadeInRate or 12700,
|
|
205
|
+
preset.fadeOutRate or 12700,
|
|
206
|
+
customSoundPresetData.eax
|
|
207
|
+
)
|
|
208
|
+
setSoundChannel(sound, customSoundPresetData.channel)
|
|
209
|
+
setSoundVolume(sound, customSoundPresetData.volume)
|
|
210
|
+
setSoundPitch(sound, customSoundPresetData.pitch)
|
|
211
|
+
setSoundDistances(sound, customSoundPresetData.minimumDistance, customSoundPresetData.maximumDistance)
|
|
212
|
+
setSoundDistanceCutoff(sound, customSoundPresetData.distanceCutoff)
|
|
213
|
+
return sound
|
|
214
|
+
end
|
|
215
|
+
end
|
|
156
216
|
____exports.Sound = __TS__Class()
|
|
157
217
|
local Sound = ____exports.Sound
|
|
158
218
|
Sound.name = "Sound"
|
|
@@ -225,6 +285,16 @@ function Sound3D.playOnUnit(self, fileName, preset, unit)
|
|
|
225
285
|
startSound(sound)
|
|
226
286
|
killSoundWhenDone(sound)
|
|
227
287
|
end
|
|
288
|
+
function Sound3D.playFromLabel(self, label, preset, unitOrX, y, z)
|
|
289
|
+
local sound = createPreset3DSoundFromLabel(label, preset)
|
|
290
|
+
if type(unitOrX) ~= "number" then
|
|
291
|
+
attachSoundToUnit(sound, unitOrX.handle)
|
|
292
|
+
else
|
|
293
|
+
setSoundPosition(sound, unitOrX, y or 0, z or 0)
|
|
294
|
+
end
|
|
295
|
+
startSound(sound)
|
|
296
|
+
killSoundWhenDone(sound)
|
|
297
|
+
end
|
|
228
298
|
function Sound3D.createAtPosition(self, fileName, preset, x, y, z)
|
|
229
299
|
if x == nil then
|
|
230
300
|
x = 0
|
package/core/types/timer.d.ts
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
2
|
import { Event } from "../../event";
|
|
3
|
+
import { AbstractDestroyable, Destructor } from "../../destroyable";
|
|
3
4
|
declare const enum TimerPropertyKey {
|
|
4
5
|
HANDLE = 0,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
ARGS_LENGTH = 4
|
|
6
|
+
DESTROY_ON_EXPIRATION = 1,
|
|
7
|
+
CALLBACK = 2,
|
|
8
|
+
ARGS_LENGTH = 3
|
|
9
9
|
}
|
|
10
|
-
export declare class Timer
|
|
10
|
+
export declare class Timer extends AbstractDestroyable {
|
|
11
11
|
private readonly [TimerPropertyKey.HANDLE];
|
|
12
|
-
private [TimerPropertyKey.DESTROYED]?;
|
|
13
12
|
private [TimerPropertyKey.DESTROY_ON_EXPIRATION]?;
|
|
14
13
|
private [TimerPropertyKey.CALLBACK]?;
|
|
15
14
|
private [TimerPropertyKey.ARGS_LENGTH]?;
|
|
16
15
|
private constructor();
|
|
17
16
|
get handle(): jtimer;
|
|
18
17
|
start<Args extends any[]>(timeout: number, periodic: boolean, callback: (...args: Args) => void, ...args: Args): void;
|
|
18
|
+
onDestroy(): Destructor;
|
|
19
19
|
get elapsed(): number;
|
|
20
20
|
get remaining(): number;
|
|
21
21
|
get timeout(): number;
|
|
22
22
|
pause(): void;
|
|
23
23
|
resume(): void;
|
|
24
|
-
destroy(): void;
|
|
25
24
|
static create(): Timer;
|
|
26
25
|
static run<Args extends any[]>(callback: (...args: Args) => void, ...args: Args): void;
|
|
27
26
|
static simple<Args extends any[]>(timeout: number, callback: (...args: Args) => void, ...args: Args): Timer;
|
package/core/types/timer.lua
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__New = ____lualib.__TS__New
|
|
3
3
|
local __TS__Class = ____lualib.__TS__Class
|
|
4
|
+
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
5
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
6
|
local __TS__Promise = ____lualib.__TS__Promise
|
|
6
7
|
local ____exports = {}
|
|
@@ -9,8 +10,8 @@ local Event = ____event.Event
|
|
|
9
10
|
local InitializingEvent = ____event.InitializingEvent
|
|
10
11
|
local ____objectPool = require("util.objectPool")
|
|
11
12
|
local ObjectPool = ____objectPool.ObjectPool
|
|
12
|
-
local
|
|
13
|
-
local
|
|
13
|
+
local ____destroyable = require("destroyable")
|
|
14
|
+
local AbstractDestroyable = ____destroyable.AbstractDestroyable
|
|
14
15
|
local createTimer = CreateTimer
|
|
15
16
|
local timerStart = TimerStart
|
|
16
17
|
local pauseTimer = PauseTimer
|
|
@@ -35,14 +36,14 @@ local timerByHandleId = {}
|
|
|
35
36
|
local function timerSafeCall()
|
|
36
37
|
local timer = timerByHandleId[getHandleId(getExpiredTimer())]
|
|
37
38
|
if timer ~= nil then
|
|
38
|
-
if timer[
|
|
39
|
+
if timer[1] then
|
|
39
40
|
timer:destroy()
|
|
40
41
|
end
|
|
41
|
-
local callback = timer[
|
|
42
|
+
local callback = timer[2]
|
|
42
43
|
if callback ~= nil then
|
|
43
44
|
safeCall(
|
|
44
45
|
callback,
|
|
45
|
-
____unpack(timer,
|
|
46
|
+
____unpack(timer, 3 + 1, 3 + (timer[3] or 0))
|
|
46
47
|
)
|
|
47
48
|
end
|
|
48
49
|
end
|
|
@@ -50,37 +51,33 @@ end
|
|
|
50
51
|
____exports.Timer = __TS__Class()
|
|
51
52
|
local Timer = ____exports.Timer
|
|
52
53
|
Timer.name = "Timer"
|
|
54
|
+
__TS__ClassExtends(Timer, AbstractDestroyable)
|
|
53
55
|
function Timer.prototype.____constructor(self)
|
|
56
|
+
AbstractDestroyable.prototype.____constructor(self)
|
|
54
57
|
self[0] = get()
|
|
55
58
|
timerByHandleId[getHandleId(self[0])] = self
|
|
56
59
|
end
|
|
57
60
|
function Timer.prototype.start(self, timeout, periodic, callback, ...)
|
|
58
|
-
self[
|
|
61
|
+
self[2] = callback
|
|
59
62
|
local argsLength = select("#", ...)
|
|
60
|
-
self[
|
|
63
|
+
self[3] = argsLength
|
|
61
64
|
for i = 1, argsLength do
|
|
62
|
-
self[
|
|
65
|
+
self[3 + i] = (select(i, ...))
|
|
63
66
|
end
|
|
64
67
|
timerStart(self.handle, timeout, periodic, timerSafeCall)
|
|
65
68
|
end
|
|
69
|
+
function Timer.prototype.onDestroy(self)
|
|
70
|
+
local handle = self[0]
|
|
71
|
+
timerByHandleId[getHandleId(handle)] = nil
|
|
72
|
+
release(handle)
|
|
73
|
+
return AbstractDestroyable.prototype.onDestroy(self)
|
|
74
|
+
end
|
|
66
75
|
function Timer.prototype.pause(self)
|
|
67
76
|
pauseTimer(self[0])
|
|
68
77
|
end
|
|
69
78
|
function Timer.prototype.resume(self)
|
|
70
79
|
resumeTimer(self[0])
|
|
71
80
|
end
|
|
72
|
-
function Timer.prototype.destroy(self)
|
|
73
|
-
if self[1] then
|
|
74
|
-
error(
|
|
75
|
-
__TS__New(IllegalStateException, "Double-destroy run for timer"),
|
|
76
|
-
0
|
|
77
|
-
)
|
|
78
|
-
end
|
|
79
|
-
local handle = self[0]
|
|
80
|
-
timerByHandleId[getHandleId(handle)] = nil
|
|
81
|
-
release(handle)
|
|
82
|
-
self[1] = true
|
|
83
|
-
end
|
|
84
81
|
function Timer.create(self)
|
|
85
82
|
return __TS__New(____exports.Timer)
|
|
86
83
|
end
|
|
@@ -89,7 +86,7 @@ function Timer.run(self, callback, ...)
|
|
|
89
86
|
end
|
|
90
87
|
function Timer.simple(self, timeout, callback, ...)
|
|
91
88
|
local timer = __TS__New(____exports.Timer)
|
|
92
|
-
timer[
|
|
89
|
+
timer[1] = true
|
|
93
90
|
timer:start(timeout, false, callback, ...)
|
|
94
91
|
return timer
|
|
95
92
|
end
|
package/core/util.lua
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
local ____lualib = require("lualib_bundle")
|
|
2
|
+
local __TS__StringPadEnd = ____lualib.__TS__StringPadEnd
|
|
1
3
|
local ____exports = {}
|
|
2
4
|
local ns = {}
|
|
3
5
|
do
|
|
@@ -14,7 +16,10 @@ do
|
|
|
14
16
|
if type(id) == "number" then
|
|
15
17
|
return id
|
|
16
18
|
else
|
|
17
|
-
local numid = string.unpack(
|
|
19
|
+
local numid = string.unpack(
|
|
20
|
+
">I4",
|
|
21
|
+
__TS__StringPadEnd(id, 4, "\0")
|
|
22
|
+
)
|
|
18
23
|
return numid
|
|
19
24
|
end
|
|
20
25
|
end
|
|
@@ -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)
|
|
@@ -5,6 +5,7 @@ import { Unit } from "../../internal/unit";
|
|
|
5
5
|
import { AbilityDependentValue } from "../../object-field/ability";
|
|
6
6
|
import { Widget } from "../../../core/types/widget";
|
|
7
7
|
import { AttackType, DamageType, WeaponType } from "../../internal/unit+damage";
|
|
8
|
+
import { CombatClassifications } from "../../object-data/auxiliary/combat-classification";
|
|
8
9
|
export type DamageAbilityBehaviorParameters = {
|
|
9
10
|
damagePerStrength?: AbilityDependentValue<number>;
|
|
10
11
|
damagePerAgility?: AbilityDependentValue<number>;
|
|
@@ -15,6 +16,8 @@ export type DamageAbilityBehaviorParameters = {
|
|
|
15
16
|
};
|
|
16
17
|
export type DamageAreaAbilityBehaviorParameters = DamageAbilityBehaviorParameters & {
|
|
17
18
|
maximumDamage?: AbilityDependentValue<number>;
|
|
19
|
+
areaOfEffect?: AbilityDependentValue<number>;
|
|
20
|
+
allowedTargetCombatClassifications?: AbilityDependentValue<CombatClassifications>;
|
|
18
21
|
};
|
|
19
22
|
declare abstract class DamageAbilityBehavior<T extends DamageAbilityBehaviorParameters = DamageAbilityBehaviorParameters> extends AbilityBehavior {
|
|
20
23
|
protected readonly damage: AbilityDependentValue<number>;
|
|
@@ -82,10 +82,10 @@ function DamageAreaAbilityBehavior.prototype.damageArea(self, caster, x, y)
|
|
|
82
82
|
local parameters = self.parameters
|
|
83
83
|
local targets = Unit.getAllowedTargetsInCollisionRange(
|
|
84
84
|
caster,
|
|
85
|
-
self:resolveCurrentAbilityDependentValue(ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD),
|
|
85
|
+
self:resolveCurrentAbilityDependentValue(parameters and parameters.allowedTargetCombatClassifications or ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD),
|
|
86
86
|
x,
|
|
87
87
|
y,
|
|
88
|
-
self:resolveCurrentAbilityDependentValue(AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD)
|
|
88
|
+
self:resolveCurrentAbilityDependentValue(parameters and parameters.areaOfEffect or AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD)
|
|
89
89
|
)
|
|
90
90
|
local damage = self:calculateDamage(caster)
|
|
91
91
|
local maximumDamage = self:resolveCurrentAbilityDependentValue(parameters and parameters.maximumDamage or 0)
|