Skip to content

Конфиг ​

Конфиг мода находится в файле MPG_CarFellingTrees2/Config.json внутри папки с профилем сервера.

Пример минимального файла:

json
{
  "configVersion": 2,
  "documentation": "https://docs.mpg-dayz.ru/car-felling-trees-2",
  "logLevel": 3,
  "vehicles": [
    {
      "className": "Truck_01_Base",
      "fellingEnabled": 1,
      "slots": [],
      "fellingAttachmentSlots": [
        "Truck_01_Hood"
      ],
      "fellingMinSpeed": 15.0,
      "fellingMinImpulse": 200.0
    }
  ]
}

Параметры мода ​

configVersion ​

configVersion – Версия конфига, служебное поле, не нужно его менять. Оно обновляется само при обновлении мода, если в этом есть необходимость.

documentation ​

documentation – Служебное поле, содержит ссылку на документацию по моду для вашего удобства.

logLevel ​

logLevel – Глобальный уровень логирования мода. Числовой параметр.

Доступные значения:

ЗначениеУровеньЧто пишется
1TRACEМаксимальная детализация: результат каждой проверки валки
2DEBUGКаждое сваленное дерево (класснейм, координаты)
3INFOКлючевые события: старт/остановка мода (по умолчанию)
4WARNПредупреждения
5ERRORОшибки (не удалось загрузить/сохранить конфиг)
6FATALТолько критические ошибки

Значение по умолчанию: 3 (INFO).

Рекомендации

  • Обычная работа сервера – 3 (INFO).
  • Валка не работает и непонятно почему – поставьте 1 (TRACE). Мод напишет, какая именно проверка не прошла: двигатель выключен, скорость слишком низкая, импульс слишком слабый, слоты не заполнены, объект не дерево и т.д.
  • Нужно "тихо" – поставьте 6 (FATAL).

Пример: "logLevel": 3,

Логи в отдельный файл

Логи пишутся модом MPG_ModsLogger в папку MPG_CarFellingTrees2/Logs/. Если этот мод не установлен – мод деградирует до Print() в общий RPT-лог сервера.

vehicles ​

vehicles – Массив с настройками для каждого транспортного средства (машины и мотоциклы). Каждый элемент – объект с параметрами валки.

Пример:

json
"vehicles": [
{
"className": "Truck_01_Base",
"fellingEnabled": 1,
"slots": ["TruckBattery", "Reflector_1_1", "Reflector_2_1", "Truck_01_Hood"],
"fellingAttachmentSlots": ["Truck_01_Hood"],
"fellingMinSpeed": 15.0,
"fellingMinImpulse": 200.0,
"fellingNoBounce": false,
"fellingRayRadius": 0
}
]

treeTiers ​

treeTiers – Тиры деревьев: группы с повышенными порогами валки. Эффективный порог для дерева считается как максимум из порога машины и порога тира (0 = не повышать).

ПолеЧто значит
nameИмя тира, используется в trees
maxHeightВерхняя граница высоты дерева (м) для тира; 0 = закрывающий «всё остальное»
fellingMinSpeedМинимальная скорость (км/ч), 0 = без повышения
fellingMinImpulseМинимальный импульс, 0 = без повышения
fellingNoBounce-1 следовать настройке машины, 0 запретить ghost-валку, 1 разрешить

maxHeight работает только для деревьев с известной высотой: мод содержит встроенную таблицу высот всех ванильных деревьев (сгенерирована из моделей инструментов tools/parse-tree-heights.mjs). Тир дерева выбирается как первый в списке, чей maxHeight больше или равен высоте дерева; тир с maxHeight: 0 – «всё остальное».

При пустом массиве мод создаёт три дефолтных тира – small, medium, large с предустановленными границами высоты (до 4 м / до 8 м / до 25 м / всё остальное) и нулевыми порогами. Пороги не влияют на игру, пока вы их не зададите, но тир дерева резолвится по высоте сразу.

