輸出循環 JSON
更新於 2026年10月18日
JSON 是進階循環的完整描述:包含 KRC 文字中的所有內容,再加上法術 ID、欄位旗標與設定檔設定。建立器會在「文字與 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 | 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#
"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 | 三者皆開啟 | 同上,但在佇列視窗內按下。 | 罕見 |
| Q 但沒有 O | "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": "沒有 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。完整清單請參閱條件。
- 可以用名稱(
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 可以互相轉換,不會失去任何意義。
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 之前:
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 錯誤。
規則#
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(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 會將它視為多餘的屬性。