RE:NODE

Руководства11 мин чтения

Сервер Core Keeper: установка и сохранения

Как поднять выделенный сервер Core Keeper: установка через SteamCMD, ServerConfig.json и флаги запуска, Game ID или прямое подключение, режимы мира, сохранения и бэкапы.

0 прочтений

Выделенный сервер Core Keeper - бесплатная загрузка через SteamCMD (инструмент Core Keeper Dedicated Server, app id 1963720), которая запускает один мир, хранящийся одним файлом вроде 0.world.gzip. По умолчанию проброс портов ему вообще не нужен: он регистрируется в relay-сети Steam и выводит Game ID - длинную строку из букв, которую игроки вводят в Join Game. Если запустить его с -port, он переходит в режим прямого подключения, где игроки заходят по адресу и порту, а порт вам нужно открыть самостоятельно. Настройки хранятся в ServerConfig.json и во флагах запуска, причём порт и пароль принимаются только из командной строки. Небольшой группе с запасом хватает 2-4 ГБ памяти; потребление растёт с тем, сколько подземелья уже раскопано. В этом руководстве разобраны установка, все настройки, которые стоит знать, два способа подключения, перенос мира на сервер и его сохранность.

Что делает выделенный сервер#

Мультиплеер Core Keeper обычно работает так, что один игрок - хост: мир живёт на его ПК и существует, только пока он играет. Выделенный сервер - это безголовая сборка игры, которая держит мир сама, так что любой из группы может играть в любое время, а частота кадров одного человека не определяет симуляцию для всех.

Несколько вещей, которые определяют, как с ним работать:

  • Мир хранится на сервере, персонажи - нет. Персонаж каждого игрока, его инвентарь и навыки живут на его ПК и путешествуют с ним между мирами. Сервер хранит карту, всё построенное и всё, что лежит в сундуках. Кто-то может прийти со снаряжением из другого мира, и ничей персонаж не пропадёт, если сервер исчезнет.
  • Один мир на процесс сервера. Конфиг выбирает слот мира по номеру; смена мира - это смена номера и перезапуск.
  • Это сервер на Unity. Ждите запуска с -batchmode, лог-файла вместо интерактивной консоли и поведения, которое тесно следует за обновлениями самой игры; общая схема описана в статье основы выделенных серверов на Unity.
  • Версии клиента и сервера должны совпадать. После обновления игры обновите сервер до того, как кто-то попытается зайти.

Требования и потребление ресурсов#

Мир Core Keeper генерируется по мере исследования, и потребление памяти сервером следует за исследованной и застроенной площадью, а не за числом игроков. Это практические отправные точки, а не официальные цифры:

ГруппаRAMCPUПримечания
1-4 игрока, новый мир2 ГБ1 ядроС запасом на старте
4-8 игроков, середина игры3-4 ГБ1.5-2 ядраОткрыто несколько биомов, работает автоматизация
8+ игроков, большой мир6-8 ГБ2+ ядраТяжёлая автоматизация и широкое исследование
  • CPU: симуляцию ведёт один основной поток. Автоматизация - конвейеры, буры, фермы - работает независимо от того, есть ли кто-то рядом, так что база, полная механизмов, - главная статья расхода CPU.
  • Диск: сервер занимает несколько гигабайт; файл мира сжат и обычно невелик - мегабайты, а не гигабайты. Оставьте место под бэкапы.
  • Сеть: скромно. Режим relay добавляет промежуточный узел; прямое подключение обычно чуть быстрее для игроков, находящихся недалеко от сервера.

Если вы планируете сообщество побольше, в статье сколько игроков помещается на сервер объясняется общая мысль: геймдизайн заканчивается раньше, чем железо.

Установка через SteamCMD#

Серверный инструмент ставится анонимно:

bash
$ steamcmd +force_install_dir /home/corekeeper/server +login anonymous \    +app_update 1963720 validate +quit

