Drift Tuner

dD5M Drift Tuner

This is a vehicle drift resource. This enables toggling between drift handling and normal handling.

⭐ Dependencies

Frameworks

This resource comes preconfigured for QBCore, and will be maintained for QBCore/Qbox. All functions required to integrate with other frameworks in unlocked files in the 'open' directory.

Installation

Items

QB Inventory

    ['drifttuner'] 		= {['name'] = 'drifttuner', 		['label'] = 'Drift Tuner', 		['weight'] = 850, 		['type'] = 'item', 		['image'] = 'drifttuner.png', 	['unique'] = false, 	['useable'] = true, 	['shouldClose'] = true,	   ['combinable'] = nil,   ['description'] = ''},

OX Inventory

    ['drifttuner'] = {
		label = 'Drift Tuner',
		weight = 100,
		stack = true,
		close = false,
		consume = 1,
		client = {
			export = 'dd5m_drifttuner.drifttuner'
		}
	},

Integration

Storing mods requires framework integration. See your corresponsing framework instruction set below. QBCore/ox_lib examples provided.

QBCore GetVehicleProperties

Function: function QBCore.Functions.GetVehicleProperties(vehicle) Replace this function located in qb-core. qb-core/client/functions.lua

Added above return {

    local driftTuner = exports.dd5m_drifttuner:GetTunerStatus(vehicle)

Added anywhere within the return table see example

    driftTuner = driftTuner,

Example

    function QBCore.Functions.GetVehicleProperties(vehicle)
        if DoesEntityExist(vehicle) then
            local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
            local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
            local extras = {}

            for extraId = 0, 12 do
                if DoesExtraExist(vehicle, extraId) then
                    local state = IsVehicleExtraTurnedOn(vehicle, extraId) == 1
                    extras[tostring(extraId)] = state
                end
            end

            if GetVehicleMod(vehicle, 48) == -1 and GetVehicleLivery(vehicle) ~= -1 then
                modLivery = GetVehicleLivery(vehicle)
            else
                modLivery = GetVehicleMod(vehicle, 48)
            end

            local driftTuner = exports.dd5m_drifttuner:GetTunerStatus(vehicle)

            return {
                model = GetEntityModel(vehicle),
                plate = QBCore.Functions.GetPlate(vehicle),
                plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
                bodyHealth = QBCore.Shared.Round(GetVehicleBodyHealth(vehicle), 0.1),
                engineHealth = QBCore.Shared.Round(GetVehicleEngineHealth(vehicle), 0.1),
                tankHealth = QBCore.Shared.Round(GetVehiclePetrolTankHealth(vehicle), 0.1),
                fuelLevel = QBCore.Shared.Round(GetVehicleFuelLevel(vehicle), 0.1),
                dirtLevel = QBCore.Shared.Round(GetVehicleDirtLevel(vehicle), 0.1),
                color1 = colorPrimary,
                color2 = colorSecondary,
                pearlescentColor = pearlescentColor,
                interiorColor = GetVehicleInteriorColor(vehicle),
                dashboardColor = GetVehicleDashboardColour(vehicle),
                wheelColor = wheelColor,
                wheels = GetVehicleWheelType(vehicle),
                windowTint = GetVehicleWindowTint(vehicle),
                xenonColor = GetVehicleXenonLightsColour(vehicle),
                neonEnabled = {
                    IsVehicleNeonLightEnabled(vehicle, 0),
                    IsVehicleNeonLightEnabled(vehicle, 1),
                    IsVehicleNeonLightEnabled(vehicle, 2),
                    IsVehicleNeonLightEnabled(vehicle, 3)
                },
                neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)),
                extras = extras,
                tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)),
                modSpoilers = GetVehicleMod(vehicle, 0),
                modFrontBumper = GetVehicleMod(vehicle, 1),
                modRearBumper = GetVehicleMod(vehicle, 2),
                modSideSkirt = GetVehicleMod(vehicle, 3),
                modExhaust = GetVehicleMod(vehicle, 4),
                modFrame = GetVehicleMod(vehicle, 5),
                modGrille = GetVehicleMod(vehicle, 6),
                modHood = GetVehicleMod(vehicle, 7),
                modFender = GetVehicleMod(vehicle, 8),
                modRightFender = GetVehicleMod(vehicle, 9),
                modRoof = GetVehicleMod(vehicle, 10),
                modEngine = GetVehicleMod(vehicle, 11),
                modBrakes = GetVehicleMod(vehicle, 12),
                modTransmission = GetVehicleMod(vehicle, 13),
                modHorns = GetVehicleMod(vehicle, 14),
                modSuspension = GetVehicleMod(vehicle, 15),
                modArmor = GetVehicleMod(vehicle, 16),
                modTurbo = IsToggleModOn(vehicle, 18),
                modSmokeEnabled = IsToggleModOn(vehicle, 20),
                modXenon = IsToggleModOn(vehicle, 22),
                modFrontWheels = GetVehicleMod(vehicle, 23),
                modBackWheels = GetVehicleMod(vehicle, 24),
                modCustomTiresF = GetVehicleModVariation(vehicle, 23),
                modCustomTiresR = GetVehicleModVariation(vehicle, 24),
                modPlateHolder = GetVehicleMod(vehicle, 25),
                modVanityPlate = GetVehicleMod(vehicle, 26),
                modTrimA = GetVehicleMod(vehicle, 27),
                modOrnaments = GetVehicleMod(vehicle, 28),
                modDashboard = GetVehicleMod(vehicle, 29),
                modDial = GetVehicleMod(vehicle, 30),
                modDoorSpeaker = GetVehicleMod(vehicle, 31),
                modSeats = GetVehicleMod(vehicle, 32),
                modSteeringWheel = GetVehicleMod(vehicle, 33),
                modShifterLeavers = GetVehicleMod(vehicle, 34),
                modAPlate = GetVehicleMod(vehicle, 35),
                modSpeakers = GetVehicleMod(vehicle, 36),
                modTrunk = GetVehicleMod(vehicle, 37),
                modHydrolic = GetVehicleMod(vehicle, 38),
                modEngineBlock = GetVehicleMod(vehicle, 39),
                modAirFilter = GetVehicleMod(vehicle, 40),
                modStruts = GetVehicleMod(vehicle, 41),
                modArchCover = GetVehicleMod(vehicle, 42),
                modAerials = GetVehicleMod(vehicle, 43),
                modTrimB = GetVehicleMod(vehicle, 44),
                modTank = GetVehicleMod(vehicle, 45),
                modWindows = GetVehicleMod(vehicle, 46),
                modLivery = modLivery,
                driftTuner = driftTuner,                 --```See Example```    
            }
        else
            return
        end
    end

