feat: add debuff visual indicators, overlays, and improve range checking logic

This commit is contained in:
Bluewhale1337
2026-11-08 16:52:11 +01:00
parent fca88016f2
commit f1919ca9a9
20 changed files with 676 additions and 379 deletions
+22 -19
View File
@@ -66,7 +66,7 @@ function HealBot_CanHeal(unit)
if string.find(unit, "^Test") then return true end if string.find(unit, "^Test") then return true end
local class = HealBot_UnitClass("player") local class = HealBot_UnitClass("player")
if class ~= "PRIEST" and class ~= "DRUID" and class ~= "PALADIN" and class ~= "SHAMAN" then if class ~= "PRIEST" and class ~= "DRUID" and class ~= "PALADIN" and class ~= "SHAMAN" then
if UnitExists(unit) and not UnitIsDeadOrGhost(unit) then if UnitExists(unit) and not UnitIsDeadOrGhost(unit) and HealBot_Range_Check(unit, 40) == 1 then
return true return true
end end
return false return false
@@ -82,12 +82,17 @@ function HealBot_CanHeal(unit)
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", true))
if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Middle")) end if not spell then spell = HealBot_GetHealSpell(unit, HealBot_Action_SpellPattern("Middle", true)) end
if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Right")) end if not spell then spell = HealBot_GetHealSpell(unit, HealBot_Action_SpellPattern("Right", true)) end
if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button4")) end if not spell then spell = HealBot_GetHealSpell(unit, HealBot_Action_SpellPattern("Button4", true)) end
if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button5")) end if not spell then spell = HealBot_GetHealSpell(unit, HealBot_Action_SpellPattern("Button5", true)) end
if not spell then if not spell then
-- Fallback: if player has no base click spells bound but has modifier combos, check pure 40yd range
local combos = HealBot_Config.KeyCombo[UnitClass("player")]
if combos and next(combos) and HealBot_Range_Check(unit, 40) == 1 then
return true
end
return false return false
else else
return true return true
@@ -101,14 +106,16 @@ end
-- Refresh and reset functions moved to HealBot_View_Layout.lua -- Refresh and reset functions moved to HealBot_View_Layout.lua
-- HealBot_Action_SpellPattern: Resolves spell string based on click modifiers. -- HealBot_Action_SpellPattern: Resolves spell string based on click modifiers.
function HealBot_Action_SpellPattern(button) function HealBot_Action_SpellPattern(button, ignoreModifiers)
local combos = HealBot_Config.KeyCombo[UnitClass("player")] local combos = HealBot_Config.KeyCombo[UnitClass("player")]
if not combos then return nil end if not combos then return nil end
local press = button; local press = button or "Left";
if IsAltKeyDown() then press = "Alt"..press end if not ignoreModifiers then
if IsControlKeyDown() then press = "Ctrl"..press end if IsAltKeyDown() then press = "Alt"..press end
if IsShiftKeyDown() then press = "Shift"..press end if IsControlKeyDown() then press = "Ctrl"..press end
return combos[press] if IsShiftKeyDown() then press = "Shift"..press end
end
return combos[press];
end end
-- HealBot_Decode_Button: Decodes click action to spell pattern. -- HealBot_Decode_Button: Decodes click action to spell pattern.
@@ -134,6 +141,8 @@ end
-- HealBot_Action_HealUnit_OnLoad: Internal utility: HealBot_Action_HealUnit_OnLoad -- HealBot_Action_HealUnit_OnLoad: Internal utility: HealBot_Action_HealUnit_OnLoad
function HealBot_Action_HealUnit_OnLoad(this) function HealBot_Action_HealUnit_OnLoad(this)
this:RegisterForClicks("LeftButtonUp", "RightButtonUp", "MiddleButtonUp", "Button4Up", "Button5Up"); this:RegisterForClicks("LeftButtonUp", "RightButtonUp", "MiddleButtonUp", "Button4Up", "Button5Up");
this.debuffOverlay = getglobal(this:GetName() .. "DebuffOverlay");
this.debuffGlow = getglobal(this:GetName() .. "DebuffOverlayGlow");
end end
-- HealBot_Action_HealUnit_OnEnter: Internal utility: HealBot_Action_HealUnit_OnEnter -- HealBot_Action_HealUnit_OnEnter: Internal utility: HealBot_Action_HealUnit_OnEnter
@@ -447,19 +456,13 @@ 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 -- Legacy handler preserved for compatibility
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
DEFAULT_CHAT_FRAME:AddMessage(key.." "..state.." "..(command or "nil"));
keystate = state keystate = state
RunBinding(command,keystate) RunBinding(command,keystate)
end end
DEFAULT_CHAT_FRAME:AddMessage("HealBot_Action_OnKey - "..key);
if key=="SHIFT" or key=="CTRL" or key=="ALT" then
DEFAULT_CHAT_FRAME:AddMessage((IsShiftKeyDown() or 0).." "..(IsControlKeyDown() or 0).." "..(IsAltKeyDown() or 0));
HealBot_Action_Refresh();
end
end end
+24
View File
@@ -152,6 +152,30 @@
</Anchor> </Anchor>
</Anchors> </Anchors>
</StatusBar> </StatusBar>
<Frame name="$parentDebuffOverlay" frameStrata="FOREGROUND" enableMouse="false" hidden="true">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-2" y="2"/>
</Offset>
</Anchor>
<Anchor point="BOTTOMRIGHT">
<Offset>
<AbsDimension x="2" y="-2"/>
</Offset>
</Anchor>
</Anchors>
<Backdrop edgeFile="Interface\Tooltips\UI-Tooltip-Border">
<EdgeSize>
<AbsValue val="10"/>
</EdgeSize>
</Backdrop>
<Layers>
<Layer level="ARTWORK">
<Texture name="$parentGlow" file="Interface\AddOns\HealBotBlue\Images\glow1.tga" setAllPoints="true" alphaMode="BLEND" hidden="true"/>
</Layer>
</Layers>
</Frame>
</Frames> </Frames>
</Button> </Button>
+4
View File
@@ -172,6 +172,10 @@ function HealBot_OnUpdate(this, arg1)
for unitID in pairs(powerToRefresh) do for unitID in pairs(powerToRefresh) do
HealBot_Action_RefreshPower(unitID) HealBot_Action_RefreshPower(unitID)
end end
if HealBot_Action_UpdateDebuffAnimation then
HealBot_Action_UpdateDebuffAnimation(arg1)
end
-- Periodic resolution of units with missing class identity -- Periodic resolution of units with missing class identity
if HealBot_Model and HealBot_Model.unresolvedUnits and next(HealBot_Model.unresolvedUnits) then if HealBot_Model and HealBot_Model.unresolvedUnits and next(HealBot_Model.unresolvedUnits) then
HealBot_UnresolvedTimer = (HealBot_UnresolvedTimer or 0) + arg1 HealBot_UnresolvedTimer = (HealBot_UnresolvedTimer or 0) + arg1
+47 -33
View File
@@ -35,43 +35,57 @@ function HealBot_Range_Check(unit, range)
if ( unit and (unit == "player" or UnitIsUnit(unit, "player") or string.find(unit, "^Test")) ) then if ( unit and (unit == "player" or UnitIsUnit(unit, "player") or string.find(unit, "^Test")) ) then
return_val = 1; return_val = 1;
elseif HealBot_Integrations_ClassicAPI_Active and UnitDistanceSquared and UnitInLineOfSight then else
local inSight = UnitInLineOfSight("player", unit) local checked = false
if inSight then if HealBot_Integrations_ClassicAPI_Active and UnitDistanceSquared and UnitInLineOfSight then
local distSq = UnitDistanceSquared(unit) local inSight = UnitInLineOfSight(unit)
if distSq and distSq <= (range * range) then if inSight == nil then inSight = UnitInLineOfSight("player", unit) end
return_val = 1; if inSight ~= nil then
end checked = true
end if inSight then
elseif HealBot_Integrations_UnitXP_Active then local distSq = UnitDistanceSquared(unit)
local inSight = UnitXP("inSight", "player", unit) if distSq and distSq <= (range * range) then
if inSight then return_val = 1;
local dist = UnitXP("distanceBetween", "player", unit, "Gaussian") end
if dist and dist <= range then
return_val = 1;
end
end
elseif ( UnitIsVisible(unit) == 1 ) then
local tx, ty = GetPlayerMapPosition(unit)
local dist
if tx > 0 or ty > 0 then
local px, py = GetPlayerMapPosition("player")
dist = math.sqrt((px - tx)^2 + (py - ty)^2)
if dist > _scale and (px > 0 or py > 0) then
if ( CheckInteractDistance(unit, 4) ) then
_scale = dist
end end
end end
if dist <= (_scale * range / 27) then end
return_val = 1
if not checked and HealBot_Integrations_UnitXP_Active then
local inSight = UnitXP("inSight", "player", unit)
if inSight ~= nil then
checked = true
if inSight then
local dist = UnitXP("distanceBetween", "player", unit, "Gaussian")
if dist and dist <= range then
return_val = 1;
end
end
end end
else end
if ( HealBot_Config.QualityRange == 1 ) or range <= 27 then
if ( CheckInteractDistance(unit, 4) ) then if not checked and ( UnitIsVisible(unit) == 1 ) then
return_val = 1; local tx, ty = GetPlayerMapPosition(unit)
end local dist
if tx > 0 or ty > 0 then
local px, py = GetPlayerMapPosition("player")
dist = math.sqrt((px - tx)^2 + (py - ty)^2)
if dist > _scale and (px > 0 or py > 0) then
if ( CheckInteractDistance(unit, 4) ) then
_scale = dist
end
end
if dist <= (_scale * range / 27) then
return_val = 1
end
else else
return_val = 1; if ( HealBot_Config.QualityRange == 1 ) or range <= 27 or unit == "target" then
if ( CheckInteractDistance(unit, 4) ) then
return_val = 1;
end
else
return_val = 1;
end
end end
end end
end end
+19 -2
View File
@@ -584,11 +584,13 @@ function HealBot_GetHealSpell(unit, pattern)
-- Handle Inline Scripts -- Handle Inline Scripts
if string.sub(pattern, 1, 1) == "/" then if string.sub(pattern, 1, 1) == "/" then
if HealBot_Range_Check(unit, 40) == 0 then return nil end;
return pattern; return pattern;
end end
-- Handle Special Targeting Pattern -- Handle Special Targeting Pattern
if string.lower(pattern) == "target" then if string.lower(pattern) == "target" then
if HealBot_Range_Check(unit, 40) == 0 then return nil end;
return pattern; return pattern;
end end
@@ -598,7 +600,17 @@ function HealBot_GetHealSpell(unit, pattern)
local range = 40; local range = 40;
if HealBot_Spells[spell] then if HealBot_Spells[spell] then
if not HealBot_CanCastSpell(spell, unit) then return nil end; if not HealBot_CanCastSpell(spell, unit) then return nil end;
range = HealBot_Spells[spell].range or 40; range = HealBot_Spells[spell].Range or HealBot_Spells[spell].range or 40;
else
local parenIdx = string.find(spell, "%s*%(")
if parenIdx then
local baseSpell = string.sub(spell, 1, parenIdx - 1)
baseSpell = string.gsub(baseSpell, "%s+$", "")
if HealBot_Spells[baseSpell] then
if not HealBot_CanCastSpell(baseSpell, unit) then return nil end;
range = HealBot_Spells[baseSpell].Range or HealBot_Spells[baseSpell].range or 40;
end
end
end end
if HealBot_Range_Check(unit, range) == 0 then return nil end; if HealBot_Range_Check(unit, range) == 0 then return nil end;
return spell; return spell;
@@ -606,13 +618,18 @@ function HealBot_GetHealSpell(unit, pattern)
-- Handle Named Macros -- Handle Named Macros
if GetMacroIndexByName(pattern) ~= 0 then if GetMacroIndexByName(pattern) ~= 0 then
if HealBot_Range_Check(unit, 40) == 0 then return nil end;
return pattern; return pattern;
end end
-- Handle Items -- Handle Items
local bag, slot = HealBot_FindBagSlot(pattern) local bag, slot = HealBot_FindBagSlot(pattern)
if bag then if bag then
-- optionally check item range, but skipping for now as it's complex in vanilla local range = 40;
if HealBot_Spells[pattern] then
range = HealBot_Spells[pattern].Range or HealBot_Spells[pattern].range or 40;
end
if HealBot_Range_Check(unit, range) == 0 then return nil end;
return pattern; return pattern;
end end
+100 -98
View File
@@ -52,6 +52,8 @@ HealBot_ConfigDefaults = {
SoundDebuffWarning = 0, SoundDebuffWarning = 0,
SoundDebuffPlay = 1, SoundDebuffPlay = 1,
CDCMonitor = 2, CDCMonitor = 2,
CDCOverlay = 1,
CDCOverlayTexture = "Interface\\AddOns\\HealBotBlue\\Images\\glow1.tga",
PanelAnchorX = -1, PanelAnchorX = -1,
PanelAnchorY = -1, PanelAnchorY = -1,
CDCBarColour = { CDCBarColour = {
@@ -542,104 +544,104 @@ HealBot_Debuff_Spells = {
}, },
} }
HealBot_Buff_Spells = { HealBot_Buff_Spells = {
[HEALBOT_PALADIN] = { [HEALBOT_PALADIN] = {
HEALBOT_BLESSING_OF_KINGS, HEALBOT_BLESSING_OF_KINGS,
HEALBOT_BLESSING_OF_MIGHT, HEALBOT_BLESSING_OF_MIGHT,
HEALBOT_BLESSING_OF_WISDOM, HEALBOT_BLESSING_OF_WISDOM,
HEALBOT_BLESSING_OF_SALVATION, HEALBOT_BLESSING_OF_SALVATION,
HEALBOT_BLESSING_OF_LIGHT, HEALBOT_BLESSING_OF_LIGHT,
HEALBOT_BLESSING_OF_SANCTUARY, HEALBOT_BLESSING_OF_SANCTUARY,
HEALBOT_GREATER_BLESSING_OF_KINGS, HEALBOT_GREATER_BLESSING_OF_KINGS,
HEALBOT_GREATER_BLESSING_OF_MIGHT, HEALBOT_GREATER_BLESSING_OF_MIGHT,
HEALBOT_GREATER_BLESSING_OF_WISDOM, HEALBOT_GREATER_BLESSING_OF_WISDOM,
HEALBOT_GREATER_BLESSING_OF_SALVATION, HEALBOT_GREATER_BLESSING_OF_SALVATION,
HEALBOT_GREATER_BLESSING_OF_LIGHT, HEALBOT_GREATER_BLESSING_OF_LIGHT,
HEALBOT_GREATER_BLESSING_OF_SANCTUARY, HEALBOT_GREATER_BLESSING_OF_SANCTUARY,
HEALBOT_RIGHTEOUS_FURY, HEALBOT_RIGHTEOUS_FURY,
}, },
[HEALBOT_DRUID] = { [HEALBOT_DRUID] = {
HEALBOT_MARK_OF_THE_WILD, HEALBOT_MARK_OF_THE_WILD,
HEALBOT_GIFT_OF_THE_WILD, HEALBOT_GIFT_OF_THE_WILD,
HEALBOT_THORNS, HEALBOT_THORNS,
HEALBOT_OMEN_OF_CLARITY, HEALBOT_OMEN_OF_CLARITY,
}, },
[HEALBOT_PRIEST] = { [HEALBOT_PRIEST] = {
HEALBOT_POWER_WORD_FORTITUDE, HEALBOT_POWER_WORD_FORTITUDE,
HEALBOT_PRAYER_OF_FORTITUDE, HEALBOT_PRAYER_OF_FORTITUDE,
HEALBOT_DIVINE_SPIRIT, HEALBOT_DIVINE_SPIRIT,
HEALBOT_PRAYER_OF_SPIRIT, HEALBOT_PRAYER_OF_SPIRIT,
HEALBOT_SHADOW_PROTECTION, HEALBOT_SHADOW_PROTECTION,
HEALBOT_PRAYER_OF_SHADOW_PROTECTION, HEALBOT_PRAYER_OF_SHADOW_PROTECTION,
HEALBOT_INNER_FIRE, HEALBOT_INNER_FIRE,
HEALBOT_FEAR_WARD, HEALBOT_FEAR_WARD,
HEALBOT_SHADOWFORM, HEALBOT_SHADOWFORM,
HEALBOT_ENLIGHTEN, HEALBOT_ENLIGHTEN,
}, },
[HEALBOT_MAGE] = { [HEALBOT_MAGE] = {
HEALBOT_ARCANE_INTELLECT, HEALBOT_ARCANE_INTELLECT,
HEALBOT_ARCANE_BRILLIANCE, HEALBOT_ARCANE_BRILLIANCE,
HEALBOT_DAMPEN_MAGIC, HEALBOT_DAMPEN_MAGIC,
HEALBOT_AMPLIFY_MAGIC, HEALBOT_AMPLIFY_MAGIC,
HEALBOT_FROST_ARMOR, HEALBOT_FROST_ARMOR,
HEALBOT_ICE_ARMOR, HEALBOT_ICE_ARMOR,
HEALBOT_MAGE_ARMOR, HEALBOT_MAGE_ARMOR,
HEALBOT_ICE_BARRIER, HEALBOT_ICE_BARRIER,
}, },
[HEALBOT_SHAMAN] = { [HEALBOT_SHAMAN] = {
HEALBOT_ROCKBITER_WEAPON, HEALBOT_ROCKBITER_WEAPON,
HEALBOT_FLAMETONGUE_WEAPON, HEALBOT_FLAMETONGUE_WEAPON,
HEALBOT_FROSTBRAND_WEAPON, HEALBOT_FROSTBRAND_WEAPON,
HEALBOT_WINDFURY_WEAPON, HEALBOT_WINDFURY_WEAPON,
HEALBOT_LIGHTNING_SHIELD, HEALBOT_LIGHTNING_SHIELD,
HEALBOT_WATER_SHIELD, HEALBOT_WATER_SHIELD,
HEALBOT_WATER_WALKING, HEALBOT_WATER_WALKING,
HEALBOT_WATER_BREATHING, HEALBOT_WATER_BREATHING,
}, },
[HEALBOT_WARRIOR] = { [HEALBOT_WARRIOR] = {
HEALBOT_BATTLE_SHOUT, HEALBOT_BATTLE_SHOUT,
}, },
[HEALBOT_WARLOCK] = { [HEALBOT_WARLOCK] = {
HEALBOT_DEMON_SKIN, HEALBOT_DEMON_SKIN,
HEALBOT_DEMON_ARMOR, HEALBOT_DEMON_ARMOR,
HEALBOT_UNENDING_BREATH, HEALBOT_UNENDING_BREATH,
HEALBOT_DETECT_LESSER_INVISIBILITY, HEALBOT_DETECT_LESSER_INVISIBILITY,
HEALBOT_DETECT_INVISIBILITY, HEALBOT_DETECT_INVISIBILITY,
}, },
[HEALBOT_HUNTER] = { [HEALBOT_HUNTER] = {
HEALBOT_TRUESHOT_AURA, HEALBOT_TRUESHOT_AURA,
HEALBOT_ASPECT_OF_THE_HAWK, HEALBOT_ASPECT_OF_THE_HAWK,
HEALBOT_ASPECT_OF_THE_MONKEY, HEALBOT_ASPECT_OF_THE_MONKEY,
HEALBOT_ASPECT_OF_THE_CHEETAH, HEALBOT_ASPECT_OF_THE_CHEETAH,
HEALBOT_ASPECT_OF_THE_PACK, HEALBOT_ASPECT_OF_THE_PACK,
HEALBOT_ASPECT_OF_THE_WILD, HEALBOT_ASPECT_OF_THE_WILD,
HEALBOT_ASPECT_OF_THE_BEAST, HEALBOT_ASPECT_OF_THE_BEAST,
}, },
[HEALBOT_ROGUE] = {}, [HEALBOT_ROGUE] = {},
} }
HealBot_SelfOnly_Buffs = { HealBot_SelfOnly_Buffs = {
[HEALBOT_DEMON_SKIN] = true, [HEALBOT_DEMON_SKIN] = true,
[HEALBOT_DEMON_ARMOR] = true, [HEALBOT_DEMON_ARMOR] = true,
[HEALBOT_ASPECT_OF_THE_HAWK] = true, [HEALBOT_ASPECT_OF_THE_HAWK] = true,
[HEALBOT_ASPECT_OF_THE_MONKEY] = true, [HEALBOT_ASPECT_OF_THE_MONKEY] = true,
[HEALBOT_ASPECT_OF_THE_CHEETAH] = true, [HEALBOT_ASPECT_OF_THE_CHEETAH] = true,
[HEALBOT_ASPECT_OF_THE_BEAST] = true, [HEALBOT_ASPECT_OF_THE_BEAST] = true,
[HEALBOT_FROST_ARMOR] = true, [HEALBOT_FROST_ARMOR] = true,
[HEALBOT_ICE_ARMOR] = true, [HEALBOT_ICE_ARMOR] = true,
[HEALBOT_MAGE_ARMOR] = true, [HEALBOT_MAGE_ARMOR] = true,
[HEALBOT_ICE_BARRIER] = true, [HEALBOT_ICE_BARRIER] = true,
[HEALBOT_RIGHTEOUS_FURY] = true, [HEALBOT_RIGHTEOUS_FURY] = true,
[HEALBOT_INNER_FIRE] = true, [HEALBOT_INNER_FIRE] = true,
[HEALBOT_SHADOWFORM] = true, [HEALBOT_SHADOWFORM] = true,
[HEALBOT_LIGHTNING_SHIELD] = true, [HEALBOT_LIGHTNING_SHIELD] = true,
[HEALBOT_WATER_SHIELD] = true, [HEALBOT_WATER_SHIELD] = true,
[HEALBOT_ROCKBITER_WEAPON] = true, [HEALBOT_ROCKBITER_WEAPON] = true,
[HEALBOT_FLAMETONGUE_WEAPON] = true, [HEALBOT_FLAMETONGUE_WEAPON] = true,
[HEALBOT_FROSTBRAND_WEAPON] = true, [HEALBOT_FROSTBRAND_WEAPON] = true,
[HEALBOT_WINDFURY_WEAPON] = true, [HEALBOT_WINDFURY_WEAPON] = true,
} }
HealBot_Debuff_Types = { HealBot_Debuff_Types = {
[HEALBOT_PURIFY] = {HEALBOT_DISEASE_en, HEALBOT_POISON_en}, [HEALBOT_PURIFY] = {HEALBOT_DISEASE_en, HEALBOT_POISON_en},
[HEALBOT_CLEANSE] = {HEALBOT_DISEASE_en, HEALBOT_POISON_en, HEALBOT_MAGIC_en}, [HEALBOT_CLEANSE] = {HEALBOT_DISEASE_en, HEALBOT_POISON_en, HEALBOT_MAGIC_en},
+62 -54
View File
@@ -81,59 +81,59 @@ HEALBOT_CHAIN_HEAL = "Kettenheilung";
HEALBOT_POWER_WORD_FORTITUDE = "Machtwort: Seelenst\195\164rke"; HEALBOT_POWER_WORD_FORTITUDE = "Machtwort: Seelenst\195\164rke";
HEALBOT_MARK_OF_THE_WILD = "Mal der Wildnis"; HEALBOT_MARK_OF_THE_WILD = "Mal der Wildnis";
HEALBOT_BLESSING_OF_SALVATION = "Segen der Rettung"; HEALBOT_BLESSING_OF_SALVATION = "Segen der Rettung";
HEALBOT_BATTLE_SHOUT = "Schlachtruf"; HEALBOT_BATTLE_SHOUT = "Schlachtruf";
HEALBOT_BLOODRAGE = "Blutrausch"; HEALBOT_BLOODRAGE = "Blutrausch";
HEALBOT_BERSERKER_RAGE = "Berserkerwut"; HEALBOT_BERSERKER_RAGE = "Berserkerwut";
HEALBOT_DEMON_SKIN = "D\195\164monenhaut"; HEALBOT_DEMON_SKIN = "D\195\164monenhaut";
HEALBOT_DEMON_ARMOR = "D\195\164monenr\195\188stung"; HEALBOT_DEMON_ARMOR = "D\195\164monenr\195\188stung";
HEALBOT_UNENDING_BREATH = "Unendlicher Atem"; HEALBOT_UNENDING_BREATH = "Unendlicher Atem";
HEALBOT_DETECT_LESSER_INVISIBILITY = "Geringe Unsichtbarkeit entdecken"; HEALBOT_DETECT_LESSER_INVISIBILITY = "Geringe Unsichtbarkeit entdecken";
HEALBOT_DETECT_INVISIBILITY = "Unsichtbarkeit entdecken"; HEALBOT_DETECT_INVISIBILITY = "Unsichtbarkeit entdecken";
HEALBOT_SHADOW_WARD = "Schattenzauberschutz"; HEALBOT_SHADOW_WARD = "Schattenzauberschutz";
HEALBOT_SOULSTONE_RESURRECTION = "Seelenstein-Auferstehung"; HEALBOT_SOULSTONE_RESURRECTION = "Seelenstein-Auferstehung";
HEALBOT_FIRE_SHIELD = "Feuerschild"; HEALBOT_FIRE_SHIELD = "Feuerschild";
HEALBOT_TRUESHOT_AURA = "Aura des Volltreffers"; HEALBOT_TRUESHOT_AURA = "Aura des Volltreffers";
HEALBOT_ASPECT_OF_THE_HAWK = "Aspekt des Falken"; HEALBOT_ASPECT_OF_THE_HAWK = "Aspekt des Falken";
HEALBOT_ASPECT_OF_THE_MONKEY = "Aspekt des Affen"; HEALBOT_ASPECT_OF_THE_MONKEY = "Aspekt des Affen";
HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspekt des Geparden"; HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspekt des Geparden";
HEALBOT_ASPECT_OF_THE_PACK = "Aspekt des Rudels"; HEALBOT_ASPECT_OF_THE_PACK = "Aspekt des Rudels";
HEALBOT_ASPECT_OF_THE_WILD = "Aspekt der Wildnis"; HEALBOT_ASPECT_OF_THE_WILD = "Aspekt der Wildnis";
HEALBOT_ASPECT_OF_THE_BEAST = "Aspekt des Wildtiers"; HEALBOT_ASPECT_OF_THE_BEAST = "Aspekt des Wildtiers";
HEALBOT_STEALTH = "Verstohlenheit"; HEALBOT_STEALTH = "Verstohlenheit";
HEALBOT_BLADE_FLURRY = "Klingenwirbel"; HEALBOT_BLADE_FLURRY = "Klingenwirbel";
HEALBOT_EVASION = "Entrinnen"; HEALBOT_EVASION = "Entrinnen";
HEALBOT_SPRINT = "Sprinten"; HEALBOT_SPRINT = "Sprinten";
HEALBOT_SLICE_AND_DICE = "Zerh\195\164ckseln"; HEALBOT_SLICE_AND_DICE = "Zerh\195\164ckseln";
HEALBOT_FROST_ARMOR = "Frostr\195\188stung"; HEALBOT_FROST_ARMOR = "Frostr\195\188stung";
HEALBOT_ICE_ARMOR = "Eisr\195\188stung"; HEALBOT_ICE_ARMOR = "Eisr\195\188stung";
HEALBOT_MAGE_ARMOR = "Magische R\195\188stung"; HEALBOT_MAGE_ARMOR = "Magische R\195\188stung";
HEALBOT_MANA_SHIELD = "Manaschild"; HEALBOT_MANA_SHIELD = "Manaschild";
HEALBOT_ICE_BARRIER = "Eisbarriere"; HEALBOT_ICE_BARRIER = "Eisbarriere";
HEALBOT_FIRE_WARD = "Feuerzauberschutz"; HEALBOT_FIRE_WARD = "Feuerzauberschutz";
HEALBOT_FROST_WARD = "Frostzauberschutz"; HEALBOT_FROST_WARD = "Frostzauberschutz";
HEALBOT_GREATER_BLESSING_OF_SALVATION = "Gro\195\159er Segen der Rettung"; HEALBOT_GREATER_BLESSING_OF_SALVATION = "Gro\195\159er Segen der Rettung";
HEALBOT_GREATER_BLESSING_OF_MIGHT = "Gro\195\159er Segen der Macht"; HEALBOT_GREATER_BLESSING_OF_MIGHT = "Gro\195\159er Segen der Macht";
HEALBOT_GREATER_BLESSING_OF_WISDOM = "Gro\195\159er Segen der Weisheit"; HEALBOT_GREATER_BLESSING_OF_WISDOM = "Gro\195\159er Segen der Weisheit";
HEALBOT_GREATER_BLESSING_OF_KINGS = "Gro\195\159er Segen der K\195\182nige"; HEALBOT_GREATER_BLESSING_OF_KINGS = "Gro\195\159er Segen der K\195\182nige";
HEALBOT_GREATER_BLESSING_OF_LIGHT = "Gro\195\159er Segen des Lichts"; HEALBOT_GREATER_BLESSING_OF_LIGHT = "Gro\195\159er Segen des Lichts";
HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "Gro\195\159er Segen des Unterschlupfs"; HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "Gro\195\159er Segen des Unterschlupfs";
HEALBOT_RIGHTEOUS_FURY = "Zorn der Gerechtigkeit"; HEALBOT_RIGHTEOUS_FURY = "Zorn der Gerechtigkeit";
HEALBOT_SHADOWFORM = "Schattengestalt"; HEALBOT_SHADOWFORM = "Schattengestalt";
HEALBOT_BARKSKIN = "Baumrinde"; HEALBOT_BARKSKIN = "Baumrinde";
HEALBOT_NATURES_GRASP = "Griff der Natur"; HEALBOT_NATURES_GRASP = "Griff der Natur";
HEALBOT_LIGHTNING_SHIELD = "Blitzschlagschild"; HEALBOT_LIGHTNING_SHIELD = "Blitzschlagschild";
HEALBOT_WATER_SHIELD = "Wasserschild"; HEALBOT_WATER_SHIELD = "Wasserschild";
HEALBOT_WATER_WALKING = "Wasserwandeln"; HEALBOT_WATER_WALKING = "Wasserwandeln";
HEALBOT_WATER_BREATHING = "Wasseratmung"; HEALBOT_WATER_BREATHING = "Wasseratmung";
HEALBOT_RESURRECTION = "Auferstehung"; HEALBOT_RESURRECTION = "Auferstehung";
@@ -148,7 +148,7 @@ HEALBOT_CLEANSE = "Reinigung des Glaubens";
HEALBOT_DISPEL_MAGIC = "Magiebannung"; HEALBOT_DISPEL_MAGIC = "Magiebannung";
HEALBOT_CURE_POISON = "Vergiftung heilen"; HEALBOT_CURE_POISON = "Vergiftung heilen";
HEALBOT_ABOLISH_POISON = "Vergiftung aufheben"; HEALBOT_ABOLISH_POISON = "Vergiftung aufheben";
HEALBOT_REMOVE_CURSE = "Fluch aufheben"; HEALBOT_REMOVE_CURSE = "Fluch aufheben";
HEALBOT_REMOVE_LESSER_CURSE= "Geringeren Fluch aufheben"; HEALBOT_REMOVE_LESSER_CURSE= "Geringeren Fluch aufheben";
HEALBOT_DISEASE = "Krankheit"; HEALBOT_DISEASE = "Krankheit";
HEALBOT_MAGIC = "Magie"; HEALBOT_MAGIC = "Magie";
@@ -419,3 +419,11 @@ end
HEALBOT_OPTIONS_CDCOVERLAY = "Debuff visual:";
HEALBOT_OPTIONS_CDCOVERLAY_BAR = "Whole Bar";
HEALBOT_OPTIONS_CDCOVERLAY_FRAME = "Frame / Border";
HEALBOT_OPTIONS_CDCOVERLAY_GLOW = "Glow Effect";
HEALBOT_OPTIONS_CDCOVERLAY_GLOWFRAME = "Glow + Frame";
HEALBOT_OPTIONS_CDCOVERLAY_NONE = "Disabled";
HEALBOT_OPTIONS_CDCOVERLAY_ANIMATED = "Animated";
+62 -54
View File
@@ -93,59 +93,59 @@ HEALBOT_THORNS = "Thorns";
HEALBOT_OMEN_OF_CLARITY = "Omen of Clarity"; HEALBOT_OMEN_OF_CLARITY = "Omen of Clarity";
HEALBOT_INNER_FIRE = "Inner Fire"; HEALBOT_INNER_FIRE = "Inner Fire";
HEALBOT_FEAR_WARD = "Fear Ward"; HEALBOT_FEAR_WARD = "Fear Ward";
HEALBOT_ENLIGHTEN = "Enlighten"; HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_BATTLE_SHOUT = "Battle Shout"; HEALBOT_BATTLE_SHOUT = "Battle Shout";
HEALBOT_BLOODRAGE = "Bloodrage"; HEALBOT_BLOODRAGE = "Bloodrage";
HEALBOT_BERSERKER_RAGE = "Berserker Rage"; HEALBOT_BERSERKER_RAGE = "Berserker Rage";
HEALBOT_DEMON_SKIN = "Demon Skin"; HEALBOT_DEMON_SKIN = "Demon Skin";
HEALBOT_DEMON_ARMOR = "Demon Armor"; HEALBOT_DEMON_ARMOR = "Demon Armor";
HEALBOT_UNENDING_BREATH = "Unending Breath"; HEALBOT_UNENDING_BREATH = "Unending Breath";
HEALBOT_DETECT_LESSER_INVISIBILITY = "Detect Lesser Invisibility"; HEALBOT_DETECT_LESSER_INVISIBILITY = "Detect Lesser Invisibility";
HEALBOT_DETECT_INVISIBILITY = "Detect Invisibility"; HEALBOT_DETECT_INVISIBILITY = "Detect Invisibility";
HEALBOT_SHADOW_WARD = "Shadow Ward"; HEALBOT_SHADOW_WARD = "Shadow Ward";
HEALBOT_SOULSTONE_RESURRECTION = "Soulstone Resurrection"; HEALBOT_SOULSTONE_RESURRECTION = "Soulstone Resurrection";
HEALBOT_FIRE_SHIELD = "Fire Shield"; HEALBOT_FIRE_SHIELD = "Fire Shield";
HEALBOT_TRUESHOT_AURA = "Trueshot Aura"; HEALBOT_TRUESHOT_AURA = "Trueshot Aura";
HEALBOT_ASPECT_OF_THE_HAWK = "Aspect of the Hawk"; HEALBOT_ASPECT_OF_THE_HAWK = "Aspect of the Hawk";
HEALBOT_ASPECT_OF_THE_MONKEY = "Aspect of the Monkey"; HEALBOT_ASPECT_OF_THE_MONKEY = "Aspect of the Monkey";
HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspect of the Cheetah"; HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspect of the Cheetah";
HEALBOT_ASPECT_OF_THE_PACK = "Aspect of the Pack"; HEALBOT_ASPECT_OF_THE_PACK = "Aspect of the Pack";
HEALBOT_ASPECT_OF_THE_WILD = "Aspect of the Wild"; HEALBOT_ASPECT_OF_THE_WILD = "Aspect of the Wild";
HEALBOT_ASPECT_OF_THE_BEAST = "Aspect of the Beast"; HEALBOT_ASPECT_OF_THE_BEAST = "Aspect of the Beast";
HEALBOT_STEALTH = "Stealth"; HEALBOT_STEALTH = "Stealth";
HEALBOT_BLADE_FLURRY = "Blade Flurry"; HEALBOT_BLADE_FLURRY = "Blade Flurry";
HEALBOT_EVASION = "Evasion"; HEALBOT_EVASION = "Evasion";
HEALBOT_SPRINT = "Sprint"; HEALBOT_SPRINT = "Sprint";
HEALBOT_SLICE_AND_DICE = "Slice and Dice"; HEALBOT_SLICE_AND_DICE = "Slice and Dice";
HEALBOT_FROST_ARMOR = "Frost Armor"; HEALBOT_FROST_ARMOR = "Frost Armor";
HEALBOT_ICE_ARMOR = "Ice Armor"; HEALBOT_ICE_ARMOR = "Ice Armor";
HEALBOT_MAGE_ARMOR = "Mage Armor"; HEALBOT_MAGE_ARMOR = "Mage Armor";
HEALBOT_MANA_SHIELD = "Mana Shield"; HEALBOT_MANA_SHIELD = "Mana Shield";
HEALBOT_ICE_BARRIER = "Ice Barrier"; HEALBOT_ICE_BARRIER = "Ice Barrier";
HEALBOT_FIRE_WARD = "Fire Ward"; HEALBOT_FIRE_WARD = "Fire Ward";
HEALBOT_FROST_WARD = "Frost Ward"; HEALBOT_FROST_WARD = "Frost Ward";
HEALBOT_GREATER_BLESSING_OF_SALVATION = "Greater Blessing of Salvation"; HEALBOT_GREATER_BLESSING_OF_SALVATION = "Greater Blessing of Salvation";
HEALBOT_GREATER_BLESSING_OF_MIGHT = "Greater Blessing of Might"; HEALBOT_GREATER_BLESSING_OF_MIGHT = "Greater Blessing of Might";
HEALBOT_GREATER_BLESSING_OF_WISDOM = "Greater Blessing of Wisdom"; HEALBOT_GREATER_BLESSING_OF_WISDOM = "Greater Blessing of Wisdom";
HEALBOT_GREATER_BLESSING_OF_KINGS = "Greater Blessing of Kings"; HEALBOT_GREATER_BLESSING_OF_KINGS = "Greater Blessing of Kings";
HEALBOT_GREATER_BLESSING_OF_LIGHT = "Greater Blessing of Light"; HEALBOT_GREATER_BLESSING_OF_LIGHT = "Greater Blessing of Light";
HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "Greater Blessing of Sanctuary"; HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "Greater Blessing of Sanctuary";
HEALBOT_RIGHTEOUS_FURY = "Righteous Fury"; HEALBOT_RIGHTEOUS_FURY = "Righteous Fury";
HEALBOT_SHADOWFORM = "Shadowform"; HEALBOT_SHADOWFORM = "Shadowform";
HEALBOT_BARKSKIN = "Barkskin"; HEALBOT_BARKSKIN = "Barkskin";
HEALBOT_NATURES_GRASP = "Nature's Grasp"; HEALBOT_NATURES_GRASP = "Nature's Grasp";
HEALBOT_LIGHTNING_SHIELD = "Lightning Shield"; HEALBOT_LIGHTNING_SHIELD = "Lightning Shield";
HEALBOT_WATER_SHIELD = "Water Shield"; HEALBOT_WATER_SHIELD = "Water Shield";
HEALBOT_WATER_WALKING = "Water Walking"; HEALBOT_WATER_WALKING = "Water Walking";
HEALBOT_WATER_BREATHING = "Water Breathing"; HEALBOT_WATER_BREATHING = "Water Breathing";
HEALBOT_RESURRECTION = "Resurrection"; HEALBOT_RESURRECTION = "Resurrection";
@@ -156,7 +156,7 @@ HEALBOT_ANCESTRALSPIRIT = "Ancestral Spirit";
HEALBOT_PURIFY = "Purify"; HEALBOT_PURIFY = "Purify";
HEALBOT_CLEANSE = "Cleanse"; HEALBOT_CLEANSE = "Cleanse";
HEALBOT_CURE_POISON = "Cure Poison"; HEALBOT_CURE_POISON = "Cure Poison";
HEALBOT_REMOVE_CURSE = "Remove Curse"; HEALBOT_REMOVE_CURSE = "Remove Curse";
HEALBOT_REMOVE_LESSER_CURSE= "Remove Lesser Curse"; HEALBOT_REMOVE_LESSER_CURSE= "Remove Lesser Curse";
HEALBOT_ABOLISH_POISON = "Abolish Poison"; HEALBOT_ABOLISH_POISON = "Abolish Poison";
HEALBOT_CURE_DISEASE = "Cure Disease"; HEALBOT_CURE_DISEASE = "Cure Disease";
@@ -449,3 +449,11 @@ HEALBOT_WORDS_CAST = "Cast"
HEALBOT_WORDS_FOR = "for"; HEALBOT_WORDS_FOR = "for";
HEALBOT_OPTIONS_TESTBARS = "Test Bars"; HEALBOT_OPTIONS_TESTBARS = "Test Bars";
HEALBOT_WORD_TEST = "Test"; HEALBOT_WORD_TEST = "Test";
HEALBOT_OPTIONS_CDCOVERLAY = "Debuff visual:";
HEALBOT_OPTIONS_CDCOVERLAY_BAR = "Whole Bar";
HEALBOT_OPTIONS_CDCOVERLAY_FRAME = "Frame / Border";
HEALBOT_OPTIONS_CDCOVERLAY_GLOW = "Glow Effect";
HEALBOT_OPTIONS_CDCOVERLAY_GLOWFRAME = "Glow + Frame";
HEALBOT_OPTIONS_CDCOVERLAY_NONE = "Disabled";
HEALBOT_OPTIONS_CDCOVERLAY_ANIMATED = "Animated";
+62 -54
View File
@@ -81,59 +81,59 @@ HEALBOT_CHAIN_HEAL = "Salve de gu\195\169rison";
HEALBOT_POWER_WORD_FORTITUDE = "Mot de pouvoir : Robustesse"; HEALBOT_POWER_WORD_FORTITUDE = "Mot de pouvoir : Robustesse";
HEALBOT_MARK_OF_THE_WILD = "Marque du fauve"; HEALBOT_MARK_OF_THE_WILD = "Marque du fauve";
HEALBOT_BLESSING_OF_SALVATION = "B\195\169n\195\169diction de salut"; HEALBOT_BLESSING_OF_SALVATION = "B\195\169n\195\169diction de salut";
HEALBOT_BATTLE_SHOUT = "Cri de guerre"; HEALBOT_BATTLE_SHOUT = "Cri de guerre";
HEALBOT_BLOODRAGE = "Rage sanguinaire"; HEALBOT_BLOODRAGE = "Rage sanguinaire";
HEALBOT_BERSERKER_RAGE = "Rage berserker"; HEALBOT_BERSERKER_RAGE = "Rage berserker";
HEALBOT_DEMON_SKIN = "Peau de d\195\169mon"; HEALBOT_DEMON_SKIN = "Peau de d\195\169mon";
HEALBOT_DEMON_ARMOR = "Armure d\195\169moniaque"; HEALBOT_DEMON_ARMOR = "Armure d\195\169moniaque";
HEALBOT_UNENDING_BREATH = "Respiration interminable"; HEALBOT_UNENDING_BREATH = "Respiration interminable";
HEALBOT_DETECT_LESSER_INVISIBILITY = "D\195\169tection de l'invisibilit\195\169 inf\195\169rieure"; HEALBOT_DETECT_LESSER_INVISIBILITY = "D\195\169tection de l'invisibilit\195\169 inf\195\169rieure";
HEALBOT_DETECT_INVISIBILITY = "D\195\169tection de l'invisibilit\195\169"; HEALBOT_DETECT_INVISIBILITY = "D\195\169tection de l'invisibilit\195\169";
HEALBOT_SHADOW_WARD = "Gardien de l'ombre"; HEALBOT_SHADOW_WARD = "Gardien de l'ombre";
HEALBOT_SOULSTONE_RESURRECTION = "R\195\169surrection de pierre d'\195\162me"; HEALBOT_SOULSTONE_RESURRECTION = "R\195\169surrection de pierre d'\195\162me";
HEALBOT_FIRE_SHIELD = "Bouclier de feu"; HEALBOT_FIRE_SHIELD = "Bouclier de feu";
HEALBOT_TRUESHOT_AURA = "Aura de pr\195\169cision"; HEALBOT_TRUESHOT_AURA = "Aura de pr\195\169cision";
HEALBOT_ASPECT_OF_THE_HAWK = "Aspect du faucon"; HEALBOT_ASPECT_OF_THE_HAWK = "Aspect du faucon";
HEALBOT_ASPECT_OF_THE_MONKEY = "Aspect du singe"; HEALBOT_ASPECT_OF_THE_MONKEY = "Aspect du singe";
HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspect du gu\195\169pard"; HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspect du gu\195\169pard";
HEALBOT_ASPECT_OF_THE_PACK = "Aspect de la meute"; HEALBOT_ASPECT_OF_THE_PACK = "Aspect de la meute";
HEALBOT_ASPECT_OF_THE_WILD = "Aspect de la nature"; HEALBOT_ASPECT_OF_THE_WILD = "Aspect de la nature";
HEALBOT_ASPECT_OF_THE_BEAST = "Aspect de la b\195\170te"; HEALBOT_ASPECT_OF_THE_BEAST = "Aspect de la b\195\170te";
HEALBOT_STEALTH = "Camouflage"; HEALBOT_STEALTH = "Camouflage";
HEALBOT_BLADE_FLURRY = "D\195\169luge de lames"; HEALBOT_BLADE_FLURRY = "D\195\169luge de lames";
HEALBOT_EVASION = "Evasion"; HEALBOT_EVASION = "Evasion";
HEALBOT_SPRINT = "Sprint"; HEALBOT_SPRINT = "Sprint";
HEALBOT_SLICE_AND_DICE = "D\195\169biter"; HEALBOT_SLICE_AND_DICE = "D\195\169biter";
HEALBOT_FROST_ARMOR = "Armure de givre"; HEALBOT_FROST_ARMOR = "Armure de givre";
HEALBOT_ICE_ARMOR = "Armure de glace"; HEALBOT_ICE_ARMOR = "Armure de glace";
HEALBOT_MAGE_ARMOR = "Armure du mage"; HEALBOT_MAGE_ARMOR = "Armure du mage";
HEALBOT_MANA_SHIELD = "Bouclier de mana"; HEALBOT_MANA_SHIELD = "Bouclier de mana";
HEALBOT_ICE_BARRIER = "Barri\195\168re de glace"; HEALBOT_ICE_BARRIER = "Barri\195\168re de glace";
HEALBOT_FIRE_WARD = "Gardien de feu"; HEALBOT_FIRE_WARD = "Gardien de feu";
HEALBOT_FROST_WARD = "Gardien de givre"; HEALBOT_FROST_WARD = "Gardien de givre";
HEALBOT_GREATER_BLESSING_OF_SALVATION = "B\195\169n\195\169diction de salut sup\195\169rieure"; HEALBOT_GREATER_BLESSING_OF_SALVATION = "B\195\169n\195\169diction de salut sup\195\169rieure";
HEALBOT_GREATER_BLESSING_OF_MIGHT = "B\195\169n\195\169diction de puissance sup\195\169rieure"; HEALBOT_GREATER_BLESSING_OF_MIGHT = "B\195\169n\195\169diction de puissance sup\195\169rieure";
HEALBOT_GREATER_BLESSING_OF_WISDOM = "B\195\169n\195\169diction de sagesse sup\195\169rieure"; HEALBOT_GREATER_BLESSING_OF_WISDOM = "B\195\169n\195\169diction de sagesse sup\195\169rieure";
HEALBOT_GREATER_BLESSING_OF_KINGS = "B\195\169n\195\169diction des rois sup\195\169rieure"; HEALBOT_GREATER_BLESSING_OF_KINGS = "B\195\169n\195\169diction des rois sup\195\169rieure";
HEALBOT_GREATER_BLESSING_OF_LIGHT = "B\195\169n\195\169diction de lumi\195\168re sup\195\169rieure"; HEALBOT_GREATER_BLESSING_OF_LIGHT = "B\195\169n\195\169diction de lumi\195\168re sup\195\169rieure";
HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "B\195\169n\195\169diction du sanctuaire sup\195\169rieure"; HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "B\195\169n\195\169diction du sanctuaire sup\195\169rieure";
HEALBOT_RIGHTEOUS_FURY = "Fureur vertueuse"; HEALBOT_RIGHTEOUS_FURY = "Fureur vertueuse";
HEALBOT_SHADOWFORM = "Forme d'Ombre"; HEALBOT_SHADOWFORM = "Forme d'Ombre";
HEALBOT_BARKSKIN = "Peau d'\195\169corce"; HEALBOT_BARKSKIN = "Peau d'\195\169corce";
HEALBOT_NATURES_GRASP = "Emprise de la nature"; HEALBOT_NATURES_GRASP = "Emprise de la nature";
HEALBOT_LIGHTNING_SHIELD = "Bouclier de foudre"; HEALBOT_LIGHTNING_SHIELD = "Bouclier de foudre";
HEALBOT_WATER_SHIELD = "Bouclier d'eau"; HEALBOT_WATER_SHIELD = "Bouclier d'eau";
HEALBOT_WATER_WALKING = "Marche sur l'eau"; HEALBOT_WATER_WALKING = "Marche sur l'eau";
HEALBOT_WATER_BREATHING = "Respiration aquatique"; HEALBOT_WATER_BREATHING = "Respiration aquatique";
HEALBOT_RESURRECTION = "R\195\169surrection"; HEALBOT_RESURRECTION = "R\195\169surrection";
@@ -144,7 +144,7 @@ HEALBOT_ANCESTRALSPIRIT = "Esprit Ancestral";
HEALBOT_PURIFY = "Purification"; HEALBOT_PURIFY = "Purification";
HEALBOT_CLEANSE = "Epuration"; HEALBOT_CLEANSE = "Epuration";
HEALBOT_CURE_POISON = "Gu\195\169rison du poison"; HEALBOT_CURE_POISON = "Gu\195\169rison du poison";
HEALBOT_REMOVE_CURSE = "D\195\169livrance de la mal\195\169diction"; HEALBOT_REMOVE_CURSE = "D\195\169livrance de la mal\195\169diction";
HEALBOT_REMOVE_LESSER_CURSE= "D\195\169livrance de la mal\195\169diction mineure"; HEALBOT_REMOVE_LESSER_CURSE= "D\195\169livrance de la mal\195\169diction mineure";
HEALBOT_ABOLISH_POISON = "Abolir le poison"; HEALBOT_ABOLISH_POISON = "Abolir le poison";
HEALBOT_CURE_DISEASE = "Gu\195\169rison des maladies"; HEALBOT_CURE_DISEASE = "Gu\195\169rison des maladies";
@@ -400,3 +400,11 @@ end
HEALBOT_OPTIONS_CDCOVERLAY = "Debuff visual:";
HEALBOT_OPTIONS_CDCOVERLAY_BAR = "Whole Bar";
HEALBOT_OPTIONS_CDCOVERLAY_FRAME = "Frame / Border";
HEALBOT_OPTIONS_CDCOVERLAY_GLOW = "Glow Effect";
HEALBOT_OPTIONS_CDCOVERLAY_GLOWFRAME = "Glow + Frame";
HEALBOT_OPTIONS_CDCOVERLAY_NONE = "Disabled";
HEALBOT_OPTIONS_CDCOVERLAY_ANIMATED = "Animated";
+61 -53
View File
@@ -66,58 +66,58 @@ HEALBOT_INNER_FIRE = "내면의 열정";
HEALBOT_FEAR_WARD = "공포의 결계"; HEALBOT_FEAR_WARD = "공포의 결계";
HEALBOT_ENLIGHTEN = "Enlighten"; HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_MARK_OF_THE_WILD = "야생의 징표"; HEALBOT_MARK_OF_THE_WILD = "야생의 징표";
HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복"; HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_BATTLE_SHOUT = "전투의 외침"; HEALBOT_BATTLE_SHOUT = "전투의 외침";
HEALBOT_BLOODRAGE = "피의 분노"; HEALBOT_BLOODRAGE = "피의 분노";
HEALBOT_BERSERKER_RAGE = "광전사의 격노"; HEALBOT_BERSERKER_RAGE = "광전사의 격노";
HEALBOT_DEMON_SKIN = "악마의 피부"; HEALBOT_DEMON_SKIN = "악마의 피부";
HEALBOT_DEMON_ARMOR = "악마의 갑옷"; HEALBOT_DEMON_ARMOR = "악마의 갑옷";
HEALBOT_UNENDING_BREATH = "영원의 숨결"; HEALBOT_UNENDING_BREATH = "영원의 숨결";
HEALBOT_DETECT_LESSER_INVISIBILITY = "하급 투명체 감지"; HEALBOT_DETECT_LESSER_INVISIBILITY = "하급 투명체 감지";
HEALBOT_DETECT_INVISIBILITY = "투명체 감지"; HEALBOT_DETECT_INVISIBILITY = "투명체 감지";
HEALBOT_SHADOW_WARD = "암흑계 수호"; HEALBOT_SHADOW_WARD = "암흑계 수호";
HEALBOT_SOULSTONE_RESURRECTION = "영혼석 부활"; HEALBOT_SOULSTONE_RESURRECTION = "영혼석 부활";
HEALBOT_FIRE_SHIELD = "불의 방패"; HEALBOT_FIRE_SHIELD = "불의 방패";
HEALBOT_TRUESHOT_AURA = "정밀함의 오라"; HEALBOT_TRUESHOT_AURA = "정밀함의 오라";
HEALBOT_ASPECT_OF_THE_HAWK = "매의 상"; HEALBOT_ASPECT_OF_THE_HAWK = "매의 상";
HEALBOT_ASPECT_OF_THE_MONKEY = "원숭이의 상"; HEALBOT_ASPECT_OF_THE_MONKEY = "원숭이의 상";
HEALBOT_ASPECT_OF_THE_CHEETAH = "치타의 상"; HEALBOT_ASPECT_OF_THE_CHEETAH = "치타의 상";
HEALBOT_ASPECT_OF_THE_PACK = "치타 무리의 상"; HEALBOT_ASPECT_OF_THE_PACK = "치타 무리의 상";
HEALBOT_ASPECT_OF_THE_WILD = "야생의 상"; HEALBOT_ASPECT_OF_THE_WILD = "야생의 상";
HEALBOT_ASPECT_OF_THE_BEAST = "야수의 상"; HEALBOT_ASPECT_OF_THE_BEAST = "야수의 상";
HEALBOT_STEALTH = "은신"; HEALBOT_STEALTH = "은신";
HEALBOT_BLADE_FLURRY = "폭풍의 칼날"; HEALBOT_BLADE_FLURRY = "폭풍의 칼날";
HEALBOT_EVASION = "회피"; HEALBOT_EVASION = "회피";
HEALBOT_SPRINT = "전력 질주"; HEALBOT_SPRINT = "전력 질주";
HEALBOT_SLICE_AND_DICE = "난도질"; HEALBOT_SLICE_AND_DICE = "난도질";
HEALBOT_FROST_ARMOR = "서리 갑옷"; HEALBOT_FROST_ARMOR = "서리 갑옷";
HEALBOT_ICE_ARMOR = "얼음 갑옷"; HEALBOT_ICE_ARMOR = "얼음 갑옷";
HEALBOT_MAGE_ARMOR = "마법사 갑옷"; HEALBOT_MAGE_ARMOR = "마법사 갑옷";
HEALBOT_MANA_SHIELD = "마나 보호막"; HEALBOT_MANA_SHIELD = "마나 보호막";
HEALBOT_ICE_BARRIER = "얼음 보호막"; HEALBOT_ICE_BARRIER = "얼음 보호막";
HEALBOT_FIRE_WARD = "화염계 수호"; HEALBOT_FIRE_WARD = "화염계 수호";
HEALBOT_FROST_WARD = "냉기계 수호"; HEALBOT_FROST_WARD = "냉기계 수호";
HEALBOT_GREATER_BLESSING_OF_MIGHT = "상급 힘의 축복"; HEALBOT_GREATER_BLESSING_OF_MIGHT = "상급 힘의 축복";
HEALBOT_GREATER_BLESSING_OF_WISDOM = "상급 지혜의 축복"; HEALBOT_GREATER_BLESSING_OF_WISDOM = "상급 지혜의 축복";
HEALBOT_GREATER_BLESSING_OF_KINGS = "상급 왕의 축복"; HEALBOT_GREATER_BLESSING_OF_KINGS = "상급 왕의 축복";
HEALBOT_GREATER_BLESSING_OF_LIGHT = "상급 빛의 축복"; HEALBOT_GREATER_BLESSING_OF_LIGHT = "상급 빛의 축복";
HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "상급 성역의 축복"; HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "상급 성역의 축복";
HEALBOT_RIGHTEOUS_FURY = "정의의 격노"; HEALBOT_RIGHTEOUS_FURY = "정의의 격노";
HEALBOT_SHADOWFORM = "어둠의 형상"; HEALBOT_SHADOWFORM = "어둠의 형상";
HEALBOT_BARKSKIN = "나무 껍질"; HEALBOT_BARKSKIN = "나무 껍질";
HEALBOT_NATURES_GRASP = "자연의 파악"; HEALBOT_NATURES_GRASP = "자연의 파악";
HEALBOT_LIGHTNING_SHIELD = "번개 보호막"; HEALBOT_LIGHTNING_SHIELD = "번개 보호막";
HEALBOT_WATER_SHIELD = "물의 보호막"; HEALBOT_WATER_SHIELD = "물의 보호막";
HEALBOT_WATER_WALKING = "수면 보행"; HEALBOT_WATER_WALKING = "수면 보행";
HEALBOT_WATER_BREATHING = "수중 호흡"; HEALBOT_WATER_BREATHING = "수중 호흡";
HEALBOT_RESURRECTION = "부활"; HEALBOT_RESURRECTION = "부활";
@@ -128,7 +128,7 @@ HEALBOT_WATER_BREATHING = "수중 호흡";
HEALBOT_PURIFY = "정화"; HEALBOT_PURIFY = "정화";
HEALBOT_CLEANSE = "정화"; HEALBOT_CLEANSE = "정화";
HEALBOT_CURE_POISON = "해독"; HEALBOT_CURE_POISON = "해독";
HEALBOT_REMOVE_CURSE = "저주 해제"; HEALBOT_REMOVE_CURSE = "저주 해제";
HEALBOT_REMOVE_LESSER_CURSE = "하급 저주 해제"; HEALBOT_REMOVE_LESSER_CURSE = "하급 저주 해제";
HEALBOT_ABOLISH_POISON = "독 해제"; HEALBOT_ABOLISH_POISON = "독 해제";
HEALBOT_CURE_DISEASE = "질병 치료"; HEALBOT_CURE_DISEASE = "질병 치료";
@@ -394,3 +394,11 @@ end
HEALBOT_OPTIONS_CDCOVERLAY = "Debuff visual:";
HEALBOT_OPTIONS_CDCOVERLAY_BAR = "Whole Bar";
HEALBOT_OPTIONS_CDCOVERLAY_FRAME = "Frame / Border";
HEALBOT_OPTIONS_CDCOVERLAY_GLOW = "Glow Effect";
HEALBOT_OPTIONS_CDCOVERLAY_GLOWFRAME = "Glow + Frame";
HEALBOT_OPTIONS_CDCOVERLAY_NONE = "Disabled";
HEALBOT_OPTIONS_CDCOVERLAY_ANIMATED = "Animated";
+1
View File
@@ -341,6 +341,7 @@ function HealBot_Options_OnShow(this)
HealBot_Options_CDCButRight_Refresh() HealBot_Options_CDCButRight_Refresh()
HealBot_SetCDCBarColours() HealBot_SetCDCBarColours()
HealBot_Options_CDCMonitor_Refresh() HealBot_Options_CDCMonitor_Refresh()
HealBot_Options_CDCOverlay_Refresh()
HealBot_ComboButtons_Button_OnClick(nil,HealBot_Options_ComboButtons_Button); HealBot_ComboButtons_Button_OnClick(nil,HealBot_Options_ComboButtons_Button);
HealBot_Options_EnableHealthy:SetChecked(HealBot_Config.EnableHealthy); HealBot_Options_EnableHealthy:SetChecked(HealBot_Config.EnableHealthy);
HealBot_Options_NewSkinb:Disable(); HealBot_Options_NewSkinb:Disable();
+45
View File
@@ -43,6 +43,51 @@ function HealBot_WarningSound_OnClick(this,id)
end end
end end
end end
-- HealBot_Options_CDCOverlay_DropDown: UI handler for DropDown options panel.
function HealBot_Options_CDCOverlay_DropDown()
local list = {
HEALBOT_OPTIONS_CDCOVERLAY_BAR or "Whole Bar",
HEALBOT_OPTIONS_CDCOVERLAY_FRAME or "Frame / Border",
HEALBOT_OPTIONS_CDCOVERLAY_GLOW or "Glow Effect",
HEALBOT_OPTIONS_CDCOVERLAY_GLOWFRAME or "Glow + Frame",
HEALBOT_OPTIONS_CDCOVERLAY_ANIMATED or "Animated",
HEALBOT_OPTIONS_CDCOVERLAY_NONE or "Disabled",
};
for i=1, getn(list), 1 do
local info = {};
info.text = list[i];
info.func = HealBot_Options_CDCOverlay_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
-- HealBot_Options_CDCOverlay_Initialize: UI handler for Initialize options panel.
function HealBot_Options_CDCOverlay_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_CDCOverlay, HealBot_Options_CDCOverlay_DropDown)
end
-- HealBot_Options_CDCOverlay_Refresh: UI handler for Refresh options panel.
function HealBot_Options_CDCOverlay_Refresh(onselect)
if not HealBot_Config.CDCOverlay then HealBot_Config.CDCOverlay = 1 end
if not onselect then HealBot_Options_CDCOverlay_Initialize() end
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCOverlay, HealBot_Config.CDCOverlay)
end
-- HealBot_Options_CDCOverlay_OnLoad: UI handler for OnLoad options panel.
function HealBot_Options_CDCOverlay_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCOverlay_DropDown)
UIDropDownMenu_SetWidth(120, this)
end
-- HealBot_Options_CDCOverlay_OnSelect: UI handler for OnSelect options panel.
function HealBot_Options_CDCOverlay_OnSelect()
HealBot_Config.CDCOverlay = this:GetID()
HealBot_Options_CDCOverlay_Refresh(true)
if HealBot_Action_EnableButtons then
HealBot_Action_EnableButtons()
end
end
-- HealBot_Options_CDCMonitor_DropDown: UI handler for DropDown options panel. -- HealBot_Options_CDCMonitor_DropDown: UI handler for DropDown options panel.
function HealBot_Options_CDCMonitor_DropDown() function HealBot_Options_CDCMonitor_DropDown()
for i=1, getn(HealBot_Options_EmergencyFilter_List), 1 do for i=1, getn(HealBot_Options_EmergencyFilter_List), 1 do
+37 -10
View File
@@ -132,7 +132,7 @@
<Frame name="HealBot_Options_CureDispelCleanseCol"> <Frame name="HealBot_Options_CureDispelCleanseCol">
<Size> <Size>
<AbsDimension y="95"/> <AbsDimension y="125"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="TOPLEFT"> <Anchor point="TOPLEFT">
@@ -142,7 +142,7 @@
</Anchor> </Anchor>
<Anchor point="TOPRIGHT"> <Anchor point="TOPRIGHT">
<Offset> <Offset>
<AbsDimension x="-21" y="-190"/> <AbsDimension x="-21" y="-185"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -152,7 +152,7 @@
<Anchors> <Anchors>
<Anchor point="TOP"> <Anchor point="TOP">
<Offset> <Offset>
<AbsDimension x="0" y="-12" /> <AbsDimension x="0" y="-10" />
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -160,6 +160,33 @@
</Layer> </Layer>
</Layers> </Layers>
</Frame> </Frame>
<Frame name="HealBot_Options_CDCOverlay" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOP" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset>
<AbsDimension x="40" y="-28" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCOVERLAY">
<Anchors>
<Anchor point="RIGHT" relativeTo="HealBot_Options_CDCOverlay" relativePoint="LEFT">
<Offset>
<AbsDimension x="-5" y="3"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_CDCOverlay_OnLoad(this)
</OnLoad>
</Scripts>
</Frame>
<Button name="HealBot_DiseaseColorpickb"> <Button name="HealBot_DiseaseColorpickb">
<Size> <Size>
<AbsDimension x="130" y="20"/> <AbsDimension x="130" y="20"/>
@@ -167,7 +194,7 @@
<Anchors> <Anchors>
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP"> <Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset> <Offset>
<AbsDimension x="-2" y="-35"/> <AbsDimension x="-2" y="-62"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -182,7 +209,7 @@
<Anchors> <Anchors>
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP"> <Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset> <Offset>
<AbsDimension x="-2" y="-35"/> <AbsDimension x="-2" y="-62"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -259,7 +286,7 @@
<Anchors> <Anchors>
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP"> <Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset> <Offset>
<AbsDimension x="-2" y="-65"/> <AbsDimension x="-2" y="-92"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -274,7 +301,7 @@
<Anchors> <Anchors>
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP"> <Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset> <Offset>
<AbsDimension x="-2" y="-65"/> <AbsDimension x="-2" y="-92"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
@@ -346,17 +373,17 @@
<Frame name="HealBot_Options_CureDispelCleanseWarn"> <Frame name="HealBot_Options_CureDispelCleanseWarn">
<Size> <Size>
<AbsDimension y="120"/> <AbsDimension y="115"/>
</Size> </Size>
<Anchors> <Anchors>
<Anchor point="TOPLEFT"> <Anchor point="TOPLEFT">
<Offset> <Offset>
<AbsDimension x="21" y="-285"/> <AbsDimension x="21" y="-318"/>
</Offset> </Offset>
</Anchor> </Anchor>
<Anchor point="TOPRIGHT"> <Anchor point="TOPRIGHT">
<Offset> <Offset>
<AbsDimension x="-21" y="-290"/> <AbsDimension x="-21" y="-318"/>
</Offset> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
+125 -1
View File
@@ -30,7 +30,8 @@ end
-- HealBot_HealthColor: Computes health bar RGBA based on debuffs and class. -- HealBot_HealthColor: Computes health bar RGBA based on debuffs and class.
function HealBot_HealthColor(unit, hlth, maxhlth) function HealBot_HealthColor(unit, hlth, maxhlth)
local cached_debuff = HealBot_UnitDebuff[unit] local cached_debuff = HealBot_UnitDebuff[unit]
if cached_debuff then local overlayMode = HealBot_Config.CDCOverlay or 1
if cached_debuff and overlayMode == 1 then
local color = HealBot_Config.CDCBarColour[cached_debuff] local color = HealBot_Config.CDCBarColour[cached_debuff]
if color then if color then
local dr = color.R local dr = color.R
@@ -243,6 +244,103 @@ function HealBot_Action_EnableButton(button)
bar:SetStatusBarColor(r, g, b, HealBot_Config.bardisa[HealBot_Config.Current_Skin]); bar:SetStatusBarColor(r, g, b, HealBot_Config.bardisa[HealBot_Config.Current_Skin]);
bar2:SetStatusBarColor(r, g, b, HealBot_Config.bardisa[HealBot_Config.Current_Skin]); bar2:SetStatusBarColor(r, g, b, HealBot_Config.bardisa[HealBot_Config.Current_Skin]);
end end
if not button.debuffOverlay then
button.debuffOverlay = getglobal(button:GetName() .. "DebuffOverlay")
end
if not button.debuffGlow then
button.debuffGlow = getglobal(button:GetName() .. "DebuffOverlayGlow")
end
if button.debuffOverlay then
local debuffType = HealBot_UnitDebuff[unit]
local isDead = state.isDead or state.isGhost or UnitIsDeadOrGhost(unit)
local overlayMode = HealBot_Config.CDCOverlay or 1
if debuffType and not isDead and overlayMode > 1 and overlayMode < 6 then
local color = HealBot_Config.CDCBarColour[debuffType]
local cr, cg, cb = 1, 0, 0
if color then
cr, cg, cb = color.R, color.G, color.B
end
button.debuffOverlay:SetFrameLevel(bar:GetFrameLevel() + 2)
button.debuffOverlay:Show()
local alphaBorder = 1.0
local alphaOverlay = 1.0
if not button:IsEnabled() then
local disAlpha = HealBot_Config.bardisa[HealBot_Config.Current_Skin] or 0.4
alphaBorder = disAlpha
alphaOverlay = disAlpha
end
if overlayMode == 2 then
button.isAnimatedDebuff = false
button.debuffOverlay:SetBackdropBorderColor(cr, cg, cb, alphaBorder)
if button.debuffGlow then
button.debuffGlow:Hide()
button.debuffGlow:SetTexCoord(0, 1, 0, 1)
end
elseif overlayMode == 3 then
button.isAnimatedDebuff = false
button.debuffOverlay:SetBackdropBorderColor(0, 0, 0, 0)
if button.debuffGlow then
local glowTex = HealBot_Config.CDCOverlayTexture or "Interface\\AddOns\\HealBotBlue\\Images\\glow1.tga"
button.debuffGlow:SetTexture(glowTex)
button.debuffGlow:SetBlendMode("BLEND")
button.debuffGlow:SetTexCoord(0, 1, 0, 1)
button.debuffGlow:SetVertexColor(cr, cg, cb, alphaOverlay)
button.debuffGlow:Show()
end
elseif overlayMode == 4 then
button.isAnimatedDebuff = false
button.debuffOverlay:SetBackdropBorderColor(cr, cg, cb, alphaBorder)
if button.debuffGlow then
local glowTex = HealBot_Config.CDCOverlayTexture or "Interface\\AddOns\\HealBotBlue\\Images\\glow1.tga"
button.debuffGlow:SetTexture(glowTex)
button.debuffGlow:SetBlendMode("BLEND")
button.debuffGlow:SetTexCoord(0, 1, 0, 1)
button.debuffGlow:SetVertexColor(cr, cg, cb, alphaOverlay)
button.debuffGlow:Show()
end
elseif overlayMode == 5 then -- Animated
button.debuffOverlay:SetBackdropBorderColor(0, 0, 0, 0)
if button.debuffGlow then
local glowTex
if debuffType == HEALBOT_POISON_en then
glowTex = "Interface\\AddOns\\HealBotBlue\\Images\\debuff_poison.tga"
button.isAnimatedDebuff = true
elseif debuffType == HEALBOT_CURSE_en then
glowTex = "Interface\\AddOns\\HealBotBlue\\Images\\debuff_curse.tga"
button.isAnimatedDebuff = true
elseif debuffType == HEALBOT_DISEASE_en then
glowTex = "Interface\\AddOns\\HealBotBlue\\Images\\debuff_disease.tga"
button.isAnimatedDebuff = true
elseif debuffType == HEALBOT_MAGIC_en then
glowTex = "Interface\\AddOns\\HealBotBlue\\Images\\debuff_magic.tga"
button.isAnimatedDebuff = true
else
glowTex = HealBot_Config.CDCOverlayTexture or "Interface\\AddOns\\HealBotBlue\\Images\\glow1.tga"
button.isAnimatedDebuff = false
button.debuffGlow:SetTexCoord(0, 1, 0, 1)
end
button.debuffGlow:SetTexture(glowTex)
button.debuffGlow:SetBlendMode("BLEND")
button.debuffGlow:SetVertexColor(cr, cg, cb, alphaOverlay)
button.debuffGlow:Show()
end
end
else
button.isAnimatedDebuff = false
button.debuffOverlay:Hide()
if button.debuffGlow then
button.debuffGlow:Hide()
button.debuffGlow:SetTexCoord(0, 1, 0, 1)
end
end
end
local healthTextOpt = HealBot_Config.ShowHealthText or 0 local healthTextOpt = HealBot_Config.ShowHealthText or 0
local displayText = name local displayText = name
if healthTextOpt == 1 then if healthTextOpt == 1 then
@@ -380,6 +478,32 @@ function HealBot_Action_EnableButton(button)
end end
end end
local HealBot_AnimTimer = 0
local HealBot_AnimFrame = 0
-- HealBot_Action_UpdateDebuffAnimation: Advances animated overlay frames on active debuffed buttons.
function HealBot_Action_UpdateDebuffAnimation(elapsed)
if not HealBot_Config or HealBot_Config.CDCOverlay ~= 5 then return end
HealBot_AnimTimer = HealBot_AnimTimer + elapsed
if HealBot_AnimTimer < 0.066 then return end -- ~15 FPS
HealBot_AnimTimer = 0
HealBot_AnimFrame = math.mod(HealBot_AnimFrame + 1, 16)
local col = math.mod(HealBot_AnimFrame, 2)
local row = math.floor(HealBot_AnimFrame / 2)
local left = col * 0.5
local right = left + 0.5
local top = row * 0.125
local bottom = top + 0.125
for _, button in pairs(HealBot_Action_HealButtons) do
if button and button.isAnimatedDebuff and button.debuffOverlay and button.debuffOverlay:IsVisible() and button.debuffGlow and button.debuffGlow:IsVisible() then
button.debuffGlow:SetTexCoord(left, right, top, bottom)
end
end
end
-- HealBot_Action_EnableButtons: Internal utility: HealBot_Action_EnableButtons -- HealBot_Action_EnableButtons: Internal utility: HealBot_Action_EnableButtons
function HealBot_Action_EnableButtons() function HealBot_Action_EnableButtons()
for index, button in pairs(HealBot_Action_HealButtons) do for index, button in pairs(HealBot_Action_HealButtons) do
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

