Come creare blip mappa in FiveM: AddBlipForCoord e radius blips

Crea blip in FiveM con AddBlipForCoord: sprite, colore, scala, short range, un'etichetta nome, radius blips con AddBlipForRadius, rimozione di blip e blip solo per lavori.

Chiami AddBlipForCoord e ottieni un punto bianco senza icona, o un blip con il nome "Blip" o "NULL", o uno che rimane sulla mappa dopo che lo script si ferma. I blip sono semplici una volta che conosci l'ordine delle chiamate. Questo articolo descrive come crearne uno, nominarlo, disegnare un raggio, rimuoverlo, e mostrare blip solo a un lavoro.

Un blip di base

Tutti i nativi dei blip vengono eseguiti sul client. Questo crea un'icona di negozio in una posizione:

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)

Cosa fa ogni chiamata:

Native Scopo
AddBlipForCoord Crea il blip e restituisce un handle. Conservalo.
SetBlipSprite L'icona, un numero.
SetBlipDisplay Dove appare: 4 è la mappa principale e la minimappa.
SetBlipScale La dimensione. 1.0 è normale.
SetBlipColour Il colore, un numero.
SetBlipAsShortRange true lo mostra sulla minimappa solo quando vicino.

I numeri per gli sprite e i colori sono elencati nel sito della documentazione di FiveM, sotto i riferimenti di gioco, blip. Lo sprite 52 sopra è un'icona di negozio. Se vedi solo un punto bianco, il numero dello sprite è sbagliato o mancante.

Imposta il nome

L'etichetta mostrata sulla mappa e nel menu pausa non è un semplice argomento di stringa. Va attraverso i nativi di comando di testo, in questo ordine:

lua
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('24/7 Shop')
EndTextCommandSetBlipName(blip)

Il blip deve già esistere, e devi chiamare tutti e tre. Se ne salti uno, il nome è vuoto o mostra un valore predefinito. Senza un nome, un blip appare nella legenda come "Blip" o dal suo sprite.

Consiglio: metti queste chiamate in una funzione che accetta una tabella, così ogni blip è una riga in una config invece di dieci righe di nativi.

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',
})

Short range o sempre visibile

SetBlipAsShortRange(blip, true) significa che il blip appare sulla minimappa solo quando il giocatore è vicino, ed è comunque visibile sulla mappa completa. Con false, appare sempre sulla minimappa, edge-clamped, ovunque si trovi il giocatore. Usa lo short range per negozi e lavori, e false per un obiettivo principale.

Radius blips

Un radius blip è un cerchio colorato per un'area, come una zona di ricerca o un territorio. AddBlipForRadius crea il cerchio, ma non un'icona, quindi aggiungi un blip normale nello stesso punto se vuoi entrambi:

lua
local area = AddBlipForRadius(25.7, -1347.3, 29.5, 150.0)
SetBlipColour(area, 1)
SetBlipAlpha(area, 100)

L'ultimo argomento è il raggio in metri. Imposta l'alpha (0 a 255) basso, o il cerchio copre la mappa. Il radius blip è un handle separato, quindi rimuovilo separatamente.

Rimuovi blip

Conserva sempre l'handle, e rimuovi il blip quando non è più necessario:

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

I blip non vengono rimossi per te quando una risorsa si ferma, o non in modo affidabile, quindi pulisci in un handler. Senza di esso, riavviare lo script ammucchia duplicati sulla mappa:

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)

Blip solo per lavori

I blip vengono creati nel client di ogni giocatore, quindi un blip solo per lavori significa: crealo per il lavoro giusto, rimuovilo per tutti gli altri. Mantieni una tabella di ciò che hai creato, e reagisci ai cambi di lavoro.

Su 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)

Su QBCore (e QBox attraverso il suo livello di compatibilità):

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)

Entrambi usano lo stesso refreshBlips e createBlip da sopra. Se lo script può riavviarsi mentre il giocatore è online, chiama anche refreshBlips una volta all'inizio con il lavoro attuale, poiché l'evento caricato è già stato attivato a quel punto.

Attenzione: nascondere un blip nel client non è sicurezza. Un giocatore può comunque vederlo se patchizza il client. Per un segreto, come un nascondiglio illegale, non inviare la posizione al client fino a quando il giocatore non lo guadagna.

Altri tipi di blip

  • AddBlipForEntity(entity) segue un veicolo o un ped.
  • SetBlipRoute(blip, true) disegna una rotta GPS al blip.
  • SetBlipFlashes(blip, true) lo fa lampeggiare.

Checklist

Sintomo Soluzione
Punto bianco, nessuna icona Chiama SetBlipSprite con un numero di sprite valido
Il blip non ha nome o il nome è sbagliato Usa la sequenza di tre chiamate per il nome dopo aver creato il blip
Blip troppo grande o troppo piccolo Regola SetBlipScale (1.0 è normale)
Il cerchio del raggio nasconde la mappa Abbassalo con SetBlipAlpha
Duplicati dopo un riavvio dello script RemoveBlip in onResourceStop
Il blip deve apparire solo per un lavoro Crea e rimuovi negli eventi di aggiornamento del lavoro

Risposte rapide

Perché il mio blip mostra il nome sbagliato o nessun nome?

Il nome deve essere impostato con BeginTextCommandSetBlipName('STRING'), AddTextComponentSubstringPlayerName(name) e EndTextCommandSetBlipName(blip), in quell'ordine, dopo che il blip esista.

Come rimuovo un blip?

Chiama RemoveBlip(blip) con l'handle che hai memorizzato quando l'hai creato. Se non hai conservato l'handle, non puoi rimuovere quel blip.

Come mostro un blip solo per un lavoro?

Crealo quando il lavoro del giocatore corrisponde, e rimuovilo quando il lavoro cambia. Fallo dall'evento di aggiornamento del lavoro del framework, poiché un blip viene creato nel client.

Script senza questo problema

Shop CreatorCrea un negozio in meno di un minuto — proprietari, dipendenti, casseforti e rapine inclusi.Vedi script →Advanced BoostingBoosting di veicoli dal tablet: contratti dalla classe D alla S+, crew e coda in tempo reale.Vedi script →Quest CreatorUn editor visuale di missioni e dialoghi con gli NPC, costruito nodo per nodo in gioco.Vedi script →

Continua a leggere