warscript 0.0.1-dev.fd21394 → 0.0.1-dev.fe0aeea
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/binaryreader.d.ts +1 -0
- package/binaryreader.lua +3 -0
- package/config.d.ts +5 -0
- package/config.lua +10 -0
- package/core/types/effect.d.ts +14 -6
- package/core/types/effect.lua +131 -35
- package/core/types/frame.d.ts +8 -0
- package/core/types/frame.lua +93 -1
- package/core/types/sound.d.ts +17 -24
- package/core/types/sound.lua +94 -24
- package/core/util.d.ts +1 -1
- package/core/util.lua +18 -1
- package/engine/behavior.d.ts +2 -2
- package/engine/behavior.lua +6 -6
- package/engine/behaviour/ability/always-enabled.d.ts +7 -0
- package/engine/behaviour/ability/always-enabled.lua +31 -0
- package/engine/behaviour/ability/apply-buff.d.ts +8 -5
- package/engine/behaviour/ability/apply-buff.lua +32 -0
- package/engine/behaviour/ability/apply-unit-behavior.lua +1 -0
- package/engine/behaviour/ability/damage.d.ts +36 -11
- package/engine/behaviour/ability/damage.lua +90 -32
- package/engine/behaviour/ability/emulate-impact.d.ts +6 -0
- package/engine/behaviour/ability/emulate-impact.lua +28 -0
- package/engine/behaviour/ability/heal.d.ts +33 -6
- package/engine/behaviour/ability/heal.lua +89 -10
- package/engine/behaviour/ability/instant-impact.d.ts +2 -2
- package/engine/behaviour/ability/instant-impact.lua +4 -19
- package/engine/behaviour/ability/on-command-impact.d.ts +8 -0
- package/engine/behaviour/ability/on-command-impact.lua +25 -0
- package/engine/behaviour/ability/remove-buffs.d.ts +16 -0
- package/engine/behaviour/ability/remove-buffs.lua +28 -0
- package/engine/behaviour/ability/restore-mana.d.ts +15 -0
- package/engine/behaviour/ability/restore-mana.lua +29 -0
- package/engine/behaviour/ability.d.ts +20 -4
- package/engine/behaviour/ability.lua +111 -38
- package/engine/behaviour/unit.d.ts +7 -0
- package/engine/behaviour/unit.lua +20 -0
- package/engine/buff.d.ts +101 -39
- package/engine/buff.lua +458 -203
- package/engine/game-map.d.ts +7 -0
- package/engine/game-map.lua +32 -0
- package/engine/internal/ability.d.ts +16 -13
- package/engine/internal/ability.lua +80 -76
- package/engine/internal/item/ability.lua +106 -0
- package/engine/internal/item+owner.lua +2 -2
- package/engine/internal/item.d.ts +2 -2
- package/engine/internal/item.lua +56 -25
- package/engine/internal/mechanics/ability-duration.lua +1 -1
- package/engine/internal/misc/ability-disable-counter.d.ts +2 -0
- package/engine/internal/misc/ability-disable-counter.lua +13 -0
- package/engine/internal/object-data/auto-attack-speed-increase.d.ts +1 -1
- package/engine/internal/object-data/auto-attack-speed-increase.lua +2 -0
- package/engine/internal/object-data/evasion-probability.d.ts +2 -0
- package/engine/internal/object-data/evasion-probability.lua +16 -0
- package/engine/internal/unit/ability.d.ts +10 -1
- package/engine/internal/unit/ability.lua +36 -14
- package/engine/internal/unit/add-item-to-slot-init.d.ts +2 -0
- package/engine/internal/unit/add-item-to-slot-init.lua +23 -0
- package/engine/internal/unit/add-item-to-slot.d.ts +2 -0
- package/engine/internal/unit/add-item-to-slot.lua +52 -0
- package/engine/internal/unit/bonus.d.ts +6 -2
- package/engine/internal/unit/bonus.lua +23 -1
- package/engine/internal/unit/ignore-events-items.d.ts +2 -0
- package/engine/internal/unit/ignore-events-items.lua +5 -0
- package/engine/internal/unit/item.d.ts +24 -0
- package/engine/internal/unit/item.lua +78 -0
- package/engine/internal/unit/main-selected.d.ts +13 -0
- package/engine/internal/unit/main-selected.lua +51 -0
- package/engine/internal/unit+ability.lua +2 -2
- package/engine/internal/unit+transport.lua +4 -10
- package/engine/internal/unit-missile-launch.lua +24 -5
- package/engine/internal/unit.d.ts +31 -10
- package/engine/internal/unit.lua +170 -83
- package/engine/internal/utility.lua +12 -0
- package/engine/lightning.d.ts +12 -5
- package/engine/lightning.lua +48 -14
- package/engine/local-client.d.ts +7 -2
- package/engine/local-client.lua +82 -0
- package/engine/object-data/auxiliary/animation-name.d.ts +1 -0
- package/engine/object-data/auxiliary/animation-name.lua +16 -0
- package/engine/object-data/auxiliary/attachment-preset.d.ts +7 -2
- package/engine/object-data/auxiliary/attachment-preset.lua +4 -3
- package/engine/object-data/auxiliary/sound-eax.d.ts +10 -0
- package/engine/object-data/auxiliary/sound-eax.lua +2 -0
- package/engine/object-data/auxiliary/sound-preset-name.d.ts +5 -1
- package/engine/object-data/auxiliary/tech-tree-dependency.d.ts +1 -1
- package/engine/object-data/entry/ability-type/blank-configurable.lua +12 -1
- package/engine/object-data/entry/ability-type/carrion-swarm.d.ts +14 -0
- package/engine/object-data/entry/ability-type/carrion-swarm.lua +65 -0
- package/engine/object-data/entry/ability-type/disease-cloud.lua +2 -2
- package/engine/object-data/entry/ability-type/engineering-upgrade.lua +2 -2
- package/engine/object-data/entry/ability-type/ensnare.d.ts +12 -0
- package/engine/object-data/entry/ability-type/ensnare.lua +52 -0
- package/engine/object-data/entry/ability-type/feral-spirit.lua +2 -2
- package/engine/object-data/entry/ability-type/phase-shift.d.ts +10 -0
- package/engine/object-data/entry/ability-type/phase-shift.lua +39 -0
- package/engine/object-data/entry/ability-type/phoenix-morph.lua +4 -4
- package/engine/object-data/entry/ability-type/raise-dead.d.ts +17 -0
- package/engine/object-data/entry/ability-type/raise-dead.lua +78 -0
- package/engine/object-data/entry/ability-type/shock-wave.d.ts +4 -0
- package/engine/object-data/entry/ability-type/shock-wave.lua +26 -0
- package/engine/object-data/entry/ability-type/summon-quilbeast.lua +2 -2
- package/engine/object-data/entry/ability-type/summon-water-elemental.lua +2 -2
- package/engine/object-data/entry/ability-type/web.d.ts +12 -0
- package/engine/object-data/entry/ability-type/web.lua +52 -0
- package/engine/object-data/entry/ability-type.d.ts +19 -17
- package/engine/object-data/entry/ability-type.lua +82 -33
- package/engine/object-data/entry/buff-type/applicable.lua +13 -37
- package/engine/object-data/entry/buff-type.d.ts +1 -1
- package/engine/object-data/entry/buff-type.lua +2 -2
- package/engine/object-data/entry/destructible-type.d.ts +1 -1
- package/engine/object-data/entry/item-type.d.ts +15 -1
- package/engine/object-data/entry/item-type.lua +93 -2
- package/engine/object-data/entry/lightning-type.d.ts +1 -1
- package/engine/object-data/entry/sound-preset.d.ts +33 -0
- package/engine/object-data/entry/sound-preset.lua +140 -0
- package/engine/object-data/entry/unit-type.d.ts +8 -1
- package/engine/object-data/entry/unit-type.lua +61 -8
- package/engine/object-data/entry/upgrade.d.ts +1 -1
- package/engine/object-data/entry/upgrade.lua +4 -4
- package/engine/object-data/entry.d.ts +16 -14
- package/engine/object-data/entry.lua +60 -32
- package/engine/object-data/utility/object-data-entry-id-generator.lua +7 -0
- package/engine/object-field/ability.d.ts +26 -3
- package/engine/object-field/ability.lua +54 -1
- package/engine/object-field.d.ts +2 -2
- package/engine/object-field.lua +4 -0
- package/engine/standard/entries/sound-preset.d.ts +10 -0
- package/engine/standard/entries/sound-preset.lua +10 -0
- package/engine/standard/fields/ability.d.ts +2 -0
- package/engine/standard/fields/ability.lua +2 -0
- package/engine/unit.d.ts +3 -0
- package/engine/unit.lua +3 -0
- package/index.d.ts +1 -0
- package/index.lua +1 -0
- package/lualib_bundle.lua +7 -2
- package/net/socket.d.ts +7 -1
- package/net/socket.lua +45 -4
- package/network.d.ts +1 -0
- package/network.lua +3 -2
- package/objutil/buff.lua +1 -1
- package/objutil/unit.lua +8 -0
- package/package.json +2 -2
- package/patch-lua.d.ts +0 -0
- package/patch-lua.lua +10 -0
- package/property.d.ts +55 -0
- package/property.lua +374 -0
- package/utility/arrays.d.ts +8 -1
- package/utility/arrays.lua +34 -3
- package/utility/lazy.d.ts +2 -0
- package/utility/lazy.lua +14 -0
- package/utility/linked-set.d.ts +11 -2
- package/utility/linked-set.lua +5 -2
- package/utility/reflection.lua +11 -7
- package/utility/types.d.ts +1 -0
- package/core/mapbounds.d.ts +0 -8
- package/core/mapbounds.lua +0 -12
package/lualib_bundle.lua
CHANGED
|
@@ -1094,6 +1094,11 @@ do
|
|
|
1094
1094
|
end
|
|
1095
1095
|
if __TS__StringIncludes(_VERSION, "Lua 5.0") then
|
|
1096
1096
|
return debug.traceback(("[Level " .. tostring(level)) .. "]")
|
|
1097
|
+
elseif _VERSION == "Lua 5.1" then
|
|
1098
|
+
return string.sub(
|
|
1099
|
+
debug.traceback("", level),
|
|
1100
|
+
2
|
|
1101
|
+
)
|
|
1097
1102
|
else
|
|
1098
1103
|
return debug.traceback(nil, level)
|
|
1099
1104
|
end
|
|
@@ -1102,7 +1107,7 @@ do
|
|
|
1102
1107
|
return function(self)
|
|
1103
1108
|
local description = getDescription(self)
|
|
1104
1109
|
local caller = debug.getinfo(3, "f")
|
|
1105
|
-
local isClassicLua = __TS__StringIncludes(_VERSION, "Lua 5.0")
|
|
1110
|
+
local isClassicLua = __TS__StringIncludes(_VERSION, "Lua 5.0")
|
|
1106
1111
|
if isClassicLua or caller and caller.func ~= error then
|
|
1107
1112
|
return description
|
|
1108
1113
|
else
|
|
@@ -1126,7 +1131,7 @@ do
|
|
|
1126
1131
|
end
|
|
1127
1132
|
self.message = message
|
|
1128
1133
|
self.name = "Error"
|
|
1129
|
-
self.stack = getErrorStack(nil,
|
|
1134
|
+
self.stack = getErrorStack(nil, __TS__New)
|
|
1130
1135
|
local metatable = getmetatable(self)
|
|
1131
1136
|
if metatable and not metatable.__errorToStringPatched then
|
|
1132
1137
|
metatable.__errorToStringPatched = true
|
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
|
|
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
|
|
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
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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 >
|
|
46
|
+
if #payload > ____exports.MAX_PAYLOAD_LENGTH then
|
|
46
47
|
error(
|
|
47
48
|
__TS__New(
|
|
48
49
|
IllegalArgumentException,
|
|
49
|
-
"payload length must be <=
|
|
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.
|
|
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/objutil/unit.lua
CHANGED
|
@@ -11,6 +11,8 @@ local ____exports = {}
|
|
|
11
11
|
local ____object = require("objutil.object")
|
|
12
12
|
local ObjectDefinition = ____object.ObjectDefinition
|
|
13
13
|
local idgen = require("objutil.idgen")
|
|
14
|
+
local ____config = require("config")
|
|
15
|
+
local WarscriptConfig = ____config.WarscriptConfig
|
|
14
16
|
local attackTypes = setmetatable(
|
|
15
17
|
{
|
|
16
18
|
normal = "normal",
|
|
@@ -593,6 +595,9 @@ __TS__SetDescriptor(
|
|
|
593
595
|
end,
|
|
594
596
|
set = function(self, v)
|
|
595
597
|
self:setStringField("umdl", v)
|
|
598
|
+
if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
|
|
599
|
+
self:setStringField("upor", "")
|
|
600
|
+
end
|
|
596
601
|
end
|
|
597
602
|
},
|
|
598
603
|
true
|
|
@@ -606,6 +611,9 @@ __TS__SetDescriptor(
|
|
|
606
611
|
end,
|
|
607
612
|
set = function(self, v)
|
|
608
613
|
self.object:setField("umdl:hd", v)
|
|
614
|
+
if WarscriptConfig.AUTOMATICALLY_SET_UNIT_TYPE_PORTRAIT_MODEL_PATH then
|
|
615
|
+
self.object:setField("upor:hd", "")
|
|
616
|
+
end
|
|
609
617
|
end
|
|
610
618
|
},
|
|
611
619
|
true
|
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.fe0aeea",
|
|
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.9a8d1de"
|
|
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
package/property.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** @noSelfInFile */
|
|
2
|
+
import { Player } from "./core/types/player";
|
|
3
|
+
import { Event } from "./event";
|
|
4
|
+
export declare class PersistentPropertiesConfig {
|
|
5
|
+
static defaultFileName: string;
|
|
6
|
+
}
|
|
7
|
+
declare const enum PropertyPropertyKey {
|
|
8
|
+
DEFAULT_VALUE = 0,
|
|
9
|
+
VALUE = 1,
|
|
10
|
+
IS_CHANGED = 2
|
|
11
|
+
}
|
|
12
|
+
export declare class Property<T> {
|
|
13
|
+
readonly valueChangeEvent: Event<[newValue: T, oldValue: T]>;
|
|
14
|
+
private [PropertyPropertyKey.DEFAULT_VALUE];
|
|
15
|
+
private [PropertyPropertyKey.VALUE];
|
|
16
|
+
private [PropertyPropertyKey.IS_CHANGED]?;
|
|
17
|
+
constructor(defaultValue: T);
|
|
18
|
+
get defaultValue(): T;
|
|
19
|
+
set defaultValue(defaultValue: T);
|
|
20
|
+
get value(): T;
|
|
21
|
+
set value(value: T);
|
|
22
|
+
get isChanged(): boolean;
|
|
23
|
+
reset(): boolean;
|
|
24
|
+
set(value: T): boolean;
|
|
25
|
+
get(): T;
|
|
26
|
+
}
|
|
27
|
+
declare const enum PlayerPropertyPropertyKey {
|
|
28
|
+
DEFAULT_VALUE = 0,
|
|
29
|
+
VALUE_BY_PLAYER = 1,
|
|
30
|
+
IS_CHANGED_BY_PLAYER = 2
|
|
31
|
+
}
|
|
32
|
+
export declare class PlayerProperty<T> {
|
|
33
|
+
readonly valueChangeEvent: Event<[player: Player, newValue: T, oldValue: T]>;
|
|
34
|
+
private readonly [PlayerPropertyPropertyKey.DEFAULT_VALUE];
|
|
35
|
+
private readonly [PlayerPropertyPropertyKey.VALUE_BY_PLAYER];
|
|
36
|
+
private readonly [PlayerPropertyPropertyKey.IS_CHANGED_BY_PLAYER];
|
|
37
|
+
constructor(defaultValue: T);
|
|
38
|
+
isChanged(player: Player): boolean;
|
|
39
|
+
reset(player: Player): boolean;
|
|
40
|
+
set(player: Player, value: T): boolean;
|
|
41
|
+
get(player: Player): T;
|
|
42
|
+
}
|
|
43
|
+
export declare class PersistentProperty<T extends undefined | boolean | number | string> extends Property<T> {
|
|
44
|
+
readonly id: number;
|
|
45
|
+
constructor(id: number, defaultValue: T, valueChangeEventListener?: (newValue: T, oldValue: T) => void);
|
|
46
|
+
reset(): boolean;
|
|
47
|
+
set(value: T): boolean;
|
|
48
|
+
}
|
|
49
|
+
export declare class PersistentPlayerProperty<T extends string | number | boolean> extends PlayerProperty<T> {
|
|
50
|
+
readonly id: number;
|
|
51
|
+
constructor(id: number, initialValue: T, valueChangeEventListener?: (player: Player, newValue: T, oldValue: T) => void);
|
|
52
|
+
reset(player: Player): boolean;
|
|
53
|
+
set(player: Player, value: T): boolean;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
package/property.lua
ADDED
|
@@ -0,0 +1,374 @@
|
|
|
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 savePropertyValues
|
|
8
|
+
local ____binaryreader = require("binaryreader")
|
|
9
|
+
local BinaryReader = ____binaryreader.BinaryReader
|
|
10
|
+
local ____binarywriter = require("binarywriter")
|
|
11
|
+
local BinaryWriter = ____binarywriter.BinaryWriter
|
|
12
|
+
local ____player = require("core.types.player")
|
|
13
|
+
local Player = ____player.Player
|
|
14
|
+
local ____timer = require("core.types.timer")
|
|
15
|
+
local Timer = ____timer.Timer
|
|
16
|
+
local ____event = require("event")
|
|
17
|
+
local Event = ____event.Event
|
|
18
|
+
local file = require("file")
|
|
19
|
+
local ____network = require("network")
|
|
20
|
+
local synchronize = ____network.synchronize
|
|
21
|
+
local base64 = require("utility.base64")
|
|
22
|
+
local lzw = require("utility.lzw")
|
|
23
|
+
local ____preconditions = require("utility.preconditions")
|
|
24
|
+
local ____require = ____preconditions.require
|
|
25
|
+
local invoke = Event.invoke
|
|
26
|
+
____exports.PersistentPropertiesConfig = __TS__Class()
|
|
27
|
+
local PersistentPropertiesConfig = ____exports.PersistentPropertiesConfig
|
|
28
|
+
PersistentPropertiesConfig.name = "PersistentPropertiesConfig"
|
|
29
|
+
function PersistentPropertiesConfig.prototype.____constructor(self)
|
|
30
|
+
end
|
|
31
|
+
PersistentPropertiesConfig.defaultFileName = ""
|
|
32
|
+
____exports.Property = __TS__Class()
|
|
33
|
+
local Property = ____exports.Property
|
|
34
|
+
Property.name = "Property"
|
|
35
|
+
function Property.prototype.____constructor(self, defaultValue)
|
|
36
|
+
self.valueChangeEvent = __TS__New(Event)
|
|
37
|
+
self[0] = defaultValue
|
|
38
|
+
self[1] = defaultValue
|
|
39
|
+
end
|
|
40
|
+
function Property.prototype.reset(self)
|
|
41
|
+
if self[2] then
|
|
42
|
+
self[2] = nil
|
|
43
|
+
local defaultValue = self[0]
|
|
44
|
+
local oldValue = self[1]
|
|
45
|
+
if defaultValue ~= oldValue then
|
|
46
|
+
self[1] = defaultValue
|
|
47
|
+
invoke(self.valueChangeEvent, defaultValue, oldValue)
|
|
48
|
+
end
|
|
49
|
+
return true
|
|
50
|
+
end
|
|
51
|
+
return false
|
|
52
|
+
end
|
|
53
|
+
function Property.prototype.set(self, value)
|
|
54
|
+
self[2] = true
|
|
55
|
+
local oldValue = self[1]
|
|
56
|
+
self[1] = value
|
|
57
|
+
if value ~= oldValue then
|
|
58
|
+
invoke(self.valueChangeEvent, value, oldValue)
|
|
59
|
+
return true
|
|
60
|
+
end
|
|
61
|
+
return false
|
|
62
|
+
end
|
|
63
|
+
function Property.prototype.get(self)
|
|
64
|
+
return self[1]
|
|
65
|
+
end
|
|
66
|
+
__TS__SetDescriptor(
|
|
67
|
+
Property.prototype,
|
|
68
|
+
"defaultValue",
|
|
69
|
+
{
|
|
70
|
+
get = function(self)
|
|
71
|
+
return self[0]
|
|
72
|
+
end,
|
|
73
|
+
set = function(self, defaultValue)
|
|
74
|
+
local oldDefaultValue = self[0]
|
|
75
|
+
if defaultValue ~= oldDefaultValue then
|
|
76
|
+
self[0] = defaultValue
|
|
77
|
+
if not self[2] then
|
|
78
|
+
self[1] = defaultValue
|
|
79
|
+
invoke(self.valueChangeEvent, defaultValue, oldDefaultValue)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
},
|
|
84
|
+
true
|
|
85
|
+
)
|
|
86
|
+
__TS__SetDescriptor(
|
|
87
|
+
Property.prototype,
|
|
88
|
+
"value",
|
|
89
|
+
{
|
|
90
|
+
get = function(self)
|
|
91
|
+
return self:get()
|
|
92
|
+
end,
|
|
93
|
+
set = function(self, value)
|
|
94
|
+
self:set(value)
|
|
95
|
+
end
|
|
96
|
+
},
|
|
97
|
+
true
|
|
98
|
+
)
|
|
99
|
+
__TS__SetDescriptor(
|
|
100
|
+
Property.prototype,
|
|
101
|
+
"isChanged",
|
|
102
|
+
{get = function(self)
|
|
103
|
+
return self[2] == true
|
|
104
|
+
end},
|
|
105
|
+
true
|
|
106
|
+
)
|
|
107
|
+
____exports.PlayerProperty = __TS__Class()
|
|
108
|
+
local PlayerProperty = ____exports.PlayerProperty
|
|
109
|
+
PlayerProperty.name = "PlayerProperty"
|
|
110
|
+
function PlayerProperty.prototype.____constructor(self, defaultValue)
|
|
111
|
+
self.valueChangeEvent = __TS__New(Event)
|
|
112
|
+
self[0] = defaultValue
|
|
113
|
+
self[1] = {}
|
|
114
|
+
self[2] = {}
|
|
115
|
+
end
|
|
116
|
+
function PlayerProperty.prototype.isChanged(self, player)
|
|
117
|
+
return self[2][player] ~= nil
|
|
118
|
+
end
|
|
119
|
+
function PlayerProperty.prototype.reset(self, player)
|
|
120
|
+
if self[2][player] ~= nil then
|
|
121
|
+
self[2][player] = nil
|
|
122
|
+
local initialValue = self[0]
|
|
123
|
+
local oldValue = self[1][player]
|
|
124
|
+
self[1][player] = nil
|
|
125
|
+
if initialValue ~= oldValue then
|
|
126
|
+
invoke(self.valueChangeEvent, player, initialValue, oldValue)
|
|
127
|
+
end
|
|
128
|
+
return true
|
|
129
|
+
end
|
|
130
|
+
return false
|
|
131
|
+
end
|
|
132
|
+
function PlayerProperty.prototype.set(self, player, value)
|
|
133
|
+
self[2][player] = true
|
|
134
|
+
local oldValue = self[1][player]
|
|
135
|
+
self[1][player] = value
|
|
136
|
+
if value ~= oldValue then
|
|
137
|
+
invoke(self.valueChangeEvent, player, value, oldValue)
|
|
138
|
+
return true
|
|
139
|
+
end
|
|
140
|
+
return false
|
|
141
|
+
end
|
|
142
|
+
function PlayerProperty.prototype.get(self, player)
|
|
143
|
+
local ____table_PlayerPropertyPropertyKey_IS_CHANGED_BY_PLAYER_has_result_0
|
|
144
|
+
if self[2][player] ~= nil then
|
|
145
|
+
____table_PlayerPropertyPropertyKey_IS_CHANGED_BY_PLAYER_has_result_0 = self[1][player]
|
|
146
|
+
else
|
|
147
|
+
____table_PlayerPropertyPropertyKey_IS_CHANGED_BY_PLAYER_has_result_0 = self[0]
|
|
148
|
+
end
|
|
149
|
+
return ____table_PlayerPropertyPropertyKey_IS_CHANGED_BY_PLAYER_has_result_0
|
|
150
|
+
end
|
|
151
|
+
local NULL_VALUE = {}
|
|
152
|
+
local loadedValueById
|
|
153
|
+
local loadedValueByIdByPlayer = {}
|
|
154
|
+
local localValueById = {}
|
|
155
|
+
local persistentPropertyById = {}
|
|
156
|
+
local persistentPlayerPropertyById = {}
|
|
157
|
+
____exports.PersistentProperty = __TS__Class()
|
|
158
|
+
local PersistentProperty = ____exports.PersistentProperty
|
|
159
|
+
PersistentProperty.name = "PersistentProperty"
|
|
160
|
+
__TS__ClassExtends(PersistentProperty, ____exports.Property)
|
|
161
|
+
function PersistentProperty.prototype.____constructor(self, id, defaultValue, valueChangeEventListener)
|
|
162
|
+
PersistentProperty.____super.prototype.____constructor(self, defaultValue)
|
|
163
|
+
self.id = id
|
|
164
|
+
____require(not (persistentPropertyById[id] ~= nil) and not (persistentPlayerPropertyById[id] ~= nil))
|
|
165
|
+
persistentPropertyById[id] = self
|
|
166
|
+
if valueChangeEventListener ~= nil then
|
|
167
|
+
self.valueChangeEvent:addListener(valueChangeEventListener)
|
|
168
|
+
end
|
|
169
|
+
local value = loadedValueById and loadedValueById[id]
|
|
170
|
+
if value ~= nil then
|
|
171
|
+
local ____self_set_4 = self.set
|
|
172
|
+
local ____temp_3
|
|
173
|
+
if value == NULL_VALUE then
|
|
174
|
+
____temp_3 = nil
|
|
175
|
+
else
|
|
176
|
+
____temp_3 = value
|
|
177
|
+
end
|
|
178
|
+
____self_set_4(self, ____temp_3)
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
function PersistentProperty.prototype.reset(self)
|
|
182
|
+
if PersistentProperty.____super.prototype.reset(self) then
|
|
183
|
+
localValueById[self.id] = nil
|
|
184
|
+
savePropertyValues()
|
|
185
|
+
return true
|
|
186
|
+
end
|
|
187
|
+
return false
|
|
188
|
+
end
|
|
189
|
+
function PersistentProperty.prototype.set(self, value)
|
|
190
|
+
if PersistentProperty.____super.prototype.set(self, value) then
|
|
191
|
+
localValueById[self.id] = value == nil and NULL_VALUE or value
|
|
192
|
+
savePropertyValues()
|
|
193
|
+
return true
|
|
194
|
+
end
|
|
195
|
+
return false
|
|
196
|
+
end
|
|
197
|
+
____exports.PersistentPlayerProperty = __TS__Class()
|
|
198
|
+
local PersistentPlayerProperty = ____exports.PersistentPlayerProperty
|
|
199
|
+
PersistentPlayerProperty.name = "PersistentPlayerProperty"
|
|
200
|
+
__TS__ClassExtends(PersistentPlayerProperty, ____exports.PlayerProperty)
|
|
201
|
+
function PersistentPlayerProperty.prototype.____constructor(self, id, initialValue, valueChangeEventListener)
|
|
202
|
+
PersistentPlayerProperty.____super.prototype.____constructor(self, initialValue)
|
|
203
|
+
self.id = id
|
|
204
|
+
____require(not (persistentPropertyById[id] ~= nil) and not (persistentPlayerPropertyById[id] ~= nil))
|
|
205
|
+
persistentPlayerPropertyById[id] = self
|
|
206
|
+
if valueChangeEventListener ~= nil then
|
|
207
|
+
self.valueChangeEvent:addListener(valueChangeEventListener)
|
|
208
|
+
end
|
|
209
|
+
for ____, player in ipairs(Player.all) do
|
|
210
|
+
local ____opt_5 = loadedValueByIdByPlayer and loadedValueByIdByPlayer[player]
|
|
211
|
+
local value = ____opt_5 and ____opt_5[id]
|
|
212
|
+
if value ~= nil then
|
|
213
|
+
local ____self_set_10 = self.set
|
|
214
|
+
local ____temp_9
|
|
215
|
+
if value == NULL_VALUE then
|
|
216
|
+
____temp_9 = nil
|
|
217
|
+
else
|
|
218
|
+
____temp_9 = value
|
|
219
|
+
end
|
|
220
|
+
____self_set_10(self, player, ____temp_9)
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
function PersistentPlayerProperty.prototype.reset(self, player)
|
|
225
|
+
if PersistentPlayerProperty.____super.prototype.reset(self, player) then
|
|
226
|
+
if player.isLocal then
|
|
227
|
+
localValueById[self.id] = nil
|
|
228
|
+
end
|
|
229
|
+
savePropertyValues(player)
|
|
230
|
+
return true
|
|
231
|
+
end
|
|
232
|
+
return false
|
|
233
|
+
end
|
|
234
|
+
function PersistentPlayerProperty.prototype.set(self, player, value)
|
|
235
|
+
if PersistentPlayerProperty.____super.prototype.set(self, player, value) then
|
|
236
|
+
if player.isLocal then
|
|
237
|
+
localValueById[self.id] = value
|
|
238
|
+
end
|
|
239
|
+
savePropertyValues(player)
|
|
240
|
+
return true
|
|
241
|
+
end
|
|
242
|
+
return false
|
|
243
|
+
end
|
|
244
|
+
savePropertyValues = function(player)
|
|
245
|
+
if player ~= nil and not player.isLocal or loadedValueById == nil or loadedValueByIdByPlayer[Player["local"]] == nil then
|
|
246
|
+
return
|
|
247
|
+
end
|
|
248
|
+
local writer = __TS__New(BinaryWriter)
|
|
249
|
+
writer:writeUInt32(0)
|
|
250
|
+
local size = 0
|
|
251
|
+
for ____ in pairs(localValueById) do
|
|
252
|
+
size = size + 1
|
|
253
|
+
end
|
|
254
|
+
writer:writeUInt32(size)
|
|
255
|
+
for id, value in pairs(localValueById) do
|
|
256
|
+
writer:writeInt32(id)
|
|
257
|
+
if value == NULL_VALUE then
|
|
258
|
+
writer:writeUInt8(0)
|
|
259
|
+
elseif value == false then
|
|
260
|
+
writer:writeUInt8(1)
|
|
261
|
+
elseif value == true then
|
|
262
|
+
writer:writeUInt8(2)
|
|
263
|
+
elseif type(value) == "number" then
|
|
264
|
+
if math.type(value) == "integer" then
|
|
265
|
+
writer:writeUInt8(3)
|
|
266
|
+
writer:writeInt32(value)
|
|
267
|
+
else
|
|
268
|
+
writer:writeUInt8(4)
|
|
269
|
+
writer:writeFloat(value)
|
|
270
|
+
end
|
|
271
|
+
else
|
|
272
|
+
writer:writeUInt8(5)
|
|
273
|
+
writer:writeUInt32(#value)
|
|
274
|
+
writer:writeBytes(value)
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
file.write(
|
|
278
|
+
____exports.PersistentPropertiesConfig.defaultFileName,
|
|
279
|
+
base64.encode(lzw.compress(tostring(writer)))
|
|
280
|
+
)
|
|
281
|
+
end
|
|
282
|
+
local function loadPropertyValues(fileData, player)
|
|
283
|
+
do
|
|
284
|
+
local function ____catch(_)
|
|
285
|
+
return true, {}
|
|
286
|
+
end
|
|
287
|
+
local ____try, ____hasReturned, ____returnValue = pcall(function()
|
|
288
|
+
local valueById = {}
|
|
289
|
+
local reader = __TS__New(
|
|
290
|
+
BinaryReader,
|
|
291
|
+
lzw.decompress(base64.decode(fileData))
|
|
292
|
+
)
|
|
293
|
+
reader:readUInt32()
|
|
294
|
+
local size = reader:readUInt32()
|
|
295
|
+
for _ = 1, size do
|
|
296
|
+
local id = reader:readInt32()
|
|
297
|
+
local dataType = reader:readUInt8()
|
|
298
|
+
if dataType == 0 then
|
|
299
|
+
valueById[id] = NULL_VALUE
|
|
300
|
+
elseif dataType == 1 then
|
|
301
|
+
valueById[id] = false
|
|
302
|
+
elseif dataType == 2 then
|
|
303
|
+
valueById[id] = true
|
|
304
|
+
elseif dataType == 3 then
|
|
305
|
+
valueById[id] = reader:readInt32()
|
|
306
|
+
elseif dataType == 4 then
|
|
307
|
+
valueById[id] = reader:readFloat()
|
|
308
|
+
elseif dataType == 5 then
|
|
309
|
+
valueById[id] = reader:readBytes(reader:readUInt32())
|
|
310
|
+
end
|
|
311
|
+
end
|
|
312
|
+
for id, value in pairs(valueById) do
|
|
313
|
+
local persistentProperty = persistentPropertyById[id]
|
|
314
|
+
if persistentProperty ~= nil then
|
|
315
|
+
if not persistentProperty.isChanged then
|
|
316
|
+
local ____persistentProperty_set_12 = persistentProperty.set
|
|
317
|
+
local ____temp_11
|
|
318
|
+
if value == NULL_VALUE then
|
|
319
|
+
____temp_11 = nil
|
|
320
|
+
else
|
|
321
|
+
____temp_11 = value
|
|
322
|
+
end
|
|
323
|
+
____persistentProperty_set_12(persistentProperty, ____temp_11)
|
|
324
|
+
end
|
|
325
|
+
elseif player ~= nil then
|
|
326
|
+
local persistentPlayerProperty = persistentPlayerPropertyById[id]
|
|
327
|
+
if persistentPlayerProperty ~= nil then
|
|
328
|
+
if not persistentPlayerProperty:isChanged(player) then
|
|
329
|
+
local ____persistentPlayerProperty_set_15 = persistentPlayerProperty.set
|
|
330
|
+
local ____player_14 = player
|
|
331
|
+
local ____temp_13
|
|
332
|
+
if value == NULL_VALUE then
|
|
333
|
+
____temp_13 = nil
|
|
334
|
+
else
|
|
335
|
+
____temp_13 = value
|
|
336
|
+
end
|
|
337
|
+
____persistentPlayerProperty_set_15(persistentPlayerProperty, ____player_14, ____temp_13)
|
|
338
|
+
end
|
|
339
|
+
elseif player.isLocal then
|
|
340
|
+
localValueById[id] = value
|
|
341
|
+
end
|
|
342
|
+
else
|
|
343
|
+
localValueById[id] = value
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
return true, valueById
|
|
347
|
+
end)
|
|
348
|
+
if not ____try then
|
|
349
|
+
____hasReturned, ____returnValue = ____catch(____hasReturned)
|
|
350
|
+
end
|
|
351
|
+
if ____hasReturned then
|
|
352
|
+
return ____returnValue
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
end
|
|
356
|
+
Timer:run(function()
|
|
357
|
+
local data = file.read(____exports.PersistentPropertiesConfig.defaultFileName) or ""
|
|
358
|
+
loadedValueById = loadPropertyValues(data)
|
|
359
|
+
for ____, player in ipairs(Player.all) do
|
|
360
|
+
local ____self_16 = synchronize(player, data)
|
|
361
|
+
____self_16["then"](
|
|
362
|
+
____self_16,
|
|
363
|
+
function(____, synchronizedData)
|
|
364
|
+
loadedValueByIdByPlayer[player] = loadPropertyValues(synchronizedData, player)
|
|
365
|
+
savePropertyValues(player)
|
|
366
|
+
end,
|
|
367
|
+
function()
|
|
368
|
+
loadedValueByIdByPlayer[player] = {}
|
|
369
|
+
savePropertyValues(player)
|
|
370
|
+
end
|
|
371
|
+
)
|
|
372
|
+
end
|
|
373
|
+
end)
|
|
374
|
+
return ____exports
|
package/utility/arrays.d.ts
CHANGED
|
@@ -32,7 +32,10 @@ export declare const flatMapToLuaSet: {
|
|
|
32
32
|
};
|
|
33
33
|
export declare const mapIndexed: <T, R>(array: readonly T[], transform: (index: number, value: T) => R) => R[];
|
|
34
34
|
export declare const associate: <T, K extends AnyNotNil, V>(array: readonly T[], keySelector: (value: T) => K, valueSelector: (value: T) => V) => LuaMap<K, V>;
|
|
35
|
-
export declare const associateBy:
|
|
35
|
+
export declare const associateBy: {
|
|
36
|
+
<K extends AnyNotNil, V>(array: readonly V[], keySelector: (value: V) => K): LuaMap<K, V>;
|
|
37
|
+
<K extends KeysOfType<V, AnyNotNil>, V>(array: readonly V[], keySelector: K): LuaMap<V[K] extends AnyNotNil ? V[K] : never, V>;
|
|
38
|
+
};
|
|
36
39
|
export declare const associateByIndexed: <K extends AnyNotNil, V>(array: readonly V[], keySelector: (index: number, value: V) => K) => LuaMap<K, V>;
|
|
37
40
|
export declare const associateWith: <K extends AnyNotNil, V>(array: readonly K[], valueSelector: (value: K) => V) => LuaMap<K, V>;
|
|
38
41
|
export declare const associateWithIndexed: <K extends AnyNotNil, V>(array: readonly K[], valueSelector: (index: number, value: K) => V) => LuaMap<K, V>;
|
|
@@ -41,6 +44,10 @@ export declare const average: (array: readonly number[]) => number;
|
|
|
41
44
|
export declare const sum: (array: readonly number[]) => number;
|
|
42
45
|
export declare const product: (array: readonly number[]) => number;
|
|
43
46
|
export declare const max: (array: readonly number[]) => number;
|
|
47
|
+
export declare const maxBy: {
|
|
48
|
+
<T, Args extends any[]>(array: readonly T[], selector: (value: T, ...args: Args) => number, ...args: Args): T | undefined;
|
|
49
|
+
<T, K extends KeysOfType<T, number>>(array: readonly T[], key: K): T | undefined;
|
|
50
|
+
};
|
|
44
51
|
export declare const intersperse: <T>(array: readonly T[], delimiter: T) => T[];
|
|
45
52
|
export declare const zip: <T, R, V>(array: readonly T[], otherArray: readonly R[], transform: (value: T, otherValue: R) => V) => V[];
|
|
46
53
|
export declare const chunked: <T>(array: readonly T[], size: number) => T[][];
|