В Windows в папке есть Launch.bat, который запускает сервер с разумными значениями по умолчанию. В Linux там лежит скрипт _launch.sh. Старым сборкам под Linux требовался виртуальный дисплей через Xvfb и несколько дополнительных библиотек; скрипт запуска берёт дисплей на себя, но если на минимальной установке Linux сервер сразу завершается, первым делом проверьте недостающие библиотеки. Про validate, обновления и автоматизацию установки рассказано в статье SteamCMD простыми словами.

Запустите его один раз. Первый запуск создаёт папку данных с ServerConfig.json, папкой worlds, логами и файлом с Game ID. В Linux папка данных обычно находится здесь:

code
~/.config/unity3d/Pugstorm/Core Keeper/DedicatedServer/

В Windows это аналогичный путь в AppData\LocalLow\Pugstorm\Core Keeper\DedicatedServer\ пользователя. Флаг -datapath переносит её, и это то, что нужно, когда на одной машине работает несколько серверов или вы хотите держать данные рядом с установкой.

ServerConfig.json#

Файл создаётся при первом запуске. Редактируйте его при остановленном сервере:

ServerConfig.json
{  "gameId": "",  "world": 0,  "worldName": "The Core",  "worldSeed": 0,  "worldMode": 0,  "seasonOverride": -1,  "maxNumberPlayers": 8}
КлючЧто делает
gameIdGame ID, по которому заходят игроки. Пусто - сгенерировать
worldСлот мира для загрузки: 0 загружает 0.world.gzip, 3 - 3.world.gzip
worldNameОтображаемое имя мира
worldSeedСид нового мира. 0 - случайный
worldMode0 обычный, 1 сложный, 2 творческий, 4 казуальный
seasonOverrideПринудительно включает сезонное событие или отключает их; -1 следует календарю в сборках, которые это поддерживают
maxNumberPlayersЛимит игроков

Несколько замечаний из опыта:

  • Задайте фиксированный `gameId`, если не хотите, чтобы код менялся. Собственный ID должен соответствовать правилам формата игры - длинный, из букв и цифр, без легко путаемых символов вроде 0 и O. Если сервер ваш отклонит, лог об этом скажет, и будет сгенерирован другой. Для закрытой группы вполне нормально оставить поле пустым и брать сгенерированный код из папки данных.
  • `worldMode` важен при создании. Творческий мир нельзя превратить в обычный и обратно, так что выбирайте до первого запуска нового слота. Сложный режим - реальное повышение сложности, и достижения игры его учитывают.
  • `worldSeed` важен только для нового мира. Его изменение в существующем слоте ничего не даёт.
  • Значения сезонов менялись между версиями. Если задаёте seasonOverride, сверьтесь с актуальным списком в документации игры, а не копируйте старое число.

С обновлениями появляются новые ключи. Если в вашем файле есть ключи, которых здесь нет, они пришли с вашей сборкой, и сгенерированные значения по умолчанию - безопасная отправная точка.

Флаги запуска#

Большинство настроек можно передать и флагами, а некоторые работают только так:

ФлагЧто делает
-batchmodeЗапуск без интерфейса. Присутствует всегда
-logfileПишет лог в файл
-worldТо же, что world
-worldnameТо же, что worldName
-worldseedТо же, что worldSeed
-worldmodeТо же, что worldMode
-gameidТо же, что gameId
-maxplayersТо же, что maxNumberPlayers
-datapathГде лежит папка данных
-portВключает прямое подключение на этом порту
-ipАдрес для привязки в режиме прямого подключения
-passwordПароль для входа, используется с прямым подключением

Порт, адрес и пароль задаются только в командной строке - в ServerConfig.json они ничего не делают. А когда флаг и файл расходятся, побеждает флаг; это обычная причина того, что правка файла будто игнорируется.

Game ID или прямое подключение#

вводит Game IDадрес и портавтосохранениеИгрокJoin GameSteam relayрежим Game IDПрямое подключение-port, открытый UDPСервер Core Keeperодин мирПапка worldsN.world.gzip
Два пути на сервер Core Keeper

