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

Conditions

Updated October 18, 2026

A condition is one check: "Garrote is on the target", "energy is at least 70%", "Burst is on". Conditions make up groups (AND), groups make up a rule (OR). In the builder you pick a condition from lists; in KRC text and JSON it is written as a string, which is what the examples show.

Syntax#

KindFormExample
Aura: present / absentAura.up, Aura.downGarrote_DoT.down
Aura: time left, stacksAura.duration op N, Aura.stacks op NRupture_DoT.duration <= 30
Slot: ready / not readySlot.ready, Slot.oncdKingsbane.ready
Slot: cooldown, chargesSlot.cd op N, Slot.charges op NDeathmark.cd <= 3
Slot: glowSlot.glow, Slot.noglowAmbush.glow
ResourceResource op NCombo_Points >= 70
Enemies nearbyenemies op Nenemies >= 3
Distance to targettarget.distance op Ntarget.distance <= 8
Toggleaoe, st, cd, defensives, ground_spells, movement == 0 or == 1cd == 1

Operators: <, <=, ==, = (the same as ==), >=, >. There is no "not equal".

The number N is an integer from 0 to 100. No negative or fractional numbers and nothing above 100: value 120 outside 0..100.

Spaces around the operator are optional: Energy>=70 and Energy >= 70 are the same. No spaces inside a name or between a name and its property: Garrote_DoT.up, not Garrote_DoT .up.

References are by name (Garrote_DoT) or by number: buff1, slot3, resource4. Keywords are lowercase.

Auras#

An aura is your buff or your debuff on the target, declared in the aura list with its ID. Other players' buffs and debuffs aren't visible.

.up and .down#

Envenom_Buff.up: the aura is present. Envenom_Buff.down: it is absent. If the aura is unknown (not read), both are false.

KRC text
use Garrote when  # Garrote: apply it when it's missing
	Garrote_DoT.down

.duration: time left in percent#

Rupture_DoT.duration <= 30: no more than 30% of the aura's full duration is left. The full duration is the one this application got: Rupture at 5 combo points lasts 24 s, at 7 it lasts 32 s, so 30% is 7.2 s and 9.6 s.

Important

An absent aura has 0 left. So Rupture_DoT.duration <= 30 also holds when there is no Rupture at all. To refresh only an aura that is up, write Rupture_DoT.up and Rupture_DoT.duration <= 30, and cover "the aura is missing" with a separate group with Rupture_DoT.down.

The pandemic window in WoW is 30% of the duration: refreshing within it loses nothing. Hence the usual threshold <= 30.

KRC text
use Rupture when  # Rupture
	Combo_Points >= 70 and Rupture_DoT.down  # no DoT
	or
	Combo_Points >= 70 and Rupture_DoT.up and Rupture_DoT.duration <= 30  # pandemic
JSON
{
  "use": "Rupture",
  "name": "Rupture",
  "when": [
    {"all": ["Combo_Points >= 70", "Rupture_DoT.down"], "comment": "no DoT"},
    {"all": ["Combo_Points >= 70", "Rupture_DoT.up", "Rupture_DoT.duration <= 30"], "comment": "pandemic"}
  ]
}

Seconds to percent: percent = seconds / full duration × 100. Garrote lasts 18 s: "14 s left" is <= 78, "5.4 s left" is <= 30.

An aura without a duration (Stealth and the like) always reads 1 left. Use only .up and .down for such auras.

.stacks: number of stacks#

Opportunity.stacks >= 6: the aura has 6 stacks or more. An absent aura has 0 stacks.

Note

The stack count starts at two: an aura with a single stack reads as 0, like an aura without a counter. To check that an aura is present use .up; use .stacks for thresholds of 2 and above.

KRC text
use Pistol_Shot when  # Pistol Shot at 6 stacks of Opportunity
	Opportunity.stacks >= 6 and Combo_Points < 80

Slots#

Slot conditions read the state of another button: "press Envenom only while Deathmark isn't ready yet" and so on. The rule's own slot is checked automatically: if its spell can't be used, KeyRota simply moves on to the next rule.

