Serverul tău CS2 merge bine, apoi harta se schimbă și toată lumea e dată afară: serverul a dat crash. Dacă GOTV e pornit și erau jucători conectați, e acest bug. Iată soluția, apoi de ce se întâmplă.
Soluția: o singură linie
Adaugă asta în game/csgo/cfg/server.cfg:
bot_join_delay 15- Acum boții așteaptă 15 secunde după fiecare schimbare de hartă înainte să intre.
- Crash-ul apare când boții intră în timp ce un jucător încă încarcă harta nouă. Cu această întârziere, jucătorii se încarcă primii.
- GOTV rămâne pornit. Demo-urile se înregistrează în continuare, spectatorii se uită în continuare.
- Ca s-o aplici fără restart, trimite-o prin RCON:
rcon bot_join_delay 15
În laboratorul nostru: fără ea, 3 din 6 schimbări de hartă au dat crash. Cu ea, 0 din 18, la schimbări în mijlocul meciului, la final de meci și la schimbări de mod în timpul jocului. Fiecare server CS2 de pe 2hours.gg vine cu ea.
Când se întâmplă
Toate acestea în același timp:
- SourceTV (GOTV) este activat:
tv_enable 1 - Cel puțin un jucător real este conectat. Un server doar cu boți n-a dat niciodată crash.
- Nivelul se schimbă: o hartă aleasă din consolă, changelevel sau map, finalul unui meci sau votul de la final de meci.
Este aleatoriu. În testele noastre cam jumătate din schimbările de hartă au dat crash, iar pe serverele live s-a întâmplat mai des cu 3 sau mai mulți jucători conectați. Un server care a supraviețuit unei schimbări poate da crash la următoarea.
Cum arată: toți jucătorii cad deodată în timpul încărcării hărții, iar logul serverului se termină cu o eroare de segmentare (SIGSEGV) în loc să pornească harta nouă.
Diferențe între moduri
Config-ul Valve al fiecărui mod stabilește câți boți intră la fiecare încărcare de hartă. Mai mulți boți care intră înseamnă mai multe șanse de crash:
- Deathmatch, Team Deathmatch, Casual: până la 10 boți intră la fiecare încărcare. Cele mai expuse, și unde am văzut cele mai multe crash-uri.
- Competitive: 1 bot. În laboratorul nostru n-a dat crash fără soluție, dar serverele live cu mai mulți jucători au dat.
- Soluția e aceeași în toate modurile: bot_join_delay e o singură setare care se aplică la fiecare schimbare de hartă, indiferent ce a declanșat-o.
Bug-ul real (pentru curioși)
E un bug din engine-ul Valve, nu dintr-un plugin. A dat crash și cu Metamod și CounterStrikeSharp scoase. E raportat din 2024 ca ValveSoftware/csgo-osx-linux#3831. Urmărește-l acolo: sperăm că Valve îl repară curând și că această soluție de ocolire nu va mai fi necesară.
Ce am găsit cu un debugger:
- Când harta se schimbă, SourceTV se oprește și deconectează jucătorul conectat cu motivul "SourceTV stopped" (HLTVSTOP), deși e un jucător normal, nu un spectator GOTV.
- Acel jucător pe jumătate deconectat rămâne cu un obiect intern gol. Pe un server simplu, engine-ul dă crash pe el imediat (libengine2.so).
- Dacă pasul ăsta trece, codul jocului dă crash o secundă mai târziu, când boții intră pe harta nouă (libserver.so). Pe acesta îl previne bot_join_delay, și au fost toate crash-urile pe care le-am văzut pe serverele cu CounterStrikeSharp.
- Pe un server simplu fără Metamod am văzut și primul crash, cel din engine. N-am testat încă bot_join_delay împotriva lui.
Ce nu funcționează
tv_enable 0în timpul jocului: dă afară toți jucătorii deodată.- GOTV oprit de la pornire: fără crash, dar fără demo-uri și fără spectatori.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: tot dau crash. Oprirea demo-ului nu ajunge: a dat crash fără niciun demo în înregistrare.bot_quota 0în _server.cfg al unui mod: rulează și la fiecare restart de meci și poate da afară chiar SourceTV, așa că GOTV nu mai înregistrează în mijlocul hărții.mapîn loc de changelevel: același crash.
O configurare completă pentru propriul server
Ce rulăm pe fiecare server, în server.cfg:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Ține-o în server.cfg, nu doar într-o comandă RCON de moment, ca să revină după un restart.
- 15 secunde e valoarea pe care am testat-o. Jucătorii cu conexiune lentă sau pe hărți mari din Workshop se încarcă mai greu, așa că o valoare mai mare e mai sigură și doar face boții să intre puțin mai târziu.
- Ca să verifici că e activă, scrie în consola serverului sau în RCON:
bot_join_delay - Joci fără boți? Păstreaz-o oricum: moduri ca Deathmatch și Casual adaugă boți la fiecare încărcare de hartă în mod implicit.
Sau sari peste configurare: fiecare server CS2 de pe 2hours.gg are deja soluția, cu GOTV și demo-uri pornite.