mirror of
https://github.com/Bluewhale1337/HealBotBlue.git
synced 2026-07-27 09:44:44 +00:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c50bcd54f3 | |||
| a6c75b78f7 | |||
| 1e1e06163c | |||
| 2995ccbd32 | |||
| 8b3355656e |
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
## Interface: 11200
|
## Interface: 11200
|
||||||
## Title: HealBotBlue
|
## Title: HealBotBlue
|
||||||
## Version: 1.3
|
## Version: 1.3.2
|
||||||
## Author: Bluewhale
|
## Author: Bluewhale
|
||||||
## Notes: Adds panel with skinable bars for healing and decursive
|
## Notes: Adds panel with skinable bars for healing and decursive
|
||||||
## SavedVariables: HealBot_Config
|
## SavedVariables: HealBot_Config
|
||||||
|
|||||||
@@ -640,3 +640,15 @@ function HealBot_Generic_Patten(matchStr, matchPattern)
|
|||||||
end
|
end
|
||||||
return tmpTest, _HealsMin, _HealsMax;
|
return tmpTest, _HealsMin, _HealsMax;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function HealBot_GetShapeshiftForm()
|
||||||
|
local forms = GetNumShapeshiftForms();
|
||||||
|
if forms then
|
||||||
|
local i;
|
||||||
|
for i=1,forms do
|
||||||
|
local icon,name,active = GetShapeshiftFormInfo(i);
|
||||||
|
if active and not string.find(icon,"HumanoidForm") then return i; end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil;
|
||||||
|
end
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
HEALBOT_VERSION = "1.3";
|
HEALBOT_VERSION = "1.3.2";
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
-- ENGLISH --
|
-- ENGLISH --
|
||||||
|
|||||||
@@ -1,6 +1,110 @@
|
|||||||
-- HealBot_Model.lua
|
-- HealBot_Model.lua
|
||||||
-- Centralized Data Store and Observer System for HealBotBlue
|
-- Centralized Data Store and Observer System for HealBotBlue
|
||||||
|
|
||||||
|
-- Fix legacy client UIDropDownMenu crash when setting value/id/refreshing while dropdown is not open
|
||||||
|
if UIDropDownMenu_Refresh and not HealBot_UIDropDownMenu_Refresh_Fixed then
|
||||||
|
local orig_UIDropDownMenu_Refresh = UIDropDownMenu_Refresh
|
||||||
|
UIDropDownMenu_Refresh = function(frame, useValue, group)
|
||||||
|
local targetFrame = frame or this
|
||||||
|
if not targetFrame or type(targetFrame) ~= "table" then return end
|
||||||
|
if not UIDROPDOWNMENU_OPEN_MENU or (targetFrame.GetName and targetFrame:GetName() ~= UIDROPDOWNMENU_OPEN_MENU) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
orig_UIDropDownMenu_Refresh(targetFrame, useValue, group)
|
||||||
|
end
|
||||||
|
HealBot_UIDropDownMenu_Refresh_Fixed = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if UIDropDownMenu_Initialize and not HealBot_UIDropDownMenu_Initialize_Fixed then
|
||||||
|
local orig_UIDropDownMenu_Initialize = UIDropDownMenu_Initialize
|
||||||
|
UIDropDownMenu_Initialize = function(frame, initFunction, displayMode, level)
|
||||||
|
local targetFrame = frame or this
|
||||||
|
if not targetFrame or type(targetFrame) ~= "table" then return end
|
||||||
|
|
||||||
|
local name = targetFrame.GetName and targetFrame:GetName()
|
||||||
|
if UIDROPDOWNMENU_OPEN_MENU and name and name == UIDROPDOWNMENU_OPEN_MENU then
|
||||||
|
orig_UIDropDownMenu_Initialize(targetFrame, initFunction, displayMode, level)
|
||||||
|
else
|
||||||
|
local orig_AddButton = UIDropDownMenu_AddButton
|
||||||
|
UIDropDownMenu_AddButton = function(info, lvl)
|
||||||
|
-- Do nothing to prevent button accumulation in DropDownList1
|
||||||
|
end
|
||||||
|
orig_UIDropDownMenu_Initialize(targetFrame, initFunction, displayMode, level)
|
||||||
|
UIDropDownMenu_AddButton = orig_AddButton
|
||||||
|
end
|
||||||
|
end
|
||||||
|
HealBot_UIDropDownMenu_Initialize_Fixed = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if UIDropDownMenu_SetSelectedID and not HealBot_UIDropDownMenu_SetSelectedID_Fixed then
|
||||||
|
local orig_UIDropDownMenu_SetSelectedID = UIDropDownMenu_SetSelectedID
|
||||||
|
UIDropDownMenu_SetSelectedID = function(frame, id, useValue)
|
||||||
|
local targetFrame = frame or this
|
||||||
|
if not targetFrame or type(targetFrame) ~= "table" then return end
|
||||||
|
|
||||||
|
local name = targetFrame.GetName and targetFrame:GetName()
|
||||||
|
if UIDROPDOWNMENU_OPEN_MENU and name and name == UIDROPDOWNMENU_OPEN_MENU then
|
||||||
|
orig_UIDropDownMenu_SetSelectedID(targetFrame, id, useValue)
|
||||||
|
else
|
||||||
|
targetFrame.selectedID = id
|
||||||
|
targetFrame.selectedValue = nil
|
||||||
|
targetFrame.selectedName = nil
|
||||||
|
if targetFrame.initialize then
|
||||||
|
local buttons = {}
|
||||||
|
local orig_AddButton = UIDropDownMenu_AddButton
|
||||||
|
UIDropDownMenu_AddButton = function(info, level)
|
||||||
|
table.insert(buttons, info)
|
||||||
|
end
|
||||||
|
local temp_this = this
|
||||||
|
this = targetFrame
|
||||||
|
targetFrame.initialize(1)
|
||||||
|
this = temp_this
|
||||||
|
UIDropDownMenu_AddButton = orig_AddButton
|
||||||
|
if buttons[id] then
|
||||||
|
UIDropDownMenu_SetText(buttons[id].text, targetFrame)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
HealBot_UIDropDownMenu_SetSelectedID_Fixed = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if UIDropDownMenu_SetSelectedValue and not HealBot_UIDropDownMenu_SetSelectedValue_Fixed then
|
||||||
|
local orig_UIDropDownMenu_SetSelectedValue = UIDropDownMenu_SetSelectedValue
|
||||||
|
UIDropDownMenu_SetSelectedValue = function(frame, value, useValue)
|
||||||
|
local targetFrame = frame or this
|
||||||
|
if not targetFrame or type(targetFrame) ~= "table" then return end
|
||||||
|
|
||||||
|
local name = targetFrame.GetName and targetFrame:GetName()
|
||||||
|
if UIDROPDOWNMENU_OPEN_MENU and name and name == UIDROPDOWNMENU_OPEN_MENU then
|
||||||
|
orig_UIDropDownMenu_SetSelectedValue(targetFrame, value, useValue)
|
||||||
|
else
|
||||||
|
targetFrame.selectedID = nil
|
||||||
|
targetFrame.selectedValue = value
|
||||||
|
targetFrame.selectedName = nil
|
||||||
|
if targetFrame.initialize then
|
||||||
|
local buttons = {}
|
||||||
|
local orig_AddButton = UIDropDownMenu_AddButton
|
||||||
|
UIDropDownMenu_AddButton = function(info, level)
|
||||||
|
table.insert(buttons, info)
|
||||||
|
end
|
||||||
|
local temp_this = this
|
||||||
|
this = targetFrame
|
||||||
|
targetFrame.initialize(1)
|
||||||
|
this = temp_this
|
||||||
|
UIDropDownMenu_AddButton = orig_AddButton
|
||||||
|
for _, btn in ipairs(buttons) do
|
||||||
|
if btn.value == value then
|
||||||
|
UIDropDownMenu_SetText(btn.text, targetFrame)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
HealBot_UIDropDownMenu_SetSelectedValue_Fixed = true
|
||||||
|
end
|
||||||
|
|
||||||
HealBot_Model = {
|
HealBot_Model = {
|
||||||
observers = {},
|
observers = {},
|
||||||
units = {},
|
units = {},
|
||||||
|
|||||||
@@ -30,32 +30,11 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
|
|||||||
|
|
||||||
### Change Log
|
### Change Log
|
||||||
|
|
||||||
**v1.3**
|
**1.3.2**
|
||||||
* **General Options Layout & Renaming:** Relabeled "Healing panel options" to "Mana bar options:", moved the "For Healers Only" checkbox side-by-side with "Show Mana Bars", and renamed "Enable mouse over action bar" to "Hovercasting".
|
* **UIDropDownMenu Fixes:** Fixed client crash and button accumulation error on unopened dropdown menus in options.
|
||||||
* **OnShow Empty Panel Bug Fix:** Solved the rendering issue where the options panel would load empty initially until another tab was clicked.
|
|
||||||
* **Backdrop Alpha Reset Bug Fix:** Resolved a WoW API client quirk where showing the HealBot frame would reset the background color and alpha channel back to default white/transparent by calling `SetBackdropColor` after `SetBackdrop`.
|
|
||||||
* **Default Party Frame Toggle:** Added a "Hide Default Party Frames" toggle option (fully localized in English, German, French, and Korean) to hide Blizzard's default party frames. Integrated immediate toggling on joining/leaving groups.
|
|
||||||
* **Safety Guards & Crash Prevention:** Added safety guards to `HidePartyFrame` and `ShowPartyFrame` calls to prevent nil-value crashes when solo.
|
|
||||||
* **Checkbox State Initialization Fixes:** Fixed options menu bugs where "Hide when Solo", "Show Mana Bars", and "For Healers Only" checkboxes failed to reflect their saved configuration value when opening the menu.
|
|
||||||
* **CurrentPanel Nil Comparison Fix:** Fixed a startup Lua comparison crash by initializing `HealBot_Options_CurrentPanel` at the top of the main options file.
|
|
||||||
* **Monolithic Code Modularization (Options):** Split the massive, single-file options system (`HealBot_Options.xml`/`HealBot_Options.lua`) into 7 dedicated, content-named panel subfiles (`General`, `Spells`, `Healing`, `CDC`, `Skins`, `Buffs`, and `Chat`) to improve codebase modularity and stability.
|
|
||||||
* **Core Code Decoupling (MVC & Observer Pattern):** Modularized `HealBot.lua` and `HealBot_Action.lua` by decoupling them into dedicated service files: `Range`, `Comms`, `Aura`, `Spells`, `Events` controllers, and `Layout`, `Tooltip` views.
|
|
||||||
* **Scope Resolution Fix:** Promoted `HealBot_Options_ComboButtons_Button` to global scope in the base options file to resolve a `nil` comparison error when loading spell settings.
|
|
||||||
* **Global Scoping & Variable Promotion:** Promoted `CalcEquipBonus`, `HealBot_EquipChangeTimer`, `HealValue`, `InitSpells`, and `Delay_RecalcParty` to global scope in `HealBot.lua` to ensure cross-module visibility.
|
|
||||||
* **CTRA Resurrection Cancel Bug Fix:** Fixed a nil table indexing crash in the CTRA `RESNO` message handler in `HealBot_Controller_Comms.lua`.
|
|
||||||
* **Core Options Layout Correction:** Relocated the "Defaults" and "Close" buttons back into the parent options frame's container, ensuring they display consistently at the bottom of all configuration tabs.
|
|
||||||
* **UI Layout & Skins Alignment:** Reorganized all 13 opacity sliders on the Skins panel into a clean, uniform 2-column grid with explicit width/height sizes (`123 x 17`) to resolve layout overlaps. Realigned Chat tab buttons to stay within window bounds and corrected Color Picker anchors.
|
|
||||||
* **Startup Refresh Optimization:** Resolved initial loading lag where action bars would be missing by forcing an immediate UI refresh (`HealBot_RecalcSpells()`) once spell data loads.
|
|
||||||
* **Menu Cleanup:** Fixed Options panel checkboxes overlapping due to incorrect vertical spacing offsets.
|
|
||||||
* **Target Restoration Fix:** Fixed spell interruptions and "You don't have a target" errors when healing by implementing a 0.1-second delayed target restoration using `TargetLastEnemy` and `TargetLastTarget`.
|
|
||||||
* **Buff Watch Initialization & Options Fix:** Fixed a bug where buff watch failed to display missing buffs on login/UI reload when the player had no active buffs. Enabled immediate buff/aura rescanning when modifying options in the Buff watch configuration tab.
|
|
||||||
|
|
||||||
**v1.2.2**
|
**1.3.1**
|
||||||
* **White background fix** Fixed issue where white background would persist while alpha channel got changes.
|
* **Hotfix: missing helper function restored** Fixed issue with lua error for druids.
|
||||||
* **Alpha slider** Fixed bug where alpha slider wouldn't apply changes instantly.
|
|
||||||
|
|
||||||
**v1.2.1**
|
|
||||||
* **Initialization bug** Fixed issue where Action module would get stuck on infinite loop causing stack overflow.
|
|
||||||
|
|
||||||
**v1.3**
|
**v1.3**
|
||||||
* **General Options Layout & Renaming:** Relabeled "Healing panel options" to "Mana bar options:", moved the "For Healers Only" checkbox side-by-side with "Show Mana Bars", and renamed "Enable mouse over action bar" to "Hovercasting".
|
* **General Options Layout & Renaming:** Relabeled "Healing panel options" to "Mana bar options:", moved the "For Healers Only" checkbox side-by-side with "Show Mana Bars", and renamed "Enable mouse over action bar" to "Hovercasting".
|
||||||
|
|||||||
Reference in New Issue
Block a user