Je CS2-server draait prima, dan wisselt de map en wordt iedereen eruit gegooid: de server is gecrasht. Als GOTV aanstond en er spelers verbonden waren, is het deze bug. Hier is de oplossing, en daarna waarom het gebeurt.
De oplossing: één regel
Voeg dit toe aan game/csgo/cfg/server.cfg:
bot_join_delay 15- Bots wachten nu 15 seconden na elke mapwissel voordat ze joinen.
- De crash gebeurt als bots joinen terwijl een speler de nieuwe map nog laadt. Met de vertraging laden spelers eerst.
- GOTV blijft aan. Demo's blijven opnemen, toeschouwers blijven kijken.
- Om het zonder herstart toe te passen, stuur je het via RCON:
rcon bot_join_delay 15
In ons lab: zonder crashten 3 van de 6 mapwissels. Met de regel 0 van de 18, bij wissels midden in een match, aan het einde van een match en live moduswissels. Elke CS2-server van 2hours.gg heeft hem standaard.
Wanneer het gebeurt
Al deze dingen tegelijk:
- SourceTV (GOTV) staat aan:
tv_enable 1 - Er is minstens één echte speler verbonden. Een server met alleen bots is nooit gecrasht.
- Het level wisselt: een map gekozen in de console, changelevel of map, het einde van een match of de stemming aan het einde van de match.
Het is willekeurig. In onze tests crashte ongeveer de helft van de mapwissels, en op live servers gebeurde het vaker met 3 of meer verbonden spelers. Een server die één wissel overleefde, kan bij de volgende crashen.
Hoe het eruitziet: alle spelers vallen tegelijk weg tijdens het laden van de map, en het serverlog eindigt met een segmentation fault (SIGSEGV) in plaats van dat de nieuwe map start.
Verschillen tussen modi
De Valve-config van elke modus bepaalt hoeveel bots bij elke map load joinen. Meer bots die joinen betekent meer kans op een crash:
- Deathmatch, Team Deathmatch, Casual: tot 10 bots joinen bij elke load. Het kwetsbaarst, en waar we de meeste crashes zagen.
- Competitive: 1 bot. In ons lab crashte het niet zonder de oplossing, maar live servers met meer spelers wel.
- De oplossing is in elke modus hetzelfde: bot_join_delay is één instelling die geldt voor elke mapwissel, wat hem ook veroorzaakte.
De echte bug (voor wie het wil weten)
Het is een bug in de engine van Valve, geen plugin. Het crashte ook met Metamod en CounterStrikeSharp verwijderd. Hij is sinds 2024 gemeld als ValveSoftware/csgo-osx-linux#3831. Volg hem daar: we hopen dat Valve hem snel oplost en deze workaround overbodig wordt.
Wat we met een debugger vonden:
- Bij een mapwissel stopt SourceTV en verbreekt het de verbinding met de verbonden speler met de reden "SourceTV stopped" (HLTVSTOP), terwijl dat een normale speler is en geen GOTV-kijker.
- Die half losgekoppelde speler blijft achter met een leeg intern object. Op een kale server crasht de engine er meteen op (libengine2.so).
- Overleeft de server die stap, dan crasht de gamecode een seconde later, als bots de nieuwe map joinen (libserver.so). Dat is de crash die bot_join_delay voorkomt, en het was elke crash die we op CounterStrikeSharp-servers zagen.
- Op een kale server zonder Metamod zagen we ook de eerste crash, in de engine. bot_join_delay hebben we daar nog niet tegen getest.
Wat niet werkt
tv_enable 0tijdens een potje: gooit alle spelers tegelijk eruit.- GOTV uit vanaf de start: geen crash, maar ook geen demo's en niet meekijken.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: crashen nog steeds. De demo stoppen is niet genoeg: het crashte ook zonder dat er een demo werd opgenomen.bot_quota 0in de _server.cfg van een modus: draait ook bij elke matchherstart en kan SourceTV zelf kicken, waardoor GOTV midden op de map stopt met opnemen.mapin plaats van changelevel: dezelfde crash.
Een complete setup voor je eigen server
Dit draaien we op elke server, in server.cfg:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Houd het in server.cfg, niet alleen in een eenmalig RCON-commando, zodat het er na een herstart weer is.
- 15 seconden is wat we getest hebben. Spelers met een trage verbinding of op grote Workshop-maps laden langer, dus een hogere waarde is veiliger en betekent alleen dat bots iets later komen.
- Om te controleren of het actief is, typ je in de serverconsole of via RCON:
bot_join_delay - Speel je zonder bots? Houd het toch: modi zoals Deathmatch en Casual voegen standaard bij elke map load bots toe.
Of sla de setup over: elke CS2-server op 2hours.gg heeft de oplossing al, met GOTV en demo's aan.