Выделенный сервер 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 генерируется по мере исследования, и потребление памяти сервером следует за исследованной и застроенной площадью, а не за числом игроков. Это практические отправные точки, а не официальные цифры:
| Группа | RAM | CPU | Примечания |
|---|---|---|---|
| 1-4 игрока, новый мир | 2 ГБ | 1 ядро | С запасом на старте |
| 4-8 игроков, середина игры | 3-4 ГБ | 1.5-2 ядра | Открыто несколько биомов, работает автоматизация |
| 8+ игроков, большой мир | 6-8 ГБ | 2+ ядра | Тяжёлая автоматизация и широкое исследование |
- CPU: симуляцию ведёт один основной поток. Автоматизация - конвейеры, буры, фермы - работает независимо от того, есть ли кто-то рядом, так что база, полная механизмов, - главная статья расхода CPU.
- Диск: сервер занимает несколько гигабайт; файл мира сжат и обычно невелик - мегабайты, а не гигабайты. Оставьте место под бэкапы.
- Сеть: скромно. Режим relay добавляет промежуточный узел; прямое подключение обычно чуть быстрее для игроков, находящихся недалеко от сервера.
Если вы планируете сообщество побольше, в статье сколько игроков помещается на сервер объясняется общая мысль: геймдизайн заканчивается раньше, чем железо.
Установка через SteamCMD#
Серверный инструмент ставится анонимно:
$ 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 папка данных обычно находится здесь:
~/.config/unity3d/Pugstorm/Core Keeper/DedicatedServer/В Windows это аналогичный путь в AppData\LocalLow\Pugstorm\Core Keeper\DedicatedServer\ пользователя. Флаг -datapath переносит её, и это то, что нужно, когда на одной машине работает несколько серверов или вы хотите держать данные рядом с установкой.
ServerConfig.json#
Файл создаётся при первом запуске. Редактируйте его при остановленном сервере:
{ "gameId": "", "world": 0, "worldName": "The Core", "worldSeed": 0, "worldMode": 0, "seasonOverride": -1, "maxNumberPlayers": 8}| Ключ | Что делает |
|---|---|
gameId | Game ID, по которому заходят игроки. Пусто - сгенерировать |
world | Слот мира для загрузки: 0 загружает 0.world.gzip, 3 - 3.world.gzip |
worldName | Отображаемое имя мира |
worldSeed | Сид нового мира. 0 - случайный |
worldMode | 0 обычный, 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 включён по умолчанию. Сервер сам подключается к 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 выбирает один из них. Собственные миры игрока хранятся в том же формате на его ПК:
%USERPROFILE%\AppData\LocalLow\Pugstorm\Core Keeper\Steam\<SteamID64>\worlds\Чтобы перенести на сервер мир, в который вы играли локально:
- Закройте игру, чтобы файл мира был полностью записан.
- Остановите сервер.
- Сделайте бэкап папки
worldsна сервере, даже если думаете, что она пуста. - Загрузите файл своего мира в папку
worldsна сервере. Либо дайте ему номер слота, который сервер уже загружает, заменив то, что там есть, либо дайте свободный номер и поменяйтеworld(или-world) соответственно. - Запустите сервер и проверьте по логу, что загрузился мир с нужным именем, а не сгенерировался новый.
Персонажей переносить не нужно: они на ПК каждого игрока и приходят вместе с ним. Мир приносит карту, постройки, сундуки и автоматизацию. Обратный путь - забрать мир с сервера домой - то же самое наоборот: остановите сервер, скачайте пронумерованный файл, локально переименуйте его в свободный номер слота, и он появится в списке миров игры.
Слоты заодно служат точками сохранения. Перед рискованной попыткой убить босса или большой перестройкой остановите сервер, скопируйте текущий файл мира под запасным номером и запустите снова. Если что-то пойдёт не так, направьте 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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.