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.
Files changed (54) hide show
  1. package/README.md +4 -3
  2. package/{index.ts → index.d.ts} +6 -6
  3. package/index.js +25 -24
  4. package/index.js.map +1 -0
  5. package/lib/MsgPacker.d.ts +11 -0
  6. package/lib/MsgPacker.js +47 -55
  7. package/lib/MsgPacker.js.map +1 -0
  8. package/lib/MsgUnpacker.d.ts +16 -0
  9. package/lib/MsgUnpacker.js +53 -53
  10. package/lib/MsgUnpacker.js.map +1 -0
  11. package/lib/UUIDManager.d.ts +27 -0
  12. package/lib/UUIDManager.js +45 -50
  13. package/lib/UUIDManager.js.map +1 -0
  14. package/lib/client.d.ts +135 -0
  15. package/lib/client.js +762 -830
  16. package/lib/client.js.map +1 -0
  17. package/lib/components/game.d.ts +32 -0
  18. package/lib/components/game.js +104 -106
  19. package/lib/components/game.js.map +1 -0
  20. package/lib/components/movement.d.ts +34 -0
  21. package/lib/components/movement.js +75 -82
  22. package/lib/components/movement.js.map +1 -0
  23. package/lib/components/rcon.d.ts +33 -0
  24. package/lib/components/rcon.js +92 -122
  25. package/lib/components/rcon.js.map +1 -0
  26. package/lib/components/snapshot.d.ts +59 -0
  27. package/lib/components/snapshot.js +144 -234
  28. package/lib/components/snapshot.js.map +1 -0
  29. package/lib/enums_types/protocol.d.ts +120 -0
  30. package/lib/enums_types/protocol.js +14 -13
  31. package/lib/enums_types/protocol.js.map +1 -0
  32. package/lib/huffman.d.ts +24 -0
  33. package/lib/huffman.js +187 -192
  34. package/lib/huffman.js.map +1 -0
  35. package/lib/snapshot.d.ts +49 -0
  36. package/lib/snapshot.js +599 -610
  37. package/lib/snapshot.js.map +1 -0
  38. package/package.json +21 -24
  39. package/docs/documentation.md +0 -368
  40. package/docs/examples/chat_bot.js +0 -25
  41. package/docs/examples/kill_on_freeze.js +0 -20
  42. package/lib/MsgPacker.ts +0 -45
  43. package/lib/MsgUnpacker.ts +0 -58
  44. package/lib/UUIDManager.ts +0 -45
  45. package/lib/client.ts +0 -926
  46. package/lib/components/game.ts +0 -133
  47. package/lib/components/movement.ts +0 -88
  48. package/lib/components/rcon.ts +0 -114
  49. package/lib/components/snapshot.ts +0 -187
  50. package/lib/enums_types/protocol.ts +0 -137
  51. package/lib/enums_types/types.d.ts +0 -236
  52. package/lib/huffman.ts +0 -226
  53. package/lib/snapshot.ts +0 -632
  54. package/tsconfig.json +0 -69
