Scripts/resources/[standalone]/ox_lib/imports/__addCommand/server.lua

111 lines
3.4 KiB
Lua
Raw Normal View History

2024-12-29 20:02:43 +00:00
-- DO NOT USE! Old syntax for addCommand (prior to v3.0)
---@todo convert input and call standard function?
local commands = {}
SetTimeout(1000, function()
TriggerClientEvent('chat:addSuggestions', -1, commands)
end)
AddEventHandler('playerJoining', function(source)
TriggerClientEvent('chat:addSuggestions', source, commands)
end)
local function chatSuggestion(name, parameters, help)
local params = {}
if parameters then
for i = 1, #parameters do
local arg, argType = string.strsplit(':', parameters[i])
if argType and argType:sub(0, 1) == '?' then
argType = argType:sub(2, #argType)
end
params[i] = {
name = arg,
help = argType
}
end
end
commands[#commands + 1] = {
name = '/' .. name,
help = help,
params = params
}
end
---@deprecated
---@param group string | string[] | false
---@param name string | string[]
---@param callback function
---@param parameters table
function lib.__addCommand(group, name, callback, parameters, help)
if not group then group = 'builtin.everyone' end
if type(name) == 'table' then
for i = 1, #name do
---@diagnostic disable-next-line: deprecated
lib.__addCommand(group, name[i], callback, parameters, help)
end
else
chatSuggestion(name, parameters, help)
RegisterCommand(name, function(source, args, raw)
source = tonumber(source) --[[@as number]]
if parameters then
for i = 1, #parameters do
local arg, argType = string.strsplit(':', parameters[i])
local value = args[i]
if arg == 'target' and value == 'me' then value = source end
if argType then
local optional
if argType:sub(0, 1) == '?' then
argType = argType:sub(2, #argType)
optional = true
end
if argType == 'number' then
value = tonumber(value) or value
end
local type = type(value)
if type ~= argType and (not optional or type ~= 'nil') then
local invalid = ('^1%s expected <%s> for argument %s (%s), received %s^0'):format(name,
argType, i, arg, type)
if source < 1 then
return print(invalid)
else
return TriggerClientEvent('chat:addMessage', source, invalid)
end
end
end
args[arg] = value
args[i] = nil
end
end
callback(source, args, raw)
end, group and true)
name = ('command.%s'):format(name)
if type(group) == 'table' then
for _, v in ipairs(group) do
if not IsPrincipalAceAllowed(v, name) then lib.addAce(v, name) end
end
else
if not IsPrincipalAceAllowed(group, name) then lib.addAce(group, name) end
end
end
end
---@diagnostic disable-next-line: deprecated
return lib.__addCommand