# KeyRota：進階循環（KRC）說明文件

來源: https://keyrota.app/documentation/zh-TW/advanced (更新於 2026年10月18日). JSON Schema: https://keyrota.app/documentation/keyrota-rotation.schema.json. AI 代理索引: https://keyrota.app/documentation/llms.txt.

---

<!-- https://keyrota.app/documentation/zh-TW/advanced -->

## 進階循環（KRC）

> [!TIP] 建議使用 AI 代理建立輸出循環
> 這比手動設定快得多，也方便得多。AI 代理越先進，輸出循環第一次就越能符合你的需求。建議使用 Anthropic 與 OpenAI 最新推出的模型，並將推理層級設為「Extra (xhigh)」。做法請參閱[使用 AI 代理建立](https://keyrota.app/documentation/zh-TW/ai)。

進階循環是你自己的規則清單：決定何時按下哪個技能。KeyRota 會在戰鬥中檢查這些規則，並按下第一個符合的按鈕。這類輸出循環的格式與引擎稱為 **KRC**（KeyRota Customization）。

### 基礎還是進階

| | Blizzard（基礎） | 進階（KRC） |
|---|---|---|
| 由誰選擇按鈕 | 遊戲：Blizzard 的建議 | 你的規則 |
| 設定 | 不需要 | 欄位、光環與規則：在建立器中設定，或從檔案載入 |
| 專精 | 任何輸出（近戰、遠程 DPS）和坦克專精 | 輸出循環所針對的專精 |
| Burst 與目標模式 | 不使用 | 「Burst」與「目標」按鈕，其意義由規則決定 |
| 適用時機 | 想在任何角色上快速開始 | 需要精確的優先順序：DoT、資源累積、在爆發時段使用冷卻技能、自訂的多目標邏輯 |

在應用程式的「輸出循環」區塊中，Blizzard 設定檔排在最前面，你的輸出循環則在其下方的「自訂循環」群組中。只要輸出循環處於停止狀態，隨時都能切換。

### 輸出循環的組成

| 部分 | 說明 | 數量 |
|---|---|---|
| **欄位** | 輸出循環的按鈕。輸出循環的欄位 N 就是 Better Assistant 設定檔中的欄位 N。 | 最多 12 個 |
| **光環** | 你自己的增益效果，以及你施加在目標身上的減益效果，以法術 ID 識別。輸出循環的光環 N 就是 Better Assistant 清單中的光環 N。 | 最多 12 個 |
| **資源** | 玩家與目標的生命力，以及專精的資源：能量、連擊點數、怒氣、法力等。所有數值皆為百分比。 | 依專精而定 |
| **戰鬥** | 附近的敵人數，以及與目標的距離。 | 2 |
| **開關** | 快速設定面板的按鈕：目標模式（在規則中是兩個開關：`aoe` 與 `st`）、Burst、治療／防禦、地面法術、移動。 | 6 |
| **規則** | 要按哪個欄位，以及在什麼條件下按。規則的順序就是優先順序。 | 無上限 |

規則由條件群組組成。只要**至少一個**群組符合，規則就符合（或，OR）；群組內的條件**全部**符合，群組才符合（且，AND）。沒有群組的規則一律符合。

*KRC 文字:*

```text
use Envenom when  # 毒化
	Combo_Points >= 70 and Envenom_Buff.down  # 連擊點數 5+，沒有增益
	or
	Combo_Points >= 70 and Energy >= 70  # 連擊點數 5+，能量充足
```

*JSON:*

```json
{
  "use": "Envenom",
  "name": "毒化",
  "when": [
    {"all": ["Combo_Points >= 70", "Envenom_Buff.down"], "comment": "連擊點數 5+，沒有增益"},
    {"all": ["Combo_Points >= 70", "Energy >= 70"], "comment": "連擊點數 5+，能量充足"}
  ]
}
```


這條規則的意思是：「如果連擊點數有 5 點以上且沒有毒化的增益效果，**或**連擊點數有 5 點以上且能量至少 70%，就按下毒化」。為什麼 5 個連擊點數要寫成 `70`，請參閱[資源](https://keyrota.app/documentation/zh-TW/conditions#resources)。

### KeyRota 如何選擇按鈕

1. 規則依清單順序**由上而下**檢查。
2. 逐一檢查每條規則的群組。如果沒有任何群組符合，KeyRota 就換下一條規則。
3. 如果規則符合，但其法術目前**無法使用**（冷卻中、資源不足、目標太遠、沒有目標、尚未學會該法術），KeyRota 同樣會換下一條規則。你不需要另外用條件檢查欄位本身是否就緒。
4. 第一條符合且法術可以使用的規則會被**選中**。共用冷卻（GCD）不會改變選擇：正在等待 GCD 結束的規則仍維持選中，下方的規則不會搶先。
5. 如果沒有任何規則適用：開啟「忽略主圖示」時，KeyRota 會等待；關閉時，則按下遊戲的建議。

等待是正常的。例如，累積能量的輸出循環常會有半秒到一秒什麼都不按，直到能量足以觸發上方的規則為止。

### 未知值絕不會讓規則成立

有時 KeyRota 無法得知某個值：讀不到光環（Better Assistant 設定檔中沒有它的 ID）、沒有目標（目標的生命力與距離未知）、敵人數未計算出來。讀取未知值的條件一律**不成立**：`X.up` 與 `X.down`、`TargetHP >= 50` 與 `TargetHP < 50` 都一樣。未知值只會阻止規則，絕不會讓規則成立：寧可少按一下，也不要按錯。

> [!TIP]
> 如果某條規則從未觸發，請先確認它讀取的每個光環都已用正確的 ID 加入 Better Assistant 設定檔。詳情請參閱[常見問題與疑難排解](https://keyrota.app/documentation/zh-TW/faq#never-fires)。

### 何時按下按鈕

- **一般法術**（佔用 GCD）會在 GCD 的最後、法術佇列視窗內按下：GCD 一結束，遊戲就會施放它。
- **欄位旗標**可以改變這個行為：「僅手動（M）」、「引導（C）」、「不佔 GCD（O）」、「佇列視窗（Q）」。各旗標的作用與組合方式，請參閱[欄位旗標](https://keyrota.app/documentation/zh-TW/rotation-json#flags)。
- **引導。** 引導進行中，KeyRota 不會按任何鍵，以免打斷引導。**施法**期間，KeyRota 會等到施法只剩佇列視窗的時間才按。
- **你自己的按鍵。** 當你自己按下技能鍵時，KeyRota 會讓你優先，不會跟你搶按。

### 快速入門

如果還沒有安裝 KeyRota，請先從[新手入門](https://keyrota.app/documentation/zh-TW/start)開始。

1. 在 KeyRota 中開啟「輸出循環」 — 「新增」 — 「在建立器中…」。
2. 在「一般」頁面選擇專精，並為輸出循環命名。
3. 在「欄位」頁面新增按鈕及其法術 ID；在「光環」頁面新增規則要讀取的增益與減益效果。
4. 在「規則」頁面依優先順序新增規則。
5. 在「一般」頁面點擊「依欄位與光環產生」，再點擊「複製」。在遊戲中：`/ba` — Profile 分頁 — 貼上字串 — Apply。
6. 將欄位的法術放到快捷列上並設定按鍵（使用含 `#showtooltip` 的巨集也可以）。
7. 點擊「儲存」，在清單中選擇設定檔，再按 F1（macOS 為 ⌃⇧Space）啟動輸出循環。

每個按鈕的詳細說明與完整範例，請參閱[輸出循環建立器](https://keyrota.app/documentation/zh-TW/editor)。

### 本章節內容

- [輸出循環建立器](https://keyrota.app/documentation/zh-TW/editor) — 視窗的每個頁面與按鈕，以及逐步建立輸出循環的範例。
- [輸出循環 JSON](https://keyrota.app/documentation/zh-TW/rotation-json) — 格式的每個屬性、欄位旗標、名稱、限制、錯誤與 KRC 文字。
- [條件](https://keyrota.app/documentation/zh-TW/conditions) — 所有條件類型、運算子、百分比與未知值。
- [常用技巧範例](https://keyrota.app/documentation/zh-TW/patterns) — DoT、資源累積、產生與消耗技能、AoE、Burst、防禦技能等範本。
- [使用 AI 代理建立](https://keyrota.app/documentation/zh-TW/ai) — 提示詞範本、日誌分析與結果檢查。
- [常見問題與疑難排解](https://keyrota.app/documentation/zh-TW/faq) — 規則為何不觸發、按得太早或太晚、打斷引導。

---

<!-- https://keyrota.app/documentation/zh-TW/editor -->

## 輸出循環建立器

輸出循環建立器是 KeyRota 中的一個視窗，讓你不必手動輸入就能組合進階循環：設定含旗標的欄位、光環與規則，旁邊同時顯示 KRC 文字與 JSON。Windows 與 macOS 的說明相同；螢幕擷取畫面取自 Windows，顯示的是[範例](https://keyrota.app/documentation/zh-TW/patterns#example-files)中的刺殺團隊副本輸出循環。

### 開啟方式

- **你的輸出循環。** 在主視窗的「輸出循環」區塊中選取設定檔，然後點擊「設定」。
- **新的輸出循環。** 「新增」 — 「在建立器中…」。專精取自遊戲或目前的設定檔。輸出循環在第一次儲存時才會成為設定檔。
- **從檔案或剪貼簿。** 「新增」 — 「從檔案…」可接受 KRC 文字（`.txt`）、輸出循環 JSON 與 KeyRota 設定檔檔案；「新增」 — 「從剪貼簿」則從剪貼簿讀取相同的內容。之後點擊「設定」，即可在建立器中開啟新的設定檔。

![建立器中的新輸出循環：「一般」頁面，尚無欄位與規則](https://keyrota.app/documentation/img/zh-TW/editor-new.png)

對於 **Blizzard 設定檔**，建立器只顯示名稱與按鍵延遲：主按鈕由遊戲決定。「建立自訂循環」會另外建立一個含進階循環的新設定檔；Blizzard 設定檔仍會留在清單中。

![建立器中的 Blizzard 設定檔：設定檔名稱、按鍵延遲與「建立自訂循環」](https://keyrota.app/documentation/img/zh-TW/editor-blizzard.png)

#### 視窗配置

- **左側**是各個頁面：「一般」、「欄位」、「光環」、「規則」（附規則數量）、「文字與 JSON」。頁面上方顯示「自訂循環」與所選的專精。
- **右側**是所選的頁面。
- **底部**是狀態列：顯示輸出循環是否正常（「輸出循環正常：15 條規則，11 個欄位，10 個光環」）、是否有未儲存的變更；發生錯誤時，會顯示錯誤位置與「檢視」按鈕。右側是「關閉」與「儲存」。

按下「儲存」（Windows 上也可以按 Ctrl+S）之前，任何變更都不會套用。

### 一般

![「一般」頁面：設定檔、專精、輸出循環名稱、忽略主圖示、按鍵延遲](https://keyrota.app/documentation/img/zh-TW/editor-general.png)

| 控制項 | 作用 |
|---|---|
| **設定檔名稱** | 設定檔在主視窗輸出循環清單中顯示的名稱。 |
| **專精** | 決定輸出循環的資源（能量、連擊點數、怒氣…），以及 Better Assistant 設定檔的職業與專精。變更專精會替換資源，除非規則讀取了舊專精的資源（生命力不算在內）。 |
| **輸出循環名稱** | KRC 文字的第一行（`rotation "…"`），會顯示在 KeyRota 記錄中。不可包含雙引號。很適合在這裡寫上版本，例如「刺殺 v1.3」。 |
| **忽略主圖示** | 開：KeyRota 只依規則按鍵；沒有符合的規則時就等待。關：此時改按遊戲的建議。自訂循環通常會開啟此選項：等待（例如累積能量）是正常的。 |
| **按鍵延遲** | 每次按鍵前稍作停頓，就像真人一樣：「無」、「固定」（間隔 0–1000 毫秒）或「隨機」（區間 0–1000 毫秒）。「也套用於打斷與防禦」會讓打斷與防禦技能也使用相同的停頓。 |

![「一般」頁面下半部：Better Assistant 區塊、敵人計數半徑、僅計入戰鬥中的敵人與描述](https://keyrota.app/documentation/img/zh-TW/editor-general-ba.png)

| 控制項 | 作用 |
|---|---|
| **設定檔：…** | Better Assistant 設定檔字串的摘要：專精、法術與光環數量。 |
| **依欄位與光環產生** | 依據欄位的法術 ID、每個欄位的「Better Assistant 顯示條件」、依序排列的光環、專精、半徑與「僅計入戰鬥中的敵人」，產生 Better Assistant 設定檔字串。如果已貼上相同專精的設定檔，會保留它的其他設定。 |
| **從剪貼簿** | 貼上現成的設定檔字串。其專精必須與輸出循環相同。 |
| **複製** | 複製字串，以便貼到遊戲中。 |
| **敵人計數半徑（碼）** | 1–100，預設為 8。供「附近敵人數」條件（`enemies`）使用。 |
| **僅計入戰鬥中的敵人** | 預設開啟：尚未進入戰鬥的敵人不列入計算。 |
| **描述** | 輸出循環的備註：KRC 文字中以 `#` 開頭的行。不影響輸出循環的運作。 |

按鈕下方會顯示警告：規則中使用的哪些欄位沒有法術 ID（這些欄位不會出現在 Better Assistant 設定檔中），以及已貼上的設定檔有哪些地方與輸出循環不符。

> [!IMPORTANT]
> Better Assistant 設定檔中的光環必須從第一個開始連續排列。如果光環 3 沒有 ID，而光環 4 有，就無法產生設定檔：「光環 3 沒有法術編號」。請填入 ID，或重新為光環編號。

#### 遊戲中的 Better Assistant 設定檔

輸出循環的欄位 N 就是 Better Assistant 中的欄位 N，光環 N 就是其清單中的光環 N。設定檔字串會將你的欄位與光環依正確順序放進去。

1. 在「一般」頁面點擊「依欄位與光環產生」，再點擊「複製」。
2. 在遊戲中輸入 `/ba`，開啟 **Profile** 分頁，貼上字串，點擊 **Apply** 並確認。
3. 每次變更欄位或光環（ID、順序、「有目標時」／「戰鬥中」）之後，都要重新產生並貼上設定檔。

### 欄位

![「欄位」頁面：左側是 12 個位置，右側是所選的欄位 10「消失」，ID 為 1856](https://keyrota.app/documentation/img/zh-TW/editor-slots.png)

左側是 12 個位置：編號、名稱、法術 ID、旗標（「不佔 GCD，佇列中」），欄位未用於任何規則時會顯示「未使用」。空的位置顯示「空白」；選取它就會出現「新增欄位」按鈕。

| 控制項 | 作用 |
|---|---|
| **名稱** | 法術在遊戲中的名稱。會顯示在規則清單與記錄中。 |
| **法術 ID** | Wowhead 連結中的數字：在 `wowhead.com/spell=1856/vanish` 中是 `1856`。Better Assistant 會依此將法術放入此欄位。 |
| **Better Assistant 顯示條件** | 「有目標時」或「戰鬥中」。只有 Better Assistant 顯示此欄位時，它才算就緒。「戰鬥中」適用於沒有目標也必須能使用的治療與防禦技能。 |
| **按鍵方式** | 四個旗標開關，請參閱下表。 |
| **文字中的名稱** | 欄位在規則與 KRC 文字中的名稱：字母、數字與 `_`，不可有空格。 |
| **註解** | 文字中宣告行末尾的註解。 |
| **使用它的規則** | 會按下或讀取此欄位的規則。只有欄位未被任何規則使用時，才能「移除欄位」。 |

KeyRota 要按下某個欄位，該欄位的法術必須放在遊戲中的快捷列上並設定按鍵：KeyRota 會從你的快捷列讀取按鍵。使用含 `#showtooltip 名稱` 的巨集也可以。沒有按鍵的欄位永遠不會被按下。

#### 按鍵方式：旗標

![「消失」欄位的按鍵方式開關：已開啟「不佔 GCD（O）」與「佇列視窗（Q）」](https://keyrota.app/documentation/img/zh-TW/editor-slot-flags.png)

| 開關 | 作用 | 使用時機 |
|---|---|---|
| 無旗標 | 欄位會像一般法術一樣按下：在共用冷卻的最後、佇列視窗內。 | 幾乎所有佔用 GCD 的法術。 |
| **僅手動（M）** | KeyRota 絕不會自行按此欄位，並會略過它的規則。你自己按下它的按鍵時，輸出循環會暫停。 | 只想自己按的技能。 |
| **引導（C）** | 此法術引導期間，KeyRota 不按任何鍵，也不會中斷引導。 | 引導法術，例如狂舞殘殺。 |
| **不佔 GCD（O）** | 不等待共用冷卻：立即按下，即使正處於 GCD 中。 | 不佔 GCD 的法術，例如骰個不停。 |
| **佇列視窗（Q）** | 只能與「不佔 GCD」一起使用：在 GCD 的最後、法術佇列視窗內按下。 | 第二行會佔用 GCD 的巨集（能量刺激 + 狂舞殘殺），以及需要上一擊結果的按鈕（王禍之後的消失）。 |

所有旗標組合及其 JSON 寫法，請參閱[欄位旗標](https://keyrota.app/documentation/zh-TW/rotation-json#flags)。

### 光環

![「光環」頁面：光環 1「目標身上的絞喉 [703]」，ID 703，文字中的名稱 Garrote_DoT，使用它的規則 3、4、5、7、8、10](https://keyrota.app/documentation/img/zh-TW/editor-auras.png)

光環是規則所讀取的你自己的增益效果，以及你施加在目標身上的減益效果。輸出循環的光環 N 就是 Better Assistant 清單中的光環 N。

| 控制項 | 作用 |
|---|---|
| **名稱** | 光環的名稱，會顯示在規則中。在名稱後以方括號附上 ID 會很方便：「目標身上的絞喉 [703]」。 |
| **法術 ID** | 光環在 Wowhead 上的編號。Better Assistant 會在你自己的增益效果與你施加在目標身上的減益效果中尋找它。 |
| **文字中的名稱**、**註解** | 與欄位相同。 |
| **使用它的規則** | 讀取此光環的規則。只有未被使用的光環才能「移除光環」。 |

> [!NOTE]
> 光環的 ID 可能與施加它的法術 ID 不同。消失法術是 `1856`，它給予的增益效果是 `11327`；潛行是 `1784`，點了欺敵天賦後的潛行是 `115191`。請在 Wowhead 上查詢增益或減益效果本身的 ID。

規則只看得到**你自己的**光環：你給自己上的增益效果，以及你施加在目標身上的減益效果。其他玩家給你的增益效果，以及其他玩家施加在目標身上的減益效果，規則都看不到。

### 規則

![「規則」頁面：左側是 15 條規則，右側是規則 4「死亡印記」及其條件群組](https://keyrota.app/documentation/img/zh-TW/editor-rules.png)

規則由上而下檢查：KeyRota 會按下第一條已符合且法術可以施放的規則；若法術無法施放（冷卻、資源、距離），就檢查下一條。

**清單上方的工具列：**

| 按鈕 | 作用 |
|---|---|
| **+** | 在所選規則下方新增規則。新規則會按第一個欄位，且尚無條件。 |
| **複製** | 在下方建立此規則的複本。 |
| **垃圾桶** | 刪除規則。 |
| **上移**、**下移** | 往上移（較早檢查）或往下移（較晚檢查）。 |

清單中的每條規則都會顯示編號（優先順序）、欄位、名稱與群組數；有錯誤的規則會標上紅色記號。

**所選的規則：**

| 控制項 | 作用 |
|---|---|
| **按下** | 規則符合時要按的欄位。 |
| **名稱** | 規則觸發時會顯示在記錄中。 |
| **描述** | KRC 文字中規則上方的備註。 |
| **何時按下** | 條件群組：只要有一個群組符合，規則就符合（或）；群組內所有條件都符合，群組才符合（且）。 |

![「割裂」規則的條件群組：群組 1 與群組 2 之間以「或」分隔](https://keyrota.app/documentation/img/zh-TW/editor-rule-groups.png)

每個群組都有「群組 N」、「群組註解」方塊，以及「複製群組」與「刪除群組」按鈕。每一列條件包含**檢查對象**、**檢查項目**、**比較方式**與**數值**；點擊叉號即可移除條件。「+ 條件」會在群組中新增條件，「+ 群組（或）」則新增一個群組。一個群組最多 16 個條件，一條規則最多 16 個群組：達到上限時按鈕會停用。沒有群組的規則會顯示「無條件：只要法術可以施放，規則就會觸發。」

| 檢查對象 | 檢查項目 | KRC 文字中的寫法 |
|---|---|---|
| **光環**（輸出循環的每個光環） | 存在、不存在、剩餘時間 %、層數 | `Garrote_DoT.up`、`.down`、`.duration <= 30`、`.stacks >= 3` |
| **欄位**（每個欄位） | 就緒、冷卻中、冷卻 %、充能次數、高亮、未高亮 | `Kingsbane.ready`、`.oncd`、`.cd <= 3`、`.charges >= 2`、`.glow`、`.noglow` |
| **資源** | 玩家與目標的生命力、專精的資源，以 % 表示 | `PlayerHP <= 40`、`Energy >= 70` |
| **戰鬥**：附近敵人數 | 數量 | `enemies >= 3` |
| **戰鬥**：與目標的距離 | 碼 | `target.distance <= 8` |
| **快速設定面板** | 開啟、關閉 | `aoe == 1`、`st == 1`、`cd == 1`、`defensives == 1`、`ground_spells == 1`、`movement == 1` |

比較方式：`<`、`≤`、`=`、`≥`、`>`；數值為 0 到 100。新條件預設為第一個光環的「存在」；變更檢查對象時，檢查項目與數值會重設為預設值（資源為 `≥ 50`，敵人為 `≥ 2`，距離為 `≤ 8`）。每種條件的詳細說明，請參閱[條件](https://keyrota.app/documentation/zh-TW/conditions)。

### 錯誤與狀態列

![規則 9 有錯誤：沒有條件的群組 1 以紅框標示；狀態列顯示「規則 9，群組 1: 群組中沒有條件」與「檢視」](https://keyrota.app/documentation/img/zh-TW/editor-problem.png)

- **綠色**：「輸出循環正常：…」，表示沒有錯誤，可以儲存。
- **紅色**會指出錯誤位置：「規則 9，群組 1: 群組中沒有條件」。點擊「檢視」會跳到該位置。有錯誤的規則會在清單中標上記號，有錯誤的群組則以紅框標示。
- 有錯誤的輸出循環無法儲存：「有錯誤的輸出循環無法儲存：請修正下方標示的問題」。
- 輸出循環執行中無法儲存：「請先停止輸出循環再儲存」。

### 文字與 JSON

![「文字與 JSON」頁面的 KRC 文字模式：輸出循環文字的開頭，包含描述與 buff1–buff7 宣告](https://keyrota.app/documentation/img/zh-TW/editor-text.png)

![「文字與 JSON」頁面的 JSON 模式：輸出循環 JSON 的開頭，包含 format、version、title、specID、ignoreMainIcon、enemies 與 notes](https://keyrota.app/documentation/img/zh-TW/editor-json.png)

| 控制項 | 作用 |
|---|---|
| **KRC 文字／JSON** | 切換檢視。 |
| **複製** | 複製全部的文字或 JSON。 |
| **貼上** | 以剪貼簿的內容取代輸出循環：KRC 文字、輸出循環 JSON 或 KeyRota 設定檔。 |
| **開啟…** | 從 `.txt` 或 `.json` 檔案載入輸出循環。 |
| **儲存…** | 將目前的檢視儲存為檔案：文字存成 `.txt`，JSON 存成 `.json`。 |

在方塊中所做的編輯，只要沒有錯誤就會立即生效；有錯誤時，錯誤訊息會顯示在方塊下方，其他頁面則保留最後一個有效的版本。

**哪些內容只有 JSON 才有。** KRC 文字中沒有法術 ID、欄位旗標、「有目標時」／「戰鬥中」、專精、「忽略主圖示」與敵人計數設定。編輯文字時，這些設定會保留在編號相同的欄位與光環上。JSON 則包含所有內容。貼上或開啟輸出循環的新版本時，如果新版本沒有這些設定，編號相同的欄位與光環會保留原本的 ID、顯示條件與旗標。

### 儲存與關閉

- 「儲存」（Windows 上也可以按 Ctrl+S）會將輸出循環寫入設定檔；按鈕會短暫顯示「已儲存」。新的輸出循環會成為設定檔，並在清單中被選取。
- 有未儲存的變更時關閉視窗，會詢問「要儲存變更嗎？」：「儲存」、「不要儲存」或「取消」。關閉 KeyRota 時也一樣。
- 主視窗中的「匯出」會將設定檔連同其輸出循環儲存為 JSON；「匯入」可接受 KeyRota 設定檔，也可接受單純的輸出循環 JSON。

### 範例：從零開始建立輸出循環

我們來建立一個小型的刺殺輸出循環：兩個 DoT（絞喉與割裂）、一個產生技能（截肢）、一個消耗技能（毒化）、一個防禦技能（生命力 40% 以下時使用赤紅藥瓶），以及一個由 Burst 按鈕控制的冷卻技能（死亡印記）。

**1. 新設定檔。** 「輸出循環」 — 「新增」 — 「在建立器中…」。

**2. 一般。** 設定檔名稱：「刺殺：範例」。專精：刺殺（資源會變成 `PlayerHP`、`TargetHP`、`Energy`、`Combo_Points`）。輸出循環名稱：「刺殺：範例 v1」。忽略主圖示：開啟。

**3. 欄位。** 依照下表逐列設定：在左側選取位置，點擊「新增欄位」，填入「名稱」、「法術 ID」與「文字中的名稱」；赤紅藥瓶要選擇「戰鬥中」。不需要設定任何旗標。

| 欄位 | 名稱 | ID | 文字中的名稱 | Better Assistant 顯示條件 |
|---|---|---|---|---|
| 1 | 絞喉 | 703 | `Garrote` | 有目標時 |
| 2 | 割裂 | 1943 | `Rupture` | 有目標時 |
| 3 | 毒化 | 32645 | `Envenom` | 有目標時 |
| 4 | 截肢 | 1329 | `Mutilate` | 有目標時 |
| 5 | 死亡印記 | 360194 | `Deathmark` | 有目標時 |
| 6 | 赤紅藥瓶 | 185311 | `Crimson_Vial` | 戰鬥中 |

**4. 光環。** 在「光環」頁面以相同方式設定：

| 光環 | 名稱 | ID | 文字中的名稱 |
|---|---|---|---|
| 1 | 目標身上的絞喉 [703] | 703 | `Garrote_DoT` |
| 2 | 目標身上的割裂 [1943] | 1943 | `Rupture_DoT` |
| 3 | 毒化 [32645] | 32645 | `Envenom_Buff` |
| 4 | 目標身上的死亡印記 [360194] | 360194 | `Deathmark_DoT` |

**5. 規則。** 在「規則」頁面點擊「+」，在「按下」中選擇欄位，並輸入「名稱」。「+ 群組（或）」會新增一個含預設條件的群組：請變更檢查對象、檢查項目、比較方式與數值。「+ 條件」會在同一個群組中新增下一個條件。規則依序如下：

| # | 按下 | 群組（或），群組內的條件（且） |
|---|---|---|
| 1 | 赤紅藥瓶 | 治療／防禦：開啟，玩家生命力 ≤ 40 |
| 2 | 死亡印記 | Burst：開啟，目標身上的絞喉：存在，目標身上的割裂：存在，毒化：存在 |
| 3 | 絞喉 | （1）目標身上的絞喉：不存在；（2）目標身上的絞喉：存在，剩餘時間 ≤ 30% |
| 4 | 割裂 | （1）連擊點數 ≥ 70，目標身上的割裂：不存在；（2）連擊點數 ≥ 70，目標身上的割裂：存在，剩餘時間 ≤ 30% |
| 5 | 毒化 | （1）連擊點數 ≥ 70，毒化：不存在；（2）連擊點數 ≥ 70，毒化：存在，剩餘時間 ≤ 20%；（3）連擊點數 ≥ 70，能量 ≥ 70；（4）連擊點數 ≥ 70，目標身上的死亡印記：存在 |
| 6 | 截肢 | 連擊點數 < 70 |

為什麼這樣安排：
- **防禦技能放第一**：生命力低時，赤紅藥瓶比傷害更重要。只有在快速設定面板中開啟「治療／防禦」時才會觸發。
- **死亡印記由 Burst 控制**：`cd == 1` 是 Burst 按鈕（Windows 為 F3，macOS 為 ⌃⇧B），不是法術的冷卻。關閉 Burst，死亡印記就會等待。
- **在刷新時段（pandemic）內刷新 DoT**：不存在的光環剩餘時間為 0，所以刷新需要兩個群組：「沒有 DoT」與「DoT 存在且剩餘 ≤ 30%」。
- **5 個連擊點數 = 70**：以 7 個連擊點數為上限時，5 點是 71%；門檻 `70` 不論數值如何進位都正確。對照表請參閱[資源](https://keyrota.app/documentation/zh-TW/conditions#resources)。
- **截肢放最後**，而且只在連擊點數少於 5 點時使用，這樣毒化在等待條件時才不會浪費能量。

**6. 檢查。** 狀態列應顯示「輸出循環正常：6 條規則，6 個欄位，4 個光環」。開啟「文字與 JSON」，內容應與下方相同。

**7. Better Assistant 設定檔。** 「一般」 — 「依欄位與光環產生」 — 「複製」；在遊戲中 `/ba` — Profile — 貼上 — Apply。

**8. 按鍵。** 將這六個法術放到快捷列上並設定按鍵。

**9. 執行。** 點擊「儲存」並關閉視窗，選擇設定檔「刺殺：範例」，然後啟動輸出循環（Windows 為 F1，macOS 為 ⌃⇧Space）。若要使用赤紅藥瓶，請在快速設定面板中開啟「治療／防禦」；Burst 按鈕可以開啟或關閉死亡印記。

*KRC 文字:*

```text
rotation "刺殺：範例 v1"

# KeyRota 說明文件中的範例：兩個流血、一個產生技能、一個存能量的消耗技能，
# 低生命力時的防禦，以及由 Burst 按鈕控制的死亡印記。
# 連擊點數以 7 點的百分比計：5 點 = 71%，門檻 70 = 5 點以上。

buff1	Garrote_DoT = "目標身上的絞喉 [703]"
buff2	Rupture_DoT = "目標身上的割裂 [1943]"
buff3	Envenom_Buff = "毒化 [32645]"
buff4	Deathmark_DoT = "目標身上的死亡印記 [360194]"
slot1	Garrote = "絞喉"
slot2	Rupture = "割裂"
slot3	Envenom = "毒化"
slot4	Mutilate = "截肢"
slot5	Deathmark = "死亡印記"
slot6	Crimson_Vial = "赤紅藥瓶"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

# --- 防禦：僅在「治療／防禦」開啟時 ---
use Crimson_Vial when  # 赤紅藥瓶
	defensives == 1 and PlayerHP <= 40  # 生命力 40% 以下

# --- 冷卻技能：僅在 Burst 開啟時 ---
use Deathmark when  # 死亡印記
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Envenom_Buff.up  # Burst 開啟，流血與毒化都在

# --- 流血 ---
use Garrote when  # 絞喉
	Garrote_DoT.down  # 沒有流血
	or
	Garrote_DoT.up and Garrote_DoT.duration <= 30  # 刷新時段：剩餘 30% 以下

use Rupture when  # 割裂
	Combo_Points >= 70 and Rupture_DoT.down  # 5+ 個連擊點數，沒有流血
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # 5+ 個連擊點數，刷新時段

# --- 消耗：5+ 個連擊點數，存能量 ---
use Envenom when  # 毒化
	Combo_Points >= 70 and Envenom_Buff.down  # 沒有增益
	or
	Combo_Points >= 70 and Envenom_Buff.up and Envenom_Buff.duration <= 20  # 增益快結束
	or
	Combo_Points >= 70 and Energy >= 70  # 避免能量溢出
	or
	Combo_Points >= 70 and Deathmark_DoT.up  # 目標身上有死亡印記

# --- 產生技能：少於 5 個連擊點數 ---
use Mutilate when  # 截肢
	Combo_Points < 70  # 少於 5 個連擊點數
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "刺殺：範例 v1",
  "specID": 259,
  "ignoreMainIcon": true,
  "enemies": {"range": 8, "combatOnly": true},
  "notes": [
    "KeyRota 說明文件中的範例：兩個流血、一個產生技能、一個存能量的消耗技能，",
    "低生命力時的防禦，以及由 Burst 按鈕控制的死亡印記。",
    "連擊點數以 7 點的百分比計：5 點 = 71%，門檻 70 = 5 點以上。"
  ],
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 1, "alias": "Garrote_DoT", "label": "目標身上的絞喉 [703]", "spell": 703},
    {"n": 2, "alias": "Rupture_DoT", "label": "目標身上的割裂 [1943]", "spell": 1943},
    {"n": 3, "alias": "Envenom_Buff", "label": "毒化 [32645]", "spell": 32645},
    {"n": 4, "alias": "Deathmark_DoT", "label": "目標身上的死亡印記 [360194]", "spell": 360194}
  ],
  "slots": [
    {"n": 1, "alias": "Garrote", "label": "絞喉", "spell": 703, "show": "target"},
    {"n": 2, "alias": "Rupture", "label": "割裂", "spell": 1943, "show": "target"},
    {"n": 3, "alias": "Envenom", "label": "毒化", "spell": 32645, "show": "target"},
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329, "show": "target"},
    {"n": 5, "alias": "Deathmark", "label": "死亡印記", "spell": 360194, "show": "target"},
    {"n": 6, "alias": "Crimson_Vial", "label": "赤紅藥瓶", "spell": 185311, "show": "combat"}
  ],
  "rules": [
    {
      "use": "Crimson_Vial",
      "name": "赤紅藥瓶",
      "note": ["--- 防禦：僅在「治療／防禦」開啟時 ---"],
      "when": [{"all": ["defensives == 1", "PlayerHP <= 40"], "comment": "生命力 40% 以下"}]
    },
    {
      "use": "Deathmark",
      "name": "死亡印記",
      "note": ["--- 冷卻技能：僅在 Burst 開啟時 ---"],
      "when": [
        {
          "all": ["cd == 1", "Garrote_DoT.up", "Rupture_DoT.up", "Envenom_Buff.up"],
          "comment": "Burst 開啟，流血與毒化都在"
        }
      ]
    },
    {
      "use": "Garrote",
      "name": "絞喉",
      "note": ["--- 流血 ---"],
      "when": [
        {"all": ["Garrote_DoT.down"], "comment": "沒有流血"},
        {"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "刷新時段：剩餘 30% 以下"}
      ]
    },
    {
      "use": "Rupture",
      "name": "割裂",
      "when": [
        {"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "5+ 個連擊點數，沒有流血"},
        {
          "all": ["Combo_Points >= 70", "Rupture_DoT.up", "Rupture_DoT.duration <= 30"],
          "comment": "5+ 個連擊點數，刷新時段"
        }
      ]
    },
    {
      "use": "Envenom",
      "name": "毒化",
      "note": ["--- 消耗：5+ 個連擊點數，存能量 ---"],
      "when": [
        {"all": ["Combo_Points >= 70", "Envenom_Buff.down"], "comment": "沒有增益"},
        {"all": ["Combo_Points >= 70", "Envenom_Buff.up", "Envenom_Buff.duration <= 20"], "comment": "增益快結束"},
        {"all": ["Combo_Points >= 70", "Energy >= 70"], "comment": "避免能量溢出"},
        {"all": ["Combo_Points >= 70", "Deathmark_DoT.up"], "comment": "目標身上有死亡印記"}
      ]
    },
    {
      "use": "Mutilate",
      "name": "截肢",
      "note": ["--- 產生技能：少於 5 個連擊點數 ---"],
      "when": [{"all": ["Combo_Points < 70"], "comment": "少於 5 個連擊點數"}]
    }
  ]
}
```


下載此範例：[JSON](https://keyrota.app/documentation/examples/starter-assassination.zh-TW.json)、[KRC 文字](https://keyrota.app/documentation/examples/starter-assassination.zh-TW.txt)。你可以在「文字與 JSON」頁面點擊「開啟…」開啟它，或使用「新增」 — 「從檔案…」。

---

<!-- https://keyrota.app/documentation/zh-TW/rotation-json -->

## 輸出循環 JSON

JSON 是進階循環的完整描述：包含 KRC 文字中的所有內容，再加上法術 ID、欄位旗標與設定檔設定。建立器會在「文字與 JSON」頁面顯示它，KeyRota 也接受以檔案形式載入（「新增」 — 「從檔案…」、「匯入」）。此格式名為 `keyrota-rotation`，版本為 1。你可以用 [JSON Schema](#schema) 驗證檔案。

### 範例檔案

最精簡的實用輸出循環：連擊點數 5 點以上且目標身上沒有割裂時使用割裂，否則使用截肢。

*minimal.json:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "刺殺：最小範例",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [{"n": 1, "alias": "Rupture_DoT", "label": "目標身上的割裂 [1943]", "spell": 1943}],
  "slots": [
    {"n": 2, "alias": "Rupture", "label": "割裂", "spell": 1943},
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329}
  ],
  "rules": [
    {
      "use": "Rupture",
      "name": "割裂",
      "when": [{"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "5+ 個連擊點數，沒有流血"}]
    },
    {"use": "Mutilate", "name": "截肢"}
  ]
}
```


檔案中省略的內容一律採用預設值：欄位在「有目標時」顯示且沒有旗標，敵人計數半徑為 8 碼，只計入戰鬥中的敵人。沒有 `when` 的規則一律符合。

### 頂層屬性

| 屬性 | 類型 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| `format` | 字串 | 是 | — | 一律為 `"keyrota-rotation"`。 |
| `version` | 整數 | 是 | — | 一律為 `1`。較新的版本會被拒絕：「請更新 KeyRota」。 |
| `title` | 字串 | 否 | `""` | 輸出循環名稱：文字的第一行，也是記錄中顯示的名稱。不可包含雙引號。 |
| `specID` | 整數 0–100000 | 否 | `0` | WoW 專精，`0` = 任何專精。產生 Better Assistant 設定檔時需要。 |
| `ignoreMainIcon` | true / false | 否 | `true` | 開：只依規則按鍵。關：沒有符合的規則時，按下遊戲的建議。 |
| `enemies` | 物件 | 否 | `{"range": 8, "combatOnly": true}` | `enemies` 條件所用的敵人計數。 |
| `notes` | 字串或字串清單 | 否 | `[]` | 描述：文字開頭的 `#` 行。 |
| `resources` | 字串與 `null` 的清單 | 否 | `[]` | `resource1…N` 的名稱，依序排列。 |
| `auras` | 清單 | 否 | `[]` | 光環 `buff1…12`。 |
| `slots` | 清單 | 否 | `[]` | 欄位 `slot1…12`。 |
| `rules` | 清單 | 否 | `[]` | 依優先順序排列的規則。 |
| `footer` | 字串或字串清單 | 否 | `[]` | 最後一條規則之後的註解。 |

其他任何屬性都會造成錯誤「多餘的屬性」：拼錯的屬性不會被默默忽略。因此請不要在檔案中加入 `"$schema"`；請改在你的編輯器或驗證工具中指定結構描述。

幾乎所有地方都可以用 `null` 代替值，效果與省略該屬性相同。

### format 與 version

`"format": "keyrota-rotation"` 與 `"version": 1` 為必填。如果 `version` 大於 1，KeyRota 會拒絕載入：「版本 2 比此 KeyRota 支援的更新：請更新 KeyRota」。缺少 `version` 時：「需要版本 1」。

### title

不含雙引號 `"` 的字串。換行會變成空格。在 KRC 文字中寫成 `rotation "…"`。很適合在這裡寫上版本：`"刺殺 v1.3"`。

### specID

遊戲的專精 ID。它決定輸出循環的資源（在建立器中建立時），以及 Better Assistant 設定檔中的職業與專精。`0` 表示任何專精：輸出循環可以運作，但無法產生 Better Assistant 設定檔（「請選擇專精：Better Assistant 設定檔需要它」）。

| 職業 | 專精 | specID | 專精資源（`resource3`…） |
|---|---|---|---|
| 戰士 | 武器 | 71 | `Rage` |
| 戰士 | 狂怒 | 72 | `Rage` |
| 戰士 | 防護 | 73 | `Rage` |
| 聖騎士 | 神聖 | 65 | `Mana`、`Holy_Power` |
| 聖騎士 | 防護 | 66 | `Mana`、`Holy_Power` |
| 聖騎士 | 懲戒 | 70 | `Mana`、`Holy_Power` |
| 獵人 | 野獸控制 | 253 | `Focus` |
| 獵人 | 射擊 | 254 | `Focus` |
| 獵人 | 生存 | 255 | `Focus` |
| 盜賊 | 刺殺 | 259 | `Energy`、`Combo_Points` |
| 盜賊 | 暴徒 | 260 | `Energy`、`Combo_Points` |
| 盜賊 | 敏銳 | 261 | `Energy`、`Combo_Points` |
| 牧師 | 戒律 | 256 | `Mana`、`Insanity` |
| 牧師 | 神聖 | 257 | `Mana`、`Insanity` |
| 牧師 | 暗影 | 258 | `Mana`、`Insanity` |
| 死亡騎士 | 血魄 | 250 | `Runes`、`Runic_Power` |
| 死亡騎士 | 冰霜 | 251 | `Runes`、`Runic_Power` |
| 死亡騎士 | 穢邪 | 252 | `Runes`、`Runic_Power` |
| 薩滿 | 元素 | 262 | `Mana`、`Maelstrom` |
| 薩滿 | 增強 | 263 | `Mana`、`Maelstrom` |
| 薩滿 | 恢復 | 264 | `Mana`、`Maelstrom` |
| 法師 | 秘法 | 62 | `Mana`、`Arcane_Charges` |
| 法師 | 火焰 | 63 | `Mana`、`Arcane_Charges` |
| 法師 | 冰霜 | 64 | `Mana`、`Arcane_Charges` |
| 術士 | 痛苦 | 265 | `Mana`、`Soul_Shards` |
| 術士 | 惡魔學識 | 266 | `Mana`、`Soul_Shards` |
| 術士 | 毀滅 | 267 | `Mana`、`Soul_Shards` |
| 武僧 | 釀酒 | 268 | `Energy`、`Stagger` |
| 武僧 | 織霧 | 270 | `Mana` |
| 武僧 | 御風 | 269 | `Energy`、`Chi` |
| 德魯伊 | 平衡 | 102 | `Mana`、`Astral_Power` |
| 德魯伊 | 野性戰鬥 | 103 | `Energy`、`Combo_Points` |
| 德魯伊 | 守護者 | 104 | `Rage` |
| 德魯伊 | 恢復 | 105 | `Mana`、`Astral_Power` |
| 惡魔獵人 | 災虐 | 577 | `Fury` |
| 惡魔獵人 | 復仇 | 581 | `Fury` |
| 惡魔獵人 | 噬滅 | 1480 | `Fury` |
| 喚能師 | 破滅 | 1467 | `Mana`、`Essence` |
| 喚能師 | 護存 | 1468 | `Mana`、`Essence` |
| 喚能師 | 強化 | 1473 | `Mana`、`Essence` |

### ignoreMainIcon

`true`（預設）：KeyRota 只依規則按鍵；沒有符合的規則時就等待。`false`：此時改按遊戲的建議，就像 Blizzard 設定檔一樣。遊戲的建議是所有規則都不符合時的最後手段，絕不會搶在任何規則之前。

### enemies

```json
"enemies": {"range": 8, "combatOnly": true}
```


| 屬性 | 類型 | 預設值 | 說明 |
|---|---|---|---|
| `range` | 整數 1–100 | `8` | 敵人計數半徑，單位為碼。 |
| `combatOnly` | true / false | `true` | 只計入已進入戰鬥的敵人。 |

`enemies` 條件會讀取這個計數（請參閱[附近敵人數](https://keyrota.app/documentation/zh-TW/conditions#enemies)）。在建立器中，這兩項就是「一般」頁面上的「敵人計數半徑（碼）」與「僅計入戰鬥中的敵人」。這些值也會寫入 Better Assistant 設定檔。

### notes 與 footer

輸出循環的描述（`notes`），以及最後一條規則之後的註解（`footer`）。可以是字串清單，也可以是含 `\n` 的單一字串。空字串 `""` 在文字中是一個空行。開頭與結尾的空行會被捨棄。

```json
"notes": ["依據指南與頂尖日誌，12.1 版", "", "v1.1：4 個以上目標時更早使用毒化"]
```


在 KRC 文字中，這些是宣告之前的 `# …` 行。它們不影響輸出循環的運作。

### resources

依序排列的資源名稱：第一項是 `resource1`，第二項是 `resource2`，依此類推。**編號決定資源是什麼**；名稱只是你在條件中的寫法：

- `resource1` 是玩家的生命力，`resource2` 是目標的生命力；
- `resource3` 起是專精的資源，順序依照 [specID 表](#spec-id)：以盜賊為例，`resource3` 是能量，`resource4` 是連擊點數。

```json
"resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"]
```


請使用表中的標準名稱：建立器會用一般用語顯示它們（「玩家生命力」、「能量」），其他人與 AI 代理也能一眼看懂條件。`null` 可以跳過一個編號：`["PlayerHP", null, "Energy"]` 只宣告 `resource1` 與 `resource3`。未宣告的資源無法讀取：「resource2 未宣告」。

所有資源都是最大值的**百分比**，範圍為 0–100。連擊點數、能量與符文如何換算成百分比，請參閱「條件」中的[資源](https://keyrota.app/documentation/zh-TW/conditions#resources)。

### auras

光環是你自己的增益效果，以及你施加在目標身上的減益效果。輸出循環的光環 `n` 就是 Better Assistant 清單中的光環 `n`。

| 屬性 | 類型 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| `n` | 整數 1–12 | 是 | — | 光環編號（`buffN`）。每個編號只能使用一次。 |
| `alias` | 字串 | 否 | 由 `label` 產生 | 條件中使用的名稱。請參閱[名稱](#aliases)。 |
| `label` | 字串 | 否 | `""` | 顯示名稱。不可包含雙引號 `"`。在名稱後以方括號附上 ID 會很方便：`"目標身上的絞喉 [703]"`。 |
| `spell` | 整數 0–100000000 | 否 | `0` | 光環的 Wowhead ID。`0` = 未設定：此光環不會出現在 Better Assistant 設定檔中，其值也會是未知。 |
| `note` | 字串 | 否 | `""` | 宣告行末尾的註解。 |

```json
"auras": [
  {"n": 1, "alias": "Garrote_DoT", "label": "目標身上的絞喉 [703]", "spell": 703},
  {"n": 2, "alias": "Rupture_DoT", "label": "目標身上的割裂 [1943]", "spell": 1943}
]
```


清單中的順序不重要，重要的是 `n`。編號可以不連續，但對 Better Assistant 設定檔而言，有 ID 的光環必須從第一個開始連續排列。

### slots

欄位是輸出循環的按鈕。輸出循環的欄位 `n` 就是 Better Assistant 中的欄位 `n`。

| 屬性 | 類型 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| `n` | 整數 1–12 | 是 | — | 欄位編號（`slotN`）。 |
| `alias` | 字串 | 否 | 由 `label` 產生 | 規則與條件中使用的名稱。 |
| `label` | 字串 | 否 | `""` | 法術的名稱。不可包含雙引號 `"`。 |
| `spell` | 整數 0–100000000 | 否 | `0` | Wowhead 法術 ID。Better Assistant 會依此將法術放入欄位。 |
| `note` | 字串 | 否 | `""` | 宣告行末尾的註解。 |
| `show` | `"target"` / `"combat"` | 否 | `"target"` | Better Assistant 何時顯示此欄位。 |
| `manual` | true / false | 否 | `false` | 旗標 **M**。 |
| `channel` | true / false | 否 | `false` | 旗標 **C**。 |
| `offGcd` | true / false | 否 | `false` | 旗標 **O**。 |
| `queue` | true / false | 否 | `false` | 旗標 **Q**，只能與 `offGcd` 一起使用。 |

#### show

- `"target"`：有目標時才顯示欄位。幾乎所有攻擊技能都屬於這一種。
- `"combat"`：在戰鬥中即使沒有目標也會顯示欄位。適用於治療與防禦技能：赤紅藥瓶在沒有目標時也必須能使用。

只有 Better Assistant 顯示欄位時，欄位才算就緒。沒有目標時，`"target"` 欄位不會就緒，其規則會被略過。

### 欄位旗標

旗標決定欄位的規則被選中後，要**如何**按下該欄位。在建立器中，它們就是「按鍵方式」開關。

| 旗標 | JSON 寫法 | 按下方式 | 範例 |
|---|---|---|---|
| 無 | 全部為 `false` | 在 GCD 的最後、佇列視窗內按下：GCD 一結束就施放法術。 | 截肢、毒化 |
| **M** | `"manual": true` | 永遠不按。此欄位的規則會被略過。你自己按下它的按鍵時，輸出循環會暫停。 | 你自己按的技能 |
| **C** | `"channel": true` | 與一般法術相同；引導期間不按任何鍵。按下後，在引導開始之前不會再次按下此欄位。 | 狂舞殘殺（51690） |
| **O** | `"offGcd": true` | 立即按下，即使正處於 GCD 中。 | 骰個不停（381989） |
| **O + Q** | `"offGcd": true, "queue": true` | 不佔 GCD，但只在 GCD 最後的佇列視窗內按下。 | 能量刺激 + 狂舞殘殺巨集（13750）；王禍之後的消失（1856） |
| **C + O** | `"channel": true, "offGcd": true` | 不佔 GCD 就能開始的引導：立即按下，之後到引導結束前不按任何鍵。 | 罕見 |
| **C + O + Q** | 三者皆開啟 | 同上，但在佇列視窗內按下。 | 罕見 |
| **Q** 但沒有 O | `"queue": true` | 錯誤：「queue 只能與 offGcd 一起使用」。 | — |
| **M** + 其他旗標 | `"manual": true, …` | 以 M 為準：不按此欄位，其他旗標無效。 | — |

為什麼用 **O + Q** 而不只用 **O**：只有 O 的按鈕會立即按下，也就是在 GCD 進行中、上一擊的結果出來之前。如果王禍之後的消失只設 O，它會在王禍的連擊點數入帳之前就被按下，消失的規則（`Combo_Points < 65`）檢查到的就是舊的數值。加上 Q，按鈕就會等到 GCD 的最後才按。

優先順序是嚴格的：清單中較下方的不佔 GCD 規則，**不會搶在**正在等待 GCD 的較上方規則之前。

```json
"slots": [
  {"n": 1, "alias": "Adrenaline_Rush", "label": "能量刺激（含狂舞殘殺的巨集）", "spell": 13750, "offGcd": true, "queue": true},
  {"n": 4, "alias": "Keep_It_Rolling", "label": "骰個不停", "spell": 381989, "offGcd": true},
  {"n": 8, "alias": "Killing_Spree", "label": "狂舞殘殺", "spell": 51690, "channel": true},
  {"n": 11, "alias": "Crimson_Vial", "label": "赤紅藥瓶", "spell": 185311, "show": "combat"}
]
```


### rules

依優先順序排列的規則：清單中的第一條最先檢查。

| 屬性 | 類型 | 必填 | 預設值 | 說明 |
|---|---|---|---|---|
| `use` | 字串 | 是 | — | 要按的欄位：其 `alias` 或 `slotN`。 |
| `name` | 字串 | 否 | `""` | 動作名稱，會顯示在記錄中。在文字中是 `use` 行上的註解。 |
| `note` | 字串或字串清單 | 否 | `[]` | 規則上方的備註（`use` 之前的 `#` 行）。 |
| `when` | 群組清單 | 否 | `[]` | 「或」群組。空白或省略：無條件規則，只要法術可以使用就會按下。 |

#### when：群組與條件

| 屬性 | 類型 | 必填 | 說明 |
|---|---|---|---|
| `all` | 非空的字串清單 | 是 | 群組的條件，必須全部符合（且）。 |
| `comment` | 字串 | 否 | 群組的註解（在文字中位於該行末尾）。 |

```json
{
  "use": "Garrote",
  "name": "絞喉",
  "note": ["在刷新時段內刷新"],
  "when": [
    {"all": ["Garrote_DoT.down"], "comment": "沒有 DoT"},
    {"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "剩餘 30% 以下"}
  ]
}
```


同一個欄位可以出現在多條規則中：例如，潛行中的絞喉放在清單上方，平時維持絞喉的規則則放在較下方。

#### JSON 中的條件

每個條件都是 KRC 語法的字串：`Garrote_DoT.down`、`Rupture_DoT.duration <= 25`、`Kingsbane.cd <= 3`、`Combo_Points >= 70`、`enemies >= 2`、`target.distance <= 8`、`cd == 1`。完整清單請參閱[條件](https://keyrota.app/documentation/zh-TW/conditions)。

- 可以用名稱（`Garrote_DoT`）或編號引用：`buff1`、`slot3`、`resource4`。
- 字串中的 ` and ` 會將它拆成兩個條件：`"Combo_Points >= 70 and Energy >= 70"` 是兩個條件，兩者都計入 16 個的上限。
- 字串中不可有 `#`，也不可換行。
- 條件由 KeyRota 自己的引擎解讀，因此 JSON 與文字的意義永遠相同。

### 名稱

名稱（`alias`）是光環、欄位與資源在條件與 `use` 中的稱呼。

- 第一個字元必須是字母（任何文字皆可）或 `_`；之後可以使用字母、數字 `0–9` 與 `_`。可以使用中文字；不可使用空格、連字號與句點：要寫 `Fan_of_Knives`，而不是 `Fan-of-Knives`。
- 名稱在所有光環、欄位與資源之間必須唯一。
- 保留名稱：`use`、`when`、`and`、`or`、`rotation`、`gcd`、`enemies`、`target`、`aoe`、`st`、`cd`、`defensives`、`ground_spells`、`movement`，以及 `buffN`、`slotN`、`resourceN` 這類名稱。
- 關鍵字只能用小寫：`use`、`or`、`.up`。`Use`、`OR` 與 `.UP` 都是錯誤。

**由 label 產生名稱。** 沒有 `alias` 時，KeyRota 會由 `label` 產生名稱：去掉方括號及其中的內容，保留字母與數字，其餘字元都變成 `_`。例如 `"Garrote on target [703]"` 會變成 `Garrote_on_target`，`"目標身上的絞喉 [703]"` 則會變成 `目標身上的絞喉`。空白或無法使用的名稱會變成 `Aura_N` 或 `Slot_N`；已被使用的名稱會加上 `_2`、`_3`。如果規則引用了清單中沒有的 `buffN` 或 `slotN`，它們會自動宣告為 `Aura_N` 與 `Slot_N`。

### 必填屬性與預設值

| 位置 | 必填 | 預設值 |
|---|---|---|
| 檔案 | `format`、`version` | `title` `""`、`specID` `0`、`ignoreMainIcon` `true`、`enemies` `{"range": 8, "combatOnly": true}`、空清單 |
| 光環 | `n` | `alias` 由 `label` 產生、`label` `""`、`spell` `0` |
| 欄位 | `n` | `show` `"target"`、所有旗標 `false`、`spell` `0` |
| 規則 | `use` | `name` `""`、`note` `[]`、`when` `[]`（無條件） |
| 群組 | `all`（不可為空） | `comment` `""` |

### 限制

| 項目 | 上限 |
|---|---|
| 光環 | 12（`n` 1–12） |
| 欄位 | 12（`n` 1–12） |
| 每條規則的「或」群組 | 16 |
| 每個群組的「且」條件 | 16 |
| 規則 | 無上限 |
| 條件中的數值 | 整數 0–100 |
| `enemies.range` | 1–100 |
| `spell` | 0–100000000 |
| `specID` | 0–100000 |
| 資源 | 最多 99 個 |

剛好 16 個群組、每組 16 個條件沒有問題；17 個就會出錯。

### 錯誤

有錯誤的輸出循環完全不會載入：不會只執行其中一部分。錯誤訊息一定會指出位置。在 JSON 中是路徑：`rules[3].when[1]: 未知名稱 Foo`（從 0 開始計數）。在建立器中是「規則 4，群組 2: 未知名稱 Foo」（從 1 開始計數）。在 KRC 文字中則是行號。

**JSON 結構：**

| 訊息 | 原因 |
|---|---|
| `多餘的屬性「offgcd」` | 屬性名稱拼錯或無法識別（大小寫有區別：`offGcd`）。 |
| `缺少屬性「format」` | 缺少必填的屬性。 |
| `format: 應為「keyrota-rotation」` | `format` 是其他值。 |
| `version: 需要版本 1` | 缺少 `version`，或其值小於 1。 |
| `slots[0]: 缺少編號 n（1–12）` | 欄位或光環沒有 `n`。 |
| `slots[2].n: 數字不在 1..12 範圍內` | `n` 超出範圍。 |
| `slots[3]: 編號 4 已被使用` | 兩個欄位（或兩個光環）的 `n` 相同。 |
| `slots[1].show: 應為「target」或「combat」` | `show` 是其他值。 |
| `slots[0]: queue 只能與 offGcd 一起使用` | 有 `queue: true` 但沒有 `offGcd: true`。 |
| `rules[2].use: 沒有欄位「Garotte」` | `use` 引用了不存在的欄位。 |
| `rules[0].when[1].all: 需要非空的條件清單` | 群組為空，或缺少 `all`。 |
| `rules[0].when[0].all[2]: 條件為空，或包含 # 或換行字元` | 條件字串為空，或其中有 `#`。 |
| `….spell: 應為整數` | 類型錯誤：以字串代替數字、以 `true` 代替數字等。 |

**條件與宣告**（與 KRC 文字相同）：

| 代碼 | 訊息範例 | 原因 |
|---|---|---|
| `unknown_ref` | `未知名稱 Foo` | 沒有這個名稱的光環、欄位或資源。 |
| `unknown_ref` | `resource5 未宣告` | 此資源未在 `resources` 中宣告。 |
| `wrong_kind` | `Garrote 是 slot，但需要 buff` | 對欄位使用光環的檢查項目（`Garrote.up`），或反過來。 |
| `bad_condition` | `無法解析條件 "Energy => 50"` | 條件或運算子打錯字。 |
| `bad_condition` | `"Garrote.distance <= 8"：只有 target 有 distance` | 只有目標才有距離。 |
| `value_range` | `數值 120 不在 0..100 範圍內` | 數值大於 100。沒有負數，也沒有小數。 |
| `toggle_value` | `"cd >= 1"：開關只能用 == 0 或 == 1` | 開關只能用 `==` 與 0 或 1 比較。 |
| `bad_alias` | `無效的名稱 Fan-of-Knives` | 名稱中有不允許的字元。 |
| `reserved_alias` | `名稱 cd 為保留名稱` | 使用了保留名稱。 |
| `duplicate_alias` | `名稱 Garrote 已宣告過` | 兩個光環、欄位或資源使用同一個名稱。 |
| `index_range` | `buff13：編號不在 1..12 範圍內` | 引用了大於 12 的編號。 |
| `too_many_groups` | `OR 群組超過 16 個` | 規則中的群組超過 16 個。 |
| `too_many_conditions` | `17 個條件位於同一組（上限 16）` | 群組中的條件超過 16 個。 |

建立器還會回報「群組中沒有條件」（空群組）、「未選擇欄位」與「名稱中不可有引號」。

### KRC 文字

KRC 文字是以文字行表示的同一個輸出循環。「文字與 JSON」頁面會顯示它，你也可以將它存成 `.txt` 檔案。文字與 JSON 可以互相轉換，不會失去任何意義。

*KRC 文字:*

```text
rotation "刺殺：最小範例"

buff1	Rupture_DoT = "目標身上的割裂 [1943]"
slot2	Rupture = "割裂"
slot4	Mutilate = "截肢"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Rupture when  # 割裂
	Combo_Points >= 70 and Rupture_DoT.down  # 5+ 個連擊點數，沒有流血

use Mutilate when  # 截肢
```


#### 文字行

- 雙引號外的 `#` 表示註解，直到行尾為止。在 `"label"` 內，`#` 只是一般字元。
- 空行與只有註解的行會被略過：描述與分隔線就是這樣寫的。
- 其他每一行都必須是宣告、`use`、`or` 或條件行。否則就是 `stray_line` 錯誤：「不屬於任何規則的行："…"（說明文字請以 # 開頭）」。
- 各部分之間可以用任意數量的空格與 Tab。標準格式在 `buffN`／`slotN` 之後以及條件行開頭使用 Tab。

#### 宣告

只能放在第一個 `use` 之前：

```text
rotation "名稱"                    # 選填，最多一次
buff1	Garrote_DoT = "目標身上的絞喉 [703]"   # 光環 1
slot1	Garrote = "絞喉"                         # 欄位 1
resource1	PlayerHP                               # 資源 1
```


`buffN` 與 `slotN` 為 1–12，`resourceN` 為 1–99。引號中的 label 可以是空的：`slot5	Filler = ""`。在第一個 `use` 之後的宣告是 `late_declaration` 錯誤。

#### 規則

```text
use Rupture when  # 割裂
	Combo_Points >= 70 and Rupture_DoT.down  # 沒有 DoT
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # 刷新時段
```


- `use 欄位 when` 開始一條規則；這一行的註解就是動作名稱。
- 每一個條件行是一個群組（條件以 `and` 連接）。群組之間以只有一個單字 `or` 的行分隔。
- 沒有條件行的規則就是無條件規則。
- 兩個條件行連在一起而中間沒有 `or`，是 `split_group` 錯誤；`or` 出現在開頭、結尾或連續兩次，則是 `empty_group` 錯誤。

#### 文字與 JSON 的對應

| 文字中 | JSON 中 |
|---|---|
| `rotation "…"` | `title` |
| 第一個 `use` 之前的 `# …` 行 | `notes` |
| `buffN`／`slotN` 行末尾的註解 | 光環／欄位的 `note` |
| 緊接在 `use` 之前（以及規則各群組之間）的 `# …` 行 | 規則的 `note` |
| `use` 行上的註解 | 規則的 `name` |
| 條件行末尾的註解 | 群組的 `comment` |
| 最後一條規則之後的 `# …` 行 | `footer` |
| —（文字中沒有） | `specID`、`ignoreMainIcon`、`enemies`、`spell`、`show`、旗標 |

註解區塊頭尾的空行會被捨棄；中間的空行則保留為 `""`。

### 匯入與儲存

- KeyRota 將輸出循環存放在設定檔中。主視窗中的「匯出」會儲存 KeyRota 設定檔（JSON）及其輸出循環；「匯入」可接受 KeyRota 設定檔，也可接受單純的輸出循環 JSON。
- 「新增」 — 「從檔案…」可接受含 KRC 文字的 `.txt`、輸出循環 JSON 與 KeyRota 設定檔；「新增」 — 「從剪貼簿」則從剪貼簿讀取相同的內容。
- 在建立器中：「文字與 JSON」 — 「貼上」或「開啟…」會取代輸出循環；如果新版本沒有這些設定，編號相同的欄位與光環會保留原本的 ID、「有目標時」／「戰鬥中」與旗標。
- 純文字的輸出循環（沒有 JSON）會從 KeyRota 設定檔中已儲存的 Better Assistant 設定檔取得欄位的 ID 與顯示條件，光環的 ID 也可以從其 label 中的 `[703]` 標記取得。

### 由 JSON 產生 Better Assistant 設定檔

建立器中的「依欄位與光環產生」會從輸出循環 JSON 產生 Better Assistant 設定檔字串：

- **12 個欄位**：欄位 N 是 `slots[n = N].spell`，依 `show` 決定何時顯示。沒有 ID 的欄位會保持空白。
- **光環**從第一個開始依序排列：`auras[n = 1].spell`、`auras[n = 2].spell`…。中間有光環沒有 ID 會造成錯誤。
- **職業與專精**取自 `specID`。
- **敵人計數**取自 `enemies.range` 與 `enemies.combatOnly`。
- 如果 KeyRota 設定檔中已有相同專精的 Better Assistant 設定檔，會保留它的其他設定，以及相符的欄位與光環。

在遊戲中：`/ba` — Profile — 貼上 — Apply。

### JSON Schema

此格式的結構描述：[keyrota-rotation.schema.json](https://keyrota.app/documentation/keyrota-rotation.schema.json)（draft 2020-12）。它會檢查屬性、類型、範圍、沒有 `offGcd` 的 `queue`，以及條件字串的格式。它不會檢查 `n` 與名稱是否唯一、條件中的名稱是否存在，也不會檢查以 ` and ` 拆開字串後的 16 個上限：這些由 KeyRota 在載入時檢查。

驗證檔案的方法：

```text
npx ajv-cli validate --spec=draft2020 -s keyrota-rotation.schema.json -d my-rotation.json
```


請不要在輸出循環檔案中加入 `"$schema"` 屬性：KeyRota 會將它視為多餘的屬性。

---

<!-- https://keyrota.app/documentation/zh-TW/conditions -->

## 條件

條件是一項檢查：「目標身上有絞喉」、「能量至少 70%」、「Burst 已開啟」。多個條件組成群組（且），多個群組組成規則（或）。在建立器中，你是從清單中挑選條件；在 KRC 文字與 JSON 中，條件寫成字串，本頁範例展示的就是這種寫法。

### 語法

| 類型 | 寫法 | 範例 |
|---|---|---|
| 光環：存在／不存在 | `Aura.up`、`Aura.down` | `Garrote_DoT.down` |
| 光環：剩餘時間、層數 | `Aura.duration op N`、`Aura.stacks op N` | `Rupture_DoT.duration <= 30` |
| 欄位：就緒／未就緒 | `Slot.ready`、`Slot.oncd` | `Kingsbane.ready` |
| 欄位：冷卻、充能次數 | `Slot.cd op N`、`Slot.charges op N` | `Deathmark.cd <= 3` |
| 欄位：高亮 | `Slot.glow`、`Slot.noglow` | `Ambush.glow` |
| 資源 | `Resource op N` | `Combo_Points >= 70` |
| 附近敵人數 | `enemies op N` | `enemies >= 3` |
| 與目標的距離 | `target.distance op N` | `target.distance <= 8` |
| 開關 | `aoe`、`st`、`cd`、`defensives`、`ground_spells`、`movement` `== 0` 或 `== 1` | `cd == 1` |

**運算子：** `<`、`<=`、`==`、`=`（與 `==` 相同）、`>=`、`>`。沒有「不等於」。

**數值** `N` 是 0 到 100 的整數。不可為負數或小數，也不可大於 100：`數值 120 不在 0..100 範圍內`。

**空格：** 運算子兩側的空格可有可無：`Energy>=70` 與 `Energy >= 70` 相同。名稱內部，以及名稱與其檢查項目之間，不可有空格：要寫 `Garrote_DoT.up`，而不是 `Garrote_DoT .up`。

**引用**可以用名稱（`Garrote_DoT`）或編號：`buff1`、`slot3`、`resource4`。關鍵字一律小寫。

### 光環

光環是你自己的增益效果，或你施加在目標身上的減益效果，需在光環清單中以 ID 宣告。其他玩家的增益與減益效果是看不到的。

#### .up 與 .down

`Envenom_Buff.up`：光環存在。`Envenom_Buff.down`：光環不存在。如果光環未知（讀不到），兩者都不成立。

```text
use Garrote when  # 絞喉：沒有時就施放
	Garrote_DoT.down
```


#### .duration：剩餘時間百分比

`Rupture_DoT.duration <= 30`：光環的剩餘時間不超過其**完整**持續時間的 30%。完整持續時間是指這一次施放所得到的持續時間：5 個連擊點數的割裂持續 24 秒，7 個則持續 32 秒，因此 30% 分別是 7.2 秒與 9.6 秒。

> [!IMPORTANT]
> 不存在的光環剩餘時間為 **0**。因此，即使目標身上完全沒有割裂，`Rupture_DoT.duration <= 30` 也會成立。若只想刷新已存在的光環，請寫 `Rupture_DoT.up and Rupture_DoT.duration <= 30`，並另外用一個含 `Rupture_DoT.down` 的群組處理「光環不存在」的情況。

WoW 的刷新時段（pandemic）是持續時間的 30%：在這段時間內刷新，不會損失任何持續時間。因此常用的門檻是 `<= 30`。

*KRC 文字:*

```text
use Rupture when  # 割裂
	Combo_Points >= 70 and Rupture_DoT.down  # 沒有 DoT
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # 刷新時段
```

*JSON:*

```json
{
  "use": "Rupture",
  "name": "割裂",
  "when": [
    {"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "沒有 DoT"},
    {"all": ["Combo_Points >= 70", "Rupture_DoT.up", "Rupture_DoT.duration <= 30"], "comment": "刷新時段"}
  ]
}
```


秒數換算成百分比：`百分比 = 秒數 / 完整持續時間 × 100`。絞喉持續 18 秒：「剩 14 秒」是 `<= 78`，「剩 5.4 秒」是 `<= 30`。

**沒有持續時間的光環**（例如潛行）剩餘時間一律讀為 **1**。這類光環只能使用 `.up` 與 `.down`。

#### .stacks：層數

`Opportunity.stacks >= 6`：光環有 6 層以上。不存在的光環為 0 層。

> [!NOTE]
> 層數從 2 開始計算：只有 1 層的光環會讀為 **0**，與沒有層數的光環相同。要檢查光環是否存在，請使用 `.up`；`.stacks` 用於 2 層以上的門檻。

```text
use Pistol_Shot when  # 大好機會 6 層時使用手槍射擊
	Opportunity.stacks >= 6 and Combo_Points < 80
```


### 欄位

欄位條件讀取的是**另一個**按鈕的狀態：例如「只在死亡印記尚未就緒時按毒化」。規則本身的欄位會自動檢查：如果它的法術無法使用，KeyRota 就直接換下一條規則。

#### .ready 與 .oncd

`Kingsbane.ready`：欄位的法術可以使用（不計共用冷卻）。這需要同時滿足以下條件：

- 已學會該法術（已點選天賦）；
- 資源足夠；
- 如果需要目標，目標在射程內；
- 冷卻剩餘不到 0.2 秒，或有可用的充能；
- Better Assistant 顯示此欄位（「有目標時」：你有目標；「戰鬥中」：你在戰鬥中）。

`Kingsbane.oncd`：欄位因上述**任一**原因而**未就緒**，不只是因為冷卻。如果狀態未知，兩者都不成立。

```text
use Preparation when  # 能量刺激、正中眉心與狂舞殘殺都在冷卻時使用備戰
	Adrenaline_Rush.oncd and Between_the_Eyes.oncd and Killing_Spree.oncd
```


#### .cd：剩餘冷卻百分比

`Deathmark.cd <= 3`：剩餘冷卻不超過完整冷卻時間的 3%。`0` 表示就緒，`100` 表示剛使用過。不包含共用冷卻。對於有充能的法術，`.cd` 是**下一次**充能的恢復時間，因此法術在 `cd > 0` 時也可能已就緒。

| 冷卻時間 | 1% = | 範例 |
|---|---|---|
| 30 秒 | 0.3 秒 | `X.cd <= 10`：剩餘 ≤ 3 秒 |
| 1 分鐘 | 0.6 秒 | `Kingsbane.cd <= 3`：剩餘 ≤ 1.8 秒 |
| 2 分鐘 | 1.2 秒 | `Deathmark.cd <= 3`：剩餘 ≤ 3.6 秒；`Deathmark.cd >= 44`：還有 ≥ 52 秒 |
| 3 分鐘 | 1.8 秒 | `X.cd >= 50`：還有 ≥ 90 秒 |

典型的用法是「為大型冷卻技能保留」：死亡印記快要冷卻完畢時就不用王禍，死亡印記還要很久才好時就用掉。

```text
use Kingsbane when  # 王禍
	cd == 1 and Deathmark_DoT.up  # 死亡印記期間
	or
	cd == 1 and Deathmark.cd >= 44  # 距離死亡印記還有 52 秒以上
```


#### .charges

`Barbed_Shot.charges >= 2`：法術有 2 次以上的充能。沒有充能的法術為 0。典型的寫法是避免充能溢出：

```text
use Barbed_Shot when  # 鋒銳射擊
	Barbed_Shot.charges >= 2  # 兩次充能都在：不要浪費充能時間
	or
	Barbed_Shot.charges == 1 and Barbed_Shot.cd <= 20  # 第二次充能快好了
```


#### .glow 與 .noglow：按鈕高亮

`Ambush.glow`：遊戲正在高亮此法術的按鈕（也就是觸發效果時你在快捷列上看到的那種發光）。`Ambush.noglow`：沒有高亮。只有當此法術的按鈕在遊戲中真的會發光時，才使用 `.glow`；如果不確定，請改為檢查觸發效果的增益：`Blindside.up`。

### 資源

`Energy >= 70`：能量至少為最大值的 70%。**所有資源都是百分比**，範圍為 0 到 100：生命力、能量、法力、怒氣、符文、連擊點數皆是。

| 資源 | 編號 | 範例 |
|---|---|---|
| 玩家生命力 | `resource1`（`PlayerHP`） | `PlayerHP <= 40`：生命力 40% 以下 |
| 目標生命力 | `resource2`（`TargetHP`） | `TargetHP >= 50`：目標的生命力還沒降到一半。沒有目標時為未知 |
| 專精資源 | `resource3` 起 | `Energy >= 70`、`Combo_Points >= 70`、`Rage >= 40` |

**換算成百分比：** `百分比 = 數值 / 最大值 × 100`。能量上限為 250 時，175 點能量就是 70%。能量與其他資源的上限會隨天賦改變，因此以百分比設定的門檻，比原始數值更容易套用到不同角色。

**連擊點數。** 連擊點數上限為 7 時，每一點約為 14.3%。數值會取整數，依進位方式不同，2 點會讀為 28 或 29，3 點會讀為 42 或 43，6 點會讀為 85 或 86。因此請將門檻設在**兩個級距的中間**：這樣不論如何進位都正確。

| 連擊點數 | % | 「至少 N 點」 | 「最多 N 點」 |
|---|---|---|---|
| 0 | 0 | — | `< 7` |
| 1 | 14 | `>= 7` | `< 20` |
| 2 | 28–29 | `>= 20` | `< 35` |
| 3 | 42–43 | `>= 35` | `< 50` |
| 4 | 57 | `>= 50` | `< 65` |
| 5 | 71 | `>= 65`（`>= 70`） | `< 80` |
| 6 | 85–86 | `>= 80` | `< 95` |
| 7 | 100 | `>= 95` | — |

上限不同時，「至少 N 點」是 `(N − 0.5) / 上限 × 100`。連擊點數上限為 5 時，「至少 4 點」是 `>= 70`，「至少 5 點」是 `>= 90`。

### 附近敵人數

`enemies >= 3`：計數半徑內有 3 個以上的敵人。半徑與「僅計入戰鬥中的敵人」在「一般」頁面設定（JSON 中為 `enemies.range` 與 `enemies.combatOnly`）。如果敵人數未知，條件不成立。

- 要計算敵人數，遊戲中必須開啟敵方名條（預設按鍵為 V），而且不可隱藏次要敵人。
- 請依你的技能選擇半徑：飛舞刀刃的作用範圍是 8 碼，因此對「飛舞刀刃還是截肢」的判斷來說，8 才是準確的半徑。
- 單一目標時，`enemies <= 1` 比 `enemies == 1` 更安全：即使敵人沒有被計算到，規則仍能運作。

### 與目標的距離

`target.distance <= 8`：目標在 8 碼以內。沒有目標時距離未知，條件不成立。距離是近似值：只有在距離確定符合門檻時條件才成立；處於臨界值時則不成立。

```text
use Pistol_Shot when  # 目標在近戰範圍外，但在 20 碼內
	target.distance >= 10 and target.distance <= 20
```


### 面板開關

開關是顯示在遊戲畫面上的快速設定面板按鈕，也可以用快速鍵切換。它們代表什麼意義，由輸出循環決定。

| 條件 | 面板按鈕 | 按鍵：Windows、macOS | 常見意義 |
|---|---|---|---|
| `aoe == 1` | 目標：範圍 | F2、⌃⇧T，輪流切換 | 強制使用多目標模式 |
| `st == 1` | 目標：單體 | F2、⌃⇧T，輪流切換 | 強制使用單一目標 |
| `aoe == 0 and st == 0` | 目標：自動 | F2、⌃⇧T，輪流切換 | 由規則決定，通常依據 `enemies` |
| `cd == 1` | Burst | F3、⌃⇧B | 大型冷卻技能：現在使用或先保留 |
| `defensives == 1` | 治療／防禦 | — | 治療與防禦技能 |
| `ground_spells == 1` | 地面法術 | — | 需選擇地面位置的法術 |
| `movement == 1` | 移動 | — | 移動中的動作 |

- 只能與 `== 0` 或 `== 1` 比較。
- **`cd == 1` 是 Burst 按鈕，不是法術的冷卻。** 欄位的冷卻是 `Slot.cd`。
- `aoe` 與 `st` 永遠不會同時為 1。目標模式按鍵會依序切換「自動」、「單體」、「範圍」。
- 預設情況下，Burst 為開啟，目標模式為「自動」，其他按鈕為關閉。KeyRota 會記住它們的狀態。
- 只有在輸出循環會讀取某個開關時，對應的面板按鈕才會啟用；使用 Blizzard 設定檔時，所有按鈕都會變暗。
- 開關永遠不會是未知值。

### 條件如何求值

| 條件 | 有值時 | 光環不存在時 | 未知時 |
|---|---|---|---|
| `X.up` | 成立 | 不成立 | **不成立** |
| `X.down` | 不成立 | 成立 | **不成立** |
| `X.duration op N`、`X.stacks op N` | 進行比較 | 以 **0** 比較 | **不成立** |
| `X.ready`／`X.oncd` | 依是否就緒 | — | **不成立**（兩者皆是） |
| `X.glow`／`X.noglow` | 依是否高亮 | — | **不成立**（兩者皆是） |
| `X.cd`、`X.charges`、資源、`enemies`、`target.distance` | 進行比較 | — | **不成立** |
| 開關 | 進行比較 | — | 永遠不會未知 |

群組的所有條件都成立時，群組才成立。規則至少有一個群組成立，或完全沒有群組時，規則就符合。

### 「非」、括號與群組內的「或」

KRC 沒有 `not`、`!=` 與括號。所有邏輯都用群組來表達：

- **「非」**就是成對的條件：非 `.up` 就是 `.down`，非 `.ready` 就是 `.oncd`，非 `.glow` 就是 `.noglow`；數值則用相反的運算子：非 `>= 70` 就是 `< 70`。
- **（A 或 B）且 C** 是兩個群組：`A and C`、`B and C`。
- **A 且非（B 且 C）** 是兩個群組：`A and 非B`、`A and 非C`。
- **每個群組都需要的同一個條件**（例如引導保護），要在每個群組中重複寫一次。

```text
use Fan_of_Knives when  # 飛舞刀刃：（「範圍」模式，或「自動」模式且有 2+ 個敵人）且連擊點數少於 5
	aoe == 1 and Combo_Points < 70
	or
	st == 0 and enemies >= 2 and Combo_Points < 70
```


### 速查表

| 條件 | 意義 |
|---|---|
| `X.up`／`X.down` | 光環存在／不存在 |
| `X.duration <= 30` | 剩餘 ≤ 30%（不存在的光環為 0） |
| `X.up and X.duration <= 30` | 存在且該刷新了 |
| `X.stacks >= 2` | 2 層以上（1 層會讀為 0） |
| `X.ready`／`X.oncd` | 欄位就緒／因任何原因未就緒 |
| `X.cd <= 3` | 剩餘冷卻 ≤ 3% |
| `X.charges >= 2` | 2 次以上的充能 |
| `X.glow`／`X.noglow` | 按鈕高亮／未高亮 |
| `PlayerHP <= 40` | 你的生命力 ≤ 40% |
| `TargetHP >= 50` | 目標生命力 ≥ 50%（沒有目標時不成立） |
| `Combo_Points >= 70` | 7 點中有 5 點以上連擊點數 |
| `Energy >= 70` | 能量 ≥ 70% |
| `enemies >= 3` | 半徑內有 3 個以上的敵人 |
| `target.distance <= 8` | 目標在 8 碼內（沒有目標時不成立） |
| `aoe == 1`／`st == 1` | 「範圍」／「單體」模式 |
| `aoe == 0 and st == 0` | 「自動」模式 |
| `cd == 1` | Burst 開啟 |
| `defensives == 1` | 「治療／防禦」開啟 |
| `ground_spells == 1` | 「地面法術」開啟 |
| `movement == 1` | 「移動」開啟 |

---

<!-- https://keyrota.app/documentation/zh-TW/patterns -->

## 常用技巧範例

每個技巧都是一個小而完整的輸出循環：左邊是 KRC 文字，右邊是相同內容的 JSON。將它貼到建立器中（「文字與 JSON」 — 「貼上」），即可看到它在「欄位」與「規則」頁面上的樣子。法術 ID 都是取自 Wowhead 的真實 ID。頁面最後有[完整的輸出循環](#example-files)。

### 在刷新時段內刷新 DoT

DoT 不存在時施放，剩餘時間在 30% 以下時刷新：在這段刷新時段（pandemic）內刷新，不會損失任何持續時間。不存在的光環剩餘時間為 0，因此刷新要另外用一個含 `.up` 的群組。

*KRC 文字:*

```text
rotation "技巧：在刷新時段內刷新 DoT"

buff1	Garrote_DoT = "目標身上的絞喉 [703]"
slot1	Garrote = "絞喉"
slot4	Mutilate = "截肢"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Garrote when  # 絞喉
	Garrote_DoT.down  # 沒有 DoT
	or
	Garrote_DoT.up and Garrote_DoT.duration <= 30  # 刷新時段

use Mutilate when  # 截肢
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：在刷新時段內刷新 DoT",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 1, "alias": "Garrote_DoT", "label": "目標身上的絞喉 [703]", "spell": 703}
  ],
  "slots": [
    {"n": 1, "alias": "Garrote", "label": "絞喉", "spell": 703},
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329}
  ],
  "rules": [
    {"use": "Garrote", "name": "絞喉", "when": [
      {"all": ["Garrote_DoT.down"], "comment": "沒有 DoT"},
      {"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "刷新時段"}
    ]},
    {"use": "Mutilate", "name": "截肢"}
  ]
}
```


- 在 3 個以上目標時，若不想對快死的目標施放新的 DoT，請在「沒有 DoT」群組加上 `TargetHP >= 50`，並為 1–2 個目標另外加一個群組 `Garrote_DoT.down and enemies <= 2`。
- 持續時間會變動的長效 DoT（割裂：4 秒，每個連擊點數再加 4 秒）也是同樣的寫法：百分比是以該次施放的持續時間計算。

### 依連擊點數使用產生技能與消耗技能

7 點連擊點數中有 5 點以上時使用消耗技能，少於 5 點時使用產生技能。門檻設在兩個級距的中間，請參閱[連擊點數對照表](https://keyrota.app/documentation/zh-TW/conditions#resources)。

*KRC 文字:*

```text
rotation "技巧：產生技能與消耗技能"

slot3	Envenom = "毒化"
slot4	Mutilate = "截肢"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Envenom when  # 毒化
	Combo_Points >= 70  # 連擊點數 5+

use Mutilate when  # 截肢
	Combo_Points < 70  # 連擊點數少於 5
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：產生技能與消耗技能",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 3, "alias": "Envenom", "label": "毒化", "spell": 32645},
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329}
  ],
  "rules": [
    {"use": "Envenom", "name": "毒化", "when": [
      {"all": ["Combo_Points >= 70"], "comment": "連擊點數 5+"}
    ]},
    {"use": "Mutilate", "name": "截肢", "when": [
      {"all": ["Combo_Points < 70"], "comment": "連擊點數少於 5"}
    ]}
  ]
}
```


條件為 `Combo_Points < 70` 的產生技能不會讓連擊點數溢出：連擊點數達到 5 點以上時，即使消耗技能還無法使用（能量不足），產生技能也不會觸發，KeyRota 會等待。

### 資源累積

不要一有點數就立刻消耗；維持增益效果並累積能量：在毒化的增益快結束時、死亡印記期間，或能量充足時才使用毒化。其他時候，連擊點數在 5 點以上時沒有任何規則符合，KeyRota 會等待更多能量：這就是資源累積。

*KRC 文字:*

```text
rotation "技巧：累積能量"

buff3	Envenom_Buff = "毒化 [32645]"
buff4	Deathmark_DoT = "目標身上的死亡印記 [360194]"
slot3	Envenom = "毒化"
slot4	Mutilate = "截肢"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Envenom when  # 毒化
	Combo_Points >= 70 and Envenom_Buff.down  # 沒有增益
	or
	Combo_Points >= 70 and Envenom_Buff.duration <= 20  # 增益快結束
	or
	Combo_Points >= 70 and Deathmark_DoT.up  # 死亡印記期間
	or
	Combo_Points >= 70 and Energy >= 70  # 避免能量溢出

use Mutilate when  # 截肢
	Combo_Points < 70
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：累積能量",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 3, "alias": "Envenom_Buff", "label": "毒化 [32645]", "spell": 32645},
    {"n": 4, "alias": "Deathmark_DoT", "label": "目標身上的死亡印記 [360194]", "spell": 360194}
  ],
  "slots": [
    {"n": 3, "alias": "Envenom", "label": "毒化", "spell": 32645},
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329}
  ],
  "rules": [
    {"use": "Envenom", "name": "毒化", "when": [
      {"all": ["Combo_Points >= 70", "Envenom_Buff.down"], "comment": "沒有增益"},
      {"all": ["Combo_Points >= 70", "Envenom_Buff.duration <= 20"], "comment": "增益快結束"},
      {"all": ["Combo_Points >= 70", "Deathmark_DoT.up"], "comment": "死亡印記期間"},
      {"all": ["Combo_Points >= 70", "Energy >= 70"], "comment": "避免能量溢出"}
    ]},
    {"use": "Mutilate", "name": "截肢", "when": [
      {"all": ["Combo_Points < 70"]}
    ]}
  ]
}
```


- `Energy >= 70` 門檻可避免能量溢出。
- `Envenom_Buff.duration <= 20` 群組在沒有增益時也會觸發（剩餘時間為 0）；`.down` 群組是為了讓規則更清楚。
- 調整資源累積時只需更改能量門檻：調低就會更早消耗，調高就會累積更久。

### 單一目標與多目標

玩家用目標模式按鍵設定目標模式（依序切換「自動」、「單體」、「範圍」）；在「自動」模式下，由規則依敵人數決定。每條 AoE 規則有兩個群組：「範圍」模式，以及「自動」模式且有 2 個以上敵人；單一目標規則則是「單體」模式，以及「自動」模式且最多 1 個敵人。

*KRC 文字:*

```text
rotation "技巧：單一目標與多目標"

slot3	Envenom = "毒化"
slot4	Mutilate = "截肢"
slot6	Fan_of_Knives = "飛舞刀刃"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Envenom when  # 毒化
	Combo_Points >= 70

use Fan_of_Knives when  # 飛舞刀刃：2+ 個目標
	aoe == 1 and Combo_Points < 70  # 「範圍」模式
	or
	st == 0 and enemies >= 2 and Combo_Points < 70  # 「自動」模式，2+ 個敵人

use Mutilate when  # 截肢：單一目標
	st == 1 and Combo_Points < 70  # 「單體」模式
	or
	aoe == 0 and enemies <= 1 and Combo_Points < 70  # 「自動」模式，1 個敵人
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：單一目標與多目標",
  "specID": 259,
  "enemies": {"range": 8, "combatOnly": true},
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 3, "alias": "Envenom", "label": "毒化", "spell": 32645},
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329},
    {"n": 6, "alias": "Fan_of_Knives", "label": "飛舞刀刃", "spell": 51723}
  ],
  "rules": [
    {"use": "Envenom", "name": "毒化", "when": [
      {"all": ["Combo_Points >= 70"]}
    ]},
    {"use": "Fan_of_Knives", "name": "飛舞刀刃：2+ 個目標", "when": [
      {"all": ["aoe == 1", "Combo_Points < 70"], "comment": "「範圍」模式"},
      {"all": ["st == 0", "enemies >= 2", "Combo_Points < 70"], "comment": "「自動」模式，2+ 個敵人"}
    ]},
    {"use": "Mutilate", "name": "截肢：單一目標", "when": [
      {"all": ["st == 1", "Combo_Points < 70"], "comment": "「單體」模式"},
      {"all": ["aoe == 0", "enemies <= 1", "Combo_Points < 70"], "comment": "「自動」模式，1 個敵人"}
    ]}
  ]
}
```


- `st == 0 and enemies >= 2` 的意思是「不是『單體』模式」：在「範圍」模式下，規則本來就會透過第一個群組觸發。
- `enemies <= 1` 比 `enemies == 1` 更安全：單一目標時，敵人可能沒有被計算到。
- 計數半徑（`enemies.range`）請依你的 AoE 技能設定：飛舞刀刃的作用範圍是 8 碼。

### 由 Burst 控制冷卻技能，以及「只在冷卻技能期間」

`cd == 1` 是 Burst 按鈕。大型冷卻技能只在 Burst 開啟時才按，關閉 Burst 就能保留它，例如在首領進入免疫的階段之前。能強化冷卻技能效果期間的技能，只在該期間內按：此處的消失只在目標身上有死亡印記時使用，王禍則在死亡印記期間或死亡印記還要很久才好時使用。

*KRC 文字:*

```text
rotation "技巧：Burst"

buff1	Garrote_DoT = "目標身上的絞喉 [703]"
buff2	Rupture_DoT = "目標身上的割裂 [1943]"
buff4	Deathmark_DoT = "目標身上的死亡印記 [360194]"
buff10	Vanish_Buff = "消失 [11327]"
slot1	Garrote = "絞喉"
slot4	Mutilate = "截肢"
slot8	Deathmark = "死亡印記"
slot9	Kingsbane = "王禍"
slot10	Vanish = "消失"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Garrote when  # 潛行中的絞喉
	Vanish_Buff.up

use Deathmark when  # 死亡印記
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up  # Burst 開啟，DoT 都在

use Kingsbane when  # 王禍
	cd == 1 and Deathmark_DoT.up and Combo_Points < 50  # 死亡印記期間，連擊點數 0–3
	or
	cd == 1 and Deathmark.cd >= 44 and Combo_Points < 50  # 距離死亡印記還有 52 秒以上

use Vanish when  # 消失
	Deathmark_DoT.up and Combo_Points < 65  # 死亡印記期間，連擊點數 0–4

use Mutilate when  # 截肢
	Combo_Points < 70
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：Burst",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 1, "alias": "Garrote_DoT", "label": "目標身上的絞喉 [703]", "spell": 703},
    {"n": 2, "alias": "Rupture_DoT", "label": "目標身上的割裂 [1943]", "spell": 1943},
    {"n": 4, "alias": "Deathmark_DoT", "label": "目標身上的死亡印記 [360194]", "spell": 360194},
    {"n": 10, "alias": "Vanish_Buff", "label": "消失 [11327]", "spell": 11327}
  ],
  "slots": [
    {"n": 1, "alias": "Garrote", "label": "絞喉", "spell": 703},
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329},
    {"n": 8, "alias": "Deathmark", "label": "死亡印記", "spell": 360194},
    {"n": 9, "alias": "Kingsbane", "label": "王禍", "spell": 385627},
    {"n": 10, "alias": "Vanish", "label": "消失", "spell": 1856, "offGcd": true, "queue": true}
  ],
  "rules": [
    {"use": "Garrote", "name": "潛行中的絞喉", "when": [
      {"all": ["Vanish_Buff.up"]}
    ]},
    {"use": "Deathmark", "name": "死亡印記", "when": [
      {"all": ["cd == 1", "Garrote_DoT.up", "Rupture_DoT.up"], "comment": "Burst 開啟，DoT 都在"}
    ]},
    {"use": "Kingsbane", "name": "王禍", "when": [
      {"all": ["cd == 1", "Deathmark_DoT.up", "Combo_Points < 50"], "comment": "死亡印記期間，連擊點數 0–3"},
      {"all": ["cd == 1", "Deathmark.cd >= 44", "Combo_Points < 50"], "comment": "距離死亡印記還有 52 秒以上"}
    ]},
    {"use": "Vanish", "name": "消失", "when": [
      {"all": ["Deathmark_DoT.up", "Combo_Points < 65"], "comment": "死亡印記期間，連擊點數 0–4"}
    ]},
    {"use": "Mutilate", "name": "截肢", "when": [
      {"all": ["Combo_Points < 70"]}
    ]}
  ]
}
```


- 消失不佔 GCD，但同時也開啟了「佇列視窗」（**O + Q**）：否則它會在王禍之後、GCD 進行中立刻被按下，此時王禍的連擊點數還沒入帳，檢查到的會是舊的點數。
- 關閉 Burst，死亡印記與王禍就會等待；消失則等待死亡印記。
- 王禍在 0–3 個連擊點數時使用：之後還會再獲得 5 點，不會有任何浪費。

### 引導保護

遊戲會在部分引導的最後一擊之前稍早結束引導，此時下一次按鍵就會截斷它。保護的方法是利用引導本身的光環：光環剩餘超過 8% 時，任何規則都不成立。這個條件要加入每條規則的**每一個**群組。引導欄位上的旗標 **C** 可以避免在引導開始時重複按下。

*KRC 文字:*

```text
rotation "技巧：引導保護"

buff10	Killing_Spree_Buff = "狂舞殘殺，引導 [51690]"
slot8	Killing_Spree = "狂舞殘殺"
slot9	Dispatch = "抹殺"
slot11	Sinister_Strike = "邪惡攻擊"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Killing_Spree when  # 狂舞殘殺
	Combo_Points >= 80 and Killing_Spree_Buff.duration <= 8

use Dispatch when  # 抹殺
	Combo_Points >= 80 and Killing_Spree_Buff.duration <= 8

use Sinister_Strike when  # 邪惡攻擊
	Combo_Points < 80 and Killing_Spree_Buff.duration <= 8
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：引導保護",
  "specID": 260,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 10, "alias": "Killing_Spree_Buff", "label": "狂舞殘殺，引導 [51690]", "spell": 51690}
  ],
  "slots": [
    {"n": 8, "alias": "Killing_Spree", "label": "狂舞殘殺", "spell": 51690, "channel": true},
    {"n": 9, "alias": "Dispatch", "label": "抹殺", "spell": 2098},
    {"n": 11, "alias": "Sinister_Strike", "label": "邪惡攻擊", "spell": 193315}
  ],
  "rules": [
    {"use": "Killing_Spree", "name": "狂舞殘殺", "when": [
      {"all": ["Combo_Points >= 80", "Killing_Spree_Buff.duration <= 8"]}
    ]},
    {"use": "Dispatch", "name": "抹殺", "when": [
      {"all": ["Combo_Points >= 80", "Killing_Spree_Buff.duration <= 8"]}
    ]},
    {"use": "Sinister_Strike", "name": "邪惡攻擊", "when": [
      {"all": ["Combo_Points < 80", "Killing_Spree_Buff.duration <= 8"]}
    ]}
  ]
}
```


- 為什麼用 `<= 8` 而不是 `.down`：沒有引導時，光環剩餘時間為 0，條件成立；引導期間，只需等到最後 8%，不必在引導結束後再多等零點幾秒。
- 如果讀不到光環，每條規則中的這個條件都會不成立，KeyRota 就什麼都不按：寧可少按一下，也不要截斷引導。因此引導的光環一定要加入 Better Assistant 設定檔。

### 在佇列視窗內按下不佔 GCD 的巨集

「不佔 GCD」有兩種：
- **O**：按鈕會立即按下，即使正處於 GCD 中。骰個不停（延長命運之骰）就是這樣才不會浪費時間。
- **O + Q**：按鈕本身不佔 GCD，但它的巨集或結果與 GCD 有關。第二行是狂舞殘殺（佔用 GCD）的能量刺激巨集，會在 GCD 最後的佇列視窗內按下，狂舞殘殺就能緊接在能量刺激之後施放。

*遊戲中的巨集（欄位 1）:*

```text
#showtooltip 能量刺激
/cast 能量刺激
/cast 狂舞殘殺
```


*KRC 文字:*

```text
rotation "技巧：不佔 GCD"

buff2	Triple_Threat = "命運之骰，3 級 [1214935]"
buff3	Jackpot = "命運之骰，4 級 [1214937]"
buff6	Adrenaline_Rush_Buff = "能量刺激 [13750]"
slot1	Adrenaline_Rush = "能量刺激 + 狂舞殘殺（巨集）"
slot4	Keep_It_Rolling = "骰個不停"
slot11	Sinister_Strike = "邪惡攻擊"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Adrenaline_Rush when  # 能量刺激（巨集帶出狂舞殘殺）
	Adrenaline_Rush_Buff.down and Combo_Points >= 7 and Combo_Points < 80  # 連擊點數 1–5：0 點時巨集中的狂舞殘殺放不出來

use Keep_It_Rolling when  # 骰個不停
	Triple_Threat.up
	or
	Jackpot.up

use Sinister_Strike when  # 邪惡攻擊
	Combo_Points < 80
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：不佔 GCD",
  "specID": 260,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 2, "alias": "Triple_Threat", "label": "命運之骰，3 級 [1214935]", "spell": 1214935},
    {"n": 3, "alias": "Jackpot", "label": "命運之骰，4 級 [1214937]", "spell": 1214937},
    {"n": 6, "alias": "Adrenaline_Rush_Buff", "label": "能量刺激 [13750]", "spell": 13750}
  ],
  "slots": [
    {"n": 1, "alias": "Adrenaline_Rush", "label": "能量刺激 + 狂舞殘殺（巨集）", "spell": 13750, "offGcd": true, "queue": true},
    {"n": 4, "alias": "Keep_It_Rolling", "label": "骰個不停", "spell": 381989, "offGcd": true},
    {"n": 11, "alias": "Sinister_Strike", "label": "邪惡攻擊", "spell": 193315}
  ],
  "rules": [
    {"use": "Adrenaline_Rush", "name": "能量刺激（巨集帶出狂舞殘殺）", "when": [
      {"all": ["Adrenaline_Rush_Buff.down", "Combo_Points >= 7", "Combo_Points < 80"], "comment": "連擊點數 1–5：0 點時巨集中的狂舞殘殺放不出來"}
    ]},
    {"use": "Keep_It_Rolling", "name": "骰個不停", "when": [
      {"all": ["Triple_Threat.up"]},
      {"all": ["Jackpot.up"]}
    ]},
    {"use": "Sinister_Strike", "name": "邪惡攻擊", "when": [
      {"all": ["Combo_Points < 80"]}
    ]}
  ]
}
```


巨集欄位的 ID 是巨集主要法術的 ID（能量刺激，13750）：Better Assistant 會依此將巨集的法術放入欄位，KeyRota 則從快捷列上的巨集按鈕讀取按鍵。

### 依生命力使用防禦技能

生命力低於門檻時使用治療或防禦技能，而且只在面板上開啟「治療／防禦」時使用。此欄位設為**戰鬥中**顯示（「戰鬥中」，`"show": "combat"`），這樣沒有目標時也能使用。這條規則放在第一條：生命力低時，它比傷害更重要。

*KRC 文字:*

```text
rotation "技巧：依生命力使用防禦技能"

slot4	Mutilate = "截肢"
slot11	Crimson_Vial = "赤紅藥瓶"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Crimson_Vial when  # 赤紅藥瓶
	defensives == 1 and PlayerHP <= 40  # 生命力 40% 以下

use Mutilate when  # 截肢
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：依生命力使用防禦技能",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329},
    {"n": 11, "alias": "Crimson_Vial", "label": "赤紅藥瓶", "spell": 185311, "show": "combat"}
  ],
  "rules": [
    {"use": "Crimson_Vial", "name": "赤紅藥瓶", "when": [
      {"all": ["defensives == 1", "PlayerHP <= 40"], "comment": "生命力 40% 以下"}
    ]},
    {"use": "Mutilate", "name": "截肢"}
  ]
}
```


「治療／防禦」預設為關閉：想要自動使用防禦技能時，請在快速設定面板中開啟它。

### 觸發效果：依增益或依高亮

請依增益效果檢查觸發效果：在刺殺團隊副本輸出循環中，洞悉要害的增益效果（`Blindside.up`）會讓伏擊規則成立。如果遊戲會在觸發時高亮按鈕，規則也可以讀取高亮狀態（`Ambush.glow`），但前提是你在快捷列上確實看得到這種發光。

*KRC 文字:*

```text
rotation "技巧：觸發效果"

buff7	Blindside = "洞悉要害 [121153]"
slot4	Mutilate = "截肢"
slot5	Ambush = "伏擊"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Ambush when  # 伏擊（洞悉要害）
	Blindside.up and Combo_Points < 70

use Mutilate when  # 截肢
	Combo_Points < 70
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：觸發效果",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 7, "alias": "Blindside", "label": "洞悉要害 [121153]", "spell": 121153}
  ],
  "slots": [
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329},
    {"n": 5, "alias": "Ambush", "label": "伏擊", "spell": 8676}
  ],
  "rules": [
    {"use": "Ambush", "name": "伏擊（洞悉要害）", "when": [
      {"all": ["Blindside.up", "Combo_Points < 70"]}
    ]},
    {"use": "Mutilate", "name": "截肢", "when": [
      {"all": ["Combo_Points < 70"]}
    ]}
  ]
}
```


### 充能

有充能的法術在兩次充能都在，或第二次充能快恢復時使用，這樣充能時間就不會閒置。範例：獵人的鋒銳射擊（2 次充能）。

*KRC 文字:*

```text
rotation "技巧：充能"

slot1	Barbed_Shot = "鋒銳射擊"
slot2	Kill_Command = "擊殺命令"
resource1	PlayerHP
resource2	TargetHP
resource3	Focus

use Barbed_Shot when  # 鋒銳射擊
	Barbed_Shot.charges >= 2  # 兩次充能都在
	or
	Barbed_Shot.charges == 1 and Barbed_Shot.cd <= 20  # 第二次充能快好了

use Kill_Command when  # 擊殺命令
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：充能",
  "specID": 253,
  "resources": ["PlayerHP", "TargetHP", "Focus"],
  "slots": [
    {"n": 1, "alias": "Barbed_Shot", "label": "鋒銳射擊", "spell": 217200},
    {"n": 2, "alias": "Kill_Command", "label": "擊殺命令", "spell": 34026}
  ],
  "rules": [
    {"use": "Barbed_Shot", "name": "鋒銳射擊", "when": [
      {"all": ["Barbed_Shot.charges >= 2"], "comment": "兩次充能都在"},
      {"all": ["Barbed_Shot.charges == 1", "Barbed_Shot.cd <= 20"], "comment": "第二次充能快好了"}
    ]},
    {"use": "Kill_Command", "name": "擊殺命令"}
  ]
}
```


對於有充能的法術，`.cd` 是下一次充能的恢復時間：`Barbed_Shot.cd <= 20` 表示恢復時間剩餘不超過 20%。

### 與目標的距離

目標在近戰範圍外、但在遠程技能射程內時，與其閒著，不如改按遠程技能。沒有目標時距離未知，規則不會觸發。

*KRC 文字:*

```text
rotation "技巧：距離"

slot10	Pistol_Shot = "手槍射擊"
slot11	Sinister_Strike = "邪惡攻擊"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Pistol_Shot when  # 手槍射擊：目標太遠
	target.distance >= 10 and target.distance <= 20 and Combo_Points < 80

use Sinister_Strike when  # 邪惡攻擊
	Combo_Points < 80
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：距離",
  "specID": 260,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 10, "alias": "Pistol_Shot", "label": "手槍射擊", "spell": 185763},
    {"n": 11, "alias": "Sinister_Strike", "label": "邪惡攻擊", "spell": 193315}
  ],
  "rules": [
    {"use": "Pistol_Shot", "name": "手槍射擊：目標太遠", "when": [
      {"all": ["target.distance >= 10", "target.distance <= 20", "Combo_Points < 80"]}
    ]},
    {"use": "Sinister_Strike", "name": "邪惡攻擊", "when": [
      {"all": ["Combo_Points < 80"]}
    ]}
  ]
}
```


近戰規則不需要檢查距離：目標太遠時法術無法使用，KeyRota 會自動換下一條規則。

### 移動

面板上的「移動」按鈕是你給輸出循環的訊號：「我現在得跑位」。要怎麼應對由輸出循環決定，例如改用遠程技能。

*KRC 文字:*

```text
rotation "技巧：移動"

slot10	Pistol_Shot = "手槍射擊"
slot11	Sinister_Strike = "邪惡攻擊"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Pistol_Shot when  # 移動中使用手槍射擊
	movement == 1 and Combo_Points < 80

use Sinister_Strike when  # 邪惡攻擊
	movement == 0 and Combo_Points < 80
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：移動",
  "specID": 260,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "slots": [
    {"n": 10, "alias": "Pistol_Shot", "label": "手槍射擊", "spell": 185763},
    {"n": 11, "alias": "Sinister_Strike", "label": "邪惡攻擊", "spell": 193315}
  ],
  "rules": [
    {"use": "Pistol_Shot", "name": "移動中使用手槍射擊", "when": [
      {"all": ["movement == 1", "Combo_Points < 80"]}
    ]},
    {"use": "Sinister_Strike", "name": "邪惡攻擊", "when": [
      {"all": ["movement == 0", "Combo_Points < 80"]}
    ]}
  ]
}
```


### 地面法術

「地面法術」按鈕允許使用需要放置在地面上的法術。KeyRota 只會按下按鍵，因此位置由巨集決定：`[@player]` 是在你的腳下，`[@cursor]` 是在游標下方。

*遊戲中的巨集:*

```text
#showtooltip 死亡凋零
/cast [@player] 死亡凋零
```


*KRC 文字:*

```text
rotation "技巧：地面法術"

slot1	Death_and_Decay = "死亡凋零（巨集 @player）"
resource1	PlayerHP
resource2	TargetHP
resource3	Runes
resource4	Runic_Power

use Death_and_Decay when  # 死亡凋零
	ground_spells == 1 and enemies >= 2  # 「地面法術」開啟，2+ 個敵人
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "技巧：地面法術",
  "specID": 250,
  "resources": ["PlayerHP", "TargetHP", "Runes", "Runic_Power"],
  "slots": [
    {"n": 1, "alias": "Death_and_Decay", "label": "死亡凋零（巨集 @player）", "spell": 43265}
  ],
  "rules": [
    {"use": "Death_and_Decay", "name": "死亡凋零", "when": [
      {"all": ["ground_spells == 1", "enemies >= 2"], "comment": "「地面法術」開啟，2+ 個敵人"}
    ]}
  ]
}
```


### 完整的入門輸出循環

[建立器範例](https://keyrota.app/documentation/zh-TW/editor#walkthrough)中的輸出循環：兩個 DoT、一個產生技能、一個會累積資源的消耗技能、一個防禦技能，以及由 Burst 控制的死亡印記。

*KRC 文字:*

```text
rotation "刺殺：範例 v1"

# KeyRota 說明文件中的範例：兩個流血、一個產生技能、一個存能量的消耗技能，
# 低生命力時的防禦，以及由 Burst 按鈕控制的死亡印記。
# 連擊點數以 7 點的百分比計：5 點 = 71%，門檻 70 = 5 點以上。

buff1	Garrote_DoT = "目標身上的絞喉 [703]"
buff2	Rupture_DoT = "目標身上的割裂 [1943]"
buff3	Envenom_Buff = "毒化 [32645]"
buff4	Deathmark_DoT = "目標身上的死亡印記 [360194]"
slot1	Garrote = "絞喉"
slot2	Rupture = "割裂"
slot3	Envenom = "毒化"
slot4	Mutilate = "截肢"
slot5	Deathmark = "死亡印記"
slot6	Crimson_Vial = "赤紅藥瓶"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

# --- 防禦：僅在「治療／防禦」開啟時 ---
use Crimson_Vial when  # 赤紅藥瓶
	defensives == 1 and PlayerHP <= 40  # 生命力 40% 以下

# --- 冷卻技能：僅在 Burst 開啟時 ---
use Deathmark when  # 死亡印記
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Envenom_Buff.up  # Burst 開啟，流血與毒化都在

# --- 流血 ---
use Garrote when  # 絞喉
	Garrote_DoT.down  # 沒有流血
	or
	Garrote_DoT.up and Garrote_DoT.duration <= 30  # 刷新時段：剩餘 30% 以下

use Rupture when  # 割裂
	Combo_Points >= 70 and Rupture_DoT.down  # 5+ 個連擊點數，沒有流血
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # 5+ 個連擊點數，刷新時段

# --- 消耗：5+ 個連擊點數，存能量 ---
use Envenom when  # 毒化
	Combo_Points >= 70 and Envenom_Buff.down  # 沒有增益
	or
	Combo_Points >= 70 and Envenom_Buff.up and Envenom_Buff.duration <= 20  # 增益快結束
	or
	Combo_Points >= 70 and Energy >= 70  # 避免能量溢出
	or
	Combo_Points >= 70 and Deathmark_DoT.up  # 目標身上有死亡印記

# --- 產生技能：少於 5 個連擊點數 ---
use Mutilate when  # 截肢
	Combo_Points < 70  # 少於 5 個連擊點數
```

*JSON:*

```json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "刺殺：範例 v1",
  "specID": 259,
  "ignoreMainIcon": true,
  "enemies": {"range": 8, "combatOnly": true},
  "notes": [
    "KeyRota 說明文件中的範例：兩個流血、一個產生技能、一個存能量的消耗技能，",
    "低生命力時的防禦，以及由 Burst 按鈕控制的死亡印記。",
    "連擊點數以 7 點的百分比計：5 點 = 71%，門檻 70 = 5 點以上。"
  ],
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [
    {"n": 1, "alias": "Garrote_DoT", "label": "目標身上的絞喉 [703]", "spell": 703},
    {"n": 2, "alias": "Rupture_DoT", "label": "目標身上的割裂 [1943]", "spell": 1943},
    {"n": 3, "alias": "Envenom_Buff", "label": "毒化 [32645]", "spell": 32645},
    {"n": 4, "alias": "Deathmark_DoT", "label": "目標身上的死亡印記 [360194]", "spell": 360194}
  ],
  "slots": [
    {"n": 1, "alias": "Garrote", "label": "絞喉", "spell": 703, "show": "target"},
    {"n": 2, "alias": "Rupture", "label": "割裂", "spell": 1943, "show": "target"},
    {"n": 3, "alias": "Envenom", "label": "毒化", "spell": 32645, "show": "target"},
    {"n": 4, "alias": "Mutilate", "label": "截肢", "spell": 1329, "show": "target"},
    {"n": 5, "alias": "Deathmark", "label": "死亡印記", "spell": 360194, "show": "target"},
    {"n": 6, "alias": "Crimson_Vial", "label": "赤紅藥瓶", "spell": 185311, "show": "combat"}
  ],
  "rules": [
    {
      "use": "Crimson_Vial",
      "name": "赤紅藥瓶",
      "note": ["--- 防禦：僅在「治療／防禦」開啟時 ---"],
      "when": [{"all": ["defensives == 1", "PlayerHP <= 40"], "comment": "生命力 40% 以下"}]
    },
    {
      "use": "Deathmark",
      "name": "死亡印記",
      "note": ["--- 冷卻技能：僅在 Burst 開啟時 ---"],
      "when": [
        {
          "all": ["cd == 1", "Garrote_DoT.up", "Rupture_DoT.up", "Envenom_Buff.up"],
          "comment": "Burst 開啟，流血與毒化都在"
        }
      ]
    },
    {
      "use": "Garrote",
      "name": "絞喉",
      "note": ["--- 流血 ---"],
      "when": [
        {"all": ["Garrote_DoT.down"], "comment": "沒有流血"},
        {"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "刷新時段：剩餘 30% 以下"}
      ]
    },
    {
      "use": "Rupture",
      "name": "割裂",
      "when": [
        {"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "5+ 個連擊點數，沒有流血"},
        {
          "all": ["Combo_Points >= 70", "Rupture_DoT.up", "Rupture_DoT.duration <= 30"],
          "comment": "5+ 個連擊點數，刷新時段"
        }
      ]
    },
    {
      "use": "Envenom",
      "name": "毒化",
      "note": ["--- 消耗：5+ 個連擊點數，存能量 ---"],
      "when": [
        {"all": ["Combo_Points >= 70", "Envenom_Buff.down"], "comment": "沒有增益"},
        {"all": ["Combo_Points >= 70", "Envenom_Buff.up", "Envenom_Buff.duration <= 20"], "comment": "增益快結束"},
        {"all": ["Combo_Points >= 70", "Energy >= 70"], "comment": "避免能量溢出"},
        {"all": ["Combo_Points >= 70", "Deathmark_DoT.up"], "comment": "目標身上有死亡印記"}
      ]
    },
    {
      "use": "Mutilate",
      "name": "截肢",
      "note": ["--- 產生技能：少於 5 個連擊點數 ---"],
      "when": [{"all": ["Combo_Points < 70"], "comment": "少於 5 個連擊點數"}]
    }
  ]
}
```


### 完整的團隊副本輸出循環

實際使用的刺殺團隊副本輸出循環（命縛）：15 條規則、Burst、死亡印記期間的消失、用赤紅風暴複製 DoT、AoE 與單一目標、累積能量。

**KRC 文字：刺殺，團隊副本**
*KRC 文字:*

```text
rotation "刺殺，團隊副本 v2.8：Burst 按鈕、Method 12.1、SimulationCraft、頂尖日誌"

# 刺殺，團隊副本。依據：Method 指南（12.1 版）、SimulationCraft 動作列表與 Warcraft Logs 頂尖玩家。
# 忽略主圖示：開啟。死亡印記與王禍僅在 Burst 開啟時使用；消失僅在目標身上有死亡印記時使用。
# 連擊點數以 7 點的百分比計：3 = 43%，4 = 57%，5 = 71%，6 = 86%，7 = 100%。

# v2.4：王禍僅在 0–3 個連擊點數時使用（之後嚴厲襲擊再給 5 點），消失在 0–4 點時使用（潛行中的絞喉給 3 點）。
# v2.5：僅當兩個流血中只有一個是新上的時才使用赤紅風暴；此前它會連續按好幾次。
# v2.6：Burst 開啟且死亡印記就緒或已在目標身上時，無論目標生命力多少都施放絞喉與割裂。
# v2.7 與 v2.8：沒有流血的新目標、Burst 開啟、死亡印記就緒、附近 2+ 個敵人：先用赤紅風暴複製流血（連擊點數不限），再用死亡印記。

buff1	Garrote_DoT = "目標身上的絞喉 [703]"
buff2	Rupture_DoT = "目標身上的割裂 [1943]"
buff3	Envenom_Buff = "毒化 [32645]"
buff4	Deathmark_DoT = "目標身上的死亡印記 [360194]"
buff5	Improved_Garrote = "強化絞喉 [392401]"
buff6	Darkest_Night = "深沉暗夜 [457280]"
buff7	Blindside = "洞悉要害 [121153]"
buff8	Stealth_Buff = "潛行 [1784]"
buff9	Stealth_Sub = "潛行（欺敵） [115191]"
buff10	Vanish_Buff = "消失 [11327]"
slot1	Garrote = "絞喉"
slot2	Rupture = "割裂"
slot3	Envenom = "毒化"
slot4	Mutilate = "截肢"
slot5	Ambush = "伏擊"
slot6	Fan_of_Knives = "飛舞刀刃"
slot7	Crimson_Tempest = "赤紅風暴"
slot8	Deathmark = "死亡印記"
slot9	Kingsbane = "王禍"
slot10	Vanish = "消失"
slot11	Crimson_Vial = "赤紅藥瓶"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

# --- 防禦：僅在「治療／防禦」開啟時 ---
use Crimson_Vial when  # 赤紅藥瓶
	defensives == 1 and PlayerHP <= 40  # 生命力 40% 以下

# === 潛行 ===
use Garrote when  # 潛行中的絞喉
	Stealth_Buff.up  # 潛行中
	or
	Stealth_Sub.up  # 潛行中（欺敵）
	or
	Vanish_Buff.up  # 消失之後立即

use Garrote when  # 絞喉：強化絞喉時段
	Improved_Garrote.up and Garrote_DoT.down  # 時段已開，目標身上沒有絞喉
	or
	Improved_Garrote.up and Garrote_DoT.duration <= 78  # SimulationCraft：18 秒剩 14 秒時刷新

# === 冷卻技能（Burst 按鈕） ===
use Deathmark when  # 死亡印記
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Kingsbane.cd <= 3 and Envenom_Buff.duration >= 35 and Stealth_Buff.down and Stealth_Sub.down  # Burst 開啟，流血都在，王禍就緒，毒化還剩 2 秒以上

use Kingsbane when  # 王禍
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Envenom_Buff.up and Deathmark_DoT.up and Combo_Points < 50 and Stealth_Buff.down and Stealth_Sub.down  # Burst 開啟，目標身上有死亡印記，0–3 個連擊點數
	or
	cd == 1 and Garrote_DoT.up and Rupture_DoT.up and Envenom_Buff.up and Deathmark.cd >= 44 and Combo_Points < 50 and Stealth_Buff.down and Stealth_Sub.down  # Burst 開啟，距離死亡印記還有 52 秒以上，0–3 個連擊點數

use Vanish when  # 消失
	Deathmark_DoT.up and Improved_Garrote.down and Combo_Points < 65 and Stealth_Buff.down and Stealth_Sub.down  # 目標身上有死亡印記，0–4 個連擊點數（潛行中的絞喉給 3 點）

# === 流血 ===
use Crimson_Tempest when  # 赤紅風暴：為死亡印記把流血複製到新目標
	cd == 1 and Deathmark.cd <= 3 and Garrote_DoT.down and Rupture_DoT.down and Envenom_Buff.up and enemies >= 2  # 連擊點數不限

# 不給快死的小怪上新流血（同 SimulationCraft 的「目標還能活 12 秒以上」）：1–2 個目標與「單體」模式下總是施放；
# 3+ 個目標時，僅當目標生命力 50% 以上，或 Burst 開啟且死亡印記就緒，或目標身上已有死亡印記。
use Garrote when  # 絞喉：維持
	Garrote_DoT.down and Combo_Points < 95 and enemies <= 2
	or
	Garrote_DoT.down and Combo_Points < 95 and st == 1
	or
	Garrote_DoT.down and Combo_Points < 95 and TargetHP >= 50  # 3+ 個目標：只給活得久的目標
	or
	Garrote_DoT.down and Combo_Points < 95 and cd == 1 and Deathmark.cd <= 3  # Burst 開啟且死亡印記就緒：生命力不限
	or
	Garrote_DoT.down and Combo_Points < 95 and Deathmark_DoT.up  # 目標身上有死亡印記（複製的流血）
	or
	Garrote_DoT.up and Garrote_DoT.duration <= 30 and Combo_Points < 95  # 刷新時段（已在目標身上）

use Rupture when  # 割裂
	Combo_Points >= 70 and Rupture_DoT.down and enemies <= 2
	or
	Combo_Points >= 70 and Rupture_DoT.down and st == 1
	or
	Combo_Points >= 70 and Rupture_DoT.down and TargetHP >= 50  # 3+ 個目標：只給活得久的目標
	or
	Combo_Points >= 70 and Rupture_DoT.down and cd == 1 and Deathmark.cd <= 3  # Burst 開啟且死亡印記就緒
	or
	Combo_Points >= 70 and Rupture_DoT.down and Deathmark_DoT.up  # 目標身上有死亡印記
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 25 and Darkest_Night.down  # 刷新；不要把深沉暗夜的 7 個連擊點數花在這裡

# === 產生技能：最多 5 個連擊點數，深沉暗夜期間最多 7 個 ===

# 新上割裂後立即用一次赤紅風暴（4+ 個目標時新上絞喉後也用），其餘時間用飛舞刀刃。
# 兩個流血只能有一個是新的（94% 以上）：赤紅風暴之後兩個都是新的，下一次就會等待。
use Crimson_Tempest when  # 赤紅風暴：新上割裂或絞喉後立即擴散流血
	aoe == 1 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94
	or
	aoe == 1 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Garrote_DoT.duration >= 94 and Rupture_DoT.duration < 94
	or
	aoe == 1 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94
	or
	aoe == 1 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Garrote_DoT.duration >= 94 and Rupture_DoT.duration < 94
	or
	st == 0 and enemies >= 4 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94
	or
	st == 0 and enemies >= 4 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Garrote_DoT.duration >= 94 and Rupture_DoT.duration < 94
	or
	st == 0 and enemies >= 4 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94
	or
	st == 0 and enemies >= 4 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Garrote_DoT.duration >= 94 and Rupture_DoT.duration < 94
	or
	st == 0 and enemies >= 2 and enemies <= 3 and Darkest_Night.down and Combo_Points < 70 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94  # 2–3 個目標：僅在新上割裂之後
	or
	st == 0 and enemies >= 2 and enemies <= 3 and Darkest_Night.up and Combo_Points < 95 and Garrote_DoT.up and Rupture_DoT.up and Rupture_DoT.duration >= 94 and Garrote_DoT.duration < 94  # 2–3 個目標：僅在新上割裂之後

use Fan_of_Knives when  # 飛舞刀刃：單體，深沉暗夜，還差 1 個連擊點數
	st == 1 and Darkest_Night.up and Combo_Points >= 80 and Combo_Points < 95
	or
	aoe == 0 and enemies <= 1 and Darkest_Night.up and Combo_Points >= 80 and Combo_Points < 95

use Fan_of_Knives when  # 飛舞刀刃：2+ 個目標
	aoe == 1 and Darkest_Night.down and Combo_Points < 70
	or
	aoe == 1 and Darkest_Night.up and Combo_Points < 95
	or
	st == 0 and enemies >= 2 and Darkest_Night.down and Combo_Points < 70
	or
	st == 0 and enemies >= 2 and Darkest_Night.up and Combo_Points < 95

use Ambush when  # 伏擊（洞悉要害）
	Blindside.up and st == 1 and Darkest_Night.down and Combo_Points < 70
	or
	Blindside.up and st == 1 and Darkest_Night.up and Combo_Points < 95
	or
	Blindside.up and aoe == 0 and enemies <= 1 and Darkest_Night.down and Combo_Points < 70
	or
	Blindside.up and aoe == 0 and enemies <= 1 and Darkest_Night.up and Combo_Points < 95

use Mutilate when  # 截肢
	st == 1 and Darkest_Night.down and Combo_Points < 70
	or
	st == 1 and Darkest_Night.up and Combo_Points < 95
	or
	aoe == 0 and enemies <= 1 and Darkest_Night.down and Combo_Points < 70
	or
	aoe == 0 and enemies <= 1 and Darkest_Night.up and Combo_Points < 95

# === 消耗：5+ 個連擊點數（深沉暗夜期間 7 個） ===
# SimulationCraft：不要馬上按，而是讓毒化保持不斷：增益最後 1 秒、目標身上有死亡印記時、能量快滿時，4+ 個目標時更早。
use Envenom when  # 毒化
	Darkest_Night.down and Combo_Points >= 70 and Envenom_Buff.down
	or
	Darkest_Night.down and Combo_Points >= 70 and Envenom_Buff.duration <= 20  # 約剩 1 秒
	or
	Darkest_Night.down and Combo_Points >= 70 and Deathmark_DoT.up
	or
	Darkest_Night.down and Combo_Points >= 70 and Energy >= 70  # 避免能量溢出
	or
	Darkest_Night.down and Combo_Points >= 70 and Energy >= 30 and enemies >= 4
	or
	Darkest_Night.up and Combo_Points >= 95 and Envenom_Buff.down
	or
	Darkest_Night.up and Combo_Points >= 95 and Envenom_Buff.duration <= 20
	or
	Darkest_Night.up and Combo_Points >= 95 and Deathmark_DoT.up
	or
	Darkest_Night.up and Combo_Points >= 95 and Energy >= 70
	or
	Darkest_Night.up and Combo_Points >= 95 and Energy >= 30 and enemies >= 4
```


它的 JSON 在下方的檔案中。第二個輸出循環是暴徒（欺詐者），包含能量刺激巨集（**O + Q**）、骰個不停（**O**）、狂舞殘殺（**C**），以及每條規則中的引導保護。

### 範例檔案

| 範例 | 檔案 |
|---|---|
| 建立器範例中的入門刺殺輸出循環 | [JSON](https://keyrota.app/documentation/examples/starter-assassination.zh-TW.json)、[KRC 文字](https://keyrota.app/documentation/examples/starter-assassination.zh-TW.txt) |
| 刺殺，團隊副本：15 條規則 | [JSON](https://keyrota.app/documentation/examples/assassination-raid.zh-TW.json)、[KRC 文字](https://keyrota.app/documentation/examples/assassination-raid.zh-TW.txt) |
| 暴徒，團隊副本與傳奇鑰石：13 條規則，旗標 O、OQ、C | [JSON](https://keyrota.app/documentation/examples/outlaw-raid.zh-TW.json)、[KRC 文字](https://keyrota.app/documentation/examples/outlaw-raid.zh-TW.txt) |
| 最精簡的實用輸出循環 | [JSON](https://keyrota.app/documentation/examples/minimal.zh-TW.json)、[KRC 文字](https://keyrota.app/documentation/examples/minimal.zh-TW.txt) |
| 語法範例：所有條件與旗標（沒有 ID，不適用於實戰） | [JSON](https://keyrota.app/documentation/examples/syntax-every-condition.zh-TW.json)、[KRC 文字](https://keyrota.app/documentation/examples/syntax-every-condition.zh-TW.txt) |

每個範例都提供網站支援的所有語言版本：名稱、規則與註解皆已翻譯，條件、法術 ID 與旗標則完全相同。語言標示在檔名中：`.en`、`.ru`、`.de`、`.fr`、`.es`、`.it`、`.pt`、`.ko`、`.zh`、`.zh-TW`。

開啟檔案的方法：在主視窗中使用「新增」 — 「從檔案…」，或在建立器的「文字與 JSON」頁面使用「開啟…」。

---

<!-- https://keyrota.app/documentation/zh-TW/ai -->

## 使用 AI 代理建立輸出循環

> [!TIP] 只要提供這個頁面的連結就夠了
> 你可以直接把這個頁面的連結交給 AI 代理：它會自行弄清楚所有內容，需要時也會向你詢問缺少的資料。

能存取網路與檔案的 AI 代理可以幫你建立 KRC 輸出循環：研究你的專精頂尖玩家的日誌、指南與 SimulationCraft 動作清單，與你的天賦和日誌比較，然後交給你一份現成的 JSON。本頁說明要提供哪些資料給它、現成的提示詞，以及如何檢查結果。

### 你需要準備的項目

**一個 AI 代理**，能開啟網站（Warcraft Logs、Raider.IO、Wowhead、GitHub）並讀取檔案。如果它無法存取網路，請以檔案形式提供說明文件與日誌摘錄。

**給 AI 代理的說明文件**（連結已包含在提示詞中）：

| 連結 | 內容 |
|---|---|
| [llms.txt](https://keyrota.app/documentation/llms.txt) | 給 AI 代理的說明文件索引：所有語言、檔案與範例 |
| [krc-guide.zh-TW.md](https://keyrota.app/documentation/krc-guide.zh-TW.md) | 整份說明文件合併成單一 Markdown 檔案（本語言版本）；英文版：[krc-guide.en.md](https://keyrota.app/documentation/krc-guide.en.md) |
| [keyrota-rotation.schema.json](https://keyrota.app/documentation/keyrota-rotation.schema.json) | 用來檢查回答的 JSON Schema |
| [刺殺，團隊副本](https://keyrota.app/documentation/examples/assassination-raid.zh-TW.json)、[暴徒，團隊副本與傳奇鑰石](https://keyrota.app/documentation/examples/outlaw-raid.zh-TW.json) | 作為範本的實際團隊副本輸出循環 |

**你的資料**（提示詞中的預留位置）：

| 預留位置 | 要填入的內容 | 範例 |
|---|---|---|
| `{CLASS}` | 職業 | 盜賊 |
| `{SPEC}` | 專精 | 刺殺 |
| `{HERO_TALENTS}` | 英雄天賦 | 命縛（Fatebound） |
| `{TALENT_STRING}` | 遊戲中的天賦匯出字串（天賦視窗中的「分享」） | `CMQAAAAA…` |
| `{CONTENT}` | 團隊副本或傳奇鑰石 | 團隊副本 |
| `{RAID_OR_DUNGEONS}` | 團隊副本或地城清單 | The Venomous Abyss |
| `{DIFFICULTY}` | 難度或鑰石等級 | 英雄 |
| `{BOSSES}` | 輸出循環要對付的首領 | 全部 |
| `{ITEM_LEVEL}` | 物品等級 | 328 |
| `{MY_LOGS}` | 你在 Warcraft Logs 上的角色或報告連結 | `https://www.warcraftlogs.com/character/eu/<realm>/<name>` |
| `{COMBAT_LOG_FILE}` | 你附上的戰鬥記錄檔案 | `WoWCombatLog-101726_214449.txt` |
| `{PREFERENCES}` | 你的偏好 | 「冷卻技能只由 Burst 按鈕控制，不使用防禦技能」 |

### 提示詞

AI 代理會自行收集資料、與你的資料比較，並解釋每一條規則。請填寫大括號中的內容；如果有戰鬥記錄，也請一併附上。

*提示詞:*

```text
你是《魔獸世界》專家，也是 KeyRota 輸出循環的作者。請為我建立一個 KeyRota 進階循環：keyrota-rotation 格式、版本 1 的 JSON。

我的角色
- 職業與專精：{CLASS}，{SPEC}。英雄天賦：{HERO_TALENTS}。
- 遊戲中的天賦字串：{TALENT_STRING}
- 內容：{CONTENT}：{RAID_OR_DUNGEONS}。難度或鑰石等級：{DIFFICULTY}。首領：{BOSSES}。
- 物品等級：{ITEM_LEVEL}。
- 我的 Warcraft Logs：{MY_LOGS}
- 戰鬥記錄（已附上）：{COMBAT_LOG_FILE}
- 偏好：{PREFERENCES}

步驟 1：了解 KeyRota 格式
- https://keyrota.app/documentation/llms.txt 與 https://keyrota.app/documentation/krc-guide.en.md ：欄位（最多 12 個）、光環（最多 12 個，只有我的增益效果與我施加在目標身上的減益效果）、以百分比表示的資源、所有條件、欄位旗標、面板開關 aoe、st、cd、defensives、ground_spells、movement、由上而下檢查的規則、由「且」條件組成的「或」群組、16 個群組與每組 16 個條件的上限、未知值會讓條件不成立。
- JSON Schema：https://keyrota.app/documentation/keyrota-rotation.schema.json
- 範本：https://keyrota.app/documentation/examples/assassination-raid.en.json 與 https://keyrota.app/documentation/examples/outlaw-raid.en.json

步驟 2：收集資料
1. Warcraft Logs：每個首領的 {SPEC} {CLASS} 傷害排名（{CONTENT}，{DIFFICULTY}）；傳奇鑰石則看每個地城與每個鑰石等級。取英雄天賦為 {HERO_TALENTS} 的前 5-10 名日誌。
2. 將他們的天賦與我的字串比較。列出會改變優先順序的差異，並說明我是否應該採用。
3. 從頂尖日誌中整理：開場與施法順序；重要增益與減益效果的覆蓋率；施法時的資源（終結技時的連擊點數或同類資源、消耗前的能量或同類資源、因溢出而浪費的資源）；大型冷卻技能在何時、與哪些技能一起使用，以及如何配合戰鬥階段；防禦技能在何時、於多少生命力時使用；從幾個目標開始改用 AoE；每分鐘施法次數與沒有施法的時間。
4. 傳奇鑰石：Raider.IO（主流配置、頂尖紀錄、各地城的天賦）。
5. 指南（Wowhead、Method、職業 Discord）與 SimulationCraft 中 {SPEC} 在目前資料片分支的動作清單（APL）：以它作為基本優先順序，再用日誌驗證。
6. 我的日誌與戰鬥記錄：我的覆蓋率、消耗技能時的資源、冷卻技能與節奏，和頂尖玩家有哪些差異。

步驟 3：撰寫輸出循環
- "format": "keyrota-rotation"、"version": 1、我的專精的 specID、依照說明文件中專精表的 resources（resource1 PlayerHP、resource2 TargetHP，接著是專精的資源）、"ignoreMainIcon": true。
- 欄位：Wowhead 上真實的法術 ID（spell 屬性）。治療與防禦技能使用 "show": "combat"。旗標：不佔 GCD 的法術用 offGcd；第二行佔用 GCD 的巨集，以及需要上一擊結果的按鈕，用 offGcd 與 queue；引導法術用 channel；我自己按的技能用 manual。巨集欄位請寫出巨集內容（#showtooltip 與 /cast）。
- 光環：使用增益與減益效果本身的 ID，而不是施加它們的法術 ID。只使用我的光環。
- 規則依優先順序排列。防禦技能放在最前面，而且只在 defensives == 1 時使用。大型冷卻技能只在 cd == 1 時使用（這是 Burst 按鈕，不是法術冷卻）；能強化冷卻技能效果期間的技能，只在該期間內使用。單一目標與 AoE：AoE 用一個 aoe == 1 群組與一個 st == 0 and enemies >= N 群組；單一目標用一個 st == 1 群組與一個 aoe == 0 and enemies <= 1 群組。DoT：一個 X.down 群組與一個 X.up and X.duration <= 30 群組。資源以百分比表示，門檻設在兩個級距的中間（連擊點數上限為 7：「至少 5 點」是 Combo_Points >= 70，「最多 3 點」是 Combo_Points < 50）。如果下一次按鍵會截斷引導，請在每條規則的每個群組加入引導光環的 X.duration <= 8。
- KRC 沒有 not、!= 與括號：請使用成對的 up/down、ready/oncd、glow/noglow、相反的運算子與多個群組。
- label、規則名稱與註解請用繁體中文撰寫，條件中使用的名稱（alias）請用拉丁字母。
- 每條規則都要有 name，每個群組都要有簡短的 comment：做什麼、為什麼。
- 最後請檢查：JSON 通過結構描述驗證；條件中的每個名稱都已宣告；每個群組不超過 16 個條件、每條規則不超過 16 個群組；所有 ID 在目前版本的 Wowhead 上都存在。

回答內容
1. 完整的輸出循環 JSON，放在同一個區塊中。
2. 巨集欄位的巨集內容。
3. 一張表格：規則、作用、來源（哪份日誌、指南或 APL 的哪一行）。
4. 遊戲中要設定的項目：快速設定面板按鈕、敵人計數半徑、要放到快捷列上的技能。
5. 測試計畫：先用訓練假人測試，再用戰鬥記錄與頂尖日誌比較；要比較哪些數字。
```


### 填寫完成的提示詞

以下是同一份提示詞的完整版本，已針對英雄難度團隊副本的刺殺填寫完畢：

*提示詞：刺殺，英雄難度團隊副本:*

```text
你是《魔獸世界》專家，也是 KeyRota 輸出循環的作者。請為我建立一個 KeyRota 進階循環：keyrota-rotation 格式、版本 1 的 JSON。

我的角色
- 職業與專精：盜賊，刺殺。英雄天賦：命縛（Fatebound）。
- 遊戲中的天賦字串：CMQAAAAAAAAAAAAAAAAAAAAAAYmlZmFDGAAAAAYWGsNDAAAAAILzMzMzMjxyMzMbzsMzMPgZMzYMMzYMAGYBmxoxsBYbAbGAMzMGD
- 內容：團隊副本：The Venomous Abyss。難度：英雄。首領：全部；請特別注意 Ula'tek（打心臟的傷害時段）。
- 物品等級：328。
- 我的 Warcraft Logs：https://www.warcraftlogs.com/character/eu/<realm>/<name>
- 戰鬥記錄（已附上）：WoWCombatLog-101726_214449.txt，在訓練假人上打了 5 分鐘，單一目標。
- 偏好：死亡印記與王禍只由 Burst 按鈕控制；消失只在死亡印記期間使用；生命力 40% 以下時使用赤紅藥瓶；像 SimulationCraft 一樣累積能量。

步驟 1：了解 KeyRota 格式
- https://keyrota.app/documentation/llms.txt 與 https://keyrota.app/documentation/krc-guide.en.md ：欄位（最多 12 個）、光環（最多 12 個，只有我的增益效果與我施加在目標身上的減益效果）、以百分比表示的資源、所有條件、欄位旗標、面板開關 aoe、st、cd、defensives、ground_spells、movement、由上而下檢查的規則、由「且」條件組成的「或」群組、16 個群組與每組 16 個條件的上限、未知值會讓條件不成立。
- JSON Schema：https://keyrota.app/documentation/keyrota-rotation.schema.json
- 範本：https://keyrota.app/documentation/examples/assassination-raid.en.json 與 https://keyrota.app/documentation/examples/outlaw-raid.en.json

步驟 2：收集資料
1. Warcraft Logs：每個首領的刺殺盜賊傷害排名（團隊副本 The Venomous Abyss，英雄難度）。取英雄天賦為命縛（Fatebound）的前 5-10 名日誌。
2. 將他們的天賦與我的字串比較。列出會改變優先順序的差異，並說明我是否應該採用。
3. 從頂尖日誌中整理：開場與施法順序；絞喉、割裂與毒化增益的覆蓋率；使用毒化、割裂、王禍與消失時的連擊點數，使用毒化前的能量，因溢出而浪費的能量與連擊點數；死亡印記與王禍在何時、與哪些技能一起使用，以及如何配合戰鬥階段（特別是 Ula'tek 的心臟）；赤紅藥瓶與其他防禦技能在何時、於多少生命力時使用；從幾個目標開始改用飛舞刀刃與赤紅風暴；每分鐘施法次數與沒有施法的時間。
4. 指南（Wowhead、Method、盜賊 Discord）與 SimulationCraft 中刺殺在目前資料片分支的動作清單（APL）：以它作為基本優先順序，再用日誌驗證。
5. 我的日誌與戰鬥記錄：我的覆蓋率、消耗技能時的連擊點數、冷卻技能與節奏，和頂尖玩家有哪些差異。

步驟 3：撰寫輸出循環
- "format": "keyrota-rotation"、"version": 1、"specID": 259、"resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"]、"ignoreMainIcon": true。
- 欄位：Wowhead 上真實的法術 ID（spell 屬性）。赤紅藥瓶使用 "show": "combat"。旗標：不佔 GCD 的法術用 offGcd；消失用 offGcd 與 queue（它需要上一擊的連擊點數）；引導法術（如果有）用 channel；我自己按的技能用 manual。巨集欄位請寫出巨集內容（#showtooltip 與 /cast）。
- 光環：使用增益與減益效果本身的 ID，而不是施加它們的法術 ID（例如消失的增益效果與消失法術並不相同）。只使用我的光環。
- 規則依優先順序排列。赤紅藥瓶放在最前面，而且只在 defensives == 1 且生命力 40% 以下時使用。死亡印記與王禍只在 cd == 1 時使用（這是 Burst 按鈕，不是法術冷卻）；消失只在目標身上有死亡印記時使用。單一目標與 AoE：飛舞刀刃用一個 aoe == 1 群組與一個 st == 0 and enemies >= 2 群組；截肢用一個 st == 1 群組與一個 aoe == 0 and enemies <= 1 群組。絞喉與割裂：一個 X.down 群組與一個 X.up and X.duration <= 30 群組。連擊點數以上限 7 點的百分比表示，門檻設在兩個級距的中間：「至少 5 點」是 Combo_Points >= 70，「最多 3 點」是 Combo_Points < 50。累積能量：連擊點數 5 點以上時，在增益快結束、死亡印記期間或 Energy >= 70 時使用毒化。
- KRC 沒有 not、!= 與括號：請使用成對的 up/down、ready/oncd、glow/noglow、相反的運算子與多個群組。
- label、規則名稱與註解請用繁體中文撰寫，條件中使用的名稱（alias）請用拉丁字母。
- 每條規則都要有 name，每個群組都要有簡短的 comment：做什麼、為什麼。
- 最後請檢查：JSON 通過結構描述驗證；條件中的每個名稱都已宣告；每個群組不超過 16 個條件、每條規則不超過 16 個群組；所有 ID 在目前版本的 Wowhead 上都存在。

回答內容
1. 完整的輸出循環 JSON，放在同一個區塊中。
2. 巨集欄位的巨集內容。
3. 一張表格：規則、作用、來源（哪份日誌、指南或 APL 的哪一行）。
4. 遊戲中要設定的項目：快速設定面板按鈕、敵人計數半徑、要放到快捷列上的技能。
5. 測試計畫：先用訓練假人測試，再用戰鬥記錄與頂尖日誌比較；要比較哪些數字。
```


### 如何分析日誌

給 AI 代理與你的提示：資料從哪裡取得，以及要比較什麼。

**Warcraft Logs**
- 排名：`https://www.warcraftlogs.com/zone/rankings/<zone id>?boss=<boss id>&class=<Class>&spec=<Spec>&difficulty=<3|4|5>&metric=dps`（3 為普通，4 為英雄，5 為傳奇）。傳奇鑰石的排名依鑰石等級分開。
- 在玩家的報告中：「Casts」分頁（施法順序與時間）、「Buffs」與「Debuffs」（覆蓋率）、「Resources」（資源與溢出）、「Damage Done」（依技能與目標的傷害）、「Deaths」（死亡）。
- 日誌中的天賦：玩家摘要中有天賦匯出字串，可以在 Wowhead 的天賦模擬器中開啟。
- 要比較的是行為，而不是 DPS：DoT 與增益的覆蓋率、消耗技能時的資源、每分鐘施法次數、沒有施法的時間，以及大型冷卻技能相對於戰鬥階段的使用時機。

**Raider.IO**（傳奇鑰石）
- 地城的頂尖紀錄：`https://raider.io/api/v1/mythic-plus/runs?season=<season>&region=world&dungeon=<slug>&page=0`；賽季與地城清單：`https://raider.io/api/v1/mythic-plus/static-data?expansion_id=<id>`。
- 主流配置每週都在變：請使用最新的資料，而不是舊的結論。

**SimulationCraft**
- 專精的動作清單（APL）位於 GitHub 上的 `simulationcraft/simc` 儲存庫，在目前資料片的分支中的 `ActionPriorityLists` 資料夾。
- 如何將 APL 轉換成 KRC：

| SimulationCraft APL | KRC |
|---|---|
| 由上而下的 `actions` 行 | 由上而下的規則 |
| `buff.X.up` | `X.up` |
| `dot.X.remains`、`buff.X.remains` | 以百分比表示的 `X.duration` |
| `cooldown.X.remains` | 以百分比表示的 `X.cd` |
| `combo_points`、`energy` | 以百分比表示的資源 |
| `active_enemies` | `enemies` |
| `target.time_to_die`、精確的秒數 | 沒有對應；請用最接近的替代寫法，例如「目標還能再活 12 秒」在 3 個以上目標時寫成 `TargetHP >= 50` |

**戰鬥記錄**
- 開啟進階戰鬥記錄後，每個 `SPELL_CAST_SUCCESS` 都會附上施法者的資源（類型、目前值、最大值）；能量的類型是 3。
- `SPELL_AURA_APPLIED`、`SPELL_AURA_REFRESH`、`SPELL_AURA_REMOVED`：光環的覆蓋率與刷新；`SPELL_ENERGIZE`：資源獲得；`SPELL_CAST_FAILED`：被遊戲拒絕的按鍵。
- 要計算的項目：每分鐘施法次數、GCD 之間的空檔、DoT 覆蓋率、終結技時的連擊點數、能量溢出、大型冷卻技能的使用時機。

### 錄製戰鬥記錄

1. 在遊戲設定的「網路」部分，開啟「進階戰鬥記錄」（Advanced Combat Logging）。沒有開啟時，記錄中不會有資源與位置資訊。
2. 開怪前在聊天框輸入 `/combatlog`：開始記錄。戰鬥結束後再輸入一次 `/combatlog`：停止記錄。
3. 檔案位於遊戲資料夾中：`World of Warcraft\_retail_\Logs\WoWCombatLog-MMDDYY_HHMMSS.txt`。遊戲寫入檔案會有延遲：停止記錄後請等一分鐘。
4. Warcraft Logs 上傳程式可能會在上傳後清空檔案：請先複製一份。

第一次測試請使用訓練假人：先打單一目標 2–3 分鐘，再打一群假人測試 AoE。

### 測試與反覆改進

1. 載入輸出循環（請參閱下方），產生並貼上 Better Assistant 設定檔，將欄位的法術放到快捷列上並設定按鍵。
2. 在訓練假人上測試。主視窗中的「記錄」會顯示按下了什麼。KeyRota 記錄檔（「記錄」旁的資料夾按鈕）會記下每個 GCD 選中的規則，以及上方規則被略過的原因：條件不符、未就緒、未知、手動。
3. 將輸出循環 JSON、最新的戰鬥記錄，以及需要時的 KeyRota 記錄交給 AI 代理。請它與頂尖日誌比較：覆蓋率、消耗技能時的資源、冷卻技能、閒置時間。
4. 一次只修改一條規則，並在輸出循環名稱中標示版本（「v1.3」）。請保留舊版本：使用主視窗中的「匯出」，或「文字與 JSON」 — 「儲存…」。
5. 團隊副本或鑰石結束後，再與 Warcraft Logs 比較一次。

### 載入結果

- **以檔案載入：** 將回答中的 JSON 存成 `.json` 檔案，然後使用「輸出循環」 — 「新增」 — 「從檔案…」。
- **從剪貼簿載入：** 複製 JSON，然後使用「新增」 — 「從剪貼簿」。
- **載入到已開啟的輸出循環：** 建立器 — 「文字與 JSON」 — 「JSON」 — 「貼上」。如果新的 JSON 沒有這些設定，編號相同的欄位會保留原本的 ID、旗標與顯示條件。

建立器的狀態列應顯示「輸出循環正常」。如果有錯誤，訊息會指出位置：請一字不改地交給 AI 代理。接著依序點擊「一般」 — 「依欄位與光環產生」 — 「複製」，在遊戲中 `/ba` — Profile — 貼上 — Apply。依照回答在遊戲中建立巨集，並放到快捷列上。

---

<!-- https://keyrota.app/documentation/zh-TW/faq -->

## 常見問題與疑難排解

### 規則從不觸發

請依序檢查：

1. **上方的規則總是優先。** 規則由上而下檢查：如果上方的規則符合且其法術可以使用，你的規則就永遠輪不到。請將你的規則往上移，或縮小上方規則的條件範圍。
2. **未知值。** 讀取未知值的條件一律不成立，即使是 `.down` 也一樣。光環不在 Better Assistant 設定檔中，或 ID 錯誤時，光環就是未知的。請重新產生設定檔（「依欄位與光環產生」），並貼到遊戲中。
3. **要用光環的 ID，而不是法術的 ID。** 增益效果的 ID 可能與施加它的法術不同：消失是 `1856`，它的增益效果是 `11327`。另外，規則只看得到你自己的光環，看不到其他玩家給你的增益效果。
4. **欄位未就緒。** 資源不足、目標太遠、冷卻中、沒有點選天賦。這類規則會被略過，不會出現錯誤。
5. **Better Assistant 沒有顯示此欄位。** 「有目標時」的欄位在沒有目標時不會就緒。治療與防禦技能請使用「戰鬥中」。
6. **沒有按鍵。** 欄位的法術必須放在快捷列上並設定按鍵（或使用含 `#showtooltip` 的巨集）。
7. **開關處於關閉狀態。** 「治療／防禦」預設為關閉；Burst 可能已用 Burst 按鍵關閉（Windows 為 F3，macOS 為 ⌃⇧B）；目標模式可能仍是「單體」或「範圍」。
8. **百分比。** 5 個連擊點數要寫成 `70`，不是 `5`。請參閱[資源](https://keyrota.app/documentation/zh-TW/conditions#resources)。
9. **層數。** 只有 1 層時會讀為 0：`X.stacks >= 1` 無法區分 1 層與光環不存在；請使用 `.up`。
10. **沒有持續時間的光環。** 潛行之類的光環剩餘時間一律讀為 1：`.duration` 對它們無效。

KeyRota 記錄檔會顯示選中了哪條規則，以及上方的規則為什麼被略過：請點擊主視窗中「記錄」旁的資料夾按鈕。

### 按得太早或太晚

| 你看到的情況 | 原因 | 解決方法 |
|---|---|---|
| 不佔 GCD 的法術等到 GCD 結束才按 | 沒有 O 旗標 | 開啟「不佔 GCD（O）」。 |
| 不佔 GCD 的按鈕在上一擊的結果出來之前就按下 | O 旗標會立即按下，即使正處於 GCD 中 | 加上「佇列視窗（Q）」：O + Q。 |
| 第二行佔用 GCD 的巨集沒有完整施放 | 巨集是在 GCD 進行中按下的 | O + Q：巨集會在 GCD 的最後按下。 |
| 較下方的不佔 GCD 規則沒有搶在較上方的規則之前 | 設計如此：優先順序是嚴格的 | 將規則往上移。 |
| 消耗資源之後，輸出循環「停住了」 | 資源累積：沒有任何規則符合 | 這是正常的；若想更早消耗，請調低能量門檻。 |
| 你自己按技能時，輸出循環什麼都不按 | 你按下技能鍵時，KeyRota 會讓你優先 | 這是正常的。 |

### 引導被截斷

- 為該欄位開啟「引導（C）」：引導期間 KeyRota 不按任何鍵，也不會在引導開始時重複按下此欄位。
- 遊戲會在部分引導的最後一擊之前稍早結束引導，引導一結束就按鍵，便會截斷它。請將引導的光環加入輸出循環的光環，並在**每條規則的每一個群組**加入條件 `Channel_aura.duration <= 8`。範例：[引導保護](https://keyrota.app/documentation/zh-TW/patterns#channel)。

### 不會切換到 AoE

1. 目標模式是「自動」嗎（Windows 為 F2，macOS 為 ⌃⇧T，依序切換「自動」、「單體」、「範圍」）？在「單體」模式下，含 `st == 0` 的規則不會觸發。
2. 遊戲中是否已開啟敵方名條（V），而且沒有隱藏次要敵人？
3. 「一般」頁面上的計數半徑，是否至少等於你的 AoE 技能的作用範圍？
4. 「僅計入戰鬥中的敵人」：尚未進入戰鬥的敵人不列入計算。小怪一個接一個進入戰鬥時，計數可能會偏低。
5. 規則的門檻是 `enemies >= 2` 還是 `>= 3`？
6. 變更半徑後，請重新產生並貼上 Better Assistant 設定檔。

### Burst 不觸發，或觸發時機不對

- `cd == 1` 是 **Burst 按鈕**（Windows 為 F3，macOS 為 ⌃⇧B，或面板上的 Burst 按鈕），不是法術的冷卻。法術的冷卻是 `Slot.cd`。
- Burst 預設為開啟。在不能使用冷卻技能的時刻（免疫、轉換階段）之前關閉它，時機到了再重新開啟。
- 如果大型冷卻技能依賴光環（目標身上的 DoT），它會等待這些光環。請在 KeyRota 記錄中查看規則的哪個條件不成立。
- 只能在冷卻技能期間使用的技能，請檢查冷卻技能的光環（`Deathmark_DoT.up`），而不是 Burst 按鈕。

### 如何計算百分比

- **資源與生命力：** `數值 / 最大值 × 100`。250 點能量中的 175 點是 `70`。
- **連擊點數上限為 7 時：** 門檻請設在兩個級距的中間：「至少 5 點」是 `>= 70`，「最多 3 點」是 `< 50`。請參閱[對照表](https://keyrota.app/documentation/zh-TW/conditions#resources)。
- **光環剩餘時間：** 該次施放持續時間的百分比。30% 就是刷新時段（pandemic）。
- **冷卻：** 完整冷卻時間（不含 GCD）的百分比。冷卻時間 2 分鐘時，1% 是 1.2 秒。

### 「有錯誤的輸出循環無法儲存」

建立器不會儲存有錯誤的輸出循環：KeyRota 絕不會只執行輸出循環的一部分。狀態列會指出錯誤位置，例如「規則 9，群組 1: 群組中沒有條件」。點擊「檢視」即可開啟該規則。常見原因：

| 訊息 | 解決方法 |
|---|---|
| 群組中沒有條件 | 新增條件，或刪除空的群組。 |
| 未選擇欄位 | 在「按下」中選擇欄位。 |
| 旗標 Q 只能與 O 一起使用 | 開啟「不佔 GCD（O）」，或關閉 Q。 |
| 未知名稱 … | 條件中的名稱與任何光環、欄位或資源都不相符：請檢查「文字中的名稱」。 |
| … 是 slot，但需要 buff | 對欄位使用了光環的檢查項目（`.up`、`.duration`），或對光環使用了欄位的檢查項目（`.ready`、`.cd`）。 |
| 名稱中不可有引號 | 從輸出循環、欄位或光環的名稱中移除 `"`。 |

所有訊息請參閱[錯誤](https://keyrota.app/documentation/zh-TW/rotation-json#errors)。

### `.oncd` 與 `.cd > 0` 有什麼不同

`X.oncd`：欄位因**任何**原因未就緒：冷卻中、資源不足、目標太遠、欄位未顯示。`X.cd > 0`：正在冷卻。對於有充能的法術，欄位就緒時也可能 `.cd > 0`：有一次充能可用，下一次正在恢復。

### 如何表達「非」與括號

KRC 沒有 `not`、`!=` 與括號。「非」就是成對的條件（`up`／`down`、`ready`／`oncd`、`glow`／`noglow`），或相反的運算子（不要寫「非 `>= 70`」，請寫 `< 70`）。「（A 或 B）且 C」是兩個群組：`A and C`、`B and C`。詳情請參閱[「非」、括號與「或」](https://keyrota.app/documentation/zh-TW/conditions#logic)。

### 欄位或光環可以超過 12 個嗎？

不行：輸出循環最多 12 個欄位與 12 個光環，與 Better Assistant 設定檔相同。巨集可以幫你節省空間（一個按鈕施放多個法術），而且同一個欄位可以出現在多條規則中。規則數量則沒有上限。

### 輸出循環用到你沒有點的天賦

如果沒有點選某個天賦，就不會學會該法術，欄位不會就緒，它的規則就會直接被略過。同一個輸出循環可以搭配不同的天賦配置使用：缺少的法術對應的規則不會觸發。

### 移轉或分享輸出循環

- 主視窗中的「匯出」會儲存設定檔及其輸出循環；在另一台電腦上用「匯入」載入即可。
- 在建立器中，「文字與 JSON」 — 「儲存…」會將輸出循環存成 `.json` 或 `.txt`；要開啟時，請使用「新增」 — 「從檔案…」。
- Better Assistant 設定檔會依輸出循環的欄位與光環重新產生：不需要另外傳送。

### 為什麼 KeyRota 有時什麼都不按

開啟「忽略主圖示」時，若沒有任何規則適用，KeyRota 就會等待。在累積能量的輸出循環中這是正常的：連擊點數達到 5 點以上時，消耗技能會等待它的條件，產生技能則不會觸發。如果等待看起來不對，請在 KeyRota 記錄中查看哪些規則被略過，以及原因。