QBCore SetVehicleProperties

Function: function QBCore.Functions.SetVehicleProperties(vehicle, props) Replace this function located in qb-core. qb-core/client/functions.lua

Added anywhere within the function. See example below.

    if props.driftTuner then
        exports.dd5m_drifttuner:SetTunerStatus(vehicle, props.driftTuner)           
    end

Example

    function QBCore.Functions.SetVehicleProperties(vehicle, props)
        if DoesEntityExist(vehicle) then
            local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
            local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
            SetVehicleModKit(vehicle, 0)
            if props.plate then
                SetVehicleNumberPlateText(vehicle, props.plate)
            end
            if props.plateIndex then
                SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex)
            end
            if props.bodyHealth then
                SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0)
            end
            if props.engineHealth then
                SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0)
            end
            if props.fuelLevel then
                SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0)
            end
            if props.dirtLevel then
                SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0)
            end
            if props.color1 then
                SetVehicleColours(vehicle, props.color1, colorSecondary)
            end
            if props.color2 then
                SetVehicleColours(vehicle, props.color1 or colorPrimary, props.color2)
            end
            if props.pearlescentColor then
                SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor)
            end
            if props.interiorColor then
                SetVehicleInteriorColor(vehicle, props.interiorColor)
            end
            if props.dashboardColor then
                SetVehicleDashboardColour(vehicle, props.dashboardColor)
            end
            if props.wheelColor then
                SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor)
            end
            if props.wheels then
                SetVehicleWheelType(vehicle, props.wheels)
            end
            if props.windowTint then
                SetVehicleWindowTint(vehicle, props.windowTint)
            end
            if props.neonEnabled then
                SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1])
                SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2])
                SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3])
                SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4])
            end
            if props.extras then
                for id, enabled in pairs(props.extras) do
                    if enabled then
                        SetVehicleExtra(vehicle, tonumber(id), 0)
                    else
                        SetVehicleExtra(vehicle, tonumber(id), 1)
                    end
                end
            end
            if props.neonColor then
                SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3])
            end
            if props.modSmokeEnabled then
                ToggleVehicleMod(vehicle, 20, true)
            end
            if props.tyreSmokeColor then
                SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3])
            end
            if props.modSpoilers then
                SetVehicleMod(vehicle, 0, props.modSpoilers, false)
            end
            if props.modFrontBumper then
                SetVehicleMod(vehicle, 1, props.modFrontBumper, false)
            end
            if props.modRearBumper then
                SetVehicleMod(vehicle, 2, props.modRearBumper, false)
            end
            if props.modSideSkirt then
                SetVehicleMod(vehicle, 3, props.modSideSkirt, false)
            end
            if props.modExhaust then
                SetVehicleMod(vehicle, 4, props.modExhaust, false)
            end
            if props.modFrame then
                SetVehicleMod(vehicle, 5, props.modFrame, false)
            end
            if props.modGrille then
                SetVehicleMod(vehicle, 6, props.modGrille, false)
            end
            if props.modHood then
                SetVehicleMod(vehicle, 7, props.modHood, false)
            end
            if props.modFender then
                SetVehicleMod(vehicle, 8, props.modFender, false)
            end
            if props.modRightFender then
                SetVehicleMod(vehicle, 9, props.modRightFender, false)
            end
            if props.modRoof then
                SetVehicleMod(vehicle, 10, props.modRoof, false)
            end
            if props.modEngine then
                SetVehicleMod(vehicle, 11, props.modEngine, false)
            end
            if props.modBrakes then
                SetVehicleMod(vehicle, 12, props.modBrakes, false)
            end
            if props.modTransmission then
                SetVehicleMod(vehicle, 13, props.modTransmission, false)
            end
            if props.modHorns then
                SetVehicleMod(vehicle, 14, props.modHorns, false)
            end
            if props.modSuspension then
                SetVehicleMod(vehicle, 15, props.modSuspension, false)
            end
            if props.modArmor then
                SetVehicleMod(vehicle, 16, props.modArmor, false)
            end
            if props.modTurbo then
                ToggleVehicleMod(vehicle, 18, props.modTurbo)
            end
            if props.modXenon then
                ToggleVehicleMod(vehicle, 22, props.modXenon)
            end
            if props.xenonColor then
                SetVehicleXenonLightsColor(vehicle, props.xenonColor)
            end
            if props.modFrontWheels then
                SetVehicleMod(vehicle, 23, props.modFrontWheels, false)
            end
            if props.modBackWheels then
                SetVehicleMod(vehicle, 24, props.modBackWheels, false)
            end
            if props.modCustomTiresF then
                SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomTiresF)
            end
            if props.modCustomTiresR then
                SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomTiresR)
            end
            if props.modPlateHolder then
                SetVehicleMod(vehicle, 25, props.modPlateHolder, false)
            end
            if props.modVanityPlate then
                SetVehicleMod(vehicle, 26, props.modVanityPlate, false)
            end
            if props.modTrimA then
                SetVehicleMod(vehicle, 27, props.modTrimA, false)
            end
            if props.modOrnaments then
                SetVehicleMod(vehicle, 28, props.modOrnaments, false)
            end
            if props.modDashboard then
                SetVehicleMod(vehicle, 29, props.modDashboard, false)
            end
            if props.modDial then
                SetVehicleMod(vehicle, 30, props.modDial, false)
            end
            if props.modDoorSpeaker then
                SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false)
            end
            if props.modSeats then
                SetVehicleMod(vehicle, 32, props.modSeats, false)
            end
            if props.modSteeringWheel then
                SetVehicleMod(vehicle, 33, props.modSteeringWheel, false)
            end
            if props.modShifterLeavers then
                SetVehicleMod(vehicle, 34, props.modShifterLeavers, false)
            end
            if props.modAPlate then
                SetVehicleMod(vehicle, 35, props.modAPlate, false)
            end
            if props.modSpeakers then
                SetVehicleMod(vehicle, 36, props.modSpeakers, false)
            end
            if props.modTrunk then
                SetVehicleMod(vehicle, 37, props.modTrunk, false)
            end
            if props.modHydrolic then
                SetVehicleMod(vehicle, 38, props.modHydrolic, false)
            end
            if props.modEngineBlock then
                SetVehicleMod(vehicle, 39, props.modEngineBlock, false)
            end
            if props.modAirFilter then
                SetVehicleMod(vehicle, 40, props.modAirFilter, false)
            end
            if props.modStruts then
                SetVehicleMod(vehicle, 41, props.modStruts, false)
            end
            if props.modArchCover then
                SetVehicleMod(vehicle, 42, props.modArchCover, false)
            end
            if props.modAerials then
                SetVehicleMod(vehicle, 43, props.modAerials, false)
            end
            if props.modTrimB then
                SetVehicleMod(vehicle, 44, props.modTrimB, false)
            end
            if props.modTank then
                SetVehicleMod(vehicle, 45, props.modTank, false)
            end
            if props.modWindows then
                SetVehicleMod(vehicle, 46, props.modWindows, false)
            end
            if props.modLivery then
                SetVehicleMod(vehicle, 48, props.modLivery, false)
                SetVehicleLivery(vehicle, props.modLivery)
            end
            if props.driftTuner then
                exports.dd5m_drifttuner:SetTunerStatus(vehicle, props.driftTuner)
            end
        end
    end

