循环构建器
更新于 2026年10月18日
循环构建器是 KeyRota 中的一个窗口,无需手写代码即可在其中组装高级循环:带标记的槽位、光环、规则,旁边同步显示 KRC 文本和 JSON。本文档同时适用于 Windows 和 macOS,截图取自 Windows,展示的是示例中的奇袭团队副本循环。
打开构建器#
- 你的循环。 在主窗口的“输出循环”区块中选择配置,然后点击“设置”。
- 新循环。 “新建”——“在构建器中…”。专精取自游戏或当前配置。第一次保存时,循环会成为一个配置。
- 从文件或剪贴板。 “新建”——“从文件…”可接受 KRC 文本(
.txt)、循环 JSON 和 KeyRota 配置文件;“新建”——“从剪贴板”则从剪贴板读取同样的内容。然后点击“设置”,在构建器中打开新配置。

对于 Blizzard 配置,构建器只显示名称和按键延迟:主按钮由游戏决定。“创建自定义循环”会新建一个带高级循环的配置;Blizzard 配置仍保留在列表中。

窗口布局#
- 左侧是各个页面:“常规”“槽位”“光环”“规则”(附规则数量)和“文本和 JSON”。页面上方显示“自定义循环”和所选专精。
- 右侧是所选页面。
- 底部是状态栏:显示循环是否正常(“循环正常:15 条规则,11 个槽位,10 个光环”)、是否有未保存的更改;出错时显示出错位置和“查看”按钮。右侧是“关闭”和“保存”。
在点击“保存”之前,任何更改都不会生效(在 Windows 上也可以按 Ctrl+S)。
常规#

| 控件 | 作用 |
|---|---|
| 配置名称 | 配置在主窗口循环列表中显示的名称。 |
| 专精 | 决定循环的资源(能量、连击点数、怒气…)以及 Better Assistant 配置的职业和专精。更改专精会替换资源,除非规则中读取了原专精的资源(生命值不算)。 |
| 循环名称 | KRC 文本的第一行(rotation "…"),显示在 KeyRota 日志中。不能包含双引号。适合写上版本号,例如“奇袭 v1.3”。 |
| 忽略主图标 | 开启:KeyRota 只按规则按键;没有符合的规则时就等待。关闭:此时改按游戏推荐。自定义循环通常开启此项:等待(例如攒能量)是正常的。 |
| 按键延迟 | 每次按键前稍作停顿,像真人一样:“无”“固定”(间隔 0–1000 毫秒)或“随机”(范围 0–1000 毫秒)。“也用于打断和防御”会对打断和防御技能应用同样的停顿。 |

| 控件 | 作用 |
|---|---|
| 配置:… | Better Assistant 配置字符串的摘要:专精、法术数量和光环数量。 |
| 根据槽位和光环生成 | 根据槽位的法术 ID、每个槽位的“Better Assistant 显示条件”、按顺序排列的光环、专精、半径和“仅计入战斗中的敌人”,生成 Better Assistant 配置字符串。如果已经粘贴了同一专精的配置,则保留它的其他设置。 |
| 从剪贴板 | 粘贴现成的配置字符串。它的专精必须与循环的专精一致。 |
| 复制 | 复制字符串,以便粘贴到游戏中。 |
| 敌人计数半径(码) | 1–100,默认 8。用于“附近敌人数”条件(enemies)。 |
| 仅计入战斗中的敌人 | 默认开启:尚未进入战斗的敌人不计入。 |
| 描述 | 循环备注:KRC 文本中以 # 开头的行。不影响循环运行。 |
按钮下方会显示警告:规则中使用的哪些槽位没有法术 ID(它们不会进入 Better Assistant 配置),以及已粘贴的配置中哪些内容与循环不符。
重要
Better Assistant 配置中的光环必须从第一个开始连续排列。如果光环 3 没有 ID 而光环 4 有,配置将无法生成:“光环 3 没有法术编号”。请填写 ID,或重新为光环编号。
游戏中的 Better Assistant 配置#
循环的槽位 N 就是 Better Assistant 中的槽位 N,光环 N 就是其列表中的光环 N。配置字符串会按正确的顺序把你的槽位和光环放进去。
- 在“常规”页面上点击“根据槽位和光环生成”,然后点击“复制”。
- 在游戏中输入
/ba,打开 Profile 选项卡,粘贴字符串,点击 Apply 并确认。 - 每次更改槽位或光环(ID、顺序、“有目标时”/“战斗中”)后,都要重新生成并粘贴配置。
槽位#

