ox_target addBoxZone, addModel ve addLocalEntity: hedef nasıl eklenir

FiveM'de ox_target etkileşimleri nasıl eklenir: seçenekler, gruplar, kaldırma ve debug ile addBoxZone, addSphereZone, addModel, addLocalEntity ve addGlobalVehicle.

Betiğinize bir hedef eklersiniz ve oyunda hiçbir şey görünmez. Ya da konsol şunu söyler:

text
No such export addBoxZone in resource ox_target

Bu, istemci tarafında ox_target için pratik bir rehberdir: bölge, model ve varlık export'ları, bunlara koyabileceğiniz seçenekler ve onları nasıl kaldırıp hata ayıklayacağınız.

ox_target'ın önce başladığından emin olun

Export'lar yalnızca ox_target çalışırken vardır ve ox_target'ın ox_lib'e ihtiyacı vardır. server.cfg içinde onları betiğinizden önce başlatın:

cfg
ensure oxmysql
ensure ox_lib
ensure ox_target

ensure my_script

Ayrıca kaynağınızın fxmanifest.lua dosyasına da ekleyin, böylece FiveM betiği onsuz başlatmayı reddeder:

lua
dependency 'ox_target'

Aşağıdaki tüm çağrılar istemci tarafındadır. Onları bir sunucu dosyasına değil, bir istemci dosyasına koyun.

Box bölgesi

Box bölgesi dünyada bir dikdörtgendir. Bir tezgah, bir kapı veya bir ATM için doğru seçimdir:

lua
local zoneId = exports.ox_target:addBoxZone({
    coords = vec3(441.2, -981.9, 30.7),
    size = vec3(1.5, 1.0, 2.0),
    rotation = 90.0,
    debug = false,
    options = {
        {
            name = 'my_script_counter',
            icon = 'fa-solid fa-box',
            label = 'Open the counter',
            distance = 2.0,
            onSelect = function(data)
                print('selected', data.name)
            end,
        },
    },
})

coords kutunun merkezidir, size genişliği, uzunluğu ve yüksekliğidir, rotation ise onu dikey eksen etrafında döndürür. Bölgeyi daha sonra kaldıracaksanız dönen zoneId'yi saklayın.

Sphere bölgesi

Şekil önemli değilse, yalnızca "bu noktanın yakını" önemliyse sphere daha basittir:

lua
exports.ox_target:addSphereZone({
    coords = vec3(-1037.5, -2737.9, 20.2),
    radius = 1.5,
    options = {
        {
            name = 'my_script_sphere',
            icon = 'fa-solid fa-hand',
            label = 'Talk',
            onSelect = function()
                print('talking')
            end,
        },
    },
})

Modeller, varlıklar ve araçlar

Belirli bir modelin tüm nesnelerini, pedlerini veya araçlarını hedeflemek için addModel kullanın. Bir model adı veya hash'i ya da bunların bir listesini alır:

lua
exports.ox_target:addModel({ `prop_vend_soda_01`, `prop_vend_soda_02` }, {
    {
        name = 'my_script_vending',
        icon = 'fa-solid fa-bottle-water',
        label = 'Use the machine',
        distance = 1.5,
        onSelect = function(data)
            print('entity', data.entity)
        end,
    },
})

İstemcinizde zaten oluşturduğunuz tek bir varlığı hedeflemek için addLocalEntity kullanın:

lua
local ped = CreatePed(4, `a_m_m_business_01`, 441.2, -981.9, 29.7, 90.0, false, true)

exports.ox_target:addLocalEntity(ped, {
    {
        name = 'my_script_ped',
        icon = 'fa-solid fa-comment',
        label = 'Talk to him',
        onSelect = function(data)
            print('talk to', data.entity)
        end,
    },
})

Tüm araçlara seçenek eklemek için addGlobalVehicle kullanın. Pedler, oyuncular ve nesneler için başka global export'lar da vardır:

lua
exports.ox_target:addGlobalVehicle({
    {
        name = 'my_script_inspect',
        icon = 'fa-solid fa-magnifying-glass',
        label = 'Inspect vehicle',
        distance = 2.5,
        onSelect = function(data)
            print('vehicle', data.entity)
        end,
    },
})

İpucu: addLocalEntity yalnızca varlığı oluşturan istemcide geçerlidir. Diğer oyuncuların da seçeneği görmesi gereken ağ üzerindeki bir varlık için, varlığın network id'si ile ağ sürümünü (addEntity) kullanın.

Seçenek alanları

Her seçenek bir tablodur. En çok kullanacağınız alanlar şunlardır:

