Cómo añadir elementos en QBCore: items.lua, imágenes, CreateUseableItem

Añade un elemento personalizado a QBCore: la entrada qb-core/shared/items.lua y sus campos, la imagen en qb-inventory, dárselo, y hacerlo usable con CreateUseableItem.

Añadiste un elemento a tu servidor QBCore, y o no existe en el juego, no tiene icono, o no hace nada cuando se usa. Aquí está el camino completo: la entrada del elemento, la imagen, dárselo, y hacerlo usable.

1. La entrada del elemento

Abre qb-core/shared/items.lua. Los elementos son entradas en la tabla QBShared.Items, con clave por nombre. Añade el tuyo, con una coma después de la entrada anterior:

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

Lo que cada campo hace:

Campo Significado
name Nombre del elemento; debe coincidir con la clave, minúsculas, sin espacios
label Nombre mostrado a los jugadores
weight Peso de un elemento
type item para elementos normales, weapon para armas
image Nombre de archivo del icono, extensión incluida
unique true si cada copia es su propio espacio (puede llevar datos)
useable true si los jugadores pueden usarlo
shouldClose true cierra el inventario al usarlo
description Texto debajo de la etiqueta

Copia un elemento vecino en el mismo archivo cuando no estés seguro: el archivo muestra exactamente los campos que tu versión espera.

Cuidado: una coma o llave faltante en items.lua detiene la carga de qb-core, y con él todos los scripts que dependen de él. Si todo se rompe después de la edición, mira tu última entrada primero.

2. La imagen

Pon un .png con el nombre del campo image en la carpeta de imágenes del inventario:

text
qb-inventory/html/images/burger.png

La carpeta es la misma ya sea que el elemento sea comida, una herramienta o un documento. Con un recurso de inventario diferente, usa su propia carpeta de imágenes en su lugar. Un archivo faltante muestra un icono vacío, y el nombre debe coincidir exactamente con el campo image, extensión incluida.

3. Reinicia y prueba

items.lua es leído por qb-core cuando se inicia. En la consola del servidor:

text
restart qb-core

Reiniciar qb-core mientras los jugadores están en línea puede desconectar o romper scripts que dependen de él, así que en un servidor en vivo hazlo en un momento tranquilo, o reinicia todo el servidor. Luego te das el elemento con el comando de administrador:

text
/giveitem <player id> burger 1

Desde un script, del lado del servidor:

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

local Player = QBCore.Functions.GetPlayer(source)
if Player then
    Player.Functions.AddItem('burger', 1)
end

Si QBCore es nil aquí, lee intento de indexar un valor nil (global 'QBCore').

4. Hazlo usable

Establecer useable = true solo permite el uso. También tienes que decir qué pasa, en el servidor:

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('QBCore:Notify', source, 'You ate the burger', 'success')
        -- your effect here: heal, hunger, an animation event
    end
end)

La devolución de llamada obtiene el id del jugador y los datos del elemento. Elimina el elemento tú mismo si el uso debe consumirlo, como arriba.

Si un reinicio de tu script hace que el elemento deje de funcionar, recuerda que el registro ocurre cuando el script se inicia. Reinicia el script que contiene CreateUseableItem, no solo qb-inventory.

Elementos que llevan datos

Para elementos que llevan información, como una nota con texto o un boleto con un código, establece unique a true. Cada copia puede entonces llevar sus propios datos en la tabla info, que das cuando añades el elemento:

lua
Player.Functions.AddItem('ticket', 1, false, { code = 'A12' })

Los problemas comunes

  • Falta de coincidencia de nombre de elemento. La clave, el campo name, el nombre de la imagen y el nombre que pasas a AddItem deben ser la misma palabra.
  • Elemento añadido a un archivo diferente. Algunos scripts te piden que añadas sus elementos a una copia de la lista dentro del script. Comprueba sus notas de instalación, y añade elementos en qb-core/shared/items.lua, a menos que se te diga lo contrario.
  • Inventario antiguo. Las versiones más antiguas de qb-inventory mantienen una copia separada de algunos datos del elemento en su propia carpeta. Si un elemento muestra una etiqueta incorrecta, comprueba que nada más lo define.

En QBox

QBox usa ox_inventory en lugar de qb-inventory, y sus elementos viven en ox_inventory/data/items.lua. El formato es diferente, y también las llamadas de elemento usable. Sigue añadir elementos a ox_inventory.

Añadir elementos sin editar archivos

Cambiar items.lua y reiniciar el núcleo para cada nuevo elemento es la parte lenta. Item Creator te permite crear elementos en el juego en su lugar.

Item Creator V2Crea items usables con animaciones, props, efectos y más — sin escribir código.desde 18,15 €Ver el script →

Lista de verificación

Síntoma Solución
Elemento no encontrado Añádelo a qb-core/shared/items.lua y restart qb-core
Todo se rompe después de la edición Error de sintaxis en items.lua; comprueba comas y llaves
Icono vacío Añade burger.png a qb-inventory/html/images, emparejando el campo image
El elemento no hace nada Establece useable = true y registra QBCore.Functions.CreateUseableItem
El nombre no coincide Usa un nombre idéntico en clave, name, imagen y código
Servidor QBox Usa data/items.lua de ox_inventory en su lugar

Respuestas rápidas

¿Dónde se definen los elementos en QBCore?

En qb-core/shared/items.lua. Cada elemento es una tabla dentro de QBShared.Items, con clave por su nombre, y el icono es un .png del mismo nombre en la carpeta de imágenes del inventario.

¿QBox usa qb-core/shared/items.lua?

No. QBox usa ox_inventory, donde los elementos viven en ox_inventory/data/items.lua. Consulta la guía de ox_inventory vinculada en este artículo.

¿Por qué mi elemento no es usable?

O useable es falso en la entrada del elemento, o ningún código lo registró. Establece useable = true y regístralo con QBCore.Functions.CreateUseableItem en el servidor.

Scripts que evitan este problema

Item Creator V2Crea items usables con animaciones, props, efectos y más — sin escribir código.Ver script →Shop CreatorCrea una tienda en menos de un minuto — dueños, empleados, caja fuerte y atracos.Ver script →

Sigue leyendo