PallyPower Smart

Spec and role-aware blessing smart-assignment companion for PallyPower. Detects talent specs via inspect, heuristics, and player broadcast so a feral druid gets might while the boomkin gets wisdom, and tanks never get salv.
Back to Files

PallyPowerSmart-0.15.1.zip

File namePallyPowerSmart-0.15.1.zip
Uploader
titan_silkytitan_silky
Uploaded
Aug 3, 2026
Downloads
1.3K
Size
111.7 KB
Flavors
ClassicClassic TBC
File ID
8566168
Type
R
Release
Supported game versions
  • 2.5.6
  • 2.5.5
  • 2.5.4
  • 2.5.3
  • 2.5.2
  • 2.5.1
  • 1.15.8
  • 1.15.7
  • 1.15.6
  • 1.15.5
  • 1.15.4
  • 1.15.3
  • 1.15.2
  • 1.15.1
  • 1.15.0

What's new

# Changelog

## 0.15.1

### Fixed
- **Tanks no longer get greater Salvation in 5-mans**: tank detection read the
  main-tank flag off the *raid* roster only, and a party has no raid roster —
  so in a dungeon there was no automatic role signal at all and tank-ness fell
  back entirely to spec detection. Before the first pull that spec is often
  still unknown (nobody has been inspected yet and no spec-defining cast has
  hit the combat log), the unknown spec falls into the class DPS priority, and
  that list is Salvation-first — so the tank took greater Salv, even as the
  only member of their class. Party main-tank assignment (`/mt`) and the
  role picker (`UnitGroupRolesAssigned`) now count as tank signals alongside
  the raid flag, and the three places that decide tank-ness (assigner roster,
  blessing report, priority panel) share one implementation instead of three
  copies that could drift. A main-tank assignment overrides the spec label as
  it always has (an Arms warrior can be the one tanking); the role picker is
  only queue intent, so it yields to a spec confirmed by inspect or pinned by
  hand — someone who picked Tank for a faster queue pop and then plays DPS
  keeps their Salvation.

### Added
- **"Role: Tank" / "Role: Not a tank" in the Specs tab** — clicking a member
  already offered spec pinning, and the tooltip already displayed a role
  override, but nothing could actually set one. This is the manual fallback
  when nobody has set a main tank or a role, and it is independent of spec
  (an Arms warrior can be the one tanking).

## 0.15.0

### Fixed
- **Priority panel can now be disabled while the PallyPower window is closed**:
  the toggle (menu checkbox and `/ppsmart panel`) keyed off the frame's current
  visibility, but the frame is force-hidden whenever the PP window closes — so
  with PP closed every toggle attempt re-*enabled* the panel, and the menu
  checkbox showed unchecked even though the panel was still on and reopened
  with PP. The toggle now flips the saved setting directly (visibility follows
  it), the checkbox reflects the saved setting, and toggling while PP is closed
  prints a confirmation so it no longer looks like nothing happened.

## 0.14.3

### Changed
- Internal: consolidated the per-column wishlist derivation that was
  duplicated across the matcher, reseat, and dead-greater passes into shared
  helpers. No behavior change.

## 0.14.2

### Changed
- **Hunter pets get their own blessing priority — Might > Kings > Salvation**
  (Salvation dead last): a class column whose only occupants are pets (hunter
  pets sit in the warrior column) previously fell back to that class's
  Salvation-first DPS order and greater-Salv'd the pets. Real players sharing
  a column always decide the greater blessings on their own — pets never vote,
  never receive 10-min overrides, and can never promote their preference over
  actual players'.

## 0.14.1

### Fixed
- **A paladin's greater blessing can no longer end up assigned but never cast**:
  exclusivity and buff ranks can force the per-member matcher to route every
  member of a class onto a paladin's *other* blessings as 10-min casts, leaving
  his seated greater received by nobody (e.g. a Prot paladin holding greater
  Kings while casting 10-min Sanctuary on himself and 10-min Salvation on the
  Ret — the Kings was never cast). Greater promotion needs a >50% same-blessing
  majority and the reseat pass only shuffles the already-seated blessings, so
  neither repair could catch it. Such a dead greater is now re-seated to the
  blessing that paladin is already casting on the class, converting those
  10-min casts into a free greater — fewer 10-min rebuffs, identical buffs
  received.

