Merge pull request #886 from esx-framework/fix-csoki

feat(es_extended): callback functions, vehicle type
This commit is contained in:
P Gergő
2023-02-26 23:12:32 +01:00
committed by GitHub
7 changed files with 137 additions and 71 deletions
+24 -20
View File
@@ -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)
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
+2 -21
View File
@@ -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 = {
@@ -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)
+11 -2
View File
@@ -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 {
+2 -12
View File
@@ -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)
+15 -16
View File
@@ -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 <const> = {
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)
@@ -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)