A CS2 szervered rendben fut, aztán pályát vált, és mindenkit kidob: a szerver összeomlott. Ha a GOTV be van kapcsolva és játékosok voltak csatlakozva, akkor ez a hiba. Először a megoldás, aztán az ok.
A megoldás: egy sor
Add hozzá ezt a sort a következő fájlhoz game/csgo/cfg/server.cfg:
bot_join_delay 15- A botok mostantól minden pályaváltás után 15 másodpercet várnak, mielőtt csatlakoznak.
- Az összeomlás akkor történik, amikor botok csatlakoznak, miközben egy játékos még tölti az új pályát. A késleltetéssel a játékosok töltenek be először.
- A GOTV bekapcsolva marad. A demók továbbra is rögzülnek, a nézők továbbra is néznek.
- Újraindítás nélküli alkalmazáshoz küldd el RCON-on:
rcon bot_join_delay 15
A laborunkban nélküle 6 pályaváltásból 3 összeomlott. Vele 18-ból 0, meccs közbeni váltásoknál, meccs végi váltásoknál és élő módváltásoknál is. Minden 2hours.gg CS2 szerver ezzel érkezik.
Mikor fordul elő
Mindez egyszerre:
- A SourceTV (GOTV) be van kapcsolva:
tv_enable 1 - Legalább egy valódi játékos csatlakozva van. Egy csak botokkal futó szerver soha nem omlott össze.
- Pályaváltás történik: a konzolból választott pálya, changelevel vagy map, egy meccs vége, vagy a meccs végi szavazás.
Véletlenszerű. A tesztjeinkben a pályaváltások kb. fele összeomlott, élő szervereken pedig gyakrabban jött elő 3 vagy több csatlakozott játékosnál. Egy szerver, amely túlélt egy váltást, a következőnél összeomolhat.
Hogy néz ki: a pálya betöltése közben minden játékos egyszerre esik ki, és a szerver log egy szegmentálási hibával (SIGSEGV) ér véget az új pálya indulása helyett.
Különbségek a módok között
Minden mód Valve configja meghatározza, hány bot csatlakozik minden pályabetöltéskor. Több csatlakozó bot több esélyt jelent az összeomlásra:
- Deathmatch, Team Deathmatch, Casual: minden betöltéskor legfeljebb 10 bot csatlakozik. Ezek a leginkább kitettek, itt láttuk a legtöbb összeomlást.
- Competitive: 1 bot. A laborunkban a javítás nélkül sem omlott össze, de a több játékossal futó élő szerverek igen.
- A megoldás minden módban ugyanaz: a bot_join_delay egyetlen beállítás, amely minden pályaváltásra érvényes, bármi indította is.
A valódi hiba (a kíváncsiaknak)
Ez Valve motorhiba, nem plugin hiba. Metamod és CounterStrikeSharp nélkül is összeomlott. 2024 óta jelentik, itt: ValveSoftware/csgo-osx-linux#3831. Kövesd ott: reméljük, a Valve hamarosan javítja, és ez a kerülőmegoldás feleslegessé válik.
Amit debuggerrel találtunk:
- Pályaváltáskor a SourceTV leáll, és "SourceTV stopped" (HLTVSTOP) indokkal lecsatlakoztatja a csatlakozott játékost, pedig ő normál játékos, nem GOTV néző.
- Ennél a félig lecsatlakozott játékosnál egy üres belső objektum marad. Egy alap szerveren a motor azonnal összeomlik rajta (libengine2.so).
- Ha ez a lépés túléli, a játékkód egy másodperccel később omlik össze, amikor a botok csatlakoznak az új pályára (libserver.so). Ezt előzi meg a bot_join_delay, és ez volt minden összeomlás, amit CounterStrikeSharp szervereken láttunk.
- Egy Metamod nélküli alap szerveren az első, motor oldali összeomlást is láttuk. A bot_join_delay-t ez ellen még nem teszteltük.
Ami nem működik
tv_enable 0játék közben: minden játékost egyszerre kidob.- GOTV kikapcsolva induláskor: nincs összeomlás, de nincs demó és nincs nézés sem.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: továbbra is összeomlik. A demó leállítása nem elég: demórögzítés nélkül is összeomlott.bot_quota 0egy mód _server.cfg fájljában: minden meccs újraindításkor is lefut, és magát a SourceTV-t is kirúghatja, így a GOTV a pálya közepén leállítja a rögzítést.mapchangelevel helyett: ugyanaz az összeomlás.
Teljes beállítás saját szerverhez
Amit minden szerverünkön futtatunk, a server.cfg-ben:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Tartsd a server.cfg-ben, ne csak egy egyszeri RCON parancsban, hogy újraindítás után is visszajöjjön.
- 15 másodpercet teszteltünk. A lassú kapcsolatú játékosok vagy a nagy Workshop pályák tovább töltenek, így a magasabb érték biztonságosabb, és csak annyit jelent, hogy a botok kicsit később érkeznek.
- Hogy ellenőrizd, aktív-e, írd be a szerver konzolba vagy RCON-ba:
bot_join_delay - Botok nélkül játszol? Akkor is tartsd meg: az olyan módok, mint a Deathmatch és a Casual, alapból botokat adnak hozzá minden pályabetöltéskor.
Vagy hagyd ki a beállítást: a 2hours.gg minden CS2 szerverén már benne van a javítás, bekapcsolt GOTV-vel és demókkal.