add handling for spells that get dispelled

This commit is contained in:
pepopo978
2024-06-05 22:13:15 -07:00
parent fa7c1e81d6
commit efb73988ab
2 changed files with 64 additions and 4 deletions
+57 -1
View File
@@ -14,7 +14,7 @@ local curses = {
-- combat events for curses
local afflict_test = "^(.+) is afflicted by (.+) %((%d+)%)" -- for stacks 2-5 will be "Fire Vulnerability (2)".
local gains_test = "^(.+) gains (.+) %((%d+)%)" -- for stacks 2-5 will be "Fire Vulnerability (2)".
local fades_test = "(.+) fades from (.+)."
local fades_test = "(.+) fades from (.+)"
local resist_test = "Your (.+) was resisted by (.+)"
local lastGuid = nil
@@ -46,6 +46,31 @@ function curses:LoadCurses()
end
end
function curses:ScanGuidForCurse(guid, curseSpellID)
for i = 1, 16 do
local _, _, _, spellID = UnitDebuff(guid, i)
if spellID then
if spellID == curseSpellID then
return true
end
else
break
end
end
for i = 1, 32 do
local _, _, spellID = UnitBuff(guid, i)
if spellID then
if spellID == curseSpellID then
return true
end
else
break
end
end
return nil
end
Cursive:RegisterEvent("UNIT_CASTEVENT", function(casterGuid, targetGuid, event, spellID, castDuration)
-- immolate will fire both start and cast
if event == "CAST" then
@@ -77,6 +102,28 @@ Cursive:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE",
end
) -- resists
Cursive:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_OTHER", function(message)
-- check if spell that faded is relevant
local _, _, spell, target = string.find(message, fades_test)
if spell and target then
if curses.trackedCurseNamesToTextures[spell] then
-- loop through targets with active curses
for guid, data in pairs(curses.guids) do
for curseName, curseData in pairs(data) do
if curseName == spell then
-- see if target still has that curse
if not curses:ScanGuidForCurse(guid, curseData.spellID) then
-- remove curse
curses:RemoveCurse(guid, curseName)
end
end
end
end
end
end
end
)
function curses:TimeRemaining(curseData)
return math.ceil(curseData.duration - (GetTime() - curseData.start))
end
@@ -150,6 +197,15 @@ function curses:ApplyCurse(spellID, targetGuid, startTime)
}
end
function curses:RemoveCurse(guid, curseName)
if curses.guids[guid] and curses.guids[guid][curseName] then
curses.guids[guid][curseName] = nil
end
if curses.expiringSoundGuids[guid] and curses.expiringSoundGuids[guid][curseName] then
curses.expiringSoundGuids[guid][curseName] = nil
end
end
function curses:RemoveGuid(guid)
curses.guids[guid] = nil
curses.resistSoundGuids[guid] = nil
+7 -3
View File
@@ -312,6 +312,13 @@ local function DisplayGuid(guid, row, col)
-- update curses
local curseNumber = 1
-- make sure old curses are hidden
for i = 1, Cursive.db.profile.maxcurses do
local curse = barFrame["curse" .. i]
curse:Hide()
curse.timer:Hide()
end
local guidCurses = Cursive.curses.guids[guid]
if guidCurses then
for curseName, curseData in pairs(guidCurses) do
@@ -334,9 +341,6 @@ local function DisplayGuid(guid, row, col)
elseif Cursive.curses:HasRequestedExpiringSound(curseName, guid) then
Cursive.curses:EnableExpiringSound(curseName, guid)
end
else
curse.timer:Hide()
curse:Hide()
end
curseNumber = curseNumber + 1
end