Server Counter-Strike 2 se nastavuje na třech místech a většina zmatků vzniká z toho, že lidé nevědí, které z nich má poslední slovo. Spouštěcí řádek obsahuje věci, které engine potřebuje dřív, než cokoli načte - port, token, tickrate. Soubor game/csgo/cfg/server.cfg drží identitu serveru a síťová nastavení. A konfigurace herního režimu, která se při každém načtení mapy spouští po server.cfg, drží pravidla kol a přepíše všechno, co s ní sdílíš v server.cfg. Ta poslední věta je odpověď na otázku „proč se mi pořád resetuje mp_maxrounds“.
Tenhle článek je přehled všech tří míst: spouštěcí parametry, které se vyplatí používat, cvary, které mění něco, co je znát, a příkazy, které spouštíš za běhu přes RCON. Počítá s tím, že už server i token máš - jak se k tomu dostat, popisuje nastavení serveru Counter-Strike 2.
Co server čte a v jakém pořadí#
Dedikovaný server CS2 pochází ze Steam aplikace 730, tedy ze stejného app id jako hra, a instaluje se do stromu, jehož zajímavé části leží pod game/csgo/:
game/ bin/linuxsteamrt64/cs2 the server binary csgo/ cfg/ server.cfg execed on every map load gamemode_competitive.cfg Valve's mode defaults gamemode_competitive_server.cfg your overrides gamemode_casual.cfg gamemode_deathmatch.cfg addons/ Metamod and plugins, if you add them maps/ installed and workshop maps gamemodes_server.txt map groups and per-mode convarsPraktické pravidlo, které z toho plyne: všechno, co začíná na mp_, patří do gamemode_<režim>_server.cfg, a všechno, co začíná na sv_, hostname, rcon_password nebo tv_, patří do server.cfg. Soubory _server se nedodávají - vytváříš je sám - a jsou podporovaným místem pro přepsání, proto přežijí aktualizaci hry, která přepíše vlastní konfigurace od Valve.
Spouštěcí řádek#
Na vlastním Linuxovém stroji vypadá instalace a start takhle:
$ steamcmd +force_install_dir /home/cs2/server +login anonymous \ +app_update 730 validate +quit$ cd /home/cs2/server$ ./game/bin/linuxsteamrt64/cs2 -dedicated -usercon \ -port 27015 -maxplayers_override 12 -tickrate 128 \ +game_alias competitive +map de_dust2 \ +sv_setsteamaccount YOUR_GSLT_TOKENU hostingu s panelem tohle nikdy nepíšeš; stejné hodnoty najdeš jako pole na záložce Startup a panel řádek sestaví sám. Tak či tak jsou důležité tyto parametry:
| Parametr | Co dělá |
|---|---|
-dedicated | Spustí server bez grafiky. Bez něj spouštíš hru |
-usercon | Zapne RCON. Bez tohoto nebude RCON fungovat, ať nastavíš jakékoli heslo |
-port 27015 | Herní port (UDP) a port RCON (TCP) |
-maxplayers_override 12 | Počet slotů. Přebije, co chce režim |
-tickrate 128 | Rychlost simulace. Výchozí je 64 |
-insecure | Vypne VAC. Jen pro uzavřený testovací server |
+game_alias competitive | Nastaví režim ještě před načtením první mapy |
+map de_dust2 | První mapa. Bez ní server jen čeká |
+sv_setsteamaccount | Tvůj Game Server Login Token |
+exec autoexec.cfg | Jednou při startu spustí konfiguraci, před jakoukoli mapou |
U tokenu se lidé mýlí nejčastěji. sv_setsteamaccount musí být na spouštěcím řádku, ne v server.cfg, protože se server přihlašuje do Steamu dřív, než načte mapu, a tedy dřív, než přečte jakoukoli konfiguraci. Když ho nastavíš na obou místech, budou si odporovat. Valve vydává token Steam účtu, který hru vlastní, jeden na server, a patří tobě, ne tvému hostingu - vysvětlení Steam tokenů pro herní servery popisuje, jak ho vytvořit pro app 730 a za co dostane token ban. Bez tokenu server stále běží a přijímá přímá připojení; jen se nezobrazí ve veřejném prohlížeči serverů.
Herní režimy a skupina map#
CS2 si ponechalo schéma ze CS:GO se dvěma celými čísly. game_type vybírá rodinu, game_mode vybírá variantu uvnitř ní a game_alias nastaví obojí podle názvu.
| Alias | game_type | game_mode | Režim |
|---|---|---|---|
casual | 0 | 0 | Casual |
competitive | 0 | 1 | Competitive, MR12 |
wingman | 0 | 2 | Wingman, 2v2 |
armsrace | 1 | 0 | Arms Race |
demolition | 1 | 1 | Demolition |
deathmatch | 1 | 2 | Deathmatch |
custom | 2 | 0 | Custom, pro režimy řízené pluginy |
Nastavit alias na spouštěcím řádku je spolehlivá cesta, protože změna game_type nebo game_mode za běhu se projeví až po změně mapy a napůl použité režimy způsobují ty nejpodivnější chyby, jaké kdy budeš ladit. Pokud provozuješ plugin s vlastními pravidly - retakes, deathmatch plugin, arénový režim - je custom rodina, která mu nechává herní pravidla na pokoji.
Rotace map má dvě vrstvy. Vrstva enginu je mapcycle.txt v game/csgo/, jeden název mapy na řádek, načítaný přes cvar mapcyclefile, plus changelevel <mapa> pro okamžitou změnu a mp_match_end_changelevel 1 pro přechod po skončení zápasu. Vrstva Valve nad ní je gamemodes_server.txt, soubor KeyValues, který vytvoříš ze gamemodes_server.txt.example ležícího vedle; definuje skupiny map a umožňuje nastavit cvary pro jednotlivé herní režimy na jednom místě. Komunitní servery s hlasováním obvykle obojí ignorují a nechají řízení na pluginu, což popisuje pluginy pro CS2 s Metamod a CounterStrikeSharp.
Mapy z Workshopu se načítají podle id, ne podle názvu:
host_workshop_map 3070596702ds_workshop_changelevel de_cachePrvní příkaz stáhne a načte jednu workshopovou mapu. Načtení celé kolekce v různých fázích života CS2 vyžadovalo klíč Steam Web API a požadavek se několikrát změnil, takže si před stavbou rotace na ní ověř aktuální chování. Server s jedinou mapou se to netýká.
Boti vyplní režim, který by jinak byl jeden člověk stojící na spawnu. bot_quota 8 s bot_quota_mode fill drží na serveru dohromady osm hráčů a boty odebírá, jak přicházejí lidé; bot_quota_mode normal přidá osm botů bez ohledu na lidi. bot_difficulty bere hodnoty 0 až 3, bot_kick odstraní všechny a bot_stop 1 je zmrazí pro trénink. Boti na komunitním serveru jsou otázka prezentace, ne techniky: záznam v prohlížeči s 2/10 hráči se přeskočí, ten s 8/10 se rozklikne a lidé, kteří se připojí, najdou boty. Rozhodni se, jaký kompromis chceš, dřív, než to udělá někdo jiný.
server.cfg: nastavení, která stojí za to nastavit#
Tady je server.cfg bez jediné ozdoby:
hostname "Longship 5v5 // EU"rcon_password "a-long-random-string"sv_password ""sv_lan 0sv_region 3// Networksv_maxrate 0sv_minrate 196608sv_hibernate_when_empty 1sv_hibernate_postgame_delay 30// Voice and chatsv_full_alltalk 0sv_deadtalk 1// Safetysv_cheats 0sv_allow_votes 1mp_endmatch_votenextmap 1// Logginglog onsv_logfile 1sv_logecho 1sv_logbans 1// GOTVtv_enable 1tv_port 27020tv_autorecord 1tv_delay 0| Cvar | Poznámky |
|---|---|
hostname | Název v prohlížeči. Dej do něj region, lidé podle něj filtrují |
rcon_password | Dlouhé a náhodné. Prázdné heslo znamená, že RCON je vypnutý, ne otevřený |
sv_password | Neprázdné heslo udělá ze serveru soukromý |
sv_lan 0 | 1 přeskočí autentizaci přes Steam. Soukromý server, ne skrytý |
sv_region | Region v prohlížeči: 0 východ USA, 3 Evropa, 4 Asie, 255 celý svět |
sv_minrate | Spodní hranice šířky pásma klienta. Zabrání škrcenému klientovi, aby si ublížil |
sv_hibernate_when_empty | Sníží využití CPU na nulu, když na serveru nikdo není |
sv_full_alltalk | Všichni slyší všechny, oba týmy, živí i mrtví |
sv_visiblemaxplayers | Zobrazí nižší počet slotů, než máš, pro rezervovaná místa |
sv_cheats | Pro tréninkové příkazy musí být 1. Nikdy na veřejném serveru |
sv_hibernate_when_empty 1 si zaslouží vlastní odstavec. Nečinný server CS2 se zapnutou hibernací spotřebuje téměř nulový výkon CPU, což se hodí, když tarif kupuje podíl na jádru, ne celé jádro. Cena je, že se GOTV při hibernaci odpojí a každý plugin, který pracuje na časovači, se zastaví, takže zápasový server nahrávající demo mezi koly ji chce vypnutou a komunitní server zapnutou.
Hlasové cvary se mezi CS:GO a CS2 přeorganizovaly a staré sv_alltalk už není tou pákou. Pokud se řídíš návodem pro CS:GO a nějaký cvar neexistuje, konzole to řekne jasně - viz příkaz find níže.
sv_visiblemaxplayers je trik s rezervovaným slotem a stojí za to ho znát, protože nepotřebuje žádný plugin. Kup dvanáct slotů, nastav sv_visiblemaxplayers 11 a prohlížeč ukáže server jako plný při jedenácti hráčích, zatímco dvanáctý slot zůstane volný pro toho, koho pustíš dovnitř. Slot jen skryje; vynutit, kdo ho dostane, vyžaduje plugin, který vyhodí hráče s nejnižší prioritou. Na malém komunitním serveru samotný skrytý slot vyřeší skutečný problém, tedy admina, který se nemůže připojit na vlastní plný server, aby někoho řešil.
Cvary pro kola, peníze a zápas#
Tohle jsou cvary mp_, takže patří do gamemode_competitive_server.cfg (nebo do souboru podle toho, jaký režim provozuješ). Hodnoty níže odpovídají běžnému competitive nastavení.
mp_maxrounds 24mp_overtime_enable 1mp_overtime_maxrounds 6mp_overtime_startmoney 12500mp_halftime 1mp_match_can_clinch 1mp_maxmoney 16000mp_startmoney 800mp_afterroundmoney 0mp_freezetime 15mp_roundtime 1.92mp_roundtime_defuse 1.92mp_roundtime_hostage 1.92mp_buytime 20mp_buy_anywhere 0mp_friendlyfire 1mp_solid_teammates 1mp_death_drop_gun 1mp_death_drop_grenade 2mp_autoteambalance 0mp_limitteams 0mp_warmuptime 60mp_warmup_pausetimer 0mp_timelimit 0| Cvar | Význam |
|---|---|
mp_maxrounds | Počet kol v základní hrací době. 24 je MR12, competitive délka CS2 |
mp_overtime_maxrounds | Počet kol v prodloužení. 6 je MR3 |
mp_halftime | Výměna stran v poločase. Vypnuto udělá jednostranný zápas |
mp_match_can_clinch | Ukončí zápas, jakmile je skóre nedosažitelné |
mp_roundtime_defuse | Délka kola v minutách. 1.92 je 1:55 |
mp_freezetime | Čas na nákup a komunikaci před začátkem kola |
mp_buytime | Počet sekund, po které zůstane nákupní menu otevřené po freezetime |
mp_maxmoney | Strop peněz. 16000 je hodnota pro competitive |
mp_death_drop_gun | 0 nic, 1 nejlepší zbraň, 2 aktuální zbraň |
mp_free_armor | 0 žádná, 1 kevlar, 2 kevlar a helma, zdarma každé kolo |
mp_autoteambalance | Pro jakýkoli zápas vypnuto. Zapnuto pro casual servery, které se plní nerovnoměrně |
mp_timelimit | Minuty na mapu. 0 znamená, že rozhodují kola |
mp_roundtime je záložní hodnota a obě specifické přebíjejí typy map, které jmenují, takže nastav všechny tři, jinak dostaneš 1:55 na mapách s bombou a něco jiného na mapách s rukojmími. Warm-up se ukončuje příkazem mp_warmup_end, ne čekáním, a mp_warmup_pausetimer 1 zmrazí hodiny warm-upu napořád, což je způsob, jak zápasový server čeká, až dorazí deset lidí.
Názvy týmů pro scrim jsou mp_teamname_1 a mp_teamname_2 a mp_teamflag_1 s mp_teamflag_2 berou dvoupísmenné kódy zemí. Zobrazují se v tabulce skóre a v GOTV. Celé uspořádání zápasového serveru včetně nožového kola a práce s demy najdeš v zápasovém serveru CS2.
Tick rate a sub-tick#
Servery CS2 běží na 64 ticků, pokud nepředáš -tickrate 128. Co to mění, je méně než v CS:GO a stojí za to pochopit proč, než za to zaplatíš.
Source 2 opatřuje vstupy hráčů časovou značkou okamžiku, kdy nastaly, ne ticku, ve kterém dorazily, takže střelba a pohyb se vyhodnocují v sub-tick rozlišení i na serveru s 64 tiky. Hit registration, která byla celým argumentem pro 128 ticků v CS:GO, je dnes z velké části na ticku nezávislá. Na ticku je stále vázané všechno, co se simuluje po tiku: fyzika granátů, přesné snímky jump-throwu a rozlišení čehokoli, co plugin dělá v obsluze ticku. Server se 128 tiky také vyrábí citelně těžší dema z GOTV.
Cena je zhruba dvojnásobný výkon CPU na hráče. U tarifu, který kupuje pevný podíl jádra, je to skutečné omezení, ne abstrakce, a server se 128 tiky na hranici svého CPU je horší než server na 64 ticích, který hranici nikdy nedosáhne. Co tick rate doopravdy znamená prochází měření; stručná verze pro CS2 je provozovat 64 pro komunitní server a 128 jen pro competitive server, kde se lidé budou hádat o jump-throwy.
Cvary pro rate jsou jednodušší než dřív. sv_minrate a sv_maxrate omezují bajty za sekundu na klienta, přičemž 0 znamená bez maxima, a dvojice sv_maxcmdrate a sv_maxupdaterate z CS:GO už neplatí tak, jak popisují staré návody. Rate nech na pokoji, pokud jsi nezměřil problém. Zhruba 60 až 120 KB/s na hráče je pro CS2 normální.
RCON, kicky a bany#
RCON běží přes TCP na herním portu, potřebuje -usercon na spouštěcím řádku a neprázdné rcon_password. Z konzole klienta:
rcon_address 203.0.113.10:27015rcon_password a-long-random-stringrcon statusKonzole v panelu je bezpečnější cesta, protože se ověřuje tvým účtem v panelu místo hesla, které putuje s každým příkazem, a nepotřebuje vůbec vystavený port. RCON přes internet je protokol v čistém textu - bezpečné používání RCON je krátké a ty dvě minuty stojí za to.
| Příkaz | Co dělá |
|---|---|
status | Hráči, jejich user id, Steam id, ping a aktuální mapa |
users | Kratší seznam hráčů |
kick <jméno> | Odstraní hráče podle jména |
kickid <userid> <důvod> | Odstraní podle id, které vypsal status. Spolehlivé i u divných jmen |
banid <minuty> <userid> | Ban. 0 minut je trvalý |
banip <minuty> <ip> | Ban podle adresy |
writeid | Uloží bany podle id do banned_user.cfg |
writeip | Uloží bany podle adresy do banned_ip.cfg |
removeid / removeip | Zruší jeden záznam |
changelevel <mapa> | Změní mapu a nechá hráče připojené |
mp_restartgame 1 | Restartuje hru za jednu sekundu |
mp_warmup_end | Ukončí warm-up hned |
mp_pause_match / mp_unpause_match | Zmrazí a obnoví hru |
exec <soubor> | Spustí konfiguraci z game/csgo/cfg/ |
say <text> | Promluví v chatu jako server |
Bany v enginu jsou chabé: ukládají se do prostého souboru, potřebují writeid, jinak po restartu zmizí, a nenesou žádný důvod, žádnou čitelnou expiraci ani sdílený seznam mezi servery. Na cokoli víc než vyhození jednoho člověka je odpovědí plugin s databází, a to je hlavní důvod, proč komunitní servery CS2 vůbec instalují CounterStrikeSharp.
Logování a hledání cvaru, na který si matně vzpomínáš#
log on spolu se sv_logfile 1 zapisuje do game/csgo/logs/, jeden soubor na relaci, s připojeními, zabitími, chatem a akcemi adminů. sv_logecho 1 to zrcadlí do konzole, což chceš na panelu, kde je konzole to, na co se opravdu díváš. sv_logbans 1 zapisuje bany do stejného proudu, takže za šest týdnů odpovíš na otázku „kdo je zabanoval a kdy“.
CS2 dodává přeposílání logů přes HTTP pomocí logaddress_add_http "http://10.0.0.5:8080/", což není UDP logaddress_add z CS:GO, které očekávají starší statistické nástroje. Pokud zapojuješ externí statistickou službu, zjisti dřív, kterému z obou rozumí, než strávíš večer pravidlem na firewallu.
Dva příkazy konzole ušetří víc času než jakýkoli návod:
find alltalkhelp mp_maxroundsfind <text> vypíše každý cvar a příkaz, jehož název nebo nápověda obsahuje daný text, s aktuální hodnotou. help <cvar> vypíše popis a výchozí hodnotu. Díky nim vyřešíš za pět sekund jakoukoli otázku „existuje tenhle cvar v CS2 ještě“, což je důležité, protože velká část rad k CS2 na internetu jsou rady ke CS:GO s přepsanými čísly. Čtení konzole popisuje, co dalšího stojí za sledování v jejím výstupu.
Řešení potíží#
Server se nezobrazuje v prohlížeči. Téměř vždy je to token: chybí sv_setsteamaccount, token byl zrušen, nebo je tentýž token na dvou serverech. Zkontroluj ve startovním logu řádky o přihlášení do Steamu. Když funguje přímé připojení, ale záznam v prohlížeči ne, je to typický příznak problému s tokenem, ne se sítí.
RCON odmítá heslo. Ověř, že je na spouštěcím řádku -usercon. Bez něj server nikdy neotevře naslouchání RCON a každé heslo je špatně. Pak ověř, že mířiš na herní port přes TCP - stejné číslo jako herní port UDP.
Cvar se po každém kole nebo mapě vrací. Resetuje ho konfigurace herního režimu. Přesuň ho do gamemode_<režim>_server.cfg.
`mp_maxrounds` nemá žádný účinek. Buď je mp_timelimit nenulový a mapu ukončí dřív, nebo režim není competitive. Zkontroluj game_type a game_mode pomocí status a find game_mode.
Hráči se připojí a hned odpadnou. Zkontroluj, že sv_lan je 0, a podívej se do logu na chyby VAC nebo autentizace přes Steam. Server spuštěný s -insecure neautentizuje klienty normálně.
Konzole je plná „unknown command“. Konfigurace ze CS:GO na serveru CS2. Projdi ji pomocí find; zhruba každý desátý cvar změnil název nebo zmizel.
Vysoké CPU, když na serveru nikdo není. sv_hibernate_when_empty je 0, nebo server drží vzhůru plugin. Sleduj graf CPU přes období bez hráčů, místo abys hádal.
FAQ#
Kde je server.cfg na serveru CS2?
V game/csgo/cfg/server.cfg, uvnitř instalačního adresáře. Všimni si zdvojené cesty: strom CS2 má složku game a složka módu uvnitř se pořád jmenuje csgo. Spouští se při každém načtení mapy, takže změna konfigurace se projeví na další mapě bez restartu.
Proč můj server CS2 resetuje nastavení mp_?
Protože konfigurace herního režimu běží po server.cfg a nastavuje stejné cvary. Hodnoty mp_ dej do game/csgo/cfg/gamemode_competitive_server.cfg - varianta _server je podporovaný soubor pro přepsání od Valve a přežije aktualizace.
Vyplatí se 128 ticků v CS2?
Pro competitive server, kde lidé trénují lineupy granátů, ano. Pro komunitní server ne. Sub-tick časování vstupů odstranilo většinu argumentu pro hit registration a 128 ticků stojí zhruba dvojnásobek CPU na hráče.
Potřebuji GSLT pro soukromý server CS2?
Jen pro veřejný prohlížeč. Bez tokenu server běží a přátelé se připojí podle adresy, což pro soukromou skupinu stačí. S tokenem je server vypsaný, a token musí být tvůj a používat se vždy jen na jednom serveru.
Jak udělám z jednoho hráče admina?
V CS2 neexistuje v enginu pojem admina kromě hesla RCON. Dát někomu omezená práva - kick, změna mapy, ztlumení - znamená nainstalovat Metamod:Source a pluginový framework, který má soubor adminů s příznaky pro jednotlivé hráče.
Kolik hráčů unese server CS2?
Až 64 s -maxplayers_override, ale praktická odpověď závisí na režimu. Competitive má 10, Wingman 4, casual 10 až 20 a deathmatch 16 až 24. Nad zhruba 24 přestávají dávat smysl dohromady cena CPU na hráče a velikosti map.




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.