スタック
Important
エコノミー v2 が一般提供になりました。 サポートとフィードバックについては、「PlayFab フォーラム」にアクセスしてください。
Economy V2 Inventory サービスでは、在庫のニーズに対する柔軟性とサポートを追加できるスタックの概念が導入されています。 スタックを使用すると、同じアイテムの個別のインスタンスを同じインベントリ内に存在させることができます。 この機能により、ゲーム内の組織シナリオ、さまざまなアイテムのプロパティなどを設定する機能が可能になります。
同じ Id
のアイテムは、それぞれ独自の量でアイテムのスタックとして保管でき、StackId
によって区別されます。 指定しない場合、インベントリ アクションは通常、StackId: default
のデフォルト スタックを使用します。デフォルト スタックは削除できます。 次回、StackId を使用せずに追加/転送が発生したとき (またはデフォルトの StackId を使用したとき)、デフォルトのスタックが再作成されます。
インベントリとスタックの管理
以下は、Inventory API とスタックとのやり取りの詳細な内訳です。
インベントリアイテムの追加
AddInventoryItems
API では、Item
パラメータで StackId
を定義できます。 このパラメータは、増加するスタック、または作成される新しいスタックの ID を定義します。
StackId
を含む AddInventoryItems
リクエストの例:
{
"Entity": {
"Type": "title_player_account",
"Id": "ABCD12345678"
},
"Item": {
"Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
"StackId": "NewStack"
},
"Amount": 5,
}
上記のリクエストは、金額が 5 で StackId が NewStack
のアイテムの新しいスタックを作成するか、既存の NewStack
がすでに存在する場合はそれに 5 を追加します。
在庫アイテムの減算
SubtractInventoryItems
API では、StackId を使用して、どのスタックから減算されるかを定義します。 さらに、減算された量によってスタックの量が 0 になった場合にスタックを削除する、設定できる DeleteEmptyStacks
ブール値があります。
現在のスタック量より多くをスタックから減算しようとすると、エラーがスローされます。
StackId を使用した SubtractInventoryItems
リクエストの例:
{
"Entity": {
"Type": "title_player_account",
"Id": "ABCD12345678"
},
"Item": {
"Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
"StackId": "NewStack"
},
"Amount": 5,
"DeleteEmptyStacks": true,
}
上記のリクエストは、ID が NewStack
のスタックから 5 を減算し、正確な量が 5 であった場合はスタックを削除します。
インベントリ アイテムを更新する
UpdateInventoryItems
API では、Item
パラメータで StackId
を定義できます。 このパラメータは、更新されるスタック、または作成される新しいスタックの ID を定義します。
UpdateInventoryItems
要求の一例:
{
"Entity": {
"Type": "title_player_account",
"Id": "ABCD12345678"
},
"Item": {
"Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
"StackId": "NewStack",
"Amount": 5
}
}
上記のリクエストは、金額が 5 で StackId が NewStack
のアイテムの新しいスタックを作成するか、すでに存在する場合は NewStack
の金額を 5 に設定します。
インベントリ アイテムの削除
DeleteInventoryItems
API は、プレーヤーのインベントリからアイテムのスタック全体を削除するために使用されます。
StackId
を指定して、削除する項目の特定のスタックを定義できます。
DeleteInventoryItems
要求の一例:
{
"Entity": {
"Type": "title_player_account",
"Id": "ABCD12345678"
},
"Item": {
"Id": "0b440353-bdbc-48d8-8873-f0988c1f9d8b",
"StackId": "NewStack"
},
}
在庫アイテムを購入する
PurchaseInventoryItems
API はカタログで定義されたアイテムの価格を使用し、プレーヤーの在庫からそのコストを差し引いて、希望する量のアイテムと交換します。 購入したい Item
と購入したいアイテムの Amount
を指定する必要があります。
スタックで購入する場合、関連するパラメータがいくつかあります。
-
PriceAmounts
については、各価格項目 (つまり、使用される項目) に対してオプションのStackId
を定義して、使用済み項目がどのスタックから差し引かれるかを定義できます。 -
Item
オブジェクトの場合、受信アイテムが配置されるスタックを表すオプションのStackId
を定義できます。 -
DeleteEmptyStacks
ブール値を設定すると、減算した結果スタックの量が 0 になった場合にスタックを削除します。
TODO リンクを追加
スタックを使用した PurchaseInventoryItems
リクエストの例:
{
"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,
}
在庫アイテムの転送
スタックで TransferInventoryItems
API を使用する場合、関連するパラメータがいくつかあります。
-
GivingItem
オブジェクトでは、指定された項目が取得されるスタックを表すオプションのStackId
を定義できます。 -
ReceivingItem
オブジェクトでは、受信アイテムが配置されるスタックを表すオプションのStackId
を定義できます。 -
GivingItem
量の結果スタックの量が 0 になった場合にスタックを削除する、設定できるDeleteEmptyStacks
ブール値があります。
スタックを使用した TransferInventoryItems
リクエストの例:
{
"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
リクエストの例:
"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
リクエストの例:
{
"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 を使用してプロパティを直接変更できます。