Economy v2 ya está disponible con carácter general. Para soporte y comentarios, vaya al Foro de PlayFab.
- Define tablas de botín con grupos de objetos ponderados en Title Data.
- Usa una función de Azure para sortear objetos aleatorios de una tabla de botín.
- Resta de forma atómica un token de contenedor y otorga los objetos seleccionados aleatoriamente en una sola llamada.
Cómo funciona
- Definir tablas de botín en Title Data: almacene las configuraciones de sus tablas de botín (identificadores de objetos, pesos, cantidades) como JSON en Title Data para poder actualizarlas sin volver a implementar código.
- Representar los contenedores como moneda virtual: use el mismo patrón de token de contenedor que los contenedores de contenido fijo: una moneda virtual que actúa como una caja de botín sin abrir.
- Llamar a una función de Azure para abrir el contenedor: la función lee la tabla de botín, ejecuta una selección aleatoria ponderada y luego llama a
ExecuteInventoryOperationspara restar de forma atómica 1 token de contenedor y agregar los objetos seleccionados aleatoriamente.
Requisitos previos
- Una cuenta de desarrollador de PlayFab.
- Un título creado en Game Manager.
- Elementos de catálogo publicados que pueda otorgar como recompensas de botín.
- Una moneda virtual que represente el contenedor (consulte Contenedores con contenido fijo para ver las instrucciones de configuración).
- Un proyecto de Azure Functions conectado a su título de PlayFab.
Paso 1: definir tablas de botín en Title Data
Almacene las definiciones de sus tablas de botín en Title Data para que los diseñadores puedan actualizar las tasas de caída sin cambios de código.Estructura de ejemplo de una tabla de botín
Cree una clave de Title Data llamadaLootTables con un valor JSON:
Establecer Title Data
Game Manager
- Vaya a Content > Title Data.
- Cree una clave llamada
LootTables. - Pegue su configuración JSON de tablas de botín como valor.
- Seleccione Save.
API
Use SetTitleData:Paso 2: crear la función de Azure
Cree una función de Azure a la que llame el cliente de su juego cuando un jugador quiera abrir un contenedor. La función:- Comprueba que el jugador tiene al menos un token de contenedor.
- Lee la tabla de botín desde Title Data.
- Ejecuta la selección aleatoria ponderada.
- Llama a
ExecuteInventoryOperationspara restar de forma atómica el token y otorgar las recompensas.
Modelos de datos
Selección aleatoria ponderada
Función de Azure completa
La función auxiliar
GetContainerCurrencyId asigna el nombre de una tabla de botín al identificador de la moneda de contenedor correspondiente. Puede almacenar esta asignación en Title Data junto con las tablas de botín, o usar una convención de nomenclatura.Paso 3: otorgar tokens de contenedor a los jugadores
Otorgue tokens de contenedor a los jugadores mediante el propio juego, compras en la tienda o recompensas. Use el mismo enfoque descrito en Contenedores con contenido fijo.Paso 4: llamar a la función desde el cliente del juego
Cuando el jugador quiera abrir un contenedor, llame a la función de Azure mediante ExecuteFunction:Patrones de diseño de tablas de botín
Niveles de rareza
El clásico sistema de rareza con pesos que decrecen exponencialmente:- Común: ~90,0 %
- Poco común: ~9,0 %
- Raro: ~0,9 %
- Legendario: ~0,09 %
Sorteo múltiple con recompensas mixtas
Una caja de suministros que da tres objetos aleatorios de un grupo mixto:Garantizado + aleatorio (sistema de compasión)
Para un patrón de “raro o mejor garantizado cada 10 aperturas”, registre el recuento de aperturas del jugador en Display Properties o en Player Data, y anule la selección aleatoria en la función de Azure cuando se alcance el umbral.Tablas de botín anidadas
Una tabla de botín puede hacer referencia a otra tabla de botín por su identificador. Su función de Azure resuelve la referencia de forma recursiva:ItemId empieza por TABLE: y, si es así, sortea en la tabla referenciada en lugar de otorgar el objeto directamente.
Consideraciones de seguridad
- Ejecute siempre la lógica de botín en el lado del servidor en una función de Azure. Nunca confíe en el cliente para determinar qué objetos se sortearon. Este enfoque evita manipulaciones.
- Use
IdempotencyIden la llamada aExecuteInventoryOperationspara evitar otorgamientos duplicados si la función se reintenta. Para obtener más información, consulte Transacciones idempotentes y reintentos. - Valide la propiedad del contenedor comprobando el inventario del jugador antes de restar. La operación
SubtractdeExecuteInventoryOperationsfalla si el jugador no tiene suficientes tokens, lo que revierte todo el lote. - Registre todos los sorteos con fines de auditoría. El valor devuelto de la función y los eventos de PlayStream proporcionan un rastro de lo que recibió cada jugador.
