warscript 0.0.1-dev.064c144 → 0.0.1-dev.072eba1

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 (49) hide show
  1. package/destroyable.d.ts +1 -0
  2. package/destroyable.lua +9 -0
  3. package/engine/behavior.d.ts +4 -2
  4. package/engine/behavior.lua +69 -11
  5. package/engine/behaviour/ability/apply-buff.lua +4 -4
  6. package/engine/behaviour/ability.d.ts +4 -0
  7. package/engine/behaviour/ability.lua +29 -0
  8. package/engine/behaviour/unit/stun-immunity.d.ts +1 -1
  9. package/engine/behaviour/unit/stun-immunity.lua +5 -4
  10. package/engine/behaviour/unit.lua +13 -3
  11. package/engine/buff.d.ts +7 -2
  12. package/engine/buff.lua +42 -24
  13. package/engine/internal/mechanics/cast-ability.lua +6 -3
  14. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
  15. package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
  16. package/engine/internal/unit/attributes.d.ts +17 -0
  17. package/engine/internal/unit/attributes.lua +46 -0
  18. package/engine/internal/unit/bonus.d.ts +2 -0
  19. package/engine/internal/unit/bonus.lua +10 -0
  20. package/engine/internal/unit/fly-height.lua +3 -3
  21. package/engine/internal/unit/interrupts.d.ts +12 -0
  22. package/engine/internal/unit/interrupts.lua +28 -0
  23. package/engine/internal/unit/scale.lua +3 -3
  24. package/engine/internal/unit-missile-launch.lua +12 -5
  25. package/engine/internal/unit.d.ts +2 -8
  26. package/engine/internal/unit.lua +79 -97
  27. package/engine/local-client.d.ts +1 -1
  28. package/engine/local-client.lua +4 -4
  29. package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
  30. package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
  31. package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
  32. package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
  33. package/engine/object-data/entry/destructible-type.d.ts +27 -1
  34. package/engine/object-data/entry/destructible-type.lua +155 -0
  35. package/engine/object-field/unit.d.ts +7 -4
  36. package/engine/object-field/unit.lua +4 -0
  37. package/engine/object-field.d.ts +2 -0
  38. package/engine/object-field.lua +171 -115
  39. package/engine/standard/fields/unit.d.ts +11 -5
  40. package/engine/standard/fields/unit.lua +13 -4
  41. package/engine/unit.d.ts +2 -0
  42. package/engine/unit.lua +2 -0
  43. package/objutil/buff.lua +9 -7
  44. package/package.json +2 -2
  45. package/patch-lua.lua +15 -0
  46. package/utility/linked-map.d.ts +26 -0
  47. package/utility/linked-map.lua +66 -0
  48. package/utility/linked-set.lua +4 -0
  49. package/utility/records.lua +20 -1
@@ -1,6 +1,12 @@
1
1
  /** @noSelfInFile */
