warscript 0.0.1-dev.f9efacb → 0.0.1-dev.fa24390
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/attributes.d.ts +5 -0
- package/attributes.lua +8 -1
- package/config.d.ts +5 -0
- package/config.lua +10 -0
- package/core/types/effect.d.ts +14 -6
- package/core/types/effect.lua +131 -35
- package/core/types/order.d.ts +1 -0
- package/core/types/order.lua +11 -1
- package/core/types/sound.d.ts +17 -24
- package/core/types/sound.lua +99 -24
- package/core/types/timer.d.ts +6 -7
- package/core/types/timer.lua +18 -21
- package/core/util.d.ts +1 -1
- package/core/util.lua +12 -1
- package/decl/native.d.ts +840 -786
- package/engine/behaviour/ability/always-enabled.d.ts +7 -0
- package/engine/behaviour/ability/always-enabled.lua +31 -0
- package/engine/behaviour/ability/apply-buff.d.ts +5 -0
- package/engine/behaviour/ability/apply-buff.lua +32 -0
- package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
- package/engine/behaviour/ability/damage.d.ts +9 -3
- package/engine/behaviour/ability/damage.lua +26 -38
- package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
- package/engine/behaviour/ability/emulate-impact.lua +35 -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 +20 -4
- package/engine/behaviour/ability.lua +111 -38
- package/engine/behaviour/unit.d.ts +2 -0
- package/engine/buff.d.ts +62 -42
- package/engine/buff.lua +312 -234
- package/engine/internal/ability.d.ts +15 -2
- package/engine/internal/ability.lua +84 -4
- package/engine/internal/item/ability.lua +106 -0
- package/engine/internal/item.d.ts +4 -3
- package/engine/internal/item.lua +56 -25
- package/engine/internal/mechanics/ability-duration.lua +1 -1
- package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
- package/engine/internal/misc/ability-disable-counter.lua +13 -0
- package/engine/internal/misc/damage-metadata-by-target.d.ts +2 -0
- package/engine/internal/misc/damage-metadata-by-target.lua +5 -0
- package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
- package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
- package/engine/internal/object-data/evasion-probability.d.ts +2 -0
- package/engine/internal/object-data/evasion-probability.lua +16 -0
- package/engine/internal/unit/ability.d.ts +10 -1
- package/engine/internal/unit/ability.lua +36 -14
- 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/ignore-events-items.d.ts +2 -0
- package/engine/internal/unit/ignore-events-items.lua +5 -0
- package/engine/internal/unit/item.lua +6 -12
- package/engine/internal/unit/main-selected.d.ts +6 -0
- package/engine/internal/unit/main-selected.lua +12 -1
- package/engine/internal/unit+damage.d.ts +2 -11
- package/engine/internal/unit+damage.lua +10 -14
- package/engine/internal/unit+spellSteal.lua +1 -2
- package/engine/internal/unit.d.ts +25 -5
- package/engine/internal/unit.lua +195 -61
- package/engine/internal/utility.lua +12 -0
- package/engine/lightning.d.ts +12 -5
- package/engine/lightning.lua +48 -14
- package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
- package/engine/object-data/auxiliary/animation-name.lua +16 -0
- package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
- package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
- package/engine/object-data/auxiliary/attack-type.d.ts +7 -8
- package/engine/object-data/auxiliary/attack-type.lua +42 -0
- package/engine/object-data/auxiliary/movement-type.d.ts +7 -7
- package/engine/object-data/auxiliary/movement-type.lua +22 -0
- package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
- package/engine/object-data/auxiliary/sound-eax.lua +2 -0
- package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
- package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
- package/engine/object-data/auxiliary/unit-attribute.d.ts +6 -0
- package/engine/object-data/auxiliary/unit-attribute.lua +9 -0
- package/engine/object-data/entry/ability-type/berserk.d.ts +2 -0
- package/engine/object-data/entry/ability-type/berserk.lua +13 -0
- package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
- package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
- package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
- package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
- package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
- package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
- package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
- package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
- package/engine/object-data/entry/ability-type/permanent-invisibility.d.ts +8 -0
- package/engine/object-data/entry/ability-type/permanent-invisibility.lua +26 -0
- package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
- package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
- package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
- package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
- package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
- package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
- package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
- package/engine/object-data/entry/ability-type/slow-poison.d.ts +10 -0
- package/engine/object-data/entry/ability-type/slow-poison.lua +58 -0
- package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
- package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
- package/engine/object-data/entry/ability-type/web.d.ts +12 -0
- package/engine/object-data/entry/ability-type/web.lua +52 -0
- package/engine/object-data/entry/ability-type.d.ts +19 -17
- package/engine/object-data/entry/ability-type.lua +89 -33
- package/engine/object-data/entry/buff-type/applicable.lua +18 -37
- package/engine/object-data/entry/buff-type.d.ts +6 -12
- package/engine/object-data/entry/buff-type.lua +13 -29
- package/engine/object-data/entry/destructible-type.d.ts +1 -1
- package/engine/object-data/entry/item-type.d.ts +3 -1
- package/engine/object-data/entry/item-type.lua +15 -2
- package/engine/object-data/entry/lightning-type.d.ts +1 -1
- package/engine/object-data/entry/sound-preset.d.ts +33 -0
- package/engine/object-data/entry/sound-preset.lua +140 -0
- package/engine/object-data/entry/unit-type.d.ts +10 -3
- package/engine/object-data/entry/unit-type.lua +155 -92
- package/engine/object-data/entry/upgrade.d.ts +1 -1
- package/engine/object-data/entry/upgrade.lua +4 -4
- package/engine/object-data/entry.d.ts +16 -14
- package/engine/object-data/entry.lua +60 -32
- package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
- package/engine/object-field/ability.d.ts +10 -4
- package/engine/object-field/ability.lua +3 -0
- package/engine/object-field/unit.d.ts +46 -3
- package/engine/object-field/unit.lua +173 -7
- package/engine/object-field.d.ts +11 -3
- package/engine/object-field.lua +162 -76
- package/engine/standard/entries/buff-type.d.ts +3 -0
- package/engine/standard/entries/buff-type.lua +3 -0
- package/engine/standard/entries/sound-preset.d.ts +10 -0
- package/engine/standard/entries/sound-preset.lua +10 -0
- package/engine/standard/fields/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/objutil/buff.lua +1 -2
- package/objutil/unit.lua +8 -0
- package/package.json +2 -2
- package/utility/arrays.d.ts +9 -1
- package/utility/arrays.lua +37 -3
- package/utility/functions.d.ts +1 -0
- package/utility/functions.lua +1 -0
- package/utility/lazy.d.ts +2 -0
- package/utility/lazy.lua +14 -0
- package/utility/linked-set.d.ts +1 -0
- package/utility/linked-set.lua +3 -0
- package/utility/lua-maps.d.ts +3 -0
- package/utility/lua-maps.lua +16 -0
- package/utility/lua-sets.d.ts +1 -0
- package/utility/lua-sets.lua +3 -0
- package/utility/reflection.lua +11 -7
package/attributes.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/** @noSelfInFile */
|
|
2
|
+
declare const marker: {};
|
|
2
3
|
export type Attribute<T> = {
|
|
3
4
|
readonly __attribute: unique symbol;
|
|
4
5
|
readonly __type: T;
|
|
6
|
+
readonly __marker: typeof marker;
|
|
5
7
|
} & symbol;
|
|
8
|
+
export declare const attribute: <T>() => Attribute<T>;
|
|
9
|
+
export declare const isAttribute: (value: unknown) => value is Attribute<unknown>;
|
|
6
10
|
export declare namespace Attribute {
|
|
7
11
|
const create: <T>() => Attribute<T>;
|
|
8
12
|
}
|
|
@@ -10,3 +14,4 @@ export declare class AttributesHolder {
|
|
|
10
14
|
readonly get: (<T>(attribute: Attribute<T>) => T | undefined) & LuaExtension<"TableGetMethod">;
|
|
11
15
|
readonly set: (<T>(attribute: Attribute<T>, value: T | undefined) => void) & LuaExtension<"TableSetMethod">;
|
|
12
16
|
}
|
|
17
|
+
export {};
|
package/attributes.lua
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
local ____lualib = require("lualib_bundle")
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local ____exports = {}
|
|
4
|
+
local marker = {}
|
|
5
|
+
____exports.attribute = function()
|
|
6
|
+
return {__marker = marker}
|
|
7
|
+
end
|
|
8
|
+
____exports.isAttribute = function(value)
|
|
9
|
+
return type(value) == "table" and rawget(value, "__marker") == marker
|
|
10
|
+
end
|
|
4
11
|
____exports.Attribute = {}
|
|
5
12
|
local Attribute = ____exports.Attribute
|
|
6
13
|
do
|
|
7
14
|
Attribute.create = function()
|
|
8
|
-
return {}
|
|
15
|
+
return {__marker = marker}
|
|
9
16
|
end
|
|
10
17
|
end
|
|
11
18
|
____exports.AttributesHolder = __TS__Class()
|
package/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
|
@@ -4,15 +4,23 @@ import { Widget } from "./widget";
|
|
|
4
4
|
import { PlayerColor } from "./playerColor";
|
|
5
5
|
declare const enum EffectPropertyKey {
|
|
6
6
|
COLOR = 100,
|
|
7
|
-
PITCH = 101
|
|
7
|
+
PITCH = 101,
|
|
8
|
+
ROLL = 102
|
|
8
9
|
}
|
|
9
10
|
export type EffectParameters = {
|
|
11
|
+
readonly delay?: number;
|
|
10
12
|
readonly scale?: number;
|
|
11
13
|
readonly color?: PlayerColor;
|
|
14
|
+
readonly pitch?: number;
|
|
15
|
+
readonly roll?: number;
|
|
16
|
+
readonly detached?: boolean;
|
|
17
|
+
readonly zOffset?: number;
|
|
18
|
+
readonly scaleZOffset?: boolean;
|
|
12
19
|
};
|
|
13
20
|
export declare class Effect extends Handle<jeffect> {
|
|
14
21
|
private [EffectPropertyKey.COLOR]?;
|
|
15
22
|
private [EffectPropertyKey.PITCH]?;
|
|
23
|
+
private [EffectPropertyKey.ROLL]?;
|
|
16
24
|
protected onDestroy(): HandleDestructor;
|
|
17
25
|
get color(): PlayerColor;
|
|
18
26
|
set color(color: PlayerColor);
|
|
@@ -20,12 +28,12 @@ export declare class Effect extends Handle<jeffect> {
|
|
|
20
28
|
set scale(scale: number);
|
|
21
29
|
get pitch(): number;
|
|
22
30
|
set pitch(pitch: number);
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
get roll(): number;
|
|
32
|
+
set roll(roll: number);
|
|
33
|
+
static create<T extends Effect>(this: typeof Effect & (new (handle: jeffect) => T), modelPath: string, xOrWidget: number | Widget, yOrAttachmentPoint?: number | string, parameters?: EffectParameters): T;
|
|
25
34
|
static flash(modelPath: string, ...args: [
|
|
26
|
-
...pointOrWidget: [x: number, y: number] | [widget: Widget, attachmentPoint
|
|
27
|
-
...parametersOrDuration: [
|
|
35
|
+
...pointOrWidget: [x: number, y: number] | [widget: Widget, attachmentPoint?: string],
|
|
36
|
+
...parametersOrDuration: [parametersOrDuration?: EffectParameters | number] | [duration?: number, parameters?: EffectParameters]
|
|
28
37
|
]): void;
|
|
29
|
-
static flashTarget(model: string, target: Widget, attachPoint: string, duration?: number): void;
|
|
30
38
|
}
|
|
31
39
|
export {};
|
package/core/types/effect.lua
CHANGED
|
@@ -2,8 +2,9 @@ local ____lualib = require("lualib_bundle")
|
|
|
2
2
|
local __TS__Class = ____lualib.__TS__Class
|
|
3
3
|
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
4
4
|
local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
|
|
5
|
+
local __TS__InstanceOf = ____lualib.__TS__InstanceOf
|
|
5
6
|
local ____exports = {}
|
|
6
|
-
local dummyPlayer
|
|
7
|
+
local dummyPlayer, addSpecialEffectInternal, flash
|
|
7
8
|
local ____handle = require("core.types.handle")
|
|
8
9
|
local Handle = ____handle.Handle
|
|
9
10
|
local ____playerColor = require("core.types.playerColor")
|
|
@@ -12,6 +13,8 @@ local ____player = require("core.types.player")
|
|
|
12
13
|
local Player = ____player.Player
|
|
13
14
|
local ____timer = require("core.types.timer")
|
|
14
15
|
local Timer = ____timer.Timer
|
|
16
|
+
local ____unit = require("engine.internal.unit")
|
|
17
|
+
local Unit = ____unit.Unit
|
|
15
18
|
local ____pairs = _G.pairs
|
|
16
19
|
local select = _G.select
|
|
17
20
|
local mathRad = math.rad
|
|
@@ -22,10 +25,28 @@ local getSpecialEffectScale = BlzGetSpecialEffectScale
|
|
|
22
25
|
local playSpecialEffect = BlzPlaySpecialEffect
|
|
23
26
|
local setSpecialEffectScale = BlzSetSpecialEffectScale
|
|
24
27
|
local setSpecialEffectPitch = BlzSetSpecialEffectPitch
|
|
28
|
+
local setSpecialEffectRoll = BlzSetSpecialEffectRoll
|
|
25
29
|
local setSpecialEffectColorByPlayer = BlzSetSpecialEffectColorByPlayer
|
|
26
30
|
local specialEffectAddSubAnimation = BlzSpecialEffectAddSubAnimation
|
|
27
31
|
local specialEffectClearSubAnimations = BlzSpecialEffectClearSubAnimations
|
|
28
32
|
local specialEffectRemoveSubAnimation = BlzSpecialEffectRemoveSubAnimation
|
|
33
|
+
local setSpecialEffectZ = BlzSetSpecialEffectZ
|
|
34
|
+
local getLocationZ = GetLocationZ
|
|
35
|
+
local getUnitZ = BlzGetUnitZ
|
|
36
|
+
local moveLocation = MoveLocation
|
|
37
|
+
local location = Location(0, 0)
|
|
38
|
+
local function setSpecialEffectPitchDegrees(effect, pitch)
|
|
39
|
+
setSpecialEffectPitch(
|
|
40
|
+
effect,
|
|
41
|
+
-mathRad(pitch)
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
local function setSpecialEffectRollDegrees(effect, roll)
|
|
45
|
+
setSpecialEffectRoll(
|
|
46
|
+
effect,
|
|
47
|
+
-mathRad(roll)
|
|
48
|
+
)
|
|
49
|
+
end
|
|
29
50
|
local animTypeByAnimationName = {
|
|
30
51
|
attack = ANIM_TYPE_ATTACK,
|
|
31
52
|
birth = ANIM_TYPE_BIRTH,
|
|
@@ -97,11 +118,19 @@ local function setSpecialEffectColor(effect, color)
|
|
|
97
118
|
setSpecialEffectColorByPlayer(effect, dummyPlayer.handle)
|
|
98
119
|
dummyPlayer.color = dummyColor
|
|
99
120
|
end
|
|
100
|
-
local setters = {scale = setSpecialEffectScale, color = setSpecialEffectColor}
|
|
121
|
+
local setters = {scale = setSpecialEffectScale, color = setSpecialEffectColor, pitch = setSpecialEffectPitchDegrees, roll = setSpecialEffectRollDegrees}
|
|
122
|
+
local setterProperties = {"scale", "color", "pitch", "roll"}
|
|
101
123
|
dummyPlayer = Player.neutralExtra
|
|
102
124
|
local temporaryEffects = {}
|
|
103
125
|
local temporaryEffectsDurations = {}
|
|
104
126
|
local temporaryEffectsCount = 0
|
|
127
|
+
local delayedEffectsModelPath = {}
|
|
128
|
+
local delayedEffectsXOrWidget = {}
|
|
129
|
+
local delayedEffectsYOrAttachmentPoint = {}
|
|
130
|
+
local delayedEffectsDuration = {}
|
|
131
|
+
local delayedEffectsParameters = {}
|
|
132
|
+
local delayedEffectsDelay = {}
|
|
133
|
+
local delayedEffectsCount = 0
|
|
105
134
|
local period = 1 / 32
|
|
106
135
|
Timer.onPeriod[period]:addListener(function()
|
|
107
136
|
local i = 1
|
|
@@ -110,12 +139,36 @@ Timer.onPeriod[period]:addListener(function()
|
|
|
110
139
|
if duration <= 0 then
|
|
111
140
|
destroyEffect(temporaryEffects[i])
|
|
112
141
|
temporaryEffects[i] = temporaryEffects[temporaryEffectsCount]
|
|
142
|
+
temporaryEffectsDurations[i] = temporaryEffectsDurations[temporaryEffectsCount]
|
|
113
143
|
temporaryEffectsCount = temporaryEffectsCount - 1
|
|
114
144
|
else
|
|
115
145
|
temporaryEffectsDurations[i] = duration - period
|
|
116
146
|
i = i + 1
|
|
117
147
|
end
|
|
118
148
|
end
|
|
149
|
+
i = 1
|
|
150
|
+
while i <= delayedEffectsCount do
|
|
151
|
+
local delay = delayedEffectsDelay[i]
|
|
152
|
+
if delay <= 0 then
|
|
153
|
+
flash(
|
|
154
|
+
delayedEffectsModelPath[i],
|
|
155
|
+
delayedEffectsXOrWidget[i],
|
|
156
|
+
delayedEffectsYOrAttachmentPoint[i],
|
|
157
|
+
delayedEffectsDuration[i],
|
|
158
|
+
delayedEffectsParameters[i]
|
|
159
|
+
)
|
|
160
|
+
delayedEffectsModelPath[i] = delayedEffectsModelPath[delayedEffectsCount]
|
|
161
|
+
delayedEffectsXOrWidget[i] = delayedEffectsXOrWidget[delayedEffectsCount]
|
|
162
|
+
delayedEffectsYOrAttachmentPoint[i] = delayedEffectsYOrAttachmentPoint[delayedEffectsCount]
|
|
163
|
+
delayedEffectsDuration[i] = delayedEffectsDuration[delayedEffectsCount]
|
|
164
|
+
delayedEffectsParameters[i] = delayedEffectsParameters[delayedEffectsCount]
|
|
165
|
+
delayedEffectsDelay[i] = delayedEffectsDelay[delayedEffectsCount]
|
|
166
|
+
delayedEffectsCount = delayedEffectsCount - 1
|
|
167
|
+
else
|
|
168
|
+
delayedEffectsDelay[i] = delay - period
|
|
169
|
+
i = i + 1
|
|
170
|
+
end
|
|
171
|
+
end
|
|
119
172
|
end)
|
|
120
173
|
____exports.Effect = __TS__Class()
|
|
121
174
|
local Effect = ____exports.Effect
|
|
@@ -125,49 +178,44 @@ function Effect.prototype.onDestroy(self)
|
|
|
125
178
|
destroyEffect(self.handle)
|
|
126
179
|
return Handle.prototype.onDestroy(self)
|
|
127
180
|
end
|
|
128
|
-
function Effect.create(self,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
|
133
189
|
end
|
|
134
190
|
function Effect.flash(self, modelPath, xOrWidget, yOrOrAttachmentPoint, parametersOrDuration, parameters)
|
|
135
191
|
if type(parametersOrDuration) ~= "number" then
|
|
136
192
|
parameters = parametersOrDuration
|
|
137
193
|
parametersOrDuration = nil
|
|
138
194
|
end
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
temporaryEffects[temporaryEffectsCount] = effect
|
|
148
|
-
temporaryEffectsDurations[temporaryEffectsCount] = parametersOrDuration
|
|
195
|
+
if parameters and (parameters.delay or 0) > 0 then
|
|
196
|
+
delayedEffectsCount = delayedEffectsCount + 1
|
|
197
|
+
delayedEffectsModelPath[delayedEffectsCount] = modelPath
|
|
198
|
+
delayedEffectsXOrWidget[delayedEffectsCount] = xOrWidget
|
|
199
|
+
delayedEffectsYOrAttachmentPoint[delayedEffectsCount] = yOrOrAttachmentPoint
|
|
200
|
+
delayedEffectsDuration[delayedEffectsCount] = parametersOrDuration
|
|
201
|
+
delayedEffectsParameters[delayedEffectsCount] = parameters
|
|
202
|
+
delayedEffectsDelay[delayedEffectsCount] = parameters.delay
|
|
149
203
|
return
|
|
150
204
|
end
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
temporaryEffects[temporaryEffectsCount] = effect
|
|
159
|
-
temporaryEffectsDurations[temporaryEffectsCount] = duration
|
|
160
|
-
else
|
|
161
|
-
destroyEffect(effect)
|
|
162
|
-
end
|
|
163
|
-
end
|
|
205
|
+
flash(
|
|
206
|
+
modelPath,
|
|
207
|
+
xOrWidget,
|
|
208
|
+
yOrOrAttachmentPoint,
|
|
209
|
+
parametersOrDuration,
|
|
210
|
+
parameters
|
|
211
|
+
)
|
|
164
212
|
end
|
|
165
213
|
__TS__SetDescriptor(
|
|
166
214
|
Effect.prototype,
|
|
167
215
|
"color",
|
|
168
216
|
{
|
|
169
217
|
get = function(self)
|
|
170
|
-
return self[100] or PlayerColor.
|
|
218
|
+
return self[100] or PlayerColor.red
|
|
171
219
|
end,
|
|
172
220
|
set = function(self, color)
|
|
173
221
|
setSpecialEffectColor(self.handle, color)
|
|
@@ -197,13 +245,61 @@ __TS__SetDescriptor(
|
|
|
197
245
|
return self[101] or 0
|
|
198
246
|
end,
|
|
199
247
|
set = function(self, pitch)
|
|
200
|
-
|
|
201
|
-
self.handle,
|
|
202
|
-
-mathRad(pitch)
|
|
203
|
-
)
|
|
248
|
+
setSpecialEffectPitchDegrees(self.handle, pitch)
|
|
204
249
|
self[101] = pitch
|
|
205
250
|
end
|
|
206
251
|
},
|
|
207
252
|
true
|
|
208
253
|
)
|
|
254
|
+
__TS__SetDescriptor(
|
|
255
|
+
Effect.prototype,
|
|
256
|
+
"roll",
|
|
257
|
+
{
|
|
258
|
+
get = function(self)
|
|
259
|
+
return self[102] or 0
|
|
260
|
+
end,
|
|
261
|
+
set = function(self, roll)
|
|
262
|
+
setSpecialEffectRollDegrees(self.handle, roll)
|
|
263
|
+
self[102] = roll
|
|
264
|
+
end
|
|
265
|
+
},
|
|
266
|
+
true
|
|
267
|
+
)
|
|
268
|
+
addSpecialEffectInternal = function(modelPath, xOrWidget, yOrAttachmentPoint, parameters)
|
|
269
|
+
local coordinatesProvided = type(xOrWidget) == "number"
|
|
270
|
+
local isPositional = coordinatesProvided or (parameters and parameters.detached) == true
|
|
271
|
+
local x = not isPositional and 0 or (coordinatesProvided and xOrWidget or xOrWidget.x)
|
|
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")
|
|
274
|
+
if parameters ~= nil then
|
|
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)
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
if isPositional and parameters.zOffset ~= nil then
|
|
285
|
+
moveLocation(location, x, y)
|
|
286
|
+
local z = __TS__InstanceOf(xOrWidget, Unit) and getLocationZ(location) + xOrWidget.flyHeight or getLocationZ(location)
|
|
287
|
+
setSpecialEffectZ(
|
|
288
|
+
effect,
|
|
289
|
+
z + parameters.zOffset * (parameters.scaleZOffset and getSpecialEffectScale(effect) or 1)
|
|
290
|
+
)
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
return effect
|
|
294
|
+
end
|
|
295
|
+
flash = function(modelPath, xOrWidget, yOrAttachmentPoint, duration, parameters)
|
|
296
|
+
local effect = addSpecialEffectInternal(modelPath, xOrWidget, yOrAttachmentPoint, parameters)
|
|
297
|
+
if duration ~= nil and duration > 0 then
|
|
298
|
+
temporaryEffectsCount = temporaryEffectsCount + 1
|
|
299
|
+
temporaryEffects[temporaryEffectsCount] = effect
|
|
300
|
+
temporaryEffectsDurations[temporaryEffectsCount] = duration
|
|
301
|
+
return
|
|
302
|
+
end
|
|
303
|
+
destroyEffect(effect)
|
|
304
|
+
end
|
|
209
305
|
return ____exports
|
package/core/types/order.d.ts
CHANGED
package/core/types/order.lua
CHANGED
|
@@ -3,16 +3,25 @@ local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
|
|
|
3
3
|
local ____exports = {}
|
|
4
4
|
local ____unit = require("core.types.unit")
|
|
5
5
|
local Unit = ____unit.Unit
|
|
6
|
+
local ____game = require("core.game")
|
|
7
|
+
local elapsedTime = ____game.elapsedTime
|
|
6
8
|
local getUnitCurrentOrder = GetUnitCurrentOrder
|
|
7
9
|
local orders = setmetatable({}, {__mode = "k"})
|
|
8
10
|
Unit.onImmediateOrder:addListener(function(unit, orderId)
|
|
9
|
-
orders[unit] = {
|
|
11
|
+
orders[unit] = {
|
|
12
|
+
id = orderId,
|
|
13
|
+
startX = unit.x,
|
|
14
|
+
startY = unit.y,
|
|
15
|
+
issueTime = elapsedTime(),
|
|
16
|
+
type = "immediate"
|
|
17
|
+
}
|
|
10
18
|
end)
|
|
11
19
|
Unit.onPointOrder:addListener(function(unit, orderId, x, y)
|
|
12
20
|
orders[unit] = {
|
|
13
21
|
id = orderId,
|
|
14
22
|
startX = unit.x,
|
|
15
23
|
startY = unit.y,
|
|
24
|
+
issueTime = elapsedTime(),
|
|
16
25
|
type = "point",
|
|
17
26
|
targetX = x,
|
|
18
27
|
targetY = y
|
|
@@ -23,6 +32,7 @@ Unit.onTargetOrder:addListener(function(unit, orderId, target)
|
|
|
23
32
|
id = orderId,
|
|
24
33
|
startX = unit.x,
|
|
25
34
|
startY = unit.y,
|
|
35
|
+
issueTime = elapsedTime(),
|
|
26
36
|
type = "target",
|
|
27
37
|
target = target
|
|
28
38
|
}
|
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,29 @@ 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)
|
|
124
|
+
---
|
|
125
|
+
-- @internal For use by internal systems only.
|
|
126
|
+
____exports.isSoundLabelCustom = function(label)
|
|
127
|
+
return customSoundPresetDataByLabel[label] ~= nil
|
|
128
|
+
end
|
|
111
129
|
local function createPresetSound(fileName, preset)
|
|
112
130
|
local ____fileName_1 = fileName
|
|
113
131
|
local ____preset_looping_0 = preset.looping
|
|
@@ -121,7 +139,7 @@ local function createPresetSound(fileName, preset)
|
|
|
121
139
|
true,
|
|
122
140
|
preset.fadeInRate or 12700,
|
|
123
141
|
preset.fadeOutRate or 12700,
|
|
124
|
-
preset.eax or
|
|
142
|
+
preset.eax or "DefaultEAXON"
|
|
125
143
|
)
|
|
126
144
|
setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
|
|
127
145
|
setSoundVolume(sound, preset.volume or 127)
|
|
@@ -144,7 +162,7 @@ local function createPreset3DSound(fileName, preset)
|
|
|
144
162
|
____preset_stopWhenOutOfRange_3,
|
|
145
163
|
preset.fadeInRate or 12700,
|
|
146
164
|
preset.fadeOutRate or 12700,
|
|
147
|
-
preset.eax or
|
|
165
|
+
preset.eax or "DefaultEAXON"
|
|
148
166
|
)
|
|
149
167
|
setSoundChannel(sound, preset.channel or ____exports.SoundChannel.General)
|
|
150
168
|
setSoundVolume(sound, preset.volume or 127)
|
|
@@ -153,6 +171,53 @@ local function createPreset3DSound(fileName, preset)
|
|
|
153
171
|
setSoundDistanceCutoff(sound, preset.distanceCutoff or 1500)
|
|
154
172
|
return sound
|
|
155
173
|
end
|
|
174
|
+
local function createPreset3DSoundFromLabel(label, preset)
|
|
175
|
+
local customSoundPresetData = customSoundPresetDataByLabel[label]
|
|
176
|
+
if customSoundPresetData == nil then
|
|
177
|
+
local ____label_7 = label
|
|
178
|
+
local ____preset_looping_5 = preset.looping
|
|
179
|
+
if ____preset_looping_5 == nil then
|
|
180
|
+
____preset_looping_5 = false
|
|
181
|
+
end
|
|
182
|
+
local ____preset_stopWhenOutOfRange_6 = preset.stopWhenOutOfRange
|
|
183
|
+
if ____preset_stopWhenOutOfRange_6 == nil then
|
|
184
|
+
____preset_stopWhenOutOfRange_6 = true
|
|
185
|
+
end
|
|
186
|
+
return createSoundFromLabel(
|
|
187
|
+
____label_7,
|
|
188
|
+
____preset_looping_5,
|
|
189
|
+
true,
|
|
190
|
+
____preset_stopWhenOutOfRange_6,
|
|
191
|
+
preset.fadeInRate or 12700,
|
|
192
|
+
preset.fadeOutRate or 12700
|
|
193
|
+
)
|
|
194
|
+
else
|
|
195
|
+
local ____customSoundPresetData_filePaths_index_10 = customSoundPresetData.filePaths[randomInteger(#customSoundPresetData.filePaths - 1) + 1]
|
|
196
|
+
local ____preset_looping_8 = preset.looping
|
|
197
|
+
if ____preset_looping_8 == nil then
|
|
198
|
+
____preset_looping_8 = false
|
|
199
|
+
end
|
|
200
|
+
local ____preset_stopWhenOutOfRange_9 = preset.stopWhenOutOfRange
|
|
201
|
+
if ____preset_stopWhenOutOfRange_9 == nil then
|
|
202
|
+
____preset_stopWhenOutOfRange_9 = true
|
|
203
|
+
end
|
|
204
|
+
local sound = createSound(
|
|
205
|
+
____customSoundPresetData_filePaths_index_10,
|
|
206
|
+
____preset_looping_8,
|
|
207
|
+
true,
|
|
208
|
+
____preset_stopWhenOutOfRange_9,
|
|
209
|
+
preset.fadeInRate or 12700,
|
|
210
|
+
preset.fadeOutRate or 12700,
|
|
211
|
+
customSoundPresetData.eax
|
|
212
|
+
)
|
|
213
|
+
setSoundChannel(sound, customSoundPresetData.channel)
|
|
214
|
+
setSoundVolume(sound, customSoundPresetData.volume)
|
|
215
|
+
setSoundPitch(sound, customSoundPresetData.pitch)
|
|
216
|
+
setSoundDistances(sound, customSoundPresetData.minimumDistance, customSoundPresetData.maximumDistance)
|
|
217
|
+
setSoundDistanceCutoff(sound, customSoundPresetData.distanceCutoff)
|
|
218
|
+
return sound
|
|
219
|
+
end
|
|
220
|
+
end
|
|
156
221
|
____exports.Sound = __TS__Class()
|
|
157
222
|
local Sound = ____exports.Sound
|
|
158
223
|
Sound.name = "Sound"
|
|
@@ -225,6 +290,16 @@ function Sound3D.playOnUnit(self, fileName, preset, unit)
|
|
|
225
290
|
startSound(sound)
|
|
226
291
|
killSoundWhenDone(sound)
|
|
227
292
|
end
|
|
293
|
+
function Sound3D.playFromLabel(self, label, preset, unitOrX, y, z)
|
|
294
|
+
local sound = createPreset3DSoundFromLabel(label, preset)
|
|
295
|
+
if type(unitOrX) ~= "number" then
|
|
296
|
+
attachSoundToUnit(sound, unitOrX.handle)
|
|
297
|
+
else
|
|
298
|
+
setSoundPosition(sound, unitOrX, y or 0, z or 0)
|
|
299
|
+
end
|
|
300
|
+
startSound(sound)
|
|
301
|
+
killSoundWhenDone(sound)
|
|
302
|
+
end
|
|
228
303
|
function Sound3D.createAtPosition(self, fileName, preset, x, y, z)
|
|
229
304
|
if x == nil then
|
|
230
305
|
x = 0
|