Skada Damage Meter
Skada is a modular damage meter with various viewing modes, segmented fights and customizable windows. It aims to be highly efficient with memory and CPU.
"Skada" is Swedish for "Damage".
Note: I took a tiny break from WoW (a decade), but recently started playing SoD. Be aware that this addon may not quite work yet.
Usage
When you first start using Skada, there will be a window created by default. This window can be extensively customized in Skada's configuration panel; click the little cog icon to access a menu, and then click Configure. Depending on your user interface, there may also be a minimap button allowing quick access to this menu.
Skada supports multiple windows. To create a new window, click Windows in the addon's configuration panel. There are three built-in types of windows - Bar, Inline, and Data text. Bar is the classic damage meter window, and is very customizable. Inline shows the meter in a horizontal line, which can be useful for integration in custom user interfaces. Data text shows just one item at a time, and can also be displayed by any LDB display addon, such as Titan Panel, ChocolateBar, or ElvUI.
In the normal Bar window, you can left click on specific items for more detailed information, and right click for less details. At the very "top" is the list of all saved fight segments. Some data modes have several detailed information views. In this case you choose alternate views by holding certain keys pressed while clicking. For example, in Damage mode, you can Shift-click a player to see what enemies the player caused damage to. Tooltips will display how to reach the different views.
You can also use window buttons for selecting fight segment and mode directly.
Scrolling in Skada is done with the mousewheel.
Plugins
Skada is easy to extend, and there were once many extra plugin addons out there that add functionality. However, there are unlikely to be any maintained ones currently.
There is a page with API information here.
Reporting issues
For now use comments.
In reply to zarnivoop: it's better, but in some configurations it's still happening. Can we have a column spacing option or maybe some kind of syntax editor with spacers for the infos shown in the bars please?
Btw thank you for the hard work 🙏
The "Hide when solo" option hasn't worked for a long time.
I was hoping the latest update would fix it, but no.
I always have to go into Config, untick the box, then tick it again to make it go away... until next time.
heyy !! the numbers, percent, dps anda dmg is overlaping, how can i fix it? TY
Getting below error, I was inspecting the data after a myhtic dungeon run. It seem there is a "GTFO alerts" data in skada but it was empty, I guess it couldn't be updated. I could disable it if there is an option for it.
7x Skada/Skada.lua:2502: attempt to index local 'datasetItem' (a string value)
[Skada/Skada.lua]:2502: in function 'FormatValueText'
[GTFO/GTFO_Skada.lua]:95: in function 'Update'
[Skada/Skada.lua]:2548: in function 'AddSubviewToTooltip'
[Skada/Skada.lua]:2601: in function 'ShowTooltip'
[Skada/BarDisplay.lua]:178: in function <Skada/BarDisplay.lua:174>
Locals:
self = <table> {
defaults = <table> {
}
windowdefaults = <table> {
}
db = <table> {
}
total = <table> {
}
classcolors = <table> {
}
baseName = "Skada"
versions = <table> {
}
char = <table> {
}
defaultModuleState = true
last = <table> {
}
options = <table> {
}
orderedModules = <table> {
}
displays = <table> {
}
resetoptions = <table> {
}
modules = <table> {
}
getsetlabel_fs = FontString {
}
enabledState = true
cleuFrame = Frame {
}
defaultModuleLibraries = <table> {
}
name = "Skada"
}
datasetItem = "5.78M"
value1 = true
bool1 = 3
value2 = true
bool2 = nil
value3 = nil
bool3 = nil
(*temporary) = "attempt to index local 'datasetItem' (a string value)"
In reply to user_dsz474rbfji4nhru: This should be fixed in 1.10.1.
when i switch the direction from the bars (from right to left) the complete bar text is in the same place and not readable. Name, dps, Dmg. etc. all at the left orner of the bar. When i enter the options menu and make some changes (doesnt matter which one) thx text is in right position. but when i start again with damge the complete text again on the left side of the bar.
In reply to Iari: Right-to-left orientation is fixed in 1.10.1.
Bugged. At some point it will lose the ability to show the damage and dps you and others do. That will no longer show or be an option. Instead, it will list everything else besides your damage/dps to be viewed.
However, logging out and back in will eventually reset the addon and allow you to select and see it again.
Gettiong error in-game. I have my meters set for DPS and threat. I log in and they are changed and I can't change it back using the configure options. I end up doing a couple UI resets to get it to work.
2x Skada/modules/Damage.lua:21: attempt to compare number with nil
[Skada/modules/Damage.lua]:21: in function <Skada/modules/Damage.lua:20>
[Skada/modules/Damage.lua]:608: in function 'FormatSetSummary'
[Skada/Skada.lua]:2108: in function 'UpdateDisplay'
[Skada/Skada.lua]:460: in function 'DisplayMode'
[Skada/Skada.lua]:1663: in function 'RestoreView'
[Skada/Skada.lua]:2278: in function 'AddMode'
[Skada/modules/Damage.lua]:593: in function <Skada/modules/Damage.lua:592>
[C]: ?
Skada's reset feature only seems to delete current encounter and the overall, but it doesn't remove the recent segments (the last 30 boss encounters for me).
Also, if the numbers of damage done column are over a hundred million, it cuts in on the dps column more and more.
In reply to DarkLimpan: The reset is fixed. The columns are allegedly not entirely fixed yet.
@zarnivoop Feature Request: Would it be possible, to show the Spec-Icon instead of the Class-Icon?
I would post a pic but SKada just got deleted due to the fact I updated and it will no longer show player data.
THere is no option to show ANYThing the player does like DPS/HPS.
GETTING FOLLOWING LUA ERROR AND SKADA WONT START
Message: Interface/AddOns/Skada/BarDisplay.lua:661: attempt to index global 'AceGUIWidgetLSMlists' (a nil value)
Time: Mon Feb 24 22:55:22 2025
Count: 1
Stack: Interface/AddOns/Skada/BarDisplay.lua:661: attempt to index global 'AceGUIWidgetLSMlists' (a nil value)
[string "@Interface/AddOns/Blizzard_ExpansionLandingPage/Blizzard_ExpansionLandingPage.lua"]:82: in function `RefreshExpansionOverlay'
[string "@Interface/AddOns/Blizzard_ExpansionLandingPage/Blizzard_ExpansionLandingPage.lua"]:37: in function <...pansionLandingPage/Blizzard_ExpansionLandingPage.lua:35>
Locals: self = ExpansionLandingPage {
overlay = <table> {
}
Overlay = Frame {
}
}
newestOverlay = <table> {
}
In reply to bigit2: This should be fixed now.
Still experiencing issues even with the last 4 updates:
11x Skada/modules/Debuffs.lua:418: bad argument #1 to 'ipairs' (table expected, got nil)
[string "=[C]"]: ?
[string "@Skada/modules/Debuffs.lua"]:418: in function `AddSetAttributes'
[string "@Skada/Skada.lua"]:1034: in function <Skada/Skada.lua:1032>
[string "@Skada/Skada.lua"]:2265: in function `AddMode'
[string "@Skada/modules/Debuffs.lua"]:379: in function <Skada/modules/Debuffs.lua:362>
[string "=[C]"]: ?
[string "@ElvUI_Libraries/Core/Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:66: in function <...UI_Libraries/Core/Ace3/AceAddon-3.0/AceAddon-3.0.lua:61>
[string "@ElvUI_Libraries/Core/Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:523: in function `EnableAddon'
[string "@ElvUI_Libraries/Core/Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:536: in function `EnableAddon'
[string "@ElvUI_Libraries/Core/Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:626: in function <...UI_Libraries/Core/Ace3/AceAddon-3.0/AceAddon-3.0.lua:611>
[string "=[C]"]: ?
[string "=[C]"]: in function `LoadAddOn'
[string "@Blizzard_UIParent/Mainline/UIParent.lua"]:420: in function `UIParentLoadAddOn'
[string "@Blizzard_UIParent/Mainline/UIParent.lua"]:628: in function `MajorFactions_LoadUI'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:96: in function `SetUpMajorFactionList'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:89: in function `RefreshMajorFactionList'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:84: in function `RefreshOverlay'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:76: in function <...pansionLandingPage/Blizzard_WarWithinLandingPage.lua:72>
[string "=[C]"]: in function `CreateFrame'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:48: in function `CreateOverlay'
[string "@Blizzard_ExpansionLandingPage/Blizzard_ExpansionLandingPage.lua"]:82: in function `RefreshExpansionOverlay'
[string "@Blizzard_ExpansionLandingPage/Blizzard_ExpansionLandingPage.lua"]:37: in function <...pansionLandingPage/Blizzard_ExpansionLandingPage.lua:35>
Locals:
(*temporary) = nil
(*temporary) = "table expected, got nil"
next issue:
99x Skada/Skada.lua:1036: bad argument #1 to 'ipairs' (table expected, got nil)
[string "=[C]"]: ?
[string "@Skada/Skada.lua"]:1036: in function <Skada/Skada.lua:1032>
[string "@Skada/Skada.lua"]:2265: in function `AddMode'
[string "@Skada/modules/Damage.lua"]:583: in function <Skada/modules/Damage.lua:548>
[string "=[C]"]: ?
[string "@ElvUI_Libraries/Core/Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:66: in function <...UI_Libraries/Core/Ace3/AceAddon-3.0/AceAddon-3.0.lua:61>
[string "@ElvUI_Libraries/Core/Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:523: in function `EnableAddon'
[string "@ElvUI_Libraries/Core/Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:536: in function `EnableAddon'
[string "@ElvUI_Libraries/Core/Ace3/AceAddon-3.0-13/AceAddon-3.0.lua"]:626: in function <...UI_Libraries/Core/Ace3/AceAddon-3.0/AceAddon-3.0.lua:611>
[string "=[C]"]: ?
[string "=[C]"]: in function `LoadAddOn'
[string "@Blizzard_UIParent/Mainline/UIParent.lua"]:420: in function `UIParentLoadAddOn'
[string "@Blizzard_UIParent/Mainline/UIParent.lua"]:628: in function `MajorFactions_LoadUI'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:96: in function `SetUpMajorFactionList'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:89: in function `RefreshMajorFactionList'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:84: in function `RefreshOverlay'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:76: in function <...pansionLandingPage/Blizzard_WarWithinLandingPage.lua:72>
[string "=[C]"]: in function `CreateFrame'
[string "@Blizzard_ExpansionLandingPage/Blizzard_WarWithinLandingPage.lua"]:48: in function `CreateOverlay'
[string "@Blizzard_ExpansionLandingPage/Blizzard_ExpansionLandingPage.lua"]:82: in function `RefreshExpansionOverlay'
[string "@Blizzard_ExpansionLandingPage/Blizzard_ExpansionLandingPage.lua"]:37: in function <...pansionLandingPage/Blizzard_ExpansionLandingPage.lua:35>
Locals:
(*temporary) = nil
(*temporary) = "table expected, got nil"
5x Skada/Skada.lua:1452: attempt to index field 'name' (a nil value)
[string "@Skada/Skada.lua"]:1452: in function `EndSegment'
[string "@Skada/Skada.lua"]:1403: in function `?'
[string "@ElvUI_Libraries/Core/Ace3/AceTimer-3.0-17/AceTimer-3.0.lua"]:55: in function <...UI_Libraries/Core/Ace3/AceTimer-3.0/AceTimer-3.0.lua:50>
Locals:
self = <table> {
defaults = <table> {
}
modules = <table> {
}
windowdefaults = <table> {
}
db = <table> {
}
total = <table> {
}
classcolors = <table> {
}
baseName = "Skada"
versions = <table> {
}
char = <table> {
}
defaultModuleState = true
last = <table> {
}
orderedModules = <table> {
}
displays = <table> {
}
current = <table> {
}
getsetlabel_fs = FontString {
}
options = <table> {
}
resetoptions = <table> {
}
cleuFrame = Frame {
}
enabledState = true
defaultModuleLibraries = <table> {
}
name = "Skada"
}
setname = "The Silken Court"
max = 0
(for state) = <table> {
1 = <table> {
}
2 = <table> {
}
3 = <table> {
}
4 = <table> {
}
5 = <table> {
}
6 = <table> {
}
7 = <table> {
}
8 = <table> {
}
9 = <table> {
}
10 = <table> {
}
}
(for control) = 1
_ = 1
set = <table> {
healingabsorbed = 0
auras = <table> {
}
ccbreaks = 0
overhealing = 0
interrupts = 0
damage = 0
deaths = 0
mobs = <table> {
}
shielding = 0
healing = 0
ffdamagedone = 0
mobtaken = 0
damagetaken = 0
power = <table> {
}
mobhdone = 0
dispells = 0
mobdone = 0
}
(*temporary) = nil
(*temporary) = nil
(*temporary) = <table> {
healingabsorbed = 0
auras = <table> {
}
ccbreaks = 0
overhealing = 0
interrupts = 0
damage = 0
deaths = 0
mobs = <table> {
}
shielding = 0
healing = 0
ffdamagedone = 0
mobtaken = 0
damagetaken = 0
power = <table> {
}
mobhdone = 0
dispells = 0
mobdone = 0
}
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to index field 'name' (a nil value)"
modes = <table> {
}
windows = <table> {
1 = <table> {
}
2 = <table> {
}
3 = <table> {
}
4 = <table> {
}
5 = <table> {
}
}
update_timer = <table> {
argsCount = 0
object = <table> {
}
ends = 1508.943000
looping = true
func = "UpdateDisplay"
delay = 0.250000
}
tick_timer = <table> {
argsCount = 0
object = <table> {
}
ends = 1508.943000
looping = true
func = "Tick"
delay = 1
}
14x Skada/modules/Dispels.lua:11: attempt to perform arithmetic on field 'dispells' (a nil value)
[string "@Skada/modules/Dispels.lua"]:11: in function <Skada/modules/Dispels.lua:7>
[string "@Skada/modules/Dispels.lua"]:42: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
Skipped (In Encounter)
17x Skada/modules/Dispels.lua:22: attempt to perform arithmetic on field 'interrupts' (a nil value)
[string "@Skada/modules/Dispels.lua"]:22: in function <Skada/modules/Dispels.lua:18>
[string "@Skada/modules/Dispels.lua"]:59: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
set = <table> {
players = <table> {
}
name = "Current fight"
mobname = "Cursedheart Invader"
_playeridx = <table> {
}
time = 0
last_action = 1740231332
starttime = 1740231332
}
interrupt = <table> {
extraspellid = 426283
extraspellname = "Arcing Void"
spellname = "Wind Shear"
playername = "Coco-Illidan"
spellid = 57994
playerid = "Player-1624-0B72D635"
}
player = <table> {
role = "DAMAGER"
name = "Coco"
last = 1740231336
id = "Player-1624-0B72D635"
class = "SHAMAN"
time = 0
first = 1740231332
}
(*temporary) = nil
(*temporary) = <table> {
players = <table> {
}
name = "Current fight"
mobname = "Cursedheart Invader"
_playeridx = <table> {
}
time = 0
last_action = 1740231332
starttime = 1740231332
}
(*temporary) = "Player-1624-0B72D635"
(*temporary) = "Coco-Illidan"
(*temporary) = "attempt to perform arithmetic on field 'interrupts' (a nil value)"
Skada = <table> {
defaults = <table> {
}
modules = <table> {
}
windowdefaults = <table> {
}
db = <table> {
}
total = <table> {
}
classcolors = <table> {
}
baseName = "Skada"
versions = <table> {
}
char = <table> {
}
defaultModuleState = true
last = <table> {
}
orderedModules = <table> {
}
displays = <table> {
}
current = <table> {
}
getsetlabel_fs = FontString {
}
options = <table> {
}
resetoptions = <table> {
}
cleuFrame = Frame {
}
enabledState = true
defaultModuleLibraries = <table> {
}
name = "Skada"
}
28698x Skada/modules/Damage.lua:44: attempt to perform arithmetic on field 'damage' (a nil value)
[string "@Skada/modules/Damage.lua"]:44: in function <Skada/modules/Damage.lua:32>
[string "@Skada/modules/Damage.lua"]:135: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
Skipped (In Encounter)
2141x Skada/modules/DamageTaken.lua:15: attempt to perform arithmetic on field 'damagetaken' (a nil value)
[string "@Skada/modules/DamageTaken.lua"]:15: in function <Skada/modules/DamageTaken.lua:10>
[string "@Skada/modules/DamageTaken.lua"]:85: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
Skipped (In Encounter)
4853x Skada/modules/Power.lua:19: attempt to index field 'power' (a nil value)
[string "@Skada/modules/Power.lua"]:19: in function <Skada/modules/Power.lua:14>
[string "@Skada/modules/Power.lua"]:58: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
Skipped (In Encounter)
23748x Skada/modules/Healing.lua:20: attempt to perform arithmetic on field 'healing' (a nil value)
[string "@Skada/modules/Healing.lua"]:20: in function <Skada/modules/Healing.lua:10>
[string "@Skada/modules/Healing.lua"]:111: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
Skipped (In Encounter)
101x Skada/modules/Enemies.lua:75: attempt to perform arithmetic on field 'mobhdone' (a nil value)
[string "@Skada/modules/Enemies.lua"]:75: in function <Skada/modules/Enemies.lua:72>
[string "@Skada/modules/Enemies.lua"]:94: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
set = <table> {
starttime = 1740074920
gotboss = true
_playeridx = <table> {
}
time = 72
mobname = "The Silken Court"
name = "Current fight"
players = <table> {
}
last_action = 1740074920
endtime = 1740074992
}
dmg = <table> {
dstName = "Stepmónk-Kazzak"
srcName = "Stepmónk-Kazzak"
}
spellid = 119611
spellname = "Renewing Mist"
_ = 8
amount = 27496
overheal = 27496
absorb = 0
crit = false
healing = 0
(*temporary) = nil
(*temporary) = 0
(*temporary) = 0
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to perform arithmetic on field 'mobhdone' (a nil value)"
12436x Skada/modules/Debuffs.lua:28: attempt to index field 'auras' (a nil value)
[string "@Skada/modules/Debuffs.lua"]:28: in function <Skada/modules/Debuffs.lua:19>
[string "@Skada/modules/Debuffs.lua"]:79: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
set = <table> {
players = <table> {
}
name = "Current fight"
_playeridx = <table> {
}
time = 0
last_action = 1740074338
starttime = 1740074338
}
aura = <table> {
spellschool = 1
playername = "Ant"
auratype = "BUFF"
spellname = "Find Fish"
spellid = 43308
playerid = "Player-3682-0AF8ECEF"
}
player = <table> {
role = "DAMAGER"
name = "Ant"
last = 1740074339
id = "Player-3682-0AF8ECEF"
class = "MAGE"
time = 0
first = 1740074339
}
(*temporary) = nil
(*temporary) = "Find Fish"
(*temporary) = "Player-3682-0AF8ECEF"
(*temporary) = "Ant"
(*temporary) = "attempt to index field 'auras' (a nil value)"
Skada = <table> {
current = <table> {
}
displays = <table> {
}
char = <table> {
}
windowdefaults = <table> {
}
getsetlabel_fs = FontString {
}
baseName = "Skada"
modules = <table> {
}
versions = <table> {
}
defaultModuleState = true
options = <table> {
}
defaults = <table> {
}
resetoptions = <table> {
}
db = <table> {
}
cleuFrame = Frame {
}
enabledState = true
total = <table> {
}
orderedModules = <table> {
}
defaultModuleLibraries = <table> {
}
name = "Skada"
classcolors = <table> {
}
}
11383x Skada/modules/Debuffs.lua:48: attempt to index field 'auras' (a nil value)
[string "@Skada/modules/Debuffs.lua"]:48: in function <Skada/modules/Debuffs.lua:39>
[string "@Skada/modules/Debuffs.lua"]:93: in function `func'
[string "@Skada/Skada.lua"]:1896: in function <Skada/Skada.lua:1789>
[string "@Skada/Skada.lua"]:1945: in function <Skada/Skada.lua:1944>
Locals:
Skipped (In Encounter)
In reply to Antr: This now solved but the formating is all weird.
Percent - massive break - DPS - Damage all mushed up together. Would prefer the previous formatting or the option to customize the formatting.
I`m very sorry, but very much errors, related GetSpellInfo in different modules. At least in Death.lua e.t.c. To use addon with THIS conditions impossible.
Switched to Details. :(
In reply to BloodyFess: Same here - actually completely broken
In reply to Finnegan: The new version fixed all errors. Thanks a lot!