diff --git a/Bars/PrimaryResourceBar.lua b/Bars/PrimaryResourceBar.lua
index a32933b..453296f 100644
--- a/Bars/PrimaryResourceBar.lua
+++ b/Bars/PrimaryResourceBar.lua
@@ -26,9 +26,24 @@ function PrimaryResourceBarMixin:GetResource()
[DRUID_TREE_FORM] = Enum.PowerType.Mana,
[36] = Enum.PowerType.Mana, -- Tome of the Wilds: Treant Form
[DRUID_CAT_FORM] = Enum.PowerType.Energy,
- [DRUID_TRAVEL_FORM] = Enum.PowerType.Mana,
- [DRUID_ACQUATIC_FORM] = Enum.PowerType.Mana,
- [DRUID_FLIGHT_FORM] = Enum.PowerType.Mana,
+ [DRUID_TRAVEL_FORM] = {
+ [102] = Enum.PowerType.LunarPower, -- Balance: keep Lunar Power
+ [103] = Enum.PowerType.Mana, -- Feral
+ [104] = Enum.PowerType.Mana, -- Guardian
+ [105] = Enum.PowerType.Mana, -- Restoration
+ },
+ [DRUID_ACQUATIC_FORM] = {
+ [102] = Enum.PowerType.LunarPower,
+ [103] = Enum.PowerType.Mana,
+ [104] = Enum.PowerType.Mana,
+ [105] = Enum.PowerType.Mana,
+ },
+ [DRUID_FLIGHT_FORM] = {
+ [102] = Enum.PowerType.LunarPower,
+ [103] = Enum.PowerType.Mana,
+ [104] = Enum.PowerType.Mana,
+ [105] = Enum.PowerType.Mana,
+ },
[DRUID_MOONKIN_FORM_1] = Enum.PowerType.LunarPower,
[DRUID_MOONKIN_FORM_2] = Enum.PowerType.LunarPower,
},
diff --git a/Bars/SecondaryResourceBar.lua b/Bars/SecondaryResourceBar.lua
index f05cf44..656fb7a 100644
--- a/Bars/SecondaryResourceBar.lua
+++ b/Bars/SecondaryResourceBar.lua
@@ -34,6 +34,9 @@ function SecondaryResourceBarMixin:GetResource()
[102] = Enum.PowerType.Mana, -- Balance
},
[DRUID_CAT_FORM] = Enum.PowerType.ComboPoints,
+ [DRUID_TRAVEL_FORM] = { [102] = Enum.PowerType.Mana }, -- Balance: Mana as secondary
+ [DRUID_ACQUATIC_FORM] = { [102] = Enum.PowerType.Mana },
+ [DRUID_FLIGHT_FORM] = { [102] = Enum.PowerType.Mana },
[DRUID_MOONKIN_FORM_1] = Enum.PowerType.Mana,
[DRUID_MOONKIN_FORM_2] = Enum.PowerType.Mana,
},
@@ -59,7 +62,7 @@ function SecondaryResourceBarMixin:GetResource()
},
["WARLOCK"] = Enum.PowerType.SoulShards,
["WARRIOR"] = {
- [72] = "WHIRLWIND",
+ [72] = "WHIRLWIND", -- Fury: only shown when showWarriorWhirlwindBar is true (checked in GetResource)
},
}
@@ -68,6 +71,14 @@ function SecondaryResourceBarMixin:GetResource()
local resource = secondaryResources[playerClass]
+ -- Warrior: Whirlwind bar (Fury) only when class option is enabled
+ if playerClass == "WARRIOR" and type(resource) == "table" then
+ resource = resource[specID]
+ if resource == "WHIRLWIND" and not addonTable.GetClassOption("showWarriorWhirlwindBar") then
+ resource = nil
+ end
+ end
+
-- Druid: form-based
if playerClass == "DRUID" then
local formID = GetShapeshiftFormID()
diff --git a/Bars/TertiaryResourceBar.lua b/Bars/TertiaryResourceBar.lua
index b52d069..9621254 100644
--- a/Bars/TertiaryResourceBar.lua
+++ b/Bars/TertiaryResourceBar.lua
@@ -7,22 +7,21 @@ local TertiaryResourceBarMixin = Mixin({}, addonTable.PowerBarMixin)
function TertiaryResourceBarMixin:GetResource()
local playerClass = select(2, UnitClass("player"))
+ if playerClass == "DRUID" then
+ local showMana = addonTable.GetClassOption("showDruidManaInCatAndBearForm") or LEM:IsInEditMode()
+ if showMana then
+ local formID = GetShapeshiftFormID()
+ if formID == DRUID_CAT_FORM or formID == DRUID_BEAR_FORM then
+ return Enum.PowerType.Mana
+ end
+ end
+ return nil
+ end
+
local tertiaryResources = {
- ["DEATHKNIGHT"] = nil,
- ["DEMONHUNTER"] = nil,
- ["DRUID"] = nil,
- ["EVOKER"] = {
+ ["EVOKER"] = {
[1473] = "EBON_MIGHT", -- Augmentation
},
- ["HUNTER"] = nil,
- ["MAGE"] = nil,
- ["MONK"] = nil,
- ["PALADIN"] = nil,
- ["PRIEST"] = nil,
- ["ROGUE"] = nil,
- ["SHAMAN"] = nil,
- ["WARLOCK"] = nil,
- ["WARRIOR"] = nil,
}
local spec = C_SpecializationInfo.GetSpecialization()
@@ -30,12 +29,6 @@ function TertiaryResourceBarMixin:GetResource()
local resource = tertiaryResources[playerClass]
- -- Druid: form-based
- if playerClass == "DRUID" then
- local formID = GetShapeshiftFormID()
- resource = resource and resource[formID or 0]
- end
-
if type(resource) == "table" then
return resource[specID]
else
@@ -87,16 +80,18 @@ addonTable.RegisteredBar.TertiaryResourceBar = {
x = 0,
y = -80,
useResourceAtlas = false,
+ -- showDruidManaBar: intentionally not in defaults; nil until user enables it. Default false.
},
allowEditPredicate = function()
+ local playerClass = select(2, UnitClass("player"))
+ if playerClass == "DRUID" then
+ return true
+ end
+
local spec = C_SpecializationInfo.GetSpecialization()
local specID = C_SpecializationInfo.GetSpecializationInfo(spec)
return specID == 1473 -- Augmentation
end,
- loadPredicate = function()
- local playerClass = select(2, UnitClass("player"))
- return playerClass == "EVOKER"
- end,
lemSettings = function(bar, defaults)
local dbName = bar:GetConfig().dbName
diff --git a/Helpers/API.lua b/Helpers/API.lua
index 77a694d..2369739 100644
--- a/Helpers/API.lua
+++ b/Helpers/API.lua
@@ -36,6 +36,28 @@ addonTable.fullUpdateBars = function()
end
end
+-- Class options: stored in _Settings.ClassOptions, default false when nil
+addonTable.GetClassOption = function(key)
+ local opts = SenseiClassResourceBarDB and SenseiClassResourceBarDB["_Settings"] and SenseiClassResourceBarDB["_Settings"].ClassOptions
+ if opts and opts[key] ~= nil then
+ return opts[key]
+ end
+ return false
+end
+
+addonTable.SetClassOption = function(key, value)
+ if not SenseiClassResourceBarDB then
+ SenseiClassResourceBarDB = {}
+ end
+ if not SenseiClassResourceBarDB["_Settings"] then
+ SenseiClassResourceBarDB["_Settings"] = {}
+ end
+ if not SenseiClassResourceBarDB["_Settings"].ClassOptions then
+ SenseiClassResourceBarDB["_Settings"].ClassOptions = {}
+ end
+ SenseiClassResourceBarDB["_Settings"].ClassOptions[key] = (value == true)
+end
+
addonTable.decodeImportString = function(importString)
local prefix, version, encoded = importString:match("^([^:]+):(%d+):(.+)$")
if prefix ~= addonName then
diff --git a/Locales/enUS.lua b/Locales/enUS.lua
index 5012174..93fee7d 100644
--- a/Locales/enUS.lua
+++ b/Locales/enUS.lua
@@ -68,7 +68,7 @@ local baseLocale = {
["HEALTH_BAR_EDIT_MODE_NAME"] = "Health Bar",
["PRIMARY_POWER_BAR_EDIT_MODE_NAME"] = "Primary Resource Bar",
["SECONDARY_POWER_BAR_EDIT_MODE_NAME"] = "Secondary Resource Bar",
- ["TERNARY_POWER_BAR_EDIT_MODE_NAME"] = "Ebon Might Bar",
+ ["TERNARY_POWER_BAR_EDIT_MODE_NAME"] = "Tertiary Resource Bar",
-- Bar visibility category - Edit Mode
["CATEGORY_BAR_VISIBILITY"] = "Bar Visibility",
@@ -78,6 +78,13 @@ local baseLocale = {
["HIDE_WHILE_MOUNTED_OR_VEHICULE"] = "Hide While Mounted Or In Vehicule",
["HIDE_WHILE_MOUNTED_OR_VEHICULE_TOOLTIP"] = "Includes Druid Travel Form",
["HIDE_MANA_ON_ROLE"] = "Hide Mana On Role",
+ ["SETTINGS_CATEGORY_CLASS_OPTIONS"] = "Class Options",
+ ["DRUID_ALWAYS_SHOW_MANA"] = "Druid: show mana in cat and bear form.",
+ ["DRUID_ALWAYS_SHOW_MANA_TOOLTIP"] = "Show a mana bar in Cat Form and Bear Form",
+ ["WARRIOR_SHOW_WHIRLWIND_BAR"] = "Warrior: show Whirlwind bar (Fury)",
+ ["WARRIOR_SHOW_WHIRLWIND_BAR_TOOLTIP"] = "Show the Improved Whirlwind stacks bar for Fury warriors",
+ ["SETTINGS_OPTION_ENABLED"] = "Enabled",
+ ["SETTINGS_OPTION_DISABLED"] = "Disabled",
["HIDE_HEALTH_ON_ROLE"] = "Hide On Role",
["HIDE_MANA_ON_ROLE_PRIMARY_BAR_TOOLTIP"] = "Not effective on Arcane Mage",
["HIDE_BLIZZARD_UI"] = "Hide Blizzard UI",
diff --git a/Locales/koKR.lua b/Locales/koKR.lua
index 2db6c05..33f6885 100644
--- a/Locales/koKR.lua
+++ b/Locales/koKR.lua
@@ -67,7 +67,7 @@ local baseLocale = {
["HEALTH_BAR_EDIT_MODE_NAME"] = "생명력 바",
["PRIMARY_POWER_BAR_EDIT_MODE_NAME"] = "기본 자원 바",
["SECONDARY_POWER_BAR_EDIT_MODE_NAME"] = "보조 자원 바",
- ["TERNARY_POWER_BAR_EDIT_MODE_NAME"] = "칠흑의 힘 바",
+ ["TERNARY_POWER_BAR_EDIT_MODE_NAME"] = "3차 자원 바",
-- Bar visibility category - Edit Mode
["CATEGORY_BAR_VISIBILITY"] = "바 표시",
@@ -76,6 +76,13 @@ local baseLocale = {
["BAR_STRATA_TOOLTIP"] = "바가 표시되는 레이어를 설정합니다",
["HIDE_WHILE_MOUNTED_OR_VEHICULE"] = "탈것 또는 차량 탑승 시 숨기기",
["HIDE_WHILE_MOUNTED_OR_VEHICULE_TOOLTIP"] = "드루이드 이동 형태 포함",
+ ["SETTINGS_CATEGORY_CLASS_OPTIONS"] = "직업 옵션",
+ ["DRUID_ALWAYS_SHOW_MANA"] = "드루이드: 표범 및 곰 변신 시 마나 표시",
+ ["DRUID_ALWAYS_SHOW_MANA_TOOLTIP"] = "표범 변신과 곰 변신 시 마나 바 표시",
+ ["WARRIOR_SHOW_WHIRLWIND_BAR"] = "전사: 회오리바람 바 표시 (격노)",
+ ["WARRIOR_SHOW_WHIRLWIND_BAR_TOOLTIP"] = "격노 전사를 위한 강화된 회오리바람 중첩 바 표시",
+ ["SETTINGS_OPTION_ENABLED"] = "사용",
+ ["SETTINGS_OPTION_DISABLED"] = "사용 안 함",
["HIDE_MANA_ON_ROLE"] = "역할에 따라 마나 숨기기",
["HIDE_HEALTH_ON_ROLE"] = "역할에 따라 숨기기",
["HIDE_MANA_ON_ROLE_PRIMARY_BAR_TOOLTIP"] = "비전 마법사에게는 적용되지 않습니다",
diff --git a/Locales/ruRU.lua b/Locales/ruRU.lua
index fe6beb1..1330938 100644
--- a/Locales/ruRU.lua
+++ b/Locales/ruRU.lua
@@ -68,7 +68,7 @@ local baseLocale = {
["HEALTH_BAR_EDIT_MODE_NAME"] = "Полоса здоровья",
["PRIMARY_POWER_BAR_EDIT_MODE_NAME"] = "Полоса основного ресурса",
["SECONDARY_POWER_BAR_EDIT_MODE_NAME"] = "Полоса вторичного ресурса",
- ["TERNARY_POWER_BAR_EDIT_MODE_NAME"] = "Полоса Черной мощи",
+ ["TERNARY_POWER_BAR_EDIT_MODE_NAME"] = "Полоса третичного ресурса",
-- Bar visibility category - Edit Mode
["CATEGORY_BAR_VISIBILITY"] = "Видимость полосы",
@@ -77,6 +77,13 @@ local baseLocale = {
["BAR_STRATA_TOOLTIP"] = "Слой, на котором отрисовывается полоса",
["HIDE_WHILE_MOUNTED_OR_VEHICULE"] = "Скрывать при использовании транспорта",
["HIDE_WHILE_MOUNTED_OR_VEHICULE_TOOLTIP"] = "Включает формы передвижения друида",
+ ["SETTINGS_CATEGORY_CLASS_OPTIONS"] = "Опции класса",
+ ["DRUID_ALWAYS_SHOW_MANA"] = "Друид: показывать ману в обличьях кошки и медведя",
+ ["DRUID_ALWAYS_SHOW_MANA_TOOLTIP"] = "Показывать полосу маны в обличье кошки и обличье медведя",
+ ["WARRIOR_SHOW_WHIRLWIND_BAR"] = "Воин: показывать полосу Вихря (Неистовство)",
+ ["WARRIOR_SHOW_WHIRLWIND_BAR_TOOLTIP"] = "Показывать полосу стаков улучшенного Вихря для воинов Неистовства",
+ ["SETTINGS_OPTION_ENABLED"] = "Включено",
+ ["SETTINGS_OPTION_DISABLED"] = "Отключено",
["HIDE_MANA_ON_ROLE"] = "Скрывать ману по роли",
["HIDE_HEALTH_ON_ROLE"] = "Скрывать здоровье по роли",
["HIDE_MANA_ON_ROLE_PRIMARY_BAR_TOOLTIP"] = "Не работает на магах в спец. Тайная магия",
diff --git a/Locales/zhCN.lua b/Locales/zhCN.lua
index b79552e..969cf21 100644
--- a/Locales/zhCN.lua
+++ b/Locales/zhCN.lua
@@ -67,7 +67,7 @@ local baseLocale = {
["HEALTH_BAR_EDIT_MODE_NAME"] = "生命条",
["PRIMARY_POWER_BAR_EDIT_MODE_NAME"] = "主要资源条",
["SECONDARY_POWER_BAR_EDIT_MODE_NAME"] = "次要资源条",
- ["TERNARY_POWER_BAR_EDIT_MODE_NAME"] = "黑檀之力条",
+ ["TERNARY_POWER_BAR_EDIT_MODE_NAME"] = "第三资源条",
-- Bar visibility category - Edit Mode
["CATEGORY_BAR_VISIBILITY"] = "条形可见性",
@@ -76,6 +76,13 @@ local baseLocale = {
["BAR_STRATA_TOOLTIP"] = "条形渲染的层级",
["HIDE_WHILE_MOUNTED_OR_VEHICULE"] = "在坐骑或载具中隐藏",
["HIDE_WHILE_MOUNTED_OR_VEHICULE_TOOLTIP"] = "包括德鲁伊旅行形态",
+ ["SETTINGS_CATEGORY_CLASS_OPTIONS"] = "职业选项",
+ ["DRUID_ALWAYS_SHOW_MANA"] = "德鲁伊:在猎豹和熊形态下显示法力值",
+ ["DRUID_ALWAYS_SHOW_MANA_TOOLTIP"] = "在猎豹形态和熊形态下显示法力条",
+ ["WARRIOR_SHOW_WHIRLWIND_BAR"] = "战士:显示旋风斩条(狂暴)",
+ ["WARRIOR_SHOW_WHIRLWIND_BAR_TOOLTIP"] = "为狂暴战士显示强化旋风斩层数条",
+ ["SETTINGS_OPTION_ENABLED"] = "启用",
+ ["SETTINGS_OPTION_DISABLED"] = "禁用",
["HIDE_MANA_ON_ROLE"] = "在特定职责下隐藏法力值",
["HIDE_HEALTH_ON_ROLE"] = "在特定职责下隐藏",
["HIDE_MANA_ON_ROLE_PRIMARY_BAR_TOOLTIP"] = "对奥术法师无效",
diff --git a/README.md b/README.md
index 52258e7..74773b6 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,8 @@ Mana, Rage, Energy, Focus, Fury, Runic Power, Astral Power, Maelstrom Weapon and
* **Demon Hunter** → Soul Fragments (Devourer, Vengeance)
* **Hunter** → Tip of the Spear (Survival)
-**Ebon Might as a standalone bar**
+**Tertiary Resource Bar**
+Ebon Might (Augmentation Evoker), Mana in Cat/Bear form (Druid, optional), and more.
**Druid Form Adaptive Support:**
Automatically switches to Mana, Energy, Rage, or Astral Power depending on current shapeshift form.
diff --git a/Settings/ClassOptionsSettings.lua b/Settings/ClassOptionsSettings.lua
new file mode 100644
index 0000000..6bbaeee
--- /dev/null
+++ b/Settings/ClassOptionsSettings.lua
@@ -0,0 +1,66 @@
+local _, addonTable = ...
+
+local SettingsLib = addonTable.SettingsLib or LibStub("LibEQOLSettingsMode-1.0")
+local L = addonTable.L
+
+local featureId = "SCRB_CLASS_OPTIONS"
+
+addonTable.AvailableFeatures = addonTable.AvailableFeatures or {}
+table.insert(addonTable.AvailableFeatures, featureId)
+
+-- No category: add to root panel as an expandable section (like Power Colors / Health Colors)
+addonTable.FeaturesMetadata = addonTable.FeaturesMetadata or {}
+addonTable.FeaturesMetadata[featureId] = {}
+
+addonTable.SettingsPanelInitializers = addonTable.SettingsPanelInitializers or {}
+addonTable.SettingsPanelInitializers[featureId] = function(category)
+ if not SenseiClassResourceBarDB["_Settings"] then
+ SenseiClassResourceBarDB["_Settings"] = {}
+ end
+ if not SenseiClassResourceBarDB["_Settings"].ClassOptions then
+ SenseiClassResourceBarDB["_Settings"].ClassOptions = {}
+ end
+
+ local classOptionsSection = SettingsLib:CreateExpandableSection(category, {
+ name = L["SETTINGS_CATEGORY_CLASS_OPTIONS"],
+ expanded = true,
+ colorizeTitle = true,
+ })
+
+ -- Helper: setter may be called as (setting, value) or (value) depending on Blizzard API
+ local function makeClassOptionSetter(key)
+ return function(arg1, arg2)
+ local value = (type(arg2) == "boolean" and arg2) or (type(arg1) == "boolean" and arg1) or false
+ addonTable.SetClassOption(key, value)
+ addonTable.fullUpdateBars()
+ end
+ end
+
+ -- Druid: show mana in cat and bear form (checkbox)
+ SettingsLib:CreateCheckbox(category, {
+ key = "showDruidManaInCatAndBearForm",
+ variable = "SCRB_ClassOptions_showDruidManaInCatAndBearForm",
+ name = L["DRUID_ALWAYS_SHOW_MANA"],
+ desc = L["DRUID_ALWAYS_SHOW_MANA_TOOLTIP"],
+ default = false,
+ get = function()
+ return addonTable.GetClassOption("showDruidManaInCatAndBearForm")
+ end,
+ set = makeClassOptionSetter("showDruidManaInCatAndBearForm"),
+ parentSection = classOptionsSection,
+ })
+
+ -- Warrior: show Whirlwind bar (Fury) (checkbox)
+ SettingsLib:CreateCheckbox(category, {
+ key = "showWarriorWhirlwindBar",
+ variable = "SCRB_ClassOptions_showWarriorWhirlwindBar",
+ name = L["WARRIOR_SHOW_WHIRLWIND_BAR"],
+ desc = L["WARRIOR_SHOW_WHIRLWIND_BAR_TOOLTIP"],
+ default = false,
+ get = function()
+ return addonTable.GetClassOption("showWarriorWhirlwindBar")
+ end,
+ set = makeClassOptionSetter("showWarriorWhirlwindBar"),
+ parentSection = classOptionsSection,
+ })
+end
diff --git a/Settings/embeds.xml b/Settings/embeds.xml
index 9dd148e..b7d2934 100644
--- a/Settings/embeds.xml
+++ b/Settings/embeds.xml
@@ -2,4 +2,5 @@
..\..\Blizzard_SharedXML\UI.xsd">
+
\ No newline at end of file