warscript 0.0.1-dev.65d0014 → 0.0.1-dev.66ce6c9

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.
Files changed (41) hide show
  1. package/config.d.ts +5 -0
  2. package/config.lua +10 -0
  3. package/core/types/sound.d.ts +1 -0
  4. package/core/types/sound.lua +36 -2
  5. package/core/util.lua +6 -1
  6. package/engine/behaviour/ability.d.ts +1 -0
  7. package/engine/behaviour/ability.lua +12 -0
  8. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  9. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  10. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  11. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  12. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  13. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  14. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  15. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  16. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  17. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  18. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  19. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  20. package/engine/object-data/entry/ability-type.d.ts +8 -6
  21. package/engine/object-data/entry/ability-type.lua +54 -15
  22. package/engine/object-data/entry/buff-type/applicable.lua +4 -4
  23. package/engine/object-data/entry/buff-type.d.ts +1 -1
  24. package/engine/object-data/entry/buff-type.lua +2 -2
  25. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  26. package/engine/object-data/entry/item-type.d.ts +1 -1
  27. package/engine/object-data/entry/item-type.lua +4 -4
  28. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  29. package/engine/object-data/entry/sound-preset.d.ts +16 -0
  30. package/engine/object-data/entry/sound-preset.lua +36 -0
  31. package/engine/object-data/entry/unit-type.d.ts +8 -1
  32. package/engine/object-data/entry/unit-type.lua +61 -8
  33. package/engine/object-data/entry/upgrade.d.ts +1 -1
  34. package/engine/object-data/entry/upgrade.lua +4 -4
  35. package/engine/object-data/entry.d.ts +16 -14
  36. package/engine/object-data/entry.lua +60 -32
  37. package/engine/standard/entries/sound-preset.d.ts +10 -0
  38. package/engine/standard/entries/sound-preset.lua +10 -0
  39. package/objutil/unit.lua +8 -0
  40. package/package.json +2 -2
  41. package/utility/reflection.lua +11 -7
package/config.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /** @noSelfInFile */
2
+ export declare class WarscriptConfig {
3
+ private constructor();
4
+ static AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH: boolean;
5
+ }
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
@@ -64,6 +64,7 @@ export declare class Sound extends Handle<jsound, [fadeOut?: boolean]> {
64
64
  export declare class Sound3D extends Sound {
65
65
  static playAtPosition(fileName: string, preset: Sound3DPreset, x?: number, y?: number, z?: number): void;
66
66
  static playOnUnit(fileName: string, preset: Sound3DPreset, unit: Unit): void;
67
+ static playFromLabel(label: string, preset: Sound3DPreset, ...positionOrUnit: [Unit] | [number, number, number?]): void;
67
68
  static createAtPosition(fileName: string, preset: Sound3DPreset, x?: number, y?: number, z?: number): Sound3D;
68
69
  static createOnUnit(fileName: string, preset: Sound3DPreset, unit: Unit): Sound3D;
69
70
  }
@@ -6,14 +6,13 @@ local ____exports = {}
6
6
  local ____handle = require("core.types.handle")
7
7
  local Handle = ____handle.Handle
8
8
  local createSound = CreateSound
9
+ local createSoundFromLabel = CreateSoundFromLabel
9
10
  local setSoundPitch = SetSoundPitch
10
11
  local setSoundChannel = SetSoundChannel
11
12
  local setSoundPosition = SetSoundPosition
12
13
  local setSoundVolume = SetSoundVolume
13
14
  local setSoundDistances = SetSoundDistances
14
15
  local setSoundDistanceCutoff = SetSoundDistanceCutoff
15
- local setSoundConeAngles = SetSoundConeAngles
16
- local setSoundConeOrientation = SetSoundConeOrientation
17
16
  local startSound = StartSound
18
17
  local setSoundPlayPosition = SetSoundPlayPosition
19
18
  local stopSound = StopSound
@@ -153,6 +152,31 @@ local function createPreset3DSound(fileName, preset)
153
152
  setSoundDistanceCutoff(sound, preset.distanceCutoff or 1500)
154
153
  return sound
155
154
  end
155
+ local function createPreset3DSoundFromLabel(label, preset)
156
+ local ____label_7 = label
157
+ local ____preset_looping_5 = preset.looping
158
+ if ____preset_looping_5 == nil then
159
+ ____preset_looping_5 = false
160
+ end
161
+ local ____preset_stopWhenOutOfRange_6 = preset.stopWhenOutOfRange
162
+ if ____preset_stopWhenOutOfRange_6 == nil then
163
+ ____preset_stopWhenOutOfRange_6 = true
164
+ 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
+ end
156
180
  ____exports.Sound = __TS__Class()
157
181
  local Sound = ____exports.Sound
158
182
  Sound.name = "Sound"
@@ -225,6 +249,16 @@ function Sound3D.playOnUnit(self, fileName, preset, unit)
225
249
  startSound(sound)
226
250
  killSoundWhenDone(sound)
227
251
  end
252
+ function Sound3D.playFromLabel(self, label, preset, unitOrX, y, z)
253
+ local sound = createPreset3DSoundFromLabel(label, preset)
254
+ if type(unitOrX) ~= "number" then
255
+ attachSoundToUnit(sound, unitOrX.handle)
256
+ else
257
+ setSoundPosition(sound, unitOrX, y or 0, z or 0)
258
+ end
259
+ startSound(sound)
260
+ killSoundWhenDone(sound)
261
+ end
228
262
  function Sound3D.createAtPosition(self, fileName, preset, x, y, z)
229
263
  if x == nil then
230
264
  x = 0
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(">I4", id)
19
+ local numid = string.unpack(
20
+ ">I4",
21
+ __TS__StringPadEnd(id, 4, "\0")
22
+ )
18
23
  return numid
19
24
  end
20
25
  end
@@ -22,6 +22,7 @@ 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;
@@ -237,6 +237,18 @@ __TS__SetDescriptor(
237
237
  end},
238
238
  true
239
239
  )
