Garry's Mod je sandbox doslova: server spouští jakýkoli Lua kód, který addony obsahují, a výkon, který dostaneš, je vlastností toho kódu, ne hry. Dva servery na stejném tarifu se mohou chovat úplně jinak a rozdíl je v seznamu addonů. Samotná instalace je jeden příkaz SteamCMD a startovací řádek; vše další je doručování obsahu, disciplína v Lue a hrstka konzolových proměnných. Sandbox server pro tucet kamarádů se vejde do 1-2 GB. Čtyřicetislotový server DarkRP s velkou kolekcí z Workshopu chce 4-6 GB a pořád ho bude limitovat jedno jádro CPU.
Co vlastně provozuješ#
Server Garry's Mod je dedikovaný server Source - srcds - který běží s herním adresářem garrysmod, s app id 4020 na Steamu. Instaluje se anonymně, nepotřebuje herní licenci a je malý ve srovnání s většinou moderních her. Nad tím sedí sandbox v Lue: gamemode, libovolný počet addonů a infrastruktura Workshopu, která je dostává na počítače hráčů.
Tři fakta určují vše ostatní:
- Server je ve výchozím stavu 32bitový. Standardní větev spouští 32bitovou binárku, která dokáže adresovat zhruba 3-4 GB bez ohledu na to, co říká tvůj tarif. Server, který padá s chybou alokace, zatímco panel ukazuje volnou paměť, není škrcený; narazil na strop 32 bitů. Existuje beta větev
x86-64, která instaluje 64bitové binárky vedle 32bitových a pro velké kolekce se vyplatí - jenže každý kompilovaný binární modul, který používáš, musí existovat i v 64bitovém buildu. - Lua běží v jednom vlákně. Vše, co dělá gamemode a každý addon, se odehrává postupně uvnitř ticku. Žádný počet dalších jader nezlevní špatně napsaný hook
Think. - Klienti potřebují stejný obsah jako ty. To, že server addon má, samo o sobě nic neznamená. Dostat ho k hráči je samostatná práce a právě odtud pochází většina hlášení typu „můj server nefunguje“.
Požadavky a spotřeba zdrojů#
| Server | RAM | CPU | Poznámky |
|---|---|---|---|
| Sandbox, 8-16 hráčů, malá kolekce | 1-2 GB | 1 jádro | Obvyklý server jen pro kamarády |
| TTT / murder / prop hunt, 16-24 | 2-3 GB | 1-1,5 jádra | Kolové módy se chovají slušně |
| DarkRP, 32-40 hráčů | 4-6 GB | 2-2,5 jádra | Entity, povolání a tiskárny, vše v Lue |
| Cokoli s kolekcí o 200 položkách | 4-6 GB | 2+ jádra | Paměť dělá kolekce, ne hráči |
Paměť v Garry's Mod sleduje velikost kolekce z Workshopu mnohem víc než počet hráčů. Lua, modely a materiály každého addonu server drží v paměti a sto balíčků props stojí stejně, ať je připojený jeden člověk, nebo čtyřicet. Disk je skromný - základní instalace má pár gigabajtů a velká kolekce přidá několik dalších.
Strop, na který narazí každý, je CPU. Sleduj čas snímku serveru: pokud server nestihne dokončit tick ve svém rozpočtu, pohyb se zadrhává všem najednou. Spusť v konzoli stats a čti sloupce fps a cpu; na zdravém serveru je fps na tick rate nebo těsně nad ním. Tarify pro Garry's Mod tady začínají na 1 GB a jdou do 6 GB, což pokryje všechno od sandbox serveru po vytížený roleplay.
Instalace serveru a startovací řádek#
$ steamcmd +force_install_dir /home/gmod/server +login anonymous \ +app_update 4020 validate +quit$ cd /home/gmod/server$ ./srcds_run -game garrysmod -console -usercon -port 27015 \ +maxplayers 24 +gamemode sandbox +map gm_construct \ +host_workshop_collection 123456789 -authkey <steam_web_api_key>V panelu to nepíšeš; stejné hodnoty se objeví jako pole na záložce Startup. Tak či tak jsou důležité tyto parametry:
| Parametr | Co dělá |
|---|---|
-game garrysmod | Který herní adresář srcds načte |
-console | Běží v konzoli místo otevření okna |
-usercon | Zapne RCON. Bez něj rcon_password nic nedělá |
-port 27015 | Herní port |
+maxplayers 24 | Počet slotů. Nelze změnit bez restartu |
+gamemode sandbox | Název složky gamemodu v garrysmod/gamemodes |
+map gm_construct | První načtená mapa |
+host_workshop_collection | ID kolekce z Workshopu, kterou server stáhne při startu |
-authkey | Steam Web API klíč, bez kterého předchozí řádek nefunguje |
-tickrate 33 | Počet ticků za sekundu, nastavený explicitně |
+sv_setsteamaccount | Game Server Login Token |
Dva z nich si zaslouží víc než řádek v tabulce. -authkey je Steam Web API klíč ze stránky pro vývojáře na Steamu a bez něj host_workshop_collection mlčky nestáhne nic - server naběhne, kolekce se ignoruje a hráči přijdou do sandboxu bez jediného tvého addonu. A -tickrate se vyplatí nastavit místo dědění výchozí hodnoty: zdroje se neshodnou, co je výchozí u Garry's Mod, takže dej číslo přímo do startovacího řádku a přestaň hádat. 33 je rozumné minimum pro sandbox plný props, 66 pro cokoli, kde záleží na míření. Zdvojnásobení tick rate zhruba zdvojnásobí zátěž CPU na hráče a serveru, který už zaostává, nepomůže vůbec - delší verzi té úvahy najdeš v článku co tick rate doopravdy znamená.
Pokud se server nikdy neobjeví v prohlížeči, kromě portu zkontroluj i Game Server Login Token. Tokeny se vytvářejí pro app id 4000 u Garry's Mod a nastavují se pomocí sv_setsteamaccount; co to je, jak se banují a proč je důležitý jeden na server, vysvětluje tokeny Steam pro herní servery.
server.cfg a limity sandboxu#
garrysmod/cfg/server.cfg se spouští při každém načtení mapy. Rozumný výchozí soubor:
hostname "Prop hunt, Thursdays, no minges"sv_password ""rcon_password "long-random-string"sv_lan 0sv_region 3sv_allowcslua 0sv_kickerrornum 10sv_allowdownload 1sv_allowupload 0sv_downloadurl "https://files.example.com/gmod/"net_maxfilesize 64sbox_maxprops 150sbox_maxragdolls 5sbox_maxnpcs 10sbox_maxeffects 50sbox_maxvehicles 6sbox_maxthrusters 30sbox_maxwheels 30sbox_maxdynamite 10sbox_godmode 0sbox_noclip 1sbox_playershurtplayers 1gmod_physiterations 4Výchozí hodnoty hádat nemusíš: napiš libovolný cvar samotný do konzole serveru a vypíše aktuální hodnotu i dodanou výchozí. Několik z nich má větší váhu, než naznačují jejich názvy:
sv_allowcslua 0brání klientům spouštět na tvém serveru libovolný klientský Lua kód. Nech 0. Každý návod, který říká nastavit 1, je návod pro testovací box pro jednoho hráče.sv_kickerrornumvyhodí klienta po tomto počtu chyb v Lue. Klient s rozbitým addonem jinak produkuje tisíce chybových řádků za minutu a zasype vše užitečné v konzoli.sbox_maxpropsje rozdíl mezi sandbox serverem a prezentací po snímcích. Fyzikální náklady props nejsou lineární - jeden hráč, který svaří sto sudů dohromady, stojí víc než deset hráčů s deseti props.gmod_physiterationszvyšuje přesnost fyziky za přímo úměrné náklady na CPU. Nezvyšuj ho kvůli lagu; je to opak řešení.sv_regionurčuje, kam tě prohlížeč zařadí.3je Evropa.
Nastavení pro jednotlivé mapy patří do garrysmod/cfg/<mapname>.cfg, které se spustí po server.cfg, když se daná mapa načte. Takhle čistě dáš jedné mapě jiné limity props bez pluginu.
Porty a připojení#
| Port | Protokol | Účel |
|---|---|---|
27015 | UDP | Herní provoz a dotazy Steamu |
27015 | TCP | RCON, pokud je nastaveno -usercon |
27020 | UDP | SourceTV, pokud ho zapneš |
27005 | UDP | Odchozí port klienta, na straně serveru není co otevírat |
Source používá stejné číslo pro herní provoz i dotaz serverového prohlížeče, proto Garry's Mod potřebuje méně alokací než DayZ nebo Arma. Tarify pro Garry's Mod tady přicházejí s jednou alokací a další porty se přidávají na záložce Network, když chceš SourceTV nebo druhý server.
Hráči, kteří server v prohlížeči nenajdou, se vždy mohou připojit přímo ze své konzole příkazem connect 203.0.113.10:27015. To je zároveň nejrychlejší diagnostika: pokud přímé připojení funguje, server je v pořádku a problém je v seznamu - chybějící token, špatný region, nebo prostě prohlížeč jako prohlížeč. Rozdíl mezi dotazovacím a herním portem obecně vysvětluje porty herních serverů a RCON bezpečně stojí za pět minut, než do toho souboru dáš heslo, protože rcon_password přes internet je nešifrovaný protokol s jediným tajemstvím.
Kolekce z Workshopu, FastDL a chybějící obsah#
Nasměruj server na kolekci z Workshopu a nech ho stáhnout, co potřebuje. Nahrávání addonů ručně funguje přesně do první aktualizace, kdy se server a všichni klienti rozejdou v tom, co je nainstalované, a nikdo se nemůže připojit.
Obsah může putovat třemi oddělenými cestami a fungující server obvykle používá všechny tři.
Kolekce z Workshopu je pro addony. Vytvoř jednu kolekci, nastav ji jako veřejnou, dej její ID do host_workshop_collection a přidej -authkey. Server si addony stáhne pro sebe. Aby je stáhli i klienti, vyjmenuj je v Lue:
resource.AddWorkshop("1234567890")resource.AddWorkshop("1234567891")FastDL je pro všechno, co není addon z Workshopu: starší mapy, zvuky, vlastní modely nahrané do herního adresáře. Nastav sv_downloadurl na webový server s kopií struktury složek garrysmod, kde je každý soubor zkomprimovaný bzip2. Bez něj klienti stahují přes herní port tempem, které působí jako porucha. S ním stahují tak rychle, jak webhosting zvládne. Celý postup včetně rozložení složek a komprese najdeš v článku kolekce z Workshopu a FastDL.
Připojené hry jsou případ, který opravit nejde. Mnoho komunitních map vzniklo s texturami z Counter-Strike: Source. Pokud hráč CS:S nevlastní a nemá nainstalované, vidí fialovo-černé šachovnice a modely ERROR a nic, co na serveru uděláš, to nezmění - garrysmod/cfg/mount.cfg připojuje obsah, který počítač už má, nevytváří licenci. Buď vybírej mapy, které používají jen obsah Half-Life 2, nebo lidem v MOTD jasně napiš, co potřebují.
Gamemody, admini a DarkRP#
Gamemode je složka v garrysmod/gamemodes/ a název složky je to, co předáš do +gamemode. Právě tady klopýtne skoro každý, kdo poprvé instaluje DarkRP: DarkRP patří do `garrysmod/gamemodes/darkrp`, ne do `addons`, zatímco darkrpmodification - složka, kterou máš upravovat - patří do garrysmod/addons/darkrpmodification. Když dáš cokoli na špatné místo, server nabootuje do sandboxu a nevypíše nic zjevně špatného. Povolání, entity a systém peněz probírá článek provoz serveru DarkRP.
Pro správu je zdarma standardem ULX s ULib: oba jsou addony a ULib drží seznam uživatelů v garrysmod/data/ulib/users.txt. Admini používají menu ve hře přes !menu a prvního superadmina můžeš přidělit úpravou toho souboru při zastaveném serveru, pokud ještě není nikdo adminem. SAM a ServerGuard jsou placené alternativy s lepším rozhraním a nižší režií; na vytíženém serveru je režie reálný argument, protože admin módy se zavěšují na chat, spawnování a poškození.
Ať používáš cokoli, nastav to dřív, než někoho pozveš. Nemoderovaný server Garry's Mod objeví svého prvního návštěvníka spamujícího props do jednoho dne a nástroje na něj jsou k ničemu, když se nainstalují dodatečně. Zbytek té práce - odkud addony pocházejí a co zkontrolovat, než spustíš cizí Lua jako kořen smyčky své hry - pokrývá udržování modovaného serveru v pořádku.
Výkon: kam mizí tick#
Většina gamemodů je v pořádku při zamýšleném počtu hráčů a nad ním se rozpadne, protože smyčka v Lue, která běží pro každého hráče, je při dvanácti levná a při čtyřiceti drahá. Pokud server táhne jen tehdy, když se zaplní, hledej nejdřív v seznamu addonů, ne v tarifu.
Krátké pořadí diagnostiky, které funguje:
statusv konzoli - kolik je hráčů a má někdo hrozný ping, zatímco všichni ostatní jsou v pořádku.stats- fps a CPU serveru. Pokud je fps na úrovni tick rate a sloupec CPU je nízký, server problém není.- Sleduj v konzoli chyby Lua. Jediný addon, který chybuje uvnitř hooku
Think, spouští svou obsluhu chyb třiatřicetkrát za sekundu na hráče. Chyby uvádějí cestu k addonu; to je obvykle celé vyšetřování. Víc o tom, co si nechat a co ignorovat, je v článku čtení konzole. - Na testovacím serveru odeber polovinu kolekce a změř znovu. Půlení seznamu addonů je nezáživné a je to jediná metoda, která viníka spolehlivě najde.
Dvě strukturální věci pomáhají víc než ladění. Drž limity props a entit tak nízko, aby hráči nemohli server omylem udělat nehratelným - sbox_maxprops plus časovač úklidu po odpojení je skoro vše. A restartuj podle plánu. Servery Garry's Mod za dny nahromadí entity, časovače a paměť; noční restart, když nikdo není online, nestojí nic a drží časy snímků plynulé. Interval popisuje restartovací plány, které pomáhají a spouští ho záložka Schedules v panelu pomocí výrazu cron.
Prázdný server mimochodem nedělá skoro nic: srcds přechází do hibernace, když odejde poslední hráč, takže nečinný server Garry's Mod je na grafu CPU sotva vidět. Pokud ten tvůj vidět je, něco v seznamu addonů spouští časovač, ať je někdo online, nebo ne, a stojí za to to najít.
Řešení problémů#
Server naběhne, ale nemá žádné moje addony. Chybějící nebo neplatný -authkey, nebo kolekce není veřejná. Zkontroluj v logu startu řádky o stahování z Workshopu.
Hráči se objeví s modely `ERROR` a šachovnicovými texturami. Na klientovi chybí obsah. Addony z Workshopu potřebují resource.AddWorkshop; starší obsah potřebuje FastDL; obsah CS:S vyžaduje, aby hráč CS:S vlastnil.
Všichni dvě minuty stahují a polovina odejde. Chybí sv_downloadurl, takže se soubory pomalu sypou přes herní port. Nastav FastDL.
Server padá s chybou nedostatku paměti, zatímco paměť vypadá volná. Je to 32bitový adresní prostor, ne tvůj tarif. Zmenši kolekci nebo přejdi na větev x86-64.
Odpojení s „Reliable channel overflowed“. Některý addon posílá klientům najednou příliš mnoho dat, obvykle při spawnu. Najdeš ho odebíráním addonů; konzole klienta jmenuje poslední věc, kterou přijal.
Binární modul po aktualizaci přestal fungovat. Moduly v garrysmod/lua/bin/ se kompilují pro platformu a větev. Přechod na 64 bitů nebo aktualizace Garry's Mod, která změní runtime, vyžaduje odpovídající build každého modulu. Obecný případ popisuje co dělat, když aktualizace modu něco rozbije.
Po změně mapy přestane fungovat polovina addonů. Některé addony se inicializují jen v určitých gamemodech a některé se přou. Konzole vypíše chybu Lua při načtení mapy; čti první chybu, ne stou.
FAQ#
Kolik RAM potřebuje server Garry's Mod?
1-2 GB pro sandbox s malou kolekcí, 2-3 GB pro kolové gamemody a 4-6 GB pro DarkRP nebo velkou kolekci z Workshopu. Paměť určuje kolekce mnohem víc než počet hráčů a 32bitová binárka stejně nevyužije výrazně víc než 3-4 GB.
Musí hráči vlastnit addony z mého serveru?
Ne. Addony z Workshopu uvedené přes resource.AddWorkshop si klient stáhne automaticky. Vlastnit možná musí jinou hru od Valve, jejíž obsah mapa používá - nejčastěji Counter-Strike: Source - a žádné nastavení na serveru jim ho nedodá.
Proč se můj server nezobrazuje v prohlížeči serverů?
V pořadí pravděpodobnosti: dotazovací port není dosažitelný, není nastaven Game Server Login Token, sv_lan je 1, nebo je prohlížeč prostě pomalý. Vyzkoušej connect <ip>:27015 z konzole klienta; pokud to funguje, nefunguje jen zápis v seznamu.
Mám spustit 64bitovou větev?
Pokud je tvá kolekce dost velká na to, aby shodila 32bitový server, ano. Jinak je to kompromis: víc paměti navíc proti nutnosti hledat 64bitové buildy každého binárního modulu, na kterém závisíš.
Vyplatí se platit za vyšší tick rate?
Zřídka. Přechod z 33 na 66 stojí zhruba dvojnásobek CPU na hráče a pomůže jen v gamemodech, kde záleží na přesnosti střelby. Server, který už zaostává v čase snímku, se tím zhorší, ne zlepší.
Jak zabráním lidem spawnovat tisíc props?
Sniž sbox_maxprops a související limity sbox_max*, nech sv_allowcslua na 0 a nainstaluj admin mód s příkazem pro úklid dřív, než server otevřeš cizím lidem. Limity nastavené po první události jsou útěcha, ne prevence.




Komentáře
Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.