promotional bannermobile promotional banner

HelloTotems

A lean, opinionated totem manager for WoW Classic Era Shamans.

File Details

v0.2.0-classic

  • R
  • May 22, 2026
  • 2.41 MB
  • 8
  • 1.15.8
  • Classic

File Name

HelloTotems-v0.2.0-classic.zip

Supported Versions

  • 1.15.8

HelloTotems

v0.2.0 (2026-05-22)

Full Changelog Previous Releases

  • Bump version to 0.2.0.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Close flyout and reassign main in combat via macro + /click chain.
    SecureHandlerWrapScript wouldn't fire its post body on entries in this
    Classic Era client (empty preBody silently no-ops the wrap, nil preBody
    errors as "Invalid pre-handler body"), so post-cast cleanup couldn't run
    in combat — flyout stayed open, main button kept casting the previously
    assigned totem.
    Switch each entry to type1="macro" with macrotext "/cast Spell\n/click
    PostHandler". Both run inside SecureActionButton's secure macro
    execution, so the /click on a per-entry SecureHandlerClickTemplate post-
    handler also runs in secure context. The post-handler's _onclick snippet
    reassigns main's spell1 (SetAttribute on a frame ref) and hides the
    flyout (Hide on a SecureHandlerBase frame ref) — both permitted in the
    restricted env. The whole chain — cast + reassign + close — now works
    in and out of combat.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Revert flyout entry to PostClick after WrapScript proved non-functional.
    SecureHandlerWrapScript's post body isn't actually running on entry
    clicks in this Classic Era client — the cast itself worked (so the
    SecureActionButton OnClick is intact), but the flyout-hide and main-
    spell reassign never fired, leaving the flyout open and the main button
    casting the previous totem on its next click. Same symptom we'd seen
    earlier when trying to wrap the main button's OnClick.
    Move both side effects back into PostClick, combat-guarded as before.
    Out of combat: flyout closes and main reassigns. In combat: cast still
    fires; flyout stays open until the user dismisses it (chev or open
    another flyout) and the main button reassigns from the DB on
    PLAYER_REGEN_ENABLED via Bar.needsRefresh.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Use SecureHandlerWrapScript on flyout entries for in-combat close.
    Click() isn't exposed in WoW's restricted execution env, so the previous
    SecureHandlerClick + castHelper:Click() approach failed with "attempt to
    call method 'Click' (a nil value)" — and meant the entry never cast at
    all. Revert entries to SecureActionButton (cast on click via type1=spell)
    and attach a SecureHandlerWrapScript post body with the chev as header.
    The post snippet only does SetAttribute (main spell1) and Hide (myflyout),
    both of which the restricted env permits on frame refs, so the entry
    casts, reassigns the main button, and closes the flyout in combat too.
    The chev now also carries a "main" frame ref for the post body to reach.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Close the flyout when picking an entry in combat.
    Entries were SecureActionButtons that cast on click, with an insecure
    PostClick hiding the flyout — and PostClick can't Hide() a flyout
    parenting secure children during combat, so the flyout stayed open
    after picking. Switch entries to SecureHandlerClickTemplate and route
    the cast through a shared hidden SecureActionButton (HelloTotemsCastHelper):
    the entry's _onclick snippet sets spell1 on the helper, fires its Click,
    reassigns the main button's spell1, and hides the flyout — all in the
    secure execution context, so the whole chain works in combat.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Open totem flyouts in combat via secure-handler snippets.
    The previous flyout open/close path used insecure HookScripts, which
    fail in combat because Hide/Show on a frame parenting SecureActionButton
    children is protected. The chev is now a SecureHandlerClickTemplate with
    an _onclick snippet that toggles the flyout in the restricted execution
    environment, and the main button routes right-click through the secure
    cast handler (type2="click", clickbutton2=chev) so right-click toggle
    also works mid-combat. The flyout itself is now a SecureHandlerBaseTemplate
    so its visibility methods are exposed to the snippet env. Closing other
    flyouts after a left-click cast stays insecure (PostClick, combat-guarded);
    the chev's snippet already hides siblings when opening, which covers the
    in-combat close-on-open path.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Remove the now-shipped action-button dimming entry from DESIGN.md.
    The previous commit's message claimed this was done; it wasn't.
    Cleaning up now.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Drop completed and out-of-scope ideas from DESIGN.md.
    Lightning Shield charge count and bar scale are shipped; Totemic Call
    is a TBC ability (not in Classic Era); per-character totem ordering
    is dropped by preference. Action-button dimming is now shipped too;
    removing the leftover entry leaves the section empty for now.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Dim out-of-mana buttons with a blue icon tint.
    IsUsableSpell(spellName) returns noMana=true when the player can't
    afford the assigned spell; applyUsable sets the icon's vertex color
    to a faint blue in that case and clears it otherwise. Driven by
    SPELL_UPDATE_USABLE and also called from applySpell so a fresh
    reassignment reflects the right state immediately. Empty/placeholder
    slots are untouched — applySpell owns their vertex color.
    Out-of-range dimming isn't added: every spell on this bar is
    self-cast (totems, weapon imbues, Lightning Shield).
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Add Settings config panel and scale configuration.
    /ht config opens a Blizzard Settings panel registered under
    AddOns -> HelloTotems. The panel exposes a "Lock bar position"
    checkbox bound to HelloTotemsDB.barLocked (same effect as
    /ht lock|unlock) and a "Bar scale" slider (0.6-1.6, step 0.05)
    wired to HelloTotemsDB.scale via the new Bar:ApplyScale.
    Scale is also settable via /ht scale <0.5-2.0>. ApplyScale is
    combat-guarded since SetScale on a frame with protected children
    is restricted in lockdown; all entry points (slider, slash) no-op
    or print a notice during combat.
    Also: default bar y-offset bumped from -200 to -230 for fresh
    installs, and a few em dash / arrow characters in user-facing
    strings replaced with ASCII since the in-game default font
    renders them as rectangles in Classic Era.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
  • Show Lightning Shield charge count on the shield button.
    Adds a NumberFontNormal overlay in the top-right of slot 6, parented
    to the cooldown frame so it renders above the swirl. updateMainCooldown
    already iterates UnitBuff for the slot's duration — picking up the
    3rd return (count) is free. Cleared whenever the buff isn't active.
    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com