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

Rotations-JSON

Aktualisiert am 18.10.2026

Das JSON ist die vollständige Beschreibung einer erweiterten Rotation: alles, was der KRC-Text enthält, dazu Zauber-IDs, Slot-Flags und Profileinstellungen. Der Editor zeigt es auf der Seite „Text und JSON“, und KeyRota nimmt es als Datei an („Neu“ — „Aus Datei…“, „Import“). Das Format heißt keyrota-rotation, Version 1. Zur Prüfung gibt es ein JSON Schema.

Beispieldatei#

Die kürzeste sinnvolle Rotation: Blutung bei 5+ Combopunkten, wenn sie nicht auf dem Ziel ist, sonst Verstümmeln.

minimal.json
{
  "format": "keyrota-rotation",
  "version": 1,
  "title": "Meucheln: Minimum",
  "specID": 259,
  "resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"],
  "auras": [{"n": 1, "alias": "Rupture_DoT", "label": "Blutung auf dem Ziel [1943]", "spell": 1943}],
  "slots": [
    {"n": 2, "alias": "Rupture", "label": "Blutung", "spell": 1943},
    {"n": 4, "alias": "Mutilate", "label": "Verstümmeln", "spell": 1329}
  ],
  "rules": [
    {
      "use": "Rupture",
      "name": "Blutung",
      "when": [{"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "5+ Combopunkte, keine Blutung"}]
    },
    {"use": "Mutilate", "name": "Verstümmeln"}
  ]
}

Alles, was die Datei weglässt, erhält seinen Standardwert: Slots werden „Mit Ziel“ angezeigt und haben keine Flags, der Gegnerzähler hat 8 Meter Radius und zählt nur Gegner im Kampf. Eine Regel ohne when ist immer erfüllt.

Felder der obersten Ebene#

FeldTypPflichtStandardBedeutung
formatStringja—Immer "keyrota-rotation".
versionGanzzahlja—Immer 1. Eine neuere Version wird abgelehnt: „Aktualisiere KeyRota“.
titleStringnein""Name der Rotation: die erste Textzeile, der Name im Protokoll. Ohne doppelte Anführungszeichen.
specIDGanzzahl 0–100000nein0WoW-Spezialisierung, 0 = beliebig. Nötig für das Profil für Better Assistant.
ignoreMainIcontrue / falseneintrueEin: nur nach den Regeln drücken. Aus: Trifft keine Regel zu, den Vorschlag des Spiels drücken.
enemiesObjektnein{"range": 8, "combatOnly": true}Der Gegnerzähler für die Bedingung enemies.
notesString oder Liste von Stringsnein[]Beschreibung: #-Zeilen am Anfang des Textes.
resourcesListe von Strings und nullnein[]Namen von resource1…N in ihrer Reihenfolge.
aurasListenein[]Auren buff1…12.
slotsListenein[]Slots slot1…12.
rulesListenein[]Regeln in der Reihenfolge ihrer Priorität.
footerString oder Liste von Stringsnein[]Kommentare nach der letzten Regel.

Jedes andere Feld ist ein Fehler („überflüssiges Feld“): Tippfehler werden nicht stillschweigend übergangen. Füge der Datei deshalb kein "$schema" hinzu; binde das Schema in deinem Editor oder Validator ein.

Fast überall darf null anstelle eines Werts stehen; das bedeutet dasselbe wie ein weggelassenes Feld.

format und version#

"format": "keyrota-rotation" und "version": 1 sind Pflicht. Ist version größer als 1, lehnt KeyRota die Datei ab: „Version 2 ist neuer, als diese KeyRota versteht: Aktualisiere KeyRota“. Fehlt version: „Version 1 erforderlich“.

title#

Ein String ohne doppelte Anführungszeichen ". Zeilenumbrüche werden zu Leerzeichen. Im KRC-Text ist es rotation "…". Ein guter Platz für die Version: "Meucheln v1.3".

specID#

Die Spezialisierungs-ID des Spiels. Sie bestimmt die Ressourcen der Rotation (bei der Erstellung im Editor) sowie Klasse und Spezialisierung im Profil für Better Assistant. 0 bedeutet beliebige Spezialisierung: Die Rotation funktioniert, aber das Profil für Better Assistant lässt sich nicht erstellen („Wähle eine Spezialisierung: Das Profil für Better Assistant braucht sie“).

KlasseSpezialisierungspecIDRessourcen der Spezialisierung (resource3…)
KriegerWaffen71Rage
KriegerFuror72Rage
KriegerSchutz73Rage
PaladinHeilig65Mana, Holy_Power
PaladinSchutz66Mana, Holy_Power
PaladinVergeltung70Mana, Holy_Power
JägerTierherrschaft253Focus
JägerTreffsicherheit254Focus
JägerÜberleben255Focus
SchurkeMeucheln259Energy, Combo_Points
SchurkeGesetzlosigkeit260Energy, Combo_Points
SchurkeTäuschung261Energy, Combo_Points
PriesterDisziplin256Mana, Insanity
PriesterHeilig257Mana, Insanity
PriesterSchatten258Mana, Insanity
TodesritterBlut250Runes, Runic_Power
TodesritterFrost251Runes, Runic_Power
TodesritterUnheilig252Runes, Runic_Power
SchamaneElementar262Mana, Maelstrom
SchamaneVerstärkung263Mana, Maelstrom
SchamaneWiederherstellung264Mana, Maelstrom
MagierArkan62Mana, Arcane_Charges
MagierFeuer63Mana, Arcane_Charges
MagierFrost64Mana, Arcane_Charges
HexenmeisterGebrechen265Mana, Soul_Shards
HexenmeisterDämonologie266Mana, Soul_Shards
HexenmeisterZerstörung267Mana, Soul_Shards
MönchBraumeister268Energy, Stagger
MönchNebelwirker270Mana
MönchWindläufer269Energy, Chi
DruideGleichgewicht102Mana, Astral_Power
DruideWildheit103Energy, Combo_Points
DruideWächter104Rage
DruideWiederherstellung105Mana, Astral_Power
DämonenjägerVerwüstung577Fury
DämonenjägerRachsucht581Fury
DämonenjägerVerschlinger1480Fury
RuferVerheerung1467Mana, Essence
RuferBewahrung1468Mana, Essence
RuferVerstärkung1473Mana, Essence

ignoreMainIcon#

true (Standard): KeyRota drückt nur nach den Regeln; trifft keine zu, wartet KeyRota. false: Dann drückt KeyRota den Vorschlag des Spiels, wie beim Blizzard-Profil. Der Vorschlag ist der letzte Ausweg nach allen Regeln; er überholt nie eine Regel.

enemies#

JSON
"enemies": {"range": 8, "combatOnly": true}
FeldTypStandardBedeutung
rangeGanzzahl 1–1008Der Radius des Gegnerzählers in Metern.
combatOnlytrue / falsetrueNur Gegner zählen, die bereits im Kampf sind.

Die Bedingung enemies liest diesen Zähler aus (siehe Gegner in der Nähe). Im Editor sind das „Radius des Gegnerzählers, Meter“ und „Nur Gegner im Kampf“ auf der Seite „Allgemein“. Die Werte gehen auch in das Profil für Better Assistant ein.

notes und footer#

Die Beschreibung der Rotation (notes) und die Kommentare nach der letzten Regel (footer). Eine Liste von Strings oder ein einzelner String mit \n. Ein leerer String "" ist eine Leerzeile im Text. Leerzeilen am Anfang und am Ende entfallen.

JSON
"notes": ["Grundlage: ein Guide und Top-Logs, Patch 12.1", "", "v1.1: Vergiften früher bei 4+ Zielen"]

Im KRC-Text sind das # …-Zeilen vor den Deklarationen. Auf die Funktion der Rotation wirken sie sich nicht aus.

resources#

Ressourcennamen in Reihenfolge: Der erste Eintrag ist resource1, der zweite resource2 und so weiter. Die Nummer bestimmt, was die Ressource ist; der Name ist nur die Schreibweise in Bedingungen:

  • resource1 ist die Gesundheit des Spielers, resource2 die Gesundheit des Ziels;
  • ab resource3 folgen die Ressourcen der Spezialisierung in der Reihenfolge der specID-Tabelle: Beim Schurken ist resource3 Energie und resource4 Combopunkte.
JSON
"resources": ["PlayerHP", "TargetHP", "Energy", "Combo_Points"]

Verwende die Standardnamen aus der Tabelle: Der Editor zeigt sie im Klartext an („Gesundheit des Spielers“, „Energie“), und andere Menschen und KI-Agenten verstehen die Bedingungen sofort. null überspringt eine Nummer: ["PlayerHP", null, "Energy"] deklariert nur resource1 und resource3. Eine nicht deklarierte Ressource lässt sich nicht auslesen: „resource2 nicht deklariert“.

Alle Ressourcen sind Prozentwerte des Maximums, 0–100. Wie du Combopunkte, Energie und Runen in Prozent umrechnest, steht unter Ressourcen auf der Seite „Bedingungen“.

auras#

Auren sind deine Buffs und deine Debuffs auf dem Ziel. Aura n der Rotation ist Aura n in der Liste von Better Assistant.

FeldTypPflichtStandardBedeutung
nGanzzahl 1–12ja—Nummer der Aura (buffN). Jede Nummer nur einmal.
aliasStringneinaus labelDer Name in Bedingungen. Siehe Namen.
labelStringnein""Anzeigename. Ohne doppelte Anführungszeichen ". Praktisch mit der ID in eckigen Klammern: "Erdrosseln auf dem Ziel [703]".
spellGanzzahl 0–100000000nein0Die Wowhead-ID der Aura. 0 = nicht festgelegt: Die Aura fehlt im Profil für Better Assistant und ist unbekannt.
noteStringnein""Ein Kommentar am Ende der Deklarationszeile.
JSON
"auras": [
  {"n": 1, "alias": "Garrote_DoT", "label": "Erdrosseln auf dem Ziel [703]", "spell": 703},
  {"n": 2, "alias": "Rupture_DoT", "label": "Blutung auf dem Ziel [1943]", "spell": 1943}
]

Die Reihenfolge in der Liste spielt keine Rolle, n schon. Die Nummern dürfen Lücken haben, aber für das Profil für Better Assistant müssen die Auren mit IDs lückenlos ab der ersten aufeinander folgen.

slots#

Slots sind die Tasten der Rotation. Slot n der Rotation ist Slot n in Better Assistant.

FeldTypPflichtStandardBedeutung
nGanzzahl 1–12ja—Nummer des Slots (slotN).
aliasStringneinaus labelDer Name in Regeln und Bedingungen.
labelStringnein""Der Name des Zaubers. Ohne doppelte Anführungszeichen ".
spellGanzzahl 0–100000000nein0Die Wowhead-ID des Zaubers. Damit setzt Better Assistant den Zauber in den Slot.
noteStringnein""Ein Kommentar am Ende der Deklarationszeile.
show"target" / "combat"nein"target"Wann Better Assistant den Slot anzeigt.
manualtrue / falseneinfalseFlag M.
channeltrue / falseneinfalseFlag C.
offGcdtrue / falseneinfalseFlag O.
queuetrue / falseneinfalseFlag Q, nur zusammen mit offGcd.

show#

  • "target": Der Slot wird angezeigt, wenn du ein Ziel hast. Gilt für fast jeden Angriff.
  • "combat": Der Slot wird im Kampf auch ohne Ziel angezeigt. Für Heilung und Verteidigung: Blutrote Phiole muss auch ohne Ziel funktionieren.

Ein Slot ist nur bereit, wenn Better Assistant ihn anzeigt. Ein "target"-Slot ist ohne Ziel nicht bereit, und seine Regeln werden übersprungen.

Slot-Flags#

Flags legen fest, wie ein Slot gedrückt wird, sobald seine Regel ausgewählt ist. Im Editor sind das die Schalter unter „Wie gedrückt wird“.

FlagsIm JSONWie gedrückt wirdBeispiel
keinealle falseIm Warteschlangenfenster am Ende des GCD: Der Zauber wird gewirkt, sobald der GCD endet.Verstümmeln, Vergiften
M"manual": trueNie. Die Regeln des Slots werden übersprungen. Drückst du seine Taste selbst, pausiert die Rotation.Eine Fähigkeit, die du selbst drückst
C"channel": trueWie ein normaler Zauber; solange die Kanalisierung läuft, wird nichts gedrückt. Nach dem Tastendruck wird der Slot nicht erneut gedrückt, bis die Kanalisierung beginnt.Mordlust (51690)
O"offGcd": trueSofort, auch mitten im GCD.Großer Wurf (381989)
O + Q"offGcd": true, "queue": trueAußerhalb des GCD, aber nur im Warteschlangenfenster am Ende des GCD.Das Makro Adrenalinrausch + Mordlust (13750); Verschwinden (1856) nach Königsmord
C + O"channel": true, "offGcd": trueEine Kanalisierung, die außerhalb des GCD beginnt: sofort, danach nichts, bis die Kanalisierung endet.Selten
C + O + Qalle dreiDasselbe, im Warteschlangenfenster.Selten
Q ohne O"queue": trueFehler: „queue nur zusammen mit offGcd“.—
M + andere"manual": true, …M gewinnt: Der Slot wird nicht gedrückt, die anderen Flags spielen keine Rolle.—

Warum O + Q und nicht nur O: Eine Taste nur mit O wird sofort gedrückt, mitten im GCD, bevor der vorherige Schlag angekommen ist. Verschwinden nach Königsmord nur mit O würde gedrückt, bevor die Combopunkte von Königsmord eintreffen, und die Regel für Verschwinden (Combo_Points < 65) würde den alten Wert prüfen. Mit Q wartet die Taste auf das Ende des GCD.

Strikte Priorität: Eine Regel außerhalb des GCD weiter unten in der Liste überholt keine höhere Regel, die auf den GCD wartet.

JSON
"slots": [
  {"n": 1, "alias": "Adrenaline_Rush", "label": "Adrenalinrausch (Makro mit Mordlust)", "spell": 13750, "offGcd": true, "queue": true},
  {"n": 4, "alias": "Keep_It_Rolling", "label": "Großer Wurf", "spell": 381989, "offGcd": true},
  {"n": 8, "alias": "Killing_Spree", "label": "Mordlust", "spell": 51690, "channel": true},
  {"n": 11, "alias": "Crimson_Vial", "label": "Blutrote Phiole", "spell": 185311, "show": "combat"}
]

rules#

Regeln in der Reihenfolge ihrer Priorität: Die erste in der Liste wird zuerst geprüft.

FeldTypPflichtStandardBedeutung
useStringja—Der Slot, der gedrückt wird: sein alias oder slotN.
nameStringnein""Der Name der Aktion, erscheint im Protokoll. Im Text der Kommentar in der use-Zeile.
noteString oder Liste von Stringsnein[]Notizen über der Regel (#-Zeilen vor use).
whenListe von Gruppennein[]ODER-Gruppen. Leer oder fehlend: eine Regel ohne Bedingungen, die immer gedrückt wird, wenn der Zauber eingesetzt werden kann.

when: Gruppen und Bedingungen#

FeldTypPflichtBedeutung
allnicht leere Liste von StringsjaDie Bedingungen der Gruppe; alle müssen erfüllt sein (UND).
commentStringneinDer Kommentar der Gruppe (im Text am Ende ihrer Zeile).
JSON
{
  "use": "Garrote",
  "name": "Erdrosseln",
  "note": ["Im Pandemie-Fenster erneuern"],
  "when": [
    {"all": ["Garrote_DoT.down"], "comment": "kein DoT"},
    {"all": ["Garrote_DoT.up", "Garrote_DoT.duration <= 30"], "comment": "30 % oder weniger übrig"}
  ]
}

Ein Slot darf in mehreren Regeln vorkommen: zum Beispiel Erdrosseln aus der Verstohlenheit weit oben in der Liste und das normale Aufrechterhalten von Erdrosseln weiter unten.

Bedingungen im JSON#

Jede Bedingung ist ein String in KRC-Syntax: Garrote_DoT.down, Rupture_DoT.duration <= 25, Kingsbane.cd <= 3, Combo_Points >= 70, enemies >= 2, target.distance <= 8, cd == 1. Die vollständige Liste steht unter Bedingungen.

  • Verweise per Name (Garrote_DoT) oder per Nummer: buff1, slot3, resource4.
  • and innerhalb eines Strings teilt ihn in zwei Bedingungen: "Combo_Points >= 70 and Energy >= 70" sind zwei Bedingungen, und beide zählen zum Limit von 16.
  • Kein # und keine Zeilenumbrüche in einem String.
  • KeyRota liest die Bedingungen mit seiner eigenen Engine, deshalb bedeuten JSON und Text immer dasselbe.

Namen#

Ein Name (alias) ist die Bezeichnung von Auren, Slots und Ressourcen in Bedingungen und in use.

  • Das erste Zeichen ist ein Buchstabe (beliebiges Alphabet) oder _, danach folgen Buchstaben, Ziffern 0–9 und _. Umlaute und Kyrillisch sind erlaubt; Leerzeichen, Bindestriche und Punkte nicht: Fan_of_Knives, nicht Fan-of-Knives.
  • Ein Name ist unter allen Auren, Slots und Ressourcen eindeutig.
  • Reserviert sind: use, when, and, or, rotation, gcd, enemies, target, aoe, st, cd, defensives, ground_spells, movement sowie Namen wie buffN, slotN, resourceN.
  • Schlüsselwörter werden nur kleingeschrieben: use, or, .up. Use, OR und .UP sind Fehler.

Ein Name aus dem Label. Ohne alias bildet KeyRota einen Namen aus label: Eckige Klammern samt Inhalt entfallen, Buchstaben und Ziffern bleiben, alles andere wird zu _. Zum Beispiel wird aus "Erdrosseln auf dem Ziel [703]" der Name Erdrosseln_auf_dem_Ziel. Ein leerer oder unbrauchbarer Name wird zu Aura_N bzw. Slot_N; ein bereits vergebener erhält _2, _3. Verweist eine Regel auf buffN oder slotN, die in den Listen fehlen, werden sie automatisch als Aura_N und Slot_N deklariert.

Pflichtfelder und Standardwerte#

WoPflichtStandardwerte
Dateiformat, versiontitle "", specID 0, ignoreMainIcon true, enemies {"range": 8, "combatOnly": true}, leere Listen
Auranalias aus label, label "", spell 0
Slotnshow "target", alle Flags false, spell 0
Regelusename "", note [], when [] (keine Bedingungen)
Gruppeall (nicht leer)comment ""

Grenzen#

WasGrenze
Auren12 (n 1–12)
Slots12 (n 1–12)
ODER-Gruppen in einer Regel16
UND-Bedingungen in einer Gruppe16
Regelnunbegrenzt
Zahl in einer BedingungGanzzahl 0–100
enemies.range1–100
spell0–100000000
specID0–100000
Ressourcenbis zu 99

Genau 16 Gruppen mit je 16 Bedingungen sind in Ordnung; 17 sind ein Fehler.

Fehler#

Eine Rotation mit Fehler wird überhaupt nicht geladen: Eine teilweise Ausführung gibt es nicht. Ein Fehler nennt immer die Stelle. Im JSON ist das ein Pfad: rules[3].when[1]: unbekannter Name Foo (gezählt ab null). Im Editor „Regel 4, Gruppe 2: unbekannter Name Foo“ (gezählt ab eins). Im KRC-Text eine Zeilennummer.

JSON-Struktur:

MeldungUrsache
überflüssiges Feld „offgcd“Ein falsch geschriebenes oder unbekanntes Feld (Groß- und Kleinschreibung zählen: offGcd).
fehlendes Feld „format“Ein Pflichtfeld fehlt.
format: „keyrota-rotation“ erwartetEin anderer Wert für format.
version: Version 1 erforderlichKein version oder ein Wert unter 1.
slots[0]: Nummer n fehlt (1–12)Ein Slot oder eine Aura ohne n.
slots[2].n: Zahl außerhalb 1..12n außerhalb des Bereichs.
slots[3]: Nummer 4 ist bereits vergebenZwei Slots (oder zwei Auren) mit demselben n.
slots[1].show: „target“ oder „combat“ erwartetEin anderer Wert für show.
slots[0]: queue nur zusammen mit offGcdqueue: true ohne offGcd: true.
rules[2].use: kein Slot „Garotte“use verweist auf einen Slot, den es nicht gibt.
rules[0].when[1].all: nicht leere Liste von Bedingungen erforderlichEine leere Gruppe oder kein all.
rules[0].when[0].all[2]: Bedingung ist leer oder enthält # oder einen ZeilenumbruchEin leerer Bedingungs-String oder ein # darin.
….spell: Ganzzahl erwartetFalscher Typ: ein String statt einer Zahl, true statt einer Zahl und so weiter.

Bedingungen und Deklarationen (dieselben wie im KRC-Text):

CodeBeispielmeldungUrsache
unknown_refunbekannter Name FooKeine Aura, kein Slot und keine Ressource mit diesem Namen.
unknown_refresource5 nicht deklariertDie Ressource ist in resources nicht deklariert.
wrong_kindGarrote ist vom Typ slot, nötig ist buffEine Aura-Eigenschaft an einem Slot (Garrote.up) oder umgekehrt.
bad_conditionBedingung nicht erkannt: "Energy => 50"Ein Tippfehler in der Bedingung oder im Operator.
bad_condition"Garrote.distance <= 8": distance gibt es nur bei targetNur das Ziel hat eine Entfernung.
value_rangeWert 120 außerhalb 0..100Eine Zahl über 100. Negative Zahlen und Kommazahlen gibt es nicht.
toggle_value"cd >= 1": Schalter nur == 0 oder == 1Ein Schalter wird nur mit == und 0 oder 1 verglichen.
bad_aliasunzulässiger Name Fan-of-KnivesUnzulässige Zeichen in einem Namen.
reserved_aliasName cd ist reserviertEin reservierter Name.
duplicate_aliasName Garrote ist bereits deklariertZwei Auren, Slots oder Ressourcen mit demselben Namen.
index_rangebuff13: Nummer außerhalb 1..12Ein Verweis auf eine Nummer über 12.
too_many_groupsmehr als 16 OR-GruppenMehr als 16 Gruppen in einer Regel.
too_many_conditions17 Bedingungen in der Gruppe (maximal 16)Mehr als 16 Bedingungen in einer Gruppe.

Der Editor meldet außerdem „die Gruppe hat keine Bedingungen“ (eine leere Gruppe), „kein Slot gewählt“ und „keine Anführungszeichen im Namen erlaubt“.

KRC-Text#

Der KRC-Text ist dieselbe Rotation in Zeilenform. Die Seite „Text und JSON“ zeigt ihn an, und du kannst ihn als .txt-Datei aufbewahren. Text und JSON lassen sich ohne Bedeutungsverlust ineinander umwandeln.

KRC-Text
rotation "Meucheln: Minimum"

buff1	Rupture_DoT = "Blutung auf dem Ziel [1943]"
slot2	Rupture = "Blutung"
slot4	Mutilate = "Verstümmeln"
resource1	PlayerHP
resource2	TargetHP
resource3	Energy
resource4	Combo_Points

use Rupture when  # Blutung
	Combo_Points >= 70 and Rupture_DoT.down  # 5+ Combopunkte, keine Blutung

use Mutilate when  # Verstümmeln

Zeilen#

  • # außerhalb doppelter Anführungszeichen beginnt einen Kommentar bis zum Zeilenende. Innerhalb eines "label" ist # ein gewöhnliches Zeichen.
  • Leerzeilen und reine Kommentarzeilen werden übersprungen: So entstehen Beschreibungen und Trennlinien.
  • Jede andere Zeile ist eine Deklaration, use, or oder eine Bedingungszeile. Sonst ist es ein Fehler stray_line: „Zeile außerhalb einer Regel: "…" (Fließtext mit # beginnen)“.
  • Zwischen den Teilen sind beliebige Leerzeichen und Tabs erlaubt. Die kanonische Form verwendet einen Tab nach buffN/slotN und am Anfang von Bedingungszeilen.

Deklarationen#

Nur vor dem ersten use:

KRC-Text
rotation "Name"                    # optional, höchstens einmal
buff1	Garrote_DoT = "Erdrosseln auf dem Ziel [703]"   # Aura 1
slot1	Garrote = "Erdrosseln"                         # Slot 1
resource1	PlayerHP                               # Ressource 1

buffN und slotN gehen von 1 bis 12, resourceN von 1 bis 99. Das Label in Anführungszeichen darf leer sein: slot5 Filler = "". Eine Deklaration nach dem ersten use ist ein Fehler late_declaration.

Regeln#

KRC-Text
use Rupture when  # Blutung
	Combo_Points >= 70 and Rupture_DoT.down  # kein DoT
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # Pandemie
  • use Slot when beginnt eine Regel; ein Kommentar in dieser Zeile ist der Name der Aktion.
  • Jede Bedingungszeile ist eine Gruppe (Bedingungen mit and verbunden). Gruppen werden durch eine Zeile mit dem einzelnen Wort or getrennt.
  • Eine Regel ohne Bedingungszeilen hat keine Bedingungen.
  • Zwei Bedingungszeilen hintereinander ohne or sind ein Fehler split_group; or am Anfang, am Ende oder zweimal hintereinander ist empty_group.

Text und JSON: Zuordnung#

Im TextIm JSON
rotation "…"title
# …-Zeilen vor dem ersten usenotes
Ein Kommentar am Ende einer buffN- oder slotN-Zeilenote der Aura bzw. des Slots
# …-Zeilen direkt vor use (und zwischen den Gruppen der Regel)note der Regel
Ein Kommentar in der use-Zeilename der Regel
Ein Kommentar am Ende einer Bedingungszeilecomment der Gruppe
# …-Zeilen nach der letzten Regelfooter
— (nicht im Text)specID, ignoreMainIcon, enemies, spell, show, Flags

Leerzeilen am Rand von Kommentarblöcken entfallen; innerhalb bleiben sie als "" erhalten.

Import und Speicherung#

  • KeyRota speichert die Rotation im Profil. „Export“ im Hauptfenster speichert das KeyRota-Profil (JSON) mit seiner Rotation; „Import“ nimmt ein KeyRota-Profil und ein reines Rotations-JSON an.
  • „Neu“ — „Aus Datei…“ nimmt .txt mit KRC-Text, Rotations-JSON und ein KeyRota-Profil an; „Neu“ — „Aus Zwischenablage“ dasselbe aus der Zwischenablage.
  • Im Editor ersetzen „Text und JSON“ — „Einfügen“ oder „Öffnen…“ die Rotation; Slots und Auren mit denselben Nummern behalten ihre IDs, „Mit Ziel“ / „Im Kampf“ und Flags, sofern die neue Fassung keine eigenen hat.
  • Eine Textrotation (ohne JSON) übernimmt IDs und Sichtbarkeit der Slots aus dem Profil für Better Assistant, das bereits im KeyRota-Profil gespeichert ist, und die IDs der Auren zusätzlich aus Markierungen wie [703] in ihren Labels.

Das Profil für Better Assistant aus dem JSON#

„Aus Slots und Auren erstellen“ im Editor erzeugt den Profil-String für Better Assistant aus dem Rotations-JSON:

  • 12 Slots: Slot N ist slots[n = N].spell, angezeigt gemäß show. Ein Slot ohne ID bleibt leer.
  • Auren in Reihenfolge ab der ersten: auras[n = 1].spell, auras[n = 2].spell … Eine Aura ohne ID mittendrin ist ein Fehler.
  • Klasse und Spezialisierung aus specID.
  • Gegnerzähler aus enemies.range und enemies.combatOnly.
  • Enthält das KeyRota-Profil bereits ein Profil für Better Assistant derselben Spezialisierung, bleiben dessen übrige Einstellungen und die passenden Slots und Auren erhalten.

Im Spiel: /ba — Profile — einfügen — Apply.

JSON Schema#

Das Schema des Formats: keyrota-rotation.schema.json (Draft 2020-12). Es prüft Felder, Typen, Wertebereiche, queue ohne offGcd und die Form der Bedingungs-Strings. Nicht geprüft wird, ob n und Namen eindeutig sind, ob die Namen in Bedingungen existieren und ob das Limit von 16 nach dem Aufteilen der Strings an and eingehalten wird: Das übernimmt KeyRota beim Laden.

So prüfst du eine Datei:

Text
npx ajv-cli validate --spec=draft2020 -s keyrota-rotation.schema.json -d meine-rotation.json

Füge in eine Rotationsdatei kein Feld "$schema" ein: KeyRota hält es für ein überflüssiges Feld.