warscript 0.0.1-dev.fa6dee5 → 0.0.1-dev.fcc9d08

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 (122) 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/sound.d.ts +1 -0
  10. package/core/types/sound.lua +32 -2
  11. package/core/util.d.ts +1 -1
  12. package/core/util.lua +13 -1
  13. package/decl/index.d.ts +1 -0
  14. package/engine/behavior.d.ts +6 -6
  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/damage.d.ts +33 -11
  21. package/engine/behaviour/ability/damage.lua +89 -31
  22. package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
  23. package/engine/behaviour/ability/emulate-impact.lua +28 -0
  24. package/engine/behaviour/ability/heal.d.ts +33 -6
  25. package/engine/behaviour/ability/heal.lua +89 -10
  26. package/engine/behaviour/ability/instant-impact.d.ts +2 -2
  27. package/engine/behaviour/ability/instant-impact.lua +4 -19
  28. package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
  29. package/engine/behaviour/ability/on-command-impact.lua +25 -0
  30. package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
  31. package/engine/behaviour/ability/remove-buffs.lua +28 -0
  32. package/engine/behaviour/ability/restore-mana.d.ts +15 -0
  33. package/engine/behaviour/ability/restore-mana.lua +29 -0
  34. package/engine/behaviour/ability.d.ts +15 -3
  35. package/engine/behaviour/ability.lua +93 -34
  36. package/engine/behaviour/unit.d.ts +8 -2
  37. package/engine/behaviour/unit.lua +27 -0
  38. package/engine/buff.d.ts +95 -38
  39. package/engine/buff.lua +431 -209
  40. package/engine/game-map.d.ts +7 -0
  41. package/engine/game-map.lua +32 -0
  42. package/engine/internal/ability.d.ts +16 -13
  43. package/engine/internal/ability.lua +80 -76
  44. package/engine/internal/item/ability.lua +106 -0
  45. package/engine/internal/item+owner.lua +2 -2
  46. package/engine/internal/item.d.ts +2 -2
  47. package/engine/internal/item.lua +56 -25
  48. package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
  49. package/engine/internal/misc/ability-disable-counter.lua +13 -0
  50. package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
  51. package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
  52. package/engine/internal/object-data/evasion-probability.d.ts +2 -0
  53. package/engine/internal/object-data/evasion-probability.lua +16 -0
  54. package/engine/internal/unit/ability.d.ts +10 -1
  55. package/engine/internal/unit/ability.lua +36 -14
  56. package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
  57. package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
  58. package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
  59. package/engine/internal/unit/add-item-to-slot.lua +52 -0
  60. package/engine/internal/unit/bonus.d.ts +6 -2
  61. package/engine/internal/unit/bonus.lua +23 -1
  62. package/engine/internal/unit/ignore-events-items.d.ts +2 -0
  63. package/engine/internal/unit/ignore-events-items.lua +5 -0
  64. package/engine/internal/unit/item.d.ts +24 -0
  65. package/engine/internal/unit/item.lua +78 -0
  66. package/engine/internal/unit/main-selected.d.ts +13 -0
  67. package/engine/internal/unit/main-selected.lua +51 -0
  68. package/engine/internal/unit+ability.lua +2 -2
  69. package/engine/internal/unit+transport.lua +4 -10
  70. package/engine/internal/unit-missile-launch.lua +24 -5
  71. package/engine/internal/unit.d.ts +27 -11
  72. package/engine/internal/unit.lua +175 -86
  73. package/engine/internal/utility.lua +12 -0
  74. package/engine/lightning.d.ts +12 -5
  75. package/engine/lightning.lua +48 -14
  76. package/engine/local-client.d.ts +7 -2
  77. package/engine/local-client.lua +82 -0
  78. package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
  79. package/engine/object-data/auxiliary/animation-name.lua +16 -0
  80. package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
  81. package/engine/object-data/entry/ability-type/blank-configurable.lua +21 -1
  82. package/engine/object-data/entry/ability-type/curse.lua +2 -2
  83. package/engine/object-data/entry/ability-type.lua +8 -12
  84. package/engine/object-data/entry/buff-type/applicable.lua +10 -34
  85. package/engine/object-data/entry/item-type.d.ts +14 -0
  86. package/engine/object-data/entry/item-type.lua +91 -0
  87. package/engine/object-data/entry/unit-type.d.ts +7 -0
  88. package/engine/object-data/entry/unit-type.lua +53 -0
  89. package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
  90. package/engine/object-field/ability.d.ts +26 -3
  91. package/engine/object-field/ability.lua +54 -1
  92. package/engine/object-field.d.ts +2 -2
  93. package/engine/object-field.lua +4 -0
  94. package/engine/standard/fields/ability.d.ts +2 -0
  95. package/engine/standard/fields/ability.lua +2 -0
  96. package/engine/unit.d.ts +3 -0
  97. package/engine/unit.lua +3 -0
  98. package/event.d.ts +2 -2
  99. package/event.lua +9 -5
  100. package/index.d.ts +1 -0
  101. package/index.lua +1 -0
  102. package/lualib_bundle.lua +7 -2
  103. package/net/socket.d.ts +7 -1
  104. package/net/socket.lua +45 -4
  105. package/network.d.ts +1 -0
  106. package/network.lua +3 -2
  107. package/objutil/buff.lua +1 -1
  108. package/objutil/unit.lua +8 -0
  109. package/package.json +2 -2
  110. package/patch-lua.d.ts +0 -0
  111. package/patch-lua.lua +10 -0
  112. package/property.d.ts +55 -0
  113. package/property.lua +374 -0
  114. package/utility/arrays.d.ts +8 -1
  115. package/utility/arrays.lua +34 -3
  116. package/utility/lazy.d.ts +2 -0
  117. package/utility/lazy.lua +14 -0
  118. package/utility/linked-set.d.ts +11 -2
  119. package/utility/linked-set.lua +5 -2
  120. package/utility/types.d.ts +1 -0
  121. package/core/mapbounds.d.ts +0 -8
  122. package/core/mapbounds.lua +0 -12