@@ -1,236 +0,0 @@
1
- export type Item = SnapshotItemTypes.PlayerInput | SnapshotItemTypes.PlayerInfo | SnapshotItemTypes.Projectile | SnapshotItemTypes.Laser | SnapshotItemTypes.Pickup | SnapshotItemTypes.Flag | SnapshotItemTypes.GameInfo | SnapshotItemTypes.GameData | SnapshotItemTypes.CharacterCore | SnapshotItemTypes.Character | SnapshotItemTypes.PlayerInfo | SnapshotItemTypes.ClientInfo | SnapshotItemTypes.SpectatorInfo | SnapshotItemTypes.Common | SnapshotItemTypes.Explosion | SnapshotItemTypes.Spawn | SnapshotItemTypes.HammerHit | SnapshotItemTypes.Death | SnapshotItemTypes.SoundGlobal | SnapshotItemTypes.SoundWorld | SnapshotItemTypes.DamageInd;
2
- export type DDNetItem = SnapshotItemTypes.MyOwnObject | SnapshotItemTypes.DDNetCharacter | SnapshotItemTypes.DDNetPlayer | SnapshotItemTypes.GameInfoEx | SnapshotItemTypes.DDNetProjectile | SnapshotItemTypes.DDNetLaser;
3
- export type DeltaItem = { 'data': number[], 'parsed': Item | DDNetItem, 'type_id': number, 'id': number, 'key': number};
4
- export namespace SnapshotItemTypes {
5
- interface PlayerInput {
6
- direction: number,
7
- target_x: number,
8
- target_y: number,
9
- jump: number,
10
- fire: number,
11
- hook: number,
12
- player_flags: number,
13
- wanted_weapon: number,
14
- next_weapon: number,
15
- prev_weapon: number,
16
- }
17
-
18
- interface Projectile {
19
- x: number,
20
- y: number,
21
- vel_x: number,
22
- vel_y: number,
23
- type_: number,
24
- start_tick: number,
25
- }
26
-
27
- interface Laser {
28
- x: number,
29
- y: number,
30
- from_x: number,
31
- from_y: number,
32
- start_tick: number,
33
- }
34
-
35
- interface Pickup {
36
- x: number,
37
- y: number,
38
- type_: number,
39
- subtype: number,
40
- }
41
-
42
- interface Flag {
43
- x: number,
44
- y: number,
45
- team: number,
46
- }
47
-
48
- interface GameInfo {
49
- game_flags: number,
50
- game_state_flags: number,
51
- round_start_tick: number,
52
- warmup_timer: number,
53
- score_limit: number,
54
- time_limit: number,
55
- round_num: number,
56
- round_current: number,
57
- }
58
-
59
- interface GameData {
60
- teamscore_red: number,
61
- teamscore_blue: number,
62
- flag_carrier_red: number,
63
- flag_carrier_blue: number,
64
- }
65
-
66
- interface CharacterCore {
67
- tick: number,
68
- x: number,
69
- y: number,
70
- vel_x: number,
71
- vel_y: number,
72
- angle: number,
73
- direction: number,
74
- jumped: number,
75
- hooked_player: number,
76
- hook_state: number,
77
- hook_tick: number,
78
- hook_x: number,
79
- hook_y: number,
80
- hook_dx: number,
81
- hook_dy: number,
82
- }
83
-
84
- interface Character {
85
- character_core: CharacterCore,
86
- player_flags: number,
87
- health: number,
88
- armor: number,
89
- ammo_count: number,
90
- weapon: number,
91
- emote: number,
92
- attack_tick: number,
93
-
94
- client_id: number
95
- }
96
-
97
- interface PlayerInfo {
98
- local: number,
99
- client_id: number,
100
- team: number,
101
- score: number,
102
- latency: number,
103
- }
104
-
105
- interface ClientInfo {
106
- name: string,
107
- clan: string,
108
- country: number,
109
- skin: string,
110
- use_custom_color: number,
111
- color_body: number,
112
- color_feet: number,
113
-
114
- id: number
115
- }
116
-
117
- interface SpectatorInfo {
118
- spectator_id: number,
119
- x: number,
120
- y: number,
121
- }
122
-
123
- interface Common {
124
- x: number,
125
- y: number,
126
- }
127
-
128
- interface Explosion {
129
- common: Common,
130
- }
131
-
132
- interface Spawn {
133
- common: Common,
134
- }
135
-
136
- interface HammerHit {
137
- common: Common,
138
- }
139
-
140
- interface Death {
141
- common: Common,
142
- client_id: number,
143
- }
144
-
145
- interface SoundGlobal {
146
- common: Common,
147
- sound_id: number,
148
- }
149
-
150
- interface SoundWorld {
151
- common: Common,
152
- sound_id: number,
153
- }
154
-
155
- interface DamageInd {
156
- common: Common,
157
- angle: number,
158
- }
159
-
160
- interface MyOwnObject {
161
- m_Test: number
162
- }
163
-
164
- interface DDNetCharacter {
165
- m_Flags: number,
166
- m_FreezeEnd: number,
167
- m_Jumps: number,
168
- m_TeleCheckpoint: number,
169
- m_StrongWeakID: number,
170
-
171
- // # New data fields for jump display, freeze bar and ninja bar
172
- // # Default values indicate that these values should not be used
173
- m_JumpedTotal?: number,
174
- m_NinjaActivationTick?: number,
175
- m_FreezeStart?: number,
176
- // # New data fields for improved target accuracy
177
- m_TargetX?: number,
178
- m_TargetY?: number,
179
- id: number
180
- } //, validate_size=False),
181
- /** m_AuthLevel "AUTHED_NO", "AUTHED_ADMIN" */
182
- interface DDNetPlayer {
183
- m_Flags: number,
184
- m_AuthLevel: number,
185
- id: number
186
- }
187
-
188
- interface GameInfoEx {
189
-
190
- m_Flags: number,
191
- m_Version: number,
192
- m_Flags2: number,
193
- }//, validate_size=False),
194
-
195
- // # The code assumes that this has the same in-memory representation as
196
- // # the Projectile net object.
197
- interface DDNetProjectile {
198
- m_X: number,
199
- m_Y: number,
200
- m_Angle: number,
201
- m_Data: number,
202
- m_Type: number,
203
- m_StartTick: number,
204
- }
205
-
206
- interface DDNetLaser {
207
- m_ToX: number,
208
- m_ToY: number,
209
- m_FromX: number,
210
- m_FromY: number,
211
- m_StartTick: number,
212
- m_Owner: number,
213
- m_Type: number,
214
- }
215
- }
216
- export type RconCommand = {
217
- command: string;
218
- description: string;
219
- params: string;
220
- }
221
- export interface Chunk {
222
- bytes: number,
223
- flags: number,
224
- seq?: number,
225
- // type: 'sys' | 'game',
226
- sys: Boolean,
227
- msgid: number,
228
- msg: string,
229
- raw: Buffer,
230
- extended_msgid?: Buffer;
231
- }
232
-
233
- export interface _Packet {
234
- twprotocol: { flags: number, ack: number, chunkAmount: number, size: number },
235
- chunks: Chunk[]
236
- }
package/lib/huffman.ts DELETED
@@ -1,226 +0,0 @@
1
- let FREQ_TABLE = [
2
- 1 << 30, 4545, 2657, 431, 1950, 919, 444, 482, 2244, 617, 838, 542, 715, 1814, 304, 240, 754, 212, 647, 186,
3
- 283, 131, 146, 166, 543, 164, 167, 136, 179, 859, 363, 113, 157, 154, 204, 108, 137, 180, 202, 176,
4
- 872, 404, 168, 134, 151, 111, 113, 109, 120, 126, 129, 100, 41, 20, 16, 22, 18, 18, 17, 19,
5
- 16, 37, 13, 21, 362, 166, 99, 78, 95, 88, 81, 70, 83, 284, 91, 187, 77, 68, 52, 68,
6
- 59, 66, 61, 638, 71, 157, 50, 46, 69, 43, 11, 24, 13, 19, 10, 12, 12, 20, 14, 9,
7
- 20, 20, 10, 10, 15, 15, 12, 12, 7, 19, 15, 14, 13, 18, 35, 19, 17, 14, 8, 5,
8
- 15, 17, 9, 15, 14, 18, 8, 10, 2173, 134, 157, 68, 188, 60, 170, 60, 194, 62, 175, 71,
9
- 148, 67, 167, 78, 211, 67, 156, 69, 1674, 90, 174, 53, 147, 89, 181, 51, 174, 63, 163, 80,
10
- 167, 94, 128, 122, 223, 153, 218, 77, 200, 110, 190, 73, 174, 69, 145, 66, 277, 143, 141, 60,
11
- 136, 53, 180, 57, 142, 57, 158, 61, 166, 112, 152, 92, 26, 22, 21, 28, 20, 26, 30, 21,
12
- 32, 27, 20, 17, 23, 21, 30, 22, 22, 21, 27, 25, 17, 27, 23, 18, 39, 26, 15, 21,
13
- 12, 18, 18, 27, 20, 18, 15, 19, 11, 17, 33, 12, 18, 15, 19, 18, 16, 26, 17, 18,
14
- 9, 10, 25, 22, 22, 17, 20, 16, 6, 16, 15, 20, 14, 18, 24, 335, 1517],
15
-
16
- HUFFMAN_EOF_SYMBOL = 256,
17
- HUFFMAN_MAX_SYMBOLS = HUFFMAN_EOF_SYMBOL + 1,
18
- HUFFMAN_MAX_NODES = HUFFMAN_MAX_SYMBOLS * 2 - 1,
19
- HUFFMAN_LUTBITS = 10,
20
- HUFFMAN_LUTSIZE = 1 << HUFFMAN_LUTBITS,
21
- HUFFMAN_LUTMASK = HUFFMAN_LUTSIZE - 1;
22
-
23
- interface HuffmanNode {
24
- bits: number;
25
- numbits: number;
26
- left: number;
27
- right: number;
28
- symbol: number;
29
- }
30
-
31
-
32
- interface HuffmanConstructNode {
33
- node_id: number;
34
- frequency: number;
35
- }
36
-
37
- export class Huffman {
38
- nodes: HuffmanNode[];
39
- decode_lut: number[];
40
- num_nodes: number;
41
- start_node_index: number;
42
-
43
- constructor(frequencies = FREQ_TABLE) {
44
- this.nodes = new Array<HuffmanNode>(HUFFMAN_MAX_NODES);
45
- for (let i = 0; i < HUFFMAN_MAX_NODES; i++) {
46
- this.nodes[i] = {} as HuffmanNode;
47
- }
48
- this.decode_lut = new Array<number>(HUFFMAN_LUTSIZE);
49
- this.num_nodes = 0;
50
- this.start_node_index = 0;
51
-
52
- this.construct_tree(frequencies);
53
-
54
-
55
- for (let i = 0; i < HUFFMAN_LUTSIZE; i++) {
56
- let bits = i;
57
- let broke = false;
58
- let index = this.start_node_index;
59
- for (let x = 0; x < HUFFMAN_LUTBITS; x++) {
60
- if (bits & 1)
61
- index = this.nodes[index].right;
62
- else
63
- index = this.nodes[index].left;
64
- bits >>= 1;
65
- if (this.nodes[index].numbits) {
66
- this.decode_lut[i] = index;
67
- broke = true;
68
- break;
69
- }
70
- }
71
- if (!broke) {
72
- this.decode_lut[i] = index;
73
- }
74
- }
75
- }
76
- set_bits_r(node_index: number, bits: number, depth: number) {
77
- if (this.nodes[node_index].right != 0xffff)
78
- this.set_bits_r(this.nodes[node_index].right, bits | (1 << depth), depth + 1)
79
- if (this.nodes[node_index].left != 0xffff)
80
- this.set_bits_r(this.nodes[node_index].left, bits, depth + 1)
81
- if (this.nodes[node_index].numbits) {
82
- this.nodes[node_index].bits = bits;
83
- this.nodes[node_index].numbits = depth;
84
- }
85
- }
86
-
87
- bubble_sort(index_list: number[], node_list: HuffmanConstructNode[], size: number) {
88
- let changed = true;
89
- while (changed) {
90
- changed = false;
91
- for (let i = 0; i < size-1; i++) {
92
- if (node_list[index_list[i]].frequency < node_list[index_list[i + 1]].frequency) {
93
- let temp = index_list[i];
94
- index_list[i] = index_list[i + 1];
95
- index_list[i + 1] = temp;
96
- changed = true;
97
- }
98
- }
99
- size--;
100
- }
101
- return index_list;
102
- }
103
-
104
- construct_tree(frequencies = FREQ_TABLE) {
105
- let nodes_left_storage: HuffmanConstructNode[] = new Array<HuffmanConstructNode>(HUFFMAN_MAX_SYMBOLS);
106
- for (let i = 0; i < HUFFMAN_MAX_SYMBOLS; i++) {
107
- nodes_left_storage[i] = {} as HuffmanConstructNode;
108
- }
109
- let nodes_left: number[] = new Array<number>(HUFFMAN_MAX_SYMBOLS);
110
- let num_nodes_left = HUFFMAN_MAX_SYMBOLS;
111
-
112
- for (let i = 0; i < HUFFMAN_MAX_SYMBOLS; i++) {
113
- this.nodes[i].numbits = 0xFFFFFFFF;
114
- this.nodes[i].symbol = i;
115
- this.nodes[i].left = 0xFFFF;
116
- this.nodes[i].right = 0xFFFF;
117
-
118
- if (i == HUFFMAN_EOF_SYMBOL) {
119
- nodes_left_storage[i].frequency = 1;
120
- } else
121
- nodes_left_storage[i].frequency = frequencies[i];
122
- nodes_left_storage[i].node_id = i;
123
- nodes_left[i] = i;
124
- }
125
- this.num_nodes = HUFFMAN_MAX_SYMBOLS;
126
-
127
- while (num_nodes_left > 1) {
128
- nodes_left = this.bubble_sort(nodes_left, nodes_left_storage, num_nodes_left);
129
-
130
- this.nodes[this.num_nodes].numbits = 0;
131
- this.nodes[this.num_nodes].left = nodes_left_storage[nodes_left[num_nodes_left - 1]].node_id
132
- this.nodes[this.num_nodes].right = nodes_left_storage[nodes_left[num_nodes_left - 2]].node_id
133
-
134
- nodes_left_storage[nodes_left[num_nodes_left - 2]].node_id = this.num_nodes;
135
- nodes_left_storage[nodes_left[num_nodes_left - 2]].frequency = nodes_left_storage[nodes_left[num_nodes_left - 1]].frequency
136
- + nodes_left_storage[nodes_left[num_nodes_left - 2]].frequency
137
- this.num_nodes++;
138
- num_nodes_left--;
139
- }
140
- this.start_node_index = this.num_nodes-1;
141
- this.set_bits_r(this.start_node_index, 0, 0);
142
- }
143
-
144
- compress(inp_buffer: Buffer, start_index = 0, size: number = 0): Buffer {
145
- let output = [];
146
- let bits = 0;
147
- let bitcount = 0;
148
-
149
- if (size == 0)
150
- size = inp_buffer.byteLength;
151
- inp_buffer = inp_buffer.slice(start_index, start_index + size);
152
- for (let i = 0; i < size; i++) {
153
- let x = inp_buffer[i];
154
- bits |= this.nodes[x].bits << bitcount;
155
- bitcount += this.nodes[x].numbits;
156
-
157
- while (bitcount >= 8) {
158
- output.push(bits & 0xff);
159
- bits >>= 8;
160
- bitcount -= 8;
161
- }
162
- }
163
- bits |= this.nodes[HUFFMAN_EOF_SYMBOL].bits << bitcount;
164
- bitcount += this.nodes[HUFFMAN_EOF_SYMBOL].numbits;
165
-
166
- while (bitcount >= 8) {
167
- output.push(bits & 0xff);
168
- bits >>= 8;
169
- bitcount -= 8;
170
- }
171
- output.push(bits);
172
- return Buffer.from(output);
173
- }
174
- decompress(inp_buffer: Buffer, size = 0): Buffer {
175
-
176
- let bits = 0;
177
- let bitcount = 0;
178
- let eof = this.nodes[HUFFMAN_EOF_SYMBOL];
179
- let output = [];
180
-
181
- if (size == 0)
182
- size = inp_buffer.byteLength;
183
- inp_buffer = inp_buffer.slice(0, size);
184
- let src_index = 0;
185
- while (true) {
186
- let node_i = -1;
187
- if (bitcount >= HUFFMAN_LUTBITS)
188
- node_i = this.decode_lut[bits & HUFFMAN_LUTMASK];
189
- while (bitcount < 24 && src_index != size) {
190
- bits |= inp_buffer[src_index] << bitcount;
191
- bitcount += 8;
192
- src_index++;
193
- }
194
- if (node_i == -1)
195
- node_i = this.decode_lut[bits & HUFFMAN_LUTMASK];
196
- if (this.nodes[node_i].numbits) {
197
- bits >>= this.nodes[node_i].numbits;
198
- bitcount -= this.nodes[node_i].numbits;
199
- } else {
200
- bits >>= HUFFMAN_LUTBITS;
201
- bitcount -= HUFFMAN_LUTBITS;
202
-
203
- while (true) {
204
- if (bits & 1) {
205
- node_i = this.nodes[node_i].right;
206
- } else
207
- node_i = this.nodes[node_i].left;
208
- bitcount -= 1;
209
- bits >>= 1;
210
-
211
- if (this.nodes[node_i].numbits)
212
- break;
213
- if (bitcount == 0)
214
- throw new Error("No more bits, decoding error")
215
- }
216
-
217
- }
218
- if (this.nodes[node_i] == eof)
219
- break;
220
- output.push(this.nodes[node_i].symbol);
221
- }
222
- return Buffer.from(output);
223
- }
224
-
225
-
226
- }