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