warscript 0.0.1-dev.c16baee → 0.0.1-dev.c362181

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 (147) hide show
  1. package/binaryreader.d.ts +1 -0
  2. package/binaryreader.lua +3 -0
  3. package/config.d.ts +5 -0
  4. package/config.lua +10 -0
  5. package/core/types/effect.d.ts +13 -3
  6. package/core/types/effect.lua +116 -17
  7. package/core/types/frame.d.ts +8 -0
  8. package/core/types/frame.lua +93 -1
  9. package/core/types/handle.lua +2 -0
  10. package/core/types/sound.d.ts +17 -24
  11. package/core/types/sound.lua +94 -24
  12. package/core/util.d.ts +1 -1
  13. package/core/util.lua +18 -1
  14. package/engine/behavior.d.ts +2 -2
  15. package/engine/behavior.lua +6 -6
  16. package/engine/behaviour/ability/always-enabled.d.ts +7 -0
  17. package/engine/behaviour/ability/always-enabled.lua +31 -0
  18. package/engine/behaviour/ability/apply-buff.d.ts +8 -5
  19. package/engine/behaviour/ability/apply-buff.lua +32 -0
  20. package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
  21. package/engine/behaviour/ability/damage.d.ts +36 -11
  22. package/engine/behaviour/ability/damage.lua +90 -32
  23. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  24. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  25. package/engine/behaviour/ability/heal.d.ts +33 -6
  26. package/engine/behaviour/ability/heal.lua +89 -10
  27. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  28. package/engine/behaviour/ability/instant-impact.lua +4 -19
  29. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  30. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  31. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  32. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  33. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  34. package/engine/behaviour/ability/restore-mana.lua +29 -0
  35. package/engine/behaviour/ability.d.ts +16 -3
  36. package/engine/behaviour/ability.lua +105 -34
  37. package/engine/behaviour/unit.d.ts +7 -0
  38. package/engine/behaviour/unit.lua +20 -0
  39. package/engine/buff.d.ts +101 -39
  40. package/engine/buff.lua +458 -203
  41. package/engine/game-map.d.ts +7 -0
  42. package/engine/game-map.lua +32 -0
  43. package/engine/internal/ability.d.ts +16 -13
  44. package/engine/internal/ability.lua +80 -76
  45. package/engine/internal/item/ability.lua +106 -0
  46. package/engine/internal/item+owner.lua +2 -2
  47. package/engine/internal/item.d.ts +2 -2
  48. package/engine/internal/item.lua +56 -25
  49. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  50. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  51. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  52. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  53. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  54. package/engine/internal/object-data/evasion-probability.lua +16 -0
  55. package/engine/internal/unit/ability.d.ts +10 -1
  56. package/engine/internal/unit/ability.lua +36 -14
  57. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  58. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  59. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  60. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  61. package/engine/internal/unit/bonus.d.ts +6 -2
  62. package/engine/internal/unit/bonus.lua +23 -1
  63. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  64. package/engine/internal/unit/ignore-events-items.lua +5 -0
  65. package/engine/internal/unit/item.d.ts +24 -0
  66. package/engine/internal/unit/item.lua +78 -0
  67. package/engine/internal/unit/main-selected.d.ts +13 -0
  68. package/engine/internal/unit/main-selected.lua +51 -0
  69. package/engine/internal/unit+ability.lua +2 -2
  70. package/engine/internal/unit+transport.lua +4 -10
  71. package/engine/internal/unit-missile-launch.lua +24 -5
  72. package/engine/internal/unit.d.ts +31 -10
  73. package/engine/internal/unit.lua +181 -91
  74. package/engine/internal/utility.lua +12 -0
  75. package/engine/lightning.d.ts +12 -5
  76. package/engine/lightning.lua +48 -14
  77. package/engine/local-client.d.ts +7 -2
  78. package/engine/local-client.lua +82 -0
  79. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  80. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  81. package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
  82. package/engine/object-data/auxiliary/sound-eax.lua +2 -0
  83. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  84. package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
  85. package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
  86. package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
  87. package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
  88. package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
  89. package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
  90. package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
  91. package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
  92. package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
  93. package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
  94. package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
  95. package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
  96. package/engine/object-data/entry/ability-type.d.ts +8 -6
  97. package/engine/object-data/entry/ability-type.lua +62 -27
  98. package/engine/object-data/entry/buff-type/applicable.lua +13 -37
  99. package/engine/object-data/entry/buff-type.d.ts +1 -1
  100. package/engine/object-data/entry/buff-type.lua +2 -2
  101. package/engine/object-data/entry/destructible-type.d.ts +1 -1
  102. package/engine/object-data/entry/item-type.d.ts +15 -1
  103. package/engine/object-data/entry/item-type.lua +93 -2
  104. package/engine/object-data/entry/lightning-type.d.ts +1 -1
  105. package/engine/object-data/entry/sound-preset.d.ts +33 -0
  106. package/engine/object-data/entry/sound-preset.lua +140 -0
  107. package/engine/object-data/entry/unit-type.d.ts +8 -1
  108. package/engine/object-data/entry/unit-type.lua +61 -8
  109. package/engine/object-data/entry/upgrade.d.ts +1 -1
  110. package/engine/object-data/entry/upgrade.lua +4 -4
  111. package/engine/object-data/entry.d.ts +16 -14
  112. package/engine/object-data/entry.lua +60 -32
  113. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  114. package/engine/object-field/ability.d.ts +26 -3
  115. package/engine/object-field/ability.lua +54 -1
  116. package/engine/object-field.d.ts +2 -2
  117. package/engine/object-field.lua +4 -0
  118. package/engine/standard/entries/sound-preset.d.ts +10 -0
  119. package/engine/standard/entries/sound-preset.lua +10 -0
  120. package/engine/standard/fields/ability.d.ts +2 -0
  121. package/engine/standard/fields/ability.lua +2 -0
  122. package/engine/unit.d.ts +3 -0
  123. package/engine/unit.lua +3 -0
  124. package/index.d.ts +1 -0
  125. package/index.lua +1 -0
  126. package/lualib_bundle.lua +7 -2
  127. package/net/socket.d.ts +7 -1
  128. package/net/socket.lua +45 -4
  129. package/network.d.ts +1 -0
  130. package/network.lua +3 -2
  131. package/objutil/buff.lua +1 -1
  132. package/objutil/unit.lua +8 -0
  133. package/package.json +2 -2
  134. package/patch-lua.d.ts +0 -0
  135. package/patch-lua.lua +10 -0
  136. package/property.d.ts +55 -0
  137. package/property.lua +374 -0
  138. package/utility/arrays.d.ts +8 -1
  139. package/utility/arrays.lua +34 -3
  140. package/utility/lazy.d.ts +2 -0
  141. package/utility/lazy.lua +14 -0
  142. package/utility/linked-set.d.ts +11 -2
  143. package/utility/linked-set.lua +5 -2
  144. package/utility/reflection.lua +11 -7
  145. package/utility/types.d.ts +1 -0
  146. package/core/mapbounds.d.ts +0 -8
  147. package/core/mapbounds.lua +0 -12
