converted abilityID debug to an actual user setting

Kith [03-16-16 - 03:21]
converted abilityID debug to an actual user setting
added display toggle for auras on dead targets
removed minor effects for Repentance from alwaysIgnored (can be blocked by user now)
added ability to prominence and blacklist via abilityID
Filename
Aura.lua
AuraControl.lua
AuraData.lua
Core.lua
Defaults.lua
Locales/Local_de.lua
Locales/Local_en.lua
Locales/Local_fr.lua
Settings.lua
Srendarr.txt
diff --git a/Aura.lua b/Aura.lua
index 4ce975b..c1fb1dd 100644
--- a/Aura.lua
+++ b/Aura.lua
@@ -4,8 +4,6 @@ local LMP			= LibStub('LibMediaProvider-1.0')
 local Aura			= {}

 -- CONSTS --
-local DEBUG_ABILITYID		= Srendarr.DEBUG_ABILITYID
-
 local AURA_TYPE_TIMED		= Srendarr.AURA_TYPE_TIMED
 local AURA_TYPE_TOGGLED		= Srendarr.AURA_TYPE_TOGGLED
 local AURA_TYPE_PASSIVE		= Srendarr.AURA_TYPE_PASSIVE
@@ -51,6 +49,16 @@ local currentTime, colours


 -- ------------------------
+-- CONFIGURE ABILITY ID DISPLAY
+-- ------------------------
+local showAbilityID			= false
+
+function Srendarr:ConfigureDisplayAbilityID()
+	showAbilityID = self.db.displayAbilityID
+end
+
+
+-- ------------------------
 -- TIME FORMAT FUNCTION
 -- ------------------------
 local function FormatTime(remaining)
@@ -239,7 +247,7 @@ do ------------------------

 		auraLookup[unitTag][abilityID] = self -- add self to the aura lookup reference

-		if (DEBUG_ABILITYID) then
+		if (showAbilityID) then
 			if (self.auraStyle == AURA_STYLE_ICON) then
 				self.name:SetText(abilityID)
 			else
@@ -425,7 +433,7 @@ function Aura:Configure(settings)

 		self.timer:SetHidden(settings.timerLocation == AURA_TIMERLOC_HIDDEN)

-		if (DEBUG_ABILITYID) then -- repurpose name display for abilityID display
+		if (showAbilityID) then -- repurpose name display for abilityID display
 			self.name:SetFont(strformat('%s|13|soft-shadow-thin', LMP:Fetch('font', 'Univers 57')))
 			self.name:SetHorizontalAlignment(TEXT_ALIGN_CENTER)
 			self.name:ClearAnchors()
diff --git a/AuraControl.lua b/AuraControl.lua
index 787b30f..ccc876a 100644
--- a/AuraControl.lua
+++ b/AuraControl.lua
@@ -282,10 +282,12 @@ do ------------------------
     local GetNumBuffs      			= GetNumBuffs
     local GetUnitBuffInfo  			= GetUnitBuffInfo
     local DoesUnitExist    			= DoesUnitExist
+    local IsUnitDead				= IsUnitDead

 	local auraLookupReticle			= Srendarr.auraLookup['reticleover'] -- local ref for speed, this functions expensive
 	local targetDisplayFrame1		= false -- local refs to frames displaying target auras (if any)
 	local targetDisplayFrame2		= false -- local refs to frames displaying target auras (if any)
+	local hideOnDead				= false
 	local numAuras, auraName, start, finish, stack, icon, effectType, abilityType, abilityID

 	local function OnTargetChanged()
@@ -293,7 +295,7 @@ do ------------------------
 			aura:Release(true) -- old auras cleaned out
 		end

-		if (DoesUnitExist('reticleover')) then -- have a target, scan for auras
+		if (DoesUnitExist('reticleover') and not (hideOnDead and IsUnitDead('reticleover'))) then -- have a target, scan for auras
 			numAuras = GetNumBuffs('reticleover')

             if (numAuras > 0) then -- target has auras, scan and send to handler
@@ -318,6 +320,8 @@ do ------------------------
 		targetDisplayFrame1 = (targetBuff ~= 0) and self.displayFrames[targetBuff] or false
 		targetDisplayFrame2 = (targetDebuff ~= 0) and self.displayFrames[targetDebuff] or false

+		hideOnDead			= self.db.hideOnDeadTargets -- set whether to show auras on dead targets
+
 		if (targetDisplayFrame1 or targetDisplayFrame2) then -- event configured and needed, start tracking
 			EVENT_MANAGER:RegisterForEvent(self.name, EVENT_RETICLE_TARGET_CHANGED,	OnTargetChanged)
 		else -- not needed (not displaying any target auras)
diff --git a/AuraData.lua b/AuraData.lua
index 48d4c8c..a1b0f17 100644
--- a/AuraData.lua
+++ b/AuraData.lua
@@ -42,7 +42,6 @@ local alteredAuraIcons = { -- used to alter the default icon for selected auras
 	[35792]	= [[Srendarr/Icons/Vamp_Stage4.dds]],			-- Stage 4 Vampirism
 }

