Cómo crear blips de mapa en FiveM: AddBlipForCoord y blips de radio
Crea blips en FiveM con AddBlipForCoord: sprite, color, escala, rango corto, una etiqueta de nombre, blips de radio con AddBlipForRadius, eliminar blips y blips solo para trabajo.
Llamas a AddBlipForCoord y obtienes un punto blanco sin icono, o un blip con el nombre «Blip» o «NULL», o uno que permanece en el mapa después de que el script se detiene. Los blips son simples una vez que conoces el orden de las llamadas. Este artículo te muestra cómo crear uno, nombrarlo, dibujar un radio, eliminarlo, y mostrar blips solo a un trabajo.
Un blip básico
Todos los natives de blip se ejecutan en el cliente. Esto crea un icono de tienda en una posición:
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)Qué hace cada llamada:
| Native | Propósito |
|---|---|
AddBlipForCoord |
Crea el blip y devuelve un identificador. Guárdalo. |
SetBlipSprite |
El icono, un número. |
SetBlipDisplay |
Dónde se muestra: 4 es el mapa principal y el minimapa. |
SetBlipScale |
El tamaño. 1.0 es normal. |
SetBlipColour |
El color, un número. |
SetBlipAsShortRange |
true lo muestra en el minimapa solo cuando está cerca. |
Los números para sprites y colores están listados en el sitio de documentación de FiveM, bajo referencias de juego, blips. El sprite 52 anterior es un icono de tienda. Si ves solo un punto blanco, el número de sprite es incorrecto o falta.
Establece el nombre
La etiqueta mostrada en el mapa y en el menú de pausa no es un argumento de cadena simple. Va a través de los natives de comando de texto, en este orden:
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('24/7 Shop')
EndTextCommandSetBlipName(blip)El blip ya debe existir, y debes llamar a los tres. Salta uno y el nombre está vacío o muestra un predeterminado. Sin un nombre, un blip aparece en la leyenda como «Blip» o por su sprite.
Consejo: pon estas llamadas en una función que toma una tabla, así cada blip es una línea en una configuración en lugar de diez líneas de natives.
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',
})Rango corto o siempre visible
SetBlipAsShortRange(blip, true) significa que el blip solo se muestra en el minimapa cuando el jugador está cerca, y aún es visible en el mapa completo. Con false, siempre se muestra en el minimapa, sujeto a los bordes, dondequiera que esté el jugador. Usa rango corto para tiendas y trabajos, y false para un objetivo principal.
Blips de radio
Un blip de radio es un círculo coloreado para un área, como una zona de búsqueda o un territorio. AddBlipForRadius hace el círculo, pero no un icono, así que añade un blip normal en el mismo lugar si quieres ambos:
local area = AddBlipForRadius(25.7, -1347.3, 29.5, 150.0)
SetBlipColour(area, 1)
SetBlipAlpha(area, 100)El último argumento es el radio en metros. Establece el alfa (0 a 255) bajo, o el círculo cubre el mapa. El blip de radio es un identificador separado, así que elimínalo por separado.
Elimina blips
Siempre guarda el identificador, y elimina el blip cuando ya no sea necesario:
if DoesBlipExist(shopBlip) then
RemoveBlip(shopBlip)
endLos blips no se eliminan por ti cuando un recurso se detiene, o no de manera confiable, así que limpia en un manejador. Sin él, reiniciar tu script acumula duplicados en el 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 solo para trabajo
Los blips se crean en el cliente propio de cada jugador, así que un blip solo para trabajo significa: crearlo para el trabajo correcto, eliminarlo para todos los demás. Mantén una tabla de lo que creaste, y reacciona a cambios de trabajo.
En 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)En QBCore (y QBox a través de su capa de compatibilidad):
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 usan el mismo refreshBlips y createBlip de arriba. Si el script puede reiniciarse mientras el jugador está en línea, también llama a refreshBlips una vez al inicio con el trabajo actual, ya que el evento cargado ya ha ocurrido en ese punto.
Cuidado: ocultar un blip en el cliente no es seguridad. Un jugador aún puede verlo si parcha el cliente. Para un secreto, como un escondite ilegal, no envíes la posición al cliente en absoluto hasta que el jugador se lo gane.
Otros tipos de blip
AddBlipForEntity(entity)sigue un vehículo o un ped.SetBlipRoute(blip, true)dibuja una ruta GPS al blip.SetBlipFlashes(blip, true)lo hace parpadear.
Lista de verificación
| Síntoma | Solución |
|---|---|
| Punto blanco, sin icono | Llama a SetBlipSprite con un número de sprite válido |
| El blip no tiene nombre o tiene el nombre incorrecto | Usa la secuencia de nombre de tres llamadas después de crear el blip |
| El blip es demasiado grande o demasiado pequeño | Ajusta SetBlipScale (1.0 es normal) |
| El círculo de radio oculta el mapa | Bájalo con SetBlipAlpha |
| Duplicados después de un reinicio de script | RemoveBlip en onResourceStop |
| El blip debe mostrarse solo para un trabajo | Crea y elimina en los eventos de actualización de trabajo |
Respuestas rápidas
¿Por qué mi blip muestra el nombre incorrecto o sin nombre?
El nombre debe establecerse con BeginTextCommandSetBlipName('STRING'), AddTextComponentSubstringPlayerName(name) y EndTextCommandSetBlipName(blip), en ese orden, después de que el blip exista.
¿Cómo elimino un blip?
Llama a RemoveBlip(blip) con el identificador que almacenaste cuando lo creaste. Si no mantuviste el identificador, no puedes eliminar ese blip.
¿Cómo muestro un blip solo para un trabajo?
Créalo cuando el trabajo del jugador coincida, y elimínalo cuando el trabajo cambie. Hazlo desde el evento de actualización de trabajo del framework, ya que un blip se crea en el cliente.
Scripts que evitan este problema
Shop CreatorCrea una tienda en menos de un minuto — dueños, empleados, caja fuerte y atracos.Ver script →
Advanced BoostingBoosting de vehículos desde una tablet: contratos de clase D a S+, crews y cola en vivo.Ver script →
Quest CreatorUn editor visual de misiones y diálogos con NPC, nodo a nodo dentro del juego.Ver script →