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:
No such export addBoxZone in resource ox_targetBu, 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:
ensure oxmysql
ensure ox_lib
ensure ox_target
ensure my_scriptAyrıca kaynağınızın fxmanifest.lua dosyasına da ekleyin, böylece FiveM betiği onsuz başlatmayı reddeder:
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:
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:
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:
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:
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:
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:
addLocalEntityyalnı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:
{
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:
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:
exports.ox_target:removeZone(zoneId)Modellere, varlıklara ve global hedeflere eklenen seçenekler, onlara verdiğiniz name ile kaldırılır:
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:
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.
coordsmerkezdir, 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
distancekadar yakın olması gerekir. - Bir kontrol başarısız oluyor. false döndüren bir
groupsveyacanInteract, 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 →