Разбор vehicles.meta по полям

Автор: Nilo3D · Обновлено:

vehicles.meta регистрирует модель транспорта в GTA V. В этом XML-файле каждый Item задаёт имя модели и её словаря текстур, связывает её с записью handling и layout сидений, определяет тип, класс, дистанции LOD и флаги поведения. Без записи в этом файле игра не считает .yft транспортом.

Что делает vehicles.meta?

vehicles.meta содержит по одному <Item> на каждый транспорт внутри <InitDatas>. При загрузке файла игра создаёт модель транспорта для каждого Item и находит всё, на что он ссылается: запись handling, layout, камеры и параметры взрыва. В FiveM файл загружается строкой data_file 'VEHICLE_METADATA_FILE'.

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

<?xml version="1.0" encoding="UTF-8"?>
<CVehicleModelInfo__InitDataList>
  <residentTxd>vehshare</residentTxd>
  <residentAnims />
  <InitDatas>
    <Item>
      <modelName>mycar</modelName>
      <txdName>mycar</txdName>
      <handlingId>MYCAR</handlingId>
      <gameName>MYCAR</gameName>
      <vehicleMakeName>KARIN</vehicleMakeName>
      <audioNameHash>sultan</audioNameHash>
      <layout>LAYOUT_STANDARD</layout>
      <cameraName>DEFAULT_FOLLOW_VEHICLE_CAMERA</cameraName>
      <wheelScale value="0.293000" />
      <wheelScaleRear value="0.293000" />
      <HDTextureDist value="5.000000" />
      <lodDistances content="float_array">
        10.000000
        25.000000
        50.000000
        100.000000
        500.000000
        500.000000
      </lodDistances>
      <flags>FLAG_AVERAGE_CAR FLAG_POOR_CAR</flags>
      <type>VEHICLE_TYPE_CAR</type>
      <plateType>VPT_BACK_PLATES</plateType>
      <dashboardType>VDT_SULTAN</dashboardType>
      <vehicleClass>VC_SPORT</vehicleClass>
      <wheelType>VWT_SPORT</wheelType>
      <!-- copy the remaining tags from the stock vehicle you start from -->
    </Item>
  </InitDatas>
  <txdRelationships>
    <Item>
      <parent>vehshare</parent>
      <child>mycar</child>
    </Item>
  </txdRelationships>
</CVehicleModelInfo__InitDataList>

Какие поля идентифицируют транспорт?

Пять полей связывают запись с файлами модели и с другими meta-файлами, и каждое должно точно совпадать со своей парой.

ПолеЗначениеДолжно совпадать с
modelNameИмя файла модели и имя для спавна.stream/<modelName>.yft
txdNameИмя файла словаря текстур.stream/<txdName>.ytd
handlingIdИмя записи handling для этого транспорта.handlingName в handling.meta
gameNameКлюч текстовой метки для отображаемого названия. Хранится в буфере на 12 символов, поэтому берите не больше 11 символов.Метка, добавленная через AddTextEntry
vehicleMakeNameКлюч текстовой метки производителя. То же ограничение длины.Необязательная метка

handlingId может указывать на стоковую запись handling, например SULTAN. В этом случае транспорту не нужен свой handling.meta.

Какие поля управляют сиденьями, камерами и звуком?

Эти поля выбирают готовые настройки по имени. Имена ссылаются на записи, которые уже есть в игре, или на те, что вы добавляете в другом meta-файле.

ПолеЗначение по умолчанию в схемеЗначение
layoutLAYOUT_STANDARDLayout сидений из vehiclelayouts.meta: сиденья, точки входа и анимации. См. разбор vehiclelayouts.meta.
audioNameHashпустоИмя звуковой настройки, обычно это имя модели стокового транспорта.
cameraNameDEFAULT_FOLLOW_VEHICLE_CAMERAСледящая камера от третьего лица.
aimCameraNameDEFAULT_THIRD_PERSON_VEHICLE_AIM_CAMERAКамера при прицеливании из транспорта.
bonnetCameraName, povCameraNameпустоКамера на капоте и камера от первого лица.
coverBoundOffsetsSTANDARD_COVER_OFFSET_INFOПозиции укрытия вокруг транспорта.
explosionInfoEXPLOSION_INFO_DEFAULTКакую настройку взрыва игра берёт, когда транспорт взрывается.
vfxInfoNameVFXVEHICLEINFO_CAR_GENERICНабор визуальных эффектов (выхлоп, эффекты колёс).
numSeatsOverride-1Принудительно задаёт число сидений. При -1 его определяет layout.

