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):
hi and first of all, a thank you for this great addon Antiarc !
i hope you maintain this addon further
============================
combat situations / original version
============================
- the points a_1 - a_8 are only to be seen as guides on how to do it (combat situations).
- the points b_1 - b_5 are to be seen as guides how to make the original version executable for 10.0.2.
- both are tested for 10.0.2
[hint]
if there are bugs through blizzard api changes like GetContainerItemCooldown(i,j) look for example at
https://wowpedia.fandom.com/wiki/Wowpedia?utm_source=Fandom&utm_medium=banner&utm_campaign=wow
to fix them by yourself. the addons
BugBrabber
BugSack -- you need both!
can be helpful for this.
additionally you can use the blizzard debug tools
/fstack [showhidden]
/etrace [command] command=start oder end
see at
https://wowwiki-archive.fandom.com/wiki/Blizzard_DebugTools.
[known issues]
none.i try my best, but unfortunately can not guarantee anything.
=====================================================================================================
[after my original post of 11/16/2022 again the note:]
read the license and don't make any changes to this addon that violate it [and of course, this applies to every addon] !
=====================================================================================================
=====================================================================================================
[additions/bug fixes/changes/new:]
a_1: SexyCooldown.toc - insert
a_2: EventManager.lua - cleaned up
a_3: Localization\enUS.lua - insert, see [hint] a_1 and a_3 [folder Localization]
a_4: Items.lua - bug fix [new Blizzard api elements] [folder Modules]
a_5: Combat.lua - new [combat situations] [folder Modules]
a_6: Folder Libs - hint
a_7: prototype.lua - cleaned up, bug fix
a_8: core.lua - bug fix [new Blizzard api elements]
if you don't want to modify this addons for combat situations you only have to do the following replaces/fixes in the original addon:
b_1: toc file ## Interface: 90001 --> ## Interface: 100002
b_2: Items.lua file GetContainerItemCooldown(i,j) --> C_Container.GetContainerNumSlots(i)
GetContainerItemCooldown(i,j) --> C_Container.GetContainerItemLink (i,j)
GetContainerItemLink(i,j) --> C_Container.GetContainerItemLink (i,j)
b_3: prototype.lua file self:SetMinResize(20, 10) --> -- self:SetMinResize(20, 10)
icon:SetClampedToScreen(self.settings.icon.clamp) --> -- icon:SetClampedToScreen(self.settings.icon.clamp)
b_4: core.lua G.GetContainerItemCooldown --> G.C_Container.GetContainerItemCooldown
G.GetContainerItemLink --> G.C_Container.GetContainerItemLink
b_5: pay attention to a_6
=====================================================================================================
=====================================================================================================
a_1: SexyCooldown.toc - insert
## Interface: 100002
## Title: SexyCooldown
## Notes: A sexy logarithmic cooldown bar
## Notes-zhCN: 性感冷却计时条
## Notes-zhTW: 性感冷卻計時條
## Author: Antiarc
## Version: 0.9.0
## SavedVariables: SexyCooldownDB
## SavedVariablesPerCharacter: playerInstanceInfo, myProto
## OptionalDeps: Ace3, LibSharedMedia-3.0
#@no-lib-strip@
embeds.xml
#@end-no-lib-strip@
Localization\enUS.lua
Localization\zhCN.lua
Localization\zhTW.lua
EventManager.lua
loadstub.lua
options.lua
prototype.lua
core.lua
Modules\Combat.lua
Modules\Spells.lua
Modules\Items.lua
Modules\Auras.lua
[hint]
- new are EventManager.lua and Modules\Combat.lua.
- if not needed can ## Notes-zhCN: 性感冷却计时条, ## Notes-zhTW: 性感冷卻計時條, Localization\zhCN.lua and Localization\zhTW.lua be deleted.
=====================================================================================================
=====================================================================================================
a_2: EventManager.lua: - cleaned up
Frame = CreateFrame("FRAME");
Frame:SetScript("OnEvent", function(self, event, arg1, ...)
if (event == "ADDON_LOADED" and arg1 == "SexyCooldown") then
self.AddonLoaded = true;
end
end)
Frame:RegisterEvent("ADDON_LOADED");
Frame:RegisterEvent("PLAYER_ENTERING_WORLD");
=====================================================================================================
=====================================================================================================
a_3: Localization\enUS.lua - insert, see [hint] a_1 and a_3 [folder Localization]
insert after
-- ./loadstub.lua
-- no localization
the following code:
-- ./Modules/Combat.lua
L["Combat settings"] = true
L["Always"] = true
L["Always display bar"] = true
L["Arena"] = true
L["Display bar in arenas"] = true
L["PvP"] = true
L["Display bar in pvp"] = true
L["Party"] = true
L["Display bar in dungeons"] = true
L["Raid"] = true
L["Display bar in raids"] = true
L["Scenario"] = true
L["Display bar in scenarios"] = true
L["Player in Combat"] = true
L["Display bar if player is in combat"] = true
[hint]
- if needed, do it analog in Localization\zhCN.lua and/or Localization\zhTW.lua. see [hint] in a_1.
=====================================================================================================
=====================================================================================================
a_4: Items.lua - bug fix [new Blizzard api elements] [folder Modules]
[in original file]
line 38 GetContainerNumSlots(i) --> C_Container.GetContainerNumSlots(i)
line 40 GetContainerItemCooldown(i,j) --> C_Container.GetContainerItemCooldown(i,j)
line 42 GetContainerItemLink(i,j) --> C_Container.GetContainerItemLink(i,j)
=====================================================================================================
=====================================================================================================
a_5: Combat.lua - new [combat situations] [folder Modules]
create new file Combat.lua in folder Modules and fill/save it with zhe following:
local mod = SexyCooldown:NewModule("Combat", "AceEvent-3.0", "AceBucket-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("SexyCooldown")
function mod:OnInitialize()
SexyCooldown.RegisterFilter(self, "DISPLAY_ALWAYS",
L["Always"],
L["Always display bar"])
SexyCooldown.RegisterFilter(self, "DISPLAY_ARENA",
L["Arena"],
L["Display bar in arenas"])
SexyCooldown.RegisterFilter(self, "DISPLAY_PVP",
L["PvP"],
L["Display bar in pvp"])
SexyCooldown.RegisterFilter(self, "DISPLAY_PARTY",
L["Party"],
L["Display bar in dungeons"])
SexyCooldown.RegisterFilter(self, "DISPLAY_RAID",
L["Raid"],
L["Display bar in raids"])
SexyCooldown.RegisterFilter(self, "DISPLAY_SCENARIO",
L["Scenario"],
L["Display bar in scenarios"])
SexyCooldown.RegisterFilter(self, "DISPLAY_COMBAT",
L["Player in Combat"],
L["Display bar if player is in combat"])
end
function mod:OnEnable()
self:RegisterEvent("PLAYER_REGEN_ENABLED" , "Refresh")
self:RegisterEvent("PLAYER_REGEN_DISABLED", "Refresh")
self:RegisterEvent("PLAYER_ENTERING_WORLD", "Refresh")
self:Refresh()
end
function mod:Refresh()
self:UpdateUnit("player")
end
function mod:UpdateUnit(unit)
if unit ~= "player" then return end
local _, instanceType = GetInstanceInfo()
local affectingCombat = UnitAffectingCombat("player")
myDB = SexyCooldownDB
if myDB.profiles.AllChar.bars[1].events.DISPLAY_ALWAYS then -- this part means:
myDB.profiles.AllChar.bars[1].events.DISPLAY_ARENA = false -- if DISPLAY_ALWAYS = true, you can't select the others simultan.
myDB.profiles.AllChar.bars[1].events.DISPLAY_PVP = false --
myDB.profiles.AllChar.bars[1].events.DISPLAY_PARTY = false -- so you have first disable DISPLAY_ALWAYS to select one or more
myDB.profiles.AllChar.bars[1].events.DISPLAY_RAID = false -- of the others !
myDB.profiles.AllChar.bars[1].events.DISPLAY_SCENARIO = false
myDB.profiles.AllChar.bars[1].events.DISPLAY_COMBAT = false
end
playerInstanceInfo = false
for i = 1, 20 do
if myDB.profiles.AllChar.bars[1].events.DISPLAY_ALWAYS then playerInstanceInfo = true; i =20
elseif myDB.profiles.AllChar.bars[1].events.DISPLAY_ARENA and instanceType == "arena" then playerInstanceInfo = true; i =20
elseif myDB.profiles.AllChar.bars[1].events.DISPLAY_PVP and instanceType == "pvp" then playerInstanceInfo = true; i =20
elseif myDB.profiles.AllChar.bars[1].events.DISPLAY_PARTY and instanceType == "party" then playerInstanceInfo = true; i =20
elseif myDB.profiles.AllChar.bars[1].events.DISPLAY_RAID and instanceType == "raid" then playerInstanceInfo = true; i =20
elseif myDB.profiles.AllChar.bars[1].events.DISPLAY_SCENARIO and instanceType == "scenario" then playerInstanceInfo = true; i =20
elseif myDB.profiles.AllChar.bars[1].events.DISPLAY_COMBAT and affectingCombat then playerInstanceInfo = true; i =20
else -- nothing
end
end
if playerInstanceInfo then --[2022-12-02] -- You don't really want to have to enter a /reload every time the combat situation changes.
myProto:Show() --[2022-12-02] --
else --[2022-12-02] -- therefore this part!
myProto:Hide() --[2022-12-02]
end --[2022-12-02]
end
=====================================================================================================
=====================================================================================================
a_6: Folder Libs - hint
according my original post of 11/16/2022:
all folders from AceAddon-3.0 to LibStub should been replaced by the latest versions. [for example, available on curseforge.]
=====================================================================================================
=====================================================================================================
a_7: prototype.lua - cleaned up, bug fix
according my original post of 11/16/2022 and the original file:
line 130 self: SetMinResize(20, 10) --> -- self:SetMinResize(20, 10)
line 267 icon: SetClampedToScreen(self.settings.icon.clamp) --> -- icon:SetClampedToScreen(self.settings.icon.clamp)
[hint]
- this means, all lines are now lua comments
[new and only for combat situations version <--> not for original version]
after self:UpdateBarLook() in line 230 in original
myProto = self
if playerInstanceInfo then
myProto:Show() -- this part is necessary for combat situations
else -- so that these are displayed correctly
myProto:Hide()
end
=====================================================================================================
=====================================================================================================
a_8: core.lua - bug fix [new Blizzard api elements]
[in original file]
line 12 G.GetContainerItemCooldown --> G.C_Container.GetContainerItemCooldown
line 13 G.GetContainerItemLink --> G.C_Container.GetContainerItemLink
==============================================================================================================================================
have fun with it
bye
Hi,
==============================================================================================================
[First:] Read the license and don't make any changes to this addon that violate it !
Of course, this applies to every addon !
=============================================================================================================
=============================================================================================================
[Second:] What could you do to make the addon runable on Interface: 100002 [Note First]
=============================================================================================================
a) SexyCooldown.toc:
## Interface: 90001 --> ## Interface: 100002
b) Folder Libs:
All Folders from AceAddon-3.0 to LibStub should been replaced by the latest versions. [For example, available on CurseForge.]
c) prototype.lua:
Line 130 self: SetMinResize(20, 10) --> -- self:SetMinResize(20, 10)
Line 267 icon: SetClampedToScreen(self.settings.icon.clamp) --> -- icon:SetClampedToScreen(self.settings.icon.clamp)
[This means, both lines are now lua comments]
d) Modules\Item.lua
Line 38: GetContainerNumSlots(i) --> C_Container.GetContainerNumSlots(i)
Line 40: GetContainerItemCooldown(i,j) --> C_Container.GetContainerItemCooldown(i,j)
makes it runable.
=============================================================================================================
[Third:] What could i do that the addon is only displayed in the different combat situations [Note First]
=============================================================================================================
a) to keep it variable, checkboxes would have to be stored in the option part of the addon. Since I am not the author of the addon I will skip this part.
b) hardcoded and only displayed in scenario, party, raid, arena, pvp OR only displayed in combat [ignoring a), use it as an example]
[b1) [Instances, api function -> GetInstanceInfo] Create in the SexyCooldown Folder a lua file with name --> EventManager.lua and fill/save it with
Frame = CreateFrame("FRAME");
Frame:SetScript("OnEvent", function(self, event, arg1, ...)
if (event == "ADDON_LOADED" and arg1 == "SexyCooldown") then
self.AddonLoaded = true;
elseif (event == "PLAYER_ENTERING_WORLD") then
_, instanceType = GetInstanceInfo()
if instanceType == "scenario" or
instanceType == "party" or
instanceType == "raid" or
instanceType == "arena" or
instanceType == "pvp" then
playerInstanceInfo = true
myProto:Show()
else
playerInstanceInfo = false
myProto:Hide()
end
end
end)
OR
[b2 for in combat general, wow api function -> UnitAffectingCombat]
Frame = CreateFrame("FRAME");
Frame:SetScript("OnEvent", function(self, event, arg1, ...)
if (event == "ADDON_LOADED" and arg1 == "SexyCooldown") then
self.AddonLoaded = true;
elseif (event == "PLAYER_ENTERING_WORLD") then
if UnitAffectingCombat("player") then
myProto:Show()
else
playerInstanceInfo = false
myProto:Hide()
end
end
end)
Frame:RegisterEvent("ADDON_LOADED");
Frame:RegisterEvent("PLAYER_ENTERING_WORLD");
c) open prototype.lua:
insert after line 230 ( self:UpdateBarLook())
myProto = self
if playerInstanceInfo then
self:Show()
else
self:Hide()
end
d) open SexyCooldown.toc and replace it with
## Interface: 100002
## Title: SexyCooldown
## Notes: A sexy logarithmic cooldown bar
## Notes-zhCN: 性感冷却计时条
## Notes-zhTW: 性感冷卻計時條
## Author: Antiarc
## Version: 0.9.0
## SavedVariables: SexyCooldownDB
## SavedVariablesPerCharacter: playerInstanceInfo, myProto
## OptionalDeps: Ace3, LibSharedMedia-3.0
#@no-lib-strip@
embeds.xml
#@end-no-lib-strip@
Localization\enUS.lua
Localization\zhCN.lua
Localization\zhTW.lua
EventManager.lua
loadstub.lua
options.lua
prototype.lua
core.lua
Modules\Spells.lua
Modules\Items.lua
Modules\Auras.lua
By all the Blizzard api changes--> i hope that's all
have fun with it,
bye
In reply to Balthasaria:
i really love you!
For anyone looking for the logarithmic cooldown bar (also buffs, debuffs, etc) that used to be available with this add on, go check out the Raven addon. You can get similar functionality by using the Timeline option within Raven. Good luck.
In reply to sayre_lock:
Thanks for this! This is a fine replacement and resolves the missing icon splash when the spell comes off cooldown.
In reply to sayre_lock:
i tried raven in patch 10.0, it conflicts with Vuhdo adddon. Has anyone else had the same problem?
Can't we add the ability to display the bar only during combat? It's really perfect with it!!
In reply to 욕망의주인:
Yes, please! Please add the option to hide the Bar out of combat!
-
Can we please have Splash fix? D: It's not working in Shadowlands and it makes me really sad D:
Thanks so much for the update!
Any chance of an update for 9.x fam?
I still check this page regularly praying for an update. This addon was legendary. It's currently broken, particularly with debuff tracking. I would pay money to have it updated.
Hi; i really love the addon; i used to have something similar to this one a long time ago (during Wotlk and Cata) but in the other addon which i can't remember the name off ... there we some features that i LOVED above all; so i wanted to ask is there a possibility to implement that into this one or is there someone that knows the name of the addon i'm searching for?
So the extra things were
#1 When you click on the CD that is on the bar (e.g. cap totem for shamans) it automatically says the CD timer in a party/raid/say option ... that way u inform others on things u might want
#2 When the spell is on CD and u are click it ... it automatically jumps on the bar ... as in it expends and makes a little bigger impact above the other CDs just so u know where the spell is at that time ...
is there anyone that knows the addon that i'm looking for or is there an option to enable this on this one? Please help
any tips please, starting from last week i got this error
Thank You,
23529x SexyCooldown\Modules\Auras-Auras.lua:99: attempt to concatenate a boolean value
SexyCooldown\Modules\Auras-Auras.lua:99: in function <SexyCooldown\Modules\Auras.lua:91>
SexyCooldown\Modules\Auras-Auras.lua:141: in function `UpdateUnit'
SexyCooldown\Modules\Auras-Auras.lua:68: in function `Refresh'
SexyCooldown\core.lua:332: in function `Refresh'
SexyCooldown\options-Options.lua:770: in function <SexyCooldown\options.lua:761>
[C]: ?
...nfig-3.0\AceConfigDialog-3.0\AceConfigDialog-3.0-67.lua:50: in function <...nfig-3.0\AceConfigDialog-3.0\AceConfigDialog-3.0.lua:48>
...nfig-3.0\AceConfigDialog-3.0\AceConfigDialog-3.0-67.lua:784: in function <...nfig-3.0\AceConfigDialog-3.0\AceConfigDialog-3.0.lua:610>
(tail call): ?
[C]: ?
[string "safecall Dispatcher[3]"]:9: in function <[string "safecall Dispatcher[3]"]:5>
(tail call): ?
Ace3\AceGUI-3.0\AceGUI-3.0-36.lua:314: in function `Fire'
...ic\libs\AceGUI-3.0-36\widgets\AceGUIWidget-CheckBox.lua:68: in function <...ic\libs\AceGUI-3.0\widgets\AceGUIWidget-CheckBox.lua:57>
I am not a programmer, but I leave them running at 8.0.1 if there are problems, you would not know how to solve them, I hope I will not be banned for wanting to use the addon.
translate by Google.
SexyCooldown 8.0.1
Any chance this addon can have an option for hiding out of combat?
missing this addon
In reply to datamike:
what are the chances of this addon will work with 8.0? :( seems to be a problem with the addon pulling buffs/debuffs but its doing fine with cooldowns