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

JSON de rotation

Mis à jour le 18/10/2026

Le JSON est la description complète d’une rotation avancée : tout ce que contient le texte KRC, plus les ID de sort, les indicateurs d’emplacement et les réglages du profil. L’éditeur l’affiche sur la page Texte et JSON, et KeyRota l’accepte sous forme de fichier (Nouveau — Depuis un fichier…, Importer). Le format s’appelle keyrota-rotation, version 1. Un JSON Schema permet de le vérifier.

Fichier d’exemple#

La plus courte rotation utile : Rupture à 5 points de combo ou plus quand elle n’est pas sur la cible, sinon Estropier.

minimal.json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Assassinat : minimum",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [{"n": 1, "alias": "Rupture_DoT", "label": "Rupture sur la cible [1943]", "spell": 1943}],
  "slots": [
    {"n": 2, "alias": "Rupture", "label": "Rupture", "spell": 1943},
    {"n": 4, "alias": "Mutilate", "label": "Estropier", "spell": 1329}
  ],
  "rules": [
    {
      "use": "Rupture",
      "name": "Rupture",
      "when": [
        {
          "all": ["Combo_Points >= 70", "Rupture_DoT.down"],
          "comment": "5+ points de combo, pas de saignement"
        }
      ]
    },
    {"use": "Mutilate", "name": "Estropier"}
  ]
}

Tout ce que le fichier omet prend sa valeur par défaut : les emplacements s’affichent Avec une cible et n’ont aucun indicateur, le compteur d’ennemis porte à 8 mètres et ne compte que les ennemis en combat. Une règle sans when est toujours remplie.

Champs de premier niveau#

ChampTypeObligatoirePar défautDescription
formatchaîneoui—Toujours "keyrota-rotation".
versionentieroui—Toujours 1. Une version plus récente est refusée : « mettez-la à jour ».
titlechaînenon""Nom de la rotation : la première ligne du texte, le nom dans le journal. Sans guillemets doubles.
specIDentier de 0 à 100000non0Spécialisation WoW, 0 = toutes. Nécessaire pour le profil Better Assistant.
ignoreMainIcontrue / falsenontrueActivé : presser uniquement selon les règles. Désactivé : quand aucune règle ne correspond, presser la recommandation du jeu.
enemiesobjetnon{"range": 8, "combatOnly": true}Le compteur d’ennemis pour la condition enemies.
noteschaîne ou liste de chaînesnon[]Description : lignes # en haut du texte.
resourcesliste de chaînes et de nullnon[]Noms de resource1…N, dans l’ordre.
auraslistenon[]Auras buff1…12.
slotslistenon[]Emplacements slot1…12.
ruleslistenon[]Règles par ordre de priorité.
footerchaîne ou liste de chaînesnon[]Commentaires après la dernière règle.

Tout autre champ est une erreur, « champ en trop » : les fautes de frappe ne passent pas inaperçues. N’ajoutez donc pas "$schema" au fichier ; associez le schéma dans votre éditeur ou votre validateur.

Presque partout, null peut remplacer une valeur ; il a le même effet que l’absence du champ.

format et version#

"format": "keyrota-rotation" et "version": 1 sont obligatoires. Si version est supérieur à 1, KeyRota refuse le fichier : « la version 2 est plus récente que ce que comprend cette KeyRota : mettez-la à jour ». Sans version : « version 1 requise ».

title#

Une chaîne sans guillemets doubles ". Les sauts de ligne deviennent des espaces. Dans le texte KRC, c’est rotation "…". C’est un bon endroit pour la version : "Assassinat v1.3".

specID#

L’ID de spécialisation du jeu. Il détermine les ressources de la rotation (lors de sa création dans l’éditeur) ainsi que la classe et la spécialisation du profil Better Assistant. 0 signifie n’importe quelle spécialisation : la rotation fonctionne, mais le profil Better Assistant ne peut pas être créé (« Choisissez une spécialisation : le profil Better Assistant en a besoin »).

