Economy v2 est maintenant en disponibilité générale. Pour obtenir du soutien et transmettre vos commentaires, rendez-vous sur le forum PlayFab.
- Définit des tables de butin avec des réserves d’objets pondérées dans Title Data.
- Utilise une fonction Azure pour tirer au hasard des objets d’une table de butin.
- Soustrait de façon atomique un jeton de conteneur et accorde les objets sélectionnés au hasard en un seul appel.
Fonctionnement
- Définir les tables de butin dans Title Data : stockez vos configurations de tables de butin (ID d’objets, poids, quantités) au format JSON dans Title Data afin de pouvoir les mettre à jour sans redéployer le code.
- Représenter les conteneurs sous forme de monnaie virtuelle : utilisez le même modèle de jeton de conteneur que pour les conteneurs à contenu fixe, c’est-à-dire une monnaie virtuelle qui fait office de coffre à butin non ouvert.
- Appeler une fonction Azure pour ouvrir le conteneur : la fonction lit la table de butin, effectue une sélection aléatoire pondérée, puis appelle
ExecuteInventoryOperationspour soustraire de façon atomique 1 jeton de conteneur et ajouter les objets sélectionnés au hasard.
Prérequis
- Un compte de développeur PlayFab.
- Un titre créé dans Game Manager.
- Des objets de catalogue publiés que vous pouvez accorder comme récompenses de butin.
- Une monnaie virtuelle représentant le conteneur (consultez Conteneurs à contenu fixe pour les instructions de configuration).
- Un projet Azure Functions connecté à votre titre PlayFab.
Étape 1 : Définir les tables de butin dans Title Data
Stockez vos définitions de tables de butin dans Title Data afin que les concepteurs puissent mettre à jour les taux de butin sans modifier le code.Exemple de structure de table de butin
Créez une clé Title Data appeléeLootTables avec une valeur JSON :
Définition de Title Data
Game Manager
- Accédez à Content > Title Data.
- Créez une clé appelée
LootTables. - Collez votre configuration de table de butin JSON comme valeur.
- Sélectionnez Save.
API
Utilisez SetTitleData :Étape 2 : Créer la fonction Azure
Créez une fonction Azure que votre client de jeu appelle lorsqu’un joueur veut ouvrir un conteneur. La fonction :- Vérifie que le joueur possède au moins un jeton de conteneur.
- Lit la table de butin dans Title Data.
- Effectue une sélection aléatoire pondérée.
- Appelle
ExecuteInventoryOperationspour soustraire de façon atomique le jeton et accorder les récompenses.
Modèles de données
Sélection aléatoire pondérée
Fonction Azure complète
La fonction d’assistance
GetContainerCurrencyId associe un nom de table de butin à l’ID de monnaie de conteneur correspondant. Vous pouvez stocker cette correspondance dans Title Data avec les tables de butin, ou utiliser une convention d’affectation de noms.Étape 3 : Accorder des jetons de conteneur aux joueurs
Accordez des jetons de conteneur aux joueurs au moyen du jeu, d’achats en magasin ou de récompenses. Utilisez la même approche que celle décrite dans Conteneurs à contenu fixe.Étape 4 : Appeler la fonction à partir de votre client de jeu
Lorsque le joueur veut ouvrir un conteneur, appelez la fonction Azure au moyen d’ExecuteFunction :Modèles de conception de tables de butin
Niveaux de rareté
Le système de rareté classique avec des poids qui diminuent de façon exponentielle :- Commun : ~90,0 %
- Peu commun : ~9,0 %
- Rare : ~0,9 %
- Légendaire : ~0,09 %
Tirages multiples avec récompenses mixtes
Une caisse de ravitaillement qui donne trois objets aléatoires tirés d’une réserve mixte :Garanti + aléatoire (système de compensation)
Pour un modèle du type « objet rare ou mieux garanti toutes les 10 ouvertures », faites le suivi du nombre d’ouvertures du joueur dans les propriétés d’affichage (Display Properties) ou les données du joueur (Player Data), et remplacez la sélection aléatoire dans la fonction Azure lorsque le seuil est atteint.Tables de butin imbriquées
Une table de butin peut faire référence à une autre table de butin par son ID. Votre fonction Azure résout la référence de façon récursive :ItemId commence par TABLE: et, le cas échéant, effectue un tirage dans la table référencée au lieu d’accorder l’objet directement.
Considérations de sécurité
- Exécutez toujours la logique de butin côté serveur dans une fonction Azure. Ne faites jamais confiance au client pour déterminer quels objets ont été tirés. Cette approche empêche la manipulation.
- Utilisez
IdempotencyIddans l’appelExecuteInventoryOperationspour éviter les octrois en double si la fonction est relancée. Pour plus d’information, consultez Transactions idempotentes et nouvelles tentatives. - Validez la possession du conteneur en vérifiant l’inventaire du joueur avant la soustraction. L’opération
SubtractdansExecuteInventoryOperationséchoue si le joueur n’a pas assez de jetons, ce qui annule l’ensemble du lot. - Journalisez tous les tirages à des fins d’audit. La valeur de retour de la fonction et les événements PlayStream fournissent une trace de ce que chaque joueur a reçu.
