warscript 0.0.1-dev.4381d09 → 0.0.1-dev.4414935

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 (70) hide show
  1. package/attributes.d.ts +1 -0
  2. package/attributes.lua +9 -0
  3. package/core/types/player.d.ts +16 -0
  4. package/core/types/player.lua +57 -14
  5. package/core/types/tileCell.d.ts +2 -1
  6. package/core/types/tileCell.lua +5 -0
  7. package/destroyable.d.ts +1 -0
  8. package/destroyable.lua +9 -0
  9. package/engine/behavior.d.ts +10 -2
  10. package/engine/behavior.lua +157 -76
  11. package/engine/behaviour/ability/apply-buff.lua +4 -4
  12. package/engine/behaviour/ability/remove-buffs.d.ts +9 -0
  13. package/engine/behaviour/ability/remove-buffs.lua +21 -0
  14. package/engine/behaviour/ability.d.ts +2 -1
  15. package/engine/behaviour/ability.lua +2 -1
  16. package/engine/behaviour/unit/stun-immunity.d.ts +7 -5
  17. package/engine/behaviour/unit/stun-immunity.lua +6 -5
  18. package/engine/behaviour/unit.d.ts +7 -3
  19. package/engine/behaviour/unit.lua +101 -24
  20. package/engine/buff.d.ts +19 -4
  21. package/engine/buff.lua +122 -41
  22. package/engine/internal/mechanics/cast-ability.lua +6 -3
  23. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  24. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  25. package/engine/internal/unit/ability.lua +3 -3
  26. package/engine/internal/unit/attributes.d.ts +17 -0
  27. package/engine/internal/unit/attributes.lua +46 -0
  28. package/engine/internal/unit/bonus.d.ts +2 -0
  29. package/engine/internal/unit/bonus.lua +10 -0
  30. package/engine/internal/unit/fly-height.d.ts +7 -0
  31. package/engine/internal/unit/fly-height.lua +20 -0
  32. package/engine/internal/unit/interrupts.d.ts +12 -0
  33. package/engine/internal/unit/interrupts.lua +28 -0
  34. package/engine/internal/unit/main-selected.lua +12 -27
  35. package/engine/internal/unit/scale.d.ts +7 -0
  36. package/engine/internal/unit/scale.lua +20 -0
  37. package/engine/internal/unit-missile-launch.lua +17 -7
  38. package/engine/internal/unit.d.ts +14 -18
  39. package/engine/internal/unit.lua +145 -155
  40. package/engine/local-client.d.ts +2 -0
  41. package/engine/local-client.lua +30 -0
  42. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  43. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  44. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  45. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  46. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  47. package/engine/object-data/entry/destructible-type.lua +155 -0
  48. package/engine/object-data/entry/unit-type.d.ts +4 -0
  49. package/engine/object-data/entry/unit-type.lua +76 -32
  50. package/engine/object-field/unit.d.ts +20 -5
  51. package/engine/object-field/unit.lua +61 -0
  52. package/engine/object-field.d.ts +9 -1
  53. package/engine/object-field.lua +265 -122
  54. package/engine/standard/fields/ability.d.ts +2 -2
  55. package/engine/standard/fields/ability.lua +2 -2
  56. package/engine/standard/fields/unit.d.ts +11 -3
  57. package/engine/standard/fields/unit.lua +15 -2
  58. package/engine/synchronization.d.ts +11 -0
  59. package/engine/synchronization.lua +77 -0
  60. package/engine/text-tag.lua +2 -1
  61. package/engine/unit.d.ts +4 -0
  62. package/engine/unit.lua +4 -0
  63. package/net/socket.lua +1 -1
  64. package/objutil/buff.lua +9 -7
  65. package/package.json +2 -2
  66. package/utility/linked-map.d.ts +26 -0
  67. package/utility/linked-map.lua +66 -0
  68. package/utility/linked-set.d.ts +1 -0
  69. package/utility/linked-set.lua +21 -0
  70. package/utility/records.lua +20 -1
