ox_inventory silahlar ve mühimmat: data/weapons.lua ve silahlar kayboluyor
ox_inventory ile yeniden bağlandıktan sonra silahlar kayboluyor mu? Silahlar öğe olarak nasıl çalışır: data/weapons.lua, mühimmat öğeleri, dayanıklılık, WEAPON_PISTOL için AddItem ve eklentiler.
Bir oyuncuya yönetici menüsü veya iş betiği ile tabanca verirsiniz. Bağlantıları keser, geri gelirler ve tabanca gitmişdir. ox_inventory ile silahlar ayrı yükleme değil: öğelerdir ve öğe olmayan herhangi bir şey kaldırılır. Bu makale silahlar ve mühimmatın nasıl çalıştığını, bunları doğru şekilde nasıl vereceğini ve dayanıklılık ve eklentileri nereden ayarlayacağını açıklar.
Silahlar Öğelerdir
ox_inventory'de silahın öğe adı hash adıdır, örneğin WEAPON_PISTOL. ox_inventory/data/weapons.lua içinde tanımlanır, items.lua içinde değil. Dosya üç grup döndürür:
return {
Weapons = {
['WEAPON_PISTOL'] = {
label = 'Pistol',
weight = 1130,
durability = 0.1,
},
-- ...
},
Components = {
-- attachments
},
Ammo = {
-- ammo definitions
},
}Dosyayı yüklemenizde açın: her varsayılan silahın hazır bir girdisi vardır ve bu sürümünüzün tam alanları için referanstır. Weapons içinde eksik bir silah basitçe geçerli bir öğe değildir.
Silahlar Neden Yeniden Bağlantıda Kayboluyor
Eski ESX ve QBCore betikleri GiveWeaponToPed gibi yerleşik veya ESX'in xPlayer.addWeapon ile silah verirler. Bu silahı bu oturum için ped'in eline koyar, ancak öğe değildir ve hiçbir şey kaydetmez. ox_inventory ayrıca envanterinde olmayan silahları kaldırır, bu nedenle yeniden bağlanmada veya daha erken kayboluyor.
Çözüm sunucu'dan silah vermektir:
local success = exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1)
if not success then
print('Could not give the weapon: inventory full or unknown weapon')
endYerleşik, addWeapon veya Player.Functions.AddItem('weapon_pistol', ...) ile silah veren her komut dosyası çağrısını büyük harf silah adı ile AddItem çağrısı ile değiştirin. Yalnızca yerleşik gibi çalışan betik, örneğin elde silah oluşturan dükkan, ox_inventory kullanan sunucuda çalışmadan önce bu değişikliğe ihtiyaç duyar.
İpucu: Silah adları öğe listelerinde büyük/küçük harfe duyarlı ve
WEAPON_PISTOLox_inventory'nin kullandığı formdur.weapon_pistolgönderen eski betik bu nedenle başarısız olabilir.
Mühimmat Öğeleri
Mühimmat da bir öğedir. Mühimmat türü bir silahın girdisinde ammoname tarafından adlandırılır, örneğin 9 mm için ammo-9:
exports.ox_inventory:AddItem(source, 'ammo-9', 60)Bir oyuncu kabul eden silah ile mühimmat öğesini kullandığında, ox_inventory bunu silahında yükler ve silah mühimmat sayısını meta verilerinde tutar. Mühimmat yüklenmediğinde envanterinde öğe olarak görünür.
Öğe adlarını sürümünüzde data/items.lua ve data/weapons.lua içinde kontrol edin. Model ammo-<type>'dir, örneğin ammo-9, ammo-rifle, ammo-shotgun ve var olmayan bir öğe eklenemez.
Dayanıklılık ve Bozulma
Silahlar ateş edildiğinde aşınır. Silah girdisindeki durability değeri ne kadar hızlı: daha yüksek sayı daha hızlı bozulma anlamına gelir. Sıfır dayanıklılığa sahip silah onarılana kadar çalışmaz.
['WEAPON_PISTOL'] = {
label = 'Pistol',
weight = 1130,
durability = 0.05,
},Silahı daha uzun süre tutması için sayıyı düşürün. Onarım bir oyun seçimidir: birçok sunucu bir onarım öğesi, bir el sanatı tarifsesi veya bir teknisyen kullanır ve SetMetadata ile dayanıklılığı geri ayarlayabilirsiniz (ox_inventory'de öğe meta verileri bölümüne bakın).
Eklentiler (Bileşenler)
Flaş ışığı, susturucu veya şarjör gibi eklentiler Components grubunda listelenen öğelerdir ve items.lua içinde kendi girdileri vardır. Oyuncu, silah donanımlandırılırken bir tane kullanarak takır. Bileşen silah öğesinde depolanır, bu nedenle yeniden bağlantıdan sağ kalır.
Eklenti hiçbir şey yapmaz ise, şu üç şeyi kontrol edin:
- bileşen öğesi
data/items.luaiçinde var - bu silah için
data/weapons.luaiçinde listelenir - bileşen kullanıldığında silah donanımlanır
Ayrıca sunucu'dan silah meta verileri aracılığıyla bir bileşen ekleyebilirsiniz, örneğin önceden oluşturulmuş bir silah sattığınızda, ancak normal tabanca ile test edin, meta veri biçimi sürümünüze bağlıdır.
Dükkanlarında Silah Satma
Silahlar herhangi bir öğe gibi dükkan içinde görünür, aynı adla:
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },Kalan dükkan biçimi için ox_inventory dükkanları bölümüne bakın. Bir dükkan betiği hala yerleşik silah veriyorsa, yukarıda gösterilen değişikliğe ihtiyaç duyar.
Silahları Dokunun Diğer Betikler
Yönetici menüleri, polis betikleri, yükleme betikleri ve çete sistemleri genellikle yerleşik kullanırlar. Kaynakları bu çağrılar için arayın ve değiştirin:
GiveWeaponToPed(...)
GiveDelayedWeaponToPed(...)
xPlayer.addWeapon(...)Kaynaklar klasörünü addWeapon ve GiveWeaponToPed için arayın, ardından her sonucu exports.ox_inventory:AddItem'e geçin. Hepsi için bunu bir kez yaparsanız, silahlar kayboluyor.
Kontrol Listesi
| Belirti | Çözüm |
|---|---|
| Silah yeniden bağlantıda kayboluyor | Öğe değildi; exports.ox_inventory:AddItem ile verin |
AddItem yanlış döndürür |
Bilinmeyen ad, envanter dolu veya çok ağır |
| Silah çalışmıyor | Ad büyük harf olmalı, örneğin WEAPON_PISTOL ve data/weapons.lua içinde var |
| Kullanıldıktan sonra mühimmat yok | Silahın ammoname ve mühimmat öğe adını kontrol edin |
| Silah çok hızlı kırılıyor | data/weapons.lua içinde durability düşürün |
| Eklenti hiçbir şey yapmaz | Bileşen öğesi ve silah girdisi eşleşmelidir, silah donanımlanır |
Kısa yanıtlar
ox_inventory ile yeniden bağlandığımda silahlarım neden kayboluyor?
Silah yerleşik olarak değil öğe olarak ped'e verildi. ox_inventory yalnızca envanterinizde öğe olan silahları tutar, bu nedenle başka bir şekilde verilen herhangi bir şey kaybolur.
ox_inventory ile bir oyuncuya silah nasıl veririm?
Sunucu'da exports.ox_inventory:AddItem(source, 'WEAPON_PISTOL', 1) kullanın. Silah adı öğe adıdır, büyük harflerde.
Bir silahın ağırlığını veya dayanıklılığını nerede değiştiririm?
ox_inventory/data/weapons.lua içinde. Her silahın etiket, ağırlık ve dayanıklılığı olan bir girdisi vardır ve mühimmat ve bileşenler aynı dosyada tanımlanır.