ClasseSpécialisationspecIDRessources de la spécialisation (resource3…)
GuerrierArmes71Rage
GuerrierFureur72Rage
GuerrierProtection73Rage
PaladinSacré65Mana, Holy_Power
PaladinProtection66Mana, Holy_Power
PaladinVindicte70Mana, Holy_Power
ChasseurMaîtrise des bêtes253Focus
ChasseurPrécision254Focus
ChasseurSurvie255Focus
VoleurAssassinat259Energy, Combo_Points
VoleurHors-la-loi260Energy, Combo_Points
VoleurFinesse261Energy, Combo_Points
PrêtreDiscipline256Mana, Insanity
PrêtreSacré257Mana, Insanity
PrêtreOmbre258Mana, Insanity
Chevalier de la mortSang250Runes, Runic_Power
Chevalier de la mortGivre251Runes, Runic_Power
Chevalier de la mortImpie252Runes, Runic_Power
ChamanÉlémentaire262Mana, Maelstrom
ChamanAmélioration263Mana, Maelstrom
ChamanRestauration264Mana, Maelstrom
MageArcanes62Mana, Arcane_Charges
MageFeu63Mana, Arcane_Charges
MageGivre64Mana, Arcane_Charges
DémonisteAffliction265Mana, Soul_Shards
DémonisteDémonologie266Mana, Soul_Shards
DémonisteDestruction267Mana, Soul_Shards
MoineMaître brasseur268Energy, Stagger
MoineTisse-brume270Mana
MoineMarche-vent269Energy, Chi
DruideÉquilibre102Mana, Astral_Power
DruideFarouche103Energy, Combo_Points
DruideGardien104Rage
DruideRestauration105Mana, Astral_Power
Chasseur de démonsDévastation577Fury
Chasseur de démonsVengeance581Fury
Chasseur de démonsDévoration1480Fury
ÉvocateurDévastation1467Mana, Essence
ÉvocateurPréservation1468Mana, Essence
ÉvocateurAugmentation1473Mana, Essence

ignoreMainIcon#

true (par défaut) : KeyRota presse uniquement selon les règles ; quand aucune ne correspond, elle attend. false : elle presse alors la recommandation du jeu, comme le profil Blizzard. La recommandation est le dernier recours après toutes les règles ; elle ne devance jamais une règle.

enemies#

JSON
"enemies": {"range": 8, "combatOnly": true}
ChampTypePar défautDescription
rangeentier de 1 à 1008Le rayon du compteur d’ennemis, en mètres.
combatOnlytrue / falsetrueNe compter que les ennemis déjà en combat.

La condition enemies lit ce compteur (voir Ennemis à proximité). Dans l’éditeur, ce sont « Rayon du compteur d’ennemis, mètres » et « Ennemis en combat uniquement » sur la page Général. Ces valeurs sont aussi reportées dans le profil Better Assistant.

notes et footer#

La description de la rotation (notes) et les commentaires après la dernière règle (footer). Une liste de chaînes, ou une seule chaîne avec \n. Une chaîne vide "" correspond à une ligne vide dans le texte. Les lignes vides aux extrémités sont supprimées.

JSON
"notes": ["D’après un guide et les meilleurs logs, patch 12.1", "", "v1.1 : Envenimer plus tôt sur 4+ cibles"]

Dans le texte KRC, ce sont des lignes # … placées avant les déclarations. Elles n’influent pas sur le fonctionnement de la rotation.

resources#

Les noms des ressources, dans l’ordre : le premier élément est resource1, le deuxième resource2, et ainsi de suite. C’est le numéro qui détermine la ressource ; le nom sert seulement à l’écrire dans les conditions :

  • resource1 est la vie du joueur, resource2 la vie de la cible ;
  • à partir de resource3, ce sont les ressources de la spécialisation, dans l’ordre du tableau des specID : pour un voleur, resource3 est l’énergie et resource4 les points de combo.
JSON
"resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"]

Utilisez les noms standard du tableau : l’éditeur les affiche en clair (« Vie du joueur », « Énergie »), et les autres joueurs comme les agents IA comprennent tout de suite les conditions. null saute un numéro : ["PlayerHP", null, "Energy"] ne déclare que resource1 et resource3. Une ressource non déclarée ne peut pas être lue : « resource2 non déclaré ».

Toutes les ressources sont des pourcentages du maximum, de 0 à 100. Pour convertir points de combo, énergie et runes en pourcentages, voir Ressources dans Conditions.

auras#

Les auras sont vos améliorations et vos affaiblissements sur la cible. L’aura n de la rotation correspond à l’aura n de la liste Better Assistant.

