warscript 0.0.1-dev.91a4dce → 0.0.1-dev.94cf7fc
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.
- package/core/types/player.d.ts +2 -1
- package/core/types/player.lua +24 -12
- package/core/types/tileCell.d.ts +2 -1
- package/core/types/tileCell.lua +5 -0
- package/destroyable.d.ts +1 -0
- package/destroyable.lua +9 -0
- package/engine/behavior.d.ts +10 -2
- package/engine/behavior.lua +157 -76
- package/engine/behaviour/ability/apply-buff.lua +4 -4
- package/engine/behaviour/ability.d.ts +6 -1
- package/engine/behaviour/ability.lua +31 -1
- package/engine/behaviour/unit/stun-immunity.d.ts +7 -5
- package/engine/behaviour/unit/stun-immunity.lua +6 -5
- package/engine/behaviour/unit.d.ts +7 -3
- package/engine/behaviour/unit.lua +101 -24
- package/engine/buff.d.ts +21 -4
- package/engine/buff.lua +142 -44
- package/engine/internal/mechanics/cast-ability.lua +6 -3
- package/engine/internal/object-data/mana-regeneration-rate-increase-factor.d.ts +2 -0
- package/engine/internal/object-data/mana-regeneration-rate-increase-factor.lua +16 -0
- package/engine/internal/unit/attributes.d.ts +17 -0
- package/engine/internal/unit/attributes.lua +46 -0
- package/engine/internal/unit/bonus.d.ts +2 -0
- package/engine/internal/unit/bonus.lua +10 -0
- package/engine/internal/unit/fly-height.d.ts +7 -0
- package/engine/internal/unit/fly-height.lua +20 -0
- package/engine/internal/unit/interrupts.d.ts +12 -0
- package/engine/internal/unit/interrupts.lua +28 -0
- package/engine/internal/unit/range-event.d.ts +12 -0
- package/engine/internal/unit/range-event.lua +90 -0
- package/engine/internal/unit/scale.d.ts +7 -0
- package/engine/internal/unit/scale.lua +20 -0
- package/engine/internal/unit-missile-launch.lua +16 -6
- package/engine/internal/unit.d.ts +13 -19
- package/engine/internal/unit.lua +140 -173
- package/engine/local-client.d.ts +2 -0
- package/engine/local-client.lua +30 -0
- package/engine/object-data/auxiliary/health-regeneration-type.d.ts +8 -0
- package/engine/object-data/auxiliary/health-regeneration-type.lua +2 -0
- package/engine/object-data/entry/ability-type/mana-regeneration.d.ts +8 -0
- package/engine/object-data/entry/ability-type/mana-regeneration.lua +26 -0
- package/engine/object-data/entry/ability-type/reincarnation.d.ts +8 -0
- package/engine/object-data/entry/ability-type/reincarnation.lua +26 -0
- package/engine/object-data/entry/destructible-type.d.ts +27 -1
- package/engine/object-data/entry/destructible-type.lua +155 -0
- package/engine/object-data/entry/unit-type.d.ts +4 -0
- package/engine/object-data/entry/unit-type.lua +76 -32
- package/engine/object-field/unit.d.ts +20 -5
- package/engine/object-field/unit.lua +61 -0
- package/engine/object-field.d.ts +9 -1
- package/engine/object-field.lua +265 -122
- package/engine/random.d.ts +1 -0
- package/engine/random.lua +8 -0
- package/engine/standard/fields/ability.d.ts +2 -2
- package/engine/standard/fields/ability.lua +2 -2
- package/engine/standard/fields/unit.d.ts +11 -3
- package/engine/standard/fields/unit.lua +15 -2
- package/engine/text-tag.lua +2 -1
- package/engine/unit.d.ts +5 -0
- package/engine/unit.lua +5 -0
- package/objutil/buff.lua +9 -7
- package/package.json +2 -2
- package/patch-lua.lua +15 -0
- package/utility/linked-map.d.ts +34 -0
- package/utility/linked-map.lua +101 -0
- package/utility/linked-set.d.ts +2 -1
- package/utility/linked-set.lua +21 -0
- package/utility/records.lua +20 -1
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
|
|
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
|
|
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]
|
|
591
|
+
return buffs[unit]:get(self)
|
|
590
592
|
end
|
|
591
593
|
function Buff.isApplied(self, unit)
|
|
592
|
-
return buffs[unit]
|
|
594
|
+
return buffs[unit]:get(self) ~= nil
|
|
593
595
|
end
|
|
594
596
|
function Buff.ifApplied(self, unit, action)
|
|
595
|
-
local instance = buffs[unit]
|
|
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]
|
|
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.
|
|
4
|
+
"version": "0.0.1-dev.94cf7fc",
|
|
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.
|
|
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,34 @@
|
|
|
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 ReadonlyLinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
|
|
12
|
+
readonly keys: ReadonlyLinkedSet<K>;
|
|
13
|
+
get(key: K): V | undefined;
|
|
14
|
+
contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
|
|
15
|
+
readonly size: number;
|
|
16
|
+
}
|
|
17
|
+
export interface LinkedMap<K extends AnyNotNil, V> extends LuaPairsIterable<K, V> {
|
|
18
|
+
readonly __linkedSet: unique symbol;
|
|
19
|
+
}
|
|
20
|
+
export declare class LinkedMap<K extends AnyNotNil, V> implements ReadonlyLinkedMap<K, V> {
|
|
21
|
+
private k;
|
|
22
|
+
private v;
|
|
23
|
+
get keys(): ReadonlyLinkedSet<K>;
|
|
24
|
+
get(key: K): V | undefined;
|
|
25
|
+
getOrPut(key: K, defaultValue: (this: void) => V): V;
|
|
26
|
+
put(key: K, value: V): void;
|
|
27
|
+
remove(key: K): boolean;
|
|
28
|
+
contains(key: AnyNotNil): key is K & OneSidedTypeGuard;
|
|
29
|
+
get size(): number;
|
|
30
|
+
protected __pairs(this: LinkedMap<K, V>): LuaIterator<LuaMultiReturn<[K | undefined, V | undefined]>, IteratorState<K, V>>;
|
|
31
|
+
}
|
|
32
|
+
export declare const emptyLinkedMap: <K extends AnyNotNil, V>() => ReadonlyLinkedMap<K, V>;
|
|
33
|
+
export declare const mutableLinkedMap: <K extends AnyNotNil, V>() => LinkedMap<K, V>;
|
|
34
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
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 __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
|
6
|
+
local ____exports = {}
|
|
7
|
+
local ____linked_2Dset = require("utility.linked-set")
|
|
8
|
+
local LinkedSet = ____linked_2Dset.LinkedSet
|
|
9
|
+
local ____exception = require("exception")
|
|
10
|
+
local UnsupportedOperationException = ____exception.UnsupportedOperationException
|
|
11
|
+
local function linkedMapNext(state)
|
|
12
|
+
local n = state.n
|
|
13
|
+
state.n = state.t[n]
|
|
14
|
+
return n, state.v[n]
|
|
15
|
+
end
|
|
16
|
+
____exports.LinkedMap = __TS__Class()
|
|
17
|
+
local LinkedMap = ____exports.LinkedMap
|
|
18
|
+
LinkedMap.name = "LinkedMap"
|
|
19
|
+
function LinkedMap.prototype.____constructor(self)
|
|
20
|
+
self.k = __TS__New(LinkedSet)
|
|
21
|
+
self.v = {}
|
|
22
|
+
end
|
|
23
|
+
function LinkedMap.prototype.get(self, key)
|
|
24
|
+
return self.v[key]
|
|
25
|
+
end
|
|
26
|
+
function LinkedMap.prototype.getOrPut(self, key, defaultValue)
|
|
27
|
+
local value = self.v[key]
|
|
28
|
+
if value ~= nil then
|
|
29
|
+
return value
|
|
30
|
+
end
|
|
31
|
+
value = defaultValue()
|
|
32
|
+
self.k:add(key)
|
|
33
|
+
self.v[key] = value
|
|
34
|
+
return value
|
|
35
|
+
end
|
|
36
|
+
function LinkedMap.prototype.put(self, key, value)
|
|
37
|
+
self.k:add(key)
|
|
38
|
+
self.v[key] = value
|
|
39
|
+
end
|
|
40
|
+
function LinkedMap.prototype.remove(self, key)
|
|
41
|
+
if self.k:remove(key) then
|
|
42
|
+
self.v[key] = nil
|
|
43
|
+
return true
|
|
44
|
+
end
|
|
45
|
+
return false
|
|
46
|
+
end
|
|
47
|
+
function LinkedMap.prototype.contains(self, key)
|
|
48
|
+
return self.keys:contains(key)
|
|
49
|
+
end
|
|
50
|
+
function LinkedMap.prototype.__pairs(self)
|
|
51
|
+
return linkedMapNext, {n = self.k.f, t = self.k.n, v = self.v}, nil
|
|
52
|
+
end
|
|
53
|
+
__TS__SetDescriptor(
|
|
54
|
+
LinkedMap.prototype,
|
|
55
|
+
"keys",
|
|
56
|
+
{get = function(self)
|
|
57
|
+
return self.k
|
|
58
|
+
end},
|
|
59
|
+
true
|
|
60
|
+
)
|
|
61
|
+
__TS__SetDescriptor(
|
|
62
|
+
LinkedMap.prototype,
|
|
63
|
+
"size",
|
|
64
|
+
{get = function(self)
|
|
65
|
+
return self.keys.size
|
|
66
|
+
end},
|
|
67
|
+
true
|
|
68
|
+
)
|
|
69
|
+
local emptyIteratorState = {t = {}, v = {}}
|
|
70
|
+
local EmptyLinkedMap = __TS__Class()
|
|
71
|
+
EmptyLinkedMap.name = "EmptyLinkedMap"
|
|
72
|
+
__TS__ClassExtends(EmptyLinkedMap, ____exports.LinkedMap)
|
|
73
|
+
function EmptyLinkedMap.prototype.getOrPut(self)
|
|
74
|
+
error(
|
|
75
|
+
__TS__New(UnsupportedOperationException),
|
|
76
|
+
0
|
|
77
|
+
)
|
|
78
|
+
end
|
|
79
|
+
function EmptyLinkedMap.prototype.put(self)
|
|
80
|
+
error(
|
|
81
|
+
__TS__New(UnsupportedOperationException),
|
|
82
|
+
0
|
|
83
|
+
)
|
|
84
|
+
end
|
|
85
|
+
function EmptyLinkedMap.prototype.remove(self)
|
|
86
|
+
error(
|
|
87
|
+
__TS__New(UnsupportedOperationException),
|
|
88
|
+
0
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
function EmptyLinkedMap.prototype.__pairs(self)
|
|
92
|
+
return linkedMapNext, emptyIteratorState, nil
|
|
93
|
+
end
|
|
94
|
+
local EMPTY_LINKED_MAP = __TS__New(EmptyLinkedMap)
|
|
95
|
+
____exports.emptyLinkedMap = function()
|
|
96
|
+
return EMPTY_LINKED_MAP
|
|
97
|
+
end
|
|
98
|
+
____exports.mutableLinkedMap = function()
|
|
99
|
+
return __TS__New(____exports.LinkedMap)
|
|
100
|
+
end
|
|
101
|
+
return ____exports
|
package/utility/linked-set.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface ReadonlyLinkedSet<T extends AnyNotNil> extends LuaPairsKeyItera
|
|
|
14
14
|
next(key: T): T | undefined;
|
|
15
15
|
previous(key: T): T | undefined;
|
|
16
16
|
contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
|
|
17
|
-
size: number;
|
|
17
|
+
readonly size: number;
|
|
18
18
|
forEach<Args extends any[]>(action: (value: T, ...args: Args) => void, ...args: Args): void;
|
|
19
19
|
toArray(): T[];
|
|
20
20
|
sumOf(selector: ((value: T) => number) | KeysOfType<T, number>): number;
|
|
@@ -40,6 +40,7 @@ export declare class LinkedSet<T extends AnyNotNil> implements ReadonlyLinkedSet
|
|
|
40
40
|
next(key: T): T | undefined;
|
|
41
41
|
previous(key: T): T | undefined;
|
|
42
42
|
add(key: T): boolean;
|
|
43
|
+
protected addBefore(value: T, key: T): boolean;
|
|
43
44
|
remove(key: T): boolean;
|
|
44
45
|
contains(key: AnyNotNil): key is T & OneSidedTypeGuard;
|
|
45
46
|
clear(): void;
|
package/utility/linked-set.lua
CHANGED
|
@@ -85,6 +85,23 @@ function LinkedSet.prototype.add(self, key)
|
|
|
85
85
|
end
|
|
86
86
|
return true
|
|
87
87
|
end
|
|
88
|
+
function LinkedSet.prototype.addBefore(self, value, key)
|
|
89
|
+
local n = self.n
|
|
90
|
+
local p = self.p
|
|
91
|
+
local previous = p[value]
|
|
92
|
+
if previous ~= nil then
|
|
93
|
+
n[previous] = key
|
|
94
|
+
p[key] = previous
|
|
95
|
+
elseif value == self.f then
|
|
96
|
+
self.f = key
|
|
97
|
+
else
|
|
98
|
+
return false
|
|
99
|
+
end
|
|
100
|
+
n[key] = value
|
|
101
|
+
p[value] = key
|
|
102
|
+
self.s = self.s + 1
|
|
103
|
+
return true
|
|
104
|
+
end
|
|
88
105
|
function LinkedSet.prototype.remove(self, key)
|
|
89
106
|
local n = self.n
|
|
90
107
|
local next = n[key]
|
|
@@ -182,6 +199,7 @@ __TS__SetDescriptor(
|
|
|
182
199
|
end},
|
|
183
200
|
true
|
|
184
201
|
)
|
|
202
|
+
local emptyIteratorState = {t = {}}
|
|
185
203
|
local EmptyLinkedSet = __TS__Class()
|
|
186
204
|
EmptyLinkedSet.name = "EmptyLinkedSet"
|
|
187
205
|
__TS__ClassExtends(EmptyLinkedSet, ____exports.LinkedSet)
|
|
@@ -191,6 +209,9 @@ function EmptyLinkedSet.prototype.add(self)
|
|
|
191
209
|
0
|
|
192
210
|
)
|
|
193
211
|
end
|
|
212
|
+
function EmptyLinkedSet.prototype.__pairs(self)
|
|
213
|
+
return linkedSetNext, emptyIteratorState, nil
|
|
214
|
+
end
|
|
194
215
|
local EMPTY_LINKED_SET = __TS__New(EmptyLinkedSet)
|
|
195
216
|
____exports.emptyLinkedSet = function()
|
|
196
217
|
return EMPTY_LINKED_SET
|
package/utility/records.lua
CHANGED
|
@@ -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
|
|
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
|