> ## 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 (Legacy) のドロップ テーブル

> Game Manager を使用して PlayFab Legacy Economy で重み付きおよびシーケンシャルなドロップ テーブルを作成し、カタログからランダムなルートやプレイヤーの報酬を付与します。

# ドロップ テーブル (Legacy Economy)

<Info>
  Economy v1 API はメンテナンス モードにあり、新機能は追加されず、バグ修正のみが行われます。**v1 API は当面の間、維持されます。** PlayFab Economy の次のバージョンの詳細については、[Economy v2 の概要](/services/playfab/economy-monetization/economy-v2/overview) を参照してください。
</Info>

このチュートリアルでは、PlayFab Game Manager を使用してドロップ テーブルを作成する手順を紹介します。

ドロップ テーブルを使用すると、[インベントリ アイテム](/services/playfab/player-progression/player-data/player-inventory) をランダムに生成でき、*シーケンシャル* ドロップ テーブルはプレイヤー報酬にランダム性を提供できます。

* [カタログ](/services/playfab/economy-monetization/economy/items/catalogs)、[インベントリ](/services/playfab/player-progression/player-data/player-inventory)、および PlayFab [Game Manager](/services/playfab/live-service-management/gamemanager/quickstart) に既に精通していることを前提としています。
* 標準の、バンドルでもコンテナーでもないアイテムを含む *プライマリ カタログ* が必要です。
* 少なくとも *1 つ* の仮想通貨を定義し、ゲーム内の "無料" 通貨として使用する必要があります。

独自のアイテム セットを使用してもかまいませんが、ここではアイテムの重複した分類を作成することを目標とします。

例として、次のアイテム テーブルを使用します。

|               | Accessory           | Armor           | Sword           |
| ------------- | :------------------ | :-------------- | :-------------- |
| **Common**    | Common Accessory    | Common Armor    | Common Sword    |
| **Uncommon**  | Uncommon Accessory  | Uncommon Armor  | Uncommon Sword  |
| **Rare**      | Rare Accessory      | Rare Armor      | Rare Sword      |
| **Legendary** | Legendary Accessory | Legendary Armor | Legendary Sword |

同様のアイテム セットをカタログで用意できたら、ドロップ テーブルを構築する準備が整います。

## ドロップ テーブルの構築

Game Manager で:

1. **タイトル** に移動します。
2. 左側のメニューから **Economy** を選択します。
3. **Catalogs** タブに移動し、プライマリ カタログを選択します。
4. **Drop Tables** を選択します。

画面はこの例と似ているはずです。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/game-manager-catalogs-drop-tables.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=3ee2c6e31f0afbd822a1117ad70f1d79" alt="Game Manager - Catalogs - Drop Tables" width="943" height="488" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-catalogs-drop-tables.png" />

各アイテム記述子に基づいて **Drop Tables** の構築を始めましょう。最初の分類は **Equipment Type** なので、**Accessories** という名前の新しい **Drop Table** を作成します。

1. **New Drop Table** ボタンを選択します。

2. **Table Id** を **Accessories** に設定します。

3. **ADD TO DROP TABLE** を選択します。**Pick multiple items** ポップアップが表示されます。

4. アイテムの **ID** の横にある **Add** ボタンを選択して、次のアイテムを追加します。
   * **Common Accessory**
   * **Uncommon Accessory**
   * **Rare Accessory**
   * **Legendary Accessory**

5. **Close** ボタンを選択します。

6. アイテムの **Weight** 値をレアリティに応じて調整します。

   * **Common**: 1000
   * **Uncommon**: 100
   * **Rare**: 10
   * **Legendary**: 1

   重みは、アイテムがお互いに対してどれくらいの頻度でドロップするかを示します。ここに示す例では、**Legendary** 1 個につき **Common** が約 **1000 個** ドロップします。

7. **SAVE DROP TABLE** を選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/game-manager-drop-table-edit-accessories.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=3bcb2b90132d3dec3eafdaef771461ab" alt="Game Manager - Drop Table - Edit Accessories" width="1280" height="900" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-drop-table-edit-accessories.png" />

**Accessories** が完了したら、同じ手順で **Armors** と **Weapons** のドロップ テーブルを作成します。

もう 1 つの分類はレアリティ別なので、**Common Equipment** から始めて代替のテーブル セットを作成します。

1. **New Drop Table** ボタンを選択します。

2. **Table Id** を **Common Equipment** に設定します。

3. **ADD TO DROP TABLE** を選択します。**Pick multiple items** ポップアップが表示されます。