左侧是 12 个位置:编号、名称、法术 ID、标记(“不占 GCD,队列内”),槽位未被任何规则使用时显示“未使用”。空位置显示“空”;选中它即可看到“添加槽位”按钮。
| 控件 | 作用 |
|---|---|
| 名称 | 法术在游戏中的名称。显示在规则列表和日志中。 |
| 法术 ID | Wowhead 链接中的数字:wowhead.com/spell=1856/vanish 中的 1856。Better Assistant 据此把法术放入此槽位。 |
| Better Assistant 显示条件 | “有目标时”或“战斗中”。只有 Better Assistant 显示该槽位时,槽位才算就绪。“战斗中”用于没有目标时也必须能用的治疗和防御技能。 |
| 按键方式 | 四个标记开关,见下表。 |
| 文本中的名称 | 槽位在规则和 KRC 文本中的名称:字母、数字和 _,不含空格。 |
| 注释 | 文本中声明行末尾的注释。 |
| 使用它的规则 | 按下或读取该槽位的规则。只有槽位未被使用时,才能“移除槽位”。 |
要让 KeyRota 按下某个槽位,它的法术必须放在游戏中的动作条上并绑定按键:KeyRota 从你的动作条读取按键。也可以使用带 #showtooltip 名称 的宏。没有按键的槽位永远不会被按下。
按键方式:标记#

| 开关 | 作用 | 适用场景 |
|---|---|---|
| 无标记 | 槽位像普通法术一样按下:在公共冷却即将结束时、法术队列窗口内。 | 几乎所有占用 GCD 的法术。 |
| 仅手动(M) | KeyRota 从不自动按此槽位,并会跳过它的规则。你亲自按下它的按键时,循环会暂停。 | 只想自己按的技能。 |
| 引导(C) | 该法术引导期间,KeyRota 不按任何键,也不会打断引导。 | 引导法术,例如影舞步。 |
| 不占 GCD(O) | 不等待公共冷却:立即按下,即使正处于 GCD 中。 | 不占 GCD 的法术,例如时运继延。 |
| 法术队列窗口(Q) | 仅与“不占 GCD”一起使用:在 GCD 的最后、法术队列窗口内按下。 | 第二行占用 GCD 的宏(冲动 + 影舞步),以及需要上一次攻击结果的按钮(君王之灾之后的消失)。 |
所有标记组合及其 JSON 写法请参阅槽位标记。
光环#
![“光环”页面:光环 1“目标身上的锁喉 [703]”,ID 703,文本中的名称 Garrote_DoT,用于规则 3、4、5、7、8、10](/documentation/img/zh/editor-auras.png?v=20261018u)
光环是规则读取的你自己的增益效果,以及你在目标身上的减益效果。循环的光环 N 就是 Better Assistant 列表中的光环 N。
| 控件 | 作用 |
|---|---|
| 名称 | 光环的名称,显示在规则中。建议在方括号中附上 ID:“目标身上的锁喉 [703]”。 |
| 法术 ID | 光环在 Wowhead 上的编号。Better Assistant 会在你自己的增益效果和你在目标身上的减益效果中查找它。 |
| 文本中的名称、注释 | 与槽位相同。 |
| 使用它的规则 | 读取该光环的规则。只有未被使用的光环才能“移除光环”。 |
注意
光环的 ID 可能与施加它的法术 ID 不同。消失法术是 1856,它给予的增益效果是 11327;潜行是 1784,带“诡诈”天赋的潜行是 115191。请在 Wowhead 上核对增益或减益效果本身的 ID。
只有你自己的光环可见:你给自己施加的增益效果,以及你施加在目标身上的减益效果。规则看不到其他玩家给你的增益效果,也看不到其他玩家施加在目标身上的减益效果。
规则#

