From e0e6016033b3640764e421b4452e6b98d5d3ce87 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 7 Sep 2025 23:22:26 +0200 Subject: [PATCH 1/3] feat: add esx job types --- [SQL]/legacy.sql | 29 ++++++++++--------- [core]/es_extended/server/classes/player.lua | 1 + [core]/es_extended/server/functions.lua | 25 ++++++++++++++-- [core]/es_extended/server/main.lua | 1 + .../es_extended/server/modules/createJob.lua | 15 ++++++---- 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/[SQL]/legacy.sql b/[SQL]/legacy.sql index 655e5d7e..05d5d10b 100644 --- a/[SQL]/legacy.sql +++ b/[SQL]/legacy.sql @@ -235,6 +235,7 @@ INSERT INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES CREATE TABLE `jobs` ( `name` varchar(50) NOT NULL, `label` varchar(50) DEFAULT NULL, + `type` varchar(50) NOT NULL DEFAULT 'civ', `whitelisted` tinyint(1) NOT NULL DEFAULT 0 ) ENGINE=InnoDB; @@ -242,20 +243,20 @@ CREATE TABLE `jobs` ( -- Dumping data for table `jobs` -- -INSERT INTO `jobs` (`name`, `label`, `whitelisted`) VALUES -('ambulance', 'EMS', 0), -('cardealer', 'Cardealer', 0), -('fisherman', 'Fisherman', 0), -('fueler', 'Fueler', 0), -('lumberjack', 'Lumberjack', 0), -('mechanic', 'Mechanic', 0), -('miner', 'Miner', 0), -('police', 'LSPD', 0), -('reporter', 'Reporter', 0), -('slaughterer', 'Butcher', 0), -('tailor', 'Tailor', 0), -('taxi', 'Taxi', 0), -('unemployed', 'Unemployed', 0); +INSERT INTO `jobs` (`name`, `label`, `type`, `whitelisted`) VALUES +('ambulance', 'EMS', 'ems', 0), +('cardealer', 'Cardealer', 'civ', 0), +('fisherman', 'Fisherman', 'civ', 0), +('fueler', 'Fueler', 'civ', 0), +('lumberjack', 'Lumberjack', 'civ', 0), +('mechanic', 'Mechanic', 'mechanic', 0), +('miner', 'Miner', 'civ', 0), +('police', 'LSPD', 'leo', 0), +('reporter', 'Reporter', 'civ', 0), +('slaughterer', 'Butcher', 'civ', 0), +('tailor', 'Tailor', 'civ', 0), +('taxi', 'Taxi', 'civ', 0), +('unemployed', 'Unemployed', 'civ', 0); -- -------------------------------------------------------- diff --git a/[core]/es_extended/server/classes/player.lua b/[core]/es_extended/server/classes/player.lua index 19e18088..367c9838 100644 --- a/[core]/es_extended/server/classes/player.lua +++ b/[core]/es_extended/server/classes/player.lua @@ -585,6 +585,7 @@ function CreateExtendedPlayer(playerId, identifier, ssn, group, accounts, invent id = jobObject.id, name = jobObject.name, label = jobObject.label, + type = jobObject.type, onDuty = onDuty, grade = tonumber(grade) or 0, diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 4ff790b0..7ab5f9b4 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -562,7 +562,7 @@ function ESX.RefreshJobs() if not Jobs then -- Fallback data, if no jobs exist - ESX.Jobs["unemployed"] = { name = "unemployed", label = "Unemployed", whitelisted = false, grades = { ["0"] = { grade = 0, name = "unemployed", label = "Unemployed", salary = 200, skin_male = {}, skin_female = {} } } } + ESX.Jobs["unemployed"] = { name = "unemployed", label = "Unemployed", type = "civ", whitelisted = false, grades = { ["0"] = { grade = 0, name = "unemployed", label = "Unemployed", salary = 200, skin_male = {}, skin_female = {} } } } else ESX.Jobs = Jobs end @@ -628,13 +628,32 @@ function ESX.GetItemLabel(item) end end +---@param jobType string|string[]? ---@return table -function ESX.GetJobs() +function ESX.GetJobs(jobType) while not Core.JobsLoaded do Citizen.Wait(200) end - return ESX.Jobs + if not jobType then + return ESX.Jobs + end + + jobType = type(jobType) == "string" and { jobType } or jobType + + local jobTypeLookup = {} + for i = 1, #jobType do + jobTypeLookup[jobType[i]] = true + end + + local filteredJobs = {} + for jobName, jobObject in pairs(ESX.Jobs) do + if jobTypeLookup[jobObject.type] then + filteredJobs[jobName] = jobObject + end + end + + return filteredJobs end ---@return table diff --git a/[core]/es_extended/server/main.lua b/[core]/es_extended/server/main.lua index 30b24394..96c5cc64 100644 --- a/[core]/es_extended/server/main.lua +++ b/[core]/es_extended/server/main.lua @@ -234,6 +234,7 @@ function loadESXPlayer(identifier, playerId, isNew) id = jobObject.id, name = jobObject.name, label = jobObject.label, + type = jobObject.type, grade = tonumber(grade), grade_name = gradeObject.name, diff --git a/[core]/es_extended/server/modules/createJob.lua b/[core]/es_extended/server/modules/createJob.lua index 35d6daab..894c9204 100644 --- a/[core]/es_extended/server/modules/createJob.lua +++ b/[core]/es_extended/server/modules/createJob.lua @@ -19,8 +19,8 @@ local function doesJobAndGradesExist(name, grades) return true end -local function generateNewJobTable(name, label, grades) - local job = { name = name, label = label, grades = {} } +local function generateNewJobTable(name, label, grades, jobType) + local job = { name = name, label = label, type = jobType, grades = {} } for _, v in pairs(grades) do job.grades[tostring(v.grade)] = { job_name = name, grade = v.grade, name = v.name, label = v.label, salary = v.salary, skin_male = v.skin_male or '{}', skin_female = v.skin_female or '{}' } end @@ -42,7 +42,8 @@ end --- @param name string --- @param label string --- @param grades table -function ESX.CreateJob(name, label, grades) +--- @param jobType string +function ESX.CreateJob(name, label, grades, jobType) local currentResourceName = GetInvokingResource() local success = false @@ -61,6 +62,10 @@ function ESX.CreateJob(name, label, grades) return success end + if type(jobType) ~= "string" then + jobType "civ" + end + local currentJobExist = doesJobAndGradesExist(name, grades) if currentJobExist then @@ -69,7 +74,7 @@ function ESX.CreateJob(name, label, grades) end local queries = { - { query = 'INSERT INTO jobs (name, label) VALUES (?, ?)', values = { name, label } } + { query = 'INSERT INTO `jobs` (`name`, `label`, `type`) VALUES (?, ?, ?)', values = { name, label, jobType } } } for _, grade in pairs(grades) do @@ -86,7 +91,7 @@ function ESX.CreateJob(name, label, grades) return success end - ESX.Jobs[name] = generateNewJobTable(name, label, grades) + ESX.Jobs[name] = generateNewJobTable(name, label, grades, jobType) notify("SUCCESS", currentResourceName, 'Job created successfully: `%s`', name) From 90298c35907871f8f08498ff1e216ea7869ddcf5 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Sun, 7 Sep 2025 23:47:32 +0200 Subject: [PATCH 2/3] feat: add auto migration --- .../server/migration/v1.13.5/jobType/main.lua | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 [core]/es_extended/server/migration/v1.13.5/jobType/main.lua diff --git a/[core]/es_extended/server/migration/v1.13.5/jobType/main.lua b/[core]/es_extended/server/migration/v1.13.5/jobType/main.lua new file mode 100644 index 00000000..d06f5257 --- /dev/null +++ b/[core]/es_extended/server/migration/v1.13.5/jobType/main.lua @@ -0,0 +1,35 @@ +local esxVersion = "v1.13.5" + +Core.Migrations = Core.Migrations or {} +Core.Migrations[esxVersion] = Core.Migrations[esxVersion] or {} + +if GetResourceKvpInt(("esx_migration:%s"):format(esxVersion)) == 1 then + return +end + +---@return boolean restartRequired +Core.Migrations[esxVersion].jobTypes = function() + print("^4[esx_migration:v1.13.5:jobTypes]^7 Adding job type column to jobs table.") + + local col = MySQL.scalar.await([[ + SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = DATABASE() + AND TABLE_NAME = 'jobs' + AND COLUMN_NAME = 'type' + ]]) + + if col == 0 then + print("^4[esx_migration:v1.13.5:jobTypes]^7 Column not found, altering jobs table.") + MySQL.update.await([[ + ALTER TABLE `jobs` + ADD COLUMN `type` VARCHAR(50) NOT NULL DEFAULT 'civ' AFTER `label` + ]]) + else + print("^4[esx_migration:v1.13.5:jobTypes]^7 Column already exists, migration not needed.") + return false + end + + print("^4[esx_migration:v1.13.5:jobTypes]^7 Migration complete.") + return true +end From 002cdcb6fa41728b65dc2e097d6b8f6a5a5ac346 Mon Sep 17 00:00:00 2001 From: Kenshin13 <63159154+Kenshiin13@users.noreply.github.com> Date: Mon, 8 Sep 2025 09:02:23 +0200 Subject: [PATCH 3/3] fix: fix typo --- [core]/es_extended/server/modules/createJob.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[core]/es_extended/server/modules/createJob.lua b/[core]/es_extended/server/modules/createJob.lua index 894c9204..a5712cf4 100644 --- a/[core]/es_extended/server/modules/createJob.lua +++ b/[core]/es_extended/server/modules/createJob.lua @@ -63,7 +63,7 @@ function ESX.CreateJob(name, label, grades, jobType) end if type(jobType) ~= "string" then - jobType "civ" + jobType = "civ" end local currentJobExist = doesJobAndGradesExist(name, grades)