Cómo añadir items a ox_inventory: items.lua, imágenes e items usables

Añade un item personalizado a ox_inventory: la entrada en data/items.lua, la imagen en web/images, darlo con AddItem, y hacerlo usable con una exportación del cliente.

Quieres un nuevo item en tu servidor: una hamburguesa, una ganzúa, una batería de teléfono. Con ox_inventory, que usan los servidores ESX y QBox, un item es una tabla Lua en un archivo. Este artículo cubre la entrada, la imagen, dar el item a un jugador, y hacerlo usable.

1. La entrada del item

Abre ox_inventory/data/items.lua. Dentro de la tabla retornada, añade una entrada. La clave es el nombre del item: minúsculas, sin espacios.

lua
['burger'] = {
    label = 'Burger',
    weight = 220,
    stack = true,
    close = true,
    description = 'A warm burger.',
},

Qué hacen los campos:

Campo Significado
label Nombre mostrado a los jugadores
weight Peso de un item, en gramos
stack true si varios pueden compartir un espacio, false si cada uno toma su propio espacio
close true cierra el inventario cuando se usa el item
description Texto bajo la etiqueta

Verifica los otros items en el mismo archivo para los campos exactos que tu versión de ox_inventory soporta, y copia su estilo. El archivo es la mejor referencia para tu instalación.

Cuidado: un error de sintaxis Lua en items.lua detiene el inicio de ox_inventory. Verifica una coma faltante entre entradas, y una llave de cierre faltante.

2. La imagen

ox_inventory busca un .png nombrado después del item:

text
ox_inventory/web/images/burger.png

El nombre debe coincidir exactamente con el nombre del item, y una imagen faltante solo muestra un ícono vacío. Una imagen cuadrada de aproximadamente 100 por 100 píxeles o más grande, con fondo transparente, se ve mejor.

3. Recarga y dátelo a ti mismo

Reinicia el inventario para que lea el archivo:

text
restart ox_inventory

Luego te das el item a ti mismo. Los admins con el permiso correcto pueden usar el comando /additem desde dentro del juego o la consola:

text
additem <player id> burger 1

Si el comando es rechazado, te falta permisos de admin, véase ACE permissions for admins.

4. Da el item desde un script

En el lado del servidor, usa la exportación:

lua
local success = exports.ox_inventory:AddItem(source, 'burger', 1)
if not success then
    print('Could not add the item: inventory full or unknown item')
end

AddItem toma el id del jugador, el nombre del item, la cantidad, y metadatos opcionales. Eliminar y verificar funcionan de la misma manera:

lua
exports.ox_inventory:RemoveItem(source, 'burger', 1)

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

Si el jugador no puede llevar el item debido al peso o espacios, AddItem devuelve false. Puedes verificar primero:

lua
if exports.ox_inventory:CanCarryItem(source, 'burger', 1) then
    exports.ox_inventory:AddItem(source, 'burger', 1)
end

5. Haz el item usable

Un item puede ejecutar código cuando un jugador lo usa. ox_inventory lo soporta en la definición del item mismo, con un bloque client que apunta a una exportación de uno de tus recursos:

lua
['burger'] = {
    label = 'Burger',
    weight = 220,
    stack = true,
    close = true,
    description = 'A warm burger.',
    client = {
        export = 'my_script.burger',
    },
},

El valor es resourceName.exportName. En my_script, registra la exportación en el cliente:

lua
-- my_script/client.lua
exports('burger', function(data, slot)
    exports.ox_inventory:useItem(data, function(used)
        if used then
            print('Burger eaten')
        end
    end)
end)

useItem elimina un item y ejecuta tu función solo si el uso funcionó. Es la forma estándar de dejar que ox_inventory maneje la animación, tiempo de progreso y consumo, cuando el item los tiene establecidos.

El mismo bloque puede llevar efectos incorporados en lugar de una exportación. Mira los items de comida y bebida ya en items.lua para las opciones disponibles, por ejemplo status, anim y prop, y reutiliza esa forma para tu propio item de comida.

Items usables estilo ESX y QBCore

Los scripts escritos para el framework registran items usables con ESX.RegisterUsableItem('burger', ...) o QBCore.Functions.CreateUseableItem('burger', ...). ox_inventory funciona con esas llamadas cuando se ejecuta con el framework, así que esos scripts no necesitan cambios, siempre que el item exista en items.lua.

Crear items sin editar archivos

Si creas items frecuentemente, editar archivos y reiniciar se vuelve lento. Item Creator te permite crear items en el juego, para que no toques items.lua para cada uno.

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

En QBCore y QBox

ox_inventory es el inventario de QBox, así que todo lo anterior aplica tal como es. En QBCore, el inventario predeterminado es qb-inventory en su lugar, con items en qb-core/shared/items.lua, cubierto en adding items on QBCore.

Lista de verificación

Síntoma Solución
El item no existe Añádelo a data/items.lua, luego restart ox_inventory
ox_inventory no inicia Error de sintaxis en items.lua; verifica comas y llaves
Ícono vacío Pon <nombre del item>.png en web/images
AddItem devuelve false Nombre del item desconocido, inventario lleno, o demasiado pesado
El item no hace nada cuando se usa Añade un bloque client con una export, y registra esa exportación
El script de item usable es ignorado El nombre del item en el script debe coincidir con la clave en items.lua

Respuestas rápidas

¿Dónde añado items en ox_inventory?

En ox_inventory/data/items.lua. Cada item es una tabla con clave su nombre, y el mismo nombre es el archivo de imagen en web/images.

¿Por qué mi nuevo item no muestra ícono?

La imagen falta o tiene un nombre diferente. Pon <nombre del item>.png en ox_inventory/web/images, con el nombre exacto del item y una extensión minúscula.

¿Tengo que reiniciar el servidor después de añadir un item?

No. Reinicia ox_inventory y el nuevo item se carga. Si un script lo necesita, reinicia ese script también.

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