teeworlds 2.5.4 → 2.5.6
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/README.md +4 -3
- package/{index.ts → index.d.ts} +6 -6
- package/index.js +25 -24
- package/index.js.map +1 -0
- package/lib/MsgPacker.d.ts +11 -0
- package/lib/MsgPacker.js +47 -55
- package/lib/MsgPacker.js.map +1 -0
- package/lib/MsgUnpacker.d.ts +16 -0
- package/lib/MsgUnpacker.js +53 -53
- package/lib/MsgUnpacker.js.map +1 -0
- package/lib/UUIDManager.d.ts +27 -0
- package/lib/UUIDManager.js +45 -50
- package/lib/UUIDManager.js.map +1 -0
- package/lib/client.d.ts +135 -0
- package/lib/client.js +762 -830
- package/lib/client.js.map +1 -0
- package/lib/components/game.d.ts +32 -0
- package/lib/components/game.js +104 -106
- package/lib/components/game.js.map +1 -0
- package/lib/components/movement.d.ts +34 -0
- package/lib/components/movement.js +75 -82
- package/lib/components/movement.js.map +1 -0
- package/lib/components/rcon.d.ts +33 -0
- package/lib/components/rcon.js +92 -122
- package/lib/components/rcon.js.map +1 -0
- package/lib/components/snapshot.d.ts +59 -0
- package/lib/components/snapshot.js +144 -234
- package/lib/components/snapshot.js.map +1 -0
- package/lib/enums_types/protocol.d.ts +120 -0
- package/lib/enums_types/protocol.js +14 -13
- package/lib/enums_types/protocol.js.map +1 -0
- package/lib/huffman.d.ts +24 -0
- package/lib/huffman.js +187 -192
- package/lib/huffman.js.map +1 -0
- package/lib/snapshot.d.ts +49 -0
- package/lib/snapshot.js +599 -610
- package/lib/snapshot.js.map +1 -0
- package/package.json +21 -24
- package/docs/documentation.md +0 -368
- package/docs/examples/chat_bot.js +0 -25
- package/docs/examples/kill_on_freeze.js +0 -20
- package/lib/MsgPacker.ts +0 -45
- package/lib/MsgUnpacker.ts +0 -58
- package/lib/UUIDManager.ts +0 -45
- package/lib/client.ts +0 -926
- package/lib/components/game.ts +0 -133
- package/lib/components/movement.ts +0 -88
- package/lib/components/rcon.ts +0 -114
- package/lib/components/snapshot.ts +0 -187
- package/lib/enums_types/protocol.ts +0 -137
- package/lib/enums_types/types.d.ts +0 -236
- package/lib/huffman.ts +0 -226
- package/lib/snapshot.ts +0 -632
- package/tsconfig.json +0 -69
package/README.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# Teeworlds Client
|
|
2
2
|
Library to connect a bot to a Teeworlds server.
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
# Links
|
|
5
|
+
https://github.com/swarfeya/teeworlds-library-ts/tree/main
|
|
5
6
|
https://www.npmjs.com/package/teeworlds
|
|
6
7
|
|
|
7
8
|
# Documentation
|
|
8
|
-
You can find an documentation to what most components do in the [docs/documentation.md](https://
|
|
9
|
-
You can also find a few examples inside of the [docs/examples](https://
|
|
9
|
+
You can find an documentation to what most components do in the [docs/documentation.md](https://github.com/swarfeya/teeworlds-library-ts/blob/main/docs/documentation.md).
|
|
10
|
+
You can also find a few examples inside of the [docs/examples](https://github.com/swarfeya/teeworlds-library-ts/tree/main/docs/examples) directory.
|
|
10
11
|
|
|
11
12
|
# Projects using this library
|
|
12
13
|
Note: If you have or know any projects running using this library, please contact me so i can add them, or PR them yourself.
|
package/{index.ts → index.d.ts}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { Client } from "./lib/client";
|
|
2
|
-
export * from "./lib/MsgPacker";
|
|
3
|
-
export * from "./lib/MsgUnpacker";
|
|
4
|
-
export * from "./lib/snapshot";
|
|
5
|
-
export * from "./lib/huffman"
|
|
6
|
-
export * from "./lib/UUIDManager"
|
|
1
|
+
export { Client } from "./lib/client";
|
|
2
|
+
export * from "./lib/MsgPacker";
|
|
3
|
+
export * from "./lib/MsgUnpacker";
|
|
4
|
+
export * from "./lib/snapshot";
|
|
5
|
+
export * from "./lib/huffman";
|
|
6
|
+
export * from "./lib/UUIDManager";
|
package/index.js
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.Client = void 0;
|
|
18
|
-
var client_1 = require("./lib/client");
|
|
19
|
-
Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_1.Client; } });
|
|
20
|
-
__exportStar(require("./lib/MsgPacker"), exports);
|
|
21
|
-
__exportStar(require("./lib/MsgUnpacker"), exports);
|
|
22
|
-
__exportStar(require("./lib/snapshot"), exports);
|
|
23
|
-
__exportStar(require("./lib/huffman"), exports);
|
|
24
|
-
__exportStar(require("./lib/UUIDManager"), exports);
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Client = void 0;
|
|
18
|
+
var client_1 = require("./lib/client");
|
|
19
|
+
Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_1.Client; } });
|
|
20
|
+
__exportStar(require("./lib/MsgPacker"), exports);
|
|
21
|
+
__exportStar(require("./lib/MsgUnpacker"), exports);
|
|
22
|
+
__exportStar(require("./lib/snapshot"), exports);
|
|
23
|
+
__exportStar(require("./lib/huffman"), exports);
|
|
24
|
+
__exportStar(require("./lib/UUIDManager"), exports);
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,uCAAsC;AAA7B,gGAAA,MAAM,OAAA;AACf,kDAAgC;AAChC,oDAAkC;AAClC,iDAA+B;AAC/B,gDAA6B;AAC7B,oDAAiC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class MsgPacker {
|
|
2
|
+
result: Buffer;
|
|
3
|
+
sys: boolean;
|
|
4
|
+
flag: number;
|
|
5
|
+
constructor(msg: number, sys: boolean, flag: number);
|
|
6
|
+
AddString(str: string): void;
|
|
7
|
+
AddBuffer(buffer: Buffer): void;
|
|
8
|
+
AddInt(i: number): void;
|
|
9
|
+
get size(): number;
|
|
10
|
+
get buffer(): Buffer<ArrayBufferLike>;
|
|
11
|
+
}
|
package/lib/MsgPacker.js
CHANGED
|
@@ -1,55 +1,47 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MsgPacker = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
this.result = Buffer.from([2 * msg + (sys ? 1 : 0)]);
|
|
7
|
-
this.sys = sys;
|
|
8
|
-
this.flag = flag;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
this.result = Buffer.concat([this.result, Buffer.from(str), Buffer.from([0x00])]);
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
this.result = Buffer.concat([this.result, buffer]);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
var result = [];
|
|
18
|
-
var pDst = (i >> 25) & 0x40;
|
|
19
|
-
var i = i ^ (i >> 31);
|
|
20
|
-
pDst |= i & 0x3f;
|
|
21
|
-
i >>= 6;
|
|
22
|
-
if (i) {
|
|
23
|
-
pDst |= 0x80;
|
|
24
|
-
result.push(pDst);
|
|
25
|
-
while (true) {
|
|
26
|
-
pDst++;
|
|
27
|
-
pDst = i & (0x7f);
|
|
28
|
-
i >>= 7;
|
|
29
|
-
pDst |= (Number(i != 0)) << 7;
|
|
30
|
-
result.push(pDst);
|
|
31
|
-
if (!i)
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
else
|
|
36
|
-
result.push(pDst);
|
|
37
|
-
this.result = Buffer.concat([this.result, Buffer.from(result)]);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return this.result;
|
|
49
|
-
},
|
|
50
|
-
enumerable: false,
|
|
51
|
-
configurable: true
|
|
52
|
-
});
|
|
53
|
-
return MsgPacker;
|
|
54
|
-
}());
|
|
55
|
-
exports.MsgPacker = MsgPacker;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MsgPacker = void 0;
|
|
4
|
+
class MsgPacker {
|
|
5
|
+
constructor(msg, sys, flag) {
|
|
6
|
+
this.result = Buffer.from([2 * msg + (sys ? 1 : 0)]);
|
|
7
|
+
this.sys = sys;
|
|
8
|
+
this.flag = flag;
|
|
9
|
+
}
|
|
10
|
+
AddString(str) {
|
|
11
|
+
this.result = Buffer.concat([this.result, Buffer.from(str), Buffer.from([0x00])]);
|
|
12
|
+
}
|
|
13
|
+
AddBuffer(buffer) {
|
|
14
|
+
this.result = Buffer.concat([this.result, buffer]);
|
|
15
|
+
}
|
|
16
|
+
AddInt(i) {
|
|
17
|
+
var result = [];
|
|
18
|
+
var pDst = (i >> 25) & 0x40;
|
|
19
|
+
var i = i ^ (i >> 31);
|
|
20
|
+
pDst |= i & 0x3f;
|
|
21
|
+
i >>= 6;
|
|
22
|
+
if (i) {
|
|
23
|
+
pDst |= 0x80;
|
|
24
|
+
result.push(pDst);
|
|
25
|
+
while (true) {
|
|
26
|
+
pDst++;
|
|
27
|
+
pDst = i & (0x7f);
|
|
28
|
+
i >>= 7;
|
|
29
|
+
pDst |= (Number(i != 0)) << 7;
|
|
30
|
+
result.push(pDst);
|
|
31
|
+
if (!i)
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else
|
|
36
|
+
result.push(pDst);
|
|
37
|
+
this.result = Buffer.concat([this.result, Buffer.from(result)]);
|
|
38
|
+
}
|
|
39
|
+
get size() {
|
|
40
|
+
return this.result.byteLength;
|
|
41
|
+
}
|
|
42
|
+
get buffer() {
|
|
43
|
+
return this.result;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.MsgPacker = MsgPacker;
|
|
47
|
+
//# sourceMappingURL=MsgPacker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MsgPacker.js","sourceRoot":"","sources":["../../lib/MsgPacker.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IAIrB,YAAY,GAAW,EAAE,GAAY,EAAE,IAAY;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,SAAS,CAAC,GAAW;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAClF,CAAC;IACD,SAAS,CAAC,MAAc;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,CAAC;IACD,MAAM,CAAC,CAAS;QACf,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;QAC3B,IAAI,CAAC,GAAG,CAAC,GAAE,CAAC,CAAC,IAAE,EAAE,CAAC,CAAA;QAClB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAA;QAChB,CAAC,KAAK,CAAC,CAAA;QACP,IAAI,CAAC,EAAE,CAAC;YACP,IAAI,IAAI,IAAI,CAAA;YACZ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,OAAO,IAAI,EAAE,CAAC;gBACb,IAAI,EAAE,CAAC;gBACP,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACjB,CAAC,KAAI,CAAC,CAAC;gBACP,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gBAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjB,IAAI,CAAC,CAAC;oBACL,MAAM;YACR,CAAC;QACF,CAAC;;YACA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAElB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAChE,CAAC;IACD,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,MAAM,CAAA;IACnB,CAAC;CACD;AA5CD,8BA4CC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function unpackInt(pSrc: Buffer): {
|
|
2
|
+
result: number;
|
|
3
|
+
remaining: Buffer;
|
|
4
|
+
};
|
|
5
|
+
export declare function unpackString(pSrc: Buffer): {
|
|
6
|
+
result: string;
|
|
7
|
+
remaining: Buffer;
|
|
8
|
+
};
|
|
9
|
+
export declare class MsgUnpacker {
|
|
10
|
+
remaining: Buffer;
|
|
11
|
+
constructor(pSrc: Buffer);
|
|
12
|
+
unpackInt(): number;
|
|
13
|
+
unpackString(): string;
|
|
14
|
+
/** @param size - size in bytes */
|
|
15
|
+
unpackRaw(size: number): Buffer;
|
|
16
|
+
}
|
package/lib/MsgUnpacker.js
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MsgUnpacker =
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
srcIndex
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
this.remaining = pSrc;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// let unpacked;
|
|
31
|
-
// if (!_unpacked) {
|
|
32
|
-
|
|
33
|
-
this.remaining = unpacked.remaining;
|
|
34
|
-
// } else {
|
|
35
|
-
// unpacked = {result: this.remaining[0]};
|
|
36
|
-
// this.remaining = this.remaining.slice(1);
|
|
37
|
-
// }
|
|
38
|
-
return unpacked.result;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
this.remaining = unpacked.remaining;
|
|
43
|
-
return unpacked.result;
|
|
44
|
-
}
|
|
45
|
-
/** @param size - size in bytes */
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.remaining = this.remaining.slice(size);
|
|
49
|
-
return unpacked;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MsgUnpacker = void 0;
|
|
4
|
+
exports.unpackInt = unpackInt;
|
|
5
|
+
exports.unpackString = unpackString;
|
|
6
|
+
const decoder = new TextDecoder('utf-8');
|
|
7
|
+
function unpackInt(pSrc) {
|
|
8
|
+
var srcIndex = 0;
|
|
9
|
+
const sign = ((pSrc[srcIndex] >> 6) & 1);
|
|
10
|
+
var result = (pSrc[srcIndex] & 63);
|
|
11
|
+
while (srcIndex <= 4) {
|
|
12
|
+
if ((pSrc[srcIndex] & 128) === 0)
|
|
13
|
+
break;
|
|
14
|
+
srcIndex++;
|
|
15
|
+
result |= ((pSrc[srcIndex] & 127)) << (6 + 7 * (srcIndex - 1));
|
|
16
|
+
}
|
|
17
|
+
result ^= -sign;
|
|
18
|
+
return { result, remaining: pSrc.slice(srcIndex + 1) };
|
|
19
|
+
}
|
|
20
|
+
function unpackString(pSrc) {
|
|
21
|
+
var result = pSrc.slice(0, pSrc.indexOf(0));
|
|
22
|
+
pSrc = pSrc.slice(pSrc.indexOf(0) + 1, pSrc.length);
|
|
23
|
+
return { result: decoder.decode(new Uint8Array(result)), remaining: pSrc };
|
|
24
|
+
}
|
|
25
|
+
class MsgUnpacker {
|
|
26
|
+
constructor(pSrc) {
|
|
27
|
+
this.remaining = pSrc;
|
|
28
|
+
}
|
|
29
|
+
unpackInt() {
|
|
30
|
+
// let unpacked;
|
|
31
|
+
// if (!_unpacked) {
|
|
32
|
+
let unpacked = unpackInt(this.remaining);
|
|
33
|
+
this.remaining = unpacked.remaining;
|
|
34
|
+
// } else {
|
|
35
|
+
// unpacked = {result: this.remaining[0]};
|
|
36
|
+
// this.remaining = this.remaining.slice(1);
|
|
37
|
+
// }
|
|
38
|
+
return unpacked.result;
|
|
39
|
+
}
|
|
40
|
+
unpackString() {
|
|
41
|
+
let unpacked = unpackString(this.remaining);
|
|
42
|
+
this.remaining = unpacked.remaining;
|
|
43
|
+
return unpacked.result;
|
|
44
|
+
}
|
|
45
|
+
/** @param size - size in bytes */
|
|
46
|
+
unpackRaw(size) {
|
|
47
|
+
let unpacked = this.remaining.slice(0, size);
|
|
48
|
+
this.remaining = this.remaining.slice(size);
|
|
49
|
+
return unpacked;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.MsgUnpacker = MsgUnpacker;
|
|
53
|
+
//# sourceMappingURL=MsgUnpacker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MsgUnpacker.js","sourceRoot":"","sources":["../../lib/MsgUnpacker.ts"],"names":[],"mappings":";;;AACA,8BAkBC;AACD,oCAIC;AAxBD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AACzC,SAAgB,SAAS,CAAC,IAAY;IAErC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAExC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAW,CAAC,CAAA;IAC3C,OAAO,QAAQ,IAAI,CAAC,EAAE,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAW,CAAC,KAAK,CAAC;YACvC,MAAM;QAEP,QAAQ,EAAE,CAAC;QACX,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAW,CAAC,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,QAAQ,GAAC,CAAC,CAAC,CAAC,CAAA;IAEjE,CAAC;IACD,MAAM,IAAI,CAAC,IAAI,CAAC;IAEhB,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAC,CAAC,CAAC,EAAC,CAAC;AACpD,CAAC;AACD,SAAgB,YAAY,CAAC,IAAY;IACxC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACnD,OAAO,EAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAC,CAAA;AACzE,CAAC;AAED,MAAa,WAAW;IAEvB,YAAY,IAAY;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,SAAS;QACR,gBAAgB;QAChB,qBAAqB;QACrB,IAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACpC,WAAW;QACV,0CAA0C;QAC1C,4CAA4C;QAE7C,IAAI;QACJ,OAAO,QAAQ,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,YAAY;QACX,IAAI,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACpC,OAAO,QAAQ,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,kCAAkC;IAClC,SAAS,CAAC,IAAY;QACrB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IACjB,CAAC;CACD;AA/BD,kCA+BC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const createTwMD5Hash: (name: string) => Buffer<ArrayBufferLike>;
|
|
2
|
+
export declare class UUIDManager {
|
|
3
|
+
uuids: {
|
|
4
|
+
name: string;
|
|
5
|
+
hash: Buffer;
|
|
6
|
+
type_id: number;
|
|
7
|
+
}[];
|
|
8
|
+
offset: number;
|
|
9
|
+
snapshot: boolean;
|
|
10
|
+
constructor(pOffset?: number, pSnapshot?: boolean);
|
|
11
|
+
LookupUUID(hash: Buffer): {
|
|
12
|
+
name: string;
|
|
13
|
+
hash: Buffer;
|
|
14
|
+
type_id: number;
|
|
15
|
+
} | undefined;
|
|
16
|
+
LookupName(name: string): {
|
|
17
|
+
name: string;
|
|
18
|
+
hash: Buffer;
|
|
19
|
+
type_id: number;
|
|
20
|
+
} | undefined;
|
|
21
|
+
LookupType(ID: number): {
|
|
22
|
+
name: string;
|
|
23
|
+
hash: Buffer;
|
|
24
|
+
type_id: number;
|
|
25
|
+
} | undefined;
|
|
26
|
+
RegisterName(name: string, type_id?: number): void;
|
|
27
|
+
}
|
package/lib/UUIDManager.js
CHANGED
|
@@ -1,50 +1,45 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UUIDManager = exports.createTwMD5Hash = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
.update(Buffer.from([0xe0, 0x5d, 0xda, 0xaa, 0xc4, 0xe6, 0x4c, 0xfb, 0xb6, 0x42, 0x5d, 0x48, 0xe8, 0x0c, 0x00, 0x29]))
|
|
8
|
-
.update(name)
|
|
9
|
-
.digest();
|
|
10
|
-
hash[6] &= 0x0f;
|
|
11
|
-
hash[6] |= 0x30;
|
|
12
|
-
hash[8] &= 0x3f;
|
|
13
|
-
hash[8] |= 0x80;
|
|
14
|
-
return hash;
|
|
15
|
-
};
|
|
16
|
-
exports.createTwMD5Hash = createTwMD5Hash;
|
|
17
|
-
// [{name: string, hash: Buffer}, ..]
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
return UUIDManager;
|
|
49
|
-
}());
|
|
50
|
-
exports.UUIDManager = UUIDManager;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UUIDManager = exports.createTwMD5Hash = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const createTwMD5Hash = (name) => {
|
|
6
|
+
let hash = (0, crypto_1.createHash)("md5")
|
|
7
|
+
.update(Buffer.from([0xe0, 0x5d, 0xda, 0xaa, 0xc4, 0xe6, 0x4c, 0xfb, 0xb6, 0x42, 0x5d, 0x48, 0xe8, 0x0c, 0x00, 0x29]))
|
|
8
|
+
.update(name)
|
|
9
|
+
.digest();
|
|
10
|
+
hash[6] &= 0x0f;
|
|
11
|
+
hash[6] |= 0x30;
|
|
12
|
+
hash[8] &= 0x3f;
|
|
13
|
+
hash[8] |= 0x80;
|
|
14
|
+
return hash;
|
|
15
|
+
};
|
|
16
|
+
exports.createTwMD5Hash = createTwMD5Hash;
|
|
17
|
+
// [{name: string, hash: Buffer}, ..]
|
|
18
|
+
class UUIDManager {
|
|
19
|
+
constructor(pOffset = 65536, pSnapshot = false) {
|
|
20
|
+
this.uuids = [];
|
|
21
|
+
this.offset = pOffset;
|
|
22
|
+
this.snapshot = pSnapshot;
|
|
23
|
+
}
|
|
24
|
+
LookupUUID(hash) {
|
|
25
|
+
return this.uuids.find(a => a.hash.compare(hash) == 0);
|
|
26
|
+
}
|
|
27
|
+
LookupName(name) {
|
|
28
|
+
return this.uuids.find(a => a.name === name);
|
|
29
|
+
}
|
|
30
|
+
LookupType(ID) {
|
|
31
|
+
if (!this.snapshot) {
|
|
32
|
+
return this.uuids[ID - this.offset];
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return this.uuids.find(a => a.type_id == ID);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
RegisterName(name, type_id = this.offset - this.uuids.length) {
|
|
39
|
+
this.uuids.push({
|
|
40
|
+
name, hash: (0, exports.createTwMD5Hash)(name), type_id
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.UUIDManager = UUIDManager;
|
|
45
|
+
//# sourceMappingURL=UUIDManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UUIDManager.js","sourceRoot":"","sources":["../../lib/UUIDManager.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAC7B,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE;IAC/C,IAAI,IAAI,GAAG,IAAA,mBAAU,EAAC,KAAK,CAAC;SAC1B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;SACrH,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,EAAE,CAAA;IACV,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAChB,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAChB,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAChB,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAChB,OAAO,IAAI,CAAC;AACb,CAAC,CAAA;AAVY,QAAA,eAAe,mBAU3B;AAED,qCAAqC;AACrC,MAAa,WAAW;IAIvB,YAAY,OAAO,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK;QAH9C,UAAK,GAAoD,EAAE,CAAC;QAI3D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC3B,CAAC;IAED,UAAU,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;IAC1D,CAAC;IACD,UAAU,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAE,CAAC;IAChD,CAAC;IAED,UAAU,CAAC,EAAU;QACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,YAAY,CAAC,IAAY,EAAE,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;QACnE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,IAAI,EAAE,IAAA,uBAAe,EAAC,IAAI,CAAC,EAAE,OAAO;SAC1C,CAAC,CAAC;IAEJ,CAAC;CAED;AA9BD,kCA8BC"}
|
package/lib/client.d.ts
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { EventEmitter } from 'stream';
|
|
2
|
+
import Movement from './components/movement';
|
|
3
|
+
import { DeltaItem, SnapshotItemTypes } from './enums_types/types';
|
|
4
|
+
import { MsgPacker } from './MsgPacker';
|
|
5
|
+
import { Snapshot } from './snapshot';
|
|
6
|
+
import { Game } from "./components/game";
|
|
7
|
+
import { SnapshotWrapper } from "./components/snapshot";
|
|
8
|
+
import { Rcon } from "./components/rcon";
|
|
9
|
+
declare interface iMessage {
|
|
10
|
+
team: number;
|
|
11
|
+
client_id: number;
|
|
12
|
+
author?: {
|
|
13
|
+
ClientInfo?: SnapshotItemTypes.ClientInfo;
|
|
14
|
+
PlayerInfo?: SnapshotItemTypes.PlayerInfo;
|
|
15
|
+
};
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
declare interface iEmoticon {
|
|
19
|
+
client_id: number;
|
|
20
|
+
emoticon: number;
|
|
21
|
+
author?: {
|
|
22
|
+
ClientInfo?: SnapshotItemTypes.ClientInfo;
|
|
23
|
+
PlayerInfo?: SnapshotItemTypes.PlayerInfo;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
declare interface iKillMsg {
|
|
27
|
+
killer_id: number;
|
|
28
|
+
killer?: {
|
|
29
|
+
ClientInfo?: SnapshotItemTypes.ClientInfo;
|
|
30
|
+
PlayerInfo?: SnapshotItemTypes.PlayerInfo;
|
|
31
|
+
};
|
|
32
|
+
victim_id: number;
|
|
33
|
+
victim?: {
|
|
34
|
+
ClientInfo?: SnapshotItemTypes.ClientInfo;
|
|
35
|
+
PlayerInfo?: SnapshotItemTypes.PlayerInfo;
|
|
36
|
+
};
|
|
37
|
+
weapon: number;
|
|
38
|
+
special_mode: number;
|
|
39
|
+
}
|
|
40
|
+
declare interface iOptions {
|
|
41
|
+
identity?: SnapshotItemTypes.ClientInfo;
|
|
42
|
+
password?: string;
|
|
43
|
+
ddnet_version?: {
|
|
44
|
+
version: number;
|
|
45
|
+
release_version: string;
|
|
46
|
+
};
|
|
47
|
+
timeout?: number;
|
|
48
|
+
NET_VERSION?: string;
|
|
49
|
+
lightweight?: boolean;
|
|
50
|
+
}
|
|
51
|
+
interface ClientEvents {
|
|
52
|
+
connected: () => void;
|
|
53
|
+
disconnect: (reason: string) => void;
|
|
54
|
+
emote: (message: iEmoticon) => void;
|
|
55
|
+
message: (message: iMessage) => void;
|
|
56
|
+
broadcast: (message: string) => void;
|
|
57
|
+
kill: (kill: iKillMsg) => void;
|
|
58
|
+
motd: (message: string) => void;
|
|
59
|
+
map_details: (message: {
|
|
60
|
+
map_name: string;
|
|
61
|
+
map_sha256: Buffer;
|
|
62
|
+
map_crc: number;
|
|
63
|
+
map_size: number;
|
|
64
|
+
map_url: string;
|
|
65
|
+
}) => void;
|
|
66
|
+
capabilities: (message: {
|
|
67
|
+
ChatTimeoutCode: boolean;
|
|
68
|
+
AnyPlayerFlag: boolean;
|
|
69
|
+
PingEx: boolean;
|
|
70
|
+
AllowDummy: boolean;
|
|
71
|
+
SyncWeaponInput: boolean;
|
|
72
|
+
}) => void;
|
|
73
|
+
snapshot: (items: DeltaItem[]) => void;
|
|
74
|
+
rcon_line: (line: string) => void;
|
|
75
|
+
}
|
|
76
|
+
export declare class Client extends EventEmitter {
|
|
77
|
+
on<K extends keyof ClientEvents>(event: K, listener: ClientEvents[K]): this;
|
|
78
|
+
emit<K extends keyof ClientEvents>(event: K, ...args: Parameters<ClientEvents[K]>): boolean;
|
|
79
|
+
rcon: Rcon;
|
|
80
|
+
private host;
|
|
81
|
+
private port;
|
|
82
|
+
private name;
|
|
83
|
+
private State;
|
|
84
|
+
private ack;
|
|
85
|
+
private clientAck;
|
|
86
|
+
private lastCheckedChunkAck;
|
|
87
|
+
private receivedSnaps;
|
|
88
|
+
private socket;
|
|
89
|
+
private TKEN;
|
|
90
|
+
private time;
|
|
91
|
+
private SnapUnpacker;
|
|
92
|
+
SnapshotUnpacker: SnapshotWrapper;
|
|
93
|
+
private PredGameTick;
|
|
94
|
+
private AckGameTick;
|
|
95
|
+
private SnapshotParts;
|
|
96
|
+
private currentSnapshotGameTick;
|
|
97
|
+
private snaps;
|
|
98
|
+
private sentChunkQueue;
|
|
99
|
+
private queueChunkEx;
|
|
100
|
+
private lastSendTime;
|
|
101
|
+
private lastRecvTime;
|
|
102
|
+
private lastSentMessages;
|
|
103
|
+
movement: Movement;
|
|
104
|
+
game: Game;
|
|
105
|
+
private VoteList;
|
|
106
|
+
readonly options?: iOptions;
|
|
107
|
+
private requestResend;
|
|
108
|
+
private UUIDManager;
|
|
109
|
+
constructor(ip: string, port: number, nickname: string, options?: iOptions);
|
|
110
|
+
private OnEnterGame;
|
|
111
|
+
private ResendAfter;
|
|
112
|
+
private Unpack;
|
|
113
|
+
/** Send a Control Msg to the server. (used for disconnect)*/
|
|
114
|
+
SendControlMsg(msg: number, ExtraMsg?: string): Promise<unknown>;
|
|
115
|
+
/** Send a Msg (or Msg[]) to the server.*/
|
|
116
|
+
SendMsgEx(Msgs: MsgPacker[] | MsgPacker, flags?: number): void;
|
|
117
|
+
/** Queue a chunk (instantly sent if flush flag is set - otherwise it will be sent in the next packet). */
|
|
118
|
+
QueueChunkEx(Msg: MsgPacker | MsgPacker[]): void;
|
|
119
|
+
/** Send a Raw Buffer (as chunk) to the server. */
|
|
120
|
+
SendMsgRaw(chunks: Buffer[]): void;
|
|
121
|
+
private MsgToChunk;
|
|
122
|
+
Flush(): void;
|
|
123
|
+
/** Connect the client to the server. */
|
|
124
|
+
connect(): Promise<void>;
|
|
125
|
+
/** Sending the input. (automatically done unless options.lightweight is on) */
|
|
126
|
+
sendInput(input?: import("./components/movement").NetObj_PlayerInput): void;
|
|
127
|
+
/** returns the movement object of the client */
|
|
128
|
+
get input(): import("./components/movement").NetObj_PlayerInput;
|
|
129
|
+
/** Disconnect the client. */
|
|
130
|
+
Disconnect(): Promise<unknown>;
|
|
131
|
+
/** Get all available vote options (for example for map voting) */
|
|
132
|
+
get VoteOptionList(): string[];
|
|
133
|
+
get rawSnapUnpacker(): Snapshot;
|
|
134
|
+
}
|
|
135
|
+
export {};
|