ox_inventory öğe meta verisi: AddItem, Search, SetMetadata ve benzersiz öğeler

ox_inventory'de meta veriler kullanma: veri ile öğe ekleme, yuvalar arama ve okuma, SetMetadata ile güncelleme, özel etiket ve açıklama gösterme ve kimlikler ve anahtarlar gibi benzersiz öğeler yapma.

ox_inventory'deki bir öğe bir ad ve sayımdır. Aynı adın iki öğesinin farklı olması gerektiğinde, örneğin bir plaka için bir araba anahtarı ve başka birisi için bir anahtar gibi, meta veriler kullanırsınız: öğe ile depolanan bir tablo. Bu makale, meta veri ile bir öğe eklemeyi, yeniden bulup okudu ve güncelleştirme, görüntüleme ve kimlik ve anahtarlar gibi benzersiz öğeler oluşturmayı gösterir.

Meta veri ile Öğe Ekleme

AddItem'nin dördüncü argümanı meta veri tablosudur:

lua
exports.ox_inventory:AddItem(source, 'car_key', 1, {
    plate = 'ABC 123',
    label = 'Key ABC 123',
    description = 'Opens the car with plate ABC 123.',
})

İmza AddItem(inventory, item, count, metadata)'dir. inventory bir oyuncu envanteri için oyuncu kimlikleridir. Eklediğiniz herhangi bir anahtar yuvada depolanır ve daha sonra yeniden okuyabilirsiniz. Meta veriler küçük tutun ve düz verilerden yapılmış: dizeler, sayılar, boole değerleri ve basit tablolar.

İpucu: Öğe data/items.lua içinde bulunmalıdır, örneğin car_key. ox_inventory'ye öğe ekleme bölümüne bakın.

Oyuncuya Gösterme

Birkaç meta veri anahtarı envanteri ne gösterir değiştirir:

Anahtar Etki
label Envanterden öğe adını değiştirir
description Öğe açıklamasını değiştirir
image Simgeyi değiştirir, web/images içinde bir görüntü adı kullanarak
lua
exports.ox_inventory:AddItem(source, 'id_card', 1, {
    label = 'ID card: Jane Doe',
    description = 'Born 1994-05-12',
    image = 'id_card',
})

Tabloya koyduğunuz her şey depolanır ancak gösterilmez, öğenin kendi tanımı onu görüntülemediğçi sürece. Oyuncuların öğeleri bir bakışta ayırt etmesi gerektiğinde benzersiz bir label kullanın.

Öğeleri Arama

Search bir envanteri içinde öğeleri bulur. 'count' ile kaç tane olduğunu döndürür, 'slots' ile yuvaları döndürür:

lua
local count = exports.ox_inventory:Search(source, 'count', 'car_key')

local slots = exports.ox_inventory:Search(source, 'slots', 'car_key')
for _, slot in pairs(slots) do
    print(slot.slot, slot.metadata and slot.metadata.plate)
end

Meta veriye göre de filtreleyebilirsiniz. Dördüncü argüman olarak bir tablo geçin:

lua
local keys = exports.ox_inventory:Search(source, 'slots', 'car_key', { plate = 'ABC 123' })
if #keys > 0 then
    -- the player has the key for that plate
end

Bu, sahipliği kontrol etmenin standart yoludur: sunucuda yapın, güvendiğiniz verilerle, hiçbir zaman istemci mesajından.

Bir Yuva Okuma

Yuva numarasını biliyorsanız, GetSlot o yuvaya verileri döndürür:

lua
local slot = exports.ox_inventory:GetSlot(source, 5)
if slot and slot.name == 'car_key' then
    print(slot.metadata.plate)
end

Yalnızca öğeyi bildiğinizde, GetSlotWithItem kullanın:

lua
local slot = exports.ox_inventory:GetSlotWithItem(source, 'car_key', { plate = 'ABC 123' })

Her ikisi de hiçbir şey eşleşmediğinde nil döndürür, bu nedenle slot.metadata okumadan önce sonucu kontrol edin. Yuva ayrıca slot.count ve slot.weight vardır.

SetMetadata ile Meta Veriler Güncelleme

Mevcut bir yuvayı değiştirmek için, örneğin bir anahtarı kopyalanmış olarak işaretlemek veya bir öğede kalan şarjları azaltmak için, SetMetadata kullanın:

lua
local slot = exports.ox_inventory:GetSlotWithItem(source, 'battery')
if slot then
    local metadata = slot.metadata or {}
    metadata.charge = (metadata.charge or 100) - 10
    exports.ox_inventory:SetMetadata(source, slot.slot, metadata)
end

SetMetadata(inventory, slot, metadata) yuvaya meta veriler verdiğiniz tabloyla değiştirir. Mevcut tabloyu ilk kopyalayın, bir alanı değiştirin ve tüm tabloyu geri gönderin, yoksa diğer anahtarları silebilirsiniz.

Benzersiz Öğeler: Kimlikler, Anahtarlar, Lisanslar

Benzersiz bir öğe için iki şey istiyorsunuz: yığınlanmayan bir öğe ve onu tanımlayan meta veri.

lua
-- data/items.lua
['id_card'] = {
    label = 'ID card',
    weight = 10,
    stack = false,
    close = true,
},
lua
-- server: give it at character creation
exports.ox_inventory:AddItem(source, 'id_card', 1, {
    firstname = 'Jane',
    lastname = 'Doe',
    dob = '1994-05-12',
    label = 'ID card: Jane Doe',
})

Farklı meta veriye sahip öğeler yığınlanmaz, bu nedenle iki farklı araba için iki anahtar her zaman iki yuva alır ve stack = false hiçbir zaman olmaması gereken öğeleri açıklar.

Öğe kullanıldığında verileri okumak için, öğede sunucu ihracatı kaydedin:

lua
-- data/items.lua
['id_card'] = {
    label = 'ID card',
    weight = 10,
    stack = false,
    server = { export = 'my_script.id_card' },
},
lua
-- my_script/server.lua
exports('id_card', function(event, item, inventory, slot, data)
    if event == 'usingItem' then
        local info = exports.ox_inventory:GetSlot(inventory.id, slot)
        if info and info.metadata then
            print(info.metadata.firstname, info.metadata.lastname)
        end
    end
end)

event argümanı kullanımın aşamasını söyler. Tam argümanlar ox_inventory sürümünüze bağlıdır, bu nedenle ihracat çağrılmazsa sürümünüz için belgeleri kontrol edin.

Dikkat Edilecek Şeyler

  • Meta veri yuvada yaşar. Oyuncu öğeyi düşürür veya değiştirdiğinde, bununla hareket eder ve şeye erişme hakkını kanıtlayan öğedir.
  • Meta verilere gizli koymayın. Oyuncular listelenmemiş anahtarları görmez, ancak bunları veri olarak, koruma değil olarak davranır.
  • Büyük meta veri tablolarına sahip birçok öğe envanter kaydetmeyi yavaşlatır. Bir kimliği saklayın ve ağır verileri kendi veritabanı tablonuzda tutun.
  • İstemci tarafında ayarlanan meta veri güvenilir değildir. Her zaman AddItem ve SetMetadata sunucu kodundan çağırın.

Kontrol Listesi

Belirti Çözüm
İki anahtar bir yığına birleşir Aynı meta veriye sahipler; plate gibi benzersiz bir alan ekleyin
Etiket değişmez label'ı meta veri tablosunun içine koyun, items.lua içine değil
Search hiçbir şey bulamaz Doğru öğe adını geçirin ve meta veri filtresini bir tablo olarak
SetMetadata diğer alanları sildi Mevcut meta veri kopya, bir anahtar değiştirme, tüm tabloyu geri gönderme
slot.metadata nil'dir Yuva var olduğunu kontrol edin ve metadata'yı nil kontrolünden sonra okuyun
Öğe verileri oyuncular tarafından düzenlendi AddItem ve SetMetadata'yı yalnızca sunucuda çalıştırın

Kısa yanıtlar

ox_inventory'de meta veri nedir?

Bir öğe yuvası üzerinde depolanan ek verilerin tablosu. Aynı ada sahip iki öğenin farklı olmasını sağlar, örneğin iki farklı arabanın anahtarı veya farklı kişiler için bir kimlik kartı.

Bir öğe üzerinde özel metin nasıl gösteririm?

Öğeyi eklediğinizde meta veriler içinde label, description veya image ayarlayın. ox_inventory bunları öğenin varsayılan metni yerine gösterir.

Farklı meta veriye sahip öğeler yığılır mı?

Hayır. İki öğe yalnızca meta verileri aynı olduğunda yığılır, bu nedenle benzersiz meta veriye sahip öğeler her biri bir yuva alır.

Bu sorunu yaşatmayan scriptler

Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →

Okumaya devam edin