@@ -256,4 +256,95 @@ __TS__SetDescriptor(
256
256
  },
257
257
  true
258
258
  )
259
+ __TS__SetDescriptor(
260
+ ItemType.prototype,
261
+ "cooldownGroupId",
262
+ {
263
+ get = function(self)
264
+ return self:getObjectDataEntryIdField("icid")
265
+ end,
266
+ set = function(self, cooldownGroupId)
267
+ self:setObjectDataEntryIdField("icid", cooldownGroupId)
268
+ end
269
+ },
270
+ true
271
+ )
272
+ __TS__SetDescriptor(
273
+ ItemType.prototype,
274
+ "goldCost",
275
+ {
276
+ get = function(self)
277
+ return self:getNumberField("igol")
278
+ end,
279
+ set = function(self, goldCost)
280
+ self:setNumberField("igol", goldCost)
281
+ end
282
+ },
283
+ true
284
+ )
285
+ __TS__SetDescriptor(
286
+ ItemType.prototype,
287
+ "lumberCost",
288
+ {
289
+ get = function(self)
290
+ return self:getNumberField("ilum")
291
+ end,
292
+ set = function(self, lumberCost)
293
+ self:setNumberField("ilum", lumberCost)
294
+ end
295
+ },
296
+ true
297
+ )
298
+ __TS__SetDescriptor(
299
+ ItemType.prototype,
300
+ "activelyUsed",
301
+ {
302
+ get = function(self)
303
+ return self:getBooleanField("iusa")
304
+ end,
305
+ set = function(self, activelyUsed)
306
+ self:setBooleanField("iusa", activelyUsed)
307
+ end
308
+ },
309
+ true
310
+ )
311
+ __TS__SetDescriptor(
312
+ ItemType.prototype,
313
+ "perishable",
314
+ {
315
+ get = function(self)
316
+ return self:getBooleanField("iper")
317
+ end,
318
+ set = function(self, perishable)
319
+ self:setBooleanField("iper", perishable)
320
+ end
321
+ },
322
+ true
323
+ )
324
+ __TS__SetDescriptor(
325
+ ItemType.prototype,
326
+ "initialStackSize",
327
+ {
328
+ get = function(self)
329
+ return self:getNumberField("iuse")
330
+ end,
331
+ set = function(self, initialStackSize)
332
+ self:setNumberField("iuse", initialStackSize)
333
+ end
334
+ },
335
+ true
336
+ )
337
+ __TS__SetDescriptor(
338
+ ItemType.prototype,
339
+ "maximumStackSize",
340
+ {
341
+ get = function(self)
342
+ return self:getNumberField("ista")
343
+ end,
344
+ set = function(self, maximumStackSize)
345
+ self:setNumberField("ista", maximumStackSize)
346
+ end
347
+ },
348
+ true
349
+ )
259
350
  return ____exports
