RE:NODE

Руководства13 мин чтения

DayZ: types.xml и экономика лута, как править безопасно

Как в DayZ появляется лут: nominal, min, lifetime и restock в types.xml, usage и тиры, events.xml, собственные папки ce и правка без опустошения карты.

0 прочтений

DayZ не разбрасывает лут случайно. Каждый предмет на карте размещает центральная экономика (central economy) - система учёта, которая считает, что существует, сравнивает это с целевым значением, создаёт недостающее в подходящих местах и удаляет то, к чему достаточно долго никто не прикасался. types.xml - это книга, по которой она работает: одна запись на класс предмета с целевым количеством, нижней границей, временем жизни, таймером пополнения и списком мест, где предмету разрешено появляться.

Когда вы это понимаете, у большинства жалоб на лут находятся очевидные ответы. Город пуст, потому что предметы, которые должны быть там, уже лежат где-то на карте в другом месте, или потому что у их записи никогда не было подходящего usage. Оружие из мода не появляется, потому что предметы мода вообще не добавляли в экономику. А сервер, опустевший за ночь, обычно не потерял лут - он потерял закрывающий тег, и файл перестал разбираться.

Это подробная версия статьи сервер DayZ, который переживает собственный список модов. Здесь разобраны файлы, поля, события, предметы из модов и порядок правки, который не обойдётся вам вайпом.

Где лежат файлы экономики#

Всё находится внутри папки миссии, которая для стандартной Chernarus - mpmissions/dayzOffline.chernarusplus/. Livonia - это dayzOffline.enoch, остальные карты устроены так же; какая миссия используется, задаёт template в serverDZ.cfg.

ФайлЧто в нём
cfgeconomycore.xmlКакие файлы экономики загружать, включая ваши собственные
db/types.xmlКаждый предмет: количество, время жизни, где он может появиться
db/events.xmlТранспорт, крушения вертолётов, динамические спауны
db/globals.xmlОбщие лимиты и таймеры всей экономики
db/economy.xmlКакие категории сохранения загружаются и записываются
db/messages.xmlРассылки сервера по таймеру и, как правило, перезапуск
cfgspawnabletypes.xmlОбвесы и содержимое на появившихся предметах
cfgrandompresets.xmlИменованные наборы содержимого и обвесов
cfgeventspawns.xmlКоординаты, которые может использовать каждое событие
cfglimitsdefinition.xmlДопустимые названия для category, tag, usage и value
cfgplayerspawnpoints.xmlГде появляются игроки
storage_1/Persistence: состояние мира, переживающее перезапуск

Два из них полезнее, чем намекают названия. cfglimitsdefinition.xml - авторитетный список того, что вы вправе писать в элементах usage и value на вашей карте, и он избавляет от множества догадок. А cfgeconomycore.xml - это способ добавлять собственные файлы, не правя чужие, и это лучшая привычка в администрировании DayZ.

Файлы экономики читаются при старте миссии. Ничего здесь не действует «вживую». Любое изменение требует перезапуска, а правка на работающем сервере - это правка файла, который сервер уже дочитал.

Как центральная экономика на самом деле принимает решения#

Экономика работает проходами. На каждом проходе она делает примерно следующее:

ниже minследующий проходОчисткаlifetime истёкСравнениес min и nominalОчередь спаунаrestock задаёт темпМесто для лутаusage и тир совпалиПодсчёт на картерешают флаги
Один проход центральной экономики

Отсюда три следствия, и они объясняют почти всё, что выглядит как сломанный лут.

`nominal` - это цель, а не обещание. Экономика не создаст предмет, которому некуда встать. Если список usage предмета не совпадает ни с одним зданием на карте или его тир value не существует ни в одном регионе, nominal может быть 500, а вы не увидите ни одного.

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

Ничего не происходит мгновенно. restock ограничивает, как часто тип можно пополнять, а lifetime решает, когда нетронутый предмет убирается, освобождая место. Повышение nominal не заполняет карту за пять минут; оно поднимает потолок, к которому в ближайшие несколько часов будет тянуться пополнение.

Как читать запись в types.xml#

Полная запись выглядит так. Все поля необязательны, кроме имени и счётчиков, но в правильно составленной записи есть все:

