AzCastBar Addon
A highly customizable and lightweight casting bar replacement addon, with support for saved profiles and plugins.
The main release comes with the following plugins:
- Casting Bars (player, target, focus, pet)
- Mirror Bars (breath, feign death and fatigue)
The player cast bar supports safe zone indication for both cast and channeled spells. This "zone" represents your latency, when the spellcast has passed this point, you can safely cancel the cast and the spell will still fire.
The option dialog, along with the saved profiles are Load on Demand, which means it will only be loaded and take up memory when you're setting up the plugins.
The slash command for AzCastBar is "/acb". Using it will open the the option dialog. You can clear all plugin settings and reset them to their defaults by using the slash command "/acb wipeconfig". This does not affect the saved profiles.
Plugin Support
This addon is build up around the possibility to add more bars with different functions, known as plugins.
The plugin package for this addon which you can find on WoWInterface includes the following plugins:
- Player Auras (buff, debuff, tracking and weapon enchant timers)
- Target Auras (same as player auras, but for your target by default, can work as a dottimer)
- Cooldown Timers (shows spell and ability cooldowns)
- Global Cooldown Timer (timer for your global cooldown)
- Loot Roll Timers (replaces the default loot roll windows)
- Battleground Timers (various battleground timers)
- Flight Timer (duration of flight path routes)
- Swing Timer (melee swing and auto shot timer)
- Totem Timers (timers for totems)
- Shaman Timers (weapon imbues, elemental shields and other things)
- Threat Meter (shows your threat on the target mob)
- Experience (progress bar for experience and reputation gains)
You can find the official plugin package here:
https://www.curseforge.com/wow/addons/azcastbar-plugins
Lacking Features, Ideas & Problems
- CastBar: When crafting a tradeskill item, and you run out of mats or in other ways fail the craft, the cast bar may hang.
- Auras: I plan on adding a filter to this, so you can filter out any buffs you do not want to clutter up the bars.
- Core: Slash command to load saved profiles. Should initialise the Options LoD part, and load the given profile.
- LootRolls: Add option to size the buttons.
- Options: Shift clicking on a color, or right clicking, should pick the current class color.
my fix for Profile Frame Error. / Works for me.
https://wow.turnstelle.de/acbProfiles.lua
Overwrite the file .../_retail_\Interface\AddOns\AzCastBarOptions
Perhaps not the right way, but it works.
Thanks for the update! Appreciate your work!
YAY! Thank you for the update!
In reply to ThalliaGreystorm:
Yes, thank you Aezay!!!
I found an update over here just now and it seems to be working well thus far.
After a full day of this working (except the profile load/save) I wake up to this:
62x acb_CastBar\acbCast.lua:176: attempt to index field 'cfg' (a nil value)
[string "@acb_CastBar\acbCast.lua"]:176: in function `?'
[string "@acb_CastBar\acbCast.lua"]:94: in function <acb_CastBar\acbCast.lua:83>
Locals:
self = AzCastBarPluginTarget {
0 = <userdata>
SetTimeText = <function> defined @AzCastBar\acbCore.lua:205
unit = "target"
time = <unnamed> {
}
status = <unnamed> {
}
FormatTotalTime = <function> defined @AzCastBar\acbCore.lua:224
icon = <unnamed> {
}
options = <table> {
}
ApplyBarSettings = <function> defined @AzCastBar\acbCore.lua:239
ResetAndShow = <function> defined @AzCastBar\acbCore.lua:190
OnConfigChanged = <function> defined @acb_CastBar\acbCast.lua:268
FormatTime = <function> defined @AzCastBar\acbCore.lua:215
token = "Target"
StartFadeOut = <function> defined @acb_CastBar\acbCast.lua:319
ApplyBarSettingsSpecific = <function> defined @AzCastBar\acbCore.lua:250
name = <unnamed> {
}
bg = <unnamed> {
}
IsOptionAllowed = <function> defined @AzCastBar\acbCore.lua:229
}
event = "UNIT_SPELLCAST_START"
unit = "target"
castID = "Cast-3-1461-870-40-132621-001C06AD0C"
spellID = 132621
isCast = true
isChannel = false
spell = "Teleport: Vale of Eternal Blossoms"
_ = "Teleport: Vale of Eternal Blossoms"
texture = 851298
startTime = 1183.109000
endTime = 1192.272000
isTrade = false
nonInterruptible = false
subText = ""
castTime = 9.163000
(*temporary) = <function> defined =[C]:-1
(*temporary) = <unnamed> {
0 = <userdata>
}
(*temporary) = <function> defined =[C]:-1
(*temporary) = nil
(*temporary) = false
(*temporary) = "Cast-3-1461-870-40-132621-001C06AD0C"
(*temporary) = false
(*temporary) = "Cast-3-1461-870-40-132621-001C06AD0C"
(*temporary) = "attempt to index field 'cfg' (a nil value)"
UnitCastingInfo = <function> defined =[C]:-1
UnitChannelInfo = <function> defined =[C]:-1
tradeCountTotal = nil
GetTime = <function> defined =[C]:-1
hearth = "Hearthstone"
astral = "Astral Recall"
GetNetStats = <function> defined =[C]:-1
min = <function> defined =[C]:-1
unpack = <function> defined =[C]:-1
AND:
91x AzCastBar\acbCore.lua:350: attempt to call method 'SetBackdrop' (a nil value)
[string "@AzCastBar\acbCore.lua"]:350: in function `ApplyBarSettingsSpecific'
[string "@AzCastBar\acbCore.lua"]:241: in function `ApplyBarSettings'
[string "@AzCastBar\acbCore.lua"]:181: in function `ApplyAllSettings'
[string "@AzCastBar\acbCore.lua"]:97: in function <AzCastBar\acbCore.lua:85>
Locals:
self = AzCastBarPluginPlayer {
0 = <userdata>
cfg = <table> {
}
SetTimeText = <function> defined @AzCastBar\acbCore.lua:205
unit = "player"
time = <unnamed> {
}
status = <unnamed> {
}
FormatTotalTime = <function> defined @AzCastBar\acbCore.lua:224
icon = <unnamed> {
}
options = <table> {
}
ApplyBarSettings = <function> defined @AzCastBar\acbCore.lua:239
ResetAndShow = <function> defined @AzCastBar\acbCore.lua:190
ApplyBarSettingsSpecific = <function> defined @AzCastBar\acbCore.lua:250
OnConfigChanged = <function> defined @acb_CastBar\acbCast.lua:268
FormatTime = <function> defined @AzCastBar\acbCore.lua:215
token = "Player"
StartFadeOut = <function> defined @acb_CastBar\acbCast.lua:319
safezone = <unnamed> {
}
name = <unnamed> {
}
bg = <unnamed> {
}
IsOptionAllowed = <function> defined @AzCastBar\acbCore.lua:229
}
id = 1
id = 1
bar = AzCastBarPluginPlayer {
0 = <userdata>
cfg = <table> {
}
SetTimeText = <function> defined @AzCastBar\acbCore.lua:205
unit = "player"
time = <unnamed> {
}
status = <unnamed> {
}
FormatTotalTime = <function> defined @AzCastBar\acbCore.lua:224
icon = <unnamed> {
}
options = <table> {
}
ApplyBarSettings = <function> defined @AzCastBar\acbCore.lua:239
ResetAndShow = <function> defined @AzCastBar\acbCore.lua:190
ApplyBarSettingsSpecific = <function> defined @AzCastBar\acbCore.lua:250
OnConfigChanged = <function> defined @acb_CastBar\acbCast.lua:268
FormatTime = <function> defined @AzCastBar\acbCore.lua:215
token = "Player"
StartFadeOut = <function> defined @acb_CastBar\acbCast.lua:319
safezone = <unnamed> {
}
name = <unnamed> {
}
bg = <unnamed> {
}
IsOptionAllowed = <function> defined @AzCastBar\acbCore.lua:229
}
barCfg = <table> {
mergeTrade = false
showRank = false
safeZone = false
colSafezone = <table> {
}
showSpellTarget = false
left = 777.969482
width = 353
nameFontSize = 14.019441
colInterrupt = <table> {
}
colFailed = <table> {
}
colNormal = <table> {
}
height = 32
colNonInterruptable = <table> {
}
hideIconBorder = true
bottom = 311.294312
}
(*temporary) = nil
(*temporary) = AzCastBarPluginPlayer {
0 = <userdata>
cfg = <table> {
}
SetTimeText = <function> defined @AzCastBar\acbCore.lua:205
unit = "player"
time = <unnamed> {
}
status = <unnamed> {
}
FormatTotalTime = <function> defined @AzCastBar\acbCore.lua:224
icon = <unnamed> {
}
options = <table> {
}
ApplyBarSettings = <function> defined @AzCastBar\acbCore.lua:239
ResetAndShow = <function> defined @AzCastBar\acbCore.lua:190
ApplyBarSettingsSpecific = <function> defined @AzCastBar\acbCore.lua:250
OnConfigChanged = <function> defined @acb_CastBar\acbCast.lua:268
FormatTime = <function> defined @AzCastBar\acbCore.lua:215
token = "Player"
StartFadeOut = <function> defined @acb_CastBar\acbCast.lua:319
safezone = <unnamed> {
}
name = <unnamed> {
}
bg = <unnamed> {
}
IsOptionAllowed = <function> defined @AzCastBar\acbCore.lua:229
}
(*temporary) = <table> {
bgFile = "Tooltips\UI-Tooltip-Background"
insets = <table> {
}
}
(*temporary) = "attempt to call method 'SetBackdrop' (a nil value)"
cfg = <table> {
Player = <table> {
}
Pet = <table> {
}
Focus = <table> {
}
Target = <table> {
}
Mirror = <table> {
}
optionsBottom = 653.000122
optionsLeft = 9.000883
}
ACB_DefaultMeta = <table> {
__index = <table> {
}
}
mirrorAnchor = <table> {
RIGHT = "LEFT"
LEFT = "RIGHT"
TOP = "BOTTOM"
BOTTOM = "TOP"
}
labelAlignOffset = <table> {
RIGHT = -3
CENTER = 0
LEFT = 3
}
unpack = <function> defined =[C]:-1
backDrop = <table> {
bgFile = "Tooltips\UI-Tooltip-Background"
Any ideas ?
Is the owner coming back for update or are we obligate to search for another replacement? We really like this addon don't want it to go away.
In reply to coraly100:
I see the owner has been active as of 5 days ago, but none of their projects have been updated in quite a while. Personally I'll give it another week to see a message at least that they are working on it. Otherwise I will probably switch to "Castbars" by xbeeps. All ready updated for 9.0 and looks to do all the things azc does.
In reply to Lomack01:
thank you for the tips!
I keep getting this:
61x AzCastBar\acbCore.lua:350: attempt to call method 'SetBackdrop' (a nil value)
[string "@AzCastBar\acbCore.lua"]:350: in function `ApplyBarSettingsSpecific'
[string "@AzCastBar\acbCore.lua"]:241: in function `ApplyBarSettings'
[string "@AzCastBar\acbCore.lua"]:181: in function `ApplyAllSettings'
[string "@AzCastBar\acbCore.lua"]:97: in function <AzCastBar\acbCore.lua:85>
Locals:
self = AzCastBarPluginPlayer {
0 = <userdata>
cfg = <table> {
}
SetTimeText = <function> defined @AzCastBar\acbCore.lua:205
unit = "player"
time = <unnamed> {
}
status = <unnamed> {
}
FormatTotalTime = <function> defined @AzCastBar\acbCore.lua:224
icon = <unnamed> {
}
options = <table> {
}
ApplyBarSettings = <function> defined @AzCastBar\acbCore.lua:239
ResetAndShow = <function> defined @AzCastBar\acbCore.lua:190
ApplyBarSettingsSpecific = <function> defined @AzCastBar\acbCore.lua:250
OnConfigChanged = <function> defined @acb_CastBar\acbCast.lua:268
FormatTime = <function> defined @AzCastBar\acbCore.lua:215
token = "Player"
StartFadeOut = <function> defined @acb_CastBar\acbCast.lua:319
safezone = <unnamed> {
}
name = <unnamed> {
}
bg = <unnamed> {
}
IsOptionAllowed = <function> defined @AzCastBar\acbCore.lua:229
}
id = 1
id = 1
bar = AzCastBarPluginPlayer {
0 = <userdata>
cfg = <table> {
}
SetTimeText = <function> defined @AzCastBar\acbCore.lua:205
unit = "player"
time = <unnamed> {
}
status = <unnamed> {
}
FormatTotalTime = <function> defined @AzCastBar\acbCore.lua:224
icon = <unnamed> {
}
options = <table> {
}
ApplyBarSettings = <function> defined @AzCastBar\acbCore.lua:239
ResetAndShow = <function> defined @AzCastBar\acbCore.lua:190
ApplyBarSettingsSpecific = <function> defined @AzCastBar\acbCore.lua:250
OnConfigChanged = <function> defined @acb_CastBar\acbCast.lua:268
FormatTime = <function> defined @AzCastBar\acbCore.lua:215
token = "Player"
StartFadeOut = <function> defined @acb_CastBar\acbCast.lua:319
safezone = <unnamed> {
}
name = <unnamed> {
}
bg = <unnamed> {
}
IsOptionAllowed = <function> defined @AzCastBar\acbCore.lua:229
}
barCfg = <table> {
mergeTrade = false
showRank = false
safeZone = false
colSafezone = <table> {
}
showSpellTarget = false
left = 777.969482
width = 353
nameFontSize = 14.019441
colInterrupt = <table> {
}
colFailed = <table> {
}
colNormal = <table> {
}
height = 32
colNonInterruptable = <table> {
}
hideIconBorder = true
bottom = 311.294312
}
(*temporary) = nil
(*temporary) = AzCastBarPluginPlayer {
0 = <userdata>
cfg = <table> {
}
SetTimeText = <function> defined @AzCastBar\acbCore.lua:205
unit = "player"
time = <unnamed> {
}
status = <unnamed> {
}
FormatTotalTime = <function> defined @AzCastBar\acbCore.lua:224
icon = <unnamed> {
}
options = <table> {
}
ApplyBarSettings = <function> defined @AzCastBar\acbCore.lua:239
ResetAndShow = <function> defined @AzCastBar\acbCore.lua:190
ApplyBarSettingsSpecific = <function> defined @AzCastBar\acbCore.lua:250
OnConfigChanged = <function> defined @acb_CastBar\acbCast.lua:268
FormatTime = <function> defined @AzCastBar\acbCore.lua:215
token = "Player"
StartFadeOut = <function> defined @acb_CastBar\acbCast.lua:319
safezone = <unnamed> {
}
name = <unnamed> {
}
bg = <unnamed> {
}
IsOptionAllowed = <function> defined @AzCastBar\acbCore.lua:229
}
(*temporary) = <table> {
bgFile = "Tooltips\UI-Tooltip-Background"
insets = <table> {
}
}
(*temporary) = "attempt to call method 'SetBackdrop' (a nil value)"
cfg = <table> {
Player = <table> {
}
Pet = <table> {
}
Focus = <table> {
}
Target = <table> {
}
Mirror = <table> {
}
optionsBottom = 653.000122
optionsLeft = 9.000883
}
ACB_DefaultMeta = <table> {
__index = <table> {
}
}
mirrorAnchor = <table> {
RIGHT = "LEFT"
LEFT = "RIGHT"
TOP = "BOTTOM"
BOTTOM = "TOP"
}
labelAlignOffset = <table> {
RIGHT = -3
CENTER = 0
LEFT = 3
}
unpack = <function> defined =[C]:-1
backDrop = <table> {
bgFile = "Tooltips\UI-Tooltip-Background"
No idea what it means or how to fix it.
In reply to Dismis:
I tried to do the switch below as my cast bar wasn't showing, but it didn't help.
In reply to Dismis:
You need to do that fix in a lot more places not just the one mentioned. If you want the options pane to work, you need to basically do a search in each of the lua files for 'CreateFrame' and add the BackdropTemplate piece in. Check what Zadie posted in reply to me just below this.
In reply to Bezal1:
I just did that now, it changed nothing I'm afraid.
I still have no /acb options opening, and my cast bar is "transparent"
Guess I'll wait for an actual update and dust off Quartz while waiting :)
After a complete redo of everything I have lift off :)
Last problem is my profile is gone, which is okay, but I don't seem to be able to make a new one (as in save the current setup)
anyone have ideas on this error for the Mirror bar?
Error occured in: Global
Count: 1
Message: ...ce\AddOns\AzCastBarOptions\Libs\AzOptionsFactory.lua line 179:
Usage: AzOptionsFactorySlider1:SetValue(value, [treatAsMouseEvent])
Debug:
[string "=[C]"]: ?
[string "=[C]"]: SetValue()
[string "@AzCastBarOptions\Libs\AzOptionsFactory.lua"]:179: Init()
[string "@AzCastBarOptions\Libs\AzOptionsFactory.lua"]:122: BuildOptionsPage()
[string "@AzCastBarOptions\acbOptions.lua"]:479: BuildCategoryPage()
[string "@AzCastBarOptions\acbOptions.lua"]:310:
AzCastBarOptions\acbOptions.lua:301
Locals:
In reply to Bezal1:
I can't log in and test today. But try to searching the file (AzOptionsFactory.lua) for: CreateFrame
Add
,"BackdropTemplate"
as the last argument. For example Line 185:
local f = CreateFrame("Frame",nil,self.owner,"BackdropTemplate");
You need to do this for every instance of "CreateFrame" you can find in the code.
In reply to Forge_User_17601538:
Yea that's what I have been doing in every file but that isn't helping with this. This error doesn't appear to be on a CreateFrame, and still happens as soon as you select 'Mirror' in the ACB options page. Its thrown on a SetValue(value, [treatAsMouseEvent]) function. Might have to dig into what that's all about. :(
In reply to Bezal1:
Hello,
I now have changed 3 files:
Change line 419 in acbCore.lua to:
local f = CreateFrame(frameType or "Frame",name,UIParent, "BackdropTemplate");
In acbOptions.lua (diffrent folder)
Change line 2 to:
local f = CreateFrame("Frame",modName.."Options",UIParent,"BackdropTemplate");
Change line 219 to:
f.outline = CreateFrame("Frame",nil,f,"BackdropTemplate");
Change line 226 to:
f.outline2 = CreateFrame("Frame",nil,f, "BackdropTemplate");
In AzDropDown.lua (diffrent folder)
Change line 248 to:
local item = CreateFrame("Button",nil,menu,"BackdropTemplate");
Change line 309 to:
menu = CreateFrame("Frame",nil,nil,"BackdropTemplate");
Change line 405 to:
local dd = CreateFrame("Frame",nil,parent,"BackdropTemplate");
Change line 408 to:
dd.button = CreateFrame("Button",nil,dd,"BackdropTemplate");
With all other addons disabled, i get no lua-errors and mirror-castbar works.
https://ibb.co/mDpC04y
In reply to Forge_User_17601538:
Thanks, yea I had already replaced all of those. There's some other interaction going on that I need to figure out because it only happens if other addons are enabled. I managed to get the mirror bar enabled and configured, but its not actually triggering and replacing the default blizzard mirror. By itself, its fine, but looks like with ElvUI, it breaks - even if I'm not using any castbar skins in Elv.
Update: It happens as soon as you toggle on 'Unitframes' even if you choose to disable every single frame, just having unitframes options in ElvUI available is causing my errors.
Shadowlands broke this good addon. 😢
9.01 Bruteforce fix.
Change line 419 in acbCore.lua to:
local f = CreateFrame(frameType or "Frame",name,UIParent, "BackdropTemplate");
This makes my castbars appear again, as they were before patch.
/acb doesnt work with that fix.. will look into it..