From ef741696207cdc0c99691c94c316755d49d9f07b Mon Sep 17 00:00:00 2001 From: Kr3mu Date: Mon, 28 Jul 2025 16:42:15 +0200 Subject: [PATCH 1/5] Added ESX.JobsLoaded and esx:jobsLoaded --- [core]/es_extended/imports.lua | 15 ++++++++++----- [core]/es_extended/server/common.lua | 1 + [core]/es_extended/server/functions.lua | 8 +++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index 18465fd7..e6dc9f38 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -1,9 +1,9 @@ ESX = exports["es_extended"]:getSharedObject() ESX.currentResourceName = GetCurrentResourceName() -OnPlayerData = function (key, val, last) end +OnPlayerData = function(key, val, last) end -local function TrackPedCoordsOnce() +local function TrackPedCoordsOnce() if not ESX or not ESX.PlayerData then return end @@ -48,8 +48,8 @@ if not IsDuplicityVersion() then -- Only register this event for the client ESX.PlayerData = {} end) - local external = {{"Class", "class.lua"}, {"Point", "point.lua"}} - for i=1, #external do + local external = { { "Class", "class.lua" }, { "Point", "point.lua" } } + for i = 1, #external do local module = external[i] local path = string.format("client/imports/%s", module[2]) @@ -78,7 +78,7 @@ else return end - return setmetatable({src = src}, { + return setmetatable({ src = src }, { __index = function(self, method) return function(...) return exports.es_extended:RunStaticPlayerMethod(self.src, method, ...) @@ -87,6 +87,11 @@ else }) end }) + + + AddEventHandler("esx:jobsLoaded", function() + ESX.JobsLoaded = true + end) end if GetResourceState("ox_lib") == "missing" then diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index a0f571df..1200275f 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -1,6 +1,7 @@ ESX.Players = {} ESX.Jobs = {} ESX.Items = {} +ESX.JobsLoaded = false Core = {} Core.JobsPlayerCount = {} Core.UsableItemsCallbacks = {} diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index fa23d378..c9e999a3 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -445,7 +445,7 @@ function ESX.DiscordLog(name, title, color, message) } PerformHttpRequest( webHook, - function () + function() return end, "POST", @@ -489,7 +489,7 @@ function ESX.DiscordLogFields(name, title, color, fields) } PerformHttpRequest( webHook, - function () + function() return end, "POST", @@ -536,6 +536,8 @@ function ESX.RefreshJobs() else ESX.Jobs = Jobs end + + TriggerEvent("esx:jobsLoaded") end ---@param item string @@ -790,5 +792,5 @@ end ---@param plate string ---@return CExtendedVehicle? function ESX.GetExtendedVehicleFromPlate(plate) - return Core.vehicleClass.getFromPlate(plate) + return Core.vehicleClass.getFromPlate(plate) end From 19e697b2119516928b1524b1053e8a5e4787bcf9 Mon Sep 17 00:00:00 2001 From: Kr3mu Date: Tue, 29 Jul 2025 15:34:09 +0200 Subject: [PATCH 2/5] Changed to promise and deleted ESX.JobsLoaded --- [core]/es_extended/imports.lua | 5 ----- [core]/es_extended/server/common.lua | 2 +- [core]/es_extended/server/functions.lua | 15 +++++++++++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/[core]/es_extended/imports.lua b/[core]/es_extended/imports.lua index e6dc9f38..3ea31a3b 100644 --- a/[core]/es_extended/imports.lua +++ b/[core]/es_extended/imports.lua @@ -87,11 +87,6 @@ else }) end }) - - - AddEventHandler("esx:jobsLoaded", function() - ESX.JobsLoaded = true - end) end if GetResourceState("ox_lib") == "missing" then diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 1200275f..13be1a13 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -1,7 +1,6 @@ ESX.Players = {} ESX.Jobs = {} ESX.Items = {} -ESX.JobsLoaded = false Core = {} Core.JobsPlayerCount = {} Core.UsableItemsCallbacks = {} @@ -11,6 +10,7 @@ Core.PickupId = 0 Core.PlayerFunctionOverrides = {} Core.DatabaseConnected = false Core.playersByIdentifier = {} +Core.JobsLoaded = promise:new() ---@type table Core.vehicles = {} diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index c9e999a3..f95a1950 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -505,6 +505,10 @@ end ---@return nil function ESX.RefreshJobs() + if Core.JobsLoaded.value then + Core.JobsLoaded = promise:new() + end + local Jobs = {} local jobs = MySQL.query.await("SELECT * FROM jobs") @@ -538,6 +542,7 @@ function ESX.RefreshJobs() end TriggerEvent("esx:jobsLoaded") + Core.JobsLoaded:resolve(true) end ---@param item string @@ -597,6 +602,11 @@ end ---@return table function ESX.GetJobs() + while not Core.JobsLoaded.value do + print("Waiting for ESX Jobs to Load") + Citizen.Wait(200) + end + return ESX.Jobs end @@ -763,6 +773,11 @@ end ---@param grade string ---@return boolean function ESX.DoesJobExist(job, grade) + while not Core.JobsLoaded.value do + print("Waiting for ESX Jobs to Load") + Citizen.Wait(200) + end + return (ESX.Jobs[job] and ESX.Jobs[job].grades[tostring(grade)] ~= nil) or false end From 01a5703c5034b0f6ab5869114e7ea7d19167e651 Mon Sep 17 00:00:00 2001 From: Kr3mu Date: Tue, 29 Jul 2025 15:46:59 +0200 Subject: [PATCH 3/5] Used booleans instead of promise --- [core]/es_extended/server/common.lua | 2 +- [core]/es_extended/server/functions.lua | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 13be1a13..70e68db1 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -10,7 +10,7 @@ Core.PickupId = 0 Core.PlayerFunctionOverrides = {} Core.DatabaseConnected = false Core.playersByIdentifier = {} -Core.JobsLoaded = promise:new() +Core.JobsLoaded = false ---@type table Core.vehicles = {} diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index f95a1950..9926269b 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -505,9 +505,7 @@ end ---@return nil function ESX.RefreshJobs() - if Core.JobsLoaded.value then - Core.JobsLoaded = promise:new() - end + Core.JobsLoaded = false local Jobs = {} local jobs = MySQL.query.await("SELECT * FROM jobs") @@ -542,7 +540,7 @@ function ESX.RefreshJobs() end TriggerEvent("esx:jobsLoaded") - Core.JobsLoaded:resolve(true) + Core.JobsLoaded = true end ---@param item string @@ -602,7 +600,7 @@ end ---@return table function ESX.GetJobs() - while not Core.JobsLoaded.value do + while not Core.JobsLoaded do print("Waiting for ESX Jobs to Load") Citizen.Wait(200) end @@ -773,7 +771,7 @@ end ---@param grade string ---@return boolean function ESX.DoesJobExist(job, grade) - while not Core.JobsLoaded.value do + while not Core.JobsLoaded do print("Waiting for ESX Jobs to Load") Citizen.Wait(200) end From f01025d50630d18d9d01b805432b6528aa4ae966 Mon Sep 17 00:00:00 2001 From: Kr3mu Date: Wed, 30 Jul 2025 10:44:24 +0200 Subject: [PATCH 4/5] New event name: esx:jobsRefreshed, Removed prints --- [core]/es_extended/server/functions.lua | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 9926269b..3788517a 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -269,7 +269,8 @@ function Core.SavePlayers(cb) return cb() end - print(("[^2INFO^7] Saved ^5%s^7 %s over ^5%s^7 ms"):format(#parameters, #parameters > 1 and "players" or "player", ESX.Math.Round((os.time() - startTime) / 1000000, 2))) + print(("[^2INFO^7] Saved ^5%s^7 %s over ^5%s^7 ms"):format(#parameters, + #parameters > 1 and "players" or "player", ESX.Math.Round((os.time() - startTime) / 1000000, 2))) end ) end @@ -434,7 +435,8 @@ function ESX.DiscordLog(name, title, color, message) ["color"] = Config.DiscordLogs.Colors[color] or Config.DiscordLogs.Colors.default, ["footer"] = { ["text"] = "| ESX Logs | " .. os.date(), - ["icon_url"] = "https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png", + ["icon_url"] = + "https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png", }, ["description"] = message, ["author"] = { @@ -477,7 +479,8 @@ function ESX.DiscordLogFields(name, title, color, fields) ["color"] = Config.DiscordLogs.Colors[color] or Config.DiscordLogs.Colors.default, ["footer"] = { ["text"] = "| ESX Logs | " .. os.date(), - ["icon_url"] = "https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png", + ["icon_url"] = + "https://cdn.discordapp.com/attachments/944789399852417096/1020099828266586193/blanc-800x800.png", }, ["fields"] = fields, ["description"] = "", @@ -539,7 +542,7 @@ function ESX.RefreshJobs() ESX.Jobs = Jobs end - TriggerEvent("esx:jobsLoaded") + TriggerEvent("esx:jobsRefreshed") Core.JobsLoaded = true end @@ -562,7 +565,9 @@ function ESX.UseItem(source, item, ...) local success, result = pcall(itemCallback, source, item, ...) if not success then - return result and print(result) or print(('[^3WARNING^7] An error occured when using item ^5"%s"^7! This was not caused by ESX.'):format(item)) + return result and print(result) or + print(('[^3WARNING^7] An error occured when using item ^5"%s"^7! This was not caused by ESX.'):format( + item)) end end else @@ -601,7 +606,6 @@ end ---@return table function ESX.GetJobs() while not Core.JobsLoaded do - print("Waiting for ESX Jobs to Load") Citizen.Wait(200) end @@ -688,7 +692,8 @@ if not Config.CustomInventory then local itemCount = #items for i = 1, itemCount do local item = items[i] - ESX.Items[item.name] = { label = item.label, weight = item.weight, rare = item.rare, canRemove = item.can_remove } + ESX.Items[item.name] = { label = item.label, weight = item.weight, rare = item.rare, canRemove = item + .can_remove } end refreshPlayerInventories() @@ -750,7 +755,9 @@ if not Config.CustomInventory then end if #toInsert > 0 then - MySQL.prepare.await("INSERT IGNORE INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES (?, ?, ?, ?, ?)", toInsert) + MySQL.prepare.await( + "INSERT IGNORE INTO `items` (`name`, `label`, `weight`, `rare`, `can_remove`) VALUES (?, ?, ?, ?, ?)", + toInsert) for i = 1, #toInsert do local row = toInsert[i] @@ -772,7 +779,6 @@ end ---@return boolean function ESX.DoesJobExist(job, grade) while not Core.JobsLoaded do - print("Waiting for ESX Jobs to Load") Citizen.Wait(200) end From 8e869ee3ce44cb67a6da1d9d1562cbe2b0ef960b Mon Sep 17 00:00:00 2001 From: Kr3mu Date: Thu, 31 Jul 2025 14:11:03 +0200 Subject: [PATCH 5/5] Fixes link to documentation in ReadMe --- readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 3537e430..408e6a13 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,5 @@

ESX Legacy

-

Discord - Website - Documentation +

Discord - Website - Documentation

Want more resources? You can browse the Cfx.re Releases board for more!

ESX is the leading framework, trusted by over 12,000 communities to provide the highest quality roleplay servers on FiveM

@@ -16,4 +16,5 @@ Interested in helping us? [Take a look at our patreon](https://www.patreon.com/e | Saydoon - Muhannad alyamani - iSentrie - Wecity - Samuel Nicol | | Kyle McShea - Artin - Mathias Christoffersen - Jaylan Yilmaz - Callum | | CONGRESS KW - Michael Hein - Smery sitbon - daZepelin - CMF Community | + ------