-
 local fakeAuras = { -- used to spawn fake auras to handle mismatch of information provided by the API to what user's want|need
 	[GetAbilityName(23634)] = {unitTag = 'groundaoe', duration = 18, abilityID = 200000},	-- Summon Storm Atronach
 	[GetAbilityName(23492)] = {unitTag = 'groundaoe', duration = 28, abilityID = 200001},	-- Greater Storm Atronach
@@ -59,9 +58,6 @@ local procAbilityNames = { -- using names rather than IDs to ease matching multi
 	[GetAbilityName(62549)] = true,		-- Deadly Throw
 }

-Srendarr.crystalFragments			= GetAbilityName(46324) -- special case for merging frags procs
-Srendarr.crystalFragmentsPassive	= GetAbilityName(46327) -- with the general proc system
-
 local toggledAuras = { -- there is a seperate abilityID for every rank of a skill
 	[23316] = true,			-- Volatile Familiar
 	[30664] = true,			-- Volatile Familiar
@@ -91,42 +87,18 @@ local toggledAuras = { -- there is a seperate abilityID for every rank of a skil
 	[63341] = true,			-- Stalwart Guard
 	[63346] = true,			-- Stalwart Guard
 	[63351] = true,			-- Stalwart Guard
---	[32881] = true,			-- Sea of Flames
---	[34088] = true,			-- Sea of Flames
---	[34094] = true,			-- Sea of Flames
---	[34100] = true,			-- Sea of Flames
---	[40483] = true,			-- Radiant Magelight
---	[42443] = true,			-- Radiant Magelight
---	[42449] = true,			-- Radiant Magelight
---	[42455] = true,			-- Radiant Magelight
 	[61536] = true,			-- Mystic Guard
 	[63323] = true,			-- Mystic Guard
 	[63329] = true,			-- Mystic Guard
 	[63335] = true,			-- Mystic Guard
---	[30920] = true,			-- Magelight
---	[42410] = true,			-- Magelight
---	[42414] = true,			-- Magelight
---	[42418] = true,			-- Magelight
 	[36908] = true,			-- Leeching Strikes
 	[37989] = true,			-- Leeching Strikes
 	[38002] = true,			-- Leeching Strikes
 	[38015] = true,			-- Leeching Strikes
---	[40478] = true,			-- Inner Light
---	[42422] = true,			-- Inner Light
---	[42426] = true,			-- Inner Light
---	[42430] = true,			-- Inner Light
---	[28967] = true,			-- Inferno
---	[34051] = true,			-- Inferno
---	[34056] = true,			-- Inferno
---	[34061] = true,			-- Inferno
 	[61511] = true,			-- Guard
 	[63308] = true,			-- Guard
 	[63313] = true,			-- Guard
 	[63318] = true,			-- Guard
---	[32853] = true,			-- Flames of Oblivion
---	[34066] = true,			-- Flames of Oblivion
---	[34073] = true,			-- Flames of Oblivion
---	[34080] = true,			-- Flames of Oblivion
 	[24158] = true,			-- Bound Armor
 	[30410] = true,			-- Bound Armor
 	[30414] = true,			-- Bound Armor
@@ -171,9 +143,6 @@ local filterAlwaysIgnored = {
 	[62587] = true,		-- Focused Aim (2s Refreshing Aura)
 	[42589] = true,		-- Flawless Dawnbreaker (2s aura on Weaponswap)
 	[40782] = true,		-- Acid Spray (Extra Aura)
-	[26213] = true,		-- Repentance (Minor Fortitude)
-	[26215] = true,		-- Repentance (Minor Endurance)
-	[26216] = true,		-- Repentance (Minor Intellect)
 }

 local filterAuraGroups = {
@@ -240,12 +209,16 @@ local filteredAuras = { -- used to hold the abilityIDs of filtered auras
 	['groundaoe']	= {}
 }

+
 for id in pairs(filterAlwaysIgnored) do -- populate initial ignored auras to filters
 	filteredAuras['player'][id]			= true
 	filteredAuras['reticleover'][id]	= true
 	filteredAuras['groundaoe'][id]		= true
 end	-- run once on init of addon

+Srendarr.crystalFragments			= GetAbilityName(46324) -- special case for merging frags procs
+Srendarr.crystalFragmentsPassive	= GetAbilityName(46327) -- with the general proc system
+
 -- set external references
 Srendarr.alteredAuraIcons	= alteredAuraIcons
 Srendarr.fakeAuras			= fakeAuras
diff --git a/Core.lua b/Core.lua
index bee0583..c39d60c 100644
--- a/Core.lua
+++ b/Core.lua
@@ -2,7 +2,7 @@
 	Srendarr - Aura (Buff & Debuff) Tracker
 	----------------------------------------------------------
 	*
-	* Version 2.1.9
+	* Version 2.2.0
 	* Kith, Garkin, silentgecko
 	*
 	*
@@ -12,7 +12,7 @@ local L						= Srendarr:GetLocale()

 Srendarr.name				= 'Srendarr'
 Srendarr.slash				= '/srendarr'
-Srendarr.version			= '2.1.9'
+Srendarr.version			= '2.2.0'
 Srendarr.versionDB			= 3

 Srendarr.displayFrames		= {}
@@ -81,12 +81,13 @@ function Srendarr.OnInitialize(code, addon)
 		end)
 	end

-	self:PopulateFilteredAuras()	-- AuraData.lua
-	self:ConfigureAuraFadeTime()	-- Aura.lua
-	self:InitializeAuraControl()	-- AuraControl.lua
-	self:InitializeCastBar()		-- CastBar.lua
-	self:InitializeProcs()			-- Procs.lua
-	self:InitializeSettings()		-- Settings.lua
+	self:PopulateFilteredAuras()		-- AuraData.lua
+	self:ConfigureAuraFadeTime()		-- Aura.lua
+	self:ConfigureDisplayAbilityID()	-- Aura.lua
+	self:InitializeAuraControl()		-- AuraControl.lua
+	self:InitializeCastBar()			-- CastBar.lua
+	self:InitializeProcs()				-- Procs.lua
+	self:InitializeSettings()			-- Settings.lua

 	-- setup events to handle actionbar slotted abilities (used for procs and the castbar)
 	for slot = 3, 8 do
@@ -178,6 +179,9 @@ end
 do ------------------------
 	local str_gsub				= string.gsub

+	local STR_PROMBYID			= Srendarr.STR_PROMBYID
+	local STR_BLOCKBYID			= Srendarr.STR_BLOCKBYID
+
 	local DoesAbilityExist		= DoesAbilityExist
 	local GetAbilityName		= GetAbilityName
 	local GetAbilityDuration	= GetAbilityDuration
@@ -189,107 +193,177 @@ do ------------------------
 	function Srendarr:ProminentAuraAdd(auraName)
 		auraName = str_gsub(auraName, '%^%a?', '') -- strip out any control characters player may have entered

-		if (self.db.prominentWhitelist[auraName]) then return end -- already added this aura
-
-		local matchedIDs = {}
-		local compareName
+		if (auraName == STR_PROMBYID) then return end -- make sure we don't mess with internal table

-		for id = 1, 100000 do -- scan all abilityIDs looking for this auraName
-			if (DoesAbilityExist(id) and (GetAbilityDuration(id) > 0 or not IsAbilityPassive(id))) then
-				compareName = str_gsub(GetAbilityName(id), '%^%a?', '') -- strip out any control characters from the ability name
+		if (tonumber(auraName)) then -- number entered, assume is an abilityID
+			auraName = tonumber(auraName)

-				if (compareName == auraName) then -- matching ability with a duration (no toggles or passives in prominence)
-					table.insert(matchedIDs, id)
+			if (auraName > 0 and auraName < 250000 and DoesAbilityExist(auraName) and (GetAbilityDuration(auraName) > 0 or not IsAbilityPassive(auraName))) then
+				-- can only add timed abilities to the prominence whitelist
+				if (not self.db.prominentWhitelist[STR_PROMBYID]) then
+					self.db.prominentWhitelist[STR_PROMBYID] = {} -- ensure the by ID table is present
 				end
+
+				self.db.prominentWhitelist[STR_PROMBYID][auraName] = true
+
+				CHAT_SYSTEM:AddMessage(string.format('%s: [%d] (%s) %s', L.Srendarr, auraName, GetAbilityName(auraName), L.Prominent_AuraAddSuccess)) -- inform user of successful addition
+
+				Srendarr:ConfigureAuraHandler() -- update handler ref
+			else
+				CHAT_SYSTEM:AddMessage(string.format('%s: [%s] %s', L.Srendarr, auraName, L.Prominent_AuraAddFailByID)) -- inform user of failed addition
 			end
-		end
+		else
+			if (self.db.prominentWhitelist[auraName]) then return end -- already added this aura

-		if (fakeAuras[auraName]) then -- a fake aura exists for this ability, add its ID
-			table.insert(matchedIDs, fakeAuras[auraName].abilityID)
-		end
+			local matchedIDs = {}
+			local compareName

-		if (#matchedIDs > 0) then -- matches were found
-			self.db.prominentWhitelist[auraName] = {} -- add a new whitelist entry
+			for id = 1, 100000 do -- scan all abilityIDs looking for this auraName
+				if (DoesAbilityExist(id) and (GetAbilityDuration(id) > 0 or not IsAbilityPassive(id))) then
+					compareName = str_gsub(GetAbilityName(id), '%^%a?', '') -- strip out any control characters from the ability name

-			for _, id in ipairs(matchedIDs) do
-				self.db.prominentWhitelist[auraName][id] = true
+					if (compareName == auraName) then -- matching ability with a duration (no toggles or passives in prominence)
+						table.insert(matchedIDs, id)
+					end
+				end
 			end

-			Srendarr:ConfigureAuraHandler() -- update handler ref
+			if (fakeAuras[auraName]) then -- a fake aura exists for this ability, add its ID
+				table.insert(matchedIDs, fakeAuras[auraName].abilityID)
+			end

-			CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Prominent_AuraAddSuccess)) -- inform user of successful addition
-		else
-			CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Prominent_AuraAddFail)) -- inform user of failed addition
+			if (#matchedIDs > 0) then -- matches were found
+				self.db.prominentWhitelist[auraName] = {} -- add a new whitelist entry
+
+				for _, id in ipairs(matchedIDs) do
+					self.db.prominentWhitelist[auraName][id] = true
+				end
+
+				Srendarr:ConfigureAuraHandler() -- update handler ref
+
+				CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Prominent_AuraAddSuccess)) -- inform user of successful addition
+			else
+				CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Prominent_AuraAddFail)) -- inform user of failed addition
+			end
 		end
 	end

 	function Srendarr:ProminentAuraRemove(auraName)
 		auraName = str_gsub(auraName, '%^%a?', '') -- strip out any control characters player may have entered

