Enshrouded Sleep: настройка и ограничения многопользовательского сна
Enshrouded Sleep
Enshrouded Sleep — мод для пропорционального сна в сетевой игре Project Zomboid Build 42. Версия: v1.0.2. Проверенная автором базовая версия Project Zomboid: 42.21.0. Статус проекта указан как стабильный релиз.
Возможности мода
Enshrouded Sleep позволяет части игроков на многопользовательском сервере спать, не требуя, чтобы все живые игроки легли одновременно.
Во время частичного сна сервер, являющийся авторитетной стороной, ускоряет календарное время мира, уменьшая GameTime:MinutesPerDay. Передвижение бодрствующих игроков, бой, транспорт, анимации, физика и обычные действия с таймером продолжают выполняться в штатном активном режиме симуляции. Когда засыпают все живые игроки, мод восстанавливает исходную длину дня и передаёт полное ускорение сна стандартной игре Project Zomboid.
Во время частичного сна мод также защищает бодрствующих живых игроков от дополнительного ускорения показателей голода, жажды, усталости, калорий, углеводов, белков, липидов и изменения веса. Для спящих игроков действует стандартная логика игры.
Одиночная локальная/автономная игра не входит в поддерживаемый сценарий.
- Пропорциональное сжатие календарного времени при частичном сне в зависимости от доли спящих игроков.
- Изменение длины дня на стороне сервера вместо ускорения всей симуляции.
- Явная синхронизация темпа игровых часов между сервером и клиентами.
- Точное восстановление исходных настроек и передача полного сна стандартной игре, когда спят все.
- Защита показателей выживания бодрствующих игроков во время частичного сна.
- Отдельный переключатель отключения защиты для проверки совместимости.
- Необязательные краткие уведомления в серверном чате о сне и времени мира; по умолчанию отключены и контролируются администратором.
- Необязательные серверные награды Rested / Well Rested за подходящую продолжительность сна; по умолчанию отключены, для них настраиваются бонусы XP и восстановления Endurance.
- Собственное отображение Moodle Rested / Well Rested без зависимости от внешнего Moodle-фреймворка.
- Небольшой объём эксплуатационных журналов и подробная диагностика по запросу.
Совместимость с Build 42.21.0
Автор сообщает, что проверил мод на выделенном сервере Project Zomboid 42.21.0 (4a0e9546ec). При проверке запуск, фиксация исходных значений, пропорциональный частичный сон с защитой бодрствующих игроков, синхронизация часов клиента, точное восстановление исходных значений после пробуждения, уведомления о сне и выдача награды Rested прошли без Lua-исключений Enshrouded Sleep. Предыдущая контрольная версия — 42.20.4 (b0bbce05d5).
В Project Zomboid 42.20.4 удалили Lua-функции loadstring/loadstream, а в 42.21.0 вернули. Enshrouded Sleep не использует ни одну из них. Для сетевой синхронизации и необязательных уведомлений мод применяет заранее определённые именованные сообщения sendServerCommand / OnServerCommand со структурированными аргументами, а не исполняемый код, присланный сервером.
Необязательные уведомления и бонусы сна независимо отключены по умолчанию. Отключение любого из этих компонентов не меняет пропорциональный сон, синхронизацию часов или защиту бодрствующих игроков.
Настройка сервера
Добавьте в конфигурацию сервера Workshop и мод:
WorkshopItems=3786842301
Mods=pz-enshrouded-sleep
Рекомендуемые значения по умолчанию:
EnshroudedSleep.Enabled=true
EnshroudedSleep.PartialSleepSpeedScale=1.0
EnshroudedSleep.AwakePlayerProtectionEnabled=true
EnshroudedSleep.SleepNotificationsEnabled=false
EnshroudedSleep.SleepBenefitsEnabled=false
EnshroudedSleep.DiagnosticsEnabled=false
EnshroudedSleep.DiagnosticForcedCompressionFactor=1.0
Если установить SleepNotificationsEnabled=true, сервер будет отправлять короткие сообщения о состоянии сна, например: [Enshrouded Sleep] 1/2 living players sleeping (50%). World time is 20x faster. Уведомление появляется при изменении эффективного состояния многопользовательского сна. Это только настройка отображения для игроков под контролем администратора: отключение уведомлений не влияет на правила сна, синхронизацию часов клиента или защиту бодрствующих игроков.
Смысл параметров описан в справочнике конфигурации ниже. Порядок обновления и отката приведён в docs/RELEASING.md#updating-a-server, а мониторинг и диагностика — в docs/TESTING.md#chasing-a-problem. Подсказки в игровом меню песочницы содержат те же пояснения для администратора.
Справочник параметров
Назначение параметров для администратора:
- Enabled — главный переключатель Enshrouded Sleep.
- PartialSleepSpeedScale — множитель обычного пропорционального ускорения календарного времени при частичном сне; 1.0 означает нейтральное значение.
- AwakePlayerProtectionEnabled — защищает поддерживаемые показатели выживания и обмена веществ бодрствующих игроков во время частичного сна. При поиске проблемы совместимости сначала отключите этот параметр, чтобы изолировать слой защиты.
- SleepNotificationsEnabled — переключатель кратких сообщений о сне для игроков. По умолчанию отключён; не влияет на правила сна и времени, синхронизацию часов клиента или защиту бодрствующих игроков.
- SleepBenefitsEnabled — необязательный слой наград Rested / Well Rested. По умолчанию отключён; при включении не меняет условия получения награды или пропорциональное сжатие времени.
- DiagnosticsEnabled — включает подробную диагностику с большим объёмом данных; при обычной игре оставьте отключённой.
- DiagnosticForcedCompressionFactor — изолированный инструмент регрессионной проверки для одного игрока; при обычной многопользовательской игре сохраняйте значение 1.0.
При включённых уведомлениях сообщения о частичном сне используют установившийся авторитетный коэффициент сжатия времени и текущее число живых игроков. Например:
[Enshrouded Sleep] 1/2 living players sleeping (50%). World time is 20x faster.
Для переходов «все бодрствуют» и «все спят» используются короткие специальные сообщения: при передаче полного сна стандартной игре не показывается вводящий в заблуждение множитель.
Внутриигровые подсказки меню песочницы содержат более подробные описания параметров. Нормативное описание поведения часов, защиты и бонусов приведено в разделе требований docs/DESIGN.md#requirements.
Настройка бонусов за сон
Значения по умолчанию:
EnshroudedSleep.SleepBenefitsEnabled=false
EnshroudedSleep.RestedMinimumSleepHours=8.0
EnshroudedSleep.RestedDurationHours=4.0
EnshroudedSleep.RestedXPBonusPercent=10.0
EnshroudedSleep.WellRestedMinimumSleepHours=12.0
EnshroudedSleep.WellRestedDurationHours=6.0
EnshroudedSleep.WellRestedXPBonusPercent=10.0
EnshroudedSleep.WellRestedEnduranceRecoveryBonusPercent=10.0
Классификация продолжительности сна по умолчанию:
Меньше 8 игровых часов → новая награда не выдаётся
От 8 до 12 часов включительно → Rested: +10% XP на 4 игровых часа
Больше 12 игровых часов → Well Rested: +10% XP и +10% восстановления Endurance на 6 игровых часов
Нижняя граница Rested и верхняя граница 12 часов включены в диапазон; Well Rested требует сна строго дольше 12 часов. Сон дольше порога Well Rested всё равно даёт Well Rested: пересыпание не отменяет награду. Подходящий сон заменяет или обновляет текущий уровень награды, а не складывает бонусы. Короткий сон ниже порога не отменяет уже действующую награду.
Встроенное пользовательское отображение Moodle
Enshrouded Sleep включает собственный клиентский отрисовщик Moodle для Rested / Well Rested и оригинальные изображения. Дополнительная зависимость Workshop/UI не требуется.
Отрисовщик учитывает выбранный игроком размер Moodle в Build 42, размещает статус Enshrouded Sleep после видимых стандартных Moodle и во время работы использует установленные ресурсы фона и контура стандартных Moodle. Если установлен Lifestyle и активен его менеджер пользовательских Moodle, Enshrouded Sleep только считывает число занятых слотов, чтобы поместить значок ниже активных Moodle Lifestyle и избежать наложения.
Интерфейс отвечает только за отображение. Проблема с пользовательской Moodle не должна менять условия получения награды, эффекты XP/Endurance, сжатие времени или защиту бодрствующих игроков.
Для функции бонусов сна не нужен дополнительный элемент Workshop для Moodle/UI.
Игрокам, подключающимся к серверу с модом из Workshop, следует использовать распространяемую через Workshop копию, а не устанавливать рядом вторую ручную копию.
Важные ограничения
Во время частичного сна время мира и календаря действительно идёт быстрее. Защита бодрствующих игроков распространяется только на явно перечисленные выше показатели выживания. Внешние системы, зависящие от времени мира (в том числе порча продуктов, ресурсы генераторов и транспорта, фермерство и рост растений, погода, трупы и системы других модов), продолжают работать по обычным игровым часам, если для них отдельно не предусмотрено иное.
Срок действия Rested / Well Rested намеренно измеряется в игровых часах мира. Поэтому ускорение времени мира при частичном сне также быстрее расходует остаток длительности бонуса в реальном времени.
По словам автора, контролируемые испытания подтвердили основную архитектуру сжатия времени, синхронизацию клиентов и защиту бодрствующих игроков. Отдельные тесты на выделенном сервере проверили серверную арифметику XP для бонусов сна; журналы работающего сервера подтвердили уведомления, классификацию наград, длительность, истечение и сохранение после перезапуска. Отрисовка Moodle и очистка наград после смерти в реальной игре не наблюдались. Актуальные цели проекта ведутся только в docs/ROADMAP.md; подробные подтверждения — в docs/VALIDATION_HISTORY.md и docs/spikes/.