warscript 0.0.1-dev.4620de6 → 0.0.1-dev.47f470c

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 (34) 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 +32 -2
  5. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  6. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  7. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  8. package/engine/object-data/entry/ability-type/blank-configurable.lua +21 -1
  9. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  10. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  11. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  12. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  13. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  14. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  15. package/engine/object-data/entry/ability-type.d.ts +1 -1
  16. package/engine/object-data/entry/ability-type.lua +8 -8
  17. package/engine/object-data/entry/buff-type.d.ts +1 -1
  18. package/engine/object-data/entry/buff-type.lua +2 -2
  19. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  20. package/engine/object-data/entry/item-type.d.ts +1 -1
  21. package/engine/object-data/entry/item-type.lua +4 -4
  22. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  23. package/engine/object-data/entry/sound-preset.d.ts +17 -0
  24. package/engine/object-data/entry/sound-preset.lua +50 -0
  25. package/engine/object-data/entry/unit-type.d.ts +8 -1
  26. package/engine/object-data/entry/unit-type.lua +61 -8
  27. package/engine/object-data/entry/upgrade.d.ts +1 -1
  28. package/engine/object-data/entry/upgrade.lua +4 -4
  29. package/engine/object-data/entry.d.ts +15 -13
  30. package/engine/object-data/entry.lua +53 -32
  31. package/engine/standard/entries/sound-preset.d.ts +10 -0
  32. package/engine/standard/entries/sound-preset.lua +10 -0
  33. package/objutil/unit.lua +8 -0
  34. package/package.json +2 -2
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, unit: Unit): 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,12 @@ 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, unit)
253
+ local sound = createPreset3DSoundFromLabel(label, preset)
254
+ attachSoundToUnit(sound, unit.handle)
255
+ startSound(sound)
256
+ killSoundWhenDone(sound)
257
+ end
228
258
  function Sound3D.createAtPosition(self, fileName, preset, x, y, z)
229
259
  if x == nil then
230
260
  x = 0
@@ -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")
@@ -21,6 +23,9 @@ local ALLOWED_TARGETS_ABILITY_COMBAT_CLASSIFICATIONS_LEVEL_FIELD = ____ability.A
21
23
  local AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD = ____ability.AREA_OF_EFFECT_ABILITY_FLOAT_LEVEL_FIELD
22
24
  local ____linked_2Dset = require("utility.linked-set")
23
25
  local LinkedSet = ____linked_2Dset.LinkedSet
26
+ local ____sound = require("core.types.sound")
27
+ local Sound3D = ____sound.Sound3D
28
+ local SoundPreset = ____sound.SoundPreset
24
29
  local isChannelingAbilityTypeIds = {}
25
30
  local usesAttackAnimationByAbilityTypeId = {}
26
31
  ____exports.BlankConfigurableAbilityType = __TS__Class()
@@ -211,11 +216,26 @@ for abilityTypeId, usesAttackAnimation in pairs(postcompile(function()
211
216
  for abilityTypeId, usesAttackAnimation in pairs(usesAttackAnimationByAbilityTypeId) do
212
217
  if usesAttackAnimation then
213
218
  local abilityType = checkNotNull(____exports.BlankConfigurableAbilityType:of(abilityTypeId))
214
- abilityType.channelingAnimation = {"attack"}
219
+ if isAnimationName(abilityType.channelingAnimation[1]) then
220
+ if abilityType.channelingAnimation[1] ~= "attack" then
221
+ abilityType.channelingAnimation = {"attack"}
222
+ end
223
+ else
224
+ abilityType.channelingAnimation = {
225
+ "attack",
226
+ table.unpack(abilityType.channelingAnimation)
227
+ }
228
+ end
215
229
  end
216
230
  end
217
231
  return usesAttackAnimationByAbilityTypeId
218
232
  end)) do
233
+ Unit.abilityCastingFinishEvent[abilityTypeId]:addListener(function(caster, ability)
234
+ local effectSound = ability:getField(ABILITY_SF_EFFECT_SOUND)
235
+ if effectSound ~= "" then
236
+ Sound3D:playFromLabel(effectSound, SoundPreset.Ability, caster)
237
+ end
238
+ end)
219
239
  if usesAttackAnimation then
