promotional bannermobile promotional banner

Sentinel BuffMeThen

Support nearby players with buffs – including Paladins, Priests, Druids, and Mages.
Back to Files

SentinelBuffMeThen_v007.zip

File nameSentinelBuffMeThen_v007.zip
Uploader
RLDevDERLDevDE
Uploaded
Nov 13, 2026
Downloads
10
Size
2.1 MB
Flavors
MoP ClassicClassicTitan Reforged ClassicForeverRetail
File ID
9583917
Type
R
Release
Supported game versions
  • 12.1.7
  • 5.5.4
  • 4.4.2
  • 3.80.2
  • 3.4.5
  • 1.60.1
  • 1.15.9

What's new

Changelog

1.2.4

Fixed

  • Strangers outside the group were never detected on Forever: the friendly nameplate CVar there is nameplateShowFriendlyPlayers, not nameplateShowFriends - the addon set a nonexistent CVar, friendly plates stayed off and zero nameplateN unit tokens ever existed (verified via /sbmt debug: nameplates: 0 units with showAll=1). Both CVar names are now set, and the existing 5s ticker re-asserts them if another addon turns them back off. /sbmt debug prints friendlyPlayers= too.
  • Strangers appeared in the list but could not be buffed: the secure spell path does not resolve nameplate/focus/mouseover unit tokens on this client. Non-group entries now always cast through the proven target-by-name macro (/target <full name> + cast + targetlasttarget); the full "First Last" name can only match that exact player. Group members keep the direct unit cast.
  • Strangers could silently vanish for a whole session: a single failed unit API call (dead unit, combat-protected call, bad argument) blacklisted that API forever, after which the friendly check had no answer and dropped every nearby player. Probes now only blacklist after three consecutive failures - a sporadic per-unit miss no longer kills the API.
  • When no friendliness check can answer at all (UnitIsFriend, UnitReaction and UnitCanAttack all unavailable) a nameplate player is now listed anyway - a failed cast on a hostile beats an invisible friendly stranger.
  • An unreadable aura state is unknown, not "buffed": entries whose auras the client refuses to read (denied) now count as missing and stay in the list with a castable button - on clients that block aura reads on nameplate units this is the only way a stranger can ever appear. Their icons show the buffable border instead of the grey "unreadable" one.
  • UnitIsPlayer being refused or secret no longer drops a stranger: UnitPlayerControlled and the GUID prefix ("Player-") are fallbacks, which cannot misfire on NPCs.

1.2.3

Changed

  • The window now sizes to its content instead of a fixed 230px: the buff icons form one right-aligned column on every row (same position in each, like PallyPower), names fill the rest and the frame shrinks to the widest name plus the most icons a row carries. No more dead space or shifted icons on a single row.
  • When DaylightUI is installed the window borrows its font, text colors and softened class colors through the public plugin API (OptionalDeps: DaylightUI), so the list looks related to the rest of the UI while keeping its own Sentinel shell. Without DaylightUI nothing changes - it is not required.
  • The auto-buff button moved to the right edge of the header (before the counter), so it can no longer cover the "BuffMeThen" title on a narrow window.
  • Rows allow up to 6 buff icons now (was 4): if a class gains another buff the window simply grows wider - no layout change needed.
  • /sbmt debug lists the current candidates with their per-buff state (MISSING/ok, in/out of range), showing exactly why a player is or is not offered for a buff.