## 0.14.0

### Fixed
- **Assignments no longer wiped by other paladins' clients**: PallyPower clients
  periodically rebroadcast their own assignment row (`SELF` messages — sent on
  REQ replies whenever anyone opens the PP window, on spell/roster events, and
  after Lay on Hands / Divine Intervention casts), and every receiver applies
  them unconditionally. A client that fired before processing a Smart-Assign
  re-asserted its stale or just-cleared row, silently blanking that paladin's
  assignments on everyone else's copy ("assigns correctly, then wipes out the
  entire row for one paladin"). Smart-Assign now watches incoming `SELF`/`NASSIGN`
  for ~4.5s after each run and re-sends the computed state when a managed
  paladin's rebroadcast contradicts it (max 3 corrections per paladin per run,
  with a chat notice), so stale rebroadcasts self-heal instead of sticking.
- **History log no longer spams unchanged 10-min blessings**: clients re-dump
  their entire normal-blessing list with every `SELF` burst (and PallyPower's
  Main Tank/Assist auto-assign re-sends on a timer), and the log printed every
  quad each time — endless repeats of the same "-> target (paladin)" lines. The
  log now diffs against the last seen value and only records actual changes;
  the baseline seeds from saved data at login and resets on `CLEAR`.

### Added
- **Assign without raid assist (free-assign pool)**: Smart-Assign no longer
  drops to self-only just because you lack lead/assist. Paladins with
  PallyPower's **Free Assignment** enabled accept assignments from anyone, so a
  non-assist run now manages yourself plus every free-assign paladin: their
  greater rows and 10-min overrides are computed and broadcast normally, while
  paladins without it stay locked (the existing locked-improved-caster warning
  points them out). The button tooltip and the run summary (`(free assign)`)
  show the active scope. Paladins whose clients have Free Assignment off cannot
  be managed without assist — that gate lives in *their* PallyPower, not ours.

### Changed
- **Your own Free Assignment option no longer grants raid-wide assign mode**:
  it previously unlocked the full CLEAR-everyone path, but receivers without
  free assignment reject a non-leader's assignments anyway, leaving the raid
  inconsistent. Non-leaders now always use the free-assign pool scope above;
  as a non-leader, locked paladins' rows are also no longer rebroadcast.
- **Pool runs still broadcast `CLEAR SKIP`**: a non-leader's CLEAR makes each
  *free-assign* client wipe its own row and its own 10-min overrides (everyone
  else ignores it) — the only way to kill stale overrides living solely on that
  paladin's client, which the per-entry clear broadcasts can't see. The brief
  cleared-row window this opens is covered by the reassert guard.
- **Self-only runs start from a clean slate**: your own row is zeroed before
  Pass 1, so stale cells in columns with no group members no longer survive.

## 0.13.0

### Changed
- **Spec preferences updated**: Ret paladins now prefer Kings as their signature
  greater blessing (was Might); Prot paladins now prefer Salvation (was Kings).
  Prot paladins are exempt from the scarcity penalty on Salvation so the
  preference actually fires — the operational pattern is greater Salv on the
  raid with a 10-min Sanctuary on self.
- **Reseat alignment tiebreak**: when two greater permutations produce the same
  override count, reseat now prefers the one where paladins hold greaters they're
  rated highest for. This ensures an Improved Might/Wisdom paladin's greater
  matches their specialty instead of being assigned arbitrarily — e.g. a Ret with
  Improved Might now holds greater Might (free for everyone who wants it) instead
  of greater Wisdom with 10-min Might overrides on half the class.

## 0.12.3

### Fixed
- Updated internal bundled LibClassicInspector to latest version (20) straight
  from TacoTip.

## 0.12.2

### Fixed
- Fixed tooltip error on the Spec panel's Rescan button caused by a recent
  WoW client update tightening type validation on `GameTooltip:SetText`
  (boolean `true` for the wrap argument is no longer accepted; now passes `1`).

## 0.12.1

### Changed
- Bumped TBC interface version to 20506 (patch 2.5.6).

