Scripts/resources/[ps]/ps-adminmenu/client/players.lua

183 lines
6.2 KiB
Lua
Raw Normal View History

2024-12-29 20:11:16 +00:00
local ShowBlips = false
local ShowNames = false
local NetCheck1 = false
local NetCheck2 = false
local Blip = nil
local Tag = nil
local currentPlayers = {}
-- Function to remove all names and Blips
local function removeNameAndBlips()
if DoesBlipExist(Blip) then
RemoveBlip(Blip)
end
if Tag then
SetMpGamerTagVisibility(Tag, 0, false)
SetMpGamerTagVisibility(Tag, 2, false)
SetMpGamerTagVisibility(Tag, 4, false)
SetMpGamerTagVisibility(Tag, 6, false)
RemoveMpGamerTag(Tag)
end
end
-- Function to Toggle Blips and Names
local function ToggleBlipsAndNames(isBlips)
if isBlips then
ShowBlips = not ShowBlips
NetCheck1 = ShowBlips
local message = ShowBlips and "blips_activated" or "blips_deactivated"
QBCore.Functions.Notify(locale(message), ShowBlips and "success" or "error")
else
ShowNames = not ShowNames
NetCheck2 = ShowNames
local message = ShowNames and "names_activated" or "names_deactivated"
QBCore.Functions.Notify(locale(message), ShowNames and "success" or "error")
end
if not ShowNames or not ShowBlips then
removeNameAndBlips()
end
end
-- Main Function to Update Blips and Names
local function UpdateBlipsAndNames(players)
local playerPed = PlayerPedId()
local playerCoords = GetEntityCoords(playerPed, true)
local blipSprites = { -- Sprite Per Vehicle Class
[1] = 1,
[8] = 226,
[9] = 757,
[10] = 477,
[11] = 477,
[12] = 67,
[13] = 226,
[14] = 427,
[15] = 422,
[16] = 423,
[17] = 198,
[18] = 56,
[19] = 421,
[20] = 477,
}
for _, player in pairs(players) do
local playerId = GetPlayerFromServerId(player.id)
local ped = GetPlayerPed(playerId)
local name = 'ID: ' .. player.id .. ' | ' .. player.name
Blip = GetBlipFromEntity(ped)
Tag = CreateFakeMpGamerTag(ped, name, false, false, "", false)
SetMpGamerTagAlpha(Tag, 0, 255)
SetMpGamerTagAlpha(Tag, 2, 255)
SetMpGamerTagAlpha(Tag, 4, 255)
SetMpGamerTagAlpha(Tag, 6, 255)
SetMpGamerTagHealthBarColour(Tag, 25)
local isPlayerTalking = NetworkIsPlayerTalking(playerId)
local isPlayerInvincible = GetPlayerInvincible(playerId)
if ShowNames then
SetMpGamerTagVisibility(Tag, 0, true)
SetMpGamerTagVisibility(Tag, 2, true)
SetMpGamerTagVisibility(Tag, 4, isPlayerTalking)
SetMpGamerTagVisibility(Tag, 6, isPlayerInvincible)
else
SetMpGamerTagVisibility(Tag, 0, false)
SetMpGamerTagVisibility(Tag, 2, false)
SetMpGamerTagVisibility(Tag, 4, false)
SetMpGamerTagVisibility(Tag, 6, false)
RemoveMpGamerTag(Tag)
end
if ShowBlips then
if not DoesBlipExist(Blip) then
Blip = AddBlipForEntity(ped)
ShowHeadingIndicatorOnBlip(Blip, true)
SetBlipCategory(Blip, 7)
else
local veh = GetVehiclePedIsIn(ped, false)
local classveh = GetVehicleClass(veh)
local modelveh = GetEntityModel(veh)
if veh ~= 0 then
local blipSprite = blipSprites[classveh] or 225
if modelveh == 'besra' or modelveh == 'hydra' or modelveh == 'lazer' then
blipSprite = 424
end
SetBlipSprite(Blip, blipSprite)
ShowHeadingIndicatorOnBlip(Blip, false)
local passengers = GetVehicleNumberOfPassengers(veh)
if passengers then
if not IsVehicleSeatFree(veh, -1) then
passengers = passengers + 1
end
ShowNumberOnBlip(Blip, passengers)
else
HideNumberOnBlip(Blip)
end
SetBlipRotation(Blip, math.ceil(GetEntityHeading(veh)))
SetBlipNameToPlayerName(Blip, playerId)
SetBlipScale(Blip, 0.85)
local distance = math.floor(Vdist(playerCoords.x, playerCoords.y, playerCoords.z,
GetEntityCoords(ped, true).x, GetEntityCoords(ped, true).y, GetEntityCoords(ped, true).z) /
-1) +
900
distance = math.max(0, math.min(255, distance))
SetBlipAlpha(Blip, distance)
else
HideNumberOnBlip(Blip)
SetBlipSprite(Blip, 1)
SetBlipNameToPlayerName(Blip, playerId)
ShowHeadingIndicatorOnBlip(Blip, true)
end
end
end
end
end
local function preparePlayers()
currentPlayers = {}
Wait(100)
currentPlayers = lib.callback.await('ps-adminmenu:callback:GetPlayers')
end
-- Toggle Blips and Names events
RegisterNetEvent('ps-adminmenu:client:toggleBlips', function(data)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
if not ShowBlips then preparePlayers() end
ToggleBlipsAndNames(true)
end)
RegisterNetEvent('ps-adminmenu:client:toggleNames', function(data)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
if not ShowNames then preparePlayers() end
ToggleBlipsAndNames(false)
end)
-- Mute Player
RegisterNetEvent("ps-adminmenu:client:MutePlayer", function(data, selectedData)
local data = CheckDataFromKey(data)
if not data or not CheckPerms(data.perms) then return end
local playerId = selectedData["Player"].value
if not playerId then return end
exports["pma-voice"]:toggleMutePlayer(playerId)
end)
-- Main loop to check for updates
CreateThread(function()
while true do
Wait(1000)
if NetCheck1 or NetCheck2 then
UpdateBlipsAndNames(currentPlayers)
end
end
end)
-- Remove Stress
RegisterNetEvent('ps-adminmenu:client:removeStress', function(data)
TriggerServerEvent('hud:server:RelieveStress', 100)
end)