From 5ab6123b442d2f999cccd578b4f6ecf4581c16da Mon Sep 17 00:00:00 2001 From: ElPumpo Date: Thu, 28 Feb 2019 12:57:09 +0100 Subject: [PATCH] Implemented ESX.DoesJobExist() --- server/classes/player.lua | 49 ++++++++++++++++++--------------------- server/commands.lua | 7 +++++- server/common.lua | 25 ++++++++++++++++++++ server/functions.lua | 10 ++++++++ 4 files changed, 64 insertions(+), 27 deletions(-) diff --git a/server/classes/player.lua b/server/classes/player.lua index e42267a8..3c949697 100644 --- a/server/classes/player.lua +++ b/server/classes/player.lua @@ -345,40 +345,37 @@ function CreateExtendedPlayer(player, accounts, inventory, job, loadout, name, l end self.setJob = function(name, grade) + self.setJob = function(job, grade) local lastJob = json.decode(json.encode(self.job)) - MySQL.Async.fetchAll('SELECT * FROM `jobs` WHERE `name` = @name', { - ['@name'] = name - }, function(result) + if ESX.DoesJobExist(job, grade) then + local jobObject, gradeObject = ESX.Jobs[job], ESX.Jobs[job].grades[grade] - self.job['id'] = result[1].id - self.job['name'] = result[1].name - self.job['label'] = result[1].label + self.job['id'] = jobObject.id + self.job['name'] = jobObject.name + self.job['label'] = jobObject.label - MySQL.Async.fetchAll('SELECT * FROM `job_grades` WHERE `job_name` = @job_name AND `grade` = @grade', { - ['@job_name'] = name, - ['@grade'] = grade - }, function(result) - self.job['grade'] = grade - self.job['grade_name'] = result[1].name - self.job['grade_label'] = result[1].label - self.job['grade_salary'] = result[1].salary + self.job['grade'] = grade + self.job['grade_name'] = gradeObject.name + self.job['grade_label'] = gradeObject.label + self.job['grade_salary'] = gradeObject.salary - self.job['skin_male'] = nil - self.job['skin_female'] = nil + self.job['skin_male'] = nil + self.job['skin_female'] = nil - if result[1].skin_male ~= nil then - self.job['skin_male'] = json.decode(result[1].skin_male) - end + if gradeObject.skin_male ~= nil then + self.job['skin_male'] = json.decode(gradeObject.skin_male) + end - if result[1].skin_female ~= nil then - self.job['skin_female'] = json.decode(result[1].skin_female) - end + if gradeObject.skin_female ~= nil then + self.job['skin_female'] = json.decode(gradeObject.skin_female) + end - TriggerEvent("esx:setJob", self.source, self.job, lastJob) - TriggerClientEvent("esx:setJob", self.source, self.job) - end) - end) + TriggerEvent('esx:setJob', self.source, self.job, lastJob) + TriggerClientEvent('esx:setJob', self.source, self.job) + else + print(('es_extended: ignoring setJob for %s due to job not found!'):format(self.source)) + end end self.addWeapon = function(weaponName, ammo) diff --git a/server/commands.lua b/server/commands.lua index 6d0a7d78..36617956 100644 --- a/server/commands.lua +++ b/server/commands.lua @@ -21,7 +21,12 @@ TriggerEvent('es:addGroupCommand', 'setjob', 'jobmaster', function(source, args, local xPlayer = ESX.GetPlayerFromId(args[1]) if xPlayer then - xPlayer.setJob(args[2], tonumber(args[3])) + if ESX.DoesJobExist(args[2], args[3]) then + xPlayer.setJob(args[2], args[3]) + else + TriggerClientEvent('chat:addMessage', source, { args = { '^1SYSTEM', 'That job does not exist.' } }) + end + else TriggerClientEvent('chat:addMessage', source, { args = { '^1SYSTEM', 'Player not online.' } }) end diff --git a/server/common.lua b/server/common.lua index 82b8496f..9009735f 100644 --- a/server/common.lua +++ b/server/common.lua @@ -8,6 +8,7 @@ ESX.CancelledTimeouts = {} ESX.LastPlayerData = {} ESX.Pickups = {} ESX.PickupId = 0 +ESX.Jobs = {} AddEventHandler('esx:getSharedObject', function(cb) cb(ESX) @@ -28,6 +29,30 @@ MySQL.ready(function() } end end) + + local result = MySQL.Sync.fetchAll('SELECT * FROM jobs', {}) + + for i=1, #result do + ESX.Jobs[result[i].name] = result[i] + ESX.Jobs[result[i].name].grades = {} + end + + local result2 = MySQL.Sync.fetchAll('SELECT * FROM job_grades', {}) + + for i=1, #result2 do + if ESX.Jobs[result2[i].job_name] then + ESX.Jobs[result2[i].job_name].grades[tostring(result2[i].grade)] = result2[i] + else + print(('es_extended: invalid job "%s" from table job_grades ignored!'):format(result2[i].job_name)) + end + end + + for k,v in pairs(ESX.Jobs) do + if next(v.grades) == nil then + ESX.Jobs[v.name] = nil + print(('es_extended: ignoring job "%s" due to missing job grades!'):format(v.name)) + end + end end) AddEventHandler('esx:playerLoaded', function(source) diff --git a/server/functions.lua b/server/functions.lua index 36da07c0..a722f533 100644 --- a/server/functions.lua +++ b/server/functions.lua @@ -186,3 +186,13 @@ ESX.CreatePickup = function(type, name, count, label, player) TriggerClientEvent('esx:pickup', -1, pickupId, label, player) ESX.PickupId = pickupId end + +ESX.DoesJobExist = function(job, grade) + if job and grade then + if ESX.Jobs[job] and ESX.Jobs[job].grades[grade] then + return true + end + end + + return false +end \ No newline at end of file