.ready and .oncd#

Kingsbane.ready: the slot's spell can be used, not counting the global cooldown. That needs all of:

  • the spell is learned (the talent is taken);
  • there is enough resource;
  • the target is in range, if one is needed;
  • the cooldown is below 0.2 s or a charge is available;
  • Better Assistant shows the slot (With a target: you have a target; In combat: you are in combat).

Kingsbane.oncd: the slot is not ready for any of these reasons, not only the cooldown. If the state is unknown, both are false.

KRC text
use Preparation when  # Preparation when Adrenaline Rush, Between the Eyes and Killing Spree are on cooldown
	Adrenaline_Rush.oncd and Between_the_Eyes.oncd and Killing_Spree.oncd

.cd: cooldown left in percent#

Deathmark.cd <= 3: no more than 3% of the full cooldown is left. 0 is ready, 100 was just used. The global cooldown is not included. For a spell with charges .cd is the recharge of the next charge, so the spell can be ready with cd > 0.

Cooldown1% =Example
30 s0.3 sX.cd <= 10: ≤ 3 s left
1 min0.6 sKingsbane.cd <= 3: ≤ 1.8 s left
2 min1.2 sDeathmark.cd <= 3: ≤ 3.6 s left; Deathmark.cd >= 44: still ≥ 52 s
3 min1.8 sX.cd >= 50: still ≥ 90 s

A typical use is "hold for a big cooldown": don't spend Kingsbane if Deathmark is about to come back, spend it if Deathmark is far away.

KRC text
use Kingsbane when  # Kingsbane
	cd == 1 and Deathmark_DoT.up  # under Deathmark
	or
	cd == 1 and Deathmark.cd >= 44  # Deathmark more than 52 s away

.charges#

Barbed_Shot.charges >= 2: the spell has 2 charges or more. Spells without charges have 0. A typical pattern keeps the charges from capping:

KRC text
use Barbed_Shot when  # Barbed Shot
	Barbed_Shot.charges >= 2  # both charges: don't waste the recharge
	or
	Barbed_Shot.charges == 1 and Barbed_Shot.cd <= 20  # the second one is almost back

.glow and .noglow: the button glows#

Ambush.glow: the game highlights this spell's button (the same glow you see on your action bar on a proc). Ambush.noglow: it doesn't. Use .glow only if this spell's button really glows in the game; if you aren't sure, check the proc's buff instead: Blindside.up.

Resources#

Energy >= 70: at least 70% of maximum energy. All resources are percentages from 0 to 100: health, energy, mana, rage, runes, combo points.

ResourceNumberExample
Player healthresource1 (PlayerHP)PlayerHP <= 40: health at 40% or lower
Target healthresource2 (TargetHP)TargetHP >= 50: the target isn't at half yet. Unknown without a target
Specialization resourcesresource3 and onEnergy >= 70, Combo_Points >= 70, Rage >= 40

To percent: percent = value / maximum × 100. With 250 energy, 175 energy is 70%. Maximum energy and other resources change with talents, so thresholds in percent carry over between characters better than raw values.

Combo points. With a maximum of 7 combo points one point is about 14.3%. The value is rounded to a whole number, and depending on the rounding 2 points read 28 or 29, 3 read 42 or 43, 6 read 85 or 86. So put the threshold halfway between the steps: then it is right with any rounding.

Combo points%"at least N""at most N"
00—< 7
114>= 7< 20
228–29>= 20< 35
342–43>= 35< 50
457>= 50< 65
571>= 65 (>= 70)< 80
685–86>= 80< 95
7100>= 95—

For another maximum, "at least N" is (N − 0.5) / maximum × 100. With 5 combo points, "at least 4" is >= 70 and "at least 5" is >= 90.

Enemies nearby#

