File Details
v1.1.1
- R
- Apr 13, 2026
- 2.18 MB
- 9
- 2.5.5
- Classic TBC
File Name
HeroHelper-v1.1.1.zip
Supported Versions
- 2.5.5
HeroHelper - TBC Anniversary Edition - Changelog
v1.1.1
Fixed
- Removed
Bindings.xmlfrom the TOC file list — WoW auto-loads this file for key bindings; listing it in the TOC caused the regular XML parser to reject the<Bindings>schema, producing 7 XML warnings on every load.
Internal
- Extracted
Detection:GetScanUnits()to eliminate three copies of the unit-list builder (inScanUnits,GetCurrentBossHPPct, andTriggers:FindUnitByGUID).
v1.1.0
Major feature release: full TBC dungeon coverage, multi-shaman
coordination with role-based election, three new trigger types,
zone-aware boss lookup, and a project icon + screenshots in media/.
New trigger types
- Time after pull (
type = "time", seconds = N). Fires the reminder N seconds after combat starts. Useful for fights with a known sweet spot a fixed delay into the engagement (1–600 seconds, configurable per boss in the Bosses tab). - Compound (any-of) (
type = "any", conditions = {...}). Fires on the FIRST of multiple conditions. Pair aphasewith anhpand atimesafety net so you never miss a burn window when yell-based phase detection is unreliable. Configure via the new "Multi" option in the per-boss type dropdown — opens a small popup with checkbox + value editors for each sub-condition. Compound configs serialize through the export/import hash asany(pull;hp:25;time:60).
5-man dungeon support
- 50 TBC dungeon bosses across 15 dungeons added to the database. All
flagged
isDungeon = trueand gated behind a new General-tab toggle ("Alert for dungeon bosses (5-man, on pull)", off by default so raid-only installs don't suddenly start beeping on Hellfire trash). - Researched non-pull defaults: Grand Warlock Nethekurse
hp 20, Talon King Ikisshp 25, Murmurhp 40, Pathaleonhp 20, and Harbinger Skyrissphase 2with verified yells. The other 45 dungeon bosses default topull— correct for short heroic 5-mans.
Zone-aware boss lookup
- Magisters' Terrace's Kael'thas Sunstrider was previously omitted
because his name collided with Tempest Keep's Kael'thas. The
database name index now supports multi-match entries with explicit
zonetags, andDB:LookupByNametakes an optional zone string that disambiguates viaGetRealZoneText(). Both Kael'thas entries now exist in the database and detect correctly inside their respective instances.
Multi-shaman coordination
- New
modules/Comms.luaadds an addon-message protocol so multiple HeroHelper-using shamans in the same group don't double-Heroism. Roster-based election: each user broadcasts aHELLO:<priority>on join, the lowest-priority alive shaman is elected, and ONLY that one client's HeroHelper produces reminders. Everyone else is completely silent (no popup, no sound). - Players pick a role in the General tab: Primary, Secondary, Backup, or Auto. Lower priority wins. Auto falls back to alphabetical name precedence.
- The election locks when the group reaches its instance's
expected size (5 for 5-mans, 10 for Karazhan / Zul'Aman, 25 for
the larger raids — sourced from
GetInstanceInfo). The locked roster is a snapshot — late joiners after lock are not added, the order is fixed for the duration of the run. - If the elected winner dies during a fight, the next-priority alive shaman in the locked roster silently takes over (no chat noise).
- Optional raid-chat announcement (off by default): on lock, the elected winner posts a one-line "HeroHelper: <name> will Heroism. Order: a > b > c" to RAID/PARTY chat. Posted exactly once per group formation, naturally deduplicated because every client computes the same winner.
- New diagnostic command
/hh rosterdumps the current (live or locked) roster, each member's role, and the active winner.
New diagnostic command
/hh mobtest pullarms a one-shot listener that fires the reminder on the next combat start, against any target. Lets you verify the pull-trigger pipeline against a target dummy without needing an actual boss. The HP-mode/hh mobtest [%]from v1.0.0 remains.
UI improvements
- Bosses tab gains a Reset button alongside Export / Import that wipes every per-boss override and returns every boss to the database default. StaticPopup confirmation prevents accidents.
- Per-boss row's value editor now shows a unit suffix (
%,s) matching the current trigger type so the meaning of the number is unambiguous. - The "Phase" trigger option is hidden from the per-boss dropdown for bosses without yell patterns in the database, instead of letting the player pick a trigger that would silently never fire.
- Brighter, wider, faster reminder-button glow tuning so the popup is harder to miss in a busy raid UI.
Bug fixes
- Reminder button actually appears in combat now. A TBC layout
bug propagated stale heights through
SetAllPointson a protected child whose container moved mid-combat (we observed h=132313 on a 52-tall button). Fixed by parking the container at the player's saved position permanently and toggling visibility purely viaSetAlpha. The container never moves at runtime. - Pull triggers re-evaluate on
COMBAT_START. Previously, if the player tab-targeted a boss before the tank pulled,BOSS_PULLfired pre-combat,IsReadybailed on the inCombat gate, and the trigger silently missed (the boss was already locked in by Detection so it never re-fired). Triggers now also runs the evaluator onCOMBAT_START, with the same triggered-latch making it idempotent. - Bosses tab populates on first open instead of requiring a
raid-dropdown click to refresh. Init ordering bug in
Config:CreateFrame. - Compound popup checkboxes now toggle on click.
MakeCheckboxonly installs its OnClick handler when you call:HookClick(fn), which the popup wasn't doing. - Compound popup value editors no longer overflow the popup frame. Previously anchored to the right edge of the 260 px-wide checkbox container; now anchored to the popup's right edge directly.
- Import / Export popup no longer crashes on first click. A bare
Texture was being passed to
AddThinBorderwhich calls:CreateTextureon its argument — a method only Frames have. - BigWigs hook now installs cleanly.
RegisterMessageis a CallbackHandler-1.0 method that takes a subscriber as the first argument, notself; we now use dot syntax with the HeroHelper namespace.
Documentation & assets
- README rewritten as a player-facing overview with screenshot
placeholders, and the
media/folder is now in the repo:media/icon.png— addon logomedia/screenshots/screenshot-reminder.pngmedia/screenshots/screenshot-options-general.pngmedia/screenshots/screenshot-options-bosses.png
- CLAUDE.md updated with
modules/Comms.lua, theCHAT_MSG_ADDONandGROUP_ROSTER_UPDATEevents, and the v1.1.0 version pin.
Removed
- Legacy
/hh debugsoundslash command (leftover instrumentation from the v1.0.0 sound-dropdown work).
v1.0.0
First stable release. Everything below is net-new since the v0.1.0
pre-release block further down this file.
New features
- Hash-based import/export. Per-boss settings now serialize to an opaque
HH!<base64>"hash" that captures a full snapshot of every boss's effective config (not just overrides). Importing a hash reproduces the sender's setup exactly regardless of the receiver's database defaults. Still accepts the legacyHH1|.../HH2|...plaintext for backward compatibility. See modules/Database.lua. /hh mobtest [HP%]command. Command-line-only diagnostic that arms the reminder button for your current target and fires it when that mob drops below the configured HP threshold (default 50%). Captures target GUID at invocation time so it survives retargeting; auto-disables on fire, on target death, or after a 10-minute safety timeout. Useful for verifying the reminder pipeline on a training dummy without pulling a real raid boss. See modules/Triggers.lua.- Bosses tab "Reset" button. Top-right of the Bosses config pane alongside Export / Import. Opens a confirmation popup; accepting clears every per-boss override and returns every boss to the researched database default.
- Researched default BL/Hero timings. Cross-checked every boss default against TBC Classic community guides (Icy Veins, Wowhead, r/classicwow BL-timing threads, Method, Warcraft Tavern). Four defaults changed to match consensus: Curator →
hp 20(Evocation burn window), Morogrim →hp 25(after second murloc wave), Hex Lord Malacrass →pull(skip a Spirit Bolts cycle), Shade of Akama →hp 35(fire during real DPS phase). The other 46 bosses were already correct. See the inline comments in modules/Database.lua. - Sound dropdown replaced with inline selectable rows. The Blizzard/LibUIDropDownMenu dropdown for sound selection had multiple issues (foreign LSM entries flooding the list, dropdown taller than the screen, click routing bugs). Replaced with a compact scrollable list of selectable rows inside the General tab.
Bug fixes
- Reminder button actually appears in combat. Protected frames with
SecureActionButtonTemplatecannot have Show/Hide/SetAlpha called in combat lockdown, and TBC Classic's layout engine mis-propagated container-relative anchors on a protected child when the non-protected parent was moved mid-combat (observedh=132313on a 52-tall button). Fixed by placing the non-protected container at the player's saved position at Initialize and never moving it again — visibility is toggled purely viacontainer:SetAlpha(0|1), which is always allowed, and the protected button uses a singleCENTERanchor plus an explicitSetSizeso it has deterministic dimensions. - BigWigs hook now installs cleanly.
BigWigs:RegisterMessage(…)was being called with method syntax, passingBigWigsitself as the subscriber; BigWigs rejected it with "attempted to register a function to BigWigsLoader, you might be using : instead of . to register the callback." Fixed by using dot syntax and passing the HeroHelper namespace as the subscriber, per CallbackHandler-1.0's convention. - Bosses tab populates on first open.
BuildBossesTabcalledRefreshBossListbeforeconfigState.framehad been assigned, so the initial refresh silently no-opped and the boss list appeared empty until the player clicked the raid dropdown once. Fixed the init ordering inConfig:CreateFrame. - Import / Export popup no longer vanishes on first click. The popup's edit-box background was a bare
Texture, butAddThinBordercalls:CreateTextureon its argument — a method only Frames have. The first click on Export or Import hit a silent error frame. Wrapped the background in a realFrameso the border helper works, enlarged the popup to 520×360 to fit the full-DB hash, and wrapped the button click handlers inpcallso future silent errors surface in chat. - Phase trigger option hidden for bosses without yells. The
Phaseentry in the per-boss trigger-type dropdown silently did nothing on bosses whose database entry had noyells = { … }table, because the phase-detection engine matches boss-yell text. Only the ~13 bosses with yells (Prince, Vashj, Illidan, Kil'jaeden, etc.) now show the Phase option in their dropdown.
Chores
- Removed leftover
/hh debugsoundslash command. Was added as temporary instrumentation while tracking down the sound-dropdown bug and said "will be stripped once the dropdown is confirmed working." The sound dropdown was since replaced with inline rows; the diagnostic is obsolete. This was also the only code path in the addon printing debug-style output unconditionally — the addon is now silent outside of user-initiated slash commands, actual errors, and/hh debug. - Sticky
/hh testmode toggle. Test mode is now a persistent toggle rather than a timed preview — drag the button into position, then run/hh testagain (or the same keybind) to turn it off.
Files
Net additions / significant rewrites since v0.1.0:
Libs/LibUIDropDownMenu/(embedded to dodge the tainted Blizzard dropdown template in TBC Classic 2.5.5)- Import / Export hash codec in
modules/Database.lua /hh mobtestimplementation inmodules/Triggers.lua
v0.1.0
Initial release.
Features
- Boss database covering all nine TBC raids (Karazhan, Gruul's Lair, Magtheridon's Lair, Serpentshrine Cavern, Tempest Keep, Zul'Aman, Hyjal Summit, Black Temple, Sunwell Plateau) with sensible default trigger configs per boss.
- Per-boss, per-character trigger configuration: Pull, HP %, Phase, or Off.
- Phase detection via boss yells (phase-up events hard-coded per boss in modules/Database.lua).
- Boss detection with three sources:
BigWigs_OnBossEngagecallback when BigWigs is present- DBM
pullcallback when DBM is present - Fallback unit scan of target / focus / mouseover / boss1-5 / raid targets on target-change events
- HP poll ticker (250 ms) for HP %-type triggers; only runs on fights that actually use one.
- Reminder button as a
SecureActionButtonTemplatewithtype1=macro/macrotext1=/cast [@player] <spell>. Uses the player's faction spell icon (Heroism for Alliance, Bloodlust for Horde). Hidden by default; shown only when all of the following are true:- The player is a Shaman who knows the spell
- The spell is not on cooldown
- Sated / Exhaustion is not on the player
- The boss trigger condition evaluates positively
- The reminder has not already fired for this pull
- Auto-hide triggers: combat end, successful cast (via cooldown detection), or debuff detection.
- Draggable, lockable reminder button. Size configurable 24–96 px (default 40).
- SharedMedia-3.0 sound selection with a small default set registered by the addon. Preview button in the config panel.
- Minimap button (self-contained, no LibDBIcon dependency) with left-click options / right-click lock toggle / drag to reposition.
- Two-tab config panel (General / Bosses) styled to match FishingKit's flat dark theme.
- Slash commands:
/hh,/hh lock,/hh unlock,/hh reset,/hh test,/hh debug. - Key bindings:
HEROHELPER_CONFIG,HEROHELPER_LOCK,HEROHELPER_TEST. - Per-boss settings import / export via a plain-text
HH1|...share string. Copy-paste in chat to share tuned trigger configs with raid members. Import silently skips unknown boss IDs. - Config panel closes with ESC (via
UISpecialFrames). - MIT license. CurseForge
.pkgmetain repo root.
Fixes during initial development
- Test button no longer casts Heroism/Bloodlust. The secure macrotext is only armed when the reminder button is locked AND not in test mode; otherwise clicks and drags are no-ops. Fresh installs default to locked so the button works out of the box.
- Pulse glow is perfectly centered at every button size. Previously it animated via scale on a CENTER-anchored fixed-size texture, which drifted at larger sizes. Now animates alpha only on a texture anchored with symmetric SetPoint offsets recomputed in
ApplySize. - Button size slider's fill bar now renders correctly for the default 40 px value. Fill width is recomputed via
OnSizeChangedinstead of being baked in at construction time.
Files
HeroHelper.toc,Core.lua,Bindings.xmlmodules/Database.lua,modules/Detection.lua,modules/Triggers.luamodules/ReminderButton.lua,modules/Minimap.lua,modules/Config.luaLibs/LibStub/,Libs/CallbackHandler-1.0/,Libs/LibSharedMedia-3.0/README.md,CHANGELOG.md,CLAUDE.md,LICENSE,.pkgmeta,.gitignore

