对整个玩家细分的批量操作

本教程将指导您完成创建任务以便对某个细分中的每个玩家均执行一个或多个操作所需的步骤。

任务是任何游戏的实时操作的重要组成部分。 它们为你提供了一组功能强大的工具,用于与玩家互动。

示例包括:

  • 向在过去 2 周内登录的所有玩家赠送特别的新年礼物。
  • 奖励上周花钱的玩家(基于消费等级),花费越高,礼物越有价值。
  • 修复受最近游戏错误影响的所有玩家的已损坏玩家状态。

在本教程中,我们将以 Unicorn Battle 示例应用为例,介绍如何向超过 2,725 经验值的所有玩家赠送特殊礼物。

先决条件

需要安装 Unicorn Battle 示例应用才能执行本教程中的操作。 您可以在我们的博客中阅读有关它的更多信息,或者直接转到 GitHub 存储库,按照其中的说明进行操作。

Unicorn Battle - 启动屏幕

您需要玩几场 战斗,以便将角色至少升级到关卡 2,那时您将达到 2,725 经验值

Unicorn Battle - 关卡 2

第 1 步 - 创建细分

第一步是创建用于定义将受此操作影响的玩家组的细分。 在本例中,我们需要创建高经验值细分,定义为超过 2,725 经验值的所有玩家:

  • 从左侧菜单中选择 PlayStream
  • 选择 Segments 选项卡。
  • 然后选择 New Segment 按钮。
  • 创建 Segment NameHigh XP Players
  • 将其定义为 Player,其中名为 Total_XP GainedStatistic Value 大于 2725

注意: 当前计划的任务系统每秒可处理每段 10-15 个任务。 提前设计段计划时,应确定它们的大小以及任务执行将运行多长时间。 任务可以运行的时间没有限制,但如果任务需要在特定时间范围内执行,则需要正确调整段的大小。

Game Manager - PlayStream - Segments - High XP Players

第 2 步 - 为此细分创建一个任务

  • 选择 Segments 选项卡。
  • 然后选择 RUN TASK …

Game Manager - PlayStream - Segments - Run Task

这会转到 服务器->任务 选项卡的 创建任务 视图中,并且将根据所选细分预填充各个字段。

Game Manager - Servers - Task - Create Task

第 3 步 – 将操作添加到任务

接下来,可以完成对任务的设置。

  • 将名称更改为 Reward High XP Players
  • 添加以下说明:Give a gift to Players who are level 2 or higher
  • 选择 ADD ACTION
    • 在提供的字段中键入 Grant virtual currency
    • Virtual Currency codeGMGems 的简称)。
    • Amount:20
  • 暂时将计划设置为 Manually
  • 选择 SAVE AND RUN 按钮,运行任务。

Game Manager - Servers - Task - Add Action - Save and Run

第 4 步 - 监视您的任务

Tasks 视图将显示正在运行的任务。 开始时,任务状态为 InProgress,但很快变为 Succeeded,因为该细分很小。

Game Manager - Servers - Tasks - 任务成功

现在,我们来查看任务执行详细信息。 在先前运行的 Tasks 列表中选择完成的任务。 您将看到重要信息,例如:

  • 处理了多少玩家。
  • 此任务是何时启动的。
  • 用了多长时间完成。
  • 它在启动时具有的参数。
  • 运行者是谁。
  • 它是不是手动计划的等。

如果任务仍在进行,可以查看 Task Instance Detail 视图了解进度,还可以查看估计剩余时间。

Game Manager - Servers - Tasks - Task Instance Details

验证任务是否成功运行:

  • 导航到 Players 选项卡。
  • 选择您的玩家
  • 然后选择 Event History 选项卡。
  • 列表中最近的事件应该是 player_virtual_currency_balance_changed,并且应显示玩家的宝石增加了 20

注意

展开此事件可查看详细信息。

Game Manager - Event History - 事件详细信息

下一步

本教程介绍了为某个细分中的每个玩家执行操作所涉及的步骤,您还可以对任务执行更多操作。

下面是一些其他方面的想法,您可以尝试一下…

计划您的任务

您无需手动运行任务 - 您可以将任务计划为定期自动 执行。 例如,您可以创建一个在过去 24 小时内玩此游戏的所有玩家的细分,然后每天运行计划的任务,使这些玩家能够提升经验值。

Game Manager - PlayStream - Segments - Players in 24 hours

Game Manager - Servers - Tasks - 已计划的任务

为每个玩家运行 CloudScript

批量操作最有效的使用方式是为每个玩家运行任意 CloudScript 函数。 此 CloudScript 可执行 PlayFab Server API 能够执行的任何操作 - 授予物品、货币、检查和更改玩家数据等。

例如,假设您有一个每周都重置的事件排行榜,您需要查看所有玩家,并且在重置前根据最后一个 事件的值给予奖励。 下面提供的示例使用 Unicorn Battle

  1. 创建一个新的统计信息 Event_QuestsCompleted,它每周都重置,并且使用聚合方法 Last

    Players - Leaderboards - Edit Leaderboard

  2. 创建一个新的 PlayStream 操作,在每次更改 Total_QuestsCompleted 时此操作都会递增其 Event_QuestsCompleted 统计信息。

    PlayStream - Event Actions - Edit Event Action

  3. 编写将由批量操作任务调用的 CloudScript 函数,用于查看玩家并根据最后一个值给予奖励。

// this function will be called as a bulk action by a scheduled task for players in a segment
handlers.GiveTieredReward = function (args, context) {
    var profile = context.playerProfile;

    var statVersion = 0;        // set to whatever version you need to use

    var getStatRequest = {};
    getStatRequest.PlayFabId = profile.PlayerId;
    getStatRequest.StatisticNameVersions = [{ "StatisticName": "Event_QuestsCompleted", "Version": statVersion }];

    try {
        getStatRequest.PlayerResult = server.GetPlayerStatistics(getStatRequest);
    } catch (e) {
    };

    if (getStatRequest.PlayerResult && getStatRequest.PlayerResult.Statistics.length > 0) {
        getStatRequest.lastScore = getStatRequest.PlayerResult.Statistics[0].Value
    }

    if (getStatRequest.lastScore && getStatRequest.lastScore > 2) {
        // give gift to all players with more than 2 quests completed in last event
        // in a real event we would want to use a lookup table of gifts
        // but here we are just hard-coding it
        var giftRequest = {};
        giftRequest.PlayFabId = profile.PlayerId;
        giftRequest.ItemIds = ["CrystalKey"];
        giftRequest.grantResult = server.GrantItemsToUser(giftRequest);
        return giftRequest;
    } else {
        return getStatRequest;
    }
}
  1. 将新的 CloudScript 版本设置为 Live,并创建一个新任务,为所有玩家调用 GiveTieredReward 函数。 不要忘记保存运行任务。

    Servers - Tasks - New Scheduled Task

  2. 您会注意到,来自此任务的事件显示在 PlayStream 事件调试程序中。

    PlayStream - Dashboard - Event Debugger

  3. 您可以选择任何玩家触发的操作执行的 CloudScript 事件(通过选择时间戳),然后查看每个玩家的详细 CloudScript 执行结果。 这包括有用的诊断信息,例如在 CloudScript 执行时的玩家档案快照。

    PlayStream - Dashboard - Raw Event JSON