240
+ __TS__SetDescriptor(
241
+ AbilityBehavior.prototype,
242
+ "unit",
243
+ {get = function(self)
244
+ local owner = self.object.owner
245
+ if __TS__InstanceOf(owner, Unit) then
246
+ return owner
247
+ end
248
+ return owner.owner
249
+ end},
250
+ true
251
+ )
240
252
  AbilityBehavior.MissileLaunchConfig = ____class_2
241
253
  __TS__SetDescriptor(
242
254
  AbilityBehavior.prototype,
@@ -12,3 +12,4 @@ export declare const enum AnimationName {
12
12
  STAND = "stand",
13
13
  WALK = "walk"
14
14
  }
15
+ export declare const isAnimationName: (value: string) => value is AnimationName;
@@ -1,2 +1,18 @@
1
1
  local ____exports = {}
2
+ local animationNames = {
3
+ attack = true,
4
+ birth = true,
5
+ death = true,
6
+ decay = true,
7
+ dissipate = true,
8
+ morph = true,
9
+ portrait = true,
10
+ sleep = true,
11
+ spell = true,
12
+ stand = true,
13
+ walk = true
14
+ }
15
+ ____exports.isAnimationName = function(value)
16
+ return animationNames[value] ~= nil
17
+ end
2
18
  return ____exports
@@ -12,5 +12,5 @@ export type TechTreeDependency = {
12
12
  level: number;
13
13
  };
14
14
  export type TechTreeDependencyInput = TechTreeDependency | UnitTypeId | UpgradeId;
15
- export declare const extractTechTreeDependencyInputObjectDataEntryId: (techTreeDependencyInput: TechTreeDependencyInput) => ObjectDataEntryId;
15
+ export declare const extractTechTreeDependencyInputObjectDataEntryId: (techTreeDependencyInput: TechTreeDependencyInput) => ObjectDataEntryId & number;
16
16
  export declare const extractTechTreeDependencyInputLevel: (techTreeDependencyInput: TechTreeDependencyInput) => number;
@@ -6,6 +6,8 @@ local __TS__New = ____lualib.__TS__New
6
6
  local ____exports = {}
7
7
  local ____channel = require("engine.object-data.entry.ability-type.channel")
8
8
  local ChannelAbilityType = ____channel.ChannelAbilityType
9
+ local ____animation_2Dname = require("engine.object-data.auxiliary.animation-name")
10
+ local isAnimationName = ____animation_2Dname.isAnimationName
9
11
  local ____order_2Dtype_2Dstring_2Did_2Dfactory = require("engine.object-data.utility.order-type-string-id-factory")
10
12
  local orderTypeStringIdFactory = ____order_2Dtype_2Dstring_2Did_2Dfactory.orderTypeStringIdFactory
11
13
  local ____timer = require("core.types.timer")
@@ -211,7 +213,16 @@ for abilityTypeId, usesAttackAnimation in pairs(postcompile(function()
211
213
  for abilityTypeId, usesAttackAnimation in pairs(usesAttackAnimationByAbilityTypeId) do
212
214
  if usesAttackAnimation then
213
215
  local abilityType = checkNotNull(____exports.BlankConfigurableAbilityType:of(abilityTypeId))
214
- abilityType.channelingAnimation = {"attack"}
216
+ if isAnimationName(abilityType.channelingAnimation[1]) then
217
+ if abilityType.channelingAnimation[1] ~= "attack" then
218
+ abilityType.channelingAnimation = {"attack"}
219
+ end
220
+ else
221
+ abilityType.channelingAnimation = {
222
+ "attack",
223
+ table.unpack(abilityType.channelingAnimation)
224
+ }
225
+ end
215
226
  end
216
227
  end
217
228
  return usesAttackAnimationByAbilityTypeId
@@ -54,10 +54,10 @@ __TS__SetDescriptor(
54
54
  "plagueWardUnitTypeId",
55
55
  {
56
56
  get = function(self)
57
- return self:getObjectDataEntryIdLevelField("Aplu")
57
+ return self:getObjectDataEntryNumericIdLevelField("Aplu")
58
58
  end,
59
59
  set = function(self, plagueWardUnitTypeId)
60
- self:setObjectDataEntryIdLevelField("Aplu", plagueWardUnitTypeId)
60
+ self:setObjectDataEntryNumericIdLevelField("Aplu", plagueWardUnitTypeId)
61
61
  end
62
62
  },
63
63
  true
@@ -55,7 +55,7 @@ __TS__SetDescriptor(
55
55
  get = function(self)
56
56
  local abilityUpgrades = {}
57
57
  for i = 0, 3 do
58
- local abilityUpgrade = self:getObjectDataEntryIdsLevelField("Neg" .. tostring(3 + i))
58
+ local abilityUpgrade = self:getObjectDataEntryNumericIdsLevelField("Neg" .. tostring(3 + i))
59
59
  for level = 0, #abilityUpgrade - 1 do
60
60
  local levelAbilityUpgrade = abilityUpgrade[level + 1]
61
61
  if #levelAbilityUpgrade == 2 then
@@ -71,7 +71,7 @@ __TS__SetDescriptor(
71
71
  local ____opt_0 = abilityUpgrades[1]
72
72
  local isArray = __TS__ArrayIsArray(____opt_0 and ____opt_0[1])
73
73
  for i = 0, #abilityUpgrades - 1 do
74
- self:setObjectDataEntryIdsLevelField(
74
+ self:setObjectDataEntryNumericIdsLevelField(
75
75
  "Neg" .. tostring(3 + i),
76
76
  isArray and map(
77
77
  abilityUpgrades,
@@ -15,10 +15,10 @@ __TS__SetDescriptor(
15
15
  "summonedUnitTypeId",
16
16
  {
17
17
  get = function(self)
18
- return self:getObjectDataEntryIdLevelField("Osf1")
18
+ return self:getObjectDataEntryNumericIdLevelField("Osf1")
19
19
  end,
20
20
  set = function(self, summonedUnitTypeId)
21
- self:setObjectDataEntryIdLevelField("Osf1", summonedUnitTypeId)
21
+ self:setObjectDataEntryNumericIdLevelField("Osf1", summonedUnitTypeId)
22
22
  end
23
23
  },
24
24
  true
@@ -15,10 +15,10 @@ __TS__SetDescriptor(
15
15
  "normalFormUnitTypeId",
16
16
  {
17
17
  get = function(self)
18
- return self:getObjectDataEntryIdLevelField("Eme1")
18
+ return self:getObjectDataEntryNumericIdLevelField("Eme1")
19
19
  end,
20
20
  set = function(self, normalFormUnitTypeId)
21
- self:setObjectDataEntryIdLevelField("Eme1", normalFormUnitTypeId)
21
+ self:setObjectDataEntryNumericIdLevelField("Eme1", normalFormUnitTypeId)
22
22
  end
23
23
  },
24
24
  true
@@ -119,10 +119,10 @@ __TS__SetDescriptor(
119
119
  "alternateFormUnitTypeId",
120
120
  {
121
121
  get = function(self)
122
- return self:getObjectDataEntryIdLevelField("Emeu")
122
+ return self:getObjectDataEntryNumericIdLevelField("Emeu")
123
123
  end,
124
124
  set = function(self, alternateFormUnitTypeId)
125
- self:setObjectDataEntryIdLevelField("Emeu", alternateFormUnitTypeId)
125
+ self:setObjectDataEntryNumericIdLevelField("Emeu", alternateFormUnitTypeId)
126
126
  end
127
127
  },
128
128
  true
@@ -0,0 +1,17 @@
1
+ /** @noSelfInFile */
2
+ import { AbilityType, AbilityTypeId } from "../ability-type";
3
+ import { ObjectDataEntryLevelFieldValueSupplier } from "../../entry";
4
+ import { UnitTypeId } from "../unit-type";
5
+ export declare class RaiseDeadAbilityType extends AbilityType {
6
+ static readonly BASE_ID: AbilityTypeId;
7
+ get firstSummonedUnitCount(): number[];
8
+ set firstSummonedUnitCount(firstSummonedUnitCount: ObjectDataEntryLevelFieldValueSupplier<number>);
9
+ get secondSummonedUnitCount(): number[];
10
+ set secondSummonedUnitCount(secondSummonedUnitCount: ObjectDataEntryLevelFieldValueSupplier<number>);
11
+ get firstSummonedUnitTypeId(): UnitTypeId[];
12
+ set firstSummonedUnitTypeId(firstSummonedUnitTypeId: ObjectDataEntryLevelFieldValueSupplier<UnitTypeId>);
13
+ get secondSummonedUnitTypeId(): UnitTypeId[];
14
+ set secondSummonedUnitTypeId(secondSummonedUnitTypeId: ObjectDataEntryLevelFieldValueSupplier<UnitTypeId>);
15
+ get limitCheckUnitTypeId(): UnitTypeId[];
16
+ set limitCheckUnitTypeId(limitCheckUnitTypeId: ObjectDataEntryLevelFieldValueSupplier<UnitTypeId>);
17
+ }
@@ -0,0 +1,78 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__ClassExtends = ____lualib.__TS__ClassExtends
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local ____exports = {}
6
+ local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
7
+ local AbilityType = ____ability_2Dtype.AbilityType
8
+ ____exports.RaiseDeadAbilityType = __TS__Class()
9
+ local RaiseDeadAbilityType = ____exports.RaiseDeadAbilityType
10
+ RaiseDeadAbilityType.name = "RaiseDeadAbilityType"
11
+ __TS__ClassExtends(RaiseDeadAbilityType, AbilityType)
12
+ RaiseDeadAbilityType.BASE_ID = fourCC("Arai")
13
+ __TS__SetDescriptor(
14
+ RaiseDeadAbilityType.prototype,
15
+ "firstSummonedUnitCount",
16
+ {
17
+ get = function(self)
18
+ return self:getNumberLevelField("Rai1")
19
+ end,
20
+ set = function(self, firstSummonedUnitCount)
21
+ self:setNumberLevelField("Rai1", firstSummonedUnitCount)
22
+ end
23
+ },
24
+ true
25
+ )
26
+ __TS__SetDescriptor(
27
+ RaiseDeadAbilityType.prototype,
28
+ "secondSummonedUnitCount",
29
+ {
30
+ get = function(self)
31
+ return self:getNumberLevelField("Rai2")
32
+ end,
33
+ set = function(self, secondSummonedUnitCount)
34
+ self:setNumberLevelField("Rai2", secondSummonedUnitCount)
35
+ end
36
+ },
37
+ true
38
+ )
39
+ __TS__SetDescriptor(
40
+ RaiseDeadAbilityType.prototype,
41
+ "firstSummonedUnitTypeId",
42
+ {
43
+ get = function(self)
44
+ return self:getObjectDataEntryNumericIdLevelField("Rai3")
45
+ end,
46
+ set = function(self, firstSummonedUnitTypeId)
47
+ self:setObjectDataEntryNumericIdLevelField("Rai3", firstSummonedUnitTypeId)
48
+ end
49
+ },
50
+ true
51
+ )
52
+ __TS__SetDescriptor(
53
+ RaiseDeadAbilityType.prototype,
54
+ "secondSummonedUnitTypeId",
55
+ {
56
+ get = function(self)
57
+ return self:getObjectDataEntryNumericIdLevelField("Rai4")
58
+ end,
59
+ set = function(self, secondSummonedUnitTypeId)
60
+ self:setObjectDataEntryNumericIdLevelField("Rai4", secondSummonedUnitTypeId)
61
+ end
62
+ },
63
+ true
64
+ )
65
+ __TS__SetDescriptor(
66
+ RaiseDeadAbilityType.prototype,
67
+ "limitCheckUnitTypeId",
68
+ {
69
+ get = function(self)
70
+ return self:getObjectDataEntryNumericIdLevelField("Raiu")
71
+ end,
72
+ set = function(self, limitCheckUnitTypeId)
73
+ self:setObjectDataEntryNumericIdLevelField("Raiu", limitCheckUnitTypeId)
74
+ end
75
+ },
76
+ true
77
+ )
78
+ return ____exports
@@ -15,10 +15,10 @@ __TS__SetDescriptor(
15
15
  "summonedUnitTypeId",
16
16
  {
17
17
  get = function(self)
18
- return self:getObjectDataEntryIdLevelField("Hwe1")
18
+ return self:getObjectDataEntryNumericIdLevelField("Hwe1")
19
19
  end,
20
20
  set = function(self, summonedUnitTypeId)
21
- self:setObjectDataEntryIdLevelField("Hwe1", summonedUnitTypeId)
21
+ self:setObjectDataEntryNumericIdLevelField("Hwe1", summonedUnitTypeId)
22
22
  end
23
23
  },
24
24
  true
@@ -15,10 +15,10 @@ __TS__SetDescriptor(
15
15
  "summonedUnitTypeId",
16
16
  {
17
17
  get = function(self)
18
- return self:getObjectDataEntryIdLevelField("Hwe1")
18
+ return self:getObjectDataEntryNumericIdLevelField("Hwe1")
19
19
  end,
20
20
  set = function(self, summonedUnitTypeId)
21
- self:setObjectDataEntryIdLevelField("Hwe1", summonedUnitTypeId)
21
+ self:setObjectDataEntryNumericIdLevelField("Hwe1", summonedUnitTypeId)
22
22
  end
23
23
  },
24
24
  true
@@ -6,12 +6,12 @@ import { AnimationQualifier } from "../auxiliary/animation-qualifier";
6
6
  import { AttachmentPreset, AttachmentPresetInput } from "../auxiliary/attachment-preset";
7
7
  import { CombatClassifications } from "../auxiliary/combat-classification";
8
8
  import { Race } from "../auxiliary/race";
9
- import { SoundPresetName } from "../auxiliary/sound-preset-name";
10
9
  import { TechTreeDependency, TechTreeDependencyInput } from "../auxiliary/tech-tree-dependency";
11
10
  import { ObjectDataEntry, ObjectDataEntryId, ObjectDataEntryLevelFieldValueSupplier } from "../entry";
12
11
  import { BuffTypeId } from "./buff-type";
13
12
  import { LightningTypeId } from "./lightning-type";
14
- export type AbilityTypeId = ObjectDataEntryId & {
13
+ import { SoundPresetId } from "./sound-preset";
14
+ export type AbilityTypeId = ObjectDataEntryId & number & {
15
15
  readonly __abilityTypeId: unique symbol;
16
16
  };
17
17
  export declare abstract class AbilityType extends ObjectDataEntry<AbilityTypeId> {
@@ -111,10 +111,12 @@ export declare abstract class AbilityType extends ObjectDataEntry<AbilityTypeId>
111
111
  set turnOffTooltipText(turnOffTooltipText: ObjectDataEntryLevelFieldValueSupplier<string>);
112
112
  get turnOffTooltipExtendedText(): string[];
113
113
  set turnOffTooltipExtendedText(turnOffTooltipExtendedText: ObjectDataEntryLevelFieldValueSupplier<string>);
114
- get soundPresetName(): SoundPresetName;
115
- set soundPresetName(soundPresetName: SoundPresetName);
116
- get loopingSoundPresetName(): SoundPresetName;
117
- set loopingSoundPresetName(loopingSoundPresetName: SoundPresetName);
114
+ get casterEffectSoundPresetId(): SoundPresetId | undefined;
115
+ set casterEffectSoundPresetId(casterEffectSoundPresetId: SoundPresetId | undefined);
116
+ get casterEffectLoopingSoundPresetId(): SoundPresetId;
117
+ set casterEffectLoopingSoundPresetId(casterEffectLoopingSoundPresetId: SoundPresetId);
118
+ get targetEffectSoundPresetId(): SoundPresetId | undefined;
119
+ set targetEffectSoundPresetId(targetEffectSoundPresetId: SoundPresetId | undefined);
118
120
  get allowedTargetCombatClassifications(): CombatClassifications[];
119
121
  set allowedTargetCombatClassifications(allowedTargetCombatClassifications: ObjectDataEntryLevelFieldValueSupplier<CombatClassifications>);
120
122
  get areaOfEffect(): number[];
@@ -2,6 +2,7 @@ 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
7
  local ____unit = require("engine.internal.unit")
7
8
  local Unit = ____unit.Unit
@@ -33,11 +34,15 @@ local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.u
33
34
  local abilityTypeIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.abilityTypeIdGenerator
34
35
  local ____upgrade = require("engine.object-data.entry.upgrade")
35
36
  local Upgrade = ____upgrade.Upgrade
37
+ local ____sound = require("core.types.sound")
38
+ local Sound3D = ____sound.Sound3D
39
+ local SoundPreset = ____sound.SoundPreset
36
40
  local castAnimationFQNByAbilityTypeId = {}
37
41
  local isButtonVisibleFalseAbilityTypes = {}
38
42
  local casterCastingEffectPresetsByAbilityTypeId = {}
39
43
  local casterChannelingEffectPresetsByAbilityTypeId = {}
40
44
  local targetCastingEffectPresetsByAbilityTypeId = {}
45
+ local targetEffectSoundPresetByAbilityTypeId = {}
41
46
  ____exports.AbilityType = __TS__Class()
42
47
  local AbilityType = ____exports.AbilityType
43
48
  AbilityType.name = "AbilityType"
@@ -271,10 +276,10 @@ __TS__SetDescriptor(
271
276
  "lightningTypeIds",
272
277
  {
273
278
  get = function(self)
274
- return self:getObjectDataEntryIdsField("alig")
279
+ return self:getObjectDataEntryNumericIdsField("alig")
275
280
  end,
276
281
  set = function(self, lightningTypeIds)
277
- self:setObjectDataEntryIdsField("alig", lightningTypeIds)
282
+ self:setObjectDataEntryNumericIdsField("alig", lightningTypeIds)
278
283
  end
279
284
  },
280
285
  true
@@ -508,7 +513,7 @@ __TS__SetDescriptor(
508
513
  "techTreeDependencies",
509
514
  {
510
515
  get = function(self)
511
- local techTreeDependencyIds = self:getObjectDataEntryIdsField("areq")
516
+ local techTreeDependencyIds = self:getObjectDataEntryNumericIdsField("areq")
512
517
  local techTreeDependencyInternalLevels = self:getNumbersField("arqa")
513
518
  return mapIndexed(
514
519
  techTreeDependencyIds,
@@ -528,7 +533,7 @@ __TS__SetDescriptor(
528
533
  map(techTreeDependencies, extractTechTreeDependencyInputLevel),
529
534
  function(techTreeDependencyLevel) return techTreeDependencyLevel + 1 end
530
535
  )
531
- self:setObjectDataEntryIdsField("areq", techTreeDependencyIds)
536
+ self:setObjectDataEntryNumericIdsField("areq", techTreeDependencyIds)
532
537
  self:setNumbersField("arqa", techTreeDependencyInternalLevels)
533
538
  end
534
539
  },
@@ -718,26 +723,40 @@ __TS__SetDescriptor(
718
723
  )
719
724
  __TS__SetDescriptor(
720
725
  AbilityType.prototype,
721
- "soundPresetName",
726
+ "casterEffectSoundPresetId",
722
727
  {
723
728
  get = function(self)
724
- return self:getStringField("aefs")
729
+ local casterEffectSoundPresetId = self:getStringField("aefs")
730
+ return casterEffectSoundPresetId ~= "" and casterEffectSoundPresetId or nil
725
731
  end,
726
- set = function(self, soundPresetName)
727
- self:setStringField("aefs", soundPresetName)
732
+ set = function(self, casterEffectSoundPresetId)
733
+ self:setStringField("aefs", casterEffectSoundPresetId or "")
728
734
  end
729
735
  },
730
736
  true
731
737
  )
732
738
  __TS__SetDescriptor(
733
739
  AbilityType.prototype,
734
- "loopingSoundPresetName",
740
+ "casterEffectLoopingSoundPresetId",
735
741
  {
736
742
  get = function(self)
737
743
  return self:getStringField("aefl")
738
744
  end,
739
- set = function(self, loopingSoundPresetName)
740
- self:setStringField("aefl", loopingSoundPresetName)
745
+ set = function(self, casterEffectLoopingSoundPresetId)
746
+ self:setStringField("aefl", casterEffectLoopingSoundPresetId)
747
+ end
748
+ },
749
+ true
750
+ )
751
+ __TS__SetDescriptor(
752
+ AbilityType.prototype,
753
+ "targetEffectSoundPresetId",
754
+ {
755
+ get = function(self)
756
+ return targetEffectSoundPresetByAbilityTypeId[self.id]
757
+ end,
758
+ set = function(self, targetEffectSoundPresetId)
759
+ targetEffectSoundPresetByAbilityTypeId[self.id] = targetEffectSoundPresetId
741
760
  end
742
761
  },
743
762
  true
@@ -796,10 +815,10 @@ __TS__SetDescriptor(
796
815
  "buffTypeIds",
797
816
  {
798
817
  get = function(self)
799
- return self:getObjectDataEntryIdsLevelField("abuf")
818
+ return self:getObjectDataEntryNumericIdsLevelField("abuf")
800
819
  end,
801
820
  set = function(self, buffTypeIds)
802
- self:setObjectDataEntryIdsLevelField("abuf", buffTypeIds)
821
+ self:setObjectDataEntryNumericIdsLevelField("abuf", buffTypeIds)
803
822
  end
804
823
  },
805
824
  true
@@ -848,10 +867,10 @@ __TS__SetDescriptor(
848
867
  "effectBuffTypeIds",
849
868
  {
850
869
  get = function(self)
851
- return self:getObjectDataEntryIdsLevelField("aeff")
870
+ return self:getObjectDataEntryNumericIdsLevelField("aeff")
852
871
  end,
853
872
  set = function(self, effectBuffTypeIds)
854
- self:setObjectDataEntryIdsLevelField("aeff", effectBuffTypeIds)
873
+ self:setObjectDataEntryNumericIdsLevelField("aeff", effectBuffTypeIds)
855
874
  end
856
875
  },
857
876
  true
@@ -966,6 +985,26 @@ for abilityTypeId, animationFQN in pairs(postcompile(function() return castAnima
966
985
  end
967
986
  )
968
987
  end
988
+ for abilityTypeId, soundPresetId in pairs(postcompile(function() return targetEffectSoundPresetByAbilityTypeId end)) do
989
+ if soundPresetId ~= nil then
990
+ Unit.abilityWidgetTargetChannelingStartEvent[abilityTypeId]:addListener(
991
+ 4,
992
+ function(caster, ability, target)
993
+ if __TS__InstanceOf(target, Unit) then
994
+ Sound3D:playFromLabel(soundPresetId, SoundPreset.Ability, target)
995
+ else
996
+ Sound3D:playFromLabel(soundPresetId, SoundPreset.Ability, target.x, target.y)
997
+ end
998
+ end
999
+ )
1000
+ Unit.abilityPointTargetChannelingStartEvent[abilityTypeId]:addListener(
1001
+ 4,
1002
+ function(caster, ability, x, y)
1003
+ Sound3D:playFromLabel(soundPresetId, SoundPreset.Ability, x, y)
1004
+ end
1005
+ )
1006
+ end
1007
+ end
969
1008
  local casterCastingEffectModelPathsByAbilityTypeId = postcompile(function()
970
1009
  return mapValues(
971
1010
  casterCastingEffectPresetsByAbilityTypeId,
@@ -74,7 +74,7 @@ local applicatorAbilityTypeIdByApplicatorTypeByApplicableBuffTypeId, applicatorU
74
74
  abilityType.buttonPositionY = -11
75
75
  abilityType.casterAttachmentPresets = {}
76
76
  abilityType.targetEffectPresets = {}
77
- abilityType.soundPresetName = ""
77
+ abilityType.casterEffectSoundPresetId = nil
78
78
  abilityType.learnLevelMinimum = 6
79
79
  abilityType.race = "other"
80
80
  abilityType.shouldCheckTechTreeDependencies = false
@@ -104,7 +104,7 @@ local applicatorAbilityTypeIdByApplicatorTypeByApplicableBuffTypeId, applicatorU
104
104
  local applicatorAbilityType = prepareAbilityType(CurseAbilityType, applicableBuffType)
105
105
  applicatorAbilityType.missProbability = 0
106
106
  applicatorAbilityType.buffTypeIds = {applicableBuffType.id}
107
- applicatorAbilityTypeIdByApplicatorType[852189] = applicatorAbilityType.id
107
+ applicatorAbilityTypeIdByApplicatorType[852190] = applicatorAbilityType.id
108
108
  end
109
109
  if applicableBuffType.polarity == 1 or applicableBuffType.polarity == nil then
110
110
  local applicatorAbilityType = prepareAbilityType(BloodLustAbilityType, applicableBuffType)
@@ -222,7 +222,7 @@ Unit.abilityCastingStartEvent[SEARING_ARROWS_DUMMY_ABILITY_TYPE_ID]:addListener(
222
222
  ---
223
223
  -- @internal For use by internal systems only.
224
224
  ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, resistanceType, level, duration, spellStealPriority, learnLevelMinimum, missProbability)
225
- local applicatorType = polarity == 1 and (resistanceType == 1 and 852101 or 852100) or (polarity == 2 and (resistanceType == 1 and 852189 or 852173) or 0)
225
+ local applicatorType = polarity == 1 and (resistanceType == 1 and 852101 or 852100) or (polarity == 2 and (resistanceType == 1 and 852190 or 852173) or 0)
226
226
  local ____opt_1 = applicatorAbilityTypeIdByApplicatorTypeByApplicableBuffTypeId[applicableBuffTypeId]
227
227
  local applicatorAbilityTypeId = ____opt_1 and ____opt_1[applicatorType]
228
228
  if applicatorAbilityTypeId == nil then
@@ -274,7 +274,7 @@ ____exports.internalApplyBuff = function(unit, applicableBuffTypeId, polarity, r
274
274
  ability:setField(ABILITY_RLF_DURATION_HERO, level, actualDuration)
275
275
  ability:setField(ABILITY_IF_PRIORITY, spellStealPriority or 0)
276
276
  ability:setField(ABILITY_IF_REQUIRED_LEVEL, learnLevelMinimum or 6)
277
- if missProbability ~= nil and applicatorType == 852189 then
277
+ if missProbability ~= nil and applicatorType == 852190 then
278
278
  ability:setField(ABILITY_RLF_CHANCE_TO_MISS_CRS, missProbability)
279
279
  end
280
280
  end,
@@ -5,7 +5,7 @@ import { Race } from "../auxiliary/race";
5
5
  import { SoundPresetName } from "../auxiliary/sound-preset-name";
6
6
  import { ObjectDataEntry, ObjectDataEntryId } from "../entry";
7
7
  import { LightningTypeId } from "./lightning-type";
8
- export type BuffTypeId = ObjectDataEntryId & {
8
+ export type BuffTypeId = ObjectDataEntryId & number & {
9
9
  readonly __buffTypeId: unique symbol;
10
10
  };
11
11
  export declare abstract class BuffType<Id extends BuffTypeId = BuffTypeId> extends ObjectDataEntry<Id> {
@@ -94,10 +94,10 @@ __TS__SetDescriptor(
94
94
  "lightningTypeIds",
95
95
  {
96
96
  get = function(self)
97
- return self:getObjectDataEntryIdsField("flig")
97
+ return self:getObjectDataEntryNumericIdsField("flig")
98
98
  end,
99
99
  set = function(self, lightningTypeIds)
100
- self:setObjectDataEntryIdsField("flig", lightningTypeIds)
100
+ self:setObjectDataEntryNumericIdsField("flig", lightningTypeIds)
101
101
  end
102
102
  },
103
103
  true
@@ -2,7 +2,7 @@
2
2
  import { ArmorSoundType } from "../auxiliary/armor-sound-type";
3
3
  import { CombatClassifications } from "../auxiliary/combat-classification";
4
4
  import { ObjectDataEntry, ObjectDataEntryId } from "../entry";
5
- export type DestructibleTypeId = ObjectDataEntryId & {
5
+ export type DestructibleTypeId = ObjectDataEntryId & number & {
6
6
  readonly __destructibleTypeId: unique symbol;
7
7
  };
8
8
  export declare abstract class DestructibleType extends ObjectDataEntry<DestructibleTypeId> {