DHUD is a highly configurable and customizable HUD addon in the spirit of DHUD, MetaHUD, and others designed to keep your focus in the center of the screen where your character is.
What it is
Player and target health and mana bars, casting bars, pet health, and mana bars, druid mana bar in forms, bars with alternative power, spell circles with short player auras, target self auras and cooldowns, extensive target info, and much more.
Short feature list
- Health Bars are able to display shields, heal absorption and incoming heal effects.
- Class-specific tracking such as combo point counters, druid mana trackers, Eclipse bar, Holy Power monitoring, warlock alternative resources tracking, and more
- Lots of DogTag-supported strings for extreme customizability (strings are parsed only once so it won't take much CPU time)
- Alpha settings for in combat, target selected, etc.
- Fully customizable bars and counters capable of tracking buff/debuff applications on any unit, spell/ability cooldowns, and the health/mana of any unit you specify.
- Highly configurable (can totally re-arrange all bars, change text display, etc.)
- WoW Vanilla Classic Servers are supported by the latest version.
Slash commands
- /dhud - opens the configuration UI to tweak any setting
- /dhud settings <settingName> = <settingValue> - to change setting using command line
Recent changes
- Added support for WoW Vanilla Classic Servers.
- Addon code has been rewritten and uses OOP design. Cpu and memory consumption is reduced
- Code is documented and easily readable.
- Added new features:
- Health bars are now able to display shields, incoming heal and absorbed heal.
- Numbers are now truncated if enabled in settings
- Cooldowns can be shown like it's done with auras
- Auras whitelists, blacklists, and priority lists
- DHUD Settings addon is also rewritten to support new code
- And more
Support
If you want to support the addon development tell about it to your friends, the more users will use it - the better. I will update it more regularly as it becomes easier for me to maintain addon after full rewrite.
Frequently Asked Questions
- Q: AddOn DHUD attempted to call a protected function (CompactRaidFrame...) during combat lockdown.
- A: DHUD addon doesn't call any protected functions. Blizzard code can taint itself even without any addons loaded. Good article on this topic: http://us.battle.net/wow/en/forum/topic/6933303515
- Q: AddOn Displays enemy unit names as "????????" on Russian client
- A: You need to put Russian version of fonts "FRIZQT__.TTF"/"MORPHEUS.TTF"/"SKURRI.TTF" to "World of Warcraft\_retail_\Fonts". You can download them from my OneDrive backup: https://1drv.ms/u/s!Aj0eGMJS2HNckaYaekibBLpzii05pA or find them yourself.
In reply to tommosaurusrex:
Added basic support in release 78, empowered spells cast colors are not customizable yet.
You can also add suggestions on how to display it visually.
In reply to MADCATXXX:
Essence can be displayed just like Combo Points or Runes, empowered spells can be added to the cast by by just adding Lines where each of the empowering happens:
In reply to tommosaurusrex:
In release 78 there are already lines there, but they are white (will be customizable).
I think extending them outside of bounds is not good as it will affect another bar which can also have this empower points.
Currently I use full texture of bar on top and take 0.5% of it to display line, this looks a bit weird in some positions and is also not rotated. I can research possibility of using plain rectangles with rotation, but it will take time to do so (also not sure about rotation as usual castbar is not rotated and uses vertical lines for cut off, there is no API to cut off at rotated position).
I also think that cast bar color should change at different stages. Maybe even flashing filled segment (not sure about it).
There is a problem in WOTLK, I'm playing druid, when changing form while in combat the action bar doesn't change. When disabling the addon it works fine. when not in combat it works fine with the addon enabled.
In reply to aleksanton:
Ok, I'll check it today or on weekends
In reply to MADCATXXX:
Should be fixed in release 78, please retest
Also vehicles should now be tracked in WotLK
Every time I leave stealth it shows me this stealth recheck message. It's not the worst thing in the world, but if there's a way to remove it, that'd be nice. New to the Dragonflight patch.
Delayed stealth recheck
DHUD: Stealth removed by self without other combat data
In reply to Calisa9:
This is mostly for PVP for my self. Wrote it 2 years ago when stealth broken too many times without receiving damage and I've added some code to track it. I'll Disable it by default and add separate settings for it if someone is interested.
In reply to MADCATXXX:
<3 <3 <3 <3 <3
In reply to Calisa9:
Uploaded version 76, should be disabled by default.
In reply to MADCATXXX:
You're the man, Madcatxxx! DHUD for me is functioning at 100% perfection now.
I'm not sure what exactly is happening, but having DHUD enabled is causing me severe FPS drop/stuttering in combat. Disabling the addon fixes it completely. I have checked with BugGrabber/Sack and there are no obvious errors being thrown, so I am honestly at a lost as to why it is happening. It seems to be 'input lag' when I press an action button, and being the type of player who is spamming a button often in combat even on CD, this is obviously making for a less than desirable gameplay session. Maybe there is some kind of interactoin with Masque/OmniCC?
In reply to Hothgor:
Can I ask you about your CPU model. Can I reproduce it my self on target DUMMY?
You can Also collect CPU usage data if you are interested, this will help me Compare numbers, addon for tracking it https://www.curseforge.com/wow/addons/addon-usage . Need to enable CPU profiling, then start Combat with it. After Combat ends it'll show what functions took the most amout of time. Please remember to Disable CPU profiling after data is collected.
If you had CPU profiling already enabled, then Disable it as it affect performance by a large amount.
In reply to MADCATXXX:
Actually the addon above doesn't provide times by functions, need to download another addon "!Stragglers", it wasn't updated for DragonFlight, but can easily be updated to not cause any startup errors (replace CreateFrame calls to use "BACKGROUND" layer, replace CreateFontString to use "BACKGROUND" layer and update their font via fontString:SetFont("Fonts\\FRIZQT__.TTF", 11)).
Fixed version available at:
https://1drv.ms/u/s!Aj0eGMJS2HNcmbVUekibBLpzii05pA
I've following data from this addon on Discipline Priest vs TargetDummy (Smashing smite) on Core I7 6700K over period of 10 seconds:
1) DHUDCooldownsTracker 99 ms
2) DHUDGuiCastBarAnimationHelper 39 ms
3) DHUDDataTrackerHelper 34 ms
4) DHUDColorizeTools 32 ms
5) MADCATEventListenerCollection 30 ms
6) DHUDTimersTracker 23 ms
7) DHUDCastBarManager 21 ms
8) DHUDSideInfoManager 20 ms
9) MADCATEventDispatcher 18 ms
10) DHUDTextTools 10 ms
11) Other under 10 ms, total 44 ms
So over 10 seconds CPU was used totally 370 ms (part of this usage is due to addon inserting it's own profile points at start and end of each function). Please note that WoW rendering preparation are single threaded and any UI LUA code may delay frame rendering until completed (e.g. single chat command "/run local t = time() + 10 while time() < t do end" will freeze your screen for 10 seconds). For my profiling session this addon accounted for 3.7% of all CPU core usage.
Also need to know your in-game class and spec, as any frequent button press cause "Cooldown_Update" event to be fired, and addon iterates over all possible spells in your spellbook to check their cooldowns. As you see from my profiling "DHUDCooldownsTracker" already accounts for 25% of all DHUD addon usage, and this number can increase if spell book contains large amount of spells.
I can probably iterate over spell book once and after that try to update via spell ids but this requires a bit of code refactoring and not sure if it would help.
https://wowpedia.fandom.com/wiki/API_GetSpellCooldown
Please also check if removing SpellCooldown Tracker in Settings helps resolving this problem for you (Open DHUD Settings, go to Layout, uncheck option in your layout cooldown position option "Player: Cooldowns")
In reply to MADCATXXX:
First suggestion, you can see its using quite a bit of CPU resources for such a small addon.
In reply to Hothgor:
Not so small addon, if you check it, currently code size is at 750 KB (Roughly 25 000 lines of code). This is not including DHUD Settings addon.
I've optimized cooldowns in version 76, please check if it helps you.
As for resources - animations and frequent updates will always display as high CPU usage in WoW. Currently addon updates a lot of short aura texts, a lot of long aura texts, cast bar, etc... Comparing it to static addons that don't change much data or e.g. rely on displaying cooldowns timers by other addons is not correct.
In reply to MADCATXXX:
That seems to have done the trick. Thank you SO MUCH!!!
Uploaded release 75, settings are working, but their visual presentation is not correct for now (due to big amount of changes to xml files in dragonflight).
This should also fix classic and WotLK for rogues.
WoW Wrath of the Lich King Classic
Message: ...e\AddOns\DHUD\datatrackers/info/DeStealthTracker.lua:248: attempt to call global 'GetActiveSpecGroup' (a nil value)
Time: Sun Oct 30 19:15:56 2022
Count: 1
Stack: ...e\AddOns\DHUD\datatrackers/info/DeStealthTracker.lua:248: attempt to call global 'GetActiveSpecGroup' (a nil value)
[string "@Interface\AddOns\DHUD\datatrackers/info/DeStealthTracker.lua"]:248: in function `recheckStealthSpellId'
[string "@Interface\AddOns\DHUD\datatrackers/info/DeStealthTracker.lua"]:275: in function `updateData'
[string "@Interface\AddOns\DHUD\datatrackers/DataTrackerBase.lua"]:129: in function `changeTrackingState'
[string "@Interface\AddOns\DHUD\datatrackers/DataTrackers.lua"]:333: in function `fillClassSpecific'
[string "@Interface\AddOns\DHUD\datatrackers/DataTrackers.lua"]:348: in function `createTrackers'
[string "@Interface\AddOns\DHUD\DHUD_Main.lua"]:155: in function `main'
[string "@Interface\AddOns\DHUD\DHUD_Main.lua"]:173: in function `func'
[string "@Interface\AddOns\DHUD\DHUD_WoWVanilla.lua"]:80: in function <Interface\AddOns\DHUD\DHUD_WoWVanilla.lua:80>
Locals: self = <table> {
eventRegenerationChanged = <table> {
}
eventExistanceChanged = <table> {
}
eventDataChanged = <table> {
}
listeners = <table> {
}
eventUnitChanged = <table> {
}
combatEventsFrame = <table> {
}
eventsFrame = <unnamed> {
}
isTracking = true
}
(*temporary) = <function> defined =[C]:-1
(*temporary) = 2
(*temporary) = 2
(*temporary) = nil
(*temporary) = "attempt to call global 'GetActiveSpecGroup' (a nil value)"
trackingHelper = <table> {
eventUpdateInFrequent = <table> {
}
eventCombat = <table> {
}
eventSpecialization = <table> {
}
eventsFrame = <unnamed> {
}
eventAttack = <table> {
}
eventTarget = <table> {
}
eventUpdateFrequent = <table> {
}
timerMs = 35493.557000
eventDeath = <table> {
}
isTargetOfTargetAvailable = false
eventPetBattle = <table> {
}
playerSpecialization = 1
eventEnteringWorld = <table> {
}
eventTargetTarget = <table> {
}
isTargetAvailable = false
eventModifierKeysState = <table> {
}
listeners = <table> {
}
eventVehicleState = <table> {
}
eventUpdateSemiFrequent = <table> {
}
playerClass = "ROGUE"
eventUpdate = <table> {
}
eventPet = <table> {
}
eventResting = <table> {
}
}
In reply to Tollik80:
will be fixed in release 75