Fixed

  • "Cannot anchor protected frames to regions" error at load: the buff icons anchored directly to the name font string, which secure buttons may not do. They now anchor to the row at an offset computed from the name width.
  • Name width could not be measured on this client (GetStringWidth returns a secret value), so every row fell back to a fixed 96px and icons sat too far right. The width is now estimated from the name's character count instead.
  • Strangers beyond ~10yd vanished for classes whose buff names the range API could not resolve (priest, mage): the interact-distance cross-check used index 4 (follow range, ~5yd) instead of index 1 (~28yd inspect), and UnitInRange does not cover non-group units at all, so the final verdict was always "out of range" and "hide out-of-range" removed the row. The check now uses index 1, and a stranger with no range answer at all stays listed - a failed cast is a better signal than an invisible row.
  • The spell-range probe tries the spell id first, then the localized name (modern C_Spell.IsSpellInRange wants an id, legacy IsSpellInRange a name), with separate blacklist keys so a signature the client rejects cannot kill the working one.
  • Friendliness fallback was inverted: reaction 1-4 (hostile/neutral) counted as friendly, so enemy players on nameplates could end up in the list. Only reaction 5+ (friendly and better) counts now.
  • The auto-buff button (the icon with the counter) sat on top of the "BuffMeThen" title; it and the paladin header icons moved to the right.
  • The reagent strip no longer lands on the "no one to buff" text: an empty window keeps its own text area and the text sits at the top.
  • Saved settings with the old 14-row default made the list ignore the new 5-row default (15 rows in a city). The row limit is reset to 5 once; the "Max rows" slider still changes it afterwards.

1.2.2

Changed

  • The resting crowd filter is gone: strangers are detected whenever "Include strangers in range" is on, also inside cities and rest areas. "Max rows" already caps the visible list, so a crowd can no longer hide everyone — this was the reason players showed up on one character and not another (resting state + 6+ friendly plates).
  • The "Include strangers while resting" option was removed with the filter it controlled.
  • /sbmt debug now also prints the resolved class, flavor and each buff slot's sKnown/sId/sName, so broken slot resolution is visible at a glance.

Fixed

  • The History tab no longer errors on Forever: SetFont there requires the third flags argument, which the search edit box was missing.
  • A missing localized spell name no longer breaks a slot: IsSpellInRange is skipped for empty names instead of erroring (which would blacklist the API for everyone), and both the range check and the cast buttons fall back to the spell id when the name does not resolve.

1.2.1

Added

  • logo.png is used everywhere: addon list icon (TOC), minimap button and the headers of the buff window, settings window and assignment matrix.
  • Option "Include myself": you appear in your own list and are buffed through the direct unit token.
  • Option "Auto-enable friendly nameplates": switches nameplateShowFriends on once at login and on zone change (out of combat), so strangers get a unit token. Mouseover is an additional stranger source next to target and focus.
  • Settings window: the General, Buffs, Window and About pages scroll (mouse wheel and a draggable scrollbar) and follow the content height. The window is more compact (560x520). The History tab keeps its fixed layout with its own list scroll.

Changed

  • Minimap button: registered as a LibDataBroker launcher through LibDBIcon (when any loaded addon provides the libraries), so it looks like the other addons' buttons and collectors (SentinelForeverUI button bars, MinimapButtonHide) can pick it up. Without the libraries a LibDBIcon-style fallback button LibDBIcon10_SentinelBuffMeThen is built on the Minimap.
  • Name macro restored for strangers and buffers: /target Name, /cast [help,nodead] Spell, /targetlasttarget. Buffers without a unit token are listed again so you can buff back without targeting them first; after a click they stay hidden for two minutes because their buff state cannot be read. Group members and yourself keep the direct unit path.
  • The buff window always anchors at its top-left corner (bottom-left with "Grow upwards") and re-anchors old saved positions, so new rows only extend it downward instead of growing in both directions.
  • Every unit name is read as the full character name ("First Last", via GetUnitName) instead of the first name returned by UnitName, so assignments, buffers, history, overrides, sync and the macro no longer mix up players who share a first name (WoW Forever surnames).
  • Initialize runs every step isolated and creates the minimap button first; an error in one step can no longer take the button or the event wiring down.