### Fixed
- Smart-Assign no longer clears aura assignments when it runs. Previously,
  both the local `ClearAssignments` call and the broadcast `CLEAR` message
  would zero out `PallyPower_AuraAssignments`, resetting every paladin's
  aura each time you clicked Auto-Assign. Now uses PallyPower's `skipAuras`
  parameter (`CLEAR SKIP` on the wire) so auras are left untouched.

## 0.12.0

### Changed
- **Greater reseat pass**: after the promotion loop, Smart-Assign now re-permutes
  *who holds which* of a class column's greater blessings whenever that reduces
  the number of 10-minute casts. The buffs everyone receives (and their ranks)
  are provably unchanged — the pass only converts forced 10-min overrides back
  into free greaters. This fixes columns where Pass 1 broke an equal-rating tie
  the "wrong" way for a minority of the class (under the >50% the promotion pass
  needs): e.g. 2 enhancement + 3 resto shamans with 3 paladins used to cost
  three 10-min casts per enh shaman; now the Improved-Might paladin takes
  greater Wisdom and only his two 10-min Mights remain (6 → 2 casts, identical
  buffs).

### Added
- **On-grid 10-min overrides**: each paladin's 10-minute (normal) blessing
  overrides now appear as small icon+name badges inside their row of the
  assignment grid, in the target's class column — so you can see *every*
  paladin's per-target overrides at a glance, not just your own (PallyPower's
  built-in indicator only shows the local player's, keyed by recipient). A row
  grows downward to fit when a paladin has more overrides than the cell holds.
  Toggle with the **"Show 10min buffs on grid"** checkbox on the Blessings tab
  (on by default).
- **Debug tab**: the `[SA-DBG]` Smart-Assign trace now lands in a dedicated
  **Debug** tab in the info panel as selectable, copyable text (click, Ctrl+A,
  Ctrl+C — WoW has no addon clipboard API), with a "Capture debug trace"
  checkbox.

### Changed
- **Min-max buff ranks (Pass 2 rework)**: the per-member matcher now maximizes
  the *ranks* of the blessings people receive instead of minimizing 10-minute
  casts. The strongest caster of each wanted blessing supplies it — Improved
  Might/Wisdom always reach everyone who wants that blessing — even when that
  takes extra 10-min overrides, with the displaced greaters cascading onto the
  other paladins (3-way rotations like "A→Wis, B→Kings, C→Salv on the same
  target" are normal now). Strict top-N coverage is unchanged; among equal-rank
  options fewer overrides still win. Expect a higher "Overrides: N" in the run
  summary — each extra cast is a strictly stronger buff.
- **Clean-slate 10-min overrides**: clicking Smart-Assign now clears existing
  10-minute overrides for the paladins it manages (your own in self-only mode,
  the whole controllable pool with assign rights) *before* rebuilding, instead
  of layering on top of stale manual overrides. Removed overrides are broadcast
  as clears so other paladins' views update too.
- **Info flyout height**: the info panel now spans the main PallyPower frame
  **plus** the priority (bottom-expansion) panel when that panel is open.
- **Auto-refresh**: the info flyout's active tab (Blessings report / Debug
  trace) refreshes automatically ~1s after a Smart-Assign.

### Fixed
- **Own spec known at login**: the local player's spec is now read from their
  own talents at login/roster settle and at the start of every Smart-Assign,
  not only when a talent point is spent. Previously a fresh login/reload left
  even *yourself* "unknown" until some async event landed, which could skew the
  first Smart-Assign (an unknown paladin is treated as the Holy default
  profile) — the classic "first click was odd, second click was perfect".
- **Spec guardrail**: the registry now rejects spec labels that aren't valid
  for the class, and a one-time cleanup drops existing invalid labels from the
  saved DB. Hunters/Rogues/Mages/Warlocks are only ever "DPS" — a bad broadcast
  can no longer permanently mark a hunter as "Protection".
- **Bear-tank spec sharing**: the broadcast receiver's parse pattern silently
  dropped every `FERAL_TANK` spec share (underscore not matched by `%u+`);
  bear-tank detections now propagate between SmartAssign users.

## 0.9.1

### Added
- **Locked improved-caster warning**: if a paladin who out-ranks the whole controllable
  pool at Improved Might/Wisdom isn't controllable (Free Assignment off), Smart-Assign now
  prints a pre-assign warning — its stronger buff would otherwise be silently supplied by a
  weaker paladin. Only fires when the locked paladin is strictly better than every
  controllable caster of that blessing.

