mirror of
https://github.com/demostf/demo.js
synced 2026-06-04 00:54:14 +02:00
start tick
This commit is contained in:
parent
9a297a2a9c
commit
bed36b2701
3 changed files with 24 additions and 33 deletions
45
packet.js
45
packet.js
|
|
@ -39,7 +39,7 @@ Packet.prototype.parse = function () {
|
||||||
while (this.bitsLeft > 6) { // last 6 bits for NOOP
|
while (this.bitsLeft > 6) { // last 6 bits for NOOP
|
||||||
var type = this.stream.readBits(6);
|
var type = this.stream.readBits(6);
|
||||||
if (Packet.parsers[type]) {
|
if (Packet.parsers[type]) {
|
||||||
var packet = Packet.parsers[type](this.stream);
|
var packet = Packet.parsers[type].call(this, this.stream);
|
||||||
//console.log(packet);
|
//console.log(packet);
|
||||||
packets.push(packet);
|
packets.push(packet);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -59,6 +59,7 @@ Packet.parseGameEvent = function (eventId, stream) {
|
||||||
var entry = eventDescription.entries[i];
|
var entry = eventDescription.entries[i];
|
||||||
values[entry.name] = Packet.getGameEventValue(stream, entry);
|
values[entry.name] = Packet.getGameEventValue(stream, entry);
|
||||||
}
|
}
|
||||||
|
//console.log(eventDescription.name);
|
||||||
return {
|
return {
|
||||||
name : eventDescription.name,
|
name : eventDescription.name,
|
||||||
type : eventDescription.type,
|
type : eventDescription.type,
|
||||||
|
|
@ -93,7 +94,7 @@ Packet.parsers = {
|
||||||
2 : ParserGenerator.make('file', 'transferId{32}fileName{s}requested{b}'),
|
2 : ParserGenerator.make('file', 'transferId{32}fileName{s}requested{b}'),
|
||||||
3 : ParserGenerator.make('netTick', 'tick{32}frameTime{16}stdDev{16}'),
|
3 : ParserGenerator.make('netTick', 'tick{32}frameTime{16}stdDev{16}'),
|
||||||
4 : ParserGenerator.make('stringCmd', 'command{s}'),
|
4 : ParserGenerator.make('stringCmd', 'command{s}'),
|
||||||
5 : function (stream) {
|
5 : function (stream) { // setconvar
|
||||||
var count = stream.readBits(8);
|
var count = stream.readBits(8);
|
||||||
var vars = {};
|
var vars = {};
|
||||||
for (var i = 0; i < count; i++) {
|
for (var i = 0; i < count; i++) {
|
||||||
|
|
@ -110,7 +111,7 @@ Packet.parsers = {
|
||||||
'version{16}serverCount{32}stv{b}dedicated{b}maxCrc{32}maxClasses{16}' +
|
'version{16}serverCount{32}stv{b}dedicated{b}maxCrc{32}maxClasses{16}' +
|
||||||
'mapHash{128}playerCount{8}maxPlayerCount{8}intervalPerTick{f32}platform{s1}' +
|
'mapHash{128}playerCount{8}maxPlayerCount{8}intervalPerTick{f32}platform{s1}' +
|
||||||
'game{s}map{s}skybox{s}serverName{s}replay{b}'),
|
'game{s}map{s}skybox{s}serverName{s}replay{b}'),
|
||||||
10: function (stream) {
|
10: function (stream) { //classInfo
|
||||||
var number = stream.readBits(16);
|
var number = stream.readBits(16);
|
||||||
var create = !!stream.readBits(1);
|
var create = !!stream.readBits(1);
|
||||||
var entries = [];
|
var entries = [];
|
||||||
|
|
@ -135,18 +136,18 @@ Packet.parsers = {
|
||||||
11: ParserGenerator.make('setPause', 'paused{b}'),
|
11: ParserGenerator.make('setPause', 'paused{b}'),
|
||||||
12: function (stream) {
|
12: function (stream) {
|
||||||
var stringTable = new PacketStringTable(stream);
|
var stringTable = new PacketStringTable(stream);
|
||||||
stringTable.parse();
|
var tables = stringTable.parse();
|
||||||
return {
|
return {
|
||||||
packetType: 'createStringTable',
|
packetType: 'createStringTable',
|
||||||
table : stringTable
|
table : tables
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
13: function (stream) {
|
13: function (stream) { //updatestringTable
|
||||||
var stringTable = new PacketStringTable(stream);
|
var stringTable = new PacketStringTable(stream);
|
||||||
stringTable.parse();
|
var tables = stringTable.parse();
|
||||||
return {
|
return {
|
||||||
packetType: 'createStringTable',
|
packetType: 'updateStringTable',
|
||||||
table : stringTable
|
table : tables
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -168,20 +169,6 @@ Packet.parsers = {
|
||||||
} else {
|
} else {
|
||||||
stream.readBits(6);
|
stream.readBits(6);
|
||||||
}
|
}
|
||||||
//console.log(a ? 'a' : '!a')
|
|
||||||
//console.log('table: ' + table.name);
|
|
||||||
//console.log(' ' + table.entries.length + ' entries');
|
|
||||||
//for (var i = 0; i < changeEntries; i++) {
|
|
||||||
// //console.log(stream.readBits(2));
|
|
||||||
// var string = stream.readASCIIString();
|
|
||||||
// stream.readBits(16);
|
|
||||||
// //todo last entry overflows by 13 (3 bits at the end 13 before next entry?)
|
|
||||||
// strings[i] = string;
|
|
||||||
//}
|
|
||||||
//throw false;
|
|
||||||
//console.log(changeEntries);
|
|
||||||
//console.log(strings);
|
|
||||||
//console.log(end - stream._index);
|
|
||||||
stream._index = end;
|
stream._index = end;
|
||||||
//throw false;
|
//throw false;
|
||||||
return {
|
return {
|
||||||
|
|
@ -194,7 +181,7 @@ Packet.parsers = {
|
||||||
},
|
},
|
||||||
14: ParserGenerator.make('voiceInit', 'codec{s}quality{8}'),
|
14: ParserGenerator.make('voiceInit', 'codec{s}quality{8}'),
|
||||||
15: ParserGenerator.make('voiceData', 'client{8}proximity{8}length{16}_{$length}'),
|
15: ParserGenerator.make('voiceData', 'client{8}proximity{8}length{16}_{$length}'),
|
||||||
17: function (stream) {
|
17: function (stream) { //parseSounds
|
||||||
var reliable = !!stream.readBits(1);
|
var reliable = !!stream.readBits(1);
|
||||||
var num = (reliable) ? 1 : stream.readBits(8);
|
var num = (reliable) ? 1 : stream.readBits(8);
|
||||||
var length = (reliable) ? stream.readBits(8) : stream.readBits(16);
|
var length = (reliable) ? stream.readBits(8) : stream.readBits(16);
|
||||||
|
|
@ -208,7 +195,7 @@ Packet.parsers = {
|
||||||
},
|
},
|
||||||
18: ParserGenerator.make('setView', 'index{11}'),
|
18: ParserGenerator.make('setView', 'index{11}'),
|
||||||
19: ParserGenerator.make('fixAngle', 'relative{b}x{16}y{16}z{16}'),
|
19: ParserGenerator.make('fixAngle', 'relative{b}x{16}y{16}z{16}'),
|
||||||
21: function (stream) {
|
21: function (stream) { //BSPDecal
|
||||||
var getCoord = function (stream) {
|
var getCoord = function (stream) {
|
||||||
var hasInt = !!stream.readBits(1);
|
var hasInt = !!stream.readBits(1);
|
||||||
var hasFract = !!stream.readBits(1);
|
var hasFract = !!stream.readBits(1);
|
||||||
|
|
@ -253,7 +240,7 @@ Packet.parsers = {
|
||||||
lowPriority : lowPriority
|
lowPriority : lowPriority
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
23: function (stream) {
|
23: function (stream) { // user message
|
||||||
// user message
|
// user message
|
||||||
var type = stream.readBits(8);
|
var type = stream.readBits(8);
|
||||||
var length = stream.readBits(11);
|
var length = stream.readBits(11);
|
||||||
|
|
@ -272,7 +259,7 @@ Packet.parsers = {
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
24: ParserGenerator.make('entityMessage', 'index{11}id{9}length{11}data{$length}'),
|
24: ParserGenerator.make('entityMessage', 'index{11}id{9}length{11}data{$length}'),
|
||||||
25: function (stream) {
|
25: function (stream) { //game event
|
||||||
var length = stream.readBits(11);
|
var length = stream.readBits(11);
|
||||||
var end = stream._index + length;
|
var end = stream._index + length;
|
||||||
var eventId = stream.readBits(9);
|
var eventId = stream.readBits(9);
|
||||||
|
|
@ -283,7 +270,7 @@ Packet.parsers = {
|
||||||
event : event
|
event : event
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
26: function (stream) {
|
26: function (stream) { //packetEntities
|
||||||
// todo
|
// todo
|
||||||
var maxEntries = stream.readBits(11);
|
var maxEntries = stream.readBits(11);
|
||||||
var isDelta = !!stream.readBits(1);
|
var isDelta = !!stream.readBits(1);
|
||||||
|
|
@ -311,7 +298,7 @@ Packet.parsers = {
|
||||||
27: ParserGenerator.make('tempEntities', 'count{8}length{17}_{$length}'),
|
27: ParserGenerator.make('tempEntities', 'count{8}length{17}_{$length}'),
|
||||||
28: ParserGenerator.make('preFetch', 'index{14}'),
|
28: ParserGenerator.make('preFetch', 'index{14}'),
|
||||||
29: ParserGenerator.make('menu', 'type{16}length{16}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}'),//length*8
|
29: ParserGenerator.make('menu', 'type{16}length{16}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}_{$length}'),//length*8
|
||||||
30: function (stream) {
|
30: function (stream) { //gameEventList
|
||||||
// list of game events and parameters
|
// list of game events and parameters
|
||||||
var numEvents = stream.readBits(9);
|
var numEvents = stream.readBits(9);
|
||||||
var length = stream.readBits(20);
|
var length = stream.readBits(20);
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ var Parser = function (steam) {
|
||||||
users : {},
|
users : {},
|
||||||
deaths : [],
|
deaths : [],
|
||||||
rounds : [],
|
rounds : [],
|
||||||
|
startTick : 0,
|
||||||
intervalPerTick: 0
|
intervalPerTick: 0
|
||||||
};
|
};
|
||||||
this.packets = [];
|
this.packets = [];
|
||||||
|
|
@ -59,6 +60,9 @@ Parser.prototype.parseBody = function () {
|
||||||
}
|
}
|
||||||
switch (packet.packetType) {
|
switch (packet.packetType) {
|
||||||
case 'netTick':
|
case 'netTick':
|
||||||
|
if (this.state.startTick === 0) {
|
||||||
|
this.state.startTick = packet.tick;
|
||||||
|
}
|
||||||
tick = packet.tick;
|
tick = packet.tick;
|
||||||
break;
|
break;
|
||||||
case 'serverInfo':
|
case 'serverInfo':
|
||||||
|
|
@ -81,7 +85,7 @@ Parser.prototype.parseBody = function () {
|
||||||
var userId = packet.tables.userinfo[j].extraData[1].charCodeAt(0);
|
var userId = packet.tables.userinfo[j].extraData[1].charCodeAt(0);
|
||||||
this.state.users[userId] = {
|
this.state.users[userId] = {
|
||||||
name : name,
|
name : name,
|
||||||
userId: userId,
|
userId : userId,
|
||||||
steamId: steamId
|
steamId: steamId
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
6
test.js
6
test.js
|
|
@ -1,12 +1,12 @@
|
||||||
var Demo = require('./demo');
|
var Demo = require('./demo');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
|
||||||
fs.readFile("process.dem", function (err, data) {
|
fs.readFile("upward.dem", function (err, data) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
var demo = Demo.fromNodeBuffer(data);
|
var demo = Demo.fromNodeBuffer(data);
|
||||||
var parser = demo.getParser();
|
var parser = demo.getParser();
|
||||||
var head = parser.readHeader();
|
var head = parser.readHeader();
|
||||||
//console.log(head);
|
//console.log(head);
|
||||||
var body = parser.parseBody()
|
var body = parser.parseBody();
|
||||||
console.log(body.users);
|
//console.log(body);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue