MAATRIX GAMES / Блог / Вылетает при подключении к серверу Rust

Вылетает при подключении к серверу Rust

MAATRIX GAMES

В дискорд сыплются жалобы «крашнулся на коннекте», «висит на Loading world, потом вылет в рабочий стол» — а сервер вроде живой, в консоли тишина. Это одна из самых муторных проблем в администрировании Rust, потому что причин у неё штук пять, и симптом у всех одинаковый. Разберём по порядку, с чего проверять и как отличить одно от другого.

Сначала — версия клиента и сервера

Rust обновляется почти каждый четверг (форсированный wipe), и если ваш сервер не подхватил патч, а у игроков Steam уже всё обновил — это самая частая причина мгновенного краша при подключении. Клиент и сервер должны быть на одной сборке, разница даже в один патч часто ломает совместимость протокола.

Проверить версию сервера просто — в консоли RCON или в логе при старте есть строка вида:

Rust Dedicated Server X.X.X - build XXXXX

Сравните build-номер с тем, что показывает игра в главном меню слева внизу. Если сервер отстаёт — это ваш кейс. Обновление через SteamCMD описано в статье про установку и обновление серверов через SteamCMD, для Rust команда та же:

steamcmd +force_install_dir ./rust_server +login anonymous +app_update 258550 validate +quit

Важный нюанс: после форсированного обновления Facepunch иногда сразу выкатывает hotfix в течение суток — если вылеты начались не сразу после патча, а через несколько часов, проверьте, не появился ли ещё один апдейт.

Проверьте, не сломался ли Oxide/uMod после патча

Если сервер на актуальной версии, а падения продолжаются — вторая по частоте причина это Oxide (uMod). Framework подключается к внутренним классам игры через рефлексию, и после каждого вайп-патча Facepunch может поменять сигнатуры методов. Если Oxide не успел выпустить билд под новую версию, происходит следующее: сервер стартует нормально, но при попытке клиента загрузить мир вылетает либо клиент, либо сам сервер крашится в лог с NullReferenceException.

Как проверить: временно переименуйте папку oxide (например, в oxide_disabled) и перезапустите ванильный сервер без модов. Если игроки коннектятся без проблем — дело в Oxide или в одном из плагинов.

mv oxide oxide_disabled
./RustDedicated -batchmode +server.port 28015

Дальше два варианта:

  1. Проверить версию Oxide на совместимость с текущим билдом Rust на официальном сайте uMod — они обычно догоняют актуальную версию Rust в течение 12-48 часов после вайпа.
  2. Если Oxide актуален, но крашит конкретный плагин — смотрите oxide/logs/ и запускайте плагины по одному, отключая через oxide.unload PluginName в консоли.

Подробный разбор установки и первых шагов с Oxide — в статье про установку Oxide и uMod. Учтите нюанс: даже если Oxide формально «поддерживает» билд, конкретный плагин с устаревшим API может крашить именно на моменте спавна игрока — то есть точно в момент подключения, что и создаёт впечатление проблемы с коннектом.

Поднять сервер Rust за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Битая карта или несовместимый seed

Третий классический сценарий: игрок заходит, видит "Loading world" секунд 10-30, потом вылет. Тут дело часто не в клиенте вообще, а в файле карты на сервере. Rust генерирует и кэширует карту в server/<identity>/proceduralmap.<seed>.<size>.map (или сохранённый .sav при кастомной карте). Если файл повреждён — например, сервер упал по OOM ровно в момент сохранения — при подключении клиент пытается скачать и распарсить битые данные и падает.

Проверить размер файла карты — грубый, но рабочий способ: типовая карта 3500-4500 размера весит от пары сотен мегабайт до 1+ ГБ в зависимости от размера и seed. Если .map файл подозрительно маленький (килобайты) или его дата изменения не совпадает с последним рестартом — вероятно, он битый.

Решение — принудительная перегенерация карты. Самое надёжное — сменить seed (даже на 1) в параметрах запуска, это заставит сервер сгенерировать карту заново:

+server.seed 123457 +server.worldsize 4000

Если у вас кастомная карта (Terrain.io, RustEdit) — проверьте, что файл карты не был повреждён при загрузке на сервер. О том, как правильно ставить кастомные карты и на что обращать внимание, — в статье про кастомные карты в Rust. Отдельно: смена seed или worldsize после того как игроки уже застроились — это фактически вайп, предупредите комьюнити заранее.

Недостаточно ресурсов на стороне игрока