### Changed
- **Blessing report readability**: greater and 10-minute (normal) blessings are now
  told apart by their icon — the report pulls greaters from PallyPower's greater
  icon set and 10-min overrides from the normal icon set — replacing the inline
  `[10m]` text tag. Each paladin's greaters are now listed one blessing per line
  with the class icons that blessing covers, instead of a single run-on segment.

### Fixed
- **Version string drift**: the in-game load message reported `v0.8.0` while the
  addon was actually 0.9.0 (the `.toc` was bumped but `NS.VERSION` was not). The
  internal version now tracks the packaged version again.

## 0.9.0

### Added
- **PvP mode**: shift-click the Smart-Assign button (or `/ppsmart pvp`, or the
  right-click menu "PvP assign") runs the normal Smart-Assign but demotes
  Salvation to the bottom of every priority list. With the strict top-N cutoff
  this effectively skips Salvation entirely (no threat to shed against players, only used as dispel bait),
  so melee get Might/Kings instead. The run summary appends `(PvP: Salv last)`.
  Only the assignment pass sees the demoted order; the panels and reports keep
  the normal priorities.

### Changed
- **Categorically-useless blessings are now disabled per class**: Wisdom is
  never assigned to Warriors or Rogues (no mana), and Might is never assigned to
  Mages, Warlocks, or Priests (no benefit from attack power). Enforced like the
  existing tank-Salvation strip, so these blessings never enter a column's vote
  nor a per-member override. The priority panel shows these rows greyed out and
  locked.

## 0.8.0

### Fixed
- **Spec-pref feasibility guard**: the spec-preferred assignment step (RET->Might,
  HOLY->Wisdom, PROT->Kings) now checks whether consuming a paladin would leave a
  higher-priority blessing with no castable paladin remaining. Previously, two
  spec-pref claims could starve the column's #1 priority (e.g. Kings on the Druid
  column) when only those two paladins could cast it.
- **Greedy fill tiebreaker**: when two paladins tie for a blessing's rating, the
  fill now prefers the paladin whose best alternative rating is lower -- preserving
  the stronger specialist for a later slot. Previously ties were broken
  alphabetically, which could waste a paladin with Improved Might on a Kings slot
  that any paladin casts equally well.

### Removed
- **Override budget cap**: the `exceptionBudget` setting has been removed. All
  computed overrides are now applied unconditionally. Tanks are still processed
  first.

## 0.7.0

### Fixed
- **Locked paladin awareness (Pass 1)**: when a paladin has "free assignment"
  turned off, Smart-Assign no longer duplicates their greaters. The exclusive-
  first reservation now skips blessings already covered by locked paladins, so
  the controllable paladin fills gaps (Might, Kings, Wisdom) instead.
- **Locked paladin awareness (Pass 2)**: the per-member override matcher now
  treats locked paladins as fixed to their existing greaters. It pre-claims
  their coverage and matches only controllable paladins against remaining
  wishes, so overrides are never assigned to paladins who can't cast them.
- **Dual-spec inspect on TBC Anniversary**: LibClassicInspector gated all
  dual-spec logic behind a Wrath client check, so inspected players on their
  secondary spec were misread as their primary. Patched LCI (version 18 -> 19)
  to detect dual-spec availability via `GetActiveTalentGroup` instead of
  client version. Also hardened `tabPoints` to auto-resolve the active talent
  group as defense-in-depth.

## 0.6.0

### Added
- **Druid Tank priority group**: feral druids with a Main Tank or Main Assist
  raid flag now use dedicated tank priorities (Kings > Might > Light > Sanc)
  instead of the generic Feral list. Mirrors how Warrior and DK tanks already
  have their own group.
- **Greater promotion**: after computing per-member overrides, the algorithm
  now checks whether any paladin is overriding >50% of a class to the same
  blessing. If so, that blessing is promoted to the greater and overrides are
  recomputed. This dramatically reduces the number of 10-min normal overrides
  and makes the assignment output look sane to raid leaders.
