Как я могу получить список идентификаторов игроков на сервере без запуска игры? - PullRequest
0 голосов
/ 03 марта 2019

Извините за мой английский.Когда я запускаю игру ARK Survival Evolved и подключаюсь к серверу, я могу получать идентификаторы игроков и отслеживать изменения, если кто-то входит или выходит.Ниже приведен код, который дает мне эту информацию.

#include <windows.h>
#include <iostream>
#include "include\steam\steam_api.h"
#pragma comment(lib, "steam_api.lib")
using namespace std;

int main(int argc, char* argv[])
{
    if(!SteamAPI_Init()) {
        return 0;
    } cout << "\n";

    while(true) {
        int friendCount = SteamFriends()->GetFriendCount(0x10);
        cout << "friendCount: " << friendCount << "\n";
        for (int i = 0; i < friendCount; ++i) {
            CSteamID playerID = SteamFriends()->GetFriendByIndex(i, 0x10);
            long long steamID64 = playerID.ConvertToUint64();
            //...
        }
        //...
        Sleep(500);
    }
    return 0;
}

Функция

SteamFriends()->GetFriendCount(0x10)

возвращает количество игроков, которые отображаются в оверлее в «текущей игре».

Если я завершу игру через диспетчер задач, соединение продолжится, и я продолжу получать идентификаторы и отслеживать изменения!Поэтому наличие запущенной игры необязательно.

Как я могу получить список идентификаторов игроков на сервере, не запуская игру?Я знаю IP и порт.

Функция

SteamUser()->TerminateGameConnection(1438555551, 7783);

разрывает соединение с оверлеем (friendCount == 0).Однако обратная функция

SteamUser()->InitiateGameConnection(pAuthBlob, cbMaxAuthBlob, k_steamIDNonSteamGS, 1438555551, 7783, true);

не подключается обратно (возможно, третий аргумент неверен).

Есть идеи?

...