From 45ce2a024f660ac70e8374a348ad76581d6a9896 Mon Sep 17 00:00:00 2001
From: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
Date: Wed, 5 Aug 2026 22:02:53 +0200
Subject: [PATCH] feat: split Raid and Pet toggles and simplify raid bars
filter options
---
HealBot_Localization.en.lua | 5 +-
HealBot_Options.lua | 11 ----
HealBot_Options_Healing.lua | 38 ++++-------
HealBot_Options_Healing.xml | 13 ++++
HealBot_View_Layout.lua | 126 +++++++++++++++++-------------------
README.md | 4 ++
6 files changed, 94 insertions(+), 103 deletions(-)
diff --git a/HealBot_Localization.en.lua b/HealBot_Localization.en.lua
index 8afa9ab..cf44909 100644
--- a/HealBot_Localization.en.lua
+++ b/HealBot_Localization.en.lua
@@ -320,13 +320,14 @@ HEALBOT_OPTIONS_SOUND2 = "Sound 2"
HEALBOT_OPTIONS_SOUND3 = "Sound 3"
HEALBOT_OPTIONS_HEAL_BUTTONS = "Healing bars";
-HEALBOT_OPTIONS_EMERGFILTER = "Show extra bars for";
+HEALBOT_OPTIONS_EMERGFILTER = "Show raid bars for";
HEALBOT_OPTIONS_GROUPHEALS = "Group";
HEALBOT_OPTIONS_GROUPHEALS_LABEL = "Group Only";
HEALBOT_OPTIONS_TANKHEALS = "Main tanks";
HEALBOT_OPTIONS_TARGETHEALS = "Targets";
-HEALBOT_OPTIONS_EMERGENCYHEALS= "Raid / Extra";
+HEALBOT_OPTIONS_EMERGENCYHEALS= "Raid";
+HEALBOT_OPTIONS_PETHEALS = "Pets";
HEALBOT_OPTIONS_HEALLEVEL = "Healing Level";
HEALBOT_OPTIONS_ALERTLEVEL = "Alert Level";
HEALBOT_OPTIONS_OVERHEAL = "Show Abort button when overhealing"
diff --git a/HealBot_Options.lua b/HealBot_Options.lua
index 9a974cc..7c49722 100644
--- a/HealBot_Options.lua
+++ b/HealBot_Options.lua
@@ -7,18 +7,7 @@ HealBot_Options_CurrentPanel = 0;
HealBot_ColourObjWaiting = nil
HealBot_Options_EmergencyFilter_List = {
- HEALBOT_OPTIONS_MONITORNO,
HEALBOT_OPTIONS_MONITORALL,
- HEALBOT_DRUID,
- HEALBOT_HUNTER,
- HEALBOT_MAGE,
- HEALBOT_PALADIN,
- HEALBOT_PRIEST,
- HEALBOT_ROGUE,
- HEALBOT_SHAMAN,
- HEALBOT_WARLOCK,
- HEALBOT_WARRIOR,
- HEALBOT_OPTIONS_PETS,
HEALBOT_OPTIONS_MONITORMELEE,
HEALBOT_OPTIONS_MONITORRANGE,
HEALBOT_OPTIONS_MONITORHEALERS,
diff --git a/HealBot_Options_Healing.lua b/HealBot_Options_Healing.lua
index ce20d92..772f17b 100644
--- a/HealBot_Options_Healing.lua
+++ b/HealBot_Options_Healing.lua
@@ -33,6 +33,14 @@ function HealBot_Options_EmergencyHeals_OnClick(this)
HealBot_Config.EmergencyHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
+function HealBot_Options_PetHeals_OnLoad(this,text)
+ this.text = text
+ getglobal(this:GetName().."Text"):SetText(text);
+end
+function HealBot_Options_PetHeals_OnClick(this)
+ HealBot_Config.PetHeals = this:GetChecked() or 0;
+ HealBot_RecalcParty();
+end
function HealBot_Options_OverHeal_OnValueChanged(this)
HealBot_Config.OverHeal = HealBot_Options_Pct_OnValueChanged(this);
end
@@ -279,7 +287,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = 0;
HealBot_EmergInc[HEALBOT_WARLOCK] = 0;
HealBot_EmergInc[HEALBOT_WARRIOR] = 0;
- if HealBot_Config.EmergIncMonitor==2 then
+ if HealBot_Config.EmergIncMonitor==1 then
HealBot_EmergInc[HEALBOT_DRUID] = 1;
HealBot_EmergInc[HEALBOT_HUNTER] = 1;
HealBot_EmergInc[HEALBOT_MAGE] = 1;
@@ -289,27 +297,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
HealBot_EmergInc[HEALBOT_WARLOCK] = 1;
HealBot_EmergInc[HEALBOT_WARRIOR] = 1;
- elseif HealBot_Config.EmergIncMonitor==3 then
- HealBot_EmergInc[HEALBOT_DRUID] = 1;
- elseif HealBot_Config.EmergIncMonitor==4 then
- HealBot_EmergInc[HEALBOT_HUNTER] = 1;
- elseif HealBot_Config.EmergIncMonitor==5 then
- HealBot_EmergInc[HEALBOT_MAGE] = 1;
- elseif HealBot_Config.EmergIncMonitor==6 then
- HealBot_EmergInc[HEALBOT_PALADIN] = 1;
- elseif HealBot_Config.EmergIncMonitor==7 then
- HealBot_EmergInc[HEALBOT_PRIEST] = 1;
- elseif HealBot_Config.EmergIncMonitor==8 then
- HealBot_EmergInc[HEALBOT_ROGUE] = 1;
- elseif HealBot_Config.EmergIncMonitor==9 then
- HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
- elseif HealBot_Config.EmergIncMonitor==10 then
- HealBot_EmergInc[HEALBOT_WARLOCK] = 1;
- elseif HealBot_Config.EmergIncMonitor==11 then
- HealBot_EmergInc[HEALBOT_WARRIOR] = 1;
- elseif HealBot_Config.EmergIncMonitor==12 then
- -- Pets: no player classes enabled (handled separately in layout)
- elseif HealBot_Config.EmergIncMonitor==13 then
+ elseif HealBot_Config.EmergIncMonitor==2 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncMelee[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE];
@@ -319,7 +307,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR];
- elseif HealBot_Config.EmergIncMonitor==14 then
+ elseif HealBot_Config.EmergIncMonitor==3 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE];
@@ -329,7 +317,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR];
- elseif HealBot_Config.EmergIncMonitor==15 then
+ elseif HealBot_Config.EmergIncMonitor==4 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE];
@@ -339,7 +327,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR];
- elseif HealBot_Config.EmergIncMonitor==16 then
+ elseif HealBot_Config.EmergIncMonitor==5 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE];
diff --git a/HealBot_Options_Healing.xml b/HealBot_Options_Healing.xml
index ef1d845..18d0a13 100644
--- a/HealBot_Options_Healing.xml
+++ b/HealBot_Options_Healing.xml
@@ -95,6 +95,19 @@
HealBot_Options_EmergencyHeals_OnClick(this)
+
+
+
+
+
+
+
+
+
+ HealBot_Options_PetHeals_OnLoad(this,HEALBOT_OPTIONS_PETHEALS)
+ HealBot_Options_PetHeals_OnClick(this)
+
+
diff --git a/HealBot_View_Layout.lua b/HealBot_View_Layout.lua
index 8637cd1..76c56e7 100644
--- a/HealBot_View_Layout.lua
+++ b/HealBot_View_Layout.lua
@@ -602,7 +602,7 @@ function HealBot_Action_PartyChanged()
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
- if HealBot_Config.EmergIncMonitor == 2 then
+ if HealBot_Config.EmergIncMonitor == 1 then
if GetNumRaidMembers() > 0 then
for j = 1, 40 do
local PossibleEmerg = 1;
@@ -653,50 +653,7 @@ function HealBot_Action_PartyChanged()
end
end
end
- elseif HealBot_Config.EmergIncMonitor == 12 then
- if GetNumRaidMembers() > 0 then
- for j = 1, 40 do
- local unit = "raidpet" .. j;
- if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
- local ownerIndex = j;
- local name = UnitName(unit) or "Pet";
- local _, _, subgroup = GetRaidRosterInfo(ownerIndex);
- subgroup = subgroup or 1;
-
- if HealBot_Config.ExtraOrder == 1 then
- order[unit] = name;
- elseif HealBot_Config.ExtraOrder == 2 then
- order[unit] = HEALBOT_OPTIONS_PETS;
- elseif HealBot_Config.ExtraOrder == 3 then
- order[unit] = subgroup;
- else
- order[unit] = 0 - UnitHealthMax(unit);
- if UnitHealthMax(unit) > TempMaxH then TempMaxH = UnitHealthMax(unit); end
- end
- table.insert(units, unit);
- numBars = numBars + 1;
- end
- end
- else
- local petUnits = { "pet", "partypet1", "partypet2", "partypet3", "partypet4" };
- for _, unit in ipairs(petUnits) do
- if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
- local name = UnitName(unit) or "Pet";
- if HealBot_Config.ExtraOrder == 1 then
- order[unit] = name;
- elseif HealBot_Config.ExtraOrder == 2 then
- order[unit] = HEALBOT_OPTIONS_PETS;
- elseif HealBot_Config.ExtraOrder == 3 then
- order[unit] = 1;
- else
- order[unit] = 0 - UnitHealthMax(unit);
- if UnitHealthMax(unit) > TempMaxH then TempMaxH = UnitHealthMax(unit); end
- end
- table.insert(units, unit);
- numBars = numBars + 1;
- end
- end
- end
+
else
if GetNumRaidMembers() > 0 then
for j = 1, 40 do
@@ -763,25 +720,29 @@ function HealBot_Action_PartyChanged()
local TempSort = "init"
TempMaxH = math.ceil(TempMaxH / 1000) * 1000;
- if GetNumRaidMembers() > 0 or HealBot_Config.EmergIncMonitor == 12 then
- for j = 1, 40 do
- if not units[j] then break end
- local name, rank, subgroup, level, class, fileName, zone, online, isDead;
- local ownerIndex = nil;
- if string.sub(units[j], 1, 7) == "raidpet" then
- ownerIndex = tonumber(string.sub(units[j], 8));
- elseif string.sub(units[j], 1, 4) == "raid" then
- ownerIndex = tonumber(string.sub(units[j], 5));
- end
- if ownerIndex then
- name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(ownerIndex);
- end
-
- if string.sub(units[j], 1, 7) == "raidpet" or string.sub(units[j], 1, 8) == "partypet" or units[j] == "pet" then
- name = UnitName(units[j]) or "Pet";
- class = HEALBOT_OPTIONS_PETS;
- subgroup = subgroup or 1;
- end
+ for j = 1, 40 do
+ if not units[j] then break end
+ local name, rank, subgroup, level, class, fileName, zone, online, isDead;
+ local ownerIndex = nil;
+ if string.sub(units[j], 1, 7) == "raidpet" then
+ ownerIndex = tonumber(string.sub(units[j], 8));
+ elseif string.sub(units[j], 1, 4) == "raid" then
+ ownerIndex = tonumber(string.sub(units[j], 5));
+ end
+
+ if ownerIndex then
+ name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(ownerIndex);
+ else
+ name = UnitName(units[j]) or "not known";
+ class = UnitClass(units[j]) or "not known";
+ subgroup = 1;
+ end
+
+ if string.sub(units[j], 1, 7) == "raidpet" or string.sub(units[j], 1, 8) == "partypet" or units[j] == "pet" then
+ name = UnitName(units[j]) or "Pet";
+ class = HEALBOT_OPTIONS_PETS;
+ subgroup = subgroup or 1;
+ end
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 and HealBot_Config.ExtraOrder == 2 and TempSort ~= class then
TempSort = class
@@ -805,12 +766,47 @@ function HealBot_Action_PartyChanged()
HealBot_Action_SetHealButton(i, units[j]);
if i == last then break end
end
- end
end
if numBars == ExtraValid + 1 and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = nil;
numBars = numBars - 1;
end
+
+ last = last + 40
+ local PetsValid = numBars;
+ if HealBot_Config.PetHeals == 1 then
+ if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
+ HeaderPos[i + 1] = HEALBOT_OPTIONS_PETHEALS
+ numBars = numBars + 1;
+ numHeaders = numHeaders + 1;
+ end
+ if GetNumRaidMembers() > 0 then
+ for j = 1, 40 do
+ local unit = "raidpet" .. j;
+ if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
+ i = i + 1;
+ HealBot_Action_SetHealButton(i, unit);
+ numBars = numBars + 1;
+ end
+ if i == last then break end
+ end
+ else
+ local petUnits = { "pet", "partypet1", "partypet2", "partypet3", "partypet4" };
+ for _, unit in ipairs(petUnits) do
+ if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
+ i = i + 1;
+ HealBot_Action_SetHealButton(i, unit);
+ numBars = numBars + 1;
+ end
+ if i == last then break end
+ end
+ end
+ end
+ if numBars == PetsValid + 1 and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
+ HeaderPos[PetsValid + 1] = nil;
+ numBars = numBars - 1;
+ numHeaders = numHeaders - 1;
+ end
local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10
local OffsetY = bpadding;
diff --git a/README.md b/README.md
index eb5874e..0085b0a 100644
--- a/README.md
+++ b/README.md
@@ -46,6 +46,10 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
### Change Log
+**v1.6.2**
+* **Hotfix - raid and party frames** - if getNumRaidMembers() > 0 wrapper around extra bars stopped from displaying all frames blocked from displaying Extras\Raid.
+* **UI Update - Raid & Pets Split** - Split the "Raid / Extra" toggle into separate "Raid" and "Pets" toggles. Simplified the raid bars filter dropdown to core options (All, Melee, Ranged, Heals, Custom).
+
**v1.6.1**
* **Hotfix - pet frames** - With class colours toggled extra frames for player pets were given some classy mint colour.
* **Hotfi - raidframes in combat** - Modfied how frames behave when player leaves during combat.