220
240
  Unit.abilityCastingStartEvent[abilityTypeId]:addListener(
221
241
  4,
@@ -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
@@ -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
@@ -11,7 +11,7 @@ import { TechTreeDependency, TechTreeDependencyInput } from "../auxiliary/tech-t
11
11
  import { ObjectDataEntry, ObjectDataEntryId, ObjectDataEntryLevelFieldValueSupplier } from "../entry";
12
12
  import { BuffTypeId } from "./buff-type";
13
13
  import { LightningTypeId } from "./lightning-type";
14
- export type AbilityTypeId = ObjectDataEntryId & {
14
+ export type AbilityTypeId = ObjectDataEntryId & number & {
15
15
  readonly __abilityTypeId: unique symbol;
16
16
  };
17
17
  export declare abstract class AbilityType extends ObjectDataEntry<AbilityTypeId> {
@@ -271,10 +271,10 @@ __TS__SetDescriptor(
271
271
  "lightningTypeIds",
272
272
  {
273
273
  get = function(self)
274
- return self:getObjectDataEntryIdsField("alig")
274
+ return self:getObjectDataEntryNumericIdsField("alig")
275
275
  end,
276
276
  set = function(self, lightningTypeIds)
277
- self:setObjectDataEntryIdsField("alig", lightningTypeIds)
277
+ self:setObjectDataEntryNumericIdsField("alig", lightningTypeIds)
278
278
  end
279
279
  },
280
280
  true
@@ -508,7 +508,7 @@ __TS__SetDescriptor(
508
508
  "techTreeDependencies",
509
509
  {
510
510
  get = function(self)
511
- local techTreeDependencyIds = self:getObjectDataEntryIdsField("areq")
511
+ local techTreeDependencyIds = self:getObjectDataEntryNumericIdsField("areq")
512
512
  local techTreeDependencyInternalLevels = self:getNumbersField("arqa")
513
513
  return mapIndexed(
514
514
  techTreeDependencyIds,
@@ -528,7 +528,7 @@ __TS__SetDescriptor(
528
528
  map(techTreeDependencies, extractTechTreeDependencyInputLevel),
529
529
  function(techTreeDependencyLevel) return techTreeDependencyLevel + 1 end
530
530
  )
531
- self:setObjectDataEntryIdsField("areq", techTreeDependencyIds)
531
+ self:setObjectDataEntryNumericIdsField("areq", techTreeDependencyIds)
532
532
  self:setNumbersField("arqa", techTreeDependencyInternalLevels)
533
533
  end
534
534
  },
@@ -796,10 +796,10 @@ __TS__SetDescriptor(
796
796
  "buffTypeIds",
797
797
  {
798
798
  get = function(self)
799
- return self:getObjectDataEntryIdsLevelField("abuf")
799
+ return self:getObjectDataEntryNumericIdsLevelField("abuf")
800
800
  end,
801
801
  set = function(self, buffTypeIds)
802
- self:setObjectDataEntryIdsLevelField("abuf", buffTypeIds)
802
+ self:setObjectDataEntryNumericIdsLevelField("abuf", buffTypeIds)
803
803
  end
804
804
  },
805
805
  true
@@ -848,10 +848,10 @@ __TS__SetDescriptor(
848
848
  "effectBuffTypeIds",
849
849
  {
850
850
  get = function(self)
851
- return self:getObjectDataEntryIdsLevelField("aeff")
851
+ return self:getObjectDataEntryNumericIdsLevelField("aeff")
852
852
  end,
853
853
  set = function(self, effectBuffTypeIds)
854
- self:setObjectDataEntryIdsLevelField("aeff", effectBuffTypeIds)
854
+ self:setObjectDataEntryNumericIdsLevelField("aeff", effectBuffTypeIds)
855
855
  end
856
856
  },
857
857
  true
@@ -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> {
@@ -2,7 +2,7 @@
2
2
  import { ArmorSoundType } from "../auxiliary/armor-sound-type";
3
3
  import { ObjectDataEntry, ObjectDataEntryId } from "../entry";
4
4
  import type { AbilityTypeId } from "./ability-type";
5
- export type ItemTypeId = ObjectDataEntryId & {
5
+ export type ItemTypeId = ObjectDataEntryId & number & {
6
6
  readonly __itemTypeId: unique symbol;
7
7
  };
8
8
  export declare class ItemType extends ObjectDataEntry<ItemTypeId> {
@@ -27,10 +27,10 @@ __TS__SetDescriptor(
27
27
  "abilityTypeIds",
28
28
  {
29
29
  get = function(self)
30
- return self:getObjectDataEntryIdsField("iabi")
30
+ return self:getObjectDataEntryNumericIdsField("iabi")
31
31
  end,
32
32
  set = function(self, abilityTypeIds)
33
- self:setObjectDataEntryIdsField("iabi", abilityTypeIds)
33
+ self:setObjectDataEntryNumericIdsField("iabi", abilityTypeIds)
34
34
  end
35
35
  },
36
36
  true
@@ -261,10 +261,10 @@ __TS__SetDescriptor(
261
261
  "cooldownGroupId",
262
262
  {
263
263
  get = function(self)
264
- return self:getObjectDataEntryIdField("icid")
264
+ return self:getObjectDataEntryNumericIdField("icid")
265
265
  end,
266
266
  set = function(self, cooldownGroupId)
267
- self:setObjectDataEntryIdField("icid", cooldownGroupId)
267
+ self:setObjectDataEntryNumericIdField("icid", cooldownGroupId)
268
268
  end
269
269
  },
270
270
  true
@@ -1,7 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { ObjectDataEntry, ObjectDataEntryConstructor, ObjectDataEntryId } from "../entry";
3
3
  import { Color } from "../../../core/types/color";
4
- export type LightningTypeId = ObjectDataEntryId & {
4
+ export type LightningTypeId = ObjectDataEntryId & number & {
5
5
  readonly __lightningTypeId: unique symbol;
6
6
  };
7
7
  export type StandardLightningTypeId = LightningTypeId & {
@@ -0,0 +1,17 @@
1
+ /** @noSelfInFile */
2
+ import { ObjectDataEntry, ObjectDataEntryConstructor, ObjectDataEntryId } from "../entry";
3
+ export type SoundPresetId = ObjectDataEntryId & string & {
4
+ readonly __soundPresetId: unique symbol;
5
+ };
6
+ export type StandardSoundPresetId = SoundPresetId & {
7
+ readonly __standardSoundPresetId: unique symbol;
8
+ };
9
+ export declare class SoundPreset extends ObjectDataEntry<SoundPresetId> {
10
+ static readonly [id: StandardSoundPresetId]: ObjectDataEntryConstructor<SoundPreset>;
11
+ static readonly BASE_ID: SoundPresetId;
12
+ private static nextId;
13
+ protected static generateId(): string;
14
+ protected static getObjectData(map: WarMap): WarObjects;
15
+ get filePaths(): string[];
16
+ set filePaths(filePaths: string[]);
17
+ }
@@ -0,0 +1,50 @@
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 ____entry = require("engine.object-data.entry")
7
+ local ObjectDataEntry = ____entry.ObjectDataEntry
8
+ local ____reflection = require("utility.reflection")
9
+ local implementReadonlyNumberIndexSupplier = ____reflection.implementReadonlyNumberIndexSupplier
10
+ ____exports.SoundPreset = __TS__Class()
11
+ local SoundPreset = ____exports.SoundPreset
12
+ SoundPreset.name = "SoundPreset"
13
+ __TS__ClassExtends(SoundPreset, ObjectDataEntry)
14
+ function SoundPreset.generateId(self)
15
+ local ____self_0, ____nextId_1 = self, "nextId"
16
+ local ____self_nextId_2 = ____self_0[____nextId_1]
17
+ ____self_0[____nextId_1] = ____self_nextId_2 + 1
18
+ return "CustomSound" .. tostring(____self_nextId_2)
19
+ end
20
+ function SoundPreset.getObjectData(self, map)
21
+ return map.objects.sound
22
+ end;
23
+ (function(self)
24
+ implementReadonlyNumberIndexSupplier(
25
+ ____exports.SoundPreset,
26
+ function(id)
27
+ local ____class_3 = __TS__Class()
28
+ ____class_3.name = ____class_3.name
29
+ __TS__ClassExtends(____class_3, ____exports.SoundPreset)
30
+ ____class_3.BASE_ID = id
31
+ return ____class_3
32
+ end
33
+ )
34
+ end)(SoundPreset)
35
+ SoundPreset.BASE_ID = "BlizzardWave"
36
+ SoundPreset.nextId = 0
37
+ __TS__SetDescriptor(
38
+ SoundPreset.prototype,
39
+ "filePaths",
40
+ {
41
+ get = function(self)
42
+ return self:getStringsField("FileNames")
43
+ end,
44
+ set = function(self, filePaths)
45
+ self:setStringsField("FileNames", filePaths)
46
+ end
47
+ },
48
+ true
49
+ )
50
+ return ____exports
@@ -13,7 +13,7 @@ import type { AbilityTypeId } from "./ability-type";
13
13
  import type { UpgradeId } from "./upgrade";
14
14
  import { AnimationQualifier } from "../auxiliary/animation-qualifier";
15
15
  import { AttackType } from "../auxiliary/attack-type";
16
- export type UnitTypeId = ObjectDataEntryId & {
16
+ export type UnitTypeId = ObjectDataEntryId & number & {
17
17
  readonly __unitTypeId: unique symbol;
18
18
  };
19
19
  export type StandardUnitTypeId = UnitTypeId & {
@@ -55,6 +55,7 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
55
55
  protected static readonly idGenerator: ObjectDataEntryIdGenerator;
56
56
  protected static generateId(): number;
57
57
  protected static getObjectData(map: WarMap): WarObjects;
58
+ private isPortraitModelPathSet?;
58
59
  get abilityTypeIds(): AbilityTypeId[];
59
60
  set abilityTypeIds(abilityTypeIds: AbilityTypeId[]);
60
61
  get defaultActiveAbilityTypeId(): AbilityTypeId | undefined;
@@ -131,6 +132,12 @@ export declare abstract class UnitType<Id extends UnitTypeId = UnitTypeId> exten
131
132
  set modelPathSD(modelPathSD: string);
132
133
  get modelPathHD(): string;
133
134
  set modelPathHD(modelPathHD: string);
135
+ get portraitModelPath(): string;
136
+ set portraitModelPath(portraitModelPath: string);
137
+ get portraitModelPathSD(): string;
138
+ set portraitModelPathSD(portraitModelPathSD: string);
139
+ get portraitModelPathHD(): string;
140
+ set portraitModelPathHD(portraitModelPathHD: string);
134
141
  get runSpeed(): number;
135
142
  set runSpeed(runSpeed: number);
136
143
  get runSpeedSD(): number;
@@ -19,6 +19,8 @@ local ____entry = require("engine.object-data.entry")
19
19
  local ObjectDataEntry = ____entry.ObjectDataEntry
20
20
  local ____object_2Ddata_2Dentry_2Did_2Dgenerator = require("engine.object-data.utility.object-data-entry-id-generator")
21
21
  local ObjectDataEntryIdGenerator = ____object_2Ddata_2Dentry_2Did_2Dgenerator.ObjectDataEntryIdGenerator
22
+ local ____config = require("config")
23
+ local WarscriptConfig = ____config.WarscriptConfig
22
24
  local getOrCreateUnitTypeWeapons
23
25
  ____exports.UnitTypeWeapon = __TS__Class()
24
26
  local UnitTypeWeapon = ____exports.UnitTypeWeapon
@@ -345,10 +347,10 @@ __TS__SetDescriptor(
345
347
  "abilityTypeIds",
346
348
  {
347
349
  get = function(self)
348
- return self:getObjectDataEntryIdsField("uabi")
350
+ return self:getObjectDataEntryNumericIdsField("uabi")
349
351
  end,
350
352
  set = function(self, abilityTypeIds)
351
- self:setObjectDataEntryIdsField("uabi", abilityTypeIds)
353
+ self:setObjectDataEntryNumericIdsField("uabi", abilityTypeIds)
352
354
  end
353
355
  },
354
356
  true
@@ -358,10 +360,10 @@ __TS__SetDescriptor(
358
360
  "defaultActiveAbilityTypeId",
359
361
  {
360
362
  get = function(self)
361
- return self:getObjectDataEntryIdsField("udaa")[1]
363
+ return self:getObjectDataEntryNumericIdsField("udaa")[1]
362
364
  end,
363
365
  set = function(self, abilityTypeId)
364
- self:setObjectDataEntryIdsField(
366
+ self:setObjectDataEntryNumericIdsField(
365
367
  "udaa",
366
368
  arrayOfNotNull(abilityTypeId)
367
369
  )
@@ -807,6 +809,9 @@ __TS__SetDescriptor(
807
809
  end,
808
810
  set = function(self, modelPath)
809
811
  self:setStringField("umdl", modelPath)
812
+ if not self.isPortraitModelPathSet and WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
813
+ self:setStringField("upor", modelPath)
814
+ end
810
815
  end
811
816
  },
812
817
  true
@@ -820,6 +825,9 @@ __TS__SetDescriptor(
820
825
  end,
821
826
  set = function(self, modelPathSD)
822
827
  self:setStringField("umdl:sd", modelPathSD)
828
+ if not self.isPortraitModelPathSet and WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
829
+ self:setStringField("upor:sd", modelPathSD)
830
+ end
823
831
  end
824
832
  },
825
833
  true
@@ -833,6 +841,51 @@ __TS__SetDescriptor(
833
841
  end,
834
842
  set = function(self, modelPathHD)
835
843
  self:setStringField("umdl:hd", modelPathHD)
844
+ if not self.isPortraitModelPathSet and WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
845
+ self:setStringField("upor:hd", modelPathHD)
846
+ end
847
+ end
848
+ },
849
+ true
850
+ )
851
+ __TS__SetDescriptor(
852
+ UnitType.prototype,
853
+ "portraitModelPath",
854
+ {
855
+ get = function(self)
856
+ return self:getStringField("upor")
857
+ end,
858
+ set = function(self, portraitModelPath)
859
+ self:setStringField("upor", portraitModelPath)
860
+ self.isPortraitModelPathSet = true
861
+ end
862
+ },
863
+ true
864
+ )
865
+ __TS__SetDescriptor(
866
+ UnitType.prototype,
867
+ "portraitModelPathSD",
868
+ {
869
+ get = function(self)
870
+ return self:getStringField("upor:sd")
871
+ end,
872
+ set = function(self, portraitModelPathSD)
873
+ self:setStringField("upor:sd", portraitModelPathSD)
874
+ self.isPortraitModelPathSet = true
875
+ end
876
+ },
877
+ true
878
+ )
879
+ __TS__SetDescriptor(
880
+ UnitType.prototype,
881
+ "portraitModelPathHD",
882
+ {
883
+ get = function(self)
884
+ return self:getStringField("upor:hd")
885
+ end,
886
+ set = function(self, portraitModelPathHD)
887
+ self:setStringField("upor:hd", portraitModelPathHD)
888
+ self.isPortraitModelPathSet = true
836
889
  end
837
890
  },
838
891
  true
@@ -1496,10 +1549,10 @@ __TS__SetDescriptor(
1496
1549
  "affectingUpgradeIds",
1497
1550
  {
1498
1551
  get = function(self)
1499
- return self:getObjectDataEntryIdsField("upgr")
1552
+ return self:getObjectDataEntryNumericIdsField("upgr")
1500
1553
  end,
1501
1554
  set = function(self, affectingUpgradeIds)
1502
- self:setObjectDataEntryIdsField("upgr", affectingUpgradeIds)
1555
+ self:setObjectDataEntryNumericIdsField("upgr", affectingUpgradeIds)
1503
1556
  end
1504
1557
  },
1505
1558
  true
@@ -1582,10 +1635,10 @@ __TS__SetDescriptor(
1582
1635
  "heroAbilityTypeIds",
1583
1636
  {
1584
1637
  get = function(self)
1585
- return self:getObjectDataEntryIdsField("uhab")
1638
+ return self:getObjectDataEntryNumericIdsField("uhab")
1586
1639
  end,
1587
1640
  set = function(self, heroAbilityTypeIds)
1588
- self:setObjectDataEntryIdsField("uhab", heroAbilityTypeIds)
1641
+ self:setObjectDataEntryNumericIdsField("uhab", heroAbilityTypeIds)
1589
1642
  end
1590
1643
  },
1591
1644
  true
@@ -3,7 +3,7 @@ import { TupleOf } from "../../../utility/types";
3
3
  import { TechTreeDependency, TechTreeDependencyInput } from "../auxiliary/tech-tree-dependency";
4
4
  import { ObjectDataEntry, ObjectDataEntryId, ObjectDataEntryLevelFieldValueSupplier } from "../entry";
5
5
  import { AbilityTypeId } from "./ability-type";
6
- export type UpgradeId = ObjectDataEntryId & {
6
+ export type UpgradeId = ObjectDataEntryId & number & {
7
7
  readonly __upgradeId: unique symbol;
8
8
  };
9
9
  export declare const enum UpgradeEffectType {
@@ -32,7 +32,7 @@ function Upgrade.prototype.getEffect(self, i)
32
32
  type = effectType,
33
33
  bonusBase = self:getNumberField("gba" .. tostring(i)),
34
34
  bonusIncrement = self:getNumberField("gmo" .. tostring(i)),
35
- abilityTypeId = self:getObjectDataEntryIdField("gco" .. tostring(i))
35
+ abilityTypeId = self:getObjectDataEntryNumericIdField("gco" .. tostring(i))
36
36
  }
37
37
  end
38
38
  return nil
@@ -51,7 +51,7 @@ function Upgrade.prototype.setEffect(self, i, effect)
51
51
  effect and effect.bonusIncrement or 0
52
52
  )
53
53
  if (effect and effect.abilityTypeId) ~= nil then
54
- self:setObjectDataEntryIdField(
54
+ self:setObjectDataEntryNumericIdField(
55
55
  "gco" .. tostring(i),
56
56
  effect and effect.abilityTypeId
57
57
  )
@@ -145,7 +145,7 @@ __TS__SetDescriptor(
145
145
  "techTreeDependencies",
146
146
  {
147
147
  get = function(self)
148
- local techTreeDependencyIds = self:getObjectDataEntryIdsLevelField("greq")
148
+ local techTreeDependencyIds = self:getObjectDataEntryNumericIdsLevelField("greq")
149
149
  local techTreeDependencyInternalLevels = self:getNumbersLevelField("grqc")
150
150
  return mapIndexed(
151
151
  techTreeDependencyIds,
@@ -177,7 +177,7 @@ __TS__SetDescriptor(
177
177
  function(level) return level + 1 end
178
178
  )
179
179
  end
180
- self:setObjectDataEntryIdsLevelField("greq", techTreeDependencyIds)
180
+ self:setObjectDataEntryNumericIdsLevelField("greq", techTreeDependencyIds)
181
181
  self:setNumbersLevelField("grqc", techTreeDependencyInternalLevels)
182
182
  end
183
183
  },
@@ -1,7 +1,7 @@
1
1
  /** @noSelfInFile */
2
2
  import { AttachmentPreset, AttachmentPresetInput } from "./auxiliary/attachment-preset";
3
3
  import { MutableKeys } from "../../utility/types";
4
- export type ObjectDataEntryId = number & {
4
+ export type ObjectDataEntryId = (number | string) & {
5
5
  readonly __objectDataEntryId: unique symbol;
6
6
  };
7
7
  export type ObjectDataEntryIdType<T extends ObjectDataEntry> = T extends ObjectDataEntry<infer Id> ? Id : never;
@@ -14,18 +14,20 @@ export declare const extractObjectDataEntryLevelArrayFieldValue: <T extends stri
14
14
  export declare abstract class ObjectDataEntry<Id extends ObjectDataEntryId = ObjectDataEntryId> {
15
15
  protected readonly object: WarObject;
16
16
  static readonly BASE_ID: ObjectDataEntryId;
17
+ static readonly ID_TYPE: string;
17
18
  protected static readonly IS_SYNTHETIC: boolean;
18
19
  private readonly levelFieldParametersByField;
19
20
  private readonly maxAffectedLevelByField;
20
21
  private _isInternal;
22
+ private get type();
21
23
  get isInternal(): boolean;
22
- protected static generateId(): number;
24
+ protected static generateId(): number | string;
23
25
  protected static getObjectData(map: WarMap): WarObjects;
24
- static getAllIdsByBaseIds<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, baseIds: number | number[]): ObjectDataEntryIdType<T>[];
26
+ static getAllIdsByBaseIds<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, baseIds: number | number[] | string | string[]): ObjectDataEntryIdType<T>[];
25
27
  static create<T extends ObjectDataEntry>(this: ObjectDataEntryConstructor<T>, ...args: [id?: number, properties?: ObjectDataEntryProperties<T>] | [properties: ObjectDataEntryProperties<T>]): T;
26
- static getAllByBaseIds<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, baseIds: number | number[]): T[];
28
+ static getAllByBaseIds<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, baseIds: number | number[] | string | string[]): T[];
27
29
  static getAll<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>): T[];
28
- static of<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, id: number): T | undefined;
30
+ static of<T extends ObjectDataEntry>(this: ObjectDataEntryAbstractConstructor<T>, id: number | string): T | undefined;
29
31
  constructor(object: WarObject);
30
32
  get id(): Id;
31
33
  get baseId(): Id;
@@ -42,8 +44,8 @@ export declare abstract class ObjectDataEntry<Id extends ObjectDataEntryId = Obj
42
44
  protected setNumberField(field: string, value: number): void;
43
45
  protected getStringField(field: string): string;
44
46
  protected setStringField(field: string, value: string): void;
45
- protected getObjectDataEntryIdField<Id extends ObjectDataEntryId>(field: string): Id;
46
- protected setObjectDataEntryIdField<Id extends ObjectDataEntryId>(field: string, value: Id): void;
47
+ protected getObjectDataEntryNumericIdField<Id extends ObjectDataEntryId & number>(field: string): Id;
48
+ protected setObjectDataEntryNumericIdField<Id extends ObjectDataEntryId & number>(field: string, value: Id): void;
47
49
  protected getAttachmentPresetField(modelPathField: string, nodeFQNField: string): AttachmentPreset | undefined;
48
50
  protected setAttachmentPresetField(modelPathField: string, nodeFQNField: string, attachmentPreset: AttachmentPresetInput | undefined): void;
49
51
  protected getBooleansField(field: string): boolean[];
@@ -52,8 +54,8 @@ export declare abstract class ObjectDataEntry<Id extends ObjectDataEntryId = Obj
52
54
  protected setNumbersField(field: string, values: number[]): void;
53
55
  protected getStringsField(field: string): string[];
54
56
  protected setStringsField(field: string, values: string[]): void;
55
- protected getObjectDataEntryIdsField<Id extends ObjectDataEntryId>(field: string): Id[];
56
- protected setObjectDataEntryIdsField<Id extends ObjectDataEntryId>(field: string, values: Id[]): void;
57
+ protected getObjectDataEntryNumericIdsField<Id extends ObjectDataEntryId & number>(field: string): Id[];
58
+ protected setObjectDataEntryNumericIdsField<Id extends ObjectDataEntryId & number>(field: string, values: Id[]): void;
57
59
  protected getAttachmentPresetListField(modelPathListField: string, nodeFQNFields: string[]): AttachmentPreset[];
58
60
  protected setAttachmentPresetListField(modelPathListField: string, nodeFQNFields: string[], lengthField: string, attachmentPresets: AttachmentPresetInput[]): void;
59
61
  protected setFlagLevelFieldValue(fieldId: string, flag: 1 | 2 | 4 | 8 | 16, supplier: ObjectDataEntryLevelFieldValueSupplier<boolean>): void;
@@ -64,16 +66,16 @@ export declare abstract class ObjectDataEntry<Id extends ObjectDataEntryId = Obj
64
66
  protected setNumberLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<number>): void;
65
67
  protected getStringLevelField(field: string): string[];
66
68
  protected setStringLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<string>): void;
67
- protected getObjectDataEntryIdLevelField<Id extends ObjectDataEntryId>(field: string): Id[];
68
- protected setObjectDataEntryIdLevelField<Id extends ObjectDataEntryId>(field: string, values: ObjectDataEntryLevelFieldValueSupplier<Id>): void;
69
+ protected getObjectDataEntryNumericIdLevelField<Id extends ObjectDataEntryId & number>(field: string): Id[];
70
+ protected setObjectDataEntryNumericIdLevelField<Id extends ObjectDataEntryId & number>(field: string, values: ObjectDataEntryLevelFieldValueSupplier<Id>): void;
69
71
  protected getBooleansLevelField(field: string): boolean[][];
70
72
  protected setBooleansLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<boolean[]>): void;
71
73
  protected getNumbersLevelField(field: string): number[][];
72
74
  protected setNumbersLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<number[]>): void;
73
75
  protected getStringsLevelField(field: string): string[][];
74
76
  protected setStringsLevelField(field: string, values: ObjectDataEntryLevelFieldValueSupplier<string[]>): void;
75
- protected getObjectDataEntryIdsLevelField<T extends ObjectDataEntryId>(field: string): T[][];
76
- protected setObjectDataEntryIdsLevelField<T extends ObjectDataEntryId>(field: string, values: ObjectDataEntryLevelFieldValueSupplier<T[]>): void;
77
+ protected getObjectDataEntryNumericIdsLevelField<T extends ObjectDataEntryId & number>(field: string): T[][];
78
+ protected setObjectDataEntryNumericIdsLevelField<T extends ObjectDataEntryId & number>(field: string, values: ObjectDataEntryLevelFieldValueSupplier<T[]>): void;
77
79
  private getLevelField;
78
80
  private setLevelField;
79
81
  }
@@ -10,7 +10,7 @@ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
10
10
  local __TS__StringSplit = ____lualib.__TS__StringSplit
11
11
  local __TS__ArrayFilter = ____lualib.__TS__ArrayFilter
12
12
  local ____exports = {}
13
- local booleanToData, dataToBoolean, numberToData, dataToNumber, stringToData, dataToString, objectDataEntryIdToData, dataToObjectDataEntryId, booleansToData, dataToBooleans, numbersToData, dataToNumbers, stringsToData, dataToStrings, objectDataEntryIdsToData, dataToObjectDataEntryIds, isDataNotBlank
13
+ local booleanToData, dataToBoolean, numberToData, dataToNumber, stringToData, dataToString, objectDataEntryNumericIdToData, dataToObjectDataEntryNumericId, objectDataEntryIdToData, dataToObjectDataEntryId, booleansToData, dataToBooleans, numbersToData, dataToNumbers, stringsToData, dataToStrings, objectDataEntryNumericIdsToData, dataToObjectDataEntryNumericIds, isDataNotBlank
14
14
  local ____attachment_2Dpreset = require("engine.object-data.auxiliary.attachment-preset")
15
15
  local extractAttachmentPresetInputModelPath = ____attachment_2Dpreset.extractAttachmentPresetInputModelPath
16
16
  local extractAttachmentPresetInputNodeFQN = ____attachment_2Dpreset.extractAttachmentPresetInputNodeFQN
@@ -124,7 +124,7 @@ function ObjectDataEntry.getAllByBaseIds(self, baseIds)
124
124
  local constructor = self
125
125
  for id, object in pairs(constructor:getObjectData(currentMap).all) do
126
126
  if dataBaseIds[object.parentId or id] ~= nil then
127
- local objectDataEntry = self:of(dataToObjectDataEntryId(id))
127
+ local objectDataEntry = self:of(dataToObjectDataEntryId(id, self.ID_TYPE))
128
128
  if objectDataEntry ~= nil and not objectDataEntry.isInternal then
129
129
  result[#result + 1] = objectDataEntry
130
130
  end
@@ -139,7 +139,7 @@ function ObjectDataEntry.getAll(self)
139
139
  local constructor = self
140
140
  local result = {}
141
141
  for id in pairs(constructor:getObjectData(currentMap).all) do
142
- local objectDataEntry = self:of(dataToObjectDataEntryId(id))
142
+ local objectDataEntry = self:of(dataToObjectDataEntryId(id, self.ID_TYPE))
143
143
  if objectDataEntry ~= nil and not objectDataEntry.isInternal then
144
144
  result[#result + 1] = objectDataEntry
145
145
  end
@@ -156,9 +156,9 @@ function ObjectDataEntry.of(self, id)
156
156
  if object == nil then
157
157
  return nil
158
158
  end
159
- local objectDataEntry = objectDataEntryByObjectDataEntryId[dataToObjectDataEntryId(object.id)]
159
+ local objectDataEntry = objectDataEntryByObjectDataEntryId[dataToObjectDataEntryId(object.id, self.ID_TYPE)]
160
160
  if objectDataEntry == nil then
161
- if not constructor.IS_SYNTHETIC and (self.BASE_ID == 0 or dataToObjectDataEntryId(object.parentId) == self.BASE_ID) then
161
+ if not constructor.IS_SYNTHETIC and (self.BASE_ID == 0 or dataToObjectDataEntryId(object.parentId, self.ID_TYPE) == self.BASE_ID) then
162
162
  local AbstractObjectDataEntryView = __TS__Class()
163
163
  AbstractObjectDataEntryView.name = "AbstractObjectDataEntryView"
164
164
  __TS__ClassExtends(AbstractObjectDataEntryView, constructor)
@@ -231,13 +231,13 @@ function ObjectDataEntry.prototype.setStringField(self, field, value)
231
231
  stringToData(value)
232
232
  )
233
233
  end
234
- function ObjectDataEntry.prototype.getObjectDataEntryIdField(self, field)
235
- return dataToObjectDataEntryId(self.object:getField(field))
234
+ function ObjectDataEntry.prototype.getObjectDataEntryNumericIdField(self, field)
235
+ return dataToObjectDataEntryNumericId(self.object:getField(field))
236
236
  end
237
- function ObjectDataEntry.prototype.setObjectDataEntryIdField(self, field, value)
237
+ function ObjectDataEntry.prototype.setObjectDataEntryNumericIdField(self, field, value)
238
238
  self.object:setField(
239
239
  field,
240
- objectDataEntryIdToData(value)
240
+ objectDataEntryNumericIdToData(value)
241
241
  )
242
242
  end
243
243
  function ObjectDataEntry.prototype.getAttachmentPresetField(self, modelPathField, nodeFQNField)
@@ -285,13 +285,13 @@ function ObjectDataEntry.prototype.setStringsField(self, field, values)
285
285
  stringsToData(values)
286
286
  )
287
287
  end
288
- function ObjectDataEntry.prototype.getObjectDataEntryIdsField(self, field)
289
- return dataToObjectDataEntryIds(self.object:getField(field))
288
+ function ObjectDataEntry.prototype.getObjectDataEntryNumericIdsField(self, field)
289
+ return dataToObjectDataEntryNumericIds(self.object:getField(field))
290
290
  end
291
- function ObjectDataEntry.prototype.setObjectDataEntryIdsField(self, field, values)
291
+ function ObjectDataEntry.prototype.setObjectDataEntryNumericIdsField(self, field, values)
292
292
  self.object:setField(
293
293
  field,
294
- objectDataEntryIdsToData(values)
294
+ objectDataEntryNumericIdsToData(values)
295
295
  )
296
296
  end
297
297
  function ObjectDataEntry.prototype.getAttachmentPresetListField(self, modelPathListField, nodeFQNFields)
@@ -369,16 +369,16 @@ function ObjectDataEntry.prototype.setStringLevelField(self, field, values)
369
369
  stringToData
370
370
  )
371
371
  end
372
- function ObjectDataEntry.prototype.getObjectDataEntryIdLevelField(self, field)
373
- return self:getLevelField(field, dataToObjectDataEntryId)
372
+ function ObjectDataEntry.prototype.getObjectDataEntryNumericIdLevelField(self, field)
373
+ return self:getLevelField(field, dataToObjectDataEntryNumericId)
374
374
  end
375
- function ObjectDataEntry.prototype.setObjectDataEntryIdLevelField(self, field, values)
375
+ function ObjectDataEntry.prototype.setObjectDataEntryNumericIdLevelField(self, field, values)
376
376
  self:setLevelField(
377
377
  field,
378
378
  values,
379
379
  ____exports.extractObjectDataEntryLevelFieldValue,
380
- dataToObjectDataEntryId,
381
- objectDataEntryIdToData
380
+ dataToObjectDataEntryNumericId,
381
+ objectDataEntryNumericIdToData
382
382
  )
383
383
  end
384
384
  function ObjectDataEntry.prototype.getBooleansLevelField(self, field)
@@ -417,23 +417,26 @@ function ObjectDataEntry.prototype.setStringsLevelField(self, field, values)
417
417
  stringsToData
418
418
  )
419
419
  end
420
- function ObjectDataEntry.prototype.getObjectDataEntryIdsLevelField(self, field)
421
- return self:getLevelField(field, dataToObjectDataEntryIds)
420
+ function ObjectDataEntry.prototype.getObjectDataEntryNumericIdsLevelField(self, field)
421
+ return self:getLevelField(field, dataToObjectDataEntryNumericIds)
422
422
  end
423
- function ObjectDataEntry.prototype.setObjectDataEntryIdsLevelField(self, field, values)
423
+ function ObjectDataEntry.prototype.setObjectDataEntryNumericIdsLevelField(self, field, values)
424
424
  self:setLevelField(
425
425
  field,
426
426
  values,
427
427
  ____exports.extractObjectDataEntryLevelArrayFieldValue,
428
- dataToObjectDataEntryIds,
429
- objectDataEntryIdsToData
428
+ dataToObjectDataEntryNumericIds,
429
+ objectDataEntryNumericIdsToData
430
430
  )
431
431
  end
432
432
  function ObjectDataEntry.prototype.getLevelField(self, field, dataToValue)
433
433
  local values = {}
434
434
  local object = self.object
435
435
  for level = 1, tonumber(object:getField("levels")) or 1 do
436
- values[level] = dataToValue(object:getField((field .. "+") .. tostring(level)))
436
+ values[level] = dataToValue(
437
+ object:getField((field .. "+") .. tostring(level)),
438
+ "number"
439
+ )
437
440
  end
438
441
  return values
439
442
  end
@@ -472,7 +475,16 @@ function ObjectDataEntry.prototype.setLevelField(self, field, supplier, extracto
472
475
  end
473
476
  end
474
477
  ObjectDataEntry.BASE_ID = 0
478
+ ObjectDataEntry.ID_TYPE = type(self.BASE_ID) == "number" and "number" or "string"
475
479
  ObjectDataEntry.IS_SYNTHETIC = false
480
+ __TS__SetDescriptor(
481
+ ObjectDataEntry.prototype,
482
+ "type",
483
+ {get = function(self)
484
+ return self.constructor
485
+ end},
486
+ true
487
+ )
476
488
  __TS__SetDescriptor(
477
489
  ObjectDataEntry.prototype,
478
490
  "isInternal",
@@ -495,7 +507,7 @@ __TS__SetDescriptor(
495
507
  ObjectDataEntry.prototype,
496
508
  "id",
497
509
  {get = function(self)
498
- return dataToObjectDataEntryId(self.object.id)
510
+ return dataToObjectDataEntryId(self.object.id, self.type.ID_TYPE)
499
511
  end},
500
512
  true
501
513
  )
@@ -503,7 +515,7 @@ __TS__SetDescriptor(
503
515
  ObjectDataEntry.prototype,
504
516
  "baseId",
505
517
  {get = function(self)
506
- return dataToObjectDataEntryId(self.object.parentId or self.object.id)
518
+ return dataToObjectDataEntryId(self.object.parentId or self.object.id, self.type.ID_TYPE)
507
519
  end},
508
520
  true
509
521
  )
@@ -533,10 +545,10 @@ end
533
545
  dataToString = function(data)
534
546
  return tostring(data or "")
535
547
  end
536
- objectDataEntryIdToData = function(value)
548
+ objectDataEntryNumericIdToData = function(value)
537
549
  return value == 0 and "" or string.pack(">I4", value)
538
550
  end
539
- dataToObjectDataEntryId = function(data)
551
+ dataToObjectDataEntryNumericId = function(data)
540
552
  local dataString = dataToString(data)
541
553
  if isDataNotBlank(nil, dataString) then
542
554
  return (string.unpack(">I4", dataString))
@@ -544,6 +556,15 @@ dataToObjectDataEntryId = function(data)
544
556
  return 0
545
557
  end
546
558
  end
559
+ objectDataEntryIdToData = function(value)
560
+ return type(value) == "number" and objectDataEntryNumericIdToData(value) or value
561
+ end
562
+ dataToObjectDataEntryId = function(data, ____type)
563
+ if ____type == "number" then
564
+ return dataToObjectDataEntryNumericId(data)
565
+ end
566
+ return dataToString(data)
567
+ end
547
568
  booleansToData = function(value)
548
569
  return table.concat(
549
570
  __TS__ArrayMap(
@@ -607,16 +628,16 @@ dataToStrings = function(data)
607
628
  function(____, data) return dataToString(data) end
608
629
  )
609
630
  end
610
- objectDataEntryIdsToData = function(value)
631
+ objectDataEntryNumericIdsToData = function(value)
611
632
  return table.concat(
612
633
  __TS__ArrayMap(
613
634
  value,
614
- function(____, objectDataEntryId) return objectDataEntryIdToData(objectDataEntryId) end
635
+ function(____, objectDataEntryId) return objectDataEntryNumericIdToData(objectDataEntryId) end
615
636
  ),
616
637
  ","
617
638
  )
618
639
  end
619
- dataToObjectDataEntryIds = function(data)
640
+ dataToObjectDataEntryNumericIds = function(data)
620
641
  return __TS__ArrayMap(
621
642
  __TS__ArrayFilter(
622
643
  __TS__StringSplit(
@@ -625,7 +646,7 @@ dataToObjectDataEntryIds = function(data)
625
646
  ),
626
647
  isDataNotBlank
627
648
  ),
628
- function(____, data) return dataToObjectDataEntryId(data) end
649
+ function(____, data) return dataToObjectDataEntryNumericId(data) end
629
650
  )
630
651
  end
631
652
  isDataNotBlank = function(self, data)
@@ -0,0 +1,10 @@
1
+ /** @noSelfInFile */
2
+ import { StandardSoundPresetId } from "../../object-data/entry/sound-preset";
3
+ export declare const ABOMINATION_PISSED_SOUND_PRESET_ID: StandardSoundPresetId;
4
+ export declare const ABOMINATION_READY_SOUND_PRESET_ID: StandardSoundPresetId;
5
+ export declare const ABOMINATION_WAR_CRY_SOUND_PRESET_ID: StandardSoundPresetId;
6
+ export declare const AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID: StandardSoundPresetId;
7
+ export declare const IMPALE_SOUND_PRESET_ID: StandardSoundPresetId;
8
+ export declare const IMPALE_HIT_SOUND_PRESET_ID: StandardSoundPresetId;
9
+ export declare const IMPALE_LAND_SOUND_PRESET_ID: StandardSoundPresetId;
10
+ export declare const IMPALE_CAST_SOUND_PRESET_ID: StandardSoundPresetId;
@@ -0,0 +1,10 @@
1
+ local ____exports = {}
2
+ ____exports.ABOMINATION_PISSED_SOUND_PRESET_ID = "AbominationPissed"
3
+ ____exports.ABOMINATION_READY_SOUND_PRESET_ID = "AbominationReady"
4
+ ____exports.ABOMINATION_WAR_CRY_SOUND_PRESET_ID = "AbominationWarcry"
5
+ ____exports.AXE_MEDIUM_CHOP_WOOD_SOUND_PRESET_ID = "AxeMediumChopWood"
6
+ ____exports.IMPALE_SOUND_PRESET_ID = "Impale"
7
+ ____exports.IMPALE_HIT_SOUND_PRESET_ID = "ImpaleHit"
8
+ ____exports.IMPALE_LAND_SOUND_PRESET_ID = "ImpaleLand"
9
+ ____exports.IMPALE_CAST_SOUND_PRESET_ID = "ImpaleCast"
10
+ return ____exports
package/objutil/unit.lua CHANGED
@@ -11,6 +11,8 @@ local ____exports = {}
11
11
  local ____object = require("objutil.object")
12
12
  local ObjectDefinition = ____object.ObjectDefinition
13
13
  local idgen = require("objutil.idgen")
14
+ local ____config = require("config")
15
+ local WarscriptConfig = ____config.WarscriptConfig
14
16
  local attackTypes = setmetatable(
15
17
  {
16
18
  normal = "normal",
@@ -593,6 +595,9 @@ __TS__SetDescriptor(
593
595
  end,
594
596
  set = function(self, v)
595
597
  self:setStringField("umdl", v)
598
+ if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
599
+ self:setStringField("upor", v)
600
+ end
596
601
  end
597
602
  },
598
603
  true
@@ -606,6 +611,9 @@ __TS__SetDescriptor(
606
611
  end,
607
612
  set = function(self, v)
608
613
  self.object:setField("umdl:hd", v)
614
+ if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
615
+ self.object:setField("upor:hd", v)
616
+ end
609
617
  end
610
618
  },
611
619
  true
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "warscript",
4
- "version": "0.0.1-dev.4620de6",
4
+ "version": "0.0.1-dev.47f470c",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -24,7 +24,7 @@
24
24
  "@warscript/language-extensions": "^0.0.1",
25
25
  "@warscript/tstl-plugin": "^0.0.4",
26
26
  "lua-types": "^2.13.1",
27
- "warpack": "0.0.1-dev.1830aad"
27
+ "warpack": "0.0.1-dev.57dfac2"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@typescript-eslint/eslint-plugin": "^8.13.0",