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

# Using Prize Tables

> Create PlayFab prize tables that grant virtual currency, inventory items, push notifications, or CloudScript actions to top ranks when a leaderboard resets.

이 튜토리얼에서는 [재설정 가능한 리더보드](/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards)에서 일정 순위 범위에 있는 플레이어 그룹에 대해 일련의 작업을 트리거하는 상품 테이블을 만드는 방법을 안내합니다.

특히 이는 리더보드가 재설정될 때 이메일을 트리거하거나, 푸시 알림을 전송하거나, [Inventory Items](/services/playfab/player-progression/player-data/player-inventory)와 [Virtual Currency](/services/playfab/economy-monetization/economy/tutorials/currencies)를 지급하거나, [CloudScript](/services/playfab/live-service-management/service-gateway/automation/cloudscript/writing-custom-cloudscript) 함수를 실행할 수 있는 방법입니다.

이 예시에서는 토너먼트 종료 상품을 위한 상품 테이블을 만드는 방법을 보여줍니다. 이는 재설정이 수행된 후 리더보드의 순위에 따라 5명의 플레이어에게 가상 화폐를 부여합니다.

## 요구 사항

<Info>
  이는 *고급* 튜토리얼입니다. 아래에 표시된 모든 요구 사항이 충족되었는지 확인하세요. 그렇지 않으면 이 튜토리얼을 완료할 수 *없습니다*.
</Info>

* 리더보드에 플레이어가 있어야 이 튜토리얼의 어떤 작업도 수행할 수 있으므로, 플레이어를 만드는 방법에 대한 기본 지식이 필요합니다.
* 상품 테이블이 생성되는 장소가 Game Manager이므로, Game Manager에 익숙하지 않다면 [Game Manager 빠른 시작](/services/playfab/live-service-management/gamemanager/quickstart)을 읽어 두는 것이 좋습니다.
* 상품 테이블을 사용하려면 재설정 가능한 리더보드가 어떻게 작동하는지에 대한 일반적인 지식이 있어야 합니다. 튜토리얼 [재설정 가능한 통계 및 리더보드 사용](/services/playfab/community/leaderboards/tournaments-leaderboards/using-resettable-statistics-and-leaderboards)에서 리더보드에 대한 내용을 읽어 보세요.
* 또한 가상 화폐를 설정해야 합니다. [Currencies](/services/playfab/economy-monetization/economy/tutorials/currencies)에 대한 튜토리얼을 읽고 다음 매개 변수로 두 개의 화폐를 설정하세요.
  * **Currency code**: GO
  * **Display name**: Gold
  * **Initial deposit**: 200
  * **Currency code**: SI
  * **Display name**: Silver
  * **Initial deposit**: 1000

## 1단계 - 리더보드 만들기

Game Manager에서:

* 왼쪽 메뉴에서 **Leaderboards**로 이동합니다.
* **New Leaderboard**를 선택합니다.
* **Statistic name** 필드에 **tournamentScore\_manual**이라는 **Leaderboard**를 추가합니다.
* 제공된 드롭다운 메뉴에서 **Reset frequency** 필드를 **Manually**로 설정합니다.
* **Aggregation method** 필드로 이동하여 드롭다운 메뉴에서 \*\*Maximum (always use the highest value)\*\*를 선택합니다.

<img src="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" alt="Game Manager - Leaderboards - New Leaderboard" width="1280" height="900" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-new-leaderboard.png" />

## 2단계 - 리더보드에 대한 상품 테이블 만들기

이제 리더보드가 생성되었으므로 상품 테이블을 연결할 수 있습니다. 다음으로 이동합니다.

* 왼쪽 메뉴의 **Leaderboards**.
* **Prize Tables** 탭 선택.
* **NEW PRIZE TABLE** 버튼을 선택하여 **New Prize Table** 뷰로 이동합니다.

<img src="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" alt="Game Manager - Leaderboards - Prize Tables" width="1392" height="705" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-prize-tables.png" />

