From aedb2684b5f7f8e7fbcc840f9f14290fb06130d2 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Nov 2025 18:51:57 +0000 Subject: [PATCH] Add confirmation system to prevent pfUI from using evaluation-only tracking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: Macro conditional evaluations create tracking entries, but pfUI's AddEffect can fire during these evaluations (before actual cast), causing it to use incorrect combo point data. Flow before fix: 1. Macro evaluates [combo:>0] → TrackComboPointCast(0 CP, confirmed=false) 2. Macro evaluates again → TrackComboPointCast(1 CP, confirmed=false) 3. pfUI AddEffect fires → uses tracking (wrong timing!) ✗ 4. SPELLCAST_START fires (actual cast) Flow after fix: 1. Macro evaluates [combo:>0] → TrackComboPointCast(0 CP, confirmed=false) 2. Macro evaluates again → TrackComboPointCast(1 CP, confirmed=false) 3. SPELLCAST_START fires → sets confirmed=true ✓ 4. pfUI AddEffect fires → only uses tracking if confirmed=true ✓ Changes: - Added 'confirmed' field to tracking (default: false) - SPELLCAST_START sets confirmed=true when spell actually casts - pfUI AddEffect hook only uses tracking if confirmed=true - Clear confirmed flag after use to prevent reuse - Clear on failed/interrupted casts Debug shows: "Ignoring X tracking (not confirmed - evaluation only)" when preventing use of evaluation-only data. --- ComboPointTracker.lua | 11 +++++++++-- Compatibility/pfUI.lua | 12 ++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ComboPointTracker.lua b/ComboPointTracker.lua index 754ad97..c96afc5 100644 --- a/ComboPointTracker.lua +++ b/ComboPointTracker.lua @@ -206,7 +206,8 @@ function CleveRoids.TrackComboPointCast(spellName) combo_points = comboPoints, duration = duration, cast_time = currentTime, - target = UnitName("target") or "Unknown" + target = UnitName("target") or "Unknown", + confirmed = false -- Will be set to true by SPELLCAST_START } -- Also store in spell_tracking for integration with existing system @@ -414,6 +415,11 @@ function Extension.OnSpellcastStart() local spellName = arg1 if spellName and CleveRoids.IsComboScalingSpell(spellName) then CleveRoids.TrackComboPointCast(spellName) + + -- Mark this tracking as confirmed (actual cast, not just evaluation) + if CleveRoids.ComboPointTracking[spellName] then + CleveRoids.ComboPointTracking[spellName].confirmed = true + end end end @@ -436,7 +442,8 @@ function Extension.OnSpellcastFailed() if spellName and CleveRoids.ComboPointTracking[spellName] then local tracking = CleveRoids.ComboPointTracking[spellName] if tracking and (GetTime() - tracking.cast_time) < 1 then - -- Recent cast failed, clear it + -- Recent cast failed, clear confirmed flag and the tracking + tracking.confirmed = false CleveRoids.ComboPointTracking[spellName] = nil end end diff --git a/Compatibility/pfUI.lua b/Compatibility/pfUI.lua index 0b1fbb2..ef26928 100644 --- a/Compatibility/pfUI.lua +++ b/Compatibility/pfUI.lua @@ -155,14 +155,22 @@ function Extension.HookPfUILibdebuff() -- Use name-based tracking which is populated BEFORE pfUI's AddEffect if CleveRoids.ComboPointTracking and CleveRoids.ComboPointTracking[effect] then local tracking = CleveRoids.ComboPointTracking[effect] - if tracking.duration and (GetTime() - tracking.cast_time) < 0.5 then + -- Only use tracking if it's confirmed (actual cast, not just evaluation) + if tracking.duration and tracking.confirmed and (GetTime() - tracking.cast_time) < 0.5 then duration = tracking.duration + -- Clear confirmed flag after use to prevent reuse + tracking.confirmed = false if CleveRoids.debug then DEFAULT_CHAT_FRAME:AddMessage( - string.format("|cff00ff00[pfUI AddEffect Hook]|r Overriding %s duration to %ds (from name tracking)", + string.format("|cff00ff00[pfUI AddEffect Hook]|r Overriding %s duration to %ds (from confirmed tracking)", effect, duration) ) end + elseif CleveRoids.debug and tracking.duration and not tracking.confirmed then + DEFAULT_CHAT_FRAME:AddMessage( + string.format("|cffaaaa00[pfUI AddEffect Hook]|r Ignoring %s tracking (not confirmed - evaluation only)", + effect) + ) end end end