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

# Economy v2 中带有固定内容的容器

> 通过将虚拟货币令牌与在购买时拆包固定奖励的捆绑包相结合，在 Economy v2 中重建旧版 PlayFab 容器物品。

<Info>
  Economy v2 现已正式发布。如需支持和反馈，请访问 [PlayFab 论坛](https://community.playfab.com)。
</Info>

Economy v1 (Legacy) 有一个内置的**容器**功能——一种特殊的目录物品，打开时会将其内容授予玩家的库存。Economy v2 不包括容器作为原生物品类型，但你可以通过结合虚拟货币和捆绑包来实现**固定内容容器**（始终授予相同物品的容器）的相同行为。

## 工作原理

该模式使用三个 Economy v2 构建块：

1. **代表容器本身的虚拟货币（或可堆叠物品）**——例如"Treasure Chest Token"。
2. **一个捆绑包**，价格为该货币的 1 个，包含容器应授予的物品。
3. **购买调用**，玩家花费 1 个令牌购买捆绑包，捆绑包会自动拆包并授予物品。

从玩家的角度来看，他们收到一个令牌（通过游戏奖励、商店购买等），然后"打开"它以获取内部物品——就像 V1 容器的工作方式一样。

## 先决条件

* 一个 [PlayFab 开发者账户](https://developer.playfab.com/en-us/sign-up)。
* 在 [Game Manager](https://developer.playfab.com/) 中创建的 Title。
* 至少一个已发布的目录物品，你希望容器授予该物品。

## 步骤 1：为容器创建虚拟货币

创建一个代表容器的虚拟货币。此货币的每一单位充当一个未打开的容器。

### Game Manager

1. 转到 **Economy** > **Catalog (V2)** > **Currency**。
2. 选择 **New currency**。
3. 将 **Title** 设置为描述性名称，例如 `Treasure Chest`。
4. 将 **FriendlyId** 设置为简短代码，例如 `tc`。
5. 选择 **Save and publish**。

### REST API

调用 [CreateDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/create-draft-item)：

```json theme={null}
{
  "Item": {
    "CreatorEntity": {
      "Id": "{{TitleID}}",
      "Type": "title"
    },
    "Type": "currency",
    "AlternateIds": [
      {
        "Type": "FriendlyId",
        "Value": "tc"
      }
    ],
    "Title": {
      "NEUTRAL": "Treasure Chest"
    },
    "Description": {
      "NEUTRAL": "A treasure chest that can be opened to reveal its contents."
    },
    "StartDate": "2023-07-27T00:00:00.000Z"
  },
  "Publish": true
}
```

***

## 步骤 2：创建一个价格为一个容器令牌的捆绑包

创建一个包含你希望容器授予的物品的捆绑包。将捆绑包的价格设置为正好一单位的容器货币。

### Game Manager

1. 转到 **Economy** > **Catalog (V2)** > **Bundles**。
2. 选择 **New bundle**。
3. 将 **Title** 设置为描述容器内容，例如 `Treasure Chest Contents`。
4. 在 **Items** 下，添加你希望容器授予的物品和数量——例如 1 把 **Legendary Sword** 和 100 **Gold**。
5. 在 **Price** 下，将价格设置为 **1** 个你的容器货币（**Treasure Chest**）。
6. 选择 **Save and publish**。

### REST API

调用 [CreateDraftItem](https://learn.microsoft.com/en-us/rest/api/playfab/economy/catalog/create-draft-item)：

```json theme={null}
{
  "Item": {
    "Type": "bundle",
    "Title": {
      "NEUTRAL": "Treasure Chest Contents"
    },
    "StartDate": "2023-07-27T00:00:00.000Z",
    "ItemReferences": [
      {
        "Id": "{{LegendarySwordID}}",
        "Amount": 1
      },
      {
        "Id": "{{GoldCurrencyID}}",
        "Amount": 100
      }
    ],
    "PriceOptions": {
      "Prices": [
        {
          "Amounts": [
            {
              "ItemId": "{{TreasureChestCurrencyID}}",
              "Amount": 1
            }
          ]
        }
      ]
    }
  },
  "Publish": true
}
```

***

当玩家购买此捆绑包时，捆绑包会[自动拆包](/services/playfab/economy-monetization/economy-v2/catalog/bundles#purchasing-and-unpacking-bundles) — 各个物品会直接进入玩家的库存。

## 步骤 3：向玩家授予容器令牌

通过任何适合你游戏设计的机制将容器货币授予玩家：

* **游戏奖励** — 使用 [AddInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/add-inventory-items) 在完成关卡、任务或成就后授予令牌。
* **商店购买** — 在[商店](/services/playfab/economy-monetization/economy-v2/catalog/stores) 中以其他虚拟货币或真钱出售容器令牌。
* **战斗通行证/季节性奖励** — 将令牌作为奖励层级包含在内。

使用 `AddInventoryItems` 授予三个 Treasure Chest 令牌的示例：

```json theme={null}
{
  "Entity": {
    "Type": "title_player_account",
    "Id": "{{PlayerID}}"
  },
  "Item": {
    "Id": "{{TreasureChestCurrencyID}}"
  },
  "Amount": 3
}
```

## 步骤 4：打开容器

当玩家想打开容器时，调用 [PurchaseInventoryItems](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/purchase-inventory-items) 使用一个容器令牌购买捆绑包：

```json theme={null}
{
  "Entity": {
    "Type": "title_player_account",
    "Id": "{{PlayerID}}"
  },
  "Item": {
    "Id": "{{TreasureChestContentsBundleID}}"
  },
  "Amount": 1,
  "PriceAmounts": [
    {
      "ItemId": "{{TreasureChestCurrencyID}}",
      "Amount": 1
    }
  ]
}
```

成功调用后，玩家的库存会更新：扣除一个 Treasure Chest 令牌，并添加捆绑包的内容（一把 Legendary Sword + 100 Gold）。

## 多种容器类型

通过重复此模式创建多种容器类型。例如：

| 容器             | 货币 (FriendlyId) | 捆绑包内容                                |
| -------------- | --------------- | ------------------------------------ |
| Treasure Chest | `tc`            | 一把 Legendary Sword + 100 Gold        |
| Supply Crate   | `sc`            | 五瓶 Health Potions + 3 瓶 Mana Potions |
| Premium Box    | `pb`            | 一匹 Rare Mount + 500 Gold + 50 Gems   |

每种容器类型都有自己的货币和捆绑包。

## 使用商店进行容器购买

使用[商店](/services/playfab/economy-monetization/economy-v2/catalog/stores) 覆盖容器捆绑包的价格。通过使用商店，你可以在不同的上下文中以不同的价格提供相同的容器（例如，活动期间的折扣"打开"成本）：

```json theme={null}
{
  "Item": {
    "Type": "store",
    "Title": {
      "NEUTRAL": "Event Store"
    },
    "ItemReferences": [
      {
        "Id": "{{TreasureChestContentsBundleID}}",
        "Amount": 1,
        "PriceOptions": {
          "Prices": [
            {
              "Amounts": [
                {
                  "ItemId": "{{TreasureChestCurrencyID}}",
                  "Amount": 1
                }
              ]
            }
          ]
        }
      }
    ]
  },
  "Publish": true
}
```

然后在购买时传递 `StoreId`：

```json theme={null}
{
  "Entity": {
    "Type": "title_player_account",
    "Id": "{{PlayerID}}"
  },
  "Item": {
    "Id": "{{TreasureChestContentsBundleID}}"
  },
  "Amount": 1,
  "PriceAmounts": [
    {
      "ItemId": "{{TreasureChestCurrencyID}}",
      "Amount": 1
    }
  ],
  "StoreId": "{{EventStoreID}}"
}
```

## 限制

此模式适用于具有**固定的、确定的内容**的容器。如果你需要**随机战利品**（每次打开容器时内容都不同，类似于与掉落表配对的 V1 容器），请参见[掉落表和随机战利品](/services/playfab/economy-monetization/economy-v2/tutorials/drop-tables-and-randomized-loot) 教程。此教程使用 [Azure Functions](https://learn.microsoft.com/en-us/azure/azure-functions/functions-overview) 来：

1. 从玩家的库存中减去容器令牌。
2. 运行你的加权随机选择逻辑。
3. 通过库存 API 授予结果物品。

## 另请参阅

* [Economy v2 捆绑包](/services/playfab/economy-monetization/economy-v2/catalog/bundles)
* [Economy v2 商店](/services/playfab/economy-monetization/economy-v2/catalog/stores)
* [虚拟货币](/services/playfab/economy-monetization/economy-v2/tutorials/currencies)
* [Economy v2 概览](/services/playfab/economy-monetization/economy-v2/overview)
* [PurchaseInventoryItems API 参考](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/purchase-inventory-items)
* [AddInventoryItems API 参考](https://learn.microsoft.com/en-us/rest/api/playfab/economy/inventory/add-inventory-items)


## Related topics

- [Economy v2 中的掉落表和随机战利品](/zh-CN/services/playfab/economy-monetization/economy-v2/tutorials/drop-tables-and-randomized-loot.md)
- [Economy v2 概览](/zh-CN/services/playfab/economy-monetization/economy-v2/overview.md)
- [发布你的第一个用户生成内容](/zh-CN/services/playfab/economy-monetization/economy-v2/tutorials/publish-ugc.md)
- [Economy 版本 2 (V2) 常见问题解答](/zh-CN/services/playfab/economy-monetization/economy-v2/faq.md)
- [FMA:XR-129 智能分发内容管理](/zh-CN/publishing/certification/fma/xr-129.md)