**New Prize Table** 뷰에서:

* **INFO** 영역으로 이동하여 **New Prize Table**의 **Name**으로 **End Tournament Prizes**를 입력합니다.
* **Leaderboard** 드롭다운 메뉴에서 **tournamentScore\_manual**을 선택합니다.

이 상품 테이블이 어떤 작업을 수행하려면 순위를 설정해야 합니다. 이를 위해:

* **TABLE CONTENTS** 섹션 아래의 **+ ADD RANK**를 선택합니다.
* **Rank** 폼이 나타납니다.

<img src="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" alt="Game Manager - Leaderboards - New Prize Table" width="973" height="1187" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-new-prize-table.png" />

**Rank** 폼에서:

* **Rank from** 필드 값이 **1**인지 확인합니다.
* **To (inclusive)** 필드 값이 **2**인지 확인합니다.
* **Type** 드롭다운 메뉴에서 **Grant virtual currency**를 선택합니다.
* **virtual currency code** 드롭다운 메뉴에서 \*\*GO (Gold)\*\*를 선택하고 금액을 **10**으로 설정합니다.

<img src="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" alt="Game Manager - Leaderboards - Prize Table - Add Rank" width="1294" height="1259" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-prize-table-add-rank.png" />

이제 두 번째 순위 범위를 추가합니다.

* **TABLE CONTENTS** 섹션 아래의 **+ADD RANK**를 선택합니다(하단에도 *두 번째* 버튼이 있으며 동일하게 작동합니다).
* 나타나는 **Rank** 폼에서 **Rank from** 필드 값이 **3**이고 **To (inclusive)** 필드 값이 **5**인지 확인합니다.
* **Virtual currency code** 드롭다운에서 **SI**(**Silver**)를 선택하고 금액을 **10**으로 설정합니다.

<img src="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" alt="Game Manager - Leaderboards - Prize Table - Add Second Rank" width="875" height="1250" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-prize-table-add-second-rank.png" />

## 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** 버튼을 선택합니다.

<img src="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" alt="Game Manager - Settings - API Features - Allow client to post player statistics" width="2079" height="1191" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/api-features-allow-client-to-post-player-statistics.png" />

### C# 코드 예시

다음 **C#** 코드 예시는 5명의 플레이어를 만들고 [LoginWithCustomID](xref:titleid.playfabapi.com.client.authentication.loginwithcustomid)를 사용하여 로그인합니다.

그런 다음 [UpdatePlayerStatistics](xref:titleid.playfabapi.com.client.playerdatamanagement.updateplayerstatistics)를 사용하여 앞서 만든 리더보드(`tournamentScore_manual`)에 5명의 플레이어를 값 **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**을 선택하면 값이 **105**, **104**, **103**, **102**, **101**인 5명의 **플레이어**가 표시되어야 합니다.

<img src="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" alt="Game Manager - Leaderboards - View Leaderboard - Check values" width="1988" height="910" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-leaderboards-view-leaderboard-check-values.png" />

## 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**에 추가된 나머지 4명의 플레이어에 대해서도 이 작업을 수행합니다.
* 이들의 **GO**(**Gold**) 및 **SI**(**Silver**) 화폐 값을 기록해두어야 합니다(재설정 후 상품 테이블이 작동했는지 확인하는 데 중요합니다).

<img src="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" alt="Game Manager - Players - Virtual Currency - Check values" width="1439" height="853" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-players-virtual-currency-check-values.png" />

## 5단계 - 리더보드를 재설정하여 보상 지급

이제 **Leaderboards**로 이동합니다.

* **Leaderboards** 목록 뷰로 돌아갑니다.

* **tournamentScore\_manual**을 선택합니다.

* **Leaderboard**의 **Players** 위치를 기록해 둡니다(이는 *0부터 시작*하므로, 위치 **0**이 *1위*입니다).

* **RESET NOW** 버튼을 선택합니다.

