> ## 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 獎品表，在排行榜重設時為排名在前的玩家授予虛擬貨幣、庫存物品、推播通知或 CloudScript 動作。

本教學課程將逐步引導您建立獎品表，在[可重設的排行榜](/zh-TW/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards)中，對某個排名範圍內的一組玩家觸發一組動作。

具體而言，這是在排行榜重設時觸發電子郵件、傳送推播通知、授予[庫存物品](/zh-TW/services/playfab/player-progression/player-data/player-inventory)和[虛擬貨幣](/zh-TW/services/playfab/economy-monetization/economy/tutorials/currencies)，或執行 [CloudScript](/zh-TW/services/playfab/live-service-management/service-gateway/automation/cloudscript/writing-custom-cloudscript) 函式的一種方式。

在此範例中，我們會示範如何建立名為 End Tournament Prizes 的獎品表，在執行重設之後，根據 5 位玩家在排行榜中的排名授予虛擬貨幣。

## 需求

> [!NOTE]
>
> 這是*進階*教學課程。請確定已符合下列所有需求，否則您將*無法*完成本教學課程。

* 您必須具備建立玩家的基本知識，因為排行榜中必須先有玩家，才能對這些玩家執行任何動作。
* 如果您不熟悉 Game Manager，也值得閱讀 [Game Manager 快速入門](/zh-TW/services/playfab/live-service-management/gamemanager/quickstart)，因為獎品表是在 Game Manager 中建立的。
* 若要使用獎品表，您必須大致了解可重設的排行榜如何運作。請閱讀我們的教學課程[使用可重設的統計資料與排行榜](/zh-TW/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards)以了解排行榜。
* 此外，必須設定虛擬貨幣。請閱讀我們關於[貨幣](/zh-TW/services/playfab/economy-monetization/economy/tutorials/currencies)的教學課程，並使用下列參數設定兩種貨幣：
  * **貨幣代碼**：GO
  * **顯示名稱**：Gold
  * **初始存款**：200
  * **貨幣代碼**：SI
  * **顯示名稱**：Silver
  * **初始存款**：1000

## 步驟 1 - 建立排行榜

在 Game Manager 中：

* 前往左側功能表中的 **Leaderboards**。
* 選取 **New Leaderboard**。
* 在 **Statistic name** 欄位中新增名為 **tournamentScore\_manual** 的 **Leaderboard**。
* 使用提供的下拉式功能表，將 **Reset frequency** 欄位設定為 **Manually**。
* 移至 **Aggregation method** 欄位，並從提供的下拉式功能表中選取 **Maximum (always use the highest value)**。

![Game Manager - 排行榜 - 新增排行榜](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-new-leaderboard.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=ae4751c677d887a754e11f3cabd0ff69)

## 步驟 2 - 為排行榜建立獎品表

既然已建立排行榜，就可以將獎品表與其建立關聯。前往：

* 左側功能表中的 **Leaderboards**。
* 選取 **Prize Tables** 索引標籤。
* 選取 **NEW PRIZE TABLE** 按鈕以進入 **New Prize Table** 檢視。

![Game Manager - 排行榜 - 獎品表](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-prize-tables.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=5dff3f1dfb1f60bc663bfd2ce175bcc5)

在 **New Prize Table** 檢視中：

* 移至 **INFO** 區域，並為 **New Prize Table** 輸入 **Name**，名稱為 **End Tournament Prizes**。
* 從 **Leaderboard** 下拉式功能表中選擇 **tournamentScore\_manual**。

為了讓此獎品表執行某些動作，必須設定排名。若要這麼做：

* 選取 **TABLE CONTENTS** 區段下的 **+ ADD RANK**。
* 會出現 **Rank** 表單。

![Game Manager - 排行榜 - 新增獎品表](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-new-prize-table.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=528df8c1e58927de159fe555fceeb453)

在 **Rank** 表單中：

* 確認 **Rank from** 欄位的值為 **1**。
* 確認 **To (inclusive)** 欄位的值為 **2**。
* 在 **Type** 下拉式功能表中，選擇 **Grant virtual currency**。
* 在 **virtual currency code** 下拉式功能表中，選擇 **GO (Gold)**，數量為 **10**。

![Game Manager - 排行榜 - 獎品表 - 新增排名](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-prize-table-add-rank.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=39b565857248eba5c35b0cdc45318828)

現在，我們將新增第二個排名範圍：

* 選取 **TABLE CONTENTS** 區段下的 **+ADD RANK** (底部還有*第二個*按鈕，也同樣可用)。
* 在出現的 **Rank** 表單中，確定 **Rank from** 欄位的值為 **3**，且 **To (inclusive)** 欄位的值為 **5**。
* 在 **Virtual currency code** 下拉式清單中，選擇 **SI** (**Silver**)，數量為 **10**。

