From d8c251fc57f77129628bb6eec9b6dfad4c548c5d Mon Sep 17 00:00:00 2001 From: James Whitehead II Date: Wed, 13 Feb 2008 00:06:43 +0000 Subject: [PATCH] * Added experimental support for a "My Spells" filter on buffs --- PerfectRaid_Buffs.lua | 71 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 13 deletions(-) diff --git a/PerfectRaid_Buffs.lua b/PerfectRaid_Buffs.lua index a0ade7f..0341b31 100644 --- a/PerfectRaid_Buffs.lua +++ b/PerfectRaid_Buffs.lua @@ -112,6 +112,7 @@ local band = bit.band local buffs = {} local buffcache = {} local mybuffs = {} +local mymask = {} local BIT_CURSE = 1 local BIT_MAGIC = 2 @@ -136,23 +137,23 @@ function Buffs:UNIT_AURA(event, unit) for i=1,40 do local name,rank,texture,count,duration,timeleft = UnitBuff(unit, i) if not name then break end - buffcache[name] = (buffcache[name] or 0) + 1 - -- Flag this, if this is our buff if timeleft then mybuffs[name] = true end + + buffcache[name] = (buffcache[name] or 0) + 1 end local debuffType for i=1,40 do local name,rank,texture,count,type,durating,timeleft = UnitDebuff(unit, i) if not name and not type then break end - buffcache[name] = (buffcache[name] or 0) + 1 - -- Flag this, if this is our debuff if timeleft then mybuffs[name] = true end + buffcache[name] = (buffcache[name] or 0) + 1 + if type and name ~= type then buffcache[type] = (buffcache[type] or 0) + 1 debuffType = type @@ -202,13 +203,21 @@ function Buffs:UNIT_AURA(event, unit) for i,entry in ipairs(buffs) do local checkcond = false - local num = buffcache[entry.buffname] + local buffname + if buffcache[entry.buffname] then + buffname = entry.buffname + elseif buffcache[entry.groupname or "nil"] then + buffname = entry.groupname + end + + local num = buffcache[buffname] + if entry.missing then - if not buffcache[entry.buffname] and not buffcache[entry.groupname or "nil"] then + if not buffname then checkcond = true end else - if buffcache[entry.buffname] or buffcache[entry.groupname or "nil"] then + if buffname then checkcond = true end end @@ -216,6 +225,7 @@ function Buffs:UNIT_AURA(event, unit) local class = select(2, UnitClass(unit)) local conds = self.conditions local group = raidLookup[unit] + local mine = mybuffs[buffname] -- Handle the condition checking for the buff, taking strictness into account if checkcond then @@ -224,28 +234,53 @@ function Buffs:UNIT_AURA(event, unit) local pass = true for i,name in pairs(entry.cond) do - if conds[name] and not conds[name](unit, class, group) then + if conds[name] and not conds[name](unit, class, group, mine) then pass = false end end if pass then if num and num > 1 then + local num = num + if mine and not mymask[buffname] then + num = num - 1 + end + table.insert(work, entry.colortext .. "(" .. num .. ")") else - table.insert(work, entry.colortext) + if mymask[buffname] and not mine then + -- Do nothing + else + table.insert(work, entry.colortext) + end end end else -- Simply iterate each of the conditions, and break when we match for i,name in pairs(entry.cond) do - if conds[name] and conds[name](unit, class, group) then + if conds[name] and conds[name](unit, class, group, mine) then if num and num > 1 then + local num = num + -- If the buff is mine, and it should be masked + -- A buff is masked when there is a "mine" filter set for it + if mine and not mymask[buffname] then + num = num - 1 + end + table.insert(work, entry.colortext .. "(" .. num .. ")") else - table.insert(work, entry.colortext) + -- If this is a single buff, check to see if its masked + if mymask[buffname] then + -- If this buff is mine, and this entry shows mine + if mine and entry.showmine then + table.insert(work, entry.colortext) + end + else + table.insert(work, entry.colortext) + end end - + + -- Break out break end end @@ -528,7 +563,7 @@ function Buffs:CreateEditFrame(parent) checks[19]:SetPoint("TOPLEFT", checks[13], "BOTTOMLEFT", 0, -10) checks[19]:Show() - for i=20,21 do + for i=20,22 do checks[i] = makeCheck(self.conditions[i]) checks[i]:SetPoint("TOPLEFT", checks[i-1], "TOPRIGHT", 60, 0) checks[i]:Show() @@ -656,6 +691,7 @@ end function Buffs:UpdateBuffTable() for k,v in pairs(buffs) do buffs[k] = nil end + for k,v in pairs(mymask) do mymask[k] = nil end for idx,entry in ipairs(PerfectRaid.db.profile.buffs) do if not entry.disabled then @@ -666,6 +702,14 @@ function Buffs:UpdateBuffTable() tbl.missing = entry.missing tbl.strict = entry.strict tbl.cond = {string.split(",", entry.conds)} + if entry.conds:match("MySpell") then + tbl.showmine = true + mymask[tbl.buffname] = true + if entry.groupname then + mymask[tbl.groupname] = true + end + end + table.insert(buffs, tbl) end end @@ -786,6 +830,7 @@ Buffs.conditions = { ["Group 7"] = function(u,c,g) return g == 7 end, ["Group 8"] = function(u,c,g) return g == 8 end, ["MyGroup"] = function(u,c,g) return g == raidLookup.player end, + ["MySpell"] = function(u,c,g,m) return m end, } local work = {} -- 1.7.9.5