db/types.xml
<type name="M4A1">    <nominal>15</nominal>    <lifetime>14400</lifetime>    <restock>1800</restock>    <min>8</min>    <quantmin>-1</quantmin>    <quantmax>-1</quantmax>    <cost>100</cost>    <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1"           count_in_player="0" crafted="0" deloot="0"/>    <category name="weapons"/>    <usage name="Military"/>    <value name="Tier4"/></type>
ПолеЧто означает
nominalЦелевое число на карте с учётом того, что разрешают считать флаги
minНижняя граница. Ниже неё экономика начинает добавлять предметы
lifetimeСекунды, которые нетронутый предмет живёт до очистки
restockСекунды до следующего пополнения этого типа, 0 - как можно скорее
quantmin / quantmaxПроцент заполнения для всего, что имеет количество, -1 - значение по умолчанию
costПриоритет спауна от 0 до 100, когда на одно место подходит несколько кандидатов
categoryШирокая группа: weapons, clothes, containers, explosives, food, tools

Флаги определяют, что засчитывается в nominal, и это самый недооценённый инструмент в файле:

ФлагСтавьте 1, когда
count_in_mapПредметы, лежащие в мире, должны учитываться. Почти всегда 1
count_in_cargoПредметы внутри контейнеров на земле должны учитываться
count_in_hoarderПредметы в палатках, бочках и закопанных тайниках должны учитываться
count_in_playerПредметы, которые носят игроки, должны учитываться
craftedПредмет создают игроки, экономика его не размещает
delootПредмет может появляться на динамических событиях, например на местах крушений

Если ценный предмет на давно живущем сервере кажется слишком распространённым, обычная причина - count_in_hoarder и count_in_player, стоящие в 0. Каждая винтовка, которую игроки припрятали, для экономики невидима, поэтому она продолжает создавать замену, пока в палатках не окажутся сотни, а на карте пятнадцать. Установка обоих флагов в 1 для оружия и патронов привязывает предложение к тому, что реально существует, и это самое близкое к экономике лута, которая ведёт себя как настоящая экономика.

lifetime - другой рычаг, о котором забывают. Короткое время жизни у мусора освобождает места для того, что стоит найти. Длинное у редких предметов означает, что они лежат в лесу там, где их уронили, занимая слот, в котором мог бы появиться новый.

usage, value и tag: где предмет может появиться#

Размещением управляют три элемента, и все три повторяемы. Запись с несколькими строками usage может появляться в любом из этих типов областей.

  • `usage` называет вид здания или области: Military, Police, Medic, Firefighter, Industrial, Farm, Hunting, Office, School, Prison, Town, Village, Coast.
  • `value` называет тир лута, то есть примерно то, как далеко от побережья и насколько опасен регион. Chernarus прошла через несколько переработок тиров, а у новых карт тиров больше, чем у старых.
  • `tag` называет вид места для лута: floor, shelves, ground.

Не принимайте этот список за истину для своей карты. Допустимые названия определены в cfglimitsdefinition.xml в папке вашей собственной миссии, а cfglimitsdefinitionuser.xml позволяет группировать их под своими именами. Откройте оба файла, прежде чем придумывать usage. Несуществующий usage или value - это не ошибка, которую вам покажут; это предмет, который никогда не появится. Собственное справочное описание всей системы от Bohemia - страница Central Economy mission files, и это единственный внешний документ, который стоит держать открытым.

Запись вообще без usage система размещения лута в зданиях разместить не может. Это сделано намеренно для предметов, которые приходят только через событие или как содержимое чего-то другого, и именно это ответ, когда совершенно корректная запись со здоровым nominal не даёт ничего.

events.xml и то, что не является лутом#

Транспорт, крушения вертолётов, полицейские машины, лодки и сопутствующие им динамические заражённые - не предметы. Это события, они описаны в events.xml:

db/events.xml
<event name="StaticHeliCrash">    <nominal>4</nominal>    <min>2</min>    <max>5</max>    <lifetime>1800</lifetime>    <restock>0</restock>    <saferadius>500</saferadius>    <distanceradius>500</distanceradius>    <cleanupradius>1500</cleanupradius>    <flags deletable="0" init_random="0" remove_damaged="1"/>    <position>fixed</position>    <limit>mixed</limit>    <active>1</active>    <children>        <child lootmax="0" lootmin="0" max="3" min="1" type="Wreck_UH1Y"/>    </children></event>

saferadius не даёт событию появиться прямо на игроке. distanceradius разносит два одинаковых события. cleanupradius - на каком расстоянии должен оказаться игрок, чтобы остатки события были удалены. position - это fixed для событий с заданными координатами и player для тех, что появляются рядом с кем-то. active - выключатель. children - классы, которые событие может реально разместить, с количеством каждого.

