> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Piles d'inventaire

> Comprenez les piles d'inventaire de PlayFab Economy v2 pour regrouper des objets identiques avec des données, des quantités et des expirations uniques dans l'inventaire d'un joueur.

# Piles

<Info>
  Economy v2 est désormais en disponibilité générale. Pour obtenir de l'aide et donner votre avis, rendez-vous sur le [forum PlayFab](https://community.playfab.com).
</Info>

Le service Inventory d'Economy V2 introduit le concept de piles, qui apporte davantage de flexibilité et de prise en charge pour vos besoins en matière d'inventaire. Les piles permettent à des instances séparées et distinctes d'un même objet d'exister dans le même inventaire. Cette fonctionnalité permet des scénarios d'organisation dans le jeu, la possibilité de définir des propriétés d'objet différentes, et bien plus encore !

Les objets ayant le même `Id` peuvent être stockés sous forme de piles de l'objet, chacune avec sa propre quantité et différenciée par un `StackId`. Si rien n'est spécifié, les actions d'inventaire utilisent généralement la pile par défaut dont le StackId est : `default` La pile par défaut peut être supprimée. La prochaine fois qu'un ajout ou un transfert a lieu sans StackId (ou avec le StackId par défaut), la pile par défaut est recréée

## Gestion des inventaires et des piles

Voici une présentation détaillée des [API Inventory](/fr/services/playfab/economy-monetization/economy-v2/inventory) et de leurs interactions avec les piles.

### Ajouter des objets d'inventaire

Dans l'API `AddInventoryItems`, vous pouvez définir un `StackId` dans le paramètre `Item`. Ce paramètre définit soit la pile dont la quantité est augmentée, soit l'ID de la nouvelle pile en cours de création.

Exemple de requête `AddInventoryItems` avec un `StackId` :

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
    "Amount": 5,
}
```

La requête ci-dessus crée soit une toute nouvelle pile de l'objet avec une quantité de 5 et un StackId `NewStack`, soit ajoute 5 à la pile `NewStack` existante si elle existait déjà

### Soustraire des objets d'inventaire

Dans l'API `SubtractInventoryItems`, le StackId sert à définir la pile de laquelle la quantité est soustraite. De plus, vous pouvez définir un booléen `DeleteEmptyStacks` qui supprime la pile si la soustraction ramène sa quantité à 0.

Tenter de soustraire d'une pile une quantité supérieure à sa quantité actuelle génère une erreur.

Exemple de requête `SubtractInventoryItems` avec un StackId :

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
    "Amount": 5,
    "DeleteEmptyStacks": true,
}
```

La requête ci-dessus soustrait 5 de la pile dont l'ID est `NewStack` et supprime la pile si sa quantité était exactement de 5.

### Mettre à jour des objets d'inventaire

Dans l'API `UpdateInventoryItems`, vous pouvez définir un `StackId` dans le paramètre `Item`. Ce paramètre définit soit la pile mise à jour, soit l'ID de la nouvelle pile en cours de création.

Exemple de requête `UpdateInventoryItems` :

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack",
        "Amount": 5
    }
}
```

La requête ci-dessus crée soit une toute nouvelle pile de l'objet avec une quantité de 5 et un StackId `NewStack`, soit définit la quantité de `NewStack` sur 5 si elle existait déjà

### Supprimer des objets d'inventaire

L'API `DeleteInventoryItems` permet de supprimer une pile entière d'objets de l'inventaire d'un joueur. Un `StackId` peut être fourni pour définir la pile spécifique de l'objet à supprimer.

Exemple de requête `DeleteInventoryItems` :

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "NewStack"
    },
}
```

### Acheter des objets d'inventaire

L'API `PurchaseInventoryItems` utilise le prix de l'objet défini dans le catalogue, déduit le coût de l'inventaire du joueur et l'échange contre la quantité souhaitée de l'objet. Vous devez spécifier l'`Item` que vous souhaitez acheter et la quantité (`Amount`) de l'objet que vous souhaitez acheter.

Lorsque vous effectuez des achats avec des piles, quelques paramètres sont pertinents :