ox_lib getVehicleProperties

Function: function lib.getVehicleProperties(vehicle) Replace this function located in ox_lib. ox_lib/resource/vehicleProperties/client.lua

Added above return {

    local driftTuner = exports.dd5m_drifttuner:GetTunerStatus(vehicle)

Added anywhere within the return table see example

    driftTuner = driftTuner,

Example

    ---@param vehicle number
    ---@return VehicleProperties?
    function lib.getVehicleProperties(vehicle)
        if DoesEntityExist(vehicle) then
            ---@type number | number[], number | number[]
            local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
            local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
            local paintType1 = GetVehicleModColor_1(vehicle)
            local paintType2 = GetVehicleModColor_2(vehicle)

            if GetVehicleXenonLightsCustomColor(vehicle) == 1 then
                local _, r, g, b = GetVehicleXenonLightsCustomColor(vehicle)
                headlightColor = { r, g, b }
            else
                headlightColor = GetVehicleHeadlightsColour(vehicle)
            end

            if GetIsVehiclePrimaryColourCustom(vehicle) then
                local r, g, b = GetVehicleCustomPrimaryColour(vehicle)
                colorPrimary = { r, g, b, colorPrimary }
            end
            if GetIsVehicleSecondaryColourCustom(vehicle) then
                local r, g, b = GetVehicleCustomSecondaryColour(vehicle)
                colorSecondary = { r, g, b, colorSecondary }
            end

            local extras = {}
            for i = 1, 15 do
                if DoesExtraExist(vehicle, i) then extras[i] = IsVehicleExtraTurnedOn(vehicle, i) and 0 or 1 end
            end

            local modLiveryCount = GetVehicleLiveryCount(vehicle)
            local modLivery = GetVehicleLivery(vehicle)

            if modLiveryCount == -1 or modLivery == -1 then
                modLivery = GetVehicleMod(vehicle, 48)
            end

            local damage = {
                windows = {},
                doors = {},
                tyres = {},
            }

            local windows = 0
            for i = 0, 7 do
                RollUpWindow(vehicle, i)

                if not IsVehicleWindowIntact(vehicle, i) then
                    windows += 1
                    damage.windows[windows] = i
                end
            end

            local doors = 0
            for i = 0, 5 do
                if IsVehicleDoorDamaged(vehicle, i) then
                    doors += 1
                    damage.doors[doors] = i
                end
            end

            for i = 0, 7 do
                if IsVehicleTyreBurst(vehicle, i, false) then
                    damage.tyres[i] = IsVehicleTyreBurst(vehicle, i, true) and 2 or 1
                end
            end

            local neons = {}

            for i = 0, 3 do
                neons[i + 1] = IsVehicleNeonLightEnabled(vehicle, i)
            end

            local driftTuner = exports.dd5m_drifttuner:GetTunerStatus(vehicle)

            return {
                model = GetEntityModel(vehicle),
                plate = GetVehicleNumberPlateText(vehicle),
                plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
                bodyHealth = math.floor(GetVehicleBodyHealth(vehicle) + 0.5),
                engineHealth = math.floor(GetVehicleEngineHealth(vehicle) + 0.5),
                tankHealth = math.floor(GetVehiclePetrolTankHealth(vehicle) + 0.5),
                fuelLevel = math.floor(GetVehicleFuelLevel(vehicle) + 0.5),
                oilLevel = math.floor(GetVehicleOilLevel(vehicle) + 0.5),
                dirtLevel = math.floor(GetVehicleDirtLevel(vehicle) + 0.5),
                paintType1 = paintType1,
                paintType2 = paintType2,
                color1 = colorPrimary,
                color2 = colorSecondary,
                pearlescentColor = pearlescentColor,
                interiorColor = GetVehicleInteriorColor(vehicle),
                dashboardColor = GetVehicleDashboardColour(vehicle),
                wheelColor = wheelColor,
                wheelWidth = GetVehicleWheelWidth(vehicle),
                wheelSize = GetVehicleWheelSize(vehicle),
                wheels = GetVehicleWheelType(vehicle),
                windowTint = GetVehicleWindowTint(vehicle),
                xenonColor = headlightColor,
                neonEnabled = neons,
                neonColor = { GetVehicleNeonLightsColour(vehicle) },
                extras = extras,
                tyreSmokeColor = { GetVehicleTyreSmokeColor(vehicle) },
                modSpoilers = GetVehicleMod(vehicle, 0),
                modFrontBumper = GetVehicleMod(vehicle, 1),
                modRearBumper = GetVehicleMod(vehicle, 2),
                modSideSkirt = GetVehicleMod(vehicle, 3),
                modExhaust = GetVehicleMod(vehicle, 4),
                modFrame = GetVehicleMod(vehicle, 5),
                modGrille = GetVehicleMod(vehicle, 6),
                modHood = GetVehicleMod(vehicle, 7),
                modFender = GetVehicleMod(vehicle, 8),
                modRightFender = GetVehicleMod(vehicle, 9),
                modRoof = GetVehicleMod(vehicle, 10),
                modEngine = GetVehicleMod(vehicle, 11),
                modBrakes = GetVehicleMod(vehicle, 12),
                modTransmission = GetVehicleMod(vehicle, 13),
                modHorns = GetVehicleMod(vehicle, 14),
                modSuspension = GetVehicleMod(vehicle, 15),
                modArmor = GetVehicleMod(vehicle, 16),
                modNitrous = GetVehicleMod(vehicle, 17),
                modTurbo = IsToggleModOn(vehicle, 18),
                modSubwoofer = GetVehicleMod(vehicle, 19),
                modSmokeEnabled = IsToggleModOn(vehicle, 20),
                modHydraulics = IsToggleModOn(vehicle, 21),
                modXenon = IsToggleModOn(vehicle, 22),
                modFrontWheels = GetVehicleMod(vehicle, 23),
                modBackWheels = GetVehicleMod(vehicle, 24),
                modCustomTiresF = GetVehicleModVariation(vehicle, 23),
                modCustomTiresR = GetVehicleModVariation(vehicle, 24),
                modPlateHolder = GetVehicleMod(vehicle, 25),
                modVanityPlate = GetVehicleMod(vehicle, 26),
                modTrimA = GetVehicleMod(vehicle, 27),
                modOrnaments = GetVehicleMod(vehicle, 28),
                modDashboard = GetVehicleMod(vehicle, 29),
                modDial = GetVehicleMod(vehicle, 30),
                modDoorSpeaker = GetVehicleMod(vehicle, 31),
                modSeats = GetVehicleMod(vehicle, 32),
                modSteeringWheel = GetVehicleMod(vehicle, 33),
                modShifterLeavers = GetVehicleMod(vehicle, 34),
                modAPlate = GetVehicleMod(vehicle, 35),
                modSpeakers = GetVehicleMod(vehicle, 36),
                modTrunk = GetVehicleMod(vehicle, 37),
                modHydrolic = GetVehicleMod(vehicle, 38),
                modEngineBlock = GetVehicleMod(vehicle, 39),
                modAirFilter = GetVehicleMod(vehicle, 40),
                modStruts = GetVehicleMod(vehicle, 41),
                modArchCover = GetVehicleMod(vehicle, 42),
                modAerials = GetVehicleMod(vehicle, 43),
                modTrimB = GetVehicleMod(vehicle, 44),
                modTank = GetVehicleMod(vehicle, 45),
                modWindows = GetVehicleMod(vehicle, 46),
                modDoorR = GetVehicleMod(vehicle, 47),
                modLivery = modLivery,
                modRoofLivery = GetVehicleRoofLivery(vehicle),
                modLightbar = GetVehicleMod(vehicle, 49),
                windows = damage.windows,
                doors = damage.doors,
                tyres = damage.tyres,
                bulletProofTyres = GetVehicleTyresCanBurst(vehicle),
                driftTyres = gameBuild >= 2372 and GetDriftTyresEnabled(vehicle),

                -- no setters?
                -- leftHeadlight = GetIsLeftVehicleHeadlightDamaged(vehicle),
                -- rightHeadlight = GetIsRightVehicleHeadlightDamaged(vehicle),
                -- frontBumper = IsVehicleBumperBrokenOff(vehicle, true),
                -- rearBumper = IsVehicleBumperBrokenOff(vehicle, false),

                modKit49 = GetVehicleMod(vehicle, 49),
                liveryRoof = GetVehicleRoofLivery(vehicle),
                modBProofTires = not GetVehicleTyresCanBurst(vehicle),
                modDrift = gameBuild >= 2372 and GetDriftTyresEnabled(vehicle),

                driftTuner = driftTuner,
            }
        end
    end

ox_lib setVehicleProperties

Function: function lib.setVehicleProperties(vehicle, props, fixVehicle) Replace this function located in ox_lib. ox_lib/resource/vehicleProperties/client.lua

Added anywhere within the function. See example below.

    if props.driftTuner then
        exports.dd5m_drifttuner:SetTunerStatus(vehicle, props.driftTuner) 
    end

Example

    ---@param vehicle number
    ---@param props VehicleProperties
    ---@param fixVehicle? boolean Fix the vehicle after props have been set. Usually required when adding extras.
    ---@return boolean?
    function lib.setVehicleProperties(vehicle, props, fixVehicle)
        if not DoesEntityExist(vehicle) then
            error(("Unable to set vehicle properties for '%s' (entity does not exist)"):
            format(vehicle))
        end

        if NetworkGetEntityIsNetworked(vehicle) and NetworkGetEntityOwner(vehicle) ~= cache.playerId then
            error((
                "Unable to set vehicle properties for '%s' (client is not entity owner)"):format(vehicle))
        end
        if props.extras then
            for id, disable in pairs(props.extras) do
                SetVehicleExtra(vehicle, tonumber(id) --[[@as number]], disable == 1)
            end
        end
        local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
        local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
        SetVehicleModKit(vehicle, 0)
        -- SetVehicleAutoRepairDisabled(vehicle, true)
        if props.plate then                             SetVehicleNumberPlateText(vehicle, props.plate) end
        if props.plateIndex then                        SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex) end
        if props.bodyHealth then                        SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0) end
        if props.engineHealth then                      SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0) end
        if props.tankHealth then                        SetVehiclePetrolTankHealth(vehicle, props.tankHealth + 0.0) end
        if props.fuelLevel then                         SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0) end
        if props.oilLevel then                          SetVehicleOilLevel(vehicle, props.oilLevel + 0.0) end
        if props.dirtLevel then                         SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0) end
        if props.color1 then
            if type(props.color1) == "number" then
                colorPrimary = props.color1
                SetVehicleColours(vehicle, colorPrimary, colorSecondary)
            else
                colorPrimary = props.color1[4]
                SetVehicleCustomPrimaryColour(vehicle, props.color1[1], props.color1[2], props.color1[3])
                SetVehicleColours(vehicle, props.color1[4], colorSecondary)
            end
        end
        if props.color2 then
            if type(props.color2) == "number" then
                SetVehicleColours(vehicle, colorPrimary, props.color2)
            else
                SetVehicleCustomSecondaryColour(vehicle, props.color2[1], props.color2[2], props.color2[3])
                SetVehicleColours(vehicle, colorPrimary, props.color2[4])
            end
        end
        if props.neonEnabled then
            for i = 1, #props.neonEnabled do
                SetVehicleNeonLightEnabled(vehicle, i - 1, props.neonEnabled[i])
            end
        end
        if props.windows then
            for i = 1, #props.windows do
                RemoveVehicleWindow(vehicle, props.windows[i])
            end
        end
        if props.doors then
            for i = 1, #props.doors do
                SetVehicleDoorBroken(vehicle, props.doors[i], true)
            end
        end
        if props.tyres then
            for tyre, state in pairs(props.tyres) do
                SetVehicleTyreBurst(vehicle, tonumber(tyre) --[[@as number]], state == 2, 1000.0)
            end
        end

        if props.pearlescentColor or props.wheelColor then SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor or wheelColor) end
        if props.interiorColor then                     SetVehicleInteriorColor(vehicle, props.interiorColor) end
        if props.dashboardColor then                    SetVehicleDashboardColor(vehicle, props.dashboardColor) end
        if props.wheels then                            SetVehicleWheelType(vehicle, props.wheels) end
        if props.wheelSize then                         SetVehicleWheelSize(vehicle, props.wheelSize) end
        if props.wheelWidth then                        SetVehicleWheelWidth(vehicle, props.wheelWidth) end
        if props.windowTint then                        SetVehicleWindowTint(vehicle, props.windowTint) end
        if props.neonColor then                         SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3]) end
        if props.tyreSmokeColor then                    SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3]) end
        if props.modSpoilers then                       SetVehicleMod(vehicle, 0, props.modSpoilers, false) end
        if props.modFrontBumper then                    SetVehicleMod(vehicle, 1, props.modFrontBumper, false) end
        if props.modRearBumper then                     SetVehicleMod(vehicle, 2, props.modRearBumper, false) end
        if props.modSideSkirt then                      SetVehicleMod(vehicle, 3, props.modSideSkirt, false) end
        if props.modExhaust then                        SetVehicleMod(vehicle, 4, props.modExhaust, false) end
        if props.modFrame then                          SetVehicleMod(vehicle, 5, props.modFrame, false) end
        if props.modGrille then                         SetVehicleMod(vehicle, 6, props.modGrille, false) end
        if props.modHood then                           SetVehicleMod(vehicle, 7, props.modHood, false) end
        if props.modFender then                         SetVehicleMod(vehicle, 8, props.modFender, false) end
        if props.modRightFender then                    SetVehicleMod(vehicle, 9, props.modRightFender, false) end
        if props.modRoof then                           SetVehicleMod(vehicle, 10, props.modRoof, false) end
        if props.modEngine then                         SetVehicleMod(vehicle, 11, props.modEngine, false) end
        if props.modBrakes then                         SetVehicleMod(vehicle, 12, props.modBrakes, false) end
        if props.modTransmission then                   SetVehicleMod(vehicle, 13, props.modTransmission, false) end
        if props.modHorns then                          SetVehicleMod(vehicle, 14, props.modHorns, false) end
        if props.modSuspension then                     SetVehicleMod(vehicle, 15, props.modSuspension, false) end
        if props.modArmor then                          SetVehicleMod(vehicle, 16, props.modArmor, false) end
        if props.modNitrous then                        SetVehicleMod(vehicle, 17, props.modNitrous, false) end
        if props.modTurbo ~= nil then                   ToggleVehicleMod(vehicle, 18, props.modTurbo) end
        if props.modSubwoofer ~= nil then               ToggleVehicleMod(vehicle, 19, props.modSubwoofer) end
        if props.modHydraulics ~= nil then              ToggleVehicleMod(vehicle, 21, props.modHydraulics) end
        if props.modXenon ~= nil then                   ToggleVehicleMod(vehicle, 22, props.modXenon) end
        if props.xenonColor then
            if type(props.xenonColor) == "number" then
                ClearVehicleXenonLightsCustomColor(vehicle)
                SetVehicleXenonLightsColor(vehicle, props.headlightColor)
            else
                SetVehicleXenonLightsCustomColor(vehicle, props.headlightColor[1], props.headlightColor[2], props.headlightColor[3])
                SetVehicleXenonLightsColor(vehicle, -1)
            end
        end
        if props.modFrontWheels then                    SetVehicleMod(vehicle, 23, props.modFrontWheels, props.modCustomTiresF) end
        if props.modBackWheels then                     SetVehicleMod(vehicle, 24, props.modBackWheels, props.modCustomTiresR) end
        if props.modPlateHolder then                    SetVehicleMod(vehicle, 25, props.modPlateHolder, false) end
        if props.modVanityPlate then                    SetVehicleMod(vehicle, 26, props.modVanityPlate, false) end
        if props.modTrimA then                          SetVehicleMod(vehicle, 27, props.modTrimA, false) end
        if props.modOrnaments then                      SetVehicleMod(vehicle, 28, props.modOrnaments, false) end
        if props.modDashboard then                      SetVehicleMod(vehicle, 29, props.modDashboard, false) end
        if props.modDial then                           SetVehicleMod(vehicle, 30, props.modDial, false) end
        if props.modDoorSpeaker then                    SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false) end
        if props.modSeats then                          SetVehicleMod(vehicle, 32, props.modSeats, false) end
        if props.modSteeringWheel then                  SetVehicleMod(vehicle, 33, props.modSteeringWheel, false) end
        if props.modShifterLeavers then                 SetVehicleMod(vehicle, 34, props.modShifterLeavers, false) end
        if props.modAPlate then                         SetVehicleMod(vehicle, 35, props.modAPlate, false) end
        if props.modSpeakers then                       SetVehicleMod(vehicle, 36, props.modSpeakers, false) end
        if props.modTrunk then                          SetVehicleMod(vehicle, 37, props.modTrunk, false) end
        if props.modHydrolic then                       SetVehicleMod(vehicle, 38, props.modHydrolic, false) end
        if props.modEngineBlock then                    SetVehicleMod(vehicle, 39, props.modEngineBlock, false) end
        if props.modAirFilter then                      SetVehicleMod(vehicle, 40, props.modAirFilter, false) end
        if props.modStruts then                         SetVehicleMod(vehicle, 41, props.modStruts, false) end
        if props.modArchCover then                      SetVehicleMod(vehicle, 42, props.modArchCover, false) end
        if props.modAerials then                        SetVehicleMod(vehicle, 43, props.modAerials, false) end
        if props.modTrimB then                          SetVehicleMod(vehicle, 44, props.modTrimB, false) end
        if props.modTank then                           SetVehicleMod(vehicle, 45, props.modTank, false) end
        if props.modWindows then                        SetVehicleMod(vehicle, 46, props.modWindows, false) end
        if props.modDoorR then                          SetVehicleMod(vehicle, 47, props.modDoorR, false) end
        if props.modLivery then                         SetVehicleMod(vehicle, 48, props.modLivery, false) SetVehicleLivery(vehicle, props.modLivery) end
        if props.modRoofLivery then                     SetVehicleRoofLivery(vehicle, props.modRoofLivery) end
        if props.modLightbar then                       SetVehicleMod(vehicle, 49, props.modLightbar, false) end
        if props.modSmokeEnabled ~= nil then            ToggleVehicleMod(vehicle, 20, props.modSmokeEnabled) end
        if props.bulletProofTyres ~= nil then           SetVehicleTyresCanBurst(vehicle, props.bulletProofTyres) end
        if gameBuild >= 2372 and props.driftTyres then  SetDriftTyresEnabled(vehicle, true) end

        if props.modKit49 then          SetVehicleMod(vehicle, 49, props.modKit49, false) end
        if props.liveryRoof then        SetVehicleRoofLivery(vehicle, props.liveryRoof) end
        if gameBuild >= 2372 and props.driftTyres then
            if props.modDrift then
                SetDriftTyresEnabled(vehicle, true)
            end
        end

        if props.driftTuner then
            exports.dd5m_drifttuner:SetTunerStatus(vehicle, props.driftTuner)
        end

        SetVehicleTyresCanBurst(vehicle, not props.modBProofTires)

        if fixVehicle then SetVehicleFixed(vehicle) end

        return true
    end