mirror of
https://github.com/brues-code/SuperCleveRoidMacros.git
synced 2026-09-16 03:38:00 +00:00
Merge pull request #60 from jrc13245/claude/fix-combo-point-tracking-01GZH7rgqnupQ3MwLRbUCjF5
Claude/fix combo point tracking 01 gzh7rgqnup q3 mw l rb u cj f5
This commit is contained in:
+76
-20
@@ -418,42 +418,98 @@ function Extension.OnLoad()
|
||||
Extension.Hook("CastSpellByName", "CastSpellByName_Hook")
|
||||
end
|
||||
|
||||
-- Hook global CastSpell and UseAction for confirmation
|
||||
-- Hook global CastSpell to track combo points from spellbook
|
||||
if _G.CastSpell then
|
||||
local originalCastSpell = _G.CastSpell
|
||||
_G.CastSpell = function(id, bookType)
|
||||
-- Call original first
|
||||
originalCastSpell(id, bookType)
|
||||
-- Safely try to track combo points without breaking the cast
|
||||
local success, spellName = pcall(GetSpellName, id, bookType)
|
||||
|
||||
-- Confirm tracking for combo spells
|
||||
local spellName = GetSpellName(id, bookType)
|
||||
if spellName and CleveRoids.IsComboScalingSpell(spellName) and
|
||||
CleveRoids.ComboPointTracking[spellName] then
|
||||
CleveRoids.ComboPointTracking[spellName].confirmed = true
|
||||
if success and spellName and CleveRoids.IsComboScalingSpell(spellName) then
|
||||
local currentCP = CleveRoids.GetComboPoints()
|
||||
if currentCP and currentCP > 0 then
|
||||
CleveRoids.lastComboPoints = currentCP
|
||||
if CleveRoids.debug then
|
||||
DEFAULT_CHAT_FRAME:AddMessage(
|
||||
string.format("|cffaaaaff[CastSpell]|r Captured %d combo points before casting %s",
|
||||
currentCP, spellName)
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Call original to cast the spell (and capture return value)
|
||||
local result1, result2, result3 = originalCastSpell(id, bookType)
|
||||
|
||||
-- Track combo points after casting (with error protection)
|
||||
if success and spellName and CleveRoids.IsComboScalingSpell(spellName) then
|
||||
pcall(function()
|
||||
CleveRoids.TrackComboPointCast(spellName)
|
||||
if CleveRoids.ComboPointTracking[spellName] then
|
||||
CleveRoids.ComboPointTracking[spellName].confirmed = true
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
return result1, result2, result3
|
||||
end
|
||||
end
|
||||
|
||||
if _G.UseAction then
|
||||
local originalUseAction = _G.UseAction
|
||||
_G.UseAction = function(slot, target, button)
|
||||
-- Call original first
|
||||
originalUseAction(slot, target, button)
|
||||
-- Safely try to determine spell name without breaking action bar
|
||||
local spellName = nil
|
||||
pcall(function()
|
||||
local actionText = GetActionText(slot)
|
||||
|
||||
-- Try to determine spell name from action slot
|
||||
if not GetActionText(slot) and IsCurrentAction(slot) then
|
||||
local spellName = GetActionText(slot)
|
||||
if not spellName then
|
||||
-- Try to get from tooltip
|
||||
GameTooltip:SetAction(slot)
|
||||
spellName = GameTooltipTextLeft1:GetText()
|
||||
-- If no action text, it's likely a spell (not a macro)
|
||||
if not actionText then
|
||||
-- Try to get spell name from tooltip
|
||||
-- Use a temporary hidden tooltip to avoid UI interference
|
||||
local tooltip = getglobal("CleveRoidsComboTooltip")
|
||||
if not tooltip then
|
||||
tooltip = CreateFrame("GameTooltip", "CleveRoidsComboTooltip", nil, "GameTooltipTemplate")
|
||||
tooltip:SetOwner(WorldFrame, "ANCHOR_NONE")
|
||||
end
|
||||
|
||||
tooltip:ClearLines()
|
||||
tooltip:SetAction(slot)
|
||||
local text = getglobal("CleveRoidsComboTooltipTextLeft1")
|
||||
if text then
|
||||
spellName = text:GetText()
|
||||
end
|
||||
end
|
||||
|
||||
if spellName and CleveRoids.IsComboScalingSpell(spellName) and
|
||||
CleveRoids.ComboPointTracking[spellName] then
|
||||
CleveRoids.ComboPointTracking[spellName].confirmed = true
|
||||
-- Capture combo points if it's a combo scaling spell
|
||||
if spellName and CleveRoids.IsComboScalingSpell(spellName) then
|
||||
local currentCP = CleveRoids.GetComboPoints()
|
||||
if currentCP and currentCP > 0 then
|
||||
CleveRoids.lastComboPoints = currentCP
|
||||
if CleveRoids.debug then
|
||||
DEFAULT_CHAT_FRAME:AddMessage(
|
||||
string.format("|cffaaaaff[UseAction]|r Captured %d combo points before casting %s",
|
||||
currentCP, spellName)
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Call original to execute the action (and capture return value)
|
||||
local result1, result2, result3 = originalUseAction(slot, target, button)
|
||||
|
||||
-- Track combo points after casting (with error protection)
|
||||
if spellName and CleveRoids.IsComboScalingSpell(spellName) then
|
||||
pcall(function()
|
||||
CleveRoids.TrackComboPointCast(spellName)
|
||||
if CleveRoids.ComboPointTracking[spellName] then
|
||||
CleveRoids.ComboPointTracking[spellName].confirmed = true
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
return result1, result2, result3
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user