forked from Simnation/Main
146 lines
4.2 KiB
Lua
146 lines
4.2 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
local scoreboardOpen = false
|
|
local playerOptin = {}
|
|
|
|
-- Functions
|
|
|
|
local function DrawText3D(x, y, z, text)
|
|
SetTextScale(0.35, 0.35)
|
|
SetTextFont(4)
|
|
SetTextProportional(1)
|
|
SetTextColour(255, 255, 255, 215)
|
|
BeginTextCommandDisplayText('STRING')
|
|
SetTextCentre(true)
|
|
AddTextComponentSubstringPlayerName(text)
|
|
SetDrawOrigin(x, y, z, 0)
|
|
EndTextCommandDisplayText(0.0, 0.0)
|
|
local factor = (string.len(text)) / 370
|
|
DrawRect(0.0, 0.0 + 0.0125, 0.017 + factor, 0.03, 0, 0, 0, 75)
|
|
ClearDrawOrigin()
|
|
end
|
|
|
|
local function GetPlayers()
|
|
local players = {}
|
|
local activePlayers = GetActivePlayers()
|
|
for i = 1, #activePlayers do
|
|
local player = activePlayers[i]
|
|
local ped = GetPlayerPed(player)
|
|
if DoesEntityExist(ped) then
|
|
players[#players + 1] = player
|
|
end
|
|
end
|
|
return players
|
|
end
|
|
|
|
local function GetPlayersFromCoords(coords, distance)
|
|
local players = GetPlayers()
|
|
local closePlayers = {}
|
|
coords = coords or GetEntityCoords(PlayerPedId())
|
|
distance = distance or 5.0
|
|
for i = 1, #players do
|
|
local player = players[i]
|
|
local target = GetPlayerPed(player)
|
|
local targetCoords = GetEntityCoords(target)
|
|
local targetdistance = #(targetCoords - vector3(coords.x, coords.y, coords.z))
|
|
if targetdistance <= distance then
|
|
closePlayers[#closePlayers + 1] = player
|
|
end
|
|
end
|
|
return closePlayers
|
|
end
|
|
|
|
-- Events
|
|
|
|
RegisterNetEvent('qb-scoreboard:client:SetActivityBusy', function(activity, busy)
|
|
Config.IllegalActions[activity].busy = busy
|
|
end)
|
|
|
|
-- Command
|
|
|
|
if Config.Toggle then
|
|
RegisterCommand('scoreboard', function()
|
|
if not scoreboardOpen then
|
|
QBCore.Functions.TriggerCallback('qb-scoreboard:server:GetScoreboardData', function(players, cops, playerList)
|
|
playerOptin = playerList
|
|
|
|
SendNUIMessage({
|
|
action = 'open',
|
|
players = players,
|
|
maxPlayers = Config.MaxPlayers,
|
|
requiredCops = Config.IllegalActions,
|
|
currentCops = cops
|
|
})
|
|
|
|
scoreboardOpen = true
|
|
end)
|
|
else
|
|
SendNUIMessage({
|
|
action = 'close',
|
|
})
|
|
|
|
scoreboardOpen = false
|
|
end
|
|
end, false)
|
|
|
|
RegisterKeyMapping('scoreboard', 'Open Scoreboard', 'keyboard', Config.OpenKey)
|
|
else
|
|
RegisterCommand('+scoreboard', function()
|
|
if scoreboardOpen then return end
|
|
QBCore.Functions.TriggerCallback('qb-scoreboard:server:GetScoreboardData', function(players, cops, playerList)
|
|
playerOptin = playerList
|
|
|
|
SendNUIMessage({
|
|
action = 'open',
|
|
players = players,
|
|
maxPlayers = Config.MaxPlayers,
|
|
requiredCops = Config.IllegalActions,
|
|
currentCops = cops
|
|
})
|
|
|
|
scoreboardOpen = true
|
|
end)
|
|
end, false)
|
|
|
|
RegisterCommand('-scoreboard', function()
|
|
if not scoreboardOpen then return end
|
|
SendNUIMessage({
|
|
action = 'close',
|
|
})
|
|
|
|
scoreboardOpen = false
|
|
end, false)
|
|
|
|
RegisterKeyMapping('+scoreboard', 'Open Scoreboard', 'keyboard', Config.OpenKey)
|
|
end
|
|
|
|
-- Threads
|
|
|
|
CreateThread(function()
|
|
Wait(1000)
|
|
local actions = {}
|
|
for k, v in pairs(Config.IllegalActions) do
|
|
actions[k] = v.label
|
|
end
|
|
SendNUIMessage({
|
|
action = 'setup',
|
|
items = actions
|
|
})
|
|
end)
|
|
|
|
CreateThread(function()
|
|
while true do
|
|
local loop = 100
|
|
if scoreboardOpen then
|
|
for _, player in pairs(GetPlayersFromCoords(GetEntityCoords(PlayerPedId()), 10.0)) do
|
|
local playerId = GetPlayerServerId(player)
|
|
local playerPed = GetPlayerPed(player)
|
|
local playerCoords = GetEntityCoords(playerPed)
|
|
if Config.ShowIDforALL or playerOptin[playerId].optin then
|
|
loop = 0
|
|
DrawText3D(playerCoords.x, playerCoords.y, playerCoords.z + 1.0, '[' .. playerId .. ']')
|
|
end
|
|
end
|
|
end
|
|
Wait(loop)
|
|
end
|
|
end)
|