Типовое применение: тир large для больших деревьев, которые валит только тяжёлая техника на приличной скорости.

Пример:

json
"treeTiers": [
{"name": "small", "maxHeight": 8, "fellingMinSpeed": 0, "fellingMinImpulse": 0, "fellingNoBounce": -1},
{"name": "medium", "maxHeight": 14, "fellingMinSpeed": 20, "fellingMinImpulse": 0, "fellingNoBounce": -1},
{"name": "large", "maxHeight": 0, "fellingMinSpeed": 40, "fellingMinImpulse": 5000, "fellingNoBounce": 0}
]

trees ​

trees – Ручное переопределение тира для конкретного дерева. Приоритет тира:

  1. Ручной tier из trees[] (если задан) – главное слово;
  2. Высота дерева из встроенной таблицы против maxHeight тиров;
  3. Цифра в имени класса (1s/2s/3s) – fallback для деревьев без записи в таблице (например, с модовых карт).

Мод автоматически находит все деревья (TreeHard_*/TreeSoft_*, ванильные и из модов) и добавляет их в конфиг. Существующие записи не перезаписываются – ваши правки сохраняются между рестартами.

ПолеЧто значит
classNameИмя класса дерева в CfgVehicles
tierИмя тира из treeTiers; пусто – тир по высоте/цифре
heightИнформационное поле: высота модели (м) из встроенной таблицы. Заполняется модом при старте, на валку не влияет

Имя тира сравнивается без учёта регистра. Неизвестное имя тира игнорируется с предупреждением в логе.

Пример:

json
"trees": [
{"className": "TreeHard_t_FagusSylvatica_3s", "tier": "large"},
{"className": "TreeSoft_t_BetulaPendula_1s", "tier": "small"}
]

Как найти нужное дерево

Включите logLevel: 1 (TRACE), сбейте дерево машиной – в DEBUG-логе упавшего дерева виден className. Либо найдите класс в trees после первого запуска: мод допишет туда все деревья карты.


Параметры машины ​

TIP

Ниже описаны параметры одной машины.

Машин в массиве vehicles может быть столько, сколько вам нужно. Мод сам добавит недостающие при первом запуске.

className ​

className – Имя класса машины в CfgVehicles.

Можно использовать как конкретную машину (Truck_01_Covered), так и базовый класс (Truck_01_Base) – дочерние классы примут его настройки через наследование.

Пример: "className": "Truck_01_Covered",

fellingEnabled ​

fellingEnabled – Включение валки деревьев для этой машины.

ЗначениеЧто значит
-1Наследовать от родителя (нет явной настройки)
0Валка выключена явно
1Валка включена

По умолчанию мод добавляет все машины с -1 (наследование). Если ни у самой машины, ни у её предков нет 1 – валка выключена.

Пример: "fellingEnabled": 1,

Подробнее про -1

См. раздел Наследование параметров ниже.

slots ​

slots – Доступные слоты машины. Собираются модом автоматически один раз, при первом добавлении машины в конфиг.

Пример: "slots": ["TruckBattery", "Reflector_1_1", "Reflector_2_1", "Truck_01_Hood"],

fellingAttachmentSlots ​

fellingAttachmentSlots – Список слотов, которые должны быть заполнены незаруиненными аттачментами, чтобы валка сработала.

Пусто – проверка не нужна

Если массив пустой [] – проверка заполненности слотов не выполняется. Машина может валить деревья без дополнительных условий.

Например, можно потребовать, чтобы был установлен бампер:

json
"fellingAttachmentSlots": ["YourCar_Slot_Bamper"]

Если аттачмент в указанном слоте отсутствует или заруинен – дерево не упадёт.

Пример: "fellingAttachmentSlots": [],

fellingMinSpeed ​

fellingMinSpeed – Минимальная скорость машины в км/ч, при которой возможна валка.

Пример: "fellingMinSpeed": 15.0,

fellingMinImpulse ​

fellingMinImpulse – Минимальный импульс столкновения с деревом.

