diff --git a/HealBot_Action.lua b/HealBot_Action.lua index 53c9ab1..7f618ea 100644 --- a/HealBot_Action.lua +++ b/HealBot_Action.lua @@ -391,7 +391,8 @@ function HealBot_Action_SetHeightWidth(width,height,bwidth) end HealBot_Action:SetHeight(height); HealBot_ActionHeight = height; - HealBot_Action:SetWidth(width+bwidth+10) + local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10 + HealBot_Action:SetWidth(width+bwidth+bpadding) end function HealBot_Action_SetHealButton(index,unit) @@ -776,7 +777,7 @@ if not HealBot_IsFighting then if HealBot_Config.HideOptions==1 then HealBot_Action_OptionsButton:Hide(); else - HealBot_Action_OptionsButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10); + HealBot_Action_OptionsButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,bpadding); HealBot_Action_OptionsButton:Show(); MaxOffsetY = MaxOffsetY+30; end @@ -804,8 +805,8 @@ if not HealBot_IsFighting then HealBot_Action_AbortButton:SetWidth(width) HealBot_Action_AbortButton:SetHeight(bheight+abortsize); if HealBot_Config.HideOptions==1 then - HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10); - bar:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10); + HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,bpadding); + bar:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,bpadding); else HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action_OptionsButton","TOP",0,10); bar:SetPoint("BOTTOM","HealBot_Action_OptionsButton","TOP",0,10); @@ -815,7 +816,7 @@ if not HealBot_IsFighting then - HealBot_Action_SetHeightWidth(OffsetX, MaxOffsetY+10, bwidth); + HealBot_Action_SetHeightWidth(OffsetX, MaxOffsetY+bpadding, bwidth); end HealBot_Action_RefreshButtons(); end @@ -1304,3 +1305,4 @@ end + diff --git a/HealBot_Options.lua b/HealBot_Options.lua index 2ec5434..6a1d596 100644 --- a/HealBot_Options.lua +++ b/HealBot_Options.lua @@ -1701,62 +1701,68 @@ function HealBot_Options_Buff_Initialize() func = HealBot_Options_Buff_OnClick, value = i } - UIDropDownMenu_AddButton(info) - end - end -end - -function HealBot_Options_Buff_OnClick() - local frameName = UIDROPDOWNMENU_OPEN_MENU - local frame = getglobal(frameName) - local myClass = UnitClass("player") - local id = frame:GetID() - - if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end - if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end - HealBot_Config.BuffDropDowns[myClass][id] = this.value - - local text = "None" - if this.value > 0 then - text = HealBot_Buff_Spells[myClass][this.value] - end - - UIDropDownMenu_SetSelectedID(frame, this.value + 1) - UIDropDownMenu_SetText(text, frame) -end - -function HealBot_Options_SetBuffs() - local myClass = UnitClass("player") - if HealBot_Options_BuffWatch then - HealBot_Options_BuffWatch:SetChecked(HealBot_Config.BuffWatch) - HealBot_Options_BuffWatchInCombat:SetChecked(HealBot_Config.BuffWatchInCombat) - if HealBot_Config.BuffWatch == 0 then - HealBot_Options_BuffWatchInCombat:Disable() - else - HealBot_Options_BuffWatchInCombat:Enable() - end - end - - if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end - if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end - - for i = 1, 8 do - local dropDown = getglobal("HealBot_Options_Buff" .. i) - if dropDown then - local val = HealBot_Config.BuffDropDowns[myClass][i] or 0 - UIDropDownMenu_Initialize(dropDown, HealBot_Options_Buff_Initialize) - UIDropDownMenu_SetSelectedID(dropDown, val + 1) - end - end -end - - - - - - - - + UIDropDownMenu_AddButton(info) + end + end +end + + +function HealBot_Options_Buff_OnClick() + local frameName = UIDROPDOWNMENU_OPEN_MENU + local frame = getglobal(frameName) + local myClass = UnitClass("player") + local id = frame:GetID() + + if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end + if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end + HealBot_Config.BuffDropDowns[myClass][id] = this.value + + local text = "None" + if this.value > 0 then + text = HealBot_Buff_Spells[myClass][this.value] + end + + UIDropDownMenu_SetSelectedID(frame, this.value + 1) + UIDropDownMenu_SetText(text, frame) +end + +function HealBot_Options_SetBuffs() + local myClass = UnitClass("player") + if HealBot_Options_BuffWatch then + HealBot_Options_BuffWatch:SetChecked(HealBot_Config.BuffWatch) + HealBot_Options_BuffWatchInCombat:SetChecked(HealBot_Config.BuffWatchInCombat) + if HealBot_Config.BuffWatch == 0 then + HealBot_Options_BuffWatchInCombat:Disable() + else + HealBot_Options_BuffWatchInCombat:Enable() + end + end + + if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end + if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end + + for i = 1, 8 do + local dropDown = getglobal("HealBot_Options_Buff" .. i) + if dropDown then + local val = HealBot_Config.BuffDropDowns[myClass][i] or 0 + UIDropDownMenu_Initialize(dropDown, HealBot_Options_Buff_Initialize) + UIDropDownMenu_SetSelectedID(dropDown, val + 1) + end + + local selfCheck = getglobal("HealBot_Options_BuffSelf" .. i) + if selfCheck then + if HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[i] then + selfCheck:SetChecked(HealBot_Config.BuffWatchSelf[i]) + else + selfCheck:SetChecked(0) + end + end + end +end + + + + function HealBot_Options_FramePaddingS_OnValueChanged(this) if not HealBot_Config.bpadding then HealBot_Config.bpadding = {} end diff --git a/HealBot_Options.xml b/HealBot_Options.xml index d299f7c..aab421d 100644 --- a/HealBot_Options.xml +++ b/HealBot_Options.xml @@ -241,8 +241,8 @@ - - + + @@ -307,9 +307,9 @@ - + - + @@ -321,9 +321,9 @@ - - - + + + @@ -334,9 +334,9 @@ - - - + + + @@ -347,9 +347,9 @@ - - - + + + @@ -1739,9 +1739,9 @@ - - - + + + @@ -1843,9 +1843,9 @@ - - - + + + @@ -1858,9 +1858,9 @@ - - - + + + @@ -1888,9 +1888,9 @@ - - - + + + @@ -2575,9 +2575,9 @@ - - - + + + @@ -2588,11 +2588,11 @@ - - - - - + + + + + @@ -2621,9 +2621,9 @@ - - - + + + @@ -2634,11 +2634,11 @@ - - - - - + + + + + @@ -2667,9 +2667,9 @@ - - - + + + @@ -2680,11 +2680,11 @@ - - - - - + + + + + @@ -2713,9 +2713,9 @@ - - - + + + @@ -2726,11 +2726,11 @@ - - - - - + + + + + @@ -2759,9 +2759,9 @@ - - - + + + @@ -2857,3 +2857,8 @@ + + + + + diff --git a/README.md b/README.md index 9cbef9c..7489744 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ **HealBotBlue** By Bluewhale. +Original Vanilla HealBot, while being a staple healing addon in Wrath and later expansions, was in its infancy during Vanilla WoW. It was a memory and CPU hog that ate up resources, featured a clunky UI, and offered limited functions. To fix all of the above while still using it as a base framework, I refactored the entire codebase. The monolithic code structure was split to follow a more modern approach (MVC design pattern), making it more stable and easily editable. Additionally, the inefficient AURA scanning was replaced with lightweight (Observer Pattern) reactive programming. It now updates only what is necessary when a trigger fires, rather than performing clumsy, continuous scans of a 40-man raid. By doing so, I managed to throttle down CPU and memory usage significantly, placing it on par with modern addons. Additional functionalities are being added over time to provide a holistic, healer-centered raid frame. + + > **NOTE:** For HealBot to work correctly, the **Selfcast** feature in WoW options needs to be disabled. ### Reporting Errors @@ -19,6 +22,10 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\ ### Change Log +**v1.2.1** +* **UI Layout Fixes:** Fixed slider width constraints in the Skin menu causing layout overlaps. Realigned Chat tab buttons to ensure they do not exceed the window bounds. Fixed Color Picker anchors. +* **Menu Cleanup:** Fixed Options panel checkboxes overlapping due to incorrect vertical spacing offsets. + **v1.2** * **Class Colors & Dimming:** Frame text now inherits class colors with black outline for better visibility. Missing buffs intelligently dim the class color and turn the text yellow. * **Modern Skin Updates:** Fixed white background bugs in modern skins and brightened debuff indicators. @@ -33,11 +40,12 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\ * **Bug Fix:** Fixed division-by-zero math errors during UI scaling that caused the addon to crash. **v1.0** -* **Buff tracking** - Added submenu for tracking buffs on element -* ***Hot tracking with icons** - Hots and DoTs display on player bars -* **Incoming heals use newer protocol** -* **Chat functionalities** - modified chat functionalities for spellcast announcements -* **Mana Bars** - Mana bars for healers in the grid added togglable from options menu. +* **Buff tracking:** Added a submenu for tracking buffs on elements. +* **HoT tracking with icons:** HoTs and DoTs display on player bars. +* **Incoming heals:** Now using a newer protocol. +* **Chat functionalities:** Modified chat functionalities for spellcast announcements. +* **Mana Bars:** Mana bars for healers in the grid added, toggleable from the options menu. +