2
- import { UnitClassificationsField, UnitFlyHeightField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
- export declare const PROPULSION_WINDOW_UNIT_FLOAT_FIELD: UnitPropulsionWindowField & symbol;
4
- export declare const UNIT_CLASSIFICATIONS_FIELD: UnitClassificationsField & symbol;
5
- export declare const FLY_HEIGHT_UNIT_FLOAT_FIELD: UnitFlyHeightField & symbol;
6
- export declare const SCALING_VALUE_UNIT_FLOAT_FIELD: UnitScalingValueField & symbol;
2
+ import { UnitClassificationsField, UnitFloatField, UnitFlyHeightField, UnitHealthRegenerationTypeField, UnitIntegerField, UnitPropulsionWindowField, UnitScalingValueField } from "../../object-field/unit";
3
+ export declare const PROPULSION_WINDOW_UNIT_FIELD: UnitPropulsionWindowField & symbol;
4
+ export declare const CLASSIFICATIONS_UNIT_FIELD: UnitClassificationsField & symbol;
5
+ export declare const FLY_HEIGHT_UNIT_FIELD: UnitFlyHeightField & symbol;
6
+ export declare const SCALING_VALUE_UNIT_FIELD: UnitScalingValueField & symbol;
7
+ export declare const HEALTH_REGENERATION_RATE_UNIT_FIELD: UnitFloatField & symbol;
8
+ export declare const MANA_REGENERATION_RATE_UNIT_FIELD: UnitFloatField & symbol;
9
+ export declare const HEALTH_REGENERATION_TYPE_UNIT_FIELD: UnitHealthRegenerationTypeField & symbol;
10
+ export declare const STRENGTH_UNIT_FIELD: UnitIntegerField<number> & symbol;
11
+ export declare const AGILITY_UNIT_FIELD: UnitIntegerField<number> & symbol;
12
+ export declare const INTELLIGENCE_UNIT_FIELD: UnitIntegerField<number> & symbol;
@@ -1,11 +1,20 @@
1
1
  local ____exports = {}
2
2
  local ____unit = require("engine.object-field.unit")
3
3
  local UnitClassificationsField = ____unit.UnitClassificationsField
4
+ local UnitFloatField = ____unit.UnitFloatField
4
5
  local UnitFlyHeightField = ____unit.UnitFlyHeightField
6
+ local UnitHealthRegenerationTypeField = ____unit.UnitHealthRegenerationTypeField
7
+ local UnitIntegerField = ____unit.UnitIntegerField
5
8
  local UnitPropulsionWindowField = ____unit.UnitPropulsionWindowField
6
9
  local UnitScalingValueField = ____unit.UnitScalingValueField
7
- ____exports.PROPULSION_WINDOW_UNIT_FLOAT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
8
- ____exports.UNIT_CLASSIFICATIONS_FIELD = UnitClassificationsField:create(fourCC("utyp"))
9
- ____exports.FLY_HEIGHT_UNIT_FLOAT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
10
- ____exports.SCALING_VALUE_UNIT_FLOAT_FIELD = UnitScalingValueField:create(fourCC("usca"))
10
+ ____exports.PROPULSION_WINDOW_UNIT_FIELD = UnitPropulsionWindowField:create(fourCC("urpw"))
11
+ ____exports.CLASSIFICATIONS_UNIT_FIELD = UnitClassificationsField:create(fourCC("utyp"))
12
+ ____exports.FLY_HEIGHT_UNIT_FIELD = UnitFlyHeightField:create(fourCC("ufyh"))
13
+ ____exports.SCALING_VALUE_UNIT_FIELD = UnitScalingValueField:create(fourCC("usca"))
14
+ ____exports.HEALTH_REGENERATION_RATE_UNIT_FIELD = UnitFloatField:create(fourCC("uhpr"))
15
+ ____exports.MANA_REGENERATION_RATE_UNIT_FIELD = UnitFloatField:create(fourCC("umpr"))
16
+ ____exports.HEALTH_REGENERATION_TYPE_UNIT_FIELD = UnitHealthRegenerationTypeField:create(fourCC("uhrt"))
17
+ ____exports.STRENGTH_UNIT_FIELD = UnitIntegerField:create(fourCC("ustc"))
18
+ ____exports.AGILITY_UNIT_FIELD = UnitIntegerField:create(fourCC("uagc"))
19
+ ____exports.INTELLIGENCE_UNIT_FIELD = UnitIntegerField:create(fourCC("uinc"))
11
20
  return ____exports
package/engine/unit.d.ts CHANGED
@@ -19,8 +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";
22
23
  import "./internal/unit/fly-height";
23
24
  import "./internal/unit/scale";
25
+ import "./internal/unit/interrupts";
24
26
  import "./internal/unit/band-aids/ancestral-spirit-cannibalize";
25
27
  export { Unit, DamagingEvent, DamageEvent } from "./internal/unit";
26
28
  export * from "./internal/unit+damage";
package/engine/unit.lua CHANGED
@@ -19,8 +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")
22
23
  require("engine.internal.unit.fly-height")
23
24
  require("engine.internal.unit.scale")
25
+ require("engine.internal.unit.interrupts")
24
26
  require("engine.internal.unit.band-aids.ancestral-spirit-cannibalize")
25
27
  do
26
28
  local ____unit = require("engine.internal.unit")
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.064c144",
4
+ "version": "0.0.1-dev.072eba1",
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.efd0770"
27
+ "warpack": "0.0.1-dev.e490aaf"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@typescript-eslint/eslint-plugin": "^8.13.0",
package/patch-lua.lua CHANGED
@@ -1,5 +1,9 @@
1
+ local error = _G.error
1
2
  local getmetatable = _G.getmetatable
2
3
  local ipairs = _G.ipairs
4
+ local select = _G.select
5
+ local tostring = _G.tostring
6
+ local tableconcat = table.concat
3
7
 
4
8
  _G.ipairs = function(t)
5
9
  local metatable = getmetatable(t)
@@ -8,3 +12,14 @@ _G.ipairs = function(t)
8
12
  end
9
13
  return ipairs(t)
10
14
  end
15
+
16
+ _G.assert = function(v, ...)
17
+ if not v then
18
+ local args = {}
19
+ for i = 1, select("#", ...) do
20
+ args[i] = tostring(select(i, ...))
21
+ end
22
+ error(tableconcat(args, " "))
23
+ end
24
+ return v, ...
25
+ end
@@ -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
@@ -182,6 +182,7 @@ __TS__SetDescriptor(
182
182
  end},
183
183
  true
184
184
  )
185
+ local emptyIteratorState = {t = {}}
185
186
  local EmptyLinkedSet = __TS__Class()
186
187
  EmptyLinkedSet.name = "EmptyLinkedSet"
187
188
  __TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
@@ -191,6 +192,9 @@ function EmptyLinkedSet.prototype.add(self)
191
192
  0
192
193
  )
193
194
  end
195
+ function EmptyLinkedSet.prototype.__pairs(self)
196
+ return linkedSetNext, emptyIteratorState, nil
197
+ end
194
198
  local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
195
199
  ____exports.emptyLinkedSet = function()
196
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