544 lines
		
	
	
	
		
			23 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			544 lines
		
	
	
	
		
			23 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- Variables
 | |
| local QBCore = exports['qb-core']:GetCoreObject()
 | |
| local frozen = false
 | |
| local permissions = {
 | |
|     ['kill'] = 'admin',
 | |
|     ['ban'] = 'admin',
 | |
|     ['noclip'] = 'admin',
 | |
|     ['kickall'] = 'admin',
 | |
|     ['kick'] = 'admin',
 | |
|     ['revive'] = 'admin',
 | |
|     ['freeze'] = 'admin',
 | |
|     ['goto'] = 'admin',
 | |
|     ['spectate'] = 'admin',
 | |
|     ['intovehicle'] = 'admin',
 | |
|     ['bring'] = 'admin',
 | |
|     ['inventory'] = 'admin',
 | |
|     ['clothing'] = 'admin'
 | |
| }
 | |
| 
 | |
| function GetQBPlayers()
 | |
|     local playerReturn = {}
 | |
|     local players = QBCore.Functions.GetQBPlayers()
 | |
|     
 | |
|     for id, player in pairs(players) do
 | |
|         local playerPed = GetPlayerPed(id)
 | |
|         local name = (player.PlayerData.charinfo.firstname or '') .. ' ' .. (player.PlayerData.charinfo.lastname or '')
 | |
|         playerReturn[#playerReturn + 1] = {
 | |
|             name = name .. ' | (' .. (player.PlayerData.name or '') .. ')',
 | |
|             id = id,
 | |
|             coords = GetEntityCoords(playerPed),
 | |
|             cid = name,
 | |
|             citizenid = player.PlayerData.citizenid,
 | |
|             sources = playerPed,
 | |
|             sourceplayer = id
 | |
|         }
 | |
|     end
 | |
|     return playerReturn
 | |
| end
 | |
| 
 | |
| -- Get Dealers
 | |
| QBCore.Functions.CreateCallback('test:getdealers', function(_, cb)
 | |
|     cb(exports['qb-drugs']:GetDealers())
 | |
| end)
 | |
| 
 | |
| -- Get Players
 | |
| QBCore.Functions.CreateCallback('test:getplayers', function(_, cb) -- WORKS
 | |
|     local players =  GetQBPlayers()
 | |
|     cb(players)
 | |
| end)
 | |
| 
 | |
| QBCore.Functions.CreateCallback('qb-admin:isAdmin', function(src, cb) -- WORKS
 | |
|     cb(QBCore.Functions.HasPermission(src, 'admin') or IsPlayerAceAllowed(src, 'command'))
 | |
| end)
 | |
| 
 | |
