Files
qb-core-qbcore-fivem/server/commands.lua
T
2021-11-01 00:44:38 -06:00

230 lines
9.3 KiB
Lua

QBCore.Commands = {}
QBCore.Commands.List = {}
-- Register & Refresh Commands
function QBCore.Commands.Add(name, help, arguments, argsrequired, callback, permission)
if type(permission) == 'string' then
permission = permission:lower()
else
permission = 'user'
end
QBCore.Commands.List[name:lower()] = {
name = name:lower(),
permission = permission,
help = help,
arguments = arguments,
argsrequired = argsrequired,
callback = callback
}
end
function QBCore.Commands.Refresh(source)
local src = source
local Player = QBCore.Functions.GetPlayer(src)
local suggestions = {}
if Player then
for command, info in pairs(QBCore.Commands.List) do
local isGod = QBCore.Functions.HasPermission(src, 'god')
local hasPerm = QBCore.Functions.HasPermission(src, QBCore.Commands.List[command].permission)
local isPrincipal = IsPlayerAceAllowed(src, 'command')
if isGod or hasPerm or isPrincipal then
suggestions[#suggestions + 1] = {
name = '/' .. command,
help = info.help,
params = info.arguments
}
end
end
TriggerClientEvent('chat:addSuggestions', tonumber(source), suggestions)
end
end
-- Teleport
QBCore.Commands.Add('tp', 'TP To Player or Coords (Admin Only)', { { name = 'id/x', help = 'ID of player or X position' }, { name = 'y', help = 'Y position' }, { name = 'z', help = 'Z position' } }, false, function(source, args)
local src = source
if args[1] and not args[2] and not args[3] then
local target = GetPlayerPed(tonumber(args[1]))
if target ~= 0 then
local coords = GetEntityCoords(target)
TriggerClientEvent('QBCore:Command:TeleportToPlayer', src, coords)
else
TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error')
end
else
if args[1] and args[2] and args[3] then
local x = tonumber(args[1])
local y = tonumber(args[2])
local z = tonumber(args[3])
if (x ~= 0) and (y ~= 0) and (z ~= 0) then
TriggerClientEvent('QBCore:Command:TeleportToCoords', src, x, y, z)
else
TriggerClientEvent('QBCore:Notify', src, 'Incorrect Format', 'error')
end
else
TriggerClientEvent('QBCore:Notify', src, 'Not every argument has been entered (x, y, z)', 'error')
end
end
end, 'admin')
QBCore.Commands.Add('tpm', 'TP To Marker (Admin Only)', {}, false, function(source)
local src = source
TriggerClientEvent('QBCore:Command:GoToMarker', src)
end, 'admin')
-- Permissions
QBCore.Commands.Add('addpermission', 'Give Player Permissions (God Only)', { { name = 'id', help = 'ID of player' }, { name = 'permission', help = 'Permission level' } }, true, function(source, args)
local src = source
local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
local permission = tostring(args[2]):lower()
if Player then
QBCore.Functions.AddPermission(Player.PlayerData.source, permission)
else
TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error')
end
end, 'god')
QBCore.Commands.Add('removepermission', 'Remove Players Permissions (God Only)', { { name = 'id', help = 'ID of player' } }, true, function(source, args)
local src = source
local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
if Player then
QBCore.Functions.RemovePermission(Player.PlayerData.source)
else
TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error')
end
end, 'god')
-- Vehicle
QBCore.Commands.Add('car', 'Spawn Vehicle (Admin Only)', { { name = 'model', help = 'Model name of the vehicle' } }, true, function(source, args)
local src = source
TriggerClientEvent('QBCore:Command:SpawnVehicle', src, args[1])
end, 'admin')
QBCore.Commands.Add('dv', 'Delete Vehicle (Admin Only)', {}, false, function(source)
local src = source
TriggerClientEvent('QBCore:Command:DeleteVehicle', src)
end, 'admin')
-- Money
QBCore.Commands.Add('givemoney', 'Give A Player Money (Admin Only)', { { name = 'id', help = 'Player ID' }, { name = 'moneytype', help = 'Type of money (cash, bank, crypto)' }, { name = 'amount', help = 'Amount of money' } }, true, function(source, args)
local src = source
local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
if Player then
Player.Functions.AddMoney(tostring(args[2]), tonumber(args[3]))
else
TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error')
end
end, 'admin')
QBCore.Commands.Add('setmoney', 'Set Players Money Amount (Admin Only)', { { name = 'id', help = 'Player ID' }, { name = 'moneytype', help = 'Type of money (cash, bank, crypto)' }, { name = 'amount', help = 'Amount of money' } }, true, function(source, args)
local src = source
local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
if Player then
Player.Functions.SetMoney(tostring(args[2]), tonumber(args[3]))
else
TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error')
end
end, 'admin')
-- Job
QBCore.Commands.Add('job', 'Check Your Job', {}, false, function(source)
local src = source
local PlayerJob = QBCore.Functions.GetPlayer(src).PlayerData.job
TriggerClientEvent('QBCore:Notify', src, string.format('[Job]: %s [Grade]: %s [On Duty]: %s', PlayerJob.label, PlayerJob.grade.name, PlayerJob.onduty))
end, 'user')
QBCore.Commands.Add('setjob', 'Set A Players Job (Admin Only)', { { name = 'id', help = 'Player ID' }, { name = 'job', help = 'Job name' }, { name = 'grade', help = 'Grade' } }, true, function(source, args)
local src = source
local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
if Player then
Player.Functions.SetJob(tostring(args[2]), tonumber(args[3]))
else
TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error')
end
end, 'admin')
-- Gang
QBCore.Commands.Add('gang', 'Check Your Gang', {}, false, function(source)
local src = source
local PlayerGang = QBCore.Functions.GetPlayer(source).PlayerData.gang
TriggerClientEvent('QBCore:Notify', src, string.format('[Gang]: %s [Grade]: %s', PlayerGang.label, PlayerGang.grade.name))
end, 'user')
QBCore.Commands.Add('setgang', 'Set A Players Gang (Admin Only)', { { name = 'id', help = 'Player ID' }, { name = 'gang', help = 'Name of a gang' }, { name = 'grade', help = 'Grade' } }, true, function(source, args)
local src = source
local Player = QBCore.Functions.GetPlayer(tonumber(args[1]))
if Player then
Player.Functions.SetGang(tostring(args[2]), tonumber(args[3]))
else
TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error')
end
end, 'admin')
-- Inventory (should be in qb-inventory?)
QBCore.Commands.Add('clearinv', 'Clear Players Inventory (Admin Only)', { { name = 'id', help = 'Player ID' } }, false, function(source, args)
local src = source
local playerId = args[1] or src
local Player = QBCore.Functions.GetPlayer(tonumber(playerId))
if Player then
Player.Functions.ClearInventory()
else
TriggerClientEvent('QBCore:Notify', src, 'Player Not Online', 'error')
end
end, 'admin')
-- Out of Character Chat
QBCore.Commands.Add('ooc', 'OOC Chat Message', {}, false, function(source, args)
local src = source
local message = table.concat(args, ' ')
local Players = QBCore.Functions.GetPlayers()
local Player = QBCore.Functions.GetPlayer(src)
for k, v in pairs(Players) do
if v == src then
TriggerClientEvent('chat:addMessage', v, {
color = { 0, 0, 255},
multiline = true,
args = {'OOC | '.. GetPlayerName(src), message}
})
elseif #(GetEntityCoords(GetPlayerPed(src)) - GetEntityCoords(GetPlayerPed(v))) < 20.0 then
TriggerClientEvent('chat:addMessage', v, {
color = { 0, 0, 255},
multiline = true,
args = {'OOC | '.. GetPlayerName(src), message}
})
elseif QBCore.Functions.HasPermission(v, 'admin') then
if QBCore.Functions.IsOptin(v) then
TriggerClientEvent('chat:addMessage', v, {
color = { 0, 0, 255},
multiline = true,
args = {'OOC | '.. GetPlayerName(src), message}
})
TriggerEvent('qb-log:server:CreateLog', 'ooc', 'OOC', 'white', '**' .. GetPlayerName(src) .. '** (CitizenID: ' .. Player.PlayerData.citizenid .. ' | ID: ' .. src .. ') **Message:** ' .. message, false)
end
end
end
end, 'user')
-- Me command
QBCore.Commands.Add('me', 'Show local message', {name = 'message', help = 'Message to respond with'}, false, function(source, args)
local src = source
local ped = GetPlayerPed(src)
local pCoords = GetEntityCoords(ped)
local msg = table.concat(args, ' ')
if msg == '' then return end
for k,v in pairs(QBCore.Functions.GetPlayers()) do
local target = GetPlayerPed(v)
local tCoords = GetEntityCoords(target)
if #(pCoords - tCoords) < 20 then
TriggerClientEvent('QBCore:Command:ShowMe3D', v, src, msg)
end
end
end, 'user')