Broker: XPBar - Sparkly XP Bars that can be attached anywhere.
Displays Infos about XP and watched Faction and adds bars for XP and/or reputation to your Broker bar addon. Select custom colors for bars or use predefined colors based on standing for the reputation bar.
You can attach the bars to (almost) any frame by click selecting the desired anchor frame with the mouse (similar to Xparky). You can attach the bars to any side of the frame on outside as well as on the inside. Adjust anchor position by setting X- and Y-Offset.
Update for Version 2
- New text system for Broker label and bars.
- Provides wide selection of predefined texts for display.
- Custom texts can be freely configured via script API.
- XP and reputation data for completed and incomplete quests.
- Shown in tooltip, in label texts and as bar sections.
- Notifications when completed quests allow to level up when handed in (or to reach the next standing with the watched faction).
- Bar length is now adjustable.
- Bar texts can now be shown side by side. That allows for bigger font sizes especially when XP and reputation bar are shown both.
- Fixed darkened color problem with default addon texture.
- Added option 'No Texture' to display bars just in opaque colors.
NOTE
- Due to the new text system the old text options have been dumped. Reconfiguring texts for Broker label and bars is required.
- Larger memory footprint mainly due to use of a library containing quest reputation reward data since Blizzard broke or scrapped API functions to retrieve that data from quests in log.
New
- Short faction names: It is now possible to use custom set short names for factions in label and bar texts. Set up short faction names in Options in section "Factions". To apply short names in the label and bar texts adjust the custom text in the "Custom Texts" section. (Copy your preferred template if required.) The function call GetValue("Faction") now accepts an additional parameter maxLength. When the default faction name is longer than the specified maximum length the custom set short name is used instead. So GetValue("Faction", 16) will use the short name for faction names longer then 16 characters. If no short name has been set up the default faction name will be used. Set the adjusted custom text as your bar and/or label text.
Features
- Attaches bars for XP and/or reputation to (almost) any globally named frame.
- Configure layout of bars: Colors, dimensions, texture.
- Tooltip displays extended information about XP and reputation of currently watched faction.
- Provides data about XP and reputation for completed and incomplete quests in the quest log.
- Notifications when completed quests allow to level up when handed in (or to reach the next standing with the watched faction).
- Customizable texts for bar and Broker label.
- Select texts from predefined selection or define your own texts via script API.
- Provided information includes: Time to Level, Kills to Level, XP/Rep/Kills per Hour,
- Ace3 profile support for settings.
Usage Hints
- Activating Broker: XPBar in your Broker display will show up the label text in that display only. To display the actual bars you will need to attach them to a frame on your screen first. To do this go to Options->Frame and click the button "Select by Mouse". Select the frame to attach the bars to by left-clicking on it and the bars should show up.
- The mouse cursor gets highlighted and shows the frame name as tooltip for each frame it hovers over. Left-click on desired frame to attach the bars to. Right-click will disable the selection cursor. Frame names may also be entered manually in the edit box. Use the option "Attach to" to select the side (Top or Bottom) of the frame where you want the bars. Fine adjust the position by using the Offset settings if needed.
- If you are trying to attach to a Broker display make sure you hit an empty spot on the display. If you click on another plugin on the display the bars will attach to the frame of this Broker plugin only.
- If you use Docking Station and want to attach to it's panels you need to make sure you have the Global option (Panels -> General) enabled for the panel you want to connect to.
- The "Jostle" option displaces the blizzard frames by the width of the bars. This should only be used with frames on the upper and lower edge of the screen and not with free floating frames!
- Consider that the Reputation bar is hidden if no faction is watched.
Hi
I'm getting an error even with humfras fixed version (thanks for that btw)
getting this error with it
Message: ..\AddOns\Broker_XPBar\Broker_XPBar.lua line 965:
attempt to compare nil with number
Debug:
[string "=(tail call)"]: ?
[string "@Broker_XPBar\Broker_XPBar.lua"]:965: ?()
[string "@Ace3\CallbackHandler-1.0\CallbackHandler-1.0.lua"]:119:
...Ons\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.lua:119
[string "=[C]"]: ?
[string "@Ace3\CallbackHandler-1.0\CallbackHandler-1.0.lua"]:29:
...Ons\Ace3\CallbackHandler-1.0\CallbackHandler-1.0.lua:25
[string "@Ace3\CallbackHandler-1.0\CallbackHandler-1.0.lua"]:64: Fire()
[string "@Ace3\AceEvent-3.0\AceEvent-3.0.lua"]:120:
Ace3\AceEvent-3.0\AceEvent-3.0.lua:119
In reply to Air10000:
Fixed with r61
In reply to humfras:
You may want to update the libs included in the package. I've been having some problems with your build that I think were rooted in LibSink failing to load which caused the rest of the addon to fail.
The addon would sometimes work, sometimes wouldn't. Reloading UI never seemed to help but sometimes logging out and in did. I dropped the latest version of libsink in, reloaded ui and was working again.
In reply to Turducken_McNugget:
All AddOns were updated apart from LibSink which was an oversight.
Should be fixed now.
I uploaded a fixed version @ WoWI.
Go to https://www.wowinterface.com/downloads/info17530-BrokerXPBar.html#other under Optional Files at the top
or directly to https://www.wowinterface.com/downloads/info25737.html
In reply to humfras:
Appreciate the update, but there is still a lingering bug when leveling up.
In reply to CrusaderEsper:
Should be fixed now.
One fix is in Broker_XPBar.lua
from: Addon.MAX_LEVEL = MAX_PLAYER_LEVEL_TABLE[GetExpansionLevel()]
to: Addon.MAX_LEVEL = GetMaxLevelForExpansionLevel(GetExpansionLevel())
The next set of issues are in QuestInfo.lua. The quest functions are now part of C_QuestLog. Some changes are simple, like
local GetNumQuestLogEntries = _G.C_QuestLog.GetNumQuestLogEntries
C_QuestLog.GetSelectedQuest is likely the replacement for GetQuestLogSelection.
But GetQuestLogTitle used to return more than just the Title while I think that's all C_QuestLog.GetTitleForLogIndex does. So, there will need to be some extra sniffing around and massaging to make it work right.
Don't know anything about the errors thrown by LibQuestForGlory.
Alright, First off, I'm not a developer by trade. I more or less cobbled this together so any suggestions from anyone who knows better please let me know.
In anticipation of this addon NOT being compatible with Shadowlands (my trials on beta were not promising...) I created a weak aura to mimic some of the functionality. The version linked below does not work in Beta, however I have already created an updated version that does. Once the API has the 9.0 changes I'll publish the updated version.
https://wago.io/PjXLA9C0Z
i copied from retail and get nothing but lua errors, no bar shows up, nothing to configure
please update this for classic, thank you - amey0
In reply to amey0:
For me, the Addon works, but generate many lua errors.
I only need the xp bar. I copy all Folders and SavedVariables from my retail settings into the classic folder.
hope it can help
If you are like me and want to see the "completed quest XP" using only tracked quests, make the following replacements in QuestInfo.lua:
Replace:
With:
Replace:
With:
Replace:
With:
Replace:
With:
That should do it!
106x ...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0-90061.lua:399: attempt to index local 'frameData' (a nil value)
...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0-90061.lua:399: in function `Refresh'
...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0-90061.lua:132: in function <...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:130>
Locals:
self = <table> {
Unregister = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:234
topFrames = <table> {
}
ProcessQueue = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:290
PLAYER_ENTERING_WORLD = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:152
Refresh = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:315
FCF_UpdateDockPosition = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:164
TicketStatusFrame_OnEvent = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:160
PLAYER_REGEN_DISABLED = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:307
topAdjust = true
PLAYER_REGEN_ENABLED = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:302
PLAYER_CONTROL_GAINED = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:298
EnableTopAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:255
frame = <unnamed> {
}
IsTopAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:251
IsBottomAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:269
RegisterTop = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:200
DisableTopAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:262
UIParent_ManageFramePositions = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:172
PlayerFrame_SequenceFinished = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:176
FCF_UpdateCombatLogPosition = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:168
EnableBottomAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:273
DisableBottomAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:280
bottomAdjust = true
GetScreenTop = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:180
GetScreenBottom = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:190
hooks = <table> {
}
bottomFrames = <table> {
}
RegisterBottom = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:217
WorldMapFrame_Hide = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:156
}
screenHeight = 768
topOffset = 768
bottomOffset = 0
frames = <table> {
1 = "PlayerFrame"
2 = "TargetFrame"
3 = "MinimapCluster"
4 = "PartyMemberFrame1"
5 = "TicketStatusFrame"
6 = "WorldStateAlwaysUpFrame"
7 = "MainMenuBar"
8 = "MultiBarRight"
9 = "CT_PlayerFrame_Drag"
10 = "CT_TargetFrame_Drag"
11 = "Gypsy_PlayerFrameCapsule"
12 = "Gypsy_TargetFrameCapsule"
13 = "ConsolidatedBuffs"
14 = "BuffFrame"
15 = "DEFAULT_CHAT_FRAME"
16 = "ChatFrame2"
17 = "GroupLootFrame1"
18 = "TutorialFrameParent"
19 = "FramerateLabel"
20 = "DurabilityFrame"
21 = "CastingBarFrame"
22 = "OrderHallCommandBar"
23 = "MicroButtonAndBagsBar"
}
screenHeight = 768
(for generator) = <function> defined =[C]:-1
(for state) = <table> {
1 = "PlayerFrame"
2 = "TargetFrame"
3 = "MinimapCluster"
4 = "PartyMemberFrame1"
5 = "TicketStatusFrame"
6 = "WorldStateAlwaysUpFrame"
7 = "MainMenuBar"
8 = "MultiBarRight"
9 = "CT_PlayerFrame_Drag"
10 = "CT_TargetFrame_Drag"
11 = "Gypsy_PlayerFrameCapsule"
12 = "Gypsy_TargetFrameCapsule"
13 = "ConsolidatedBuffs"
14 = "BuffFrame"
15 = "DEFAULT_CHAT_FRAME"
16 = "ChatFrame2"
17 = "GroupLootFrame1"
18 = "TutorialFrameParent"
19 = "FramerateLabel"
20 = "DurabilityFrame"
21 = "CastingBarFrame"
22 = "OrderHallCommandBar"
23 = "MicroButtonAndBagsBar"
}
(for control) = 22
Hola quisiera saber si la barra de vida se puede mover y si se puede me pueden decir como porfavor :(
BugSack is crazy about this add-on, please update
106x ...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0-90061.lua:399: attempt to index local 'frameData' (a nil value)
...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0-90061.lua:399: in function `Refresh'
...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0-90061.lua:132: in function <...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:130>
Locals:
self = <table> {
Unregister = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:234
topFrames = <table> {
}
ProcessQueue = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:290
PLAYER_ENTERING_WORLD = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:152
Refresh = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:315
FCF_UpdateDockPosition = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:164
TicketStatusFrame_OnEvent = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:160
PLAYER_REGEN_DISABLED = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:307
topAdjust = true
PLAYER_REGEN_ENABLED = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:302
PLAYER_CONTROL_GAINED = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:298
EnableTopAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:255
frame = <unnamed> {
}
IsTopAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:251
IsBottomAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:269
RegisterTop = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:200
DisableTopAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:262
UIParent_ManageFramePositions = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:172
PlayerFrame_SequenceFinished = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:176
FCF_UpdateCombatLogPosition = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:168
EnableBottomAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:273
DisableBottomAdjusting = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:280
bottomAdjust = true
GetScreenTop = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:180
GetScreenBottom = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:190
hooks = <table> {
}
bottomFrames = <table> {
}
RegisterBottom = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:217
WorldMapFrame_Hide = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:156
}
screenHeight = 768
topOffset = 768
bottomOffset = 0
frames = <table> {
1 = "PlayerFrame"
2 = "TargetFrame"
3 = "MinimapCluster"
4 = "PartyMemberFrame1"
5 = "TicketStatusFrame"
6 = "WorldStateAlwaysUpFrame"
7 = "MainMenuBar"
8 = "MultiBarRight"
9 = "CT_PlayerFrame_Drag"
10 = "CT_TargetFrame_Drag"
11 = "Gypsy_PlayerFrameCapsule"
12 = "Gypsy_TargetFrameCapsule"
13 = "ConsolidatedBuffs"
14 = "BuffFrame"
15 = "DEFAULT_CHAT_FRAME"
16 = "ChatFrame2"
17 = "GroupLootFrame1"
18 = "TutorialFrameParent"
19 = "FramerateLabel"
20 = "DurabilityFrame"
21 = "CastingBarFrame"
22 = "OrderHallCommandBar"
23 = "MicroButtonAndBagsBar"
}
screenHeight = 768
(for generator) = <function> defined =[C]:-1
(for state) = <table> {
1 = "PlayerFrame"
2 = "TargetFrame"
3 = "MinimapCluster"
4 = "PartyMemberFrame1"
5 = "TicketStatusFrame"
6 = "WorldStateAlwaysUpFrame"
7 = "MainMenuBar"
8 = "MultiBarRight"
9 = "CT_PlayerFrame_Drag"
10 = "CT_TargetFrame_Drag"
11 = "Gypsy_PlayerFrameCapsule"
12 = "Gypsy_TargetFrameCapsule"
13 = "ConsolidatedBuffs"
14 = "BuffFrame"
15 = "DEFAULT_CHAT_FRAME"
16 = "ChatFrame2"
17 = "GroupLootFrame1"
18 = "TutorialFrameParent"
19 = "FramerateLabel"
20 = "DurabilityFrame"
21 = "CastingBarFrame"
22 = "OrderHallCommandBar"
23 = "MicroButtonAndBagsBar"
}
(for control) = 22
In reply to Divrog:
I'm getting this error, i tried replacing the lib, but that didn't work, so help.
\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0-90057.lua:130: attempt to call method 'Refresh' (a nil value)
...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0-90057.lua:130: in function <...ns\Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:128>
Locals:
this = <unnamed> {
0 = <userdata>
Schedule = <function> defined @Broker_XPBar\Libs\LibJostle-3.0\LibJostle-3.0.lua:136
}
elapsed = 1.8210000991821
(*temporary) = nil
(*temporary) = <table> {
hooks = <table> {
}
bottomAdjust = true
topFrames = <table> {
}
bottomFrames = <table> {
}
frame = <unnamed> {
}
topAdjust = true
}
(*temporary) = "attempt to call method 'Refresh' (a nil value)"
nextTime = 0
Jostle = <table> {
hooks = <table> {
}
bottomAdjust = true
topFrames = <table> {
}
bottomFrames = <table> {
}
frame = <unnamed> {
}
topAdjust = true
}
I've been using this addon for ages now, and so many thanks @JanetSchmanet for providing an updated release.
What I wanted to ask, if anyone has any idea, is if there is a way to put the Heart of Azeroth XP up in the Broker bar now that I've hit 120. I don't know if this is available and I simply am unable to locate how to do so, or if it would need to be added. If it's the latter, I was thinking it might be possible with the Custom Text feature, but I was unable to figure out how that would be written. The only alternative I've found is to actually enable the separate bar for it in Dominos, but I use this addon specifically because I don't like those and if there is any way to simply have the percentage in my Broker bar, that would be vastly preferable.
If anyone has any ideas, they would be greatly appreciated. Or if this simply cannot be done, knowing that would be useful as well. Thanks!