teeworlds 2.4.4 → 2.4.5
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/index.js +0 -1
- package/index.ts +1 -2
- package/lib/client.js +24 -69
- package/lib/client.ts +44 -93
- package/lib/components/game.js +11 -11
- package/lib/components/game.ts +33 -21
- package/lib/{movement.js → components/movement.js} +0 -0
- package/lib/{movement.ts → components/movement.ts} +0 -0
- package/lib/components/snapshot.js +200 -0
- package/lib/components/snapshot.ts +174 -0
- package/lib/snapshot.js +33 -74
- package/lib/snapshot.ts +43 -81
- package/lib/snapshots.d.ts +26 -22
- package/package.json +1 -1
package/lib/snapshot.js
CHANGED
|
@@ -3,29 +3,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Snapshot = exports.items = void 0;
|
|
4
4
|
var MsgUnpacker_1 = require("./MsgUnpacker");
|
|
5
5
|
var decoder = new TextDecoder('utf-8');
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
6
|
+
var ___itemAppendix = [
|
|
7
|
+
{ "type_id": 0, "size": 0, "name": "obj_ex" },
|
|
8
|
+
{ "type_id": 1, "size": 10, "name": "obj_player_input" },
|
|
9
|
+
{ "type_id": 2, "size": 6, "name": "obj_projectile" },
|
|
10
|
+
{ "type_id": 3, "size": 5, "name": "obj_laser" },
|
|
11
|
+
{ "type_id": 4, "size": 4, "name": "obj_pickup" },
|
|
12
|
+
{ "type_id": 5, "size": 3, "name": "obj_flag" },
|
|
13
|
+
{ "type_id": 6, "size": 8, "name": "obj_game_info" },
|
|
14
|
+
{ "type_id": 7, "size": 4, "name": "obj_game_data" },
|
|
15
|
+
{ "type_id": 8, "size": 15, "name": "obj_character_core" },
|
|
16
|
+
{ "type_id": 9, "size": 22, "name": "obj_character" },
|
|
17
|
+
{ "type_id": 10, "size": 5, "name": "obj_player_info" },
|
|
18
|
+
{ "type_id": 11, "size": 17, "name": "obj_client_info" },
|
|
19
|
+
{ "type_id": 12, "size": 3, "name": "obj_spectator_info" },
|
|
20
|
+
{ "type_id": 13, "size": 2, "name": "common" },
|
|
21
|
+
{ "type_id": 14, "size": 2, "name": "explosion" },
|
|
22
|
+
{ "type_id": 15, "size": 2, "name": "spawn" },
|
|
23
|
+
{ "type_id": 16, "size": 2, "name": "hammerhit" },
|
|
24
|
+
{ "type_id": 17, "size": 3, "name": "death" },
|
|
25
|
+
{ "type_id": 18, "size": 3, "name": "sound_global" },
|
|
26
|
+
{ "type_id": 19, "size": 3, "name": "sound_world" },
|
|
27
|
+
{ "type_id": 20, "size": 3, "name": "damage_indicator" } // event_damage_indicator
|
|
28
|
+
];
|
|
29
29
|
var itemAppendix = [
|
|
30
30
|
0,
|
|
31
31
|
10,
|
|
@@ -74,10 +74,11 @@ var items;
|
|
|
74
74
|
items[items["EVENT_DAMAGE_INDICATOR"] = 20] = "EVENT_DAMAGE_INDICATOR";
|
|
75
75
|
})(items = exports.items || (exports.items = {}));
|
|
76
76
|
var Snapshot = /** @class */ (function () {
|
|
77
|
-
function Snapshot() {
|
|
77
|
+
function Snapshot(_client) {
|
|
78
78
|
this.deltas = [];
|
|
79
79
|
this.eSnapHolder = [];
|
|
80
80
|
this.crc_errors = 0;
|
|
81
|
+
this.client = _client;
|
|
81
82
|
}
|
|
82
83
|
Snapshot.prototype.IntsToStr = function (pInts) {
|
|
83
84
|
var pIntz = [];
|
|
@@ -216,6 +217,7 @@ var Snapshot = /** @class */ (function () {
|
|
|
216
217
|
weapon: data[19],
|
|
217
218
|
emote: data[20],
|
|
218
219
|
attack_tick: data[21],
|
|
220
|
+
client_id: id
|
|
219
221
|
};
|
|
220
222
|
break;
|
|
221
223
|
case items.OBJ_PLAYER_INFO:
|
|
@@ -341,10 +343,6 @@ var Snapshot = /** @class */ (function () {
|
|
|
341
343
|
deltaSnaps.push(a);
|
|
342
344
|
return a.ack >= deltatick;
|
|
343
345
|
});
|
|
344
|
-
// if (deltatick != -1 && this.eSnapHolder.length == 0) {
|
|
345
|
-
// console.log("no deltatick stored")
|
|
346
|
-
// return {items: [], recvTick: -1}
|
|
347
|
-
// }
|
|
348
346
|
}
|
|
349
347
|
if (snap.length == 0) {
|
|
350
348
|
// empty snap, copy old one into new ack
|
|
@@ -362,6 +360,7 @@ var Snapshot = /** @class */ (function () {
|
|
|
362
360
|
* https://github.com/heinrich5991/libtw2/blob/master/snapshot/src/
|
|
363
361
|
* https://github.com/heinrich5991/libtw2/blob/master/doc/snapshot.md
|
|
364
362
|
*/
|
|
363
|
+
var _events = [];
|
|
365
364
|
var num_removed_items = unpacker.unpackInt();
|
|
366
365
|
var num_item_deltas = unpacker.unpackInt();
|
|
367
366
|
unpacker.unpackInt(); // _zero padding
|
|
@@ -375,11 +374,6 @@ var Snapshot = /** @class */ (function () {
|
|
|
375
374
|
var deleted = [];
|
|
376
375
|
for (var i = 0; i < num_removed_items; i++) {
|
|
377
376
|
var deleted_key = unpacker.unpackInt(); // removed_item_keys
|
|
378
|
-
// let index = this.deltas.map(delta => delta.key).indexOf(deleted_key);
|
|
379
|
-
// let index = this.deltas.findIndex(delta => delta.key === deleted_key);
|
|
380
|
-
// if (index > -1)
|
|
381
|
-
// this.deltas.splice(index, 1);
|
|
382
|
-
// console.log(deleted_key)
|
|
383
377
|
deleted.push(deleted_key);
|
|
384
378
|
}
|
|
385
379
|
/*item_delta:
|
|
@@ -430,7 +424,6 @@ var Snapshot = /** @class */ (function () {
|
|
|
430
424
|
else
|
|
431
425
|
parsed = this_1.parseItem(data, type_id, id);
|
|
432
426
|
this_1.eSnapHolder.push({ Snapshot: { Data: data, Key: key }, ack: recvTick });
|
|
433
|
-
// items.items.push({data, type_id, id, key})
|
|
434
427
|
this_1.deltas.push({
|
|
435
428
|
data: data,
|
|
436
429
|
key: key,
|
|
@@ -438,6 +431,11 @@ var Snapshot = /** @class */ (function () {
|
|
|
438
431
|
type_id: type_id,
|
|
439
432
|
parsed: parsed
|
|
440
433
|
});
|
|
434
|
+
if (type_id >= items.EVENT_COMMON && type_id <= items.EVENT_DAMAGE_INDICATOR) {
|
|
435
|
+
// this.client.SnapshotUnpacker.
|
|
436
|
+
_events.push({ type_id: type_id, parsed: parsed });
|
|
437
|
+
// this.client.SnapshotUnpacker.emit(___itemAppendix[type_id].name, parsed);
|
|
438
|
+
}
|
|
441
439
|
};
|
|
442
440
|
var this_1 = this;
|
|
443
441
|
for (var i = 0; i < num_item_deltas; i++) {
|
|
@@ -449,20 +447,6 @@ var Snapshot = /** @class */ (function () {
|
|
|
449
447
|
}
|
|
450
448
|
if (this_2.eSnapHolder.findIndex(function (a) { return a.ack == recvTick && a.Snapshot.Key == newSnap.Snapshot.Key; }) === -1) { // ugly copy new snap to eSnapHolder (if it isnt pushed already)
|
|
451
449
|
this_2.eSnapHolder.push({ Snapshot: { Data: newSnap.Snapshot.Data, Key: newSnap.Snapshot.Key }, ack: recvTick });
|
|
452
|
-
// this.deltas.push({})
|
|
453
|
-
// if (deltatick > -1) {
|
|
454
|
-
// let ____index = this.deltas.findIndex(delta => delta.key == newSnap.Snapshot.Key)
|
|
455
|
-
// if (____index > -1) {
|
|
456
|
-
// this.deltas[____index] = {
|
|
457
|
-
// data: newSnap.Snapshot.Data,
|
|
458
|
-
// key: newSnap.Snapshot.Key,
|
|
459
|
-
// id: newSnap.Snapshot.Key & 0xffff,
|
|
460
|
-
// type_id: ((newSnap.Snapshot.Key >> 16) & 0xffff),
|
|
461
|
-
// parsed: this.parseItem(newSnap.Snapshot.Data, ((newSnap.Snapshot.Key >> 16) & 0xffff), ((newSnap.Snapshot.Key) & 0xffff))
|
|
462
|
-
// };
|
|
463
|
-
// continue;
|
|
464
|
-
// }
|
|
465
|
-
// // }
|
|
466
450
|
var oldDelta = oldDeltas.find(function (delta) { return delta.key == newSnap.Snapshot.Key; });
|
|
467
451
|
if (oldDelta !== undefined && compareArrays(newSnap.Snapshot.Data, oldDelta.data)) {
|
|
468
452
|
this_2.deltas.push(oldDelta);
|
|
@@ -479,31 +463,10 @@ var Snapshot = /** @class */ (function () {
|
|
|
479
463
|
}
|
|
480
464
|
};
|
|
481
465
|
var this_2 = this;
|
|
482
|
-
// if (deleted.length) {
|
|
483
|
-
// let _beforeLength = this.eSnapHolder.length;
|
|
484
|
-
// this.eSnapHolder = this.eSnapHolder.filter(snap => !deleted.includes(snap.Snapshot.Key));
|
|
485
|
-
// let _beforeLength = this.eSnapHolder.length;
|
|
486
|
-
// if ((_beforeLength - this.eSnapHolder.length) !== num_removed_items) {
|
|
487
|
-
// console.log("remove!", (_beforeLength - this.eSnapHolder.length) == num_removed_items, (_beforeLength - this.eSnapHolder.length), num_removed_items, WantedCrc)
|
|
488
|
-
// }
|
|
489
|
-
// }
|
|
490
466
|
for (var _i = 0, deltaSnaps_1 = deltaSnaps; _i < deltaSnaps_1.length; _i++) {
|
|
491
467
|
var newSnap = deltaSnaps_1[_i];
|
|
492
468
|
_loop_2(newSnap);
|
|
493
469
|
}
|
|
494
|
-
// if (items.items.length != num_item_deltas)
|
|
495
|
-
// console.log("length", items.items.length, num_item_deltas, items.items.length - num_item_deltas, WantedCrc)
|
|
496
|
-
/* this.deltas = [];
|
|
497
|
-
for (let newSnap of this.eSnapHolder) {
|
|
498
|
-
if (newSnap.ack == recvTick)
|
|
499
|
-
this.deltas.push({
|
|
500
|
-
data: newSnap.Snapshot.Data,
|
|
501
|
-
key: newSnap.Snapshot.Key,
|
|
502
|
-
id: newSnap.Snapshot.Key & 0xffff,
|
|
503
|
-
type_id: ((newSnap.Snapshot.Key >> 16) & 0xffff),
|
|
504
|
-
parsed: this.parseItem(newSnap.Snapshot.Data, ((newSnap.Snapshot.Key >> 16) & 0xffff), ((newSnap.Snapshot.Key) & 0xffff))
|
|
505
|
-
});
|
|
506
|
-
}*/
|
|
507
470
|
var _crc = this.crc();
|
|
508
471
|
if (_crc !== WantedCrc) {
|
|
509
472
|
this.deltas = oldDeltas;
|
|
@@ -521,11 +484,7 @@ var Snapshot = /** @class */ (function () {
|
|
|
521
484
|
}
|
|
522
485
|
else if (this.crc_errors > 0)
|
|
523
486
|
this.crc_errors--;
|
|
524
|
-
|
|
525
|
-
// if (this.deltas.length !== filterLength) {
|
|
526
|
-
// this.deltas = this.deltas.filter(a => !deleted.includes(a.key))
|
|
527
|
-
// console.log(this.deltas.length, filterLength, this.deltas.length - filterLength, num_item_deltas )
|
|
528
|
-
// }
|
|
487
|
+
_events.forEach(function (a) { return _this.client.SnapshotUnpacker.emit(___itemAppendix[a.type_id].name, a.parsed); });
|
|
529
488
|
return { items: this.deltas, recvTick: recvTick };
|
|
530
489
|
};
|
|
531
490
|
return Snapshot;
|
package/lib/snapshot.ts
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
|
+
import { Client } from "./client";
|
|
1
2
|
import { MsgUnpacker } from "./MsgUnpacker";
|
|
3
|
+
import { PlayerInput, PlayerInfo, Projectile, Laser, Pickup, Flag, GameInfo, GameData, CharacterCore, Character, ClientInfo, SpectatorInfo, Common, Explosion, Spawn, HammerHit, Death, SoundGlobal, SoundWorld, DamageInd } from "./snapshots";
|
|
2
4
|
var decoder = new TextDecoder('utf-8');
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
6
|
+
const ___itemAppendix: {"type_id": number, "size": number, "name": string}[] = [ // only used for the events underneath. the actual itemAppendix below this is only used for size
|
|
7
|
+
{"type_id": 0, "size": 0, "name": "obj_ex"},
|
|
8
|
+
{"type_id": 1, "size": 10, "name": "obj_player_input"},
|
|
9
|
+
{"type_id": 2, "size": 6, "name": "obj_projectile"},
|
|
10
|
+
{"type_id": 3, "size": 5, "name": "obj_laser"},
|
|
11
|
+
{"type_id": 4, "size": 4, "name": "obj_pickup"},
|
|
12
|
+
{"type_id": 5, "size": 3, "name": "obj_flag"},
|
|
13
|
+
{"type_id": 6, "size": 8, "name": "obj_game_info"},
|
|
14
|
+
{"type_id": 7, "size": 4, "name": "obj_game_data"},
|
|
15
|
+
{"type_id": 8, "size": 15, "name": "obj_character_core"},
|
|
16
|
+
{"type_id": 9, "size": 22, "name": "obj_character"},
|
|
17
|
+
{"type_id": 10, "size": 5, "name": "obj_player_info"},
|
|
18
|
+
{"type_id": 11, "size": 17, "name": "obj_client_info"},
|
|
19
|
+
{"type_id": 12, "size": 3, "name": "obj_spectator_info"},
|
|
20
|
+
{"type_id": 13, "size": 2, "name": "common"}, // event_common
|
|
21
|
+
{"type_id": 14, "size": 2, "name": "explosion"}, // event_explosion
|
|
22
|
+
{"type_id": 15, "size": 2, "name": "spawn"}, // event_spawn
|
|
23
|
+
{"type_id": 16, "size": 2, "name": "hammerhit"}, // event_hammerhit
|
|
24
|
+
{"type_id": 17, "size": 3, "name": "death"}, // event_death
|
|
25
|
+
{"type_id": 18, "size": 3, "name": "sound_global"}, // event_sound_global
|
|
26
|
+
{"type_id": 19, "size": 3, "name": "sound_world"}, // event_sound_world
|
|
27
|
+
{"type_id": 20, "size": 3, "name": "damage_indicator"} // event_damage_indicator
|
|
28
|
+
]
|
|
27
29
|
const itemAppendix: number[] = [
|
|
28
30
|
0,
|
|
29
31
|
10,
|
|
@@ -72,7 +74,7 @@ export enum items {
|
|
|
72
74
|
EVENT_DAMAGE_INDICATOR
|
|
73
75
|
}
|
|
74
76
|
|
|
75
|
-
export type Item = PlayerInput | PlayerInfo | Projectile | Laser | Pickup | Flag | GameInfo | GameData | CharacterCore | Character | PlayerInfo | ClientInfo | SpectatorInfo | Common | Explosion | Spawn |HammerHit | Death | SoundGlobal | SoundWorld | DamageInd
|
|
77
|
+
export declare type Item = PlayerInput | PlayerInfo | Projectile | Laser | Pickup | Flag | GameInfo | GameData | CharacterCore | Character | PlayerInfo | ClientInfo | SpectatorInfo | Common | Explosion | Spawn |HammerHit | Death | SoundGlobal | SoundWorld | DamageInd;
|
|
76
78
|
interface eSnap {
|
|
77
79
|
Snapshot: {Key: number, Data: number[]},
|
|
78
80
|
ack: number,
|
|
@@ -81,7 +83,12 @@ export class Snapshot {
|
|
|
81
83
|
deltas: {'data': number[], 'parsed': Item, 'type_id': number, 'id': number, 'key': number}[] = [];
|
|
82
84
|
eSnapHolder: eSnap[] = [];
|
|
83
85
|
crc_errors: number = 0;
|
|
86
|
+
client: Client;
|
|
84
87
|
|
|
88
|
+
constructor(_client: Client) {
|
|
89
|
+
this.client = _client;
|
|
90
|
+
}
|
|
91
|
+
|
|
85
92
|
private IntsToStr(pInts: number[]): string {
|
|
86
93
|
var pIntz: number[] = [];
|
|
87
94
|
// var pStr = ''
|
|
@@ -220,6 +227,8 @@ export class Snapshot {
|
|
|
220
227
|
weapon: data[19],
|
|
221
228
|
emote: data[20],
|
|
222
229
|
attack_tick: data[21],
|
|
230
|
+
|
|
231
|
+
client_id: id
|
|
223
232
|
} as Character
|
|
224
233
|
break;
|
|
225
234
|
case items.OBJ_PLAYER_INFO:
|
|
@@ -347,10 +356,6 @@ export class Snapshot {
|
|
|
347
356
|
deltaSnaps.push(a);
|
|
348
357
|
return a.ack >= deltatick
|
|
349
358
|
})
|
|
350
|
-
// if (deltatick != -1 && this.eSnapHolder.length == 0) {
|
|
351
|
-
// console.log("no deltatick stored")
|
|
352
|
-
// return {items: [], recvTick: -1}
|
|
353
|
-
// }
|
|
354
359
|
}
|
|
355
360
|
if (snap.length == 0) {
|
|
356
361
|
// empty snap, copy old one into new ack
|
|
@@ -369,7 +374,8 @@ export class Snapshot {
|
|
|
369
374
|
* https://github.com/heinrich5991/libtw2/blob/master/snapshot/src/
|
|
370
375
|
* https://github.com/heinrich5991/libtw2/blob/master/doc/snapshot.md
|
|
371
376
|
*/
|
|
372
|
-
|
|
377
|
+
var _events: {type_id: number, parsed: Item}[] = [];
|
|
378
|
+
|
|
373
379
|
let num_removed_items = unpacker.unpackInt();
|
|
374
380
|
let num_item_deltas = unpacker.unpackInt();
|
|
375
381
|
unpacker.unpackInt(); // _zero padding
|
|
@@ -384,11 +390,6 @@ export class Snapshot {
|
|
|
384
390
|
var deleted: number[] = [];
|
|
385
391
|
for (let i = 0; i < num_removed_items; i++) {
|
|
386
392
|
let deleted_key = unpacker.unpackInt(); // removed_item_keys
|
|
387
|
-
// let index = this.deltas.map(delta => delta.key).indexOf(deleted_key);
|
|
388
|
-
// let index = this.deltas.findIndex(delta => delta.key === deleted_key);
|
|
389
|
-
// if (index > -1)
|
|
390
|
-
// this.deltas.splice(index, 1);
|
|
391
|
-
// console.log(deleted_key)
|
|
392
393
|
deleted.push(deleted_key)
|
|
393
394
|
}
|
|
394
395
|
/*item_delta:
|
|
@@ -447,8 +448,6 @@ export class Snapshot {
|
|
|
447
448
|
|
|
448
449
|
this.eSnapHolder.push({Snapshot: {Data: data, Key: key}, ack: recvTick});
|
|
449
450
|
|
|
450
|
-
// items.items.push({data, type_id, id, key})
|
|
451
|
-
|
|
452
451
|
this.deltas.push({
|
|
453
452
|
data,
|
|
454
453
|
key,
|
|
@@ -457,43 +456,23 @@ export class Snapshot {
|
|
|
457
456
|
parsed
|
|
458
457
|
});
|
|
459
458
|
|
|
459
|
+
if (type_id >= items.EVENT_COMMON && type_id <= items.EVENT_DAMAGE_INDICATOR) {
|
|
460
|
+
// this.client.SnapshotUnpacker.
|
|
461
|
+
|
|
462
|
+
_events.push({type_id, parsed});
|
|
463
|
+
// this.client.SnapshotUnpacker.emit(___itemAppendix[type_id].name, parsed);
|
|
464
|
+
}
|
|
460
465
|
|
|
461
466
|
|
|
462
467
|
|
|
463
468
|
}
|
|
464
|
-
// if (deleted.length) {
|
|
465
|
-
// let _beforeLength = this.eSnapHolder.length;
|
|
466
|
-
// this.eSnapHolder = this.eSnapHolder.filter(snap => !deleted.includes(snap.Snapshot.Key));
|
|
467
|
-
// let _beforeLength = this.eSnapHolder.length;
|
|
468
|
-
// if ((_beforeLength - this.eSnapHolder.length) !== num_removed_items) {
|
|
469
|
-
// console.log("remove!", (_beforeLength - this.eSnapHolder.length) == num_removed_items, (_beforeLength - this.eSnapHolder.length), num_removed_items, WantedCrc)
|
|
470
|
-
|
|
471
|
-
// }
|
|
472
|
-
// }
|
|
473
469
|
|
|
474
470
|
for (let newSnap of deltaSnaps) {
|
|
475
471
|
if (deleted.includes(newSnap.Snapshot.Key)) {
|
|
476
|
-
// if ()
|
|
477
|
-
// this.deltas = this.deltas.filter(a => !deleted.includes(a.key))
|
|
478
472
|
continue;
|
|
479
473
|
}
|
|
480
474
|
if (this.eSnapHolder.findIndex(a => a.ack == recvTick && a.Snapshot.Key == newSnap.Snapshot.Key) === -1) { // ugly copy new snap to eSnapHolder (if it isnt pushed already)
|
|
481
475
|
this.eSnapHolder.push({Snapshot: {Data: newSnap.Snapshot.Data, Key: newSnap.Snapshot.Key}, ack: recvTick});
|
|
482
|
-
// this.deltas.push({})
|
|
483
|
-
// if (deltatick > -1) {
|
|
484
|
-
// let ____index = this.deltas.findIndex(delta => delta.key == newSnap.Snapshot.Key)
|
|
485
|
-
|
|
486
|
-
// if (____index > -1) {
|
|
487
|
-
// this.deltas[____index] = {
|
|
488
|
-
// data: newSnap.Snapshot.Data,
|
|
489
|
-
// key: newSnap.Snapshot.Key,
|
|
490
|
-
// id: newSnap.Snapshot.Key & 0xffff,
|
|
491
|
-
// type_id: ((newSnap.Snapshot.Key >> 16) & 0xffff),
|
|
492
|
-
// parsed: this.parseItem(newSnap.Snapshot.Data, ((newSnap.Snapshot.Key >> 16) & 0xffff), ((newSnap.Snapshot.Key) & 0xffff))
|
|
493
|
-
// };
|
|
494
|
-
// continue;
|
|
495
|
-
// }
|
|
496
|
-
// // }
|
|
497
476
|
let oldDelta = oldDeltas.find(delta => delta.key == newSnap.Snapshot.Key);
|
|
498
477
|
if (oldDelta !== undefined && compareArrays(newSnap.Snapshot.Data, oldDelta.data)) {
|
|
499
478
|
this.deltas.push(oldDelta);
|
|
@@ -510,19 +489,7 @@ export class Snapshot {
|
|
|
510
489
|
}
|
|
511
490
|
}
|
|
512
491
|
}
|
|
513
|
-
|
|
514
|
-
// console.log("length", items.items.length, num_item_deltas, items.items.length - num_item_deltas, WantedCrc)
|
|
515
|
-
/* this.deltas = [];
|
|
516
|
-
for (let newSnap of this.eSnapHolder) {
|
|
517
|
-
if (newSnap.ack == recvTick)
|
|
518
|
-
this.deltas.push({
|
|
519
|
-
data: newSnap.Snapshot.Data,
|
|
520
|
-
key: newSnap.Snapshot.Key,
|
|
521
|
-
id: newSnap.Snapshot.Key & 0xffff,
|
|
522
|
-
type_id: ((newSnap.Snapshot.Key >> 16) & 0xffff),
|
|
523
|
-
parsed: this.parseItem(newSnap.Snapshot.Data, ((newSnap.Snapshot.Key >> 16) & 0xffff), ((newSnap.Snapshot.Key) & 0xffff))
|
|
524
|
-
});
|
|
525
|
-
}*/
|
|
492
|
+
|
|
526
493
|
let _crc = this.crc();
|
|
527
494
|
if (_crc !== WantedCrc) {
|
|
528
495
|
this.deltas = oldDeltas;
|
|
@@ -539,12 +506,7 @@ export class Snapshot {
|
|
|
539
506
|
}
|
|
540
507
|
} else if (this.crc_errors > 0)
|
|
541
508
|
this.crc_errors--;
|
|
542
|
-
|
|
543
|
-
// if (this.deltas.length !== filterLength) {
|
|
544
|
-
// this.deltas = this.deltas.filter(a => !deleted.includes(a.key))
|
|
545
|
-
// console.log(this.deltas.length, filterLength, this.deltas.length - filterLength, num_item_deltas )
|
|
546
|
-
// }
|
|
547
|
-
|
|
509
|
+
_events.forEach(a => this.client.SnapshotUnpacker.emit(___itemAppendix[a.type_id].name, a.parsed))
|
|
548
510
|
return {items: this.deltas, recvTick};
|
|
549
511
|
}
|
|
550
512
|
}
|
package/lib/snapshots.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare interface PlayerInput {
|
|
1
|
+
export declare interface PlayerInput {
|
|
2
2
|
direction: number,
|
|
3
3
|
target_x: number,
|
|
4
4
|
target_y: number,
|
|
@@ -11,7 +11,7 @@ declare interface PlayerInput {
|
|
|
11
11
|
prev_weapon: number,
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
declare interface Projectile {
|
|
14
|
+
export declare interface Projectile {
|
|
15
15
|
x: number,
|
|
16
16
|
y: number,
|
|
17
17
|
vel_x: number,
|
|
@@ -20,7 +20,7 @@ declare interface Projectile {
|
|
|
20
20
|
start_tick: number,
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
declare interface Laser {
|
|
23
|
+
export declare interface Laser {
|
|
24
24
|
x: number,
|
|
25
25
|
y: number,
|
|
26
26
|
from_x: number,
|
|
@@ -28,20 +28,20 @@ declare interface Laser {
|
|
|
28
28
|
start_tick: number,
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
declare interface Pickup {
|
|
31
|
+
export declare interface Pickup {
|
|
32
32
|
x: number,
|
|
33
33
|
y: number,
|
|
34
34
|
type_: number,
|
|
35
35
|
subtype: number,
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
declare interface Flag {
|
|
38
|
+
export declare interface Flag {
|
|
39
39
|
x: number,
|
|
40
40
|
y: number,
|
|
41
41
|
team: number,
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
declare interface GameInfo {
|
|
44
|
+
export declare interface GameInfo {
|
|
45
45
|
game_flags: number,
|
|
46
46
|
game_state_flags: number,
|
|
47
47
|
round_start_tick: number,
|
|
@@ -52,14 +52,14 @@ declare interface GameInfo {
|
|
|
52
52
|
round_current: number,
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
declare interface GameData {
|
|
55
|
+
export declare interface GameData {
|
|
56
56
|
teamscore_red: number,
|
|
57
57
|
teamscore_blue: number,
|
|
58
58
|
flag_carrier_red: number,
|
|
59
59
|
flag_carrier_blue: number,
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
declare interface CharacterCore {
|
|
62
|
+
export declare interface CharacterCore {
|
|
63
63
|
tick: number,
|
|
64
64
|
x: number,
|
|
65
65
|
y: number,
|
|
@@ -77,7 +77,7 @@ declare interface CharacterCore {
|
|
|
77
77
|
hook_dy: number,
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
declare interface Character {
|
|
80
|
+
export declare interface Character {
|
|
81
81
|
character_core: CharacterCore,
|
|
82
82
|
player_flags: number,
|
|
83
83
|
health: number,
|
|
@@ -86,9 +86,11 @@ declare interface Character {
|
|
|
86
86
|
weapon: number,
|
|
87
87
|
emote: number,
|
|
88
88
|
attack_tick: number,
|
|
89
|
+
|
|
90
|
+
client_id: number
|
|
89
91
|
}
|
|
90
92
|
|
|
91
|
-
declare interface PlayerInfo {
|
|
93
|
+
export declare interface PlayerInfo {
|
|
92
94
|
local: number,
|
|
93
95
|
client_id: number,
|
|
94
96
|
team: number,
|
|
@@ -96,7 +98,7 @@ declare interface PlayerInfo {
|
|
|
96
98
|
latency: number,
|
|
97
99
|
}
|
|
98
100
|
|
|
99
|
-
declare interface ClientInfo {
|
|
101
|
+
export declare interface ClientInfo {
|
|
100
102
|
name: string,
|
|
101
103
|
clan: string,
|
|
102
104
|
country: number,
|
|
@@ -104,9 +106,11 @@ declare interface ClientInfo {
|
|
|
104
106
|
use_custom_color: number,
|
|
105
107
|
color_body: number,
|
|
106
108
|
color_feet: number,
|
|
109
|
+
|
|
110
|
+
id: number
|
|
107
111
|
}
|
|
108
112
|
|
|
109
|
-
declare interface DdnetCharacter {
|
|
113
|
+
export declare interface DdnetCharacter {
|
|
110
114
|
flags: number,
|
|
111
115
|
freeze_end: number,
|
|
112
116
|
jumps: number,
|
|
@@ -114,49 +118,49 @@ declare interface DdnetCharacter {
|
|
|
114
118
|
strong_weak_id: number,
|
|
115
119
|
}
|
|
116
120
|
|
|
117
|
-
declare interface SpectatorInfo {
|
|
121
|
+
export declare interface SpectatorInfo {
|
|
118
122
|
spectator_id: number,
|
|
119
123
|
x: number,
|
|
120
124
|
y: number,
|
|
121
125
|
}
|
|
122
126
|
|
|
123
|
-
declare interface Common {
|
|
127
|
+
export declare interface Common {
|
|
124
128
|
x: number,
|
|
125
129
|
y: number,
|
|
126
130
|
}
|
|
127
131
|
|
|
128
|
-
declare interface Explosion {
|
|
132
|
+
export declare interface Explosion {
|
|
129
133
|
common: Common,
|
|
130
134
|
}
|
|
131
135
|
|
|
132
|
-
declare interface Spawn {
|
|
136
|
+
export declare interface Spawn {
|
|
133
137
|
common: Common,
|
|
134
138
|
}
|
|
135
139
|
|
|
136
|
-
declare interface HammerHit {
|
|
140
|
+
export declare interface HammerHit {
|
|
137
141
|
common: Common,
|
|
138
142
|
}
|
|
139
143
|
|
|
140
|
-
declare interface Death {
|
|
144
|
+
export declare interface Death {
|
|
141
145
|
common: Common,
|
|
142
146
|
client_id: number,
|
|
143
147
|
}
|
|
144
148
|
|
|
145
|
-
declare interface SoundGlobal {
|
|
149
|
+
export declare interface SoundGlobal {
|
|
146
150
|
common: Common,
|
|
147
151
|
sound_id: number,
|
|
148
152
|
}
|
|
149
153
|
|
|
150
|
-
declare interface SoundWorld {
|
|
154
|
+
export declare interface SoundWorld {
|
|
151
155
|
common: Common,
|
|
152
156
|
sound_id: number,
|
|
153
157
|
}
|
|
154
158
|
|
|
155
|
-
declare interface DamageInd {
|
|
159
|
+
export declare interface DamageInd {
|
|
156
160
|
common: Common,
|
|
157
161
|
angle: number,
|
|
158
162
|
}
|
|
159
|
-
declare enum items {
|
|
163
|
+
export declare enum items {
|
|
160
164
|
OBJ_EX,
|
|
161
165
|
OBJ_PLAYER_INPUT,
|
|
162
166
|
OBJ_PROJECTILE,
|