> ## 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 範例應用程式**為基礎，為所有超過 **2,725 XP** 的玩家授與一份特別禮物。

## 必要條件

您需要安裝 Unicorn Battle 範例應用程式才能執行本教學課程。您可以[在我們的部落格](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` 函式的新工作。別忘了 **Save** 並 **Run** 該工作。

   <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

- [玩家區段](/zh-TW/services/playfab/player-progression/player-data/player-segments.md)
- [PlayFab 即時服務管理文件](/zh-TW/services/playfab/live-service-management/index.md)
- [玩家區段設定](/zh-TW/services/playfab/player-progression/player-data/player-segment-configuration.md)
- [Economy (舊版) 中適用於玩家區段的自訂商店](/zh-TW/services/playfab/economy-monetization/economy/tutorials/custom-stores-for-player-segments.md)
- [區段](/zh-TW/services/playfab/live-service-management/game-configuration/segmentation/segmentation-overview.md)
