Jak tworzyć znaczniki mapy w FiveM: AddBlipForCoord i znaczniki promienia
Utwórz znaczniki w FiveM z AddBlipForCoord: sprite, kolor, skala, krótki zakres, etykieta nazwy, znaczniki promienia z AddBlipForRadius, usuwanie znaczników i znaczniki tylko dla pracy.
Wołasz AddBlipForCoord i otrzymujesz białą plamę bez ikony, lub znacznik z nazwą "Blip" lub "NULL", lub jeden, który zostaje na mapie po zatrzymaniu skryptu. Znaczniki są proste, gdy znasz kolejność wołań. Ten artykuł przechodzi przez tworzenie jednego, naminentowanie go, rysowanie promienia, usuwanie go, i pokazywanie znaczników tylko dla pracy.
Podstawowy znacznik
Wszystkie rodzime znaczniki działają na kliencie. To tworzy ikonę sklepu na pozycji:
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)Co każde wołanie robi:
| Rodzime | Cel |
|---|---|
AddBlipForCoord |
Tworzy znacznik i zwraca uchwyt. Przechowaj go. |
SetBlipSprite |
Ikona, liczba. |
SetBlipDisplay |
Gdzie się pokazuje: 4 to główna mapa i minimapa. |
SetBlipScale |
Rozmiar. 1.0 to normalne. |
SetBlipColour |
Kolor, liczba. |
SetBlipAsShortRange |
true pokazuje to na minimapie tylko gdy blisko. |
Numery dla sprite'ów i kolorów są wypisane na stronie dokumentacji FiveM, pod referencjami gry, znaczniki. Sprite 52 powyżej to ikona sklepu. Jeśli widzisz tylko białą plamę, numer sprite'u jest złyły lub brakuje mu.
Ustaw nazwę
Etykieta wyświetlana na mapie i w menu pauzy nie jest prostym argumentem stringu. Przechodzi przez rodzime komendy tekstowe, w tej kolejności:
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('24/7 Shop')
EndTextCommandSetBlipName(blip)Znacznik musi już istnieć, i musisz wołać wszystkie trzy. Pomiń jeden, a nazwa jest pusta lub pokazuje domyślną. Bez nazwy, znacznik pojawia się w legendzie jako "Blip" lub jego sprite.
Wskazówka: włóż te wołania w funkcję, która przyjmuje tabelę, więc każdy znacznik to jedna linia w configu zamiast dziesięciu linii rodzimych.
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',
})Krótki zakres lub zawsze widoczny
SetBlipAsShortRange(blip, true) oznacza, że znacznik pokazuje się na minimapie tylko, gdy gracz jest blisko, i wciąż jest widoczny na pełnej mapie. Z false, zawsze pokazuje się na minimapie, skrajnie zakończony, gdziekolwiek gracz jest. Używaj krótki zakres dla sklepów i prac, i false dla głównego celu.
Znaczniki promienia
Znacznik promienia to kolorowe koło na obszar, takie jak strefa wyszukiwania lub teren. AddBlipForRadius robi koło, ale nie ikonę, więc dodaj zwykły znacznik w tym samym punkcie, jeśli chcesz oba:
local area = AddBlipForRadius(25.7, -1347.3, 29.5, 150.0)
SetBlipColour(area, 1)
SetBlipAlpha(area, 100)Ostatni argument to promień w metrach. Ustaw alfa (0 do 255) nisko, lub koło przykrywa mapę. Znacznik promienia to oddzielny uchwyt, więc usuń go osobnie.
Usuń znaczniki
Zawsze przechowuj uchwyt, i usuń znacznik, gdy nie jest już potrzebny:
if DoesBlipExist(shopBlip) then
RemoveBlip(shopBlip)
endZnaczniki nie są usuwane dla ciebie, gdy zasób się zatrzymuje, lub nie niezawodnie, więc oczyść w handlerze. Bez tego, restartowanie skryptu gromadzi duplikaty na mapie:
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)Znaczniki tylko dla pracy
Znaczniki są tworzone na kliencie każdego gracza, więc znacznik tylko dla pracy oznacza: stwórz go dla prawej pracy, usuń go dla wszystkich pozostałych. Przechowuj tabelę tego, co stworzyłeś, i reaguj na zmiany pracy.
Na 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)Na QBCore (i QBox przez jego warstwę kompatybilności):
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)Oba używają tego samego refreshBlips i createBlip z góry. Jeśli skrypt może się zrestartować, podczas gdy gracz jest online, też wołaj refreshBlips raz przy starcie z bieżącą pracą, ponieważ załadowane zdarzenie już się odbyło do tego czasu.
Ostrzeżenie: ukrycie znacznika na kliencie nie jest bezpieczeństwem. Gracz wciąż może go zobaczyć, jeśli poprawia klienta. Dla sekretu, takiego jak nielegalne schronienie, nie wysyłaj pozycji do klienta w ogóle, aż gracz to zarabia.
Inne typy znaczników
AddBlipForEntity(entity)śledzi pojazd lub pedę.SetBlipRoute(blip, true)rysuje trasę GPS do znacznika.SetBlipFlashes(blip, true)powoduje, że miga.
Lista kontrolna
| Symptom | Naprawa |
|---|---|
| Biała plama, bez ikony | Wołaj SetBlipSprite z prawidłowym numerem sprite'u |
| Znacznik nie ma nazwy lub złą nazwę | Użyj sekwencji trzech wołań nazwy po stworzeniu znacznika |
| Znacznik zbyt duży lub zbyt mały | Dostosuj SetBlipScale (1.0 to normalne) |
| Koło promienia ukrywa mapę | Obniż to z SetBlipAlpha |
| Duplikaty po restarcie skryptu | RemoveBlip w onResourceStop |
| Znacznik musi pokazać tylko dla jednej pracy | Stwórz i usuń na zdarzeniach aktualizacji pracy |
Szybkie odpowiedzi
Dlaczego mój znacznik pokazuje złą nazwę lub brak nazwy?
Nazwa musi być ustawiona z BeginTextCommandSetBlipName('STRING'), AddTextComponentSubstringPlayerName(name) i EndTextCommandSetBlipName(blip), w tej kolejności, po tym jak znacznik istnieje.
Jak usunąć znacznik?
Wołaj RemoveBlip(blip) z uchwytem, który przechowałeś, gdy go tworzyłeś. Jeśli nie przechowałeś uchwytu, nie możesz usunąć ten znacznik.
Jak pokazać znacznik tylko dla jednej pracy?
Utwórz go, gdy praca gracza pasuje, i usuń go, gdy praca się zmienia. Zrób to ze zdarzenia aktualizacji pracy struktury, ponieważ znacznik jest tworzony na kliencie.
Skrypty bez tego problemu
Shop CreatorZbuduj sklep w niecałą minutę — właściciele, pracownicy, sejfy i napady w zestawie.Zobacz skrypt →
Advanced BoostingBoosting pojazdów z tabletu: kontrakty od klasy D do S+, ekipy i kolejka na żywo.Zobacz skrypt →
Quest CreatorWizualny edytor questów i dialogów z NPC, budowanych węzeł po węźle w grze.Zobacz skrypt →