local renderingScriptCam = "" local openUI = false local SellectMode = "" local SellectItem = "" local colorstyp = "" local oldcolor = 1 local oldcolorextra = 1 local oldplate = 1 local oldneon = 1 local oldwtype = 1 local vehicleMods = {} local oldtint = 1 local oldsmoke = 1 local SellectItemPrice = 0 local typer = "main" Citizen.CreateThread(function() AddMechanicsBlips() while true do local sleep = 500 local playercoord = GetEntityCoords(PlayerPedId()) for k, v in pairs(Config.Mechanics) do local dst = #(playercoord - vector3(v.Coords.x, v.Coords.y, v.Coords.z)) if dst < Config.Distance and IsPedSittingInAnyVehicle(PlayerPedId()) and returnlogin() and checkJob(k) and not openUI then sleep = 1 DrawText3D(playercoord.x, playercoord.y, playercoord.z, Config.Langs.OpenMenu) DrawMarker(36, v.Coords.x, v.Coords.y, v.Coords.z, 0, 0, 0, 0, 0, 1.0, 1.0, 1.0, 1.0, 255, 255, 255, 200, 0, 0, 0, 1) if IsControlJustPressed(0, 38) then OpenMenu() end end end Citizen.Wait(sleep) end end) function closeHud() TriggerServerEvent("hp_hud:server:UpdateData", true) end function openHud() TriggerServerEvent("hp_hud:server:UpdateData", false) end local customCamMain = "" local customCamSec = "" function OpenMenu() closeHud()--Hide the HP_HUD local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) local vehPos = GetEntityCoords(playerVeh) local camPos = GetOffsetFromEntityInWorldCoords(playerVeh, -2.0, 5.0, 3.0) local headingToObject = GetHeadingFromVector_2d(vehPos.x - camPos.x, vehPos.y - camPos.y) SellectItemPrice = 0 customCamMain = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', camPos.x, camPos.y, camPos.z, -35.0, 0.0, headingToObject, GetGameplayCamFov(), false, 2) customCamSec = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', camPos.x, camPos.y, camPos.z, -35.0, 0.0, headingToObject, GetGameplayCamFov(), false, 2) SetCamActive(customCamMain, true) RenderScriptCams(true, true, 500, true, true) FreezeEntityPosition(playerVeh, true) SetVehicleOnGroundProperly(playerVeh) DisplayHud(false) renderingScriptCam = true SetNuiFocus(1, 1) oldcolor = table.pack(GetVehicleColours(playerVeh)) oldcolorextra = table.pack(GetVehicleExtraColours(playerVeh)) FillVehicleModStatus(playerVeh) oldwtype = GetVehicleWheelType(playerVeh) oldsmoke = table.pack(GetVehicleTyreSmokeColor(playerVeh)) oldneon = table.pack(GetVehicleNeonLightsColour(playerVeh)) oldplate = GetVehicleNumberPlateTextIndex(playerVeh) oldtint = GetVehicleWindowTint(playerVeh) detailed(playerVeh) openUI = true SendNUIMessage({ action = "openmenu" }) ToggleVehicleParts("allclosed") AddMods() UpdatePrice() end function AddMods() local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) SetVehicleModKit(playerVeh, 0) for k, v in pairs(Config.ModsList) do if Config.DetailMods[k] == nil then SendNUIMessage({ action = "addMods", label = v.name, img = v.img, id = k, }) else local modCount = GetNumVehicleMods(playerVeh, Config.DetailMods[k].modtype) if modCount > 1 then SendNUIMessage({ action = "addMods", label = Config.ModsList[k].name, img = Config.ModsList[k].img, id = k, }) end end end end function detailed(veh) local pmult, tmult, handling, brake = 1000, 800, GetPerformanceStats(veh).handling, GetPerformanceStats(veh).brakes topspeed = math.ceil(GetVehicleModelEstimatedMaxSpeed(GetEntityModel(veh)) * 3.6) power = math.ceil(GetVehicleModelAcceleration(GetEntityModel(veh)) * pmult) torque = math.ceil(GetVehicleModelAcceleration(GetEntityModel(veh)) * tmult) brakes = GetVehicleModelMaxBraking(GetEntityModel(veh)) * 80 health = math.floor(GetVehicleEngineHealth(veh) / 10) fuel = getfuel(veh) SendNUIMessage({ action = "update", topspeed = topspeed, power = power, torque = torque, brakes = brakes, health = health, fuel = fuel }) end function GetPerformanceStats(vehicle) local data = {} data.brakes = GetVehicleModelMaxBraking(vehicle) local handling1 = GetVehicleModelMaxBraking(vehicle) local handling2 = GetVehicleModelMaxBrakingMaxMods(vehicle) local handling3 = GetVehicleModelMaxTraction(vehicle) data.handling = (handling1 + handling2) * handling3 return data end function toboolean(str, str2) local bool = false if all_trim(str) == all_trim(str2) then bool = true end return bool end function all_trim(s) str = s:gsub("%s+", "") str = string.gsub(s, "%s+", "") return str end RegisterNUICallback("close", function() typerChange() end) RegisterNUICallback('rightClick', function(data, cb) SetNuiFocus(false, false) RenderScriptCams(false, true, 500, true, true) renderingScriptCam = false DestroyCam(customCamMain, true) DestroyCam(customCamSec, true) ClearFocus() while true do Citizen.Wait(1) if IsDisabledControlJustPressed(0, 91) or not openUI then break end end SetNuiFocus(true, true) cb("") end) RegisterNUICallback("changecam", function() local playerVeh = GetVehiclePedIsIn(PlayerPedId(), false) local vehPos = GetEntityCoords(playerVeh) local camPos = GetOffsetFromEntityInWorldCoords(playerVeh, -2.0, 5.0, 3.0) local headingToObject = GetHeadingFromVector_2d(vehPos.x - camPos.x, vehPos.y - camPos.y) customCamMain = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', camPos.x, camPos.y, camPos.z, -35.0, 0.0, headingToObject, GetGameplayCamFov(), false, 2) customCamSec = CreateCamWithParams('DEFAULT_SCRIPTED_CAMERA', camPos.x, camPos.y, camPos.z, -35.0, 0.0, headingToObject, GetGameplayCamFov(), false, 2) SetCamActive(customCamMain, true) RenderScriptCams(true, true, 500, true, true) FreezeEntityPosition(playerVeh, true) SetVehicleOnGroundProperly(playerVeh) RenderScriptCams(not renderingScriptCam, true, 500, true, true) renderingScriptCam = not renderingScriptCam end) RegisterNUICallback("SellectId", function(data) id = data.id SellectMode = id SendNUIMessage({action = "emptyitem"}) typer = "main" CehckCarParts() if Config.SoundEffect then PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1) end DefaultCar() if id == "Colors" then SendNUIMessage({action = "emptyall"}) for k, v in pairs(Config.ColorsType) do typer = "alt" SendNUIMessage({ action = "addMods", label = v.label, img = v.img, id = k, }) end elseif id == "Plates" then for k, v in pairs(Config.Plates) do select = false if v.plateindex == oldplate then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = v.img, price = v.price, id = k, select = select, }) end elseif id == "Horns" then for k, v in pairs(Config.Horns) do select = false if v.mod == GetModStatus(14) then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["Horns"].img, price = v.price, id = k, select = select, }) end elseif id == "PrimaryColor" or id == "SecondaryColor" or id == "PearlColor" then colorstyp = id typer = "altalt" SendNUIMessage({action = "emptyall"}) for k, v in pairs(Config.ColorsMenu) do SendNUIMessage({ action = "addMods", label = v.label, img = v.img, id = k, }) end elseif id == "ColorsC" then typer = "altaltalt" for k, v in pairs(Config.Colors) do SendNUIMessage({ action = "addItems", label = v.name, img = Config.ColorsMenu["ColorsC"].img, price = Config.ColorsMenu["ColorsC"].price, id = k, }) end elseif id == "MetalColors" then typer = "altaltalt" for k, v in pairs(Config.MetalColors) do SendNUIMessage({ action = "addItems", label = v.name, img = Config.ColorsMenu["MetalColors"].img, price = Config.ColorsMenu["MetalColors"].price, id = k, }) end elseif id == "MatteColors" then typer = "altaltalt" for k, v in pairs(Config.MatteColors) do SendNUIMessage({ action = "addItems", label = v.name, img = Config.ColorsMenu["MatteColors"].img, price = Config.ColorsMenu["MatteColors"].price, id = k, }) end elseif id == "Xenons" then -- Xenon typer = "main" SendNUIMessage({action = "emptyall"}) for k, v in pairs(Config.LightsTypes) do typer = "alt" SendNUIMessage({ action = "addMods", label = v.label, img = v.img, id = k, }) end elseif id == "LightsType" then typer = "alt" for k, v in pairs(Config.LightsType) do select = false if v.mod == GetModStatus(22) or (GetModStatus(22) == -1 and v.mod == 0) then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList.Xenons.img, price = v.price, id = k, select = select, }) end elseif id == "LightsColors" then typer = "alt" for k, v in pairs(Config.LightsColors) do select = false if v.light == oldheadlights then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.LightsTypes["LightsType"].img, price = v.price, id = k, select = select }) end elseif id == "RepairMenu" then for k, v in pairs(Config.RepairMenu) do SendNUIMessage({ action = "addItems", label = v.name, img = v.img, price = v.price, id = k, }) end elseif id == "Neons" then for k, v in pairs(Config.Neons) do select = false if json.encode(v.neon) == "[" .. oldneon[1] .. "," .. oldneon[2] .. "," .. oldneon[3] .. "]" then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["Neons"].img, price = v.price, id = k, select = select, }) end elseif id == "WindowTint" then for k, v in pairs(Config.Windowtint) do select = false if v.tint == oldtint or (oldtint == -1 and v.tint == 4) then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["WindowTint"].img, price = v.price, id = k, select = select, }) end elseif id == "Suspension" then for k, v in pairs(Config.Suspensions) do select = false if v.mod == GetModStatus(15) or (GetModStatus(15) == -1 and v.mod == 0) then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["Suspension"].img, price = v.price, id = k, select = select, }) end elseif id == "Brakes" then for k, v in pairs(Config.Brakes) do select = false if v.mod == GetModStatus(12) or (GetModStatus(12) == -1 and v.mod == 0) then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["Brakes"].img, price = v.price, id = k, select = select, }) end elseif id == "Engine" then for k, v in pairs(Config.Engine) do select = false if v.mod == GetModStatus(11) or (GetModStatus(11) == 3 and v.mod == 0) or (GetModStatus(11) == -1 and v.mod == 0) then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["Engine"].img, price = v.price, id = k, select = select, }) end elseif id == "Turbo" then for k, v in pairs(Config.Turbo) do select = false if v.mod == GetModStatus(18) or (GetModStatus(18) == -1 and v.mod == 0) then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["Turbo"].img, price = v.price, id = k, select = select, }) end elseif id == "Transmission" then for k, v in pairs(Config.Transmission) do select = false if v.mod == GetModStatus(13) or (GetModStatus(13) == -1 and v.mod == 0) then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["Transmission"].img, price = v.price, id = k, select = select, }) end elseif id == "Wheels" then typer = "main" SendNUIMessage({action = "emptyall"}) for k, v in pairs(Config.WheelsType) do typer = "alt" SendNUIMessage({ action = "addMods", label = v.name, img = v.img, id = k, }) end elseif id == "wheelSmoke" then typer = "alt" for k, v in pairs(Config.Wheel.wheelaccessories) do select = false if json.encode(v.smokecolor) == "[" .. oldsmoke[1] .. "," .. oldsmoke[2] .. "," .. oldsmoke[3] .. "]" then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.ModsList["Wheels"].img, price = v.price, id = k, select = select, }) end elseif id == "accessories" then typer = "alt" SendNUIMessage({action = "emptyall"}) for k, v in pairs(Config.Wheel_whType) do typer = "altalt" SendNUIMessage({ action = "addMods", label = v.name, img = v.img, id = k, }) end elseif id == "frontwheel" or id == "backwheel" or id == "sportwheels" or id == "suvwheels" or id == "offroadwheels" or id == "tunerwheels" or id == "highendwheels" or id == "lowriderwheels" or id == "musclewheels" then typer = "altalt" for k, v in pairs(Config.Wheel.Wheel[id]) do select = false if v.mod == GetModStatus(23) and v.wtype == oldwtype then select = true end SendNUIMessage({ action = "addItems", label = v.name, img = Config.Wheel_whType[id].img, price = v.price, id = k, select = select, }) end elseif id == "wheelcolor" then typer = "alt" for k, v in pairs(Config.Colors) do SendNUIMessage({ action = "addItems", label = v.name, img = Config.ColorsMenu["ColorsC"].img, price = Config.ColorsMenu["ColorsC"].price, id = k, }) end elseif Config.DetailMods[id] then local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) local modCount = GetNumVehicleMods(playerVeh, Config.DetailMods[id].modtype) for i = modCount, 0, -1 do select = false if i == GetModStatus(Config.DetailMods[id].modtype) or (GetModStatus(Config.DetailMods[id].modtype) == -1 and i == modCount) then select = true end if i == modCount then else SendNUIMessage({ action = "addItems", label = Config.ModsList[id].name .. " " .. i + 1, img = Config.ModsList[id].img, price = Config.DetailMods[id].startprice + (i * Config.DetailMods[id].increaseby), select = select, id = i, }) end end select = false if modCount == GetModStatus(Config.DetailMods[id].modtype) or (GetModStatus(Config.DetailMods[id].modtype) == -1) then select = true end SendNUIMessage({ action = "addItems", label = Config.ModsList[id].name .. " " .. Config.Langs["Stock"], img = Config.ModsList[id].img, price = Config.DetailMods[id].startprice + (modCount * Config.DetailMods[id].increaseby), select = select, id = modCount, }) -- end end end) BlipsTable = {} function AddMechanicsBlips() for location, data in pairs(Config.Mechanics) do if data.Job == "unjob" or data.Job == "mechanic" then local blip = AddBlipForCoord(data.Coords.x, data.Coords.y, data.Coords.z) SetBlipSprite(blip, Config.Blips.sprite) SetBlipDisplay(blip, 4) SetBlipScale(blip, Config.Blips.scale) SetBlipColour(blip, Config.Blips.color) SetBlipAsShortRange(blip, true) BeginTextCommandSetBlipName("STRING") AddTextComponentString(Config.Blips.Name) EndTextCommandSetBlipName(blip) table.insert(BlipsTable, blip) end end end RegisterNUICallback("SellectItem", function(data) id = data.id SellectItem = id local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) oldcolorx = table.pack(GetVehicleColours(playerVeh)) repair = "no" if Config.SoundEffect then PlaySoundFrontend(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET", 1) end if SellectMode == "MatteColors" or SellectMode == "MetalColors" or SellectMode == "ColorsC" then if colorstyp == "PrimaryColor" then if SellectMode == "ColorsC" then SellectItemPrice = Config.ColorsMenu["ColorsC"].price SetVehicleColours(playerVeh, Config["Colors"][tonumber(SellectItem)].colorindex, oldcolor[2]) else SellectItemPrice = Config.ColorsMenu[SellectMode].price SetVehicleColours(playerVeh, Config[SellectMode][tonumber(SellectItem)].colorindex, oldcolor[2]) end elseif colorstyp == "SecondaryColor" then if SellectMode == "ColorsC" then SellectItemPrice = Config.ColorsMenu["ColorsC"].price SetVehicleColours(playerVeh, oldcolorx[1], Config["Colors"][tonumber(SellectItem)].colorindex) else SellectItemPrice = Config.ColorsMenu[SellectMode].price SetVehicleColours(playerVeh, oldcolorx[1], Config[SellectMode][tonumber(SellectItem)].colorindex) end else if SellectMode == "ColorsC" then SellectItemPrice = Config.ColorsMenu["ColorsC"].price SetVehicleExtraColours(playerVeh, Config["Colors"][tonumber(SellectItem)].colorindex, Config["Colors"][tonumber(SellectItem)].colorindex) else SellectItemPrice = Config.ColorsMenu[SellectMode].price SetVehicleExtraColours(playerVeh, Config[SellectMode][tonumber(SellectItem)].colorindex, Config[SellectMode][tonumber(SellectItem)].colorindex) end end elseif SellectMode == "Horns" then SellectItemPrice = Config.Horns[tonumber(id)].price SetVehicleMod(playerVeh, 14, Config.Horns[tonumber(id)].mod) OverrideVehHorn(playerVeh, false, Config.Horns[tonumber(id)].mod) StartVehicleHorn(playerVeh, 3000, GetHashKey("HELDDOWN"), true) notify(Config.Langs["ChangeHorns"]) elseif SellectItem == "Repair" or SellectItem == "AdvancedRepair" or SellectItem == "Clean" then SellectItemPrice = Config.RepairMenu[SellectItem].price elseif SellectMode == "Plates" then SellectItemPrice = Config.Plates[tonumber(id)].price SetVehicleNumberPlateTextIndex(playerVeh, Config.Plates[tonumber(id)].plateindex) elseif SellectMode == "Neons" then SellectItemPrice = Config.Neons[tonumber(id)].price for i = 0, 3 do SetVehicleNeonLightEnabled(playerVeh, i, true) end if json.encode(Config.Neons[tonumber(id)].neon) == "[0,0,0]" then SetVehicleNeonLightsColour(playerVeh, 255, 255, 255) for i = 0, 3 do SetVehicleNeonLightEnabled(playerVeh, i, false) end else SetVehicleNeonLightsColour(playerVeh, Config.Neons[tonumber(id)].neon[1], Config.Neons[tonumber(id)].neon[2], Config.Neons[tonumber(id)].neon[3]) end elseif SellectMode == "WindowTint" then SellectItemPrice = Config.Windowtint[tonumber(id)].price SetVehicleWindowTint(playerVeh, Config.Windowtint[tonumber(id)].tint) elseif SellectMode == "Suspension" then SellectItemPrice = Config.Suspensions[tonumber(id)].price SetVehicleMod(playerVeh, 15, Config.Suspensions[tonumber(id)].mod) elseif SellectMode == "Brakes" then SellectItemPrice = Config.Brakes[tonumber(id)].price SetVehicleMod(playerVeh, 12, Config.Brakes[tonumber(id)].mod) elseif SellectMode == "Engine" then SellectItemPrice = Config.Engine[tonumber(id)].price SetVehicleMod(playerVeh, 11, Config.Engine[tonumber(id)].mod) elseif SellectMode == "Turbo" then SellectItemPrice = Config.Turbo[tonumber(id)].price ToggleVehicleMod(playerVeh, 18, Config.Turbo[tonumber(id)].enabled) elseif SellectMode == "LightsType" then SellectItemPrice = Config.LightsType[tonumber(id)].price ToggleVehicleMod(playerVeh, 22, Config.LightsType[tonumber(id)].enabled) elseif SellectMode == "LightsColors" then SellectItemPrice = Config.LightsColors[tonumber(id)].price SetVehicleXenonLightsColor(playerVeh, Config.LightsColors[tonumber(id)].light) elseif SellectMode == "Transmission" then SellectItemPrice = Config.Transmission[tonumber(id)].price SetVehicleMod(playerVeh, 13, Config.Transmission[tonumber(id)].mod) elseif SellectMode == "wheelSmoke" then SellectItemPrice = Config.Wheel.wheelaccessories[tonumber(id)].price ToggleVehicleMod(playerVeh, 20, true) SetVehicleTyreSmokeColor(playerVeh, Config.Wheel.wheelaccessories[tonumber(id)].smokecolor[1], Config.Wheel.wheelaccessories[tonumber(id)].smokecolor[2], Config.Wheel.wheelaccessories[tonumber(id)].smokecolor[3]) elseif SellectMode == "frontwheel" or SellectMode == "backwheel" or SellectMode == "sportwheels" or SellectMode == "suvwheels" or SellectMode == "offroadwheels" or SellectMode == "tunerwheels" or SellectMode == "highendwheels" or SellectMode == "lowriderwheels" or SellectMode == "musclewheels" then SellectItemPrice = Config.Wheel.Wheel[SellectMode][tonumber(id)].price SetVehicleWheelType(playerVeh, Config.Wheel.Wheel[SellectMode][tonumber(id)].wtype) SetVehicleMod(playerVeh, 23, Config.Wheel.Wheel[SellectMode][tonumber(id)].mod) elseif Config.DetailMods[SellectMode] then SellectItemPrice = Config.DetailMods[SellectMode].startprice + (tonumber(id) * Config.DetailMods[SellectMode].increaseby) SetVehicleMod(playerVeh, Config.DetailMods[SellectMode].modtype, tonumber(id)) end UpdatePrice() end) RegisterNUICallback("BuyItem", function() TriggerServerEvent("hp_mechanic:buyitem", SellectItemPrice) end) RegisterNetEvent("hp_mechanic:cl:buyitem") AddEventHandler("hp_mechanic:cl:buyitem", function() local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) if Config.SoundEffect then SendNUIMessage({action = "sound"}) end if SellectItem == "Repair" then local fullEngineHealth = 1000.0 SetVehicleEngineHealth(playerVeh, fullEngineHealth) detailed(playerVeh) notify(Config.Langs["Repair"]) elseif SellectItem == "AdvancedRepair" then local fullEngineHealth = 1000.0 SetVehicleEngineHealth(playerVeh, fullEngineHealth) SetVehicleFixed(playerVeh) detailed(playerVeh) notify(Config.Langs["AdvancedRepair"]) elseif SellectItem == "Clean" then notify(Config.Langs["Clean"]) WashDecalsFromVehicle(playerVeh, 1.0) SetVehicleDirtLevel(playerVeh) else SaveCar() end TriggerServerEvent("hp_mechanic:SaveVehicleProps", getvehiclepropx(playerVeh)) end) function UpdatePrice() SendNUIMessage({ action = "updateprice", price = SellectItemPrice }) end local PartsAll = { ["Trim"] = true, ["DoorSpeaker"] = true, ["Seats"] = true, ["Trunk"] = true, ["Hydraulics"] = true, ["EngineBlock"] = true, ["AirFilter"] = true, ["Struts"] = true, } function CehckCarParts() ToggleVehicleParts("allclosed") if PartsAll[SellectMode] == nil then else ToggleVehicleParts("doors") end end function ToggleVehicleParts(typ) local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) if typ == "doors" then for i = 0, 5 do SetVehicleDoorOpen(playerVeh, i, false, false) end elseif typ == "allclosed" then for i = 0, 5 do SetVehicleDoorShut(playerVeh, i, false) end end end function DefaultCar() local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) SetVehicleColours(playerVeh, oldcolor[1], oldcolor[2]) SetVehicleNeonLightsColour(playerVeh, oldneon[1], oldneon[2], oldneon[3]) SetVehicleNumberPlateTextIndex(playerVeh, oldplate) SetVehicleExtraColours(playerVeh, oldcolorextra[1], oldcolorextra[2]) SetVehicleWindowTint(playerVeh, oldtint) SetVehicleWheelType(playerVeh, oldwtype) SaveAllMod(playerVeh) SetVehicleTyreSmokeColor(playerVeh, oldsmoke[1], oldsmoke[2], oldsmoke[3]) end function SaveCar() local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) oldcolor = table.pack(GetVehicleColours(playerVeh)) oldcolorextra = table.pack(GetVehicleExtraColours(playerVeh)) oldneon = table.pack(GetVehicleNeonLightsColour(playerVeh)) oldheadlights = IsToggleModOn(playerVeh, 22) oldxenon = GetVehicleXenonLightsColor(playerVeh) oldplate = GetVehicleNumberPlateTextIndex(playerVeh) oldtint = GetVehicleWindowTint(playerVeh) oldwtype = GetVehicleWheelType(playerVeh) oldsmoke = table.pack(GetVehicleTyreSmokeColor(playerVeh)) oldTurbo = IsToggleModOn(playerVeh, 18) notify(Config.Langs["BuyItem"]) SetVehicleNumberPlateTextIndex(playerVeh, oldplate) SetVehicleNeonLightsColour(playerVeh, oldneon[1], oldneon[2], oldneon[3]) SetVehicleWheelType(playerVeh, oldwtype) FillVehicleModStatus(playerVeh) SaveAllMod(playerVeh) ToggleVehicleMod(playerVeh, 22, oldheadlights) ToggleVehicleMod(playerVeh, 18, oldTurbo) SetVehicleHeadlightsColour(playerVeh, oldxenon) SetVehicleColours(playerVeh, oldcolor[1], oldcolor[2]) SetVehicleExtraColours(playerVeh, oldcolorextra[1], oldcolorextra[2]) SetVehicleWindowTint(playerVeh, oldtint) SetVehicleTyreSmokeColor(playerVeh, oldsmoke[1], oldsmoke[2], oldsmoke[3]) end function closeMenu() SetNuiFocus(0, 0) local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) FreezeEntityPosition(playerVeh, false) RenderScriptCams(false, true, 500, true, true) renderingScriptCam = false DestroyCam(customCamMain, true) DestroyCam(customCamSec, true) DisplayHud(true) openHud() ClearFocus() openUI = false SendNUIMessage({ action = "close" }) ToggleVehicleParts("allclosed") DefaultCar() end function altMenu() DefaultCar() if SellectMode == "Colors" then local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) ClearFocus() SendNUIMessage({ action = "close" }) SetVehicleOnGroundProperly(playerVeh) oldcolor = table.pack(GetVehicleColours(playerVeh)) oldcolorextra = table.pack(GetVehicleExtraColours(playerVeh)) detailed(playerVeh) DefaultCar() SendNUIMessage({ action = "openmenu" }) AddMods() elseif SellectMode == "PrimaryColor" or SellectMode == "SecondaryColor" or SellectMode == "PearlColor" then SellectMode = "Colors" typer = "main" local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) ClearFocus() SendNUIMessage({ action = "close" }) SetVehicleOnGroundProperly(playerVeh) oldcolor = table.pack(GetVehicleColours(playerVeh)) oldcolorextra = table.pack(GetVehicleExtraColours(playerVeh)) detailed(playerVeh) DefaultCar() SendNUIMessage({ action = "openmenu" }) AddMods() elseif SellectMode == "MetalColors" or SellectMode == "MatteColors" or SellectMode == "ColorsC" then colorstyp = id typer = "altalt" SellectMode = "PrimaryColor" SendNUIMessage({action = "emptyall"}) SendNUIMessage({action = "emptyitem"}) for k, v in pairs(Config.ColorsType) do SendNUIMessage({ action = "addMods", label = v.label, img = v.img, id = k, }) end elseif SellectMode == "frontwheel" or SellectMode == "backwheel" or SellectMode == "sportwheels" or SellectMode == "suvwheels" or SellectMode == "offroadwheels" or id == "tunerwheels" or id == "highendwheels" or SellectMode == "lowriderwheels" or SellectMode == "musclewheels" or SellectMode == "wheelSmoke" or SellectMode == "Wheels" or SellectMode == "accessories" then if SellectMode == "wheelSmoke" or SellectMode == "Wheels" then typer = "main" local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) ClearFocus() SendNUIMessage({ action = "close" }) SetVehicleOnGroundProperly(playerVeh) oldcolor = table.pack(GetVehicleColours(playerVeh)) oldcolorextra = table.pack(GetVehicleExtraColours(playerVeh)) detailed(playerVeh) DefaultCar() SendNUIMessage({ action = "openmenu" }) AddMods() elseif SellectMode == "backwheel" or SellectMode == "sportwheels" or SellectMode == "suvwheels" or SellectMode == "offroadwheels" or id == "tunerwheels" or id == "highendwheels" or SellectMode == "lowriderwheels" or SellectMode == "musclewheels" or SellectMode == "accessories" then typer = "alt" SellectMode = "Wheels" SendNUIMessage({action = "emptyitem"}) SendNUIMessage({action = "emptyall"}) for k, v in pairs(Config.WheelsType) do SendNUIMessage({ action = "addMods", label = v.name, img = v.img, id = k, }) end end elseif SellectMode == "Xenons" or SellectMode == "LightsType" or SellectMode == "LightsColors" then if SellectMode == "LightsType" or SellectMode == "LightsColors" then typer = "main" local playerPed = PlayerPedId() local playerVeh = GetVehiclePedIsIn(playerPed, false) ClearFocus() SendNUIMessage({ action = "close" }) SetVehicleOnGroundProperly(playerVeh) DefaultCar() SendNUIMessage({ action = "openmenu" }) AddMods() end end end function FillVehicleModStatus(veh) vehicleMods = {} for modType = 0, 49 do local modStatus = GetVehicleMod(veh, modType) vehicleMods[modType] = modStatus end end function GetModStatus(modType) return vehicleMods[modType] end function SaveAllMod(veh) for modType, modStatus in pairs(vehicleMods) do SetVehicleMod(veh, modType, modStatus) end end function typerChange() if typer == "main" then closeMenu() elseif typer == "alt" then typer = "main" altMenu() elseif typer == "altalt" then typer = "alt" altMenu() elseif typer == "altaltalt" then typer = "altalt" altMenu() end end Citizen.CreateThread(function() while true do Citizen.Wait(0) if openUI then DisableAllControlActions(0) EnableControlAction(0, 1, true) EnableControlAction(0, 2, true) EnableControlAction(0, 4, true) EnableControlAction(0, 6, true) EnableControlAction(0, 86, true) else Citizen.Wait(500) end end end)