QBCore = exports['qb-core']:GetCoreObject() local RainbowNeon = false LastEngineMultiplier = 1.0 function setVehData(veh,data) local multp = 0.12 local dTrain = 0.0 if tonumber(data.drivetrain) == 2 then dTrain = 0.5 elseif tonumber(data.drivetrain) == 3 then dTrain = 1.0 end if not DoesEntityExist(veh) or not data then return nil end SetVehicleHandlingFloat(veh, "CHandlingData", "fInitialDriveForce", data.boost * multp) SetVehicleHandlingFloat(veh, "CHandlingData", "fDriveInertia", data.acceleration * multp) SetVehicleEnginePowerMultiplier(veh, data.gearchange * multp) LastEngineMultiplier = data.gearchange * multp SetVehicleHandlingFloat(veh, "CHandlingData", "fDriveBiasFront", dTrain*1.0) SetVehicleHandlingFloat(veh, "CHandlingData", "fBrakeBiasFront", data.breaking * multp) end function resetVeh(veh) SetVehicleHandlingFloat(veh, "CHandlingData", "fInitialDriveForce", 1.0) SetVehicleHandlingFloat(veh, "CHandlingData", "fDriveInertia", 1.0) SetVehicleEnginePowerMultiplier(veh, 1.0) SetVehicleHandlingFloat(veh, "CHandlingData", "fDriveBiasFront", 0.5) SetVehicleHandlingFloat(veh, "CHandlingData", "fBrakeBiasFront", 1.0) end RegisterNUICallback('save', function(data, cb) QBCore.Functions.TriggerCallback('qb-tunerchip:server:HasChip', function(HasChip) if HasChip then local ped = PlayerPedId() local veh = GetVehiclePedIsUsing(ped) setVehData(veh, data) QBCore.Functions.Notify(Lang:t("error.tunerchip_vehicle_tuned"), 'error') TriggerServerEvent('qb-tunerchip:server:TuneStatus', QBCore.Functions.GetPlate(veh), true) end cb('ok') end, data) end) RegisterNetEvent('qb-tunerchip:client:TuneStatus', function() local ped = PlayerPedId() local closestVehicle = GetClosestVehicle(GetEntityCoords(ped), 5.0, 0, 70) local plate = QBCore.Functions.GetPlate(closestVehicle) local vehModel = GetEntityModel(closestVehicle) if vehModel ~= 0 then QBCore.Functions.TriggerCallback('qb-tunerchip:server:GetStatus', function(status) if status then QBCore.Functions.Notify(Lang:t("success.this_vehicle_has_been_tuned"), 'success') else QBCore.Functions.Notify(Lang:t("error.this_vehicle_has_not_been_tuned"), 'error') end end, plate) else QBCore.Functions.Notify(Lang:t("error.no_vehicle_nearby"), 'error') end end) RegisterNUICallback('checkItem', function(data, cb) local retval = false local result = QBCore.Functions.HasItem(data.item) if result then retval = true end cb(retval) end) RegisterNUICallback('reset', function(_, cb) local ped = PlayerPedId() local veh = GetVehiclePedIsUsing(ped) resetVeh(veh) QBCore.Functions.Notify(Lang:t("error.tunerchip_vehicle_has_been_reset"), 'error') cb("ok") end) RegisterNetEvent('qb-tunerchip:client:openChip', function() local ped = PlayerPedId() local inVehicle = IsPedInAnyVehicle(ped) if inVehicle then QBCore.Functions.Progressbar("connect_laptop", Lang:t("error.tunerchip_vehicle_has_been_reset"), 2000, false, true, { disableMovement = true, disableCarMovement = true, disableMouse = false, disableCombat = true, }, { animDict = "anim@amb@clubhouse@tutorial@bkr_tut_ig3@", anim = "machinic_loop_mechandplayer", flags = 16, }, {}, {}, function() -- Done StopAnimTask(PlayerPedId(), "anim@amb@clubhouse@tutorial@bkr_tut_ig3@", "machinic_loop_mechandplayer", 1.0) openTunerLaptop(true) end, function() -- Cancel StopAnimTask(PlayerPedId(), "anim@amb@clubhouse@tutorial@bkr_tut_ig3@", "machinic_loop_mechandplayer", 1.0) QBCore.Functions.Notify(Lang:t("error.canceled"), "error") end) else QBCore.Functions.Notify(Lang:t("error.you_are_not_in_a_vehicle"), "error") end end) RegisterNUICallback('exit', function(_, cb) openTunerLaptop(false) SetNuiFocus(false, false) cb('ok') end) local LastRainbowNeonColor = 0 local RainbowNeonColors = { [1] = { r = 255, g = 0, b = 0 }, [2] = { r = 255, g = 165, b = 0 }, [3] = { r = 255, g = 255, b = 0 }, [4] = { r = 0, g = 0, b = 255 }, [5] = { r = 75, g = 0, b = 130 }, [6] = { r = 238, g = 130, b = 238 }, } RegisterNUICallback('saveNeon', function(data, cb) QBCore.Functions.TriggerCallback('qb-tunerchip:server:HasChip', function(HasChip) if HasChip then if not data.rainbowEnabled then local ped = PlayerPedId() local veh = GetVehiclePedIsIn(ped) if tonumber(data.neonEnabled) == 1 then SetVehicleNeonLightEnabled(veh, 0, true) SetVehicleNeonLightEnabled(veh, 1, true) SetVehicleNeonLightEnabled(veh, 2, true) SetVehicleNeonLightEnabled(veh, 3, true) if tonumber(data.r) ~= nil and tonumber(data.g) ~= nil and tonumber(data.b) ~= nil then SetVehicleNeonLightsColour(veh, tonumber(data.r), tonumber(data.g), tonumber(data.b)) else SetVehicleNeonLightsColour(veh, 255, 255, 255) end RainbowNeon = false else SetVehicleNeonLightEnabled(veh, 0, false) SetVehicleNeonLightEnabled(veh, 1, false) SetVehicleNeonLightEnabled(veh, 2, false) SetVehicleNeonLightEnabled(veh, 3, false) RainbowNeon = false end else local ped = PlayerPedId() local veh = GetVehiclePedIsIn(ped) if tonumber(data.neonEnabled) == 1 then if not RainbowNeon then RainbowNeon = true SetVehicleNeonLightEnabled(veh, 0, true) SetVehicleNeonLightEnabled(veh, 1, true) SetVehicleNeonLightEnabled(veh, 2, true) SetVehicleNeonLightEnabled(veh, 3, true) CreateThread(function() while true do if RainbowNeon then if (LastRainbowNeonColor + 1) ~= 7 then LastRainbowNeonColor = LastRainbowNeonColor + 1 SetVehicleNeonLightsColour(veh, RainbowNeonColors[LastRainbowNeonColor].r, RainbowNeonColors[LastRainbowNeonColor].g, RainbowNeonColors[LastRainbowNeonColor].b) else LastRainbowNeonColor = 1 SetVehicleNeonLightsColour(veh, RainbowNeonColors[LastRainbowNeonColor].r, RainbowNeonColors[LastRainbowNeonColor].g, RainbowNeonColors[LastRainbowNeonColor].b) end else break end Wait(350) end end) end else RainbowNeon = false SetVehicleNeonLightEnabled(veh, 0, false) SetVehicleNeonLightEnabled(veh, 1, false) SetVehicleNeonLightEnabled(veh, 2, false) SetVehicleNeonLightEnabled(veh, 3, false) end end end cb('ok') end) end) local RainbowHeadlight = false local RainbowHeadlightValue = 0 RegisterNUICallback('saveHeadlights', function(data, cb) QBCore.Functions.TriggerCallback('qb-tunerchip:server:HasChip', function(HasChip) if HasChip then if data.rainbowEnabled then RainbowHeadlight = true local ped = PlayerPedId() local veh = GetVehiclePedIsIn(ped) local value = tonumber(data.value) CreateThread(function() while true do if RainbowHeadlight then if (RainbowHeadlightValue + 1) ~= 12 then RainbowHeadlightValue = RainbowHeadlightValue + 1 ToggleVehicleMod(veh, 22, true) SetVehicleHeadlightsColour(veh, RainbowHeadlightValue) else RainbowHeadlightValue = 1 ToggleVehicleMod(veh, 22, true) SetVehicleHeadlightsColour(veh, RainbowHeadlightValue) end else break end Wait(300) end end) ToggleVehicleMod(veh, 22, true) SetVehicleHeadlightsColour(veh, value) else RainbowHeadlight = false local ped = PlayerPedId() local veh = GetVehiclePedIsIn(ped) local value = tonumber(data.value) ToggleVehicleMod(veh, 22, true) SetVehicleHeadlightsColour(veh, value) end end cb('ok') end) end) function openTunerLaptop(bool) SetNuiFocus(bool, bool) SendNUIMessage({ action = "ui", toggle = bool }) end RegisterNUICallback('SetStancer', function(data, cb) local fOffset = data.fOffset * 100 / 1000 local fRotation = data.fRotation * 100 / 1000 local rOffset = data.rOffset * 100 / 1000 local rRotation = data.rRotation * 100 / 1000 local ped = PlayerPedId() local veh = GetVehiclePedIsIn(ped) exports["vstancer"]:SetWheelPreset(veh, -fOffset, -fRotation, -rOffset, -rRotation) cb("ok") end)