ChampTypeObligatoirePar défautDescription
nentier de 1 à 12oui—Numéro de l’aura (buffN). Chaque numéro une seule fois.
aliaschaînenontiré de labelLe nom dans les conditions. Voir Noms.
labelchaînenon""Nom affiché. Sans guillemets doubles ". Pratique avec l’ID entre crochets : "Garrot sur la cible [703]".
spellentier de 0 à 100000000non0L’ID de l’aura sur Wowhead. 0 = non défini : l’aura ne figurera pas dans le profil Better Assistant et restera inconnue.
notechaînenon""Un commentaire en fin de ligne de déclaration.
JSON
"auras": [
  {"n": 1, "alias": "Garrote_DoT", "label": "Garrot sur la cible [703]", "spell": 703},
  {"n": 2, "alias": "Rupture_DoT", "label": "Rupture sur la cible [1943]", "spell": 1943}
]

L’ordre dans la liste n’a pas d’importance, seul n compte. Les numéros peuvent comporter des trous, mais pour le profil Better Assistant, les auras qui ont un ID doivent se suivre à partir de la première.

slots#

Les emplacements sont les boutons de la rotation. L’emplacement n de la rotation correspond à l’emplacement n dans Better Assistant.

ChampTypeObligatoirePar défautDescription
nentier de 1 à 12oui—Numéro de l’emplacement (slotN).
aliaschaînenontiré de labelLe nom dans les règles et les conditions.
labelchaînenon""Le nom du sort. Sans guillemets doubles ".
spellentier de 0 à 100000000non0L’ID du sort sur Wowhead. Better Assistant s’en sert pour placer le sort dans l’emplacement.
notechaînenon""Un commentaire en fin de ligne de déclaration.
show"target" / "combat"non"target"Quand Better Assistant affiche l’emplacement.
manualtrue / falsenonfalseIndicateur M.
channeltrue / falsenonfalseIndicateur C.
offGcdtrue / falsenonfalseIndicateur O.
queuetrue / falsenonfalseIndicateur Q, uniquement avec offGcd.

show#

  • "target" : l’emplacement est affiché quand vous avez une cible. C’est le cas de presque toutes les attaques.
  • "combat" : l’emplacement est affiché en combat, même sans cible. Pour les soins et les techniques défensives : Fiole cramoisie doit fonctionner même sans cible.

Un emplacement n’est prêt que lorsque Better Assistant l’affiche. Un emplacement "target" sans cible n’est pas prêt, et ses règles sont ignorées.

Indicateurs d’emplacement#

Les indicateurs précisent comment presser un emplacement une fois sa règle choisie. Dans l’éditeur, ce sont les interrupteurs Comment presser.

IndicateursEn JSONQuand l’emplacement est presséExemple
aucuntous à falseDans la fenêtre de file d’attente, à la fin du GCD : le sort part dès la fin du GCD.Estropier, Envenimer
M"manual": trueJamais. Les règles de l’emplacement sont ignorées. Si vous appuyez vous-même sur sa touche, la rotation se met en pause.Une technique que vous pressez vous-même
C"channel": trueComme un sort normal ; pendant la canalisation, rien n’est pressé. Après l’appui, l’emplacement n’est plus pressé tant que la canalisation n’a pas commencé.Série meurtrière (51690)
O"offGcd": trueImmédiatement, même en plein GCD.Osselets relancés (381989)
O + Q"offGcd": true, "queue": trueHors GCD, mais seulement dans la fenêtre de file d’attente à la fin du GCD.La macro Poussée d'adrénaline + Série meurtrière (13750) ; Disparition (1856) après Plaie des rois
C + O"channel": true, "offGcd": trueUne canalisation qui démarre hors GCD : immédiatement, puis plus rien jusqu’à la fin de la canalisation.Rare
C + O + Qles troisPareil, dans la fenêtre de file d’attente.Rare
Q sans O"queue": trueErreur : « queue uniquement avec offGcd ».—
M + autres"manual": true, …M l’emporte : l’emplacement n’est pas pressé, les autres indicateurs n’ont pas d’effet.—

Pourquoi O + Q et pas seulement O : un bouton avec O seul est pressé immédiatement, en plein GCD, avant que le coup précédent n’ait abouti. Avec O seul, Disparition après Plaie des rois serait pressée avant l’arrivée des points de combo de Plaie des rois, et la règle de Disparition (Combo_Points < 65) vérifierait l’ancienne valeur. Avec Q, le bouton attend la fin du GCD.

Priorité stricte : une règle hors GCD placée plus bas dans la liste ne devance pas une règle plus haute qui attend le GCD.

JSON
"slots": [
  {"n": 1, "alias": "Adrenaline_Rush", "label": "Poussée d'adrénaline (macro avec Série meurtrière)", "spell": 13750, "offGcd": true, "queue": true},
  {"n": 4, "alias": "Keep_It_Rolling", "label": "Osselets relancés", "spell": 381989, "offGcd": true},
  {"n": 8, "alias": "Killing_Spree", "label": "Série meurtrière", "spell": 51690, "channel": true},
  {"n": 11, "alias": "Crimson_Vial", "label": "Fiole cramoisie", "spell": 185311, "show": "combat"}
]

