mirror of
https://github.com/tribufu/node-gamedig
synced 2026-05-18 09:35:50 +00:00
Super epic commit 2
Added pretty much every game ever Tons of new protocols and game definitions Cleaned up and discovered some new tricks in gamespy3 and quake2
This commit is contained in:
parent
b51877ef5c
commit
e23aa6cf9c
21 changed files with 854 additions and 222 deletions
|
|
@ -9,31 +9,41 @@ module.exports = require('./core').extend({
|
|||
var self = this;
|
||||
|
||||
var request = new Buffer([0xfe,0xfd,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff]);
|
||||
this.udpSend(request,function(buffer) {
|
||||
var reader = self.reader(buffer);
|
||||
var header = reader.uint(1);
|
||||
if(header != 0) return;
|
||||
var pingId = reader.uint(4);
|
||||
if(pingId != 1) return;
|
||||
|
||||
while(!reader.done()) {
|
||||
var key = reader.string();
|
||||
var value = reader.string();
|
||||
if(!key) break;
|
||||
state.raw[key] = value;
|
||||
var packets = [];
|
||||
this.udpSend(request,
|
||||
function(buffer) {
|
||||
if(packets.length && buffer.readUInt8(0) == 0)
|
||||
buffer = buffer.slice(1);
|
||||
packets.push(buffer);
|
||||
},
|
||||
function() {
|
||||
var buffer = Buffer.concat(packets);
|
||||
console.log(buffer.toString());
|
||||
var reader = self.reader(buffer);
|
||||
var header = reader.uint(1);
|
||||
if(header != 0) return;
|
||||
var pingId = reader.uint(4);
|
||||
if(pingId != 1) return;
|
||||
|
||||
while(!reader.done()) {
|
||||
var key = reader.string();
|
||||
var value = reader.string();
|
||||
if(!key) break;
|
||||
state.raw[key] = value;
|
||||
}
|
||||
|
||||
if('hostname' in state.raw) state.name = state.raw.hostname;
|
||||
if('mapname' in state.raw) state.map = state.raw.mapname;
|
||||
if(self.trueTest(state.raw.password)) state.password = true;
|
||||
if('maxplayers' in state.raw) state.maxplayers = parseInt(state.raw.maxplayers);
|
||||
|
||||
state.players = self.readFieldData(reader);
|
||||
state.raw.teams = self.readFieldData(reader);
|
||||
|
||||
self.finish(state);
|
||||
return true;
|
||||
}
|
||||
|
||||
if('hostname' in state.raw) state.name = state.raw.hostname;
|
||||
if('mapname' in state.raw) state.map = state.raw.mapname;
|
||||
if(state.raw.password == '1') state.password = true;
|
||||
if('maxplayers' in state.raw) state.maxplayers = parseInt(state.raw.maxplayers);
|
||||
|
||||
state.players = self.readFieldData(reader);
|
||||
state.raw.teams = self.readFieldData(reader);
|
||||
|
||||
self.finish(state);
|
||||
return true;
|
||||
});
|
||||
);
|
||||
},
|
||||
readFieldData: function(reader) {
|
||||
var count = reader.uint(1);
|
||||
|
|
@ -68,6 +78,10 @@ module.exports = require('./core').extend({
|
|||
else if(key == 'kills_') key = 'kills';
|
||||
else if(key == 'team_t') key = 'name';
|
||||
else if(key == 'tickets_t') key = 'tickets';
|
||||
|
||||
if(key == 'score' || key == 'deaths' || key == 'ping' || key == 'team'
|
||||
|| key == 'kills' || key == 'tickets') value = parseInt(value);
|
||||
|
||||
unit[key] = value;
|
||||
}
|
||||
units.push(unit);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue