QBCore usable Items: CreateUseableItem, AddItem und RemoveItem

Mache ein Item usable auf QBCore mit CreateUseableItem, gib es mit Player.Functions.AddItem und RemoveItem, zeige die Item-Box, und was ändert sich auf QBox.

Auf QBCore ist ein usables Item eine Server-Funktion, die unter einem Item-Namen registriert ist. Wenn der Spieler das Item im Inventar verwendet, läuft die Funktion. Dieser Artikel behandelt die Registrierung, die Funktionen, die Items geben, entfernen und überprüfen, die Item-Box-Benachrichtigung, und was auf QBox anders ist.

Das Item muss zuerst existieren

QBCore Items sind in qb-core/shared/items.lua definiert. Ein Item, das usable ist, benötigt useable = true:

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

Der Schlüssel und das name müssen gleich sein. Das image ist eine Datei in deinem Inventory's Images-Ordner. Für das vollständige Item-Format, siehe Items in QBCore hinzufügen.

Registriere das usable Item

Auf dem Server, in deinem Script:

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)

Der Callback erhält die Spieler-ID und die Item-Daten. Es entfernt das Item nicht, also entfernst du es selbst und führst die Aktion nur aus, wenn das Entfernen funktioniert. Wenn QBCore hier nil ist, siehe die GetCoreObject Behebung.

Das Client-Event spielt nur die Aktion ab:

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

Items hinzufügen, entfernen und überprüfen

Dies sind die Spieler-Funktionen, die du die ganze Zeit verwendest, auf dem Server:

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 und RemoveItem geben true zurück, wenn sie funktioniert haben, und false, wenn nicht, zum Beispiel, weil das Inventar voll ist oder das Item fehlt. Überprüfe immer das Ergebnis, bevor du fortsetzt:

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

AddItem nimmt auch optionale slot und info Argumente, wobei info zusätzliche Daten auf dem Item trägt, wie eine Seriennummer.

Die Item-Box

Wenn der Spieler ein Item erhält oder verliert, zeigt das Inventar normalerweise eine kleine Box mit dem Item-Bild. In qb-inventory triggert du es mit einem Client-Event:

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

Der Event-Name und die Argumente können sich zwischen Inventory-Versionen unterscheiden, und einige Versionen zeigen die Box von selbst in AddItem. Schaue, wie ein bestehendes Script in deinem Server es aufruft, und kopiere das. Wenn du es auf eine automatische Box aufrufst, zeigt sich die Benachrichtigung zweimal.

Tipp: Mache die Aktion nur, nachdem RemoveItem true zurückgibt. Ein Script, das die Animation zuerst abspielt und das Item später entfernt, gibt Spieler kostenlose Burger, wenn das Entfernen fehlschlägt.

Ein Beispiel: erstelle ein Item aus einem anderen

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)

Alle Überprüfungen laufen auf dem Server. Für mehr zu dieser Idee, siehe sichere Server-Events.

In QBox

Der Core von QBox ist qbx_core. Die usable Item-Registrierung hat ihren eigenen Export:

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

QBox-Server verwenden ox_inventory, also hast du eine zweite Option: Lege die Aktion in das Item selbst, in ox_inventory/data/items.lua, mit einem client oder server Export. Dieser Weg wird erklär in wie man Items zu ox_inventory hinzufügt. Die Kompatibilitätsebene für qb-core Scripts handhabt auch QBCore.Functions.CreateUseableItem, also funktioniert ein älteres Script weiterhin. Items müssen in ox_inventory's items.lua auf QBox existieren, nicht in shared/items.lua.

Checkliste

Symptom Behebung
Nichts passiert bei Verwendung des Items Registriere es mit CreateUseableItem und setze useable = true
Item nicht entfernt Der Callback muss Player.Functions.RemoveItem aufrufen
AddItem gibt false zurück Unbekanntes Item, Inventar voll, oder zu schwer
Item-Box wird zweimal angezeigt Dein Inventar zeigt es bereits; entferne das zusätzliche Event
GetItemByName ist nil Der Spieler hat das Item nicht; überprüfe, bevor du amount liest
QBox usables Item ignoriert Verwende exports.qbx_core:CreateUseableItem oder den ox_inventory Item-Export

Kurze Antworten

Wie mache ich ein Item usable in QBCore?

Registriere es auf dem Server mit QBCore.Functions.CreateUseableItem('itemname', function(source, item) ... end), und setze useable = true auf das Item in shared/items.lua.

Wie überprüfe ich, ob ein Spieler ein Item in QBCore hat?

Verwende Player.Functions.GetItemByName('itemname'). Es gibt die Item-Tabelle mit ihrer amount zurück, oder nil wenn der Spieler sie nicht hat.

Funktioniert CreateUseableItem auf QBox?

Ja. QBox hat exports.qbx_core:CreateUseableItem, und mit ox_inventory kannst du auch den client oder server Export des Items selbst verwenden.

Scripts ohne dieses Problem

Item Creator V2Erstelle nutzbare Items mit Animationen, Props, Effekten und mehr — ganz ohne Code.Script ansehen →Shop CreatorBau einen Shop in unter einer Minute — Besitzer, Angestellte, Tresore und Überfälle inklusive.Script ansehen →

Weiterlesen