@@ -0,0 +1,77 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__New = ____lualib.__TS__New
3
+ local __TS__Promise = ____lualib.__TS__Promise
4
+ local __TS__Class = ____lualib.__TS__Class
5
+ local ____exports = {}
6
+ local ____player = require("core.types.player")
7
+ local Player = ____player.Player
8
+ local ____math = require("math")
9
+ local MAXIMUM_INTEGER = ____math.MAXIMUM_INTEGER
10
+ local MINIMUM_INTEGER = ____math.MINIMUM_INTEGER
11
+ local ____linked_2Dset = require("utility.linked-set")
12
+ local LinkedSet = ____linked_2Dset.LinkedSet
13
+ local ____event = require("event")
14
+ local Event = ____event.Event
15
+ local eventInvoke = Event.invoke
16
+ local createFrameByType = BlzCreateFrameByType
17
+ local createTrigger = CreateTrigger
18
+ local getOriginFrame = BlzGetOriginFrame
19
+ local getTriggerFrameValue = BlzGetTriggerFrameValue
20
+ local getTriggerPlayer = GetTriggerPlayer
21
+ local frameSetMinMaxValue = BlzFrameSetMinMaxValue
22
+ local frameSetValue = BlzFrameSetValue
23
+ local triggerAddAction = TriggerAddAction
24
+ local triggerRegisterFrameEvent = BlzTriggerRegisterFrameEvent
25
+ ____exports.synchronizer = function(getSyncId, getObject)
26
+ local queue = __TS__New(LinkedSet)
27
+ local socket = __TS__New(____exports.ObjectBus, getSyncId, getObject)
28
+ socket.event:addListener(function(_, object)
29
+ local ____opt_0 = queue:pop()
30
+ if ____opt_0 ~= nil then
31
+ ____opt_0(object)
32
+ end
33
+ end)
34
+ local function executor(____, resolve)
35
+ queue:add(resolve)
36
+ end
37
+ return function(player, object)
38
+ if player.isLocal then
39
+ socket:send(object)
40
+ end
41
+ return __TS__New(__TS__Promise, executor)
42
+ end
43
+ end
44
+ ____exports.ObjectBus = __TS__Class()
45
+ local ObjectBus = ____exports.ObjectBus
46
+ ObjectBus.name = "ObjectBus"
47
+ function ObjectBus.prototype.____constructor(self, getSyncId, getObject)
48
+ self.getSyncId = getSyncId
49
+ local syncSlider = createFrameByType(
50
+ "SLIDER",
51
+ "Synchronizer",
52
+ getOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0),
53
+ "",
54
+ 0
55
+ )
56
+ frameSetMinMaxValue(syncSlider, MINIMUM_INTEGER, MAXIMUM_INTEGER)
57
+ self.syncSlider = syncSlider
58
+ local event = __TS__New(Event)
59
+ local trigger = createTrigger()
60
+ triggerRegisterFrameEvent(trigger, syncSlider, FRAMEEVENT_SLIDER_VALUE_CHANGED)
61
+ triggerAddAction(
62
+ trigger,
63
+ function()
64
+ eventInvoke(
65
+ event,
66
+ Player:of(getTriggerPlayer()),
67
+ getObject(getTriggerFrameValue())
68
+ )
69
+ end
70
+ )
71
+ self.event = event
72
+ end
73
+ function ObjectBus.prototype.send(self, object)
74
+ local syncId = object ~= nil and self.getSyncId(object) or 0
75
+ frameSetValue(self.syncSlider, syncId)
76
+ end
77
+ return ____exports
@@ -36,6 +36,7 @@ local isUnitVisible = IsUnitVisible
36
36
  local getUnitFlyHeight = GetUnitFlyHeight
37
37
  local getUnitX = GetUnitX
38
38
  local getUnitY = GetUnitY
39
+ local unitAlive = UnitAlive
39
40
  local DEFAULT_FONT_SIZE = 0.024
40
41
  local function applyConfiguration(textTag, configuration)
41
42
  setTextTagFadepoint(textTag, configuration.fadepoint)
