季节性排行榜

在本教程中,我们将介绍排行榜的版本控制概念。 在多种情况下,我们希望具有给定排行榜的不同版本。 例如,在具有每月锦标赛模式的游戏中,排行榜的结构保持不变,但玩家最有可能发生变化,尤其是在竞争激烈的游戏中。

我们继续学习 创建基本排行榜中的示例。 想象一下,我们的街机游戏现在非常受欢迎。 因此,引入了名为“山顶”的新模式。 每个月,该游戏都有一个任何玩家都可以参加的锦标赛。 无论谁进入前 100 名,都会显示在main菜单中的特殊排行榜中,这样每个人都可以看到谁在游戏中表现最好。

创建用于版本控制的排行榜定义

在前面的示例中,创建排行榜定义时,有一个提示,提示参数对于版本控制的重要性 VersionConfiguration 。 在这里,我们将详细介绍如何使用它及其工作原理。

public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = 1000,
        EntityType = "title_player_account",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 12,
            ResetInterval = ResetInterval.Month,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "arcadeScoreTournament",
                SortDirection = LeaderboardSortDirection.Descending,
            }          
        }
    };

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

与基本排行榜相比,此示例中的main差异是 VersionConfiguration 参数。 此参数允许我们定义一个 MaxQueryableVersions 设置,该设置指定我们可以查询的同一排行榜的多少个版本。 在本例中,我们将它设置为查询 12 个版本,以便查询 12 个更新的排行榜。 参数 ResetInterval 定义重置过程发生的频率。 此操作涉及使用与之前相同的配置创建一个排行榜,但为空,并且版本参数将更改如下:N = N + 1,在创建排行榜定义时 N = 0。

例如,假设有一个版本参数等于 2 的排行榜,排行榜上有一百个条目。 现在,当我们增加该排行榜的版本时,结果将是一个新的排行榜,其版本参数等于 3 且为空。 同时,上一个排行榜仍保留在系统中进行查询。

可以 ResetInterval 采用多种方式工作。 在此示例中,它是每月一次,但可以根据开发人员的需求对其进行更改。 在此特定情况下,这意味着排行榜将从配置的那一刻起每月自动重置。 我们支持以下重置策略:

  • 小时
  • 手动

有关所有可用配置的详细信息,检查此处的 API 文档:创建排行榜的 API 参考

递增排行榜的版本

使用此新配置,我们可以为锦标赛模式提供同一排行榜的多个版本。 但是,如果由于问题而需要手动重置排行榜并重新开始锦标赛,会发生什么情况呢? 在这种情况下,可以使用 API 执行手动重置。 下面是使用 SDK 的示例:


public static async Task ResetLeaderboards(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    IncrementLeaderboardVersionRequest resetLeaderboardRequest = new IncrementLeaderboardVersionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.IncrementLeaderboardVersionResponse> resetLeaderboardResponse = await leaderboardsAPI.IncrementLeaderboardVersionAsync(resetLeaderboardRequest);
}

查询旧版本

现在,如果需要查询旧版排行榜,可以使用 version 所有 GetLeaderboards API 上可用的 参数。 下面是使用 SDK 的示例:

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,
        Version = 1
    };

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

现在,我们将处理排行榜上版本控制的任何挑战。 此处的一个重要方面是,由于在服务中使用存储,我们决定保留作为版本而保留的排行榜定义的数量将按流量计费。 在此处查看有关此内容的详细信息:

结论

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

  • 创建具有正确重置策略的排行榜。
  • 递增排行榜的版本。
  • 查询排行榜的旧版本。

另请参阅