warscript 0.0.1-dev.fcc9d08 → 0.0.1-dev.fe0aeea
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 +1 -3
- package/core/types/effect.lua +26 -29
- package/core/types/sound.d.ts +17 -25
- package/core/types/sound.lua +86 -46
- package/core/util.lua +6 -1
- 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 +5 -1
- package/engine/behaviour/ability.lua +18 -4
- package/engine/behaviour/unit.d.ts +2 -0
- package/engine/buff.d.ts +13 -8
- package/engine/buff.lua +81 -50
- package/engine/internal/mechanics/ability-duration.lua +1 -1
- package/engine/internal/unit.d.ts +6 -1
- package/engine/internal/unit.lua +8 -2
- 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 +0 -9
- 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/curse.lua +2 -2
- 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 +4 -4
- 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 +1 -1
- package/engine/object-data/entry/unit-type.lua +11 -11
- 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/objutil/unit.lua +2 -2
- package/package.json +2 -2
- package/utility/reflection.lua +11 -7
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,13 +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 playFromLabel(label: string, preset:
|
|
68
|
-
static createAtPosition(fileName: string, preset:
|
|
69
|
-
static createOnUnit(fileName: string, preset:
|
|
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;
|
|
70
62
|
}
|
package/core/types/sound.lua
CHANGED
|
@@ -5,6 +5,10 @@ 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
|
|
9
13
|
local createSoundFromLabel = CreateSoundFromLabel
|
|
10
14
|
local setSoundPitch = SetSoundPitch
|
|
@@ -49,29 +53,21 @@ ____exports.SoundChannel.Birth = 13
|
|
|
49
53
|
____exports.SoundChannel[____exports.SoundChannel.Birth] = "Birth"
|
|
50
54
|
____exports.SoundChannel.Fire = 14
|
|
51
55
|
____exports.SoundChannel[____exports.SoundChannel.Fire] = "Fire"
|
|
52
|
-
____exports.
|
|
53
|
-
|
|
54
|
-
____exports.SoundEax.Acknowledgements = "HeroAcksEAX"
|
|
55
|
-
____exports.SoundEax.Environment = "DoodadsEAX"
|
|
56
|
-
____exports.SoundEax.Drums = "KotoDrumsEAX"
|
|
57
|
-
____exports.SoundEax.Attacks = "CombatSoundsEAX"
|
|
58
|
-
____exports.SoundEax.Abilities = "SpellsEAX"
|
|
59
|
-
____exports.SoundEax.Missiles = "MissilesEAX"
|
|
60
|
-
____exports.SoundPreset = {}
|
|
61
|
-
local SoundPreset = ____exports.SoundPreset
|
|
56
|
+
____exports.SoundSettings = {}
|
|
57
|
+
local SoundSettings = ____exports.SoundSettings
|
|
62
58
|
do
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
SoundSettings.UI = {channel = ____exports.SoundChannel.UI, eax = "DefaultEAXON", fadeInRate = 12700, fadeOutRate = 12700}
|
|
60
|
+
SoundSettings.Music = {
|
|
65
61
|
channel = ____exports.SoundChannel.Music,
|
|
66
|
-
eax =
|
|
62
|
+
eax = "DefaultEAXON",
|
|
67
63
|
fadeInRate = 12700,
|
|
68
64
|
fadeOutRate = 12700,
|
|
69
65
|
looping = true
|
|
70
66
|
}
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
SoundSettings.Attack = {channel = ____exports.SoundChannel.Combat, eax = "CombatSoundsEAX", fadeInRate = 10, fadeOutRate = 10}
|
|
68
|
+
SoundSettings.Ability = {
|
|
73
69
|
channel = ____exports.SoundChannel.Animations,
|
|
74
|
-
eax =
|
|
70
|
+
eax = "SpellsEAX",
|
|
75
71
|
stopWhenOutOfRange = true,
|
|
76
72
|
volume = 127,
|
|
77
73
|
fadeInRate = 1,
|
|
@@ -81,9 +77,9 @@ do
|
|
|
81
77
|
maxDistance = 3500,
|
|
82
78
|
distanceCutoff = 3000
|
|
83
79
|
}
|
|
84
|
-
|
|
80
|
+
SoundSettings.AbilityLooping = {
|
|
85
81
|
channel = ____exports.SoundChannel.Birth,
|
|
86
|
-
eax =
|
|
82
|
+
eax = "SpellsEAX",
|
|
87
83
|
looping = true,
|
|
88
84
|
stopWhenOutOfRange = true,
|
|
89
85
|
volume = 127,
|
|
@@ -94,9 +90,9 @@ do
|
|
|
94
90
|
maxDistance = 3000,
|
|
95
91
|
distanceCutoff = 3000
|
|
96
92
|
}
|
|
97
|
-
|
|
93
|
+
SoundSettings.Missile = {
|
|
98
94
|
channel = ____exports.SoundChannel.Animations,
|
|
99
|
-
eax =
|
|
95
|
+
eax = "MissilesEAX",
|
|
100
96
|
stopWhenOutOfRange = true,
|
|
101
97
|
volume = 127,
|
|
102
98
|
fadeInRate = 1,
|
|
@@ -107,6 +103,24 @@ do
|
|
|
107
103
|
distanceCutoff = 3000
|
|
108
104
|
}
|
|
109
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)
|
|
110
124
|
local function createPresetSound(fileName, preset)
|
|
111
125
|
local ____fileName_1 = fileName
|
|
112
126
|
local ____preset_looping_0 = preset.looping
|
|
@@ -120,7 +134,7 @@ local function createPresetSound(fileName, preset)
|
|
|
120
134
|
true,
|
|
121
135
|
preset.fadeInRate or 12700,
|
|
122
136
|
preset.fadeOutRate or 12700,
|
|
123
|
-
preset.eax or
|
|
137
|
+
preset.eax or "DefaultEAXON"
|
|
124
138
|
)
|
|
125
139
|
setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
|
|
126
140
|
setSoundVolume(sound, preset.volume or 127)
|
|
@@ -143,7 +157,7 @@ local function createPreset3DSound(fileName, preset)
|
|
|
143
157
|
____preset_stopWhenOutOfRange_3,
|
|
144
158
|
preset.fadeInRate or 12700,
|
|
145
159
|
preset.fadeOutRate or 12700,
|
|
146
|
-
preset.eax or
|
|
160
|
+
preset.eax or "DefaultEAXON"
|
|
147
161
|
)
|
|
148
162
|
setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
|
|
149
163
|
setSoundVolume(sound, preset.volume or 127)
|
|
@@ -153,29 +167,51 @@ local function createPreset3DSound(fileName, preset)
|
|
|
153
167
|
return sound
|
|
154
168
|
end
|
|
155
169
|
local function createPreset3DSoundFromLabel(label, preset)
|
|
156
|
-
local
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
____preset_looping_5 =
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
____preset_stopWhenOutOfRange_6 =
|
|
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
|
|
164
214
|
end
|
|
165
|
-
local sound = createSoundFromLabel(
|
|
166
|
-
____label_7,
|
|
167
|
-
____preset_looping_5,
|
|
168
|
-
true,
|
|
169
|
-
____preset_stopWhenOutOfRange_6,
|
|
170
|
-
preset.fadeInRate or 12700,
|
|
171
|
-
preset.fadeOutRate or 12700
|
|
172
|
-
)
|
|
173
|
-
setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
|
|
174
|
-
setSoundVolume(sound, preset.volume or 127)
|
|
175
|
-
setSoundPitch(sound, preset.pitch or 1)
|
|
176
|
-
setSoundDistances(sound, preset.minDistance or 600, preset.maxDistance or 8000)
|
|
177
|
-
setSoundDistanceCutoff(sound, preset.distanceCutoff or 1500)
|
|
178
|
-
return sound
|
|
179
215
|
end
|
|
180
216
|
____exports.Sound = __TS__Class()
|
|
181
217
|
local Sound = ____exports.Sound
|
|
@@ -249,9 +285,13 @@ function Sound3D.playOnUnit(self, fileName, preset, unit)
|
|
|
249
285
|
startSound(sound)
|
|
250
286
|
killSoundWhenDone(sound)
|
|
251
287
|
end
|
|
252
|
-
function Sound3D.playFromLabel(self, label, preset,
|
|
288
|
+
function Sound3D.playFromLabel(self, label, preset, unitOrX, y, z)
|
|
253
289
|
local sound = createPreset3DSoundFromLabel(label, preset)
|
|
254
|
-
|
|
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
|
|
255
295
|
startSound(sound)
|
|
256
296
|
killSoundWhenDone(sound)
|
|
257
297
|
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
|
|
@@ -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)
|
|
@@ -22,13 +22,17 @@ export declare abstract class AbilityBehavior<Parameters extends {
|
|
|
22
22
|
protected subscribe<T extends boolean | number | string>(value: SubscribableAbilityDependentValue<T>): void;
|
|
23
23
|
protected registerCommandEvent(orderTypeStringId?: string): void;
|
|
24
24
|
get ability(): Ability;
|
|
25
|
+
get unit(): Unit | undefined;
|
|
25
26
|
protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value: AbilityDependentValue<T>): T;
|
|
26
27
|
protected resolveCurrentAbilityDependentValue<T extends boolean | number | string>(value?: AbilityDependentValue<T>): T | undefined;
|
|
27
28
|
protected flashCasterEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
28
29
|
protected flashTargetEffect(widget: Widget, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
29
30
|
protected flashAreaEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
30
31
|
protected flashEffect(x: number, y: number, ...parametersOrDuration: [parameters?: EffectParameters] | [duration?: number, parameters?: EffectParameters]): void;
|
|
31
|
-
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;
|
|
32
36
|
private static MissileLaunchConfig;
|
|
33
37
|
private get missileLaunchConfig();
|
|
34
38
|
protected onCreate(): void;
|
|
@@ -148,13 +148,14 @@ function AbilityBehavior.prototype.flashEffect(self, x, y, ...)
|
|
|
148
148
|
...
|
|
149
149
|
)
|
|
150
150
|
end
|
|
151
|
-
function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget,
|
|
151
|
+
function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrParametersOrDuration, durationOrParameters, parameters)
|
|
152
152
|
if type(xOrWidget) == "number" then
|
|
153
153
|
Effect:flash(
|
|
154
154
|
SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
155
155
|
xOrWidget,
|
|
156
|
-
|
|
157
|
-
|
|
156
|
+
yOrParametersOrDuration,
|
|
157
|
+
durationOrParameters,
|
|
158
|
+
parameters
|
|
158
159
|
)
|
|
159
160
|
else
|
|
160
161
|
local attachmentPoint = SPECIAL_EFFECT_ATTACHMENT_POINT_STRING_FIELD:getValue(self.ability)
|
|
@@ -162,7 +163,8 @@ function AbilityBehavior.prototype.flashSpecialEffect(self, xOrWidget, yOrDurati
|
|
|
162
163
|
SPECIAL_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD:getValue(self.ability, 0),
|
|
163
164
|
xOrWidget,
|
|
164
165
|
attachmentPoint ~= "" and attachmentPoint or "origin",
|
|
165
|
-
|
|
166
|
+
yOrParametersOrDuration,
|
|
167
|
+
durationOrParameters
|
|
166
168
|
)
|
|
167
169
|
end
|
|
168
170
|
end
|
|
@@ -237,6 +239,18 @@ __TS__SetDescriptor(
|
|
|
237
239
|
end},
|
|
238
240
|
true
|
|
239
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
|
+
)
|
|
240
254
|
AbilityBehavior.MissileLaunchConfig = ____class_2
|
|
241
255
|
__TS__SetDescriptor(
|
|
242
256
|
AbilityBehavior.prototype,
|
|
@@ -5,9 +5,11 @@ 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";
|
|
8
9
|
export type UnitBehaviorConstructor<Args extends any[]> = new (unit: Unit, ...args: Args) => UnitBehavior;
|
|
9
10
|
export declare abstract class UnitBehavior<PeriodicActionParameters extends any[] = any[]> extends Behavior<Unit, PeriodicActionParameters> {
|
|
10
11
|
constructor(unit: Unit);
|
|
12
|
+
readonly sourceAbilityBehavior?: AbilityBehavior;
|
|
11
13
|
get unit(): Unit;
|
|
12
14
|
onAutoAttackStart(target: Unit): void;
|
|
13
15
|
onAutoAttackFinish(target: Unit): void;
|
package/engine/buff.d.ts
CHANGED
|
@@ -64,6 +64,7 @@ export type BuffParameters<T extends Buff<any> = Buff> = Buff extends T ? {
|
|
|
64
64
|
durationIncreaseOnAutoAttack?: NumberParameterValueType;
|
|
65
65
|
maximumRemainingDuration?: NumberParameterValueType;
|
|
66
66
|
maximumDuration?: NumberParameterValueType;
|
|
67
|
+
turnsIntoGhost?: BooleanParameterValueType;
|
|
67
68
|
stuns?: BooleanParameterValueType;
|
|
68
69
|
ignoresStunImmunity?: BooleanParameterValueType;
|
|
69
70
|
providesStunImmunity?: BooleanParameterValueType;
|
|
@@ -116,13 +117,14 @@ declare const enum BuffPropertyKey {
|
|
|
116
117
|
MAXIMUM_DAMAGE_DEALT_EVENT_COUNT = 132,
|
|
117
118
|
DAMAGE_RECEIVED_EVENT_COUNT = 133,
|
|
118
119
|
MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT = 134,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
120
|
+
TURNS_INTO_GHOST = 135,
|
|
121
|
+
STUNS = 136,
|
|
122
|
+
IGNORES_STUN_IMMUNITY = 137,
|
|
123
|
+
DISABLES_AUTO_ATTACK = 138,
|
|
124
|
+
PROVIDES_INVULNERABILITY = 139,
|
|
125
|
+
KILLS_ON_EXPIRATION = 140,
|
|
126
|
+
EXPLODES_ON_EXPIRATION = 141,
|
|
127
|
+
MISS_PROBABILITY = 142
|
|
126
128
|
}
|
|
127
129
|
export declare const enum BuffTypeIdSelectionPolicy {
|
|
128
130
|
LEAST_DURATION = 0
|
|
@@ -136,7 +138,7 @@ export type BuffConstructorParameters<AdditionalParameters extends BuffAdditiona
|
|
|
136
138
|
polarity: BuffPolarityParameterType,
|
|
137
139
|
resistanceType: BuffResistanceTypeParameterType,
|
|
138
140
|
...abilityOrParameters: [
|
|
139
|
-
ability
|
|
141
|
+
ability?: Ability,
|
|
140
142
|
parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>
|
|
141
143
|
] | [parameters?: BuffParameters & Omit<AdditionalParameters, keyof BuffParameters>]
|
|
142
144
|
];
|
|
@@ -178,6 +180,7 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
|
|
|
178
180
|
private [BuffPropertyKey.DAMAGE_DEALT_EVENT_COUNT]?;
|
|
179
181
|
private [BuffPropertyKey.MAXIMUM_DAMAGE_RECEIVED_EVENT_COUNT]?;
|
|
180
182
|
private [BuffPropertyKey.DAMAGE_RECEIVED_EVENT_COUNT]?;
|
|
183
|
+
private [BuffPropertyKey.TURNS_INTO_GHOST]?;
|
|
181
184
|
private [BuffPropertyKey.STUNS]?;
|
|
182
185
|
private [BuffPropertyKey.IGNORES_STUN_IMMUNITY]?;
|
|
183
186
|
private [BuffPropertyKey.DISABLES_AUTO_ATTACK]?;
|
|
@@ -231,6 +234,8 @@ export declare class Buff<AdditionalParameters extends Prohibit<Record<string, a
|
|
|
231
234
|
set receivedDamageFactor(receivedDamageFactor: number);
|
|
232
235
|
get armorIncrease(): number;
|
|
233
236
|
set armorIncrease(armorIncrease: number);
|
|
237
|
+
get turnsIntoGhost(): boolean;
|
|
238
|
+
set turnsIntoGhost(turnsIntoGhost: boolean);
|
|
234
239
|
get stuns(): boolean;
|
|
235
240
|
set stuns(stuns: boolean);
|
|
236
241
|
get ignoresStunImmunity(): boolean;
|