QBCore kullanılabilir öğeler: CreateUseableItem, AddItem ve RemoveItem

QBCore'da CreateUseableItem ile öğeyi kullanılabilir yapın, Player.Functions.AddItem ve RemoveItem ile verin ve kaldırın, öğe kutusu gösterin ve QBox'ta ne değişir.

QBCore'da, kullanılabilir bir öğe öğe adına kaydedilen sunucu işlevidir. Oyuncu envanterinizde öğeyi kullandığında, işlev çalışır. Bu makale kaydı, öğe veren, kaldıran ve kontrol eden işlevleri, öğe kutusu bildirimini ve QBox'ta ne farklı olduğunu kapsar.

Öğe önce mevcut olmalı

QBCore öğeleri qb-core/shared/items.lua'da tanımlanır. Kullanılabilir bir öğenin useable = true gerekir:

lua
['burger'] = {
    name = 'burger',
    label = 'Burger',
    weight = 200,
    type = 'item',
    image = 'burger.png',
    unique = false,
    useable = true,
    shouldClose = true,
    description = 'A warm burger.',
},

Anahtar ve name aynı olmalıdır. image envanterin resimler klasöründe bir dosyadır. Tam öğe biçimi için adding items on QBCore bölümüne bakın.

Kullanılabilir öğeyi kaydedin

Sunucuda, betiğinizde:

lua
local QBCore = exports['qb-core']:GetCoreObject()

QBCore.Functions.CreateUseableItem('burger', function(source, item)
    local Player = QBCore.Functions.GetPlayer(source)
    if not Player then return end

    if Player.Functions.RemoveItem('burger', 1) then
        TriggerClientEvent('my_script:eatBurger', source)
    end
end)

Geri çağırma oyuncu kimliğini ve öğe verilerini alır. Öğeyi kaldırmaz, bu nedenle kendiniz kaldırırsınız ve yalnızca kaldırma işe yarıyorsa efekti çalıştırırsınız. QBCore burada nil ise, bkz. the GetCoreObject fix.

İstemci olayı yalnızca efekti çalar:

lua
RegisterNetEvent('my_script:eatBurger', function()
    -- animation, progress bar, hunger update
end)

Öğe ekleyin, kaldırın ve kontrol edin

Bunlar sunucuda her zaman kullandığınız oyuncu işlevleridir:

lua
local Player = QBCore.Functions.GetPlayer(source)

-- give
Player.Functions.AddItem('burger', 2)

-- remove
Player.Functions.RemoveItem('burger', 1)

-- check
local item = Player.Functions.GetItemByName('burger')
if item and item.amount >= 1 then
    -- the player has at least one
end

AddItem ve RemoveItem çalıştıkça true döndürür ve çalışmadıklarında false döndürür, örneğin envanter dolu veya öğe eksik. Devam etmeden önce her zaman sonucu kontrol edin:

lua
if Player.Functions.AddItem('lockpick', 1) then
    -- reward given
else
    TriggerClientEvent('QBCore:Notify', source, 'Your inventory is full', 'error')
end

AddItem isteğe bağlı slot ve info argümanlarını da alır, burada info öğede seri numarası gibi ekstra veri taşır.

Öğe kutusu

Oyuncu öğe aldığında veya kaybettiğinde, envanter genellikle öğe resmini içeren küçük bir kutu gösterir. qb-inventory'de bunu istemci olayı ile tetiklersiniz:

lua
TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items['burger'], 'add', 2)
TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items['burger'], 'remove', 1)

Olay adı ve argümanları envanter sürümleri arasında farklılık gösterebilir ve bazı sürümler kutuyu AddItem içinde kendi başlarına gösterir. Sunucunuzdaki mevcut betiğin onu nasıl çağırdığına bakın ve bunu kopyalayın. Otomatik kutu üzerine çağırmak bildirimi iki kez gösterir.

İpucu: RemoveItem true döndüğü sonrasında efekti yapın. Animasyonu ilk çalan ve öğeyi daha sonra kaldıran betik, kaldırma başarısız olduğunda oyunculara ücretsiz hamburger verir.

Örnek: başka bir öğeden birini oluşturun

lua
RegisterNetEvent('my_script:makeBandage', function()
    local src = source
    local Player = QBCore.Functions.GetPlayer(src)
    if not Player then return end

    local cloth = Player.Functions.GetItemByName('cloth')
    if not cloth or cloth.amount < 2 then
        return TriggerClientEvent('QBCore:Notify', src, 'You need 2 cloth', 'error')
    end

    if Player.Functions.RemoveItem('cloth', 2) then
        if not Player.Functions.AddItem('bandage', 1) then
            Player.Functions.AddItem('cloth', 2) -- give the cloth back
        end
    end
end)

Tüm kontroller sunucuda çalışır. Bu fikir hakkında daha fazla bilgi için, bkz. securing server events.

QBox'ta

QBox'un çekirdeği qbx_core'dur. Kullanılabilir öğe kaydının kendi dışa aktarımı vardır:

lua
exports.qbx_core:CreateUseableItem('burger', function(source, item)
    -- same idea: remove the item, then trigger the effect
end)

QBox sunucuları ox_inventory kullanır, bu nedenle ikinci seçeneğiniz vardır: efekti ox_inventory/data/items.lua'da öğenin içine koyun, bir client veya server dışa aktarımı ile. Bu yol how to add items to ox_inventory bölümünde açıklanır. qb-core betikleri için uyumluluk katmanı da QBCore.Functions.CreateUseableItem'ı işler, bu nedenle eski betik çalışmaya devam eder. Öğeler QBox'ta shared/items.lua'da değil ox_inventory'nin items.lua'sında var olmalıdır.

Kontrol listesi

Belirtisi Çözüm
Öğeyi kullanırken hiçbir şey olmaz CreateUseableItem ile kaydedin ve useable = true ayarlayın
Öğe kaldırılmadı Geri çağırma Player.Functions.RemoveItem çağırmalıdır
AddItem false döndürür Bilinmeyen öğe, envanter dolu veya çok ağır
Öğe kutusu iki kez gösterilir Envanteriniz zaten gösterir; ekstra olayı kaldırın
GetItemByName nil Oyuncunun öğesi yok; amount okumadan önce kontrol edin
QBox kullanılabilir öğe yoksayıldı exports.qbx_core:CreateUseableItem veya ox_inventory öğe dışa aktarımını kullanın

Kısa yanıtlar

QBCore'da bir öğeyi nasıl kullanılabilir yapabilirim?

Sunucuda QBCore.Functions.CreateUseableItem('itemname', function(source, item) ... end) ile kaydedin ve shared/items.lua'da öğede useable = true ayarlayın.

QBCore'da bir oyuncunun öğesi var mı kontrol edebilirim?

Player.Functions.GetItemByName('itemname') kullanın. Oyuncu öğeyi sahip olduğunda amount ile öğe tablosunu döndürür, yoksa nil.

CreateUseableItem QBox'ta çalışır mı?

Evet. QBox'un exports.qbx_core:CreateUseableItem vardır, ve ox_inventory ile de öğenin kendi client veya server dışa aktarımını kullanabilirsiniz.

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