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:
['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:
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:
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:
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
endAddItem 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:
if Player.Functions.AddItem('lockpick', 1) then
-- reward given
else
TriggerClientEvent('QBCore:Notify', source, 'Your inventory is full', 'error')
endAddItem 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:
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:
RemoveItemtrue 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
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:
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.