rules#

Les règles par ordre de priorité : la première de la liste est vérifiée en premier.

ChampTypeObligatoirePar défautDescription
usechaîneoui—L’emplacement à presser : son alias ou slotN.
namechaînenon""Le nom de l’action, affiché dans le journal. Dans le texte, c’est le commentaire de la ligne use.
notechaîne ou liste de chaînesnon[]Des notes au-dessus de la règle (lignes # avant use).
whenliste de groupesnon[]Groupes OU. Vide ou absent : une règle sans conditions, pressée dès que le sort peut être utilisé.

when : groupes et conditions#

ChampTypeObligatoireDescription
allliste de chaînes non videouiLes conditions du groupe, toutes doivent être remplies (ET).
commentchaînenonLe commentaire du groupe (dans le texte, à la fin de sa ligne).
JSON
{
  "use": "Garrote",
  "name": "Garrot",
  "note": ["Renouveler dans la fenêtre de pandémie"],
  "when": [
    {"all": ["Garrote_DoT.down"], "comment": "pas de DoT"},
    {"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "30 % restant ou moins"}
  ]
}

Un même emplacement peut figurer dans plusieurs règles : par exemple, Garrot depuis le Camouflage en haut de la liste et l’entretien normal de Garrot plus bas.

Les conditions en JSON#

Chaque condition est une chaîne en syntaxe KRC : Garrote_DoT.down, Rupture_DoT.duration <= 25, Kingsbane.cd <= 3, Combo_Points >= 70, enemies >= 2, target.distance <= 8, cd == 1. La liste complète se trouve dans Conditions.

  • Faites référence par nom (Garrote_DoT) ou par numéro : buff1, slot3, resource4.
  • and à l’intérieur d’une chaîne la divise en deux conditions : "Combo_Points >= 70 and Energy >= 70" compte pour deux conditions, et les deux entrent dans la limite de 16.
  • Pas de # ni de saut de ligne dans une chaîne.
  • C’est le moteur de KeyRota lui-même qui lit les conditions : le JSON et le texte ont donc toujours le même sens.

Noms#

Un nom (alias) est la façon dont on désigne les auras, les emplacements et les ressources dans les conditions et dans use.

  • Le premier caractère est une lettre (de n’importe quel alphabet) ou _ ; ensuite viennent des lettres, des chiffres 0–9 et _. Les lettres accentuées et le cyrillique sont acceptés ; les espaces, les traits d’union et les points ne le sont pas : Fan_of_Knives, et non Fan-of-Knives.
  • Un nom est unique parmi l’ensemble des auras, des emplacements et des ressources.
  • Noms réservés : use, when, and, or, rotation, gcd, enemies, target, aoe, st, cd, defensives, ground_spells, movement, ainsi que les noms du type buffN, slotN, resourceN.
  • Les mots-clés s’écrivent uniquement en minuscules : use, or, .up. Use, OR et .UP sont des erreurs.

Un nom tiré du libellé. Sans alias, KeyRota en crée un à partir de label : les crochets et leur contenu sont supprimés, les lettres et les chiffres sont conservés, tout le reste devient _. Par exemple, "Garrot sur la cible [703]" devient Garrot_sur_la_cible. Un nom vide ou inutilisable devient Aura_N ou Slot_N ; un nom déjà pris reçoit _2, _3. Si une règle fait référence à un buffN ou un slotN absent des listes, ils sont déclarés automatiquement sous les noms Aura_N et Slot_N.

Champs obligatoires et valeurs par défaut#

OùObligatoireValeurs par défaut
Fichierformat, versiontitle "", specID 0, ignoreMainIcon true, enemies {"range": 8, "combatOnly": true}, listes vides
Auranalias tiré de label, label "", spell 0
Emplacementnshow "target", tous les indicateurs à false, spell 0
Règleusename "", note [], when [] (sans conditions)
Groupeall (non vide)comment ""

Limites#

ÉlémentLimite
Auras12 (n de 1 à 12)
Emplacements12 (n de 1 à 12)
Groupes OU dans une règle16
Conditions ET dans un groupe16
Règlesillimité
Nombre dans une conditionentier de 0 à 100
enemies.rangede 1 à 100
spellde 0 à 100000000
specIDde 0 à 100000
Ressourcesjusqu’à 99

Exactement 16 groupes de 16 conditions, c’est accepté ; 17, c’est une erreur.

Erreurs#

Une rotation contenant une erreur ne se charge pas du tout : il n’y a pas d’exécution partielle. Une erreur indique toujours l’endroit. En JSON, c’est un chemin : rules[3].when[1]: nom inconnu Foo (en comptant à partir de zéro). Dans l’éditeur : « Règle 4, groupe 2 : nom inconnu Foo » (en comptant à partir de un). Dans le texte KRC : un numéro de ligne.

Structure du JSON :

MessageCause
champ en trop « offgcd »Un champ mal orthographié ou inconnu (la casse compte : offGcd).
champ manquant « format »Un champ obligatoire est absent.
format: « keyrota-rotation » attenduUne autre valeur de format.
version: version 1 requisePas de version, ou une valeur inférieure à 1.
slots[0]: numéro n manquant (1–12)Un emplacement ou une aura sans n.
slots[2].n: nombre hors de 1..12n hors de la plage.
slots[3]: le numéro 4 est déjà prisDeux emplacements (ou deux auras) avec le même n.
slots[1].show: « target » ou « combat » attenduUne autre valeur de show.
slots[0]: queue uniquement avec offGcdqueue: true sans offGcd: true.
rules[2].use: pas d’emplacement « Garotte »use fait référence à un emplacement qui n’existe pas.
rules[0].when[1].all: liste de conditions non vide requiseUn groupe vide ou sans all.
rules[0].when[0].all[2]: condition vide ou contenant # ou un saut de ligneUne chaîne de condition vide, ou contenant #.
….spell: entier attenduMauvais type : une chaîne au lieu d’un nombre, true au lieu d’un nombre, etc.

Conditions et déclarations (les mêmes que dans le texte KRC) :

CodeExemple de messageCause
unknown_refnom inconnu FooAucune aura, aucun emplacement ni aucune ressource ne porte ce nom.
unknown_refresource5 non déclaréLa ressource n’est pas déclarée dans resources.
wrong_kindGarrote est de type slot, attendu : buffUne propriété d’aura sur un emplacement (Garrote.up), ou l’inverse.
bad_conditionimpossible d’analyser la condition "Energy => 50"Une faute de frappe dans la condition ou l’opérateur.
bad_condition"Garrote.distance <= 8" : distance n’existe que pour targetSeule la cible a une distance.
value_rangevaleur 120 hors de 0..100Un nombre supérieur à 100. Il n’existe ni nombres négatifs ni nombres décimaux.
toggle_value"cd >= 1" : une option n’accepte que == 0 ou == 1Une option se compare uniquement avec == et 0 ou 1.
bad_aliasnom non valide Fan-of-KnivesDes caractères non autorisés dans un nom.
reserved_aliasle nom cd est réservéUn nom réservé.
duplicate_aliasle nom Garrote est déjà déclaréDeux auras, emplacements ou ressources avec le même nom.
index_rangebuff13: numéro hors de 1..12Une référence à un numéro supérieur à 12.
too_many_groupsplus de 16 groupes ORPlus de 16 groupes dans une règle.
too_many_conditions17 conditions dans le groupe (16 maximum)Plus de 16 conditions dans un groupe.

L’éditeur signale aussi « le groupe n’a aucune condition » (un groupe vide), « aucun emplacement choisi » et « guillemets interdits dans le nom ».

Texte KRC#

Le texte KRC est la même rotation sous forme de lignes. La page Texte et JSON l’affiche, et vous pouvez le conserver dans un fichier .txt. Le texte et le JSON se convertissent l’un en l’autre sans perte de sens.

Texte KRC
rotation "Assassinat : minimum"

buff1	Rupture_DoT = "Rupture sur la cible [1943]"
slot2	Rupture = "Rupture"
slot4	Mutilate = "Estropier"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Rupture when  # Rupture
	Combo_Points >= 70 and Rupture_DoT.down  # 5+ points de combo, pas de saignement

use Mutilate when  # Estropier

Lignes#

  • # en dehors des guillemets doubles commence un commentaire jusqu’à la fin de la ligne. À l’intérieur d’un "libellé", # est un caractère ordinaire.
  • Les lignes vides et les lignes ne contenant qu’un commentaire sont ignorées : c’est ainsi qu’on écrit les descriptions et les séparateurs.
  • Toute autre ligne est une déclaration, use, or ou une ligne de conditions. Sinon, c’est une erreur stray_line : « ligne hors règle : "…" (commencez le texte libre par #) ».
  • Entre les éléments, n’importe quels espaces et tabulations. La forme canonique utilise une tabulation après buffN/slotN et en début des lignes de conditions.

Déclarations#

Uniquement avant le premier use :

Texte KRC
rotation "Nom"                                       # facultatif, au plus une fois
buff1	Garrote_DoT = "Garrot sur la cible [703]"   # aura 1
slot1	Garrote = "Garrot"                          # emplacement 1
resource1	PlayerHP                               # ressource 1

buffN et slotN vont de 1 à 12, resourceN de 1 à 99. Le libellé entre guillemets peut être vide : slot5 Filler = "". Une déclaration placée après le premier use est une erreur late_declaration.

Règles#

Texte KRC
use Rupture when  # Rupture
	Combo_Points >= 70 and Rupture_DoT.down  # pas de DoT
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # pandémie
  • use Emplacement when ouvre une règle ; un commentaire sur cette ligne donne le nom de l’action.
  • Chaque ligne de conditions forme un groupe (conditions reliées par and). Les groupes sont séparés par une ligne contenant le seul mot or.
  • Une règle sans ligne de conditions n’a pas de conditions.
  • Deux lignes de conditions consécutives sans or provoquent une erreur split_group ; or au début, à la fin ou deux fois de suite provoque empty_group.

Texte et JSON : correspondance#

Dans le texteEn JSON
rotation "…"title
Lignes # … avant le premier usenotes
Un commentaire en fin de ligne buffN / slotNLe note de l’aura / de l’emplacement
Lignes # … juste avant use (et entre les groupes de la règle)Le note de la règle
Un commentaire sur la ligne useLe name de la règle
Un commentaire en fin de ligne de conditionsLe comment du groupe
Lignes # … après la dernière règlefooter
— (absent du texte)specID, ignoreMainIcon, enemies, spell, show, indicateurs

Les lignes vides aux extrémités des blocs de commentaires sont supprimées ; à l’intérieur, elles sont conservées sous forme de "".

Importation et stockage#

  • KeyRota conserve la rotation à l’intérieur du profil. Exporter, dans la fenêtre principale, enregistre le profil KeyRota (JSON) avec sa rotation ; Importer accepte un profil KeyRota et un JSON de rotation seul.
  • Nouveau — Depuis un fichier… accepte un .txt avec du texte KRC, un JSON de rotation et un profil KeyRota ; Nouveau — Depuis le presse-papiers accepte les mêmes contenus depuis le presse-papiers.
  • Dans l’éditeur : Texte et JSON — Coller ou Ouvrir… remplacent la rotation ; les emplacements et les auras de mêmes numéros conservent leurs ID, Avec une cible / En combat et leurs indicateurs si la nouvelle version n’en contient pas.
  • Une rotation en texte (sans JSON) reprend les ID et la visibilité des emplacements du profil Better Assistant déjà enregistré dans le profil KeyRota, et les ID des auras également à partir des marques [703] de leurs libellés.

Le profil Better Assistant à partir du JSON#

« Créer depuis la rotation », dans l’éditeur, produit la chaîne du profil Better Assistant à partir du JSON de la rotation :

  • 12 emplacements : l’emplacement N est slots[n = N].spell, affiché selon show. Un emplacement sans ID reste vide.
  • Auras dans l’ordre, à partir de la première : auras[n = 1].spell, auras[n = 2].spell… Une aura sans ID au milieu est une erreur.
  • Classe et spécialisation tirées de specID.
  • Compteur d’ennemis tiré de enemies.range et enemies.combatOnly.
  • Si le profil KeyRota contient déjà un profil Better Assistant de la même spécialisation, ses autres réglages ainsi que les emplacements et les auras correspondants sont conservés.

Dans le jeu : /ba — Profile — coller — Apply.

JSON Schema#

Le schéma du format : keyrota-rotation.schema.json (draft 2020-12). Il vérifie les champs, les types, les plages, queue sans offGcd et la forme des chaînes de conditions. Il ne vérifie pas l’unicité de n et des noms, l’existence des noms utilisés dans les conditions, ni la limite de 16 après le découpage des chaînes au niveau de and  : KeyRota s’en charge au chargement.

Pour vérifier un fichier :

Texte
npx ajv-cli validate --spec=draft2020 -s keyrota-rotation.schema.json -d ma-rotation.json

N’ajoutez pas de champ "$schema" dans un fichier de rotation : KeyRota le considère comme un champ en trop.