@@ -6,6 +6,9 @@ import { ObjectDataEntryId } from "../object-data/entry";
6
6
  import { LightningTypeId } from "../object-data/entry/lightning-type";
7
7
  import { CombatClassifications } from "../object-data/auxiliary/combat-classification";
8
8
  import { UnitTypeId } from "../object-data/entry/unit-type";
9
+ import { BuffResistanceType } from "../object-data/auxiliary/buff-resistance-type";
10
+ import { BuffPolarity } from "../object-data/auxiliary/buff-polarity";
11
+ import { ReadonlyNonEmptyLinkedSet } from "../../utility/linked-set";
9
12
  export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
10
13
  protected get instanceClass(): typeof Ability;
11
14
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
@@ -42,9 +45,10 @@ export declare class AbilityStringField extends AbilityField<string, jabilitystr
42
45
  protected setNativeFieldValue(instance: Ability, value: string): boolean;
43
46
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<AbilityStringField>;
44
47
  }
45
- export declare abstract class AbilityArrayField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectArrayField<AbilityType, Ability, ValueType, NativeFieldType> {
48
+ export declare abstract class AbilityArrayField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectArrayField<AbilityType, Ability, ValueType, NativeFieldType> {
46
49
  protected get instanceClass(): typeof Ability;
47
50
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
51
+ protected hasNativeFieldValue(instance: Ability): boolean;
48
52
  }
49
53
  export declare class AbilityStringArrayField extends AbilityArrayField<string, jabilitystringlevelfield> {
50
54
  protected get defaultValue(): string;
@@ -107,11 +111,30 @@ export declare class AbilityAbilityTypeIdLevelField extends AbilityObjectDataEnt
107
111
  }
108
112
  export declare class AbilityUnitTypeIdLevelField extends AbilityObjectDataEntryIdLevelField<UnitTypeId> {
109
113
  }
114
+ export declare abstract class AbilityEnumLevelField<T extends number> extends AbilityLevelField<T, T, jabilityintegerlevelfield> {
115
+ protected abstract values: ReadonlyNonEmptyLinkedSet<T>;
116
+ protected get defaultValue(): T;
117
+ protected getNativeFieldById(id: number): jabilityintegerlevelfield;
118
+ protected getNativeFieldValue(instance: Ability, level: number): T;
119
+ protected setNativeFieldValue(instance: Ability, level: number, value: T): boolean;
120
+ static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityBooleanLevelField>;
121
+ }
122
+ export declare class AbilityBuffPolarityLevelField extends AbilityEnumLevelField<BuffPolarity> {
123
+ protected values: ReadonlyNonEmptyLinkedSet<BuffPolarity>;
124
+ }
125
+ export declare class AbilityBuffResistanceTypeLevelField extends AbilityEnumLevelField<BuffResistanceType> {
126
+ protected values: ReadonlyNonEmptyLinkedSet<BuffResistanceType>;
127
+ }
110
128
  export declare class AbilityCombatClassificationsLevelField extends AbilityLevelField<CombatClassifications, CombatClassifications, jabilityintegerlevelfield> {
111
129
  protected get defaultValue(): CombatClassifications;
112
130
  protected getNativeFieldById(id: number): jabilityintegerlevelfield;
113
131
  protected getNativeFieldValue(instance: Ability, level: number): CombatClassifications;
114
132
  protected setNativeFieldValue(instance: Ability, level: number, value: CombatClassifications): boolean;
115
133
  }
116
- export type AbilityDependentValue<ValueType extends boolean | number | string> = ValueType | AbilityField<ValueType> | AbilityLevelField<ValueType> | ((ability: Ability) => ValueType);
117
- export declare const resolveCurrentAbilityDependentValue: <ValueType extends boolean | number | string>(ability: Ability, value: AbilityDependentValue<ValueType>) => ValueType;
134
+ export type ReadonlySubscribableAbilityDependentValue<ValueType extends boolean | number | string> = ValueType | ReadonlyObjectFieldType<AbilityField<ValueType>> | ReadonlyObjectLevelFieldType<AbilityLevelField<ValueType>>;
135
+ export type SubscribableAbilityDependentValue<ValueType extends boolean | number | string> = ValueType | AbilityField<ValueType> | AbilityLevelField<ValueType>;
136
+ export type AbilityDependentValue<ValueType extends boolean | number | string> = SubscribableAbilityDependentValue<ValueType> | ((ability: Ability) => ValueType);
137
+ export declare const resolveCurrentAbilityDependentValue: {
138
+ <ValueType extends boolean | number | string>(ability: Ability, value: AbilityDependentValue<ValueType>): ValueType;
139
+ <ValueType extends boolean | number | string>(ability: Ability, value?: AbilityDependentValue<ValueType>): ValueType | undefined;
140
+ };
@@ -13,6 +13,8 @@ local ObjectField = ____object_2Dfield.ObjectField
13
13
  local ObjectLevelField = ____object_2Dfield.ObjectLevelField
14
14
  local ____ability_2Dtype = require("engine.object-data.entry.ability-type")
15
15
  local AbilityType = ____ability_2Dtype.AbilityType
16
+ local ____linked_2Dset = require("utility.linked-set")
17
+ local nonEmptyLinkedSetOf = ____linked_2Dset.nonEmptyLinkedSetOf
16
18
  local convertAbilityBooleanField = _G.ConvertAbilityBooleanField
17
19
  local convertAbilityIntegerField = _G.ConvertAbilityIntegerField
18
20
  local convertAbilityRealField = _G.ConvertAbilityRealField
@@ -195,6 +197,9 @@ __TS__ClassExtends(AbilityArrayField, ObjectArrayField)
195
197
  function AbilityArrayField.prototype.getObjectDataEntryId(self, instance)
196
198
  return instance.typeId
197
199
  end
200
+ function AbilityArrayField.prototype.hasNativeFieldValue(self, instance)
201
+ return instance:hasField(self.nativeField)
202
+ end
198
203
  __TS__SetDescriptor(
199
204
  AbilityArrayField.prototype,
200
205
  "instanceClass",
@@ -259,7 +264,7 @@ local AbilityLevelField = ____exports.AbilityLevelField
259
264
  AbilityLevelField.name = "AbilityLevelField"
260
265
  __TS__ClassExtends(AbilityLevelField, ObjectLevelField)
261
266
  function AbilityLevelField.prototype.getLevelCount(self, entry)
262
- return __TS__InstanceOf(entry, Ability) and #entry.levels or entry.levelCount
267
+ return entry.levelCount
263
268
  end
264
269
  function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
265
270
  return instance.typeId
@@ -431,6 +436,54 @@ ____exports.AbilityUnitTypeIdLevelField = __TS__Class()
431
436
  local AbilityUnitTypeIdLevelField = ____exports.AbilityUnitTypeIdLevelField
432
437
  AbilityUnitTypeIdLevelField.name = "AbilityUnitTypeIdLevelField"
433
438
  __TS__ClassExtends(AbilityUnitTypeIdLevelField, ____exports.AbilityObjectDataEntryIdLevelField)
439
+ ____exports.AbilityEnumLevelField = __TS__Class()
440
+ local AbilityEnumLevelField = ____exports.AbilityEnumLevelField
441
+ AbilityEnumLevelField.name = "AbilityEnumLevelField"
442
+ __TS__ClassExtends(AbilityEnumLevelField, ____exports.AbilityLevelField)
443
+ function AbilityEnumLevelField.prototype.getNativeFieldById(self, id)
444
+ return convertAbilityIntegerLevelField(id)
445
+ end
446
+ function AbilityEnumLevelField.prototype.getNativeFieldValue(self, instance, level)
447
+ local value = instance:getField(self.nativeField, level)
448
+ if self.values:contains(value) then
449
+ return value
450
+ end
451
+ return self.values:first()
452
+ end
453
+ function AbilityEnumLevelField.prototype.setNativeFieldValue(self, instance, level, value)
454
+ return instance:setField(self.nativeField, level, value)
455
+ end
456
+ __TS__SetDescriptor(
457
+ AbilityEnumLevelField.prototype,
458
+ "defaultValue",
459
+ {get = function(self)
460
+ return self.values:first()
461
+ end},
462
+ true
463
+ )
464
+ __TS__ObjectDefineProperty(
465
+ AbilityEnumLevelField,
466
+ "valueChangeEvent",
467
+ {get = function(self)
468
+ return self:getOrCreateValueChangeEvent()
469
+ end}
470
+ )
471
+ ____exports.AbilityBuffPolarityLevelField = __TS__Class()
472
+ local AbilityBuffPolarityLevelField = ____exports.AbilityBuffPolarityLevelField
473
+ AbilityBuffPolarityLevelField.name = "AbilityBuffPolarityLevelField"
474
+ __TS__ClassExtends(AbilityBuffPolarityLevelField, ____exports.AbilityEnumLevelField)
475
+ function AbilityBuffPolarityLevelField.prototype.____constructor(self, ...)
476
+ AbilityBuffPolarityLevelField.____super.prototype.____constructor(self, ...)
477
+ self.values = nonEmptyLinkedSetOf(0, 1, 2)
478
+ end
479
+ ____exports.AbilityBuffResistanceTypeLevelField = __TS__Class()
480
+ local AbilityBuffResistanceTypeLevelField = ____exports.AbilityBuffResistanceTypeLevelField
481
+ AbilityBuffResistanceTypeLevelField.name = "AbilityBuffResistanceTypeLevelField"
482
+ __TS__ClassExtends(AbilityBuffResistanceTypeLevelField, ____exports.AbilityEnumLevelField)
483
+ function AbilityBuffResistanceTypeLevelField.prototype.____constructor(self, ...)
484
+ AbilityBuffResistanceTypeLevelField.____super.prototype.____constructor(self, ...)
485
+ self.values = nonEmptyLinkedSetOf(1, 2, 3)
486
+ end
434
487
  local allowedTargetCombatClassificationsByLevelByAbilityTypeId = postcompile(function()
435
488
  local allowedTargetCombatClassificationsByLevelByAbilityTypeId = {}
436
489
  for ____, abilityType in ipairs(AbilityType:getAll()) do
@@ -16,6 +16,8 @@ declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEnt
16
16
  readonly id: ObjectFieldId;
17
17
  protected abstract getNativeFieldById(id: number): NativeFieldType;
18
18
  protected abstract getObjectDataEntryId(instance: InstanceType): ObjectDataEntryIdType<ObjectDataEntryType>;
19
+ protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
20
+ hasValue(instance: InstanceType): boolean;
19
21
  constructor(id: number);
20
22
  static create<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldConstructor<T>, id?: number): T & symbol;
21
23
  static of<T extends ObjectFieldBase<any, any, any, any>>(this: ObjectFieldAbstractConstructor<T>, id: number): T | undefined;
@@ -35,7 +37,6 @@ export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> =
35
37
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
36
38
  export declare abstract class ObjectField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType, NativeFieldType> {
37
39
  protected abstract readonly defaultValue: ValueType;
38
- protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
39
40
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
40
41
  protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
41
42
  getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
@@ -71,7 +72,6 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
71
72
  }
72
73
  export declare abstract class ObjectLevelField<ObjectDataEntryType extends ObjectDataEntry = ObjectDataEntry, InstanceType extends AnyNotNil = AnyNotNil, ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType = unknown> extends ObjectFieldBase<ObjectDataEntryType, InstanceType, ValueType[], NativeFieldType> {
73
74
  protected abstract readonly defaultValue: ValueType;
74
- protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
75
75
  protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
76
76
  protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;
77
77
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
@@ -46,6 +46,10 @@ end
46
46
  function ObjectFieldBase.prototype.supports(self, instance)
47
47
  return __TS__InstanceOf(instance, self.instanceClass)
48
48
  end
49
+ function ObjectFieldBase.prototype.hasValue(self, instance)
50
+ local defaultValueByObjectDataEntryId = defaultValueByObjectDataEntryIdByObjectFieldId[self.id]
51
+ return defaultValueByObjectDataEntryId ~= nil and defaultValueByObjectDataEntryId[self:getObjectDataEntryId(instance)] ~= nil or self:hasNativeFieldValue(instance)
52
+ end
49
53
  function ObjectFieldBase.create(self, id)
50
54
  return __TS__New(
51
55
  self,
@@ -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
@@ -687,6 +687,8 @@ export declare const DISABLE_OTHER_ABILITIES_ABILITY_BOOLEAN_LEVEL_FIELD: Abilit
687
687
  export declare const ALLOW_BOUNTY_ABILITY_BOOLEAN_LEVEL_FIELD: AbilityBooleanLevelField & symbol;
688
688
  export declare const ICON_NORMAL_ABILITY_STRING_LEVEL_FIELD: AbilityStringLevelField & symbol;
689
689
  export declare const CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD: AbilityStringArrayField & symbol;
690
+ export declare const CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
691
+ export declare const CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
690
692
  export declare const TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD: AbilityStringArrayField & symbol;
691
693
  export declare const TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
692
694
  export declare const TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD: AbilityStringField & symbol;
@@ -698,6 +698,8 @@ ____exports.DISABLE_OTHER_ABILITIES_ABILITY_BOOLEAN_LEVEL_FIELD = AbilityBoolean
698
698
  ____exports.ALLOW_BOUNTY_ABILITY_BOOLEAN_LEVEL_FIELD = AbilityBooleanLevelField:create(fourCC("Ntm4"))
699
699
  ____exports.ICON_NORMAL_ABILITY_STRING_LEVEL_FIELD = AbilityStringLevelField:create(fourCC("aart"))
700
700
  ____exports.CASTER_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = AbilityStringArrayField:create(fourCC("acat"))
701
+ ____exports.CASTER_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("acap"))
702
+ ____exports.CASTER_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("aca1"))
701
703
  ____exports.TARGET_EFFECT_MODEL_PATHS_ABILITY_STRING_ARRAY_FIELD = AbilityStringArrayField:create(fourCC("atat"))
702
704
  ____exports.TARGET_EFFECT_FIRST_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("ata0"))
703
705
  ____exports.TARGET_EFFECT_SECOND_ATTACHMENT_POINT_STRING_FIELD = AbilityStringField:create(fourCC("ata1"))
package/engine/unit.d.ts CHANGED
@@ -4,6 +4,7 @@ import "./internal/unit/ability";
4
4
  import "./internal/unit/allowed-targets";
5
5
  import "./internal/unit/buff";
6
6
  import "./internal/unit/expiration-timer";
7
+ import "./internal/unit/item";
7
8
  import "./internal/unit+ability";
8
9
  import "./internal/unit+damage";
9
10
  import "./internal/unit+rally";
@@ -15,6 +16,8 @@ import "./internal/unit-missile-launch";
15
16
  import "./internal/unit/ghost-counter";
16
17
  import "./internal/unit/invulnerability-counter";
17
18
  import "./internal/unit/detach-missiles";
19
+ import "./internal/unit/main-selected";
20
+ import "./internal/unit/add-item-to-slot-init";
18
21
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
19
22
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
20
23
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -4,6 +4,7 @@ require("engine.internal.unit.ability")
4
4
  require("engine.internal.unit.allowed-targets")
5
5
  require("engine.internal.unit.buff")
6
6
  require("engine.internal.unit.expiration-timer")
7
+ require("engine.internal.unit.item")
7
8
  require("engine.internal.unit+ability")
8
9
  require("engine.internal.unit+damage")
9
10
  require("engine.internal.unit+rally")
@@ -15,6 +16,8 @@ require("engine.internal.unit-missile-launch")
15
16
  require("engine.internal.unit.ghost-counter")
16
17
  require("engine.internal.unit.invulnerability-counter")
17
18
  require("engine.internal.unit.detach-missiles")
19
+ require("engine.internal.unit.main-selected")
20
+ require("engine.internal.unit.add-item-to-slot-init")
18
21
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
19
22
  do
20
23
  local ____unit = require("engine.internal.unit")
package/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  /** @noSelfInFile */
2
2
  import "./types";
3
+ import "./patch-lua";
3
4
  import "./patch-lualib";
4
5
  import "./patch-natives";
5
6
  import "./global/math";
package/index.lua CHANGED
@@ -1,5 +1,6 @@
1
1
  local ____exports = {}
2
2
  require("types")
3
+ require("patch-lua")
3
4
  require("patch-lualib")
4
5
  require("patch-natives")
5
6
  require("global.math")
package/lualib_bundle.lua CHANGED
@@ -1094,6 +1094,11 @@ do
1094
1094
  end
1095
1095
  if __TS__StringIncludes(_VERSION, "Lua 5.0") then
1096
1096
  return debug.traceback(("[Level " .. tostring(level)) .. "]")
1097
+ elseif _VERSION == "Lua 5.1" then
1098
+ return string.sub(
1099
+ debug.traceback("", level),
1100
+ 2
1101
+ )
1097
1102
  else
1098
1103
  return debug.traceback(nil, level)
1099
1104
  end
@@ -1102,7 +1107,7 @@ do
1102
1107
  return function(self)
1103
1108
  local description = getDescription(self)
1104
1109
  local caller = debug.getinfo(3, "f")
1105
- local isClassicLua = __TS__StringIncludes(_VERSION, "Lua 5.0") or _VERSION == "Lua 5.1"
1110
+ local isClassicLua = __TS__StringIncludes(_VERSION, "Lua 5.0")
1106
1111
  if isClassicLua or caller and caller.func ~= error then
1107
1112
  return description
1108
1113
  else
@@ -1126,7 +1131,7 @@ do
1126
1131
  end
1127
1132
  self.message = message
1128
1133
  self.name = "Error"
1129
- self.stack = getErrorStack(nil, self.constructor.new)
1134
+ self.stack = getErrorStack(nil, __TS__New)
1130
1135
  local metatable = getmetatable(self)
1131
1136
  if metatable and not metatable.__errorToStringPatched then
1132
1137
  metatable.__errorToStringPatched = true
package/net/socket.d.ts CHANGED
@@ -1,9 +1,15 @@
1
1
  /** @noSelfInFile */
2
2
  import { Event } from "../event";
3
3
  import { Player } from "../core/types/player";
4
+ declare const enum SocketPropertyKey {
5
+ ID = 0,
6
+ CHUNK_ID = 1
7
+ }
4
8
  export declare class Socket {
5
- private readonly id;
9
+ private readonly [SocketPropertyKey.ID];
10
+ private readonly [SocketPropertyKey.CHUNK_ID];
6
11
  readonly onMessage: Event<[Player, string]>;
7
12
  constructor();
8
13
  send(data: string): void;
9
14
  }
15
+ export {};
package/net/socket.lua CHANGED
@@ -7,6 +7,11 @@ local Event = ____event.Event
7
7
  local ____network = require("network")
8
8
  local send = ____network.send
9
9
  local onReceive = ____network.onReceive
10
+ local MAX_PAYLOAD_LENGTH = ____network.MAX_PAYLOAD_LENGTH
11
+ local ____math = require("math")
12
+ local ceil = ____math.ceil
13
+ local stringSub = string.sub
14
+ local tableConcat = table.concat
10
15
  local nextId = 0
11
16
  ____exports.Socket = __TS__Class()
12
17
  local Socket = ____exports.Socket
@@ -14,13 +19,49 @@ Socket.name = "Socket"
14
19
  function Socket.prototype.____constructor(self)
15
20
  local ____tostring_0 = tostring
16
21
  nextId = nextId + 1
17
- self.id = ____tostring_0(nextId)
22
+ self[0] = ____tostring_0(nextId)
23
+ local ____tostring_1 = tostring
24
+ nextId = nextId + 1
25
+ self[1] = ____tostring_1(nextId)
18
26
  self.onMessage = __TS__New(Event)
19
- onReceive[self.id]:addListener(function(sender, data)
20
- Event.invoke(self.onMessage, sender, data)
27
+ local chunksByPlayer = {}
28
+ onReceive[self[0]]:addListener(function(sender, data)
29
+ local chunks = chunksByPlayer[sender]
30
+ if chunks ~= nil then
31
+ chunks[#chunks + 1] = data
32
+ Event.invoke(
33
+ self.onMessage,
34
+ sender,
35
+ tableConcat(chunks)
36
+ )
37
+ chunksByPlayer[sender] = nil
38
+ else
39
+ Event.invoke(self.onMessage, sender, data)
40
+ end
41
+ end)
42
+ onReceive[self[1]]:addListener(function(sender, data)
43
+ local chunks = chunksByPlayer[sender]
44
+ if chunks == nil then
45
+ chunks = {}
46
+ chunksByPlayer[sender] = chunks
47
+ end
48
+ chunks[#chunks + 1] = data
21
49
  end)
22
50
  end
23
51
  function Socket.prototype.send(self, data)
24
- send(self.id, data)
52
+ local chunks = ceil(#data / MAX_PAYLOAD_LENGTH) - 1
53
+ local offset = 1
54
+ for _ = 0, chunks - 1 do
55
+ local nextOffset = offset + MAX_PAYLOAD_LENGTH
56
+ send(
57
+ self[1],
58
+ stringSub(data, offset, nextOffset - 1)
59
+ )
60
+ offset = nextOffset
61
+ end
62
+ send(
63
+ self[0],
64
+ stringSub(data, offset)
65
+ )
25
66
  end
26
67
  return ____exports
package/network.d.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  import { Event } from "./event";
3
3
  import { Player } from "./core/types/player";
4
4
  import { Operation, OperationContinue, OperationMonitor } from "./operation";
5
+ export declare const MAX_PAYLOAD_LENGTH = 255;
5
6
  export declare const onReceive: {
6
7
  [prefix: string]: Event<[Player, string]>;
7
8
  } & {
package/network.lua CHANGED
@@ -25,6 +25,7 @@ local concat = table.concat
25
25
  local pack = string.pack
26
26
  local sub = string.sub
27
27
  local ____unpack = string.unpack
28
+ ____exports.MAX_PAYLOAD_LENGTH = 255
28
29
  ____exports.onReceive = setmetatable(
29
30
  {},
30
31
  {__index = function(self, prefix)
@@ -42,11 +43,11 @@ ____exports.onReceive = setmetatable(
42
43
  end}
43
44
  )
44
45
  function ____exports.send(id, payload)
45
- if #payload > 255 then
46
+ if #payload > ____exports.MAX_PAYLOAD_LENGTH then
46
47
  error(
47
48
  __TS__New(
48
49
  IllegalArgumentException,
49
- "payload length must be <= 256, but was " .. tostring(#payload)
50
+ (("payload length must be <= " .. tostring(____exports.MAX_PAYLOAD_LENGTH)) .. ", but was ") .. tostring(#payload)
50
51
  ),
51
52
  0
52
53
  )
package/objutil/buff.lua CHANGED
@@ -762,7 +762,7 @@ Unit.onDamaging:addListener(function(source, target, event)
762
762
  end)
763
763
  end
764
764
  end)
765
- Unit.onItemPickup:addListener(function(unit, item)
765
+ Unit.itemPickedUpEvent:addListener(function(unit, item)
766
766
  if item.powerup and item:hasAbility(fourCC("APdi")) then
767
767
  end
768
768
  end)
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", "")
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", "")
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.c16baee",
4
+ "version": "0.0.1-dev.c362181",
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.07dd222"
27
+ "warpack": "0.0.1-dev.dfbb169"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@typescript-eslint/eslint-plugin": "^8.13.0",
package/patch-lua.d.ts ADDED
File without changes
package/patch-lua.lua ADDED
@@ -0,0 +1,10 @@
1
+ local getmetatable = _G.getmetatable
2
+ local ipairs = _G.ipairs
3
+
4
+ _G.ipairs = function(t)
5
+ local metatable = getmetatable(t)
6
+ if metatable and metatable.__ipairs then
7
+ return metatable.__ipairs(t)
8
+ end
9
+ return ipairs(t)
10
+ end
package/property.d.ts ADDED
@@ -0,0 +1,55 @@
1
+ /** @noSelfInFile */
2
+ import { Player } from "./core/types/player";
3
+ import { Event } from "./event";
4
+ export declare class PersistentPropertiesConfig {
5
+ static defaultFileName: string;
6
+ }
7
+ declare const enum PropertyPropertyKey {
8
+ DEFAULT_VALUE = 0,
9
+ VALUE = 1,
10
+ IS_CHANGED = 2
11
+ }
12
+ export declare class Property<T> {
13
+ readonly valueChangeEvent: Event<[newValue: T, oldValue: T]>;
14
+ private [PropertyPropertyKey.DEFAULT_VALUE];
15
+ private [PropertyPropertyKey.VALUE];
16
+ private [PropertyPropertyKey.IS_CHANGED]?;
17
+ constructor(defaultValue: T);
18
+ get defaultValue(): T;
19
+ set defaultValue(defaultValue: T);
20
+ get value(): T;
21
+ set value(value: T);
22
+ get isChanged(): boolean;
23
+ reset(): boolean;
24
+ set(value: T): boolean;
25
+ get(): T;
26
+ }
27
+ declare const enum PlayerPropertyPropertyKey {
28
+ DEFAULT_VALUE = 0,
29
+ VALUE_BY_PLAYER = 1,
30
+ IS_CHANGED_BY_PLAYER = 2
31
+ }
32
+ export declare class PlayerProperty<T> {
33
+ readonly valueChangeEvent: Event<[player: Player, newValue: T, oldValue: T]>;
34
+ private readonly [PlayerPropertyPropertyKey.DEFAULT_VALUE];
35
+ private readonly [PlayerPropertyPropertyKey.VALUE_BY_PLAYER];
36
+ private readonly [PlayerPropertyPropertyKey.IS_CHANGED_BY_PLAYER];
37
+ constructor(defaultValue: T);
38
+ isChanged(player: Player): boolean;
39
+ reset(player: Player): boolean;
40
+ set(player: Player, value: T): boolean;
41
+ get(player: Player): T;
42
+ }
43
+ export declare class PersistentProperty<T extends undefined | boolean | number | string> extends Property<T> {
44
+ readonly id: number;
45
+ constructor(id: number, defaultValue: T, valueChangeEventListener?: (newValue: T, oldValue: T) => void);
46
+ reset(): boolean;
47
+ set(value: T): boolean;
48
+ }
49
+ export declare class PersistentPlayerProperty<T extends string | number | boolean> extends PlayerProperty<T> {
50
+ readonly id: number;
51
+ constructor(id: number, initialValue: T, valueChangeEventListener?: (player: Player, newValue: T, oldValue: T) => void);
52
+ reset(player: Player): boolean;
53
+ set(player: Player, value: T): boolean;
54
+ }
55
+ export {};