Server di gioco a ore. Paghi solo quando giochi.

Il server CS2 crasha al cambio mappa (GOTV attivo): la soluzione in una riga

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 0 durante 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 0 nel _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.
  • map invece 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.

Avvia un server CS2 a ore

Vedi anche

← Torna a tutte le guide