teeworlds 2.0.8 → 2.0.9
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/lib/snapshot.js +35 -87
- package/lib/snapshot.ts +43 -94
- package/package.json +1 -1
package/lib/snapshot.js
CHANGED
|
@@ -289,111 +289,59 @@ var Snapshot = /** @class */ (function () {
|
|
|
289
289
|
return _item;
|
|
290
290
|
};
|
|
291
291
|
Snapshot.prototype.unpackSnapshot = function (snap, lost) {
|
|
292
|
-
// var size = MsgUnpacker.unpackInt(snap).result;
|
|
293
292
|
if (lost === void 0) { lost = 0; }
|
|
294
|
-
|
|
293
|
+
// var size = unpackInt(snap).result;
|
|
294
|
+
var unpacker = new MsgUnpacker(snap);
|
|
295
|
+
// snap = unpackInt(snap).remaining; // size
|
|
295
296
|
/* key = (((type_id) << 16) | (id))
|
|
296
297
|
* key_to_id = ((key) & 0xffff)
|
|
297
298
|
* key_to_type_id = ((key >> 16) & 0xffff)
|
|
298
299
|
* https://github.com/heinrich5991/libtw2/blob/master/snapshot/src/
|
|
299
300
|
* https://github.com/heinrich5991/libtw2/blob/master/doc/snapshot.md
|
|
300
301
|
*/
|
|
301
|
-
// snap =
|
|
302
|
-
// console.log(
|
|
303
|
-
// snap =
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
302
|
+
// snap = unpackInt(snap).remaining;
|
|
303
|
+
// console.log(unpackInt(snap).result, "tick?") // key?
|
|
304
|
+
// snap = unpackInt(snap).remaining;
|
|
305
|
+
var num_removed_items = unpacker.unpackInt();
|
|
306
|
+
var num_item_deltas = unpacker.unpackInt();
|
|
307
|
+
unpacker.unpackInt(); // _zero padding
|
|
308
|
+
/*snapshot_delta:
|
|
309
|
+
[ 4] num_removed_items
|
|
310
|
+
[ 4] num_item_deltas
|
|
311
|
+
[ 4] _zero
|
|
312
|
+
[*4] removed_item_keys
|
|
313
|
+
[ ] item_deltas
|
|
314
|
+
*/
|
|
315
|
+
for (var i = 0; i < num_removed_items; i++) {
|
|
316
|
+
unpacker.unpackInt(); // removed_item_keys
|
|
317
|
+
}
|
|
318
|
+
/*item_delta:
|
|
319
|
+
[ 4] type_id
|
|
320
|
+
[ 4] id
|
|
321
|
+
[ 4] _size
|
|
322
|
+
[*4] data_delta*/
|
|
310
323
|
var items = { items: [], /* client_infos: client_infos, player_infos: player_infos,*/ lost: 0 };
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
var
|
|
314
|
-
// console.log(type_id, "type_id");
|
|
315
|
-
snap = MsgUnpacker.unpackInt(snap).remaining;
|
|
316
|
-
var id = MsgUnpacker.unpackInt(snap).result;
|
|
317
|
-
// console.log(id, "id");
|
|
324
|
+
for (var i = 0; i < num_item_deltas; i++) {
|
|
325
|
+
var type_id = unpacker.unpackInt();
|
|
326
|
+
var id = unpacker.unpackInt();
|
|
318
327
|
var key = (((type_id) << 16) | (id));
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
if (itemAppendix[type_id] && type_id > 0) {
|
|
322
|
-
// console.log("_size is not set")
|
|
323
|
-
// type_id is in itemAppendix -> _size is not set!
|
|
328
|
+
var _size = void 0;
|
|
329
|
+
if (type_id > 0 && type_id < itemAppendix.length) {
|
|
324
330
|
_size = itemAppendix[type_id].size;
|
|
325
331
|
}
|
|
326
|
-
else
|
|
327
|
-
|
|
328
|
-
// _size is set.
|
|
329
|
-
snap = MsgUnpacker.unpackInt(snap).remaining;
|
|
330
|
-
_size = (MsgUnpacker.unpackInt(snap).result);
|
|
331
|
-
}
|
|
332
|
-
// console.log(_size, "size!")
|
|
332
|
+
else
|
|
333
|
+
_size = unpacker.unpackInt();
|
|
333
334
|
var data = [];
|
|
334
|
-
for (var
|
|
335
|
-
if (
|
|
336
|
-
|
|
337
|
-
}
|
|
338
|
-
if (snap[0]) {
|
|
339
|
-
snap = MsgUnpacker.unpackInt(snap).remaining;
|
|
340
|
-
data.push(MsgUnpacker.unpackInt(snap).result);
|
|
341
|
-
}
|
|
342
|
-
else
|
|
343
|
-
break;
|
|
344
|
-
}
|
|
345
|
-
if (type_id > 0x4000 || type_id == 0) {
|
|
346
|
-
if (_size == 5 && id == 0) {
|
|
347
|
-
// console.log("DdnetCharacter???")
|
|
348
|
-
var Ddnet_Character = {
|
|
349
|
-
flags: data[0],
|
|
350
|
-
freeze_end: data[1],
|
|
351
|
-
jumps: data[2],
|
|
352
|
-
tele_checkpoint: data[3],
|
|
353
|
-
strong_weak_id: data[4]
|
|
354
|
-
// score: (!players[id] == undefined || typeof players[id].score == 'undefined') ? -1 : players[id].score
|
|
355
|
-
};
|
|
356
|
-
// console.log(Ddnet_Character)
|
|
357
|
-
if (Ddnet_Character.freeze_end > 0 || Ddnet_Character.freeze_end == -1) // freezed or deepfreezed
|
|
358
|
-
console.log(Ddnet_Character);
|
|
359
|
-
} // else
|
|
360
|
-
// console.log("lolol uuid??", _size, type_id, id, data)
|
|
361
|
-
}
|
|
362
|
-
if (type_id == 11) {
|
|
363
|
-
// obj_client_info!
|
|
364
|
-
var client_info = {
|
|
365
|
-
name: this.IntsToStr(data.slice(0, 4)),
|
|
366
|
-
clan: this.IntsToStr(data.slice(4, 7)),
|
|
367
|
-
country: Number(data.slice(7, 8)),
|
|
368
|
-
skin: this.IntsToStr(data.slice(8, 14)),
|
|
369
|
-
use_custom_color: Number(data.slice(14, 15)),
|
|
370
|
-
color_body: Number(data.slice(15, 16)),
|
|
371
|
-
color_feet: Number(data.slice(16, 17)),
|
|
372
|
-
};
|
|
373
|
-
client_infos[id] = client_info;
|
|
374
|
-
// console.log(client_info.name, client_info.clan, client_info.skin)
|
|
375
|
-
}
|
|
376
|
-
else if (type_id == 10) {
|
|
377
|
-
var player_info = {
|
|
378
|
-
local: Number(data.slice(0, 1)),
|
|
379
|
-
client_id: Number(data.slice(1, 2)),
|
|
380
|
-
team: Number(data.slice(2, 3)),
|
|
381
|
-
score: Number(data.slice(3, 4)),
|
|
382
|
-
latency: Number(data.slice(4, 5))
|
|
383
|
-
};
|
|
384
|
-
player_infos[player_info.client_id] = player_info;
|
|
385
|
-
// players[id].score = player_info.score
|
|
386
|
-
// console.log(player_info, client_infos[player_info.client_id], data)
|
|
335
|
+
for (var j = 0; j < _size; j++) {
|
|
336
|
+
if (unpacker.remaining.length > 0)
|
|
337
|
+
data.push(unpacker.unpackInt());
|
|
387
338
|
}
|
|
388
|
-
//
|
|
389
|
-
// console.log(this.parseItem(data, type_id), itemAppendix[type_id].name, type_id)
|
|
339
|
+
// console.log(type_id, id, _size, data);
|
|
390
340
|
var parsed = this.parseItem(data, type_id);
|
|
391
341
|
// console.log(data)
|
|
392
342
|
// console.log('')
|
|
393
343
|
items.items.push({ data: data, parsed: parsed, type_id: type_id, id: id, key: key });
|
|
394
344
|
}
|
|
395
|
-
// items.client_infos = client_infos;
|
|
396
|
-
// items.player_infos = player_infos;
|
|
397
345
|
return items;
|
|
398
346
|
};
|
|
399
347
|
return Snapshot;
|
package/lib/snapshot.ts
CHANGED
|
@@ -287,11 +287,11 @@ class Snapshot {
|
|
|
287
287
|
|
|
288
288
|
return _item;
|
|
289
289
|
}
|
|
290
|
-
unpackSnapshot(snap: number[], lost = 0) {
|
|
291
|
-
// var size =
|
|
292
|
-
|
|
293
|
-
snap = MsgUnpacker.unpackInt(snap).remaining;
|
|
290
|
+
unpackSnapshot(snap: number[], lost = 0) {
|
|
291
|
+
// var size = unpackInt(snap).result;
|
|
292
|
+
let unpacker = new MsgUnpacker(snap);
|
|
294
293
|
|
|
294
|
+
// snap = unpackInt(snap).remaining; // size
|
|
295
295
|
|
|
296
296
|
/* key = (((type_id) << 16) | (id))
|
|
297
297
|
* key_to_id = ((key) & 0xffff)
|
|
@@ -300,106 +300,55 @@ class Snapshot {
|
|
|
300
300
|
* https://github.com/heinrich5991/libtw2/blob/master/doc/snapshot.md
|
|
301
301
|
*/
|
|
302
302
|
|
|
303
|
-
// snap =
|
|
304
|
-
// console.log(
|
|
305
|
-
// snap =
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
303
|
+
// snap = unpackInt(snap).remaining;
|
|
304
|
+
// console.log(unpackInt(snap).result, "tick?") // key?
|
|
305
|
+
// snap = unpackInt(snap).remaining;
|
|
306
|
+
let num_removed_items = unpacker.unpackInt();
|
|
307
|
+
let num_item_deltas = unpacker.unpackInt();
|
|
308
|
+
unpacker.unpackInt(); // _zero padding
|
|
309
|
+
/*snapshot_delta:
|
|
310
|
+
[ 4] num_removed_items
|
|
311
|
+
[ 4] num_item_deltas
|
|
312
|
+
[ 4] _zero
|
|
313
|
+
[*4] removed_item_keys
|
|
314
|
+
[ ] item_deltas
|
|
315
|
+
*/
|
|
316
|
+
|
|
317
|
+
for (let i = 0; i < num_removed_items; i++) {
|
|
318
|
+
unpacker.unpackInt(); // removed_item_keys
|
|
319
|
+
}
|
|
320
|
+
/*item_delta:
|
|
321
|
+
[ 4] type_id
|
|
322
|
+
[ 4] id
|
|
323
|
+
[ 4] _size
|
|
324
|
+
[*4] data_delta*/
|
|
325
|
+
let items: {'items': {'data': number[], 'parsed': Item, 'type_id': number, 'id': number, 'key': number}[]/*, 'client_infos': client_info[], 'player_infos': player_info[]*/, lost: number} = {items: [],/* client_infos: client_infos, player_infos: player_infos,*/ lost: 0};
|
|
326
|
+
|
|
327
|
+
for (let i = 0; i < num_item_deltas; i++) {
|
|
328
|
+
let type_id = unpacker.unpackInt();
|
|
329
|
+
let id = unpacker.unpackInt();
|
|
321
330
|
const key = (((type_id) << 16) | (id))
|
|
322
331
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
if (itemAppendix[type_id] && type_id > 0) {
|
|
326
|
-
// console.log("_size is not set")
|
|
327
|
-
// type_id is in itemAppendix -> _size is not set!
|
|
332
|
+
let _size;
|
|
333
|
+
if (type_id > 0 && type_id < itemAppendix.length) {
|
|
328
334
|
_size = itemAppendix[type_id].size;
|
|
329
|
-
} else
|
|
330
|
-
|
|
331
|
-
// _size is set.
|
|
332
|
-
snap = MsgUnpacker.unpackInt(snap).remaining;
|
|
333
|
-
_size = (MsgUnpacker.unpackInt(snap).result);
|
|
334
|
-
}
|
|
335
|
-
// console.log(_size, "size!")
|
|
336
|
-
|
|
337
|
-
var data: number[] = []
|
|
338
|
-
for (let i = 0; i < _size; i++) {
|
|
339
|
-
if (snap.length == 0) {
|
|
340
|
-
items.lost++;
|
|
341
|
-
}
|
|
342
|
-
if (snap[0]) {
|
|
343
|
-
snap = MsgUnpacker.unpackInt(snap).remaining;
|
|
344
|
-
data.push(MsgUnpacker.unpackInt(snap).result);
|
|
345
|
-
} else
|
|
346
|
-
break;
|
|
335
|
+
} else
|
|
336
|
+
_size = unpacker.unpackInt();
|
|
347
337
|
|
|
338
|
+
let data = [];
|
|
339
|
+
for (let j = 0; j < _size; j++) {
|
|
340
|
+
if (unpacker.remaining.length > 0)
|
|
341
|
+
data.push(unpacker.unpackInt());
|
|
348
342
|
}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
// console.log("DdnetCharacter???")
|
|
352
|
-
var Ddnet_Character: DdnetCharacter = {
|
|
353
|
-
flags: data[0],
|
|
354
|
-
freeze_end: data[1],
|
|
355
|
-
jumps: data[2],
|
|
356
|
-
tele_checkpoint: data[3],
|
|
357
|
-
strong_weak_id: data[4]
|
|
358
|
-
// score: (!players[id] == undefined || typeof players[id].score == 'undefined') ? -1 : players[id].score
|
|
359
|
-
}
|
|
360
|
-
// console.log(Ddnet_Character)
|
|
361
|
-
if (Ddnet_Character.freeze_end > 0 || Ddnet_Character.freeze_end == -1) // freezed or deepfreezed
|
|
362
|
-
|
|
363
|
-
console.log(Ddnet_Character)
|
|
364
|
-
} // else
|
|
365
|
-
// console.log("lolol uuid??", _size, type_id, id, data)
|
|
366
|
-
}
|
|
367
|
-
if (type_id == 11) {
|
|
368
|
-
// obj_client_info!
|
|
369
|
-
var client_info: ClientInfo = {
|
|
370
|
-
name: this.IntsToStr(data.slice(0, 4)),
|
|
371
|
-
clan: this.IntsToStr(data.slice(4, 7)),
|
|
372
|
-
country: Number(data.slice(7, 8)),
|
|
373
|
-
skin: this.IntsToStr(data.slice(8, 14)),
|
|
374
|
-
use_custom_color: Number(data.slice(14, 15)),
|
|
375
|
-
color_body: Number(data.slice(15, 16)),
|
|
376
|
-
color_feet: Number(data.slice(16, 17)),
|
|
377
|
-
// score: (!players[id] == undefined || typeof players[id].score == 'undefined') ? -1 : players[id].score
|
|
378
|
-
}
|
|
379
|
-
client_infos[id] = client_info;
|
|
380
|
-
// console.log(client_info.name, client_info.clan, client_info.skin)
|
|
381
|
-
} else if (type_id == 10) {
|
|
382
|
-
var player_info: PlayerInfo = {
|
|
383
|
-
local: Number(data.slice(0, 1)),
|
|
384
|
-
client_id: Number(data.slice(1, 2)),
|
|
385
|
-
team: Number(data.slice(2, 3)),
|
|
386
|
-
score: Number(data.slice(3, 4)),
|
|
387
|
-
latency: Number(data.slice(4, 5))
|
|
388
|
-
}
|
|
389
|
-
player_infos[player_info.client_id] = player_info;
|
|
390
|
-
// players[id].score = player_info.score
|
|
391
|
-
// console.log(player_info, client_infos[player_info.client_id], data)
|
|
392
|
-
}
|
|
393
|
-
// if (type_id == 10 || type_id == 11)
|
|
394
|
-
// console.log(this.parseItem(data, type_id), itemAppendix[type_id].name, type_id)
|
|
395
|
-
var parsed = this.parseItem(data, type_id)
|
|
343
|
+
// console.log(type_id, id, _size, data);
|
|
344
|
+
let parsed = this.parseItem(data, type_id)
|
|
396
345
|
|
|
397
346
|
// console.log(data)
|
|
398
347
|
// console.log('')
|
|
399
348
|
items.items.push({data, parsed, type_id, id, key})
|
|
400
349
|
}
|
|
401
|
-
|
|
402
|
-
|
|
350
|
+
|
|
351
|
+
|
|
403
352
|
return items;
|
|
404
353
|
}}
|
|
405
354
|
// module.exports = MsgPacker;
|