Vítejte na stránkách Asgard's serveru !, přehled novinek
20.10.2008: HL1 Server Queries Protocol Tutorial - 3.část
21:05:31 - Nightly_Falcon - Návody - Komentářů k článku 0
V posledním článku věnovaném HL Server queries se podíváme na to nejdůležitější a tím je nejnovější protocol, který používá většina serverů. Queries je celkem pět a u každé najdete přesný tvar včetně příkladů, jak má datová část datagramu vypadat. Dále také uvidíte, jak má vypadat odpověď.
New server queries
Nový protokol používá má podobný obsah datagramů nicméně, pokud se chcete držet starého protokolu dostanete odpověď pouze na datagram se stringem ping. V novém protokolu bylo hlavní změnou použítí takzvaného challenge number ( dále jen challenge ). Challenge jsou čtyři bytes, které dostanete jako odpověď na požadavek A2S_SERVERQUERY_GETCHALLENGE . Challenge number, které dostanete od serveru je platné 60 minut nebo dokud ho serveru neuvolní z LRU cache ( LRU = last recently used ). Požadavků je více oproti starému protokolu a jsou trochu jinak pojmenované.
Queries
Název | Komentář |
A2S_SERVERQUERY_GETCHALLENGE | Požádá o zaslání challenge. |
A2A_PING | Slouží pouze k získání odezvy serveru. |
A2S_INFO | Požádá o základní infomace o serveru ( název, mapa, počet připojených atd. ). |
A2S_PLAYER | Požádá o informace o hráčí ch( nicknames, kills, time connected ). |
A2S_RULES | Požádá o informace o pravidlech server ( sv_ , cl_, mp_ proměnné ). |
A2S_SERVERQUERY_GETCHALLENGE
Datagram který, požádá server o přidělení challenge number.
Request
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | ASCII 'i' nebo 0x57 | Byte obsahuje hodnotu, která v ASCII odpovídá znaku 'i'. Není nutné tedy používat žádný string oproti starému protokolu. |
Příklad | ||
FF|FF|FF|FF|57 |
Response
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | ASCII 'A' nebo 0x41 | Byte obsahuje hodnotu, která v ASCII odpovídá znaku 'A'. Potvrzuje tím odpověď na požadavek getchallenge. |
4 - bytes | nedefinovaná | Čtyři bytes čísla = challenge |
Příklad | ||
FF|FF|FF|FF|41|25|7C|F4|3C
Červeně je označeno zaslané challenge number |
Request
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | ASCII 'i' nebo 0x69 | Byte obsahuje hodnotu, která v ASCII odpovídá znaku 'i'. Není nutné tedy používat žádný string oproti starému protokolu. |
Příklad | ||
FF|FF|FF|FF|69 |
Response
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | ASCII 'j' nebo 0x6A | Byte obsahuje hodnotu, která v ASCII odpovídá znaku 'j'. Potvrzuje tím odpověď na požadavek ping. |
Příklad | ||
FF|FF|FF|FF|6A |
A2S_INFO
Request
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | ASCII 'T' nebo 0x54 | Byte obsahuje hodnotu, která v ASCII odpovídá znaku 'T'. |
string | ''Source Engine Query '' | String určený k poslání požadavku pro zjištění informací o serveru. |
byte | 0x00 | Ukončení stringu. |
Příklad | ||
FF|FF|FF|FF|57 |
Response
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | ASCII 'm' nebo 0x6D | Byte obsahuje hodnotu, která v ASCII odpovídá znaku 'm'. |
string | nedefinováno | IP a port serveru. |
string | nedefinováno | hostname serveru. |
string | nedefinováno | Mapa která se právě na serveru hraje. |
string | nedefinováno | Složka hry ( např. cstrike ). |
string | nedefinováno | Popis hry ( např. Counter-Strike ). |
byte | nedefinováno | Počet aktuálních hráčů. |
byte | nedefinováno | Maximální možný počet hráčů na serveru. |
byte | nedefinováno | Verze |
byte | 'd' nebo 'l' nebo 'p' | Typ serveru ( d = dedicated, l = listen, p = HLTV ) |
byte | 'l' nebo 'w' | Typ OS ( w = Windows, l = Linux ) |
byte | 0 nebo 1 | Server je zaheslovaný ( 0 = ne, 1 = ano ) |
byte | 0 nebo 1 | IsMod – jedná se o mód ( 0 = ne, 1 = ano ) |
Následujicí informace jsou v datagramu obsaženy pouze pokud je byte IsMod nastaven na hodnotu 1 ! | ||
string | nedefinováno | URL obsahující informace o módu |
string | nedefinováno | URL ke stažení tohoto módu |
byte | 0x00 | oddělovač |
long | nedefinováno | Verze nainstalovaného módu |
long | nedefinováno | Velikost módu |
byte | 0 nebo 1 | Je mód pouze ServerSide ( není potřeba, aby ho klient instaloval ) |
byte | 0 nebo 1 | Má tento mód vlasní DLL ( knihovna ) |
Zde končí sekce informací o módu ! | ||
byte | 0 nebo 1 | Zabezpečeno VACem ( 0 = ne, 1 = ano ) |
byte | nedefinováno | Počet botů na serveru. |
Příklad | ||
|
A2S_PLAYER
Datagram obsahuje počet hráčů na server, poté následují data o každém hráči se stejnou strukturou. Tento požadavek musí v datagramu obsahovat challenge number !
Request
Response
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | ASCII 'D' nebo 0x44 | Byte obsahuje hodnotu, která v ASCII odpovídá znaku 'D'. Potvrzuje tím odpověď na požadavek players. |
byte | nedefinovaná | Počet hráčů, o kterých datagram nese informace. |
Následující část se opakuje podle počtu hráčů | ||
byte | nedefinovaná | Index hráče. |
string | nedefinovaná | Nickname hráče. |
long | nedefinovaná | Počet fragů hráče. |
float | nedefinovaná | Doba připojení hráče ve vteřinách |
Příklad | ||
|
A2S_RULES
Datagram obsahuje počet pravidel serveru, poté následují data o každém pravidlu se stejnou strukturou. Tento požadavek musí v datagramu obsahovat challenge number !
Request
Response
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | ASCII 'E' nebo 0x45 | Byte obsahuje hodnotu, která v ASCII odpovídá znaku 'E'. Potvrzuje tím odpověď na požadavek rules. |
byte | nedefinovaná | Počet pravidel, o kterých datagram nese informace. |
Následující část se opakuje podle počtu hráčů | ||
string | nedefinovaná | Název pravidla ( proměnné ). |
string | nedefinovaná | Hodnota pravidla ( proměnné ). |
Příklad | ||
V tomto příkladě je vidět, že datová část datagramu začíná hodnotou FE, to je informace o tom, že data jsou rozdělena do více datagramů a je potřeba si vyžádat další. O něco dále již data v datagramu pokračují standartně podle daných pravidel. |
Remote Control ( RCON )
Pro poslání rcon příkazu je nutné poslat dva datagramy první obsahuje výzvu pro zaslaní rcon challenge number, druhý pak přijaté rcon challenge number a samotný příkaz.
Request -rcon challenge
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
string | ''challenge rcon \n'' | String obsahuje příkaz pro zaslání rcon challenge number ukončený je znakem pro konec řádku. |
byte | 0x00 | Ukončení stringu. |
Příklad | ||
|
Response – rcon challenge
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
string | ''challenge rcon \n'' | String obsahuje příkaz pro zaslání rcon challenge number ukončený je znakem pro konec řádku. |
string | nedefinovaná | Rcon challenge number – v string formátu |
byte | 0x00 | Ukončení stringu. |
Příklad | ||
|
Request – rcon command
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
string | ''rcon''+number+password+ command | Password by mělo být správně v uvozovkách, number je získané rcon challenge number opět ve stringu. |
byte | 0x00 | Ukončení stringu. |
Příklad | ||
![]() |
Request – rcon command
Typ | Hodnota | Komentář |
integer | -1 (0xFF FF FF FF ) | Začátek datové části datagramu |
byte | nedefinováno |
|
string | nedefinováno | Odpověď serveru na příkaz. |
» Jít zpět

