mirror of
https://github.com/gamedig/node-gamedig.git
synced 2024-11-13 07:21:11 +01:00
44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
|
const Core = require('./core');
|
||
|
|
||
|
class Mafia2Multiplayer extends Core {
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.encoding = 'latin1';
|
||
|
this.header = 'M2MP';
|
||
|
this.isMafia2Online = false;
|
||
|
}
|
||
|
|
||
|
async run(state) {
|
||
|
const body = await this.udpSend(this.header,(buffer) => {
|
||
|
const reader = this.reader(buffer);
|
||
|
const header = reader.string(this.header.length);
|
||
|
if (header !== this.header) return;
|
||
|
return reader.rest();
|
||
|
});
|
||
|
|
||
|
const reader = this.reader(body);
|
||
|
state.name = this.readString(reader);
|
||
|
state.raw.numplayers = this.readString(reader);
|
||
|
state.maxplayers = parseInt(this.readString(reader));
|
||
|
state.raw.gamemode = this.readString(reader);
|
||
|
state.password = !!reader.uint(1);
|
||
|
state.gamePort = this.options.port - 1;
|
||
|
|
||
|
while(!reader.done()) {
|
||
|
const player = {};
|
||
|
player.name = this.readString(reader);
|
||
|
if(!player.name) break;
|
||
|
if (this.isMafia2Online) {
|
||
|
player.ping = parseInt(this.readString(reader));
|
||
|
}
|
||
|
state.players.push(player);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
readString(reader) {
|
||
|
return reader.pascalString(1,-1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = Mafia2Multiplayer;
|