Cómo se hace

Crear un item en ESX y QBCore

Guía clara para añadir un item nuevo en FiveM: dónde se define en ox_inventory (items.lua), ESX clásico (tabla items) y QBCore (shared/items.lua), cómo hacerlo usable y dónde va la imagen.

El problema

Quieres añadir un item nuevo a tu servidor (una botella de agua, una llave, un objeto de quest) pero no sabes en qué fichero se declara según uses ESX clásico, QBCore o ox_inventory, ni cómo conseguir que al usarlo pase algo.

La causa

En FiveM no hay un único sitio donde vivan los items: depende del inventario que tengas instalado. ox_inventory los lee de un fichero Lua (data/items.lua), ESX clásico los guarda en una tabla `items` de la base de datos, y QBCore los define en `qb-core/shared/items.lua`. Si declaras el item en el sitio equivocado, el inventario no lo reconoce, la imagen sale en blanco y el item no es usable porque no has registrado su callback en el servidor.

La solución

Declara el item en el fichero correcto según tu inventario, añade su imagen .png en la carpeta de imágenes del inventario, y regístralo como usable en el servidor. Aquí tienes la definición en ox_inventory (items.lua) y en QBCore (shared/items.lua):

lua
-- ============================================
-- ox_inventory  ->  ox_inventory/data/items.lua
-- ============================================
-- La clave (['water']) es el "name" interno del item.
['water'] = {
    label = 'Agua',        -- nombre visible en el inventario
    weight = 200,          -- peso por unidad (en gramos)
    stack = true,          -- true = se apila en un mismo slot
    close = true,          -- cierra el inventario al usarlo
    description = 'Una botella de agua fresca',
    client = {
        status = { thirst = 200000 }, -- efecto al usar (ejemplo)
        anim = { dict = 'mp_player_intdrink', clip = 'loop_bottle' },
        usetime = 2500,
    },
},
-- La imagen va en: ox_inventory/web/images/water.png
-- (el .png debe llamarse igual que la clave del item)

-- En ox_inventory NO se usa CreateUseableItem; el "usar" se
-- gestiona con el bloque client.* de arriba o con un export/hook:
-- exports('water', function(event, item, inventory, slot, data) ... end)


-- ============================================
-- QBCore  ->  qb-core/shared/items.lua
-- ============================================
water = {
    name = 'water',           -- name interno (igual que la clave)
    label = 'Water',          -- nombre visible
    weight = 100,             -- peso por unidad
    type = 'item',
    image = 'water.png',      -- nombre del .png
    unique = false,           -- true para llaves/objetos únicos
    useable = true,           -- marca que tiene callback de uso
    shouldClose = true,
    description = 'Una botella de agua fresca',
},
-- La imagen va en: qb-inventory/html/images/water.png
-- (o el inventario QB que uses; ox_inventory sirve también para QBCore)

-- El efecto al usar se registra en el SERVIDOR (ver pasos).

Paso a paso

  1. 1.Identifica tu inventario: si usas ox_inventory edita `ox_inventory/data/items.lua`; en ESX clásico inserta una fila en la tabla `items` de la BD (`INSERT INTO items (name, label, weight, rare, can_remove) VALUES ('water', 'Agua', 1, 0, 1);`); en QBCore edita `qb-core/shared/items.lua`.
  2. 2.Copia la imagen `water.png` a la carpeta de imágenes del inventario (`ox_inventory/web/images/` o `qb-inventory/html/images/`). El nombre del .png debe coincidir EXACTAMENTE con el name del item.
  3. 3.Haz el item usable registrando su callback en el SERVIDOR. ESX clásico: `ESX.RegisterUsableItem('water', function(source) local xPlayer = ESX.GetPlayerFromId(source); xPlayer.removeInventoryItem('water', 1) end)`. QBCore: `QBCore.Functions.CreateUseableItem('water', function(source, item) local Player = QBCore.Functions.GetPlayer(source); Player.Functions.RemoveItem('water', 1) end)`. ox_inventory: usa el bloque `client.*` del item o un `exports('water', ...)`.
  4. 4.Reinicia el recurso del inventario (y es_extended/qb-core si tocaste su shared) para que cargue la nueva definición; NO basta con reiniciar solo tu script.
  5. 5.Prueba en juego: dándote el item con `/giveitem <id> water 1` (ESX) o `/giveitem water 1` (QBCore) y usándolo desde el inventario para confirmar que la imagen aparece y el callback se ejecuta.

¿Tu caso es distinto?

Pega tu error en la herramienta IA y te da la solución al instante.

Probar la herramienta

Guías relacionadas

Última actualización: 2026-06-29. Crxative-M no está afiliado a Cfx.re ni Rockstar Games.

Cómo crear un item en ESX y QBCore (FiveM)