Как сформировать запрос к игровому серверу?
Есть игровой сервер ETQW. Необходимо из него вытащить статистику текущей игры. Нашел библиотеку gamedig , но она получает только общую информацию об игроках. Никнайм, клантег, пинг и количество игроков/ботов.
Как нужно сформировать запрос на NodeJS, чтобы получить текущую статистику игры каждого игрока К/Д(убил/умер), и время игры до конца карты?
Статистику, примерно как на этой странице сервера https://www.gs4u.net/ru/s/147096.html
Сам код выглядит вот так:
const Gamedig = require('gamedig');
Gamedig.query({
type: 'etqw',
host: '178.162.135.83',
port: '27735'
}).then((info) => {
console.log(info);
}).catch((error) => {
console.log("Server is offline");
});
Ответ сервера такой:
Results {
name: 'TAW|EU - how to connect: tiny.cc/etqw',
map: 'canyon',
password: false,
raw: {
protocolVersion: '10.21',
si_version: 'ETQW 1.5.12663.12663 linux-x86 May 9 2008 13:47:37',
net_serverPunkbusterEnabled: '0',
net_serverDedicated: '1',
si_teamForceBalance: '1',
si_gameReviewReadyWait: '0',
si_disableGlobalChat: '0',
si_noProficiency: '0',
si_allowLateJoin: '1',
si_minPlayers: '1',
si_readyPercent: '51',
si_disableVoting: '0',
si_adminStart: '0',
si_motd_4: '1Gbps dedicated',
si_motd_2: 'http://taw.net ',
si_motd_1: 'TAW - The Art of Warfare ',
si_adminname: 'FrodeThree',
si_website: 'https://wiki.enemyterritory.org',
si_timelimit: '20',
si_rules: 'sdGameRulesCampaign',
si_spectators: '1',
si_pure: '1',
si_needPass: '0',
si_teamDamage: '1',
si_privateClients: '0',
si_maxPlayers: '32',
si_name: 'TAW|EU - how to connect: tiny.cc/etqw',
si_antiLagForgiving: '10',
si_antiLagOnly: '1',
si_antiLag: '1',
bot_enable: '1',
gamename: 'baseETQW-1',
si_campaign: 'campaign_pacific',
si_map: 'canyon',
osmask: 7,
ranked: 0,
timeleft: 0,
gamestate: 1,
servertype: 0,
interestedClients: 0
},
maxplayers: NaN,
players: Players [],
bots: Players [
Player { name: 'CTZN Kane', raw: [Object] },
Player { name: 'HaltHammerzeit', raw: [Object] },
Player { name: 'Vlad_Putimir', raw: [Object] },
Player { name: 'iceT-bag', raw: [Object] },
Player { name: 'NoobMcBoob', raw: [Object] },
Player { name: 'Boss_Tweed', raw: [Object] },
Player { name: 'NiceLagSwitch', raw: [Object] },
Player { name: 'FannyPack', raw: [Object] }
],
connect: '178.162.135.83:27735',
ping: 46
}
Ответы (1 шт):
Простого пути тут нет.
Читая исходники gamedig понятно, что общение с сервером Enemy Territory: Quake Wars идёт по протоколу doom3.
etqw|Enemy Territory: Quake Wars (2007)|doom3|port=3074,port_query=27733
А в модуле протокола doom3 запрашивается только getInfo.
class Doom3 extends Core {
constructor() {
super();
this.encoding = 'latin1';
}
async run(state) {
const body = await this.udpSend('\xff\xffgetInfo\x00PiNGPoNg\x00', packet => {
...
});
}
)
Чтобы попробовать запросить интересующую вас статистику, нужна хотя бы какая-то документация по протоколу doom3, список команд и интерпретация результатов.