SexyCooldown
Upgrade Notice
Users upgrading from versions prior to 0.6.6 will lose any aura blacklist settings. A change was made to aura identification to resolve conflicts with skills such as Sacred Shield. Please re-blacklist any auras you aren't interested in after upgrading.
About
SexyCooldowns is a logarithmic cooldown bar. What's that, you say? Well, most timer bars you're used to are linear. That is, the distance between 0 seconds and 10 seconds is the same as the distance between 50 seconds and 60 seconds. A logarithmic cooldown bar is somewhat different - it represents cooldowns on a compressed timeline, so that cooldowns that are closer to being ready are represented as more active on the bar. This lets you represent a large amount of data on a single bar, and have it remain useful.
In short, SexyCooldown is a single consolidated timer bar for all your spell, pet's spell, item, and proc cooldowns, as well as buffs, debuffs, and totem timers. It's very flexible, and can be customized to fit into your UI as best you see fit.
Features
- Spawn as many bars as you want, and show the specific information you want on each.
- Supports spell and talent cooldowns, explicit and internal item cooldowns, buffs on you, debuffs on you, and debuffs on your target or focus.
- Very highly configurable look and feel. Build bars that will fit into any UI.
- Bars may be oriented horizontally or vertically, and move in either direction.
- Extensible - can support virtually any kind of timer. Currently works as a cooldown, buff, and debuff timer, but the possibilities are endless.
Demo
Here you can see that I have set up three separate bars, one for my cooldowns at the bottom, one for short buffs on me (<45 seconds) above my unit frame, and one for my debuffs on my target above the target unit frame.
In a raid setting (Click for HD):
Date: 2011-01-28 19:22:21
ID: 4
Error occured in: AddOn: SexyCooldown
Count: 1
Message: Error: AddOn SexyCooldown attempted to call a forbidden function (CancelUnitBuff()) from a tainted execution path.
Debug:
[C]: CancelUnitBuff()
SexyCooldown\prototype.lua:932: Cancel()
SexyCooldown\prototype.lua:343:
SexyCooldown\prototype.lua:338
Date: 2011-01-26 18:07:37
ID: 1
Error occured in: Global
Count: 1
Message: ...nterface\AddOns\SexyCooldown\Modules\RaidDebuffs.lua line 61:
attempt to concatenate local 'icon' (a nil value)
Debug:
(tail call): ?
...nterface\AddOns\SexyCooldown\Modules\RaidDebuffs.lua:61:
...nterface\AddOns\SexyCooldown\Modules\RaidDebuffs.lua:44
(tail call): ?
[C]: ?
[string "safecall Dispatcher[1]"]:9:
[string "safecall Dispatcher[1]"]:5
(tail call): ?
...s\Broker_TolBarad\Libs\AceAddon-3.0\AceAddon-3.0.lua:514: InitializeAddon()
...s\Broker_TolBarad\Libs\AceAddon-3.0\AceAddon-3.0.lua:628:
...s\Broker_TolBarad\Libs\AceAddon-3.0\AceAddon-3.0.lua:621
When I exit the game any changes I've made are not saved, and I have to do them again on entry into the game. Getting pretty fast at this, but it isn't ideal.
That said, I have noted you can specify most of the settings in options.lua in the base directory, but I broke y value positioning of the bar when I did it.
Message: ...nterface\AddOns\SexyCooldown\Modules\RaidDebuffs.lua:61: attempt to concatenate local 'icon' (a nil value)
Time: 01/23/11 17:55:09
Count: 1
Stack: ...nterface\AddOns\SexyCooldown\Modules\RaidDebuffs.lua:61: in function <...nterface\AddOns\SexyCooldown\Modules\RaidDebuffs.lua:44>
(tail call): ?
[C]: ?
[string "safecall Dispatcher[1]"]:9: in function <[string "safecall Dispatcher[1]"]:5>
(tail call): ?
Interface\AddOns\Ace3\AceAddon-3.0\AceAddon-3.0.lua:514: in function `InitializeAddon'
Interface\AddOns\Ace3\AceAddon-3.0\AceAddon-3.0.lua:628: in function <Interface\AddOns\Ace3\AceAddon-3.0\AceAddon-3.0.lua:621>
Locals: <none>
local mod = SexyCooldown:NewModule("Raid Debuffs", "AceEvent-3.0", "AceBucket-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("SexyCooldown")
-- We only need one ID per skill - it's translated into a name.
local debuffs = {
RAID_DEBUFF_BLEED = {
772, -- Rend
12867, -- Deep Wounds
703, -- Garrote
1943, -- Rupture
5422, -- Lacerate
9005, -- Pounce
1079, -- Rip
1822, -- Rake
},
RAID_DEBUFF_MAJOR_ARMOR = {
7386, -- Sunder Armor
8647, -- Expose Armor
50498, -- Tear Armor
},
RAID_DEBUFF_SPELL_HIT = {
770, -- Faerie Fire. We assume that non-feral FF is always improved. Ugly as hell, but not much in the way of alternative options.
},
RAID_DEBUFF_MORTAL_STRIKE = {
13737, -- Mortal Strike
13218, -- Wound Poison
19434, -- Aimed Shot
}
}
local translatedDebuffs = {}
local classes = {
RAID_DEBUFF_BLEED = ("|cffff0000%s|r"):format(L["Bleed"]),
RAID_DEBUFF_MAJOR_ARMOR = ("|cffe2aa68%s|r"):format(L["Major Armor"]),
RAID_DEBUFF_SPELL_HIT = ("|cff68d2e2%s|r"):format(L["Spell Hit"])
}
function mod:OnInitialize()
SexyCooldown.RegisterFilter(self, "RAID_DEBUFF_BLEED",
L["Bleeds on Target"],
L["Show the duration of bleeds on the target"])
SexyCooldown.RegisterFilter(self, "RAID_DEBUFF_MAJOR_ARMOR",
L["Major Armor Debuffs"],
L["Show the duration of major armor debuffs on the target"])
SexyCooldown.RegisterFilter(self, "RAID_DEBUFF_SPELL_HIT",
L["Spell Hit Debuffs"],
L["Show the duration of +spell hit debuffs on the target"])
SexyCooldown.RegisterFilter(self, "RAID_DEBUFF_MORTAL_STRIKE",
L["Healing Debuff"],
L["Show the duration of -healing debuffs on the target"])
for k, v in pairs(debuffs) do
for _, spellID in ipairs(v) do
local name, rank, icon = GetSpellInfo(spellID)
translatedDebuffs[name .. ":" .. icon] = k
end
end
end
function mod:OnEnable()
self:RegisterBucketEvent("UNIT_AURA", 0.1, "UNIT_AURA")
self:RegisterEvent("PLAYER_TARGET_CHANGED", "Refresh")
self:Refresh()
end
function mod:Refresh()
self:UpdateUnit("target")
end
local function showBuffHyperlink(frame, unit, id, filter, class)
GameTooltip:SetUnitAura(unit, id, filter)
GameTooltip:AddLine(class)
end
function mod:UNIT_AURA(units)
for unit in pairs(units) do
self:UpdateUnit(unit)
end
end
do
local removeBuffs = {}
local existingBuffs = {}
local slotDebuffs = {}
local slotDebuffTimes = {}
function mod:UpdateUnit(unit)
if unit ~= "target" then return end
wipe(removeBuffs)
for k, v in pairs(existingBuffs) do
removeBuffs[k] = v
end
wipe(existingBuffs)
wipe(slotDebuffs)
wipe(slotDebuffTimes)
local index = 1
while true do
local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitAura(unit, index, "HARMFUL")
if not name then break end
if not icon then
local s = name
else
local s = name .. ":" .. icon
end
local debuffSlot = translatedDebuffs[s]
if debuffSlot then
local uid = debuffSlot .. ":" .. s
if expirationTime > (slotDebuffTimes[debuffSlot] or 0) then
if slotDebuffs[debuffSlot] then
local oldUID = slotDebuffs[debuffSlot]
existingBuffs[oldUID] = nil
removeBuffs[oldUID] = true
end
slotDebuffTimes[debuffSlot] = expirationTime
slotDebuffs[debuffSlot] = uid
SexyCooldown:AddItem(uid, name, icon, expirationTime - duration, duration, count, debuffSlot, showBuffHyperlink, unit, index, "HARMFUL", classes[debuffSlot])
existingBuffs[uid] = true
removeBuffs[uid] = nil
end
end
index = index + 1
end
for k, v in pairs(removeBuffs) do
SexyCooldown:RemoveItem(k)
end
end
end
I hope that the project manager responds favorably to your inquiry regarding taking over the project or at least getting co-authorship as this is one of the best addons I have ever used. If there is no response after a reasonable time, I would like to see someone take the code and re-write it, give it a new name and keep it alive and credit the original as too good to let die. Heck, I would give it a whirl if I had the technical know how.
That said, have you had any problems with the Bar Text setting not saving? I run a minimal UI, and do not want to show the bar, bar border, or bar timer text. This all works fine, except that when I first start the game, the setting for the bar text appear to be reset to defaults, disergarding the color and alpha settings that have been applied. Any advice or workarounds you can provide would be greatly appreciated, as it is somewhat tiresome to change the setting each time I start the game.
I have tried to change the saved variables files, etc but have had no luck.
Thanks again for stepping up and providing unofficial support.
Thanks for your support nonetheless.
My work-around for this is, is to always activate a single ability (usually horn of winter) every time I log in.
In short, I'm trying to fix it, but it's going to take some time.
this addon is godsent used it through out wrath just got back to the game sad to see its not working anymore
why don you mail the author to continue this addon?
may u can make a fan updata version or something