Перейти к содержимому

로테이션 JSON

업데이트: 2026. 10. 18.

JSON은 고급 로테이션을 빠짐없이 기술합니다. KRC 텍스트에 있는 모든 내용에 더해 주문 ID, 슬롯 플래그, 프로필 설정까지 담습니다. 빌더의 “텍스트 및 JSON” 페이지에서 볼 수 있고, KeyRota에서는 파일로 불러올 수 있습니다(“새로 만들기 — 파일에서…”, “가져오기”). 형식 이름은 keyrota-rotation, 버전은 1입니다. 검사용 JSON Schema도 있습니다.

예시 파일#

실제로 쓸 수 있는 가장 짧은 로테이션입니다. 연계 점수가 5 이상이고 대상에 파열이 없으면 파열을, 그 밖에는 절단을 누릅니다.

minimal.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아니요0WoW 전문화, 0 = 모든 전문화. Better Assistant 프로필에 필요합니다.
ignoreMainIcontrue / 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…)
전사무기71Rage
전사분노72Rage
전사방어73Rage
성기사신성65Mana, Holy_Power
성기사보호66Mana, Holy_Power
성기사징벌70Mana, Holy_Power
사냥꾼야수253Focus
사냥꾼사격254Focus
사냥꾼생존255Focus
도적암살259Energy, Combo_Points
도적무법260Energy, Combo_Points
도적잠행261Energy, Combo_Points
사제수양256Mana, Insanity
사제신성257Mana, Insanity
사제암흑258Mana, Insanity
죽음의 기사혈기250Runes, Runic_Power
죽음의 기사냉기251Runes, Runic_Power
죽음의 기사부정252Runes, Runic_Power
주술사정기262Mana, Maelstrom
주술사고양263Mana, Maelstrom
주술사복원264Mana, Maelstrom
마법사비전62Mana, Arcane_Charges
마법사화염63Mana, Arcane_Charges
마법사냉기64Mana, Arcane_Charges
흑마법사고통265Mana, Soul_Shards
흑마법사악마266Mana, Soul_Shards
흑마법사파괴267Mana, Soul_Shards
수도사양조268Energy, Stagger
수도사운무270Mana
수도사풍운269Energy, Chi
드루이드조화102Mana, Astral_Power
드루이드야성103Energy, Combo_Points
드루이드수호104Rage
드루이드회복105Mana, Astral_Power
악마사냥꾼파멸577Fury
악마사냥꾼복수581Fury
악마사냥꾼포식1480Fury
기원사황폐1467Mana, Essence
기원사보존1468Mana, Essence
기원사증강1473Mana, Essence

ignoreMainIcon#

true(기본값): KeyRota는 규칙에 따라서만 누르고, 맞는 규칙이 없으면 기다립니다. false: 맞는 규칙이 없으면 Blizzard 프로필처럼 게임 추천을 누릅니다. 게임 추천은 모든 규칙을 확인한 뒤의 마지막 수단이며, 규칙을 앞지르지 않습니다.

enemies#

JSON
"enemies": {"range": 8, "combatOnly": true}
필드형식기본값설명
range정수 1–1008적 수 측정 반경(미터).
combatOnlytrue / falsetrue이미 전투 중인 적만 셉니다.

enemies 조건은 이 측정값을 읽습니다(주변 적 수 참고). 빌더에서는 “일반” 페이지의 “적 수 측정 반경(미터)”과 “전투 중인 적만”에 해당합니다. 이 값은 Better Assistant 프로필에도 들어갑니다.

notes와 footer#

로테이션 설명(notes)과 마지막 규칙 뒤의 주석(footer)입니다. 문자열 목록이나, \n이 들어간 문자열 하나로 씁니다. 빈 문자열 ""은 텍스트에서 빈 줄이 됩니다. 맨 앞과 맨 뒤의 빈 줄은 제거됩니다.

