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.
{
"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#
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
format | chaîne | oui | — | Toujours "keyrota-rotation". |
version | entier | oui | — | Toujours 1. Une version plus récente est refusée : « mettez-la à jour ». |
title | chaîne | non | "" | Nom de la rotation : la première ligne du texte, le nom dans le journal. Sans guillemets doubles. |
specID | entier de 0 à 100000 | non | 0 | Spécialisation WoW, 0 = toutes. Nécessaire pour le profil Better Assistant. |
ignoreMainIcon | true / false | non | true | Activé : presser uniquement selon les règles. Désactivé : quand aucune règle ne correspond, presser la recommandation du jeu. |
enemies | objet | non | {"range": 8, "combatOnly": true} | Le compteur d’ennemis pour la condition enemies. |
notes | chaîne ou liste de chaînes | non | [] | Description : lignes # en haut du texte. |
resources | liste de chaînes et de null | non | [] | Noms de resource1…N, dans l’ordre. |
auras | liste | non | [] | Auras buff1…12. |
slots | liste | non | [] | Emplacements slot1…12. |
rules | liste | non | [] | Règles par ordre de priorité. |
footer | chaîne ou liste de chaînes | non | [] | 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 »).
| Classe | Spécialisation | specID | Ressources de la spécialisation (resource3…) |
|---|---|---|---|
| Guerrier | Armes | 71 | Rage |
| Guerrier | Fureur | 72 | Rage |
| Guerrier | Protection | 73 | Rage |
| Paladin | Sacré | 65 | Mana, Holy_Power |
| Paladin | Protection | 66 | Mana, Holy_Power |
| Paladin | Vindicte | 70 | Mana, Holy_Power |
| Chasseur | Maîtrise des bêtes | 253 | Focus |
| Chasseur | Précision | 254 | Focus |
| Chasseur | Survie | 255 | Focus |
| Voleur | Assassinat | 259 | Energy, Combo_Points |
| Voleur | Hors-la-loi | 260 | Energy, Combo_Points |
| Voleur | Finesse | 261 | Energy, Combo_Points |
| Prêtre | Discipline | 256 | Mana, Insanity |
| Prêtre | Sacré | 257 | Mana, Insanity |
| Prêtre | Ombre | 258 | Mana, Insanity |
| Chevalier de la mort | Sang | 250 | Runes, Runic_Power |
| Chevalier de la mort | Givre | 251 | Runes, Runic_Power |
| Chevalier de la mort | Impie | 252 | Runes, Runic_Power |
| Chaman | Élémentaire | 262 | Mana, Maelstrom |
| Chaman | Amélioration | 263 | Mana, Maelstrom |
| Chaman | Restauration | 264 | Mana, Maelstrom |
| Mage | Arcanes | 62 | Mana, Arcane_Charges |
| Mage | Feu | 63 | Mana, Arcane_Charges |
| Mage | Givre | 64 | Mana, Arcane_Charges |
| Démoniste | Affliction | 265 | Mana, Soul_Shards |
| Démoniste | Démonologie | 266 | Mana, Soul_Shards |
| Démoniste | Destruction | 267 | Mana, Soul_Shards |
| Moine | Maître brasseur | 268 | Energy, Stagger |
| Moine | Tisse-brume | 270 | Mana |
| Moine | Marche-vent | 269 | Energy, Chi |
| Druide | Équilibre | 102 | Mana, Astral_Power |
| Druide | Farouche | 103 | Energy, Combo_Points |
| Druide | Gardien | 104 | Rage |
| Druide | Restauration | 105 | Mana, Astral_Power |
| Chasseur de démons | Dévastation | 577 | Fury |
| Chasseur de démons | Vengeance | 581 | Fury |
| Chasseur de démons | Dévoration | 1480 | Fury |
| Évocateur | Dévastation | 1467 | Mana, Essence |
| Évocateur | Préservation | 1468 | Mana, Essence |
| Évocateur | Augmentation | 1473 | Mana, 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#
"enemies": {"range": 8, "combatOnly": true}
| Champ | Type | Par défaut | Description |
|---|---|---|---|
range | entier de 1 à 100 | 8 | Le rayon du compteur d’ennemis, en mètres. |
combatOnly | true / false | true | Ne 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.
"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 :
resource1est la vie du joueur,resource2la 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,resource3est l’énergie etresource4les points de combo.
"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.
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
n | entier de 1 à 12 | oui | — | Numéro de l’aura (buffN). Chaque numéro une seule fois. |
alias | chaîne | non | tiré de label | Le nom dans les conditions. Voir Noms. |
label | chaîne | non | "" | Nom affiché. Sans guillemets doubles ". Pratique avec l’ID entre crochets : "Garrot sur la cible [703]". |
spell | entier de 0 à 100000000 | non | 0 | L’ID de l’aura sur Wowhead. 0 = non défini : l’aura ne figurera pas dans le profil Better Assistant et restera inconnue. |
note | chaîne | non | "" | Un commentaire en fin de ligne de déclaration. |
"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.
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
n | entier de 1 à 12 | oui | — | Numéro de l’emplacement (slotN). |
alias | chaîne | non | tiré de label | Le nom dans les règles et les conditions. |
label | chaîne | non | "" | Le nom du sort. Sans guillemets doubles ". |
spell | entier de 0 à 100000000 | non | 0 | L’ID du sort sur Wowhead. Better Assistant s’en sert pour placer le sort dans l’emplacement. |
note | chaîne | non | "" | Un commentaire en fin de ligne de déclaration. |
show | "target" / "combat" | non | "target" | Quand Better Assistant affiche l’emplacement. |
manual | true / false | non | false | Indicateur M. |
channel | true / false | non | false | Indicateur C. |
offGcd | true / false | non | false | Indicateur O. |
queue | true / false | non | false | Indicateur 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.
| Indicateurs | En JSON | Quand l’emplacement est pressé | Exemple |
|---|---|---|---|
| aucun | tous à false | Dans la fenêtre de file d’attente, à la fin du GCD : le sort part dès la fin du GCD. | Estropier, Envenimer |
| M | "manual": true | Jamais. 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": true | Comme 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": true | Immédiatement, même en plein GCD. | Osselets relancés (381989) |
| O + Q | "offGcd": true, "queue": true | Hors 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": true | Une canalisation qui démarre hors GCD : immédiatement, puis plus rien jusqu’à la fin de la canalisation. | Rare |
| C + O + Q | les trois | Pareil, dans la fenêtre de file d’attente. | Rare |
| Q sans O | "queue": true | Erreur : « 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.
"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.
| Champ | Type | Obligatoire | Par défaut | Description |
|---|---|---|---|---|
use | chaîne | oui | — | L’emplacement à presser : son alias ou slotN. |
name | chaîne | non | "" | Le nom de l’action, affiché dans le journal. Dans le texte, c’est le commentaire de la ligne use. |
note | chaîne ou liste de chaînes | non | [] | Des notes au-dessus de la règle (lignes # avant use). |
when | liste de groupes | non | [] | Groupes OU. Vide ou absent : une règle sans conditions, pressée dès que le sort peut être utilisé. |
when : groupes et conditions#
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
all | liste de chaînes non vide | oui | Les conditions du groupe, toutes doivent être remplies (ET). |
comment | chaîne | non | Le commentaire du groupe (dans le texte, à la fin de sa ligne). |
{
"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 chiffres0–9et_. 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 nonFan-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 typebuffN,slotN,resourceN. - Les mots-clés s’écrivent uniquement en minuscules :
use,or,.up.Use,ORet.UPsont 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ù | Obligatoire | Valeurs par défaut |
|---|---|---|
| Fichier | format, version | title "", specID 0, ignoreMainIcon true, enemies {"range": 8, "combatOnly": true}, listes vides |
| Aura | n | alias tiré de label, label "", spell 0 |
| Emplacement | n | show "target", tous les indicateurs à false, spell 0 |
| Règle | use | name "", note [], when [] (sans conditions) |
| Groupe | all (non vide) | comment "" |
Limites#
| Élément | Limite |
|---|---|
| Auras | 12 (n de 1 à 12) |
| Emplacements | 12 (n de 1 à 12) |
| Groupes OU dans une règle | 16 |
| Conditions ET dans un groupe | 16 |
| Règles | illimité |
| Nombre dans une condition | entier de 0 à 100 |
enemies.range | de 1 à 100 |
spell | de 0 à 100000000 |
specID | de 0 à 100000 |
| Ressources | jusqu’à 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 :
| Message | Cause |
|---|---|
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 » attendu | Une autre valeur de format. |
version: version 1 requise | Pas 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..12 | n hors de la plage. |
slots[3]: le numéro 4 est déjà pris | Deux emplacements (ou deux auras) avec le même n. |
slots[1].show: « target » ou « combat » attendu | Une autre valeur de show. |
slots[0]: queue uniquement avec offGcd | queue: 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 requise | Un groupe vide ou sans all. |
rules[0].when[0].all[2]: condition vide ou contenant # ou un saut de ligne | Une chaîne de condition vide, ou contenant #. |
….spell: entier attendu | Mauvais 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) :
| Code | Exemple de message | Cause |
|---|---|---|
unknown_ref | nom inconnu Foo | Aucune aura, aucun emplacement ni aucune ressource ne porte ce nom. |
unknown_ref | resource5 non déclaré | La ressource n’est pas déclarée dans resources. |
wrong_kind | Garrote est de type slot, attendu : buff | Une propriété d’aura sur un emplacement (Garrote.up), ou l’inverse. |
bad_condition | impossible 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 target | Seule la cible a une distance. |
value_range | valeur 120 hors de 0..100 | Un 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 == 1 | Une option se compare uniquement avec == et 0 ou 1. |
bad_alias | nom non valide Fan-of-Knives | Des caractères non autorisés dans un nom. |
reserved_alias | le nom cd est réservé | Un nom réservé. |
duplicate_alias | le nom Garrote est déjà déclaré | Deux auras, emplacements ou ressources avec le même nom. |
index_range | buff13: numéro hors de 1..12 | Une référence à un numéro supérieur à 12. |
too_many_groups | plus de 16 groupes OR | Plus de 16 groupes dans une règle. |
too_many_conditions | 17 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.
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,orou une ligne de conditions. Sinon, c’est une erreurstray_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/slotNet en début des lignes de conditions.
Déclarations#
Uniquement avant le premier use :
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#
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 whenouvre 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 motor. - Une règle sans ligne de conditions n’a pas de conditions.
- Deux lignes de conditions consécutives sans
orprovoquent une erreursplit_group;orau début, à la fin ou deux fois de suite provoqueempty_group.
Texte et JSON : correspondance#
| Dans le texte | En JSON |
|---|---|
rotation "…" | title |
Lignes # … avant le premier use | notes |
Un commentaire en fin de ligne buffN / slotN | Le 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 use | Le name de la règle |
| Un commentaire en fin de ligne de conditions | Le comment du groupe |
Lignes # … après la dernière règle | footer |
| — (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
.txtavec 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é selonshow. 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.rangeetenemies.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 :
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.