60 Commits
Author SHA1 Message Date
Si Ha a4cc3077c8 Start a fight segment on a death while the group is fighting 2026-09-28 23:55:23 +02:00
Si Ha b46030a000 Add /cl reset; a manual reset mid-fight restarts the live fight as a fresh segment 2026-09-28 23:49:16 +02:00
Si Ha 21262e1240 Merge spell ranks into one ability row in the breakdown and bar tooltip 2026-09-28 23:21:54 +02:00
Si Ha b362979575 Rename Spells missed to Abilities missed (includes melee specials) 2026-09-28 02:06:04 +02:00
Si Ha 3a1a403469 Show spell misses as a percentage of spell attempts (casts for DoTs and non-damage spells) 2026-09-28 02:02:12 +02:00
Si Ha 28caf9746b Show misses right after hit counts in the ability detail panel; compact Total and average lines 2026-09-28 01:58:09 +02:00
Si Ha 30d56ac002 Add option to turn off the bar hover tooltip 2026-09-28 01:49:03 +02:00
Si Ha f2f428191e List only boss fights in segment menu and History while boss-only is on; delete history by entry 2026-09-28 01:25:24 +02:00
Si Ha 7da485b8c0 Reset clears Current Fight and Overall (never a live fight, History kept); rename Clear Overall to Auto reset 2026-09-28 01:04:46 +02:00
Si Ha 8da45502fb Never cache placeholder 'Unknown' unit names; cache roster names via unit tokens and fill in late names 2026-09-27 23:49:33 +02:00
Si Ha 2b712ee145 Anchor Options window by its top edge so tab switches only grow or shrink downward 2026-09-27 20:20:24 +02:00
Si Ha 7e387cc25d Cap bar tooltip to top 3 targets and top 5 spells with a click-for-breakdown hint 2026-09-27 20:18:03 +02:00
Si Ha bfa238ebc0 Split Options into General, Appearance, Data and Windows tabs 2026-09-27 20:11:53 +02:00
Si Ha 2340506d6c Group Advanced options into Announce, Data and Clear Overall sections 2026-09-27 20:06:00 +02:00
Si Ha 43bffedc33 Add reset rules for joining/leaving a group and entering an instance, per-window in-combat mode 2026-09-27 20:01:23 +02:00
Si Ha 7e5f0425d8 Detect boss fights via BigWigs engaged modules and enable triggers, name saved boss fights by encounter 2026-09-27 19:56:21 +02:00
Si Ha 59fc9a0304 Isolate handler errors with /cl status diagnostics, remove dead code, rewrite comments as intent 2026-09-27 19:49:44 +02:00
Si Ha fdd1bfadc2 Bound saved data: name-keyed Overall targets, compact history on save, add Saved fights and Remember boss fights only options 2026-09-27 19:24:54 +02:00
Si Ha c1318e3c7f Redraw meter and breakdown windows only when data changes; reuse sorted bar list 2026-09-27 19:21:17 +02:00
Si Ha 51d2d27cdd Check boss classification once per enemy per fight instead of on every hit 2026-09-27 19:19:03 +02:00
Si Ha 702965c00e Cache spell names, parse DoT aura type without allocation, sample mob max health once per fight 2026-09-27 19:18:09 +02:00
Si Ha 54c37adb47 Rebuild local threat estimate as per-event ledger with pets, stances, forms and buffs; add Merge pets into owners option 2026-09-27 19:16:18 +02:00
Si Ha 058d36160f Fix Pull Aggro At marker to show threat remaining for the player, hide while tanking 2026-09-27 19:10:39 +02:00
Si Ha 2886bc7e1f Record absorbed/blocked/resisted amounts and glancing/crushing hits; pass melee resist arg 2026-09-27 19:08:57 +02:00
Si Ha 8c422b027b Record spell misses/resists and environmental damage from Nampower events 2026-09-27 19:05:24 +02:00
Si Ha e243ee7848 Count heals and dispels while player or group is in combat; share cached group-combat check 2026-09-27 19:02:00 +02:00
Si Ha fedcada0f0 Track effective healing with estimated overheal from target health 2026-09-27 19:00:04 +02:00
Si Ha ba328b641c Keep encounter open until player, group and pets leave combat (1.5s debounce) 2026-09-27 18:51:06 +02:00
akzkak 908050008c Merge branch 'linkandzelda91:main' into main 2026-09-13 20:03:09 +02:00
Si Ha 79dbd408fb Pin player row in non-scrollable Threat view 2026-08-25 16:30:39 +02:00
Si Ha 659e2569de Use the supported limit of 10 so server threat data works without TWThreat installed 2026-08-25 16:09:38 +02:00
Si Ha 7a0878445b Fix per-target threat and highlight player 2026-08-25 14:08:48 +02:00
kobeniiiiiiandClaude Sonnet 5 80d03d502c Add local threat estimation fallback, persist debug flag across sessions
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>
2026-08-22 23:07:53 -05:00
kobeniiiiiiandClaude Sonnet 5 2d23b042c4 Add keybind to toggle CombatLedger windows
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>
2026-08-22 18:33:07 -05:00
kobeniiiiiiandClaude Sonnet 5 336221eb76 Fix healing double-count, add real Reflect damage tracking
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>
2026-08-22 15:47:51 -05:00
kobeniiiiiiandClaude Sonnet 5 516d4f66a9 Add real per-cast DoT tracking, join-party clear prompt, fix phantom-encounter regressions
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>
2026-08-22 09:32:14 -05:00
kobeniiiiiiandClaude Sonnet 5 2f71d1bb43 Split DoT hits from ticks, add clear-on-join-party, boss-only pull announce
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>
2026-08-22 09:04:47 -05:00
linkandzelda91 8b58e8249d docs: split and expand api references (merge from feature/docs-expansion) 2026-08-22 02:21:32 -05:00
linkandzelda91 58d41f57ef docs: add DEVELOPMENT.md for Nampower, ClassicAPI, and SuperWoW 2026-08-22 02:12:01 -05:00
kobeniiiiiiandClaude Sonnet 5 6651b7363e Fix Current Fight still clearing to blank after combat when grouped
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>
2026-08-21 22:06:28 -05:00
kobeniiiiiiandClaude Sonnet 5 4d4957ec72 Add bar border options with color pickers
- 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>
2026-08-21 20:22:39 -05:00
kobeniiiiiiandClaude Sonnet 5 929c904c7a Lower window strata so nothing covers Character/Bags, dropdowns flip up when clipped
- 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>
2026-08-21 20:02:43 -05:00
kobeniiiiiiandClaude Sonnet 5 b3bd1c9925 Fix encounter-stop feeling delayed
- 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>
2026-08-21 16:16:36 -05:00
kobeniiiiiiandClaude Sonnet 5 1a486466f4 Enlarge README screenshots now that only two remain
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-21 13:42:45 -05:00
kobeniiiiiiandClaude Sonnet 5 78cbaaf00d Header redesign, per-window auto-show/hide/grouped rules, and reliability fixes
- 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>
2026-08-21 13:37:18 -05:00
kobeniiiiii 405ab47224 Fix class icons rendering blank, fix dropdown strata collision
- 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).
2026-08-21 10:37:49 -05:00
kobeniiiiii 5cc3a7478e Add pfUI chat dock, class icons, ability icons, fix text collision and window bounds
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.
2026-08-21 10:24:04 -05:00
kobeniiiiii 53ed531e92 Fix pfUI false-positive detection, square bar textures, add real dropdowns
- 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%.
2026-08-21 09:42:57 -05:00
kobeniiiiii f8a4b77fd4 Replicate pfUI's exact look without requiring pfUI installed
- 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.
2026-08-21 08:37:20 -05:00
kobeniiiiii 2a9382cec2 Bundle pfUI's flat bar look as the default, add hide-border option, fix min-width header overlap
- 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.
2026-08-21 08:15:05 -05:00