diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1152226761..22e168a25f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+### Version 13.61 [ April 2nd 2024 ]
+* Microbar Support Ticket button in middle of screen.
+* Minimap Icons not hiding when using the keybind for Toggle Minimap.
+* No Label, Decimal Length, Custom Label options for the Leech Datatext.
+* Minimap Difficulty icon not respecting offsets on Wrath.
+* Party and RaidPets not spawning until after combat.
+* SoD Mage at low level having incorrect range on friendly NPCs.
+* Wrath Nightelf Shadowmeld causing a taint during combat.
+* LibDispel Bleed list updated again.
+* Chat AFK and DND not displaying on Retail.
+
### Version 13.60 [ March 19th 2024 ]
* Difficulty Icon on Minimap improved, resolving an issue with the mouseover tooltip.
* Pet Battle XP bar overlapped Pass button.
diff --git a/ElvUI/Classic/Filters/Filters.lua b/ElvUI/Classic/Filters/Filters.lua
index 6209b84f31..d31466a18c 100644
--- a/ElvUI/Classic/Filters/Filters.lua
+++ b/ElvUI/Classic/Filters/Filters.lua
@@ -448,6 +448,7 @@ if E.ClassicSOD then
-- Whitelist World Event Auras
Whitelist[433804] = List(6) -- Blood for the Blood Loa
Whitelist[441785] = List(6) -- Drained of Blood
+ Whitelist[437751] = List(6) -- Bruised
Whitelist[436351] = List(6) -- Zandalari Ward
Whitelist[429959] = List(2) -- Well-Rested
-- Priest Rune Meditations
@@ -902,6 +903,7 @@ G.unitframe.ChannelTicks = {
if E.ClassicSOD then
G.unitframe.ChannelTicks[402261] = 3 -- Penance (DPS)
G.unitframe.ChannelTicks[402277] = 3 -- Penance (Healing)
+ G.unitframe.ChannelTicks[413259] = 5 -- Mind Sear (Rune)
end
-- Spells that chain, second step
diff --git a/ElvUI/Classic/Modules/DataTexts/Load_DataTexts.xml b/ElvUI/Classic/Modules/DataTexts/Load_DataTexts.xml
index 5eaea5a3b6..cf825e5b62 100644
--- a/ElvUI/Classic/Modules/DataTexts/Load_DataTexts.xml
+++ b/ElvUI/Classic/Modules/DataTexts/Load_DataTexts.xml
@@ -12,4 +12,5 @@
+
diff --git a/ElvUI/Core/Defaults/Profile.lua b/ElvUI/Core/Defaults/Profile.lua
index cfe30f89cc..5387c28b7e 100644
--- a/ElvUI/Core/Defaults/Profile.lua
+++ b/ElvUI/Core/Defaults/Profile.lua
@@ -1344,6 +1344,7 @@ local UF_AuraBars = {
local UF_AuraWatch = {
enable = false,
+ petSpecific = E.Retail,
profileSpecific = false,
countFont = 'PT Sans Narrow',
countFontOutline = 'OUTLINE',
@@ -1650,6 +1651,7 @@ local UF_SubGroup = {
width = 120,
height = 28,
threatStyle = 'GLOW',
+ threatPrimary = true,
colorOverride = 'USE_DEFAULT',
name = CopyTable(UF_Name),
raidicon = CopyTable(UF_RaidIcon),
@@ -1856,6 +1858,7 @@ P.unitframe = {
height = 54,
lowmana = 30,
threatStyle = 'GLOW',
+ threatPrimary = true,
smartAuraPosition = 'DISABLED',
colorOverride = 'USE_DEFAULT',
disableMouseoverGlow = false,
@@ -1912,6 +1915,8 @@ P.unitframe = {
height = 54,
orientation = 'RIGHT',
threatStyle = 'GLOW',
+ threatPrimary = true,
+ threatPlayer = false,
smartAuraPosition = 'DISABLED',
colorOverride = 'USE_DEFAULT',
middleClickFocus = true,
@@ -1944,6 +1949,7 @@ P.unitframe = {
targettarget = {
enable = true,
threatStyle = 'NONE',
+ threatPrimary = true,
orientation = 'MIDDLE',
smartAuraPosition = 'DISABLED',
colorOverride = 'USE_DEFAULT',
@@ -1969,6 +1975,8 @@ P.unitframe = {
focus = {
enable = true,
threatStyle = 'GLOW',
+ threatPrimary = true,
+ threatPlayer = false,
orientation = 'MIDDLE',
smartAuraPosition = 'DISABLED',
colorOverride = 'USE_DEFAULT',
@@ -2000,6 +2008,7 @@ P.unitframe = {
enable = true,
orientation = 'MIDDLE',
threatStyle = 'GLOW',
+ threatPrimary = true,
smartAuraPosition = 'DISABLED',
colorOverride = 'USE_DEFAULT',
width = 130,
@@ -2028,6 +2037,7 @@ P.unitframe = {
boss = {
enable = true,
threatStyle = 'NONE',
+ threatPrimary = true,
growthDirection = 'DOWN',
orientation = 'RIGHT',
smartAuraPosition = 'DISABLED',
@@ -2094,6 +2104,7 @@ P.unitframe = {
party = {
enable = true,
threatStyle = 'GLOW',
+ threatPrimary = true,
orientation = 'LEFT',
visibility = '[@raid6,exists][@party1,noexists] hide;show',
growthDirection = 'UP_RIGHT',
@@ -2145,6 +2156,7 @@ P.unitframe = {
enable = true,
orientation = 'LEFT',
threatStyle = 'GLOW',
+ threatPrimary = true,
colorOverride = 'USE_DEFAULT',
middleClickFocus = false,
width = 120,
@@ -2813,7 +2825,7 @@ P.actionbar.bar1.paging.ROGUE = '[bonusbar:1] 7;'..(E.Wrath and ' [bonusbar:2] 8
P.actionbar.bar1.paging.WARLOCK = E.Wrath and '[form:1] 7;' or nil
P.actionbar.bar1.paging.DRUID = '[bonusbar:1,nostealth] 7; [bonusbar:1,stealth] 8; [bonusbar:2] 10; [bonusbar:3] 9; [bonusbar:4] 10;'
P.actionbar.bar1.paging.EVOKER = '[bonusbar:1] 7;'
-P.actionbar.bar1.paging.PRIEST = '[bonusbar:1] 7;'..(E.Classic and ' [possessbar] 16;' or '')
+P.actionbar.bar1.paging.PRIEST = E.Classic and '[form:1] 7;' or '[bonusbar:1] 7;'
P.actionbar.bar1.paging.WARRIOR = '[bonusbar:1] 7; [bonusbar:2] 8; [bonusbar:3] 9;'
P.actionbar.bar3.enabled = true
diff --git a/ElvUI/Core/General/Core.lua b/ElvUI/Core/General/Core.lua
index 1cf6cf70f0..f7285af42e 100644
--- a/ElvUI/Core/General/Core.lua
+++ b/ElvUI/Core/General/Core.lua
@@ -1993,7 +1993,7 @@ function E:Initialize()
E:Tutorials()
end
- if E.Retail or E.Wrath then
+ if E.Retail or E.Wrath or E.ClassicSOD then
E.Libs.DualSpec:EnhanceDatabase(E.data, 'ElvUI')
end
diff --git a/ElvUI/Core/General/Install.lua b/ElvUI/Core/General/Install.lua
index c0f8ed525e..59a2dbf815 100644
--- a/ElvUI/Core/General/Install.lua
+++ b/ElvUI/Core/General/Install.lua
@@ -108,7 +108,7 @@ function E:SetupChat(noDisplayMsg)
end
-- keys taken from `ChatTypeGroup` but doesnt add: 'OPENING', 'TRADESKILLS', 'PET_INFO', 'COMBAT_MISC_INFO', 'COMMUNITIES_CHANNEL', 'PET_BATTLE_COMBAT_LOG', 'PET_BATTLE_INFO', 'TARGETICONS'
- local chatGroup = { 'SYSTEM', 'CHANNEL', 'SAY', 'EMOTE', 'YELL', 'WHISPER', 'PARTY', 'PARTY_LEADER', 'RAID', 'RAID_LEADER', 'RAID_WARNING', 'INSTANCE_CHAT', 'INSTANCE_CHAT_LEADER', 'GUILD', E.ClassicHC and 'GUILD_DEATHS' or nil, 'OFFICER', 'MONSTER_SAY', 'MONSTER_YELL', 'MONSTER_EMOTE', 'MONSTER_WHISPER', 'MONSTER_BOSS_EMOTE', 'MONSTER_BOSS_WHISPER', 'ERRORS', 'AFK', 'DND', 'IGNORED', 'BG_HORDE', 'BG_ALLIANCE', 'BG_NEUTRAL', 'ACHIEVEMENT', 'GUILD_ACHIEVEMENT', 'BN_WHISPER', 'BN_INLINE_TOAST_ALERT' }
+ local chatGroup = { 'SYSTEM', 'CHANNEL', 'SAY', 'EMOTE', 'YELL', 'WHISPER', 'PARTY', 'PARTY_LEADER', 'RAID', 'RAID_LEADER', 'RAID_WARNING', 'INSTANCE_CHAT', 'INSTANCE_CHAT_LEADER', 'GUILD', 'OFFICER', 'MONSTER_SAY', 'MONSTER_YELL', 'MONSTER_EMOTE', 'MONSTER_WHISPER', 'MONSTER_BOSS_EMOTE', 'MONSTER_BOSS_WHISPER', 'ERRORS', 'AFK', 'DND', 'IGNORED', 'BG_HORDE', 'BG_ALLIANCE', 'BG_NEUTRAL', 'ACHIEVEMENT', 'GUILD_ACHIEVEMENT', 'BN_WHISPER', 'BN_INLINE_TOAST_ALERT' }
ChatFrame_RemoveAllMessageGroups(_G.ChatFrame1)
for _, v in next, chatGroup do
ChatFrame_AddMessageGroup(_G.ChatFrame1, v)
diff --git a/ElvUI/Core/General/Tags.lua b/ElvUI/Core/General/Tags.lua
index 8d4e5f3f00..6184fdcf03 100644
--- a/ElvUI/Core/General/Tags.lua
+++ b/ElvUI/Core/General/Tags.lua
@@ -35,6 +35,7 @@ local QuestDifficultyColors = QuestDifficultyColors
local UnitBattlePetLevel = UnitBattlePetLevel
local UnitClassification = UnitClassification
local UnitDetailedThreatSituation = UnitDetailedThreatSituation
+local UnitThreatPercentageOfLead = UnitThreatPercentageOfLead
local UnitExists = UnitExists
local UnitFactionGroup = UnitFactionGroup
local UnitGetIncomingHeals = UnitGetIncomingHeals
@@ -627,6 +628,13 @@ E:AddTag('realm:dash:translit', 'UNIT_NAME_UPDATE', function(unit)
end
end)
+E:AddTag('threat:lead', 'UNIT_THREAT_LIST_UPDATE UNIT_THREAT_SITUATION_UPDATE GROUP_ROSTER_UPDATE', function(unit)
+ local percent = UnitThreatPercentageOfLead('player', unit)
+ if percent and percent > 0 and (IsInGroup() or UnitExists('pet')) then
+ return format('%.0f%%', percent)
+ end
+end)
+
E:AddTag('threat:percent', 'UNIT_THREAT_LIST_UPDATE UNIT_THREAT_SITUATION_UPDATE GROUP_ROSTER_UPDATE', function(unit)
local _, _, percent = UnitDetailedThreatSituation('player', unit)
if percent and percent > 0 and (IsInGroup() or UnitExists('pet')) then
@@ -1649,6 +1657,7 @@ E.TagInfo = {
-- Threat
['threat:current'] = { category = 'Threat', description = "Displays the current threat as a value" },
['threat:percent'] = { category = 'Threat', description = "Displays the current threat as a percent" },
+ ['threat:lead'] = { category = 'Threat', description = "Displays the current threat of lead as a percent" },
['threat'] = { category = 'Threat', description = "Displays the current threat situation (Aggro is secure tanking, -- is losing threat and ++ is gaining threat)" },
}
diff --git a/ElvUI/Core/Modules/ActionBars/MicroBar.lua b/ElvUI/Core/Modules/ActionBars/MicroBar.lua
index b138632eb9..1731e0a792 100644
--- a/ElvUI/Core/Modules/ActionBars/MicroBar.lua
+++ b/ElvUI/Core/Modules/ActionBars/MicroBar.lua
@@ -8,7 +8,6 @@ local gsub = gsub
local assert = assert
local unpack = unpack
local tinsert = tinsert
-local strfind = strfind
local CreateFrame = CreateFrame
local UpdateMicroButtonsParent = UpdateMicroButtonsParent
local RegisterStateDriver = RegisterStateDriver
diff --git a/ElvUI/Core/Modules/Chat/Chat.lua b/ElvUI/Core/Modules/Chat/Chat.lua
index 1464a4c771..e0bcfda3d4 100644
--- a/ElvUI/Core/Modules/Chat/Chat.lua
+++ b/ElvUI/Core/Modules/Chat/Chat.lua
@@ -150,7 +150,6 @@ local historyTypes = { -- most of these events are set in FindURL_Events, this i
CHAT_MSG_BN_WHISPER_INFORM = 'WHISPER',
CHAT_MSG_GUILD = 'GUILD',
CHAT_MSG_GUILD_ACHIEVEMENT = 'GUILD',
- CHAT_MSG_GUILD_DEATHS = E.ClassicHC and 'GUILD' or nil,
CHAT_MSG_PARTY = 'PARTY',
CHAT_MSG_PARTY_LEADER = 'PARTY',
CHAT_MSG_RAID = 'RAID',
@@ -327,7 +326,7 @@ do --this can save some main file locals
if E.Classic then
-- Simpy (5099: Myzrael)
z['Player-5099-01947A77'] = itsSimpy -- Warlock: Simpy
- -- Luckyone Seasonal (5826: Lone Wolf EU)
+ -- Luckyone Seasonal (5826: Lone Wolf EU, 5827: Living Flame EU)
z['Player-5826-0202765F'] = ElvBlue -- [Alliance] Hunter
z['Player-5826-020F7F10'] = ElvBlue -- [Alliance] Paladin
z['Player-5826-02172E79'] = ElvBlue -- [Alliance] Warlock
@@ -336,6 +335,7 @@ do --this can save some main file locals
z['Player-5826-023424EF'] = ElvBlue -- [Alliance] Druid
z['Player-5826-02342520'] = ElvBlue -- [Alliance] Rogue
z['Player-5826-02342556'] = ElvBlue -- [Alliance] Warrior
+ z['Player-5827-02331C4B'] = ElvBlue -- [Horde] Shaman
-- Luckyone Hardcore
z["Lucky-Nek'Rosh"] = ElvBlue -- [Horde] Rogue
z["Luckyone-Nek'Rosh"] = ElvBlue -- [Horde] Hunter
@@ -383,7 +383,7 @@ do --this can save some main file locals
z['Player-1401-0421EB9F'] = ElvBlue -- [Alliance] Warrior: Brìtt
z['Player-1401-0421F909'] = ElvRed -- [Alliance] Paladin: Damará
z['Player-1401-0421EC36'] = ElvBlue -- [Alliance] Priest: Jazira
- z['Player-1401-041CD0A6'] = ElvYellow -- [Alliance] Rogue: Jústice
+ z['Player-1401-0A9B0131'] = ElvYellow -- [Alliance] Rogue: Anonia
z['Player-1401-041E4D64'] = ElvGreen -- [Alliance] Monk: Maithilis
z['Player-1401-0648F4AD'] = ElvPurple -- [Alliance] DH: Mattdemôn
z['Player-1401-0421F27B'] = ElvBlue -- [Alliance] Mage: Melisendra
@@ -1763,25 +1763,18 @@ function CH:ChatFrame_ReplaceIconAndGroupExpressions(message, noIconReplacement,
end
-- copied from ChatFrame.lua
-local function GetPFlag(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17)
- -- Renaming for clarity:
- local specialFlag = arg6
- local zoneChannelID = arg7
- --local localChannelID = arg8
-
+local function GetPFlag(specialFlag, zoneChannelID, localChannelID)
if specialFlag ~= '' then
if specialFlag == 'GM' or specialFlag == 'DEV' then
-- Add Blizzard Icon if this was sent by a GM/DEV
return [[|TInterface\ChatFrame\UI-ChatIcon-Blizz:12:20:0:0:32:16:4:28:0:16|t ]]
- elseif E.Retail then
- if specialFlag == 'GUIDE' then
- if _G.ChatFrame_GetMentorChannelStatus(CHATCHANNELRULESET_MENTOR, GetChannelRulesetForChannelID(zoneChannelID)) == CHATCHANNELRULESET_MENTOR then
- return NPEV2_CHAT_USER_TAG_GUIDE
- end
- elseif specialFlag == 'NEWCOMER' then
- if _G.ChatFrame_GetMentorChannelStatus(PLAYERMENTORSHIPSTATUS_NEWCOMER, GetChannelRulesetForChannelID(zoneChannelID)) == PLAYERMENTORSHIPSTATUS_NEWCOMER then
- return _G.NPEV2_CHAT_USER_TAG_NEWCOMER
- end
+ elseif specialFlag == 'GUIDE' and E.Retail then
+ if _G.ChatFrame_GetMentorChannelStatus(CHATCHANNELRULESET_MENTOR, GetChannelRulesetForChannelID(zoneChannelID)) == CHATCHANNELRULESET_MENTOR then
+ return NPEV2_CHAT_USER_TAG_GUIDE
+ end
+ elseif specialFlag == 'NEWCOMER' and E.Retail then
+ if _G.ChatFrame_GetMentorChannelStatus(PLAYERMENTORSHIPSTATUS_NEWCOMER, GetChannelRulesetForChannelID(zoneChannelID)) == PLAYERMENTORSHIPSTATUS_NEWCOMER then
+ return _G.NPEV2_CHAT_USER_TAG_NEWCOMER
end
else
return _G['CHAT_FLAG_'..specialFlag]
@@ -1920,7 +1913,7 @@ function CH:MessageFormatter(frame, info, chatType, chatGroup, chatTarget, chann
end
-- Player Flags
- local pflag = GetPFlag(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17)
+ local pflag = GetPFlag(arg6, arg7, arg8)
if not bossMonster then
local chatIcon, pluginChatIcon = specialChatIcons[arg12] or specialChatIcons[playerName], CH:GetPluginIcon(arg12, playerName)
if type(chatIcon) == 'function' then
@@ -1967,7 +1960,7 @@ function CH:MessageFormatter(frame, info, chatType, chatGroup, chatTarget, chann
end
else
if not showLink or arg2 == '' then
- if chatType == 'TEXT_EMOTE' or chatType == 'GUILD_DEATHS' then
+ if chatType == 'TEXT_EMOTE' then
body = message
else
body = format(_G['CHAT_'..chatType..'_GET']..message, pflag..arg2, arg2)
@@ -2959,7 +2952,6 @@ local FindURL_Events = {
'CHAT_MSG_BN_WHISPER_INFORM',
'CHAT_MSG_BN_INLINE_TOAST_BROADCAST',
'CHAT_MSG_GUILD_ACHIEVEMENT',
- E.ClassicHC and 'CHAT_MSG_GUILD_DEATHS' or nil,
'CHAT_MSG_GUILD',
'CHAT_MSG_PARTY',
'CHAT_MSG_PARTY_LEADER',
diff --git a/ElvUI/Wrath/Modules/DataTexts/DualSpec.lua b/ElvUI/Core/Modules/DataTexts/DualSpec.lua
similarity index 79%
rename from ElvUI/Wrath/Modules/DataTexts/DualSpec.lua
rename to ElvUI/Core/Modules/DataTexts/DualSpec.lua
index f445e7efba..1b20aaf328 100644
--- a/ElvUI/Wrath/Modules/DataTexts/DualSpec.lua
+++ b/ElvUI/Core/Modules/DataTexts/DualSpec.lua
@@ -1,4 +1,5 @@
local E, L, V, P, G = unpack(ElvUI)
+if not (E.Wrath or E.ClassicSOD) then return end
local DT = E:GetModule('DataTexts')
local _G = _G
@@ -20,27 +21,19 @@ local GetTalentTabInfo = GetTalentTabInfo
local LoadAddOn = (C_AddOns and C_AddOns.LoadAddOn) or LoadAddOn
local displayString, db = ''
-local primaryStr, secondaryStr, activeGroup, hasDualSpec
+local primaryStr, secondaryStr, activeGroup, hasDualSpec = '', ''
local function BuildTalentString(talentGroup)
local str = ''
for i = 1, MAX_TALENT_TABS do
local _, _, pointsSpent = GetTalentTabInfo(i, false, false, talentGroup)
- if (str == '') then
- str = pointsSpent
- else
- str = strjoin('/', str, pointsSpent)
- end
+ str = (str == '' and pointsSpent) or strjoin('/', str, pointsSpent)
end
return str
end
-local function ColorText(str, hex)
- return format('|cff%s%s|r',hex,str)
-end
-
local function OnEvent(self)
primaryStr, secondaryStr = BuildTalentString(1), BuildTalentString(2)
@@ -56,11 +49,10 @@ end
local function OnEnter()
DT.tooltip:ClearLines()
-
- DT.tooltip:AddDoubleLine(format('%s: %s', ColorText(PRIMARY, activeGroup == 1 and '0CD809' or 'FFFFFF'), primaryStr))
+ DT.tooltip:AddLine(format('|cff%s%s:|r %s', activeGroup == 1 and '0CD809' or 'FFFFFF', PRIMARY, primaryStr), 1, 1, 1)
if hasDualSpec then
- DT.tooltip:AddDoubleLine(format('%s: %s', ColorText(SECONDARY, activeGroup == 2 and '0CD809' or 'FFFFFF'), secondaryStr))
+ DT.tooltip:AddLine(format('|cff%s%s:|r %s', activeGroup == 2 and '0CD809' or 'FFFFFF', SECONDARY, secondaryStr), 1, 1, 1)
end
DT.tooltip:AddLine(' ')
@@ -85,10 +77,8 @@ local function OnClick(_, button)
else
HideUIPanel(_G.PlayerTalentFrame)
end
- else
- if hasDualSpec then
- SetActiveTalentGroup(activeGroup == 1 and 2 or 1)
- end
+ elseif hasDualSpec then
+ SetActiveTalentGroup(activeGroup == 1 and 2 or 1)
end
end
end
diff --git a/ElvUI/Core/Modules/DataTexts/Gold.lua b/ElvUI/Core/Modules/DataTexts/Gold.lua
index 2122645560..6ed5eef472 100644
--- a/ElvUI/Core/Modules/DataTexts/Gold.lua
+++ b/ElvUI/Core/Modules/DataTexts/Gold.lua
@@ -26,7 +26,7 @@ local CURRENCY = CURRENCY
local menuList, myGold = {}, {}
local totalGold, totalHorde, totalAlliance = 0, 0, 0
-local iconString = '|T%s:16:16:0:0:64:64:4:60:4:60|t'
+local iconStringName = '|T%s:16:16:0:0:64:64:4:60:4:60|t %s'
local db
local function sortFunction(a, b)
@@ -218,7 +218,7 @@ local function OnEnter()
end
if info.quantity then
- DT.tooltip:AddDoubleLine(format('%s %s', format(iconString, info.iconFileID), name), BreakUpLargeNumbers(info.quantity), 1, 1, 1, 1, 1, 1)
+ DT.tooltip:AddDoubleLine(format(iconStringName, info.iconFileID, name), BreakUpLargeNumbers(info.quantity), 1, 1, 1, 1, 1, 1)
end
index = index + 1
diff --git a/ElvUI/Core/Modules/UnitFrames/Elements/BuffIndicator.lua b/ElvUI/Core/Modules/UnitFrames/Elements/BuffIndicator.lua
index e1744bc309..1105269868 100644
--- a/ElvUI/Core/Modules/UnitFrames/Elements/BuffIndicator.lua
+++ b/ElvUI/Core/Modules/UnitFrames/Elements/BuffIndicator.lua
@@ -29,18 +29,17 @@ function UF:Configure_AuraWatch(frame, isPet)
frame.AuraWatch.countFontSize = db.countFontSize
frame.AuraWatch.countFontOutline = db.countFontOutline
- if frame.unit == 'pet' or isPet then
- frame.AuraWatch:SetNewTable(E.global.unitframe.aurawatch.PET)
+ local auraTable
+ if (frame.unit == 'pet' or isPet) and db.petSpecific then
+ auraTable = E.global.unitframe.aurawatch.PET
+ elseif db.profileSpecific then
+ auraTable = E.db.unitframe.filters.aurawatch
else
- local auraTable
- if db.profileSpecific then
- auraTable = E.db.unitframe.filters.aurawatch
- else
- auraTable = E.Filters.Expand({}, E.global.unitframe.aurawatch[E.myclass] or {})
- E:CopyTable(auraTable, E.global.unitframe.aurawatch.GLOBAL)
- end
- frame.AuraWatch:SetNewTable(auraTable)
+ auraTable = E.Filters.Expand({}, E.global.unitframe.aurawatch[E.myclass] or {})
+ E:CopyTable(auraTable, E.global.unitframe.aurawatch.GLOBAL)
end
+
+ frame.AuraWatch:SetNewTable(auraTable)
elseif frame:IsElementEnabled('AuraWatch') then
frame:DisableElement('AuraWatch')
end
diff --git a/ElvUI/Core/Modules/UnitFrames/Elements/Threat.lua b/ElvUI/Core/Modules/UnitFrames/Elements/Threat.lua
index 0c1bf7c098..59d8b2d424 100644
--- a/ElvUI/Core/Modules/UnitFrames/Elements/Threat.lua
+++ b/ElvUI/Core/Modules/UnitFrames/Elements/Threat.lua
@@ -32,12 +32,16 @@ function UF:Configure_Threat(frame)
local threat = frame.ThreatIndicator
if not threat then return end
- local threatStyle = frame.db and frame.db.threatStyle
+ local db = frame.db
+ local threatStyle = db and db.threatStyle
if threatStyle and threatStyle ~= 'NONE' then
if not frame:IsElementEnabled('ThreatIndicator') then
frame:EnableElement('ThreatIndicator')
end
+ local unit = frame.unitframeType
+ threat.feedbackUnit = db.threatPlayer and (unit == 'target' or unit == 'focus') and 'player' or nil
+
if threatStyle == 'GLOW' then
threat:SetFrameStrata('BACKGROUND')
threat.MainGlow:ClearAllPoints()
@@ -150,12 +154,13 @@ end
function UF:UpdateThreat(unit, status, r, g, b)
local parent = self:GetParent()
- local db = parent.db and parent.db.threatStyle
- local badunit = not unit or parent.unit ~= unit
- if not badunit and status and status > 1 then
- UF:ThreatHandler(self, parent, db, status, r, g, b)
+ local db = parent.db
+ if not db then return end
+
+ if (unit and parent.unit == unit) and status and status > (db.threatPrimary and 1 or 0) then
+ UF:ThreatHandler(self, parent, db.threatStyle, status, r, g, b)
else
- UF:ThreatHandler(self, parent, db, nil, unpack(E.media.unitframeBorderColor))
+ UF:ThreatHandler(self, parent, db.threatStyle, nil, unpack(E.media.unitframeBorderColor))
end
end
diff --git a/ElvUI/Core/init.lua b/ElvUI/Core/init.lua
index 1d43100946..0e94bce07e 100644
--- a/ElvUI/Core/init.lua
+++ b/ElvUI/Core/init.lua
@@ -116,7 +116,7 @@ end
function E:ParseVersionString(addon)
local version = GetAddOnMetadata(addon, 'Version')
if strfind(version, 'project%-version') then
- return 13.60, '13.60-git', nil, true
+ return 13.61, '13.61-git', nil, true
else
local release, extra = strmatch(version, '^v?([%d.]+)(.*)')
return tonumber(release), release..extra, extra ~= ''
@@ -160,7 +160,7 @@ do
E:AddLib('AceConfigRegistry', 'AceConfigRegistry-3.0-ElvUI')
E:AddLib('AceDBOptions', 'AceDBOptions-3.0')
- if E.Retail or E.Wrath then
+ if E.Retail or E.Wrath or E.ClassicSOD then
E:AddLib('DualSpec', 'LibDualSpec-1.0')
end
diff --git a/ElvUI/ElvUI_Classic.toc b/ElvUI/ElvUI_Classic.toc
index e2dd131d53..06d56a1794 100644
--- a/ElvUI/ElvUI_Classic.toc
+++ b/ElvUI/ElvUI_Classic.toc
@@ -6,8 +6,8 @@
## SavedVariablesPerCharacter: ElvCharacterDB
## OptionalDeps: SharedMedia, Tukui, Masque
## RequiredDeps: ElvUI_Libraries
-## Interface: 11501
-## X-Interface: 11501
+## Interface: 11502
+## X-Interface: 11502
## X-Tukui-ProjectID: -2
## X-Tukui-ProjectFolders: ElvUI, ElvUI_Libraries, ElvUI_Options
diff --git a/ElvUI/Mainline/Modules/Skins/Collectables.lua b/ElvUI/Mainline/Modules/Skins/Collectables.lua
index 3160dda88c..4bef1d061d 100644
--- a/ElvUI/Mainline/Modules/Skins/Collectables.lua
+++ b/ElvUI/Mainline/Modules/Skins/Collectables.lua
@@ -120,18 +120,23 @@ local function JournalScrollButtons(frame)
for _, bu in next, { frame.ScrollTarget:GetChildren() } do
if not bu.IsSkinned then
- bu:StripTextures()
- bu:CreateBackdrop('Transparent', nil, nil, true)
- bu.backdrop:ClearAllPoints()
- bu.backdrop:Point('TOPLEFT', bu, 0, -2)
- bu.backdrop:Point('BOTTOMRIGHT', bu, 0, 2)
-
local icon = bu.icon or bu.Icon
+ local savedIconTexture = icon:GetTexture()
icon:Size(40)
icon:Point('LEFT', -43, 0)
icon:SetTexCoord(unpack(E.TexCoords))
icon:CreateBackdrop('Transparent', nil, nil, true)
+ local savedPetTypeTexture = bu.petTypeIcon and bu.petTypeIcon:GetTexture()
+ local savedFactionAtlas = bu.factionIcon and bu.factionIcon:GetAtlas()
+
+ bu:StripTextures()
+ bu:CreateBackdrop('Transparent', nil, nil, true)
+ bu.backdrop:ClearAllPoints()
+ bu.backdrop:Point('TOPLEFT', bu, 0, -2)
+ bu.backdrop:Point('BOTTOMRIGHT', bu, 0, 2)
+ icon:SetTexture(savedIconTexture) -- restore the texture
+
bu:HookScript('OnEnter', buttonOnEnter)
bu:HookScript('OnLeave', buttonOnLeave)
@@ -140,7 +145,8 @@ local function JournalScrollButtons(frame)
bu.ProgressBar:SetVertexColor(0.251, 0.753, 0.251, 1) -- 0.0118, 0.247, 0.00392
end
- if frame:GetParent() == _G.WardrobeCollectionFrame.SetsCollectionFrame then
+ local parent = frame:GetParent()
+ if parent == _G.WardrobeCollectionFrame.SetsCollectionFrame then
bu.Favorite:SetAtlas('PetJournal-FavoritesIcon', true)
bu.Favorite:Point('TOPLEFT', bu.Icon, 'TOPLEFT', -8, 8)
@@ -150,8 +156,9 @@ local function JournalScrollButtons(frame)
hooksecurefunc(bu.selectedTexture, 'Show', selectedTextureShow)
hooksecurefunc(bu.selectedTexture, 'Hide', selectedTextureHide)
- if frame:GetParent() == _G.PetJournal then
+ if parent == _G.PetJournal then
bu.petList = true
+ bu.petTypeIcon:SetTexture(savedPetTypeTexture)
bu.petTypeIcon:Point('TOPRIGHT', -1, -1)
bu.petTypeIcon:Point('BOTTOMRIGHT', -1, 1)
@@ -160,8 +167,9 @@ local function JournalScrollButtons(frame)
bu.dragButton.levelBG:SetTexture()
S:HandleIconBorder(bu.iconBorder, nil, petNameColor)
- elseif frame:GetParent() == _G.MountJournal then
+ elseif parent == _G.MountJournal then
bu.mountList = true
+ bu.factionIcon:SetAtlas(savedFactionAtlas)
bu.factionIcon:SetDrawLayer('OVERLAY')
bu.factionIcon:Point('TOPRIGHT', -1, -1)
bu.factionIcon:Point('BOTTOMRIGHT', -1, 1)
@@ -183,6 +191,108 @@ local function JournalScrollButtons(frame)
end
end
+local function ToySpellButtonUpdateButton(button)
+ if button.itemID and PlayerHasToy(button.itemID) then
+ local _, _, quality = GetItemInfo(button.itemID)
+ if quality then
+ local r, g, b = GetItemQualityColor(quality)
+ button.backdrop:SetBackdropBorderColor(r, g, b)
+ else
+ button.backdrop:SetBackdropBorderColor(0.9, 0.9, 0.9)
+ end
+ else
+ local r, g, b = unpack(E.media.bordercolor)
+ button.backdrop:SetBackdropBorderColor(r, g, b)
+ end
+end
+
+local function HeirloomsJournalUpdateButton(_, button)
+ if not button.IsSkinned then
+ S:HandleItemButton(button, true)
+
+ button.iconTextureUncollected:SetTexCoord(unpack(E.TexCoords))
+ button.iconTextureUncollected:SetInside(button)
+ button.iconTexture:SetDrawLayer('ARTWORK')
+ button.hover:SetAllPoints(button.iconTexture)
+ button.slotFrameCollected:SetAlpha(0)
+ button.slotFrameUncollected:SetAlpha(0)
+ button.special:SetJustifyH('RIGHT')
+ button.special:ClearAllPoints()
+
+ button.cooldown:SetAllPoints(button.iconTexture)
+ E:RegisterCooldown(button.cooldown)
+
+ button.IsSkinned = true
+ end
+
+ button.levelBackground:SetTexture()
+
+ button.name:Point('LEFT', button, 'RIGHT', 4, 8)
+ button.level:Point('TOPLEFT', button.levelBackground,'TOPLEFT', 25, 2)
+
+ if C_Heirloom_PlayerHasHeirloom(button.itemID) then
+ button.name:SetTextColor(0.9, 0.9, 0.9)
+ button.level:SetTextColor(0.9, 0.9, 0.9)
+ button.special:SetTextColor(1, .82, 0)
+ button.backdrop:SetBackdropBorderColor(QUALITY_7_R, QUALITY_7_G, QUALITY_7_B)
+ else
+ button.name:SetTextColor(0.4, 0.4, 0.4)
+ button.level:SetTextColor(0.4, 0.4, 0.4)
+ button.special:SetTextColor(0.4, 0.4, 0.4)
+ button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
+ end
+end
+
+local function HeirloomsJournalLayoutCurrentPage()
+ local headers = _G.HeirloomsJournal.heirloomHeaderFrames
+ if headers and next(headers) then
+ for _, header in next, headers do
+ header:StripTextures()
+ header.text:FontTemplate(nil, 15, 'SHADOW')
+ header.text:SetTextColor(0.9, 0.9, 0.9)
+ end
+ end
+end
+
+local function SetsFrame_ScrollBoxUpdate(button)
+ for _, child in next, { button.ScrollTarget:GetChildren() } do
+ if not child.IsSkinned then
+ child.Background:Hide()
+ child.HighlightTexture:SetTexture(E.ClearTexture)
+ child.Icon:SetSize(42, 42)
+ S:HandleIcon(child.Icon)
+ child.IconCover:SetOutside(child.Icon)
+
+ child.SelectedTexture:SetDrawLayer('BACKGROUND')
+ child.SelectedTexture:SetColorTexture(1, 1, 1, .25)
+ child.SelectedTexture:ClearAllPoints()
+ child.SelectedTexture:Point('TOPLEFT', 4, -2)
+ child.SelectedTexture:Point('BOTTOMRIGHT', -1, 2)
+ child.SelectedTexture:CreateBackdrop('Transparent')
+
+ child.IsSkinned = true
+ end
+ end
+end
+
+local function SetsFrame_SetItemFrameQuality(_, itemFrame)
+ local icon = itemFrame.Icon
+ if not icon.backdrop then
+ icon:CreateBackdrop()
+ icon:SetTexCoord(unpack(E.TexCoords))
+ itemFrame.IconBorder:Hide()
+ end
+
+ if itemFrame.collected then
+ local quality = C_TransmogCollection_GetSourceInfo(itemFrame.sourceID).quality
+ local color = BAG_ITEM_QUALITY_COLORS[quality or 1]
+ icon.backdrop:SetBackdropBorderColor(color.r, color.g, color.b)
+ else
+ local r, g, b = unpack(E.media.bordercolor)
+ icon.backdrop:SetBackdropBorderColor(r, g, b)
+ end
+end
+
local function SkinMountFrame()
S:HandleItemButton(_G.MountJournalSummonRandomFavoriteButton)
S:HandleButton(_G.MountJournalFilterButton)
@@ -375,19 +485,7 @@ local function SkinToyFrame()
E:RegisterCooldown(button.cooldown)
end
- hooksecurefunc('ToySpellButton_UpdateButton', function(button)
- if button.itemID and PlayerHasToy(button.itemID) then
- local _, _, quality = GetItemInfo(button.itemID)
- if quality then
- local r, g, b = GetItemQualityColor(quality)
- button.backdrop:SetBackdropBorderColor(r, g, b)
- else
- button.backdrop:SetBackdropBorderColor(0.9, 0.9, 0.9)
- end
- else
- button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
- end
- end)
+ hooksecurefunc('ToySpellButton_UpdateButton', ToySpellButtonUpdateButton)
end
local function SkinHeirloomFrame()
@@ -410,51 +508,8 @@ local function SkinHeirloomFrame()
HeirloomsJournal.progressBar:CreateBackdrop()
E:RegisterStatusBar(HeirloomsJournal.progressBar)
- hooksecurefunc(HeirloomsJournal, 'UpdateButton', function(_, button)
- if not button.IsSkinned then
- S:HandleItemButton(button, true)
-
- button.iconTextureUncollected:SetTexCoord(unpack(E.TexCoords))
- button.iconTextureUncollected:SetInside(button)
- button.iconTexture:SetDrawLayer('ARTWORK')
- button.hover:SetAllPoints(button.iconTexture)
- button.slotFrameCollected:SetAlpha(0)
- button.slotFrameUncollected:SetAlpha(0)
- button.special:SetJustifyH('RIGHT')
- button.special:ClearAllPoints()
-
- button.cooldown:SetAllPoints(button.iconTexture)
- E:RegisterCooldown(button.cooldown)
-
- button.IsSkinned = true
- end
-
- button.levelBackground:SetTexture()
-
- button.name:Point('LEFT', button, 'RIGHT', 4, 8)
- button.level:Point('TOPLEFT', button.levelBackground,'TOPLEFT', 25, 2)
-
- if C_Heirloom_PlayerHasHeirloom(button.itemID) then
- button.name:SetTextColor(0.9, 0.9, 0.9)
- button.level:SetTextColor(0.9, 0.9, 0.9)
- button.special:SetTextColor(1, .82, 0)
- button.backdrop:SetBackdropBorderColor(QUALITY_7_R, QUALITY_7_G, QUALITY_7_B)
- else
- button.name:SetTextColor(0.4, 0.4, 0.4)
- button.level:SetTextColor(0.4, 0.4, 0.4)
- button.special:SetTextColor(0.4, 0.4, 0.4)
- button.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
- end
- end)
-
- hooksecurefunc(HeirloomsJournal, 'LayoutCurrentPage', function()
- for i=1, #HeirloomsJournal.heirloomHeaderFrames do
- local header = HeirloomsJournal.heirloomHeaderFrames[i]
- header:StripTextures()
- header.text:FontTemplate(nil, 15, 'SHADOW')
- header.text:SetTextColor(0.9, 0.9, 0.9)
- end
- end)
+ hooksecurefunc(HeirloomsJournal, 'UpdateButton', HeirloomsJournalUpdateButton)
+ hooksecurefunc(HeirloomsJournal, 'LayoutCurrentPage', HeirloomsJournalLayoutCurrentPage)
end
local function SkinTransmogFrames()
@@ -559,26 +614,7 @@ local function SkinTransmogFrames()
SetsCollectionFrame.LeftInset:StripTextures()
S:HandleTrimScrollBar(SetsCollectionFrame.ListContainer.ScrollBar)
- hooksecurefunc(SetsCollectionFrame.ListContainer.ScrollBox, 'Update', function(button)
- for _, child in next, { button.ScrollTarget:GetChildren() } do
- if not child.IsSkinned then
- child.Background:Hide()
- child.HighlightTexture:SetTexture(E.ClearTexture)
- child.Icon:SetSize(42, 42)
- S:HandleIcon(child.Icon)
- child.IconCover:SetOutside(child.Icon)
-
- child.SelectedTexture:SetDrawLayer('BACKGROUND')
- child.SelectedTexture:SetColorTexture(1, 1, 1, .25)
- child.SelectedTexture:ClearAllPoints()
- child.SelectedTexture:Point('TOPLEFT', 4, -2)
- child.SelectedTexture:Point('BOTTOMRIGHT', -1, 2)
- child.SelectedTexture:CreateBackdrop('Transparent')
-
- child.IsSkinned = true
- end
- end
- end)
+ hooksecurefunc(SetsCollectionFrame.ListContainer.ScrollBox, 'Update', SetsFrame_ScrollBoxUpdate)
local DetailsFrame = SetsCollectionFrame.DetailsFrame
DetailsFrame.ModelFadeTexture:Hide()
@@ -587,22 +623,7 @@ local function SkinTransmogFrames()
DetailsFrame.LongName:FontTemplate(nil, 16)
S:HandleButton(DetailsFrame.VariantSetsButton)
- hooksecurefunc(SetsCollectionFrame, 'SetItemFrameQuality', function(_, itemFrame)
- local icon = itemFrame.Icon
- if not icon.backdrop then
- icon:CreateBackdrop()
- icon:SetTexCoord(unpack(E.TexCoords))
- itemFrame.IconBorder:Hide()
- end
-
- if itemFrame.collected then
- local quality = C_TransmogCollection_GetSourceInfo(itemFrame.sourceID).quality
- local color = BAG_ITEM_QUALITY_COLORS[quality or 1]
- icon.backdrop:SetBackdropBorderColor(color.r, color.g, color.b)
- else
- icon.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
- end
- end)
+ hooksecurefunc(SetsCollectionFrame, 'SetItemFrameQuality', SetsFrame_SetItemFrameQuality)
_G.WardrobeSetsCollectionVariantSetsButton.Icon:SetTexture(E.Media.Textures.ArrowUp)
_G.WardrobeSetsCollectionVariantSetsButton.Icon:SetRotation(S.ArrowRotation.down)
diff --git a/ElvUI/Mainline/Modules/Skins/EncounterJournal.lua b/ElvUI/Mainline/Modules/Skins/EncounterJournal.lua
index 4fd392185f..5879c1cd64 100644
--- a/ElvUI/Mainline/Modules/Skins/EncounterJournal.lua
+++ b/ElvUI/Mainline/Modules/Skins/EncounterJournal.lua
@@ -381,6 +381,7 @@ function S:Blizzard_EncounterJournal()
if E.private.skins.parchmentRemoverEnable then
EJ.MonthlyActivitiesFrame.Bg:SetAlpha(0)
+ EJ.MonthlyActivitiesFrame.ThemeContainer:SetAlpha(0)
_G.EncounterJournalInstanceSelectBG:SetAlpha(0)
local suggestFrame = EJ.suggestFrame
diff --git a/ElvUI/Mainline/Modules/Skins/PerksProgram.lua b/ElvUI/Mainline/Modules/Skins/PerksProgram.lua
index dc9b29f3ed..5aa4fbfb5f 100644
--- a/ElvUI/Mainline/Modules/Skins/PerksProgram.lua
+++ b/ElvUI/Mainline/Modules/Skins/PerksProgram.lua
@@ -102,6 +102,11 @@ function S:Blizzard_PerksProgram()
local frame = _G.PerksProgramFrame
local products = frame.ProductsFrame
+
+ if E.private.skins.parchmentRemoverEnable then
+ frame.ThemeContainer:SetAlpha(0)
+ end
+
if products then
S:HandleButton(products.PerksProgramFilter.FilterDropDownButton)
diff --git a/ElvUI/Mainline/Modules/Skins/Quest.lua b/ElvUI/Mainline/Modules/Skins/Quest.lua
index c50775adfd..b06fe2577a 100644
--- a/ElvUI/Mainline/Modules/Skins/Quest.lua
+++ b/ElvUI/Mainline/Modules/Skins/Quest.lua
@@ -496,13 +496,6 @@ function S:BlizzardQuestFrames()
button.hover = hover
end
- hooksecurefunc('QuestFrame_ShowQuestPortrait', function(frame, _, _, _, _, _, x, y)
- local mapFrame = _G.QuestMapFrame:GetParent()
-
- _G.QuestModelScene:ClearAllPoints()
- _G.QuestModelScene:Point('TOPLEFT', frame, 'TOPRIGHT', (x or 0) + (frame == mapFrame and 11 or 6), y or 0)
- end)
-
_G.QuestModelScene:Height(247)
_G.QuestModelScene:StripTextures()
_G.QuestModelScene:CreateBackdrop('Transparent')
@@ -520,6 +513,13 @@ function S:BlizzardQuestFrames()
S:HandleTrimScrollBar(_G.QuestNPCModelTextScrollFrame.ScrollBar)
+ hooksecurefunc('QuestFrame_ShowQuestPortrait', function(frame, _, _, _, _, _, x, y)
+ local mapFrame = _G.QuestMapFrame:GetParent()
+
+ _G.QuestModelScene:ClearAllPoints()
+ _G.QuestModelScene:Point('TOPLEFT', frame, 'TOPRIGHT', (x or 0) + (frame == mapFrame and 11 or 6), y or 0)
+ end)
+
local QuestLogPopupDetailFrame = _G.QuestLogPopupDetailFrame
S:HandlePortraitFrame(QuestLogPopupDetailFrame)
diff --git a/ElvUI/Wrath/Modules/DataTexts/Load_DataTexts.xml b/ElvUI/Wrath/Modules/DataTexts/Load_DataTexts.xml
index 7b58bdc8b3..990da61872 100644
--- a/ElvUI/Wrath/Modules/DataTexts/Load_DataTexts.xml
+++ b/ElvUI/Wrath/Modules/DataTexts/Load_DataTexts.xml
@@ -19,5 +19,5 @@
-
+
diff --git a/ElvUI_Libraries/Core/LibRangeCheck-3.0/LibRangeCheck-3.0.lua b/ElvUI_Libraries/Core/LibRangeCheck-3.0/LibRangeCheck-3.0.lua
index 30cd51146b..0793026285 100644
--- a/ElvUI_Libraries/Core/LibRangeCheck-3.0/LibRangeCheck-3.0.lua
+++ b/ElvUI_Libraries/Core/LibRangeCheck-3.0/LibRangeCheck-3.0.lua
@@ -40,7 +40,7 @@ License: MIT
-- @class file
-- @name LibRangeCheck-3.0
local MAJOR_VERSION = "LibRangeCheck-3.0-ElvUI"
-local MINOR_VERSION = 15 -- real minor version: 13
+local MINOR_VERSION = 16 -- real minor version: 13
-- GLOBALS: LibStub, CreateFrame
@@ -67,7 +67,7 @@ local CheckInteractDistance = CheckInteractDistance
local GetInventoryItemLink = GetInventoryItemLink
local GetItemInfo = GetItemInfo
local GetNumSpellTabs = GetNumSpellTabs
-local GetSpellBookItemInfo = GetSpellBookItemInfo
+local GetSpellBookItemName = GetSpellBookItemName
local GetSpellInfo = GetSpellInfo
local GetSpellTabInfo = GetSpellTabInfo
local GetTime = GetTime
@@ -133,6 +133,7 @@ local InteractLists = {
}
local MeleeRange = 2
+local MatchSpellByID = {} -- specific matching to avoid incorrect index
local FriendSpells, HarmSpells, ResSpells, PetSpells = {}, {}, {}, {}
for _, n in ipairs({ "EVOKER", "DEATHKNIGHT", "DEMONHUNTER", "DRUID", "HUNTER", "SHAMAN", "MAGE", "PALADIN", "PRIEST", "WARLOCK", "WARRIOR", "MONK", "ROGUE" }) do
@@ -196,6 +197,8 @@ if not isRetail then
end
if isEraSOD then
+ MatchSpellByID[401417] = true -- Regeneration (Rune): Conflicts with Racial Passive on Trolls
+
tinsert(FriendSpells.MAGE, 401417) -- Regeneration (40 yards)
tinsert(FriendSpells.MAGE, 412510) -- Mass Regeneration (40 yards)
end
@@ -653,15 +656,14 @@ local function getNumSpells()
end
-- return the spellIndex of the given spell by scanning the spellbook
-local allowSpellType = { SPELL = true, FUTURESPELL = true }
local function findSpellIdx(spellName, sid)
if not spellName or spellName == "" then
return nil
end
for i = 1, getNumSpells() do
- local spellType, id = GetSpellBookItemInfo(i, BOOKTYPE_SPELL)
- if sid == id and allowSpellType[spellType] then
+ local name, _, id = GetSpellBookItemName(i, BOOKTYPE_SPELL)
+ if sid == id or (spellName == name and not MatchSpellByID[id]) then
return i
end
end
diff --git a/ElvUI_Libraries/ElvUI_Libraries_Classic.toc b/ElvUI_Libraries/ElvUI_Libraries_Classic.toc
index 02ef374817..703d93fde3 100644
--- a/ElvUI_Libraries/ElvUI_Libraries_Classic.toc
+++ b/ElvUI_Libraries/ElvUI_Libraries_Classic.toc
@@ -2,7 +2,7 @@
## Notes: Libraries that power ElvUI
## Author: Elv, Simpy
## Version: @project-version@
-## Interface: 11501
+## Interface: 11502
## OptionalDeps: LibHealComm-4.0
## X-oUF: ElvUF
diff --git a/ElvUI_Options/Core/Core.lua b/ElvUI_Options/Core/Core.lua
index 3dfe894bf2..b457250481 100644
--- a/ElvUI_Options/Core/Core.lua
+++ b/ElvUI_Options/Core/Core.lua
@@ -4,7 +4,6 @@ local MC = E:GetModule('ModuleCopy')
local D = E:GetModule('Distributor')
local S = E:GetModule('Skins')
-local GetAddOnMetadata = (C_AddOns and C_AddOns.GetAddOnMetadata) or GetAddOnMetadata
-- GLOBALS: ElvDB
local ACH = E.Libs.ACH
@@ -312,7 +311,7 @@ E.Options.args.profiles.args.private.order = 2
E.Libs.AceConfig:RegisterOptionsTable('ElvProfiles', E.Options.args.profiles.args.profile)
-if E.Retail or E.Wrath then
+if E.Retail or E.Wrath or E.ClassicSOD then
E.Libs.DualSpec:EnhanceOptions(E.Options.args.profiles.args.profile, E.data)
end
diff --git a/ElvUI_Options/Core/UnitFrames.lua b/ElvUI_Options/Core/UnitFrames.lua
index 6e51694523..8338b0a9fb 100644
--- a/ElvUI_Options/Core/UnitFrames.lua
+++ b/ElvUI_Options/Core/UnitFrames.lua
@@ -15,6 +15,11 @@ local CopyTable = CopyTable
local NUM_CLASSES = #CLASS_SORT_ORDER
local MAX_BOSS_FRAMES = 8
+local petTypes = {
+ pet = true,
+ raidpet = true
+}
+
local orientationValues = {
LEFT = L["Left"],
MIDDLE = L["Middle"],
@@ -266,10 +271,10 @@ local function doApplyToAll(db, info, value)
end
local function BuffIndicator_ApplyToAll(info, value, profile, pet)
- if profile then
- return doApplyToAll(E.db.unitframe.filters.aurawatch, info, value)
- elseif pet then
+ if pet then
return doApplyToAll(E.global.unitframe.aurawatch.PET, info, value)
+ elseif profile then
+ return doApplyToAll(E.db.unitframe.filters.aurawatch, info, value)
else
return doApplyToAll(E.global.unitframe.aurawatch[E.myclass], info, value)
end
@@ -280,9 +285,10 @@ local function GetOptionsTable_AuraWatch(updateFunc, groupName, numGroup, subGro
config.args.enable = ACH:Toggle(L["Enable"], nil, 1)
config.args.generalGroup = ACH:Group(' ', nil, 2)
- config.args.generalGroup.args.profileSpecific = ACH:Toggle(L["Profile Specific"], L["Use the profile specific filter Aura Indicator (Profile) instead of the global filter Aura Indicator."], 1)
+ config.args.generalGroup.args.configureButton = ACH:Execute(L["Configure Auras"], nil, 1, function() local configString = format('Aura Indicator (%s)', (petTypes[groupName] and E.db.unitframe.units[groupName].buffIndicator.petSpecific and 'Pet') or (E.db.unitframe.units[groupName].buffIndicator.profileSpecific and 'Profile') or 'Class') C:SetToFilterConfig(configString) end)
config.args.generalGroup.args.size = ACH:Range(L["Size"], nil, 2, { min = 6, max = 48, step = 1 })
- config.args.generalGroup.args.configureButton = ACH:Execute(L["Configure Auras"], nil, 3, function() local configString = format('Aura Indicator (%s)', groupName == 'pet' and 'Pet' or E.db.unitframe.units[groupName].buffIndicator.profileSpecific and 'Profile' or 'Class') C:SetToFilterConfig(configString) end)
+ config.args.generalGroup.args.profileSpecific = ACH:Toggle(L["Profile Specific"], L["Use the profile specific filter Aura Indicator (Profile) instead of the global filter Aura Indicator."], 3)
+ config.args.generalGroup.args.petSpecific = ACH:Toggle(L["Pet Specific"], L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."], 4, nil, nil, nil, nil, nil, nil, function() return not petTypes[groupName] end)
config.args.generalGroup.inline = true
config.args.countGroup = ACH:Group(L["Count Text"], nil, 15)
@@ -295,7 +301,7 @@ local function GetOptionsTable_AuraWatch(updateFunc, groupName, numGroup, subGro
config.get = function(info) return E.db.unitframe.units[groupName][subGroup].buffIndicator[info[#info]] end
config.set = function(info, value) E.db.unitframe.units[groupName][subGroup].buffIndicator[info[#info]] = value updateFunc(UF, groupName, numGroup) end
else
- config.args.applyToAll = ACH:Group(L["Apply To All"], nil, 50, nil, function(info) return BuffIndicator_ApplyToAll(info, nil, E.db.unitframe.units[groupName].buffIndicator.profileSpecific, groupName == 'pet') end, function(info, value) BuffIndicator_ApplyToAll(info, value, E.db.unitframe.units[groupName].buffIndicator.profileSpecific, groupName == 'pet') updateFunc(UF, groupName, numGroup) end)
+ config.args.applyToAll = ACH:Group(L["Apply To All"], nil, 50, nil, function(info) return BuffIndicator_ApplyToAll(info, nil, E.db.unitframe.units[groupName].buffIndicator.profileSpecific, petTypes[groupName] and E.db.unitframe.units[groupName].buffIndicator.petSpecific) end, function(info, value) BuffIndicator_ApplyToAll(info, value, E.db.unitframe.units[groupName].buffIndicator.profileSpecific, petTypes[groupName] and E.db.unitframe.units[groupName].buffIndicator.petSpecific) updateFunc(UF, groupName, numGroup) end)
config.args.applyToAll.inline = true
config.args.applyToAll.args.header = ACH:Description(L["|cffFF3333Warning:|r Changing options in this section will apply to all Aura Indicator auras. To change only one Aura, please click \"Configure Auras\" and change that specific Auras settings. If \"Profile Specific\" is selected it will apply to that filter set."], 1)
config.args.applyToAll.args.style = ACH:Select(L["Style"], nil, 2, { timerOnly = L["Timer Only"], coloredIcon = L["Colored Icon"], texturedIcon = L["Textured Icon"] })
@@ -665,7 +671,7 @@ local function GetOptionsTable_Health(isGroupFrame, updateFunc, groupName, numUn
config.args.orientation = ACH:Select(L["Statusbar Fill Orientation"], L["Direction the health bar moves when gaining/losing health."], 9, { HORIZONTAL = L["Horizontal"], VERTICAL = L["Vertical"] })
end
- if groupName == 'pet' or groupName == 'raidpet' then
+ if petTypes[groupName] then
config.args.colorPetByUnitClass = ACH:Toggle(L["Color by Unit Class"], nil, 2)
if groupName == 'pet' and E.myclass == 'HUNTER' then
@@ -950,29 +956,35 @@ local function GetOptionsTable_ClassBar(updateFunc, groupName, numUnits)
end
local function GetOptionsTable_GeneralGroup(updateFunc, groupName, numUnits)
- local config = ACH:Group(L["General"], nil, 1)
+ local config = ACH:Group(L["General"], nil, 1, 'tab')
config.args.orientation = ACH:Select(L["Frame Orientation"], L["Set the orientation of the UnitFrame."], 1, orientationValues)
- config.args.disableMouseoverGlow = ACH:Toggle(L["Block Mouseover Glow"], L["Forces Mouseover Glow to be disabled for these frames"], 2)
- config.args.disableTargetGlow = ACH:Toggle(L["Block Target Glow"], L["Forces Target Glow to be disabled for these frames"], 3)
- config.args.disableFocusGlow = ACH:Toggle(L["Block Focus Glow"], L["Forces Focus Glow to be disabled for these frames"], 4)
+ config.args.disableMouseoverGlow = ACH:Toggle(L["Block Mouseover Glow"], L["Forces Mouseover Glow to be disabled for these frames"], 3)
+ config.args.disableTargetGlow = ACH:Toggle(L["Block Target Glow"], L["Forces Target Glow to be disabled for these frames"], 4)
+ config.args.disableFocusGlow = ACH:Toggle(L["Block Focus Glow"], L["Forces Focus Glow to be disabled for these frames"], 5)
if groupName ~= 'tank' and groupName ~= 'assist' then
- config.args.hideonnpc = ACH:Toggle(L["Text Toggle On NPC"], L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], 5, nil, nil, nil, function() return E.db.unitframe.units[groupName].power.hideonnpc end, function(_, value) E.db.unitframe.units[groupName].power.hideonnpc = value updateFunc(UF, groupName, numUnits) end)
+ config.args.hideonnpc = ACH:Toggle(L["Text Toggle On NPC"], L["Power text will be hidden on NPC targets, in addition the name text will be repositioned to the power texts anchor point."], 6, nil, nil, nil, function() return E.db.unitframe.units[groupName].power.hideonnpc end, function(_, value) E.db.unitframe.units[groupName].power.hideonnpc = value updateFunc(UF, groupName, numUnits) end)
end
if groupName ~= 'party' and groupName ~= 'assist' and groupName ~= 'tank' and not strmatch(groupName, '^raid') then
- config.args.smartAuraPosition = ACH:Select(L["Smart Aura Position"], L["Will show Buffs in the Debuff position when there are no Debuffs active, or vice versa."], 6, C.Values.SmartAuraPositions)
+ config.args.smartAuraPosition = ACH:Select(L["Smart Aura Position"], L["Will show Buffs in the Debuff position when there are no Debuffs active, or vice versa."], 2, C.Values.SmartAuraPositions)
end
if groupName == 'arena' then
- config.args.pvpSpecIcon = ACH:Toggle(L["Spec Icon"], L["Display icon on arena frame indicating the units talent specialization or the units faction if inside a battleground."], 5, nil, nil, nil, nil, nil, function() return E.db.unitframe.units[groupName].orientation == 'MIDDLE' end)
+ config.args.pvpSpecIcon = ACH:Toggle(L["Spec Icon"], L["Display icon on arena frame indicating the units talent specialization or the units faction if inside a battleground."], 6, nil, nil, nil, nil, nil, function() return E.db.unitframe.units[groupName].orientation == 'MIDDLE' end)
else
- config.args.threatStyle = ACH:Select(L["Threat Display Mode"], nil, 7, threatValues)
+ config.args.threatGroup = ACH:Group(L["Threat"], nil, 50)
+ config.args.threatGroup.args.threatStyle = ACH:Select(L["Display Mode"], nil, 1, threatValues)
+ config.args.threatGroup.args.threatPrimary = ACH:Toggle(L["Primary Unit"], L["Requires the unit to be the primary target to display."], 2)
+ config.args.threatGroup.inline = true
+
+ if groupName == 'target' or groupName == 'focus' then
+ config.args.threatGroup.args.threatPlayer = ACH:Toggle(L["My Threat"], L["Threat similar to Blizzard, which displays your threat from the unit."], 3)
+ end
end
- config.args.positionsGroup = ACH:Group(L["Size and Positions"], nil, 100, nil, nil, function(info, value) E.db.unitframe.units[groupName][info[#info]] = value updateFunc(UF, groupName, numUnits) end)
- config.args.positionsGroup.inline = true
- config.args.positionsGroup.args.width = ACH:Range(L["Width"], nil, 1, { min = 40, max = 1000, step = 1 })
+ config.args.positionsGroup = ACH:Group(L["Size and Positions"], nil, 200, nil, nil, function(info, value) E.db.unitframe.units[groupName][info[#info]] = value updateFunc(UF, groupName, numUnits) end)
+ config.args.positionsGroup.args.width = ACH:Range(L["Width"], nil, 1, { min = 15, max = 1000, step = 1 })
config.args.positionsGroup.args.height = ACH:Range(L["Height"], nil, 2, { min = 5, max = 500, step = 1 })
if groupName == 'party' or strmatch(groupName, '^raid') then
@@ -983,14 +995,12 @@ local function GetOptionsTable_GeneralGroup(updateFunc, groupName, numUnits)
config.args.positionsGroup.args.verticalSpacing = ACH:Range(L["Vertical Spacing"], nil, 10, spacingNormal)
config.args.positionsGroup.args.groupSpacing = ACH:Range(L["Group Spacing"], L["Additional spacing between each individual group."], 11, spacingNormal, nil, nil, nil, nil, groupName == 'party')
- config.args.visibilityGroup = ACH:Group(L["Visibility"], nil, 200, nil, nil, function(info, value) E.db.unitframe.units[groupName][info[#info]] = value updateFunc(UF, groupName, numUnits) end)
- config.args.visibilityGroup.inline = true
+ config.args.visibilityGroup = ACH:Group(L["Visibility"], nil, 100, nil, nil, function(info, value) E.db.unitframe.units[groupName][info[#info]] = value updateFunc(UF, groupName, numUnits) end)
config.args.visibilityGroup.args.showPlayer = ACH:Toggle(L["Display Player"], L["When true, the header includes the player when not in a raid."], 0)
config.args.visibilityGroup.args.defaults = ACH:Execute(L["Restore Defaults"], function() return P.unitframe.units[groupName].visibility end, 1, function() E.db.unitframe.units[groupName].visibility = P.unitframe.units[groupName].visibility updateFunc(UF, groupName, numUnits) end, nil, true)
config.args.visibilityGroup.args.visibility = ACH:Input(L["Visibility"], L["VISIBILITY_DESC"], 2, nil, 'full')
config.args.sortingGroup = ACH:Group(L["Grouping & Sorting"], nil, 300, nil, nil, function(info, value) E.db.unitframe.units[groupName][info[#info]] = value updateFunc(UF, groupName, numUnits) end)
- config.args.sortingGroup.inline = true
config.args.sortingGroup.args.raidWideSorting = ACH:Toggle(L["Raid-Wide Sorting"], L["Enabling this allows raid-wide sorting however you will not be able to distinguish between groups."], 1, nil, nil, nil, nil, nil, nil, groupName == 'party')
config.args.sortingGroup.args.invertGroupingOrder = ACH:Toggle(L["Invert Grouping Order"], L["Enabling this inverts the grouping order when the raid is not full, this will reverse the direction it starts from."], 2, nil, nil, nil, nil, nil, nil, function() return not E.db.unitframe.units[groupName].raidWideSorting end)
config.args.sortingGroup.args.startFromCenter = ACH:Toggle(L["Start Near Center"], L["The initial group will start near the center and grow out."], 3, nil, nil, nil, nil, nil, nil, function() return groupName ~= 'party' and not E.db.unitframe.units[groupName].raidWideSorting end)
@@ -998,19 +1008,20 @@ local function GetOptionsTable_GeneralGroup(updateFunc, groupName, numUnits)
config.args.sortingGroup.args.sortDir = ACH:Select(L["Sort Direction"], nil, 5, { ASC = L["Ascending"], DESC = L["Descending"] })
config.args.sortingGroup.args.sortMethod = ACH:Select(L["Sort Method"], nil, 6, { NAME = L["Name"], INDEX = L["Index"] }, nil, nil, nil, nil, nil, function() return E.db.unitframe.units[groupName].groupBy == 'INDEX' or E.db.unitframe.units[groupName].groupBy == 'NAME' end)
- config.args.sortingGroup.args.roleSetup = ACH:Group(L["Role Order"], nil, 7, nil, nil, nil, nil, function() return E.db.unitframe.units[groupName].groupBy ~= 'ROLE' end)
- config.args.sortingGroup.args.roleSetup.inline = true
+ config.args.sortingGroup.args.roleSetup = ACH:Group(L["Role Order"], nil, 400, nil, nil, nil, nil, function() return E.db.unitframe.units[groupName].groupBy ~= 'ROLE' end)
config.args.sortingGroup.args.roleSetup.args.ROLE1 = ACH:Select(' ', nil, 1, roles)
config.args.sortingGroup.args.roleSetup.args.ROLE2 = ACH:Select(' ', nil, 2, roles)
config.args.sortingGroup.args.roleSetup.args.ROLE3 = ACH:Select(' ', nil, 3, roles)
+ config.args.sortingGroup.args.roleSetup.inline = true
- config.args.sortingGroup.args.classSetup = ACH:Group(L["Class Order"], nil, 7, nil, nil, nil, nil, function() return E.db.unitframe.units[groupName].groupBy ~= 'CLASS' end)
+ config.args.sortingGroup.args.classSetup = ACH:Group(L["Class Order"], nil, 500, nil, nil, nil, nil, function() return E.db.unitframe.units[groupName].groupBy ~= 'CLASS' end)
config.args.sortingGroup.args.classSetup.inline = true
for i = 1, NUM_CLASSES do
config.args.sortingGroup.args.classSetup.args['CLASS'..i] = ACH:Select(' ', nil, i, classTable)
end
else
+ config.args.positionsGroup.inline = true -- inline for others
config.args.positionsGroup.args.width.set = function(info, value) if E.db.unitframe.units[groupName].castbar and E.db.unitframe.units[groupName].castbar.width == E.db.unitframe.units[groupName][info[#info]] then E.db.unitframe.units[groupName].castbar.width = value end E.db.unitframe.units[groupName][info[#info]] = value updateFunc(UF, groupName, numUnits) end
if groupName == 'boss' or groupName == 'arena' then
@@ -1408,7 +1419,10 @@ local function GetUnitSettings(unitType, updateFunc, numUnits)
group.args.anchorPoint = ACH:Select(L["Position"], nil, 5, C.Values.AllPoints)
group.args.xOffset = ACH:Range(L["X-Offset"], nil, 6, { min = -500, max = 500, step = 1 })
group.args.yOffset = ACH:Range(L["Y-Offset"], nil, 7, { min = -500, max = 500, step = 1 })
- group.args.threatStyle = ACH:Select(L["Threat Display Mode"], nil, 8, threatValues)
+
+ group.args.threatGroup = ACH:Group(L["Threat"], nil, 20)
+ group.args.threatGroup.args.threatStyle = ACH:Select(L["Display Mode"], nil, 1, threatValues)
+ group.args.threatGroup.args.threatPrimary = ACH:Toggle(L["Primary Unit"], L["Requires the unit to be the primary target to display."], 2)
for subElement in pairs(defaults[element]) do
if subElement == 'colorPetByUnitClass' then
diff --git a/ElvUI_Options/ElvUI_Options_Classic.toc b/ElvUI_Options/ElvUI_Options_Classic.toc
index 9663afbab0..005fcdfaa1 100644
--- a/ElvUI_Options/ElvUI_Options_Classic.toc
+++ b/ElvUI_Options/ElvUI_Options_Classic.toc
@@ -2,7 +2,7 @@
## Notes: Powers the configuration window.|n|cffff3333Does not store any profile data.|r
## Author: Elv, Simpy
## Version: @project-version@
-## Interface: 11501
+## Interface: 11502
## RequiredDeps: ElvUI
## LoadOnDemand: 1
diff --git a/ElvUI_Options/Locales/deDE.lua b/ElvUI_Options/Locales/deDE.lua
index ce2a1ddc62..5aefa41708 100644
--- a/ElvUI_Options/Locales/deDE.lua
+++ b/ElvUI_Options/Locales/deDE.lua
@@ -16,6 +16,10 @@ L["LEFT"] = "Links"
L["RIGHT"] = "Rechts"
L["TOP"] = "Oben"
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = "%s und dann %s"
L["24-Hour Time"] = "24-Stunden Format"
L["2D"] = "2D"
@@ -1700,7 +1704,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = "Dieses wird den Inhalt des Filters auf Standard zurücksetzen. Jeder Zauber den du zum Filter hinzugefügt hast wird gelöscht."
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = "Dies funktioniert wie ein Makro. Sie können verschiedene Situationen ausführen, um die Aktionsleiste unterschiedlich anzuzeigen.\n Beispiel: '[combat] 2;'"
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = "Dieses funktioniert wie ein Makro, du kannst verschiedene Situationen verwenden um die Aktionsleiste zu zeigen/verstecken.\n Beispiel: '[combat] show;hide'"
-L["Threat Display Mode"] = "Bedrohungs Anzeigemodus"
+L["Display Mode"] = "Anzeigemodus"
L["Threat"] = "Bedrohung"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = "Schwellenwert (in Minuten) bevor der Text in MM:SS Format angezeigt wird. Setze auf -1 um niemals das Format zu ändern."
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = "Schwellenwert (in Sekunden) bevor der Text in MM:SS Format angezeigt wird. Setze auf -1 um niemals das Format zu ändern."
diff --git a/ElvUI_Options/Locales/enUS.lua b/ElvUI_Options/Locales/enUS.lua
index 3ca8e561a8..329a5a62c8 100644
--- a/ElvUI_Options/Locales/enUS.lua
+++ b/ElvUI_Options/Locales/enUS.lua
@@ -16,6 +16,10 @@ L["LEFT"] = true
L["RIGHT"] = true
L["TOP"] = true
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = true
L["24-Hour Time"] = true
L["2D"] = true
@@ -1700,7 +1704,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = true
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = true
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = true
-L["Threat Display Mode"] = true
+L["Display Mode"] = true
L["Threat"] = true
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = true
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = true
diff --git a/ElvUI_Options/Locales/esMX.lua b/ElvUI_Options/Locales/esMX.lua
index ae0d76c4a8..5d8881b47a 100644
--- a/ElvUI_Options/Locales/esMX.lua
+++ b/ElvUI_Options/Locales/esMX.lua
@@ -16,6 +16,10 @@ L["LEFT"] = true
L["RIGHT"] = true
L["TOP"] = true
+L["Primary Unit"] = "Unidad primaria"
+L["Requires the unit to be the primary target to display."] = "Requiere que la unidad sea el objetivo principal a mostrar."
+L["Pet Specific"] = "Específico para Mascotas"
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = "Utilice el filtro específico del perfil Indicador de Aura (Mascota) en lugar del filtro global Indicador de Aura."
L["%s and then %s"] = "%s y entonces %s"
L["24-Hour Time"] = "Tiempo de 24 horas"
L["2D"] = "2D"
@@ -522,7 +526,7 @@ L["Display messages from Guild and Whisper on AFK screen.\nThis chat can be drag
L["Display minimap panels below the minimap, used for datatexts."] = "Muestra los paneles del minimapa debajo del minimapa, usado para los textos de datos."
L["Display player titles."] = "Mostrar los títulos de los jugadores"
L["Display Player"] = "Mostrar Jugador"
-L["Display Style"] = true
+L["Display Style"] = "Estilo de visualización"
L["Display Target"] = "Mostrar Objetivo"
L["Display Target's Aura Duration, when there is no CD displaying."] = true
L["Display Text"] = "Mostrar Texto"
@@ -535,8 +539,8 @@ L["Display the target of current cast."] = true
L["Display the unit name who interrupted a spell on the castbar. You should increase the Time to Hold to show properly."] = true
L["Display the unit role in the tooltip."] = true
L["Display tick marks on the castbar for channelled spells. This will adjust automatically for spells like Drain Soul and add additional ticks based on haste."] = "Muestra las marcas de cada tick en la barra de lanzamiento para los hechizos canalizados. Esto se ajustará automáticamente con base en el hechizo y la celeridad."
-L["Display Types"] = true
-L["Displayed Currency"] = true
+L["Display Types"] = "Tipos de visualización"
+L["Displayed Currency"] = "Moneda mostrada"
L["Displays a detailed report of every item sold when enabled."] = true
L["Displays item info on center of item."] = true
L["Displays item level on equippable items."] = true
@@ -1292,7 +1296,7 @@ L["PROFESSIONS_CRAFTING"] = "Fabricación"
L["PROFESSIONS_FISHING"] = "Pesca"
L["Profile imported successfully!"] = true
L["Profile Name"] = true
-L["Profile Specific"] = true
+L["Profile Specific"] = "Perfil Específico"
L["Profile"] = "Perfile"
L["Profiles"] = "Perfiles"
L["Progress Bar"] = true
@@ -1701,7 +1705,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = true
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = true
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = true
-L["Threat Display Mode"] = "Modo de Despliegue de Amenaza"
+L["Display Mode"] = "Modo de Visualización"
L["Threat"] = "Amenaza"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = true
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = true
@@ -1807,7 +1811,7 @@ L["Use Shift+LeftClick to toggle between friendly or enemy or normal state. Norm
L["Use Static Position"] = true
L["Use Subzone Names"] = true
L["Use the custom backdrop color instead of a multiple of the main color."] = true
-L["Use the profile specific filter Aura Indicator (Profile) instead of the global filter Aura Indicator."] = true
+L["Use the profile specific filter Aura Indicator (Profile) instead of the global filter Aura Indicator."] = "Utilice el filtro específico del perfil Indicador de Aura (Perfil) en lugar del filtro global Indicador de Aura."
L["Use thin borders on certain nameplate elements."] = true
L["Use thin borders on certain unitframe elements."] = true
L["Use this backdrop color for units that are dead or ghosts."] = true
diff --git a/ElvUI_Options/Locales/frFR.lua b/ElvUI_Options/Locales/frFR.lua
index 803df5f032..65b9db4735 100644
--- a/ElvUI_Options/Locales/frFR.lua
+++ b/ElvUI_Options/Locales/frFR.lua
@@ -16,6 +16,10 @@ L["LEFT"] = "GAUCHE"
L["RIGHT"] = "DROITE"
L["TOP"] = "HAUT"
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = "%s et alors %s"
L["24-Hour Time"] = "Mode 24 Heures"
L["2D"] = true
@@ -1698,7 +1702,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = "Cela réinitialisera le contenu de ce filtre aux valeurs par défaut. Tous les sorts que vous avez ajoutés à ce filtre seront supprimés."
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = "Ceci fonctionne comme une macro, vous pouvez exécuter différentes situations pour faire défiler la barre d'action différemment.\n Exemple : '[combat] 2;'"
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = "Ceci fonctionne comme une macro, vous pouvez exécuter différentes situations pour faire afficher/masquer la barre d'action différemment.\n Exemple : '[combat] show;hide'"
-L["Threat Display Mode"] = "Affichage du Mode de Menace."
+L["Display Mode"] = "Mode d'affichage"
L["Threat"] = "Menace"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = "Seuil (en minutes) avant que le texte s'affiche au format HH:MM. Mettez -1 pour ne jamais changer ce format."
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = "Seuil (en secondes) avant que le texte s'affiche au format MM:SS. Mettez -1 pour ne jamais changer ce format."
diff --git a/ElvUI_Options/Locales/itIT.lua b/ElvUI_Options/Locales/itIT.lua
index b787f6bed7..d5808c8783 100644
--- a/ElvUI_Options/Locales/itIT.lua
+++ b/ElvUI_Options/Locales/itIT.lua
@@ -16,6 +16,10 @@ L["LEFT"] = true
L["RIGHT"] = true
L["TOP"] = true
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = true
L["24-Hour Time"] = true
L["2D"] = true
@@ -1700,7 +1704,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = true
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = true
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = true
-L["Threat Display Mode"] = "Modalità Visualizzazione Minaccia"
+L["Display Mode"] = "Modalità Visualizzazione"
L["Threat"] = "Minaccia"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = true
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = true
diff --git a/ElvUI_Options/Locales/koKR.lua b/ElvUI_Options/Locales/koKR.lua
index 186866a0bc..c03e251b93 100644
--- a/ElvUI_Options/Locales/koKR.lua
+++ b/ElvUI_Options/Locales/koKR.lua
@@ -16,6 +16,10 @@ L["LEFT"] = "왼쪽"
L["RIGHT"] = "오른쪽"
L["TOP"] = "위쪽"
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = "%s 이후 %s"
L["24-Hour Time"] = "24시제로 표시"
L["2D"] = "이미지"
@@ -1724,7 +1728,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = "필터의 내용이 기본값으로 재설정 됩니다. 이 필터에 추가한 모든 주문은 제거됩니다."
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = "이것은 매크로처럼 작동합니다. 다양한 상황을 실행하여 작업 표시줄을 다르게 페이지에 표시할 수 있습니다.\n 예: '[combat] 2;'"
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = "이것은 매크로처럼 작동하여 상황(일반/전투 등)에 따라 작업 표시줄을 다르게 표시하거나 숨길 수 있습니다.\n예: '[combat] show;hide'"
-L["Threat Display Mode"] = "어그로획득 표시방법"
+L["Display Mode"] = "표시방법"
L["Threat"] = "위협(어그로)"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = "시:분 형식으로 보이기 시작하는 시간값(분)입니다. 이 형식으로 변경하지 않으려면 -1로 설정하십시오."
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = "분:초 형식으로 보이기 시작하는 시간값(초)입니다. 이 형식으로 변경하지 않으려면 -1로 설정하십시오."
diff --git a/ElvUI_Options/Locales/ptBR.lua b/ElvUI_Options/Locales/ptBR.lua
index babbe76492..8e6d2778a3 100644
--- a/ElvUI_Options/Locales/ptBR.lua
+++ b/ElvUI_Options/Locales/ptBR.lua
@@ -16,6 +16,10 @@ L["LEFT"] = true
L["RIGHT"] = true
L["TOP"] = true
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = "%s e depois %s"
L["24-Hour Time"] = "24 horas"
L["2D"] = "2D"
@@ -1702,7 +1706,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = "Isto irá resetar todo o conteúdo de um filtro de volta para seu padrão. Qualquer feitiço que você adicionou a este filtro será removido."
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = true
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = true
-L["Threat Display Mode"] = "Modo de Exibição de Ameaça"
+L["Display Mode"] = "Modo de Exibição"
L["Threat"] = "Aggro"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = "Limiar (em minutos) antes do texto ser mostrado no formato HH:MM. Definir -1 para nunca mudar este formato."
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = "Limiar (em segundos) antes do texto ser mostrado no formato MM:SS. Definir -1 para nunca mudar este formato."
diff --git a/ElvUI_Options/Locales/ruRU.lua b/ElvUI_Options/Locales/ruRU.lua
index 5525e8bd23..28359a766a 100644
--- a/ElvUI_Options/Locales/ruRU.lua
+++ b/ElvUI_Options/Locales/ruRU.lua
@@ -16,6 +16,10 @@ L["LEFT"] = "Слева"
L["RIGHT"] = "Справа"
L["TOP"] = "Вверху"
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = "%s, а затем %s"
L["24-Hour Time"] = "24х часовой формат"
L["2D"] = "2D" --Doesn't need translation
@@ -1712,7 +1716,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = "Это сбросит фильтр на значения по умолчанию. Любые заклинания, добавленные в этот фильтр, будут удалены."
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = "Работает как макрос. Вы можете задать ситуации для показа нужной панели.\n Пример '[combat] 2;'"
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = "Работает как в макросах. Вы можете задать различные ситуации, при которых нужно показать/скрыть панель.\n Пример: '[combat] show;hide'"
-L["Threat Display Mode"] = "Режим отображения угрозы"
+L["Display Mode"] = "Режим отображения"
L["Threat"] = "Угроза"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = "Значение (в минутах), после которого текст восстановления перейдет в формат ЧЧ:ММ. Установите на -1, чтобы никогда не использовать данный формат."
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = "Значение (в секундах), после которого текст восстановления перейдет в формат ММ:СС. Установите на -1, чтобы никогда не использовать данный формат."
diff --git a/ElvUI_Options/Locales/trTR.lua b/ElvUI_Options/Locales/trTR.lua
index 803c852991..89a040a2f7 100644
--- a/ElvUI_Options/Locales/trTR.lua
+++ b/ElvUI_Options/Locales/trTR.lua
@@ -16,6 +16,10 @@ L["LEFT"] = true
L["RIGHT"] = true
L["TOP"] = true
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = "%s ve ardından %s"
L["24-Hour Time"] = "24 Saatlik Zaman"
L["2D"] = true
@@ -1702,7 +1706,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = "Bu, bu filtrenin icerigini varsayilana sifirlayacaktir. Bu filtreye eklediginiz tum buyuler kaldirilacaktir."
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = true
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = "Bu bir makro gibi calisir, eylem cubugunun farkli sekilde gosterilmesini/gizlenmesini saglamak icin farkli durumlar calistirabilirsiniz.\n ornek: '[catisma] goster;gizle'"
-L["Threat Display Mode"] = "Hiddet Goruntuleme Modu"
+L["Display Mode"] = "Ekran Modu"
L["Threat"] = "Hiddet"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = "Metnin SS:DD biciminde gosterilmesinden onceki esik (dakika cinsinden). Bu bicimi hicbir zaman degistirmemek icin -1'e ayarlayin."
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = "Metin MM:SS biciminde gosterilmeden onceki esik (saniye cinsinden). Bu bicimi hicbir zaman degistirmemek icin -1'e ayarlayin."
diff --git a/ElvUI_Options/Locales/zhCN.lua b/ElvUI_Options/Locales/zhCN.lua
index 65201b65fd..e6284c14e9 100644
--- a/ElvUI_Options/Locales/zhCN.lua
+++ b/ElvUI_Options/Locales/zhCN.lua
@@ -16,6 +16,10 @@ L["LEFT"] = true
L["RIGHT"] = true
L["TOP"] = true
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = "%s 于 %s"
L["24-Hour Time"] = "24小时制"
L["2D"] = "2D"
@@ -1702,7 +1706,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = "这会重置这个过滤器到初始状态. 你添加到这个过滤器的任何技能都会被移除."
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = true
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = "这就像一个宏,你可以运行不同的情况来让动作条以不同的方式显示/隐藏。\n 示例:'[combat] show;hide'"
-L["Threat Display Mode"] = "仇恨显示模式"
+L["Display Mode"] = "显示模式"
L["Threat"] = "仇恨"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = "文字以时:分格式显示的阈值(单位:分). 设为-1以禁用此格式."
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = "文字以分:秒格式显示的阈值(单位:秒). 设为-1以禁用此格式."
diff --git a/ElvUI_Options/Locales/zhTW.lua b/ElvUI_Options/Locales/zhTW.lua
index 1134407cac..7c6f8b0ec9 100644
--- a/ElvUI_Options/Locales/zhTW.lua
+++ b/ElvUI_Options/Locales/zhTW.lua
@@ -16,6 +16,10 @@ L["LEFT"] = true
L["RIGHT"] = true
L["TOP"] = true
+L["Primary Unit"] = true
+L["Requires the unit to be the primary target to display."] = true
+L["Pet Specific"] = true
+L["Use the profile specific filter Aura Indicator (Pet) instead of the global filter Aura Indicator."] = true
L["%s and then %s"] = "%s 與 %s"
L["24-Hour Time"] = "24小時制"
L["2D"] = "2D"
@@ -1701,7 +1705,7 @@ L["This will pin the voice buttons to the chat's tab panel. Unchecking it will c
L["This will reset the contents of this filter back to default. Any spell you have added to this filter will be removed."] = "這會重置這個過濾器到初始狀態. 你添加到這個過濾器的任何技能都會被刪除."
L["This works like a macro, you can run different situations to get the actionbar to page differently.\n Example: '[combat] 2;'"] = true
L["This works like a macro, you can run different situations to get the actionbar to show/hide differently.\n Example: '[combat] show;hide'"] = "這和巨集一樣工作, 能根據不同情況顯示/隱藏快捷列.\n例如: '[combat] show;hide'"
-L["Threat Display Mode"] = "仇恨顯示模式"
+L["Display Mode"] = "顯示模式"
L["Threat"] = "仇恨"
L["Threshold (in minutes) before text is shown in the HH:MM format. Set to -1 to never change to this format."] = "低於設定的閾值(單位:分)時, 將會採用 HH:MM 的格式. 設定為 -1 可禁用改格式"
L["Threshold (in seconds) before text is shown in the MM:SS format. Set to -1 to never change to this format."] = "低於設定的閾值(單位:秒)時, 將會採用 MM:SS 的格式. 設定為 -1 可禁用改格式"