4. アイテムの **ID** の横にある **Add** ボタンを選択して、次のアイテムを追加します。
   * **Common Accessory**
   * **Common Armor**
   * **Common Sword**

5. **Close** ボタンを選択します。

6. **Common Equipment** のオプションがそのスロットにどのように配置されるかに応じて、アイテムの **Weight** 値を調整します。

   * **Common Accessory**: 1
   * **Common Armor**: 4
   * **Common Sword**: 5

7. **SAVE DROP TABLE** を選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/game-manager-drop-table-edit-common-equipment.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=e82dae21d2162de31f53bbf112c2d225" alt="Game Manager - Drop Table - Edit Common Equipment" width="1280" height="900" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-drop-table-edit-common-equipment.png" />

### ドロップ テーブルの使用

次の 2 つの PlayFab Server API メソッドを使用して、プログラム的にドロップ テーブルにアクセスできます。

1. [GetRandomResultTables](xref:titleid.playfabapi.com.server.playeritemmanagement.getrandomresulttables)
2. [EvaluateRandomResultTable](xref:titleid.playfabapi.com.server.playeritemmanagement.evaluaterandomresulttable)

[GetRandomResultTables](xref:titleid.playfabapi.com.server.playeritemmanagement.getrandomresulttables) を使用すると、Game Manager に入力した生のドロップ テーブル データを読み取れます。

<Note>
  **`GetRandomResultTables`** はランダム値をロールしたり、結果を付与したりは *しません*。この API を使うと、データを読み取り、必要に応じて情報を解析できます。
</Note>

### オプション 1

```csharp theme={null}
public void ReadDropTableData() {
    PlayFabServerAPI.GetRandomResultTables(new GetRandomResultTablesRequest() {
        TableIDs = new List<string> { "Accessories", "Common Equipment" }
    }, result => {
        Debug.Log("Completed getting drop tables");
    }, error => {
        Debug.LogError(error.GenerateErrorReport());
    });
}
```

