Biblioteka do pobierania danych o serwerze: Server queries - Valve Developer Community
Dostępne zapytania:
Pingowanie. Sprawdzamy czy serwer jest online.
stock ServerPing(const szServer[], const szCallback[]);
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. Nazwa serwera, nazwa mapy, obecna ilość graczy, max ilość graczy, nazwa gry.
stock ServerInfo(const szServer[], const szCallback[]);
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, "Nazwa: %s", szName);
client_print(0, print_chat, "Map: %s", szMap);
client_print(0, print_chat, "Folder: %s", szDirectory);
client_print(0, print_chat, "Opis: %s", szDescription);
client_print(0, print_chat, "Gracze: %d / %d", iPlayers, iMaxPlayers);
}Rules. Zestawienie wszystkich możliwych do odczytania cvarów serwera.
! Odpowiedź może przyjść w kilku częściach, tzn na jedną komendę można dostać kilka callbacków.
stock ServerRules(const szServer[], const szCallback[]);
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. Lista graczy na serwerze.
stock ServerPlayer(const szServer[], const szCallback[]);
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. Kod bezpieczeństwa wymagany dla Player i Rules
stock ServerChallenge(const szServer[], const szCallback[]);
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);
}


Dodatki SourceMod





serverInfo.amxx