Импульс зависит от массы транспорта и скорости удара. Чем тяжелее транспорт и быстрее удар – тем выше импульс. Этот параметр позволяет отсеять лёгкие касания.

Мотоциклы

Мотоцикл в разы легче машины, поэтому для мотоциклов мод ставит дефолтный импульс 400.0 вместо машинного 2000.0. Дефолт применяется один раз, при первом добавлении мотоцикла в конфиг – дальше значение полностью ваше.

Пример: "fellingMinImpulse": 200.0,

fellingNoBounce ​

fellingNoBounce – Ghost-валка (режим «дровосека»).

При true мод заранее – лучом по ходу движения, примерно 10 раз в секунду – обнаруживает дерево на пути и валит его до физического контакта. Машина не отбрасывается, не получает урона и продолжает ехать с той же скоростью.

ЗначениеЧто значит
falseОбычная валка с физическим ударом (по умолчанию)
trueДерево сносится до контакта, отброса нет

Особенности ghost-режима:

  • Луч – не линия, а свип-сфера: радиус автоматически берётся от ширины коллижн-бокса транспорта, поэтому деревья чуть в стороне от линии движения тоже валятся. Позиция и высота луча также считаются от геометрии (передний борт, центр по высоте).
  • Кусты луч пропускает: дерево за подлеском валится так же, как чистое. Твёрдое препятствие (стена, дом) – стоп: сквозь него деревья не сносятся.
  • Импульс столкновения не проверяется – контакта нет, порог работает только по скорости.
  • Тир дерева может запретить ghost-валку (fellingNoBounce: 0) или поднять порог импульса – такое дерево потребует обычного физического удара. Если задан fellingMaxTier – пороги тиров переопределены настройкой машины.
  • Контактная валка остаётся страховкой: если дерево задето боком или луч его не увидел – сработает обычный сценарий.

Пример: "fellingNoBounce": true,

fellingRayRadius ​

fellingRayRadius – Радиус свип-сферы ghost-луча в метрах.

По умолчанию 0 – радиус вычисляется автоматически от ширины коллижн-бокса транспорта (полширины + 10 см), и это подходит почти всем. Задавайте значение вручную только если хочется расширить или сузить коридор валки для конкретной машины.

Пример: "fellingRayRadius": 0,

fellingMaxTier ​

fellingMaxTier – Максимальный тир дерева, который валит эта машина. Значение – имя тира из treeTiers, например "large". По умолчанию "" – ограничение не задано.

Если задано:

  • деревья тиров выше указанного машина не валит вовсе – ни ghost-валкой, ни контактной;
  • деревья указанного тира и ниже валятся только по порогам машины – пороги и вето тиров (fellingMinSpeed/fellingMinImpulse/fellingNoBounce из treeTiers) игнорируются для этого транспорта.

Порядок тиров = порядок объявления в treeTiers: чем ниже в списке, тем старше тир.

Пример: грузовик валит всё до large включительно по своим порогам, седан – только small и medium:

json
"vehicles": [
{"className": "Truck_01_Base", "fellingEnabled": 1, "fellingMinSpeed": 15, "fellingMinImpulse": 200, "fellingMaxTier": "large"},
{"className": "OffroadHatchback", "fellingEnabled": 1, "fellingMinSpeed": 20, "fellingMinImpulse": 1500, "fellingMaxTier": "medium"}
]

Неизвестное имя тира – warning в логе, ограничение не действует.


Наследование параметров ​

Значение fellingEnabled равно -1 означает "нет явной настройки – наследовать от родителя".

Пример ​

Иерархия классов:

CarScript
└─ Truck_01_Base
   └─ Truck_01_Covered

Конфиг:

json
"vehicles": [
{
"className": "Truck_01_Base",
"fellingEnabled": 1,
"fellingMinSpeed": 15.0,
"fellingMinImpulse": 200.0
},
{
"className": "Truck_01_Covered",
"fellingEnabled": -1
}
]

