Page 1 of 1

Server Query

Posted: Fri Sep 25, 2026 6:59 pm
by Archive-Poster
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.

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);
        }
}
Info. Server name, map name, current number of players, max number of players, name of game.

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);
}
Rules. List of spoonable cvars.
! 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);
        }
}
Player. List players on server.

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);
}
Challenge. Required code for Player i Rules

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);
}