Como criar blips no mapa em FiveM: AddBlipForCoord e radius blips
Crie blips em FiveM com AddBlipForCoord: sprite, cor, escala, short range, um rótulo de nome, radius blips com AddBlipForRadius, removendo blips e blips apenas para jobs.
Você chama AddBlipForCoord e obtém um ponto branco sem ícone, ou um blip com o nome "Blip" ou "NULL", ou um que fica no mapa após o script parar. Blips são simples uma vez que você sabe a ordem das chamadas. Este artigo percorre criar um, nomeá-lo, desenhar um raio, removê-lo, e mostrar blips apenas para um job.
Um blip básico
Todos os nativos de blip rodam no cliente. Isto cria um ícone de loja em uma posição:
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)O que cada chamada faz:
| Nativo | Propósito |
|---|---|
AddBlipForCoord |
Cria o blip e retorna um handle. Mantenha-o. |
SetBlipSprite |
O ícone, um número. |
SetBlipDisplay |
Onde mostra: 4 é o mapa principal e o minimap. |
SetBlipScale |
O tamanho. 1.0 é normal. |
SetBlipColour |
A cor, um número. |
SetBlipAsShortRange |
true mostra no minimap apenas quando próximo. |
Os números para sprites e cores estão listados no site de documentação do FiveM, em game references, blips. O sprite 52 acima é um ícone de loja. Se você vê apenas um ponto branco, o número do sprite está errado ou faltando.
Defina o nome
O rótulo mostrado no mapa e no menu de pausa não é um argumento de string simples. Passa pelos nativos de comando de texto, nesta ordem:
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('24/7 Shop')
EndTextCommandSetBlipName(blip)O blip deve já existir, e você deve chamar os três. Pule um e o nome é vazio ou mostra um padrão. Sem um nome, um blip aparece na legenda como "Blip" ou pelo seu sprite.
Dica: coloque estas chamadas em uma função que pega uma tabela, para que cada blip seja uma linha em uma config em vez de dez linhas de nativos.
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 ou sempre visível
SetBlipAsShortRange(blip, true) significa que o blip apenas mostra no minimap quando o jogador está próximo, e ainda é visível no mapa completo. Com false, sempre mostra no minimap, edge-clamped, onde quer que o jogador esteja. Use short range para lojas e jobs, e false para um objetivo principal.
Radius blips
Um radius blip é um círculo colorido para uma área, como uma zona de busca ou um turf. AddBlipForRadius faz o círculo, mas não um ícone, então adicione um blip normal no mesmo local se quiser ambos:
local area = AddBlipForRadius(25.7, -1347.3, 29.5, 150.0)
SetBlipColour(area, 1)
SetBlipAlpha(area, 100)O último argumento é o raio em metros. Defina o alpha (0 a 255) baixo, ou o círculo cobre o mapa. O radius blip é um handle separado, então remova-o separadamente.
Remova blips
Sempre mantenha o handle, e remova o blip quando não for mais necessário:
if DoesBlipExist(shopBlip) then
RemoveBlip(shopBlip)
endBlips não são removidos para você quando um recurso para, ou não confiável, então limpe em um handler. Sem ele, reiniciar seu script empilha duplicatas no mapa:
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)Blips apenas para job
Blips são criados no próprio cliente de cada jogador, então um blip apenas para job significa: crie-o para o job certo, remova-o para todos os outros. Mantenha uma tabela do que você criou, e reaja a mudanças de job.
No 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)No QBCore (e QBox através de sua camada de compatibilidade):
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)Ambos usam o mesmo refreshBlips e createBlip acima. Se o script pode reiniciar enquanto o jogador está online, também chame refreshBlips uma vez ao iniciar com o job atual, já que o evento de carregamento já disparou até então.
Atenção: esconder um blip no cliente não é segurança. Um jogador ainda pode vê-lo se patchar o cliente. Para um segredo, como um esconderijo ilegal, não envie a posição ao cliente até que o jogador a ganhe.
Outros tipos de blip
AddBlipForEntity(entity)segue um veículo ou um ped.SetBlipRoute(blip, true)desenha uma rota GPS para o blip.SetBlipFlashes(blip, true)o faz piscar.
Checklist
| Sintoma | Solução |
|---|---|
| Ponto branco, sem ícone | Chame SetBlipSprite com um número de sprite válido |
| Blip sem nome ou nome errado | Use a sequência de chamada de três nomes após criar o blip |
| Blip muito grande ou muito pequeno | Ajuste SetBlipScale (1.0 é normal) |
| Círculo de raio esconde o mapa | Abaixe com SetBlipAlpha |
| Duplicatas após um restart de script | RemoveBlip em onResourceStop |
| Blip deve mostrar apenas para um job | Crie e remova nos eventos de atualização de job |
Respostas rápidas
Por que meu blip mostra o nome errado ou nenhum nome?
O nome deve ser definido com BeginTextCommandSetBlipName('STRING'), AddTextComponentSubstringPlayerName(name) e EndTextCommandSetBlipName(blip), nessa ordem, após o blip existir.
Como removo um blip?
Chame RemoveBlip(blip) com o handle que você armazenou ao criá-lo. Se você não manteve o handle, você não pode remover aquele blip.
Como mostro um blip apenas para um job?
Crie-o quando o job do jogador corresponder, e remova-o quando o job muda. Faça do evento de atualização de job do framework, já que um blip é criado no cliente.
Scripts sem esse problema
Shop CreatorMonte uma loja em menos de um minuto — donos, funcionários, cofres e assaltos inclusos.Ver script →
Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →
Quest CreatorUm editor visual de missões e diálogos com NPCs, montado nó por nó dentro do jogo.Ver script →