JSON
"notes": ["가이드와 상위 로그 기반, 패치 12.1", "", "v1.1: 대상 4명 이상에서 독살을 더 일찍 사용"]

KRC 텍스트에서는 선언 앞의 # … 줄입니다. 로테이션 동작에는 영향을 주지 않습니다.

resources#

자원 이름을 순서대로 적습니다. 첫 번째 항목이 resource1, 두 번째가 resource2, 이런 식입니다. 자원의 종류는 번호가 정하며, 이름은 조건에서 쓰는 표기일 뿐입니다:

  • resource1은 플레이어의 생명력, resource2는 대상의 생명력입니다.
  • resource3부터는 specID 표의 순서대로 전문화 자원입니다. 도적이라면 resource3이 기력, resource4가 연계 점수입니다.
JSON
"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아니요0Wowhead의 오라 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아니요0Wowhead의 주문 ID. Better Assistant는 이 ID로 주문을 슬롯에 넣습니다.
note문자열아니요""선언 줄 끝의 주석.
show"target" / "combat"아니요"target"Better Assistant가 슬롯을 표시하는 시점.
manualtrue / false아니요false플래그 M.
channeltrue / false아니요false플래그 C.
offGcdtrue / false아니요false플래그 O.
queuetrue / false아니요false플래그 Q. offGcd와 함께만 쓸 수 있습니다.

show#

  • "target": 대상이 있을 때 슬롯을 표시합니다. 거의 모든 공격 기술에 해당합니다.
  • "combat": 대상이 없어도 전투 중이면 슬롯을 표시합니다. 치유와 방어 기술용입니다. 진홍색 약병은 대상이 없을 때도 작동해야 합니다.

슬롯은 Better Assistant가 표시할 때만 준비된 것으로 봅니다. "target" 슬롯은 대상이 없으면 준비되지 않으며, 그 규칙은 건너뜁니다.

슬롯 플래그#

플래그는 규칙이 선택된 슬롯을 어떻게 누를지 정합니다. 빌더에서는 “누르는 방식” 스위치입니다.

플래그JSON누르는 방식예시
없음모두 falseGCD가 끝날 무렵 주문 대기열 구간에 누릅니다. GCD가 끝나는 즉시 주문이 나갑니다.절단, 독살
M"manual": true누르지 않습니다. 슬롯의 규칙은 건너뜁니다. 이 슬롯의 키를 직접 누르면 로테이션이 일시 정지됩니다.직접 누르는 기술
C"channel": true일반 주문처럼 누르고, 정신 집중이 이어지는 동안에는 아무것도 누르지 않습니다. 누른 뒤 정신 집중이 시작될 때까지는 이 슬롯을 다시 누르지 않습니다.광기의 학살자 (51690)
O"offGcd": trueGCD 도중이라도 바로 누릅니다.도박의 연속 (381989)
O + Q"offGcd": true, "queue": trueGCD와 무관하지만 GCD가 끝날 무렵의 주문 대기열 구간에서만 누릅니다.아드레날린 촉진 + 광기의 학살자 매크로 (13750), 왕의 파멸 후 소멸 (1856)
C + O"channel": true, "offGcd": trueGCD와 무관하게 시작하는 정신 집중: 바로 누르고, 정신 집중이 끝날 때까지 아무것도 누르지 않습니다.드묾
C + O + Q세 가지 모두위와 같되 주문 대기열 구간에서 누릅니다.드묾
O 없는 Q"queue": true오류: “queue는 offGcd와 함께만 사용할 수 있습니다”.—
M + 다른 플래그"manual": true, …M이 우선합니다. 슬롯을 누르지 않으며 다른 플래그는 의미가 없습니다.—

O만이 아니라 O + Q를 쓰는 이유: 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그룹 목록아니요[]OR 그룹. 비어 있거나 없으면 조건 없는 규칙이 되어, 주문을 사용할 수 있으면 언제나 누릅니다.

when: 그룹과 조건#

