Seu servidor CS2 roda bem, aí o mapa muda e todo mundo é expulso: o servidor crashou. Se o GOTV está ligado e havia jogadores conectados, é esse bug. Aqui está a solução e depois o motivo.
A solução: uma linha
Adicione isto em game/csgo/cfg/server.cfg:
bot_join_delay 15- Agora os bots esperam 15 segundos depois de cada troca de mapa antes de entrar.
- O crash acontece quando bots entram enquanto um jogador ainda está carregando o novo mapa. Com o atraso, os jogadores carregam primeiro.
- O GOTV continua ligado. As demos continuam gravando, os espectadores continuam assistindo.
- Para aplicar sem reiniciar, envie pelo RCON:
rcon bot_join_delay 15
No nosso lab: sem ela, 3 de 6 trocas de mapa crasharam. Com ela, 0 de 18 crasharam, entre trocas no meio da partida, trocas no fim da partida e mudanças de modo ao vivo. Todo servidor CS2 do 2hours.gg já vem com ela.
Quando acontece
Tudo isto ao mesmo tempo:
- SourceTV (GOTV) está ativado:
tv_enable 1 - Pelo menos um jogador de verdade está conectado. Um servidor só com bots nunca crashou.
- O nível muda: um mapa escolhido pelo console, changelevel ou map, o fim de uma partida ou a votação do fim da partida.
É aleatório. Nos nossos testes cerca de metade das trocas de mapa crasharam, e em servidores ao vivo aconteceu com mais frequência com 3 ou mais jogadores conectados. Um servidor que sobreviveu a uma troca pode crashar na próxima.
Como aparece: todos os jogadores caem ao mesmo tempo durante o carregamento do mapa, e o log do servidor termina com uma falha de segmentação (SIGSEGV) em vez de o novo mapa começar.
Diferenças entre os modos
O config da Valve de cada modo define quantos bots entram a cada carregamento de mapa. Mais bots entrando significa mais chances de crash:
- Deathmatch, Team Deathmatch, Casual: até 10 bots entram a cada carregamento. São os mais expostos, e onde vimos mais crashes.
- Competitive: 1 bot. No nosso lab não crashou sem a solução, mas servidores ao vivo com mais jogadores crasharam.
- A solução é a mesma em todos os modos: bot_join_delay é uma configuração que vale para toda troca de mapa, seja qual for a causa.
O bug de verdade (para os curiosos)
É um bug da engine da Valve, não de um plugin. Crashou com Metamod e CounterStrikeSharp removidos. Ele é reportado desde 2024 como ValveSoftware/csgo-osx-linux#3831. Acompanhe lá: esperamos que a Valve corrija logo e que esta solução alternativa deixe de ser necessária.
O que encontramos com um debugger:
- Quando o mapa muda, o SourceTV desliga e desconecta o jogador conectado com o motivo "SourceTV stopped" (HLTVSTOP), mesmo sendo um jogador normal e não um espectador do GOTV.
- Esse jogador meio desconectado fica com um objeto interno vazio. Em um servidor puro a engine crasha nele na hora (libengine2.so).
- Se essa etapa sobrevive, o código do jogo crasha um segundo depois, quando os bots entram no novo mapa (libserver.so). É esse que o bot_join_delay evita, e foram todos os crashes que vimos em servidores com CounterStrikeSharp.
- Em um servidor puro sem Metamod também vimos o primeiro crash, o da engine. Ainda não testamos o bot_join_delay contra esse.
O que não funciona
tv_enable 0durante o jogo: derruba todos os jogadores de uma vez.- GOTV desligado desde o boot: sem crash, mas sem demos e sem espectadores.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: continuam crashando. Parar a demo não basta: crashou sem nenhuma demo gravando.bot_quota 0no _server.cfg de um modo: ele também roda a cada restart de partida e pode expulsar o próprio SourceTV, então o GOTV para de gravar no meio do mapa.mapem vez de changelevel: mesmo crash.
Uma configuração completa para o seu próprio servidor
O que rodamos em todo servidor, no server.cfg:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Deixe no server.cfg, não só em um comando RCON avulso, para que volte depois de um restart.
- 15 segundos é o que testamos. Jogadores com conexão lenta ou mapas grandes da Workshop demoram mais para carregar, então um valor maior é mais seguro e só faz os bots chegarem um pouco mais tarde.
- Para conferir se está ativo, digite no console do servidor ou no RCON:
bot_join_delay - Joga sem bots? Mantenha mesmo assim: modos como Deathmatch e Casual adicionam bots a cada carregamento de mapa por padrão.
Ou pule a configuração: todo servidor CS2 no 2hours.gg já tem a solução, com GOTV e demos ligados.
Implante um servidor CS2 por hora