From 48a5c41eb729d1fd658429fec132700b3b1a0d9f Mon Sep 17 00:00:00 2001 From: Csoki Date: Fri, 10 Feb 2023 21:59:43 +0100 Subject: [PATCH 1/4] feat(es_extended/modules): add client callbacks and move server callback to modules --- [core]/es_extended/client/functions.lua | 19 -------- .../es_extended/client/modules/callback.lua | 40 +++++++++++++++++ [core]/es_extended/server/common.lua | 12 ----- [core]/es_extended/server/functions.lua | 12 ----- .../es_extended/server/modules/callback.lua | 45 +++++++++++++++++++ 5 files changed, 85 insertions(+), 43 deletions(-) create mode 100644 [core]/es_extended/client/modules/callback.lua create mode 100644 [core]/es_extended/server/modules/callback.lua diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 73114156..2e3e1a93 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -2,8 +2,6 @@ ESX = {} Core = {} ESX.PlayerData = {} ESX.PlayerLoaded = false -Core.CurrentRequestId = 0 -Core.ServerCallbacks = {} Core.Input = {} ESX.UI = {} ESX.UI.Menu = {} @@ -187,14 +185,6 @@ ESX.RegisterInput = function(command_name, label, input_group, key, on_press, on RegisterKeyMapping(on_release ~= nil and "+" .. command_name or command_name, label, input_group, key) end -function ESX.TriggerServerCallback(name, cb, ...) - local Invoke = GetInvokingResource() or "unknown" - Core.ServerCallbacks[Core.CurrentRequestId] = cb - - TriggerServerEvent('esx:triggerServerCallback', name, Core.CurrentRequestId,Invoke, ...) - Core.CurrentRequestId = Core.CurrentRequestId < 65535 and Core.CurrentRequestId + 1 or 0 -end - function ESX.UI.Menu.RegisterType(type, open, close) ESX.UI.Menu.RegisteredTypes[type] = { open = open, @@ -1304,15 +1294,6 @@ function ESX.ShowInventory() end) end -RegisterNetEvent('esx:serverCallback', function(requestId,invoker, ...) - if Core.ServerCallbacks[requestId] then - Core.ServerCallbacks[requestId](...) - Core.ServerCallbacks[requestId] = nil - else - print('[^1ERROR^7] Server Callback with requestId ^5'.. requestId ..'^7 Was Called by ^5'.. invoker .. '^7 but does not exist.') - end -end) - RegisterNetEvent('esx:showNotification') AddEventHandler('esx:showNotification', function(msg, type, length) ESX.ShowNotification(msg, type, length) diff --git a/[core]/es_extended/client/modules/callback.lua b/[core]/es_extended/client/modules/callback.lua new file mode 100644 index 00000000..180c9216 --- /dev/null +++ b/[core]/es_extended/client/modules/callback.lua @@ -0,0 +1,40 @@ +local RequestId = 0 +local serverRequests = {} + +local clientCallbacks = {} + +---@param eventName string +---@param callback function +---@param ... any +ESX.TriggerServerCallback = function(eventName, callback, ...) + serverRequests[RequestId] = callback + + TriggerServerEvent('esx:triggerServerCallback', eventName, RequestId, GetInvokingResource() or "unknown", ...) + + RequestId = RequestId + 1 +end + +RegisterNetEvent('esx:serverCallback', function(requestId, invoker, ...) + if not serverRequests[requestId] then + return print(('[^1ERROR^7] Server Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker)) + end + + serverRequests[requestId](...) + serverRequests[requestId] = nil +end) + +---@param eventName string +---@param callback function +ESX.RegisterClientCallback = function(eventName, callback) + clientCallbacks[eventName] = callback +end + +RegisterNetEvent('esx:triggerClientCallback', function(eventName, requestId, invoker, ...) + if not clientCallbacks[eventName] then + return print(('[^1ERROR^7] Client Callback not registered, name: ^5%s^7, invoker resource: ^5%s^7'):format(eventName, invoker)) + end + + clientCallbacks[eventName](function(...) + TriggerServerEvent('esx:clientCallback', requestId, invoker, ...) + end, ...) +end) \ No newline at end of file diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 134ea49e..3fd6fa93 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -4,9 +4,6 @@ ESX.Jobs = {} ESX.Items = {} Core = {} Core.UsableItemsCallbacks = {} -Core.ServerCallbacks = {} -Core.ClientCallbacks = {} -Core.CurrentRequestId = 0 Core.RegisteredCommands = {} Core.Pickups = {} Core.PickupId = 0 @@ -76,15 +73,6 @@ AddEventHandler('esx:clientLog', function(msg) end end) -RegisterServerEvent('esx:triggerServerCallback') -AddEventHandler('esx:triggerServerCallback', function(name, requestId,Invoke, ...) - local source = source - - ESX.TriggerServerCallback(name, requestId, source,Invoke, function(...) - TriggerClientEvent('esx:serverCallback', source, requestId,Invoke, ...) - end, ...) -end) - RegisterNetEvent("esx:ReturnVehicleType", function(Type, Request) if Core.ClientCallbacks[Request] then Core.ClientCallbacks[Request](Type) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index 3e10f922..c5e249a6 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -143,18 +143,6 @@ function ESX.RegisterCommand(name, group, cb, allowConsole, suggestion) end end -function ESX.RegisterServerCallback(name, cb) - Core.ServerCallbacks[name] = cb -end - -function ESX.TriggerServerCallback(name, requestId, source,Invoke, cb, ...) - if Core.ServerCallbacks[name] then - Core.ServerCallbacks[name](source, cb, ...) - else - print(('[^1ERROR^7] Server callback ^5"%s"^0 does not exist. Please Check ^5%s^7 for Errors!'):format(name, Invoke)) - end -end - function Core.SavePlayer(xPlayer, cb) local parameters = { json.encode(xPlayer.getAccounts(true)), diff --git a/[core]/es_extended/server/modules/callback.lua b/[core]/es_extended/server/modules/callback.lua new file mode 100644 index 00000000..a758e6e8 --- /dev/null +++ b/[core]/es_extended/server/modules/callback.lua @@ -0,0 +1,45 @@ +local serverCallbacks = {} + +local clientRequests = {} +local RequestId = 0 + +---@param eventName string +---@param callback function +ESX.RegisterServerCallback = function(eventName, callback) + serverCallbacks[eventName] = callback + + print(("[^2DEBUG^0] Callback registered - ^5%s^0 - resource: ^5%s^0"):format(eventName, GetInvokingResource())) +end + +RegisterNetEvent('esx:triggerServerCallback', function(eventName, requestId, invoker, ...) + if not serverCallbacks[eventName] then + return print(('[^1ERROR^7] Server Callback not registered, name: ^5%s^7, invoker resource: ^5%s^7'):format(eventName, invoker)) + end + + local source = source + + serverCallbacks[eventName](source, function(...) + TriggerClientEvent('esx:serverCallback', source, requestId, invoker, ...) + end, ...) +end) + +---@param player number playerId +---@param eventName string +---@param callback function +---@param ... any +ESX.TriggerClientCallback = function(player, eventName, callback, ...) + clientRequests[RequestId] = callback + + TriggerClientEvent('esx:triggerClientCallback', player, eventName, RequestId, GetInvokingResource() or "unknown", ...) + + RequestId = RequestId + 1 +end + +RegisterNetEvent('esx:clientCallback', function(requestId, invoker, ...) + if not clientRequests[requestId] then + return print(('[^1ERROR^7] Client Callback with requestId ^5%s^7 Was Called by ^5%s^7 but does not exist.'):format(requestId, invoker)) + end + + clientRequests[requestId](...) + clientRequests[requestId] = nil +end) \ No newline at end of file From cd563a146851f1ad01b4c538a19452f21d44444c Mon Sep 17 00:00:00 2001 From: Csoki Date: Fri, 10 Feb 2023 22:14:24 +0100 Subject: [PATCH 2/4] feat(modules/callback.lua): remove debug print --- [core]/es_extended/server/modules/callback.lua | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/[core]/es_extended/server/modules/callback.lua b/[core]/es_extended/server/modules/callback.lua index a758e6e8..4c7e17fd 100644 --- a/[core]/es_extended/server/modules/callback.lua +++ b/[core]/es_extended/server/modules/callback.lua @@ -7,8 +7,6 @@ local RequestId = 0 ---@param callback function ESX.RegisterServerCallback = function(eventName, callback) serverCallbacks[eventName] = callback - - print(("[^2DEBUG^0] Callback registered - ^5%s^0 - resource: ^5%s^0"):format(eventName, GetInvokingResource())) end RegisterNetEvent('esx:triggerServerCallback', function(eventName, requestId, invoker, ...) @@ -29,7 +27,7 @@ end) ---@param ... any ESX.TriggerClientCallback = function(player, eventName, callback, ...) clientRequests[RequestId] = callback - + TriggerClientEvent('esx:triggerClientCallback', player, eventName, RequestId, GetInvokingResource() or "unknown", ...) RequestId = RequestId + 1 From 37597112ad534671bbbb6d34c10166e6e4e6f166 Mon Sep 17 00:00:00 2001 From: Csoki Date: Fri, 10 Feb 2023 22:33:16 +0100 Subject: [PATCH 3/4] refactor(es_extended): ESX.GetVehicleType and add client side --- [core]/es_extended/client/functions.lua | 25 ++++++++++++++++++++++++- [core]/es_extended/client/main.lua | 23 ++--------------------- [core]/es_extended/server/common.lua | 2 ++ [core]/es_extended/server/functions.lua | 19 +++++++++++++++---- 4 files changed, 43 insertions(+), 26 deletions(-) diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 2e3e1a93..cd610edc 100644 --- a/[core]/es_extended/client/functions.lua +++ b/[core]/es_extended/client/functions.lua @@ -1308,4 +1308,27 @@ AddEventHandler('esx:showAdvancedNotification', RegisterNetEvent('esx:showHelpNotification') AddEventHandler('esx:showHelpNotification', function(msg, thisFrame, beep, duration) ESX.ShowHelpNotification(msg, thisFrame, beep, duration) -end) \ No newline at end of file +end) + +---@param model number|string +---@return string +function ESX.GetVehicleType(model) + model = type(model) == 'string' and joaat(model) or model + + if model == `submersible` or model == `submersible2` then + return 'submarine' + end + + local vehicleType = GetVehicleClassFromName(model) + local types = { + [8] = "bike", + [11] = "trailer", + [13] = "bike", + [14] = "boat", + [15] = "heli", + [16] = "plane", + [21] = "train", + } + + return types[vehicleType] or "automobile" +end \ No newline at end of file diff --git a/[core]/es_extended/client/main.lua b/[core]/es_extended/client/main.lua index 0767cd40..f636d95c 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -615,27 +615,8 @@ AddEventHandler("esx:freezePlayer", function(input) end end) -RegisterNetEvent("esx:GetVehicleType", function(Model, Request) - if not IsModelInCdimage(Model) then - return TriggerServerEvent("esx:ReturnVehicleType", false, Request) - end - - if Model == `submersible` or Model == `submersible2` then - return TriggerServerEvent("esx:ReturnVehicleType", "submarine", Request) - end - - local VehicleType = GetVehicleClassFromName(Model) - local types = { - [8] = "bike", - [11] = "trailer", - [13] = "bike", - [14] = "boat", - [15] = "heli", - [16] = "plane", - [21] = "train", - } - - TriggerServerEvent("esx:ReturnVehicleType", types[VehicleType] or "automobile", Request) +ESX.RegisterClientCallback("esx:GetVehicleType", function(cb, model) + cb(ESX.GetVehicleType(model)) end) local DoNotUse = { diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index 3fd6fa93..81f856d3 100644 --- a/[core]/es_extended/server/common.lua +++ b/[core]/es_extended/server/common.lua @@ -11,6 +11,8 @@ Core.PlayerFunctionOverrides = {} Core.playersByIdentifier = {} +Core.vehicleTypesByModel = {} + AddEventHandler("esx:getSharedObject", function() local Invoke = GetInvokingResource() print(("[^1ERROR^7] Resource ^5%s^7 Used the ^5getSharedObject^7 Event, this event ^1no longer exists!^7 Visit https://documentation.esx-framework.org/tutorials/sharedevent for how to fix!"):format(Invoke)) diff --git a/[core]/es_extended/server/functions.lua b/[core]/es_extended/server/functions.lua index c5e249a6..c4a8d4f4 100644 --- a/[core]/es_extended/server/functions.lua +++ b/[core]/es_extended/server/functions.lua @@ -246,10 +246,21 @@ function ESX.GetIdentifier(playerId) end end -function ESX.GetVehicleType(Vehicle, Player, cb) - Core.CurrentRequestId = Core.CurrentRequestId < 65535 and Core.CurrentRequestId + 1 or 0 - Core.ClientCallbacks[Core.CurrentRequestId] = cb - TriggerClientEvent("esx:GetVehicleType", Player, Vehicle, Core.CurrentRequestId) +---@param model string|number +---@param player number playerId +---@param cb function + +function ESX.GetVehicleType(model, player, cb) + model = type(model) == 'string' and joaat(model) or model + + if Core.vehicleTypesByModel[model] then + return cb(Core.vehicleTypesByModel[model]) + end + + ESX.TriggerClientCallback(player, "esx:GetVehicleType", function(vehicleType) + Core.vehicleTypesByModel[model] = vehicleType + cb(vehicleType) + end) end function ESX.DiscordLog(name, title, color, message) From c7980cd253599f4dcc6220ec3fd295134941a3df Mon Sep 17 00:00:00 2001 From: Csoki Date: Fri, 10 Feb 2023 22:33:57 +0100 Subject: [PATCH 4/4] fix(es_extended/fxmanifest.lua): correct startup order --- [core]/es_extended/fxmanifest.lua | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/[core]/es_extended/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index b5230338..244b26db 100644 --- a/[core]/es_extended/fxmanifest.lua +++ b/[core]/es_extended/fxmanifest.lua @@ -19,30 +19,39 @@ server_scripts { '@oxmysql/lib/MySQL.lua', 'config.logs.lua', 'server/common.lua', + 'server/modules/callback.lua', 'server/classes/player.lua', 'server/classes/overrides/*.lua', 'server/functions.lua', 'server/onesync.lua', 'server/paycheck.lua', + 'server/main.lua', 'server/commands.lua', 'common/modules/*.lua', 'common/functions.lua', - 'server/modules/*.lua' + 'server/modules/actions.lua', + 'server/modules/npwd.lua' } client_scripts { 'client/common.lua', 'client/functions.lua', 'client/wrapper.lua', + 'client/modules/callback.lua', + 'client/main.lua', 'common/modules/*.lua', 'common/functions.lua', 'common/functions.lua', - 'client/modules/*.lua' + 'client/modules/actions.lua', + 'client/modules/death.lua', + 'client/modules/npwd.lua', + 'client/modules/scaleform.lua', + 'client/modules/streaming.lua', } ui_page {