enemies >= 3: 3 or more enemies within the counter's radius. The radius and "Only enemies in combat" are set on the General page (enemies.range and enemies.combatOnly in JSON). If the count is unknown, the condition is false.

  • For enemies to be counted, enemy nameplates must be on in the game (the V key by default), with minor enemies not hidden.
  • Choose the radius by your abilities: Fan of Knives hits within 8 yards, so 8 is the honest radius for "Fan of Knives or Mutilate".
  • For a single target, enemies <= 1 is safer than enemies == 1: the rule keeps working if the enemy isn't counted.

Distance to the target#

target.distance <= 8: the target is 8 yards away or closer. Without a target the distance is unknown and the condition is false. The distance is approximate: the condition holds only when the distance surely meets the threshold; in borderline cases it is false.

KRC text
use Pistol_Shot when  # the target is out of melee but within 20 yards
	target.distance >= 10 and target.distance <= 20

Panel toggles#

Toggles are the buttons of the quick settings panel over the game, plus hotkeys. The rotation decides what they mean.

ConditionPanel buttonKey: Windows, macOSUsual meaning
aoe == 1Targets: MultipleF2, ⌃⇧T, cyclingForce multi-target mode
st == 1Targets: SingleF2, ⌃⇧T, cyclingForce a single target
aoe == 0 and st == 0Targets: AutoF2, ⌃⇧T, cyclingThe rules decide, usually by enemies
cd == 1BurstF3, ⌃⇧BBig cooldowns: use now or hold
defensives == 1Healing / defense—Healing and defensive abilities
ground_spells == 1Ground—Ground-targeted spells
movement == 1Movement—Actions while moving
  • Compare only with == 0 or == 1.
  • cd == 1 is the Burst button, not a spell's cooldown. A slot's cooldown is Slot.cd.
  • aoe and st are never 1 at the same time. The target mode key cycles Auto, Single, Multiple.
  • By default Burst is on, the target mode is Auto and the other buttons are off. KeyRota remembers their state.
  • A panel button is active only if the rotation reads that toggle; with the Blizzard profile they are all dimmed.
  • Toggles are never unknown.

How conditions are evaluated#

ConditionValue presentAura absentUnknown
X.uptruefalsefalse
X.downfalsetruefalse
X.duration op N, X.stacks op Ncomparedcompared with 0false
X.ready / X.oncdby readiness—false (both)
X.glow / X.noglowby the glow—false (both)
X.cd, X.charges, a resource, enemies, target.distancecompared—false
a togglecompared—never

A group is true when all its conditions are true. A rule holds when at least one group is true, or when it has no groups at all.

"Not", parentheses and OR inside a group#

KRC has no not, != or parentheses. Everything is expressed with groups:

  • "Not" is the paired condition: not .up is .down, not .ready is .oncd, not .glow is .noglow; for numbers, the inverse operator: not >= 70 is < 70.
  • (A or B) and C is two groups: A and C, B and C.
  • A and not (B and C) is two groups: A and not-B, A and not-C.
  • The same condition in every group (like channel protection) is repeated in each group.
KRC text
use Fan_of_Knives when  # Fan of Knives: (Multiple mode OR Auto and 2+ enemies) AND below 5 CP
	aoe == 1 and Combo_Points < 70
	or
	st == 0 and enemies >= 2 and Combo_Points < 70

Cheat sheet#

ConditionMeaning
X.up / X.downaura present / absent
X.duration <= 30≤ 30% left (an absent aura has 0)
X.up and X.duration <= 30up and due for a refresh
X.stacks >= 22 stacks or more (1 stack reads as 0)
X.ready / X.oncdslot ready / not ready for any reason
X.cd <= 3≤ 3% of the cooldown left
X.charges >= 22 charges or more
X.glow / X.noglowbutton glowing / not
PlayerHP <= 40your health ≤ 40%
TargetHP >= 50the target at ≥ 50% (false without a target)
Combo_Points >= 705+ combo points out of 7
Energy >= 70energy ≥ 70%
enemies >= 33+ enemies in the radius
target.distance <= 8the target within 8 yards (false without a target)
aoe == 1 / st == 1Multiple / Single mode
aoe == 0 and st == 0Auto mode
cd == 1Burst on
defensives == 1Healing / defense on
ground_spells == 1Ground on
movement == 1Movement on