![Game Manager - 排行榜 - 獎品表 - 新增第二個排名](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-prize-table-add-second-rank.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=f8bcf1ce6445bae43ff8b7ac6f38840c)

## 步驟 3 - 在排行榜中填入玩家

現在已建立排行榜及其相關聯的獎品表。下一個步驟是在排行榜中填入玩家。

為了建立玩家，我們將使用 [LoginWithCustomID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid)。接著，我們會使用這些玩家並透過 [UpdatePlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.updateplayerstatistics) 填入排行榜。

在使用 [UpdatePlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.updateplayerstatistics) 之前，我們必須在 API Features 中啟用它。

* 選取左側功能表中的 **Settings**。
* 選取 **API Features** 索引標籤。
* 核取 **Allow client to post player statistics** 方塊。
* 接著選取畫面底部的 **SAVE API FEATURES** 按鈕。

![Game Manager - 設定 - API 功能 - 允許用戶端張貼玩家統計資料](https://mintcdn.com/microsoft-4404708b/5IpvKlT-jmAaVkeY/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/api-features-allow-client-to-post-player-statistics.png?fit=max\&auto=format\&n=5IpvKlT-jmAaVkeY\&q=85\&s=71197d724d092da6b5ff0a4093ad843e)

### C# 程式碼範例

下列 **C#** 程式碼範例會建立 5 位玩家，並使用 [LoginWithCustomID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid) 讓他們登入。

接著，它會使用 [UpdatePlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.updateplayerstatistics)，以這 5 位玩家及以下值填入您先前建立的排行榜 (`tournamentScore_manual`)：**105**、**104**、**103**、**102** 和 **101**。

```csharp theme={null}
// Note: This is a recursive function. Invoke it initially with no parameter
public void CreatePlayerAndPopulateLeaderboard(int playerIndex = 5) {
    if (playerIndex <= 0) return;
    const string leaderboardName = "tournamentScore_manual";
    PlayFabClientAPI.LoginWithCustomID(new LoginWithCustomIDRequest {
        CustomId = playerIndex.ToString(),
        CreateAccount = true
    }, result => OnLoggedIn(result,playerIndex,leaderboardName), FailureCallback);
}

private void OnLoggedIn(LoginResult loginResult, int playerIndex, string leaderboardName) {
    Debug.Log("Player has successfully logged in with " + loginResult.PlayFabId);
    PlayFabClientAPI.UpdatePlayerStatistics(new UpdatePlayerStatisticsRequest {
        Statistics = new List<StatisticUpdate> {
            new StatisticUpdate {
                StatisticName = leaderboardName,
                Value = playerIndex + 100
            }
        }
    }, result=> OnStatisticsUpdated(result,playerIndex), FailureCallback);
}

private void OnStatisticsUpdated(UpdatePlayerStatisticsResult updateResult, int playerIndex) {
    Debug.Log("Successfully updated player statistic");
    // Recursively invoke for next player
    CreatePlayerAndPopulateLeaderboard(playerIndex - 1);
}

private void FailureCallback(PlayFabError error){
    Debug.LogWarning("Something went wrong with your API call. Here's some debug information:");
    Debug.LogError(error.GenerateErrorReport());
}
```

### 檢查 C# 程式碼範例的結果

若要檢查排行榜中是否已填入 5 位玩家且值正確：

* 從左側功能表選取 **Leaderboards**。
* 在 **Leaderboards** 索引標籤上，返回 **Leaderboard** 清單檢視。
* 選取 **tournamentScore\_manual**，應該會有 5 位 **Players**，值分別為 **105**、**104**、**103**、**102** 和 **101**。

![Game Manager - 排行榜 - 檢視排行榜 - 檢查值](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-leaderboards-view-leaderboard-check-values.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=489c3dc10f130dd28d3e5cdf4d206f16)

## 步驟 4 - 檢查玩家的初始貨幣

在檢查任何項目之前：

* 從步驟 2 返回左側功能表中的 **Players**。
* 前往 **Players** 索引標籤，並找到在步驟 3 中放入 **tournamentScore\_manual** **Leaderboard** 的玩家。
* 選取該玩家的 **Player ID** 及 **Virtual Currency** 索引標籤。
* 記錄該玩家的 **GO** (**Gold**) 和 **SI** (**Silver**) **Currencies** 值。

在檢查任何項目之前，請返回步驟 2 中的測試 **Players**。

* 前往 **Players**，並找到在步驟 3 中放入 **tournamentScore\_manual Leaderboard** 的玩家。
* 選取該玩家的 **Player ID** 及 **Virtual Currency** 索引標籤。
* 記錄該玩家的 **GO** (**Gold**) 和 **SI** (**Silver**) 貨幣值。
* 現在，對在步驟 3 中放入 **tournamentScore\_manual Leaderboard** 的 5 位玩家中其餘 4 位執行相同動作。
* 確定您記錄了他們的 **GO** (**Gold**) 和 **SI** (**Silver**) 貨幣值 (這些值對於在重設後確認獎品表是否正常運作很重要)。

![Game Manager - 玩家 - 虛擬貨幣 - 檢查值](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-players-virtual-currency-check-values.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=9626280dfe1f4ea05d8ce7ffcf274cee)

## 步驟 5 - 重設排行榜以授予獎勵

現在前往 **Leaderboards**。

* 返回 **Leaderboards** 清單檢視。

* 選取 **tournamentScore\_manual**。

* 記下 **Players** 在 **Leaderboard** 上的位置 (這些位置是*從零開始的索引*，因此位置 **0** 為*第一名*)。

* 選取 **RESET NOW** 按鈕。

* 選取 **RESET** 按鈕以確認重設 **Leaderboard**

* 這會清除 **Players** 清單。

![Game Manager - 排行榜 - 檢查玩家位置](https://mintcdn.com/microsoft-4404708b/5IpvKlT-jmAaVkeY/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-leaderboards-check-player-positions.png?fit=max\&auto=format\&n=5IpvKlT-jmAaVkeY\&q=85\&s=bcca3903355aa64af07fdd4cb6877efa)

* 選取畫面頂端的 **RESET NOW** 按鈕。
* 當系統提示 **Reset this Leaderboard now?** 時，選取 **RESET** 按鈕以確認重設。
* 這會清除 **Players** 清單。

![Game Manager - 重設排行榜](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-reset-leaderboard.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=5b3b43e79c4771b98591e15c1d8c48e3)

## 步驟 6 - 測試獎品表是否正常運作

若要查看獎品表是否正常運作，可以檢查排行榜中的玩家是否獲得正確數量的貨幣。這可以在玩家的 PlayStream 偵錯工具中快速查看。

若要在 PlayStream 偵錯工具中查看：

* 從左側功能表選取 **Players**。
* **PlayStream** 索引標籤會顯示 **Player** 在 **Leaderboard** 上的排名事件，接著是 **Virtual Currency** 更新。

![Game Manager - 玩家 - PlayStream 偵錯工具 - 檢查排行榜事件](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-playstream-debugger-check-leaderboard-events.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=f364ffcffe413f4c79b3e37d8a34d7a7)

現在，我們手動檢查玩家是否收到正確的貨幣：

* 從左側功能表選取 **Players**。
* 在 **Players** 索引標籤上，移至畫面的 **Virtual Currency** 區域。
* 確認已正確授予貨幣。
* 這應該比先前記錄的數量*多一些*。
* 請注意，排行榜位置 **0** 或 **1** 的 **Players** 獲得了 **10 gold**，*沒有獲得任何 silver*。
* 同時，位置 **2**、**3** 和 **4** 的 **Players** 獲得了 **10 silver**，*沒有 gold*。
* 這與為獎品表設定的動作相符。

![Game Manager - Player1 - 檢查虛擬貨幣數量](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-player1-check-vc-amount.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=5278deaf409f0d4279cb2b373be127d5)

![Game Manager - Player2 - 檢查虛擬貨幣數量](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-player2-check-vc-amount.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=5740cfcf5ec78dde6f38277303fb5245)

另一種檢查 **Virtual Currency** 是否已正確授予的方式是：

* 進入 **Players**。
* 查看 **Event History**。
* 這會顯示 **player\_virtual\_currency\_balance\_changed** 事件，其中包含所授予 **Virtual Currency** 的變更數量詳細資料。

![Game Manager - 玩家 - 事件歷程記錄圖表 - 檢查虛擬貨幣變更](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-players-event-history-chart-check-vc-changed.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=e13a5faf2dfba3032b3c3061a7860673)


## Related topics

- [開始使用獎勵廣告。](/zh-TW/services/playfab/economy-monetization/rewarded-ads/quickstart.md)
- [錦標賽與排行榜](/zh-TW/services/playfab/community/leaderboards/tournaments-leaderboards/index.md)
- [Economy v2 中的掉落表和隨機戰利品](/zh-TW/services/playfab/economy-monetization/economy-v2/tutorials/drop-tables-and-randomized-loot.md)
- [訣竅](/zh-TW/services/playfab/resources/playfab-recipes.md)
- [什麼是獎勵廣告？](/zh-TW/services/playfab/economy-monetization/rewarded-ads/index.md)
