minor tweeks for qol and some bug fixes Registering menus caused data to not be updated when retrieving new info/variables func check was redundent removed some prints added scaleform run loop for qol
150 lines
4.6 KiB
Lua
150 lines
4.6 KiB
Lua
Callbacks = {}
|
|
cbData = {}
|
|
Callback = Callback or {}
|
|
|
|
--=======================================
|
|
-- ▀█▀ █▄█ █ █▄ █ █▄▀ ▄▀▄ ██▄ ▄▀▄ █ █ ▀█▀ ▄▀▄ █▀▄ █▀▄ █ █▄ █ ▄▀ █▀▄ █▀▄ ▄▀▄ █▄ ▄█ █ ▄▀▀ ██▀ ▄▀▀ ▀█▀ ▄▀▄ ▄▀▀ ▄▀▄ █ █ ██▄ ▄▀▄ ▄▀▀ █▄▀ ▄▀▀
|
|
-- █ █ █ █ █ ▀█ █ █ █▀█ █▄█ ▀▄▀ ▀▄█ █ █▀█ █▄▀ █▄▀ █ █ ▀█ ▀▄█ █▀ █▀▄ ▀▄▀ █ ▀ █ █ ▄█▀ █▄▄ ▄█▀ █ ▀▄▀ ▀▄▄ █▀█ █▄▄ █▄▄ █▄█ █▀█ ▀▄▄ █ █ ▄█▀
|
|
--=======================================
|
|
|
|
local resource = GetCurrentResourceName() or 'unknown'
|
|
|
|
local clientToServerName = resource .. ':server:CS:TriggerCallback'
|
|
local clientToServerBackToClientName = resource .. ':client:CSC:TriggerCallback'
|
|
|
|
|
|
local serverToClientName = resource .. ':client:SC:TriggerCallback'
|
|
local serverToClientBackToServerName = resource .. ':server:SCS:TriggerCallback'
|
|
|
|
|
|
exports('Callback', Callback)
|
|
|
|
if not IsDuplicityVersion() then goto client end
|
|
|
|
-- -- -- -- -- -- -- -- -- --
|
|
-- ▄▀▀ ██▀ █▀▄ █ █ ██▀ █▀▄
|
|
-- ▄█▀ █▄▄ █▀▄ ▀▄▀ █▄▄ █▀▄
|
|
-- -- -- -- -- -- -- -- -- --
|
|
|
|
|
|
|
|
-- client to server rebound
|
|
function Callback.Register(name, callback, all)
|
|
Callback[name] = {
|
|
callback = callback,
|
|
toAll = all
|
|
}
|
|
end
|
|
|
|
RegisterNetEvent(clientToServerName, function(name, ...)
|
|
local src = source
|
|
local data = Callback[name]
|
|
if not data then return end
|
|
local func = data.callback
|
|
if not func then return end
|
|
local toAll = data.toAll and -1 or src
|
|
local cb = function(...)
|
|
TriggerClientEvent(clientToServerBackToClientName, toAll, name, ...)
|
|
end
|
|
func(src, cb, ...)
|
|
end)
|
|
-----------------------------
|
|
|
|
-- server to client rebound
|
|
|
|
function Callback.Trigger(name, src, func, ...)
|
|
if src == nil then src = -1 end
|
|
local p = promise.new()
|
|
cbData[name] = {cb = func, p = p}
|
|
if type(src) == 'table' then
|
|
for i, d in pairs(src) do
|
|
TriggerClientEvent(serverToClientName, tonumber(d), name, ...)
|
|
end
|
|
return Citizen.Await(p)
|
|
end
|
|
TriggerClientEvent(serverToClientName, tonumber(src), name, ...)
|
|
return Citizen.Await(p)
|
|
end
|
|
|
|
RegisterNetEvent(serverToClientBackToServerName, function(name, ...)
|
|
print('Rebound')
|
|
local data = cbData[name]
|
|
if not data then return end
|
|
local func = data.cb
|
|
if not func then return end
|
|
data.p:resolve(func(...) or true)
|
|
cbData[name] = nil
|
|
end)
|
|
-----------------------------
|
|
exports('RegisterCallback', Callback.Register)
|
|
exports('TriggerCallback', Callback.Trigger)
|
|
|
|
|
|
-- -- -- -- -- -- -- -- -- --
|
|
-- ▄▀▀ █ █ ██▀ █▄ █ ▀█▀
|
|
-- ▀▄▄ █▄▄ █ █▄▄ █ ▀█ █
|
|
-- -- -- -- -- -- -- -- -- --
|
|
if IsDuplicityVersion() then return Callback end
|
|
::client::
|
|
|
|
|
|
cbRebounds = {}
|
|
function Callback.Register(name, callback, all)
|
|
Callback[name] = {
|
|
callback = callback,
|
|
}
|
|
end
|
|
|
|
|
|
function Callback.RegisterRebound(name, callback)
|
|
cbRebounds[name] = callback
|
|
end
|
|
|
|
|
|
-- client to server rebound
|
|
function Callback.Trigger(name, func, ...)
|
|
local p = promise.new()
|
|
TriggerServerEvent(clientToServerName, name, ...)
|
|
cbData[name] = {cb = func, p = p}
|
|
CreateThread(function()
|
|
Wait(5000)
|
|
if cbData[name] then
|
|
cbData[name].p:resolve()
|
|
cbData[name] = nil
|
|
end
|
|
end)
|
|
return Citizen.Await(p)
|
|
end
|
|
|
|
RegisterNetEvent(clientToServerBackToClientName, function(name, ...)
|
|
local clientRebound = cbRebounds[name]
|
|
if clientRebound then
|
|
clientRebound(...)
|
|
end
|
|
local data = cbData[name]
|
|
if not data then return end
|
|
local func = data.cb
|
|
if not func then return end
|
|
data.p:resolve(func(...) or true)
|
|
cbData[name] = nil
|
|
end)
|
|
-----------------------------
|
|
|
|
-- server to client rebound
|
|
RegisterNetEvent(serverToClientName, function(name, ...)
|
|
local data = Callback[name]
|
|
if not data then return end
|
|
local func = data.callback
|
|
if not func then return end
|
|
local cb = function(...)
|
|
TriggerServerEvent(serverToClientBackToServerName, name, ...)
|
|
end
|
|
func(cb, ...)
|
|
end)
|
|
-----------------------------
|
|
|
|
exports('RegisterCallback', Callback.Register)
|
|
exports('RegisterRebound', Callback.RegisterRebound)
|
|
exports('TriggerCallback', Callback.Trigger)
|
|
|
|
return Callback |