warscript 0.0.1-dev.c37d12c → 0.0.1-dev.ccd5725

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 (35) hide show
  1. package/attributes.d.ts +13 -0
  2. package/attributes.lua +16 -0
  3. package/core/types/handle.d.ts +2 -1
  4. package/core/types/handle.lua +5 -0
  5. package/engine/behaviour/ability/apply-unit-behavior.d.ts +8 -4
  6. package/engine/behaviour/ability/apply-unit-behavior.lua +31 -9
  7. package/engine/internal/ability.d.ts +1 -1
  8. package/engine/internal/mechanics/ability-duration.d.ts +1 -3
  9. package/engine/internal/mechanics/ability-duration.lua +2 -0
  10. package/engine/internal/mechanics/cast-ability.d.ts +2 -0
  11. package/engine/internal/mechanics/cast-ability.lua +86 -0
  12. package/engine/internal/unit/detach-missiles.d.ts +7 -0
  13. package/engine/internal/unit/detach-missiles.lua +30 -0
  14. package/engine/object-data/entry/ability-type/blink.d.ts +10 -0
  15. package/engine/object-data/entry/ability-type/blink.lua +39 -0
  16. package/engine/object-data/entry/ability-type.d.ts +1 -0
  17. package/engine/object-data/entry/ability-type.lua +1 -0
  18. package/engine/object-data/entry/buff-type/applicable.lua +27 -71
  19. package/engine/object-data/entry/unit-type.d.ts +17 -0
  20. package/engine/object-data/entry/unit-type.lua +166 -44
  21. package/engine/object-field/ability.d.ts +7 -5
  22. package/engine/object-field/ability.lua +6 -0
  23. package/engine/object-field/unit.d.ts +1 -0
  24. package/engine/object-field/unit.lua +3 -0
  25. package/engine/object-field.d.ts +6 -5
  26. package/engine/object-field.lua +37 -18
  27. package/engine/standard/entries/unit-type.d.ts +3 -0
  28. package/engine/standard/entries/unit-type.lua +3 -0
  29. package/engine/unit.d.ts +1 -0
  30. package/engine/unit.lua +1 -0
  31. package/global/vec2.lua +1 -0
  32. package/package.json +2 -2
  33. package/utility/linked-set.d.ts +1 -0
  34. package/utility/linked-set.lua +16 -0
  35. package/utility/types.d.ts +2 -2
@@ -28,21 +28,21 @@ function UnitTypeWeapon.prototype.____constructor(self, unitType, index)
28
28
  end
