warscript 0.0.1-dev.ec4cf89 → 0.0.1-dev.f967846

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 (45) hide show
  1. package/core/types/frame.d.ts +6 -0
  2. package/core/types/frame.lua +91 -1
  3. package/core/util.d.ts +1 -1
  4. package/core/util.lua +6 -0
  5. package/engine/behavior.d.ts +2 -2
  6. package/engine/behavior.lua +6 -6
  7. package/engine/behaviour/ability/apply-buff.d.ts +3 -5
  8. package/engine/behaviour/unit.d.ts +5 -0
  9. package/engine/behaviour/unit.lua +20 -0
  10. package/engine/buff.d.ts +32 -11
  11. package/engine/buff.lua +142 -61
  12. package/engine/internal/ability.d.ts +3 -11
  13. package/engine/internal/ability.lua +9 -78
  14. package/engine/internal/item+owner.lua +2 -2
  15. package/engine/internal/unit/bonus.d.ts +4 -2
  16. package/engine/internal/unit/bonus.lua +6 -1
  17. package/engine/internal/unit/item.d.ts +24 -0
  18. package/engine/internal/unit/item.lua +84 -0
  19. package/engine/internal/unit/main-selected.d.ts +7 -0
  20. package/engine/internal/unit/main-selected.lua +40 -0
  21. package/engine/internal/unit+ability.lua +2 -2
  22. package/engine/internal/unit-missile-launch.lua +24 -5
  23. package/engine/internal/unit.d.ts +24 -10
  24. package/engine/internal/unit.lua +106 -60
  25. package/engine/local-client.d.ts +7 -2
  26. package/engine/local-client.lua +82 -0
  27. package/engine/object-data/entry/item-type.d.ts +12 -0
  28. package/engine/object-data/entry/item-type.lua +78 -0
  29. package/engine/object-field/ability.d.ts +17 -0
  30. package/engine/object-field/ability.lua +51 -1
  31. package/engine/unit.d.ts +2 -0
  32. package/engine/unit.lua +2 -0
  33. package/index.d.ts +1 -0
  34. package/index.lua +1 -0
  35. package/net/socket.d.ts +7 -1
  36. package/net/socket.lua +45 -4
  37. package/network.d.ts +1 -0
  38. package/network.lua +3 -2
  39. package/objutil/buff.lua +1 -1
  40. package/package.json +2 -2
  41. package/patch-lua.d.ts +0 -0
  42. package/patch-lua.lua +10 -0
  43. package/utility/linked-set.d.ts +11 -2
  44. package/utility/linked-set.lua +5 -2
  45. package/utility/types.d.ts +1 -0
@@ -1,4 +1,5 @@
1
1
  local ____lualib = require("lualib_bundle")
2
+ local __TS__ArrayMap = ____lualib.__TS__ArrayMap
2
3
  local __TS__Class = ____lualib.__TS__Class
3
4
  local __TS__ObjectDefineProperty = ____lualib.__TS__ObjectDefineProperty
4
5
  local __TS__New = ____lualib.__TS__New
@@ -6,13 +7,25 @@ local ____exports = {}
6
7
  local ____unit = require("core.types.unit")
7
8
  local Unit = ____unit.Unit
8
9
  local ____event = require("event")
10
+ local Event = ____event.Event
9
11
  local TriggerEvent = ____event.TriggerEvent
12
+ local ____frame = require("core.types.frame")
13
+ local Frame = ____frame.Frame
14
+ local ____player = require("core.types.player")
15
+ local Player = ____player.Player
16
+ local ____timer = require("core.types.timer")
17
+ local Timer = ____timer.Timer
10
18
  local loadTOCFile = BlzLoadTOCFile
11
19
  local getLocalClientWidth = BlzGetLocalClientWidth
12
20
  local getLocalClientHeight = BlzGetLocalClientHeight
13
21
  local isLocalClientActive = BlzIsLocalClientActive
22
+ local isHeroUnitId = IsHeroUnitId
23
+ local getHandleId = GetHandleId
14
24
  local getMouseFocusUnit = BlzGetMouseFocusUnit
25
+ local getUnitRealField = BlzGetUnitRealField
26
+ local getUnitTypeId = GetUnitTypeId
15
27
  local getLocale = BlzGetLocale
28
+ local tableSort = table.sort
16
29
  local tocPath = "_warscript\\IsHD.toc"
