Конфиг
Конфиг мода находится в файле MPG_CarFellingTrees2/Config.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 – Глобальный уровень логирования мода. Числовой параметр.
Доступные значения:
| Значение | Уровень | Что пишется |
|---|---|---|
1 | TRACE | Максимальная детализация: результат каждой проверки валки |
2 | DEBUG | Каждое сваленное дерево (класснейм, координаты) |
3 | INFO | Ключевые события: старт/остановка мода (по умолчанию) |
4 | WARN | Предупреждения |
5 | ERROR | Ошибки (не удалось загрузить/сохранить конфиг) |
6 | FATAL | Только критические ошибки |
Значение по умолчанию: 3 (INFO).
Рекомендации
- Обычная работа сервера –
3(INFO). - Валка не работает и непонятно почему – поставьте
1(TRACE). Мод напишет, какая именно проверка не прошла: двигатель выключен, скорость слишком низкая, импульс слишком слабый, слоты не заполнены, объект не дерево и т.д. - Нужно "тихо" – поставьте
6(FATAL).
Пример: "logLevel": 3,
Логи в отдельный файл
Логи пишутся модом MPG_ModsLogger в папку MPG_CarFellingTrees2/Logs/. Если этот мод не установлен – мод деградирует до Print() в общий RPT-лог сервера.
vehicles
vehicles – Массив с настройками для каждого транспортного средства (машины и мотоциклы). Каждый элемент – объект с параметрами валки.
Пример:
"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 для больших деревьев, которые валит только тяжёлая техника на приличной скорости.
Пример:
"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 – Ручное переопределение тира для конкретного дерева. Приоритет тира:
- Ручной
tierизtrees[](если задан) – главное слово; - Высота дерева из встроенной таблицы против
maxHeightтиров; - Цифра в имени класса (
1s/2s/3s) – fallback для деревьев без записи в таблице (например, с модовых карт).
Мод автоматически находит все деревья (TreeHard_*/TreeSoft_*, ванильные и из модов) и добавляет их в конфиг. Существующие записи не перезаписываются – ваши правки сохраняются между рестартами.
| Поле | Что значит |
|---|---|
className | Имя класса дерева в CfgVehicles |
tier | Имя тира из treeTiers; пусто – тир по высоте/цифре |
height | Информационное поле: высота модели (м) из встроенной таблицы. Заполняется модом при старте, на валку не влияет |
Имя тира сравнивается без учёта регистра. Неизвестное имя тира игнорируется с предупреждением в логе.
Пример:
"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 – Список слотов, которые должны быть заполнены незаруиненными аттачментами, чтобы валка сработала.
Пусто – проверка не нужна
Если массив пустой [] – проверка заполненности слотов не выполняется. Машина может валить деревья без дополнительных условий.
Например, можно потребовать, чтобы был установлен бампер:
"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:
"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Конфиг:
"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.
// parent
{
"className": "Truck_01_Base",
"fellingEnabled": 1,
...
}
// child — валилка выключена, остальное тоже своё
{
"className": "Truck_01_Covered",
"fellingEnabled": 0
}Родительский 1 игнорится — ребёнок не наследует, у него своё явное значение.
Можно ли отключить валку, если она "включена" в другом моде?
Нет. Если валка включена программно через другой мод, то отключить её можно только в том моде, где она была включена.
Пример Config.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 запускает наследование целиком.
См. также
- Быстрый старт – включить валку за 5 минут.
- Как это работает – все условия валки по порядку, авто-обнаружение машин, сбор слотов, совместимость.