- **Exception budget**: the `exceptionBudget` setting (default 10 per paladin)
  is now enforced. Tank overrides are processed first so they always win the
  budget. Excess overrides are skipped and flagged in the summary.
- Summary now shows promoted greaters and budget-capped overrides.

### Changed
- All members (including tanks) now vote in the Borda column ranking. Tank
  wishlists already strip Salvation, so their vote accurately reflects their
  needs. Previously tanks were excluded, which could cause the column greaters
  to ignore the majority when tanks outnumber DPS of that class.

### Fixed
- Tank role now takes precedence over spec when selecting a priority group.
  Previously a feral druid flagged as MT still matched the generic Feral group
  because the spec match ran first; the `tankOnly` fallback never fired. This
  also benefits edge cases like a Fury warrior assigned MT.

## 0.5.2

### Fixed
- InfoPanel.lua and SpecPanel.lua were missing from the release zip, causing
  load errors for users installing from the packaged distribution.

### Changed
- Author updated to Silkie-Nightslayer.
- Added load message crediting Surveillant & Silkie.

## 0.5.1

### Fixed
- Libs (LibClassicInspector, LibDetours) were missing from the release zip.
  Thanks to Popsdabear for diagnosing it.
- Preset load crash: PallyPower's LoadPreset replaces PallyPower_Assignments
  wholesale, but AllPallys still contained stale paladin names seeded from the
  previous SavedVars, causing a nil BuffInfo error at PP line 3909. The shim now
  prunes stale AllPallys entries after a preset load.

## 0.5.0

### Added
- **Tabbed Info Panel**: History, Blessing Report, and Spec Overview are now
  unified into a single tabbed panel anchored to the right of the PallyPower
  frame. The panel auto-matches the PP frame's height and is visible by default.
  Toggle via the "Info" button or right-click menu.
- **Spec Overview tab**: see every group member's detected spec at a glance,
  color-coded by confidence (green = inspected/pinned, amber = detected,
  orange = unknown). Click any multi-spec member to pin or clear their spec.
  Replaces the old right-click submenu for spec overrides.
- **Pre-assign spec warning**: Smart-Assign now prints a warning before running
  if any multi-spec members have undetected specs, with a pointer to
  `/ppsmart specs`.
- `/ppsmart specs` command to open the Specs tab directly.

### Fixed
- Blessing Report no longer shows paladins from previous groups. AllPallys
  entries are now filtered to current group membership.
- Aura auto-assignment removed from Smart-Assign -- players manage their own
  auras.

### Changed
- The standalone History, Blessing Report, and Spec Overview windows are
  replaced by tabs in the unified Info Panel. Slash commands (`/ppsmart log`,
  `/ppsmart blessings`, `/ppsmart specs`) now open the panel to the
  corresponding tab.
- "Info" button replaces the old "History" button on the PP frame bottom bar.

## 0.4.0

### Changed
- Inspect engine rewritten to use LibClassicInspector (bundled). Eliminates our
  custom inspect queue in favour of LCI's shared cache, queue, and error
  suppression. If TacoTip or another addon also bundles LCI, LibStub shares a
  single instance — no duplicate inspects.
- "Out of range" suppression is now handled by LCI's targeted hooks on
  UIErrorsFrame:AddMessage and PlayVocalErrorSoundID (replaces the CVar toggle).

### Added
- Periodic re-inspect: group members are re-queued for inspection every 10
  minutes so mid-raid respecs by players without SmartAssign/LCI are detected.
- Local player respec now updates the local spec registry immediately (previously
  only broadcast to others; own entry stayed stale).

### Fixed
- CalcSkillRanks crash on stale paladin names from PallyPower_Assignments
  SavedVars: wrapped in pcall, malformed entries removed from AllPallys.

## 0.3.0

### Fixed
- History button no longer overlaps the "Free assignment" checkbox.
- Crash on stale paladin entries left over from previous sessions.
- Compatibility with PallyPower beta/latest (AllPallys made file-local).

### Added
- Inspect engine suppresses "Out of range" error text.
- Inspect engine backs off failed targets for 30 s instead of retrying immediately.
- PallyPower's Refresh button now also re-inspects and re-broadcasts specs.
- Dual-spec switches are detected automatically.

## 0.2.0
- Initial working release.

This mod has no related projects