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:
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:
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.
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:
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:
if DoesBlipExist(shopBlip) then
RemoveBlip(shopBlip)
endI 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:
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:
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à):
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 →