> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

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

> 有关创建 PlayFab 任务的教程，该任务对目标细分中的每个玩家运行一个或多个批量操作，例如发放奖励。

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

任务是任何游戏实时运营的重要组成部分。它们为你提供了一套与玩家互动的强大工具。

示例可能包括：

* 向过去 2 周内登录过的所有玩家赠送特别的新年礼物。
* 奖励上周花过钱的玩家（基于消费等级），花的钱越多，礼物越贵重。
* 为受最近游戏 bug 影响的所有玩家修复损坏的玩家状态。

在本教程中，我们将基于 **Unicorn Battle 示例应用**，向所有 **XP 超过 2,725** 的玩家发放特别礼物。

## 先决条件

你需要安装 Unicorn Battle 示例应用才能运行本教程。你可以[在我们的博客中](https://blog.playfab.com/blog/check-out-unicorn-battle)了解更多信息，或直接前往 [GitHub 存储库](https://github.com/PlayFab/UnicornBattle)并按照其中的说明进行操作。

![Unicorn Battle - 启动屏幕](https://mintcdn.com/microsoft-4404708b/YzmQFdAfhA-NTCPa/images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-launch-screen.webp?fit=max\&auto=format\&n=YzmQFdAfhA-NTCPa\&q=85\&s=682e9a99bb6293229a452095255ce2f2)

你需要进行*多场*战斗，以便将角色升级到至少 **2 级**，达到 **2,725 XP** 点即可升至该等级。

![Unicorn Battle - 2 级](https://mintcdn.com/microsoft-4404708b/YzmQFdAfhA-NTCPa/images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-level-two.webp?fit=max\&auto=format\&n=YzmQFdAfhA-NTCPa\&q=85\&s=0f47eb0af3bb618e2aa449df163305f0)

## 步骤 1 - 创建细分

第一步是创建细分，用于定义将受此操作影响的玩家组。在本例中，我们需要创建 **High XP Segment**，其定义为所有 **XP 超过 2,725** 的玩家：

* 从左侧菜单中选择 **PlayStream**。
* 选择 **Segments** 选项卡。
* 然后选择 **New Segment** 按钮。
* 将 **Segment Name** 设置为：**High XP Players**。
* 将其定义为 **Player**，其中名为 **Total\_XP Gained** 的 **Statistic Value** 大于 **2725**。

> [!NOTE]
>
> **注意：** 当前的计划任务系统每个细分每秒可以处理 10-15 个任务。设计细分时，请提前规划细分的规模以及任务执行将运行多长时间。任务的运行时长没有限制，但如果任务需要在特定时间范围内执行，则需要适当调整细分的规模。

![Game Manager - PlayStream - 细分 - High XP Players](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-high-xp-players.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=277244d7f9813aa8821acc626b4a903a)

## 步骤 2 - 为此细分创建任务

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

![Game Manager - PlayStream - 细分 - 运行任务](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-run-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=82870774c3122881a0419e880078401d)

这将转到 **Servers**->**Tasks** 选项卡中的 **Create Task** 视图，并根据所选细分预先填充各个字段。

![Game Manager - 服务器 - 任务 - 创建任务](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-create-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=155bf1e0a504d077fc5aeea920791f65)

## 步骤 3 - 向任务添加操作

接下来，你可以完成任务的设置。

* 将名称更改为 **Reward High XP Players**
* 添加以下说明：**Give a gift to Players who are level 2 or higher**。
* 选择 **ADD ACTION**
  * 在提供的字段中键入 **Grant virtual currency**。
  * **Virtual Currency** 代码：**GM**（**Gems** 的缩写）。
  * 数量：**20**
* 暂时将计划设置保留为 **Manually**。
* 选择 **SAVE AND RUN** 按钮以运行任务。

![Game Manager - 服务器 - 任务 - 添加操作 - 保存并运行](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-add-action-save-and-run.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=88be2126823b5296a972acebe78fb0e8)

## 步骤 4 - 监视任务

**Tasks** 视图将显示正在运行的任务。最初任务状态为 **InProgress**，但由于细分很小，它会很快变为 **Succeeded**。

![Game Manager - 服务器 - 任务 - 任务成功](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-succeeded.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=f947e3bac92c4b78e3dd01f55d9a1ca3)

现在，我们来查看任务执行详细信息。在之前运行的 **Tasks** 列表中选择已完成的任务。你将看到重要信息，例如：

* 处理了多少玩家。
* 任务何时开始。
* 完成所用的时间。
* 启动时的参数。
* 运行者。
* 是否为手动计划等。

如果任务仍在进行中，你可以在 **Task Instance Detail** 视图中查看进度，并查看预计剩余时间。

![Game Manager - 服务器 - 任务 - 任务实例详细信息](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-instance-details.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=6a29866408f6240c680cc1a48d0d0130)

若要验证任务是否成功运行：

* 导航到 **Players** 选项卡。
* 选择你的 **Player**。
* 然后选择 **Event History** 选项卡。
* 列表中最近的事件应为 **player\_virtual\_currency\_balance\_changed**，它应显示你的**玩家**的宝石增加了 **20**。

> [!NOTE]
>
> 你可以展开此事件以查看详细信息。

![Game Manager - 事件历史记录 - 事件详细信息](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-event-history-event-detail.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=8f5be92d094f953e458edc23c05339b9)

## 后续步骤

本教程介绍了对细分中的每个玩家执行操作所涉及的步骤，但你还可以使用任务执行更多操作。

以下是你可以尝试的其他一些想法...

### 计划任务

你无需手动运行任务，可以将任务计划为按*定期*方式*自动*运行。例如，你可以创建过去 24 小时内玩过游戏的所有玩家的细分，然后每天运行计划任务，为这些玩家提供 XP 提升。

![Game Manager - PlayStream - 细分 - 24 小时内的玩家](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-players-in-24-hours.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=011c1636bdcf356fef0958937679cdb6)

![Game Manager - 服务器 - 任务 - 计划任务](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-scheduled-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=b818b7055457a8d9e13d6128d9e0e31b)

### 为每个玩家运行 CloudScript

批量操作最强大的用途是为每个玩家运行任意 CloudScript 函数。此 CloudScript 可以执行 PlayFab 服务器 API 能执行的任何操作，例如发放物品、货币，检查和更改玩家数据等。

例如，假设你有一个每周重置的活动排行榜，并且你希望遍历所有玩家，并根据重置前*最后一次*活动的值发放奖励。下面提供的示例使用的是 **Unicorn Battle**。

1. 创建一个新统计信息 **Event\_QuestsCompleted**，它每周重置并使用聚合方法 **Last**。

   ![玩家 - 排行榜 - 编辑排行榜](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/players-leaderboards-edit-leaderboard.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=dc418906c884b0c685d0a4d05393dd7a)

2. 创建一个新的 PlayStream 操作，每当 `Total_QuestsCompleted` 更改时，该操作都会递增此 `Event_QuestsCompleted` 统计信息。

   ![PlayStream - 事件操作 - 编辑事件操作](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-event-actions-edit-event-action.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=7f0d65c83146783af200454981eec9c6)

3. 编写一个由批量操作任务调用的 CloudScript 函数，该函数将遍历玩家并根据最后一个值发放奖励。

```javascript theme={null}
// 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;
    }
}
```

4. 将新的 CloudScript 版本设置为 **Live**，并创建一个为所有玩家调用 `GiveTieredReward` 函数的新任务。不要忘记**保存**并**运行**任务。

   ![服务器 - 任务 - 新建计划任务](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/servers-tasks-new-scheduled-task.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=984b0ca050712fd0ad357ed1aa8365dd)

5. 你应该会注意到此任务的事件出现在 PlayStream 事件调试器中。

   ![PlayStream - 仪表板 - 事件调试器](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-event-debugger.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=aed7ba302609d3de83967a15e6ffaff4)

6. 你可以选择任何玩家触发的操作执行 CloudScript 事件（通过选择时间戳），并查看每个玩家 CloudScript 执行的详细结果。这包括有用的诊断信息，例如 CloudScript 执行时玩家配置文件的快照。

   ![PlayStream - 仪表板 - 原始事件 JSON](https://mintcdn.com/microsoft-4404708b/IwSYTY5BEqd_x-HK/images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-raw-event-json.png?fit=max\&auto=format\&n=IwSYTY5BEqd_x-HK\&q=85\&s=02ea8cca957596e793448dfa583d7c0c)


## Related topics

- [玩家细分](https://docs.xbox.com/zh-CN/services/playfab/player-progression/player-data/player-segments.md)
- [玩家细分配置](https://docs.xbox.com/zh-CN/services/playfab/player-progression/player-data/player-segment-configuration.md)
- [PlayFab 在线运营管理文档](https://docs.xbox.com/zh-CN/services/playfab/live-service-management/index.md)
- [获取玩家细分](https://docs.xbox.com/zh-CN/services/playfab/api-references/rest/client/play-stream/get-player-segments.md)
- [将细分作为维度](https://docs.xbox.com/zh-CN/services/playfab/data-analytics/learn-data/trends/segments-dimension-overview.md)
