mirror of
https://github.com/brues-code/SuperCleveRoidMacros.git
synced 2026-09-16 03:38:00 +00:00
Add confirmation system to prevent pfUI from using evaluation-only tracking
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.
This commit is contained in:
@@ -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
|
||||
|
||||
+10
-2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user