次の方法で共有


スタック

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 パラメータを使用して、カスタム アイテム プロパティをインベントリ アイテムに設定できます。 プロパティの設定は、AddInventoryItemsPurchaseInventoryItems、および 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 を使用してプロパティを直接変更できます。