Tvůj CS2 server běží v pohodě, pak se změní mapa a všechny to vyhodí: server spadl. Pokud je zapnuté GOTV a byli připojení hráči, jde o tenhle bug. Tady je řešení a pak proč se to děje.
Řešení: jeden řádek
Přidej tohle do game/csgo/cfg/server.cfg:
bot_join_delay 15- Boti teď po každé změně mapy čekají 15 sekund, než se připojí.
- K pádu dojde, když se boti připojí ve chvíli, kdy hráč ještě načítá novou mapu. Se zpožděním se hráči načtou jako první.
- GOTV zůstává zapnuté. Dema se dál nahrávají, diváci se dál dívají.
- Aby to platilo bez restartu, pošli to přes RCON:
rcon bot_join_delay 15
V naší laborce: bez toho spadly 3 ze 6 změn mapy. S tím 0 z 18, při změnách uprostřed zápasu, na konci zápasu i při přepnutí režimu za běhu. Každý CS2 server na 2hours.gg to má v základu.
Kdy se to stává
Všechno tohle najednou:
- SourceTV (GOTV) je zapnuté:
tv_enable 1 - Je připojen aspoň jeden skutečný hráč. Server jen s boty nikdy nespadl.
- Mění se level: mapa vybraná z konzole, changelevel nebo map, konec zápasu nebo hlasování na konci zápasu.
Je to náhodné. V našich testech spadla zhruba polovina změn mapy a na živých serverech se to stávalo častěji se 3 a více připojenými hráči. Server, který přežil jednu změnu, může spadnout při další.
Jak to vypadá: všichni hráči během načítání mapy najednou vypadnou a log serveru končí chybou segmentace (SIGSEGV), místo aby začala nová mapa.
Rozdíly mezi režimy
Config od Valve pro každý režim určuje, kolik botů se připojí při každém načtení mapy. Víc připojujících se botů znamená víc šancí na pád:
- Deathmatch, Team Deathmatch, Casual: při každém načtení se připojí až 10 botů. Nejvíc ohrožené, a tady jsme viděli nejvíc pádů.
- Competitive: 1 bot. V naší laborce bez opravy nespadl, ale živé servery s více hráči ano.
- Řešení je ve všech režimech stejné: bot_join_delay je jedno nastavení, které platí pro každou změnu mapy, ať ji spustilo cokoli.
Skutečný bug (pro zvědavé)
Je to bug v enginu od Valve, ne v pluginu. Padalo to i s odebraným Metamod a CounterStrikeSharp. Hlásí se od roku 2024 jako ValveSoftware/csgo-osx-linux#3831. Sleduj ho tam: doufáme, že ho Valve brzy opraví a tohle obejití už nebude potřeba.
Co jsme našli debuggerem:
- Při změně mapy se SourceTV vypne a odpojí připojeného hráče s důvodem "SourceTV stopped" (HLTVSTOP), i když je to normální hráč, ne divák GOTV.
- Tomu napůl odpojenému hráči zůstane prázdný interní objekt. Na čistém serveru na něm engine hned spadne (libengine2.so).
- Pokud tenhle krok přežije, herní kód spadne o sekundu později, když se boti připojí na novou mapu (libserver.so). Právě tomu brání bot_join_delay, a byly to všechny pády, které jsme viděli na serverech s CounterStrikeSharp.
- Na čistém serveru bez Metamod jsme viděli i první pád, ten v enginu. Proti němu jsme bot_join_delay zatím netestovali.
Co nefunguje
tv_enable 0během hry: vyhodí všechny hráče najednou.- GOTV vypnuté od startu: žádný pád, ale ani dema a sledování.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: pořád padá. Zastavit demo nestačí: padalo to i bez jakéhokoli nahrávaného dema.bot_quota 0v _server.cfg režimu: spouští se i při každém restartu zápasu a může vyhodit samotné SourceTV, takže GOTV přestane nahrávat uprostřed mapy.mapmísto changelevel: stejný pád.
Kompletní nastavení pro vlastní server
Co používáme na každém serveru, v server.cfg:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Nech to v server.cfg, ne jen v jednorázovém příkazu přes RCON, aby to po restartu zůstalo.
- 15 sekund je hodnota, kterou jsme testovali. Hráči s pomalým připojením nebo na velkých Workshop mapách se načítají déle, takže vyšší hodnota je bezpečnější a znamená jen, že boti dorazí o chvilku později.
- Jestli je to aktivní, ověříš v konzoli serveru nebo přes RCON:
bot_join_delay - Hrajete bez botů? Stejně to nech: režimy jako Deathmatch a Casual ve výchozím stavu přidávají boty při každém načtení mapy.
Nebo nastavování přeskoč: každý CS2 server na 2hours.gg už řešení má, se zapnutým GOTV a demy.