Comment créer des blips de carte dans FiveM : AddBlipForCoord et blips de rayon
Créez des blips dans FiveM avec AddBlipForCoord : sprite, couleur, échelle, courte portée, un label de nom, blips de rayon avec AddBlipForRadius, suppression de blips et blips réservés aux jobs.
Vous appelez AddBlipForCoord et obtenez un point blanc sans icône, ou un blip avec le nom « Blip » ou « NULL », ou un qui reste sur la carte après l'arrêt du script. Les blips sont simples une fois que vous connaissez l'ordre des appels. Cet article vous guide dans la création d'un, son nommage, le dessin d'un rayon, sa suppression, et l'affichage des blips seulement à un job.
Un blip basique
Tous les natives de blips s'exécutent sur le client. Cela crée une icône de magasin à une position :
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)Ce que chaque appel fait :
| Native | Objectif |
|---|---|
AddBlipForCoord |
Crée le blip et retourne une poignée. Gardez-la. |
SetBlipSprite |
L'icône, un nombre. |
SetBlipDisplay |
Où il s'affiche : 4 c'est la carte principale et la mini-carte. |
SetBlipScale |
La taille. 1.0 est normal. |
SetBlipColour |
La couleur, un nombre. |
SetBlipAsShortRange |
true l'affiche sur la mini-carte seulement quand proche. |
Les nombres pour les sprites et les couleurs sont listés sur le site de documentation FiveM, sous références de jeu, blips. Le sprite 52 ci-dessus est une icône de magasin. Si vous ne voyez qu'un point blanc, le numéro de sprite est faux ou manquant.
Définir le nom
Le label affiché sur la carte et dans le menu pause n'est pas un argument de chaîne simple. Il passe par les natives de commandes de texte, dans cet ordre :
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('24/7 Shop')
EndTextCommandSetBlipName(blip)Le blip doit déjà exister, et vous devez appeler tous les trois. Sautez-en un et le nom est vide ou affiche un défaut. Sans un nom, un blip apparaît dans la légende comme « Blip » ou par son sprite.
Conseil : mettez ces appels dans une fonction qui prend une table, pour que chaque blip soit une ligne dans une config au lieu de dix lignes 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',
})Courte portée ou toujours visible
SetBlipAsShortRange(blip, true) signifie que le blip s'affiche seulement sur la mini-carte quand le joueur est proche, et il reste visible sur la carte complète. Avec false, il s'affiche toujours sur la mini-carte, serré aux bords, peu importe où le joueur est. Utilisez la courte portée pour les magasins et les jobs, et false pour un objectif principal.
Blips de rayon
Un blip de rayon est un cercle coloré pour une zone, comme une zone de recherche ou un territoire. AddBlipForRadius crée le cercle, mais pas une icône, donc ajoutez un blip normal au même endroit si vous voulez les deux :
local area = AddBlipForRadius(25.7, -1347.3, 29.5, 150.0)
SetBlipColour(area, 1)
SetBlipAlpha(area, 100)Le dernier argument est le rayon en mètres. Définissez l'alpha (0 à 255) bas, ou le cercle couvre la carte. Le blip de rayon est une poignée séparée, donc supprimez-le séparément.
Supprimer les blips
Gardez toujours la poignée, et supprimez le blip quand il n'est plus nécessaire :
if DoesBlipExist(shopBlip) then
RemoveBlip(shopBlip)
endLes blips ne sont pas supprimés pour vous quand une ressource s'arrête, ou pas de manière fiable, donc nettoyez dans un gestionnaire. Sans cela, redémarrer votre script accumule les doublons sur la carte :
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 réservés aux jobs
Les blips sont créés sur le client propre de chaque joueur, donc un blip réservé aux jobs signifie : créez-le pour le bon job, supprimez-le pour tout le monde d'autre. Gardez une table de ce que vous avez créé, et réagissez aux changements de job.
Sur 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)Sur QBCore (et QBox via sa couche de 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)Les deux utilisent le même refreshBlips et createBlip d'en haut. Si le script peut redémarrer alors que le joueur est en ligne, appelez aussi refreshBlips une fois au démarrage avec le job courant, puisque l'événement chargé a déjà été déclenché à ce moment-là.
Attention : cacher un blip sur le client n'est pas sécurisé. Un joueur peut toujours le voir s'il patchs le client. Pour un secret, comme un repaire illégal, n'envoyez pas la position au client du tout jusqu'à ce que le joueur l'gagne.
Autres types de blips
AddBlipForEntity(entity)suit un véhicule ou un ped.SetBlipRoute(blip, true)dessine une route GPS au blip.SetBlipFlashes(blip, true)le fait clignoter.
Checklist
| Problème | Solution |
|---|---|
| Point blanc, pas d'icône | Appelez SetBlipSprite avec un numéro de sprite valide |
| Le blip n'a pas de nom ou a le mauvais nom | Utilisez la séquence de trois appels de nom après la création du blip |
| Le blip est trop grand ou trop petit | Ajustez SetBlipScale (1.0 est normal) |
| Le cercle de rayon cache la carte | Baissez-le avec SetBlipAlpha |
| Doublons après un redémarrage de script | RemoveBlip dans onResourceStop |
| Le blip doit s'afficher pour un seul job | Créez et supprimez sur les événements de mise à jour du job |
Réponses rapides
Pourquoi mon blip affiche le mauvais nom ou pas de nom ?
Le nom doit être défini avec BeginTextCommandSetBlipName('STRING'), AddTextComponentSubstringPlayerName(name) et EndTextCommandSetBlipName(blip), dans cet ordre, après que le blip existe.
Comment je supprime un blip ?
Appelez RemoveBlip(blip) avec la poignée que vous avez stockée quand vous avez créé le blip. Si vous n'avez pas gardé la poignée, vous ne pouvez pas supprimer ce blip.
Comment je montre un blip pour un seul job ?
Créez-le quand le job du joueur correspond, et supprimez-le quand le job change. Faites-le depuis l'événement de mise à jour du job du framework, puisqu'un blip est créé sur le client.
Des scripts sans ce problème
Shop CreatorCréez un magasin en moins d’une minute — propriétaires, employés, coffres et braquages inclus.Voir le script →
Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →
Quest CreatorUn éditeur visuel de quêtes et de dialogues PNJ, construit nœud par nœud en jeu.Voir le script →