17
30
  compiletime(function()
18
31
  if currentMap then
@@ -21,6 +34,29 @@ compiletime(function()
21
34
  currentMap:addFileString("_HD.w3mod\\" .. tocPath, fdfPath .. "\r\n")
22
35
  end
23
36
  end)
37
+ local selectionButtons
38
+ Timer:run(function()
39
+ selectionButtons = __TS__ArrayMap(
40
+ Frame:byName("SimpleInfoPanelUnitDetail").parent:getChild(5):getChild(0).children,
41
+ function(____, frame) return frame:getChild(1) end
42
+ )
43
+ end)
44
+ local localSelectedUnits = {}
45
+ local indexByLocalSelectedUnit = {}
46
+ local function compareUnitsSelectionPriority(a, b)
47
+ local aHandle = a.handle
48
+ local bHandle = b.handle
49
+ local priorityDelta = getUnitRealField(bHandle, UNIT_RF_PRIORITY) - getUnitRealField(aHandle, UNIT_RF_PRIORITY)
50
+ if priorityDelta ~= 0 then
51
+ return priorityDelta < 0
52
+ end
53
+ local aTypeId = getUnitTypeId(aHandle)
54
+ local bTypeId = getUnitTypeId(bHandle)
55
+ local orderDelta = (isHeroUnitId(aTypeId) and getHandleId(aHandle) or aTypeId) - (isHeroUnitId(bTypeId) and getHandleId(bHandle) or bTypeId)
56
+ return (orderDelta ~= 0 and orderDelta or indexByLocalSelectedUnit[a] - indexByLocalSelectedUnit[b]) < 0
57
+ end
58
+ local mainSelectedUnitChangeEvent
59
+ local previousMainSelectedUnit
24
60
  ____exports.LocalClient = __TS__Class()
25
61
  local LocalClient = ____exports.LocalClient
26
62
  LocalClient.name = "LocalClient"
@@ -69,6 +105,52 @@ __TS__ObjectDefineProperty(
69
105
  return Unit:of(getMouseFocusUnit())
70
106
  end}
71
107
  )
108
+ __TS__ObjectDefineProperty(
109
+ LocalClient,
110
+ "mainSelectedUnit",
111
+ {get = function(self)
112
+ Unit:getSelectionOf(Player["local"], localSelectedUnits)
113
+ for i = 1, #localSelectedUnits do
114
+ indexByLocalSelectedUnit[localSelectedUnits[i]] = i
115
+ end
116
+ tableSort(localSelectedUnits, compareUnitsSelectionPriority)
117
+ local mainSelectedUnitIndex
118
+ if selectionButtons and #localSelectedUnits > 1 then
119
+ local maxButtonWidth = 0
120
+ for i = 0, #selectionButtons - 1 do
121
+ local width = selectionButtons[i + 1].width
122
+ if width > maxButtonWidth then
123
+ maxButtonWidth = width
124
+ mainSelectedUnitIndex = i
125
+ end
126
+ end
127
+ end
128
+ local mainSelectedUnit = localSelectedUnits[(mainSelectedUnitIndex or 0) + 1]
129
+ for i = 1, #localSelectedUnits do
130
+ indexByLocalSelectedUnit[localSelectedUnits[i]] = nil
131
+ localSelectedUnits[i] = nil
132
+ end
133
+ if mainSelectedUnitChangeEvent ~= nil and mainSelectedUnit ~= previousMainSelectedUnit then
134
+ local previousPreviousMainSelectedUnit = previousMainSelectedUnit
135
+ previousMainSelectedUnit = mainSelectedUnit
136
+ Event.invoke(mainSelectedUnitChangeEvent, previousPreviousMainSelectedUnit, previousMainSelectedUnit)
137
+ end
138
+ return mainSelectedUnit
139
+ end}
140
+ )
141
+ __TS__ObjectDefineProperty(
142
+ LocalClient,
143
+ "mainSelectedUnitChangeEvent",
144
+ {get = function(self)
145
+ if mainSelectedUnitChangeEvent == nil then
146
+ mainSelectedUnitChangeEvent = __TS__New(Event)
147
+ Timer.onPeriod[1 / 64]:addListener(function()
148
+ local _ = ____exports.LocalClient.mainSelectedUnit
149
+ end)
150
+ end
151
+ return mainSelectedUnitChangeEvent
152
+ end}
153
+ )
72
154
  LocalClient.onDisconnect = __TS__New(
73
155
  TriggerEvent,
74
156
  function(trigger)
@@ -45,4 +45,16 @@ export declare class ItemType extends ObjectDataEntry<ItemTypeId> {
45
45
  set tooltipText(tooltipText: string);
46
46
  get tooltipExtendedText(): string;
47
47
  set tooltipExtendedText(tooltipText: string);
48
+ get goldCost(): number;
49
+ set goldCost(goldCost: number);
50
+ get lumberCost(): number;
51
+ set lumberCost(lumberCost: number);
52
+ get activelyUsed(): boolean;
53
+ set activelyUsed(activelyUsed: boolean);
54
+ get perishable(): boolean;
55
+ set perishable(perishable: boolean);
56
+ get initialStackSize(): number;
57
+ set initialStackSize(initialStackSize: number);
58
+ get maximumStackSize(): number;
59
+ set maximumStackSize(maximumStackSize: number);
48
60
  }
@@ -256,4 +256,82 @@ __TS__SetDescriptor(
256
256
  },
257
257
  true
258
258
  )
