Twój serwer CS2 działa dobrze, potem zmienia się mapa i wszystkich wyrzuca: serwer się scrashował. Jeśli GOTV jest włączone i byli połączeni gracze, to ten błąd. Oto rozwiązanie, a potem przyczyna.
Rozwiązanie: jedna linijka
Dodaj to do game/csgo/cfg/server.cfg:
bot_join_delay 15- Boty czekają teraz 15 sekund po każdej zmianie mapy, zanim dołączą.
- Crash następuje, gdy boty dołączają, a gracz wciąż wczytuje nową mapę. Z opóźnieniem gracze wczytują się pierwsi.
- GOTV zostaje włączone. Dema dalej się nagrywają, widzowie dalej oglądają.
- Żeby zastosować to bez restartu, wyślij przez RCON:
rcon bot_join_delay 15
W naszym labie: bez tego 3 z 6 zmian mapy kończyły się crashem. Z tym 0 z 18, przy zmianach w trakcie meczu, na końcu meczu i przy zmianach trybu na żywo. Każdy serwer CS2 na 2hours.gg ma to od startu.
Kiedy to się dzieje
Wszystko to naraz:
- SourceTV (GOTV) jest włączone:
tv_enable 1 - Połączony jest co najmniej jeden prawdziwy gracz. Serwer z samymi botami nigdy się nie scrashował.
- Zmienia się poziom: mapa wybrana z konsoli, changelevel lub map, koniec meczu albo głosowanie na koniec meczu.
To losowe. W naszych testach mniej więcej połowa zmian mapy kończyła się crashem, a na serwerach na żywo zdarzało się częściej przy 3 lub więcej graczach. Serwer, który przetrwał jedną zmianę, może paść przy następnej.
Jak to wygląda: wszyscy gracze wypadają naraz podczas wczytywania mapy, a log serwera kończy się błędem segmentacji (SIGSEGV) zamiast startu nowej mapy.
Różnice między trybami
Config Valve każdego trybu ustala, ile botów dołącza przy każdym wczytaniu mapy. Więcej dołączających botów to większa szansa na crash:
- Deathmatch, Team Deathmatch, Casual: do 10 botów dołącza przy każdym wczytaniu. Najbardziej narażone, i tu widzieliśmy najwięcej crashy.
- Competitive: 1 bot. W naszym labie nie crashował bez poprawki, ale serwery na żywo z większą liczbą graczy tak.
- Rozwiązanie jest takie samo w każdym trybie: bot_join_delay to jedno ustawienie, które działa przy każdej zmianie mapy, niezależnie od tego, co ją wywołało.
Prawdziwy błąd (dla ciekawskich)
To błąd silnika Valve, nie pluginu. Crashował też z usuniętymi Metamod i CounterStrikeSharp. Jest zgłaszany od 2024 jako ValveSoftware/csgo-osx-linux#3831. Śledź go tam: mamy nadzieję, że Valve wkrótce go naprawi i to obejście nie będzie już potrzebne.
Co znaleźliśmy debuggerem:
- Przy zmianie mapy SourceTV się wyłącza i rozłącza połączonego gracza z powodem "SourceTV stopped" (HLTVSTOP), mimo że to zwykły gracz, a nie widz GOTV.
- Ten na wpół rozłączony gracz zostaje z pustym obiektem wewnętrznym. Na czystym serwerze silnik crashuje na nim od razu (libengine2.so).
- Jeśli ten krok przejdzie, kod gry crashuje sekundę później, gdy boty dołączają do nowej mapy (libserver.so). Właśnie temu zapobiega bot_join_delay, i to były wszystkie crashe, które widzieliśmy na serwerach z CounterStrikeSharp.
- Na czystym serwerze bez Metamod widzieliśmy też pierwszy crash, po stronie silnika. Nie testowaliśmy jeszcze bot_join_delay przeciwko niemu.
Co nie działa
tv_enable 0w trakcie gry: wyrzuca wszystkich graczy naraz.- GOTV wyłączone od startu: bez crasha, ale bez demek i bez oglądania.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: dalej crashuje. Zatrzymanie dema nie wystarczy: crashowało bez żadnego nagrywanego dema.bot_quota 0w _server.cfg trybu: uruchamia się też przy każdym restarcie meczu i może wyrzucić samo SourceTV, więc GOTV przestaje nagrywać w połowie mapy.mapzamiast changelevel: ten sam crash.
Pełna konfiguracja na własny serwer
Co mamy na każdym serwerze, w server.cfg:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Trzymaj to w server.cfg, nie tylko w jednorazowej komendzie RCON, żeby wróciło po restarcie.
- 15 sekund to wartość, którą testowaliśmy. Gracze z wolnym łączem albo na dużych mapach z Workshop wczytują się dłużej, więc wyższa wartość jest bezpieczniejsza i oznacza tylko, że boty pojawią się trochę później.
- Żeby sprawdzić, czy działa, wpisz w konsoli serwera lub w RCON:
bot_join_delay - Gracie bez botów? Zostaw to i tak: tryby takie jak Deathmatch i Casual domyślnie dodają boty przy każdym wczytaniu mapy.
Albo pomiń konfigurację: każdy serwer CS2 na 2hours.gg ma już to rozwiązanie, z włączonym GOTV i demami.