MAATRIX GAMES / Блог / Don't Starve Together: установка модов на сервер

Don't Starve Together: установка модов на сервер

MAATRIX GAMES

Ванильный DST быстро надоедает, если играть большой компанией дольше пары недель — хочется больше слотов в инвентаре, менее злого баланса голода зимой или просто пачку косметических скинов на всех. Проблема в том, что на dedicated-сервере моды ставятся не так, как в обычном клиенте с одной кнопкой "Subscribe" в Steam — тут два отдельных файла, которые легко перепутать местами, и именно на этом спотыкается почти каждый новичок. Разберём весь путь от ID мода в Workshop до рабочего сервера с синхронизированными версиями у всех игроков.

Два файла, которые отвечают за моды

На сервере DST моды настраиваются через связку из двух Lua-файлов, и у каждого своя зона ответственности — путать их не стоит:

  • dedicated_server_mods_setup.lua — лежит в папке установки самого сервера (~/dst_server/mods/dedicated_server_mods_setup.lua) и отвечает только на один вопрос: какие моды вообще нужно скачать с Steam Workshop. Этот файл общий для сервера целиком, не привязан к конкретному кластеру или шарду.
  • modoverrides.lua — лежит внутри папки шарда (Master/modoverrides.lua и Caves/modoverrides.lua) и отвечает за то, какие из уже скачанных модов включены в конкретном мире, а также за их настройки (configuration_options).

Логика такая: сначала мод должен появиться на диске (через первый файл), потом его нужно явно включить для конкретного шарда (через второй). Скачанный, но не включённый в modoverrides.lua мод просто лежит мёртвым грузом и не влияет на игру — это первая частая причина "я всё поставил, а мод не работает".

Если сервер ещё не поднят с нуля, сначала пройдите базовую установку — она описана в статье как поднять сервер Don't Starve Together, там же про структуру папок ~/.klei/DoNotStarveTogether/, которая понадобится и здесь.

Находим ID мода в Steam Workshop

Каждый мод в Workshop имеет числовой ID — он и есть тот идентификатор, который сервер использует для скачивания. Взять его просто: открываем страницу мода в Steam Workshop и смотрим на URL в адресной строке.

https://steamcommunity.com/sharedfiles/filedetails/?id=1467214795

Число после ?id= — это и есть ID мода, в примере выше 1467214795. Никаких дефисов, префиксов и кавычек на этом этапе не нужно — просто голое число, запишите его отдельно для каждого мода, который планируете ставить.

Если ставите не один мод, а сразу целую подборку (коллекцию Workshop от кого-то из комьюнити), у коллекции тоже есть свой ID — работает похожим образом, но добавляется в конфиг другой функцией (см. ниже).

Поднять сервер Don't Starve Together за пару минут

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

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

dedicated_server_mods_setup.lua: что скачивать

Открываем файл на сервере (если его ещё нет — создаём вручную, обычно он появляется автоматически после первой установки через SteamCMD с парой закомментированных примеров внутри):

nano ~/dst_server/mods/dedicated_server_mods_setup.lua

Добавляем строку ServerModSetup(...) на каждый мод:

ServerModSetup("1467214795")
ServerModSetup("376333686")
ServerModSetup("1145253161")

Если ставите целую коллекцию Workshop одним заходом — используйте ServerModCollectionSetup с ID коллекции вместо перечисления каждого мода отдельно:

ServerModCollectionSetup("2495620550")

Это только список "что качать" — на этом этапе моды ещё ни на что не влияют, и даже не появятся в игре, пока не пройдёт следующий шаг.

Скачиваем моды: -only_update_server_mods

DST использует не голый SteamCMD-загрузчик воркшопа, а встроенный в саму игру механизм обновления модов сервера. Останавливаем сервер (если он уже запущен) и запускаем бинарник с флагом -only_update_server_mods:

cd ~/dst_server/bin64
./dontstarve_dedicated_server_nullrenderer_x64 -only_update_server_mods -cluster MyDediServer

Процесс подключится к Steam, прочитает список из dedicated_server_mods_setup.lua и скачает (или обновит) каждый мод в подпапку ~/dst_server/mods/workshop-<ID>/. Занимает от пары секунд до пары минут в зависимости от размера модов и количества штук — тяжёлые контентные моды с кастомными текстурами качаются заметно дольше, чем мелкие QoL-твики.

Проверить, что всё скачалось, можно просто посмотрев на папку:

ls ~/dst_server/mods/ | grep workshop-

Каждый ID из вашего dedicated_server_mods_setup.lua должен появиться здесь с префиксом workshop-. Если какого-то нет — либо неверный ID (опечатка при копировании из URL), либо мод был удалён автором из Workshop, либо временные проблемы с соединением к Steam — стоит повторить команду ещё раз.

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

modoverrides.lua: включаем моды по шардам

Скачанные моды пока ничего не делают — их нужно явно включить в файле шарда. Открываем Master/modoverrides.lua (создаём, если файла ещё нет):

nano ~/.klei/DoNotStarveTogether/MyDediServer/Master/modoverrides.lua

