For the complete documentation index, see llms.txt. This page is also available as Markdown.

Inventario

Resumen

All Out proporciona una API de inventario de jugadores que te permite crear objetos, dárselos a los jugadores y permitir que los jugadores los ordenen, usen y suelten en tu juego.

Hay tres conceptos fundamentales:

  • Definiciones de objetos (Item_Definition): qué es un objeto es (nombre/icono/apilamiento + tus propios campos)

  • Instancias de objetos (Item_Instance): una pila real en el mundo/dentro de un inventario

  • Inventarios (Inventory): un contenedor de ranuras que contiene instancias de objetos

Cada jugador tiene un inventario integrado en player.default_inventory.

Persistencia

Si quieres que los inventarios de los jugadores se guarden automáticamente entre sesiones de juego, habilita la Guardado automático del inventario del jugador casilla en la Editar → Configuración del juego sección del editor.

Player inventory settings in Game Config

También puedes configurar estos ajustes programáticamente en CSL. Llama a Scene.set_auto_save_player_inventory(true) y Scene.set_player_inventory_capacity(32) durante la inicialización de la escena (p. ej., en ao_before_scene_load) antes de que se unan los jugadores.

Referencia de la API de inventario

Inicio rápido (registrar + dar un objeto)

Registra las definiciones de objetos una sola vez en ao_before_scene_load, luego crea instancias y muévelas al inventario de un jugador.

Mostrar la barra rápida

Para mostrar en pantalla la interfaz estándar de la barra rápida del inventario, llama a Items.draw_hotbar dentro del ao_late_update método de tu Player. Sin él, el sistema de inventario funciona en segundo plano, ¡pero el jugador no lo verá!

Items.draw_hotbar gestiona por ti toda la interfaz de la barra rápida + el alternador de la mochila. Devuelve un Draw_Hotbar_Result con selected_item, selected_item_index, inventory_open, y dropped_item campos.

Comprobar si un jugador ya tiene un objeto

Un patrón común es dar un objeto solo si el jugador no tiene ya uno:

Usa el ID registrado de la definición:

También puedes comprobar cuánto espacio queda para un tipo de objeto específico antes de crearlo:

Inventarios personalizados

Puedes crear inventarios que no estén vinculados a un jugador, para cosas como:

  • Cofres / contenedores de almacenamiento

  • Equipos de peces/mobs

Para acceder a los objetos:

Movimientos atómicos de objetos

Usa una transacción cuando varios movimientos de objetos deban tener éxito todos o fallar todos:

Cada instancia de objeto solo puede aparecer una vez en la transacción. Llama siempre a can_move_all_items primero; move_all_items lanza una aserción si la transacción completa ya no cabe. Un movimiento puede fusionar una pila y destruir la instancia movida, así que no sigas usando referencias al objeto después de la transacción.

Objetos soltados

Si quieres que los jugadores suelten objetos en el mundo (y que otros jugadores puedan recogerlos), usa el sistema de objetos soltados:

Generar un objeto soltado

Animación de soltar + ajuste a la navmesh

Manejar arrastrar y soltar desde la interfaz de la barra rápida

Si usas Items.draw_hotbarDropped_Item.handle_dropped_item Dropped_Item.handle_dropped_item lo elimina del inventario y genera una entidad de objeto soltado.

Los objetos soltados desaparecen automáticamente con el tiempo (con una barra de advertencia). Mantener pulsado el botón de interactuar sobre un objeto reinicia su temporizador de desaparición.

Puedes hacer que un objeto soltado sea exclusivo (visible/cogible solo por un jugador) usando dropped.set_exclusive(player).

Última actualización