> ## 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 任务的教程，该任务在目标分段中的每个玩家身上运行一个或多个批量操作，例如授予奖励。

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

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

示例可能包括：

* 向过去 2 周内登录过的所有玩家赠送特殊的新年礼物。
* 奖励过去一周内消费的玩家（根据消费级别），花的钱越多，礼物越有价值。
* 修复受最近游戏错误影响的所有玩家的损坏玩家状态。

在本教程中，基于我们的 **Unicorn Battle Sample App**，我们将向所有 **XP 超过 2,725** 的玩家授予一份特殊礼物。

## 先决条件

你需要安装 Unicorn Battle Sample App 才能运行本教程。你可以在 [我们的博客](https://blog.playfab.com/blog/check-out-unicorn-battle) 中阅读有关它的更多信息，或直接前往 [GitHub 存储库](https://github.com/PlayFab/UnicornBattle) 并按照那里的说明操作。

<img src="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" alt="Unicorn Battle - 启动屏幕" width="2560" height="1440" data-path="images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-launch-screen.webp" />

你需要玩 *几场* 战斗，以便将你的角色升级到至少 **2 级**，达到该等级需要 **2,725 XP** 点。

<img src="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" alt="Unicorn Battle - 2 级" width="2560" height="1440" data-path="images/playfab/data-analytics/acting-data/tutorials/unicorn-battle-level-two.webp" />

## 步骤 1 - 创建分段

第一步是创建定义将受此操作影响的玩家组的分段。在这种情况下，我们需要创建 **High XP Segment**，定义为所有拥有超过 **2,725 XP** 的玩家：

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

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

<img src="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" alt="Game Manager - PlayStream - Segments - High XP Players" width="1394" height="817" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-high-xp-players.png" />

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

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

<img src="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" alt="Game Manager - PlayStream - Segments - Run Task" width="902" height="598" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-run-task.png" />

这将带你进入 **Servers**->**Tasks** 选项卡中的 **Create Task** 视图，并根据你选择的分段预填充各个字段。

<img src="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" alt="Game Manager - Servers - Task - Create Task" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-create-task.png" />

## 步骤 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** 按钮以运行任务。

<img src="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" alt="Game Manager - Servers - Task - Add Action - Save and Run" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-task-add-action-save-and-run.png" />

## 步骤 4 - 监视你的任务

**Tasks** 视图将向你显示正在运行的任务。最初任务状态为 **InProgress**，但由于分段很小，它将迅速更改为 **Succeeded**。

<img src="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" alt="Game Manager - Servers - Tasks - Task Succeeded" width="1280" height="720" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-succeeded.png" />

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

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

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

<img src="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" alt="Game Manager - Servers - Tasks - Task Instance Details" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-task-instance-details.png" />

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

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

<Note>
  你可以展开此事件以查看详细信息。
</Note>

<img src="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" alt="Game Manager - Event History - Event Detail" width="1458" height="622" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-event-history-event-detail.png" />

## 后续步骤

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

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

### 计划你的任务

你无需手动运行任务 - 你可以计划任务以 *定期* *自动* 运行。例如，你可以创建一个包含过去 24 小时内玩过游戏的所有玩家的分段，然后每天运行一个计划任务，为这些玩家提供 XP 加成。

<img src="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" alt="Game Manager - PlayStream - Segments - Players in 24 hours" width="780" height="815" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-segments-players-in-24-hours.png" />

<img src="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" alt="Game Manager - Servers - Tasks - Scheduled Task" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/game-manager-servers-tasks-scheduled-task.png" />

### 为每个玩家运行 CloudScript

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

例如，假设你有一个每周重置的事件排行榜，你想遍历所有玩家，根据重置前 *最后一次* 事件的值给予奖励。下面提供的示例使用 **Unicorn Battle**。

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

   <img src="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" alt="Players - Leaderboards - Edit Leaderboard" width="571" height="541" data-path="images/playfab/data-analytics/acting-data/tutorials/players-leaderboards-edit-leaderboard.png" />

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

   <img src="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" alt="PlayStream - Event Actions - Edit Event Action" width="1043" height="943" data-path="images/playfab/data-analytics/acting-data/tutorials/playstream-event-actions-edit-event-action.png" />

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` 函数。别忘了 **保存** 并 **运行** 任务。

   <img src="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" alt="Servers - Tasks - New Scheduled Task" width="1280" height="900" data-path="images/playfab/data-analytics/acting-data/tutorials/servers-tasks-new-scheduled-task.png" />

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

   <img src="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" alt="PlayStream - Dashboard - Event Debugger" width="3079" height="1050" data-path="images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-event-debugger.png" />

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

   <img src="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" alt="PlayStream - Dashboard - Raw Event JSON" width="1464" height="1923" data-path="images/playfab/data-analytics/acting-data/tutorials/playstream-dashboard-raw-event-json.png" />


## Related topics

- [PlayFab 在线运营管理文档](/zh-CN/services/playfab/live-service-management/index.md)
- [玩家细分](/zh-CN/services/playfab/player-progression/player-data/player-segments.md)
- [玩家分段](/zh-CN/services/playfab/live-service-management/game-configuration/segmentation/segmentation-quickstart.md)
- [PlayFab Economy v2 文档](/zh-CN/services/playfab/economy-monetization/index.md)
- [启用或禁用服务生成的事件](/zh-CN/services/playfab/data-analytics/ingest-data/opt-in-events.md)
