114 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
local QBCore = exports['qb-core']:GetCoreObject()
 | 
						|
local isJobMenuOpen = false
 | 
						|
local lastJobCheck = 0
 | 
						|
local checkInterval = 60000 -- Check for new jobs every 60 seconds
 | 
						|
 | 
						|
local function GetJobs()
 | 
						|
    local p = promise.new()
 | 
						|
    QBCore.Functions.TriggerCallback('ps-multijob:getJobs', function(result)
 | 
						|
        p:resolve(result)
 | 
						|
    end)
 | 
						|
    return Citizen.Await(p)
 | 
						|
end
 | 
						|
 | 
						|
local function OpenUI()
 | 
						|
    local job = QBCore.Functions.GetPlayerData().job
 | 
						|
    SetNuiFocus(true, true)
 | 
						|
    isJobMenuOpen = true
 | 
						|
    SendNUIMessage({
 | 
						|
        action = 'sendjobs',
 | 
						|
        activeJob = job["name"],
 | 
						|
        onDuty = job["onduty"],
 | 
						|
        jobs = GetJobs(),
 | 
						|
        side = Config.Side,
 | 
						|
    })
 | 
						|
    lastJobCheck = GetGameTimer() -- Reset the timer when we open the UI
 | 
						|
end
 | 
						|
 | 
						|
-- Function to check for job updates
 | 
						|
local function CheckForJobUpdates()
 | 
						|
    if isJobMenuOpen and (GetGameTimer() - lastJobCheck) > checkInterval then
 | 
						|
        lastJobCheck = GetGameTimer()
 | 
						|
        local jobs = GetJobs()
 | 
						|
        SendNUIMessage({
 | 
						|
            action = 'updateJobList',
 | 
						|
            jobs = jobs
 | 
						|
        })
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
RegisterNUICallback('selectjob', function(data, cb)
 | 
						|
    TriggerServerEvent("ps-multijob:changeJob", data["name"], data["grade"])
 | 
						|
    local onDuty = false
 | 
						|
    if data["name"] ~= "police" then onDuty = QBCore.Shared.Jobs[data["name"]].defaultDuty end
 | 
						|
    cb({onDuty = onDuty})
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNUICallback('closemenu', function(data, cb)
 | 
						|
    cb({})
 | 
						|
    SetNuiFocus(false, false)
 | 
						|
    isJobMenuOpen = false
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNUICallback('removejob', function(data, cb)
 | 
						|
    TriggerServerEvent("ps-multijob:removeJob", data["name"], data["grade"])
 | 
						|
    local jobs = GetJobs()
 | 
						|
    jobs[data["name"]] = nil
 | 
						|
    cb(jobs)
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNUICallback('toggleduty', function(data, cb)
 | 
						|
    cb({})
 | 
						|
 | 
						|
    local job = QBCore.Functions.GetPlayerData().job.name
 | 
						|
 | 
						|
    if Config.DenyDuty[job] then
 | 
						|
        TriggerEvent("QBCore:Notify", 'Not allowed to use this station for clock-in.', 'error')
 | 
						|
        return
 | 
						|
    end
 | 
						|
    
 | 
						|
    TriggerServerEvent("QBCore:ToggleDuty")
 | 
						|
end)
 | 
						|
 | 
						|
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(JobInfo)
 | 
						|
    SendNUIMessage({
 | 
						|
        action = 'updatejob',
 | 
						|
        name = JobInfo["name"],
 | 
						|
        label = JobInfo["label"],
 | 
						|
        onDuty = JobInfo["onduty"],
 | 
						|
        gradeLabel = JobInfo["grade"].name,
 | 
						|
        grade = JobInfo["grade"].level,
 | 
						|
        salary = JobInfo["payment"],
 | 
						|
        isWhitelist = Config.WhitelistJobs[JobInfo["name"]] or false,
 | 
						|
        description = Config.Descriptions[JobInfo["name"]] or "",
 | 
						|
        icon = Config.FontAwesomeIcons[JobInfo["name"]] or "",
 | 
						|
    })
 | 
						|
end)
 | 
						|
 | 
						|
RegisterCommand("jobmenu", OpenUI, false)
 | 
						|
 | 
						|
RegisterKeyMapping('jobmenu', "Show Job Management", "keyboard", "J")
 | 
						|
 | 
						|
TriggerEvent('chat:removeSuggestion', '/jobmenu')
 | 
						|
 | 
						|
RegisterNetEvent('ps-multijob:refreshJobs', function()
 | 
						|
    if isJobMenuOpen then
 | 
						|
        OpenUI() -- Refresh the UI with updated job data
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
-- Request job updates from server periodically
 | 
						|
Citizen.CreateThread(function()
 | 
						|
    while true do
 | 
						|
        Citizen.Wait(checkInterval)
 | 
						|
        TriggerServerEvent('ps-multijob:requestJobUpdate')
 | 
						|
    end
 | 
						|
end)
 | 
						|
 | 
						|
-- Check for job updates while menu is open
 | 
						|
Citizen.CreateThread(function()
 | 
						|
    while true do
 | 
						|
        Citizen.Wait(1000) -- Check every second if we need to update
 | 
						|
        CheckForJobUpdates()
 | 
						|
    end
 | 
						|
end)
 |