Wie man Karten-Blips in FiveM erstellt: AddBlipForCoord und Radius-Blips
Erstelle Blips in FiveM mit AddBlipForCoord: Sprite, Farbe, Skalierung, Kurze Reichweite, ein Namensschild, Radius-Blips mit AddBlipForRadius, Blips entfernen und Blips nur für Jobs.
Du rufst AddBlipForCoord auf und bekommst einen weißen Punkt ohne Symbol, oder einen Blip mit dem Namen „Blip" oder „NULL", oder einen, der nach dem Stoppen des Skripts auf der Karte bleibt. Blips sind einfach, sobald du die Reihenfolge der Aufrufe kennst. Dieser Artikel führt dich durch das Erstellen eines, das Benennen, das Zeichnen eines Radius, das Entfernen und das Anzeigen von Blips nur für einen Job.
Ein einfacher Blip
Alle Blip-Native laufen auf dem Client. Dies erstellt ein Shop-Symbol an einer Position:
local blip = AddBlipForCoord(25.7, -1347.3, 29.5)
SetBlipSprite(blip, 52)
SetBlipDisplay(blip, 4)
SetBlipScale(blip, 0.8)
SetBlipColour(blip, 2)
SetBlipAsShortRange(blip, true)
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('24/7 Shop')
EndTextCommandSetBlipName(blip)Was jeder Aufruf tut:
| Native | Zweck |
|---|---|
AddBlipForCoord |
Erstellt den Blip und gibt ein Handle zurück. Behalte es. |
SetBlipSprite |
Das Symbol, eine Zahl. |
SetBlipDisplay |
Wo es zeigt: 4 ist die Hauptkarte und die Minikarte. |
SetBlipScale |
Die Größe. 1.0 ist normal. |
SetBlipColour |
Die Farbe, eine Zahl. |
SetBlipAsShortRange |
true zeigt es auf der Minikarte nur in der Nähe. |
Die Zahlen für Sprites und Farben sind auf der FiveM-Dokumentationsseite unter Spielreferenzen, Blips aufgelistet. Der Sprite 52 oben ist ein Shop-Symbol. Wenn du nur einen weißen Punkt siehst, ist die Sprite-Nummer falsch oder fehlt.
Stelle den Namen ein
Das auf der Karte und im Pause-Menü angezeigte Label ist kein einfaches String-Argument. Es geht durch die Text-Command-Natives, in dieser Reihenfolge:
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('24/7 Shop')
EndTextCommandSetBlipName(blip)Der Blip muss bereits existieren, und du musst alle drei aufrufen. Überspringe einen und der Name ist leer oder zeigt einen Standard. Ohne Namen erscheint ein Blip in der Legende als „Blip" oder nach seinem Sprite.
Tipp: Lege diese Aufrufe in eine Funktion, die eine Tabelle nimmt, damit jeder Blip eine Zeile in einer Konfiguration statt zehn Zeilen Native ist.
local function createBlip(data)
local blip = AddBlipForCoord(data.coords.x, data.coords.y, data.coords.z)
SetBlipSprite(blip, data.sprite)
SetBlipDisplay(blip, 4)
SetBlipScale(blip, data.scale or 0.8)
SetBlipColour(blip, data.colour or 0)
SetBlipAsShortRange(blip, data.shortRange ~= false)
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName(data.name)
EndTextCommandSetBlipName(blip)
return blip
end
local shopBlip = createBlip({
coords = vec3(25.7, -1347.3, 29.5),
sprite = 52,
colour = 2,
name = '24/7 Shop',
})Kurze Reichweite oder immer sichtbar
SetBlipAsShortRange(blip, true) bedeutet, dass der Blip nur auf der Minikarte in der Nähe angezeigt wird, und er ist immer noch auf der vollständigen Karte sichtbar. Mit false wird er auf der Minikarte immer angezeigt, am Rand eingespannt, wo auch der Spieler ist. Verwende kurze Reichweite für Shops und Jobs und false für ein Hauptziel.
Radius-Blips
Ein Radius-Blip ist ein farbiger Kreis für einen Bereich, wie eine Suchzone oder ein Revier. AddBlipForRadius erstellt den Kreis, aber kein Symbol, also füge einen normalen Blip an der gleichen Stelle hinzu, wenn du beide möchtest:
local area = AddBlipForRadius(25.7, -1347.3, 29.5, 150.0)
SetBlipColour(area, 1)
SetBlipAlpha(area, 100)Das letzte Argument ist der Radius in Metern. Stelle den Alpha (0 bis 255) niedrig, sonst bedeckt der Kreis die Karte. Der Radius-Blip ist ein separates Handle, daher entferne ihn separat.
Entferne Blips
Behalte immer das Handle und entferne den Blip, wenn er nicht mehr nötig ist:
if DoesBlipExist(shopBlip) then
RemoveBlip(shopBlip)
endBlips werden nicht für dich entfernt, wenn eine Ressource stoppt, oder nicht zuverlässig, daher räume in einem Handler auf. Ohne dies häufen sich Duplikate auf der Karte an, wenn du dein Skript neu startest:
AddEventHandler('onResourceStop', function(resource)
if resource ~= GetCurrentResourceName() then return end
if DoesBlipExist(shopBlip) then RemoveBlip(shopBlip) end
if DoesBlipExist(area) then RemoveBlip(area) end
end)Nur-für-Job-Blips
Blips werden auf dem Client jedes Spielers erstellt, daher bedeutet ein Nur-für-Job-Blip: Erstelle ihn für den richtigen Job, entferne ihn für alle anderen. Halte eine Tabelle dessen, was du erstellt hast, und reagiere auf Job-Änderungen.
Auf ESX:
local blips = {}
local function refreshBlips(job)
for i = #blips, 1, -1 do
RemoveBlip(blips[i])
blips[i] = nil
end
if job and job.name == 'police' then
blips[#blips + 1] = createBlip({
coords = vec3(441.2, -981.9, 30.7),
sprite = 60,
colour = 3,
name = 'Police station',
})
end
end
RegisterNetEvent('esx:playerLoaded', function(xPlayer)
refreshBlips(xPlayer.job)
end)
RegisterNetEvent('esx:setJob', function(job)
refreshBlips(job)
end)Auf QBCore (und QBox durch seine Kompatibilitätsschicht):
local QBCore = exports['qb-core']:GetCoreObject()
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
refreshBlips(QBCore.Functions.GetPlayerData().job)
end)
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(job)
refreshBlips(job)
end)Beide verwenden die gleiche refreshBlips und createBlip von oben. Falls das Skript neu starten kann, während der Spieler online ist, rufe auch refreshBlips einmal beim Start mit dem aktuellen Job auf, da das geladene Event bereits vorbeigegangen ist.
Achtung: Das Verstecken eines Blips auf dem Client ist keine Sicherheit. Ein Spieler kann ihn immer noch sehen, falls er den Client patcht. Für ein Geheimnis, wie ein illegales Versteck, sende die Position nicht an den Client, bis der Spieler sie verdient.
Andere Blip-Typen
AddBlipForEntity(entity)folgt einem Fahrzeug oder Ped.SetBlipRoute(blip, true)zeichnet eine GPS-Route zum Blip.SetBlipFlashes(blip, true)lässt ihn blinken.
Checkliste
| Symptom | Behebung |
|---|---|
| Weißer Punkt, kein Symbol | Rufe SetBlipSprite mit einer gültigen Sprite-Nummer auf |
| Blip hat keinen Namen oder den falschen Namen | Verwende die dreiteilige Namensequenz nach dem Erstellen des Blips |
| Blip zu groß oder zu klein | Passe SetBlipScale an (1.0 ist normal) |
| Radius-Kreis versteckt die Karte | Senke ihn mit SetBlipAlpha ab |
| Duplikate nach einem Skript-Neustart | RemoveBlip in onResourceStop |
| Blip muss nur für einen Job angezeigt werden | Erstelle und entferne auf den Job-Update-Events |
Kurze Antworten
Warum zeigt mein Blip den falschen Namen oder keinen Namen?
Der Name muss mit BeginTextCommandSetBlipName('STRING'), AddTextComponentSubstringPlayerName(name) und EndTextCommandSetBlipName(blip), in dieser Reihenfolge, nachdem der Blip existiert, gesetzt werden.
Wie entferne ich einen Blip?
Rufe RemoveBlip(blip) mit dem Handle auf, den du beim Erstellen gespeichert hast. Falls du das Handle nicht behalten hast, kannst du diesen Blip nicht entfernen.
Wie zeige ich einen Blip nur für einen Job?
Erstelle ihn, wenn der Job des Spielers passt, und entferne ihn, wenn sich der Job ändert. Tu es aus dem Job-Update-Event des Frameworks, da ein Blip auf dem Client erstellt wird.
Scripts ohne dieses Problem
Shop CreatorBau einen Shop in unter einer Minute — Besitzer, Angestellte, Tresore und Überfälle inklusive.Script ansehen →
Advanced BoostingFahrzeug-Boosting per Tablet: Aufträge von Klasse D bis S+, Crews und eine Live-Warteschlange.Script ansehen →
Quest CreatorEin visueller Editor für Quests und NPC-Dialoge, Node für Node im Spiel gebaut.Script ansehen →