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">