Формат — Lua-таблица, ключ строится как "workshop-<ID>" (в отличие от ServerModSetup, здесь префикс обязателен):

return {
  ["workshop-1467214795"] = {
    enabled = true,
    configuration_options = {},
  },
  ["workshop-376333686"] = {
    enabled = true,
    configuration_options = {
      -- у каждого мода свой набор опций, смотрите на странице мода в Workshop
      food_spoilage_rate = "0.5",
    },
  },
}

Если хотите тот же набор модов и в пещерах — нужен отдельный Caves/modoverrides.lua с тем же содержимым (общего файла на весь кластер DST не предусматривает). Проще всего не дублировать текст руками, а сделать символическую ссылку, чтобы оба шарда читали один и тот же файл:

rm ~/.klei/DoNotStarveTogether/MyDediServer/Caves/modoverrides.lua
ln -s ~/.klei/DoNotStarveTogether/MyDediServer/Master/modoverrides.lua \
      ~/.klei/DoNotStarveTogether/MyDediServer/Caves/modoverrides.lua

Осторожно: не все моды одинаково ведут себя в пещерах (некоторые — чисто наземный контент и в Caves просто бесполезны, но не вредны; другие рассчитаны только на надземный биом и могут криво себя вести под землёй). Если сомневаетесь — держите отдельные файлы вместо симлинка и включайте моды в Caves выборочно.

После правки modoverrides.lua перезапускаем шард(ы), чтобы изменения применились — на лету, без рестарта процесса, конфиг не подхватится.

Синхронизация с игроками и типичные ошибки

Моды на сервере — это только половина дела: игроки должны иметь тот же набор модов той же версии, иначе при подключении получат отказ. Клиент подписывается на нужные моды точно так же, как на любой одиночный мод — через Steam Workshop, кнопкой Subscribe на странице каждого мода из вашего списка. Удобно просто скинуть игрокам прямые ссылки на все моды из dedicated_server_mods_setup.lua.

Главная головная боль — рассинхрон версий. Steam обновляет подписанные моды автоматически и на сервере, и у клиентов, но не одновременно: если у игрока мод уже обновился, а сервер ещё не прогонял -only_update_server_mods (или наоборот) — версии разойдутся, и игра посчитает их разными модами, хотя физически это один и тот же Workshop-ID.

ОшибкаПричинаЧто делать
"This server requires mods you don't have"Игрок не подписан на один из активных модов сервераСкинуть игроку ссылку на мод в Workshop, подписаться, перезайти в Steam
"Mods do not match" / версии разошлисьСервер и клиент скачали мод в разное время, хеши не совпадаютПрогнать -only_update_server_mods на сервере и попросить игрока перезайти в Steam, чтобы клиент тоже обновился
Мод скачан, но не работает в игреЗабыли добавить enabled = true в modoverrides.lua шардаПроверить запись мода в modoverrides.lua, включить и перезапустить шард
Мод не появляется в папке mods/ после -only_update_server_modsНеверный ID (опечатка) или мод удалён/скрыт автором в WorkshopСвериться с URL мода в браузере, скопировать ID заново
Сервер падает сразу после включения нового модаКонфликт с другим модом или несовместимость с текущей версией игрыСм. подробный разбор в статье про краш сервера при загрузке мира

Хорошая привычка — не подключать сразу пачку из десяти модов одним заходом. Добавляйте по одному-два, перезапускайте сервер, убеждайтесь что мир грузится нормально, и только потом добавляйте следующий. Если что-то ломается, вы точно знаете, какой мод виноват, а не гадаете среди десятка новых записей в modoverrides.lua.

Поднять сервер Don't Starve Together за пару минут

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

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

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

Можно ли поставить моды без Steam, вручную скачав файлы?

Технически да — положить распакованный мод прямой папкой в ~/dst_server/mods/ с именем workshop-<ID> и включить в modoverrides.lua тем же способом. Но тогда авто-обновления не будет вовсе, и вы отвечаете за актуальность версии сами — обычно проще довериться штатному -only_update_server_mods.

Нужно ли перезапускать сервер после каждого изменения modoverrides.lua?

Да, на лету конфиг не перечитывается — правите файл, останавливаете и заново запускаете шард (или оба, если меняли общий симлинк).

Мод работает у меня локально в клиенте, но не грузится на сервере — почему?

Часть модов написана только под клиент (косметика, UI-твики) и физически не предназначена для стороны сервера — на странице мода в Workshop обычно есть пометка "Client Only" или похожая. Такие моды не нужно и не следует добавлять в dedicated_server_mods_setup.lua.

Как отключить мод, не удаляя его с диска?

Просто enabled = false в соответствующей записи modoverrides.lua — файлы мода останутся на месте, при необходимости включите обратно без повторного скачивания.

Сколько модов можно поставить одновременно?

Формального лимита нет, но каждый дополнительный мод — это лишняя нагрузка на RAM и потенциальная точка конфликта; на практике сервер с 15-20 активными модами уже требует внимательной проверки совместимости при каждом обновлении.