Как сформировать запрос к игровому серверу?

Есть игровой сервер 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 шт):

Автор решения: nörbörnën

Простого пути тут нет.

Читая исходники 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, список команд и интерпретация результатов.

→ Ссылка