@@ -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
@@ -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
@@ -1,5 +1,6 @@
1
1
  local ____lualib = require("lualib_bundle")
2
2
  local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
3
4
  local ____exports = {}
4
5
  local ____preconditions = require("utility.preconditions")
5
6
  local checkNotNull = ____preconditions.checkNotNull
@@ -60,4 +61,10 @@ function ObjectDataEntryIdGenerator.prototype.next(self)
60
61
  self.id = id
61
62
  return id
62
63
  end
64
+ ---
65
+ -- @internal For use by internal systems only.
66
+ ____exports.abilityTypeIdGenerator = __TS__New(
67
+ ____exports.ObjectDataEntryIdGenerator,
68
+ fourCC("A000")
69
+ )
63
70
  return ____exports
@@ -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,
@@ -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/event.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** @noSelfInFile */
2
- export type EventListener<T extends any[]> = (...args: T) => void;
2
+ export type EventListener<T extends any[]> = (this: void, ...args: T) => void;
3
3
  export declare const enum EventListenerPriority {
4
4
  LOWEST = 0,
5
5
  LOW = 1,
@@ -37,7 +37,7 @@ export type EventDispatchTable<EventType extends Event<any>, KeyType extends num
37
37
  };
38
38
  export type DispatchingEvent<P extends any[], T extends Event<P> = Event<P>, S extends Event<P> = Event<P>> = T & EventDispatchTable<S>;
39
39
  export declare const createDispatchingEvent: {
40
- <T extends Event<any>, S extends Event<EventParameters<T>>>(underlyingEvent: T, extractKey: (...args: EventParameters<T>) => number, ...createEvent: [...(Event<any> extends S ? [(() => S)?] : [() => S])]): DispatchingEvent<EventParameters<T>, T>;
40
+ <T extends Event<any>, S extends Event<EventParameters<T>>>(underlyingEvent: T, extractKey: (this: void, ...args: EventParameters<T>) => number, invokeEvent?: (this: void, event: S, ...args: EventParameters<T>) => unknown, ...createEvent: [...(Event<any> extends S ? [((this: void) => S)?] : [(this: void) => S])]): DispatchingEvent<EventParameters<T>, T, S>;
41
41
  };
42
42
  export declare class DependentInitializingEvent<T extends any[], R extends any[]> extends InitializingEvent<R, EventListener<T>> {
43
43
  constructor(underlyingEvent: Event<T>, priority: EventListenerPriority, collector: (...args: T) => LuaMultiReturn<[false] | [true, ...R]>);
package/event.lua CHANGED
@@ -146,8 +146,13 @@ function TriggerEvent.prototype.____constructor(self, r, c)
146
146
  end
147
147
  )
148
148
  end
149
- ____exports.createDispatchingEvent = function(underlyingEvent, extractKey, createEvent)
150
- local actualCreateEvent = createEvent or (function() return __TS__New(____exports.Event) end)
149
+ ____exports.createDispatchingEvent = function(underlyingEvent, extractKey, invokeEvent, createEvent)
150
+ if invokeEvent == nil then
151
+ invokeEvent = ____exports.Event.invoke
152
+ end
153
+ if createEvent == nil then
154
+ createEvent = function() return __TS__New(____exports.Event) end
155
+ end
151
156
  local initialized = false
152
157
  return setmetatable(
153
158
  {},
@@ -157,17 +162,16 @@ ____exports.createDispatchingEvent = function(underlyingEvent, extractKey, creat
157
162
  return underlyingEvent[id]
158
163
  end
159
164
  if not initialized then
160
- local invoke = ____exports.Event.invoke
161
165
  underlyingEvent:addListener(function(...)
162
166
  local key = extractKey(...)
163
167
  local event = rawget(self, key)
164
168
  if event then
165
- invoke(event, ...)
169
+ invokeEvent(event, ...)
166
170
  end
167
171
  end)
168
172
  initialized = true
169
173
  end
170
- local event = actualCreateEvent()
174
+ local event = createEvent()
171
175
  rawset(self, id, event)
172
176
  return event
173
177
  end,
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
  } & {