将上下文数据添加到排行榜

在本教程中,我们将说明每当更新排行榜时如何添加上下文信息。 游戏工作室可能希望添加一些有关玩家获得分数的上下文的详细信息,或者游戏中可能存在与该给定分数相关的功能。

现在,我们将从之前的示例(我们有一个街机游戏)切换到一个竞争激烈的射击游戏。 在此示例中,游戏取得了巨大的成功,但面临着一个挑战。 关于人们使用外部组件“黑客攻击”游戏的抱怨太多了,这些组件可以消除武器上的后退力,并改善目标辅助。 因此,现在我们负责跟踪有关已排名匹配项所使用的所有组件和网络信息的详细信息。

创建排行榜

为了演示如何处理此方案,我们将从“ 使用排行榜做得更多 ”页中获取排行榜定义。 在此定义中,我们将了解如何将元数据添加到添加到排行榜的每一行。

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 = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Eliminations",
                SortDirection = LeaderboardSortDirection.Descending,
            },
            new LeaderboardColumn()
            {
                Name = "Assists",
                SortDirection = LeaderboardSortDirection.Descending,
            }
            new LeaderboardColumn()
            {
                Name = "Deaths",
                SortDirection = LeaderboardSortDirection.Ascending,
            }         
        }
    };

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

向每行添加元数据

我们想知道玩家是否有任何影响游戏玩法的未经授权的硬件,或者任何其他可能提高玩家性能的恶意软件。 反作弊系统能够获取所有这些信息,但由于有大量的玩家,我们将重点介绍标记检查高分以及来自外部组件的元数据。

若要执行此操作,我们将使用 UpdateLeaderboard API。 在这里,我们可以检查 SDK 示例:

public static async Task UpdateLeaderboardForPlayer(PlayFabAuthenticationContext context, string leaderboardName, string entityId, int score)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    UpdateLeaderboardEntriesRequest updateLeaderboardRequest = new UpdateLeaderboardEntriesRequest()
    {
        Entries = new List<LeaderboardEntryUpdate>()
        {
            new LeaderboardEntryUpdate()
            {
                EntityId = entityId,
                Scores = new List<string> { score.ToString(), (score + 1).ToString(), (score + 2).ToString() },
                Metadata = "AntiCheat Data",
            }
        },
        AuthenticationContext = context,
        LeaderboardName = leaderboardName,
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> updateResult = await leaderboardsAPI.UpdateLeaderboardEntriesAsync(updateLeaderboardRequest);
}

在这里,我们使用 Metadata 中的 LeaderboardEntryUpdate 参数来添加对开发人员有意义的信息。 在本例中,我们将使用它来存储反作弊数据。 通过此示例,我们现在可以跟踪来自顶级玩家的所有相关信息,使游戏审查者能够更好地决定禁止谁。

结论

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

  • 创建多列排行榜。
  • 将元数据添加到排行榜的每一行。

另请参阅