Alan Ne yapar
name Benzersiz bir ad. Seçeneği daha sonra kaldırmak için gerekir.
icon fa-solid fa-box gibi bir Font Awesome sınıfı.
label Oyuncuya gösterilen metin.
onSelect Oyuncu seçeneği seçtiğinde çağrılan fonksiyon.
distance Oyuncunun metre cinsinden ne kadar yakın olması gerektiği.
canInteract Seçeneği göstermek için true döndüren fonksiyon.
groups Seçeneği görmek için gereken meslek veya grup.

canInteract varlığı ve mesafeyi alır, böylece bir seçeneği herhangi bir koşula göre gizleyebilirsiniz:

lua
{
    name = 'my_script_repair',
    icon = 'fa-solid fa-wrench',
    label = 'Repair',
    distance = 2.0,
    canInteract = function(entity, distance, coords, name, bone)
        return GetVehicleEngineHealth(entity) < 900.0
    end,
    onSelect = function(data)
        print('repair', data.entity)
    end,
}

Meslekler için groups bir ad veya tablo alır ve ox_target'ın kendi framework desteği sayesinde ESX, QBCore ve QBox'ta çalışır:

lua
groups = 'police',
-- or several, optionally with a minimum grade
groups = { police = 0, sheriff = 2 },

Bölgeleri ve seçenekleri kaldırma

Bölgeler, çağrının döndürdüğü id ile kaldırılır:

lua
exports.ox_target:removeZone(zoneId)

Modellere, varlıklara ve global hedeflere eklenen seçenekler, onlara verdiğiniz name ile kaldırılır:

lua
exports.ox_target:removeModel({ `prop_vend_soda_01` }, 'my_script_vending')
exports.ox_target:removeLocalEntity(ped, 'my_script_ped')
exports.ox_target:removeGlobalVehicle('my_script_inspect')

Kaynağınız durduğunda temizlik yapın, yoksa yeniden başlatma geride kopyalar bırakabilir:

lua
AddEventHandler('onResourceStop', function(resource)
    if resource ~= GetCurrentResourceName() then return end
    exports.ox_target:removeZone(zoneId)
    exports.ox_target:removeLocalEntity(ped, 'my_script_ped')
end)

Görünmeyen bir bölgede hata ayıklama

Bölgede debug = true ayarlayın. ox_target şeklini dünyada çizer, böylece kutunun yanlış yerde mi, çok küçük mü yoksa zemine mi gömülü olduğunu hemen görürsünüz. Olağan nedenler:

  • Bölge yanlış yerde. coords merkezdir, bu yüzden z değeri zemin seviyesinde olan bir kutunun yarısı yerin altındadır. Yüksekliğinin yarısı kadar yukarı kaldırın.
  • Mesafe çok küçük. Oyuncunun seçeneği görmesi için bölgeye distance kadar yakın olması gerekir.
  • Bir kontrol başarısız oluyor. false döndüren bir groups veya canInteract, seçeneği hiçbir hata vermeden gizler. Test etmek için geçici olarak kaldırın.
  • İki hedef sistemi çalışıyor. qb-target da başlatılmışsa, qb-target ve ox_target yazısına bakın.

Varsayılan olarak hedefleme gözünü açmak için bir tuşu (Sol Alt) basılı tutarsınız, bu yüzden onu basılı tutarak test edin.

Kontrol listesi

Belirti Çözüm
No such export addBoxZone in resource ox_target ox_target'ı (ve ox_lib'i) betiğinizden önce başlatın
Seçenek hiç görünmüyor debug = true açın, distance, groups ve canInteract'i kontrol edin
Bölgenin yarısı yerin altında coords merkezdir: z'yi kutu yüksekliğinin yarısı kadar artırın
Seçenek herkese görünüyor groups veya bir canInteract kontrolü ekleyin
Betiği yeniden başlatınca kopyalar oluşuyor Bölgeleri ve seçenekleri onResourceStop içinde kaldırın
Tek bir seçeneği kaldırmak gerekiyor Ona bir name verin ve eşleşen remove... export'unu çağırın

Kısa yanıtlar

Kendi betiğimden nasıl ox_target bölgesi eklerim?

İstemcide exports.ox_target:addBoxZone({ coords = ..., size = ..., rotation = ..., options = { ... } }) çağırın. Bir id döndürür; bölgeyi daha sonra kaldırabilmek için onu saklayın.

Bir seçeneği yalnızca bazı mesleklere nasıl gösteririm?

Seçenekte groups kullanın, örneğin groups = 'police', birden fazla meslek için de bir tablo. Daha özel durumlar için canInteract içinden true veya false döndürün.

Hedefim neden görünmüyor?

Genellikle oyuncu seçeneğin distance mesafesinin dışındadır, bir groups veya canInteract kontrolü başarısız olur ya da ox_target betiğinizden önce başlatılmamıştır. Şeklini görmek için bölgede debug = true açı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 →Quest CreatorGörevler ve NPC diyalogları için oyun içinde düğüm düğüm kurulan görsel editör.Scripti gör →Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →

Okumaya devam edin