规则从上到下检查:KeyRota 按下第一条已满足且法术可以施放的规则;如果无法施放(冷却、资源、距离),就检查下一条。
列表上方的工具栏:
| 按钮 | 作用 |
|---|---|
| + | 在所选规则下方新建规则。新规则按第一个槽位,暂时没有条件。 |
| 复制规则 | 在下方创建该规则的副本。 |
| 删除规则(垃圾桶图标) | 删除规则。 |
| 上移、下移 | 向上移动(更早检查)或向下移动(更晚检查)。 |
列表中的每条规则都会显示编号(即优先级)、槽位、名称和组数;有错误的规则带有红色标记。
所选规则:
| 控件 | 作用 |
|---|---|
| 按下 | 规则满足时要按的槽位。 |
| 名称 | 规则触发时显示在日志中。 |
| 描述 | KRC 文本中规则上方的备注。 |
| 何时按下 | 条件组:只要有一个组满足,规则即满足(或);组内所有条件都满足,组才满足(且)。 |

每个组都有“组 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)。各条件的详细说明请参阅条件。
错误和状态栏#

- 绿色:“循环正常:…”,表示没有错误,可以保存。
- 红色会指出出错位置:“规则 9,组 1:组中没有条件”。点击“查看”即可跳转到该位置。列表中会标记该规则,并用红框标出该组。
- 有错误的循环无法保存:“有错误的循环无法保存:请修正下方标出的问题”。
- 循环运行期间无法保存:“请先停止输出循环再保存”。
文本和 JSON#


| 控件 | 作用 |
|---|---|
| KRC 文本 / JSON | 切换视图。 |
| 复制 | 复制全部文本或 JSON。 |
| 粘贴 | 用剪贴板内容替换循环:KRC 文本、循环 JSON 或 KeyRota 配置。 |
| 打开… | 从 .txt 或 .json 文件加载循环。 |
| 保存… | 将当前视图保存为文件:文本存为 .txt,JSON 存为 .json。 |
在输入框中所做的修改如果没有错误,会立即生效;有错误时,错误信息显示在输入框下方,其他页面保留最后一个有效版本。
哪些内容只保存在 JSON 中。 KRC 文本不包含法术 ID、槽位标记、“有目标时”/“战斗中”、专精、“忽略主图标”和敌人计数设置。编辑文本时,这些设置保留在编号相同的槽位和光环上。JSON 则保存全部内容。粘贴或打开循环的新版本时,如果新版本中没有这些设置,编号相同的槽位和光环会保留原有的 ID、显示条件和标记。
保存和关闭#
- “保存”(在 Windows 上也可以按 Ctrl+S)会把循环写入配置,按钮会短暂显示“已保存”。新循环会成为一个配置,并在列表中被选中。
- 有未保存的更改时关闭窗口,会询问“保存更改?”:“保存”“不保存”或“取消”。关闭 KeyRota 时也是如此。
- 主窗口中的“导出”会将配置连同其循环保存为 JSON;“导入”既接受 KeyRota 配置,也接受单独的循环 JSON。
示例:从零开始构建循环#
我们来构建一个简单的奇袭循环:两个流血效果(锁喉和割裂)、一个生成技能(毁伤)、一个消耗技能(毒伤)、一个防御技能(生命值 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,死亡印记就会等待。 - DoT 与刷新窗口:不存在的光环剩余时间为 0,因此刷新需要两个组:“没有 DoT”和“DoT 存在且剩余 ≤ 30%”。
- 5 个连击点 = 70:连击点上限为 7 时,5 点是 71%;无论怎样取整,阈值
70都成立。对照表请参阅资源。 - 毁伤放在最后,并且只在少于 5 个连击点时使用,这样在毒伤等待条件满足期间不会浪费能量。
6. 检查。 状态栏应显示“循环正常:6 条规则,6 个槽位,4 个光环”。打开“文本和 JSON”页面,即可看到与下方相同的内容。
7. Better Assistant 配置。 “常规”——“根据槽位和光环生成”——“复制”;在游戏中:/ba——Profile——粘贴——Apply。
8. 按键。 把这六个法术放到动作条上并绑定按键。
9. 运行。 点击“保存”,关闭窗口,选择配置“奇袭:示例”,然后启动循环(Windows 上按 F1,macOS 上按 ⌃⇧Space)。如果需要猩红之瓶,请在快速设置面板上开启“治疗 / 防御”;Burst 按钮用于开启和关闭死亡印记。
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 个连击点
{
"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、KRC 文本。可以在“文本和 JSON”页面上用“打开…”打开,或通过“新建”——“从文件…”打开。