Глава 9.7: Состояние мира и персистентность
Главная | << Назад: Спавн игроков | Далее: Настройка производительности >>
Персистентность DayZ сохраняет мир живым между перезапусками. Понимание её работы позволяет управлять базами, планировать вайпы и избегать повреждения данных.
Содержание
- Как работает персистентность
- Каталог storage_1/
- Параметры персистентности в globals.xml
- Система территориальных флагов
- Предметы хранения (Hoarder)
- Настройки персистентности в cfggameplay.json
- Процедуры вайпа сервера
- Стратегия резервного копирования
- Распространённые ошибки
Как работает персистентность
DayZ хранит состояние мира в каталоге storage_1/ внутри папки профиля вашего сервера. Цикл прост:
- Сервер сохраняет состояние мира периодически (по умолчанию примерно каждые ~30 минут) и при штатном завершении работы.
- При перезапуске сервер читает
storage_1/и восстанавливает все сохранённые объекты -- транспорт, базы, палатки, бочки, инвентари игроков. - Предметы без персистентности (большинство наземного лута) заново генерируются Центральной Экономикой при каждом перезапуске.
Если storage_1/ не существует при запуске, сервер создаёт свежий мир без данных игроков и без построенных структур.
Каталог storage_1/
Профиль вашего сервера содержит storage_1/ со следующими подкаталогами и файлами:
| Путь | Содержимое |
|---|---|
data/ | Двоичные файлы, хранящие мировые объекты -- элементы баз, размещённые предметы, позиции транспорта |
players/ | Файлы .save для каждого игрока, индексированные по SteamID64. Каждый файл хранит позицию, инвентарь, здоровье, эффекты статуса |
snapshot/ | Снимки состояния мира, используемые во время операций сохранения |
events.bin / events.xy | Состояние динамических событий -- отслеживает местоположения крушений вертолётов, позиции конвоев и других заспавненных событий |
Папка data/ составляет основную часть персистентности. Она содержит сериализованные данные объектов, которые сервер читает при загрузке для восстановления мира.
Параметры персистентности в globals.xml
Файл globals.xml (в вашей папке миссии) управляет таймерами очистки и поведением флагов. Вот значения, связанные с персистентностью:
<!-- Обновление территориального флага -->
<var name="FlagRefreshFrequency" type="0" value="432000"/> <!-- 5 дней (секунды) -->
<var name="FlagRefreshMaxDuration" type="0" value="3456000"/> <!-- 40 дней (секунды) -->
<!-- Таймеры очистки -->
<var name="CleanupLifetimeDefault" type="0" value="45"/> <!-- Очистка по умолчанию (секунды) -->
<var name="CleanupLifetimeDeadPlayer" type="0" value="3600"/> <!-- Тело мёртвого игрока: 1 час -->
<var name="CleanupLifetimeDeadAnimal" type="0" value="1200"/> <!-- Мёртвое животное: 20 минут -->
<var name="CleanupLifetimeDeadInfected" type="0" value="330"/> <!-- Мёртвый зомби: 5.5 минут -->
<var name="CleanupLifetimeRuined" type="0" value="330"/> <!-- Разрушенный предмет: 5.5 минут -->
<!-- Поведение очистки -->
<var name="CleanupLifetimeLimit" type="0" value="50"/> <!-- Максимум предметов за цикл очистки -->
<var name="CleanupAvoidance" type="0" value="100"/> <!-- Не удалять в радиусе 100 м от игрока -->Значение CleanupAvoidance предотвращает удаление объектов вблизи активных игроков. Если тело находится в пределах 100 метров от любого игрока, оно остаётся, пока игрок не отойдёт или таймер не сбросится.
Система территориальных флагов
Территориальные флаги -- это основа персистентности баз в DayZ. Вот как взаимодействуют два ключевых значения:
- FlagRefreshFrequency (
432000секунд = 5 дней) -- Как часто вы должны взаимодействовать с вашим флагом, чтобы он оставался активным. Подойдите к флагу и используйте действие "Обновить". - FlagRefreshMaxDuration (
3456000секунд = 40 дней) -- Максимальное накопленное время защиты. Каждое обновление добавляет до FlagRefreshFrequency времени, но общая сумма не может превысить этот лимит.
Когда таймер флага истекает:
- Сам флаг становится доступным для удаления.
- Все элементы базы, привязанные к этому флагу, теряют защиту персистентности.
- В следующем цикле очистки незащищённые элементы начинают исчезать.
Если вы снижаете FlagRefreshFrequency, игроки должны посещать свои базы чаще. Если вы увеличиваете FlagRefreshMaxDuration, базы сохраняются дольше между визитами. Настраивайте оба значения вместе в соответствии со стилем игры на вашем сервере.
Предметы хранения (Hoarder)
В cfgspawnabletypes.xml определённые контейнеры помечены тегом <hoarder/>. Это отмечает их как предметы, пригодные для хранения, которые учитываются в лимитах хранения на игрока в Центральной Экономике.
Ванильные предметы хранения:
| Предмет | Тип |
|---|---|
| Barrel_Blue, Barrel_Green, Barrel_Red, Barrel_Yellow | Бочки для хранения |
| CarTent, LargeTent, MediumTent, PartyTent | Палатки |
| SeaChest | Подводное хранилище |
| SmallProtectorCase | Маленький кейс с замком |
| UndergroundStash | Закопанный тайник |
| WoodenCrate | Крафтовый ящик |
Пример из cfgspawnabletypes.xml:
<type name="SeaChest">
<hoarder/>
</type>Сервер отслеживает, сколько предметов хранения каждый игрок разместил. При достижении лимита новые размещения либо не удаются, либо самый старый предмет исчезает (в зависимости от конфигурации сервера).
Настройки персистентности в cfggameplay.json
Файл cfggameplay.json в вашей папке миссии содержит настройки, влияющие на прочность баз и контейнеров:
{
"GeneralData": {
"disableBaseDamage": false,
"disableContainerDamage": false
}
}| Настройка | По умолчанию | Эффект |
|---|---|---|
disableBaseDamage | false | При true элементы базы (стены, ворота, сторожевые вышки) не могут быть повреждены. Это фактически отключает рейдерство. |
disableContainerDamage | false | При true контейнеры для хранения (палатки, бочки, ящики) не получают урона. Предметы внутри остаются в безопасности. |
Установка обоих в true создаёт PvE-сервер, где базы и хранилища неразрушимы. Большинство PvP-серверов оставляют оба значения false.
Процедуры вайпа сервера
Существует четыре типа вайпа, каждый нацелен на определённую часть storage_1/. Всегда останавливайте сервер перед выполнением любого вайпа.
Полный вайп
Удалите всю папку storage_1/. Сервер создаст свежий мир при следующей загрузке. Все базы, транспорт, палатки, данные игроков и состояние событий будут удалены.
Вайп экономики (сохранить игроков)
Удалите storage_1/data/, но оставьте storage_1/players/ нетронутым. Игроки сохранят своих персонажей и инвентари, но все размещённые объекты (базы, палатки, бочки, транспорт) будут удалены.
Вайп игроков (сохранить мир)
Удалите storage_1/players/. Все персонажи игроков сбрасываются к свежим спавнам. Базы и размещённые объекты остаются в мире.
Сброс погоды / событий
Удалите events.bin или events.xy из storage_1/. Это сбрасывает позиции динамических событий (крушения вертолётов, конвои). Сервер сгенерирует новые позиции событий при следующей загрузке.
Стратегия резервного копирования
Данные персистентности невосстановимы после утраты. Следуйте этим практикам:
- Копируйте при остановленном сервере. Копируйте всю папку
storage_1/, пока сервер не работает. Копирование во время работы рискует захватить частичное или повреждённое состояние. - Планируйте резервные копии перед перезапусками. Если вы запускаете автоматические перезапуски (каждые 4-6 часов), добавьте шаг резервного копирования в скрипт перезапуска, который копирует
storage_1/до запуска процесса сервера. - Храните несколько поколений. Ротируйте резервные копии, чтобы иметь минимум 3 свежих копии. Если последняя резервная копия повреждена, вы сможете откатиться к более ранней.
- Храните вне машины. Копируйте резервные копии на отдельный диск или в облачное хранилище. Отказ диска на машине сервера унесёт ваши резервные копии вместе с собой, если они на том же диске.
Минимальный скрипт резервного копирования (запускается перед стартом сервера):
BACKUP_DIR="/path/to/backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -r /path/to/serverprofile/storage_1 "$BACKUP_DIR/"Распространённые ошибки
Эти ошибки постоянно встречаются в сообществах администраторов серверов:
| Ошибка | Что происходит | Предотвращение |
|---|---|---|
Удаление storage_1/ при работающем сервере | Повреждение данных. Сервер пишет в файлы, которых больше нет, вызывая сбои или частичное состояние при следующей загрузке. | Всегда сначала останавливайте сервер. |
| Отсутствие резервной копии перед вайпом | Если вы случайно удалите не ту папку или вайп пойдёт не так, восстановить данные невозможно. | Делайте резервную копию storage_1/ перед каждым вайпом. |
| Путаница между сбросом погоды и полным вайпом | Удаление events.xy только сбрасывает позиции динамических событий. Оно не сбрасывает лут, базы или игроков. | Знайте, какие файлы за что отвечают (см. таблицу каталогов выше). |
| Флаг не обновлён вовремя | Через 40 дней (FlagRefreshMaxDuration) флаг истекает, и все привязанные элементы базы становятся доступными для удаления. Игроки теряют всю базу. | Напоминайте игрокам об интервале обновления. Снизьте FlagRefreshMaxDuration на серверах с малым онлайном. |
| Редактирование globals.xml при работающем сервере | Изменения не применяются до перезапуска. Хуже того -- сервер может перезаписать ваши правки при завершении работы. | Редактируйте конфигурационные файлы только при остановленном сервере. |
Главная | << Назад: Спавн игроков | Далее: Настройка производительности >>
