====== Specifikace síťového protokolu ====== Server obsazuje UDP port 6800 (nebo specifikovaný) pro vlastní hru a týž TCP port pro přenos arén. Server využívá TCP port 6800 (příchozí i odchozí) pro připojení k [[server/master|MasterServeru]]. Jednotlivé síťové datagramy se skládají z //příkazu// a //0+ parametrů//. Jeden datagram smí obsahovat **pouze jeden příkaz**, který je **vždy** psaný **malými znaky**. Příkaz i jednotlivé parametry jsou od sebe odděleny mezerou (1+) (ASCII znak **0x20**). Každý datagram ukončuje ASCII znak **0xA**. Komunikaci vždy začíná klient. Server odesílá datagramy na zdrojovou IP adresu a zdrojový port, který získal z packetu, který přišel od klienta jako první. Maximální zpracovávaná délka packetu je **128 bajtů**. Pozn.: pokud je překročen maximální počet klientů (hráčů) na serveru, server přestává reagovat na **jakékoliv** příkazy od jiných než právě přihlášených klientů. ===== Server → Klient ===== === init === Inicializační datagram po obdržení příkazu **''hello''**. Hráč se registruje a vstupuje do hry. * '''' -- ID tuxánka, kterého bude hráč ovládat * '''' -- horizontální souřadnice hráče * '''' -- vertikální souřadnice hráče * '''' -- limitní počet bodů v rámci jedné hry -- pokud je ''-1'', není limit nastaven (hra je nekonečná) * '''' -- síťový název arény, ve které se hraje * '''' -- ID tohoto datagramu -- je nutné k potvrzení přijetí datagramu klientem === event === Informuje hráče o akcích vykonaných ostatními hráči. * '''' -- ID hráče, kterého se akce týká * '''' -- kód akce, viz níže uvedenou tabulku === newtux === Informuje hráče o nově připojeném hráči, navíc aktualizuje informace o daném hráči. Hráč může přijmout i informace sám o sobě, aby byl synchronizovaný se serverem. * '''' -- ID hráče * '''' -- horizontální souřadnice hráče * '''' -- vertikální souřadnice hráče * '''' -- status hráče * ''0'' -- hráč je živý * ''1'' -- hráč je mrtvý * '''' -- směr natočení hráče, viz níže uvedenou tabulku * '''' -- skóre hráče * '''' -- aktuální zbraň hráče; viz níže uvedenou tabulku * '''' -- aktuální bonus hráče; viz níže uvedenou tabulku * '''' -- počet nábojů v obyčejné pistoli * '''' -- počet nábojů ve dvojité pistoli * '''' -- počet nábojů v brokovnici * '''' -- počet nábojů v samopalu * '''' -- počet nábojů laseru * '''' -- počet min * '''' -- počet bomb-ballů === kill === Informuje hráče o zabití jiného hráče. * '''' -- ID zabitého hráče === del === Informuje hráče o odstranění objektu z arény * '''' -- ID odstraňovaného objektu * '''' -- ID tohoto datagramu -- je nutné k potvrzení přijetí datagramu klientem === additem === Informuje hráče o přidání nového objektu do arény. Číslo políčka animace se posílá pro situaci, kdy se hráč připojí např. v polovině výbuchu miny, aby se mu nepočítal odznovu. * '''' -- ID veci * '''' -- typ objektu, viz níže uvedenou tabulku * '''' -- horizontální souřadnice objektu * '''' -- vertikální souřadnice objektu * '''' -- index, který se musí dopočítat na změnu snímku v animaci * '''' -- číslo políčka animace * '''' -- ID hráče vlastnící daný objekt (např. minu) * '''' -- ID tohoto datagramu -- je nutné k potvrzení přijetí datagramu klientem === shot === Informuje hráče o nové střele. Pokud klient obdrží datagram pro již existující střelu, je stará střela přepsána novou (stará se zruší). * '''' -- ID streli * '' '' -- souřadnice [X,Y] střely * '' '' -- relativní změna polohy střely * '''' -- směr střely, viz níže uvedenou tabulku * '''' -- typ zbraně, viz níže uvedenou tabulku * '''' -- ID hráče, který střelu vystřelil * '''' -- ( 0 - strela nemôže zabiť tuxa s ID | 0 - strela nemôže zabiť tuxa s ID ) === chat : === Přeposlání chatové zprávy **všem** hráčům. * '''' -- jméno hráče, který zprávu poslal * '''' -- text zprávy === ping === Potvrzení klientovi, že je server funkční. Odesílá se každou vteřinu. === end === Server se vypíná. Odpojení všech hráčů. ===== Klient → Server ===== === hello === Tímto příkazem začíná klient komunikaci. * '''' -- verze klienta * '''' -- jméno hráče, za kterého bude klient hrát * jméno hráče smí obsahovat pouze alfanumerické znaky * maximální délka jména hráče je 31 znaků (delší se ořízne) === status === Žádost o sdělení informací o serveru. Odpověď je v tomto tvaru: name: version: clients: maxclients: uptime: arena: * '''' -- název serveru * '''' -- označení běžící verze (buď konkrétní release, např. //0.20.0//, nebo //svn// pro vývojářskou verzi) * '''' -- aktuální počet připojených hráčů * '''' -- maximální počet hráčů na serveru * '''' -- počet vteřit od spuštění serveru * '''' -- síťový název právě běžící arény === list === Žádost o tabulku hráčů s nejlepším skóre. * '''' -- udává počet nejlepších hráčů, pro něž má server vrátit data === check === Potvrzení o přijetí datagramu. * '''' -- ID přijatého datagramu === event === Provedení akce tuxánka. * '''' -- kód akce, viz níže uvedenou tabulku === chat === Odeslání zprávy do chatu. * '''' -- text zprávy === ping === Potvrzení serveru, že je klient aktivní. Odesílá se každou vteřinu -- pokud server během 5 vteřin neobdrží ani jeden tento datagram, klienta odpojí. === echo === Server následně posílá totožnou odpověď. * '''' -- libovolný text === end === Odpojení hráče ze hry. ===== Klient ↔ Server ===== === module === Slouží ke komunikaci mezi moduly; pokud ho obdrží server, odešle ho všem ostatním hráčům. * '''' -- interní protokol modulu ===== Přílohy ===== ==== Tabulka směrů a pohybů ==== ^ Kód ^ Směr pohybu ^ | 8 | nahoru | | 6 | vpravo | | 4 | vlevo | | 2 | dolů | ==== Tabulka akcí ==== ^ Kód ^ Akce ^ | 5 | výstřel | | 0 | změna zbraně | ==== Tabulky objektů ==== === Zbraně === ^ Kód ^ Zbraň ^ | 0 | obyčejná pistole | | 1 | dvojitá pistole | | 2 | brokovnice | | 3 | samopal | | 4 | laser | | 5 | mina | | 6 | bomb-ball | === Bonusy == ^ Kód ^ Bonus ^ | 10 | rychlost | | 11 | nekonečný počet nábojů | | 12 | nesmrtelnost | | 13 | duch (může procházet překážkami i minami) | | 14 | střelba do čtyř směrů současně | | 15 | neviditelnost | === Ostatní předměty === ^ Kód ^ Předmět ^ | 7 | položená mina | | 8 | malý výbuch | | 9 | velký výbuch |