Глава 9.5: Спавн транспорта и динамические события
Главная | << Назад: Лут-экономика | Далее: Спавн игроков >>
Краткое содержание: Транспорт и динамические события (крушения вертолётов, конвои, полицейские машины) НЕ используют
types.xml. Они используют отдельную систему из трёх файлов:events.xmlопределяет, что появляется и в каком количестве,cfgeventspawns.xmlопределяет где, аcfgeventgroups.xmlопределяет групповые формации. Эта глава охватывает все три файла с реальными ванильными значениями.
Содержание
- Как работает спавн транспорта
- Записи транспорта в events.xml
- Справочник полей событий транспорта
- cfgeventspawns.xml -- позиции спавна
- События крушений вертолётов
- Военный конвой
- Полицейская машина
- cfgeventgroups.xml -- групповой спавн
- Корневой класс транспорта в cfgeconomycore.xml
- Распространённые ошибки
Как работает спавн транспорта
Транспорт не определяется в types.xml. Если вы добавите класс транспорта в types.xml, он не появится. Транспорт использует выделенный трёхфайловый конвейер:
events.xml-- Определяет каждое событие транспорта: сколько должно существовать на карте (nominal), какие варианты могут появиться (children) и флаги поведения -- lifetime и безопасный радиус.cfgeventspawns.xml-- Определяет физические мировые позиции, где события транспорта могут размещать сущности. Каждое имя события связано со списком записей<pos>с координатами x, z и углом.cfgeventgroups.xml-- Определяет групповой спавн, где несколько объектов появляются вместе с относительными смещениями позиций (например, разбитые поезда).
CE читает events.xml, выбирает событие, требующее спавна, ищет подходящие позиции в cfgeventspawns.xml, выбирает случайную позицию, удовлетворяющую ограничениям saferadius и distanceradius, затем спавнит случайно выбранную дочернюю сущность в этой позиции.
Все три файла находятся в mpmissions/<ваша_миссия>/db/.
Записи транспорта в events.xml
Каждый тип ванильного транспорта имеет собственную запись события. Вот все они с реальными значениями:
Гражданский седан
<event name="VehicleCivilianSedan">
<nominal>8</nominal>
<min>5</min>
<max>11</max>
<lifetime>300</lifetime>
<restock>0</restock>
<saferadius>500</saferadius>
<distanceradius>500</distanceradius>
<cleanupradius>200</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="5" min="3" type="CivilianSedan"/>
<child lootmax="0" lootmin="0" max="5" min="3" type="CivilianSedan_Black"/>
<child lootmax="0" lootmin="0" max="5" min="3" type="CivilianSedan_Wine"/>
</children>
</event>Все ванильные события транспорта
Все события транспорта используют ту же структуру, что и седан выше. Различаются только значения:
| Имя события | Nominal | Min | Max | Lifetime | Варианты (дочерние) |
|---|---|---|---|---|---|
VehicleCivilianSedan | 8 | 5 | 11 | 300 | CivilianSedan, _Black, _Wine |
VehicleOffroadHatchback | 8 | 5 | 11 | 300 | OffroadHatchback, _Blue, _White |
VehicleHatchback02 | 8 | 5 | 11 | 300 | Варианты Hatchback02 |
VehicleSedan02 | 8 | 5 | 11 | 300 | Варианты Sedan02 |
VehicleTruck01 | 8 | 5 | 11 | 300 | Варианты грузовика V3S |
VehicleOffroad02 | 3 | 2 | 3 | 300 | Gunter -- меньше спавнится |
VehicleBoat | 22 | 18 | 24 | 600 | Лодки -- наибольшее количество, больший lifetime |
У VehicleOffroad02 nominal ниже (3), чем у других наземных транспортных средств (8). У VehicleBoat и наибольший nominal (22), и больший lifetime (600 против 300).
Справочник полей событий транспорта
Поля уровня события
| Поле | Тип | Описание |
|---|---|---|
name | string | Идентификатор события. Должен совпадать с записью в cfgeventspawns.xml, когда position="fixed". |
nominal | int | Целевое количество активных экземпляров этого события на карте. |
min | int | CE попытается заспавнить ещё, когда количество упадёт ниже этого значения. |
max | int | Жёсткий верхний предел. CE никогда не превысит это количество. |
lifetime | int | Секунды между проверками респавна. Для транспорта это НЕ время жизни самого транспорта -- это интервал, с которым CE переоценивает, нужно ли спавнить или удалять. |
restock | int | Минимальные секунды между попытками респавна. 0 = следующий цикл. |
saferadius | int | Минимальное расстояние (в метрах) от любого игрока для спавна события. Предотвращает появление транспорта на глазах у игроков. |
distanceradius | int | Минимальное расстояние (в метрах) между двумя экземплярами одного события. Предотвращает появление двух седанов рядом друг с другом. |
cleanupradius | int | Если игрок находится в пределах этого расстояния (в метрах), сущность события защищена от удаления. |
Флаги
| Флаг | Значения | Описание |
|---|---|---|
deletable | 0, 1 | Может ли CE удалить эту сущность события. Транспорт использует 0 (не удаляется CE). |
init_random | 0, 1 | Рандомизировать начальные позиции при первом спавне. 0 = использовать фиксированные позиции из cfgeventspawns.xml. |
remove_damaged | 0, 1 | Удалить сущность при разрушении. Критично для транспорта -- см. Распространённые ошибки. |
Прочие поля
| Поле | Значения | Описание |
|---|---|---|
position | fixed, player | fixed = спавн в позициях из cfgeventspawns.xml. player = спавн относительно позиций игроков. |
limit | child, mixed, custom | child = min/max применяются к каждому типу дочернего элемента. mixed = min/max общие для всех дочерних. custom = специфическое поведение движка. |
active | 0, 1 | Включить или отключить это событие. 0 = событие полностью пропускается. |
Поля дочерних элементов
| Атрибут | Описание |
|---|---|
type | Имя класса сущности для спавна. |
min | Минимальное количество экземпляров этого варианта. |
max | Максимальное количество экземпляров этого варианта. |
lootmin | Минимальное количество предметов лута, спавнящихся внутри/вокруг сущности. 0 для транспорта (запчасти приходят из cfgspawnabletypes.xml). |
lootmax | Максимальное количество предметов лута. Используется крушениями вертолётов и динамическими событиями, не транспортом. |
cfgeventspawns.xml -- позиции спавна
Этот файл связывает имена событий с мировыми координатами. Каждый блок <event> содержит список допустимых позиций спавна для этого типа события. Когда CE нужно заспавнить транспорт, она выбирает случайную позицию из этого списка, удовлетворяющую ограничениям saferadius и distanceradius.
<event name="VehicleCivilianSedan">
<pos x="4509.1" z="9321.5" a="172"/>
<pos x="6283.7" z="2468.3" a="90"/>
<pos x="11447.2" z="11203.8" a="45"/>
<pos x="2961.4" z="5107.6" a="0"/>
<!-- ... больше позиций ... -->
</event>У каждой <pos> три атрибута:
| Атрибут | Описание |
|---|---|
x | Мировая координата X (позиция восток-запад на карте). |
z | Мировая координата Z (позиция север-юг на карте). |
a | Угол в градусах (0-360). Направление, куда смотрит транспорт при спавне. |
Ключевые правила:
- Если у события нет соответствующего блока
<event>вcfgeventspawns.xml, оно не появится независимо от конфигурации вevents.xml. - Вам нужно как минимум столько записей
<pos>, сколько ваше значениеnominal. Если вы установитеnominal=8, но имеете только 3 позиции, появятся только 3. - Позиции должны быть на дорогах или ровной поверхности. Позиция внутри здания или на крутом склоне приведёт к тому, что транспорт появится закопанным или перевёрнутым.
- Значение
a(угол) определяет направление транспорта. Выравнивайте его с направлением дороги для естественного вида.
События крушений вертолётов
Крушения вертолётов -- это динамические события, создающие обломки с военным лутом и окружающими заражёнными. Они используют тег <secondary> для определения спавна зомби-окружения вокруг места крушения.
<event name="StaticHeliCrash">
<nominal>3</nominal>
<min>1</min>
<max>3</max>
<lifetime>2100</lifetime>
<restock>0</restock>
<saferadius>1000</saferadius>
<distanceradius>500</distanceradius>
<cleanupradius>200</cleanupradius>
<secondary>InfectedArmy</secondary>
<flags deletable="1" init_random="0" remove_damaged="0"/>
<position>fixed</position>
<limit>mixed</limit>
<active>1</active>
<children>
<child lootmax="15" lootmin="10" max="3" min="1" type="Wreck_UH1Y"/>
</children>
</event>Ключевые отличия от событий транспорта
<secondary>InfectedArmy</secondary>-- спавнит военных зомби вокруг места крушения. Этот тег ссылается на группу спавна заражённых, которую CE размещает поблизости.lootmin="10"/lootmax="15"-- обломки появляются с 10-15 предметами лута динамических событий. Это предметы с флагомdeloot="1"вtypes.xml(военное снаряжение, редкое оружие).lifetime=2100-- крушение сохраняется 35 минут, прежде чем CE удалит его и заспавнит новое в другом месте.saferadius=1000-- крушения никогда не появляются в пределах 1 км от игрока.remove_damaged=0-- обломки уже "повреждены" по определению, поэтому это должно быть 0, иначе они были бы немедленно удалены.
Военный конвой
Военные конвои -- это статические группы разбитых машин, которые появляются с военным лутом и заражёнными охранниками.
<event name="StaticMilitaryConvoy">
<nominal>5</nominal>
<min>3</min>
<max>5</max>
<lifetime>1800</lifetime>
<restock>0</restock>
<saferadius>1000</saferadius>
<distanceradius>500</distanceradius>
<cleanupradius>200</cleanupradius>
<secondary>InfectedArmy</secondary>
<flags deletable="1" init_random="0" remove_damaged="0"/>
<position>fixed</position>
<limit>mixed</limit>
<active>1</active>
<children>
<child lootmax="10" lootmin="5" max="5" min="3" type="Wreck_V3S"/>
</children>
</event>Конвои работают идентично крушениям вертолётов: тег <secondary> спавнит InfectedArmy вокруг места, а предметы лута с deloot="1" появляются на обломках. С nominal=5 до 5 мест конвоев существуют на карте одновременно. Каждый сохраняется 1800 секунд (30 минут) перед перемещением в новое место.
Полицейская машина
События полицейских машин создают разбитые полицейские автомобили с полицейскими заражёнными поблизости. Они отключены по умолчанию.
<event name="StaticPoliceCar">
<nominal>10</nominal>
<min>5</min>
<max>10</max>
<lifetime>2500</lifetime>
<restock>0</restock>
<saferadius>500</saferadius>
<distanceradius>200</distanceradius>
<cleanupradius>100</cleanupradius>
<secondary>InfectedPoliceHard</secondary>
<flags deletable="1" init_random="0" remove_damaged="0"/>
<position>fixed</position>
<limit>mixed</limit>
<active>0</active>
<children>
<child lootmax="5" lootmin="3" max="10" min="5" type="Wreck_PoliceCar"/>
</children>
</event>active=0 означает, что это событие отключено по умолчанию -- измените на 1 для включения. Тег <secondary>InfectedPoliceHard</secondary> спавнит усиленных полицейских зомби (более крепких, чем обычные заражённые). С nominal=10 и saferadius=500 полицейские машины более многочисленны, но менее ценны, чем крушения вертолётов.
cfgeventgroups.xml -- групповой спавн
Этот файл определяет события, где несколько объектов появляются вместе с относительными смещениями позиций. Самое распространённое применение -- заброшенные поезда.
<event name="Train_Abandoned_Cherno">
<children>
<child type="Land_Train_Wagon_Tanker_Blue" x="0" z="0" a="0"/>
<child type="Land_Train_Wagon_Box_Brown" x="0" z="15" a="0"/>
<child type="Land_Train_Wagon_Flatbed_Green" x="0" z="30" a="0"/>
<child type="Land_Train_Engine_Blue" x="0" z="45" a="0"/>
</children>
</event>Первый дочерний элемент размещается в позиции из cfgeventspawns.xml. Последующие элементы смещаются на значения x, z, a относительно этой точки. В этом примере вагоны расположены с интервалом 15 метров вдоль оси z.
У каждого <child> в группе есть:
| Атрибут | Описание |
|---|---|
type | Имя класса объекта для спавна. |
x | Смещение по X в метрах от начала группы. |
z | Смещение по Z в метрах от начала группы. |
a | Смещение угла в градусах от начала группы. |
Групповое событие всё ещё нуждается в соответствующей записи в events.xml для управления номинальными количествами, lifetime и состоянием активности.
Корневой класс транспорта в cfgeconomycore.xml
Чтобы CE распознавала транспорт как отслеживаемые сущности, у них должно быть объявление корневого класса в cfgeconomycore.xml:
<economycore>
<classes>
<rootclass name="CarScript" act="car"/>
<rootclass name="BoatScript" act="car"/>
</classes>
</economycore>CarScript-- базовый класс для всего наземного транспорта в DayZ.BoatScript-- базовый класс для всех лодок.- Атрибут
act="car"указывает CE обращаться с этими сущностями с поведением, специфичным для транспорта (персистентность, спавн на основе событий).
Без этих записей корневых классов CE не будет отслеживать или управлять экземплярами транспорта. Если вы добавляете модовый транспорт, наследующий от другого базового класса, вам может потребоваться добавить его корневой класс здесь.
Распространённые ошибки
Это самые частые проблемы со спавном транспорта, с которыми сталкиваются администраторы серверов.
Добавление транспорта в types.xml
Проблема: Вы добавляете CivilianSedan в types.xml с nominal 10. Ни одного седана не появляется.
Решение: Удалите транспорт из types.xml. Добавьте или отредактируйте событие транспорта в events.xml с соответствующими дочерними элементами и убедитесь, что в cfgeventspawns.xml есть подходящие позиции спавна. Транспорт использует систему событий, а не систему спавна предметов.
Нет подходящих позиций спавна в cfgeventspawns.xml
Проблема: Вы создаёте новое событие транспорта в events.xml, но транспорт никогда не появляется.
Решение: Добавьте соответствующий блок <event name="ИмяВашегоСобытия"> в cfgeventspawns.xml с достаточным количеством записей <pos>. Имя name события в обоих файлах должно совпадать точно. Вам нужно как минимум столько позиций, сколько ваше значение nominal.
Установка remove_damaged=0 для управляемого транспорта
Проблема: Вы устанавливаете remove_damaged="0" для события транспорта. Со временем сервер заполняется разбитыми машинами, которые никогда не исчезают, блокируя позиции спавна и снижая производительность.
Решение: Оставляйте remove_damaged="1" для всего управляемого транспорта (седаны, грузовики, хэтчбеки, лодки). Это гарантирует, что при уничтожении транспорта CE удаляет его и спавнит свежий. Устанавливайте remove_damaged="0" только для объектов-обломков (крушения вертолётов, конвои), которые уже повреждены по замыслу.
Забыли установить active=1
Проблема: Вы настраиваете событие транспорта, но оно никогда не спавнится.
Решение: Проверьте тег <active>. Если он установлен в 0, событие отключено. Некоторые ванильные события, такие как StaticPoliceCar, поставляются с active=0. Установите его в 1 для включения спавна.
Недостаточно позиций спавна для номинального количества
Проблема: Вы устанавливаете nominal=15 для события транспорта, но в cfgeventspawns.xml существуют только 6 позиций. Появляется только 6 машин.
Решение: Добавьте больше записей <pos>. Как правило, включайте минимум 2-3x от вашего значения nominal в позициях, чтобы дать CE достаточно вариантов для удовлетворения ограничений saferadius и distanceradius.
Транспорт появляется внутри зданий или под землёй
Проблема: Транспорт появляется вклиненным в здание или закопанным в рельеф.
Решение: Проверьте координаты <pos> в cfgeventspawns.xml. Протестируйте позиции в игре с помощью админ-телепортации перед добавлением их в файл. Позиции должны быть на ровных дорогах или открытой местности, а угол (a) должен совпадать с направлением дороги.
