diff --git a/README.md b/README.md index 014c21f..e14040b 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ shared_script '@ox_lib/init.lua' ``` +
+ + Once loaded, any resource can call exports or load modules with the `lib` keyword, i.e. ```lua lib.callbacks.Register(...) diff --git a/fxmanifest.lua b/fxmanifest.lua index 20901ff..75d2feb 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -23,11 +23,11 @@ game 'gta5' --[[ Resource Information ]]-- name 'ox_lib' author 'Linden' -version '1.5.0' +version '2.0.0' repository 'https://github.com/overextended/ox_lib' description 'A library of shared functions to utilise in other resources.' -[[ Manifest ]]-- +--[[ Manifest ]]-- dependencies { '/server:5104', '/onesync', diff --git a/imports/commands/server.lua b/imports/addCommand/server.lua similarity index 100% rename from imports/commands/server.lua rename to imports/addCommand/server.lua diff --git a/imports/callbacks/client.lua b/imports/callback/client.lua similarity index 50% rename from imports/callbacks/client.lua rename to imports/callback/client.lua index c624c57..827676a 100644 --- a/imports/callbacks/client.lua +++ b/imports/callback/client.lua @@ -1,54 +1,54 @@ -local ServerCallbacks = {} - ----@param event string ----@param delay number prevent the event from being called for the given time -local function callbackTimer(event, delay) - if type(delay) == 'number' then - local time = GetGameTimer() - if (ServerCallbacks[event] or 0) > time then - return false - end - ServerCallbacks[event] = time + delay - end - return true -end - -local function startCallback(resource, event, ...) - local id = math.random(0, 100000) - event = ('__cb_%s:%s'):format(resource, event) - TriggerServerEvent(event, id, ...) - return event..id -end - -local ServerCallback = table.create(0, 2) - ----@param resource string ----@param event string ----@param delay number prevent the event from being called for the given time ---- Sends an event to the server and halts the current thread until a response is returned. -ServerCallback.Await = function(resource, event, delay, ...) - if callbackTimer(event, delay) then - local promise = promise.new() - event = RegisterNetEvent(startCallback(resource, event, ...), function(response) - promise:resolve(response) - RemoveEventHandler(event) - end) - return table.unpack(Citizen.Await(promise)) - end -end - ----@param resource string ----@param event string ----@param delay number ----@param cb function ---- Sends an event to the server and triggers a callback function once the response is returned. -ServerCallback.Async = function(resource, event, delay, cb, ...) - if callbackTimer(event, delay) then - event = RegisterNetEvent(startCallback(resource, event, ...), function(response) - cb(table.unpack(response)) - RemoveEventHandler(event) - end) - end -end - -return ServerCallback +local ServerCallbacks = {} + +---@param event string +---@param delay number prevent the event from being called for the given time +local function callbackTimer(event, delay) + if type(delay) == 'number' then + local time = GetGameTimer() + if (ServerCallbacks[event] or 0) > time then + return false + end + ServerCallbacks[event] = time + delay + end + return true +end + +local function triggerCallback(event, ...) + local id = math.random(0, 100000) + event = ('__cb_%s'):format(event) + TriggerServerEvent(event, id, ...) + return event..id +end + +---Sends an event to the server and triggers a callback function once the response is returned. +---``` +---callback(event: string, delay: number, function(...) +--- print(...) +---end) +---``` +local callback = {} + +---@param event string +---@param delay number prevent the event from being called for the given time +--- Sends an event to the server and halts the current thread until a response is returned. +function callback.await(event, delay, ...) + if callbackTimer(event, delay) then + local promise = promise.new() + event = RegisterNetEvent(triggerCallback(event, ...), function(response) + promise:resolve(response) + RemoveEventHandler(event) + end) + return table.unpack(Citizen.Await(promise)) + end +end + +return setmetatable(callback, { + __call = function(event, delay, cb, ...) + if callbackTimer(event, delay) then + event = RegisterNetEvent(triggerCallback(event, ...), function(response) + cb(table.unpack(response)) + RemoveEventHandler(event) + end) + end + end +}) diff --git a/imports/callback/server.lua b/imports/callback/server.lua new file mode 100644 index 0000000..a7266fb --- /dev/null +++ b/imports/callback/server.lua @@ -0,0 +1,14 @@ +local callback = {} + +---@param name string +---@param callback function +--- Registers an event handler and callback function to respond to client requests. +function callback.register(name, cb) + name = ('__cb_%s'):format(name) + + RegisterServerEvent(name, function(id, ...) + TriggerClientEvent(name..id, source, {cb(source, ...)}) + end) +end + +return callback \ No newline at end of file diff --git a/imports/callbacks/server.lua b/imports/callbacks/server.lua deleted file mode 100644 index 53a93cd..0000000 --- a/imports/callbacks/server.lua +++ /dev/null @@ -1,14 +0,0 @@ -local ServerCallback = {} - ----@param name string ----@param callback function ---- Registers an event handler and callback function to respond to client requests. -ServerCallback.Register = function(name, callback) - name = ('__cb_%s:%s'):format(GetCurrentResourceName(), name) - - RegisterServerEvent(name, function(id, ...) - TriggerClientEvent(name..id, source, {callback(source, ...)}) - end) -end - -return ServerCallback \ No newline at end of file diff --git a/imports/controls/client.lua b/imports/disableControls/client.lua similarity index 70% rename from imports/controls/client.lua rename to imports/disableControls/client.lua index 6ba5fb6..dc391b0 100644 --- a/imports/controls/client.lua +++ b/imports/disableControls/client.lua @@ -1,11 +1,11 @@ --- Call on frame to disable all stored keys. --- ``` ---- DisableControlActions() +--- disableControls() --- ``` -local DisableControlActions = {} +local disableControls = {} ---@param ... number -function DisableControlActions:Add(...) +function disableControls:Add(...) local keys = type(...) == 'table' and ... or {...} for i=1, #keys do local key = keys[i] @@ -18,7 +18,7 @@ function DisableControlActions:Add(...) end ---@param ... number -function DisableControlActions:Remove(...) +function disableControls:Remove(...) local keys = type(...) == 'table' and ... or {...} for i=1, #keys do local key = keys[i] @@ -32,22 +32,22 @@ function DisableControlActions:Remove(...) end ---@param ... number -function DisableControlActions:Clear(...) +function disableControls:Clear(...) local keys = type(...) == 'table' and ... or {...} for i=1, #keys do self[keys[i]] = nil end end -local Keys = {} +local keys = {} local DisableControlAction = DisableControlAction local pairs = pairs -return setmetatable(DisableControlActions, { - __index = Keys, - __newindex = Keys, +return setmetatable(disableControls, { + __index = keys, + __newindex = keys, __call = function() - for k in pairs(Keys) do + for k in pairs(keys) do DisableControlAction(0, k, true) end end diff --git a/init.lua b/init.lua index 8118fee..a625e14 100644 --- a/init.lua +++ b/init.lua @@ -1,20 +1,36 @@ + +-- ox_lib +-- Copyright (C) 2021 Linden