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:

lua
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:

lua
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.

lua
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:

lua
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:

lua
if DoesBlipExist(shopBlip) then
    RemoveBlip(shopBlip)
end

Blips 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:

lua
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:

lua
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):

lua
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 →

Weiterlesen