29
29
  __TS__SetDescriptor(
30
30
  UnitTypeWeapon.prototype,
31
- "backSwingDuration",
31
+ "attackType",
32
32
  {
33
33
  get = function(self)
34
34
  local ____self_0 = self.unitType
35
- return ____self_0.getNumberField(
35
+ return ____self_0.getStringField(
36
36
  ____self_0,
37
- "ubs" .. tostring(self.index)
37
+ ("ua" .. tostring(self.index)) .. "t"
38
38
  )
39
39
  end,
40
- set = function(self, backSwingDuration)
40
+ set = function(self, attackType)
41
41
  local ____self_1 = self.unitType
42
- ____self_1.setNumberField(
42
+ ____self_1.setStringField(
43
43
  ____self_1,
44
- "ubs" .. tostring(self.index),
45
- backSwingDuration
44
+ ("ua" .. tostring(self.index)) .. "t",
45
+ attackType
46
46
  )
47
47
  end
48
48
  },
@@ -50,21 +50,21 @@ __TS__SetDescriptor(
50
50
  )
51
51
  __TS__SetDescriptor(
52
52
  UnitTypeWeapon.prototype,
53
- "impactDelay",
53
+ "backSwingDuration",
54
54
  {
55
55
  get = function(self)
56
56
  local ____self_2 = self.unitType
57
57
  return ____self_2.getNumberField(
58
58
  ____self_2,
59
- "udp" .. tostring(self.index)
59
+ "ubs" .. tostring(self.index)
60
60
  )
61
61
  end,
62
- set = function(self, impactDelay)
62
+ set = function(self, backSwingDuration)
63
63
  local ____self_3 = self.unitType
64
64
  ____self_3.setNumberField(
65
65
  ____self_3,
66
- "udp" .. tostring(self.index),
67
- impactDelay
66
+ "ubs" .. tostring(self.index),
67
+ backSwingDuration
68
68
  )
69
69
  end
70
70
  },
@@ -72,21 +72,21 @@ __TS__SetDescriptor(
72
72
  )
73
73
  __TS__SetDescriptor(
74
74
  UnitTypeWeapon.prototype,
75
- "missileModelPath",
75
+ "impactDelay",
76
76
  {
77
77
  get = function(self)
78
78
  local ____self_4 = self.unitType
79
- return ____self_4.getStringField(
79
+ return ____self_4.getNumberField(
80
80
  ____self_4,
81
- ("ua" .. tostring(self.index)) .. "m"
81
+ "udp" .. tostring(self.index)
82
82
  )
83
83
  end,
84
- set = function(self, missileModelPath)
84
+ set = function(self, impactDelay)
85
85
  local ____self_5 = self.unitType
86
- ____self_5.setStringField(
86
+ ____self_5.setNumberField(
87
87
  ____self_5,
88
- ("ua" .. tostring(self.index)) .. "m",
89
- missileModelPath
88
+ "udp" .. tostring(self.index),
89
+ impactDelay
90
90
  )
91
91
  end
92
92
  },
@@ -94,21 +94,21 @@ __TS__SetDescriptor(
94
94
  )
95
95
  __TS__SetDescriptor(
96
96
  UnitTypeWeapon.prototype,
97
- "soundType",
97
+ "missileModelPath",
98
98
  {
99
99
  get = function(self)
100
100
  local ____self_6 = self.unitType
101
101
  return ____self_6.getStringField(
102
102
  ____self_6,
103
- "ucs" .. tostring(self.index)
103
+ ("ua" .. tostring(self.index)) .. "m"
104
104
  )
105
105
  end,
106
- set = function(self, soundType)
106
+ set = function(self, missileModelPath)
107
107
  local ____self_7 = self.unitType
108
108
  ____self_7.setStringField(
109
109
  ____self_7,
110
- "ucs" .. tostring(self.index),
111
- soundType
110
+ ("ua" .. tostring(self.index)) .. "m",
111
+ missileModelPath
112
112
  )
113
113
  end
114
114
  },
@@ -116,21 +116,21 @@ __TS__SetDescriptor(
116
116
  )
117
117
  __TS__SetDescriptor(
118
118
  UnitTypeWeapon.prototype,
119
- "soundTypeSD",
119
+ "range",
120
120
  {
121
121
  get = function(self)
122
122
  local ____self_8 = self.unitType
123
- return ____self_8.getStringField(
123
+ return ____self_8.getNumberField(
124
124
  ____self_8,
125
- ("ucs" .. tostring(self.index)) .. ":sd"
125
+ ("ua" .. tostring(self.index)) .. "r"
126
126
  )
127
127
  end,
128
- set = function(self, soundTypeSD)
128
+ set = function(self, range)
129
129
  local ____self_9 = self.unitType
130
- ____self_9.setStringField(
130
+ ____self_9.setNumberField(
131
131
  ____self_9,
132
- ("ucs" .. tostring(self.index)) .. ":sd",
133
- soundTypeSD
132
+ ("ua" .. tostring(self.index)) .. "r",
133
+ range
134
134
  )
135
135
  end
136
136
  },
@@ -138,19 +138,63 @@ __TS__SetDescriptor(
138
138
  )
139
139
  __TS__SetDescriptor(
140
140
  UnitTypeWeapon.prototype,
141
- "soundTypeHD",
141
+ "soundType",
142
142
  {
143
143
  get = function(self)
144
144
  local ____self_10 = self.unitType
145
145
  return ____self_10.getStringField(
146
146
  ____self_10,
147
- ("ucs" .. tostring(self.index)) .. ":hd"
147
+ "ucs" .. tostring(self.index)
148
148
  )
149
149
  end,
150
- set = function(self, soundTypeHD)
150
+ set = function(self, soundType)
151
151
  local ____self_11 = self.unitType
152
152
  ____self_11.setStringField(
153
153
  ____self_11,
154
+ "ucs" .. tostring(self.index),
155
+ soundType
156
+ )
157
+ end
158
+ },
159
+ true
160
+ )
161
+ __TS__SetDescriptor(
162
+ UnitTypeWeapon.prototype,
163
+ "soundTypeSD",
164
+ {
165
+ get = function(self)
166
+ local ____self_12 = self.unitType
167
+ return ____self_12.getStringField(
168
+ ____self_12,
169
+ ("ucs" .. tostring(self.index)) .. ":sd"
170
+ )
171
+ end,
172
+ set = function(self, soundTypeSD)
173
+ local ____self_13 = self.unitType
174
+ ____self_13.setStringField(
175
+ ____self_13,
176
+ ("ucs" .. tostring(self.index)) .. ":sd",
177
+ soundTypeSD
178
+ )
179
+ end
180
+ },
181
+ true
182
+ )
183
+ __TS__SetDescriptor(
184
+ UnitTypeWeapon.prototype,
185
+ "soundTypeHD",
186
+ {
187
+ get = function(self)
188
+ local ____self_14 = self.unitType
189
+ return ____self_14.getStringField(
190
+ ____self_14,
191
+ ("ucs" .. tostring(self.index)) .. ":hd"
192
+ )
193
+ end,
194
+ set = function(self, soundTypeHD)
195
+ local ____self_15 = self.unitType
196
+ ____self_15.setStringField(
197
+ ____self_15,
154
198
  ("ucs" .. tostring(self.index)) .. ":hd",
155
199
  soundTypeHD
156
200
  )
@@ -683,6 +727,45 @@ __TS__SetDescriptor(
683
727
  },
684
728
  true
685
729
  )
730
+ __TS__SetDescriptor(
731
+ UnitType.prototype,
732
+ "runSpeed",
733
+ {
734
+ get = function(self)
735
+ return self:getNumberField("urun")
736
+ end,
737
+ set = function(self, runSpeed)
738
+ self:setNumberField("urun", runSpeed)
739
+ end
740
+ },
741
+ true
742
+ )
743
+ __TS__SetDescriptor(
744
+ UnitType.prototype,
745
+ "runSpeedSD",
746
+ {
747
+ get = function(self)
748
+ return self:getNumberField("urun:sd")
749
+ end,
750
+ set = function(self, runSpeedSD)
751
+ self:setNumberField("urun:sd", runSpeedSD)
752
+ end
753
+ },
754
+ true
755
+ )
756
+ __TS__SetDescriptor(
757
+ UnitType.prototype,
758
+ "runSpeedHD",
759
+ {
760
+ get = function(self)
761
+ return self:getNumberField("urun:hd")
762
+ end,
763
+ set = function(self, runSpeedHD)
764
+ self:setNumberField("urun:hd", runSpeedHD)
765
+ end
766
+ },
767
+ true
768
+ )
686
769
  __TS__SetDescriptor(
687
770
  UnitType.prototype,
688
771
  "selectionCircleScale",
@@ -891,6 +974,45 @@ __TS__SetDescriptor(
891
974
  },
892
975
  true
893
976
  )
977
+ __TS__SetDescriptor(
978
+ UnitType.prototype,
979
+ "walkSpeed",
980
+ {
981
+ get = function(self)
982
+ return self:getNumberField("uwal")
983
+ end,
984
+ set = function(self, walkSpeed)
985
+ self:setNumberField("uwal", walkSpeed)
986
+ end
987
+ },
988
+ true
989
+ )
990
+ __TS__SetDescriptor(
991
+ UnitType.prototype,
992
+ "walkSpeedSD",
993
+ {
994
+ get = function(self)
995
+ return self:getNumberField("uwal:sd")
996
+ end,
997
+ set = function(self, walkSpeedSD)
998
+ self:setNumberField("uwal:sd", walkSpeedSD)
999
+ end
1000
+ },
1001
+ true
1002
+ )
1003
+ __TS__SetDescriptor(
1004
+ UnitType.prototype,
1005
+ "walkSpeedHD",
1006
+ {
1007
+ get = function(self)
1008
+ return self:getNumberField("uwal:hd")
1009
+ end,
1010
+ set = function(self, walkSpeedHD)
1011
+ self:setNumberField("uwal:hd", walkSpeedHD)
1012
+ end
1013
+ },
1014
+ true
1015
+ )
894
1016
  __TS__SetDescriptor(
895
1017
  UnitType.prototype,
896
1018
  "armorSoundType",
@@ -1262,11 +1384,11 @@ __TS__SetDescriptor(
1262
1384
  implementReadonlyNumberIndexSupplier(
1263
1385
  ____exports.UnitType,
1264
1386
  function(id)
1265
- local ____class_12 = __TS__Class()
1266
- ____class_12.name = ____class_12.name
1267
- __TS__ClassExtends(____class_12, ____exports.UnitType)
1268
- ____class_12.BASE_ID = id
1269
- return ____class_12
1387
+ local ____class_16 = __TS__Class()
1388
+ ____class_16.name = ____class_16.name
1389
+ __TS__ClassExtends(____class_16, ____exports.UnitType)
1390
+ ____class_16.BASE_ID = id
1391
+ return ____class_16
1270
1392
  end
1271
1393
  )
1272
1394
  ____exports.HeroUnitType = __TS__Class()
@@ -1296,11 +1418,11 @@ __TS__SetDescriptor(
1296
1418
  implementReadonlyNumberIndexSupplier(
1297
1419
  ____exports.HeroUnitType,
1298
1420
  function(id)
1299
- local ____class_13 = __TS__Class()
1300
- ____class_13.name = ____class_13.name
1301
- __TS__ClassExtends(____class_13, ____exports.HeroUnitType)
1302
- ____class_13.BASE_ID = id
1303
- return ____class_13
1421
+ local ____class_17 = __TS__Class()
1422
+ ____class_17.name = ____class_17.name
1423
+ __TS__ClassExtends(____class_17, ____exports.HeroUnitType)
1424
+ ____class_17.BASE_ID = id
1425
+ return ____class_17
1304
1426
  end
1305
1427
  )
1306
1428
  return ____exports
@@ -1,14 +1,15 @@
1
1
  /** @noSelfInFile */
2
- import { Ability } from "../internal/ability";
2
+ import { Ability, jabilityfield } from "../internal/ability";
3
3
  import { ObjectArrayField, ObjectField, ObjectFieldValueChangeEvent, ObjectLevelField, ObjectLevelFieldValueChangeEvent, ReadonlyObjectFieldType, ReadonlyObjectLevelFieldType } from "../object-field";
4
4
  import { AbilityType, AbilityTypeId } from "../object-data/entry/ability-type";
5
5
  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
- export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType = unknown> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
9
+ export declare abstract class AbilityField<ValueType extends number | string | boolean = number | string | boolean, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectField<AbilityType, Ability, ValueType, NativeFieldType> {
10
10
  protected get instanceClass(): typeof Ability;
11
11
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
12
+ protected hasNativeFieldValue(instance: Ability): boolean;
12
13
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<AbilityField>>;
13
14
  }
14
15
  export declare class AbilityBooleanField extends AbilityField<boolean, jabilitybooleanfield> {
@@ -18,7 +19,7 @@ export declare class AbilityBooleanField extends AbilityField<boolean, jabilityb
18
19
  protected setNativeFieldValue(instance: Ability, value: boolean): boolean;
19
20
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<AbilityBooleanField>;
20
21
  }
21
- export declare abstract class AbilityNumberField<NativeFieldType = unknown> extends AbilityField<number, NativeFieldType> {
22
+ export declare abstract class AbilityNumberField<NativeFieldType extends jabilityfield = jabilityfield> extends AbilityField<number, NativeFieldType> {
22
23
  protected get defaultValue(): number;
23
24
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<AbilityNumberField>;
24
25
  }
@@ -59,10 +60,11 @@ export declare abstract class AbilityObjectDataEntryIdArrayField<T extends Objec
59
60
  }
60
61
  export declare class AbilityLightningTypeIdArrayField extends AbilityObjectDataEntryIdArrayField<LightningTypeId> {
61
62
  }
62
- export declare abstract class AbilityLevelField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType = unknown> extends ObjectLevelField<AbilityType, Ability, ValueType, InputValueType, NativeFieldType> {
63
+ export declare abstract class AbilityLevelField<ValueType extends number | string | boolean = number | string | boolean, InputValueType extends ValueType = never, NativeFieldType extends jabilityfield = jabilityfield> extends ObjectLevelField<AbilityType, Ability, ValueType, InputValueType, NativeFieldType> {
63
64
  protected get instanceClass(): typeof Ability;
64
65
  protected getLevelCount(entry: AbilityType | Ability): number;
65
66
  protected getObjectDataEntryId(instance: Ability): AbilityTypeId;
67
+ protected hasNativeFieldValue(instance: Ability): boolean;
66
68
  static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<ReadonlyObjectLevelFieldType<AbilityLevelField>>;
67
69
  }
68
70
  export declare class AbilityBooleanLevelField extends AbilityLevelField<boolean, boolean, jabilityintegerlevelfield> {
@@ -72,7 +74,7 @@ export declare class AbilityBooleanLevelField extends AbilityLevelField<boolean,
72
74
  protected setNativeFieldValue(instance: Ability, level: number, value: boolean): boolean;
73
75
  static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityBooleanLevelField>;
74
76
  }
75
- export declare abstract class AbilityNumberLevelField<NativeFieldType = unknown> extends AbilityLevelField<number, number, NativeFieldType> {
77
+ export declare abstract class AbilityNumberLevelField<NativeFieldType extends jabilityfield = jabilityfield> extends AbilityLevelField<number, number, NativeFieldType> {
76
78
  protected get defaultValue(): number;
77
79
  static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityNumberLevelField>;
78
80
  }
@@ -27,6 +27,9 @@ __TS__ClassExtends(AbilityField, ObjectField)
27
27
  function AbilityField.prototype.getObjectDataEntryId(self, instance)
28
28
  return instance.typeId
29
29
  end
30
+ function AbilityField.prototype.hasNativeFieldValue(self, instance)
31
+ return instance:hasField(self.nativeField)
32
+ end
30
33
  __TS__SetDescriptor(
31
34
  AbilityField.prototype,
32
35
  "instanceClass",
@@ -261,6 +264,9 @@ end
261
264
  function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
262
265
  return instance.typeId
263
266
  end
267
+ function AbilityLevelField.prototype.hasNativeFieldValue(self, instance)
268
+ return instance:hasField(self.nativeField)
269
+ end
264
270
  __TS__SetDescriptor(
265
271
  AbilityLevelField.prototype,
266
272
  "instanceClass",
@@ -9,6 +9,7 @@ export declare abstract class UnitField<ValueType extends number | string | bool
9
9
  export declare class UnitStringField extends UnitField<string, junitstringfield> {
10
10
  protected get defaultValue(): string;
11
11
  protected getNativeFieldById(id: number): junitstringfield;
12
+ protected hasNativeFieldValue(): boolean;
12
13
  protected getNativeFieldValue(instance: Unit): string;
13
14
  protected getObjectDataEntryId(instance: Unit): UnitTypeId;
14
15
  protected setNativeFieldValue(instance: Unit, value: string): boolean;
@@ -29,6 +29,9 @@ __TS__ClassExtends(UnitStringField, ____exports.UnitField)
29
29
  function UnitStringField.prototype.getNativeFieldById(self, id)
30
30
  return ConvertUnitStringField(id)
31
31
  end
32
+ function UnitStringField.prototype.hasNativeFieldValue(self)
33
+ return true
34
+ end
32
35
  function UnitStringField.prototype.getNativeFieldValue(self, instance)
33
36
  return instance:getField(self.nativeField)
34
37
  end
@@ -9,7 +9,6 @@ export type ObjectFieldId = number & {
9
9
  export type ObjectFieldConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (new (id: number) => T);
10
10
  export type ObjectFieldAbstractConstructor<T extends ObjectFieldBase<any, any, any, any>> = OmitConstructor<typeof ObjectFieldBase> & (abstract new (id: number) => T);
11
11
  declare abstract class ObjectFieldBase<ObjectDataEntryType extends ObjectDataEntry, InstanceType extends AnyNotNil, ValueType, NativeFieldType> {
12
- protected readonly valueByInstance: LuaMap<InstanceType, ValueType>;
13
12
  protected abstract readonly instanceClass: AbstractConstructor<InstanceType> | Function;
14
13
  supports(instance: AnyNotNil): instance is InstanceType & {
15
14
  readonly __oneSidedTypeGuard: unique symbol;
@@ -33,22 +32,23 @@ export type ObjectFieldValueChangeEvent<T extends ObjectField<any, any, any, any
33
32
  previousValue: ValueType,
34
33
  newValue: ValueType
35
34
  ]> : never;
36
- export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue">;
35
+ export type ReadonlyObjectFieldType<T extends ObjectField<any, any, any, any>> = Omit<T, "setValue" | "removeValue" | "trySetValue">;
37
36
  type ReadonlyObjectFieldConstructor<T extends ObjectField> = OmitConstructor<typeof ObjectField> & (abstract new (...args: any[]) => ReadonlyObjectFieldType<T>);
38
37
  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> {
39
38
  protected abstract readonly defaultValue: ValueType;
40
- accepts(value: unknown): value is ValueType;
39
+ protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
41
40
  protected abstract getNativeFieldValue(instance: InstanceType): ValueType;
42
41
  protected abstract setNativeFieldValue(instance: InstanceType, value: ValueType): boolean;
43
42
  getValue(entry: ObjectDataEntryType | InstanceType): ValueType;
44
43
  setValue(entry: ObjectDataEntryType | InstanceType, value: ValueType): boolean;
45
44
  removeValue(entry: ObjectDataEntryType): boolean;
45
+ trySetValue(entry: ObjectDataEntryType | InstanceType, value: unknown): boolean;
46
46
  private invokeValueChangeEvent;
47
47
  private invokeValueChangeEventRecursive;
48
48
  protected static getOrCreateValueChangeEvent<T extends ObjectField, R extends ReadonlyObjectFieldType<T>>(this: ReadonlyObjectFieldConstructor<T>): ObjectFieldValueChangeEvent<R>;
49
49
  static get valueChangeEvent(): ObjectFieldValueChangeEvent<ReadonlyObjectFieldType<ObjectField>>;
50
50
  }
51
- export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue">;
51
+ export type ReadonlyObjectLevelFieldType<T extends ObjectLevelField<any, any, any, any>> = Omit<T, "setValue" | "trySetValue">;
52
52
  export type ObjectLevelFieldValueChangeEvent<T extends ObjectLevelField<any, any, any, any> | ReadonlyObjectLevelFieldType<ObjectLevelField<any, any, any, any>>> = T extends ObjectLevelField<any, infer InstanceType, infer ValueType, any, any> ? DispatchingEvent<[
53
53
  instance: InstanceType,
54
54
  field: T,
@@ -72,12 +72,13 @@ export declare abstract class ObjectArrayField<ObjectDataEntryType extends Objec
72
72
  }
73
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> {
74
74
  protected abstract readonly defaultValue: ValueType;
75
- accepts(value: unknown): value is ValueType;
75
+ protected abstract hasNativeFieldValue(instance: InstanceType): boolean;
76
76
  protected abstract getNativeFieldValue(instance: InstanceType, level: number): ValueType;
77
77
  protected abstract setNativeFieldValue(instance: InstanceType, level: number, value: ValueType): boolean;
78
78
  protected abstract getLevelCount(entry: ObjectDataEntryType | InstanceType): number;
79
79
  getValue<LevelType extends [number] | []>(entry: ObjectDataEntryType | InstanceType, ...[level]: LevelType): LevelType extends [number] ? ValueType : ValueType[];
80
80
  setValue(entry: ObjectDataEntryType | InstanceType, ...[levelOrValue, value]: [value: ObjectDataEntryLevelFieldValueSupplier<InputValueType, ValueType>] | [level: number, value: InputValueType]): boolean;
81
+ trySetValue(entry: ObjectDataEntryType | InstanceType, levelOrValue: number | unknown, value?: unknown): boolean;
81
82
  private invokeValueChangeEvent;
82
83
  private invokeValueChangeEventRecursive;
83
84
  protected static getOrCreateValueChangeEvent<T extends ObjectLevelField, R extends ReadonlyObjectLevelFieldType<T>>(this: ReadonlyObjectLevelFieldConstructor<T>): ObjectLevelFieldValueChangeEvent<R>;
@@ -71,9 +71,6 @@ ____exports.ObjectField = __TS__Class()
71
71
  local ObjectField = ____exports.ObjectField
72
72
  ObjectField.name = "ObjectField"
73
73
  __TS__ClassExtends(ObjectField, ObjectFieldBase)
74
- function ObjectField.prototype.accepts(self, value)
75
- return __TS__TypeOf(value) == __TS__TypeOf(self.defaultValue)
76
- end
77
74
  function ObjectField.prototype.getValue(self, entry)
78
75
  if __TS__InstanceOf(entry, ObjectDataEntry) then
79
76
  local defaultValueByObjectDataEntryId = (warpack.compiletime and compiletimeDefaultValueByObjectDataEntryIdByObjectFieldId or defaultValueByObjectDataEntryIdByObjectFieldId)[self.id]
@@ -135,13 +132,15 @@ function ObjectField.prototype.setValue(self, entry, value)
135
132
  return true
136
133
  end
137
134
  end
135
+ if not self:hasNativeFieldValue(entry) then
136
+ return false
137
+ end
138
138
  local previousValue = self:getNativeFieldValue(entry)
139
139
  if value ~= previousValue then
140
- if self:setNativeFieldValue(entry, value) then
141
- self:invokeValueChangeEvent(entry, self, previousValue, value)
142
- else
140
+ if not self:setNativeFieldValue(entry, value) then
143
141
  return false
144
142
  end
143
+ self:invokeValueChangeEvent(entry, self, previousValue, value)
145
144
  end
146
145
  return true
147
146
  end
@@ -159,6 +158,12 @@ function ObjectField.prototype.removeValue(self, entry)
159
158
  end
160
159
  return false
161
160
  end
161
+ function ObjectField.prototype.trySetValue(self, entry, value)
162
+ if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
163
+ return false
164
+ end
165
+ return self:setValue(entry, value)
166
+ end
162
167
  function ObjectField.prototype.invokeValueChangeEvent(self, ...)
163
168
  self:invokeValueChangeEventRecursive(
164
169
  getClass(self),
@@ -273,9 +278,6 @@ ____exports.ObjectLevelField = __TS__Class()
273
278
  local ObjectLevelField = ____exports.ObjectLevelField
274
279
  ObjectLevelField.name = "ObjectLevelField"
275
280
  __TS__ClassExtends(ObjectLevelField, ObjectFieldBase)
276
- function ObjectLevelField.prototype.accepts(self, value)
277
- return __TS__TypeOf(value) == __TS__TypeOf(self.defaultValue)
278
- end
279
281
  function ObjectLevelField.prototype.getValue(self, entry, level)
280
282
  if level == nil then
281
283
  local result = {}
@@ -390,22 +392,39 @@ function ObjectLevelField.prototype.setValue(self, entry, levelOrValue, value)
390
392
  return true
391
393
  end
392
394
  end
395
+ if not self:hasNativeFieldValue(entry) then
396
+ return false
397
+ end
393
398
  local previousValue = self:getNativeFieldValue(entry, level)
394
399
  if value ~= previousValue then
395
- if self:setNativeFieldValue(entry, level, value) then
396
- self:invokeValueChangeEvent(
397
- entry,
398
- self,
399
- level,
400
- previousValue,
401
- value
402
- )
403
- else
400
+ if not self:setNativeFieldValue(entry, level, value) then
404
401
  return false
405
402
  end
403
+ self:invokeValueChangeEvent(
404
+ entry,
405
+ self,
406
+ level,
407
+ previousValue,
408
+ value
409
+ )
406
410
  end
407
411
  return true
408
412
  end
413
+ function ObjectLevelField.prototype.trySetValue(self, entry, levelOrValue, value)
414
+ if value ~= nil then
415
+ if __TS__TypeOf(value) ~= __TS__TypeOf(self.defaultValue) then
416
+ return false
417
+ end
418
+ if type(levelOrValue) ~= "number" then
419
+ return false
420
+ end
421
+ return self:setValue(entry, levelOrValue, value)
422
+ end
423
+ if __TS__TypeOf(levelOrValue) ~= __TS__TypeOf(self.defaultValue) then
424
+ return false
425
+ end
426
+ return self:setValue(entry, levelOrValue)
427
+ end
409
428
  function ObjectLevelField.prototype.invokeValueChangeEvent(self, ...)
410
429
  self:invokeValueChangeEventRecursive(
411
430
  getClass(self),
@@ -30,6 +30,9 @@ export declare const DEMON_HUNTER_DEMON_FORM_HERO_UNIT_TYPE_ID: StandardHeroUnit
30
30
  export declare const ABOMINATION_UNIT_TYPE_ID: StandardUnitTypeId;
31
31
  export declare const GHOUL_UNIT_TYPE_ID: StandardUnitTypeId;
32
32
  export declare const DEATH_KNIGHT_HERO_UNIT_TYPE_ID: StandardHeroUnitTypeId;
33
+ export declare const ZOMBIE_UNIT_TYPE_ID: StandardUnitTypeId;
34
+ export declare const ZOMBIE_FEMALE_UNIT_TYPE_ID: StandardUnitTypeId;
35
+ export declare const ARTHAS_EVIL_HERO_UNIT_TYPE_ID: StandardHeroUnitTypeId;
33
36
  export declare const DIRE_MAMMOTH_UNIT_TYPE_ID: StandardUnitTypeId;
34
37
  export declare const ELDER_JUNGLE_STALKER_UNIT_TYPE_ID: StandardUnitTypeId;
35
38
  export declare const ENRAGED_ELEMENTAL_UNIT_TYPE_ID: StandardUnitTypeId;
@@ -29,6 +29,9 @@ ____exports.DEMON_HUNTER_DEMON_FORM_HERO_UNIT_TYPE_ID = fourCC("Edmm")
29
29
  ____exports.ABOMINATION_UNIT_TYPE_ID = fourCC("uabo")
30
30
  ____exports.GHOUL_UNIT_TYPE_ID = fourCC("ugho")
31
31
  ____exports.DEATH_KNIGHT_HERO_UNIT_TYPE_ID = fourCC("Udea")
32
+ ____exports.ZOMBIE_UNIT_TYPE_ID = fourCC("nzom")
33
+ ____exports.ZOMBIE_FEMALE_UNIT_TYPE_ID = fourCC("nzof")
34
+ ____exports.ARTHAS_EVIL_HERO_UNIT_TYPE_ID = fourCC("Uear")
32
35
  ____exports.DIRE_MAMMOTH_UNIT_TYPE_ID = fourCC("nmdr")
33
36
  ____exports.ELDER_JUNGLE_STALKER_UNIT_TYPE_ID = fourCC("njga")
34
37
  ____exports.ENRAGED_ELEMENTAL_UNIT_TYPE_ID = fourCC("nele")
package/engine/unit.d.ts CHANGED
@@ -14,6 +14,7 @@ import "./internal/unit/missile";
14
14
  import "./internal/unit-missile-launch";
15
15
  import "./internal/unit/ghost-counter";
16
16
  import "./internal/unit/invulnerability-counter";
17
+ import "./internal/unit/detach-missiles";
17
18
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
18
19
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
19
20
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -14,6 +14,7 @@ require("engine.internal.unit.missile")
14
14
  require("engine.internal.unit-missile-launch")
15
15
  require("engine.internal.unit.ghost-counter")
16
16
  require("engine.internal.unit.invulnerability-counter")
17
+ require("engine.internal.unit.detach-missiles")
17
18
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
18
19
  do
19
20
  local ____unit = require("engine.internal.unit")
package/global/vec2.lua CHANGED
@@ -15,6 +15,7 @@ local abs = math.abs
15
15
 
16
16
  local location = Location and Location(0, 0)
17
17
  local moveLocation = MoveLocation
18
+ local getLocationZ = GetLocationZ
18
19
 
19
20
  local vec2 = {}
20
21
 
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.c37d12c",
4
+ "version": "0.0.1-dev.ccd5725",
5
5
  "description": "A typescript library for Warcraft III using Warpack.",
6
6
  "keywords": [
7
7
  "warcraft",
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "peerDependencies": {
24
24
  "@warscript/language-extensions": "^0.0.1",
25
- "@warscript/tstl-plugin": "^0.0.1",
25
+ "@warscript/tstl-plugin": "^0.0.2",
26
26
  "typescript-to-lua": "^1.24.1",
27
27
  "lua-types": "^2.13.1",
28
28
  "warpack": "0.0.1-dev.5bdabe5"
@@ -44,6 +44,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
44
44
  sortBy<R>(selector: ((value: T) => R) | KeysOfType<T, R>): void;
45
45
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
46
46
  }
47
+ export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
47
48
  export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
48
49
  export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | null | undefined)[]) => LinkedSet<T>;
49
50
  export {};