-		if (not self.db.prominentWhitelist[auraName]) then return end -- not in whitelist, abort
+		if (auraName == STR_PROMBYID) then return end -- make sure we don't mess with internal table

-		for id in pairs(self.db.prominentWhitelist[auraName]) do
-			self.db.prominentWhitelist[auraName][id] = nil -- clean out whitelist entry
-		end
+		if (tonumber(auraName)) then -- trying to remove by number, assume is an abilityID
+			auraName = tonumber(auraName)

-		self.db.prominentWhitelist[auraName] = nil -- remove whitelist entrys
+			if (self.db.prominentWhitelist[STR_PROMBYID][auraName]) then -- ID is in list, remove and inform user
+				self.db.prominentWhitelist[STR_PROMBYID][auraName] = nil

-		Srendarr:ConfigureAuraHandler() -- update handler ref
+				Srendarr:ConfigureAuraHandler() -- update handler ref
+
+				CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Prominent_AuraRemoved)) -- inform user of removal
+			end
+		else
+			if (not self.db.prominentWhitelist[auraName]) then return end -- not in whitelist, abort

-		CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Prominent_AuraRemoved)) -- inform user of removal
+			for id in pairs(self.db.prominentWhitelist[auraName]) do
+				self.db.prominentWhitelist[auraName][id] = nil -- clean out whitelist entry
+			end
+
+			self.db.prominentWhitelist[auraName] = nil -- remove whitelist entrys
+
+			Srendarr:ConfigureAuraHandler() -- update handler ref
+
+			CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Prominent_AuraRemoved)) -- inform user of removal
+		end
 	end

