promotional bannermobile promotional banner

Shadow Helper

Shadow Priest rotation in TBC Anniversary.
Back to Files

ShadowHelper1.0.5.zip

File nameShadowHelper (23).zip
Uploader
QritiqueQritique
Uploaded
Aug 8, 2026
Downloads
23
Size
58.3 KB
Flavors
Classic TBC
File ID
8605471
Type
R
Release
Supported game versions
  • 2.5.6

What's new

Core rotation & Next Cast logic

  • Guitar Hero–style single highway bar: SWP, VT, Mind Blast, and SWD each ride their own thin sub-lane on one shared bar, positioned by real "need time" (accounts for cast time, not just raw remaining duration).
  • "Next Cast" readout shows the single best action to press right now, including Inner Focus, Trinket/Destruction Potion during lust, Dark Rune/Mana Pot/Shadowfiend at configurable mana thresholds, and Fade at a configurable threat threshold.
  • Look-ahead collision protection: before recommending anything, the engine checks whether casting it would occupy you long enough that SWP or VT would cross its own deadline in the meantime — if so, the dot force-preempts the original pick, even before it hit its own "green" window. (Example: Mind Blast comes off cooldown while VT has 2s left — VT now correctly jumps the queue instead of falling off mid-MB-cast.)
  • VT always wins over SWP in a collision tie — VT's party-wide mana return is worth more than SWP's personal damage.
  • Mind Flay clip-awareness: tracks the live channel and only recommends clipping it right after a tick lands (not mid-tick), unless a genuine SWP/VT emergency justifies interrupting immediately. Starting Mind Flay is itself subject to the same collision check as everything else.
  • Fade / threat management: recommends Fade once your live threat (via the game's own threat API) crosses a configurable percentage, gated to group/raid only. Treated as a real emergency — can interrupt Mind Flay mid-tick.
  • Bar-Queue Colors: the 4 highway lane bars are colored by their rank in the cast order (1st/2nd/3rd/4th up), not just their own individual readiness — fully player-customizable colors.
  • Latency-aware timing: the "safe to recast" window for SWP/VT is read live from the game's own connection latency instead of a guessed fixed buffer, since Shadow Priest spells are confirmed hitscan (no travel time).

Rotation & Tracking configuration

  • Rotation tab: fully independent, reorderable, toggleable priority list covering Fade, Trinket, Destruction Pot, Inner Focus, Dark Rune, Mana Pot, Shadowfiend, VT, SWP, Mind Blast, SWD, and Mind Flay.
  • Trinket/Destruction Pot: independent "While Lusted" / "Recommend when Exhausted" checkboxes (the latter checks the actual post-lust Exhaustion/Sated debuff, not just "lust isn't up").
  • Dark Rune, Mana Pot, Shadowfiend, and Fade each get an inline editable trigger threshold (mana % or threat %) directly on their row.
  • Per-item enable/disable checkboxes throughout, so unused items (no trinket that raid, no Destro Pot on hand, etc.) can be hidden from both the cooldown row and the recommendation logic.

Buff Watch

  • Tracks Shadow Protection, Fortitude, Inner Fire, and Divine Spirit — shown only when actually missing, works in any spec (not gated by Shadowform), toggleable per-buff.
  • Lives on its own independent, draggable frame with short acronym labels and a single "Missing" indicator instead of repeating it per icon.

UI & customization

  • Split into three independently movable/lockable frames: Next Cast, Cooldowns, and Buff Watch — one shared lock toggle, each remembers its own position.
  • Options panel split into General / Tracking / Rotation tabs, centered content throughout.
  • Scale, Icon Size, and Bar Width controls; customizable Ready/Soon/Not-yet colors and Bar Queue colors.
  • Load In Combat Only (hides Next Cast/Cooldowns outside combat; Buff Watch stays available) and Show Test Frames (forces visibility for repositioning).
  • Shadowform gate: the rotation-specific frames disable themselves outside Shadow spec, live-updating on respec.

Bug fixes (client-specific API issues)

  • Fixed several silent failures caused by APIs that don't exist on this client (GetItemInfoInstant, GetItemCooldown) — these were causing cooldown-row items to error out or, worse, silently report "always ready" regardless of actual cooldown state (the root cause behind potions/Dark Rune getting recommended while genuinely on cooldown).
  • Fixed the Shadowform spec-gate not actually gating anything for non-Shadow specs — root cause traced to a spellbook-scanning check with a fail-open safety net masking the real failure.
  • Fixed Mind Blast/SWD flickering unavailable during the GCD sweep.
  • Every cooldown/tracking check now runs in its own isolated error boundary, so one broken lookup can't silently blank out unrelated parts of the UI.

Research-based corrections (mechanics verified, not assumed)

  • Confirmed items (trinkets, potions, Dark Rune) don't trigger the shared GCD in this era of WoW, unlike spell casts — fixed the collision math that had been overstating how long using one would "block" other casts.
  • Confirmed Mind Flay's tick count is haste-independent in TBC (haste only shortens the channel) — corrected an earlier assumption based on a source describing a much later expansion's mechanics.
  • Confirmed Destruction Potion and Mana Potion share a cooldown category, while Dark Rune does not.
  • Confirmed Fade's real numbers (330 mana, 10s duration, 30s cooldown at max rank) and its actual mechanic (temporary threat suppression, not permanent removal).

Since the last changelog (1.16.3 → 1.20.3)

New: Mind Flay's own highway lane

  • A 5th lane, positioned between VT and MB. Unlike the other four, Mind Flay doesn't have a natural countdown - it's binary, so it behaves differently: idle in a customizable blue by default, switching to green the moment it's genuinely the resolved recommendation.
  • A proportional fill bar (replacing an earlier discrete-tick-marks attempt that didn't read well in practice) shows how much of the 3-tick channel is actually worth taking before a clip is needed - 2/3 green means take 2 ticks then clip, full green means the whole channel is safe. Extended to compute even before the channel starts, so it's accurate the instant MF becomes the recommendation.
  • Bold tick-boundary markers layered above the fill so they stay visible even when the bar is green, after an earlier attempt wasn't visible enough.
  • Mind Flay's active/idle colors are fully independent from the general "Ready" note color - an earlier version reused that color directly, which meant a customized Ready color unexpectedly (and confusingly) applied to Mind Flay too.

New: Vampiric Embrace added to the rotation

  • Previously only tracked as a standalone cooldown, never recommended. Confirmed via direct TBC spell data before implementing: 1 minute duration on a 10 second cooldown, 2% mana - that ratio makes "keep it up whenever possible" a reasonable default, unlike Trinket/Destro's burst-window timing.
  • Gated to skull-marked targets only (reusing the same infrastructure built for Destruction Potion) - normal mobs and dungeon bosses die too fast for its healing-via-damage effect to be worth the GCD.

Next Cast icon overhaul

  • Only shows cooldown-type items now (Fade, VE, Trinket, Destro, Dark Rune, Mana Pot, Shadowfiend, Inner Focus) - never a damage-rotation ability, since the highway bars already cover those. Shows blank when nothing but damage abilities are currently queued, instead of defaulting to one.
  • Thicker border (4px vs the standard 2px) so it's easier to tell at a glance whether it's actually showing green through the flashing nag effect.
  • Icon border color now matches its bar's Bar Queue Colors rank instead of showing its own separate readiness color - the two could previously disagree.
  • "Green" is now strict everywhere: a highway bar only ever shows green if it's genuinely the overall top recommendation, never just "soonest among these 4 specifically." If the true top pick is a cooldown, no bar shows green - every rank shifts down a slot instead.

Critical bug fix: addon completely failing to load

  • A tester's game showed /sh falling through to WoW's built-in /shout - meaning the addon's slash commands never registered at all, and nothing in the UI ever appeared.
  • Root cause, confirmed via a live in-game BugSack error (not guessed): Lua 5.1's hard 60-upvalue-per-function limit. WoW's actual runtime enforces this; the Lua 5.4 compiler used for syntax-checking all session does not, which is why it passed every check right up until it was tested in-game. UpdateQueue() had grown, across many features added over time, to reference more than 60 outer-scope variables - Lua 5.1 refuses to even compile a function past that point.
  • Fixed by extracting the two largest self-contained chunks of that function (Mind Flay lane logic, Bar Queue Colors ranking) into their own separate functions, each carrying its own variables independently.
  • Verified directly against luac5.1 - installed specifically to test against the same compiler version WoW itself uses - rather than estimated. Both luac5.4 and luac5.1 are now checked after every future edit.

This mod has no additional files