* Pour `PriceAmounts`, vous pouvez définir un `StackId` facultatif pour chaque objet de prix (c'est-à-dire les objets dépensés) afin de définir la pile de laquelle les objets dépensés seront déduits
* Pour l'objet `Item`, vous pouvez définir un `StackId` facultatif qui représente la pile dans laquelle les objets reçus seront placés
* Vous pouvez définir un booléen `DeleteEmptyStacks` qui supprime la pile si la soustraction ramène sa quantité à 0.

<Note>
  Pour plus de détails sur l'achat d'objets, consultez [PurchaseInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/purchase-inventory-items).
</Note>

Exemple de requête `PurchaseInventoryItems` avec des piles :

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "LaserSword",
        "StackId": "MyLaserSwordStack"
    },
    "Amount": 10,
    "PriceAmounts": [
        {
            "ItemId": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
            "Amount": 5,
            "StackId": "MyNewStack",
        }
    ],
    "DeleteEmptyStacks": true,
}
```

### Transférer des objets d'inventaire

Lorsque vous utilisez l'API `TransferInventoryItems` avec des piles, quelques paramètres sont pertinents :

* Dans l'objet `GivingItem`, vous pouvez définir un `StackId` facultatif qui représente la pile de laquelle les objets donnés seront prélevés
* Dans l'objet `ReceivingItem`, vous pouvez définir un `StackId` facultatif qui représente la pile dans laquelle les objets reçus seront placés
* Vous pouvez définir un booléen `DeleteEmptyStacks` qui supprime la pile si la quantité de `GivingItem` ramène la quantité de la pile à 0

Exemple de requête `TransferInventoryItems` avec des piles :

```json theme={null}
{
    "GivingEntity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "ReceivingEntity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "GivingItem": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "default",
    },
    "ReceivingItem": {
        "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
        "StackId": "MyNewStack",
    },
    "Amount": 10,
    "DeleteEmptyStacks": true
}
```

### API ExecuteInventoryOperations

Vous pouvez utiliser les paramètres `StackId` et `DeleteEmptyStacks` dans les objets `Operation` de l'API `ExecuteInventoryOperations`. Ces paramètres vous permettent de regrouper plusieurs opérations d'inventaire utilisant des piles.

Exemple de requête `ExecuteInventoryOperations` avec des piles :

```json theme={null}
"Entity": {
    "Type": "title_player_account",
    "Id": "ABCD12345678"
 },
"Operations": [
    {
        "Update": {
            "Item": {
                "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
                "StackId": "default",
                "Amount": 10
            }
        }
    },
    {
        "Subtract": {
            "Item": {
                "Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
                "StackId": "MyNewStack"
            },
            "Amount": 5
        }
    }
]
```

### Ajout de propriétés personnalisées avec DisplayProperties et NewStackValues

Vous pouvez définir des propriétés d'objet personnalisées sur les objets d'inventaire avec le paramètre `DisplayProperties`. La définition de propriétés peut se faire dans les API `AddInventoryItems`, `PurchaseInventoryItems` et `TransferInventoryItems`, mais **uniquement** lors de la création d'une nouvelle pile. Pour définir des propriétés d'affichage pour de nouveaux objets, le paramètre `NewStackValues` doit être défini dans la requête d'API.

Exemple de requête `AddInventoryItems` avec `NewStackValues` :

```json theme={null}
{
    "Entity": {
        "Type": "title_player_account",
        "Id": "ABCD12345678"
    },
    "Item": {
        "Id": "20a645ce-a3bf-4fcb-8e67-36aa7bf0331d",
        "StackId": "NewStack"
    },
    "Amount": 15,
    "NewStackValues": {
        "DisplayProperties": {
            "DifficultyRating":5,
            "IsMagic": true,
            "Rarity": "Legendary"
        }
    }
}
```

Pour mettre à jour les propriétés d'affichage d'objets existants, vous pouvez utiliser l'API `UpdateInventoryItems` afin de modifier directement les propriétés.


## Related topics

- [Exigences XBOX testées lors de la certification pour les jeux sur console XBOX](/fr/publishing/certification/console-cert-tested-requirements.md)
- [Playbook for Accessible Gaming Events (PAGE) 102 · Venues](/build/game-principles/accessibility/page/page-102-venues.md)
- [Notes de version de PlayFab Party](/fr-CA/services/playfab/multiplayer/networking/release-notes.md)
- [PAGE 108 · Accessible attractions and activations](/build/game-principles/accessibility/page/page-108-attractions-activations.md)
- [Consumable-based ecosystems](/publishing/xstore-commerce/xstore-consumables.md)
