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.
Файлы экономики читаются при старте миссии. Ничего здесь не действует «вживую». Любое изменение требует перезапуска, а правка на работающем сервере - это правка файла, который сервер уже дочитал.
Как центральная экономика на самом деле принимает решения#
Экономика работает проходами. На каждом проходе она делает примерно следующее:
Отсюда три следствия, и они объясняют почти всё, что выглядит как сломанный лут.
`nominal` - это цель, а не обещание. Экономика не создаст предмет, которому некуда встать. Если список usage предмета не совпадает ни с одним зданием на карте или его тир value не существует ни в одном регионе, nominal может быть 500, а вы не увидите ни одного.
Предметы, уже лежащие в мире, считаются в счёт цели. Для этого и нужны флаги, и поэтому на сервере, где у каждого полная палатка, города могут быть пустыми. Экономика делает ровно то, что вы ей сказали: оружие существует, поэтому больше она его не создаёт.
Ничего не происходит мгновенно. restock ограничивает, как часто тип можно пополнять, а lifetime решает, когда нетронутый предмет убирается, освобождая место. Повышение nominal не заполняет карту за пять минут; оно поднимает потолок, к которому в ближайшие несколько часов будет тянуться пополнение.
Как читать запись в 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:
<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:
<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, чтобы вы наверняка заметили предмет. Теперь это ваши числа, и умолчания мода - это предложение, а не решение о балансе.
Согласование списка модов и экономики - большая часть работы на сервере с модами, и об этом же статья как держать сервер с модами в чистоте.
Порядок правки, не опустошающий карту#
У экономики нет шага проверки, который увидел бы игрок. Испорченный файл - это не ошибка на экране входа; это сервер, который запускается, работает и в котором ничего нет.
- Держите нетронутую копию папки миссии. Перед первой правкой скопируйте её куда-нибудь за пределы сервера. Только это делает возможным шаг 6.
- Правьте по одному файлу, при остановленном сервере. Редактора в браузере с подсветкой синтаксиса в панели достаточно, и он покажет незакрытый тег; как вместо этого скачать всю папку целиком, описано в статье SFTP и файловый менеджер.
- Проверьте XML до перезапуска. Подойдёт любой валидатор. Большинство сломанных экономик DayZ - это один пропущенный
/в закрывающем теге. - Перезапустите и прочитайте лог. Сервер при каждом старте пишет файл
.RPTв папку profiles, и ошибки разбора экономики в нём указаны по имени файла. - Дайте время, прежде чем судить. Из-за таймеров restock и lifetime изменение проявляется через часы, а не минуты. Не вносите вторую правку, пока ждёте результата первой.
- Если карта пуста, верните нетронутую копию и повторите правку. Не отлаживайте живой вайп.
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. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.