Режим Game ID включён по умолчанию. Сервер сам подключается к relay-сети Steam, поэтому открывать входящий порт не нужно, а игроки вводят ID в Join Game. Это работает за домашними роутерами, за CGNAT провайдера и у хостеров, которые не пробрасывают порты. Цена - лишний узел relay с дополнительной задержкой и зависимость от того, работает ли relay-сервис. ID выводится в файл в папке данных и в лог; если он не зафиксирован в конфиге, он может меняться, так что после перезапуска проверьте его ещё раз, прежде чем говорить людям, что они вводят что-то не то.

Прямое подключение включается, когда вы передаёте -port. Тогда игроки подключаются к адресу и порту сервера, поэтому порт должен быть доступен - по UDP, и ряд руководств по хостингу советует открыть заодно и следующий порт. -password задаёт пароль для входа в этом режиме. В недавних сборках прямое подключение - ещё и способ, которым на сервер попадают игроки из других магазинов для ПК, так что если в вашей группе не все в Steam, посмотрите в свежих патчноутах, какой режим поддерживает кроссплей. Как проверить, что порт действительно открыт, рассказано в статье порты игровых серверов, а зачем вообще существуют relay-режимы - в статье NAT и CGNAT для тех, кто хостит игры.

Для компании друзей, где один человек держит сервер дома, режим Game ID почти всегда правильный выбор. Для сервера у хостера с публичным адресом прямое подключение даёт чуть меньшую задержку и постоянный адрес, который можно раздать.

Миры, слоты и перенос сохранения#

Миры - это пронумерованные файлы в папке worlds сервера: 0.world.gzip, 1.world.gzip и так далее. Настройка world выбирает один из них. Собственные миры игрока хранятся в том же формате на его ПК:

code
%USERPROFILE%\AppData\LocalLow\Pugstorm\Core Keeper\Steam\<SteamID64>\worlds\

Чтобы перенести на сервер мир, в который вы играли локально:

  1. Закройте игру, чтобы файл мира был полностью записан.
  2. Остановите сервер.
  3. Сделайте бэкап папки worlds на сервере, даже если думаете, что она пуста.
  4. Загрузите файл своего мира в папку worlds на сервере. Либо дайте ему номер слота, который сервер уже загружает, заменив то, что там есть, либо дайте свободный номер и поменяйте world (или -world) соответственно.
  5. Запустите сервер и проверьте по логу, что загрузился мир с нужным именем, а не сгенерировался новый.

Персонажей переносить не нужно: они на ПК каждого игрока и приходят вместе с ним. Мир приносит карту, постройки, сундуки и автоматизацию. Обратный путь - забрать мир с сервера домой - то же самое наоборот: остановите сервер, скачайте пронумерованный файл, локально переименуйте его в свободный номер слота, и он появится в списке миров игры.

Слоты заодно служат точками сохранения. Перед рискованной попыткой убить босса или большой перестройкой остановите сервер, скопируйте текущий файл мира под запасным номером и запустите снова. Если что-то пойдёт не так, направьте world на копию. Статья файлы сохранений игровых серверов ставит это устройство рядом с другими играми.

Бэкапы, обновления и перезапуски#

Мир держится в памяти и периодически записывается в файл, а также при чистом выключении. Убитый процесс теряет всё, что произошло с последней записи. Поэтому:

  • Останавливайте сервер чисто перед копированием файла мира и перед любым обновлением.
  • Бэкапьте папку `worlds` по расписанию, вне машины, пока группа активна. Файл маленький, так что ежедневные копии ничего не стоят.
  • Делайте ручной бэкап перед каждым обновлением игры. Крупные обновления уже меняли содержимое миров; копию мира, который загружался вчера, стоит сохранить.
  • Один раз восстановите бэкап намеренно. Загрузите его в запасной слот, зайдите и посмотрите на свою базу. Почему именно этот шаг решает всё, объясняет статья бэкапы, которые действительно восстанавливаются.