+5 -1
View File
@@ -33,7 +33,7 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Blizzard Party Frame Toggle:** Toggle to automatically hide Blizzard's default party frames when in a group in favor of HealBot's layouts. * **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). Optional extended HoT timer tracker togglable below frames. * **HoT & Buff Tracking:** Intelligently track active HoTs and buffs directly on the grid frames with custom icons (e.g., Renew, Rejuvenation, Regrowth, Fear Ward). Optional extended HoT timer tracker togglable below frames.
* **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. * **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.
* **Curse & Debuff Warning (CDC):** Dynamic visual and audio alerts for cleanable debuffs. Customizable colors based on debuff type (Curse, Poison, Disease, Magic). * **Curse & Debuff Warning (CDC):** Dynamic visual and audio alerts for cleanable debuffs. Customizable colors based on debuff type (Curse, Poison, Disease, Magic), with selectable display modes: classic Whole Bar tinting, Frame / Border highlights, Glow Overlays, and animated flipbooks (poison drips, rising curse flames, disease, magic).
* **Pet & Familiar Frames:** Dedicated, toggleable frames for tracking and healing player pets. * **Pet & Familiar Frames:** Dedicated, toggleable frames for tracking and healing player pets.
* **Customizable Health Text:** Dynamic unit health display (Name Only, Percentage, Real Health, or Health Deficit). * **Customizable Health Text:** Dynamic unit health display (Name Only, Percentage, Real Health, or Health Deficit).
* **Non-Mana Resource Tracking:** Track Rage, Energy, and Focus for non-mana classes. * **Non-Mana Resource Tracking:** Track Rage, Energy, and Focus for non-mana classes.
@@ -51,9 +51,12 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
### Change Log ### Change Log
**v1.7.7** **v1.7.7**
* **Bug Fix - Line of Sight & Target Range Resolution:** Resolved Line of Sight regression where the target bar failed to update or dim when obstructed. Fixed `UnitInLineOfSight` parameter mismatch with ClassicAPI (1-arg signature required), added multi-tier fallback chaining to `UnitXP`, and enforced `CheckInteractDistance` on `target` units during Vanilla map coordinate fallbacks. Added range validation to non-healer class bar evaluation.
* **Bug Fix - Out-of-Range Bar Glow on Modifier Press:** Decoupled unit bar enable/range evaluation from physical modifier keys (`IsShiftKeyDown()`, etc.) in `HealBot_CanHeal`, preventing out-of-range and obstructed units from falsely brightening to full alpha when holding Shift/Ctrl/Alt. Enforced range checking across all action patterns (`"Target"`, macros, items, scripts) in `HealBot_GetHealSpell`, and fixed table key case sensitivity on spell range extraction (`Range` vs `range`).
* **Feature - HoT Timer Display Modes & Positioning:** Added configurable HoT timer list position dropdown (`Below`, `Above`, `Left`, `Right`) relative to raid frames. Added `Icon Overlay` mode rendering countdown timers directly on health bar HoT icons, and a `Both` mode allowing simultaneous timer list and on-bar icon countdown numbers. Excluded pets from HoT timer lists and overlays. Optimized expiration lookups with O(1) texture-to-spell mappings. * **Feature - HoT Timer Display Modes & Positioning:** Added configurable HoT timer list position dropdown (`Below`, `Above`, `Left`, `Right`) relative to raid frames. Added `Icon Overlay` mode rendering countdown timers directly on health bar HoT icons, and a `Both` mode allowing simultaneous timer list and on-bar icon countdown numbers. Excluded pets from HoT timer lists and overlays. Optimized expiration lookups with O(1) texture-to-spell mappings.
* **Refactor & Feature - Unified Aura & HoT Tracking:** Unified bar icons and HoT timers into a master dictionary (`HealBot_TrackedAuras`) in `HealBot_Data.lua`. Added Weakened Soul, Fear Ward, Abolish Disease, and Abolish Poison to active timer bars with localized client support and debuff-aware pruning. * **Refactor & Feature - Unified Aura & HoT Tracking:** Unified bar icons and HoT timers into a master dictionary (`HealBot_TrackedAuras`) in `HealBot_Data.lua`. Added Weakened Soul, Fear Ward, Abolish Disease, and Abolish Poison to active timer bars with localized client support and debuff-aware pruning.
* **Bug Fix - HoT Tracking Premature Deletion & GUID Resolution:** Resolved issue where synchronous aura scans on spell cast prematurely purged active HoTs before server buff packets arrived. Fixed HoT timer list showing raw GUID strings instead of names by ensuring GUID caches populate immediately on `PLAYER_ENTERING_WORLD` (even when solo) and adding multi-tier name resolution fallbacks. Fixed unit bar icon countdown numbers not rendering by adding explicit overlay frame show triggers and normalized texture lookup fallbacks. * **Bug Fix - HoT Tracking Premature Deletion & GUID Resolution:** Resolved issue where synchronous aura scans on spell cast prematurely purged active HoTs before server buff packets arrived. Fixed HoT timer list showing raw GUID strings instead of names by ensuring GUID caches populate immediately on `PLAYER_ENTERING_WORLD` (even when solo) and adding multi-tier name resolution fallbacks. Fixed unit bar icon countdown numbers not rendering by adding explicit overlay frame show triggers and normalized texture lookup fallbacks.
* **Feature - Debuff Visual Overlays & Animated Sprite Sheets:** Added selectable visual styles for Cure / Dispel / Cleanse (CDC) debuff alerts in Options -> Cure (`Whole Bar`, `Frame / Border`, `Glow Overlay`, `Glow + Frame`, `Animated`, `Disabled`). Animated flipbook textures for Poison (dripping slime teardrops), Curse (rising shadow wisps), Disease (creeping roots), and Magic(arcane sigils turning). Integrated lightweight, throttled (15 FPS) UV sprite animation engine directly into `HealBot_OnUpdate` with zero garbage allocation.
**v1.7.6** **v1.7.6**
* **Feature - All-Class Support & Raid Frame Replacement:** Removed legacy restriction that disabled HealBot event listeners and UI frames for classes without native healing spells. HealBot now initializes and functions as a full party/raid frame replacement for all classes (Warrior, Mage, Rogue, Hunter, Warlock). * **Feature - All-Class Support & Raid Frame Replacement:** Removed legacy restriction that disabled HealBot event listeners and UI frames for classes without native healing spells. HealBot now initializes and functions as a full party/raid frame replacement for all classes (Warrior, Mage, Rogue, Hunter, Warlock).
@@ -166,6 +169,7 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Memory Optimization:** Fixed a significant memory leak where tracking tables were being repeatedly allocated every tick during aura scanning, and replaced `table.foreach` with pairs loops to avoid GC spikes during combat. * **Memory Optimization:** Fixed a significant memory leak where tracking tables were being repeatedly allocated every tick during aura scanning, and replaced `table.foreach` with pairs loops to avoid GC spikes during combat.
**v1.4.1** **v1.4.1**
* **Debuff Visual Overlay Options (CDC):** Added configurable visual overlay styles for cleanable debuffs in the Cure tab ("Debuff visual:"). Supports `Whole Bar` (classic status bar recolor), `Frame / Border` (crisp 9-slice debuff border while preserving unit health/class color), `Glow Effect` (additive blend texture glow), `Glow + Frame` (both border and glow), `Animated` (multi-frame procedural sprite sheet animation for all 4 debuff types: Poison drips, Curse shadow wisps, Disease spores, and Magic sparkles), and `Disabled`. Added dedicated 3rd visual layer `$parentDebuffOverlay` to button templates.
* **Frame Disappearing Fix:** Fixed a layout rendering bug where frames would flash for a split second and disappear on login due to improper table clearing of unit buttons, leaving empty arrays that incorrectly failed the layout check. * **Frame Disappearing Fix:** Fixed a layout rendering bug where frames would flash for a split second and disappear on login due to improper table clearing of unit buttons, leaving empty arrays that incorrectly failed the layout check.
* **Ranked Spell Parsing Fix:** Fixed a Lua crash during addon initialization when discovering ranked spells without an explicit target property. Ranked spells now dynamically inherit the target table from their base spells. * **Ranked Spell Parsing Fix:** Fixed a Lua crash during addon initialization when discovering ranked spells without an explicit target property. Ranked spells now dynamically inherit the target table from their base spells.
* **Talent-based Healing Calculations:** Implemented dynamic spell healing calculations for Druid, Priest, and Paladin classes based on talents. * **Talent-based Healing Calculations:** Implemented dynamic spell healing calculations for Druid, Priest, and Paladin classes based on talents.