Server Query
Posted: Fri Sep 25, 2026 6:59 pm
Server Queries
Library to asynchronous request fetching information about other server of HL game. Server queries - Valve Developer Community
Available requests:
Ping. Online state check.
Info. Server name, map name, current number of players, max number of players, name of game.
Rules. List of spoonable cvars.
! Response can be in few packes, so callback can be called few times per one use.
Player. List players on server.
Challenge. Required code for Player i Rules
Library to asynchronous request fetching information about other server of HL game. Server queries - Valve Developer Community
Available requests:
Ping. Online state check.
Code: Select all
stock ServerPing(const szServer[], const szCallback[]);Code: Select all
new const SERVER_ADDRESS[] = "192.168.0.14:27015";
public ping()
{
ServerPing(SERVER_ADDRESS, "cbPing");
return PLUGIN_HANDLED;
}
public cbPing(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
if(success)
{
client_print(0, print_chat, "Server %s is Online latency = %d", szServer, latency);
}
else
{
client_print(0, print_chat, "Server %s is Offline", szServer);
}
}Code: Select all
stock ServerInfo(const szServer[], const szCallback[]);Code: Select all
new const SERVER_ADDRESS[] = "192.168.0.14:27015";
public info()
{
ServerInfo(SERVER_ADDRESS, "cbInfo");
return PLUGIN_HANDLED;
}
public cbInfo(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
if(!success)
return;
new szName[64], szMap[64], szDirectory[64], szDescription[64];
new iPlayers = 0;
new iMaxPlayers = 0;
ServerResponseParseInfo(Response, szName, 63, szMap, 63, szDirectory, 63, szDescription, 63, iPlayers, iMaxPlayers);
client_print(0, print_chat, "Server name: %s", szName);
client_print(0, print_chat, "Map: %s", szMap);
client_print(0, print_chat, "Folder: %s", szDirectory);
client_print(0, print_chat, "Description: %s", szDescription);
client_print(0, print_chat, "Players: %d / %d", iPlayers, iMaxPlayers);
}! Response can be in few packes, so callback can be called few times per one use.
Code: Select all
stock ServerRules(const szServer[], const szCallback[]);Code: Select all
new const SERVER_ADDRESS[] = "192.168.0.14:27015";
public rules()
{
if(ServerGetChallenge(SERVER_ADDRESS))
{
ServerRules(SERVER_ADDRESS, "cbRules");
}
else
{
ServerChallenge(SERVER_ADDRESS, "cbChallengeRules");
}
return PLUGIN_HANDLED;
}
public cbChallengeRules(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
if(!success)
return;
//Get and cche challenge
new challenge_value = ServerResponseParseChallenge(Response);
ServerSetChallenge(szServer, challenge_value);
//Now can get Rules
ServerRules(SERVER_ADDRESS, "cbRules");
}
public cbRules(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
if(!success)
return;
new szValue[32];
if(ServerResponseParseRules(Response, len, "sv_alltalk", szValue, 31))
{
client_print(0, print_chat, "Rule: sv_alltalk ^"%s^"", szValue);
}
}Code: Select all
stock ServerPlayer(const szServer[], const szCallback[]);Code: Select all
new const SERVER_ADDRESS[] = "192.168.0.14:27015";
public player()
{
if(ServerGetChallenge(SERVER_ADDRESS))
{
ServerPlayer(SERVER_ADDRESS, "cbPlayer");
}
else
{
ServerChallenge(SERVER_ADDRESS, "cbChallengePlayer");
}
return PLUGIN_HANDLED;
}
public cbChallengePlayer(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
if(!success)
return;
//Get and cache challenge
new challenge_value = ServerResponseParseChallenge(Response);
ServerSetChallenge(szServer, challenge_value);
//Now can get Player
ServerPlayer(SERVER_ADDRESS, "cbPlayer");
}
public cbPlayer(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
if(!success)
return;
new iPlayers = ServerResponseParsePlayerNum(Response);
client_print(0, print_chat, "Players: %d", iPlayers);
new szNick[32], id, kills, Float:uptime;
for(new i=0;i<iPlayers; i++)
{
if(ServerResponseParsePlayer(Response, i, id, szNick, 31, kills, uptime))
{
client_print(0, print_chat, "%d %s | kills:%d, uptime = %f", id, szNick, kills, uptime);
}
}
ServerResponseSave("Player", Response, len);
}Code: Select all
stock ServerChallenge(const szServer[], const szCallback[]);Code: Select all
new const SERVER_ADDRESS[] = "192.168.0.14:27015";
public challenge()
{
ServerChallenge(SERVER_ADDRESS, "cbChallenge");
return PLUGIN_HANDLED;
}
public cbChallenge(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
if(!success)
return;
new challenge_value = ServerResponseParseChallenge(Response);
client_print(0, print_chat, "Challenge: %X", challenge_value);
}