Yes there was a little oversight in the code I provided, as I said it was not tested. I modified the source code you provided and now it works as intended:
(Also deleted some stuff from it)
client.lua
local partnerID = nil
hudActive = false
RegisterNetEvent('updatePartner')
AddEventHandler('updatePartner', function(id)
partnerID = id
hudActive = true
end)
RegisterNetEvent('removePartner')
AddEventHandler('removePartner', function()
partnerID = nil
hudActive = false
end)
-- HUD-Zeichnung in einer Schleife, die konstant läuft
Citizen.CreateThread(function()
while true do
Citizen.Wait(0) -- Warte einen Frame
if hudActive then
DrawHUD() -- Zeichne das HUD
end
end
end)
-- Zeichenfunktion für das HUD
function DrawHUD()
if not partnerID then
return
end
local title = "Streife"
local text1 = "\nName: " .. GetPlayerName(PlayerId()) .. " - ID: " .. GetPlayerServerId(PlayerId())
local text2 = "\nPartner: " .. GetPlayerName(GetPlayerFromServerId(partnerID)) .. " - ID: " .. partnerID
local myCoords = GetEntityCoords(PlayerPedId())
local partnerCoords = GetEntityCoords(GetPlayerPed(GetPlayerFromServerId(partnerID)))
local distance = math.ceil(#(myCoords - partnerCoords))
local text3 = "Entfernung: " .. distance .. " Meter"
-- Vergrößere das HUD um 10%
DrawRect(1.0, 0.313, 0.25, 0.08, 0, 0, 0, 51) -- Schwarz, 20% transparent
DrawTextOnScreen(text1, 0.88, 0.275, 0.175) -- Angepasste Textskalierung für die Größe
DrawTextOnScreen(text2, 0.88, 0.3, 0.175) -- Angepasste Textskalierung für die Größe
DrawTextOnScreen(title, 0.88, 0.275, 0.175) -- Angepasste Textskalierung für die Größe
DrawTextOnScreen(text3, 0.88, 0.325, 0.175)
end
function DrawTextOnScreen(text2, x, y, scale)
SetTextFont(0)
SetTextProportional(1)
SetTextScale(scale, scale)
SetTextColour(255, 255, 255, 255)
SetTextDropshadow(0, 0, 0, 0, 255)
SetTextEdge(1, 0, 0, 0, 255)
SetTextDropShadow()
SetTextOutline()
BeginTextCommandDisplayText("STRING")
AddTextComponentSubstringPlayerName(text2)
SetTextJustification(1) -- Zentriert den Text
EndTextCommandDisplayText(x, y)
end
server.lua
local partners = {}
RegisterCommand('addpartner', function(source, args)
if partners[source] then
TriggerClientEvent('notify', source, 'Du hast bereits einen Streifenpartner.')
return
end
if args[1] then
local partnerID = tonumber(args[1])
if partnerID and GetPlayerPing(partnerID) ~= 0 then -- Prüft ob der Spieler online ist
partners[source] = partnerID
partners[partnerID] = source
TriggerClientEvent('updatePartner', source, partnerID)
TriggerClientEvent('updatePartner', partnerID, source)
else
TriggerClientEvent('notify', source, 'Ungültige Partner-ID oder Spieler nicht online.')
end
else
TriggerClientEvent('notify', source, 'Du musst eine Spieler-ID angeben.')
end
end, false)
RegisterCommand('delpartner', function(source)
if partners[source] then
local partnerID = partners[source]
partners[source] = nil
partners[partnerID] = nil
TriggerClientEvent('removePartner', source)
TriggerClientEvent('removePartner', partnerID)
end
end, false)
AddEventHandler('playerDropped', function(playerID)
if partners[playerID] then
local partnerID = partners[playerID]
partners[playerID] = nil
if partners[partnerID] then
partners[partnerID] = nil
TriggerClientEvent('removePartner', partnerID)
end
end
end)
As an observation, if you’re using onesync and the distance between the two players is > ~440, the partner’s player will be culled by the server and the name displayed will be **Invalid**