---@class ESXJob ---@field name string ---@field label string ---@field grades table ---@class ESXJobGrade ---@field name string ---@field label string ---@field salary number ---@field skin_male table ---@field skin_femail table ---@field id number ---@class QBJob ---@field name string ---@field label string ---@field type string ---@field defaultDuty boolean ---@field offDutyPay boolean ---@field grades QbJobGrade[] ---@class QBJobRaw ---@field grades table ---@field defaultDuty boolean ---@field offDutyPay boolean ---@field label string ---@field type string ---@class QBJobGrade ---@field name string ---@field payment number ---@field isBoss boolean ---@alias QBJobs table> table --[[ example qb job police = { label = 'Law Enforcement', type = 'leo', defaultDuty = true, offDutyPay = false, grades = { ['0'] = { name = 'Recruit', payment = 50 }, ['1'] = { name = 'Officer', payment = 75 }, ['2'] = { name = 'Sergeant', payment = 100 }, ['3'] = { name = 'Lieutenant', payment = 125 }, ['4'] = { name = 'Chief', isboss = true, payment = 150 }, }, }, ]] ---@class LuxuJob ---@field name string ---@field label string ---@field grades LuxuJobGrade[] ---@class JobManager local JobManager = {} --- Add a job function JobManager.addJob(job) if Framework.name == "esx" then ESX.CreateJob(name, label, grades) elseif Framework.name == "qb" or Framework.name == "qbx" then exports["qb-core"]:AddJob(job) elseif Framework.name == "ox" then --TODO: Add ox_core job end end --- Remove a job ---@param jobName string function JobManager.removeJob(jobName) if Framework.name == "esx" then elseif Framework.name == "qb" or Framework.name == "qbx" then exports["qb-core"]:RemoveJob(jobName) elseif Framework.name == "ox" then --TODO: Add ox_core job end end --- Add multiple jobs at once function JobManager.addJobs(jobs) if Framework.name == "esx" then for jobName, job in pairs(jobs) do ESX.CreateJob(jobName, job.label, job.grades) end elseif Framework.name == "qb" or Framework.name == "qbx" then exports["qb-core"]:AddJobs(jobs) elseif Framework.name == "ox" then --TODO: Add ox_core job end end function JobManager.getGangs() if Framework.name == "esx" then return {} elseif Framework.name == "qb" or Framework.name == "qbx" then local gangs = Framework.object.Shared .Gangs --[[ @as table}> ]] local formatedGangs = {} for gangName, gang in pairs(gangs) do local info = { name = gangName, label = gang.label, grades = {}, } for gradeId, grade in pairs(gang.grades or {}) do info.grades[#info.grades + 1] = { name = grade.name or "", grade = gradeId, isboss = grade.isboss, } end formatedGangs[#formatedGangs + 1] = info end return formatedGangs elseif Framework.name == "ox" then return {} end end ---@class FormattedJob ---@field name string ---@field label string ---@field grades {name:string, label:string, grade:number, isBoss:boolean, payment:number}[] ---@return FormattedJob[] function JobManager.getJobs() if Framework.name == "esx" then local jobs = ESX.GetJobs() --[[ @as table ]] ---@type FormattedJob[] local formattedJobs = {} for jobName, job in pairs(jobs) do local formattedGrades = {} for gradeId, grade in pairs(job.grades or {}) do table.insert(formattedGrades, { name = grade.name or "", label = grade.label or "", grade = gradeId, isBoss = Luxu.array.includes(Config.esx_boss_grades_names, grade.name), payment = grade.salary or 0, }) end table.insert(formattedJobs, { name = jobName, label = job.label or "", grades = formattedGrades, }) end return formattedJobs elseif Framework.name == "qb" or Framework.name == "qbx" then local jobs = Framework.object.Shared.Jobs --[[ @as table ]] ---@type FormattedJob[] local formattedJobs = {} for jobName, job in pairs(jobs) do local formattedGrades = {} for gradeId, grade in pairs(job.grades or {}) do table.insert(formattedGrades, { name = grade.name or tostring(gradeId), label = grade.name or "", grade = tonumber(gradeId) or 0, isBoss = grade.isboss == true, payment = grade.payment or 0, }) end table.insert(formattedJobs, { name = jobName, label = job.label or "", grades = formattedGrades, }) end return formattedJobs elseif Framework.name == "ox" then --TODO: Add ox_core job end end return JobManager