Контент из мастерской сервер Unturned берёт из одного файла: WorkshopDownloadConfig.json в папке экземпляра сервера. Впишите числовые ID карты и её пакетов ассетов в File_IDs, укажите в Map в Commands.dat внутреннее имя карты и перезапустите сервер. Сервер скачивает все элементы при загрузке, а когда игрок заходит, отправляет ему тот же список, и клиент сам скачивает его из Steam - никому не нужно подписываться вручную. Почти любая проблема с мастерской на сервере Unturned - одна из четырёх: не хватает зависимости, неверное имя карты, два мода используют одни и те же ID или элемент мастерской обновился, пока сервер работал.
В этом руководстве разобраны сам файл и каждое его поле, карты и имя, по которому они загружаются, контентные моды, зависимости, что происходит при обновлении элемента и какие ошибки видят игроки на практике. Об остальном сервере - Commands.dat, портах и токене входа - читайте в статье установка сервера Unturned.
Как контент мастерской попадает на сервер и к игрокам#
Элементы мастерской для Unturned хранятся в Steam под ID приложения игры 304930. Выделенному серверу не нужен ничей аккаунт Steam, чтобы их получить: он читает список ID при загрузке, скачивает всё недостающее или устаревшее и загружает ассеты.
Когда игрок подключается, сервер сообщает ему, какие элементы у него запущены. Клиент сравнивает это с тем, что у него есть, скачивает недостающее из Steam и заходит. Именно поэтому первый вход игрока на сервер с большим количеством модов может занять время.
Из-за этого рукопожатия правильное место для контента мастерской - список ID, а не файлы, скопированные в папки вручную. Контента, скопированного на сервер вручную, нет в списке, поэтому клиентам никогда не скажут его скачать, и они попадут в мир, полный вещей, которые не могут загрузить.
WorkshopDownloadConfig.json поле за полем#
Файл лежит в Servers/<ServerID>/WorkshopDownloadConfig.json и создаётся при первом запуске сервера. Перед правкой остановите сервер. Типичный файл:
{ "File_IDs": [ 1234567890, 1234567891, 2345678901 ], "Ignore_Children_File_IDs": [], "Query_Cache_Max_Age_Seconds": 600, "Max_Query_Retries": 2, "Use_Cached_Downloads": true, "Should_Monitor_Updates": true, "Shutdown_Update_Detected_Timer": 600, "Shutdown_Update_Detected_Message": "Workshop file update detected, shutdown in: {0}"}| Поле | Что делает |
|---|---|
File_IDs | Элементы мастерской, которые нужно скачать и загрузить. Числа через запятую |
Ignore_Children_File_IDs | Элементы, которые нужно пропустить, даже если что-то из File_IDs указывает их как обязательные |
Query_Cache_Max_Age_Seconds | Сколько сервер доверяет последней проверке данных об элементах |
Max_Query_Retries | Повторы, если Steam не отвечает |
Use_Cached_Downloads | Использовать уже скачанные элементы, если они актуальны |
Should_Monitor_Updates | Следить за обновлениями мастерской во время работы |
Shutdown_Update_Detected_Timer | Секунд предупреждения перед выключением из-за обновления |
Shutdown_Update_Detected_Message | Предупреждение для игроков; {0} заменяется оставшимся временем |
Поля и их значения по умолчанию менялись на протяжении нескольких обновлений, поэтому считайте файл, который сгенерировал ваш сервер, эталоном для своей сборки. Трогать вы будете File_IDs и поля обновлений.
ID элемента мастерской - это число в конце адреса его страницы в Steam, после ?id=. Это число, а не имя, и в JSON оно пишется без кавычек. Пропущенная запятая между ID или лишняя запятая после последнего делают файл некорректным; тогда сервер либо игнорирует его, либо не запускается, и консоль скажет, что именно. О правке файла читайте в статье SFTP и файловый менеджер, а редактор в браузере с подсветкой синтаксиса помогает заметить лишнюю запятую до перезапуска.
Карты: ID и имя#
Карте из мастерской нужны две вещи: её ID в File_IDs и её имя в Commands.dat.
Map Example IslandИмя - это внутреннее имя карты, то есть имя папки карты внутри элемента мастерской, и оно не обязательно совпадает с заголовком на странице в мастерской. Большинство авторов карт указывают точное имя на странице. Если нет, загляните в скачанный элемент после того, как сервер его получит: имя папки карты и есть нужное значение.
Если сервер не находит указанную карту, он не падает. Он загружает PEI, маленькую карту по умолчанию, и запускается как обычно. У сервера, который после добавления карты продолжает запускаться на PEI, одна из трёх проблем: имя не совпадает в точности, элемент мастерской не скачался (проверьте загрузку в консоли при старте) или карту добавили в File_IDs, но сервер не перезапустили.
Официальные карты - среди них PEI, Washington, Russia и Yukon - поставляются с игрой, и запись в мастерской им не нужна. Curated-карты, то есть карты сообщества, которые продвигаются внутри игры, размещены в мастерской. Свежие сборки сервера умеют находить curated-карту по имени, но надёжный способ гарантировать, что она есть у сервера, - добавить её ID в File_IDs.
Одновременно работает только одна карта. Смена Map даёт другой мир со своим сохранением; сохранение старой карты остаётся на диске под своим именем, так что, переключившись обратно, вы к нему вернётесь.
Пакеты ассетов и зависимости#
Многие большие карты - это не один элемент мастерской. Они состоят из элемента с картой и одного или нескольких пакетов ассетов: зданий, декораций, машин и предметов, которые использует карта, опубликованных отдельно, чтобы их можно было обновлять или использовать в разных картах.
Если у сервера или игрока нет пакета ассетов, карта загружается без этих объектов. Игроки видят дыры в мире, висящий красный текст ошибок на месте объектов или кик при входе, когда сервер и клиент расходятся в том, что существует.
С этим справляются два механизма.
Обязательные элементы. Элемент мастерской может указать другие элементы, которые ему нужны. Скачивая его, сервер подтягивает и этих потомков. Поэтому многие карты работают, когда в списке указан только ID самой карты.
`Ignore_Children_File_IDs`. Иногда обязательный потомок вам не нужен - устаревший пакет или пакет, который вы заменяете другой версией. Если указать его здесь, он будет пропущен.
Не все авторы правильно указывают обязательные элементы. Прочитайте на странице карты в мастерской, что ещё нужно поставить вместе с ней, добавьте эти ID явно и проверьте консоль при загрузке, чтобы убедиться, что всё скачалось. Указать ID, который и так подтянулся бы как потомок, не вредно.
Коллекции мастерской - удобный способ для игроков подписаться на набор элементов, но ведёт ли себя ID коллекции на сервере как список ID, менялось от сборки к сборке. Перечислять элементы по одному предсказуемо, и так сразу видно, что запущено на сервере.
Контентные моды: предметы, машины и проблема ID#
Контентные моды - новое оружие, машины, одежда, постройки - добавляются ровно как карты: ID мастерской в File_IDs, перезапуск. Сервер загружает их ассеты вместе с ассетами самой игры.
Давняя беда модов Unturned - ID. У каждого предмета, машины и объекта в игре есть числовой ID внутри своей категории, и старые моды выбирали номера сами. Два мода, которые оба определяют предмет 30000, конфликтуют, и побеждает один из них - так что игрок спавнит, покупает или находит что-то, что оказывается из другого мода. Новые ассеты несут ещё и GUID, уникальный по определению, но много популярного контента до сих пор зависит от числовых ID, а таблицы спавна, магазины и плагины часто ссылаются на предметы по номеру.
Защита состоит в основном во внимательности:
- Читайте лог сервера при загрузке. Конфликты ассетов сообщаются во время загрузки ассетов. Чистый лог с вашим списком модов стоит проверять после каждого добавления.
- Добавляйте по одному моду. Перезапуск, проверка лога, проверка в игре, затем следующий.
- Выбирайте поддерживаемые моды. Активный автор решает конфликты, о которых ему сообщают; заброшенный - нет.
- Сверяйте конфиги плагинов с ID. Плагины китов, магазинов и лута ссылаются на ID предметов. Когда вы добавляете или удаляете мод, ID в конфигах плагина могут начать указывать на что-то другое или в никуда.
Моды, от которых зависит карта, - особый случай: их удаление ломает карту. Моды, от которых ничего не зависит, удалить можно, но всё, что игроки получили из этого мода, исчезнет - из инвентарей, хранилищ и машин. Удаление - это решение, о котором объявляют, а не быстрое исправление.
Обновления во время работы сервера#
Авторы обновляют свои элементы мастерской, когда захотят. Опасность в разрыве: сервер работает со старой версией, игрок заходит, Steam даёт ему новую, и стороны расходятся. В зависимости от того, что изменилось, игрока кикает с ошибкой несовпадения или он заходит и потом видит ошибки.
Встроенный ответ - Should_Monitor_Updates. Когда эта настройка включена, сервер следит за своими элементами и, когда один из них обновляется, предупреждает игроков сообщением Shutdown_Update_Detected_Message и выключается через Shutdown_Update_Detected_Timer секунд. При следующем запуске он скачивает обновление, и сервер с игроками снова совпадают.
Это работает, только если что-то снова запустит сервер. Проверьте, как ваш хостер обрабатывает корректный выход: в одних конфигурациях сервер сразу поднимается, в других ждёт, пока его запустят. Если ждёт, сервер, который выключился из-за обновления мода в 4 утра, будет лежать, пока кто-нибудь не заметит. Альтернативы - оставить слежение включённым и убедиться, что сервер перезапускается, или выключить его и подтягивать обновления ночным перезапуском в час, когда никто не играет.
В RE:NODE вкладка Schedules может выполнять такой ночной порядок в виде упорядоченных задач: команда say с предупреждением игрокам, задержка, save, перезапуск, затем резервная копия. Перезапуск заново читает WorkshopDownloadConfig.json и по пути скачивает обновлённые элементы. Как выбрать час, описано в статье расписания перезапусков, которые помогают.
Размер сервера и время загрузки#
Контент мастерской стоит серверу памяти и диска, а игрокам - времени на загрузку.
| Контент | Влияние на память | Диск |
|---|---|---|
| Официальная карта без модов | Базовый уровень, сервер около 2 GB | Установка в пару GB |
| Curated-карта | От небольшого до умеренного | Сотни MB |
| Большая карта сообщества с пакетами ассетов | От умеренного до большого | До нескольких GB |
| Большая карта плюс много контентных модов | Большое | Несколько GB |
Самый большой отдельный фактор - обычно карта, потому что на большой карте гораздо больше объектов, чем на официальной. Контентные моды складываются, когда их много. Полная таблица размеров по числу игроков есть в руководстве по установке.
Загрузки бьют по игрокам сильнее, чем по серверу. Сервер с несколькими гигабайтами контента мастерской означает долгий первый вход для каждого нового игрока и полную перезагрузку всего, что обновилось. Держите в списке только то, что сервер действительно использует, и укажите размер загрузки в описании сервера, чтобы новые игроки знали, что нужно подождать. Как устроены загрузки в разных играх, включая элементы, которые скрывают из мастерской, описано в статье моды из Steam Workshop на выделенных серверах.
Решение проблем#
Сервер всегда загружает PEI. Имя в Map не совпадает с внутренним именем карты, карта не скачалась или сервер не перезапустили после изменения.
Игроки видят красный текст ошибок и пропавшие здания. Не хватает пакета ассетов. Найдите на странице карты в мастерской, что ей нужно, и добавьте эти ID.
Игроков кикает при входе из-за несовпадения мастерской или ассетов. Элемент обновился, а сервер не перезапущен. Перезапустите его; включите Should_Monitor_Updates или запланируйте ночные перезапуски.
Сервер игнорирует WorkshopDownloadConfig.json. JSON некорректен - обычно пропущена или лишняя запятая - или файл правили при работающем сервере, и при выключении он был перезаписан.
Предмет спавнится не тем, чем нужно. Два мода используют один числовой ID. Проверьте лог загрузки на конфликты и уберите один из модов.
Первый вход длится очень долго. Игроки скачивают список из мастерской. Уберите неиспользуемые элементы и укажите размер загрузки в описании сервера.
Кит или магазин плагина выдаёт не те предметы. После добавления или удаления мода поменялись ID предметов. Обновите конфиг плагина.
FAQ#
Нужно ли игрокам подписываться на мои карты из мастерской?
Нет. Сервер отправляет свой список элементов при входе, и клиент сам скачивает всё из Steam. Игрокам нужно лишь дождаться загрузки при первом входе.
Где найти внутреннее имя карты?
На странице карты в мастерской - большинство авторов его указывают. Если нет, посмотрите имя папки внутри скачанного элемента мастерской на сервере. Именно это имя папки пишется после Map в Commands.dat.
Можно ли добавлять моды без перезапуска?
Нет. WorkshopDownloadConfig.json читается при загрузке. Добавьте ID, затем перезапустите сервер, лучше в тихий час.
Почему моя карта загружается без зданий?
Она зависит от пакета ассетов, которого нет у сервера или игрока. Добавьте в File_IDs всё, что требует страница карты, перезапустите сервер и проверьте лог загрузки.
Можно ли вписать в файл ID коллекции из мастерской?
Надёжный способ - перечислять ID отдельных элементов. Поведение коллекций на сервере менялось от сборки к сборке, а явный список делает понятным, что у вас запущено.
Что будет с предметами игроков, если я удалю мод?
Всё, что пришло из этого мода, исчезнет из инвентарей, хранилищ и машин. Объявляйте об удалении и храните резервную копию, сделанную до изменения, на случай если придётся его откатить.




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