183 lines
6.2 KiB
Lua
183 lines
6.2 KiB
Lua
|
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)
|