結果ハンドラーは、[GetRandomResultTablesResult](xref:titleid.playfabapi.com.server.playeritemmanagement.getrandomresulttables#getrandomresulttablesresult) としてフォーマットされた、作成したドロップ テーブルの構造情報を受け取ります。

または、[EvaluateRandomResultTable](xref:titleid.playfabapi.com.server.playeritemmanagement.evaluaterandomresulttable) API を使用して、PlayFab にテーブルの評価を *代わりに* 行わせ、単一のアイテム結果を返させることもできます。これにより、提供された重みに従ってロールされた単一アイテムを生成するために使用できる `itemId` が返されます。

その後、2 回目の呼び出しでアイテムを作成し、プレイヤーに付与できます。

### オプション 2

```csharp theme={null}
public void Grant(string playFabId, string tableId) {
    // First, roll a random number and evaluate the drop table
    PlayFabServerAPI.EvaluateRandomResultTable(new EvaluateRandomResultTableRequest()
    {
        TableId = tableId
    }, result => OnRandomResultTableResponse(result, playFabId), OnError);
}

public void OnRandomResultTableResponse(EvaluateRandomResultTableResult tableResult, string playFabId) {
    // Second, take the result and grant it to the player
    PlayFabServerAPI.GrantItemsToUser(new GrantItemsToUserRequest {
        PlayFabId = playFabId,
        ItemIds = new List<string> { tableResult.ResultItemId }
    }, result =>
    {
        // Handle Result
    }, OnError);
}

public void OnError(PlayFabError error) {
    Debug.LogError(error.GenerateErrorReport());
}
```

まとめると:

**オプション 1** - データを 1 回読み込んでキャッシュし、自分自身のゲーム サーバーでロールを *自分で* 実行できます。このオプションは PlayFab への呼び出しが少ないため待機時間が短く、ゲーム固有のロジックに基づいてロールをカスタマイズできます。

**オプション 2** - PlayFab に多くの作業を任せますが、複数の API 呼び出しがあるため待機時間が *長く* なることに注意してください。

### ドロップ テーブルの高度な使用法 (ルート ボックスの設定)

ドロップ テーブルは、バンドルやコンテナーからリンクできます。バンドルは、1 回の購入でランダムなアイテムのスタックが得られる、仮想通貨ストアに適したオプションです。

たとえば、特定のドロップ ルールを持つ **11 アイテム バンドル** があるとします。この場合、Legendary アイテムを 1 つ保証するというセールス ポイントを顧客に示せます。また、プレイヤーが *運が良すぎて* **11 個の Legendary** を受け取ることのないように *制限* もかけます。

### 新しいドロップ テーブル

文字通り *あらゆるもの* をドロップできるドロップ テーブルを構築しましょう。実際、**Anything** と呼ぶことにします。

このドロップ テーブルを作成するときは、*他の* ドロップ テーブルをオプションとして与え (**Pick multiple items** ポップアップで **Drop Tables** タブを選択して他のドロップ テーブルを追加します)、適切な重みを割り当てます。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/game-manager-new-drop-table.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=91467936c149620be0008ee13b429ca4" alt="Game Manager - New Drop Table" width="1280" height="900" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-new-drop-table.png" />

## バンドルの追加

この時点でドロップ テーブルは完了したので、**Bundle** を追加します。

1. 左側のメニューから **Economy** を選択します。
2. **Catalogs** タブに移動し、プライマリ カタログを選択します。
3. **Bundles** を選択し、**New Bundle** を選択します。
4. **Item Id** を **11-Item Drop** に設定し、**Consumable** を選択し、**By time** の **15 Seconds** を選択します。
5. **ADD TO BUNDLE** を選択します。
6. **Pick multiple items** ポップアップで、**Drop tables** タブを選択します。
7. **ID** の横にある **Add** ボタンを選択してドロップ テーブルを追加します。
8. **Quantity** フィールドを下の画像に示されている値に設定します。
9. **SAVE BUNDLE** を選択します。

<img src="https://mintcdn.com/microsoft-4404708b/Oa_DP1q6U1lat7c2/images/playfab/economy-monetization/economy/tutorials/game-manager-new-catalog-bundle.png?fit=max&auto=format&n=Oa_DP1q6U1lat7c2&q=85&s=32e531cbb1e6833a2214055427c0c133" alt="Game Manager - New Catalog Bundle" width="1280" height="1500" data-path="images/playfab/economy-monetization/economy/tutorials/game-manager-new-catalog-bundle.png" />

この例で作成した **Bundle** には、いくつかの機能が使われています。

* *あらゆる* 種類のアイテムには **Item ID** が必要です。
* **Bundle** はそれ自体が 1 つのアイテムとしてカウントされ、そのコンテンツは付与と同時に配信されます。このため、**Bundle** 自体を消費可能とし、配信から 15 秒後に期限切れになるようにしています。
* 異なる **Drop tables** を異なる数量で追加して、**11 アイテム** が配信されるようにしますが、異なるアイテムは異なるテーブルでロールされます。
  * 最初に、少なくとも **1 個の Legendary アイテム** を保証するため、最初のスロットは **Legendary Equipment** でロールされます。
  * 次の 3 スロットは **Anything** でロールされ、さらに **Legendary** をロールする可能性もあれば、より望ましくない Common Equipment をロールする可能性もあります。これらの 3 アイテムはロール結果が大きく異なる可能性があるため、これらのロールが *良い* ロールか *悪い* ロールかを決定します。
  * 最後に、残りのスロットを保証された **Rare** と **Uncommon** のアイテムで埋めることで、**11 アイテム** のロールが *良すぎたり* 悪すぎたりしないようにします。

## まとめ

ドロップ テーブルは、潜在的なアイテムと重みのリストから 1 つのアイテムをランダムに生成します。バンドルとコンテナーは、ドロップ テーブルを使用してプレイヤーに 1 つまたは複数のアイテムを配信する最も簡単な方法の 1 つになります。

[CloudScript](/services/playfab/live-service-management/service-gateway/automation/cloudscript/writing-custom-cloudscript) から、次の Server API メソッドのいずれかを使用して、ドロップ テーブルを手動で使用できます。

1. [GetRandomResultTables](xref:titleid.playfabapi.com.server.playeritemmanagement.getrandomresulttables)
2. [EvaluateRandomResultTable](xref:titleid.playfabapi.com.server.playeritemmanagement.evaluaterandomresulttable)


## Related topics

- [Economy v2 のドロップ テーブルとランダム化されたルート](/ja-jp/services/playfab/economy-monetization/economy-v2/tutorials/drop-tables-and-randomized-loot.md)
- [カタログ (レガシー Economy)](/ja-jp/services/playfab/economy-monetization/economy/items/catalogs.md)
- [Economy (Legacy) のストアとセール](/ja-jp/services/playfab/economy-monetization/economy/tutorials/stores-and-sales.md)
- [プライズ テーブルの使用](/ja-jp/services/playfab/community/leaderboards/tournaments-leaderboards/using-prize-tables.md)
- [Economy v2 の概要](/ja-jp/services/playfab/economy-monetization/economy-v2/overview.md)