* **RESET** 버튼을 선택하여 **Leaderboard** 재설정을 확인합니다.

* 이 작업은 **Players** 목록을 지웁니다.

<img src="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" alt="Game Manager - Leaderboards - Check player positions" width="1988" height="910" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-leaderboards-check-player-positions.png" />

* 화면 상단의 **RESET NOW** 버튼을 선택합니다.
* **Reset this Leaderboard now?** 메시지가 표시되면 **RESET** 버튼을 선택하여 재설정을 확인합니다.
* 이 작업은 **Players** 목록을 지웁니다.

<img src="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" alt="Game Manager - Reset Leaderboard" width="1682" height="956" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-reset-leaderboard.png" />

## 6단계 - 상품 테이블이 작동하는지 테스트

상품 테이블이 작동했는지 확인하려면 리더보드에 있는 플레이어들이 올바른 금액의 화폐를 받았는지 확인할 수 있습니다. 이는 플레이어의 PlayStream Debugger에서 빠르게 확인할 수 있습니다.

PlayStream Debugger에서 이를 확인하려면:

* 왼쪽 메뉴에서 **Players**를 선택합니다.
* **PlayStream** 탭에는 **Leaderboard**에서 **Player**의 순위 이벤트에 이어 **Virtual Currency** 업데이트가 표시됩니다.

<img src="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" alt="Game Manager - Players - PlayStream Debugger - Check Leaderboard Events" width="1147" height="887" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-playstream-debugger-check-leaderboard-events.png" />

이제 플레이어들이 올바른 화폐를 받았는지 수동으로 확인해 보겠습니다.

* 왼쪽 메뉴에서 **Players**를 선택합니다.
* **Players** 탭에서 화면의 **Virtual Currency** 영역으로 이동합니다.
* 화폐가 올바르게 지급되었는지 확인합니다.
* 이 값은 앞서 기록한 값보다 *한 단위 더 많아야* 합니다.
* 리더보드 위치 **0** 또는 **1**의 **플레이어**는 **10 gold**를 얻었고 *silver는 지급되지 않았음*에 유의하세요.
* 반면 위치 **2**, **3**, **4**의 **플레이어**는 **10 silver**를 받았고 *gold는 받지 않았습니다*.
* 이는 상품 테이블에 설정된 작업과 일치합니다.

<img src="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" alt="Game Manager - Player1 - Check Virtual Currency Amount" width="1248" height="805" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-player1-check-vc-amount.png" />

<img src="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" alt="Game Manager - Player2 - Check Virtual Currency Amount" width="1268" height="834" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-player2-check-vc-amount.png" />

**Virtual Currency**가 올바르게 지급되었는지 확인하는 또 다른 방법은 다음과 같습니다.

* **Players**로 이동합니다.
* **Event History**를 확인합니다.
* 여기에는 **player\_virtual\_currency\_balance\_changed** 이벤트가 표시되며, 지급된 **Virtual Currency**의 변경된 금액에 대한 구체적인 세부 정보가 포함됩니다.

<img src="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" alt="Game Manager - Players - Event History Chart - Check Virtual Currency Change" width="1861" height="968" data-path="images/playfab/community/leaderboards/tournaments-leaderboards/tutorials/game-manager-players-event-history-chart-check-vc-changed.png" />


## Related topics

- [레시피](/ko/services/playfab/resources/playfab-recipes.md)
- [FFTInitializeUnityTable](/ko/reference/audio/xdsp/functions/fftinitializeunitytable.md)
- [XR-022 공식 이름 지정 표준](/ko/publishing/certification/xr/xr-022.md)
- [D3D12_ROOT_DESCRIPTOR_TABLE](/ko/reference/graphics/d3d12/structs/d3d12_root_descriptor_table_public.md)
- [SetGraphicsRootDescriptorTable](/ko/reference/graphics/d3d12/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_setgraphicsrootdescriptortable_public.md)