259
+ __TS__SetDescriptor(
260
+ ItemType.prototype,
261
+ "goldCost",
262
+ {
263
+ get = function(self)
264
+ return self:getNumberField("igol")
265
+ end,
266
+ set = function(self, goldCost)
267
+ self:setNumberField("igol", goldCost)
268
+ end
269
+ },
270
+ true
271
+ )
272
+ __TS__SetDescriptor(
273
+ ItemType.prototype,
274
+ "lumberCost",
275
+ {
276
+ get = function(self)
277
+ return self:getNumberField("ilum")
278
+ end,
279
+ set = function(self, lumberCost)
280
+ self:setNumberField("ilum", lumberCost)
281
+ end
282
+ },
283
+ true
284
+ )
285
+ __TS__SetDescriptor(
286
+ ItemType.prototype,
287
+ "activelyUsed",
288
+ {
289
+ get = function(self)
290
+ return self:getBooleanField("iusa")
291
+ end,
292
+ set = function(self, activelyUsed)
293
+ self:setBooleanField("iusa", activelyUsed)
294
+ end
295
+ },
296
+ true
297
+ )
298
+ __TS__SetDescriptor(
299
+ ItemType.prototype,
300
+ "perishable",
301
+ {
302
+ get = function(self)
303
+ return self:getBooleanField("iper")
304
+ end,
305
+ set = function(self, perishable)
306
+ self:setBooleanField("iper", perishable)
307
+ end
308
+ },
309
+ true
310
+ )
311
+ __TS__SetDescriptor(
312
+ ItemType.prototype,
313
+ "initialStackSize",
314
+ {
315
+ get = function(self)
316
+ return self:getNumberField("iuse")
317
+ end,
318
+ set = function(self, initialStackSize)
319
+ self:setNumberField("iuse", initialStackSize)
320
+ end
321
+ },
322
+ true
323
+ )
324
+ __TS__SetDescriptor(
325
+ ItemType.prototype,
326
+ "maximumStackSize",
327
+ {
328
+ get = function(self)
329
+ return self:getNumberField("ista")
330
+ end,
331
+ set = function(self, maximumStackSize)
332
+ self:setNumberField("ista", maximumStackSize)
333
+ end
334
+ },
335
+ true
336
+ )
259
337
  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;
@@ -107,6 +110,20 @@ export declare class AbilityAbilityTypeIdLevelField extends AbilityObjectDataEnt
107
110
  }
108
111
  export declare class AbilityUnitTypeIdLevelField extends AbilityObjectDataEntryIdLevelField<UnitTypeId> {
109
112
  }
