循环 JSON
更新于 2026年10月18日
JSON 是高级循环的完整描述:包含 KRC 文本中的全部内容,外加法术 ID、槽位标记和配置设置。构建器在“文本和 JSON”页面上显示 JSON,KeyRota 也可以以文件形式接受它(“新建”——“从文件…”、“导入”)。该格式称为 keyrota-rotation,版本为 1。可以使用 JSON Schema 对其进行校验。
示例文件#
最简短的实用循环:目标身上没有割裂且有 5 个以上连击点时施放割裂,否则施放毁伤。
{
"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 | 魔兽世界专精,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";请在编辑器或校验工具中关联 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#
"enemies": {"range": 8, "combatOnly": true}
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
range | 整数 1–100 | 8 | 敌人计数半径,单位为码。 |
combatOnly | true / false | true | 只计入已进入战斗的敌人。 |
enemies 条件读取的就是这个计数器(见附近敌人数)。在构建器中,它们对应“常规”页面上的“敌人计数半径(码)”和“仅计入战斗中的敌人”。这些值也会写入 Better Assistant 配置。
notes 和 footer#
循环的描述(notes)以及最后一条规则之后的注释(footer)。可以是字符串列表,也可以是一个含 \n 的字符串。空字符串 "" 在文本中是一个空行。首尾的空行会被删除。
"notes": ["依据指南和顶尖日志,12.1 版本", "", "v1.1:4+ 个目标时更早使用毒伤"]
在 KRC 文本中,它们是声明之前的 # … 行。不影响循环运行。
resources#
按顺序排列的资源名称:第一项是 resource1,第二项是 resource2,依此类推。编号决定资源是什么;名称只是在条件中的写法:
resource1是玩家的生命值,resource2是目标的生命值;- 从
resource3起是专精的资源,顺序与 specID 表相同:对于潜行者,resource3是能量,resource4是连击点数。
"resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"]
请使用表中的标准名称:构建器会用通俗的文字显示它们(“玩家生命值”“能量”),其他人和 AI 智能体也能立刻看懂条件。null 用于跳过一个编号:["PlayerHP", null, "Energy"] 只声明 resource1 和 resource3。未声明的资源无法读取:“resource2 未声明”。
所有资源都是相对最大值的百分比,范围为 0–100。如何把连击点数、能量和符文换算成百分比,请参阅“条件”中的资源。
auras#
光环是你自己的增益效果,以及你在目标身上的减益效果。循环的光环 n 就是 Better Assistant 列表中的光环 n。
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
n | 整数 1–12 | 是 | — | 光环编号(buffN)。每个编号只能出现一次。 |
alias | 字符串 | 否 | 由 label 生成 | 在条件中使用的名称。见名称。 |
label | 字符串 | 否 | "" | 显示名称。不能包含双引号 "。建议在方括号中附上 ID:"目标身上的锁喉 [703]"。 |
spell | 整数 0–100000000 | 否 | 0 | 光环在 Wowhead 上的 ID。0 = 未设置:该光环不会进入 Better Assistant 配置,其值将是未知的。 |
note | 字符串 | 否 | "" | 声明行末尾的注释。 |
"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 | 三者全开 | 同上,但在法术队列窗口内按下。 | 少见 |
| 不带 O 的 Q | "queue": true | 错误:“queue 只能与 offGcd 一起使用”。 | — |
| M + 其他 | "manual": true, … | M 优先:该槽位不会被按下,其他标记不起作用。 | — |
为什么用 O + Q 而不是只用 O:只带 O 的按钮会在 GCD 中途立即按下,此时上一次攻击还没有生效。如果君王之灾之后的消失只带 O,它会在君王之灾的连击点到账之前被按下,消失规则(Combo_Points < 65)检查的将是旧值。加上 Q 后,按钮会等到 GCD 结束时再按。
严格优先级:列表中靠下的不占 GCD 规则不会抢在正在等待 GCD 的靠上规则之前。
"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 | 字符串 | 否 | 组的注释(在文本中位于该行末尾)。 |
{
"use": "Garrote",
"name": "锁喉",
"note": ["在刷新窗口内刷新"],
"when": [
{"all": ["Garrote_DoT.down"], "comment": "没有流血"},
{"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。完整列表请参阅条件。
- 可以按名称(
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(从零开始计数)。在构建器中是“规则 4,组 2:未知名称 Foo”(从一开始计数)。在 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 可以相互转换,含义不会丢失。
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错误:规则之外的行:"…"(说明文字请以 # 开头)。 - 各部分之间可以有任意数量的空格和制表符。规范格式在
buffN/slotN之后以及条件行开头使用制表符。
声明#
只能写在第一个 use 之前:
rotation "名称" # 可选,最多一次
buff1 Garrote_DoT = "目标身上的锁喉 [703]" # 光环 1
slot1 Garrote = "锁喉" # 槽位 1
resource1 PlayerHP # 资源 1
buffN 和 slotN 为 1–12,resourceN 为 1–99。引号中的名称可以为空:slot5 Filler = ""。在第一个 use 之后写声明会导致 late_declaration 错误。
规则#
use Rupture when # 割裂
Combo_Points >= 70 and Rupture_DoT.down # 没有流血
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 还可以从其名称中的
[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#
该格式的 Schema:keyrota-rotation.schema.json(draft 2020-12)。它会检查字段、类型、范围、不带 offGcd 的 queue,以及条件字符串的格式。它不检查 n 和名称是否唯一、条件中的名称是否存在,也不检查按 and 拆分字符串后的 16 个条件上限:这些由 KeyRota 在加载时检查。
校验文件:
npx ajv-cli validate --spec=draft2020 -s keyrota-rotation.schema.json -d my-rotation.json
不要在循环文件中加入 "$schema" 字段:KeyRota 会把它视为多余字段。