27
Conditionals
Brues edited this page 2026-09-15 08:15:15 -05:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Conditionals Reference

All conditionals support negation with no prefix unless noted. Some have semantic opposites: help/harm, alive/dead, isplayer/isnpc, inrange/outrange.

Table columns:

  • Description — what the conditional checks
  • No — supports no prefix negation
  • Multi — supports multi-value OR (/), AND (&), or comparison operators (>, <, >=, <=, =, ~=)
  • Addon — addon required or recommended

Player Conditionals (@player)

These always evaluate against the player. Cannot be redirected with @unit.

Conditional Description No Multi Example Addon
bg Player is in an active battleground [bg] [nobg]
button Button that invoked the action (1=Left, 2=Right, 3=Middle, 4/5=extra; bare = invoked by a click) [button:2] [button:1/2] [nobutton]
cdgcd Spell/item CD remaining (includes GCD) [cdgcd:Sprint>0]
channeled Player is channeling [channeled] [channeled:Arcane_Missiles]
checkcasting True if NOT casting (specific spell) [checkcasting] [checkcasting:Frostbolt]
checkchanneled True if NOT channeling (specific spell) [checkchanneled] [checkchanneled:Evocation]
combat In combat (player default, or unit) [combat] [combat:target]
combo Combo points [combo:>=4]
cooldown Spell/item CD remaining (ignores GCD) [cooldown:Sprint<5]
druidmana Druid mana while shapeshifted [druidmana:>=500]
equipped Item or weapon type equipped [equipped:Daggers/Swords]
equipset Saved equipment set is equipped [equipset:Raid] [noequipset:PvP] [equipset:Raid/Farm]
focus A focus is set (/focus, FOCUSTARGET keybind, or pfUI) [focus] [nofocus]
form / stance Shapeshift form or stance index [form:1/3] [stance:2]
gcd GCD is active / time remaining [gcd] [gcd:<1]
group Player is in group type [group:party/raid]
hastarget Player has a target [hastarget]
inbag Item exists in bags (with optional count) [inbag:Hearthstone] [noinbag:Soul_Shard] [inbag:Soul_Shard<12]
incominghit Incoming attack type/timing [incominghit:crushing] [noincominghit:crit]
indoors Player is under a WMO roof (building, cave, instance interior) [indoors] [noindoors]
keydown Key is currently held down [keydown:f] [keydown:space/enter]
known Spell/talent known (with rank) [known:Berserk] [known:Frostbolt>#2]
lastswing Player melee swing type/timing [lastswing:dodge] [lastswing:<2]
locked Spell-school interrupt lockout (Counterspell/Kick) [locked] [locked:frost] [nolocked:fire/frost]
mhenchant Main hand temp enchant by ID/name [mhenchant:Deadly_Poison] [mhenchant:2823/2824] [nomhenchant]
mhimbue Main hand has temporary imbue [mhimbue:Instant_Poison<300] [mhimbue:>#5]
mod Modifier key held (ctrl/alt/shift, side-specific lctrl/rctrl/lalt/ralt/lshift/rshift; bare = any) [mod:alt/ctrl] [mod:lshift] [nomod:ralt]
mounted Player is mounted [mounted] [nomounted]
moving Moving / speed % [moving] [moving:>100&<200]
mybuff Player has buff (with time/stacks) [mybuff:Thorns<5] [nomybuff:MotW/GotW]
mybuffcapped Player buff bar full (32) [nomybuffcapped]
mybuffcount Player buff slot count (32 max) [mybuffcount:>15] [nomybuffcount:>28]
mycc Player has CC effect [mycc:stun/silence] [nomycc]
mydebuff Player has debuff (with time/stacks) [mydebuff:Curse_of_Agony]
mydebuffcapped Player debuff bar full (16) [nomydebuffcapped]
myenergy Player energy % (specific slot) [myenergy:>50]
myhp Player HP % [myhp:<30] [myhp:>20&<50]
myhplost Player HP deficit (max - current) [myhplost:>500]
mylevel Player level [mylevel:=60]
mymana Player mana % (specific slot, cross-form) [mymana:>30]
mypower Player mana/rage/energy % [mypower:>50]
mypowerlost Player power deficit [mypowerlost:>200]
myrage Player rage % (specific slot, cross-form) [myrage:>=50]
myrawhp Player raw HP value [myrawhp:>1000]
myrawpower Player raw power value [myrawpower:>=40]
myspellhaste Player spell haste % (0 = unhasted, negative = slowed) [myspellhaste:>10] [myspellhaste:<0]
nextslamclip / nonextslamclip Instant now will/won't cause next Slam to clip [nonextslamclip] SP_SwingTimer
rangedclip / norangedclip Action cast will/won't clip ranged auto-shot [norangedclip] SP_SwingTimer
rangedtimer Ranged swing timer % elapsed [rangedtimer:>80] SP_SwingTimer
notarget Player has no target [notarget]
ohenchant Off hand temp enchant by ID/name [ohenchant:Crippling_Poison] [noohenchant]
ohimbue Off hand has temporary imbue [noohimbue] [ohimbue:Crippling_Poison]
onswingpending On-swing spell pending [onswingpending]
outdoors Player is outdoors (open sky / not inside a WMO interior) [outdoors] [nooutdoors]
pet Has active pet (with family) [pet] [pet:Cat/Wolf]
pethappiness Hunter pet happiness (unhappy/content/happy, or 1-3) [pethappiness:happy] [pethappiness:content/happy]
queuedspell Spell is queued [queuedspell] [queuedspell:Fireball]
reactive Reactive ability available (on bar) [reactive:Overpower]
resting In rest area [resting]
rooted Player is rooted [rooted] [norooted]
rtimer Alias for rangedtimer [rtimer:<15] SP_SwingTimer
selfcasting Player is casting or channeling [selfcasting] [noselfcasting:Hearthstone]
set Equipped piece count of a named item set (name or ItemSet ID) [set:Judgement_Battlegear>=3] [set:Nightslayer]
slamclip / noslamclip Slam now will/won't clip auto-attack [noslamclip] SP_SwingTimer
spellcasttime Spell cast time from tooltip (real-time) [spellcasttime:>1.5] [spellcasttime:Frostbolt<2]
standing / sitting Player is standing / seated (sit, chair, sleep, kneel) [standing] [sitting]
stat Player stat value [stat:agi>100] [stat:ap>1000]
stealth In stealth (Rogue/Druid) [stealth]
stimer Alias for swingtimer [stimer:<15] SP_SwingTimer
swimming Swimming (Druid only) [swimming]
swingtimer Swing timer % elapsed [swingtimer:>80] SP_SwingTimer
totem Player's own totem is out, by element or name (with time left) [totem:fire] [totem:Searing_Totem<5] [nototem:water]
usable Spell/item is usable now [usable:Overpower]
zone Current zone name [zone:Ironforge/Stormwind]

Note on myspellhaste: the value is a percentage of cast-speed change, not a multiplier — 0 unhasted, positive when casts are sped up (Berserking, Mind Quickening Gem), negative while slowed (Curse of Tongues). A signed amount can't be written, so test for being slowed at all with [myspellhaste:<0] rather than a specific negative threshold.

Note on button: this is the button that invoked the action, not one held down as a modifier — the same meaning it has on retail. A keybind press activates through the left-click path and so counts as button 1: [button:1] passes for a keybind and a left-click alike, while [button:2] Rejuvenation; Regrowth casts Regrowth from a keybind and Rejuvenation only from an actual right-click. Because the answer is a property of the activation rather than a live state, the icon does not change as you hold a mouse button — it shows whatever button 1 resolves to. For "hold something to change the spell", use [mod:]. Bare [button] / [nobutton] are an extension retail has no equivalent for: they ask whether a click drove the action at all, making [nobutton] the "activated by a keybind" test.

Note on totem: an empty slot counts as having no time left, the same way a missing buff does for [mybuff:X<5]. So [totem:Searing_Totem<5] is true both while the totem is expiring and while it is absent, which makes /cast [totem:Searing_Totem<5] Searing Totem a complete recast macro on its own — no [nototem] needed. Bare [totem] takes the action as its argument (again like [mybuff]), so /cast [nototem] Searing Totem is the drop-if-missing form. A totem is either up or it isn't, so stack comparisons read 1 when out: [totem:fire#1]. Only your own totems are tracked — another shaman's are invisible — and a totem that is killed can read as still up for up to a quarter second, where one that expires on its timer is exact. See Reference Tables for the slots.

Target Conditionals (default @target)

These default to checking the current target. Most can be redirected with @unit (e.g., [@focus,hp:<30], [@mouseover,exists]).

Note on mana/rage/energy for other units: these read a specific power slot rather than the unit's primary power, so they work regardless of form (a druid's mana in Cat Form, etc.). For units other than the player, vanilla only broadcasts the unit's active power, so a non-primary slot may read stale/empty — a unit with no such pool fails the check. The reliable case is reading the slot that is that unit's primary power (e.g. [@target,mana:<15] on a caster to catch it near OOM).

Note on cc (and mycc): each CC type is one exact 1.12 DBC mechanic, so [cc:stun] is Stun alone — Gouge is knockout and Sap is sap, both their own types. stun used to cover all three; write [cc:stun/knockout/sap] for that, or use bare [cc], which matches any loss-of-control mechanic and so covers all three already. Naming a mechanic that isn't crowd control at all (bleed, disarm, interrupt) still works as a plain "does this effect exist on the unit" test, it just isn't part of what bare [cc] looks at. See Reference Tables for every type and which ones [immune] accepts.

Conditional Description No Multi Example Addon
alive Unit is alive [alive]
behind Behind target / count behind [behind] [behind:>=2] [behind:meleerange>1] UnitXP_SP3
buff Target has buff (with time/stacks/rank) [buff:Shield>#3] [nobuff:Renew/Rejuv] [buff:Regrowth(Rank_9)]
buffcapped Target buff bar full (32) [nobuffcapped]
casting Target is casting (specific spell) [casting] [casting:Heal]
casttime Target cast time remaining (seconds) [casttime:<0.5]
cc Target has CC effect [cc:stun/fear] [nocc:polymorph]
channeltime Target channel time remaining (seconds) [channeltime:<0.5]
class Target class (players only) [class:Warrior/Priest]
curse Target has a Curse debuff [curse] [@focus,curse]
cursive GUID-based debuff tracking (time remaining) [cursive:Rake<3] [nocursive:Rip] Cursive
dead Unit is dead [dead]
debuff Target has debuff (with time/stacks/rank) [debuff:Moonfire<4] [nodebuff:Rake] [debuff:Moonfire(Rank_10)]
debuffcapped Target debuff bar full [nodebuffcapped]
disease Target has a Disease debuff [disease] [@party1,disease]
dispellable Target has any dispellable debuff [dispellable]
dispellablebuff Target has any dispellable buff (offensive) [harm,dispellablebuff]
distance Distance in yards / count within range [distance:<40] [distance:30>1] [distance:30:facing>1] UnitXP_SP3
energy Target energy % (specific slot) [@target,energy:<30]
exists Unit exists [@mouseover,exists]
facing Facing target / count facing [facing] [facing:>2] [facing:meleerange>1] UnitXP_SP3
harm Unit is hostile [harm]
help Unit is friendly [help]
hp Target HP % [hp:<20] [hp:>30&<70]
hplost Target HP deficit (max - current) [hplost:>1000]
immune Target is immune (school or CC type) [noimmune:fire] [noimmune:stun]
inrange In spell range / count in range [inrange:Charge] [inrange:Multi-Shot>1] UnitXP_SP3 (count)
insight In line of sight / count in LoS [insight] [insight:>0] UnitXP_SP3
isnpc Unit is an NPC [isnpc]
isplayer Unit is a player [isplayer]
istank Unit is marked as tank [istank] [@focus,istank] pfUI
level Target level (skull = 63) [level:>60]
magic Target has a Magic debuff [magic] [@focus,magic]
magicbuff Target has a dispellable Magic buff (offensive) [harm,magicbuff]
mana Target mana % (specific slot) [@target,mana:<15]
meleerange In melee range / count in melee [meleerange] [meleerange:>1] [meleerange:facing>1] UnitXP_SP3
member Target is in party or raid [member]
multiscan Scan enemies by priority, soft-cast [multiscan:nearest] [multiscan:skull] UnitXP_SP3
mytag Target is tapped by you [mytag] [nomytag]
name Exact name match (case-insensitive) [name:Onyxia] [noname:Critter/Dummy]
othertag Target is tapped by someone else [othertag] [noothertag]
outrange Out of spell range / count out [outrange:Charge] [outrange:Charge>0] UnitXP_SP3 (count)
party Unit is in your party [party] [party:focus]
playercontrolled Unit is player-controlled (player, pet, mind-controlled) [playercontrolled] [noplayercontrolled]
poison Target has a Poison debuff [poison] [@party1,poison]
power Target mana/rage/energy % [power:<30]
powerlost Target power deficit [powerlost:>100]
powertype Target power type [powertype:mana/rage]
rage Target rage % (specific slot) [@target,rage:<10]
raid Unit is in your raid [raid] [raid:mouseover]
rawhp Target raw HP value [rawhp:>5000]
rawpower Target raw power value [rawpower:>500]
resisted Last spell was resisted [resisted] [resisted:full/partial]
tag Target is tapped by anyone [tag] [notag]
targeting Unit is targeting you or a tank [targeting:player] [notargeting:tank] pfUI (for tank)
threat Threat % on target (100 = pull) [threat:>80] TWThreat
tte Time to execute threshold (seconds) [tte:<5] TimeToKill
ttk Time to kill target (seconds) [ttk:<10] TimeToKill
type Creature type [type:Undead/Beast]

Short Aliases

Shorter spellings for the most-used conditionals, to fit more into the 261-character macro limit. An alias behaves exactly like its full form — same arguments, same multi-value logic — and negates the same way ([nocd:Sprint] is [nocooldown:Sprint]).

Alias Full form Alias Full form
cd cooldown osp onswingpending
chan channeled queued queuedspell
chtime channeltime react reactive
ct casttime scast selfcasting
dist distance sct spellcasttime
eq equipped stl stealth
ihit incominghit swim swimming
los insight tgt targeting
melee meleerange ic combat
mv moving ooc nocombat

ic / ooc are the one pair that isn't a no prefix: [ic] is [combat] and [ooc] is [nocombat], so there is no noic or noooc. stimer and rtimer are the same idea for swingtimer / rangedtimer (listed in the tables above with their addon requirement).

Extended Unit Tokens (Nampower v2.41+)

With Nampower v2.41+, all [@unit] redirects support additional token formats beyond standard tokens:

Token format Resolves to Example
mark1mark8 Unit bearing that raid marker [@mark1,harm]
<base>owner Owner/summoner of <base> [@targetowner,help] — cast on target's owner
<base>target Target of <base> [@mouseovertarget,hp:<30]
<base>pet Pet of <base> [@party1pet,exists]

<base> can be any standard token (target, mouseover, party1party4, raid1raid40…), a GUID string, or a mark token (mark1mark8). Suffix matching is case-insensitive.

/cast [@targetowner,help] Rejuvenation      -- Heal the owner of your target (e.g. a pet)
/cast [@mark1target,harm] Polymorph         -- Cast on whatever the skull-marked unit is targeting
/cast [@party1pet,exists] Mend Pet          -- Heal party1's pet if it exists

Multi-Unit Count Mode

Range and position conditionals (meleerange, behind, facing, insight, inrange, outrange, distance) support counting enemies when given an operator + number. Requires UnitXP_SP3. Operators: >, <, >=, <=, =, ~=

/cast [meleerange:>1] Whirlwind           -- AoE if 2+ enemies in melee
/cast [behind:>=2] Blade Flurry           -- Cleave if behind 2+ enemies
/cast [facing:>2] Cone of Cold            -- Frontal AoE if facing 3+ enemies
/cast [inrange:Multi-Shot>1] Multi-Shot   -- AoE if 2+ in spell range
/cast [insight:>0] Arcane Explosion       -- AoE if any enemy in LoS
/cast [distance:30>2] Volley              -- AoE if 3+ enemies within 30 yards

Compound Count Mode (Filters)

Count mode conditionals can combine checks using a filter qualifier so that each enemy is tested against multiple conditions simultaneously. Without filters, separate conditionals like [facing:>1 meleerange:>1] count independently — an enemy could satisfy one check but not the other, giving false positives.

Syntax: [conditional:filter>N] or [conditional:distance:filter>N]

Available Filters

Filter Effect
facing Enemy is in front of the player
behind Player is behind the enemy
meleerange Enemy is in melee range

Conditionals Supporting Filters

Conditional Filter syntax Meaning
meleerange [meleerange:facing>N] In melee range AND facing
meleerange [meleerange:behind>N] In melee range AND behind
nomeleerange [nomeleerange:facing>N] NOT in melee range AND facing
facing [facing:meleerange>N] Facing AND in melee range
facing [facing:10>N] Facing AND within 10 yards
nofacing [nofacing:meleerange>N] NOT facing AND in melee range
behind [behind:meleerange>N] Behind AND in melee range
behind [behind:10>N] Behind AND within 10 yards
nobehind [nobehind:meleerange>N] NOT behind AND in melee range
distance [distance:30>N] Within 30 yards (count mode, no filter)
distance [distance:30:facing>N] Within 30 yards AND facing
distance [distance:30:behind>N] Within 30 yards AND behind
nodistance [nodistance:30:facing>N] NOT within 30 yards AND facing

For facing, nofacing, behind, and nobehind, a number as the filter name sets a distance threshold (in yards) instead of a named filter.

For distance and nodistance, the distance threshold and filter are separated by a colon: distance:YARDS:FILTER>COUNT.

Examples

-- Cleave only if 2+ enemies in melee range AND in front of you
/cast [meleerange:facing>1] Cleave

-- Cancel Blade Flurry if fewer than 2 enemies within 10 yards
/cancelaura [distance:10<2] Blade Flurry

-- AoE if 3+ enemies within 30 yards and facing
/cast [distance:30:facing>2] Cone of Cold

-- Whirlwind if 2+ enemies in melee, even those behind you
/cast [meleerange:>1] Whirlwind

-- Only Backstab if behind 1+ enemy in melee range
/cast [behind:meleerange>0] Backstab

Multiscan (Target Scanning)

Scans enemies and soft-casts without changing your target. Requires UnitXP_SP3. Scanned targets must be in combat with player (exceptions: current target and @unit specified in macro).

Priority Description
nearest Closest enemy
farthest Farthest enemy
highesthp / lowesthp Highest/lowest HP %
highestrawhp / lowestrawhp Highest/lowest raw HP
markorder First mark in kill order (skull→cross→square→moon→triangle→diamond→circle→star)
skull cross square moon triangle diamond circle star Specific raid mark
/cast [multiscan:nearest,nodebuff:Rake] Rake
/cast [multiscan:skull,harm] Eviscerate
/cast [multiscan:nearest,notargeting:tank,harm] Taunt

Modifiers

Modifiers are special keywords used inside [...] that change how the action is performed rather than gating execution. They are evaluated after the spell is cast or item is used.

Modifier Description Example
mouseuse Auto-clicks the AOE targeting circle at the current cursor position /cast [mouseuse] Flamestrike
cursor Places a ground-target spell/item at the cursor (no reticle click) /cast [cursor] Blizzard

mouseuse

When a spell or item brings up the ground-targeting circle (e.g., Flamestrike, Blizzard, Stratholme Holy Water), [mouseuse] automatically places it at the mouse cursor position. If the spell fails to cast (cooldown, missing item, etc.), no click occurs.

/cast [mouseuse] Flamestrike                           -- Cast Flamestrike at cursor
/use [mouseuse] Stratholme Holy Water                  -- Use Holy Water at cursor
/cast [mouseuse,mod:shift] Blizzard; Frostbolt         -- Shift: Blizzard at cursor, otherwise Frostbolt

cursor

[cursor] places a ground-target spell or on-use item at the cursor via ClassicAPI's engine-level placement (C_Spell.CastAtCursor / C_Item.UseAtCursor) — no reticle click is simulated, so there's no auto-attack side effect like [mouseuse] can have. For non-ground actions it falls back to a normal cast/use. Requires ClassicAPI.

/cast [cursor] Blizzard                                -- Cast Blizzard at cursor
/use [cursor] Iron Grenade                             -- Throw Iron Grenade at cursor
/cast [cursor,mod:shift] Flamestrike; Fireball         -- Shift: Flamestrike at cursor, otherwise Fireball