> ## 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.

# インベントリ スタック

> プレイヤーのインベントリで、独自のデータ、数量、有効期限を持つ同一アイテムをグループ化するために PlayFab Economy v2 のインベントリ スタックを理解します。

# スタック

<Info>
  Economy v2 が一般提供 (GA) されました。サポートとフィードバックについては、[PlayFab フォーラム](https://community.playfab.com) を参照してください。
</Info>

Economy V2 の Inventory サービスは、インベントリのニーズに対してより高い柔軟性とサポートを追加できるスタックの概念を導入します。スタックにより、同じアイテムの独立した異なるインスタンスを同じインベントリ内に存在させることができます。この機能により、ゲーム内での整理シナリオや、アイテム プロパティを別々に設定する機能などが実現します。

同じ `Id` を持つアイテムは、それぞれ独自の数量を持ち、`StackId` で区別されるアイテムのスタックとして格納できます。指定されない場合、インベントリ アクションは通常、StackId が `default` のデフォルト スタックを使用します。デフォルト スタックは削除できます。次に StackId なし (またはデフォルトの StackId を使用) の追加/転送が発生すると、デフォルト スタックが再作成されます。

## インベントリとスタックの管理

以下は [Inventory API](/services/playfab/economy-monetization/economy-v2/inventory) と、スタックとの相互作用に関する詳細な解説です。

### Add Inventory Items

`AddInventoryItems` API では、`Item` パラメーターで `StackId` を定義できます。このパラメーターは、増加させるスタック、または作成される新しいスタックの ID を定義します。

`StackId` を含む `AddInventoryItems` リクエストの例:

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

上記のリクエストは、数量 5 で StackId が `NewStack` のアイテムの新しいスタックを作成するか、`NewStack` がすでに存在する場合は既存のスタックに 5 を追加します。

### Subtract Inventory Items

`SubtractInventoryItems` API では、StackId を使用して減算元のスタックを定義します。さらに、減算した結果スタックの数量が 0 になった場合にスタックを削除する `DeleteEmptyStacks` ブール値を設定できます。

現在のスタック数量よりも多く減算しようとすると、エラーが発生します。

StackId を含む `SubtractInventoryItems` リクエストの例:

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

上記のリクエストは、ID が `NewStack` のスタックから 5 を減算し、スタックの数量が正確に 5 であればスタックを削除します。

### Update Inventory Items

`UpdateInventoryItems` API では、`Item` パラメーターで `StackId` を定義できます。このパラメーターは、更新するスタック、または作成される新しいスタックの ID を定義します。

`UpdateInventoryItems` リクエストの例:

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

上記のリクエストは、数量 5 で StackId が `NewStack` のアイテムの新しいスタックを作成するか、`NewStack` がすでに存在する場合はその数量を 5 に設定します。

### Delete Inventory Items

`DeleteInventoryItems` API は、プレイヤーのインベントリからアイテムのスタック全体を削除するために使用されます。削除するアイテムの特定のスタックを定義するために `StackId` を指定できます。

`DeleteInventoryItems` リクエストの例:

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

### Purchase Inventory Items

`PurchaseInventoryItems` API は、カタログで定義されたアイテムの価格を使用し、プレイヤーのインベントリからコストを差し引いて、希望する数量のアイテムと交換します。購入したい `Item` と、購入したい `Amount` を指定する必要があります。

スタックを使用して購入する場合、関連するいくつかのパラメーターがあります。

* `PriceAmounts` では、各価格アイテム (つまり支払われるアイテム) にオプションの `StackId` を定義して、支払われるアイテムがどのスタックから差し引かれるかを定義できます
* `Item` オブジェクトでは、受け取るアイテムが配置されるスタックを表すオプションの `StackId` を定義できます
* 減算した結果スタックの数量が 0 になった場合にスタックを削除する `DeleteEmptyStacks` ブール値を設定できます。

<Note>
  アイテムの購入に関する詳細については、[PurchaseInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/purchase-inventory-items) を参照してください。
</Note>

スタックを使用した `PurchaseInventoryItems` リクエストの例:

```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,
}
```

### Transfer Inventory Items

スタックを使用して `TransferInventoryItems` API を使用する場合、関連するいくつかのパラメーターがあります。

* `GivingItem` オブジェクトでは、渡すアイテムが取り出されるスタックを表すオプションの `StackId` を定義できます
* `ReceivingItem` オブジェクトでは、受け取るアイテムが配置されるスタックを表すオプションの `StackId` を定義できます
* `GivingItem` の数量によりスタックの数量が 0 になった場合にスタックを削除する `DeleteEmptyStacks` ブール値を設定できます

スタックを使用した `TransferInventoryItems` リクエストの例:

```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
}
```

### ExecuteInventoryOperations API

`ExecuteInventoryOperations` API の `Operation` オブジェクトで `StackId` と `DeleteEmptyStacks` パラメーターを使用できます。これらのパラメーターを使用すると、スタックを使用した複数のインベントリ操作をバッチ処理できます。

スタックを使用した `ExecuteInventoryOperations` リクエストの例:

```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
        }
    }
]
```

### DisplayProperties と NewStackValues でカスタム プロパティを追加する

`DisplayProperties` パラメーターを使用して、インベントリ アイテムにカスタム アイテム プロパティを設定できます。プロパティの設定は `AddInventoryItems`、`PurchaseInventoryItems`、`TransferInventoryItems` API で行えますが、**新しいスタックが作成される場合にのみ** 可能です。新しいアイテムの表示プロパティを設定するには、API リクエストで `NewStackValues` パラメーターを設定する必要があります。

`NewStackValues` を含む `AddInventoryItems` リクエストの例:

```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"
        }
    }
}
```

既存のアイテムの表示プロパティを更新するには、`UpdateInventoryItems` API を使用してプロパティを直接変更できます。


## Related topics

- [PFInventoryInventoryItemReference](/ja-jp/services/playfab/api-references/c/pfinventorytypes/structs/pfinventoryinventoryitemreference.md)
- [PFInventoryPurchasePriceAmount](/ja-jp/services/playfab/api-references/c/pfinventorytypes/structs/pfinventorypurchasepriceamount.md)
- [Economy v2 の概要](/ja-jp/services/playfab/economy-monetization/economy-v2/overview.md)
- [PlayFab Economy とは?](/ja-jp/services/playfab/economy-monetization/economy-what-is.md)
- [アイテムとインベントリの概要](/ja-jp/services/playfab/economy-monetization/economy-v2/inventory/items-and-inventory-overview.md)
