FiveM'de harita blipleri nasıl oluşturulur: AddBlipForCoord ve radius blipleri

AddBlipForCoord ile FiveM'de blip oluşturun: sprite, renk, ölçek, kısa menzil, ad etiketi, AddBlipForRadius ile radius blipleri, blipleri kaldırma ve yalnızca iş blipleri.

AddBlipForCoord çağırırsınız ve adı olmayan beyaz nokta veya adı "Blip" veya "NULL" olan blip veya betik durduktan sonra haritada kalan blip elde edersiniz. Blipleri çağrıların sırasını bilirseniz basittir. Bu makale birini oluşturma, adlandırma, yarıçap çizme, kaldırma ve blipleri yalnızca bir işe gösterme konusunda yardımcı olur.

Temel blip

Tüm blip yerleşikleri istemcide çalışır. Bu, bir konumda bir mağaza simgesi oluşturur:

lua
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)

Her çağrının yaptığı:

Yerleşik Amaç
AddBlipForCoord Blip'i oluşturur ve tutamak döndürür. Tutun.
SetBlipSprite Simge, sayı.
SetBlipDisplay Nerede gösterilir: 4 ana harita ve miniharittadır.
SetBlipScale Boyut. 1.0 normaldir.
SetBlipColour Renk, sayı.
SetBlipAsShortRange true miniharitada yalnızca yakın olduğunda gösterir.

Spriteler ve renkler için sayılar FiveM belgeleme sitesinde, oyun referanslarında, bliplerde listelenmiştir. Yukarıdaki 52 spriteı bir mağaza simgesidir. Yalnızca beyaz nokta görürseniz, sprite numarası yanlış veya eksikdir.

Adı ayarlayın

Harita ve duraklatma menüsünde gösterilen etiket basit bir dize argümanı değildir. Metin komut yerleşikleri aracılığıyla bu sırayla gider:

lua
BeginTextCommandSetBlipName('STRING')
AddTextComponentSubstringPlayerName('24/7 Shop')
EndTextCommandSetBlipName(blip)

Blip zaten var olmalı ve her üçünü de çağırmanız gerekir. Birini atlayın ve ad boştur veya varsayılan gösterir. Ad olmadan, blip efsanede "Blip" veya sprite tarafından görünür.

İpucu: bu çağrıları bir tablo alan işlevde koyun, bu nedenle her blip bir konfigde satırı, on yerleşik satırı yerine.

lua
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',
})

Kısa menzil veya daima görünür

SetBlipAsShortRange(blip, true), blip'in yalnızca oyuncu yakınken miniharitada gösterilmesini ve tam haritada hala görünür olmasını anlamına gelir. false ile, oyuncu nerede olursa olsun daima miniharitada gösterilir, kenar sıkıştırılmış. Mağazalar ve işler için kısa menzil kullanın ve ana hedef için false.

Radius blipleri

Radius blip'i, bir arama bölgesi veya turf gibi bir alan için renkli dairededir. AddBlipForRadius daire yapar ancak simge değil, bu nedenle her ikisini de istiyorsanız aynı yere normal blip ekleyin:

lua
local area = AddBlipForRadius(25.7, -1347.3, 29.5, 150.0)
SetBlipColour(area, 1)
SetBlipAlpha(area, 100)

Son argüman metre cinsinden yarıçaptır. Alfa (0 ila 255) ayarlayın düşük veya daire haritayı kaplar. Radius blip'i ayrı tutamakdır, bu nedenle ayrı olarak kaldırın.

Blipleri kaldırın

Daima tutamağı tutun ve blip artık gerekli olmadığında kaldırın:

lua
if DoesBlipExist(shopBlip) then
    RemoveBlip(shopBlip)
end

Blipleri kaynak durdurulduğunda veya güvenilir bir şekilde kaldırılmaz, bu nedenle işleyicide temizleyin. Olmadan, betiği yeniden başlatmak haritada yinelenenleri yığın:

lua
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)

Yalnızca iş blipleri

Blipleri her oyuncunun kendi istemcisinde oluşturulur, bu nedenle yalnızca iş blip'i anlamı: doğru iş için oluşturun, diğerleri için kaldırın. Oluşturdığunuz tablonun tutun ve iş değişikliklerine tepki verin.

ESX'de:

lua
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)

QBCore'da (ve uyumluluk katmanı aracılığıyla QBox):

lua
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)

Her ikisi yukarıdaki refreshBlips ve createBlip aynısını kullanır. Betik oyuncu çevrimiçiyken yeniden başlayabilirse, yüklenen olayı zaten o zaman geçtiğinden mevcut işle başlangıçta refreshBlips bir kez çağırın.

Dikkat: istemcide blip'i gizlemek güvenlik değildir. Oyuncu, istemciyi yama alırsa yine de görebilir. Yasadışı gizli gibi gizli bir yer için, oyuncu bunu kazanana kadar istemciye konumu hiç göndermeyin.

Diğer blip türleri

  • AddBlipForEntity(entity) araç veya ped'i takip eder.
  • SetBlipRoute(blip, true) blip'e bir GPS rotası çizer.
  • SetBlipFlashes(blip, true) yanıp söner.

Kontrol Listesi

Semptom Çözüm
Beyaz nokta, simge yok Geçerli sprite numarası ile SetBlipSprite çağırın
Blip'in adı yok veya yanlış Blip'i oluşturduktan sonra üç çağrılı ad dizisini kullanın
Blip çok büyük veya çok küçük SetBlipScale ayarlayın (1.0 normaldir)
Radius çemberi haritayı gizliyor SetBlipAlpha ile düşürün
Betik yeniden başlatılmasından sonra yinelenenleri onResourceStop içinde RemoveBlip
Blip yalnızca bir iş için gösterilmelidir İş güncelleme olaylarında oluşturun ve kaldırın

Kısa yanıtlar

Blip'im neden yanlış ad veya ad gösterilmiyor?

Ad, blip var olduktan sonra, bu sırayla BeginTextCommandSetBlipName('STRING'), AddTextComponentSubstringPlayerName(name) ve EndTextCommandSetBlipName(blip) ile ayarlanmalıdır.

Blip'i nasıl kaldırırım?

Oluşturduğunuzda depoladığınız tutamakla RemoveBlip(blip) çağırın. Tutamağı tutmazsanız bu blip'i kaldıramazsınız.

Blip'i yalnızca bir işe nasıl gösterebilirim?

Oyuncunun işi eşleştiğinde oluşturun ve iş değiştiğinde kaldırın. Blip istemcide oluşturulduğundan çerçevenin iş güncelleme olayından yapın.

Bu sorunu yaşatmayan scriptler

Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →Advanced BoostingTabletten araç boosting: D’den S+ sınıfına kontratlar, ekipler ve canlı sıra.Scripti gör →Quest CreatorGörevler ve NPC diyalogları için oyun içinde düğüm düğüm kurulan görsel editör.Scripti gör →

Okumaya devam edin