Это не серверная проблема, но именно её чаще всего путают с «не грузится сервер». Rust — один из самых требовательных к железу игр в жанре выживания, генерация ландшафта и прогрузка объектов на клиенте съедает много RAM и VRAM. Если крашится только один конкретный игрок (или небольшая часть), а остальные заходят нормально — почти наверняка дело у него, не у вас.

Типичные признаки клиентской проблемы:

  • Крашится именно на новом вайпе с большой картой (4000+), на старой карте заходил нормально — не хватает памяти на генерацию новой процедурной местности.
  • В логе клиента (%LOCALAPPDATA%\Rust\...\Player.log или через F1-консоль) видна ошибка Out of memory или DXGI_ERROR_DEVICE_REMOVED.
  • Проблема пропадает при снижении графических настроек, особенно Object Quality и Draw Distance.

Что можно посоветовать игроку: закрыть фоновые приложения, снизить настройки графики перед первым коннектом на новый вайп, обновить драйвера видеокарты. Со стороны сервера тут сделать почти ничего нельзя, разве что уменьшить worldsize, если проблема массовая у большей части комьюнити — но это радикальная мера.

Смотрим серверный лог в момент подключения

Если версии совпадают, Oxide чист, карта не битая, а один и тот же игрок (или несколько) стабильно падают — точку в вопросе ставит лог. Rust Dedicated Server пишет всё в консоль и дублирует в файл, обычно в корне RustDedicated_Data/... или туда, куда указывает -logfile. Смотрите строго в момент, когда игрок жмёт Connect — там обычно всплывает конкретика: отказ в NetworkID, ошибка десериализации сущности, timeout по UDP.

Полезные команды в RCON-консоли для диагностики на лету:

status              # список текущих подключений и пинг
serverinfo          # текущий билд, карта, entity count
playerlist          # steam64 id тех, кто на сервере

Если в логе на попытке коннекта вылетает что-то вроде Failed to load entity или Corrupted save file — это снова к пункту про карту/сохранение. Если ошибка про EAC (Easy Anti-Cheat) — это отдельная история, часто связанная с самим клиентом игрока или временным сбоем сервиса EAC у Facepunch, а не с вашим сервером напрямую.

Отдельно проверьте firewall и порты — если открыт только основной game-порт, но закрыт RCON или Steam query порт (обычно +1 к игровому), сам коннект может проходить нестабильно, с частичными зависаниями и разрывами на loading screen, которые выглядят как краш. Стандартная связка портов Rust: 28015 (игра), 28016 (RCON/query по умолчанию через +1) — держите их синхронно открытыми в firewall и в панели хостинга.

Что делать, если ничего не помогло

Если перепробовали всё выше, а проблема осталась — соберите минимальный набор данных перед тем, как копать дальше или писать в поддержку хостинга:

  • Точный build-номер сервера и клиента (совпадают?).
  • Список установленных Oxide-плагинов и их версии.
  • Фрагмент серверного лога за 10-15 секунд до и после попытки подключения проблемного игрока.
  • У скольких игроков проблема: у всех, у части, у одного.

Такая раскладка сразу сужает круг — если падают все, это почти всегда версия или Oxide; если один-два человека — это клиент или карта. Дальше можно точечно тестировать: временный чистый рестарт без модов, смена seed на тестовом порту, проверка на другом клиенте того же игрока (если есть возможность).

Поднять сервер Rust за пару минут

Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.

Создать сервер

Частые вопросы

Вылет происходит без сообщения об ошибке, просто краш в рабочий стол — с чего начать?

Начните с версии сервера и клиента — это самая частая причина именно немого краша без ошибки в консоли. Дальше — отключить Oxide и проверить на ваниле.

После отключения всех плагинов проблема пропала — что делать дальше?

Включайте плагины по одному через oxide.load PluginName, пока не найдёте виновника, затем проверьте на сайте uMod, есть ли обновление именно под этот плагин под текущий билд Rust.

Как понять, что дело именно в карте, а не в чём-то ещё?

Смените seed на тестовый (например, добавьте единицу к текущему) и перезапустите сервер — если новая процедурная карта грузится без вылетов, старый файл карты был повреждён.

Крашится только у части игроков, у остальных всё нормально — это точно сервер?

Скорее всего нет. Попросите проблемных игроков глянуть свой Player.log на ошибки памяти или видеодрайвера и попробовать снизить графику перед коннектом.

Нужно ли вайпать сервер, чтобы починить краши на подключении?

Не всегда. Смена seed — это по сути вайп карты, но если проблема в Oxide или версии, вайп ничего не даст. Сначала исключите версию и плагины, и только потом трогайте карту.