Il tuo server CS2 funziona bene, poi la mappa cambia e vengono espulsi tutti: il server è crashato. Se GOTV è attivo e c'erano giocatori connessi, è questo bug. Ecco la soluzione, poi il perché.
La soluzione: una riga
Aggiungi questo a game/csgo/cfg/server.cfg:
bot_join_delay 15- Ora i bot aspettano 15 secondi dopo ogni cambio mappa prima di entrare.
- Il crash avviene quando i bot entrano mentre un giocatore sta ancora caricando la nuova mappa. Con il ritardo, i giocatori caricano per primi.
- GOTV resta attivo. Le demo continuano a registrare, gli spettatori continuano a guardare.
- Per applicarla senza riavviare, inviala via RCON:
rcon bot_join_delay 15
Nel nostro lab: senza, 3 cambi mappa su 6 sono crashati. Con la riga, 0 su 18, tra cambi a metà partita, a fine partita e cambi di modalità dal vivo. Ogni server CS2 di 2hours.gg la include.
Quando succede
Tutte queste condizioni insieme:
- SourceTV (GOTV) è attivo:
tv_enable 1 - C'è almeno un giocatore vero connesso. Un server con soli bot non è mai crashato.
- Il livello cambia: una mappa scelta dalla console, changelevel o map, la fine di una partita o il voto di fine partita.
È casuale. Nei nostri test è crashata circa la metà dei cambi mappa, e sui server in produzione succedeva più spesso con 3 o più giocatori connessi. Un server che ha superato un cambio può crashare al successivo.
Come si presenta: tutti i giocatori cadono insieme durante il caricamento della mappa, e il log del server finisce con un errore di segmentazione (SIGSEGV) invece dell'avvio della nuova mappa.
Differenze tra le modalità
La config Valve di ogni modalità stabilisce quanti bot entrano a ogni caricamento di mappa. Più bot che entrano significa più probabilità di crash:
- Deathmatch, Team Deathmatch, Casual: fino a 10 bot entrano a ogni caricamento. Le più esposte, e quelle dove abbiamo visto più crash.
- Competitive: 1 bot. Nel nostro lab non è crashata senza la soluzione, ma i server in produzione con più giocatori sì.
- La soluzione è la stessa in ogni modalità: bot_join_delay è un'unica impostazione che vale per ogni cambio mappa, qualunque cosa lo abbia avviato.
Il vero bug (per i curiosi)
È un bug del motore di Valve, non di un plugin. È crashato anche senza Metamod e CounterStrikeSharp. È segnalato dal 2024 come ValveSoftware/csgo-osx-linux#3831. Seguilo lì: speriamo che Valve lo risolva presto e che questo workaround diventi inutile.
Cosa abbiamo trovato con un debugger:
- Al cambio mappa, SourceTV si spegne e disconnette il giocatore connesso con il motivo "SourceTV stopped" (HLTVSTOP), anche se è un giocatore normale e non uno spettatore GOTV.
- Quel giocatore mezzo disconnesso resta con un oggetto interno vuoto. Su un server senza plugin, il motore crasha subito su di esso (libengine2.so).
- Se quel passaggio regge, il codice del gioco crasha un secondo dopo, quando i bot entrano nella nuova mappa (libserver.so). È quello che bot_join_delay evita, ed era ogni crash che abbiamo visto sui server CounterStrikeSharp.
- Su un server senza Metamod abbiamo visto anche il primo crash, lato motore. Non abbiamo ancora testato bot_join_delay contro quello.
Cosa non funziona
tv_enable 0durante una partita: fa cadere tutti i giocatori insieme.- GOTV spento dall'avvio: niente crash, ma niente demo e niente modalità spettatore.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: crashano comunque. Fermare la demo non basta: è crashato senza alcuna demo in registrazione.bot_quota 0nel _server.cfg di una modalità: viene eseguito anche a ogni riavvio della partita e può espellere SourceTV stesso, così GOTV smette di registrare a metà mappa.mapinvece di changelevel: stesso crash.
Una configurazione completa per il tuo server
Cosa usiamo su ogni server, in server.cfg:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Tienilo in server.cfg, non solo in un comando RCON una tantum, così resta dopo un riavvio.
- 15 secondi è il valore che abbiamo testato. I giocatori con connessioni lente o su grandi mappe del Workshop impiegano di più a caricare, quindi un valore più alto è più sicuro e fa solo arrivare i bot un po' più tardi.
- Per verificare che sia attivo, scrivi nella console del server o via RCON:
bot_join_delay - Giochi senza bot? Tienilo comunque: modalità come Deathmatch e Casual aggiungono bot a ogni caricamento di mappa per impostazione predefinita.
Oppure salta la configurazione: ogni server CS2 su 2hours.gg ha già la soluzione, con GOTV e demo attivi.