Quantcast

Change license and cleanup the code

yaroot [11-23-11 - 10:26]
Change license and cleanup the code
Filename
.gitignore
oUF_RaidDebuffs.lua
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 9e1a885..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.sw[a-z]
diff --git a/oUF_RaidDebuffs.lua b/oUF_RaidDebuffs.lua
index 5081514..48f9a7c 100644
--- a/oUF_RaidDebuffs.lua
+++ b/oUF_RaidDebuffs.lua
@@ -1,177 +1,62 @@
 --[[
-    Copyright (c) 2010 yaroot(@gmail.com)
-
-    Permission is hereby granted, free of charge, to any person
-    obtaining a copy of this software and associated documentation
-    files (the "Software"), to deal in the Software without
-    restriction, including without limitation the rights to use,
-    copy, modify, merge, publish, distribute, sublicense, and/or sell
-    copies of the Software, and to permit persons to whom the
-    Software is furnished to do so, subject to the following
-    conditions:
-
-    The above copyright notice and this permission notice shall be
-    included in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-    OTHER DEALINGS IN THE SOFTWARE.
+    Copyright (c) 2010-2011 yaroot(@gmail.com)
+
+    You can do whatever you want with this file, and if you find it
+    useful, you can buy me a beer if we meet someday.
 --]]

---[=====[
+--[=[
+    .icon                   [texture] (required)
+    .count                  [fontstring]
+    .cd                     [cooldown]

--- debuff data
-local raid_debuffs = {
---  [spell] = priority,
-    [GetSpellInfo(xxx)] = 10,
-    [GetSpellInfo(zzz)] = 11,
---  ...
-}
--- we can generate them
-local raid_debuffs = {}
-for _, id in ipairs{
-    -- spellIDs
-    123,
-    456,
-} do
-    local spell = GetSpellInfo(id)
-    if(spell) then
-        raid_debuffs = k+10
-    end
-end
+    .ShowBossDebuff         [boolean]
+    .BossDebuffPriority     [number]

+    .ShowDispelableDebuff   [boolean]
+    .DispelPriority         [table]     { [type] = prio }
+    .DispelFilter           [table]     { [type] = true }
+    .DebuffTypeColor        [table]     { [type] = { r, g, b } }

-local styleFunc = function(self, unit)
---  ...
-    -- create the icon frame
-    self.RaidDebuffs = CreateFrame('Frame', nil, self)
-    self.RaidDebuffs:SetHeight(20)
-    self.RaidDebuffs:SetWidth(20)
-    self.RaidDebuffs:SetPoint('CENTER', self)
-    self.RaidDebuffs:SetFrameStrata'HIGH'
-
-    -- debuff type color
-    self.RaidDebuffs:SetBackdrop({
-        bgFile = [=[Interface\ChatFrame\ChatFrameBackground]=],
-        insets = {top = -1, left = -1, bottom = -1, right = -1},
-    })
-
-    -- icon
-    self.RaidDebuffs.icon = self.RaidDebuffs:CreateTexture(nil, 'OVERLAY')
-    self.RaidDebuffs.icon:SetAllPoints(self.RaidDebuffs)
-
-    -- cd
-    self.RaidDebuffs.cd = CreateFrame('Cooldown', nil, self.RaidDebuffs)
-    self.RaidDebuffs.cd:SetAllPoints(self.RaidDebuffs)
-
-    -- cd timer, if you don't use omnicc
-    --self.RaidDebuffs.time = self.RaidDebuffs:CreateFontString(nil, 'OVERLAY')
-    --self.RaidDebuffs.time:SetFont(STANDARD_TEXT_FONT, 12, 'OUTLINE')
-    --self.RaidDebuffs.time:SetPoint('CENTER', self.RaidDebuffs, 'CENTER', 0, 0)
-    --self.RaidDebuffs.time:SetTextColor(1, .9, 0)
-
-    -- count
-    self.RaidDebuffs.count = self.RaidDebuffs:CreateFontString(nil, 'OVERLAY')
-    self.RaidDebuffs.count:SetFont(STANDARD_TEXT_FONT, 8, 'OUTLINE')
-    self.RaidDebuffs.count:SetPoint('BOTTOMRIGHT', self.RaidDebuffs, 'BOTTOMRIGHT', 2, 0)
-    self.RaidDebuffs.count:SetTextColor(1, .9, 0)
-
-    -- set the debuffs table
-    self.RaidDebuffs.Debuffs = raid_debuffs
-
-    -- some options you might want
-    self.RaidDebuffs.ShowDispelableDebuff = true
-    self.RaidDebuffs.FilterDispelableDebuff = true
-    self.RaidDebuffs.MatchBySpellName = true
-    --self.RaidDebuffs.DispelPriority = {}
-    --self.RaidDebuffs.DispelFilter = {}
-    --self.RaidDebuffs.DispelColor = {}
-    --self.RaidDebuffs.SetBackdropColor = function(r,g,b) --[[ debuff type color ]] end
-end
+    .Debuffs                [table]     { [name(string)|id(number)] = prio(number) }
+    .MatchBySpellName       [boolean]
+
+    .SetBackdropColor       [function]  function(r, g, b) end
+--]=]

-]=====]

 local _, ns = ...
 local oUF = ns.oUF or oUF
 assert(oUF, 'oUF RaidDebuffs: unable to locate oUF')

