The TWT_UDTSv4/TWTv4= server threat API only ever replies when a
recognized third-party threat addon is also loaded (confirmed against
both TWThreat's and KLHThreatMeter's actual source - neither implements
any reply logic itself, and neither needs a handshake, so the gate
isn't anything a message can unlock). Threat mode now falls back to
estimating threat locally from Aggregator's own tracked damage/healing
data (class + spell threat-coefficient approximations) whenever a poll
happens with no real reply - a real reply always overrides it the
moment one arrives.
Also persists /cl debug across relaunches (CombatLedgerDB.settings),
restored on PLAYER_ENTERING_WORLD ahead of any other file's handler for
that event - debug always resetting to off made it structurally
impossible to capture a fresh login's earliest behavior.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Binds to CombatLedger.UI.Toggle() (already shows/hides the main window
plus every extra window together) via a standard Bindings.xml entry,
configurable from the Key Bindings menu.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
SPELL_HEAL_ON_SELF was firing alongside SPELL_HEAL_BY_SELF/OTHER for
every heal landing on the player, double-counting it - no longer
registered.
Reflect/thorns-style damage (Retribution Aura, Thorns, etc.) now shows
as its own tracked ability, sourced from Nampower's dedicated
DAMAGE_SHIELD_SELF/OTHER event instead of being invisible or blended
into an unrelated spell's numbers.
Also adds debug logging to the boss-pull classification check for
future troubleshooting (this server doesn't tag dungeon bosses as
elite/worldboss, so pull announcements are known-limited for now).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds a "Casts" stat for DoTs (distinct from tick count) sourced from
real cast events. Replaces the single "clear on join party" checkbox
with Always/Ask options, the latter showing a confirmation popup.
Fixes two regressions where a non-combat event (a cast, then a heal)
could lazy-start a blank encounter well after a fight had genuinely
ended, wiping the just-finished Current Fight display - neither casts
nor healing/cleanses can trigger a new encounter now, only tally into
an already-active one.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Splits direct-hit vs DoT-tick damage into separate Hits/Ticks (and
real Casts vs Ticks for pure DoTs) in the breakdown window, using
Nampower's per-event aura data plus real AURA_CAST cast counts.
Fixes a duration-inflation bug where nearby unrelated combat noise
kept encounters from trimming trailing idle time, and a regression
where the first hit of a fresh pull could be dropped entirely. Also
adds "clear Overall on join party" and narrows pull announcements to
boss-tagged targets only.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The lazy-start guard added last commit checked if ANYONE in the group
was still in combat, not just the player - so once your own fight
ended (current froze into lastFinished), a still-fighting groupmate's
trailing damage/heal event would still pass that check and restart a
blank encounter right on top of your just-finished result. Narrowed to
the player's own combat flag only, matching how GreedMeter ties
recording to personal combat state rather than the group's.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- New "Highlight my bar" color picker (was hardcoded gold) and new
"Show bar border" toggle + color, applying to every bar - both share
a new CreateColorSwatch helper wired to Blizzard's own
ColorPickerFrame (live preview, reverts on cancel)
- Fixed a real bug found while building this: the border used to be a
plain SetBackdrop directly on the bar's own StatusBar frame, which
draws on the same layer as (and gets covered by) the bar's fill and
background textures - only a sliver was ever visible. Now a
dedicated child overlay frame at a higher frame level, so the border
always renders fully on top regardless of fill %
- Highlight my bar always wins over the general border on your own row
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Every CombatLedger window (meter, Options, DeathRecap) now sits at
MEDIUM, matching History/Breakdown/EncounterReport which already
rendered correctly below Blizzard's own Character/Bags/Quest-dialog
panels - FULLSCREEN_DIALOG/DIALOG/HIGH all still rendered above them
on this client
- CL.ShowDropdown submenus no longer hardcode TOOLTIP - they compute
CL.NextHigherStrata(anchor's current strata) each time instead, so
they still reliably render above whatever opened them without
needing to unconditionally outrank every other addon's UI
- Dropdowns now open upward instead of downward when there isn't room
below the anchor to fit on screen - meter windows commonly sit low
on screen, where a downward-only dropdown routinely ran off-screen
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Removed the group-wait deferral on PLAYER_REGEN_ENABLED (matches
GreedMeter's own approach - months of real use with no reported
fragmented pulls, so the theoretical raid-fragmentation risk isn't
worth delaying every single stop to guard against)
- The actual bug: RecordDamage/RecordAvoidance/RecordDebuffGiven/
RecordInterrupt had no combat-state guard on their lazy
StartEncounter(), so a stray trailing event after a real fight ended
(a late DoT tick, splash damage) silently spun up a blank new
encounter that immediately overwrote the just-finished fight's frozen
summary - all Record* functions now guard consistently with
AnyoneInCombat(), matching RecordHealing/RecordCleanse
- Bars now snap straight to their final value instead of smoothly
animating when Current Fight has no live encounter running (i.e. it's
showing the frozen last-finished result) - the data finalizes
instantly, but smoothing could take up to ~1s to visually catch up
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Header: drop the title bar, show full Mode/Segment words (adaptive width
instead of jumping per-label), remove the redundant Options button
(minimap right-click already covers it)
- Buttons: fix stuck press/hover colors for good by owning hover/press
state via continuous OnUpdate polling instead of trusting discrete
WoW mouse events, which this client drops once a click opens a new
frame; also stop pfUI's own competing hover hook from fighting it
- Windows: per-window Auto-show/Auto-hide/Grouped-only rules (replacing
the old global-only checkboxes) so e.g. a Threat meter can stay hidden
until grouped and in combat while Damage stays up always; extra
windows are now structurally identical to Main (no per-window close
button - create/close only from Options); Mirror Main copies
size/position in one click; minimap toggle and login/reload restore
now respect these rules instead of ignoring them
- History: kept per-character instead of shared account-wide, with a
one-time migration of old shared data
- Threat: Test Mode now fills Threat mode with dummy bars + the Pull
Aggro At marker, matching every other mode
- Options: removed the non-working pfUI dock toggle, fixed a checkbox
skinning gap, shrunk the window and added section dividers, updated
screenshots/README for the new window-management additions
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Class icons showed nothing despite loading/sizing correctly (confirmed
via debug logging) - the stock Blizzard UI-Classes-Circle atlas
silently fails to render on this client, same class of issue as
earlier bar textures. Swapped to pfUI's own bundled classicons.tga
(square, MIT-licensed, same CLASS_ICON_TCOORDS layout) instead.
- Class icons now scale with the "Bar size" Options setting instead of
staying a fixed size from whenever the bar was first created.
- Fixed the dropdown submenu rendering as a tangled mess interleaved
with the bar rows - putting the main window at TOOLTIP strata (to fix
the window-behind-other-windows issue) meant its child frames
inherited TOOLTIP too, landing in the same strata bucket as the
dropdown and falling back to ambiguous frame-level ordering. Window
now sits one level down (FULLSCREEN_DIALOG), leaving TOOLTIP reserved
exclusively for the dropdown/submenus.
- Window shadows now compute one strata below whatever window they're
attached to (CL.NextLowerStrata) instead of a hardcoded BACKGROUND,
which left a large gap for other addons to render into once windows
moved higher up the strata order.
- Removed a dead code path in RestyleAll left over from moving the
dropdown into Core.lua (referenced a local that no longer existed in
this file - harmless since dropdown rows already re-apply their own
font on every open, but was silently doing nothing).
New-user feedback batch:
- New optional pfUI right-chat-panel dock (UI_PfuiDock.lua), using
pfUI's real pfUI.thirdparty.meters:RegisterMeter API (same one
TWThreat/SW_Stats/KTM use) - opt-in via Options, off by default.
- New "Show class icon" option - a real class icon before the name on
each bar, independent of the existing class-colored fill.
- Spell/melee icons added to the breakdown window: the "Top Ability"
stat row, and a large icon next to the name when a specific ability
is selected in the detail panel.
- Fixed text collision across the breakdown window (detail rows,
per-ability icon list, target list) and proactively in the main
window's bars - name text was never bounded against value text in
any of them, so long names/values could run into each other.
- Main window raised to TOOLTIP strata (highest) so it can't end up
hidden behind other windows.
- Every CombatLedger window now uses SetClampedToScreen(true) - can no
longer be dragged/pushed off-screen.
- CL.HasPfui() was inferring pfUI's presence from the shape of the
`pfUI` global (existence, then pfUI.api, then a specific function on
it) - all of which stayed true on a client with pfUI genuinely not
loaded (confirmed via IsAddOnLoaded returning false, plus a
completely unstyled vanilla UI). Something else on this client fully
populates a pfUI-shaped table without pfUI ever loading. Switched to
IsAddOnLoaded("pfUI") directly - authoritative, sidesteps the whole
problem. Fixes "Match pfUI" staying visible/active with pfUI off.
- Resized the four bundled bar textures (ElvUI/Gradient/Striped/TukUI)
from 256x32 to square 32x32 - this client only loads square status
bar textures, not just power-of-two on each axis, which is why they
silently fell back to whatever was already showing. Also added a
generated square "Smooth Gradient" texture, replacing Blizzard's own
Raid-Bar-Hp-Fill (same non-square problem, can't be fixed directly).
- Bar texture/Font/Number format in Options are now real dropdowns
(click opens the full list, same widget the Mode/Segment buttons use)
instead of cycle-on-click - moved the shared dropdown widget into
Core.lua (CL.ShowDropdown) so both files use one implementation.
- Swept the remaining Blizzard rounded-Tooltip-style backdrops (History
rows/buttons, Report toggle buttons, Options window/buttons, the
dropdown menu) to the same flat WHITE8X8 style already applied to the
main window, for visual consistency.
- Fixed button hover leaving the border stuck class-colored - the
restore-on-leave logic still used the old theme-color params instead
of the new flat near-black default.
- Window opacity can now go down to 0%.
- Window/button chrome: flat WHITE8X8 panel (was Blizzard's rounded
Tooltip border) with a near-black border/background matching one real
pfUI user's own tweaked appearance settings, plus pfUI's own soft
drop shadow (img/glow2.tga, bundled) - this is now the default look
regardless of whether pfUI is installed, not just available to people
who already run pfUI via "Match pfUI".
- Bar textures: bundled all four of pfUI's alternate bar skins (ElvUI/
Gradient/Striped/TukUI) as real files, fixing the picker entries that
previously pointed at pfUI.media keys that don't actually exist
(always silently no-opped instead of changing anything).
- Added the Expressway font (bundled from pfUI, MIT-licensed) as a
font choice - not a stock client font.
All bundled assets are pfUI's own (Eric Mauser / Shagu), MIT-licensed -
see README credits.
- Bundled pfUI's default bar texture (img/bar.tga, MIT-licensed) directly
in this addon so its flat look is the default appearance for everyone,
not just pfUI users - "Match pfUI" previously meant the good-looking
theme was exclusive to people who happened to already run pfUI.
- Added a "Hide window border" option (ShaguDPS-style), independent of
Match pfUI.
- Fixed the header looking like garbled overlapping text at a narrow
resize - the title sits centered on the same row as the header
buttons, and nothing constrained it, so a long mode title (e.g.
"Debuffs Given") could render wider than the actual gap between the
button clusters. Now hidden below the width where it would visibly
overlap, measured against its real string width rather than a guessed
threshold.