필드형식필수설명
all비어 있지 않은 문자열 목록예그룹의 조건. 모두 충족되어야 합니다(AND).
comment문자열아니요그룹의 주석(텍스트에서는 그 줄의 끝).
JSON
{
  "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"은 조건 2개이며, 둘 다 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에서 이름을 만듭니다. 대괄호와 그 안의 내용은 버리고, 문자와 숫자는 남기며, 나머지는 모두 _로 바꿉니다. 예를 들어 "대상의 목조르기 [703]"은 대상의_목조르기가 됩니다. 이름이 비거나 쓸 수 없으면 Aura_N 또는 Slot_N이 되고, 이미 있는 이름이면 _2, _3이 붙습니다. 규칙이 목록에 없는 buffN이나 slotN을 참조하면 Aura_N, Slot_N으로 자동 선언됩니다.

필수 필드와 기본값#

위치필수기본값
파일format, versiontitle "", specID 0, ignoreMainIcon true, enemies {"range": 8, "combatOnly": true}, 빈 목록
오라nalias는 label에서 생성, label "", spell 0
슬롯nshow "target", 모든 플래그 false, spell 0
규칙usename "", note [], when [](조건 없음)
그룹all(비어 있지 않음)comment ""

제한#

항목제한
오라12개(n 1–12)
슬롯12개(n 1–12)
규칙당 OR 그룹16개
그룹당 AND 조건16개
규칙제한 없음
조건의 숫자정수 0–100
enemies.range1–100
spell0–100000000
specID0–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와 함께만 사용할 수 있습니다offGcd: true 없이 queue: 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_refresource5 선언되지 않음자원이 resources에 선언되지 않았습니다.
wrong_kindGarrote — 종류: slot, 필요한 종류: buff슬롯에 오라 속성을 썼거나(Garrote.up) 그 반대입니다.
bad_condition조건을 해석할 수 없음: "Energy => 50"조건이나 연산자에 오타가 있습니다.
bad_condition"Garrote.distance <= 8": distance는 target에만 있습니다거리는 대상에만 있습니다.
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_rangebuff13: 번호가 1..12 범위를 벗어남12보다 큰 번호를 참조했습니다.
too_many_groupsOR 그룹이 16개를 초과합니다규칙에 그룹이 16개보다 많습니다.
too_many_conditions17 개의 조건이 한 그룹에 있습니다 (최대 16개)그룹에 조건이 16개보다 많습니다.

빌더에는 이 밖에도 “그룹에 조건이 없습니다”(빈 그룹), “슬롯을 선택하지 않았습니다”, “이름에 따옴표를 쓸 수 없습니다”가 있습니다.

KRC 텍스트#

KRC 텍스트는 같은 로테이션을 줄 단위로 적은 것입니다. “텍스트 및 JSON” 페이지에서 볼 수 있고, .txt 파일로 보관할 수 있습니다. 텍스트와 JSON은 의미 손실 없이 서로 변환됩니다.

KRC 텍스트
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 전에만 씁니다:

KRC 텍스트
rotation "이름"                    # 선택 사항, 최대 한 번
buff1	Garrote_DoT = "대상의 목조르기 [703]"   # 오라 1
slot1	Garrote = "목조르기"                     # 슬롯 1
resource1	PlayerHP                           # 자원 1

buffN과 slotN은 1–12, resourceN은 1–99입니다. 따옴표 안의 레이블은 비워 둘 수 있습니다: slot5 Filler = "". 첫 번째 use 뒤에 선언을 쓰면 late_declaration 오류입니다.

규칙#

KRC 텍스트
use Rupture when  # 파열
	Combo_Points >= 70 and Rupture_DoT.down  # 출혈 없음
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # 판데믹 구간
  • use Slot 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 없음)은 슬롯의 ID와 표시 조건을 KeyRota 프로필에 이미 저장된 Better Assistant 프로필에서 가져오고, 오라의 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#

형식의 스키마: 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가 불필요한 필드로 처리합니다.