Fixed

  • 16001 was missing from the TOC Interface line, so the Forever client treated the addon as out of date and did not load it.
  • Strangers outside the group could not be buffed first because they only appear with a unit token (see friendly nameplates above).
  • Nearby players were not detected: nameplateShowAll is now enabled next to nameplateShowFriends (master switch — without it only the target has a plate and no nameplateN token resolves), and the check retries every few seconds so a combat-locked first attempt no longer disables it for the whole session.
  • Friendliness no longer relies on UnitIsFriend alone (unreliable on nameplate tokens): it falls back to UnitReaction and UnitCanAttack.
  • IsSpellInRange returning "out of range" on nameplate tokens no longer hides the row — CheckInteractDistance (~28 yd) cross-checks first, so a false negative cannot make nearby strangers invisible when "hide out-of-range rows" is on.
  • A missing UnitIsConnected API no longer marks every unit out of range.
  • Combat taint fixed: CheckInteractDistance/UnitInRange are protected calls on Forever during combat and threw ADDON_ACTION_BLOCKED. In combat only IsSpellInRange answers, falling back to the last known range per player+buff; the extra probes only run out of combat. Group members are friendly by definition and skip the friendly check entirely, so they can never vanish mid-combat if UnitIsFriend fails.
  • The resting filter no longer hides strangers in every rest area — villages and camps in the open world also report IsResting(). Strangers are only suppressed while resting when a real crowd is around (6+ friendly nameplates). A deliberately targeted/focused/hovered player is never suppressed, and "include strangers while resting" still disables the filter completely.
  • /sbmt debug prints the nameplate CVars, which nameplateN tokens resolve and their friendliness — use it to diagnose stranger detection on any client.
  • Forever has no usable combat log for addons: registering COMBAT_LOG_EVENT_UNFILTERED throws ADDON_ACTION_FORBIDDEN at load. Strangers on Forever are discovered through nameplate tokens instead — nameplateShowAll is enabled automatically (verified working: friendly players resolve with friend=true). The combat log remains active on the classic flavors (Era/TBC/Wrath/Cata/MoP).
  • The "recently clicked" memory for tokenless entries is now per buff, not per player: after casting Fortitude on a stranger, Spirit/Shadow Protection stay clickable instead of hiding the whole row for 2 minutes.
  • The list defaults to 5 rows ("Max rows" setting, 3-30). Rows that finish drop out and the next candidates slide in automatically, so the window stays a rolling queue instead of a wall of names.
  • Priest "spinnt" fixed: Fear Ward only lasts ~3 minutes — always under the warn threshold — so every unit wearing it sat permanently in "expiring" state: amber rows that never cleared, plus auto-buff re-casting it on a loop. Slots can now be flagged noWarn (missing/present only, never "expiring") and Fear Ward uses it. All four classes' spell ids verified against the Forever trainer data.
  • ADDON_ACTION_FORBIDDEN spam stopped: every optional API call now goes through B.Probe(name, fn, ...), which blacklists a function after its first failure so a protected API logs once and is never retried. Covered: GetPlayerInfoByGUID, UnitGUID, UnitReaction, UnitCanAttack, CheckInteractDistance, UnitInRange, UnitIsConnected, IsResting, Ambiguate, GetItemCount, PlaySound/PlaySoundFile, SendChatMessage, SendAddonMessage, RegisterAddonMessagePrefix and the nameplate CVar reads/writes. Unknown stranger classes fall back to the people DB. /sbmt debug names the blacklisted APIs and captures the Lua stack of the last forbidden/blocked call for diagnosis.
  • Strangers with a live unit token (nameplate/target/focus/mouseover) now cast through the token directly instead of the /target macro — the macro only remains for tokenless entries (combat-log strangers, buffers without a token).

1.2.0

Added

  • Multi-client support: Classic Era, TBC Anniversary, Wrath/Titan Reforged, Cataclysm, Mists of Pandaria Classic, WoW Forever (Camelot) and Retail including Midnight. The TOC lists every current interface number and no longer restricts loading to the Camelot client.
  • Client flavor detection (B.flavor): classic-style flavors keep ranks, group variants and reagents; modern flavors (Retail, MoP, Cata) use the single raid-wide spell, so the group spell is folded into the single slot and reagents are ignored.
  • Spell database extended with the TBC ranks (Fortitude, Spirit, Shadow Protection, Mark/Gift of the Wild, Thorns, Arcane Intellect/Brilliance, Dampen/Amplify Magic, all paladin blessings and greater blessings) and the extra paladin auras and seals of TBC and MoP. Spell ids that do not exist on the running client are skipped, so the highest known id always wins.
  • Who-buffed-me tracking falls back to the legacy UnitAura on clients without C_UnitAuras and additionally uses the combat log (SPELL_AURA_APPLIED) on Era/TBC/Wrath/Cata/MoP, which finds strangers without a unit token. Retail and Forever keep the aura-source path.