@@ -333,7 +334,7 @@ Timer.onPeriod[1 / 64]:addListener(function()
333
334
  y,
334
335
  getUnitFlyHeight(unit) + getTerrainZ(x, y)
335
336
  )
336
- if isInView and not isUnitHidden(unit) and not isUnitLoaded(unit) and isUnitVisible(unit, PLAYER_LOCAL_HANDLE) then
337
+ if isInView and not isUnitHidden(unit) and not isUnitLoaded(unit) and isUnitVisible(unit, PLAYER_LOCAL_HANDLE) and unitAlive(unit) then
337
338
  setTextTagPosUnit(
338
339
  ensureHandle(textTag),
339
340
  unit,
package/engine/unit.d.ts CHANGED
@@ -19,6 +19,10 @@ import "./internal/unit/invulnerability-counter";
19
19
  import "./internal/unit/detach-missiles";
20
20
  import "./internal/unit/main-selected";
21
21
  import "./internal/unit/add-item-to-slot-init";
22
+ import "./internal/unit/attributes";
23
+ import "./internal/unit/fly-height";
24
+ import "./internal/unit/scale";
25
+ import "./internal/unit/interrupts";
22
26
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
23
27
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
24
28
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -19,6 +19,10 @@ require("engine.internal.unit.invulnerability-counter")
19
19
  require("engine.internal.unit.detach-missiles")
20
20
  require("engine.internal.unit.main-selected")
21
21
  require("engine.internal.unit.add-item-to-slot-init")
22
+ require("engine.internal.unit.attributes")
23
+ require("engine.internal.unit.fly-height")
24
+ require("engine.internal.unit.scale")
25
+ require("engine.internal.unit.interrupts")
22
26
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
23
27
  do
24
28
  local ____unit = require("engine.internal.unit")
package/net/socket.lua CHANGED
@@ -28,13 +28,13 @@ function Socket.prototype.____constructor(self)
28
28
  onReceive[self[0]]:addListener(function(sender, data)
29
29
  local chunks = chunksByPlayer[sender]
30
30
  if chunks ~= nil then
31
+ chunksByPlayer[sender] = nil
31
32
  chunks[#chunks + 1] = data
32
33
  Event.invoke(
33
34
  self.onMessage,
34
35
  sender,
35
36
  tableConcat(chunks)
36
37
  )
37
- chunksByPlayer[sender] = nil
38
38
  else
39
39
  Event.invoke(self.onMessage, sender, data)
40
40
  end
package/objutil/buff.lua CHANGED
@@ -29,6 +29,8 @@ local ____timer = require("core.types.timer")
29
29
  local Timer = ____timer.Timer
30
30
  local ____exception = require("exception")
31
31
  local IllegalStateException = ____exception.IllegalStateException
32
+ local ____linked_2Dmap = require("utility.linked-map")
33
+ local LinkedMap = ____linked_2Dmap.LinkedMap
32
34
  local ____assert = _G.assert
33
35
  local ____pairs = _G.pairs
34
36
  ____exports.BuffDefinition = __TS__Class()
@@ -461,7 +463,7 @@ local buffs = setmetatable(
461
463
  {
462
464
  __mode = "k",
463
465
  __index = function(self, unit)
464
- local ____table = {}
466
+ local ____table = __TS__New(LinkedMap)
465
467
  self[unit] = ____table
466
468
  return ____table
467
469
  end
@@ -494,7 +496,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
494
496
  end
495
497
  local constructor = self.constructor
496
498
  local instances = buffs[unit]
497
- local instance = instances[constructor]
499
+ local instance = instances:get(constructor)
498
500
  if instance then
499
501
  instance:destroy()
500
502
  if not instance.destroyed then
@@ -507,7 +509,7 @@ function Buff.prototype.____constructor(self, unit, source, duration, level, pre
507
509
  )
508
510
  end
509
511
  end
510
- instances[constructor] = self
512
+ instances:put(constructor, self)
511
513
  if preset then
512
514
  local unitHandle = unit.handle
513
515
  local slowPoisonMethod = not preset.positive and not preset.magic
@@ -586,13 +588,13 @@ function Buff.apply(self, ...)
586
588
  end
587
589
  end
588
590
  function Buff.getInstance(self, unit)
589
- return buffs[unit][self]
591
+ return buffs[unit]:get(self)
590
592
  end
591
593
  function Buff.isApplied(self, unit)
592
- return buffs[unit][self] ~= nil
594
+ return buffs[unit]:get(self) ~= nil
593
595
  end
594
596
  function Buff.ifApplied(self, unit, action)
595
- local instance = buffs[unit][self]
597
+ local instance = buffs[unit]:get(self)
596
598
  if instance then
597
599
  ____assert(__TS__InstanceOf(instance, self))
598
600
  action(instance)
@@ -615,7 +617,7 @@ function Buff.prototype.destroy(self)
615
617
  if self.preset then
616
618
  self.unit:removeAbility(self.preset.buffId)
617
619
  end
618
- buffs[self.unit][self.constructor] = nil
620
+ buffs[self.unit]:remove(self.constructor)
619
621
  self.destroyed = true
620
622
  end
621
623
  function Buff.prototype.onDispel(self, source)
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.4381d09",
4
+ "version": "0.0.1-dev.4414935",
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.251db08"
27
+ "warpack": "0.0.1-dev.e490aaf"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@typescript-eslint/eslint-plugin": "^8.13.0",
@@ -0,0 +1,26 @@
1
+ /** @noSelfInFile */
2
+ import { ReadonlyLinkedSet } from "./linked-set";
3
+ type IteratorState<K extends AnyNotNil, V> = {
4
+ n?: K;
5
+ t: LuaMap<K, K>;
6
+ v: LuaMap<K, V>;
7
+ };
8
+ type OneSidedTypeGuard = {
9
+ readonly __oneSidedTypeGuard: unique symbol;
10
+ };
11
+ export interface LinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
12
+ readonly __linkedSet: unique symbol;
13
+ }
14
+ export declare class LinkedMap<K extends AnyNotNil, V> {
15
+ private k;
16
+ private v;
17
+ get keys(): ReadonlyLinkedSet<K>;
18
+ get(key: K): V | undefined;
19
+ getOrPut(key: K, defaultValue: (this: void) => V): V;
20
+ put(key: K, value: V): void;
21
+ remove(key: K): boolean;
22
+ contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
23
+ get size(): number;
24
+ protected __pairs(this: LinkedMap<K, V>): LuaIterator<LuaMultiReturn<[K | undefined, V | undefined]>, IteratorState<K, V>>;
25
+ }
26
+ export {};
@@ -0,0 +1,66 @@
1
+ local ____lualib = require("lualib_bundle")
2
+ local __TS__Class = ____lualib.__TS__Class
3
+ local __TS__New = ____lualib.__TS__New
4
+ local __TS__SetDescriptor = ____lualib.__TS__SetDescriptor
5
+ local ____exports = {}
6
+ local ____linked_2Dset = require("utility.linked-set")
7
+ local LinkedSet = ____linked_2Dset.LinkedSet
8
+ local function linkedMapNext(state)
9
+ local n = state.n
10
+ state.n = state.t[n]
11
+ return n, state.v[n]
12
+ end
13
+ ____exports.LinkedMap = __TS__Class()
14
+ local LinkedMap = ____exports.LinkedMap
15
+ LinkedMap.name = "LinkedMap"
16
+ function LinkedMap.prototype.____constructor(self)
17
+ self.k = __TS__New(LinkedSet)
18
+ self.v = {}
19
+ end
20
+ function LinkedMap.prototype.get(self, key)
21
+ return self.v[key]
22
+ end
23
+ function LinkedMap.prototype.getOrPut(self, key, defaultValue)
24
+ local value = self.v[key]
25
+ if value ~= nil then
26
+ return value
27
+ end
28
+ value = defaultValue()
29
+ self.k:add(key)
30
+ self.v[key] = value
31
+ return value
32
+ end
33
+ function LinkedMap.prototype.put(self, key, value)
34
+ self.k:add(key)
35
+ self.v[key] = value
36
+ end
37
+ function LinkedMap.prototype.remove(self, key)
38
+ if self.k:remove(key) then
39
+ self.v[key] = nil
40
+ return true
41
+ end
42
+ return false
43
+ end
44
+ function LinkedMap.prototype.contains(self, key)
45
+ return self.keys:contains(key)
46
+ end
47
+ function LinkedMap.prototype.__pairs(self)
48
+ return linkedMapNext, {n = self.k.f, t = self.k.n, v = self.v}, nil
49
+ end
50
+ __TS__SetDescriptor(
51
+ LinkedMap.prototype,
52
+ "keys",
53
+ {get = function(self)
54
+ return self.k
55
+ end},
56
+ true
57
+ )
58
+ __TS__SetDescriptor(
59
+ LinkedMap.prototype,
60
+ "size",
61
+ {get = function(self)
62
+ return self.keys.size
63
+ end},
64
+ true
65
+ )
66
+ return ____exports
@@ -36,6 +36,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
36
36
  copyOf(): LinkedSet<T>;
37
37
  first(): T | undefined;
38
38
  last(): T | undefined;
39
+ pop(): T | undefined;
39
40
  next(key: T): T | undefined;
40
41
  previous(key: T): T | undefined;
41
42
  add(key: T): boolean;
@@ -42,6 +42,23 @@ end
42
42
  function LinkedSet.prototype.last(self)
43
43
  return self.l
44
44
  end
45
+ function LinkedSet.prototype.pop(self)
46
+ local f = self.f
47
+ if f == nil then
48
+ return nil
49
+ end
50
+ local n = self.n
51
+ local next = n[f]
52
+ n[f] = nil
53
+ self.f = next
54
+ if next ~= nil then
55
+ self.p[next] = nil
56
+ else
57
+ self.l = nil
58
+ end
59
+ self.s = self.s - 1
60
+ return f
61
+ end
45
62
  function LinkedSet.prototype.next(self, key)
46
63
  return self.n[key]
47
64
  end
@@ -165,6 +182,7 @@ __TS__SetDescriptor(
165
182
  end},
166
183
  true
167
184
  )
185
+ local emptyIteratorState = {t = {}}
168
186
  local EmptyLinkedSet = __TS__Class()
169
187
  EmptyLinkedSet.name = "EmptyLinkedSet"
170
188
  __TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
@@ -174,6 +192,9 @@ function EmptyLinkedSet.prototype.add(self)
174
192
  0
175
193
  )
176
194
  end
195
+ function EmptyLinkedSet.prototype.__pairs(self)
196
+ return linkedSetNext, emptyIteratorState, nil
197
+ end
177
198
  local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
178
199
  ____exports.emptyLinkedSet = function()
179
200
  return EMPTY_LINKED_SET
@@ -1,9 +1,28 @@
1
1
  local ____exports = {}
2
+ local ____pairs = _G.pairs
3
+ local tableSort = table.sort
2
4
  ____exports.invertRecord = function(record)
3
5
  local invertRecord = {}
4
- for key, value in pairs(record) do
6
+ for key, value in ____pairs(record) do
5
7
  invertRecord[value] = key
6
8
  end
7
9
  return invertRecord
8
10
  end
11
+ local sortedKeysInternal = {}
12
+ local lastSortedKeysLength = 0
13
+ ---
14
+ -- @internal For use by internal systems only.
15
+ ____exports.sortedKeysUnnested = function(record)
16
+ local length = 0
17
+ for key in ____pairs(record) do
18
+ length = length + 1
19
+ sortedKeysInternal[length] = key
20
+ end
21
+ for i = length + 1, lastSortedKeysLength do
22
+ sortedKeysInternal[i] = nil
23
+ end
24
+ lastSortedKeysLength = length
25
+ tableSort(sortedKeysInternal)
26
+ return sortedKeysInternal
27
+ end
9
28
  return ____exports