JSON da rotação
Atualizado em 18/10/2026
O JSON é a descrição completa de uma rotação avançada: tudo o que o texto KRC tem, mais os IDs de feitiços, as flags dos slots e as configurações do perfil. O construtor o mostra na página Texto e JSON, e a KeyRota o aceita como arquivo (Novo — De um arquivo…, Importar). O formato se chama keyrota-rotation, versão 1. Há um JSON Schema para validá-lo.
Arquivo de exemplo#
A menor rotação útil: Ruptura com 5 ou mais pontos de combo quando ela não estiver no alvo; caso contrário, Mutilar.
{
"format": "keyrota-rotation",
"version": 1,
"title": "Assassinato: mínimo",
"specID": 259,
"resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
"auras": [{"n": 1, "alias": "Rupture_DoT", "label": "Ruptura no alvo [1943]", "spell": 1943}],
"slots": [
{"n": 2, "alias": "Rupture", "label": "Ruptura", "spell": 1943},
{"n": 4, "alias": "Mutilate", "label": "Mutilar", "spell": 1329}
],
"rules": [
{
"use": "Rupture",
"name": "Ruptura",
"when": [{"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "5+ pontos de combo, sem sangramento"}]
},
{"use": "Mutilate", "name": "Mutilar"}
]
}
Tudo o que o arquivo omite assume o valor padrão: os slots ficam visíveis Com alvo e não têm flags, o contador de inimigos é de 8 metros e conta só inimigos em combate. Uma regra sem when é sempre atendida.
Campos de nível superior#
| Campo | Tipo | Obrigatório | Padrão | O que é |
|---|---|---|---|---|
format | string | sim | — | Sempre "keyrota-rotation". |
version | inteiro | sim | — | Sempre 1. Uma versão mais nova é recusada: “atualize a KeyRota”. |
title | string | não | "" | O nome da rotação: a primeira linha do texto, o nome no log. Sem aspas duplas. |
specID | inteiro de 0 a 100000 | não | 0 | A especialização do WoW; 0 = qualquer uma. Necessário para o perfil do Better Assistant. |
ignoreMainIcon | true / false | não | true | Ligado: pressiona apenas pelas regras. Desligado: quando nenhuma regra é atendida, pressiona a sugestão do jogo. |
enemies | objeto | não | {"range": 8, "combatOnly": true} | O contador de inimigos da condição enemies. |
notes | string ou lista de strings | não | [] | A descrição: linhas com # no início do texto. |
resources | lista de strings e null | não | [] | Os nomes de resource1…N, em ordem. |
auras | lista | não | [] | As auras buff1…12. |
slots | lista | não | [] | Os slots slot1…12. |
rules | lista | não | [] | As regras, em ordem de prioridade. |
footer | string ou lista de strings | não | [] | Comentários depois da última regra. |
Qualquer outro campo é um erro, “campo extra”: erros de digitação não passam despercebidos. Por isso, não adicione "$schema" ao arquivo; associe o schema no seu editor ou validador.
Em quase todo lugar, null pode ocupar o lugar de um valor; significa o mesmo que omitir o campo.
format e version#
"format": "keyrota-rotation" e "version": 1 são obrigatórios. Se version for maior que 1, a KeyRota recusa o arquivo: “a versão 2 é mais nova do que esta KeyRota entende: atualize-a”. Sem version: “é preciso a versão 1”.
title#
Uma string sem aspas duplas ". As quebras de linha viram espaços. No texto KRC, é rotation "…". Um bom lugar para a versão: "Assassinato v1.3".
specID#
O ID da especialização no jogo. Ele define os recursos da rotação (quando ela é criada no construtor) e a classe e a especialização no perfil do Better Assistant. 0 significa qualquer especialização: a rotação funciona, mas o perfil do Better Assistant não é montado (“Escolha uma especialização: o perfil do Better Assistant precisa dela”).
| Classe | Especialização | specID | Recursos da especialização (resource3…) |
|---|---|---|---|
| Guerreiro | Armas | 71 | Rage |
| Guerreiro | Fúria | 72 | Rage |
| Guerreiro | Proteção | 73 | Rage |
| Paladino | Sagrado | 65 | Mana, Holy_Power |
| Paladino | Proteção | 66 | Mana, Holy_Power |
| Paladino | Retribuição | 70 | Mana, Holy_Power |
| Caçador | Domínio das Feras | 253 | Focus |
| Caçador | Precisão | 254 | Focus |
| Caçador | Sobrevivência | 255 | Focus |
| Ladino | Assassinato | 259 | Energy, Combo_Points |
| Ladino | Fora da Lei | 260 | Energy, Combo_Points |
| Ladino | Subterfúgio | 261 | Energy, Combo_Points |
| Sacerdote | Disciplina | 256 | Mana, Insanity |
| Sacerdote | Sagrado | 257 | Mana, Insanity |
| Sacerdote | Sombra | 258 | Mana, Insanity |
| Cavaleiro da Morte | Sangue | 250 | Runes, Runic_Power |
| Cavaleiro da Morte | Gélido | 251 | Runes, Runic_Power |
| Cavaleiro da Morte | Profano | 252 | Runes, Runic_Power |
| Xamã | Elemental | 262 | Mana, Maelstrom |
| Xamã | Aperfeiçoamento | 263 | Mana, Maelstrom |
| Xamã | Restauração | 264 | Mana, Maelstrom |
| Mago | Arcano | 62 | Mana, Arcane_Charges |
| Mago | Fogo | 63 | Mana, Arcane_Charges |
| Mago | Gélido | 64 | Mana, Arcane_Charges |
| Bruxo | Suplício | 265 | Mana, Soul_Shards |
| Bruxo | Demonologia | 266 | Mana, Soul_Shards |
| Bruxo | Destruição | 267 | Mana, Soul_Shards |
| Monge | Mestre Cervejeiro | 268 | Energy, Stagger |
| Monge | Tecelão da Névoa | 270 | Mana |
| Monge | Andarilho do Vento | 269 | Energy, Chi |
| Druida | Equilíbrio | 102 | Mana, Astral_Power |
| Druida | Feral | 103 | Energy, Combo_Points |
| Druida | Guardião | 104 | Rage |
| Druida | Restauração | 105 | Mana, Astral_Power |
| Caçador de Demônios | Devastação | 577 | Fury |
| Caçador de Demônios | Vingança | 581 | Fury |
| Caçador de Demônios | Devorador | 1480 | Fury |
| Conjurante | Devastação | 1467 | Mana, Essence |
| Conjurante | Preservação | 1468 | Mana, Essence |
| Conjurante | Aprimoramento | 1473 | Mana, Essence |
ignoreMainIcon#
true (padrão): a KeyRota pressiona apenas pelas regras; quando nenhuma é atendida, ela espera. false: nesse caso, ela pressiona a sugestão do jogo, como o perfil da Blizzard. A sugestão é o último recurso, depois de todas as regras; ela nunca passa na frente de uma regra.
enemies#
"enemies": {"range": 8, "combatOnly": true}
| Campo | Tipo | Padrão | O que é |
|---|---|---|---|
range | inteiro de 1 a 100 | 8 | O raio do contador de inimigos, em metros. |
combatOnly | true / false | true | Contar só os inimigos que já estão em combate. |
A condição enemies lê esse contador (veja Inimigos por perto). No construtor, são as opções “Raio do contador de inimigos, metros” e “Só inimigos em combate” da página Geral. Os valores também vão para o perfil do Better Assistant.
notes e footer#
A descrição da rotação (notes) e os comentários depois da última regra (footer). Uma lista de strings ou uma única string com \n. Uma string vazia "" é uma linha em branco no texto. As linhas em branco nas bordas são descartadas.
"notes": ["Baseado em um guia e nos melhores logs, patch 12.1", "", "v1.1: Envenenar mais cedo com 4+ alvos"]
No texto KRC, são linhas # … antes das declarações. Não afetam o funcionamento da rotação.
resources#
Os nomes dos recursos, em ordem: o primeiro item é resource1, o segundo é resource2 e assim por diante. O número define qual é o recurso; o nome é apenas como você o escreve nas condições:
resource1é a vida do jogador, eresource2, a vida do alvo;- de
resource3em diante vêm os recursos da especialização, na ordem da tabela de specID: para um ladino,resource3é a energia, eresource4, os pontos de combo.
"resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"]
Use os nomes padrão da tabela: o construtor os mostra em palavras comuns (“Vida do jogador”, “Energia”), e outras pessoas e agentes de IA entendem as condições na hora. null pula um número: ["PlayerHP", null, "Energy"] declara apenas resource1 e resource3. Um recurso não declarado não pode ser lido: “resource2 não declarado”.
Todos os recursos são porcentagens do máximo, de 0 a 100. Como converter pontos de combo, energia e runas em porcentagem: Recursos, em Condições.
auras#
As auras são os seus bônus e as suas penalidades no alvo. A aura n da rotação é a aura n da lista do Better Assistant.
| Campo | Tipo | Obrigatório | Padrão | O que é |
|---|---|---|---|---|
n | inteiro de 1 a 12 | sim | — | O número da aura (buffN). Cada número aparece uma vez. |
alias | string | não | a partir de label | O nome nas condições. Veja Nomes. |
label | string | não | "" | O nome exibido. Sem aspas duplas ". É prático incluir o ID entre colchetes: "Garrote no alvo [703]". |
spell | inteiro de 0 a 100000000 | não | 0 | O ID da aura no Wowhead. 0 = não definido: a aura não entra no perfil do Better Assistant e fica desconhecida. |
note | string | não | "" | Um comentário no fim da linha de declaração. |
"auras": [
{"n": 1, "alias": "Garrote_DoT", "label": "Garrote no alvo [703]", "spell": 703},
{"n": 2, "alias": "Rupture_DoT", "label": "Ruptura no alvo [1943]", "spell": 1943}
]
A ordem na lista não importa; o que importa é n. Pode haver lacunas na numeração, mas, para o perfil do Better Assistant, as auras com ID precisam estar em sequência a partir da primeira.
slots#
Os slots são os botões da rotação. O slot n da rotação é o slot n do Better Assistant.
| Campo | Tipo | Obrigatório | Padrão | O que é |
|---|---|---|---|---|
n | inteiro de 1 a 12 | sim | — | O número do slot (slotN). |
alias | string | não | a partir de label | O nome nas regras e nas condições. |
label | string | não | "" | O nome do feitiço. Sem aspas duplas ". |
spell | inteiro de 0 a 100000000 | não | 0 | O ID do feitiço no Wowhead. O Better Assistant o usa para colocar o feitiço no slot. |
note | string | não | "" | Um comentário no fim da linha de declaração. |
show | "target" / "combat" | não | "target" | Quando o Better Assistant mostra o slot. |
manual | true / false | não | false | Flag M. |
channel | true / false | não | false | Flag C. |
offGcd | true / false | não | false | Flag O. |
queue | true / false | não | false | Flag Q, só com offGcd. |
show#
"target": o slot é mostrado quando você tem um alvo. Vale para quase todos os ataques."combat": o slot é mostrado em combate, mesmo sem alvo. Para cura e defesas: o Frasco Rubro precisa funcionar quando não há alvo.
Um slot só fica pronto quando o Better Assistant o mostra. Um slot "target" sem alvo não está pronto, e as regras dele são puladas.
Flags do slot#
As flags dizem como pressionar um slot depois que a regra dele é escolhida. No construtor, são as chaves de Como pressionar.
| Flags | No JSON | Como é pressionado | Exemplo |
|---|---|---|---|
| nenhuma | todas false | Na janela da fila, no fim do GCD: o feitiço é lançado assim que o GCD termina. | Mutilar, Envenenar |
| M | "manual": true | Nunca. As regras do slot são puladas. Quando você mesmo pressiona a tecla dele, a rotação é pausada. | Uma habilidade que você pressiona por conta própria |
| C | "channel": true | Como um feitiço comum; enquanto a canalização dura, nada é pressionado. Depois do pressionamento, o slot não é pressionado de novo até a canalização começar. | Matança (51690) |
| O | "offGcd": true | Na hora, mesmo no meio do GCD. | Sorte Grande (381989) |
| O + Q | "offGcd": true, "queue": true | Fora do GCD, mas só na janela da fila, no fim do GCD. | A macro Adrenalina + Matança (13750); Sumir (1856) depois de Ruína dos Reis |
| C + O | "channel": true, "offGcd": true | Uma canalização que começa fora do GCD: na hora e depois nada até a canalização terminar. | Raro |
| C + O + Q | as três | O mesmo, na janela da fila. | Raro |
| Q sem O | "queue": true | Erro: “queue: apenas junto com offGcd”. | — |
| M + outras | "manual": true, … | M prevalece: o slot não é pressionado, e as outras flags não importam. | — |
Por que O + Q, e não só O: um botão só com O é pressionado na hora, no meio do GCD, antes de o golpe anterior acertar. Sumir depois de Ruína dos Reis só com O seria pressionado antes de chegarem os pontos de combo de Ruína dos Reis, e a regra de Sumir (Combo_Points < 65) verificaria o valor antigo. Com Q, o botão espera o fim do GCD.
Prioridade estrita: uma regra fora do GCD mais abaixo na lista não passa na frente de uma regra mais acima que está esperando o GCD.
"slots": [
{"n": 1, "alias": "Adrenaline_Rush", "label": "Adrenalina (macro com Matança)", "spell": 13750, "offGcd": true, "queue": true},
{"n": 4, "alias": "Keep_It_Rolling", "label": "Sorte Grande", "spell": 381989, "offGcd": true},
{"n": 8, "alias": "Killing_Spree", "label": "Matança", "spell": 51690, "channel": true},
{"n": 11, "alias": "Crimson_Vial", "label": "Frasco Rubro", "spell": 185311, "show": "combat"}
]
rules#
As regras, em ordem de prioridade: a primeira da lista é verificada primeiro.
| Campo | Tipo | Obrigatório | Padrão | O que é |
|---|---|---|---|---|
use | string | sim | — | O slot a pressionar: o alias dele ou slotN. |
name | string | não | "" | O nome da ação, exibido no log. No texto, é o comentário da linha use. |
note | string ou lista de strings | não | [] | Notas acima da regra (linhas com # antes de use). |
when | lista de grupos | não | [] | Os grupos OU. Vazio ou ausente: uma regra sem condições, pressionada sempre que o feitiço puder ser usado. |
when: grupos e condições#
| Campo | Tipo | Obrigatório | O que é |
|---|---|---|---|
all | lista de strings não vazia | sim | As condições do grupo; todas precisam ser atendidas (E). |
comment | string | não | O comentário do grupo (no texto, no fim da linha dele). |
{
"use": "Garrote",
"name": "Garrote",
"note": ["Renovar na janela de pandemia"],
"when": [
{"all": ["Garrote_DoT.down"], "comment": "sem DoT"},
{"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "restam 30% ou menos"}
]
}
Um mesmo slot pode aparecer em várias regras: por exemplo, Garrote a partir da Furtividade no alto da lista e a manutenção normal do Garrote mais abaixo.
Condições no JSON#
Cada condição é uma string na sintaxe KRC: Garrote_DoT.down, Rupture_DoT.duration <= 25, Kingsbane.cd <= 3, Combo_Points >= 70, enemies >= 2, target.distance <= 8, cd == 1. A lista completa está em Condições.
- Faça referência pelo nome (
Garrote_DoT) ou pelo número:buff1,slot3,resource4. anddentro de uma string a divide em duas condições:"Combo_Points >= 70 and Energy >= 70"são duas condições, e as duas contam para o limite de 16.- Sem
#e sem quebras de linha em uma string. - É o próprio mecanismo da KeyRota que lê as condições, por isso o JSON e o texto sempre significam o mesmo.
Nomes#
Um nome (alias) é como auras, slots e recursos são chamados nas condições e em use.
- O primeiro caractere é uma letra (de qualquer alfabeto) ou
_; depois vêm letras, dígitos0–9e_. Letras acentuadas e de outros alfabetos servem; espaços, hifens e pontos, não:Fan_of_Knives, e nãoFan-of-Knives. - Um nome é único entre todas as auras, slots e recursos.
- Reservados:
use,when,and,or,rotation,gcd,enemies,target,aoe,st,cd,defensives,ground_spells,movemente nomes comobuffN,slotN,resourceN. - As palavras-chave são sempre em minúsculas:
use,or,.up.Use,ORe.UPsão erros.
Um nome a partir do rótulo. Sem alias, a KeyRota cria um a partir de label: os colchetes e o que há dentro deles são descartados, as letras e os dígitos ficam, e todo o resto vira _. Por exemplo, "Garrote no alvo [703]" vira Garrote_no_alvo. Um nome vazio ou inutilizável vira Aura_N ou Slot_N; um nome já usado ganha _2, _3. Se uma regra fizer referência a buffN ou slotN que não estão nas listas, eles são declarados automaticamente como Aura_N e Slot_N.
Campos obrigatórios e valores padrão#
| Onde | Obrigatório | Valores padrão |
|---|---|---|
| Arquivo | format, version | title "", specID 0, ignoreMainIcon true, enemies {"range": 8, "combatOnly": true}, listas vazias |
| Aura | n | alias a partir de label, label "", spell 0 |
| Slot | n | show "target", todas as flags false, spell 0 |
| Regra | use | name "", note [], when [] (sem condições) |
| Grupo | all (não vazio) | comment "" |
Limites#
| O quê | Limite |
|---|---|
| Auras | 12 (n de 1 a 12) |
| Slots | 12 (n de 1 a 12) |
| Grupos OU em uma regra | 16 |
| Condições E em um grupo | 16 |
| Regras | sem limite |
| Número em uma condição | inteiro de 0 a 100 |
enemies.range | de 1 a 100 |
spell | de 0 a 100000000 |
specID | de 0 a 100000 |
| Recursos | até 99 |
Exatamente 16 grupos de 16 condições é permitido; 17 é um erro.
Erros#
Uma rotação com erro não é carregada de jeito nenhum: não existe execução parcial. Um erro sempre indica o local. No JSON, é um caminho: rules[3].when[1]: nome desconhecido Foo (contando a partir de zero). No construtor, “Regra 4, grupo 2: nome desconhecido Foo” (contando a partir de um). No texto KRC, um número de linha.
Estrutura do JSON:
| Mensagem | Causa |
|---|---|
campo extra “offgcd” | Um campo escrito errado ou desconhecido (maiúsculas e minúsculas importam: offGcd). |
falta o campo “format” | Falta um campo obrigatório. |
format: era esperado “keyrota-rotation” | Outro valor em format. |
version: é preciso a versão 1 | Sem version ou com valor menor que 1. |
slots[0]: falta o número n (1–12) | Um slot ou uma aura sem n. |
slots[2].n: número fora de 1..12 | n fora do intervalo. |
slots[3]: o número 4 já está em uso | Dois slots (ou duas auras) com o mesmo n. |
slots[1].show: era esperado “target” ou “combat” | Outro valor em show. |
slots[0]: queue: apenas junto com offGcd | queue: true sem offGcd: true. |
rules[2].use: não existe o slot “Garotte” | use faz referência a um slot que não existe. |
rules[0].when[1].all: é preciso uma lista de condições não vazia | Um grupo vazio ou sem all. |
rules[0].when[0].all[2]: condição vazia ou com # ou quebra de linha | Uma string de condição vazia ou com #. |
….spell: era esperado um número inteiro | Tipo errado: uma string em vez de um número, true em vez de um número etc. |
Condições e declarações (as mesmas do texto KRC):
| Código | Exemplo de mensagem | Causa |
|---|---|---|
unknown_ref | nome desconhecido Foo | Não há aura, slot nem recurso com esse nome. |
unknown_ref | resource5 não declarado | O recurso não está declarado em resources. |
wrong_kind | Garrote é slot, mas era esperado buff | Uma propriedade de aura em um slot (Garrote.up) ou o contrário. |
bad_condition | não foi possível interpretar a condição "Energy => 50" | Um erro de digitação na condição ou no operador. |
bad_condition | "Garrote.distance <= 8": distance só existe em target | Só o alvo tem distância. |
value_range | o valor 120 está fora de 0..100 | Um número maior que 100. Não existem números negativos nem fracionários. |
toggle_value | "cd >= 1": alternador só aceita == 0 ou == 1 | Um alternador só é comparado com == e 0 ou 1. |
bad_alias | nome inválido Fan-of-Knives | Caracteres inválidos em um nome. |
reserved_alias | o nome cd é reservado | Um nome reservado. |
duplicate_alias | o nome Garrote já foi declarado | Duas auras, slots ou recursos com o mesmo nome. |
index_range | buff13: número fora de 1..12 | Uma referência a um número maior que 12. |
too_many_groups | mais de 16 grupos OR | Mais de 16 grupos em uma regra. |
too_many_conditions | 17 condições no grupo (máximo 16) | Mais de 16 condições em um grupo. |
O construtor também informa “o grupo não tem condições” (um grupo vazio), “nenhum slot selecionado” e “o nome não pode ter aspas”.
Texto KRC#
O texto KRC é a mesma rotação em forma de linhas. A página Texto e JSON o mostra, e você pode guardá-lo como arquivo .txt. O texto e o JSON se convertem um no outro sem perda de significado.
rotation "Assassinato: mínimo"
buff1 Rupture_DoT = "Ruptura no alvo [1943]"
slot2 Rupture = "Ruptura"
slot4 Mutilate = "Mutilar"
resource1 PlayerHP
resource2 TargetHP
resource3 Energy
resource4 Combo_Points
use Rupture when # Ruptura
Combo_Points >= 70 and Rupture_DoT.down # 5+ pontos de combo, sem sangramento
use Mutilate when # Mutilar
Linhas#
#fora de aspas duplas inicia um comentário que vai até o fim da linha. Dentro de um"rótulo",#é um caractere comum.- Linhas em branco e linhas só com comentário são ignoradas: é assim que se escrevem descrições e separadores.
- Qualquer outra linha é uma declaração,
use,orou uma linha de condições. Caso contrário, é um errostray_line: “linha fora de regra: "…" (texto livre deve começar com #)”. - Quaisquer espaços e tabulações entre as partes. A forma canônica usa uma tabulação depois de
buffN/slotNe no início das linhas de condições.
Declarações#
Somente antes do primeiro use:
rotation "Nome" # opcional, no máximo uma vez
buff1 Garrote_DoT = "Garrote no alvo [703]" # aura 1
slot1 Garrote = "Garrote" # slot 1
resource1 PlayerHP # recurso 1
buffN e slotN vão de 1 a 12, e resourceN, de 1 a 99. O rótulo entre aspas pode ser vazio: slot5 Filler = "". Uma declaração depois do primeiro use é um erro late_declaration.
Regras#
use Rupture when # Ruptura
Combo_Points >= 70 and Rupture_DoT.down # sem DoT
or
Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30 # pandemia
use Slot whenabre uma regra; um comentário nessa linha é o nome da ação.- Cada linha de condições é um grupo (condições unidas com
and). Os grupos são separados por uma linha que contém apenas a palavraor. - Uma regra sem linhas de condições não tem condições.
- Duas linhas de condições seguidas sem
orsão um errosplit_group;orno início, no fim ou duas vezes seguidas éempty_group.
Texto e JSON: a correspondência#
| No texto | No JSON |
|---|---|
rotation "…" | title |
Linhas # … antes do primeiro use | notes |
Um comentário no fim de uma linha buffN / slotN | O note da aura / do slot |
Linhas # … logo antes de use (e entre os grupos da regra) | O note da regra |
Um comentário na linha use | O name da regra |
| Um comentário no fim de uma linha de condições | O comment do grupo |
Linhas # … depois da última regra | footer |
| — (não existe no texto) | specID, ignoreMainIcon, enemies, spell, show, flags |
As linhas em branco nas bordas dos blocos de comentários são descartadas; no meio, elas ficam como "".
Importação e armazenamento#
- A KeyRota guarda a rotação dentro do perfil. Exportar, na janela principal, salva o perfil da KeyRota (JSON) com a rotação; Importar aceita um perfil da KeyRota e apenas o JSON de uma rotação.
- Novo — De um arquivo… aceita
.txtcom texto KRC, JSON de rotação e um perfil da KeyRota; Novo — Da área de transferência aceita o mesmo a partir da área de transferência. - No construtor: Texto e JSON — Colar ou Abrir… substituem a rotação; os slots e as auras de mesmos números mantêm os IDs, Com alvo / Em combate e as flags se a nova versão não os tiver.
- Uma rotação em texto (sem JSON) pega os IDs e a visibilidade dos slots do perfil do Better Assistant já guardado no perfil da KeyRota, e os IDs das auras também das marcas
[703]nos rótulos delas.
O perfil do Better Assistant a partir do JSON#
“Montar com slots e auras”, no construtor, cria o texto do perfil do Better Assistant a partir do JSON da rotação:
- 12 slots: o slot N é
slots[n = N].spell, visível conformeshow. Um slot sem ID fica vazio. - Auras em ordem a partir da primeira:
auras[n = 1].spell,auras[n = 2].spell… Uma aura sem ID no meio é um erro. - Classe e especialização a partir de
specID. - Contador de inimigos a partir de
enemies.rangeeenemies.combatOnly. - Se o perfil da KeyRota já tiver um perfil do Better Assistant da mesma especialização, as demais configurações dele e os slots e as auras correspondentes são mantidos.
No jogo: /ba — Profile — colar — Apply.
JSON Schema#
O schema do formato: keyrota-rotation.schema.json (draft 2020-12). Ele verifica campos, tipos, intervalos, queue sem offGcd e a forma das strings de condição. Ele não verifica se n e os nomes são únicos, se os nomes usados nas condições existem nem o limite de 16 depois de dividir as strings em and : isso a KeyRota faz ao carregar.
Para validar um arquivo:
npx ajv-cli validate --spec=draft2020 -s keyrota-rotation.schema.json -d my-rotation.json
Não coloque um campo "$schema" em um arquivo de rotação: a KeyRota o trata como um campo extra.