+
 	function Srendarr:BlacklistAuraAdd(auraName)
 		auraName = str_gsub(auraName, '%^%a?', '') -- strip out any control characters player may have entered

-		if (self.db.blacklist[auraName]) then return end -- already added this aura
-
-		local matchedIDs = {}
-		local compareName
+		if (auraName == STR_BLOCKBYID) then return end -- make sure we don't mess with internal table

-		for id = 1, 100000 do -- scan all abilityIDs looking for this auraName
-			if (DoesAbilityExist(id)) then
-				compareName = str_gsub(GetAbilityName(id), '%^%a?', '') -- strip out any control characters from the ability name
+		if (tonumber(auraName)) then -- number entered, assume is an abilityID
+			auraName = tonumber(auraName)

-				if (compareName == auraName) then -- found a matching ability
-					table.insert(matchedIDs, id)
+			if (auraName > 0 and auraName < 250000) then -- sanity check on the ID given
+				if (not self.db.blacklist[STR_BLOCKBYID]) then
+					self.db.blacklist[STR_BLOCKBYID] = {} -- ensuire the by ID table is present
 				end
+
+				self.db.blacklist[STR_BLOCKBYID][auraName] = true
+
+				Srendarr:PopulateFilteredAuras() -- update filtered aura IDs
+
+				CHAT_SYSTEM:AddMessage(string.format('%s: [%d] (%s) %s', L.Srendarr, auraName, GetAbilityName(auraName), L.Blacklist_AuraAddSuccess)) -- inform user of successful addition
+			else
+				CHAT_SYSTEM:AddMessage(string.format('%s: [%s] %s', L.Srendarr, auraName, L.Blacklist_AuraAddFailByID)) -- inform user of failed addition
 			end
-		end
+		else
+			if (self.db.blacklist[auraName]) then return end -- already added this aura

-		if (fakeAuras[auraName]) then -- a fake aura exists for this ability, add its ID
-			table.insert(matchedIDs, fakeAuras[auraName].abilityID)
-		end
+			local matchedIDs = {}
+			local compareName

-		if (#matchedIDs > 0) then -- matches were found
-			self.db.blacklist[auraName] = {} -- add a new blacklist entry
+			for id = 1, 100000 do -- scan all abilityIDs looking for this auraName
+				if (DoesAbilityExist(id)) then
+					compareName = str_gsub(GetAbilityName(id), '%^%a?', '') -- strip out any control characters from the ability name

-			for _, id in ipairs(matchedIDs) do
-				self.db.blacklist[auraName][id] = true
+					if (compareName == auraName) then -- found a matching ability
+						table.insert(matchedIDs, id)
+					end
+				end
 			end

-			Srendarr:PopulateFilteredAuras() -- update filtered aura IDs
+			if (fakeAuras[auraName]) then -- a fake aura exists for this ability, add its ID
+				table.insert(matchedIDs, fakeAuras[auraName].abilityID)
+			end

-			CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Blacklist_AuraAddSuccess)) -- inform user of successful addition
-		else
-			CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Blacklist_AuraAddFail)) -- inform user of failed addition
+			if (#matchedIDs > 0) then -- matches were found
+				self.db.blacklist[auraName] = {} -- add a new blacklist entry
+
+				for _, id in ipairs(matchedIDs) do
+					self.db.blacklist[auraName][id] = true
+				end
+
+				Srendarr:PopulateFilteredAuras() -- update filtered aura IDs
+
+				CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Blacklist_AuraAddSuccess)) -- inform user of successful addition
+			else
+				CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Blacklist_AuraAddFail)) -- inform user of failed addition
+			end
 		end
 	end

 	function Srendarr:BlacklistAuraRemove(auraName)
 		auraName = str_gsub(auraName, '%^%a?', '') -- strip out any control characters player may have entered

-		if (not self.db.blacklist[auraName]) then return end -- not in blacklist, abort
+		if (auraName == STR_BLOCKBYID) then return end -- make sure we don't mess with internal table

-		for id in pairs(self.db.blacklist[auraName]) do
-			self.db.blacklist[auraName][id] = nil -- clean out blacklist entry
-		end
+		if (tonumber(auraName)) then -- trying to remove by number, assume is an abilityID
+			auraName = tonumber(auraName)

-		self.db.blacklist[auraName] = nil -- remove blacklist entrys
+			if (self.db.blacklist[STR_BLOCKBYID][auraName]) then -- ID is in list, remove and inform user
+				self.db.blacklist[STR_BLOCKBYID][auraName] = nil

-		Srendarr:PopulateFilteredAuras() -- update filtered aura IDs
+				Srendarr:PopulateFilteredAuras() -- update filtered aura IDs
+
+				CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Blacklist_AuraRemoved)) -- inform user of removal
+			end
+		else
+			if (not self.db.blacklist[auraName]) then return end -- not in blacklist, abort