Что означают lodDistances и HDTextureDist?

В lodDistances записаны шесть дистанций в метрах. Они определяют, какая версия модели отрисовывается. Первое значение задаёт дальность высокодетализированной модели; если оно больше нуля, игра также регистрирует второй файл модели с именем <modelName>_hi.

ПозицияВнутреннее имяКакая версия модели рисуется до этой дистанции
1VLT_HDВысокодетализированная модель (_hi.yft).
2VLT_LOD0Самый детальный LOD внутри основного .yft.
3VLT_LOD1Второй LOD.
4VLT_LOD2Третий LOD.
5VLT_LOD3Четвёртый LOD.
6VLT_LOD_FADEТранспорт перестаёт отрисовываться. Если здесь 0, игра берёт пятое значение.

У стокового Sultan стоит 10, 25, 50, 100, 500, 500. HDTextureDist (по умолчанию 5.0) задаёт дистанцию для текстур высокого разрешения. Сами LOD разобраны в гайде о LOD в транспорте FiveM.

Другие поля отрисовки: wheelScale и wheelScaleRear задают масштаб передних и задних колёс, dirtLevelMin и dirtLevelMax (от 0 до 1) задают, насколько грязным спавнится транспорт, diffuseTint задаёт цветовой оттенок, а damageMapScale и damageOffsetScale (от 0 до 1) ограничивают визуальную деформацию.

Как шесть дистанций соотносятся с уровнями LOD модели и какие значения используем мы, описано в гайде как оптимизировать транспорт FiveM.

Какие значения допустимы для type, vehicleClass и других перечислений?

Каждое из пяти полей принимает одно значение из фиксированного списка. Всё, чего в списке нет, недопустимо.

ПолеЗначения
typeVEHICLE_TYPE_CAR, _PLANE, _TRAILER, _QUADBIKE, _DRAFT, _SUBMARINECAR, _AMPHIBIOUS_AUTOMOBILE, _AMPHIBIOUS_QUADBIKE, _HELI, _BLIMP, _AUTOGYRO, _BIKE, _BICYCLE, _BOAT, _TRAIN, _SUBMARINE
vehicleClassVC_COMPACT (0), VC_SEDAN, VC_SUV, VC_COUPE, VC_MUSCLE, VC_SPORT_CLASSIC, VC_SPORT, VC_SUPER, VC_MOTORCYCLE, VC_OFF_ROAD, VC_INDUSTRIAL, VC_UTILITY, VC_VAN, VC_CYCLE, VC_BOAT, VC_HELICOPTER, VC_PLANE, VC_SERVICE, VC_EMERGENCY, VC_MILITARY, VC_COMMERCIAL, VC_RAIL, VC_OPEN_WHEEL (22)
plateTypeVPT_FRONT_AND_BACK_PLATES, VPT_FRONT_PLATES, VPT_BACK_PLATES, VPT_NONE
wheelTypeVWT_SPORT, VWT_MUSCLE, VWT_LOWRIDER, VWT_SUV, VWT_OFFROAD, VWT_TUNER, VWT_BIKE, VWT_HIEND, от VWT_SUPERMOD1 до VWT_SUPERMOD5
dashboardTypeVDT_BANSHEE, VDT_BOBCAT, VDT_CAVALCADE, VDT_COMET, VDT_DUKES, VDT_FACTION, VDT_FELTZER, VDT_FEROCI, VDT_FUTO, VDT_GENTAXI, VDT_MAVERICK, VDT_PEYOTE, VDT_RUINER, VDT_SPEEDO, VDT_SULTAN, VDT_SUPERGT, VDT_TAILGATER, VDT_TRUCK, VDT_TRUCKDIGI, VDT_INFERNUS, VDT_ZTYPE, VDT_LAZER, VDT_SPORTBK, VDT_RACE, VDT_LAZER_VINTAGE, VDT_PBUS2

type должен согласовываться с handling: для VEHICLE_TYPE_BIKE нужна запись handling с блоком sub-handling для мотоцикла, для машины нужен блок для машины. wheelType определяет, какую категорию колёс предлагает меню тюнинга.