Changed

  • Spell-known lookup falls back through C_SpellBook, C_Spell, IsPlayerSpell and IsSpellKnown; addon messages and chat use C_ChatInfo or the legacy globals, and the instance channel where applicable.
  • Unit predicates and names are read through guarded wrappers so Midnight cannot raise "boolean test on a secret value".
  • Texture gradients work with either SetGradient or the legacy SetGradientAlpha; secure buttons force key-up so clicks behave the same regardless of the ActionButtonUseKeyDown setting.
  • Paladin on Retail has no raid blessings: the list stays empty there, the aura self-bar and the assignment matrix remain available.

1.1.1

Fixed

  • Class-token lookup for grouped players; paladin blessings resolve from the target's class instead of its localized class name.
  • Paladin self-bar aura scan error; tracked buffers survive entering the world and reloads.
  • Spell-info lookups are guarded against invalid ids and client API errors; the missing tooltip accent color is restored.
  • Secure buttons register release clicks only, avoiding duplicate casts.
  • An explicit "no blessing" assignment is kept instead of silently reverting to the automatic fallback.
  • Unsupported aura lookup APIs fall back to another reader; unreadable aura scans count as unknown, not missing, and failed reads during reload or combat no longer clear tracking state or replay chat announcements.
  • The player is counted in raid blessing buckets and expiring raid buffs are refreshed.
  • Range checks no longer return false positives from secret values and no cast is offered when the target is unknown or out of range.
  • Paladin assignment sync is stable on roster changes; the Clear button no longer wipes other paladins' assignments.
  • The History cast target stays stable in combat; the settings and assignment windows are large enough for their contents.

Changed

  • Nearby strangers and History casts use secure unit tokens; entries without a live unit token stay in History but are not castable.

1.1.0

Added

  • PallyPower-style paladin tools: blessing assignment matrix (paladins x classes plus an aura column, click or mouse wheel to cycle), player-level overrides, Auto-Assign, Report to raid/party chat, Clear, and addon-channel sync between SentinelBuffMeThen users (P button in the header).
  • Paladin self bar: aura, Righteous Fury and seal icons, red when missing, green with a timer when active; click to cast, right-click to cycle.
  • Auto-buff button in the header: casts the next needed buff and rotates through all actionable targets.
  • Remaining time on buff icons with an amber warning under a configurable threshold; the remembered expiry keeps timers ticking through combat-secret auras.
  • Sound and frame flash when a new buff lands on you.
  • Reagent strip along the bottom of the window: item icons and counts for the reagents your known group buffs need.
  • History tab in the settings window with search and filters (all / buffed / not buffed / can't buff); /sbmt history jumps straight to it.
  • Persistent people database and buff event log (who buffed you, when and how often), saved across sessions; "Clear history" button in the settings.
  • Raid mode: one row per raid subgroup (Priest/Druid/Mage) or per class (Paladin) with missing counts and click-through rotation.
  • Locales: deDE in full; frFR, esES/esMX, ptBR and ruRU for visible strings. Spell names come from the client's localized database.

Changed

  • Chat announcements dedupe per buff family and only fire on the absent-to-present transition.
  • Resting areas no longer flood the list with strangers (opt-in setting).

1.0.0

  • Initial release: buff-back list for Paladin, Priest, Druid and Mage.
  • Detects who buffs you via the aura sourceUnit and announces it in chat.
  • Rows for buffers, group members and friendly strangers (nameplates), with left-click single buff and right-click group buff.
  • Always casts the highest known rank; reagent tracking for group buffs.
  • Paladin blessings follow SentinelForeverBlessings assignments when installed.
  • Sentinel glass look, minimap button and settings window (/sbmt).

This mod has no additional files