local QBCore = exports['qb-core']:GetCoreObject() local PlayerJob = {} local DealerPed = {} RegisterNetEvent('QBCore:Client:OnPlayerLoaded') AddEventHandler('QBCore:Client:OnPlayerLoaded', function() QBCore.Functions.GetPlayerData(function(PlayerData) PlayerJob = PlayerData.job end) end) RegisterNetEvent('QBCore:Client:OnJobUpdate') AddEventHandler('QBCore:Client:OnJobUpdate', function(JobInfo) PlayerJob = JobInfo end) AddEventHandler('onClientResourceStart',function(resource) if GetCurrentResourceName() == resource then QBCore.Functions.GetPlayerData(function(PlayerData) if PlayerData.job then PlayerJob = PlayerData.job end end) end end) CreateThread(function() for k, v in pairs(Config.Locations) do if not DealerPed[k] then DealerPed[k] = {} end local current = v.pedhash current = type(current) == 'string' and GetHashKey(current) or current RequestModel(current) while not HasModelLoaded(current) do Wait(0) end DealerPed[k] = CreatePed(0, current, v.pedlocation.x, v.pedlocation.y, v.pedlocation.z - 1, v.pedlocation.w, false, false) FreezeEntityPosition(DealerPed[k], true) SetEntityInvincible(DealerPed[k], true) SetBlockingOfNonTemporaryEvents(DealerPed[k], true) exports["qb-target"]:AddTargetEntity(DealerPed[k], { options = { { type = 'client', event = 'nkoJobGarages:Menu', action = function() openMenu(k) end, label = v.targetLabel, icon = v.targetIcon, job = v.jobname, }, }, distance = 2.5 }) end end) function openMenu(department) -- Get the player's job grade as a number local playerData = QBCore.Functions.GetPlayerData() -- Fetch the player data local jobGrade = tonumber(playerData.job.grade.level) -- Ensure it's a number if not jobGrade then -- Fallback error handling if jobGrade is nil -- print("Error: Job grade is nil or invalid!") QBCore.Functions.Notify("Failed to retrieve your job grade!", "error") return end -- Create the menu local menu = { { header = Config.Locations[department].label .. ' | ' .. Lang:t('cfg.header'), txt = Lang:t('cfg.officer') .. ' ' .. Config.Locations[department].officer .. '', icon = "fa-solid fa-list", isMenuHeader = true, } } -- Loop through vehicles and only add those matching the player's job grade or lower for k, v in pairs(Config.Vehicles[department]) do -- Debug: Print jobGrade and v.grade -- print("Player Job Grade:", jobGrade) -- print("Vehicle Required Grade:", v.grade) -- Ensure both values are numbers before comparing local vehicleGrade = tonumber(v.grade) if vehicleGrade and vehicleGrade <= jobGrade then -- Check if the vehicle grade requirement is met menu[#menu + 1] = { header = v.label, txt = '$' .. v.price .. ' ' .. Lang:t('cfg.pay'), icon = "fa-solid fa-car", params = { event = 'nkoJobGarages:SpawnCar', args = { vehicle = v.model, loc = Config.Locations[department].spawnlocation, livery = v.livery, price = v.price, jobGrade = jobGrade, -- Pass the player's job grade for additional checks if needed requiredGrade = v.grade -- Pass the vehicle's required grade } } } else -- Debug: Vehicle does not meet grade requirement -- print("Vehicle not added to menu. Required Grade:", vehicleGrade, "Player Grade:", jobGrade) end end -- Open the menu exports['qb-menu']:openMenu(menu) end RegisterNetEvent('nkoJobGarages:SpawnCar', function(data) prop_name = 'prop_cop_badge' local ped = PlayerPedId() local x,y,z = table.unpack(GetEntityCoords(ped)) local prop = CreateObject(GetHashKey(prop_name), x, y, z + 0.2, true, true, true) local boneIndex = GetPedBoneIndex(ped, 28422) QBCore.Functions.Progressbar("showcard", Lang:t('cfg.progbar'), Config.ShowBadgeTime, false, true, { disableMovement = true, disableCarMovement = false, disableMouse = false, disableCombat = true, }, { animDict = "paper_1_rcm_alt1-8", anim = "player_one_dual-8", flags = 49, }, { AttachEntityToEntity(prop, ped, boneIndex, 0.0800, -0.0120, -0.0600, -90.00, 180.00, 69.99, true, true, false, true, 1, true) }, {}, function() -- Done ClearPedSecondaryTask(ped) DeleteObject(prop) local livery = data.livery local vehicle = data.vehicle local coords = data.loc local price = data.price QBCore.Functions.SpawnVehicle(vehicle, function(model) local properties = QBCore.Functions.GetVehicleProperties(model) local plate = QBCore.Shared.RandomInt(1) .. QBCore.Shared.RandomStr(2) .. QBCore.Shared.RandomInt(3) .. QBCore.Shared.RandomStr(2) SetVehicleNumberPlateText(model, plate) exports[Config.Fuel]:SetFuel(model, 100) TaskWarpPedIntoVehicle(PlayerPedId(), model, -1) TriggerEvent(Config.KeyEvent, QBCore.Functions.GetPlate(model)) SetVehicleEngineOn(model, true, true) if Config.CustomLivery then SetVehicleModKit(model, 0) SetVehicleExtra(model, 1, 0) SetVehicleExtra(model, 2, 0) SetVehicleExtra(model, 3, 0) SetVehicleExtra(model, 4, 0) SetVehicleExtra(model, 5, 0) SetVehicleExtra(model, 6, 0) SetVehicleExtra(model, 7, 0) SetVehicleExtra(model, 8, 0) SetVehicleColours(model, 111, 0) SetVehicleMod(model, 48, livery, 1) end if Config.SaveSQL then TriggerServerEvent("nkoJobGarages:AddVehicleSQL", properties, vehicle, GetHashKey(model), plate) end if Config.Payment then TriggerServerEvent('nkoJobGarages:Payment', price) end end, coords, true) end) end)