> ## 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 排行榜之上构建手动分级系统，将玩家分为 Bronze、Silver、Gold、Platinum、Diamond 和 Savior 级别。

# 使用排行榜的手动分级

在本教程中，我们将学习如何在排行榜服务中应用某些属性，为玩家创建一个分级系统。为了理解如何基于服务属性创建手动分级系统，我们先从一个示例开始。想象一下我们有一个僵尸射击游戏，玩家在有限时间内尽可能多地得分。可以采用不同的策略来获取更多分数，此外还有不受任何伤害的分数。

在此示例中，玩家根据每场比赛的表现获得经验值。我们希望创建一个分级系统，将排名最高的玩家标识为“Saviors”，而其余玩家将分布在诸如 Bronze、Silver、Gold、Platinum 和 Diamond 等不同级别中。

## 创建排行榜

第一步是创建一个包含用于给玩家排名的主要元素的排行榜定义。对于我们的僵尸游戏，我们将使用多个分数。以下示例展示了如何使用 C# SDK 创建排行榜定义。

```C# theme={null}
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = 10000,
        EntityType = "title_player_account",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Eliminations",
                SortDirection = LeaderboardSortDirection.Descending,
            },
            new LeaderboardColumn()
            {
                Name = "SkillPoints",
                SortDirection = LeaderboardSortDirection.Descending,
            }
            new LeaderboardColumn()
            {
                Name = "Deaths",
                SortDirection = LeaderboardSortDirection.Ascending,
            }         
        }
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
```

至此，我们的排行榜定义中包含了三个不同的分数。有关创建排行榜的更多信息或了解并列打破的工作方式，请查看以下指南：[排行榜的更多用法](/services/playfab/community/leaderboards/doing-more-with-leaderboards)。

## 手动分级

在正确创建排行榜后，我们现在可以继续定义如何创建各分级。首先，我们需要定义如何划分玩家群体。通常，级别越高，玩家越少。基于这个概念，以下是我们分级的定义方式。

* Bronze：0 - 35% 的玩家。
* Silver：35% - 60% 的玩家。
* Gold：60% - 80% 的玩家。
* Platinum：80% - 90% 的玩家。
* Diamond：90% - 99.5% 的玩家。
* Saviors：排名前 0.05% 的玩家。

由于此过程是分级系统的手动方法，玩家的分布需要以开发者认为合适的任何方式进行存储。

为了检索数据，我们将使用以下示例：

```C# theme={null}
public static async Task<List<EntityLeaderboardEntry>> GetLeaderboard(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    GetEntityLeaderboardRequest getLbRequest = new GetEntityLeaderboardRequest()
    {
        LeaderboardName = leaderboardName,
        StartingPosition = 1,
        PageSize = 20,
        AuthenticationContext = context,
    };

    PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
    
    return lbResponse.Result;
}
```

此示例是我们从排行榜检索数据的多种方式之一。在响应的 Result 属性中，我们将找到一个名为 `EntryCount` 的属性，它告诉我们排行榜当前有多少行。此数字不同于 `SizeLimit`，后者表示排行榜的最大行数。

要确定玩家的级别，我们取其在排行榜中的位置并除以 `EntryCount` 属性，以查看他们在定义的级别中处于什么位置。

快速示例：

* 底部玩家：在 10,000 名中位于第 8500 位的玩家处于人群的 85% 内，落入 Bronze 级别。
* 中等玩家：在 10,000 名中位于第 3500 位的玩家处于玩家前 35% 内，落入 Gold 级别。
* 顶级玩家：在 10,000 名中位于第 50 位的玩家处于玩家前 0.5% 内，成为“Savior”。

## 结论

在本教程中，我们学习了如何执行以下操作：

* 创建排行榜。
* 了解如何从排行榜查询数据。
* 了解如何基于百分位数创建手动分级分布。
* 了解如何将玩家位置的结果映射到实际级别。

## 另请参阅

* [排行榜的更多用法](/services/playfab/community/leaderboards/doing-more-with-leaderboards)。
* [创建基本排行榜](/services/playfab/community/leaderboards/create-basic-leaderboard)
* [组排行榜](/services/playfab/community/leaderboards/group-leaderboards)。
* [限制](/services/playfab/community/leaderboards/limits-leaderboards)。
* [配额 ](/services/playfab/community/leaderboards/quota-leaderboards)。
* [按统计信息对玩家排名](/services/playfab/community/leaderboards/leaderboards-linked-to-stats)
* [向排行榜添加上下文数据](/services/playfab/community/leaderboards/metadata-leaderboards)
* [API 参考](/services/playfab/community/leaderboards/api-reference)
* [排行榜与 CloudScript](/services/playfab/community/leaderboards/leaderboards-cloudscript)。
* [排行榜与 PlayStream](/services/playfab/community/leaderboards/leaderboards-with-playstream-and-telemetry)


## Related topics

- [排行榜配额](/zh-CN/services/playfab/community/leaderboards/quota-leaderboards.md)
- [季节性排行榜](/zh-CN/services/playfab/community/leaderboards/seasonal-leaderboards.md)
- [排行榜的限制](/zh-CN/services/playfab/community/leaderboards/limits-leaderboards.md)
- [排行榜快速入门](/zh-CN/services/playfab/community/leaderboards/quickstart-leaderboards.md)
- [向排行榜添加上下文数据](/zh-CN/services/playfab/community/leaderboards/metadata-leaderboards.md)
