Ваш сервер CS2 працює нормально, потім змінюється карта і всіх викидає: сервер упав. Якщо GOTV увімкнено і гравці були підключені, це саме цей баг. Спочатку рішення, потім причина.
Рішення: один рядок
Додайте це до game/csgo/cfg/server.cfg:
bot_join_delay 15- Тепер боти чекають 15 секунд після кожної зміни карти, перш ніж зайти.
- Падіння стається, коли боти заходять, поки гравець ще завантажує нову карту. Із затримкою гравці завантажуються першими.
- GOTV залишається увімкненим. Демо й далі записуються, глядачі й далі дивляться.
- Щоб застосувати без перезапуску, надішліть через RCON:
rcon bot_join_delay 15
У нашій лабораторії без нього падали 3 з 6 змін карти. З ним не впала жодна з 18: зміни посеред матчу, наприкінці матчу та перемикання режиму на льоту. Кожен сервер CS2 на 2hours.gg постачається з ним.
Коли це стається
Усе це одночасно:
- SourceTV (GOTV) увімкнено:
tv_enable 1 - Підключено хоча б одного справжнього гравця. Сервер лише з ботами жодного разу не падав.
- Змінюється рівень: карту вибрано з консолі, через changelevel чи map, закінчився матч або пройшло голосування наприкінці матчу.
Це випадково. У наших тестах падала приблизно половина змін карти, а на живих серверах це траплялося частіше при 3 і більше підключених гравцях. Сервер, що пережив одну зміну, може впасти на наступній.
Як це виглядає: усі гравці відключаються одночасно під час завантаження карти, а лог сервера закінчується помилкою сегментації (SIGSEGV) замість запуску нової карти.
Різниця між режимами
Конфіг Valve для кожного режиму задає, скільки ботів заходить під час кожного завантаження карти. Що більше ботів заходить, то вищий шанс падіння:
- Deathmatch, Team Deathmatch, Casual: до 10 ботів заходять під час кожного завантаження. Найвразливіші режими, саме тут ми бачили найбільше падінь.
- Competitive: 1 бот. У нашій лабораторії він не падав без виправлення, але живі сервери з більшою кількістю гравців падали.
- Рішення однакове для всіх режимів: bot_join_delay є одним налаштуванням, яке діє під час будь-якої зміни карти, хоч би що її спричинило.
Справжній баг (для допитливих)
Це баг рушія Valve, а не плагіна. Сервер падав і без Metamod та CounterStrikeSharp. Про нього повідомляють з 2024 року в ValveSoftware/csgo-osx-linux#3831. Стежте за ним там: сподіваємося, Valve скоро його виправить і цей обхідний шлях стане непотрібним.
Що ми знайшли за допомогою дебагера:
- Під час зміни карти SourceTV вимикається і від'єднує підключеного гравця з причиною "SourceTV stopped" (HLTVSTOP), хоча це звичайний гравець, а не глядач GOTV.
- У цього наполовину відключеного гравця залишається порожній внутрішній об'єкт. На чистому сервері рушій одразу падає на ньому (libengine2.so).
- Якщо цей крок проходить, ігровий код падає секундою пізніше, коли боти заходять на нову карту (libserver.so). Саме це падіння запобігає bot_join_delay, і саме воно було в усіх падіннях, які ми бачили на серверах з CounterStrikeSharp.
- На чистому сервері без Metamod ми також бачили перше падіння, на боці рушія. Проти нього ми bot_join_delay ще не перевіряли.
Що не працює
tv_enable 0під час гри: відключає всіх гравців одразу.- GOTV вимкнено із запуску: падінь немає, але немає ні демо, ні перегляду.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: падіння залишаються. Зупинити демо недостатньо: сервер падав зовсім без запису демо.bot_quota 0у _server.cfg режиму: спрацьовує і під час кожного перезапуску матчу та може викинути сам SourceTV, тож GOTV припиняє запис посеред карти.mapзамість changelevel: те саме падіння.
Повне налаштування для власного сервера
Що ми використовуємо на кожному сервері, у server.cfg:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Тримайте це в server.cfg, а не лише в разовій команді RCON, щоб налаштування поверталося після перезапуску.
- Ми перевіряли 15 секунд. Гравцям з повільним з'єднанням або на великих картах Workshop потрібно більше часу на завантаження, тому більше значення надійніше і лише означає, що боти зайдуть трохи пізніше.
- Щоб перевірити, що налаштування активне, введіть у консолі сервера або через RCON:
bot_join_delay - Граєте без ботів? Однаково залиште: режими на кшталт Deathmatch і Casual за замовчуванням додають ботів під час кожного завантаження карти.
Або пропустіть налаштування: кожен сервер CS2 на 2hours.gg уже має виправлення, з увімкненими GOTV і демо.
Запустити погодинний сервер CS2