> ## 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 articles identiques avec des données, des quantités et des dates d'expiration uniques dans l'inventaire d'un joueur.

# Piles

<Info>
  Economy v2 est maintenant en disponibilité générale. Pour obtenir du soutien et donner vos commentaires, rendez-vous sur le [forum PlayFab](https://community.playfab.com).
</Info>

Le service d'inventaire d'Economy V2 introduit le concept de piles, qui offre davantage de souplesse et de soutien pour vos besoins en matière d'inventaire. Les piles permettent à des instances séparées et distinctes d'un même article 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'article différentes, et plus encore!

Les articles ayant le même `Id` peuvent être stockés sous forme de piles de l'article, chacune avec sa propre quantité et différenciée par son `StackId`. Si aucune pile n'est spécifiée, 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 description détaillée des [API d'inventaire](/fr-CA/services/playfab/economy-monetization/economy-v2/inventory) et de leurs interactions avec les piles.

### Ajouter des articles 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 créée.

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éerait une toute nouvelle pile de l'article avec une quantité de 5 et un StackId `NewStack`, ou ajouterait 5 à la pile `NewStack` existante si elle existait déjà

### Soustraire des articles d'inventaire

Dans l'API `SubtractInventoryItems`, le StackId sert à définir la pile dont la quantité est soustraite. De plus, un booléen `DeleteEmptyStacks` peut être défini pour supprimer 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 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 soustrairait 5 de la pile dont l'ID est `NewStack` et supprimerait la pile si sa quantité était exactement de 5.

### Mettre à jour des articles 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 créée.

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éerait une toute nouvelle pile de l'article avec une quantité de 5 et un StackId `NewStack`, ou définirait la quantité de `NewStack` à 5 si elle existait déjà

### Supprimer des articles d'inventaire

L'API `DeleteInventoryItems` sert à supprimer une pile entière d'articles de l'inventaire d'un joueur. Un `StackId` peut être fourni pour définir la pile précise de l'article à 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 articles d'inventaire

L'API `PurchaseInventoryItems` utilise le prix de l'article défini dans le catalogue, déduit le coût de l'inventaire du joueur et l'échange contre la quantité voulue de l'article. Vous devez spécifier l'`Item` que vous souhaitez acheter et la quantité (`Amount`) de l'article à 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 article de prix (c'est-à-dire les articles dépensés) afin de définir la pile de laquelle les articles 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 articles reçus seront placés
* Un booléen `DeleteEmptyStacks` peut être défini pour supprimer la pile si la soustraction ramène sa quantité à 0.

<Note>
  Pour plus de détails sur l'achat d'articles, 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 articles 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 articles 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 articles reçus seront placés
* Un booléen `DeleteEmptyStacks` peut être défini pour supprimer 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'article personnalisées sur les articles 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 **seulement** lors de la création d'une nouvelle pile. Pour définir les propriétés d'affichage de nouveaux articles, 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'articles existants, l'API `UpdateInventoryItems` peut être utilisée pour modifier directement les propriétés.


## Related topics

- [Vue d'ensemble d'Economy v2](/fr-CA/services/playfab/economy-monetization/economy-v2/overview.md)
- [Collections d'inventaire](/fr-CA/services/playfab/economy-monetization/economy-v2/inventory/collections.md)
- [API d'inventaire PlayFab](/fr-CA/services/playfab/economy-monetization/economy-v2/inventory/index.md)
- [ETags d'inventaire](/fr-CA/services/playfab/economy-monetization/economy-v2/inventory/etags.md)
- [Supprimer des articles d'inventaire](/fr-CA/services/playfab/api-references/rest/economy/inventory/delete-inventory-items.md)
