ox_inventory dükkanları: data/shops.lua, RegisterShop ve simgeler
ox_inventory'de dükkan oluşturma: data/shops.lua girdisi, fiyatlar ve para birimi, konumlar ve hedefler, iş kilitli dükkanlar, başka kaynaktan RegisterShop ve simgeler.
ox_inventory'deki bir dükkan fiyatlı öğelerin bir listesidir ve oyuncuların onu açabileceği bir veya daha fazla yerdir. Bir dosyayı düzenleyebilir veya dükkanı kendi kaynağınızdan kaydedebilirsiniz. Bu makale ikisini de kapsar, artı fiyatlar, para birimleri, iş kısıtlamaları, ox_target ve simgeler.
data/shops.lua içinde Dükkan Girdisi
ox_inventory/data/shops.lua'yı açın. Her dükkan dükkan türüne göre anahtarlanmış bir tablodur:
return {
General = {
name = 'Shop',
inventory = {
{ name = 'burger', price = 10 },
{ name = 'water', price = 5, count = 50 },
{ name = 'lockpick', price = 150 },
},
locations = {
vec3(25.7, -1347.3, 29.5),
},
},
}Anahtar (General) dükkan türüdür. Alanlar:
| Alan | Anlam |
|---|---|
name |
Dükkânın üstünde gösterilen başlık |
inventory |
Satılık öğeler |
locations |
Oyuncuların dükkanı açabileceği koordinatlar |
targets |
Aynı fikir, ancak ox_target kutuları (aşağıya bakın) |
groups |
Dükkanı kullanmasına izin verilen işler |
blip |
Harita simgesi ayarları |
Dosyalı kopyanızdaki varsayılan girdileri kontrol edin: sürümünüzün desteklediği tam alanları gösterir ve başlamanın en iyi yolu birini kopyalamak ve değiştirmektir.
Dikkat:
inventoryiçindeki her öğe adıdata/items.luaiçinde bulunmalıdır. Eksik bir öğe listeleyen bir dükkan açılmayabilir veya hata yazdırabilir. ox_inventory'ye öğe ekleme bölümüne bakın.
Öğeler, Fiyatlar ve Para Birimi
inventory'nin her satırı küçük bir tablodur:
inventory = {
{ name = 'water', price = 5 },
{ name = 'sandwich', price = 12, count = 20 },
{ name = 'lockpick', price = 150, currency = 'black_money' },
{ name = 'WEAPON_PISTOL', price = 2500, license = 'weapon' },
},pricebir birimin maliyetidir.countstoktur. Olmadan öğe sınırsız ve bununla stok oyuncuların alışveriş yaptığında azalır.currencybunu ödeyecek öğedir. Varsayılan olarak para veblack_moneyyaygın bir alternattir.licenseoyuncunun satın almasına izin vermeden önce bir lisans öğesini sorar.gradedükkangroupskullandığında, bir öğeyi minimum iş sıralaması kısıtlar.
Açılış: Konumlar ve Hedefler
locations ile, ox_inventory bu koordinatlarda bir etkileşim gösterir. targets ile, bunun yerine ox_target kutuları oluşturur, bu bir sayaç veya pencere için daha iyidir:
targets = {
{
loc = vec3(25.7, -1347.3, 29.5),
length = 0.7,
width = 0.5,
heading = 0.0,
minZ = 29.0,
maxZ = 31.0,
distance = 1.5,
},
},Dükkan buna bağlı olduğundan, bunun çalışması için ox_target çalışmış olmalıdır. Sadece ikisinden birini istiyorsanız, diğer tabloyu kaldırın.
İş Kilitli Dükkanlar ve Simgeler
groups kullanarak iş sınırlaması yapan bir dükkan, iş adları ve minimum dereceler kullanarak:
Police = {
name = 'Police armory',
groups = { police = 0 },
inventory = {
{ name = 'WEAPON_STUNGUN', price = 0 },
{ name = 'ammo-9', price = 0, count = 200 },
},
locations = { vec3(480.2, -996.5, 30.7) },
},Harita simgesi için, dükkan için bir blip tablosu ekleyin:
blip = { id = 59, colour = 69, scale = 0.8 },id sprite numarası ve colour renk numarasıdır. Sayılar GTA simgesi listelerinden gelir ve aynı fikir FiveM'de simge oluşturmada açıklanır. Dosya değişikliklerini uygulamak için ox_inventory yeniden başlatın.
Başka Kaynaktan Dükkan Kaydetme
Bir dükkan kendi betiğiniz tarafından oluşturulduğunda, örneğin bir işletme veya iş kaynağı, data/shops.lua düzenlemeyin. Sunucu'da kaydedin:
-- server.lua of your resource
exports.ox_inventory:RegisterShop('Bakery', {
name = 'Bakery',
inventory = {
{ name = 'bread', price = 4 },
{ name = 'croissant', price = 6, count = 30 },
},
locations = {
vec3(-1285.7, -1127.1, 6.8),
},
})RegisterShop(type, data) tür dizesi ve dosyadaki aynı tabloyu alır. Kaynak başladığında kaydedin. Eğer ox_inventory yeniden başlarsa, kaynağınız dükkanı yeniden kaydetmek zorundadır, bu nedenle ox_inventory için onServerResourceStart kaydı yapın:
AddEventHandler('onServerResourceStart', function(resource)
if resource == 'ox_inventory' then
registerMyShops()
end
end)İstemci'den Dükkan Açma
Dükkan'da bir konum veya hedef istemiyorsanız veya kendi arayüzünüzden açmak istiyorsanız, istemci ihracatını kullanın:
exports.ox_inventory:openInventory('shop', { type = 'General', id = 1 })type dükkan anahtarı. id locations (veya targets) listesindeki konumun konumudur, 1'den başlayarak. Bir dükkan bir konuma sahipse, id = 1 kullanın. Kod tarafından kaydedilen konumu olmayan bir dükkan yalnızca türü ile açılır, bu nedenle id gerekli ise sürümünüzü test edin.
İpucu: Sunucu dükkanı açtığında yine de kontrol eder, bu nedenle bir istemci bu iş için iş dükkân satın alamaz.
Kodu Düzenlemeden Dükkanlar Yapma
Birçok dükkan kurar, Lua düzenleme tekrarlayıcı olur. Dükkan Yaratıcı oyun içinde dükkan oluşturmanızı sağlar.
Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.başlangıç €24,20Scripti gör →
Kontrol Listesi
| Belirti | Çözüm |
|---|---|
| Dükkan görünmez | data/shops.lua düzenledikten sonra ox_inventory yeniden başlatın |
| Dükkan boş açılır veya hatalar | inventory içindeki bir öğe data/items.lua'da eksik |
| Dükkânla etkileşim kuramaz | locations veya targets'i ve ox_target'ın çalıştığını kontrol edin |
| Yanlış para birimi | Öğe girdisinde currency ayarlayın |
| İş dükkanı herkese açık | groups = { job = grade } ekleyin |
| Kayıtlı dükkan yeniden başladıktan sonra kayboldu | ox_inventory başladığında RegisterShop yeniden çağırın |
Kısa yanıtlar
ox_inventory'de bir dükkan nereye eklerim?
ox_inventory/data/shops.lua içinde, bir ad, bir inventory listesi ve bir veya daha fazla locations veya targets olan yeni bir giriş olarak. Sonra ox_inventory yeniden başlatın.
Bir dükkan nakit yerine kara para alabilir mi?
Evet. Öğe girdisinde currency = 'black_money' ayarlayın ve dükkan varsayılan para yerine bu öğeyi ücretlendirir.
Kendi betiğimden bir dükkan nasıl oluşturabilirim?
Sunucu'da exports.ox_inventory:RegisterShop(type, data) çağırın, ardından istemci'den exports.ox_inventory:openInventory('shop', { type = type }) ile açın.