Что произойдёт:

  • Truck_01_Base – валка включена явной настройкой 1. Параметры: скорость 15, импульс 200.
  • Truck_01_Covered – fellingEnabled: -1, поднимаемся к Truck_01_Base -> берём оттуда 1 и все параметры.

Итог: Truck_01_Covered будет валить деревья со скоростью 15 км/ч и импульсом 200, хотя у него самого в конфиге указан только fellingEnabled: -1.

Как включить валку сразу для всех машин одного типа

Настройте базовый класс (..._Base, Offroad_02_Base и т.п.) один раз – все дочерние с fellingEnabled: -1 унаследуют настройки автоматически.

Можно ли переопределить отдельный параметр?

Нет. Наследование работает "целиком": если класс наследует, он берёт все параметры валки от найденного предка. Чтобы задать свои параметры для конкретной машины – поставьте ей fellingEnabled: 1 и укажите все нужные параметры явно.

Можно ли отключить валку для отдельной машины?

Да. В конфиге наследника поставь fellingEnabled: 0 — явно выключит.

Логика:

  • -1 -> наследовать от родителя (дефолт)
  • 0 -> выключено (явное, стопорит подъём по иерархии)
  • 1 -> включено

ResolveVehicleConfig сразу возвращает собственный cfg ребёнка, если fellingEnabled != -1 (строка 223). Дальше ApplyConfig видит 0 ≠ 1 -> ретурнится, MPG_FellingEnabled остаётся false.

json
// parent
{
  "className": "Truck_01_Base",
  "fellingEnabled": 1,
  ...
}
// child — валилка выключена, остальное тоже своё
{
  "className": "Truck_01_Covered",
  "fellingEnabled": 0
}

Родительский 1 игнорится — ребёнок не наследует, у него своё явное значение.

Можно ли отключить валку, если она "включена" в другом моде?

Нет. Если валка включена программно через другой мод, то отключить её можно только в том моде, где она была включена.


Пример Config.json ​

json
{
  "configVersion": 2,
  "documentation": "https://docs.mpg-dayz.ru/car-felling-trees-2",
  "logLevel": 3,
  "vehicles": [
    {
      "className": "Truck_01_Base",
      "fellingEnabled": 1,
      "slots": [
        "TruckBattery",
        "Reflector_1_1",
        "Reflector_2_1",
        "Truck_01_Hood"
      ],
      "fellingAttachmentSlots": [
        "Truck_01_Hood"
      ],
      "fellingMinSpeed": 15.0,
      "fellingMinImpulse": 200.0,
      "fellingNoBounce": true,
      "fellingRayRadius": 0
    },
    {
      "className": "Truck_01_Covered",
      "fellingEnabled": -1,
      "slots": [],
      "fellingAttachmentSlots": [],
      "fellingMinSpeed": 10.0,
      "fellingMinImpulse": 2000.0,
      "fellingNoBounce": false,
      "fellingRayRadius": 0
    }
  ],
  "treeTiers": [
    {
      "name": "small",
      "fellingMinSpeed": 0,
      "fellingMinImpulse": 0,
      "fellingNoBounce": -1
    },
    {
      "name": "medium",
      "fellingMinSpeed": 0,
      "fellingMinImpulse": 0,
      "fellingNoBounce": -1
    },
    {
      "name": "large",
      "fellingMinSpeed": 40,
      "fellingMinImpulse": 5000,
      "fellingNoBounce": 0
    }
  ],
  "trees": [
    {
      "className": "TreeHard_t_FagusSylvatica_3s",
      "tier": "large"
    },
    {
      "className": "TreeSoft_t_BetulaPendula_1s",
      "tier": "small"
    }
  ]
}

Truck_01_Covered наследуется от Truck_01_Base -> применит fellingEnabled: 1 и все параметры валки базового класса. Собственные параметры Truck_01_Covered (fellingMinSpeed: 10.0 и т.д.) не применятся, потому что fellingEnabled: -1 запускает наследование целиком.

См. также ​