Minor bugfixes to target restoration, layout, Buff tracking

This commit is contained in:
Bluewhale1337
2026-06-30 18:18:01 +02:00
parent b8b6a57ef8
commit e567c0f394
18 changed files with 389 additions and 194 deletions
+39 -9
View File
@@ -37,7 +37,25 @@ function HealBot_Action_MustHealSome()
end); end);
end end
function HealBot_GetRezSpellForClass()
local _, class = UnitClass("player");
if class == "PRIEST" then return HEALBOT_RESURRECTION;
elseif class == "DRUID" then return HEALBOT_REBIRTH;
elseif class == "PALADIN" then return HEALBOT_REDEMPTION;
elseif class == "SHAMAN" then return HEALBOT_ANCESTRALSPIRIT;
end
return nil;
end
function HealBot_CanHeal(unit) function HealBot_CanHeal(unit)
if UnitIsDeadOrGhost(unit) then
local rezSpell = HealBot_GetRezSpellForClass();
if rezSpell and HealBot_GetHealSpell(unit, rezSpell) then
return true;
end
return false;
end
local SHeal = HealBot_ShouldHeal(unit) local SHeal = HealBot_ShouldHeal(unit)
if SHeal then if SHeal then
local spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Left")) local spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Left"))
@@ -103,6 +121,15 @@ function HealBot_Action_HealUnit_OnClick(this,button)
local decode_button = HealBot_Decode_Button(button); local decode_button = HealBot_Decode_Button(button);
local pattern = HealBot_Action_SpellPattern(decode_button); local pattern = HealBot_Action_SpellPattern(decode_button);
-- Resurrection override on dead target
if UnitIsDeadOrGhost(this.unit) then
local rezSpell = HealBot_GetRezSpellForClass();
if rezSpell then
HealBot_CastSpellOnFriend(rezSpell, this.unit);
return
end
end
-- Buff casting override -- Buff casting override
if HealBot_Config.BuffWatch == 1 then if HealBot_Config.BuffWatch == 1 then
local inCombat = UnitAffectingCombat("player") local inCombat = UnitAffectingCombat("player")
@@ -174,12 +201,7 @@ function HealBot_Action_OnShow(this)
PlaySound("igAbilityOpen"); PlaySound("igAbilityOpen");
end end
HealBot_Config.ActionVisible = 1 HealBot_Config.ActionVisible = 1
HealBot_Action:SetBackdropColor( local borderStyle = HealBot_Config.bborder[HealBot_Config.Current_Skin] or 2
HealBot_Config.backcolr[HealBot_Config.Current_Skin],
HealBot_Config.backcolg[HealBot_Config.Current_Skin],
HealBot_Config.backcolb[HealBot_Config.Current_Skin],
HealBot_Config.backcola[HealBot_Config.Current_Skin]);
local borderStyle = HealBot_Config.bborder[HealBot_Config.Current_Skin] or 2
if borderStyle == 0 then if borderStyle == 0 then
HealBot_Action:SetBackdropBorderColor(0,0,0,0); HealBot_Action:SetBackdropBorderColor(0,0,0,0);
elseif borderStyle == 1 then elseif borderStyle == 1 then
@@ -207,11 +229,18 @@ function HealBot_Action_OnShow(this)
HealBot_Config.borcolb[HealBot_Config.Current_Skin], HealBot_Config.borcolb[HealBot_Config.Current_Skin],
HealBot_Config.borcola[HealBot_Config.Current_Skin]); HealBot_Config.borcola[HealBot_Config.Current_Skin]);
end end
HealBot_Action:SetBackdropColor(
HealBot_Config.backcolr[HealBot_Config.Current_Skin],
HealBot_Config.backcolg[HealBot_Config.Current_Skin],
HealBot_Config.backcolb[HealBot_Config.Current_Skin],
HealBot_Config.backcola[HealBot_Config.Current_Skin]);
end end
function HealBot_Action_OnHide(this) function HealBot_Action_OnHide(this)
HealBot_StopMoving(this); HealBot_StopMoving(this);
HealBot_Config.ActionVisible = 0 if not this.ProgrammaticHide then
HealBot_Config.ActionVisible = 0
end
end end
function HealBot_Action_OnMouseDown(this,button) function HealBot_Action_OnMouseDown(this,button)
@@ -245,6 +274,7 @@ function HealBot_Action_OnDragStop(this)
end end
-- http://www.flexbarforums.com/viewtopic.php?t=66 -- http://www.flexbarforums.com/viewtopic.php?t=66
-- no idea what it was link is dead
function HealBot_Action_OnKey(this,key,state) function HealBot_Action_OnKey(this,key,state)
local command = GetBindingAction(key); local command = GetBindingAction(key);
if command then if command then
@@ -262,5 +292,5 @@ end
+39 -3
View File
@@ -34,6 +34,22 @@ function HealBot_RegisterThis(this)
end end
function HealBot_OnUpdate(this, arg1) function HealBot_OnUpdate(this, arg1)
if HealBot_TargetRestorePending then
HealBot_TargetRestoreTimer = HealBot_TargetRestoreTimer + arg1;
if HealBot_TargetRestoreTimer >= 0.1 then
local pending = HealBot_TargetRestorePending;
HealBot_TargetRestorePending = nil;
HealBot_TargetRestoreTimer = 0;
if pending.type == "enemy" then
TargetLastEnemy();
elseif pending.type == "friend" then
TargetLastTarget();
elseif pending.type == "clear" then
ClearTarget();
end
end
end
-- Process Dirty Queue for MVC View -- Process Dirty Queue for MVC View
if next(HealBot_View_DirtyUnits) ~= nil then if next(HealBot_View_DirtyUnits) ~= nil then
for unitID in pairs(HealBot_View_DirtyUnits) do for unitID in pairs(HealBot_View_DirtyUnits) do
@@ -209,11 +225,27 @@ function HealBot_OnEvent_VariablesLoaded(this)
end end
HealBot_InitData(); HealBot_InitData();
if not HealBot_PartyFrameHooked then
local origShowPartyFrame = ShowPartyFrame;
ShowPartyFrame = function()
if HealBot_Config.HideParty == 1 then
if HidePartyFrame then HidePartyFrame(); end
elseif origShowPartyFrame then
origShowPartyFrame();
end
end
HealBot_PartyFrameHooked = true;
end
if HealBot_Config.HideParty == 1 and HidePartyFrame then
HidePartyFrame();
end
if class == "PRIEST" or class == "DRUID" or class == "PALADIN" or class == "SHAMAN" then if class == "PRIEST" or class == "DRUID" or class == "PALADIN" or class == "SHAMAN" then
HealBot_BonusScanner:ScanEquipment(); HealBot_BonusScanner:ScanEquipment();
if HealBot_Config.ActionVisible == 1 then HealBot_Action:Show() end HealBot_Action_ShowFrame();
this:RegisterEvent("ZONE_CHANGED_NEW_AREA"); this:RegisterEvent("ZONE_CHANGED_NEW_AREA");
this:RegisterEvent("PLAYER_REGEN_DISABLED"); this:RegisterEvent("PLAYER_REGEN_DISABLED");
@@ -268,9 +300,13 @@ end
function HealBot_OnEvent_PlayerRegenDisabled(this) function HealBot_OnEvent_PlayerRegenDisabled(this)
HealBot_RecalcParty(); HealBot_RecalcParty();
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
if HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then HealBot_Action:Hide(); end; if HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
end;
else else
HealBot_Action:Show(); HealBot_Action_ShowFrame();
-- Reapply user settings to override the engine's white default -- Reapply user settings to override the engine's white default
if HealBot_Config and HealBot_Config.Current_Skin then if HealBot_Config and HealBot_Config.Current_Skin then
+24 -18
View File
@@ -3,6 +3,8 @@
HealBot_CastingSpell = nil; HealBot_CastingSpell = nil;
HealBot_CastingTarget = nil; HealBot_CastingTarget = nil;
HealBot_TargetRestorePending = nil;
HealBot_TargetRestoreTimer = 0;
local HealBot_Health60 = { local HealBot_Health60 = {
["DRUID"] = 3500, ["DRUID"] = 3500,
@@ -210,29 +212,26 @@ function HealBot_CheckCasting(unit)
end end
function HealBot_CastSpellOnFriend(spell, target) function HealBot_CastSpellOnFriend(spell, target)
local old;
local ttype = "other";
if (not spell or not target or not UnitName(target)) then if (not spell or not target or not UnitName(target)) then
return; return;
end end
if (UnitCanAttack("player", "target")) then local targetEnemy = UnitCanAttack("player", "target");
old = "enemy"; local oldTarget = UnitName("target");
else
old = UnitName("target"); if oldTarget ~= UnitName(target) then
if UnitName("target") ~= UnitName(target) then TargetUnit(target);
TargetUnit(target);
else
ttype = "direct";
end
end end
HealBot_StartCasting(spell, target, ttype);
if (old == "enemy") then HealBot_StartCasting(spell, target, "direct");
TargetLastEnemy();
elseif (old) then if targetEnemy then
TargetByName(old); HealBot_TargetRestorePending = { type = "enemy" };
else elseif oldTarget and oldTarget ~= UnitName(target) then
ClearTarget(); HealBot_TargetRestorePending = { type = "friend" };
elseif not oldTarget then
HealBot_TargetRestorePending = { type = "clear" };
end end
HealBot_TargetRestoreTimer = 0;
end end
function HealBot_SetItemDefaults(spell) function HealBot_SetItemDefaults(spell)
@@ -388,6 +387,13 @@ end
function HealBot_RecalcParty() function HealBot_RecalcParty()
HealBot_Action_PartyChanged(); HealBot_Action_PartyChanged();
if HealBot_Action_HealButtons then
for _, button in ipairs(HealBot_Action_HealButtons) do
if button and button.unit then
HealBot_OnEvent_UnitAura(nil, button.unit);
end
end
end
HealBot_Action_RefreshButtons(); HealBot_Action_RefreshButtons();
end end
+3 -1
View File
@@ -11,6 +11,7 @@ HealBot_ConfigDefaults = {
EmergencyHeals = 1, EmergencyHeals = 1,
ActionLocked = 0, ActionLocked = 0,
ActionVisible = 1, ActionVisible = 1,
HideSolo = 0,
OverHeal = 0.25, OverHeal = 0.25,
CastNotify = 1, CastNotify = 1,
ChatMessages = { ChatMessages = {
@@ -175,7 +176,7 @@ HealBot_ConfigDefaults = {
CDCRightText = {[HEALBOT_PRIEST]="None", [HEALBOT_SHAMAN]="None", [HEALBOT_DRUID]="None", [HEALBOT_PALADIN]="None",}, CDCRightText = {[HEALBOT_PRIEST]="None", [HEALBOT_SHAMAN]="None", [HEALBOT_DRUID]="None", [HEALBOT_PALADIN]="None",},
Current_Skin = "Modern Flat", Current_Skin = "Modern Flat",
Skin_ID = 1, Skin_ID = 1,
Skins = {HEALBOT_SKINS_STD, "HealBot Party", "HealBot Raid", "Alteric Valley", "Modern Flat"}, Skins = {"Modern Flat", HEALBOT_SKINS_STD, "HealBot Party", "HealBot Raid", "Alteric Valley"},
numcols = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 4, ["Alteric Valley"] = 2, ["Modern Flat"] = 1}, numcols = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 4, ["Alteric Valley"] = 2, ["Modern Flat"] = 1},
btexture = {[HEALBOT_SKINS_STD] = 8,["HealBot Party"] = 6, ["HealBot Raid"] = 7, ["Alteric Valley"] = 9, ["Modern Flat"] = 10}, btexture = {[HEALBOT_SKINS_STD] = 8,["HealBot Party"] = 6, ["HealBot Raid"] = 7, ["Alteric Valley"] = 9, ["Modern Flat"] = 10},
bcspace = {[HEALBOT_SKINS_STD] = 4, ["HealBot Party"] = 4, ["HealBot Raid"] = 2, ["Alteric Valley"] = 2, ["Modern Flat"] = 4}, bcspace = {[HEALBOT_SKINS_STD] = 4, ["HealBot Party"] = 4, ["HealBot Raid"] = 2, ["Alteric Valley"] = 2, ["Modern Flat"] = 4},
@@ -224,6 +225,7 @@ HealBot_ConfigDefaults = {
Tooltip_ShowTarget = 1, Tooltip_ShowTarget = 1,
Tooltip_Recommend = 1, Tooltip_Recommend = 1,
TooltipPos = 1, TooltipPos = 1,
HideParty = 0,
}; };
HealBot_Config = {}; HealBot_Config = {};
+9 -1
View File
@@ -205,7 +205,7 @@ HEALBOT_OPTIONS_TAB_HEALING = "Heilung";
HEALBOT_OPTIONS_TAB_CDC = "Debuffs"; HEALBOT_OPTIONS_TAB_CDC = "Debuffs";
HEALBOT_OPTIONS_TAB_SKIN = "Skin" HEALBOT_OPTIONS_TAB_SKIN = "Skin"
HEALBOT_OPTIONS_PANEL_TEXT = "Heilungspanel Optionen:" HEALBOT_OPTIONS_PANEL_TEXT = "Manabalken Optionen:"
HEALBOT_OPTIONS_BARALPHA = "Leisten Transparenz"; HEALBOT_OPTIONS_BARALPHA = "Leisten Transparenz";
HEALBOT_OPTIONS_BARALPHAINHEAL = "Ankomm.Heilung Transparenz"; HEALBOT_OPTIONS_BARALPHAINHEAL = "Ankomm.Heilung Transparenz";
HEALBOT_OPTIONS_ACTIONLOCKED = "Fenster fixieren"; HEALBOT_OPTIONS_ACTIONLOCKED = "Fenster fixieren";
@@ -218,6 +218,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exakter 25 Meter Check in Instanzen";
HEALBOT_OPTIONS_INTEGRATECTRA = "Integriere CTRA"; HEALBOT_OPTIONS_INTEGRATECTRA = "Integriere CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key"; HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Vermeidung des PvP Flags"; HEALBOT_OPTIONS_PROTECTPVP = "Vermeidung des PvP Flags";
HEALBOT_OPTIONS_HIDEPARTY = "Standard-Gruppenfenster ausblenden";
HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Optionen"; HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Optionen";
HEALBOT_OPTIONS_SKINTEXT = "Skin" HEALBOT_OPTIONS_SKINTEXT = "Skin"
@@ -320,6 +321,13 @@ HEALBOT_CLASSES_RANGES = "Fernkampf";
HEALBOT_CLASSES_HEALERS = "Heiler"; HEALBOT_CLASSES_HEALERS = "Heiler";
HEALBOT_CLASSES_CUSTOM = "pers\195\182nlich"; HEALBOT_CLASSES_CUSTOM = "pers\195\182nlich";
HEALBOT_OPTIONS_MONITORNO = "Keine";
HEALBOT_OPTIONS_MONITORALL = "Alle";
HEALBOT_OPTIONS_MONITORMELEE = "Nahkampf";
HEALBOT_OPTIONS_MONITORRANGE = "Fernkampf";
HEALBOT_OPTIONS_MONITORHEALERS = "Heiler";
HEALBOT_OPTIONS_MONITORCUSTOM = "Eigene";
HEALBOT_OPTIONS_SHOWTOOLTIP = "Zeige Tooltips"; HEALBOT_OPTIONS_SHOWTOOLTIP = "Zeige Tooltips";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Zeige detaillierte Spruchinfos"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Zeige detaillierte Spruchinfos";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Zeige Zielinfos"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Zeige Zielinfos";
+35 -27
View File
@@ -67,10 +67,10 @@ HEALBOT_REJUVENATION = "Rejuvenation";
HEALBOT_PRAYER_OF_HEALING = "Prayer of Healing"; HEALBOT_PRAYER_OF_HEALING = "Prayer of Healing";
HEALBOT_CHAIN_HEAL = "Chain Heal"; HEALBOT_CHAIN_HEAL = "Chain Heal";
HEALBOT_ROCKBITER_WEAPON = "Rockbiter Weapon"; HEALBOT_ROCKBITER_WEAPON = "Rockbiter Weapon";
HEALBOT_FLAMETONGUE_WEAPON = "Flametongue Weapon"; HEALBOT_FLAMETONGUE_WEAPON = "Flametongue Weapon";
HEALBOT_FROSTBRAND_WEAPON = "Frostbrand Weapon"; HEALBOT_FROSTBRAND_WEAPON = "Frostbrand Weapon";
HEALBOT_WINDFURY_WEAPON = "Windfury Weapon"; HEALBOT_WINDFURY_WEAPON = "Windfury Weapon";
HEALBOT_POWER_WORD_FORTITUDE = "Power Word: Fortitude"; HEALBOT_POWER_WORD_FORTITUDE = "Power Word: Fortitude";
HEALBOT_MARK_OF_THE_WILD = "Mark of the Wild"; HEALBOT_MARK_OF_THE_WILD = "Mark of the Wild";
HEALBOT_GIFT_OF_THE_WILD = "Gift of the Wild"; HEALBOT_GIFT_OF_THE_WILD = "Gift of the Wild";
@@ -110,27 +110,27 @@ HEALBOT_DISPEL_MAGIC = "Dispel Magic";
HEALBOT_DISEASE = "Disease"; HEALBOT_DISEASE = "Disease";
HEALBOT_MAGIC = "Magic"; HEALBOT_MAGIC = "Magic";
HEALBOT_CURSE = "Curse"; HEALBOT_CURSE = "Curse";
HEALBOT_POISON = "Poison"; HEALBOT_POISON = "Poison";
HEALBOT_DISEASE_en = "Disease"; -- Do NOT localize this value. HEALBOT_DISEASE_en = "Disease"; -- Do NOT localize this value.
HEALBOT_MAGIC_en = "Magic"; -- Do NOT localize this value. HEALBOT_MAGIC_en = "Magic"; -- Do NOT localize this value.
HEALBOT_CURSE_en = "Curse"; -- Do NOT localize this value. HEALBOT_CURSE_en = "Curse"; -- Do NOT localize this value.
HEALBOT_POISON_en = "Poison"; -- Do NOT localize this value. HEALBOT_POISON_en = "Poison"; -- Do NOT localize this value.
HEALBOT_RANK_1 = " (Rank 1)"; HEALBOT_RANK_1 = " (Rank 1)";
HEALBOT_RANK_2 = " (Rank 2)"; HEALBOT_RANK_2 = " (Rank 2)";
HEALBOT_RANK_3 = " (Rank 3)"; HEALBOT_RANK_3 = " (Rank 3)";
HEALBOT_RANK_4 = " (Rank 4)"; HEALBOT_RANK_4 = " (Rank 4)";
HEALBOT_RANK_5 = " (Rank 5)"; HEALBOT_RANK_5 = " (Rank 5)";
HEALBOT_RANK_6 = " (Rank 6)"; HEALBOT_RANK_6 = " (Rank 6)";
HEALBOT_RANK_7 = " (Rank 7)"; HEALBOT_RANK_7 = " (Rank 7)";
HEALBOT_RANK_8 = " (Rank 8)"; HEALBOT_RANK_8 = " (Rank 8)";
HEALBOT_RANK_9 = " (Rank 9)"; HEALBOT_RANK_9 = " (Rank 9)";
HEALBOT_RANK_10 = " (Rank 10)"; HEALBOT_RANK_10 = " (Rank 10)";
HEALBOT_RANK_11 = " (Rank 11)"; HEALBOT_RANK_11 = " (Rank 11)";
HEALBOT_LIBRARY_INCHEAL = "Increases healing done by spells and effects by up to (%d+)%."; HEALBOT_LIBRARY_INCHEAL = "Increases healing done by spells and effects by up to (%d+)%.";
HEALBOT_LIBRARY_INCDAMHEAL = "Increases damage and healing done by magical spells and effects by up to (%d+)%."; HEALBOT_LIBRARY_INCDAMHEAL = "Increases damage and healing done by magical spells and effects by up to (%d+)%.";
HB_BONUSSCANNER_NAMES = { HB_BONUSSCANNER_NAMES = {
HEAL = "Healing", HEAL = "Healing",
}; };
@@ -167,7 +167,7 @@ HEALBOT_BUFF_FIRST_AID = "Interface\\Icons\\Spell_Holy_Heal";
HEALBOT_BUFF_POWER_WORD_SHIELD = "Interface\\Icons\\Spell_Holy_PowerWordShield"; HEALBOT_BUFF_POWER_WORD_SHIELD = "Interface\\Icons\\Spell_Holy_PowerWordShield";
HEALBOT_BUFF_REJUVENATION = "Interface\\Icons\\Spell_Nature_Rejuvenation"; HEALBOT_BUFF_REJUVENATION = "Interface\\Icons\\Spell_Nature_Rejuvenation";
HEALBOT_BUFF_REGROWTH = "Interface\\Icons\\Spell_Nature_ResistNature"; HEALBOT_BUFF_REGROWTH = "Interface\\Icons\\Spell_Nature_ResistNature";
HEALBOT_BUFF_RENEW = "Interface\\Icons\\Spell_Holy_Renew"; HEALBOT_BUFF_RENEW = "Interface\\Icons\\Spell_Holy_Renew";
HEALBOT_BUFF_FEAR_WARD = "Interface\\Icons\\Spell_Holy_Excorcism"; HEALBOT_BUFF_FEAR_WARD = "Interface\\Icons\\Spell_Holy_Excorcism";
HEALBOT_DEBUFF_WEAKENED_SOUL = "Interface\\Icons\\Spell_Holy_AshesToAshes"; HEALBOT_DEBUFF_WEAKENED_SOUL = "Interface\\Icons\\Spell_Holy_AshesToAshes";
HEALBOT_DEBUFF_RECENTLY_BANDAGED = "Interface\\Icons\\INV_Misc_Bandage_08"; HEALBOT_DEBUFF_RECENTLY_BANDAGED = "Interface\\Icons\\INV_Misc_Bandage_08";
@@ -230,7 +230,7 @@ HEALBOT_OPTIONS_TAB_SKIN = "Skin";
HEALBOT_OPTIONS_TAB_BUFF = "Buff"; HEALBOT_OPTIONS_TAB_BUFF = "Buff";
HEALBOT_OPTIONS_TAB_CHAT = "Chat"; HEALBOT_OPTIONS_TAB_CHAT = "Chat";
HEALBOT_OPTIONS_PANEL_TEXT = "Healing panel options:" HEALBOT_OPTIONS_PANEL_TEXT = "Mana bar options:"
HEALBOT_OPTIONS_BARALPHA = "Bar opacity"; HEALBOT_OPTIONS_BARALPHA = "Bar opacity";
HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heals opacity"; HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heals opacity";
HEALBOT_OPTIONS_ACTIONLOCKED = "Lock position"; HEALBOT_OPTIONS_ACTIONLOCKED = "Lock position";
@@ -243,6 +243,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exact 27yard range check in instances";
--HEALBOT_OPTIONS_INTEGRATECTRA = "Integrate CTRA"; --HEALBOT_OPTIONS_INTEGRATECTRA = "Integrate CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key"; HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging"; HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging";
HEALBOT_OPTIONS_HIDEPARTY = "Hide Default Party Frames";
HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Options"; HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Options";
HEALBOT_OPTIONS_SKINTEXT = "Use skin" HEALBOT_OPTIONS_SKINTEXT = "Use skin"
@@ -358,6 +359,13 @@ HEALBOT_CLASSES_RANGES = "Ranged";
HEALBOT_CLASSES_HEALERS = "Healers"; HEALBOT_CLASSES_HEALERS = "Healers";
HEALBOT_CLASSES_CUSTOM = "Custom"; HEALBOT_CLASSES_CUSTOM = "Custom";
HEALBOT_OPTIONS_MONITORNO = "None";
HEALBOT_OPTIONS_MONITORALL = "All";
HEALBOT_OPTIONS_MONITORMELEE = "Melee";
HEALBOT_OPTIONS_MONITORRANGE = "Ranged";
HEALBOT_OPTIONS_MONITORHEALERS = "Healers";
HEALBOT_OPTIONS_MONITORCUSTOM = "Custom";
HEALBOT_OPTIONS_SHOWTOOLTIP = "Show tooltips"; HEALBOT_OPTIONS_SHOWTOOLTIP = "Show tooltips";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Show detailed spell information"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Show detailed spell information";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Show target information"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Show target information";
+9 -1
View File
@@ -188,7 +188,7 @@ HEALBOT_OPTIONS_TAB_CDC = "Cure";
HEALBOT_OPTIONS_TAB_SKIN = "Skin" HEALBOT_OPTIONS_TAB_SKIN = "Skin"
HEALBOT_OPTIONS_PANEL_TEXT = "Panneau d'option de soin:" HEALBOT_OPTIONS_PANEL_TEXT = "Options de barre de mana:"
HEALBOT_OPTIONS_ACTIONLOCKED = "Bloquer la position"; HEALBOT_OPTIONS_ACTIONLOCKED = "Bloquer la position";
HEALBOT_OPTIONS_GROWUPWARDS = "Monter"; HEALBOT_OPTIONS_GROWUPWARDS = "Monter";
HEALBOT_OPTIONS_AUTOSHOW = "Ouvrir automatiquement"; HEALBOT_OPTIONS_AUTOSHOW = "Ouvrir automatiquement";
@@ -200,6 +200,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exact 27yard range check in instances";
HEALBOT_OPTIONS_INTEGRATECTRA = "Intregrer CTRA"; HEALBOT_OPTIONS_INTEGRATECTRA = "Intregrer CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key"; HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging"; HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging";
HEALBOT_OPTIONS_HIDEPARTY = "Masquer les cadres de groupe par défaut";
HEALBOT_OPTIONS_ITEMS = "Objets"; HEALBOT_OPTIONS_ITEMS = "Objets";
@@ -259,6 +260,13 @@ HEALBOT_CLASSES_RANGES = "Distances";
HEALBOT_CLASSES_HEALERS = "Soigneurs"; HEALBOT_CLASSES_HEALERS = "Soigneurs";
HEALBOT_CLASSES_CUSTOM = "Divers"; HEALBOT_CLASSES_CUSTOM = "Divers";
HEALBOT_OPTIONS_MONITORNO = "Aucun";
HEALBOT_OPTIONS_MONITORALL = "Tous";
HEALBOT_OPTIONS_MONITORMELEE = "M\195\169l\195\169e";
HEALBOT_OPTIONS_MONITORRANGE = "\195\128 distance";
HEALBOT_OPTIONS_MONITORHEALERS = "Soigneurs";
HEALBOT_OPTIONS_MONITORCUSTOM = "Personnalis\195\169";
HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heal opacity"; -- *************** needs French translation *************** HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heal opacity"; -- *************** needs French translation ***************
HEALBOT_OPTIONS_CDCBUTTONS = "Curing buttons"; -- *************** needs French translation *************** HEALBOT_OPTIONS_CDCBUTTONS = "Curing buttons"; -- *************** needs French translation ***************
+9 -1
View File
@@ -184,7 +184,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_OPTIONS_TAB_CDC = "치료"; HEALBOT_OPTIONS_TAB_CDC = "치료";
HEALBOT_OPTIONS_TAB_SKIN = "스킨" HEALBOT_OPTIONS_TAB_SKIN = "스킨"
HEALBOT_OPTIONS_PANEL_TEXT = "치유 패널 옵션:" HEALBOT_OPTIONS_PANEL_TEXT = "마나 바 옵션:"
HEALBOT_OPTIONS_BARALPHA = "바 불투명도"; HEALBOT_OPTIONS_BARALPHA = "바 불투명도";
HEALBOT_OPTIONS_BARALPHAINHEAL = "들어오는 치유 불투명도"; HEALBOT_OPTIONS_BARALPHAINHEAL = "들어오는 치유 불투명도";
HEALBOT_OPTIONS_ACTIONLOCKED = "위치 고정"; HEALBOT_OPTIONS_ACTIONLOCKED = "위치 고정";
@@ -197,6 +197,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
--HEALBOT_OPTIONS_INTEGRATECTRA = "CTRA 연동"; --HEALBOT_OPTIONS_INTEGRATECTRA = "CTRA 연동";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Alt-key 토글"; HEALBOT_OPTIONS_TOGGLEALTUSE = "Alt-key 토글";
HEALBOT_OPTIONS_PROTECTPVP = "우발적 PvP 상태 피함"; HEALBOT_OPTIONS_PROTECTPVP = "우발적 PvP 상태 피함";
HEALBOT_OPTIONS_HIDEPARTY = "기본 파티 프레임 숨김";
HEALBOT_OPTIONS_HEAL_CHATOPT = "대화창 옵션"; HEALBOT_OPTIONS_HEAL_CHATOPT = "대화창 옵션";
HEALBOT_OPTIONS_SKINTEXT = "스킨 사용" HEALBOT_OPTIONS_SKINTEXT = "스킨 사용"
@@ -302,6 +303,13 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_CLASSES_HEALERS = "힐러들"; HEALBOT_CLASSES_HEALERS = "힐러들";
HEALBOT_CLASSES_CUSTOM = "사용자"; HEALBOT_CLASSES_CUSTOM = "사용자";
HEALBOT_OPTIONS_MONITORNO = "없음";
HEALBOT_OPTIONS_MONITORALL = "모두";
HEALBOT_OPTIONS_MONITORMELEE = "근접";
HEALBOT_OPTIONS_MONITORRANGE = "원거리";
HEALBOT_OPTIONS_MONITORHEALERS = "힐러";
HEALBOT_OPTIONS_MONITORCUSTOM = "사용자 정의";
HEALBOT_OPTIONS_SHOWTOOLTIP = "툴팁 표시"; HEALBOT_OPTIONS_SHOWTOOLTIP = "툴팁 표시";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "주문 정보 표시"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "주문 정보 표시";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "대상 정보 표시"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "대상 정보 표시";
+6
View File
@@ -2,6 +2,7 @@
-- Split from original HealBot_Options.lua -- Split from original HealBot_Options.lua
HealBot_Options_ComboButtons_Button=1; HealBot_Options_ComboButtons_Button=1;
HealBot_Options_CurrentPanel = 0;
HealBot_ColourObjWaiting = nil HealBot_ColourObjWaiting = nil
@@ -244,6 +245,8 @@ function HealBot_Options_OnShow(this)
HealBot_Options_AlertLevel:SetValue(HealBot_Config.AlertLevel); HealBot_Options_AlertLevel:SetValue(HealBot_Config.AlertLevel);
HealBot_Options_AutoShow:SetChecked(HealBot_Config.AutoClose); HealBot_Options_AutoShow:SetChecked(HealBot_Config.AutoClose);
HealBot_Options_PanelSounds:SetChecked(HealBot_Config.PanelSounds); HealBot_Options_PanelSounds:SetChecked(HealBot_Config.PanelSounds);
HealBot_Options_ShowManaBars:SetChecked(HealBot_Config.ShowManaBars);
HealBot_Options_ManaBarsHealersOnly:SetChecked(HealBot_Config.ManaBarsHealersOnly);
if HealBot_Config.ActionMouseover == nil then HealBot_Config.ActionMouseover = 1; end if HealBot_Config.ActionMouseover == nil then HealBot_Config.ActionMouseover = 1; end
HealBot_Options_ActionMouseover:SetChecked(HealBot_Config.ActionMouseover); HealBot_Options_ActionMouseover:SetChecked(HealBot_Config.ActionMouseover);
@@ -269,6 +272,8 @@ function HealBot_Options_OnShow(this)
HealBot_Options_ShowTooltipSpellDetail:SetChecked(HealBot_Config.Tooltip_ShowSpellDetail); HealBot_Options_ShowTooltipSpellDetail:SetChecked(HealBot_Config.Tooltip_ShowSpellDetail);
HealBot_Options_ShowTooltipInstant:SetChecked(HealBot_Config.Tooltip_Recommend); HealBot_Options_ShowTooltipInstant:SetChecked(HealBot_Config.Tooltip_Recommend);
HealBot_Options_HideAbort:SetChecked(HealBot_Config.HideAbort); HealBot_Options_HideAbort:SetChecked(HealBot_Config.HideAbort);
HealBot_Options_HideParty:SetChecked(HealBot_Config.HideParty);
HealBot_Options_HideSolo:SetChecked(HealBot_Config.HideSolo);
HealBot_WarningSound_OnClick(nil,HealBot_Config.SoundDebuffPlay) HealBot_WarningSound_OnClick(nil,HealBot_Config.SoundDebuffPlay)
if HealBot_Config.SoundDebuffWarning>0 then if HealBot_Config.SoundDebuffWarning>0 then
HealBot_WarningSound1:Enable(); HealBot_WarningSound1:Enable();
@@ -293,6 +298,7 @@ function HealBot_Options_OnShow(this)
HealBot_Options_ExtraSort_Refresh(); HealBot_Options_ExtraSort_Refresh();
HealBot_Options_TooltipPos_Refresh(); HealBot_Options_TooltipPos_Refresh();
HealBot_Options_SetChatMessages(); HealBot_Options_SetChatMessages();
HealBot_Options_ShowPanel(this.selectedTab or 1);
end end
function HealBot_Options_SetSkins() function HealBot_Options_SetSkins()
HealBot_Options_Skins_Refresh() HealBot_Options_Skins_Refresh()
+4
View File
@@ -9,10 +9,12 @@ function HealBot_Options_BuffWatch_OnClick(self)
else else
HealBot_Options_BuffWatchInCombat:Enable() HealBot_Options_BuffWatchInCombat:Enable()
end end
HealBot_RecalcParty();
end end
function HealBot_Options_BuffWatchInCombat_OnClick(self) function HealBot_Options_BuffWatchInCombat_OnClick(self)
local frame = self or this local frame = self or this
HealBot_Config.BuffWatchInCombat = frame:GetChecked() or 0; HealBot_Config.BuffWatchInCombat = frame:GetChecked() or 0;
HealBot_RecalcParty();
end end
function HealBot_Options_BuffSelf_OnLoad(self) function HealBot_Options_BuffSelf_OnLoad(self)
local frame = self or this local frame = self or this
@@ -35,6 +37,7 @@ function HealBot_Options_BuffSelf_OnClick(self)
else else
HealBot_Config.BuffWatchSelf[id] = 0 HealBot_Config.BuffWatchSelf[id] = 0
end end
HealBot_RecalcParty();
end end
function HealBot_Options_Buff_OnLoad(self) function HealBot_Options_Buff_OnLoad(self)
local frame = self or this local frame = self or this
@@ -76,6 +79,7 @@ function HealBot_Options_Buff_OnClick()
UIDropDownMenu_SetSelectedID(frame, this.value + 1) UIDropDownMenu_SetSelectedID(frame, this.value + 1)
UIDropDownMenu_SetText(text, frame) UIDropDownMenu_SetText(text, frame)
HealBot_RecalcParty();
end end
function HealBot_Options_SetBuffs() function HealBot_Options_SetBuffs()
local myClass = UnitClass("player") local myClass = UnitClass("player")
+23 -23
View File
@@ -53,9 +53,9 @@ function HealBot_Options_CDCMonitor_Refresh(onselect)
if not onselect then HealBot_Options_CDCMonitor_Initialize() end -- or wrong menu may be used ! if not onselect then HealBot_Options_CDCMonitor_Initialize() end -- or wrong menu may be used !
UIDropDownMenu_SetSelectedID(HealBot_Options_CDCMonitor,HealBot_Config.CDCMonitor) UIDropDownMenu_SetSelectedID(HealBot_Options_CDCMonitor,HealBot_Config.CDCMonitor)
end end
function HealBot_Options_CDCMonitor_OnLoad(this) function HealBot_Options_CDCMonitor_OnLoad()
HealBot_Options_CDCMonitor_Initialize() UIDropDownMenu_Initialize(this, HealBot_Options_CDCMonitor_DropDown)
UIDropDownMenu_SetWidth(100) UIDropDownMenu_SetWidth(100, this)
end end
function HealBot_Options_CDCMonitor_OnSelect() function HealBot_Options_CDCMonitor_OnSelect()
HealBot_Config.CDCMonitor = this:GetID() HealBot_Config.CDCMonitor = this:GetID()
@@ -73,7 +73,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = 0; HealBot_CDCInc[HEALBOT_SHAMAN] = 0;
HealBot_CDCInc[HEALBOT_WARLOCK] = 0; HealBot_CDCInc[HEALBOT_WARLOCK] = 0;
HealBot_CDCInc[HEALBOT_WARRIOR] = 0; HealBot_CDCInc[HEALBOT_WARRIOR] = 0;
if HealBot_Config.CDCMonitor==1 then if HealBot_Config.CDCMonitor==2 then
HealBot_CDCInc[HEALBOT_DRUID] = 1; HealBot_CDCInc[HEALBOT_DRUID] = 1;
HealBot_CDCInc[HEALBOT_HUNTER] = 1; HealBot_CDCInc[HEALBOT_HUNTER] = 1;
HealBot_CDCInc[HEALBOT_MAGE] = 1; HealBot_CDCInc[HEALBOT_MAGE] = 1;
@@ -83,25 +83,25 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = 1; HealBot_CDCInc[HEALBOT_SHAMAN] = 1;
HealBot_CDCInc[HEALBOT_WARLOCK] = 1; HealBot_CDCInc[HEALBOT_WARLOCK] = 1;
HealBot_CDCInc[HEALBOT_WARRIOR] = 1; HealBot_CDCInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.CDCMonitor==2 then
HealBot_CDCInc[HEALBOT_DRUID] = 1;
elseif HealBot_Config.CDCMonitor==3 then elseif HealBot_Config.CDCMonitor==3 then
HealBot_CDCInc[HEALBOT_HUNTER] = 1; HealBot_CDCInc[HEALBOT_DRUID] = 1;
elseif HealBot_Config.CDCMonitor==4 then elseif HealBot_Config.CDCMonitor==4 then
HealBot_CDCInc[HEALBOT_MAGE] = 1; HealBot_CDCInc[HEALBOT_HUNTER] = 1;
elseif HealBot_Config.CDCMonitor==5 then elseif HealBot_Config.CDCMonitor==5 then
HealBot_CDCInc[HEALBOT_PALADIN] = 1; HealBot_CDCInc[HEALBOT_MAGE] = 1;
elseif HealBot_Config.CDCMonitor==6 then elseif HealBot_Config.CDCMonitor==6 then
HealBot_CDCInc[HEALBOT_PRIEST] = 1; HealBot_CDCInc[HEALBOT_PALADIN] = 1;
elseif HealBot_Config.CDCMonitor==7 then elseif HealBot_Config.CDCMonitor==7 then
HealBot_CDCInc[HEALBOT_ROGUE] = 1; HealBot_CDCInc[HEALBOT_PRIEST] = 1;
elseif HealBot_Config.CDCMonitor==8 then elseif HealBot_Config.CDCMonitor==8 then
HealBot_CDCInc[HEALBOT_SHAMAN] = 1; HealBot_CDCInc[HEALBOT_ROGUE] = 1;
elseif HealBot_Config.CDCMonitor==9 then elseif HealBot_Config.CDCMonitor==9 then
HealBot_CDCInc[HEALBOT_WARLOCK] = 1; HealBot_CDCInc[HEALBOT_SHAMAN] = 1;
elseif HealBot_Config.CDCMonitor==10 then elseif HealBot_Config.CDCMonitor==10 then
HealBot_CDCInc[HEALBOT_WARRIOR] = 1; HealBot_CDCInc[HEALBOT_WARLOCK] = 1;
elseif HealBot_Config.CDCMonitor==11 then elseif HealBot_Config.CDCMonitor==11 then
HealBot_CDCInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.CDCMonitor==12 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncMelee[HEALBOT_DRUID]; HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncMelee[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER]; HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE]; HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE];
@@ -111,7 +111,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN]; HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK]; HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR]; HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==12 then elseif HealBot_Config.CDCMonitor==13 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID]; HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER]; HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE]; HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE];
@@ -121,7 +121,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN]; HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK]; HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR]; HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==13 then elseif HealBot_Config.CDCMonitor==14 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID]; HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER]; HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE]; HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE];
@@ -131,7 +131,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN]; HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK]; HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR]; HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==14 then elseif HealBot_Config.CDCMonitor==15 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID]; HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER]; HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE]; HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE];
@@ -209,13 +209,13 @@ function HealBot_Options_CDCButRight_Refresh(onselect)
set_id = HealBot_Config.Debuff_Right[class]; set_id = HealBot_Config.Debuff_Right[class];
UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButRight,set_id) UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButRight,set_id)
end end
function HealBot_Options_CDCButLeft_OnLoad(this) function HealBot_Options_CDCButLeft_OnLoad()
HealBot_Options_CDCButLeft_Initialize() UIDropDownMenu_Initialize(this, HealBot_Options_CDCButLeft_DropDown)
UIDropDownMenu_SetWidth(140) UIDropDownMenu_SetWidth(140, this)
end end
function HealBot_Options_CDCButRight_OnLoad(this) function HealBot_Options_CDCButRight_OnLoad()
HealBot_Options_CDCButRight_Initialize() UIDropDownMenu_Initialize(this, HealBot_Options_CDCButRight_DropDown)
UIDropDownMenu_SetWidth(140) UIDropDownMenu_SetWidth(140, this)
end end
function HealBot_Options_CDCButLeft_OnSelect() function HealBot_Options_CDCButLeft_OnSelect()
local class=UnitClass("Player"); local class=UnitClass("Player");
+17
View File
@@ -272,3 +272,20 @@ function HealBot_Options_BorderThicknessS_OnValueChanged(this)
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue()); getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin() HealBot_Action_ResetSkin()
end end
function HealBot_Options_HideParty_OnLoad(this, text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_HideParty_OnClick(this)
HealBot_Config.HideParty = this:GetChecked() or 0;
HealBot_Options_TogglePartyFrames();
end
function HealBot_Options_TogglePartyFrames()
if HealBot_Config.HideParty == 1 then
if HidePartyFrame then HidePartyFrame(); end
else
if ShowPartyFrame then ShowPartyFrame(); end
end
end
+115 -88
View File
@@ -6,51 +6,11 @@
<Frames> <Frames>
<Frame name="HealBot_Options_GenFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="115"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-35"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_GeneralPanel_Text" text="HEALBOT_OPTIONS_PANEL_TEXT" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="75" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<CheckButton name="HealBot_Options_ActionLocked" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_ActionLocked" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"> <Anchor point="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="10" y="-25" /> <AbsDimension x="31" y="-40" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -72,7 +32,7 @@
<OnClick>HealBot_Options_GrowUpwards_OnClick(this)</OnClick> <OnClick>HealBot_Options_GrowUpwards_OnClick(this)</OnClick>
</Scripts> </Scripts>
</CheckButton> </CheckButton>
<CheckButton name="HealBot_Options_ShowManaBars" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_ActionMouseover" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="BOTTOMLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
@@ -81,48 +41,15 @@
</Anchor> </Anchor>
</Anchors> </Anchors>
<Scripts> <Scripts>
<OnLoad> <OnLoad>HealBot_Options_ActionMouseover_OnLoad(this,"Hovercasting")</OnLoad>
getglobal(this:GetName().."Text"):SetText("Show Mana Bars"); <OnClick>HealBot_Options_ActionMouseover_OnClick(this)</OnClick>
this:SetChecked(HealBot_Config.ShowManaBars);
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ShowManaBars = 1;
else
HealBot_Config.ShowManaBars = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ManaBarsHealersOnly" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="20" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("For Healers Only");
this:SetChecked(HealBot_Config.ManaBarsHealersOnly);
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ManaBarsHealersOnly = 1;
else
HealBot_Config.ManaBarsHealersOnly = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts> </Scripts>
</CheckButton> </CheckButton>
<CheckButton name="HealBot_Options_AutoShow" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_AutoShow" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionLocked" relativePoint="TOPLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionLocked" relativePoint="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="125" y="0" /> <AbsDimension x="200" y="0" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -135,7 +62,7 @@
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="TOPLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="125" y="0" /> <AbsDimension x="200" y="0" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -144,35 +71,122 @@
<OnClick>HealBot_Options_PanelSounds_OnClick(this)</OnClick> <OnClick>HealBot_Options_PanelSounds_OnClick(this)</OnClick>
</Scripts> </Scripts>
</CheckButton> </CheckButton>
<CheckButton name="HealBot_Options_ActionMouseover" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_HideSolo" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_PanelSounds" relativePoint="BOTTOMLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionMouseover" relativePoint="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="0" y="5" /> <AbsDimension x="200" y="0" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
<Scripts> <Scripts>
<OnLoad>HealBot_Options_ActionMouseover_OnLoad(this,"Enable Action Bar Mouseover")</OnLoad> <OnLoad>
<OnClick>HealBot_Options_ActionMouseover_OnClick(this)</OnClick> getglobal(this:GetName().."Text"):SetText("Hide when Solo");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.HideSolo = 1;
else
HealBot_Config.HideSolo = 0;
end
HealBot_Action_ShowFrame();
</OnClick>
</Scripts> </Scripts>
</CheckButton> </CheckButton>
<Frame name="HealBot_Options_GenFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="70"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-135"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-135"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_GeneralPanel_Text" text="HEALBOT_OPTIONS_PANEL_TEXT" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="130" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<CheckButton name="HealBot_Options_ShowManaBars" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Show Mana Bars");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ShowManaBars = 1;
else
HealBot_Config.ShowManaBars = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ManaBarsHealersOnly" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("For Healers Only");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ManaBarsHealersOnly = 1;
else
HealBot_Config.ManaBarsHealersOnly = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
</Frames> </Frames>
</Frame> </Frame>
<CheckButton name="HealBot_Options_HideOptions" inherits="OptionsCheckButtonTemplate"> <CheckButton name="HealBot_Options_HideOptions" inherits="OptionsCheckButtonTemplate">
<Anchors> <Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ManaBarsHealersOnly" relativePoint="BOTTOMLEFT"> <Anchor point="TOPLEFT" relativeTo="HealBot_Options_GenFrame" relativePoint="BOTTOMLEFT">
<Offset> <Offset>
<AbsDimension x="-20" y="-2" /> <AbsDimension x="10" y="-10" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
<Scripts> <Scripts>
<OnLoad>HealBot_Options_HideOptions_OnLoad(this,HEALBOT_OPTIONS_HIDEOPTIONS)</OnLoad> <OnLoad>HealBot_Options_HideOptions_OnLoad(this,HEALBOT_OPTIONS_HIDEOPTIONS)</OnLoad>
<OnClick>HealBot_Options_HideOptions_OnClick(this)</OnClick> <OnClick>HealBot_Options_HideOptions_OnClick(this)</OnClick>
</Scripts> </Scripts>
</CheckButton> </CheckButton>
@@ -215,6 +229,19 @@
<OnClick>HealBot_Options_ProtectPvP_OnClick(this)</OnClick> <OnClick>HealBot_Options_ProtectPvP_OnClick(this)</OnClick>
</Scripts> </Scripts>
</CheckButton> </CheckButton>
<CheckButton name="HealBot_Options_HideParty" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ProtectPvP" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_HideParty_OnLoad(this,HEALBOT_OPTIONS_HIDEPARTY)</OnLoad>
<OnClick>HealBot_Options_HideParty_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
+9 -9
View File
@@ -111,9 +111,9 @@ function HealBot_Options_EmergencyFClass_Refresh(onselect)
UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFClass,HealBot_Config.EmergencyFClass) UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFClass,HealBot_Config.EmergencyFClass)
end end
function HealBot_Options_EmergencyFClass_OnLoad(this) function HealBot_Options_EmergencyFClass_OnLoad()
HealBot_Options_EmergencyFClass_Initialize() UIDropDownMenu_Initialize(this, HealBot_Options_EmergencyFClass_DropDown)
UIDropDownMenu_SetWidth(100) UIDropDownMenu_SetWidth(100, this)
end end
function HealBot_Options_EmergencyFClass_OnSelect() function HealBot_Options_EmergencyFClass_OnSelect()
@@ -194,9 +194,9 @@ function HealBot_Options_ExtraSort_Refresh(onselect)
UIDropDownMenu_SetSelectedID(HealBot_Options_ExtraSort,HealBot_Config.ExtraOrder) UIDropDownMenu_SetSelectedID(HealBot_Options_ExtraSort,HealBot_Config.ExtraOrder)
end end
function HealBot_Options_ExtraSort_OnLoad(this) function HealBot_Options_ExtraSort_OnLoad()
HealBot_Options_ExtraSort_Initialize() UIDropDownMenu_Initialize(this, HealBot_Options_ExtraSort_DropDown)
UIDropDownMenu_SetWidth(100) UIDropDownMenu_SetWidth(100, this)
end end
function HealBot_Options_ExtraSort_OnSelect() function HealBot_Options_ExtraSort_OnSelect()
@@ -229,9 +229,9 @@ function HealBot_Options_EmergencyFilter_Refresh(onselect)
end end
function HealBot_Options_EmergencyFilter_OnLoad(this) function HealBot_Options_EmergencyFilter_OnLoad()
HealBot_Options_EmergencyFilter_Initialize() UIDropDownMenu_Initialize(this, HealBot_Options_EmergencyFilter_DropDown)
UIDropDownMenu_SetWidth(100) UIDropDownMenu_SetWidth(100, this)
end end
+3 -3
View File
@@ -114,9 +114,9 @@ function HealBot_Options_Skins_Refresh(onselect)
if not onselect then HealBot_Options_Skins_Initialize() end -- or wrong menu may be used ! if not onselect then HealBot_Options_Skins_Initialize() end -- or wrong menu may be used !
UIDropDownMenu_SetSelectedID(HealBot_Options_Skins,HealBot_Config.Skin_ID) UIDropDownMenu_SetSelectedID(HealBot_Options_Skins,HealBot_Config.Skin_ID)
end end
function HealBot_Options_Skins_OnLoad(this) function HealBot_Options_Skins_OnLoad()
HealBot_Options_Skins_Initialize() UIDropDownMenu_Initialize(this, HealBot_Options_Skins_DropDown)
UIDropDownMenu_SetWidth(100) UIDropDownMenu_SetWidth(100, this)
end end
function HealBot_Options_Skins_OnSelect() function HealBot_Options_Skins_OnSelect()
HealBot_Config.Skin_ID = this:GetID() HealBot_Config.Skin_ID = this:GetID()
+4 -4
View File
@@ -65,9 +65,9 @@ function HealBot_Options_TooltipPos_Refresh(onselect)
UIDropDownMenu_SetSelectedID(HealBot_Options_TooltipPos,HealBot_Config.TooltipPos) UIDropDownMenu_SetSelectedID(HealBot_Options_TooltipPos,HealBot_Config.TooltipPos)
end end
function HealBot_Options_TooltipPos_OnLoad(this) function HealBot_Options_TooltipPos_OnLoad()
HealBot_Options_TooltipPos_Initialize() UIDropDownMenu_Initialize(this, HealBot_Options_TooltipPos_DropDown)
UIDropDownMenu_SetWidth(128) UIDropDownMenu_SetWidth(128, this)
end end
function HealBot_Options_TooltipPos_OnSelect() function HealBot_Options_TooltipPos_OnSelect()
@@ -189,7 +189,7 @@ end
HealBot_Options_CurrentPanel = 0;
+22 -2
View File
@@ -737,8 +737,24 @@ function HealBot_Action_PartyChanged()
end end
HealBot_Action_SetHeightWidth(OffsetX, MaxOffsetY + bpadding, bwidth); HealBot_Action_SetHeightWidth(OffsetX, MaxOffsetY + bpadding, bwidth);
if HealBot_Config.HideParty == 1 and HidePartyFrame then
HidePartyFrame();
end
end end
HealBot_Action_RefreshButtons(); HealBot_Action_RefreshButtons();
HealBot_Action_ShowFrame();
end
function HealBot_Action_ShowFrame()
if HealBot_Config.ActionVisible == 1 then
if HealBot_Config.HideSolo == 1 and GetNumPartyMembers() == 0 and GetNumRaidMembers() == 0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
else
HealBot_Action:Show();
end
end
end end
function HealBot_Action_Reset() function HealBot_Action_Reset()
@@ -751,7 +767,9 @@ end
function HealBot_Action_Refresh(unit) function HealBot_Action_Refresh(unit)
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
if HealBot_Config.AutoClose == 1 and HealBot_Config.ActionVisible ~= 0 then if HealBot_Config.AutoClose == 1 and HealBot_Config.ActionVisible ~= 0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide(); HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
else else
HealBot_Action_RefreshButtons(unit); HealBot_Action_RefreshButtons(unit);
end end
@@ -760,12 +778,14 @@ function HealBot_Action_Refresh(unit)
HealBot_Action_RefreshButtons(unit); HealBot_Action_RefreshButtons(unit);
if not HealBot_IsFighting then if not HealBot_IsFighting then
if (HealBot_Action_MustHealSome()) then if (HealBot_Action_MustHealSome()) then
HealBot_Action:Show(); HealBot_Action_ShowFrame();
elseif HealBot_AbortButton == 0 then elseif HealBot_AbortButton == 0 then
HealBot_Action:Show(); HealBot_Action_ShowFrame();
elseif (not HealBot_Action_ShouldHealSome()) then elseif (not HealBot_Action_ShouldHealSome()) then
if HealBot_AbortButton == 1 and HealBot_Config.AutoClose == 1 and HealBot_Config.ActionVisible ~= 0 then if HealBot_AbortButton == 1 and HealBot_Config.AutoClose == 1 and HealBot_Config.ActionVisible ~= 0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide(); HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
end end
end end
end end
+19 -4
View File
@@ -18,22 +18,37 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* `/hb options` - Toggles the HealBot options panel on and off * `/hb options` - Toggles the HealBot options panel on and off
* `/hb reset` - Resets the contents of the main HealBot panel * `/hb reset` - Resets the contents of the main HealBot panel
### Option Changes from the original HealBot Continues ### Key Features & Current Functionality
* **MVC & Observer Architecture:** High-performance, reactive engine that updates frames dynamically on state changes, drastically reducing CPU and memory overhead compared to traditional polling.
* **Native Hovercasting (Mouseover):** Cast configured spells on hovered unit frames using keybinds directly from your action bars, without losing your current target. (Toggleable in Options -> General).
* **Blizzard Party Frame Toggle:** Toggle to automatically hide Blizzard's default party frames when in a group in favor of HealBot's layouts.
* **HoT & Buff Tracking:** Intelligently track active HoTs and buffs directly on the grid frames with custom icons (e.g., Renew, Rejuvenation, Regrowth, Fear Ward).
* **Mana Bars for Healers:** Enable and position mini-mana status bars next to unit frames, toggleable to display for healer classes only or all classes.
* **Equipment Bonus Integration:** Automatically scans equipped gear (for classes capable of healing) to dynamically scale healing predictions.
* **Curse & Debuff Warning (CDC):** Dynamic visual and audio alerts for cleanable debuffs. Customizable colors based on debuff type (Curse, Poison, Disease, Magic).
* **Highly Customizable Skins:** Fully configure dimensions (width, height), row spacing, column layouts, custom textures, opacity, class-colored frames, and outline of fonts.
### Change Log ### Change Log
**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".
* **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. * **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. * **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. * **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. * **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`. * **CTRA Resurrection Cancel Bug Fix:** Fixed a nil table indexing crash in the CTRA `RESNO` message handler in `HealBot_Controller_Comms.lua`.
* **Lua 5.1 Compatibility Update:** Forwarded observer parameters directly via vararg forwarding (`...`) in `HealBot_Model.lua` to avoid runtime errors with the deprecated `arg` table.
* **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. * **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.
* **Skins Grid Alignment:** Fixed layout overlaps on the Skins panel by setting explicit width/height sizes (`123 x 17`) on the opacity sliders and reorganizing all 13 sliders into a clean, uniform 2-column grid. * **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. * **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.
* **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. * **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** **v1.2.2**
* **White background fix** Fixed issue where white background would persist while alpha channel got changes. * **White background fix** Fixed issue where white background would persist while alpha channel got changes.