-local PRIORITY_BOSSDEBUFF = 9999999
-local PRIORITY_INVALID = 0
-local DEFAULT_FILTERS = {
+local bossDebuffPrio = 9999999
+local invalidPrio = -1
+local auraFilters = {
     ['HARMFUL'] = true,
 }

-local DispelColor = {
-    ['Magic']   = {.2, .6, 1},
-    ['Curse']   = {.6, 0, 1},
-    ['Disease'] = {.6, .4, 0},
-    ['Poison']  = {0, .6, 0},
+local debuffTypeColor = {
     ['none'] = {0, 0, 0},
 }
+for k, v in next, DebuffTypeColor do
+    debuffTypeColor[k] = { v.r, v.g, v.b }
+end

-local DispelPriority = {
+local dispelPrio = {
     ['Magic']   = 4,
     ['Curse']   = 3,
     ['Disease'] = 2,
     ['Poison']  = 1,
 }

-local DispelFilter = ({
-    PIREST = {
-        Magic = true,
-        Disease = true,
-    },
-    SHAMAN = {
-        --Magic = true,
-        Curse = true,
-    },
-    PALADIN = {
-        --Magic = false,
-        Poison = true,
-        Disease = true,
-    },
-    MAGE = {
-        Curse = true,
-    },
-    DRUID = {
-        --Magic = true,
-        Curse = true,
-        Poison = true,
-    },
+local dispelFilter = ({
+    PIREST = { Magic = true, Disease = true, },
+    SHAMAN = { Magic = true, Curse = true, },
+    PALADIN = { Magic = false, Poison = true, Disease = true, },
+    MAGE = { Curse = true, },
+    DRUID = { Magic = true, Curse = true, Poison = true, },
 })[select(2, UnitClass'player')]

-local formatTime = function(s)
-    if s > 60 then
-        return format('%dm', s/60), s%60
-    else
-        return math.modf(s)
-    end
-end
-
-local UpdateTimer = function(self)
-    local timeLeft = self.endTime - GetTime()
-    if(timeLeft > 0) then
-        local text, nextUpdate = formatTime(timeLeft)
-        self.time:SetText(text)
-        self.nextUpdate = nextUpdate
-    else
-        self:SetScript('OnUpdate', nil)
-        self.time:Hide()
-    end
-end
-
-local OnUpdate = function(self, elps)
-    self.nextUpdate = self.nextUpdate - elps
-    if(self.nextUpdate <= 0)then
-        UpdateTimer(self)
-    end
-end
-
 local UpdateDebuffFrame = function(rd)
     if(rd.PreUpdate) then
         rd:PreUpdate()
@@ -192,18 +77,6 @@ local UpdateDebuffFrame = function(rd)
             end
         end

-        if(rd.time) then
-            if(duration and (duration > 0)) then
-                rd.endTime = expirationTime
-                rd.nextUpdate = 0
-                rd:SetScript('OnUpdate', OnUpdate)
-                rd.time:Show()
-            else
-                rd:SetScript('OnUpdate', nil)
-                rd.time:Hide()
-            end
-        end
-
         if(rd.cd) then
             if(duration and (duration > 0)) then
                 rd.cd:SetCooldown(expirationTime - duration, duration)
@@ -214,8 +87,8 @@ local UpdateDebuffFrame = function(rd)
         end

         if(rd.SetBackdropColor) then
-            local dispelColor = rd.DispelColor or DispelColor
-            local c = dispelColor[debuffType] or dispelColor.none or DispelColor.none
+            local colors = rd.DebuffTypeColor or debuffTypeColor
+            local c = colors[debuffType] or colors.none or colors.none
             rd:SetBackdropColor(unpack(c))
         end

@@ -236,19 +109,19 @@ end
 local Update = function(self, event, unit)
     if(unit ~= self.unit) then return end
     local rd = self.RaidDebuffs
-    rd.priority = PRIORITY_INVALID
+    rd.priority = invalidPrio

-    for filter in next, (rd.Filters or DEFAULT_FILTERS) do
+    for filter in next, (rd.Filters or auraFilters) do
         local i = 0
         while(true) do
             i = i + 1
-            local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId, canApplyAura, isBossDebuff = UnitAura(unit, i, filter)
+            local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId, canApplyAura, isBossDebuff, value1, value2, value3 = UnitAura(unit, i, filter)
             if (not name) then break end

             if(rd.ShowBossDebuff and isBossDebuff) then
-                local priority = rd.BossDebuffPriority or PRIORITY_BOSSDEBUFF
-                if(priority and priority > rd.priority) then
-                    rd.priority = priority
+                local prio = rd.BossDebuffPriority or bossDebuffPrio
+                if(prio and prio > rd.priority) then
+                    rd.priority = prio
                     rd.index = i
                     rd.type = 'Boss'
                     rd.filter = filter
@@ -256,25 +129,27 @@ local Update = function(self, event, unit)
             end

             if(rd.ShowDispelableDebuff and debuffType) then
-                local dispelPriority = rd.DispelPriority or DispelPriority
-                local priority
-                if(rd.FilterDispelableDebuff) then
-                    priority = (rd.DispelFilter or DispelFilter)[debuffType] and dispelPriority[debuffType]
+                local disPrio = rd.DispelPriority or dispelPrio
+                local filter = rd.DispelFilter or dispelFilter
+                local prio
+
+                if(rd.FilterDispelableDebuff and filter) then
+                    prio = filter[debuffType] and disPrio[debuffType]
                 else
-                    priority = dispelPriority[debuffType]
+                    prio = disPrio[debuffType]
                 end

-                if(priority and (priority > rd.priority)) then
-                    rd.priority = priority
+                if(prio and (prio > rd.priority)) then
+                    rd.priority = prio
                     rd.index = i
                     rd.type = 'Dispel'
                     rd.filter = filter
                 end
             end

-            local priority = rd.Debuffs and rd.Debuffs[rd.MatchBySpellName and name or spellId]
-            if(priority and (priority > rd.priority)) then
-                rd.priority = priority
+            local prio = rd.Debuffs and rd.Debuffs[rd.MatchBySpellName and name or spellId]
+            if(prio and (prio > rd.priority)) then
+                rd.priority = prio
                 rd.index = i
                 rd.type = 'Custom'
                 rd.filter = filter
@@ -282,7 +157,7 @@ local Update = function(self, event, unit)
         end
     end

-    if(rd.priority == PRIORITY_INVALID) then
+    if(rd.priority == invalidPrio) then
         rd.index = nil
         rd.filter = nil
         rd.type = nil
@@ -300,26 +175,30 @@ local searchFor = function(spell, i)
         for k = 1, GetNumTalents(j) do
             local talentName, _, _, _, rank = GetTalentInfo(j, k)
             if(talentName and talentName == spellName) then
-                return true
+                return rank and rank > 0
             end
         end
     end
 end

+local talentTbl = ({
+    PALADIN = {
+        [53551] = 'Magic',
+    },
+    SHAMAN = {
+        [77130] = 'Magic',
+    },
+    DRUID = {
+        [88423] = 'Magic',
+    },
+})[select(2, UnitClass'player')]
+
 local spellCheck = function()
     local _, class = UnitClass'player'
-    if(class == 'PALADIN') then
-        -- http://www.wowhead.com/spell=53551
-        -- Sacred Cleansing
-        DispelFilter.Magic = searchFor(53551)
-    elseif(class == 'SHAMAN') then
-        -- http://www.wowhead.com/spell=77130
-        -- Improved Cleanse Spirit
-        DispelFilter.Magic = searchFor(77130)
-    elseif(class == 'DRUID') then
-        -- http://www.wowhead.com/spell=88423
-        -- Nature's Cure
-        DispelFilter.Magic = searchFor(88423)
+    if(talentTbl) then
+        for k, v in next, talentTbl do
+            DispelFilter[v] = searchFor(k)
+        end
     end
 end

@@ -338,7 +217,7 @@ local Enable = function(self)
         rd.ForceUpdate = ForceUpdate
         rd.__owner = self

-        if(not f and not rd.DispelFilter and not rd.Override) then
+        if(talentTbl and (not f) and (not rd.DispelFilter) and (not rd.Override)) then
             f = CreateFrame'Frame'
             f:SetScript('OnEvent', spellCheck)
             f:RegisterEvent('PLAYER_TALENT_UPDATE')