diff --git a/[core]/es_extended/server/modules/createJob.lua b/[core]/es_extended/server/modules/createJob.lua index a5712cf4..b16ade82 100644 --- a/[core]/es_extended/server/modules/createJob.lua +++ b/[core]/es_extended/server/modules/createJob.lua @@ -5,24 +5,10 @@ local NOTIFY_TYPES = { ERROR = "^5[%s]^7-^1[ERROR]^7 %s" } -local function doesJobAndGradesExist(name, grades) - if not ESX.Jobs[name] then - return false - end - - for _, grade in ipairs(grades) do - if not ESX.DoesJobExist(name, grade.grade) then - return false - end - end - - return true -end - local function generateNewJobTable(name, label, grades, jobType) - local job = { name = name, label = label, type = jobType, grades = {} } + local job = ESX.Jobs[name] or { 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 '{}' } + 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, skin_female = v.skin_female } end return job @@ -66,22 +52,47 @@ function ESX.CreateJob(name, label, grades, jobType) jobType = "civ" end - local currentJobExist = doesJobAndGradesExist(name, grades) + local existingJob = MySQL.single.await('SELECT `label`, `type` FROM `jobs` WHERE `name` = ?', { name }) + local jobExists = existingJob ~= nil + local existingGrades = {} - if currentJobExist then - notify("ERROR",currentResourceName, 'Job or grades already exists: `%s`', name) - return success + if jobExists then + label, jobType = existingJob.label, existingJob.type + + local rows = MySQL.query.await('SELECT `grade` FROM `job_grades` WHERE `job_name` = ?', { name }) + + for i = 1, #(rows or {}) do + existingGrades[tostring(rows[i].grade)] = true + end end - local queries = { - { query = 'INSERT INTO `jobs` (`name`, `label`, `type`) VALUES (?, ?, ?)', values = { name, label, jobType } } - } + local queries = {} + + if not jobExists then + queries[#queries + 1] = { + query = 'INSERT INTO `jobs` (`name`, `label`, `type`) VALUES (?, ?, ?)', + values = { name, label, jobType } + } + end + + local newGrades = {} for _, grade in pairs(grades) do - queries[#queries + 1] = { - query = 'INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)', - values = { name, grade.grade, grade.name, grade.label, grade.salary, grade.skin_male and json.encode(grade.skin_male) or '{}', grade.skin_female and json.encode(grade.skin_female) or '{}' } - } + if not existingGrades[tostring(grade.grade)] then + local skinMale = grade.skin_male and json.encode(grade.skin_male) or '{}' + local skinFemale = grade.skin_female and json.encode(grade.skin_female) or '{}' + + newGrades[#newGrades + 1] = { grade = grade.grade, name = grade.name, label = grade.label, salary = grade.salary, skin_male = skinMale, skin_female = skinFemale } + queries[#queries + 1] = { + query = 'INSERT INTO job_grades (job_name, grade, name, label, salary, skin_male, skin_female) VALUES (?, ?, ?, ?, ?, ?, ?)', + values = { name, grade.grade, grade.name, grade.label, grade.salary, skinMale, skinFemale } + } + end + end + + if not queries[1] then + notify("ERROR",currentResourceName, 'Job or grades already exists: `%s`', name) + return success end success = exports.oxmysql:transaction_async(queries) @@ -91,7 +102,7 @@ function ESX.CreateJob(name, label, grades, jobType) return success end - ESX.Jobs[name] = generateNewJobTable(name, label, grades, jobType) + ESX.Jobs[name] = generateNewJobTable(name, label, newGrades, jobType) notify("SUCCESS", currentResourceName, 'Job created successfully: `%s`', name)