-		CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Blacklist_AuraRemoved)) -- inform user of removal
+			for id in pairs(self.db.blacklist[auraName]) do
+				self.db.blacklist[auraName][id] = nil -- clean out blacklist entry
+			end
+
+			self.db.blacklist[auraName] = nil -- remove blacklist entrys
+
+			Srendarr:PopulateFilteredAuras() -- update filtered aura IDs
+
+			CHAT_SYSTEM:AddMessage(string.format('%s: %s %s', L.Srendarr, auraName, L.Blacklist_AuraRemoved)) -- inform user of removal
+		end
 	end
 end

diff --git a/Defaults.lua b/Defaults.lua
index 376f310..a239c41 100644
--- a/Defaults.lua
+++ b/Defaults.lua
@@ -1,8 +1,6 @@
 local Srendarr		= _G['Srendarr'] -- grab addon table from global

 -- CONST DECLARATIONS : referenced locally in other files when needed --
-Srendarr.DEBUG_ABILITYID		= false	-- enable to show the abilityID for each aura
-
 Srendarr.AURA_UPDATE_RATE		= 0.05
 Srendarr.CAST_UPDATE_RATE		= 0.02

@@ -49,6 +47,9 @@ Srendarr.AURA_TIMERLOC_OVER		= 2
 Srendarr.AURA_TIMERLOC_ABOVE	= 3
 Srendarr.AURA_TIMERLOC_BELOW	= 4

+Srendarr.STR_PROMBYID			= 'ProminentByID'
+Srendarr.STR_BLOCKBYID			= 'BlockByID'
+

 -- register our new default sound with LibMediaProvider (cannot be a localized name for consistant internal refs)
 LibStub('LibMediaProvider-1.0'):Register('sound', 'Srendarr Ability Proc', SOUNDS.DEATH_RECAP_KILLING_BLOW_SHOWN)