Сами координаты лежат в cfgeventspawns.xml, по блоку позиций на каждое имя события. Поэтому чтобы добавить на карту больше машин, нужны две правки: поднять nominal в events.xml и убедиться, что для них в cfgeventspawns.xml перечислено достаточно точек спауна. Одно повышение nominal ничего не даст, потому что экономике просто некуда их ставить.

У транспорта есть ещё одна тонкость. Обломки продолжают считаться, если флаг события remove_damaged их не убирает, так что сервер, на котором игроки уничтожили все машины, может достичь своего nominal, не имея ни одной исправной.

Собственные папки ce и предметы модов, которые не появляются#

Мод добавляет имена классов. Он не добавляет записи в экономику, а экономика не создаст класс, о котором никогда не слышала. Это и есть полное объяснение самого частого вопроса поддержки DayZ: мод загружен, оружие есть в файлах, а создавать его никто не собирается.

Большинство модов поставляют собственный файл types. Правильное место для него - ваша собственная папка, зарегистрированная в cfgeconomycore.xml:

cfgeconomycore.xml
<economycore>    <!-- leave the vanilla contents exactly as they are -->    <ce folder="custom">        <file name="mod_types.xml" type="types" />        <file name="mod_spawnabletypes.xml" type="spawnabletypes" />        <file name="mod_events.xml" type="events" />    </ce></economycore>

Создайте custom/ в папке миссии, положите туда файлы мода и перечислите каждый с правильным type. Собственный файл types - обычный документ <types>, содержащий только записи мода.

Зачем возиться, а не вставить записи прямо в types.xml? Потому что обновление DayZ заменяет файлы миссии. Всё, что вы добавили в types.xml, пропадёт; всё, что лежит в вашей папке, уцелеет, а повторная регистрация - это одна строка. Держите свои добавления в своих файлах, и обновления будут стоить вам вечера, а не выходных.

Два уточнения на случай, когда предмет мода всё равно ведёт себя странно:

  • Он появляется пустым. Винтовке без магазина и оптики нужна запись в файле spawnabletypes, где определяются обвесы и содержимое.
  • Он появляется повсюду. Автор мода поставил щедрый nominal и широкий список usage, чтобы вы наверняка заметили предмет. Теперь это ваши числа, и умолчания мода - это предложение, а не решение о балансе.

Согласование списка модов и экономики - большая часть работы на сервере с модами, и об этом же статья как держать сервер с модами в чистоте.

Порядок правки, не опустошающий карту#

У экономики нет шага проверки, который увидел бы игрок. Испорченный файл - это не ошибка на экране входа; это сервер, который запускается, работает и в котором ничего нет.

  1. Держите нетронутую копию папки миссии. Перед первой правкой скопируйте её куда-нибудь за пределы сервера. Только это делает возможным шаг 6.
  2. Правьте по одному файлу, при остановленном сервере. Редактора в браузере с подсветкой синтаксиса в панели достаточно, и он покажет незакрытый тег; как вместо этого скачать всю папку целиком, описано в статье SFTP и файловый менеджер.
  3. Проверьте XML до перезапуска. Подойдёт любой валидатор. Большинство сломанных экономик DayZ - это один пропущенный / в закрывающем теге.
  4. Перезапустите и прочитайте лог. Сервер при каждом старте пишет файл .RPT в папку profiles, и ошибки разбора экономики в нём указаны по имени файла.
  5. Дайте время, прежде чем судить. Из-за таймеров restock и lifetime изменение проявляется через часы, а не минуты. Не вносите вторую правку, пока ждёте результата первой.
  6. Если карта пуста, верните нетронутую копию и повторите правку. Не отлаживайте живой вайп.

Persistence, storage и вайпы#

storage_1/ хранит всё, что помнит мир: файлы .bin, в которых записаны динамические объекты, транспорт и построенные сооружения, и players.db с персонажами. Собственное состояние экономики лежит рядом с ними.

  • Удаление `storage_1` - это полный вайп. Палатки, транспорт, базы, персонажи, всё.
  • Удаление только `players.db` сбрасывает персонажей и оставляет мир стоять - это то, что обычно называют «вайпом персонажей».
  • `storageAutoFix = 1;` в `serverDZ.cfg` позволяет серверу при старте починить повреждённый файл persistence, а не отказаться от него. Включите это. Альтернатива автоматической починке - не целый файл, а починка вручную.