Что делают флаги в vehicles.meta?

<flags> содержит список имён, разделённых пробелами. Каждое имя включает одно поведение. В схеме их около 200. В таблице те, которые авторы аддонов трогают чаще всего, с описанием из данных игры.

ФлагЭффект
FLAG_HAS_LIVERYУ транспорта есть ливреи; при спавне подменяется текстура.
FLAG_EXTRAS_ALLВключаются все подходящие экстры.
FLAG_EXTRAS_REQUIREДолжна быть выбрана одна из доступных экстр.
FLAG_EXTRAS_STRONGЭкстры не отламываются.
FLAG_IS_ELECTRICУ транспорта нет бензобака.
FLAG_NO_BOOTТранспорт не учитывается для инвентаря багажника.
FLAG_IS_VANФургон: задние двери открываются в стороны.
FLAG_LAW_ENFORCEMENT, FLAG_EMERGENCY_SERVICEПомечает транспорт полиции и экстренных служб.
FLAG_NO_RESPRAYНельзя перекрасить в гаражах.
FLAG_CANNOT_BE_MODDEDЗапрещает тюнинг транспорта.
FLAG_DONT_SPAWN_AS_AMBIENT, FLAG_DONT_SPAWN_IN_CARGENИсключает транспорт из фонового трафика и из генераторов припаркованных машин.
FLAG_DRIVER_NO_DRIVE_BYВодитель не может делать drive-by.
FLAG_HAS_BULLETPROOF_GLASSСтёкла нельзя разбить.
FLAG_RICH_CAR, FLAG_AVERAGE_CAR, FLAG_POOR_CARКакие типы педов могут быть водителями.
FLAG_HEADLIGHTS_USE_ACTUAL_BONE_POSФары используют реальную позицию кости.

Какие поля влияют на трафик и спавн?

Эта группа полей важна, только когда игра сама спавнит транспорт в трафике. На большинстве roleplay-серверов аддон-транспорт спавнят скрипты, поэтому эти поля можно оставить такими же, как у скопированного стокового транспорта.

  • frequency и maxNum: как часто транспорт появляется в фоновом трафике и сколько его может там быть.
  • swankness: от SWANKNESS_0 до SWANKNESS_5, от развалюхи до очень дорогого.
  • identicalModelSpawnDistance и maxNumOfSameColor (по умолчанию 10): не дают одинаковому транспорту скапливаться.
  • defaultBodyHealth: по умолчанию 1000.
  • trailers, drivers, extraIncludes, requiredExtras: списки прицепов, которые можно прицепить, принудительных моделей водителей и экстр, которые спавнятся вместе.

Что такое residentTxd и txdRelationships?

residentTxd в начале файла называет словарь текстур, который остаётся загруженным для транспорта из этого файла. Стоковые файлы используют vehshare, общие текстуры транспорта. txdRelationships в конце файла содержит список пар «родитель и потомок»: если текстура не найдена в дочернем словаре, игра ищет её в родительском.

Так транспорт без общих текстур в своём .ytd всё равно находит их в vehshare. Так же несколько единиц транспорта могут делить один свой словарь: сделайте его родителем для txdName каждого транспорта.

Частые вопросы

Где находится vehicles.meta в GTA 5?
Базовый файл лежит в common.rpf по пути data/levels/gta5/vehicles.meta, а у каждого DLC-пака есть свой в common/data/levels/gta5/. В FiveM у аддон-транспорта свой vehicles.meta внутри ресурса.
Какое имя для спавна у аддон-транспорта?
Имя для спавна задаётся полем modelName в vehicles.meta, оно же имя файла модели .yft. gameName задаёт только отображаемую метку.
Какой длины может быть gameName?
Игра хранит gameName и vehicleMakeName в буферах на 12 символов, поэтому каждое может содержать не больше 11 символов.
Могут ли два транспорта использовать одну запись handling?
Да. Несколько записей vehicles.meta могут использовать один и тот же handlingId. Ездить они будут одинаково.
Как загрузить vehicles.meta в FiveM?
Укажите файл в files в fxmanifest.lua и добавьте data_file 'VEHICLE_METADATA_FILE' с тем же путём.

Источники

Товары из гайда

Все гайды