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
|
|
@ -7,17 +7,28 @@ module.exports = require('./core').extend({
|
|||
this.delimiter = '\n';
|
||||
this.sendHeader = 'status';
|
||||
this.responseHeader = 'print';
|
||||
this.isQuake1 = false;
|
||||
},
|
||||
run: function(state) {
|
||||
var self = this;
|
||||
|
||||
this.udpSend('\xff\xff\xff\xff'+this.sendHeader+'\x00',function(buffer) {
|
||||
var reader = self.reader(buffer);
|
||||
var header = reader.string();
|
||||
if(header != '\xff\xff\xff\xff'+this.responseHeader) return;
|
||||
|
||||
var header = reader.string({length:4});
|
||||
if(header != '\xff\xff\xff\xff') return;
|
||||
|
||||
var response;
|
||||
if(this.isQuake1) {
|
||||
response = reader.string({length:1});
|
||||
} else {
|
||||
response = reader.string();
|
||||
}
|
||||
if(response != this.responseHeader) return;
|
||||
|
||||
var info = reader.string().split('\\');
|
||||
if(info[0] == '') info.shift();
|
||||
|
||||
while(true) {
|
||||
var key = info.shift();
|
||||
var value = info.shift();
|
||||
|
|
@ -26,10 +37,11 @@ module.exports = require('./core').extend({
|
|||
}
|
||||
|
||||
while(!reader.done()) {
|
||||
var player = reader.string();
|
||||
var line = reader.string();
|
||||
if(!line || line.charAt(0) == '\0') break;
|
||||
|
||||
var args = [];
|
||||
var split = player.split('"');
|
||||
var split = line.split('"');
|
||||
var inQuote = false;
|
||||
split.forEach(function(part,i) {
|
||||
var inQuote = (i%2 == 1);
|
||||
|
|
@ -43,14 +55,24 @@ module.exports = require('./core').extend({
|
|||
}
|
||||
});
|
||||
|
||||
var frags = parseInt(args[0]);
|
||||
var ping = parseInt(args[1]);
|
||||
var name = args[2] || '';
|
||||
var address = args[3] || '';
|
||||
var player = {};
|
||||
if(self.isQuake1) {
|
||||
player.id = parseInt(args.shift());
|
||||
player.score = parseInt(args.shift());
|
||||
player.time = parseInt(args.shift());
|
||||
player.ping = parseInt(args.shift());
|
||||
player.name = args.shift();
|
||||
player.skin = args.shift();
|
||||
player.color1 = parseInt(args.shift());
|
||||
player.color2 = parseInt(args.shift());
|
||||
} else {
|
||||
player.frags = parseInt(args.shift());
|
||||
player.ping = parseInt(args.shift());
|
||||
player.name = args.shift() || '';
|
||||
player.address = args.shift() || '';
|
||||
}
|
||||
|
||||
(ping == 0 ? state.bots : state.players).push({
|
||||
frags:frags, ping:ping, name:name, address:address
|
||||
});
|
||||
(player.ping ? state.players : state.bots).push(player);
|
||||
}
|
||||
|
||||
if('g_needpass' in state.raw) state.password = state.raw.g_needpass;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue