mirror of
https://github.com/Bluewhale1337/HealBotBlue.git
synced 2026-09-11 09:50:21 +00:00
Compare commits
15 Commits
327cd7a08c
...
v1.6.5
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a6a9e3283 | |||
| d021441b32 | |||
| 99997b711a | |||
| 496013ae9c | |||
| f7443fcdf0 | |||
| a0d435eb70 | |||
| 048970d1b7 | |||
| d5dec0f1f0 | |||
| ad302f299e | |||
| 6c4297c126 | |||
| 4f7a06ad6f | |||
| caa3a03bc3 | |||
| 5340eb253a | |||
| 5f015c89e5 | |||
| e20c5baf74 |
+1
-1
@@ -1,6 +1,6 @@
|
||||
## Interface: 11200
|
||||
## Title: HealBotBlue
|
||||
## Version: 1.6.2
|
||||
## Version: 1.6.5
|
||||
## Author: Bluewhale
|
||||
## Notes: Adds panel with skinable bars for healing and decursive
|
||||
## SavedVariablesPerCharacter: HealBot_Config
|
||||
|
||||
@@ -123,6 +123,9 @@ end
|
||||
|
||||
function HealBot_SplitString(str, delimiter)
|
||||
local result = {}
|
||||
if not delimiter or delimiter == "" then
|
||||
return {str}
|
||||
end
|
||||
local start_pos = 1
|
||||
while true do
|
||||
local end_pos = string.find(str, delimiter, start_pos, true)
|
||||
|
||||
+53
-13
@@ -18,6 +18,20 @@
|
||||
<OnClick>HealBot_Action_HealUnit_OnClick(this,arg1);</OnClick>
|
||||
</Scripts>
|
||||
<Frames>
|
||||
<StatusBar name="$parentBar2" inherits="HealBot_StatusBar">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
<Anchor point="TOPRIGHT" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</StatusBar>
|
||||
<StatusBar name="$parentBar" inherits="HealBot_StatusBar">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
||||
@@ -73,22 +87,48 @@
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
</Layer>
|
||||
</Layers>
|
||||
</StatusBar>
|
||||
<StatusBar name="$parentBar2" inherits="HealBot_StatusBar">
|
||||
<Texture name="$parentIcon6" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
<Anchor point="TOPRIGHT" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon5" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon7" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon6" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon8" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon7" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon9" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon8" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon10" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon9" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
</Layer>
|
||||
</Layers>
|
||||
</StatusBar>
|
||||
<StatusBar name="$parentBar3" inherits="HealBot_StatusBar" hidden="true">
|
||||
<Anchors>
|
||||
|
||||
@@ -160,19 +160,20 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
||||
if not HealBot_UnitIcons[unit] then
|
||||
HealBot_UnitIcons[unit] = {}
|
||||
end
|
||||
for j = 1, 5 do
|
||||
for j = 1, 10 do
|
||||
HealBot_UnitIcons[unit][j] = nil
|
||||
end
|
||||
local iconCount = 0
|
||||
local i = 1;
|
||||
HealBot_UnitDebuff[unit] = nil;
|
||||
while true do
|
||||
local debuff, tmp, debuff_type = UnitDebuff(unit, i, 1)
|
||||
if debuff then
|
||||
if iconCount < 5 then
|
||||
if iconCount < 10 then
|
||||
iconCount = iconCount + 1
|
||||
HealBot_UnitIcons[unit][iconCount] = debuff
|
||||
end
|
||||
if HealBot_CDCInc[UnitClass(unit)] == 1 and HealBot_DebuffWatch[debuff_type] then
|
||||
if HealBot_CDCInc[UnitClass(unit)] == 1 and debuff_type and HealBot_DebuffWatch[debuff_type] then
|
||||
HealBot_UnitDebuff[unit] = debuff_type
|
||||
DebuffType = debuff_type;
|
||||
if HealBot_DebuffPriority[debuff_type] then
|
||||
@@ -181,7 +182,6 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
||||
end
|
||||
i = i + 1;
|
||||
else
|
||||
if i == 1 then HealBot_UnitDebuff[unit] = nil; end
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -190,7 +190,7 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
||||
while true do
|
||||
local buff = UnitBuff(unit, b)
|
||||
if not buff then break end
|
||||
if HealBot_TrackedHoTs[buff] and iconCount < 5 then
|
||||
if HealBot_TrackedHoTs[buff] and iconCount < 10 then
|
||||
iconCount = iconCount + 1
|
||||
HealBot_UnitIcons[unit][iconCount] = buff
|
||||
end
|
||||
@@ -201,7 +201,7 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
||||
while true do
|
||||
local debuff = UnitDebuff(unit, d)
|
||||
if not debuff then break end
|
||||
if HealBot_TrackedHoTs[debuff] and iconCount < 5 then
|
||||
if HealBot_TrackedHoTs[debuff] and iconCount < 10 then
|
||||
iconCount = iconCount + 1
|
||||
HealBot_UnitIcons[unit][iconCount] = debuff
|
||||
end
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
-- Manages WoW Frame events and periodic updates, routing to respective services
|
||||
|
||||
HealBot_View_DirtyUnits = {}
|
||||
HealBot_View_DirtyPower = {}
|
||||
local HealBot_Timer1, HealsIn_Timer = 0, 0;
|
||||
HealBot_LastModState = ""
|
||||
|
||||
@@ -20,7 +21,7 @@ function HealBot_OnLoad(this)
|
||||
HealBot_View_DirtyUnits[unitID] = true
|
||||
end)
|
||||
HealBot_Model:RegisterObserver("UNIT_POWER_CHANGED", function(unitID)
|
||||
HealBot_View_DirtyUnits[unitID] = true
|
||||
HealBot_View_DirtyPower[unitID] = true
|
||||
end)
|
||||
HealBot_Model:RegisterObserver("UNIT_AURA_CHANGED", function(unitID)
|
||||
HealBot_View_DirtyUnits[unitID] = true
|
||||
@@ -78,9 +79,17 @@ function HealBot_OnUpdate(this, arg1)
|
||||
while unitID do
|
||||
HealBot_Action_RefreshButtons(unitID)
|
||||
HealBot_View_DirtyUnits[unitID] = nil
|
||||
HealBot_View_DirtyPower[unitID] = nil -- Skip fast path if doing full refresh
|
||||
unitID, _ = next(HealBot_View_DirtyUnits)
|
||||
end
|
||||
|
||||
local powerID, _ = next(HealBot_View_DirtyPower)
|
||||
while powerID do
|
||||
HealBot_Action_RefreshPower(powerID)
|
||||
HealBot_View_DirtyPower[powerID] = nil
|
||||
powerID, _ = next(HealBot_View_DirtyPower)
|
||||
end
|
||||
|
||||
if HealBot_EquipChangeTimer > 0 then
|
||||
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
|
||||
if HealBot_EquipChangeTimer <= 0 then
|
||||
|
||||
+2
-13
@@ -246,6 +246,7 @@ HealBot_ConfigDefaults = {
|
||||
bpadding = {[HEALBOT_SKINS_STD] = 10, ["HealBot Party"] = 10, ["HealBot Raid"] = 10, ["Alteric Valley"] = 10, ["Modern Flat"] = 10},
|
||||
bboffset = {[HEALBOT_SKINS_STD] = 16, ["HealBot Party"] = 16, ["HealBot Raid"] = 16, ["Alteric Valley"] = 16, ["Modern Flat"] = 3},
|
||||
bfontoutline = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 1},
|
||||
biconsize = {[HEALBOT_SKINS_STD] = 12, ["HealBot Party"] = 12, ["HealBot Raid"] = 12, ["Alteric Valley"] = 12, ["Modern Flat"] = 12},
|
||||
ShowTooltip = 1,
|
||||
ShowManaBars = 0,
|
||||
ManaBarsHealersOnly = 0,
|
||||
@@ -274,18 +275,6 @@ HEALBOT_ADDON_ID="HealBot_Heals"
|
||||
|
||||
HealBot_AbortButton=1;
|
||||
|
||||
HealBot_Groups = {
|
||||
["ITEMS"] = {
|
||||
HEALBOT_BANDAGES,
|
||||
HEALBOT_HEALING_POTIONS,
|
||||
HEALBOT_HEALTHSTONES,
|
||||
},
|
||||
["PALADIN"] = {
|
||||
HEALBOT_HOLY_LIGHT,
|
||||
HEALBOT_FLASH_OF_LIGHT,
|
||||
},
|
||||
}
|
||||
|
||||
HealBot_Spells = {
|
||||
-- Cast = secs until effect starts
|
||||
-- Channel = secs until caster available
|
||||
@@ -584,7 +573,7 @@ HealBot_Action_TooltipUnit=nil;
|
||||
HealBot_Ressing = {};
|
||||
HealBot_IamRessing = false;
|
||||
|
||||
-- Table Recycling Pool (Puppeteer-inspired)
|
||||
-- Table Recycling Pool
|
||||
local tablePool = {}
|
||||
function HealBot_GetTable()
|
||||
local t = table.remove(tablePool)
|
||||
|
||||
@@ -301,6 +301,9 @@ function HealBot_Options_SetSkins()
|
||||
HealBot_Options_BarAlphaInHeal:SetValue(HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]);
|
||||
HealBot_Options_BarTextureS:SetValue(HealBot_Config.btexture[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_BarHeightS:SetValue(HealBot_Config.bheight[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_AbortBarSize:SetValue(HealBot_Config.abortsize[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_FontHeight:SetValue(HealBot_Config.btextheight[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_IconSizeS:SetValue(HealBot_Config.biconsize[HealBot_Config.Current_Skin] or 12)
|
||||
HealBot_Options_BarWidthS:SetValue(HealBot_Config.bwidth[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_BarNumColsS:SetValue(HealBot_Config.numcols[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_BarMaxRowsS:SetValue((HealBot_Config.bmaxrows and HealBot_Config.bmaxrows[HealBot_Config.Current_Skin]) or 0)
|
||||
|
||||
@@ -44,6 +44,11 @@ function HealBot_Options_FontHeight_OnValueChanged(this)
|
||||
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
|
||||
HealBot_Action_ResetSkin()
|
||||
end
|
||||
function HealBot_Options_IconSizeS_OnValueChanged(this)
|
||||
HealBot_Config.biconsize[HealBot_Config.Current_Skin] = this:GetValue();
|
||||
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
|
||||
HealBot_Action_ResetSkin()
|
||||
end
|
||||
function HealBot_Options_AbortBarSize_OnValueChanged(this)
|
||||
HealBot_Config.abortsize[HealBot_Config.Current_Skin] = this:GetValue();
|
||||
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
|
||||
|
||||
@@ -360,6 +360,22 @@
|
||||
<OnValueChanged>HealBot_Options_FontHeight_OnValueChanged(this)</OnValueChanged>
|
||||
</Scripts>
|
||||
</Slider>
|
||||
<Slider name="HealBot_Options_IconSizeS" inherits="HealBot_Options_SliderTemplate">
|
||||
<Size>
|
||||
<AbsDimension x="123" y="17" />
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="10" y="0" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>HealBot_Options_val_OnLoad(this,"Icon size",5,30)</OnLoad>
|
||||
<OnValueChanged>HealBot_Options_IconSizeS_OnValueChanged(this)</OnValueChanged>
|
||||
</Scripts>
|
||||
</Slider>
|
||||
|
||||
<Slider name="HealBot_Options_BorderThicknessS" inherits="HealBot_Options_SliderTemplate">
|
||||
<Size>
|
||||
|
||||
+20
-7
@@ -27,11 +27,7 @@ end
|
||||
|
||||
function HealBot_HealthColor(unit, hlth, maxhlth)
|
||||
if HealBot_UnitDebuff[unit] then
|
||||
local debuff, tmp, debuff_type = UnitDebuff(unit, 1, 1)
|
||||
if not debuff then
|
||||
HealBot_UnitDebuff[unit] = nil;
|
||||
HealBot_UnitDebuff[unit .. "_debuff_texture"] = nil
|
||||
else
|
||||
local debuff_type = HealBot_UnitDebuff[unit]
|
||||
local dr = HealBot_Config.CDCBarColour[debuff_type].R
|
||||
local dg = HealBot_Config.CDCBarColour[debuff_type].G
|
||||
local db = HealBot_Config.CDCBarColour[debuff_type].B
|
||||
@@ -45,7 +41,6 @@ function HealBot_HealthColor(unit, hlth, maxhlth)
|
||||
end
|
||||
return dr, dg, db, HealBot_Config.Barcola[HealBot_Config.Current_Skin];
|
||||
end
|
||||
end
|
||||
|
||||
local text = UnitName(unit);
|
||||
if not HealBot_HealsIn[text] then
|
||||
@@ -251,11 +246,14 @@ function HealBot_Action_EnableButton(button)
|
||||
bar.txt:SetFont(fontName, fontHeight, "")
|
||||
end
|
||||
|
||||
for i = 1, 5 do
|
||||
local iconSize = HealBot_Config.biconsize[HealBot_Config.Current_Skin] or 12
|
||||
for i = 1, 10 do
|
||||
local icon = getglobal(button:GetName() .. "BarIcon" .. i)
|
||||
if icon then
|
||||
if HealBot_UnitIcons and HealBot_UnitIcons[unit] and HealBot_UnitIcons[unit][i] then
|
||||
icon:SetTexture(HealBot_UnitIcons[unit][i])
|
||||
icon:SetWidth(iconSize)
|
||||
icon:SetHeight(iconSize)
|
||||
icon:Show()
|
||||
else
|
||||
icon:Hide()
|
||||
@@ -305,6 +303,21 @@ function HealBot_Action_RefreshButtons(unit)
|
||||
end
|
||||
end
|
||||
|
||||
function HealBot_Action_RefreshPower(unit)
|
||||
if not unit or not HealBot_Action_UnitButtons[unit] then return end
|
||||
local state = HealBot_Model.units[unit]
|
||||
if not state then return end
|
||||
|
||||
for index, button in pairs(HealBot_Action_UnitButtons[unit]) do
|
||||
if not button.bar3 then button.bar3 = getglobal(button:GetName() .. "Bar3") end
|
||||
local bar3 = button.bar3
|
||||
if bar3 and bar3:IsVisible() then
|
||||
bar3:SetMinMaxValues(0, state.maxMana)
|
||||
bar3:SetValue(state.mana)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function HealBot_Action_PositionButton(button, OsetX, OsetY, bwidth, bheight, checked, header)
|
||||
local brspace = HealBot_Config.brspace[HealBot_Config.Current_Skin] or 3;
|
||||
if header then
|
||||
|
||||
@@ -7,6 +7,9 @@ Original HealBot, while being a staple healing addon in Wrath and later expansio
|
||||
|
||||
> **Performance First:** The raidframe is not library reliant - unlike popular raidframe replacement addons it doesn't rely at all on external frameworks. While this makes my work a bit harder this allows complete control over garbage collection and CPU use which makes it multiple times more stable and lightweight.
|
||||
|
||||
### Development version
|
||||
There is dev branch available, it might be slightly more unstabl but most of time it does have more features present. It's only merged into main when major feature set is implemented and stabilised.
|
||||
|
||||
### Reporting Errors
|
||||
Major errors will pop up a frame with error information. Take a screenshot and post comments.
|
||||
|
||||
@@ -46,6 +49,20 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
|
||||
|
||||
### Change Log
|
||||
|
||||
**v1.6.5**
|
||||
* **Performance Update - Mana Tracking** - Added a fast-path redraw pipeline for unit power changes. This massive optimization prevents full frame redraws when players naturally regenerate or consume mana, resolving severe FPS drops in 40-man raids while tracking mana.
|
||||
|
||||
**v1.6.4**
|
||||
* **Bug Fix - UI Opacity** - Fixed a rendering layering bug where incoming heals drew on top of actual health, causing the semi-transparent incoming heal bar to wash out the solid health bar.
|
||||
* **Bug Fix - CDC Colors** - Fixed health bar debuff coloring (CDC) by stopping `HealBot_HealthColor` from incorrectly querying debuffs directly, relying instead on cached debuff types.
|
||||
|
||||
|
||||
**v1.6.3**
|
||||
* **Hotfix string splitter** - added falback for string splitter if the the string is empty or nil.
|
||||
* **UI Update - Icon Limit** - Increased maximum tracked buffs/debuffs per unit from 5 to 10.
|
||||
* **UI Update - Customizable icon size** - Added an option to change size of HoT icons (default to 12px).
|
||||
* **Cleanup** - Removed dead code `HealBot_Groups` table.
|
||||
|
||||
**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).
|
||||
|
||||
Reference in New Issue
Block a user