| QBCore.Functions.CreateCallback('qb-admin:server:getrank', function(source, cb)
 | |
|     if QBCore.Functions.HasPermission(source, 'god') or IsPlayerAceAllowed(source, 'command') then
 | |
|         cb(true)
 | |
|     else
 | |
|         cb(false)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| -- Functions
 | |
| local function tablelength(table)
 | |
|     local count = 0
 | |
|     for _ in pairs(table) do
 | |
|         count = count + 1
 | |
|     end
 | |
|     return count
 | |
| end
 | |
| 
 | |
| local function BanPlayer(src)
 | |
|     MySQL.insert('INSERT INTO bans (name, license, discord, ip, reason, expire, bannedby) VALUES (?, ?, ?, ?, ?, ?, ?)', {
 | |
|         GetPlayerName(src),
 | |
|         QBCore.Functions.GetIdentifier(src, 'license'),
 | |
|         QBCore.Functions.GetIdentifier(src, 'discord'),
 | |
|         QBCore.Functions.GetIdentifier(src, 'ip'),
 | |
|         'Trying to revive theirselves or other players',
 | |
|         2147483647,
 | |
|         'qb-adminmenu'
 | |
|     })
 | |
|     TriggerEvent('qb-log:server:CreateLog', 'adminmenu', 'Player Banned', 'red', string.format('%s was banned by %s for %s', GetPlayerName(src), 'qb-adminmenu', 'Trying to trigger admin options which they dont have permission for'), true)
 | |
|     DropPlayer(src, 'You were permanently banned by the server for: Exploiting')
 | |
| end
 | |
| 
 | |
| -- Events
 | |
| RegisterNetEvent('qb-admin:server:GetPlayersForBlips', function()
 | |
|     local src = source
 | |
|     local players = GetQBPlayers()
 | |
|     TriggerClientEvent('qb-admin:client:Show', src, players)
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:kill', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['kill']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         TriggerClientEvent('hospital:client:KillPlayer', player.id)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:revive', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['revive']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         TriggerClientEvent('hospital:client:Revive', player.id)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:kick', function(player, reason)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['kick']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         TriggerEvent('qb-log:server:CreateLog', 'bans', 'Player Kicked', 'red', string.format('%s was kicked by %s for %s', GetPlayerName(player.id), GetPlayerName(src), reason), true)
 | |
|         DropPlayer(player.id, Lang:t('info.kicked_server') .. ':\n' .. reason .. '\n\n' .. Lang:t('info.check_discord') .. QBCore.Config.Server.Discord)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:ban', function(player, time, reason)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['ban']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         time = tonumber(time)
 | |
|         local banTime = tonumber(os.time() + time)
 | |
|         if banTime > 2147483647 then
 | |
|             banTime = 2147483647
 | |
|         end
 | |
|         local timeTable = os.date('*t', banTime)
 | |
|         MySQL.insert('INSERT INTO bans (name, license, discord, ip, reason, expire, bannedby) VALUES (?, ?, ?, ?, ?, ?, ?)', {
 | |
|             GetPlayerName(player.id),
 | |
|             QBCore.Functions.GetIdentifier(player.id, 'license'),
 | |
|             QBCore.Functions.GetIdentifier(player.id, 'discord'),
 | |
|             QBCore.Functions.GetIdentifier(player.id, 'ip'),
 | |
|             reason,
 | |
|             banTime,
 | |
|             GetPlayerName(src)
 | |
|         })
 | |
|         TriggerClientEvent('chat:addMessage', -1, {
 | |
|             template = "<div class=chat-message server'><strong>ANNOUNCEMENT | {0} has been banned:</strong> {1}</div>",
 | |
|             args = { GetPlayerName(player.id), reason }
 | |
|         })
 | |
|         TriggerEvent('qb-log:server:CreateLog', 'bans', 'Player Banned', 'red', string.format('%s was banned by %s for %s', GetPlayerName(player.id), GetPlayerName(src), reason), true)
 | |
|         if banTime >= 2147483647 then
 | |
|             DropPlayer(player.id, Lang:t('info.banned') .. '\n' .. reason .. Lang:t('info.ban_perm') .. QBCore.Config.Server.Discord)
 | |
|         else
 | |
|             DropPlayer(player.id, Lang:t('info.banned') .. '\n' .. reason .. Lang:t('info.ban_expires') .. timeTable['day'] .. '/' .. timeTable['month'] .. '/' .. timeTable['year'] .. ' ' .. timeTable['hour'] .. ':' .. timeTable['min'] .. '\n🔸 Check our Discord for more information: ' .. QBCore.Config.Server.Discord)
 | |
|         end
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:spectate', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['spectate']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         local targetped = GetPlayerPed(player.id)
 | |
|         local coords = GetEntityCoords(targetped)
 | |
|         TriggerClientEvent('qb-admin:client:spectate', src, player.id, coords)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:freeze', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['freeze']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         local target = GetPlayerPed(player.id)
 | |
|         if not frozen then
 | |
|             frozen = true
 | |
|             FreezeEntityPosition(target, true)
 | |
|         else
 | |
|             frozen = false
 | |
|             FreezeEntityPosition(target, false)
 | |
|         end
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:goto', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['goto']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         local admin = GetPlayerPed(src)
 | |
|         local coords = GetEntityCoords(GetPlayerPed(player.id))
 | |
|         SetEntityCoords(admin, coords)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:intovehicle', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['intovehicle']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         local admin = GetPlayerPed(src)
 | |
|         local targetPed = GetPlayerPed(player.id)
 | |
|         local vehicle = GetVehiclePedIsIn(targetPed, false)
 | |
|         local seat = -1
 | |
|         if vehicle ~= 0 then
 | |
|             for i = 0, 8, 1 do
 | |
|                 if GetPedInVehicleSeat(vehicle, i) == 0 then
 | |
|                     seat = i
 | |
|                     break
 | |
|                 end
 | |
|             end
 | |
|             if seat ~= -1 then
 | |
|                 SetPedIntoVehicle(admin, vehicle, seat)
 | |
|                 TriggerClientEvent('QBCore:Notify', src, Lang:t('sucess.entered_vehicle'), 'success', 5000)
 | |
|             else
 | |
|                 TriggerClientEvent('QBCore:Notify', src, Lang:t('error.no_free_seats'), 'danger', 5000)
 | |
|             end
 | |
|         end
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:bring', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['bring']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         local admin = GetPlayerPed(src)
 | |
|         local coords = GetEntityCoords(admin)
 | |
|         local target = GetPlayerPed(player.id)
 | |
|         SetEntityCoords(target, coords)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:inventory', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['inventory']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         exports['qb-inventory']:OpenInventoryById(src, player.id)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:cloth', function(player)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, permissions['clothing']) or IsPlayerAceAllowed(src, 'command') then
 | |
|         TriggerClientEvent('qb-clothing:client:openMenu', player.id)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:setPermissions', function(targetId, group)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, 'god') or IsPlayerAceAllowed(src, 'command') then
 | |
|         QBCore.Functions.AddPermission(targetId, group[1].rank)
 | |
|         TriggerClientEvent('QBCore:Notify', targetId, Lang:t('info.rank_level') .. group[1].label)
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:SendReport', function(name, targetSrc, msg)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, 'admin') or IsPlayerAceAllowed(src, 'command') then
 | |
|         if QBCore.Functions.IsOptin(src) then
 | |
|             TriggerClientEvent('chat:addMessage', src, {
 | |
|                 color = { 255, 0, 0 },
 | |
|                 multiline = true,
 | |
|                 args = { Lang:t('info.admin_report') .. name .. ' (' .. targetSrc .. ')', msg }
 | |
|             })
 | |
|         end
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterServerEvent('qb-admin:giveWeapon', function(weapon)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, 'admin') or IsPlayerAceAllowed(src, 'command') then
 | |
|         exports['qb-inventory']:AddItem(src, weapon, 1, false, false, 'qb-admin:giveWeapon')
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| RegisterNetEvent('qb-admin:server:SaveCar', function(mods, vehicle, _, plate)
 | |
|     local src = source
 | |
|     if QBCore.Functions.HasPermission(src, 'admin') or IsPlayerAceAllowed(src, 'command') then
 | |
|         local Player = QBCore.Functions.GetPlayer(src)
 | |
|         local result = MySQL.query.await('SELECT plate FROM player_vehicles WHERE plate = ?', { plate })
 | |
|         if result[1] == nil then
 | |
|             MySQL.insert('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, state) VALUES (?, ?, ?, ?, ?, ?, ?)', {
 | |
|                 Player.PlayerData.license,
 | |
|                 Player.PlayerData.citizenid,
 | |
|                 vehicle.model,
 | |
|                 vehicle.hash,
 | |
|                 json.encode(mods),
 | |
|                 plate,
 | |
|                 0
 | |
|             })
 | |
|             TriggerClientEvent('QBCore:Notify', src, Lang:t('success.success_vehicle_owner'), 'success', 5000)
 | |
|         else
 | |
|             TriggerClientEvent('QBCore:Notify', src, Lang:t('error.failed_vehicle_owner'), 'error', 3000)
 | |
|         end
 | |
|     else
 | |
|         BanPlayer(src)
 | |
|     end
 | |
| end)
 | |
| 
 | |
| -- Commands
 | |
| 
 | |
| QBCore.Commands.Add('maxmods', Lang:t('desc.max_mod_desc'), {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:maxmodVehicle', src)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('blips', Lang:t('commands.blips_for_player'), {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:toggleBlips', src)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('names', Lang:t('commands.player_name_overhead'), {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:toggleNames', src)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('coords', Lang:t('commands.coords_dev_command'), {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:ToggleCoords', src)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('noclip', Lang:t('commands.toogle_noclip'), {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:ToggleNoClip', src)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('admincar', Lang:t('commands.save_vehicle_garage'), {}, false, function(source, _)
 | |
|     TriggerClientEvent('qb-admin:client:SaveCar', source)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('announce', Lang:t('commands.make_announcement'), {}, false, function(_, args)
 | |
|     local msg = table.concat(args, ' ')
 | |
|     if msg == '' then return end
 | |
|     TriggerClientEvent('chat:addMessage', -1, {
 | |
|         color = { 255, 0, 0 },
 | |
|         multiline = true,
 | |
|         args = { 'Announcement', msg }
 | |
|     })
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('admin', Lang:t('commands.open_admin'), {}, false, function(source, _)
 | |
|     TriggerClientEvent('qb-admin:client:openMenu', source)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('report', Lang:t('info.admin_report'), { { name = 'message', help = 'Message' } }, true, function(source, args)
 | |
|     local src = source
 | |
|     local msg = table.concat(args, ' ')
 | |
|     local Player = QBCore.Functions.GetPlayer(source)
 | |
|     TriggerClientEvent('qb-admin:client:SendReport', -1, GetPlayerName(src), src, msg)
 | |
|     TriggerEvent('qb-log:server:CreateLog', 'report', 'Report', 'green', '**' .. GetPlayerName(source) .. '** (CitizenID: ' .. Player.PlayerData.citizenid .. ' | ID: ' .. source .. ') **Report:** ' .. msg, false)
 | |
| end)
 | |
| 
 | |
| QBCore.Commands.Add('staffchat', Lang:t('commands.staffchat_message'), { { name = 'message', help = 'Message' } }, true, function(source, args)
 | |
|     local msg = table.concat(args, ' ')
 | |
|     local name = GetPlayerName(source)
 | |
| 
 | |
|     local plrs = GetPlayers()
 | |
| 
 | |
|     for _, plr in ipairs(plrs) do
 | |
|         plr = tonumber(plr)
 | |
|         if plr then
 | |
|             if QBCore.Functions.HasPermission(plr, 'admin') or IsPlayerAceAllowed(plr, 'command') then
 | |
|                 if QBCore.Functions.IsOptin(plr) then
 | |
|                     TriggerClientEvent('chat:addMessage', plr, {
 | |
|                         color = { 255, 0, 0 },
 | |
|                         multiline = true,
 | |
|                         args = { Lang:t('info.staffchat') .. name, msg }
 | |
|                     })
 | |
|                 end
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('givenuifocus', Lang:t('commands.nui_focus'), { { name = 'id', help = 'Player id' }, { name = 'focus', help = 'Set focus on/off' }, { name = 'mouse', help = 'Set mouse on/off' } }, true, function(_, args)
 | |
|     local playerid = tonumber(args[1])
 | |
|     local focus = args[2]
 | |
|     local mouse = args[3]
 | |
|     TriggerClientEvent('qb-admin:client:GiveNuiFocus', playerid, focus, mouse)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('warn', Lang:t('commands.warn_a_player'), { { name = 'ID', help = 'Player' }, { name = 'Reason', help = 'Mention a reason' } }, true, function(source, args)
 | |
|     local targetPlayer = QBCore.Functions.GetPlayer(tonumber(args[1]))
 | |
|     local senderPlayer = QBCore.Functions.GetPlayer(source)
 | |
|     table.remove(args, 1)
 | |
|     local msg = table.concat(args, ' ')
 | |
|     local warnId = 'WARN-' .. math.random(1111, 9999)
 | |
|     if targetPlayer ~= nil then
 | |
|         TriggerClientEvent('chat:addMessage', targetPlayer.PlayerData.source, { args = { 'SYSTEM', Lang:t('info.warning_chat_message') .. GetPlayerName(source) .. ',' .. Lang:t('info.reason') .. ': ' .. msg }, color = 255, 0, 0 })
 | |
|         TriggerClientEvent('chat:addMessage', source, { args = { 'SYSTEM', Lang:t('info.warning_staff_message') .. GetPlayerName(targetPlayer.PlayerData.source) .. ', for: ' .. msg }, color = 255, 0, 0 })
 | |
|         MySQL.insert('INSERT INTO player_warns (senderIdentifier, targetIdentifier, reason, warnId) VALUES (?, ?, ?, ?)', {
 | |
|             senderPlayer.PlayerData.license,
 | |
|             targetPlayer.PlayerData.license,
 | |
|             msg,
 | |
|             warnId
 | |
|         })
 | |
|     else
 | |
|         TriggerClientEvent('QBCore:Notify', source, Lang:t('error.not_online'), 'error')
 | |
|     end
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('checkwarns', Lang:t('commands.check_player_warning'), { { name = 'id', help = 'Player' }, { name = 'Warning', help = 'Number of warning, (1, 2 or 3 etc..)' } }, false, function(source, args)
 | |
|     if args[2] == nil then
 | |
|         local targetPlayer = QBCore.Functions.GetPlayer(tonumber(args[1]))
 | |
|         local result = MySQL.query.await('SELECT * FROM player_warns WHERE targetIdentifier = ?', { targetPlayer.PlayerData.license })
 | |
|         TriggerClientEvent('chat:addMessage', source, 'SYSTEM', 'warning', targetPlayer.PlayerData.name .. ' has ' .. tablelength(result) .. ' warnings!')
 | |
|     else
 | |
|         local targetPlayer = QBCore.Functions.GetPlayer(tonumber(args[1]))
 | |
|         local warnings = MySQL.query.await('SELECT * FROM player_warns WHERE targetIdentifier = ?', { targetPlayer.PlayerData.license })
 | |
|         local selectedWarning = tonumber(args[2])
 | |
|         if warnings[selectedWarning] ~= nil then
 | |
|             local sender = QBCore.Functions.GetPlayer(warnings[selectedWarning].senderIdentifier)
 | |
|             TriggerClientEvent('chat:addMessage', source, 'SYSTEM', 'warning', targetPlayer.PlayerData.name .. ' has been warned by ' .. sender.PlayerData.name .. ', Reason: ' .. warnings[selectedWarning].reason)
 | |
|         end
 | |
|     end
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('delwarn', Lang:t('commands.delete_player_warning'), { { name = 'id', help = 'Player' }, { name = 'Warning', help = 'Number of warning, (1, 2 or 3 etc..)' } }, true, function(source, args)
 | |
|     local targetPlayer = QBCore.Functions.GetPlayer(tonumber(args[1]))
 | |
|     local warnings = MySQL.query.await('SELECT * FROM player_warns WHERE targetIdentifier = ?', { targetPlayer.PlayerData.license })
 | |
|     local selectedWarning = tonumber(args[2])
 | |
|     if warnings[selectedWarning] ~= nil then
 | |
|         TriggerClientEvent('chat:addMessage', source, 'SYSTEM', 'warning', 'You have deleted warning (' .. selectedWarning .. ') , Reason: ' .. warnings[selectedWarning].reason)
 | |
|         MySQL.query('DELETE FROM player_warns WHERE warnId = ?', { warnings[selectedWarning].warnId })
 | |
|     end
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('reportr', Lang:t('commands.reply_to_report'), { { name = 'id', help = 'Player' }, { name = 'message', help = 'Message to respond with' } }, false, function(source, args)
 | |
|     local src = source
 | |
|     local playerId = tonumber(args[1])
 | |
|     table.remove(args, 1)
 | |
|     local msg = table.concat(args, ' ')
 | |
|     local OtherPlayer = QBCore.Functions.GetPlayer(playerId)
 | |
|     if msg == '' then return end
 | |
|     if not OtherPlayer then return TriggerClientEvent('QBCore:Notify', src, 'Player is not online', 'error') end
 | |
|     if not QBCore.Functions.HasPermission(src, 'admin') or IsPlayerAceAllowed(src, 'command') ~= 1 then return end
 | |
|     TriggerClientEvent('chat:addMessage', playerId, {
 | |
|         color = { 255, 0, 0 },
 | |
|         multiline = true,
 | |
|         args = { 'Admin Response', msg }
 | |
|     })
 | |
|     TriggerClientEvent('chat:addMessage', src, {
 | |
|         color = { 255, 0, 0 },
 | |
|         multiline = true,
 | |
|         args = { 'Report Response (' .. playerId .. ')', msg }
 | |
|     })
 | |
|     TriggerClientEvent('QBCore:Notify', src, 'Reply Sent')
 | |
|     TriggerEvent('qb-log:server:CreateLog', 'report', 'Report Reply', 'red', '**' .. GetPlayerName(src) .. '** replied on: **' .. OtherPlayer.PlayerData.name .. ' **(ID: ' .. OtherPlayer.PlayerData.source .. ') **Message:** ' .. msg, false)
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('setmodel', Lang:t('commands.change_ped_model'), { { name = 'model', help = 'Name of the model' }, { name = 'id', help = 'Id of the Player (empty for yourself)' } }, false, function(source, args)
 | |
|     local model = args[1]
 | |
|     local target = tonumber(args[2])
 | |
|     if model ~= nil or model ~= '' then
 | |
|         if target == nil then
 | |
|             TriggerClientEvent('qb-admin:client:SetModel', source, tostring(model))
 | |
|         else
 | |
|             local Trgt = QBCore.Functions.GetPlayer(target)
 | |
|             if Trgt ~= nil then
 | |
|                 TriggerClientEvent('qb-admin:client:SetModel', target, tostring(model))
 | |
|             else
 | |
|                 TriggerClientEvent('QBCore:Notify', source, Lang:t('error.not_online'), 'error')
 | |
|             end
 | |
|         end
 | |
|     else
 | |
|         TriggerClientEvent('QBCore:Notify', source, Lang:t('error.failed_set_model'), 'error')
 | |
|     end
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('setspeed', Lang:t('commands.set_player_foot_speed'), {}, false, function(source, args)
 | |
|     local speed = args[1]
 | |
|     if speed ~= nil then
 | |
|         TriggerClientEvent('qb-admin:client:SetSpeed', source, tostring(speed))
 | |
|     else
 | |
|         TriggerClientEvent('QBCore:Notify', source, Lang:t('error.failed_set_speed'), 'error')
 | |
|     end
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('reporttoggle', Lang:t('commands.report_toggle'), {}, false, function(source, _)
 | |
|     local src = source
 | |
|     QBCore.Functions.ToggleOptin(src)
 | |
|     if QBCore.Functions.IsOptin(src) then
 | |
|         TriggerClientEvent('QBCore:Notify', src, Lang:t('success.receive_reports'), 'success')
 | |
|     else
 | |
|         TriggerClientEvent('QBCore:Notify', src, Lang:t('error.no_receive_report'), 'error')
 | |
|     end
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('kickall', Lang:t('commands.kick_all'), {}, false, function(source, args)
 | |
|     local src = source
 | |
|     if src > 0 then
 | |
|         local reason = table.concat(args, ' ')
 | |
|         if QBCore.Functions.HasPermission(src, 'god') or IsPlayerAceAllowed(src, 'command') then
 | |
|             if reason and reason ~= '' then
 | |
|                 local players = GetPlayers()
 | |
|                 for _, playerId in ipairs(players) do
 | |
|                     DropPlayer(playerId, reason)
 | |
|                 end
 | |
|             else
 | |
|                 TriggerClientEvent('QBCore:Notify', src, Lang:t('info.no_reason_specified'), 'error')
 | |
|             end
 | |
|         end
 | |
|     else
 | |
|         local players = GetPlayers()
 | |
|         for _, playerId in ipairs(players) do
 | |
|             DropPlayer(playerId, Lang:t('info.server_restart') .. QBCore.Config.Server.Discord)
 | |
|         end
 | |
|     end
 | |
| end, 'god')
 | |
| 
 | |
| QBCore.Commands.Add('setammo', Lang:t('commands.ammo_amount_set'), { { name = 'amount', help = 'Amount of bullets, for example: 20' } }, false, function(source, args)
 | |
|     local src = source
 | |
|     local ped = GetPlayerPed(src)
 | |
|     local amount = tonumber(args[1])
 | |
|     local weapon = GetSelectedPedWeapon(ped)
 | |
|     if weapon and amount then
 | |
|         SetPedAmmo(ped, weapon, amount)
 | |
|         TriggerClientEvent('QBCore:Notify', src, Lang:t('info.ammoforthe', { value = amount, weapon = QBCore.Shared.Weapons[weapon]['label'] }), 'success')
 | |
|     end
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('vector2', 'Copy vector2 to clipboard (Admin only)', {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:copyToClipboard', src, 'coords2')
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('vector3', 'Copy vector3 to clipboard (Admin only)', {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:copyToClipboard', src, 'coords3')
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('vector4', 'Copy vector4 to clipboard (Admin only)', {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:copyToClipboard', src, 'coords4')
 | |
| end, 'admin')
 | |
| 
 | |
| QBCore.Commands.Add('heading', 'Copy heading to clipboard (Admin only)', {}, false, function(source)
 | |
|     local src = source
 | |
|     TriggerClientEvent('qb-admin:client:copyToClipboard', src, 'heading')
 | |
| end, 'admin')
 | 