113
+ export declare abstract class AbilityEnumLevelField<T extends number> extends AbilityLevelField<T, T, jabilityintegerlevelfield> {
114
+ protected abstract values: ReadonlyNonEmptyLinkedSet<T>;
115
+ protected get defaultValue(): T;
116
+ protected getNativeFieldById(id: number): jabilityintegerlevelfield;
117
+ protected getNativeFieldValue(instance: Ability, level: number): T;
118
+ protected setNativeFieldValue(instance: Ability, level: number, value: T): boolean;
119
+ static get valueChangeEvent(): ObjectLevelFieldValueChangeEvent<AbilityBooleanLevelField>;
120
+ }
121
+ export declare class AbilityBuffPolarityLevelField extends AbilityEnumLevelField<BuffPolarity> {
122
+ protected values: ReadonlyNonEmptyLinkedSet<BuffPolarity>;
123
+ }
124
+ export declare class AbilityBuffResistanceTypeLevelField extends AbilityEnumLevelField<BuffResistanceType> {
125
+ protected values: ReadonlyNonEmptyLinkedSet<BuffResistanceType>;
126
+ }
110
127
  export declare class AbilityCombatClassificationsLevelField extends AbilityLevelField<CombatClassifications, CombatClassifications, jabilityintegerlevelfield> {
111
128
  protected get defaultValue(): CombatClassifications;
112
129
  protected getNativeFieldById(id: number): jabilityintegerlevelfield;
@@ -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
@@ -259,7 +261,7 @@ local AbilityLevelField = ____exports.AbilityLevelField
259
261
  AbilityLevelField.name = "AbilityLevelField"
260
262
  __TS__ClassExtends(AbilityLevelField, ObjectLevelField)
261
263
  function AbilityLevelField.prototype.getLevelCount(self, entry)
262
- return __TS__InstanceOf(entry, Ability) and #entry.levels or entry.levelCount
264
+ return entry.levelCount
263
265
  end
264
266
  function AbilityLevelField.prototype.getObjectDataEntryId(self, instance)
265
267
  return instance.typeId
@@ -431,6 +433,54 @@ ____exports.AbilityUnitTypeIdLevelField = __TS__Class()
431
433
  local AbilityUnitTypeIdLevelField = ____exports.AbilityUnitTypeIdLevelField
432
434
  AbilityUnitTypeIdLevelField.name = "AbilityUnitTypeIdLevelField"
433
435
  __TS__ClassExtends(AbilityUnitTypeIdLevelField, ____exports.AbilityObjectDataEntryIdLevelField)
436
+ ____exports.AbilityEnumLevelField = __TS__Class()
437
+ local AbilityEnumLevelField = ____exports.AbilityEnumLevelField
438
+ AbilityEnumLevelField.name = "AbilityEnumLevelField"
439
+ __TS__ClassExtends(AbilityEnumLevelField, ____exports.AbilityLevelField)
440
+ function AbilityEnumLevelField.prototype.getNativeFieldById(self, id)
441
+ return convertAbilityIntegerLevelField(id)
442
+ end
443
+ function AbilityEnumLevelField.prototype.getNativeFieldValue(self, instance, level)
444
+ local value = instance:getField(self.nativeField, level)
445
+ if self.values:contains(value) then
446
+ return value
447
+ end
448
+ return self.values:first()
449
+ end
450
+ function AbilityEnumLevelField.prototype.setNativeFieldValue(self, instance, level, value)
451
+ return instance:setField(self.nativeField, level, value)
452
+ end
453
+ __TS__SetDescriptor(
454
+ AbilityEnumLevelField.prototype,
455
+ "defaultValue",
456
+ {get = function(self)
457
+ return self.values:first()
458
+ end},
459
+ true
460
+ )
461
+ __TS__ObjectDefineProperty(
462
+ AbilityEnumLevelField,
463
+ "valueChangeEvent",
464
+ {get = function(self)
465
+ return self:getOrCreateValueChangeEvent()
466
+ end}
467
+ )
468
+ ____exports.AbilityBuffPolarityLevelField = __TS__Class()
469
+ local AbilityBuffPolarityLevelField = ____exports.AbilityBuffPolarityLevelField
470
+ AbilityBuffPolarityLevelField.name = "AbilityBuffPolarityLevelField"
471
+ __TS__ClassExtends(AbilityBuffPolarityLevelField, ____exports.AbilityEnumLevelField)
472
+ function AbilityBuffPolarityLevelField.prototype.____constructor(self, ...)
473
+ AbilityBuffPolarityLevelField.____super.prototype.____constructor(self, ...)
474
+ self.values = nonEmptyLinkedSetOf(0, 1, 2)
475
+ end
476
+ ____exports.AbilityBuffResistanceTypeLevelField = __TS__Class()
477
+ local AbilityBuffResistanceTypeLevelField = ____exports.AbilityBuffResistanceTypeLevelField
478
+ AbilityBuffResistanceTypeLevelField.name = "AbilityBuffResistanceTypeLevelField"
479
+ __TS__ClassExtends(AbilityBuffResistanceTypeLevelField, ____exports.AbilityEnumLevelField)
480
+ function AbilityBuffResistanceTypeLevelField.prototype.____constructor(self, ...)
481
+ AbilityBuffResistanceTypeLevelField.____super.prototype.____constructor(self, ...)
482
+ self.values = nonEmptyLinkedSetOf(1, 2, 3)
483
+ end
434
484
  local allowedTargetCombatClassificationsByLevelByAbilityTypeId = postcompile(function()
435
485
  local allowedTargetCombatClassificationsByLevelByAbilityTypeId = {}
436
486
  for ____, abilityType in ipairs(AbilityType:getAll()) do
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,7 @@ 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";
18
20
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
19
21
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
20
22
  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,7 @@ 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")
18
20
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
19
21
  do
20
22
  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/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/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.ec4cf89",
4
+ "version": "0.0.1-dev.f967846",
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.b573f4b"
27
+ "warpack": "0.0.1-dev.880fc91"
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
@@ -1,4 +1,5 @@
1
1
  /** @noSelfInFile */
2
+ import { NonEmptyArray, ReadonlyNonEmptyArray } from "./types";
2
3
  type IteratorState<T extends AnyNotNil> = {
3
4
  t: LuaMap<T, T>;
4
5
  n?: T;
@@ -18,6 +19,11 @@ export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyItera
18
19
  toArray(): T[];
19
20
  sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
20
21
  }
22
+ export interface ReadonlyNonEmptyLinkedSet<T extends AnyNotNil> extends ReadonlyLinkedSet<T> {
23
+ first(): T;
24
+ last(): T;
25
+ toArray(): NonEmptyArray<T>;
26
+ }
21
27
  export interface LinkedSet<T extends AnyNotNil> extends LuaPairsKeyIterable<T> {
22
28
  readonly __linkedSet: unique symbol;
23
29
  }
@@ -44,6 +50,9 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
44
50
  protected __pairs(this: LinkedSet<T>): LuaIterator<T | undefined, IteratorState<T>>;
45
51
  }
46
52
  export declare const emptyLinkedSet: <T extends AnyNotNil>() => ReadonlyLinkedSet<T>;
47
- export declare const linkedSetOf: <T extends AnyNotNil>(...elements: readonly T[]) => LinkedSet<T>;
48
- export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
53
+ export declare const mutableLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => LinkedSet<T>;
54
+ export declare const mutableLinkedSetOfNotNull: <T extends AnyNotNil>(...elements: readonly (T | undefined | null)[]) => LinkedSet<T>;
55
+ export declare const linkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
56
+ export declare const linkedSetOfNotNull: <T extends AnyNotNil>(...elements: ReadonlyArray<T>) => ReadonlyLinkedSet<T>;
57
+ export declare const nonEmptyLinkedSetOf: <T extends AnyNotNil>(...elements: ReadonlyNonEmptyArray<T>) => ReadonlyNonEmptyLinkedSet<T>;
49
58
  export {};
@@ -177,14 +177,14 @@ local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
177
177
  ____exports.emptyLinkedSet = function()
178
178
  return EMPTY_LINKED_SET
179
179
  end
180
- ____exports.linkedSetOf = function(...)
180
+ ____exports.mutableLinkedSetOf = function(...)
181
181
  local linkedSet = __TS__New(____exports.LinkedSet)
182
182
  for i = 1, select("#", ...) do
183
183
  linkedSet:add((select(i, ...)))
184
184
  end
185
185
  return linkedSet
186
186
  end
187
- ____exports.linkedSetOfNotNull = function(...)
187
+ ____exports.mutableLinkedSetOfNotNull = function(...)
188
188
  local linkedSet = __TS__New(____exports.LinkedSet)
189
189
  for i = 1, select("#", ...) do
190
190
  local element = (select(i, ...))
@@ -194,4 +194,7 @@ ____exports.linkedSetOfNotNull = function(...)
194
194
  end
195
195
  return linkedSet
196
196
  end
197
+ ____exports.linkedSetOf = function(...) return ____exports.mutableLinkedSetOf(...) end
198
+ ____exports.linkedSetOfNotNull = function(...) return ____exports.mutableLinkedSetOfNotNull(...) end
199
+ ____exports.nonEmptyLinkedSetOf = function(...) return ____exports.linkedSetOf(...) end
197
200
  return ____exports
@@ -2,6 +2,7 @@
2
2
  export type AnyNonNullable = {};
3
3
  export type IsExactlyAny<T> = boolean extends (T extends never ? true : false) ? true : false;
4
4
  export type NonEmptyArray<T> = [T, ...T[]];
5
+ export type ReadonlyNonEmptyArray<T> = readonly [T, ...T[]];
5
6
  export type InvertRecordType<T extends Record<PropertyKey, PropertyKey | null | undefined>> = {
6
7
  [P in keyof T as NonNullable<T[P]>]: P;
7
8
  };