Skip to main content

Inventario del jugador

Requisitos

Para usar el inventario del jugador, debe tener un catálogo definido para su título. Lea nuestro tutorial de Catálogos para obtener más información.
Opcionalmente, también puede definir tiendas para su catálogo.
Mientras que un catálogo es la lista de todos los artículos disponibles en el juego, una tienda es un subconjunto de artículos del catálogo que tiene la opción de precios únicos. Se pueden definir varias tiendas por catálogo, de modo que pueda tener conjuntos distintos de artículos para presentar al jugador, en función de la segmentación de usuarios u otros factores. Una vez que haya definido un catálogo a través de Game Manager, o a través de nuestras llamadas de API de administración SetCatalogItems o UpdateCatalogItems, podrá usar una amplia variedad de llamadas de API de inventario en el cliente y el servidor.

Información general de la API

Todas las llamadas de API de inventario están diseñadas para ser con autoridad de servidor y seguras. Cuando se usan correctamente, los clientes no podrán hacer trampas ni adquirir artículos que no hayan ganado. Clientes: Servidor: El ejemplo que se muestra a continuación ilustra los bloques de código que llaman a estos métodos de API y configura casos de uso básicos para el inventario del jugador.
Como referencia, estos ejemplos proceden de Unicorn Battle, un juego que creamos como ejemplo para demostrar las características de PlayFab.
La moneda virtual AU que se usa a continuación es el oro, una moneda gratuita que se gana luchando contra monstruos (consulte nuestro tutorial de Monedas). Antes de comenzar, definiremos algunas funciones de utilidad que se usarán y reutilizarán en la mayoría de los ejemplos de esta guía.

Ejemplo solo de cliente: comprar y consumir una poción de salud

Orden de llamadas de la API de cliente: PurchaseItem, GetUserInventory, ConsumeItem Primero debemos comenzar por definir el artículo en nuestro catálogo. Estos son los requisitos de CatalogItem para la poción de salud.
  • PurchaseItem requiere un precio de artículo positivo (5 AU).
  • ConsumeItem requiere que el artículo sea Consumable, con un recuento de artículos positivo (3).
  • El jugador que realiza la compra debe tener cinco AU disponibles en su saldo de moneda virtual.
El código de cada llamada se proporciona a continuación.

Ejemplo: se concede un contenedor al jugador y lo abre

Orden de llamadas de la API: Primero, debemos comenzar con un contenedor definido en nuestro catálogo. Para nuestro contenedor de este ejemplo, seleccionamos un CrystalContainer. Este ejemplo también demuestra la apertura del contenedor con una llave: un artículo opcional que también debe estar en el inventario del jugador para que la llamada UnlockContainerInstance se realice correctamente. Los requisitos de CatalogItem para nuestro CrystalContainer en este ejemplo incluyen:
  • Que CrystalContainer esté definido como un Container.
  • Que los contenedores pueden definir opcionalmente un Key Item, que luego es necesario para desbloquear el contenedor; en este caso, una CrystalKey.
  • Se recomienda encarecidamente que el contenedor y cualquier llave sean ambos Consumable, con un recuento de usos positivo, para que se quiten del inventario del jugador después de su uso.

Código del servidor

Código del cliente

Consumo de llaves y contenedores

En el ejemplo anterior, se sugiere que la llave o el contenedor sean consumibles, aunque eso es solo una recomendación. Pero si un contenedor y su llave (si la hay) no son consumibles, el contenedor se puede reabrir infinitamente, concediendo su contenido al jugador cada vez. Dado que la capacidad del inventario del jugador no es infinita, este patrón está muy desaconsejado. Cuando se desbloquea un contenedor consumible, tanto el contenedor como la llave consumible que se usó verán automáticamente reducido su recuento de usos, y se quitarán del inventario del jugador cuando el recuento de usos llegue a cero.

Opciones viables

Contenedor consumible, sin llave: el patrón más básico, en el que el contenedor se consume al abrirse y no hay llave. Contenedor consumible, llave consumible: el caso sencillo del contenedor bloqueado, que permite al jugador abrir el contenedor con la llave. Se consumen ambos, y el jugador solo puede abrir un contenedor con usos restantes con una llave con usos restantes. Contenedor duradero, llave consumible: esto permite a un jugador abrir el contenedor cada vez que encuentra una llave. La llave se consume, y el contenedor solo se abre mientras la llave tenga usos restantes. Contenedor consumible, llave duradera: esto permite a un jugador conservar una llave que puede abrir todos los contenedores para los que es el artículo llave. El contenedor se consume, pero el jugador conserva la capacidad de abrir contenedores con la llave más adelante.

Ejemplo: comprar artículos del inventario al jugador

No hay una API integrada para recomprar artículos del inventario al jugador, ya que el proceso es específico de cada juego. Sin embargo, puede usar los métodos de API existentes para crear su propia experiencia de SellItem:
  • La API de servidor de PlayFab RevokeInventoryItem** le permite quitar un artículo del inventario.
  • La API de servidor de PlayFab AddUserVirtualCurrency** puede devolver una cantidad adecuada de moneda virtual. Actualmente no es posible devolver dinero real a través de los métodos de API de PlayFab.
Los artículos y las monedas virtuales tienen una relación estrecha. Para obtener más información, consulte nuestro tutorial de Monedas.
La siguiente función de CloudScript combina las dos llamadas de servidor descritas en una única llamada accesible desde el cliente.

Procedimientos recomendados

  • Asegúrese de verificar que toda la información de entrada del cliente sea válida antes de realizar cualquier cambio.
  • CloudScript no es atómico, por lo que el orden de las llamadas importa: AddUserVirtualCurrency puede tener éxito y RevokeInventoryItem puede fallar.
Por lo general, es mejor dar al jugador algo que no haya ganado en este proceso que quitarle algo sin compensación.
A continuación, se puede acceder a esta función de CloudScript desde el cliente.
Última modificación el 28 de agosto de 2026