types.xml в DayZ: как править лут пачками и не сломать сервер
Что означают nominal, min, lifetime и restock в types.xml, почему ручная правка тысяч строк ломает экономику и как менять лут группами, сохраняя рабочую копию.
types.xml — файл, из-за которого админы DayZ проводят вечера в текстовом редакторе. В нём
описан каждый предмет в мире: сколько его должно быть, где он появляется и как долго живёт.
Файл большой — несколько тысяч записей в ванильной сборке. Отсюда две беды: править вручную долго, а сломать одним неверным символом легко.
Как устроена одна запись
Каждый предмет — блок <type> с параметрами:
<type name="M4A1">
<nominal>5</nominal>
<lifetime>7200</lifetime>
<restock>1800</restock>
<min>2</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"/>
</type>
Что здесь важно понимать по смыслу, а не по названию.
nominal — сколько единиц предмета экономика старается держать в мире. Не «сколько
заспавнится сразу», а целевое количество.
min — порог, ниже которого запускается пополнение. Когда предметов в мире становится
меньше этого числа, начинается restock.
lifetime — сколько секунд предмет лежит нетронутым, прежде чем исчезнуть. 7200 это два
часа.
restock — задержка перед восполнением, тоже в секундах.
category и вложенные usage и tier определяют, где предмет может появиться: в каких
типах локаций и в каких зонах карты.
Самая частая ошибка новичка — поднять nominal любимому оружию до сотни и удивиться, что оно
не появляется. Экономика ограничена не только этим числом: если у предмета не заданы
подходящие usage и tier, спавнить его просто некуда.
Почему ручная правка опасна
Три способа сломать сервер, все встречаются постоянно.
Незакрытый тег. Пропустил </type> — сервер не стартует. В логе будет ошибка парсинга с
номером строки, и это ещё повезло.
Дубль записи. Один и тот же name встречается дважды. Поведение непредсказуемое, ошибки
может не быть вообще.
Несогласованность с модами. Мод добавляет предметы своим файлом, ты правишь ванильный, и часть изменений не применяется. Или наоборот — правишь предмет, которого в текущей сборке уже нет.
Отдельно про масштаб: типовая задача звучит как «уменьшить весь военный лут вдвое» или «поднять lifetime всем аптечкам». Это сотни записей. Руками — час работы и почти гарантированная опечатка.
Как менять пачками
Правильный подход — не открывать файл и листать, а описывать правило.
«Найди все <type> с категорией weapons и тиром 4, раздели nominal на два, min пересчитай
пропорционально, остальное не трогай» — это одна операция над файлом, а не триста правок.
Такие задачи закрываются либо скриптом, либо агентом с доступом к файлам. Разница в том, что скрипт под каждую новую хотелку надо писать заново, а агенту правило проговаривается словами.
Что удобно поручать целиком:
- массовые изменения по категории, тиру или маске имени;
- проверку XML на валидность и дубли
nameдо перезапуска сервера; - сверку
types.xmlсо списком предметов установленных модов; - разбор ошибки парсинга из лога с указанием, что именно не так в строке.
Дока делает это на месте: открывает файл там, где он лежит, правит и сохраняет. Модель можно держать локальной — конфиги сервера никуда не уходят. Ставится бесплатно.
Правило, которое спасает
Перед любой массовой правкой делай копию файла. Звучит банально ровно до первого раза, когда это не сделано.
Разумный минимум: держать папку миссии под git. Тогда видно, что именно поменялось между запусками, и откат — одна команда. Для файла на несколько тысяч строк, который правят итерациями, это окупается на второй неделе.
Второе правило: меняй что-то одно за раз и перезапускай. Экономика DayZ реагирует не мгновенно, и если ты поменял пять вещей сразу, понять, какая из них дала странный результат, будет нечем.
Как проверить, что получилось
Перезапуск сервера — не проверка. Файл может быть валидным, а результат — не тем, что ты задумал.
Смотри nominal в сумме по категории до и после: если общее количество лута изменилось
втрое, а ты хотел вдвое, где-то заехала лишняя запись. И дай экономике время: после чистого
старта мир наполняется постепенно, и первые минуты ничего не говорят.
Общая настройка сервера, включая запуск и порты, разобрана в статье про свой сервер DayZ.