diff --git a/[core]/es_extended/client/functions.lua b/[core]/es_extended/client/functions.lua index 73114156..cd610edc 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) @@ -1327,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 78034770..85543737 100644 --- a/[core]/es_extended/client/main.lua +++ b/[core]/es_extended/client/main.lua @@ -607,27 +607,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/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/fxmanifest.lua b/[core]/es_extended/fxmanifest.lua index 78fd08c6..3312541c 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 { diff --git a/[core]/es_extended/server/common.lua b/[core]/es_extended/server/common.lua index fcadcc06..0867042b 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 @@ -14,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/tutorials-esx/sharedevent for how to fix!"):format(Invoke)) @@ -78,15 +77,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 b580ff1a..1b48771a 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)), @@ -260,10 +248,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) diff --git a/[core]/es_extended/server/modules/callback.lua b/[core]/es_extended/server/modules/callback.lua new file mode 100644 index 00000000..4c7e17fd --- /dev/null +++ b/[core]/es_extended/server/modules/callback.lua @@ -0,0 +1,43 @@ +local serverCallbacks = {} + +local clientRequests = {} +local RequestId = 0 + +---@param eventName string +---@param callback function +ESX.RegisterServerCallback = function(eventName, callback) + serverCallbacks[eventName] = callback +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