@@ -63,6 +64,8 @@ local defaults = {
 	procEnableAnims				= true,
 	procPlaySound				= 'Srendarr Ability Proc',	-- can be set to None by user
 	passiveEffectsAsPassive		= false,
+	displayAbilityID			= false,
+	hideOnDeadTargets			= false,
 	auraGroups = {
 		[Srendarr.GROUP_PLAYER_SHORT]	= 1,	-- set the displayFrame that will display this grouping
 		[Srendarr.GROUP_PLAYER_LONG]	= 2,	-- multiple groupings can go to a given frame
diff --git a/Locales/Local_de.lua b/Locales/Local_de.lua
index 4b110be..076e820 100644
--- a/Locales/Local_de.lua
+++ b/Locales/Local_de.lua
@@ -33,9 +33,11 @@ L.Group_Prominent		= 'Spezial Buffs'
 -- whitelist & blacklist control
 L.Prominent_AuraAddSuccess	= 'wurde zur Spezial Whitelist hinzugefügt.'
 L.Prominent_AuraAddFail 	= 'wurde nicht gefunden und konnte nicht hinzugefügt werden.'
+
 L.Prominent_AuraRemoved		= 'wurde von der Spezial Whitelist entfernt.'
 L.Blacklist_AuraAddSuccess	= 'wurde zur Blacklist hinzugefügt und wird nicht länger dargestellt.'
 L.Blacklist_AuraAddFail 	= 'wurde nicht gefunden und konnte nicht hinzugefügt werden.'
+
 L.Blacklist_AuraRemoved		= 'wurde von der Blacklist entfernt.'

 -- settings: base
@@ -120,6 +122,10 @@ L.General_CombatOnly			= 'Nur im Kampf anzeigen'
 L.General_CombatOnlyTip			= 'Auf "Ein" stellen wenn die Leisten nur im Kampf angezeigt werden sollen.'
 L.General_AuraFakeEnabled		= 'Künstlich Buffs/Debuffs Aktivieren'
 L.General_AuraFakeEnabledTip	= 'Certain abilities with a duration do not provide the right details to addons when used. Enabling simulated auras is a way of displaying a useful aura for these abilities, but due to the lack of proper information they may not be entirely accurate.'
+
+
+
+
 L.General_AuraFadeout			= 'Buff/Debuff Ausblendezeit'
 L.General_AuraFadeoutTip		= 'Set how long an expired aura should take to fade out of view. With a setting of 0, Auras will disappear as soon as they expire without any fadeout.\n\nThe fadeout timer is in milliseconds.'
 L.General_ShortThreshold		= 'Kurzer Buff Grenzwert'
@@ -130,6 +136,8 @@ L.General_ProcEnableAnimsTip	= 'Set whether to show an animation on the ActionBa
 L.General_ProcenableAnimsWarn	= 'If you are using a mod that modifies or hides the default ActionBar, animations may not display.'
 L.General_ProcPlaySound			= 'Sound bei Proc abspielen'
 L.General_ProcPlaySoundTip		= 'Set a sound to play when an ability procs. A settings of None will prevent any audio alert of your procs.'
+
+
 -- settings: general (aura control: display groups)
 L.General_ControlHeader			= 'Buff/Debuff Anzeige Einstellungen'
 L.General_ControlBaseTip		= 'Set which display window to show this Aura Group in, or hide it from display entirely.'
@@ -163,7 +171,6 @@ L.Filter_BlacklistHeader  		= 'Buff/Debuff Blacklist'
 L.Filter_BlacklistAdd    		= 'Buff/Debuff zur Blacklist hinzufügen'
 L.Filter_BlacklistAddTip  		= 'The aura you want to blacklist must have its name entered exactly as it appears ingame. Press enter to add the aura to the blacklist.'
 L.Filter_BlacklistAddWarn 		= 'Adding an aura requires scanning all auras in the game to find the ability\'s internal ID number. This can cause the game to hang for a moment while searching.'
-
 L.Filter_BlacklistList			= 'Aktuell Blacklist Buffs/Debuffs:'
 L.Filter_BlacklistListTip		= 'List of all auras currently blacklisted. To remove auras from the blacklist, select from the list and use the Remove button below.'
 L.Filter_BlacklistRemove		= 'Entferne von Blacklist'
diff --git a/Locales/Local_en.lua b/Locales/Local_en.lua
index 0e09010..445249d 100644
--- a/Locales/Local_en.lua
+++ b/Locales/Local_en.lua
@@ -33,9 +33,11 @@ L.Group_Prominent		= 'Prominent Buffs'
 -- whitelist & blacklist control
 L.Prominent_AuraAddSuccess	= 'has been added to the Prominence Whitelist.'
 L.Prominent_AuraAddFail		= 'was not found and could not be added.'
+L.Prominent_AuraAddFailByID	= 'is not a valid abilityID or is not the ID of a timed aura and could not be added.'
 L.Prominent_AuraRemoved		= 'has been removed from the Prominence Whitelist.'
 L.Blacklist_AuraAddSuccess	= 'has been added to the Blacklist and will no longer be displayed.'
 L.Blacklist_AuraAddFail		= 'was not found and could not be added to the Blacklist.'
+L.Blacklist_AuraAddFailByID	= 'is not a valid abilityID and could not be added to the Blacklist.'
 L.Blacklist_AuraRemoved		= 'has been removed from the Blacklist.'

 -- settings: base
@@ -65,7 +67,7 @@ L.TabHeader5				= 'Profile Settings'
 L.TabHeaderDisplay			= 'Display Window Settings'

 -- settings: generic
-L.GenericSetting_ClickToViewAuras	= 'Click To View Auras'
+L.GenericSetting_ClickToViewAuras	= '|cffd100Click To View Auras|r'
 L.GenericSetting_NameFont			= 'Name Text Font'
 L.GenericSetting_NameStyle			= 'Name Text Font Colour & Style'
 L.GenericSetting_NameSize			= 'Name Text Size'
@@ -120,6 +122,10 @@ L.General_CombatOnly			= 'Only Show During Combat'
 L.General_CombatOnlyTip			= 'Set whether all aura windows are only visible when engaged in combat.'
 L.General_AuraFakeEnabled		= 'Enable Display Of Simulated Auras'
 L.General_AuraFakeEnabledTip	= 'Certain abilities with a duration do not provide the right details to addons when used. Enabling simulated auras is a way of displaying a useful aura for these abilities, but due to the lack of proper information they may not be entirely accurate.'
+L.General_DisplayAbilityID		= 'Enable Display Of Aura\'s AbilityID'
+L.General_DisplayAbilityIDTip	= 'Set whether to display the internal abilityID of all auras. This can be used to find the exact ID of auras you may want to blacklist from display or add to the prominent display group.\n\nThis option can also be used to assist in fixing inaccurate aura display by reporting the errant ID\'s to the addon author.'
+L.General_HideOnDeadTargets		= 'Hide Aura Display On Dead Targets'
+L.General_HideOnDeadTargetsTip	= 'Set whether to hide the display of all auras when your current target is dead.'
 L.General_AuraFadeout			= 'Aura Fadeout Time'
 L.General_AuraFadeoutTip		= 'Set how long an expired aura should take to fade out of view. With a setting of 0, Auras will disappear as soon as they expire without any fadeout.\n\nThe fadeout timer is in milliseconds.'
 L.General_ShortThreshold		= 'Short Buffs Threshold'
@@ -150,8 +156,8 @@ L.General_ControlProminentTip	= 'This special Aura Group contains all buffs on y
 L.General_ProminentHeader		= 'Prominent Buffs'
 L.General_ProminentDesc			= 'Buffs on yourself as well as ground targets can be whitelisted to appear as prominent. This will allow them to be seperated out into a different window for easier monitoring of critical effects.'
 L.General_ProminentAdd			= 'Add A Prominent Buff'
-L.General_ProminentAddTip		= 'The buff or ground target effect you want to make prominent must have its name entered exactly as it appears ingame, Press enter to add the aura to the prominence whitelist and please note only auras with a duration can be set, passives and toggled abilities will be ignored.'
-L.General_ProminentAddWarn		= 'Adding an aura requires scanning all auras in the game to find the ability\'s internal ID number. This can cause the game to hang for a moment while searching.'
+L.General_ProminentAddTip		= 'The buff or ground target effect you want to make prominent must have its name entered exactly as it appears ingame, or you may enter the internal abilityID (if known) to block a specific aura.\n\nPress enter to add the aura to the prominence whitelist, and please note only auras with a duration can be set, passives and toggled abilities will be ignored.'
+L.General_ProminentAddWarn		= 'When adding an aura by name, it requires scanning all auras in the game to find the ability\'s internal ID number(s). This can cause the game to hang for a moment while searching.'
 L.General_ProminentList			= 'Current Prominent Buffs'
 L.General_ProminentListTip		= 'List of all auras set to appear as prominent. To remove existing auras, select from the list and use the Remove button below.'
 L.General_ProminentRemove		= 'Remove Prominent Aura'
@@ -163,9 +169,8 @@ L.General_ProminentRemove		= 'Remove Prominent Aura'
 L.Filter_Desc					= 'Control the display of certain auras based on either a blacklist for a given aura (by name) or through filters for certain categories of aura. For filters, enabling one prevents the display of that category.'
 L.Filter_BlacklistHeader		= 'Aura Blacklist'
 L.Filter_BlacklistAdd			= 'Add An Aura To The Blacklist'
-L.Filter_BlacklistAddTip		= 'The aura you want to blacklist must have its name entered exactly as it appears ingame. Press enter to add the aura to the blacklist.'
-L.Filter_BlacklistAddWarn		= 'Adding an aura requires scanning all auras in the game to find the ability\'s internal ID number. This can cause the game to hang for a moment while searching.'
-
+L.Filter_BlacklistAddTip		= 'The aura you want to blacklist must have its name entered exactly as it appears ingame, or you may also enter the internal abilityID (if known) to block a specific aura.\n\nPress enter to add the aura to the blacklist.'
+L.Filter_BlacklistAddWarn		= 'When adding an aura by name, it requires scanning all auras in the game to find the ability\'s internal ID number(s). This can cause the game to hang for a moment while searching.'
 L.Filter_BlacklistList			= 'Current Blacklisted Auras'
 L.Filter_BlacklistListTip		= 'List of all auras currently blacklisted. To remove auras from the blacklist, select from the list and use the Remove button below.'
 L.Filter_BlacklistRemove		= 'Remove From Blacklist'
diff --git a/Locales/Local_fr.lua b/Locales/Local_fr.lua
index 03d0b27..bdb84b8 100644
--- a/Locales/Local_fr.lua
+++ b/Locales/Local_fr.lua
@@ -33,9 +33,11 @@ L.Group_Prominent		= 'Effets principaux'
 -- whitelist & blacklist control
 L.Prominent_AuraAddSuccess	= 'a été ajouté à la liste des effets principaux.'
 L.Prominent_AuraAddFail		= 'n\'a pas été trouvé et ne peut être ajouté.'
+
 L.Prominent_AuraRemoved		= 'a été supprimé des effets principaux.'
 L.Blacklist_AuraAddSuccess	= 'a été ajouté à la liste noire et ne sera plus affiché.'
 L.Blacklist_AuraAddFail		= 'n\'a pas été trouvé et ne peux être ajouté.'
+
 L.Blacklist_AuraRemoved		= 'a été supprimé de la liste noire.'

 -- settings: base
@@ -120,6 +122,10 @@ L.General_CombatOnly			= 'N\'afficher qu\'en combat'
 L.General_CombatOnlyTip			= 'Sélectionnez si les fenêtres d\'aura ne doivent être affichées qu\'en combat.'
 L.General_AuraFakeEnabled		= 'Activer l\'affichage des effets simulées'
 L.General_AuraFakeEnabledTip	= 'Certaines compétences sur la durée ne communiquent pas correctement leurs détails aux addons lors de leur utilisation. Activer le simulateur d\'aura permet de palier au mieux à ce problème.'
+
+
+
+
 L.General_AuraFadeout			= 'Délai de disparition des effets'
 L.General_AuraFadeoutTip		= 'Définissez le temps donné pour la disparition d\'affichage d\'un effet à l\'écran. Un paramètre à 0 fera disparaitre l\'aura sans transition.\n\nLe timer est en millisecondes.'
 L.General_ShortThreshold		= 'Seuil des buffs courts'
@@ -130,6 +136,8 @@ L.General_ProcEnableAnimsTip	= 'Choisissez de créer une animation sur la barre
 L.General_ProcenableAnimsWarn	= 'Si vous utilisez un addon modifiant ou masquant la barre d\'action, les animations pourront ne pas être affichées.'
 L.General_ProcPlaySound			= 'Jouer un son lors d\'un proc'
 L.General_ProcPlaySoundTip		= 'Sélectionnez le son à jouer lors d\'un proc d\'une compétence. Sélectionner "None" ne jouera aucun son.'
+
+
 -- settings: general (aura control: display groups)
 L.General_ControlHeader			= 'Gestion des effets - Groupes d\'affichage'
 L.General_ControlBaseTip		= 'Définissez dans quel groupe de fenêtre afficher vos effets ou les masquer totalement.'
@@ -163,7 +171,6 @@ L.Filter_BlacklistHeader		= 'Blacklist des effets'
 L.Filter_BlacklistAdd			= 'Ajouter un effet à blacklister'
 L.Filter_BlacklistAddTip		= 'L\'effet que vous souhaitez blacklister doit être écrit exactement tel qu\'il apparait en jeu. Validez par Entrée pour ajouter l\'effet à la liste des effets blacklistés.'
 L.Filter_BlacklistAddWarn		= 'Ajouter un effet par son nom requiert de scanner toutes les compétences existantes. Cette opération peut ralentir votre jeu quelques instants le temps de l\'opération.'
-
 L.Filter_BlacklistList			= 'Effets actuellement blacklistées'
 L.Filter_BlacklistListTip		= 'Liste de tous les effets actuellement blacklistés. Pour supprimer un effet de la blacklis, sélectionnez le et cliquez sur le bouton Supprimer de la liste.'
 L.Filter_BlacklistRemove		= 'Supprimer de la liste'
diff --git a/Settings.lua b/Settings.lua
index 9a9ff01..4e29f6a 100644
--- a/Settings.lua
+++ b/Settings.lua
@@ -43,6 +43,9 @@ local GROUP_TARGET_BUFF		= Srendarr.GROUP_TARGET_BUFF
 local GROUP_TARGET_DEBUFF	= Srendarr.GROUP_TARGET_DEBUFF
 local GROUP_PROMINENT		= Srendarr.GROUP_PROMINENT

+local STR_PROMBYID			= Srendarr.STR_PROMBYID
+local STR_BLOCKBYID			= Srendarr.STR_BLOCKBYID
+
 -- UPVALUES --
 local WM					= GetWindowManager()
 local CM					= CALLBACK_MANAGER
@@ -50,6 +53,7 @@ local tinsert	 			= table.insert
 local tremove				= table.remove
 local tsort		 			= table.sort
 local strformat				= string.format
+local GetAbilityName		= GetAbilityName

 -- DROPDOWN CHOICES --
 local dropProminentAuras	= {}
@@ -252,7 +256,13 @@ local function PopulateProminentAurasDropdown()
 	tinsert(dropProminentAuras, L.GenericSetting_ClickToViewAuras) -- insert 'dummy' first entry

 	for name in pairs(Srendarr.db.prominentWhitelist) do
-		tinsert(dropProminentAuras, name) -- add current aura selection
+		if (name == STR_PROMBYID) then -- special case for auras added by abilityID
+			for id in pairs(Srendarr.db.prominentWhitelist[STR_PROMBYID]) do
+				tinsert(dropProminentAuras, strformat('[%d] %s', id, GetAbilityName(id)))
+			end
+		else
+			tinsert(dropProminentAuras, name) -- add current aura selection
+		end
 	end

 	prominentAurasWidgetRef:UpdateChoices()
@@ -267,7 +277,13 @@ local function PopulateBlacklistAurasDropdown()
 	tinsert(dropBlacklistAuras, L.GenericSetting_ClickToViewAuras) -- insert 'dummy' first entry

 	for name in pairs(Srendarr.db.blacklist) do
-		tinsert(dropBlacklistAuras, name) -- add current aura selection
+		if (name == STR_BLOCKBYID) then -- special case for auras added by abilityID
+			for id in pairs(Srendarr.db.blacklist[STR_BLOCKBYID]) do
+				tinsert(dropBlacklistAuras, strformat('[%d] %s', id, GetAbilityName(id)))
+			end
+		else
+			tinsert(dropBlacklistAuras, name) -- add current aura selection
+		end
 	end

 	blacklistAurasWidgetRef:UpdateChoices()
@@ -665,6 +681,40 @@ tabPanelData = {
 			end,
 		},
 		{
+			type = 'checkbox',
+			name = L.General_DisplayAbilityID,
+			tooltip = L.General_DisplayAbilityIDTip,
+			getFunc = function()
+				return Srendarr.db.displayAbilityID
+			end,
+			setFunc = function(v)
+				Srendarr.db.displayAbilityID = v
+				Srendarr:ConfigureDisplayAbilityID()
+
+				for frame = 1, Srendarr.NUM_DISPLAY_FRAMES do
+					Srendarr.displayFrames[frame]:ConfigureAssignedAuras()
+				end
+
+				if (sampleAurasActive) then
+					ShowSampleAuras() -- sample auras calls OnPlayerActivatedAlive as well
+				else
+					Srendarr.OnPlayerActivatedAlive()
+				end
+			end,
+		},
+		{
+			type = 'checkbox',
+			name = L.General_HideOnDeadTargets,
+			tooltip = L.General_HideOnDeadTargetsTip,
+			getFunc = function()
+				return Srendarr.db.hideOnDeadTargets
+			end,
+			setFunc = function(v)
+				Srendarr.db.hideOnDeadTargets = v
+				Srendarr:ConfigureOnTargetChanged()
+			end,
+		},
+		{
 			type = 'slider',
 			name = L.General_AuraFadeout,
 			tooltip = L.General_AuraFadeoutTip,
@@ -1010,6 +1060,10 @@ tabPanelData = {
 			name = L.General_ProminentRemove,
 			func = function(btn)
 				if (prominentAurasSelectedAura) then
+					if (string.find(prominentAurasSelectedAura, '%[%d+%]')) then -- this is a 'by abilityID' aura
+						prominentAurasSelectedAura = string.match(prominentAurasSelectedAura, '%d+') -- correct user display to just abilityID
+					end
+
 					Srendarr:ProminentAuraRemove(prominentAurasSelectedAura)
 					Srendarr.OnPlayerActivatedAlive()
 				end
@@ -1072,6 +1126,10 @@ tabPanelData = {
 			name = L.Filter_BlacklistRemove,
 			func = function(btn)
 				if (blacklistAurasSelectedAura) then
+					if (string.find(blacklistAurasSelectedAura, '%[%d+%]')) then -- this is a 'by abilityID' aura
+						blacklistAurasSelectedAura = string.match(blacklistAurasSelectedAura, '%d+') -- correct user display to just abilityID
+					end
+
 					Srendarr:BlacklistAuraRemove(blacklistAurasSelectedAura)
 					Srendarr.OnPlayerActivatedAlive()
 				end
diff --git a/Srendarr.txt b/Srendarr.txt
index d8a5735..c8a65a9 100644
--- a/Srendarr.txt
+++ b/Srendarr.txt
@@ -1,6 +1,6 @@
 ## Title: |c67b1e9S|c4779ce'rendarr|r
 ## Description: Adds graphical tracking of buffs and debuffs on both yourself and others in a manner that meshes with the stock interface theme.
-## Version: 2.1.8
+## Version: 2.2.0
 ## Author: Kith, |cEFEBBEGarkin, silentgecko|r
 ## APIVersion: 100014
 ## SavedVariables: SrendarrDB