Skip to main content
Economy v2 est désormais en disponibilité générale. Pour obtenir de l’aide et faire part de vos commentaires, rendez-vous sur le forum PlayFab.
Economy v1 (hérité) disposait d’une fonctionnalité intégrée de tables de butin qui vous permettait de définir des distributions aléatoires pondérées d’objets directement dans Game Manager. Economy v2 n’inclut pas les tables de butin en tant que fonctionnalité native, mais vous pouvez implémenter le même comportement, avec davantage de flexibilité, à l’aide d’Azure Functions combiné à l’API ExecuteInventoryOperations. Ce tutoriel vous montre comment créer un système complet de butin aléatoire qui :
  • Définit des tables de butin avec des ensembles d’objets pondérés dans Title Data.
  • Utilise une fonction Azure pour tirer des objets aléatoires dans une table de butin.
  • Soustrait un jeton de conteneur et accorde les objets sélectionnés aléatoirement de manière atomique, en un seul appel.

Fonctionnement

  1. Définir des tables de butin dans Title Data : stockez les configurations de vos tables de butin (ID d’objets, poids, quantités) au format JSON dans Title Data afin de pouvoir les mettre à jour sans redéployer de code.
  2. 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 : une monnaie virtuelle qui fait office de coffre à butin non ouvert.
  3. 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 ExecuteInventoryOperations pour soustraire 1 jeton de conteneur et ajouter les objets sélectionnés aléatoirement de manière atomique.

Prérequis

Étape 1 : Définir des tables de butin dans Title Data

Stockez les définitions de vos 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ée LootTables avec une valeur JSON :
Chaque table de butin comprend les propriétés suivantes :

Définition de Title Data

Game Manager

  1. Accédez à Content > Title Data.
  2. Créez une clé appelée LootTables.
  3. Collez la configuration JSON de votre table de butin comme valeur.
  4. 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 souhaite ouvrir un conteneur. La fonction :
  1. Vérifie que le joueur possède au moins un jeton de conteneur.
  2. Lit la table de butin dans Title Data.
  3. Effectue une sélection aléatoire pondérée.
  4. Appelle ExecuteInventoryOperations pour soustraire le jeton et accorder les récompenses de manière atomique.

Modèles de données

Sélection aléatoire pondérée

Fonction Azure complète

La fonction d’assistance GetContainerCurrencyId associe le nom d’une table de butin à l’ID de la monnaie de conteneur correspondante. Vous pouvez stocker cette correspondance dans Title Data avec les tables de butin, ou utiliser une convention de nommage.

Étape 3 : Accorder des jetons de conteneur aux joueurs

Accordez des jetons de conteneur aux joueurs par le biais du gameplay, 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 depuis votre client de jeu

Lorsque le joueur souhaite ouvrir un conteneur, appelez la fonction Azure à l’aide d’ExecuteFunction :
La réponse contient les récompenses sélectionnées aléatoirement :

Modèles de conception de tables de butin

Niveaux de rareté

Le système de rareté classique, avec des poids décroissant de façon exponentielle :
Probabilités d’obtention :
  • 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 issus d’un ensemble mixte :

Garanti + aléatoire (système de compensation)

Pour un modèle du type « rare ou mieux garanti toutes les 10 ouvertures », suivez le nombre d’ouvertures du joueur dans les propriétés d’affichage ou les données du joueur, 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 référencer une autre table de butin par son ID. Votre fonction Azure résout la référence de manière récursive :
La fonction vérifie si un ItemId commence par TABLE: et, si c’est le cas, effectue un tirage dans la table référencée au lieu d’accorder directement l’objet.

Considérations relatives à la 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 toute manipulation.
  • Utilisez IdempotencyId dans l’appel ExecuteInventoryOperations pour éviter les attributions en double si la fonction est relancée. Pour plus d’informations, consultez Transactions idempotentes et nouvelles tentatives.
  • Validez la possession du conteneur en vérifiant l’inventaire du joueur avant la soustraction. L’opération Subtract dans ExecuteInventoryOperations échoue si le joueur ne possède pas suffisamment 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.

Voir aussi

Last modified on October 6, 2026