Структурное изменение экономики - новая карта, мод, меняющий классы предметов, переработка тиров - как правило, требует вайпа, потому что старое persistence ссылается на мир, которого больше нет. Корректировка nominal его не требует.

Сами перезапуски - часть администрирования DayZ, а не помеха ему. Большинство серверов перезапускают каждые три-четыре часа, и чтобы очистить накопившееся состояние, и потому что некоторые механизмы экономики сбрасываются только при старте миссии. db/messages.xml рассылает предупреждения по таймеру и в современных версиях может нести само выключение. Альтернатива - планировщик вне игры: в RE:NODE это вкладка Schedules, где cron-выражение запускает упорядоченные задачи с паузами, так что одно расписание может отправить предупреждение, сделать backup и затем перезапустить сервер. Как часто перезапускать - слишком часто или в самый раз, описано в статье расписания перезапуска, которые помогают, а остальной список есть в статье задачи по расписанию, которые стоит завести.

Делайте backup папки миссии и storage_1 вместе, потому что восстановление одного без другого даёт экономику, которая расходится с миром. Слоты backup на тарифах DayZ в RE:NODE хранятся вне машины, которую защищают, и восстанавливаются кнопкой; именно это вам нужно в тот момент, когда карта опустела и никто не уверен, какая правка это сделала. Довод в пользу того, чтобы проверить это заранее, приведён в статье backup, которые действительно восстанавливаются.

Диагностика#

Вся карта пуста после правки. Файл не разобрался. Найдите имя файла в .RPT или просто верните нетронутую копию и повторите изменение.

Предметы из мода не появляются. Нет записи в экономике. Зарегистрируйте файл types мода в собственной папке ce.

Я поднял nominal, а ничего не изменилось. Таймеры restock либо нет подходящих мест для лута. Убедитесь, что названия usage и value существуют в cfglimitsdefinition.xml для вашей карты.

Города пусты, а у игроков есть всё. Работает как настроено. Поставьте count_in_hoarder и count_in_player в 1 для нужных типов предметов, и экономика перестанет заменять то, что уже находится в мире.

Военный лут там, где его быть не должно. Проверьте usage и value в этих записях, а не nominal. Предмет с Town в списке usage будет появляться в городах, как бы низко вы ни поставили число.

Транспорт не возвращается. Это события. Проверьте nominal события, хватает ли позиций в cfgeventspawns.xml и считаются ли ещё уничтоженные обломки.

Сервер запускается, но лог полон предупреждений экономики. Обычно это повторяющееся имя типа в двух файлах - такое случается, когда записи мода вставили в types.xml и одновременно загрузили из своей папки. Держите каждый класс ровно в одном месте.

FAQ#

Чем отличаются nominal и min в types.xml?

nominal - целевое число, к которому стремится экономика. min - нижняя граница, запускающая пополнение. Когда подсчитанное число падает ниже min, экономика начинает добавлять предметы, пока не достигнет nominal, с учётом таймера restock.

Почему предмет с высоким nominal всё равно не появляется?

Либо его ничто не считает, либо его некуда поставить. Проверьте, что count_in_map равен 1, затем убедитесь, что названия usage и value в записи действительно существуют для вашей карты в cfglimitsdefinition.xml. Запись без usage вообще нельзя разместить как лут в зданиях.

Нужно ли перезапускать сервер после правки types.xml?

Да. Файлы экономики читаются один раз, при старте миссии. Ничто из types.xml, events.xml или cfgeconomycore.xml не применяется к работающему серверу.

Как добавить предметы мода в экономику лута?

Положите файл types мода в собственную папку внутри миссии и зарегистрируйте его в cfgeconomycore.xml блоком ce с type="types". Обвесы и содержимое требуют файла spawnabletypes, зарегистрированного тем же способом.

Приведёт ли правка экономики к вайпу сервера?

Корректировка количества и времени жизни - нет. Смена карты или изменения, меняющие набор существующих классов предметов, как правило, приведут, потому что сохранённый мир ссылается на объекты, которые больше не определены. Перед тем и другим сделайте backup storage_1 и папки миссии вместе.

Через сколько будет видно изменение лута?

Через часы, а не минуты. Существующим предметам нужно дожить до конца lifetime, чтобы освободить слоты, а таймеры restock задают темп появления замены. Внесите одно изменение, подождите сутки и только потом судите.


Комментарии

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

0/2000