Обновления ставятся через SteamCMD той же командой app_update. Игра выпускает патчи по своему графику, а клиент обновляется автоматически, так что группа обычно узнаёт о патче, не сумев подключиться. Обновление сервера при перезапуске решает эту проблему ценой того, что иногда патч приходит раньше, чем вы сделали бэкап, - поставьте бэкап по расписанию перед перезапуском, и у вас будет и то и другое. Как выбрать час, рассказано в статье расписания перезапусков, которые помогают.

У Core Keeper есть официальная поддержка модов через mod.io. Моды, меняющие геймплей, обычно должны быть и на сервере, и у каждого клиента, в одинаковых версиях; смотрите инструкции для выделенного сервера на странице каждого мода, а не рассчитывайте наугад. Мир, в котором играли с модом, может от него зависеть, так что делайте бэкап перед добавлением или удалением мода; если что-то сломалось, порядок восстановления - в статье что делать, когда обновление мода всё сломало.

Где его хостить#

Core Keeper нет в каталоге игр RE:NODE, так что тарифа Core Keeper или готовой установки нет. Но сервер - это приложение SteamCMD, дружелюбное к Linux, и оно хорошо работает на машине общего назначения. Выделенный сервер даёт root-доступ, чтобы установить SteamCMD, запустить _launch.sh под менеджером служб и при желании открыть UDP-порт для прямого подключения; тарифы VDS готовятся вручную и выдаются в течение 24 часов. Если вы никогда такой не настраивали, основы есть в статье первый час на новом VDS, а как держать такой процесс запущенным между перезагрузками, показано в статье службы systemd для ваших приложений. Игры, для которых в каталоге есть тарифы, - в разделе игровые серверы.

Решение проблем#

Игроки не находят сервер по Game ID. Скопируйте ID заново из текущего лога или файла с ID - если он не зафиксирован, он меняется. Убедитесь, что сервер закончил запуск, а версии клиента и сервера совпадают.

Прямое подключение отваливается по таймауту. Порт не открыт по UDP, не передан -port, или игроки вводят relay-ID вместо адреса и порта.

Вместо моего загруженного мира появился новый. Номер файла не совпадает с world, или флаг -world переопределяет конфиг. Загруженный файл по-прежнему на месте.

Настройки в `ServerConfig.json` игнорируются. Тот же параметр задаёт флаг запуска, или это одна из настроек только для командной строки: порт, IP и пароль.

В Linux сервер сразу завершается. На минимальной установке не хватает библиотек или поддержки дисплея. Прочитайте первые строки лога.

Память растёт день за днём. Исследование и автоматизация добавляют состояние. Ежедневный перезапуск делает рост предсказуемым; если за несколько часов память стабильно доходит до лимита, мир перерос машину.

FAQ#

Нужно ли открывать порты для сервера Core Keeper?

Не в режиме Game ID по умолчанию - он использует relay Steam. Открытый порт по UDP нужен только в режиме прямого подключения, который включается через -port.

Где найти Game ID в Core Keeper?

Сервер записывает его в файл в своей папке данных и выводит в лог при запуске. Задайте gameId в ServerConfig.json, если хотите, чтобы он не менялся.

Можно ли перенести одиночный мир на выделенный сервер?

Да. Скопируйте пронумерованный файл .world.gzip из локальной папки worlds в папку worlds на сервере и поставьте world равным его номеру. Персонажи остаются на ПК каждого игрока и приходят вместе с ним.

Принадлежат ли персонажи серверу?

Нет. Персонажи и их инвентарь хранятся на ПК каждого игрока. Сервер хранит мир, постройки и сундуки.

Можно ли сменить мир с творческого режима на обычный?

Нет. Режим мира фиксируется при создании, и творческие и нетворческие миры не конвертируются друг в друга. Начните новый слот с нужным режимом.

Сколько игроков может зайти?

Лимит задаёт maxNumberPlayers. Игра рассчитана на небольшие кооперативные группы, и производительность зависит больше от автоматизации и исследованной площади, чем от числа игроков.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000