FiveM механик работа: repair natives, tuning модификации и проверки работы

Постройте FiveM механик работу: отремонтируйте машину с SetVehicleFixed и health natives, настройте с SetVehicleModKit и SetVehicleMod, сохраните модификации, и заблокируйте действия по работе.

Симптом: ваш механик чинит машину и двигатель всё ещё дымит, вмятины остаются, настроенная деталь исчезает после перезагрузки, или любой игрок может чинить машины бесплатно.

Механик работа это две работы в одной: ремонт (значения здоровья и natives) и настройка (мод машины). Оба запускаются на клиенте, поэтому часть которую вы должны защитить это кто разрешен их запускать.

Ремонт машины

Одного native недостаточно для чистого ремонта. Эта комбинация делает работу:

lua
-- client
local function repairVehicle(vehicle)
    SetVehicleFixed(vehicle)
    SetVehicleDeformationFixed(vehicle)
    SetVehicleEngineHealth(vehicle, 1000.0)
    SetVehicleBodyHealth(vehicle, 1000.0)
    SetVehicleUndriveable(vehicle, false)
    SetVehicleEngineOn(vehicle, true, true, false)
end
  • SetVehicleFixed чинит машину в целом, включая шины.
  • SetVehicleDeformationFixed удаляет вмятины которые первый native может оставить позади.
  • SetVehicleEngineHealth и SetVehicleBodyHealth принимают значение до 1000.0. Ниже нуля двигатель мёртв, поэтому установка их обратно делает его запуск снова.

Потому что машина это сетевая сущность, клиент который делает ремонт должен ей владеть. Если ремонт работает на вашей собственной машине и не на машине клиента, запросите управление сначала:

lua
NetworkRequestControlOfEntity(vehicle)
local timeout = 0
while not NetworkHasControlOfEntity(vehicle) and timeout < 50 do
    Wait(10)
    timeout += 1
end

Для частичного ремонта (только двигатель, только кузов), вызовите только соответствующий native здоровья. Значения здоровья также важны для других скриптов, например урон машины и здоровье двигателя объясняет что каждое число делает.

Настройка с SetVehicleMod

Моды это нумерованные слоты. Два правила применяются ко всем из них:

  1. Вызовите SetVehicleModKit(vehicle, 0) перед любым изменением мода.
  2. Спросите у игры сколько опций слот имеет с GetNumVehicleMods. Индекс -1 это стоковая деталь.
lua
-- client
local function setMod(vehicle, modType, index)
    SetVehicleModKit(vehicle, 0)
    local count = GetNumVehicleMods(vehicle, modType)
    if index >= -1 and index < count then
        SetVehicleMod(vehicle, modType, index, false)
    end
end

-- engine is mod type 11, brakes 12, transmission 13, suspension 15
setMod(vehicle, 11, 2)

-- turbo is a toggle, not a numbered mod
ToggleVehicleMod(vehicle, 18, true)

Проверка индекса против GetNumVehicleMods избегает молчаливого отказа когда машина имеет меньше опций чем вы ожидали. Краска и цвет используют свои собственные natives (SetVehicleColours и другие), поэтому обращайтесь с ними как отдельное меню.

Совет: постройте меню настройки из самой машины, циклируя слоты с GetNumVehicleMods, нежели жёстко кодируя числа. Машины дополнений часто имеют разное количество опций.

Сохранение модов

Установка мода только изменяет живую сущность. Когда игрок хранит машину в гараже и вынимает её снова, мод уходит если его не сохранили с машиной. Сохраняйте полный набор свойств после настройки и применяйте их когда машина спаунится. Весь поток находится в сохранение свойств машины и модов.

Работа-гейтед действия

Код ремонта и настройки запускается на клиенте, поэтому модифицированный клиент может вызвать его для кого-либо. Поместите правило на сервер:

lua
-- server (ox_lib)
lib.callback.register('mechanic:canRepair', function(source)
    -- 1. job check: use your framework's player/job getter here
    -- 2. distance check: the player must be near a vehicle or workshop
    -- 3. item check and removal
    local removed = exports.ox_inventory:RemoveItem(source, 'repairkit', 1)
    return removed and true or false
end)
lua
-- client
lib.callback('mechanic:canRepair', false, function(ok)
    if ok then repairVehicle(vehicle) end
end)

Проверка работы зависит от вашего фреймворка. На ESX читайте работу из объекта игрока, на QBCore и QBox читайте её из данных игрока. Используйте геттер вашего фреймворка в шаге 1 и сравните против названия вашей механик работы, как покрыто в добавление работы на ESX и добавление работы на QBCore. Для паттерна callback через фреймворки, смотрите серверные callbacks.

Другие вещи стоящие блокировки:

  • Ремонтные наборы как предметы, так что ремонт что-то стоит и предмет удаляется на сервере.
  • Зоны мастерских, так что настройка открывается только внутри гаража или на верстаке.
  • Платить механику или счёту общества на сервере, не с клиента.

Полоса прогресса с опцией отмены делает ремонты правильными. Смотрите полосы прогресса на ESX, QBCore и ox_lib.

Контрольный список

Симптом Решение
Вмятины остаются после ремонта Добавьте SetVehicleDeformationFixed
Двигатель всё ещё дымит Установите здоровье двигателя обратно в 1000.0
Ремонт работает только на вашей собственной машине Запросите сетевое управление машиной сначала
SetVehicleMod не делает ничего Вызовите SetVehicleModKit(vehicle, 0) сначала
Индекс мода вне диапазона Проверьте GetNumVehicleMods для этого слота
Моды исчезают после перезагрузки Сохраняйте свойства с машиной
Кто-либо может чинить Проверьте работу, расстояние и предмет на сервере

Короткие ответы

Почему SetVehicleFixed не чинит урон кузова?

Это чинит большинство машины но не всегда видимую деформацию. Вызовите SetVehicleDeformationFixed(vehicle) также, и установите здоровье двигателя и кузова сами.

Почему SetVehicleMod не делает ничего?

Вы должны вызвать SetVehicleModKit(vehicle, 0) сначала. Без мод кита, игра игнорирует изменение мода.

Как я убедиться что только механики могут чинить?

Проверьте работу на сервере перед тем как вы примете ремонт, и возьмите предмет ремонта на сервере. Проверка работы на клиенте может быть пропущена модифицированным клиентом.

Скрипты без этой проблемы

Chameleon Paints82 краски-хамелеона с переливом цвета в одном меню — наносятся в один клик.Смотреть скрипт →Item Creator V2Создавайте используемые предметы с анимациями, пропами, эффектами и не только — без кода.Смотреть скрипт →

Читайте также

FiveMСценарииБаза данныхFiveM жилая система и апартаменты: shells, instances, stashes и ключиКак работает жилая система в FiveM: оболочки и MLO интерьеры, инстансирование с routing buckets, storage для каждого дома, ключи и доступ, сохранение владения в базе данных.1 октября 2026 г. · 3 мин чтенияЧитать →FiveMLuaESXСистема смерти и возрождения FiveM: последний стенд, возрождение и сумки состоянияКак работает система смерти FiveM: последний стенд в сравнении с мертвецом, таймер возрождения, возрождение от администратора или EMS, синхронизация мертвого состояния с сумками состояния и исправление боевого выхода.1 октября 2026 г. · 3 мин чтенияЧитать →FiveMБезопасностьСценарииFiveM магазин и банк грабёж скрипты: setup и разработка на сервереКак установить и дизайнировать магазин и банк грабежи на FiveM: количество полиции, server-side cooldowns, награды даны только сервером, оповещения полиции и проверки расстояния.1 октября 2026 г. · 3 мин чтенияЧитать →