ox_inventory para FiveM: qué es, errores comunes y la skill de IA
Actualizado
¿No quieres gestionar las skills tú mismo? Consigue la app completa.
ox_inventory es el inventario de FiveM basado en slots, con peso, metadata, stashes, tiendas y hooks. Los ítems se dan y se quitan en el servidor con exports.ox_inventory. Esta guía cubre la API, los errores que pierden o duplican ítems y la skill de IA.
ox_inventory es un inventario para FiveM basado en slots, con peso de ítems, metadata, stashes, tiendas y hooks. Es compatible con ox_core, ESX y qbx_core. Todo pasa por exports.ox_inventory:<fn>(...), porque no existe una tabla global, y cualquier cambio de ítems va en el servidor.
Qué te da la skill de ox_inventory
La skill se organiza alrededor de las decisiones que tomas al programar ítems:
AddItem,RemoveItemyGetItemCountpara dar, quitar y contar ítems.CanCarryItempara comprobar el espacio antes de cerrar un intercambio o una recompensa.GetSlotySearchpara leer un slot o buscar ítems en varios slots.RegisterStashpara almacenamiento persistente yCreateTemporaryStashpara almacenamiento temporal.registerHookpara reaccionar a movimientos, aperturas y compras sin hacer polling.
Los archivos de reglas cubren los exports de servidor y de cliente, la definición de ítems en data/items.lua, stashes y tiendas, y hooks. La referencia original está en overextended.dev/ox_inventory.
Errores comunes con ox_inventory
- Dar ítems desde el cliente. Los exports de cliente sirven para mostrar y decidir en la interfaz. Añade, quita y cuenta ítems solo en el servidor.
- Ignorar el retorno de AddItem. El jugador puede superar el peso o quedarse sin slots. Comprueba el resultado antes de decirle que recibió algo.
- Comprobar el espacio después de cobrar. Llama primero a
CanCarryItem, luego cobra, luegoAddItemy después verifica el retorno. - Inventar nombres de ítems. Un ítem que no está en
data/items.luafalla en silencio. Defínelo primero y luego referéncialo. - Meter datos volátiles en la metadata. Los ítems con metadata distinta no se apilan. Contadores y marcas de tiempo convierten un stack en decenas de slots.
- Pasar un id de inventario equivocado.
inves el source de un jugador, un identificador o el id de un stash. Un valor incorrecto devuelve nil, no un error.
Por qué los asistentes de IA se equivocan con ox_inventory
Casi todo el código de inventario que ha visto un asistente apunta a qb-inventory o a un inventario ESX antiguo. Si pides "dale un sándwich al jugador", suele salir una llamada propia de un framework, un nombre de ítem inventado o una entrega desde el cliente. Nada de eso funciona bien en ox_inventory.
La skill de ox_inventory fija los nombres reales de las funciones, la división entre servidor y cliente y el orden de las llamadas en un intercambio. El asistente lee la regla que encaja con tu petición y escribe código que comprueba CanCarryItem, llama a AddItem en el servidor e incluye la entrada de data/items.lua cuando introduce un ítem nuevo.
Instala la skill de ox_inventory en 30 segundos
- Haz clic en "Download SKILL.md" en la parte superior de esta página.
- Descomprímela en la carpeta de skills o reglas de tu herramienta de IA. La sección de instalación de más abajo muestra la ruta exacta para Claude Code, Cursor y VS Code.
- Pídele al asistente algo concreto, como "dale un sándwich al jugador tras una compra correcta", y comprueba que llama a
CanCarryItemy después aAddItemen el servidor y comprueba el retorno.
Cómo instalar esta skill
Descarga el zip, descomprímelo y coloca la carpeta donde tu herramienta carga skills o reglas. La ruta exacta depende de la herramienta:
Claude Code
Descomprime en .claude/skills/ox-inventory/ dentro del proyecto (la carpeta debe contener SKILL.md). Para todos los proyectos, usa ~/.claude/skills/ox-inventory/.
Cursor
Cursor carga las reglas del proyecto desde .cursor/rules/. Añade ahí un archivo de regla que apunte a la skill descomprimida, o pega el contenido de SKILL.md y los archivos de reglas en una regla. El formato es .mdc con frontmatter y cambia entre versiones, así que revisa la documentación de tu versión.
VS Code / Copilot
Copilot lee archivos de instrucciones desde .github/instructions/*.instructions.md. Copia SKILL.md ahí con un glob applyTo para tus archivos Lua y deja los archivos de reglas al lado.
El archivo SKILL.md
Este es el archivo que lee tu asistente de IA. Enlaza a los archivos de reglas incluidos en la descarga.
El contenido de la skill está en inglés: es documentación técnica pensada para agentes de IA.
ox_inventory
Slot-based inventory with weight, metadata, stashes, shops and hooks. Supports ox_core, esx and qbx_core.
Activation Contract
Load this skill when the user asks to give, take, count or check items, register a stash or shop, define a new item, react to inventory actions, or migrate from qb-inventory or esx inventory.
Hard Rules
- Call everything through
exports.ox_inventory:<fn>(...). There is no global table. - Grant, remove and count items on the SERVER only. Client exports are for display and UI decisions.
AddItemcan fail. Always check the return value: the player may be over weight or out of slots.- Check
CanCarryItemBEFORE taking payment or removing the traded item, never after. - Never invent item names. An item must exist in
data/items.luaor it silently fails. invis a player source, an identifier, or a stash id. Passing the wrong one returns nil, not an error.- Metadata makes items non-stackable when it differs. Do not put volatile data in metadata.
Decision Gates
| Goal | Call |
|---|---|
| Give an item | AddItem(inv, item, count, metadata, slot) |
| Take an item | RemoveItem(inv, item, count, metadata, slot) |
| Check space first | CanCarryItem(inv, item, count, metadata) |
| How many does the player have | GetItemCount(inv, item, metadata, strict) |
| Read one slot | GetSlot(inv, slot) |
| Find items across slots | Search(inv, 'slots'|'count', item, metadata) |
| Persistent storage | RegisterStash(...) |
| Short-lived storage | CreateTemporaryStash(properties) |
| React to a player action | registerHook(event, cb, options) |
Execution Steps
- Confirm
ox_inventorystarts afterox_liband the framework core. - Decide the side: mutation is server, display is client.
- For a trade or reward, order the calls:
CanCarryItem-> take payment ->AddItem-> verify the return. - Define any new item in
data/items.luabefore referencing it. Read rules/items.md. - Use hooks instead of polling when reacting to moves, opens or purchases.
Output Contract
Return runnable Lua using exports.ox_inventory, with the server/client split explicit. Include the data/items.lua entry whenever a new item is introduced.
References
- rules/server-exports.md — item and inventory functions on the server.
- rules/client-exports.md — weight, current weapon, opening inventories.
- rules/items.md — defining items in data/items.lua.
- rules/stashes.md — stashes, shops and temporary storage.
- rules/hooks.md — registerHook and cancelling actions.
Upstream docs: https://overextended.dev/ox_inventory
Preguntas frecuentes
- Según la skill, es compatible con ox_core, ESX y qbx_core. Para otras configuraciones, revisa la documentación del recurso antes de migrar.
- Sí. ox_inventory es open source y lo publican en GitHub los equipos de Overextended y CommunityOx, así que puedes usarlo en cualquier servidor sin coste.
- Lo más probable es que el jugador haya superado el límite de peso o no tenga slots libres. AddItem puede fallar, así que comprueba siempre su retorno y llama a CanCarryItem antes de cobrar o quitar el ítem del intercambio.
¿ox_inventory funciona con ESX y QBCore?
¿ox_inventory es gratis?
¿Por qué AddItem devuelve false?
Guías relacionadas
Lecturas más largas del blog de FiveAI sobre el mismo tema.