Fix client counts

This commit is contained in:
momo5502 2023-02-07 19:21:25 +01:00
parent 34291fb4d3
commit 736c4735c0
2 changed files with 27 additions and 4 deletions

View File

@ -38,6 +38,29 @@ namespace getinfo
return game::Dvar_GetInt(dvar); return game::Dvar_GetInt(dvar);
} }
int get_max_client_count()
{
return get_dvar_int("com_maxclients");
}
int get_client_count()
{
int count =1;
const auto client_states = *reinterpret_cast<uint64_t*>(game::select(0x1576FB318, 0x14A178E98));
const auto object_length = game::is_server() ? 0xE5110 : 0xE5170;
for(int i = 0; i < get_max_client_count(); ++i)
{
const auto client_state = *reinterpret_cast<int*>(client_states + (i * object_length));
if(client_state > 0)
{
++count;
}
}
return count;
}
int Com_SessionMode_GetGameMode() int Com_SessionMode_GetGameMode()
{ {
return *reinterpret_cast<int*>(game::select(0x1568EF7F4, 0x14948DB04)) << 14 >> 28; return *reinterpret_cast<int*>(game::select(0x1568EF7F4, 0x14948DB04)) << 14 >> 28;
@ -67,9 +90,9 @@ namespace getinfo
info.set("xuid", utils::string::va("%llX", steam::SteamUser()->GetSteamID().bits)); info.set("xuid", utils::string::va("%llX", steam::SteamUser()->GetSteamID().bits));
info.set("mapname", get_dvar_string("mapname")); info.set("mapname", get_dvar_string("mapname"));
info.set("isPrivate", get_dvar_string("g_password").empty() ? "0" : "1"); info.set("isPrivate", get_dvar_string("g_password").empty() ? "0" : "1");
info.set("clients", utils::string::va("%i", 0)); info.set("clients", utils::string::va("%i", get_client_count()));
info.set("bots", utils::string::va("%i", /*get_bot_count()*/0)); info.set("bots", utils::string::va("%i", /*get_bot_count()*/0));
info.set("sv_maxclients", utils::string::va("%i", get_dvar_int("com_maxclients"))); info.set("sv_maxclients", utils::string::va("%i", get_max_client_count()));
info.set("protocol", utils::string::va("%i", PROTOCOL)); info.set("protocol", utils::string::va("%i", PROTOCOL));
info.set("playmode", utils::string::va("%i", game::Com_SessionMode_GetMode())); info.set("playmode", utils::string::va("%i", game::Com_SessionMode_GetMode()));
info.set("gamemode", utils::string::va("%i", Com_SessionMode_GetGameMode())); info.set("gamemode", utils::string::va("%i", Com_SessionMode_GetGameMode()));

View File

@ -55,10 +55,10 @@ namespace steam
const auto mode = game::eModes(std::atoi(playmode.data())); const auto mode = game::eModes(std::atoi(playmode.data()));
const auto* tags = ::utils::string::va( const auto* tags = ::utils::string::va(
R"(\gametype\%s\dedicated\%s\ranked\false\hardcore\false\zombies\%s\modName\\playerCount\0)", R"(\gametype\%s\dedicated\%s\ranked\false\hardcore\false\zombies\%s\modName\\playerCount\%d)",
info.get("gametype").data(), info.get("gametype").data(),
info.get("dedicated") == "1" ? "true" : "false", info.get("dedicated") == "1" ? "true" : "false",
mode == game::MODE_ZOMBIES ? "true" : "false"); mode == game::MODE_ZOMBIES ? "true" : "false", server.m_nPlayers);
strcpy_s(server.m_szGameTags, tags); strcpy_s(server.m_szGameTags, tags);
server.m_steamID.bits = strtoull(info.get("xuid").data(), nullptr, 16); server.m_steamID.bits = strtoull(info.get("xuid").data(), nullptr, 16);