From 7fdf76eff8d44975076010d3c6ec2bab5bb58c12 Mon Sep 17 00:00:00 2001 From: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com> Date: Thu, 5 Nov 2026 17:37:46 +0100 Subject: [PATCH 1/5] fix: HoT timer tracking premature deletion of auta_Cast_ON even fixed guid cache fixed .show() call on overlay visible --- HealBot_Controller_Aura.lua | 22 ++++----- HealBot_Controller_Events.lua | 3 ++ HealBot_Integrations.lua | 89 +++++++++++++++++++++++++---------- HealBot_Model.lua | 43 +++++++++++++++++ HealBot_View_Layout.lua | 79 ++++++++++++++++++++++++++----- 5 files changed, 185 insertions(+), 51 deletions(-) diff --git a/HealBot_Controller_Aura.lua b/HealBot_Controller_Aura.lua index 3283920..e9cffe6 100644 --- a/HealBot_Controller_Aura.lua +++ b/HealBot_Controller_Aura.lua @@ -339,19 +339,15 @@ function HealBot_OnEvent_UnitAura(this, unit) local guid = HealBot_GetUnitGUID and HealBot_GetUnitGUID(unit) if guid then if not HealBot_Nampower_NameCache then HealBot_Nampower_NameCache = HealBot_GetTable() end - HealBot_Nampower_NameCache[guid] = UnitName(unit) - - if HealBot_Nampower_Auras[guid] then - for spellName, _ in pairs(HealBot_Nampower_Auras[guid]) do - local auraInfo = HealBot_TrackedAura_Spells and HealBot_TrackedAura_Spells[spellName] - if auraInfo then - local tex = auraInfo.texture - local isActive = auraInfo.isDebuff and activeDebuffs[tex] or activeBuffs[tex] - if not isActive then - HealBot_Nampower_Auras[guid][spellName] = nil - end - end - end + local uName = UnitName(unit) + if uName then + HealBot_Nampower_NameCache[guid] = uName + HealBot_Nampower_NameCache[string.lower(guid)] = uName + end + if HealBot_Model and HealBot_Model.guidUnits then + HealBot_Model.guidUnits[guid] = unit + HealBot_Model.guidUnits[string.lower(guid)] = unit + HealBot_Model.unitGUIDs[unit] = guid end end end diff --git a/HealBot_Controller_Events.lua b/HealBot_Controller_Events.lua index 4f7300f..c132ebb 100644 --- a/HealBot_Controller_Events.lua +++ b/HealBot_Controller_Events.lua @@ -333,6 +333,9 @@ local HealBot_EventHandlers = { ["PLAYER_ENTERING_WORLD"] = function(this) HealBot_Model:RefreshUnit("player") HealBot_Model:RefreshUnit("pet") + if HealBot_Model and HealBot_Model.PopulateAllGUIDs then + HealBot_Model:PopulateAllGUIDs() + end HealBot_OnEvent_PlayerEnteringWorld(this) end, ["VARIABLES_LOADED"] = function(this) diff --git a/HealBot_Integrations.lua b/HealBot_Integrations.lua index a8ad1a0..da673ec 100644 --- a/HealBot_Integrations.lua +++ b/HealBot_Integrations.lua @@ -62,31 +62,62 @@ function HealBot_Integrations_Toggle() HealBot_Nampower_Auras[target][spellName] = expirationTime if not HealBot_Nampower_NameCache then HealBot_Nampower_NameCache = HealBot_GetTable() end - if event == "AURA_CAST_ON_SELF" then - HealBot_Nampower_NameCache[target] = UnitName("player") - HealBot_OnEvent_UnitAura(nil, "player") + local unitID = nil + local tName = nil + + if event == "AURA_CAST_ON_SELF" or (HealBot_PlayerGUID and (target == HealBot_PlayerGUID or string.lower(target) == string.lower(HealBot_PlayerGUID))) then + unitID = "player" + tName = UnitName("player") + if not HealBot_PlayerGUID then + HealBot_PlayerGUID = target + end else - local tName = nil + unitID = HealBot_Model and (HealBot_Model:GetUnitByGUID(target) or HealBot_Model:GetUnitByGUID(string.lower(target))) + if not unitID and HealBot_PlayerGUID and (target == HealBot_PlayerGUID or string.lower(target) == string.lower(HealBot_PlayerGUID)) then + unitID = "player" + end + if UnitExists("target") then local curTargetGuid = HealBot_GetUnitGUID and HealBot_GetUnitGUID("target") if curTargetGuid and (curTargetGuid == target or string.lower(curTargetGuid) == string.lower(target)) then tName = UnitName("target") + if not unitID and UnitIsUnit("target", "player") then unitID = "player" end end end - local unitID = HealBot_Model and HealBot_Model:GetUnitByGUID(target) - if not unitID and HealBot_PlayerGUID and (target == HealBot_PlayerGUID or string.lower(target) == string.lower(HealBot_PlayerGUID)) then - unitID = "player" + if not tName and UnitExists("mouseover") then + local curMOGuid = HealBot_GetUnitGUID and HealBot_GetUnitGUID("mouseover") + if curMOGuid and (curMOGuid == target or string.lower(curMOGuid) == string.lower(target)) then + tName = UnitName("mouseover") + if not unitID and UnitIsUnit("mouseover", "player") then unitID = "player" end + end end if not tName and unitID then tName = UnitName(unitID) or (HealBot_Model and HealBot_Model.units[unitID] and HealBot_Model.units[unitID].name) end - if tName then - HealBot_Nampower_NameCache[target] = tName + end + + if tName then + HealBot_Nampower_NameCache[target] = tName + HealBot_Nampower_NameCache[string.lower(target)] = tName + end + if unitID and HealBot_Model then + if HealBot_Model.guidUnits then + HealBot_Model.guidUnits[target] = unitID + HealBot_Model.guidUnits[string.lower(target)] = unitID end - if unitID then - HealBot_OnEvent_UnitAura(nil, unitID) + if HealBot_Model.unitGUIDs then + HealBot_Model.unitGUIDs[unitID] = target end end + + if unitID and HealBot_View_DirtyUnits then + HealBot_View_DirtyUnits[unitID] = true + end + if HealBot_UpdateActiveHoTTimers then + HealBot_UpdateActiveHoTTimers() + elseif HealBot_Action_UpdatePlayerHoTs then + HealBot_Action_UpdatePlayerHoTs() + end end end) end @@ -157,23 +188,29 @@ function HealBot_Integrations_PruneNampower() local currentTime = GetTime() for targetName, auras in pairs(HealBot_Nampower_Auras) do - -- Check if target is still in the raid/party, or is the player - local isPlayer = (HealBot_PlayerGUID and string.lower(targetName) == string.lower(HealBot_PlayerGUID)) - or (UnitName("player") and string.lower(targetName) == string.lower(UnitName("player"))) - if not isPlayer and not HealBot_Model:GetUnitByGUID(targetName) and not HealBot_Model:GetUnitIDByName(targetName) then + local lowerName = string.lower(targetName) + local isPlayer = (HealBot_PlayerGUID and lowerName == string.lower(HealBot_PlayerGUID)) + or (UnitName("player") and lowerName == string.lower(UnitName("player"))) + or (HealBot_GetUnitGUID and (targetName == HealBot_GetUnitGUID("player") or lowerName == string.lower(HealBot_GetUnitGUID("player") or ""))) + + -- Prune expired auras + local hasAuras = false + for spellName, expiration in pairs(auras) do + if currentTime > expiration then + auras[spellName] = nil + else + hasAuras = true + end + end + + if not hasAuras then HealBot_ReleaseTable(auras) HealBot_Nampower_Auras[targetName] = nil - else - -- Prune expired auras - local hasAuras = false - for spellName, expiration in pairs(auras) do - if currentTime > expiration then - auras[spellName] = nil - else - hasAuras = true - end - end - if not hasAuras then + elseif not isPlayer and not (HealBot_Model and (HealBot_Model:GetUnitByGUID(targetName) or HealBot_Model:GetUnitByGUID(lowerName))) and not (HealBot_Model and HealBot_Model:GetUnitIDByName(targetName)) then + -- Target left group or disconnected and is not player + if GetNumPartyMembers() == 0 and GetNumRaidMembers() == 0 then + -- Solo: keep non-player auras until expired + else HealBot_ReleaseTable(auras) HealBot_Nampower_Auras[targetName] = nil end diff --git a/HealBot_Model.lua b/HealBot_Model.lua index 4b025f8..bb15b2b 100644 --- a/HealBot_Model.lua +++ b/HealBot_Model.lua @@ -206,27 +206,49 @@ end -- HealBot_Model:PopulateAllGUIDs: Refreshes unit-to-GUID and GUID-to-unit mappings for all current roster units. function HealBot_Model:PopulateAllGUIDs() if not (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active or HealBot_Integrations_Nampower_Active) or not HealBot_GetUnitGUID then return end + if not HealBot_Nampower_NameCache then HealBot_Nampower_NameCache = HealBot_GetTable() end local playerGuid = HealBot_GetUnitGUID("player") if playerGuid and playerGuid ~= "0" and playerGuid ~= "0x0000000000000000" then + local lowerPGuid = string.lower(playerGuid) self.unitGUIDs["player"] = playerGuid self.guidUnits[playerGuid] = "player" + self.guidUnits[lowerPGuid] = "player" HealBot_PlayerGUID = playerGuid + local pName = UnitName("player") + if pName then + HealBot_Nampower_NameCache[playerGuid] = pName + HealBot_Nampower_NameCache[lowerPGuid] = pName + end end for _, unit in ipairs(self.partyMembers) do local guid = HealBot_GetUnitGUID(unit) if guid and guid ~= "0" and guid ~= "0x0000000000000000" then + local lowerGuid = string.lower(guid) self.unitGUIDs[unit] = guid self.guidUnits[guid] = unit + self.guidUnits[lowerGuid] = unit + local uName = UnitName(unit) + if uName then + HealBot_Nampower_NameCache[guid] = uName + HealBot_Nampower_NameCache[lowerGuid] = uName + end end end for _, unit in ipairs(self.raidMembers) do local guid = HealBot_GetUnitGUID(unit) if guid and guid ~= "0" and guid ~= "0x0000000000000000" then + local lowerGuid = string.lower(guid) self.unitGUIDs[unit] = guid self.guidUnits[guid] = unit + self.guidUnits[lowerGuid] = unit + local uName = UnitName(unit) + if uName then + HealBot_Nampower_NameCache[guid] = uName + HealBot_Nampower_NameCache[lowerGuid] = uName + end end end end @@ -238,14 +260,19 @@ function HealBot_Model:GetUnitByGUID(guid) if unit and UnitExists(unit) then return unit end local lowerGuid = string.lower(guid) + unit = self.guidUnits[lowerGuid] + if unit and UnitExists(unit) then return unit end + if HealBot_PlayerGUID and string.lower(HealBot_PlayerGUID) == lowerGuid then self.guidUnits[guid] = "player" + self.guidUnits[lowerGuid] = "player" return "player" end if HealBot_GetUnitGUID then local pGuid = HealBot_GetUnitGUID("player") if pGuid and string.lower(pGuid) == lowerGuid then self.guidUnits[guid] = "player" + self.guidUnits[lowerGuid] = "player" HealBot_PlayerGUID = pGuid return "player" end @@ -255,6 +282,8 @@ function HealBot_Model:GetUnitByGUID(guid) local uGuid = HealBot_GetUnitGUID(u) if uGuid and string.lower(uGuid) == lowerGuid then self.guidUnits[guid] = u + self.guidUnits[lowerGuid] = u + self.unitGUIDs[u] = guid return u end end @@ -265,10 +294,24 @@ function HealBot_Model:GetUnitByGUID(guid) local uGuid = HealBot_GetUnitGUID(u) if uGuid and string.lower(uGuid) == lowerGuid then self.guidUnits[guid] = u + self.guidUnits[lowerGuid] = u + self.unitGUIDs[u] = guid return u end end end + if UnitExists("target") then + local tGuid = HealBot_GetUnitGUID("target") + if tGuid and string.lower(tGuid) == lowerGuid then + return "target" + end + end + if UnitExists("mouseover") then + local moGuid = HealBot_GetUnitGUID("mouseover") + if moGuid and string.lower(moGuid) == lowerGuid then + return "mouseover" + end + end end return nil end diff --git a/HealBot_View_Layout.lua b/HealBot_View_Layout.lua index 29e0bc1..6b57464 100644 --- a/HealBot_View_Layout.lua +++ b/HealBot_View_Layout.lua @@ -335,13 +335,18 @@ function HealBot_Action_EnableButton(button) iconText:SetTextColor(1, 1, 1, 1) bar["iconText"..i] = iconText end - local timeLeft = unitMap and (unitMap[newTexture] or (newTexture and unitMap[string.lower(newTexture)])) + local cleanTex = newTexture and string.lower(string.gsub(newTexture, "/", "\\")) + local shortTex = cleanTex and string.match(cleanTex, "([^\\]+)$") + local timeLeft = unitMap and (unitMap[newTexture] or (cleanTex and unitMap[cleanTex]) or (shortTex and unitMap[shortTex])) if timeLeft then + if bar.overlayFrame then bar.overlayFrame:Show() end iconText:SetText(timeLeft) iconText:Show() else - iconText:SetText("") - iconText:Hide() + if iconText and iconText:IsVisible() then + iconText:SetText("") + iconText:Hide() + end end elseif iconText and iconText:IsVisible() then iconText:SetText("") @@ -1493,7 +1498,9 @@ function HealBot_RenderHoTOverlays() local iconText = bar["iconText"..i] if icon and icon:IsVisible() then local tex = icon:GetTexture() - local timeLeft = unitMap and (unitMap[tex] or (tex and unitMap[string.lower(tex)])) + local cleanTex = tex and string.lower(string.gsub(tex, "/", "\\")) + local shortTex = cleanTex and string.match(cleanTex, "([^\\]+)$") + local timeLeft = unitMap and (unitMap[tex] or (cleanTex and unitMap[cleanTex]) or (shortTex and unitMap[shortTex])) if timeLeft then if not iconText then local overlayFrame = bar.overlayFrame @@ -1509,6 +1516,7 @@ function HealBot_RenderHoTOverlays() iconText:SetTextColor(1, 1, 1, 1) bar["iconText"..i] = iconText end + if bar.overlayFrame then bar.overlayFrame:Show() end iconText:SetText(timeLeft) iconText:Show() else @@ -1603,13 +1611,23 @@ function HealBot_UpdateActiveHoTTimers() if HealBot_Integrations_Nampower_Active and HealBot_Nampower_Auras then for targetKey, auras in pairs(HealBot_Nampower_Auras) do - local unitID = HealBot_Model and HealBot_Model:GetUnitByGUID(targetKey) - if not unitID and HealBot_PlayerGUID and (targetKey == HealBot_PlayerGUID or string.lower(targetKey) == string.lower(HealBot_PlayerGUID)) then - unitID = "player" + local lowerKey = string.lower(targetKey) + local unitID = HealBot_Model and (HealBot_Model:GetUnitByGUID(targetKey) or HealBot_Model:GetUnitByGUID(lowerKey)) + + if not unitID then + local isPlayer = (HealBot_PlayerGUID and (targetKey == HealBot_PlayerGUID or lowerKey == string.lower(HealBot_PlayerGUID))) + or (UnitName("player") and (targetKey == UnitName("player") or lowerKey == string.lower(UnitName("player")))) + or (HealBot_GetUnitGUID and (targetKey == HealBot_GetUnitGUID("player") or lowerKey == string.lower(HealBot_GetUnitGUID("player") or ""))) + if isPlayer then + unitID = "player" + end end - if not unitID and UnitName("player") and (targetKey == UnitName("player") or string.lower(targetKey) == string.lower(UnitName("player"))) then - unitID = "player" + + if not unitID and HealBot_Model and HealBot_Model.GetUnitIDByName then + unitID = HealBot_Model:GetUnitIDByName(targetKey) end + + -- Multi-tier player name resolution local displayName = nil if unitID and unitID ~= "target" then if HealBot_Model and HealBot_Model.units[unitID] and HealBot_Model.units[unitID].name then @@ -1620,16 +1638,32 @@ function HealBot_UpdateActiveHoTTimers() end end if not displayName and HealBot_Nampower_NameCache then - displayName = HealBot_Nampower_NameCache[targetKey] + displayName = HealBot_Nampower_NameCache[targetKey] or HealBot_Nampower_NameCache[lowerKey] + end + if not displayName and UnitExists("target") and HealBot_GetUnitGUID and (targetKey == HealBot_GetUnitGUID("target") or lowerKey == string.lower(HealBot_GetUnitGUID("target") or "")) then + displayName = UnitName("target") + end + if not displayName and UnitExists("mouseover") and HealBot_GetUnitGUID and (targetKey == HealBot_GetUnitGUID("mouseover") or lowerKey == string.lower(HealBot_GetUnitGUID("mouseover") or "")) then + displayName = UnitName("mouseover") + end + if not displayName then + local uName = UnitName(targetKey) + if uName and uName ~= targetKey and uName ~= "Unknown" then + displayName = uName + end end if displayName and HealBot_Nampower_NameCache then HealBot_Nampower_NameCache[targetKey] = displayName + HealBot_Nampower_NameCache[lowerKey] = displayName end -- Exclude pets if not (unitID and string.find(unitID, "pet")) then for spellName, expiration in pairs(auras) do local auraInfo = HealBot_TrackedAura_Spells and HealBot_TrackedAura_Spells[spellName] + if not auraInfo and HealBot_TrackedAuras and HealBot_TrackedAuras[spellName] then + auraInfo = HealBot_TrackedAuras[spellName] + end if auraInfo and auraInfo.showTimer and expiration > currentTime then local timeLeft = math.floor(expiration - currentTime) local tex = auraInfo.texture or "Interface\\Icons\\INV_Misc_QuestionMark" @@ -1640,7 +1674,7 @@ function HealBot_UpdateActiveHoTTimers() end local hot = HealBot_PlayerHoTs_ListCache[numHoTs] hot.unit = unitID - hot.name = displayName or targetKey + hot.name = displayName or "Unknown" hot.spell = spellName hot.texture = tex hot.expires = expiration @@ -1650,8 +1684,29 @@ function HealBot_UpdateActiveHoTTimers() if not HealBot_ActiveHoTUnitMap[unitID] then HealBot_ActiveHoTUnitMap[unitID] = {} end + local cleanTex = string.lower(string.gsub(tex, "/", "\\")) + local shortTex = string.match(cleanTex, "([^\\]+)$") HealBot_ActiveHoTUnitMap[unitID][tex] = timeLeft - HealBot_ActiveHoTUnitMap[unitID][string.lower(tex)] = timeLeft + HealBot_ActiveHoTUnitMap[unitID][cleanTex] = timeLeft + if shortTex then + HealBot_ActiveHoTUnitMap[unitID][shortTex] = timeLeft + end + + -- If player in raid, map under raid token button as well + if unitID == "player" and HealBot_Action_UnitButtons then + for btnUnit in pairs(HealBot_Action_UnitButtons) do + if btnUnit ~= "player" and UnitIsUnit(btnUnit, "player") then + if not HealBot_ActiveHoTUnitMap[btnUnit] then + HealBot_ActiveHoTUnitMap[btnUnit] = {} + end + HealBot_ActiveHoTUnitMap[btnUnit][tex] = timeLeft + HealBot_ActiveHoTUnitMap[btnUnit][cleanTex] = timeLeft + if shortTex then + HealBot_ActiveHoTUnitMap[btnUnit][shortTex] = timeLeft + end + end + end + end end end end From cc2d6830e56992b03094a0c7666847d074a0dc63 Mon Sep 17 00:00:00 2001 From: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com> Date: Thu, 5 Nov 2026 18:46:44 +0100 Subject: [PATCH 2/5] feat: add Spirit of Zanza aura tracking and fix bar text font height handling --- HealBot_Controller_Aura.lua | 4 ++-- HealBot_Localization.de.lua | 3 ++- HealBot_Localization.en.lua | 3 ++- HealBot_Localization.fr.lua | 3 ++- HealBot_Localization.kr.lua | 3 ++- HealBot_View_Layout.lua | 6 ++++-- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/HealBot_Controller_Aura.lua b/HealBot_Controller_Aura.lua index e9cffe6..b77099c 100644 --- a/HealBot_Controller_Aura.lua +++ b/HealBot_Controller_Aura.lua @@ -101,8 +101,8 @@ function HealBot_CheckBuffs(unit) [HEALBOT_POWER_WORD_FORTITUDE] = { HEALBOT_PRAYER_OF_FORTITUDE }, [HEALBOT_PRAYER_OF_FORTITUDE] = { HEALBOT_POWER_WORD_FORTITUDE }, -- Priest Spirit - [HEALBOT_DIVINE_SPIRIT] = { HEALBOT_PRAYER_OF_SPIRIT }, - [HEALBOT_PRAYER_OF_SPIRIT] = { HEALBOT_DIVINE_SPIRIT }, + [HEALBOT_DIVINE_SPIRIT] = { HEALBOT_PRAYER_OF_SPIRIT, HEALBOT_SPIRIT_OF_ZANZA, "Spirit of Zanza" }, + [HEALBOT_PRAYER_OF_SPIRIT] = { HEALBOT_DIVINE_SPIRIT, HEALBOT_SPIRIT_OF_ZANZA, "Spirit of Zanza" }, -- Priest Shadow Protection [HEALBOT_SHADOW_PROTECTION] = { HEALBOT_PRAYER_OF_SHADOW_PROTECTION }, [HEALBOT_PRAYER_OF_SHADOW_PROTECTION] = { HEALBOT_SHADOW_PROTECTION }, diff --git a/HealBot_Localization.de.lua b/HealBot_Localization.de.lua index 0de6089..e425fc3 100644 --- a/HealBot_Localization.de.lua +++ b/HealBot_Localization.de.lua @@ -79,7 +79,8 @@ HEALBOT_REJUVENATION = "Verj\195\188ngung"; HEALBOT_PRAYER_OF_HEALING = "Gebet der Heilung"; HEALBOT_CHAIN_HEAL = "Kettenheilung"; -HEALBOT_POWER_WORD_FORTITUDE = "Machtwort: Seelenst\195\164rke"; +HEALBOT_POWER_WORD_FORTITUDE = "Machtwort: Seelenst\195\164rke"; +HEALBOT_SPIRIT_OF_ZANZA = "Geist von Zanza"; HEALBOT_MARK_OF_THE_WILD = "Mal der Wildnis"; HEALBOT_BLESSING_OF_SALVATION = "Segen der Rettung"; diff --git a/HealBot_Localization.en.lua b/HealBot_Localization.en.lua index 4a381b1..00ef681 100644 --- a/HealBot_Localization.en.lua +++ b/HealBot_Localization.en.lua @@ -82,7 +82,8 @@ HEALBOT_BLESSING_OF_LIGHT = "Blessing of Light"; HEALBOT_BLESSING_OF_SANCTUARY = "Blessing of Sanctuary"; HEALBOT_DIVINE_SPIRIT = "Divine Spirit"; HEALBOT_PRAYER_OF_FORTITUDE = "Prayer of Fortitude"; -HEALBOT_PRAYER_OF_SPIRIT = "Prayer of Spirit"; +HEALBOT_PRAYER_OF_SPIRIT = "Prayer of Spirit"; +HEALBOT_SPIRIT_OF_ZANZA = "Spirit of Zanza"; HEALBOT_SHADOW_PROTECTION = "Shadow Protection"; HEALBOT_PRAYER_OF_SHADOW_PROTECTION = "Prayer of Shadow Protection"; HEALBOT_ARCANE_INTELLECT = "Arcane Intellect"; diff --git a/HealBot_Localization.fr.lua b/HealBot_Localization.fr.lua index cdae9e0..b5f1641 100644 --- a/HealBot_Localization.fr.lua +++ b/HealBot_Localization.fr.lua @@ -79,7 +79,8 @@ HEALBOT_REJUVENATION = "R\195\169cup\195\169ration"; HEALBOT_PRAYER_OF_HEALING = "Pri\195\168re de soins"; 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_SPIRIT_OF_ZANZA = "Esprit de Zanza"; HEALBOT_MARK_OF_THE_WILD = "Marque du fauve"; HEALBOT_BLESSING_OF_SALVATION = "B\195\169n\195\169diction de salut"; diff --git a/HealBot_Localization.kr.lua b/HealBot_Localization.kr.lua index c14d184..8ffba79 100644 --- a/HealBot_Localization.kr.lua +++ b/HealBot_Localization.kr.lua @@ -61,7 +61,8 @@ if (GetLocale() == "koKR") then HEALBOT_PRAYER_OF_HEALING = "치유의 기원"; HEALBOT_CHAIN_HEAL = "연쇄 치유"; -HEALBOT_POWER_WORD_FORTITUDE = "신의 권능: 인내"; +HEALBOT_POWER_WORD_FORTITUDE = "신의 권능: 인내"; +HEALBOT_SPIRIT_OF_ZANZA = "잔자의 기백"; HEALBOT_INNER_FIRE = "내면의 열정"; HEALBOT_FEAR_WARD = "공포의 결계"; HEALBOT_ENLIGHTEN = "Enlighten"; diff --git a/HealBot_View_Layout.lua b/HealBot_View_Layout.lua index 6b57464..4c26c78 100644 --- a/HealBot_View_Layout.lua +++ b/HealBot_View_Layout.lua @@ -275,11 +275,13 @@ function HealBot_Action_EnableButton(button) bar.txt:SetText(displayText); bar.txt:SetTextColor(sr, sg, sb, sa); local fontName, fontHeight, fontFlags = bar.txt:GetFont() + local btextheight = (HealBot_Config.btextheight and HealBot_Config.btextheight[HealBot_Config.Current_Skin]) or 10 + local fontHeightToUse = (fontHeight and fontHeight >= 6) and fontHeight or btextheight local fontOutline = HealBot_Config.bfontoutline[HealBot_Config.Current_Skin] or 0 local expectedFlags = fontOutline == 1 and "OUTLINE" or "" local expectedFont = (HealBot_Config.bfont and HealBot_Config.bfont[HealBot_Config.Current_Skin]) or fontName - if fontFlags ~= expectedFlags or fontName ~= expectedFont then - bar.txt:SetFont(expectedFont, fontHeight, expectedFlags) + if fontFlags ~= expectedFlags or fontName ~= expectedFont or (fontHeight and fontHeight < 6) then + bar.txt:SetFont(expectedFont, fontHeightToUse, expectedFlags) end local iconSize = HealBot_Config.biconsize[HealBot_Config.Current_Skin] or 12 From fca88016f288716e474ccd77adfe171ec2a3fcdb Mon Sep 17 00:00:00 2001 From: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com> Date: Thu, 5 Nov 2026 22:33:46 +0100 Subject: [PATCH 3/5] refactor: remove Spirit of Zanza from Divine Spirit aura tracking and bump version to 1.7.7 --- HealBotBlue.toc | 2 +- HealBot_Controller_Aura.lua | 4 ++-- HealBot_Localization.de.lua | 3 +-- HealBot_Localization.en.lua | 3 +-- HealBot_Localization.fr.lua | 3 +-- HealBot_Localization.kr.lua | 3 +-- README.md | 5 +++++ 7 files changed, 12 insertions(+), 11 deletions(-) diff --git a/HealBotBlue.toc b/HealBotBlue.toc index 16457b5..6e3c938 100644 --- a/HealBotBlue.toc +++ b/HealBotBlue.toc @@ -1,6 +1,6 @@ ## Interface: 11200 ## Title: HealBotBlue -## Version: 1.7.6 +## Version: 1.7.7 ## Author: Bluewhale ## Notes: Raidframe replacement for healing, decursing, resource tracking and buffing with optional support for SuperWow, ClassicAPI, UnitXP_SP3 and Nampower. ## SavedVariablesPerCharacter: HealBot_Config diff --git a/HealBot_Controller_Aura.lua b/HealBot_Controller_Aura.lua index b77099c..e9cffe6 100644 --- a/HealBot_Controller_Aura.lua +++ b/HealBot_Controller_Aura.lua @@ -101,8 +101,8 @@ function HealBot_CheckBuffs(unit) [HEALBOT_POWER_WORD_FORTITUDE] = { HEALBOT_PRAYER_OF_FORTITUDE }, [HEALBOT_PRAYER_OF_FORTITUDE] = { HEALBOT_POWER_WORD_FORTITUDE }, -- Priest Spirit - [HEALBOT_DIVINE_SPIRIT] = { HEALBOT_PRAYER_OF_SPIRIT, HEALBOT_SPIRIT_OF_ZANZA, "Spirit of Zanza" }, - [HEALBOT_PRAYER_OF_SPIRIT] = { HEALBOT_DIVINE_SPIRIT, HEALBOT_SPIRIT_OF_ZANZA, "Spirit of Zanza" }, + [HEALBOT_DIVINE_SPIRIT] = { HEALBOT_PRAYER_OF_SPIRIT }, + [HEALBOT_PRAYER_OF_SPIRIT] = { HEALBOT_DIVINE_SPIRIT }, -- Priest Shadow Protection [HEALBOT_SHADOW_PROTECTION] = { HEALBOT_PRAYER_OF_SHADOW_PROTECTION }, [HEALBOT_PRAYER_OF_SHADOW_PROTECTION] = { HEALBOT_SHADOW_PROTECTION }, diff --git a/HealBot_Localization.de.lua b/HealBot_Localization.de.lua index e425fc3..0de6089 100644 --- a/HealBot_Localization.de.lua +++ b/HealBot_Localization.de.lua @@ -79,8 +79,7 @@ HEALBOT_REJUVENATION = "Verj\195\188ngung"; HEALBOT_PRAYER_OF_HEALING = "Gebet der Heilung"; HEALBOT_CHAIN_HEAL = "Kettenheilung"; -HEALBOT_POWER_WORD_FORTITUDE = "Machtwort: Seelenst\195\164rke"; -HEALBOT_SPIRIT_OF_ZANZA = "Geist von Zanza"; +HEALBOT_POWER_WORD_FORTITUDE = "Machtwort: Seelenst\195\164rke"; HEALBOT_MARK_OF_THE_WILD = "Mal der Wildnis"; HEALBOT_BLESSING_OF_SALVATION = "Segen der Rettung"; diff --git a/HealBot_Localization.en.lua b/HealBot_Localization.en.lua index 00ef681..4a381b1 100644 --- a/HealBot_Localization.en.lua +++ b/HealBot_Localization.en.lua @@ -82,8 +82,7 @@ HEALBOT_BLESSING_OF_LIGHT = "Blessing of Light"; HEALBOT_BLESSING_OF_SANCTUARY = "Blessing of Sanctuary"; HEALBOT_DIVINE_SPIRIT = "Divine Spirit"; HEALBOT_PRAYER_OF_FORTITUDE = "Prayer of Fortitude"; -HEALBOT_PRAYER_OF_SPIRIT = "Prayer of Spirit"; -HEALBOT_SPIRIT_OF_ZANZA = "Spirit of Zanza"; +HEALBOT_PRAYER_OF_SPIRIT = "Prayer of Spirit"; HEALBOT_SHADOW_PROTECTION = "Shadow Protection"; HEALBOT_PRAYER_OF_SHADOW_PROTECTION = "Prayer of Shadow Protection"; HEALBOT_ARCANE_INTELLECT = "Arcane Intellect"; diff --git a/HealBot_Localization.fr.lua b/HealBot_Localization.fr.lua index b5f1641..cdae9e0 100644 --- a/HealBot_Localization.fr.lua +++ b/HealBot_Localization.fr.lua @@ -79,8 +79,7 @@ HEALBOT_REJUVENATION = "R\195\169cup\195\169ration"; HEALBOT_PRAYER_OF_HEALING = "Pri\195\168re de soins"; HEALBOT_CHAIN_HEAL = "Salve de gu\195\169rison"; -HEALBOT_POWER_WORD_FORTITUDE = "Mot de pouvoir : Robustesse"; -HEALBOT_SPIRIT_OF_ZANZA = "Esprit de Zanza"; +HEALBOT_POWER_WORD_FORTITUDE = "Mot de pouvoir : Robustesse"; HEALBOT_MARK_OF_THE_WILD = "Marque du fauve"; HEALBOT_BLESSING_OF_SALVATION = "B\195\169n\195\169diction de salut"; diff --git a/HealBot_Localization.kr.lua b/HealBot_Localization.kr.lua index 8ffba79..c14d184 100644 --- a/HealBot_Localization.kr.lua +++ b/HealBot_Localization.kr.lua @@ -61,8 +61,7 @@ if (GetLocale() == "koKR") then HEALBOT_PRAYER_OF_HEALING = "치유의 기원"; HEALBOT_CHAIN_HEAL = "연쇄 치유"; -HEALBOT_POWER_WORD_FORTITUDE = "신의 권능: 인내"; -HEALBOT_SPIRIT_OF_ZANZA = "잔자의 기백"; +HEALBOT_POWER_WORD_FORTITUDE = "신의 권능: 인내"; HEALBOT_INNER_FIRE = "내면의 열정"; HEALBOT_FEAR_WARD = "공포의 결계"; HEALBOT_ENLIGHTEN = "Enlighten"; diff --git a/README.md b/README.md index 1beaca0..858e623 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,11 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\ ### Change Log +**v1.7.7** +* **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. +* **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. + **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). * **Targeting & Binding Defaults:** Added default `Left` click `"Target"` binding for non-healer classes, recognized `"target"` in spell resolution, and prevented non-healer buttons from disabling on full-health allies. From f1919ca9a9cb53aa0bdbfef52d4e010c72a6f0cc Mon Sep 17 00:00:00 2001 From: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com> Date: Sun, 8 Nov 2026 16:52:11 +0100 Subject: [PATCH 4/5] feat: add debuff visual indicators, overlays, and improve range checking logic --- HealBot_Action.lua | 41 +++---- HealBot_Action.xml | 24 +++++ HealBot_Controller_Events.lua | 4 + HealBot_Controller_Range.lua | 80 ++++++++------ HealBot_Controller_Spells.lua | 21 +++- HealBot_Data.lua | 198 +++++++++++++++++----------------- HealBot_Localization.de.lua | 116 ++++++++++---------- HealBot_Localization.en.lua | 116 ++++++++++---------- HealBot_Localization.fr.lua | 116 ++++++++++---------- HealBot_Localization.kr.lua | 114 +++++++++++--------- HealBot_Options.lua | 1 + HealBot_Options_CDC.lua | 45 ++++++++ HealBot_Options_CDC.xml | 47 ++++++-- HealBot_View_Layout.lua | 126 +++++++++++++++++++++- Images/debuff_curse.tga | Bin 0 -> 1048620 bytes Images/debuff_disease.tga | Bin 0 -> 1048620 bytes Images/debuff_magic.tga | Bin 0 -> 1048620 bytes Images/debuff_poison.tga | Bin 0 -> 1048620 bytes Images/glow1.tga | Bin 0 -> 65580 bytes README.md | 6 +- 20 files changed, 676 insertions(+), 379 deletions(-) create mode 100644 Images/debuff_curse.tga create mode 100644 Images/debuff_disease.tga create mode 100644 Images/debuff_magic.tga create mode 100644 Images/debuff_poison.tga create mode 100644 Images/glow1.tga diff --git a/HealBot_Action.lua b/HealBot_Action.lua index ee8775b..00cb419 100644 --- a/HealBot_Action.lua +++ b/HealBot_Action.lua @@ -66,7 +66,7 @@ function HealBot_CanHeal(unit) if string.find(unit, "^Test") then return true end local class = HealBot_UnitClass("player") 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 end return false @@ -82,12 +82,17 @@ function HealBot_CanHeal(unit) local SHeal = HealBot_ShouldHeal(unit) if SHeal then - local spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Left")) - if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Middle")) 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("Button4")) end - if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button5")) end + local spell = HealBot_GetHealSpell(unit, HealBot_Action_SpellPattern("Left", true)) + 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", true)) 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", true)) end 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 else return true @@ -101,14 +106,16 @@ end -- Refresh and reset functions moved to HealBot_View_Layout.lua -- 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")] if not combos then return nil end - local press = button; - if IsAltKeyDown() then press = "Alt"..press end - if IsControlKeyDown() then press = "Ctrl"..press end - if IsShiftKeyDown() then press = "Shift"..press end - return combos[press] + local press = button or "Left"; + if not ignoreModifiers then + if IsAltKeyDown() then press = "Alt"..press end + if IsControlKeyDown() then press = "Ctrl"..press end + if IsShiftKeyDown() then press = "Shift"..press end + end + return combos[press]; end -- HealBot_Decode_Button: Decodes click action to spell pattern. @@ -134,6 +141,8 @@ end -- HealBot_Action_HealUnit_OnLoad: Internal utility: HealBot_Action_HealUnit_OnLoad function HealBot_Action_HealUnit_OnLoad(this) this:RegisterForClicks("LeftButtonUp", "RightButtonUp", "MiddleButtonUp", "Button4Up", "Button5Up"); + this.debuffOverlay = getglobal(this:GetName() .. "DebuffOverlay"); + this.debuffGlow = getglobal(this:GetName() .. "DebuffOverlayGlow"); end -- HealBot_Action_HealUnit_OnEnter: Internal utility: HealBot_Action_HealUnit_OnEnter @@ -447,19 +456,13 @@ function HealBot_Action_OnDragStop(this) end -- 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) local command = GetBindingAction(key); if command then - DEFAULT_CHAT_FRAME:AddMessage(key.." "..state.." "..(command or "nil")); keystate = state RunBinding(command,keystate) 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 diff --git a/HealBot_Action.xml b/HealBot_Action.xml index 061ae27..49cb96e 100644 --- a/HealBot_Action.xml +++ b/HealBot_Action.xml @@ -152,6 +152,30 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HealBot_Controller_Events.lua b/HealBot_Controller_Events.lua index c132ebb..5276c04 100644 --- a/HealBot_Controller_Events.lua +++ b/HealBot_Controller_Events.lua @@ -172,6 +172,10 @@ function HealBot_OnUpdate(this, arg1) for unitID in pairs(powerToRefresh) do HealBot_Action_RefreshPower(unitID) end + + if HealBot_Action_UpdateDebuffAnimation then + HealBot_Action_UpdateDebuffAnimation(arg1) + end -- Periodic resolution of units with missing class identity if HealBot_Model and HealBot_Model.unresolvedUnits and next(HealBot_Model.unresolvedUnits) then HealBot_UnresolvedTimer = (HealBot_UnresolvedTimer or 0) + arg1 diff --git a/HealBot_Controller_Range.lua b/HealBot_Controller_Range.lua index ae03b1a..8aec66a 100644 --- a/HealBot_Controller_Range.lua +++ b/HealBot_Controller_Range.lua @@ -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 return_val = 1; - elseif HealBot_Integrations_ClassicAPI_Active and UnitDistanceSquared and UnitInLineOfSight then - local inSight = UnitInLineOfSight("player", unit) - if inSight then - local distSq = UnitDistanceSquared(unit) - if distSq and distSq <= (range * range) then - return_val = 1; - end - end - elseif HealBot_Integrations_UnitXP_Active then - local inSight = UnitXP("inSight", "player", unit) - if inSight then - local dist = UnitXP("distanceBetween", "player", unit, "Gaussian") - 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 + else + local checked = false + if HealBot_Integrations_ClassicAPI_Active and UnitDistanceSquared and UnitInLineOfSight then + local inSight = UnitInLineOfSight(unit) + if inSight == nil then inSight = UnitInLineOfSight("player", unit) end + if inSight ~= nil then + checked = true + if inSight then + local distSq = UnitDistanceSquared(unit) + if distSq and distSq <= (range * range) then + return_val = 1; + end end end - if dist <= (_scale * range / 27) then - return_val = 1 + end + + 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 - else - if ( HealBot_Config.QualityRange == 1 ) or range <= 27 then - if ( CheckInteractDistance(unit, 4) ) then - return_val = 1; - end + end + + if not checked and ( 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 + if dist <= (_scale * range / 27) then + return_val = 1 + end 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 diff --git a/HealBot_Controller_Spells.lua b/HealBot_Controller_Spells.lua index 8ee7525..6c1de72 100644 --- a/HealBot_Controller_Spells.lua +++ b/HealBot_Controller_Spells.lua @@ -584,11 +584,13 @@ function HealBot_GetHealSpell(unit, pattern) -- Handle Inline Scripts if string.sub(pattern, 1, 1) == "/" then + if HealBot_Range_Check(unit, 40) == 0 then return nil end; return pattern; end -- Handle Special Targeting Pattern if string.lower(pattern) == "target" then + if HealBot_Range_Check(unit, 40) == 0 then return nil end; return pattern; end @@ -598,7 +600,17 @@ function HealBot_GetHealSpell(unit, pattern) local range = 40; if HealBot_Spells[spell] then 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 if HealBot_Range_Check(unit, range) == 0 then return nil end; return spell; @@ -606,13 +618,18 @@ function HealBot_GetHealSpell(unit, pattern) -- Handle Named Macros if GetMacroIndexByName(pattern) ~= 0 then + if HealBot_Range_Check(unit, 40) == 0 then return nil end; return pattern; end -- Handle Items local bag, slot = HealBot_FindBagSlot(pattern) 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; end diff --git a/HealBot_Data.lua b/HealBot_Data.lua index 1964626..75374d1 100644 --- a/HealBot_Data.lua +++ b/HealBot_Data.lua @@ -52,6 +52,8 @@ HealBot_ConfigDefaults = { SoundDebuffWarning = 0, SoundDebuffPlay = 1, CDCMonitor = 2, + CDCOverlay = 1, + CDCOverlayTexture = "Interface\\AddOns\\HealBotBlue\\Images\\glow1.tga", PanelAnchorX = -1, PanelAnchorY = -1, CDCBarColour = { @@ -542,104 +544,104 @@ HealBot_Debuff_Spells = { }, } -HealBot_Buff_Spells = { - [HEALBOT_PALADIN] = { - HEALBOT_BLESSING_OF_KINGS, - HEALBOT_BLESSING_OF_MIGHT, - HEALBOT_BLESSING_OF_WISDOM, - HEALBOT_BLESSING_OF_SALVATION, - HEALBOT_BLESSING_OF_LIGHT, - HEALBOT_BLESSING_OF_SANCTUARY, - HEALBOT_GREATER_BLESSING_OF_KINGS, - HEALBOT_GREATER_BLESSING_OF_MIGHT, - HEALBOT_GREATER_BLESSING_OF_WISDOM, - HEALBOT_GREATER_BLESSING_OF_SALVATION, - HEALBOT_GREATER_BLESSING_OF_LIGHT, - HEALBOT_GREATER_BLESSING_OF_SANCTUARY, - HEALBOT_RIGHTEOUS_FURY, - }, - [HEALBOT_DRUID] = { - HEALBOT_MARK_OF_THE_WILD, - HEALBOT_GIFT_OF_THE_WILD, - HEALBOT_THORNS, - HEALBOT_OMEN_OF_CLARITY, - }, - [HEALBOT_PRIEST] = { - HEALBOT_POWER_WORD_FORTITUDE, - HEALBOT_PRAYER_OF_FORTITUDE, - HEALBOT_DIVINE_SPIRIT, - HEALBOT_PRAYER_OF_SPIRIT, - HEALBOT_SHADOW_PROTECTION, - HEALBOT_PRAYER_OF_SHADOW_PROTECTION, - HEALBOT_INNER_FIRE, - HEALBOT_FEAR_WARD, - HEALBOT_SHADOWFORM, - HEALBOT_ENLIGHTEN, - }, - [HEALBOT_MAGE] = { - HEALBOT_ARCANE_INTELLECT, - HEALBOT_ARCANE_BRILLIANCE, - HEALBOT_DAMPEN_MAGIC, - HEALBOT_AMPLIFY_MAGIC, - HEALBOT_FROST_ARMOR, - HEALBOT_ICE_ARMOR, - HEALBOT_MAGE_ARMOR, - HEALBOT_ICE_BARRIER, - }, - [HEALBOT_SHAMAN] = { - HEALBOT_ROCKBITER_WEAPON, - HEALBOT_FLAMETONGUE_WEAPON, - HEALBOT_FROSTBRAND_WEAPON, - HEALBOT_WINDFURY_WEAPON, - HEALBOT_LIGHTNING_SHIELD, - HEALBOT_WATER_SHIELD, - HEALBOT_WATER_WALKING, - HEALBOT_WATER_BREATHING, - }, - [HEALBOT_WARRIOR] = { - HEALBOT_BATTLE_SHOUT, - }, - [HEALBOT_WARLOCK] = { - HEALBOT_DEMON_SKIN, - HEALBOT_DEMON_ARMOR, - HEALBOT_UNENDING_BREATH, - HEALBOT_DETECT_LESSER_INVISIBILITY, - HEALBOT_DETECT_INVISIBILITY, - }, - [HEALBOT_HUNTER] = { - HEALBOT_TRUESHOT_AURA, - HEALBOT_ASPECT_OF_THE_HAWK, - HEALBOT_ASPECT_OF_THE_MONKEY, - HEALBOT_ASPECT_OF_THE_CHEETAH, - HEALBOT_ASPECT_OF_THE_PACK, - HEALBOT_ASPECT_OF_THE_WILD, - HEALBOT_ASPECT_OF_THE_BEAST, - }, - [HEALBOT_ROGUE] = {}, -} - -HealBot_SelfOnly_Buffs = { - [HEALBOT_DEMON_SKIN] = true, - [HEALBOT_DEMON_ARMOR] = true, - [HEALBOT_ASPECT_OF_THE_HAWK] = true, - [HEALBOT_ASPECT_OF_THE_MONKEY] = true, - [HEALBOT_ASPECT_OF_THE_CHEETAH] = true, - [HEALBOT_ASPECT_OF_THE_BEAST] = true, - [HEALBOT_FROST_ARMOR] = true, - [HEALBOT_ICE_ARMOR] = true, - [HEALBOT_MAGE_ARMOR] = true, - [HEALBOT_ICE_BARRIER] = true, - [HEALBOT_RIGHTEOUS_FURY] = true, - [HEALBOT_INNER_FIRE] = true, - [HEALBOT_SHADOWFORM] = true, - [HEALBOT_LIGHTNING_SHIELD] = true, - [HEALBOT_WATER_SHIELD] = true, - [HEALBOT_ROCKBITER_WEAPON] = true, - [HEALBOT_FLAMETONGUE_WEAPON] = true, - [HEALBOT_FROSTBRAND_WEAPON] = true, - [HEALBOT_WINDFURY_WEAPON] = true, -} - +HealBot_Buff_Spells = { + [HEALBOT_PALADIN] = { + HEALBOT_BLESSING_OF_KINGS, + HEALBOT_BLESSING_OF_MIGHT, + HEALBOT_BLESSING_OF_WISDOM, + HEALBOT_BLESSING_OF_SALVATION, + HEALBOT_BLESSING_OF_LIGHT, + HEALBOT_BLESSING_OF_SANCTUARY, + HEALBOT_GREATER_BLESSING_OF_KINGS, + HEALBOT_GREATER_BLESSING_OF_MIGHT, + HEALBOT_GREATER_BLESSING_OF_WISDOM, + HEALBOT_GREATER_BLESSING_OF_SALVATION, + HEALBOT_GREATER_BLESSING_OF_LIGHT, + HEALBOT_GREATER_BLESSING_OF_SANCTUARY, + HEALBOT_RIGHTEOUS_FURY, + }, + [HEALBOT_DRUID] = { + HEALBOT_MARK_OF_THE_WILD, + HEALBOT_GIFT_OF_THE_WILD, + HEALBOT_THORNS, + HEALBOT_OMEN_OF_CLARITY, + }, + [HEALBOT_PRIEST] = { + HEALBOT_POWER_WORD_FORTITUDE, + HEALBOT_PRAYER_OF_FORTITUDE, + HEALBOT_DIVINE_SPIRIT, + HEALBOT_PRAYER_OF_SPIRIT, + HEALBOT_SHADOW_PROTECTION, + HEALBOT_PRAYER_OF_SHADOW_PROTECTION, + HEALBOT_INNER_FIRE, + HEALBOT_FEAR_WARD, + HEALBOT_SHADOWFORM, + HEALBOT_ENLIGHTEN, + }, + [HEALBOT_MAGE] = { + HEALBOT_ARCANE_INTELLECT, + HEALBOT_ARCANE_BRILLIANCE, + HEALBOT_DAMPEN_MAGIC, + HEALBOT_AMPLIFY_MAGIC, + HEALBOT_FROST_ARMOR, + HEALBOT_ICE_ARMOR, + HEALBOT_MAGE_ARMOR, + HEALBOT_ICE_BARRIER, + }, + [HEALBOT_SHAMAN] = { + HEALBOT_ROCKBITER_WEAPON, + HEALBOT_FLAMETONGUE_WEAPON, + HEALBOT_FROSTBRAND_WEAPON, + HEALBOT_WINDFURY_WEAPON, + HEALBOT_LIGHTNING_SHIELD, + HEALBOT_WATER_SHIELD, + HEALBOT_WATER_WALKING, + HEALBOT_WATER_BREATHING, + }, + [HEALBOT_WARRIOR] = { + HEALBOT_BATTLE_SHOUT, + }, + [HEALBOT_WARLOCK] = { + HEALBOT_DEMON_SKIN, + HEALBOT_DEMON_ARMOR, + HEALBOT_UNENDING_BREATH, + HEALBOT_DETECT_LESSER_INVISIBILITY, + HEALBOT_DETECT_INVISIBILITY, + }, + [HEALBOT_HUNTER] = { + HEALBOT_TRUESHOT_AURA, + HEALBOT_ASPECT_OF_THE_HAWK, + HEALBOT_ASPECT_OF_THE_MONKEY, + HEALBOT_ASPECT_OF_THE_CHEETAH, + HEALBOT_ASPECT_OF_THE_PACK, + HEALBOT_ASPECT_OF_THE_WILD, + HEALBOT_ASPECT_OF_THE_BEAST, + }, + [HEALBOT_ROGUE] = {}, +} + +HealBot_SelfOnly_Buffs = { + [HEALBOT_DEMON_SKIN] = true, + [HEALBOT_DEMON_ARMOR] = true, + [HEALBOT_ASPECT_OF_THE_HAWK] = true, + [HEALBOT_ASPECT_OF_THE_MONKEY] = true, + [HEALBOT_ASPECT_OF_THE_CHEETAH] = true, + [HEALBOT_ASPECT_OF_THE_BEAST] = true, + [HEALBOT_FROST_ARMOR] = true, + [HEALBOT_ICE_ARMOR] = true, + [HEALBOT_MAGE_ARMOR] = true, + [HEALBOT_ICE_BARRIER] = true, + [HEALBOT_RIGHTEOUS_FURY] = true, + [HEALBOT_INNER_FIRE] = true, + [HEALBOT_SHADOWFORM] = true, + [HEALBOT_LIGHTNING_SHIELD] = true, + [HEALBOT_WATER_SHIELD] = true, + [HEALBOT_ROCKBITER_WEAPON] = true, + [HEALBOT_FLAMETONGUE_WEAPON] = true, + [HEALBOT_FROSTBRAND_WEAPON] = true, + [HEALBOT_WINDFURY_WEAPON] = true, +} + HealBot_Debuff_Types = { [HEALBOT_PURIFY] = {HEALBOT_DISEASE_en, HEALBOT_POISON_en}, [HEALBOT_CLEANSE] = {HEALBOT_DISEASE_en, HEALBOT_POISON_en, HEALBOT_MAGIC_en}, diff --git a/HealBot_Localization.de.lua b/HealBot_Localization.de.lua index 0de6089..6d9d5e7 100644 --- a/HealBot_Localization.de.lua +++ b/HealBot_Localization.de.lua @@ -81,59 +81,59 @@ HEALBOT_CHAIN_HEAL = "Kettenheilung"; HEALBOT_POWER_WORD_FORTITUDE = "Machtwort: Seelenst\195\164rke"; HEALBOT_MARK_OF_THE_WILD = "Mal der Wildnis"; -HEALBOT_BLESSING_OF_SALVATION = "Segen der Rettung"; - -HEALBOT_BATTLE_SHOUT = "Schlachtruf"; -HEALBOT_BLOODRAGE = "Blutrausch"; -HEALBOT_BERSERKER_RAGE = "Berserkerwut"; - -HEALBOT_DEMON_SKIN = "D\195\164monenhaut"; -HEALBOT_DEMON_ARMOR = "D\195\164monenr\195\188stung"; -HEALBOT_UNENDING_BREATH = "Unendlicher Atem"; -HEALBOT_DETECT_LESSER_INVISIBILITY = "Geringe Unsichtbarkeit entdecken"; -HEALBOT_DETECT_INVISIBILITY = "Unsichtbarkeit entdecken"; -HEALBOT_SHADOW_WARD = "Schattenzauberschutz"; -HEALBOT_SOULSTONE_RESURRECTION = "Seelenstein-Auferstehung"; -HEALBOT_FIRE_SHIELD = "Feuerschild"; - -HEALBOT_TRUESHOT_AURA = "Aura des Volltreffers"; -HEALBOT_ASPECT_OF_THE_HAWK = "Aspekt des Falken"; -HEALBOT_ASPECT_OF_THE_MONKEY = "Aspekt des Affen"; -HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspekt des Geparden"; -HEALBOT_ASPECT_OF_THE_PACK = "Aspekt des Rudels"; -HEALBOT_ASPECT_OF_THE_WILD = "Aspekt der Wildnis"; -HEALBOT_ASPECT_OF_THE_BEAST = "Aspekt des Wildtiers"; - -HEALBOT_STEALTH = "Verstohlenheit"; -HEALBOT_BLADE_FLURRY = "Klingenwirbel"; -HEALBOT_EVASION = "Entrinnen"; -HEALBOT_SPRINT = "Sprinten"; -HEALBOT_SLICE_AND_DICE = "Zerh\195\164ckseln"; - -HEALBOT_FROST_ARMOR = "Frostr\195\188stung"; -HEALBOT_ICE_ARMOR = "Eisr\195\188stung"; -HEALBOT_MAGE_ARMOR = "Magische R\195\188stung"; -HEALBOT_MANA_SHIELD = "Manaschild"; -HEALBOT_ICE_BARRIER = "Eisbarriere"; -HEALBOT_FIRE_WARD = "Feuerzauberschutz"; -HEALBOT_FROST_WARD = "Frostzauberschutz"; - -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_WISDOM = "Gro\195\159er Segen der Weisheit"; -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_SANCTUARY = "Gro\195\159er Segen des Unterschlupfs"; -HEALBOT_RIGHTEOUS_FURY = "Zorn der Gerechtigkeit"; - -HEALBOT_SHADOWFORM = "Schattengestalt"; - -HEALBOT_BARKSKIN = "Baumrinde"; -HEALBOT_NATURES_GRASP = "Griff der Natur"; - -HEALBOT_LIGHTNING_SHIELD = "Blitzschlagschild"; -HEALBOT_WATER_SHIELD = "Wasserschild"; -HEALBOT_WATER_WALKING = "Wasserwandeln"; +HEALBOT_BLESSING_OF_SALVATION = "Segen der Rettung"; + +HEALBOT_BATTLE_SHOUT = "Schlachtruf"; +HEALBOT_BLOODRAGE = "Blutrausch"; +HEALBOT_BERSERKER_RAGE = "Berserkerwut"; + +HEALBOT_DEMON_SKIN = "D\195\164monenhaut"; +HEALBOT_DEMON_ARMOR = "D\195\164monenr\195\188stung"; +HEALBOT_UNENDING_BREATH = "Unendlicher Atem"; +HEALBOT_DETECT_LESSER_INVISIBILITY = "Geringe Unsichtbarkeit entdecken"; +HEALBOT_DETECT_INVISIBILITY = "Unsichtbarkeit entdecken"; +HEALBOT_SHADOW_WARD = "Schattenzauberschutz"; +HEALBOT_SOULSTONE_RESURRECTION = "Seelenstein-Auferstehung"; +HEALBOT_FIRE_SHIELD = "Feuerschild"; + +HEALBOT_TRUESHOT_AURA = "Aura des Volltreffers"; +HEALBOT_ASPECT_OF_THE_HAWK = "Aspekt des Falken"; +HEALBOT_ASPECT_OF_THE_MONKEY = "Aspekt des Affen"; +HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspekt des Geparden"; +HEALBOT_ASPECT_OF_THE_PACK = "Aspekt des Rudels"; +HEALBOT_ASPECT_OF_THE_WILD = "Aspekt der Wildnis"; +HEALBOT_ASPECT_OF_THE_BEAST = "Aspekt des Wildtiers"; + +HEALBOT_STEALTH = "Verstohlenheit"; +HEALBOT_BLADE_FLURRY = "Klingenwirbel"; +HEALBOT_EVASION = "Entrinnen"; +HEALBOT_SPRINT = "Sprinten"; +HEALBOT_SLICE_AND_DICE = "Zerh\195\164ckseln"; + +HEALBOT_FROST_ARMOR = "Frostr\195\188stung"; +HEALBOT_ICE_ARMOR = "Eisr\195\188stung"; +HEALBOT_MAGE_ARMOR = "Magische R\195\188stung"; +HEALBOT_MANA_SHIELD = "Manaschild"; +HEALBOT_ICE_BARRIER = "Eisbarriere"; +HEALBOT_FIRE_WARD = "Feuerzauberschutz"; +HEALBOT_FROST_WARD = "Frostzauberschutz"; + +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_WISDOM = "Gro\195\159er Segen der Weisheit"; +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_SANCTUARY = "Gro\195\159er Segen des Unterschlupfs"; +HEALBOT_RIGHTEOUS_FURY = "Zorn der Gerechtigkeit"; + +HEALBOT_SHADOWFORM = "Schattengestalt"; + +HEALBOT_BARKSKIN = "Baumrinde"; +HEALBOT_NATURES_GRASP = "Griff der Natur"; + +HEALBOT_LIGHTNING_SHIELD = "Blitzschlagschild"; +HEALBOT_WATER_SHIELD = "Wasserschild"; +HEALBOT_WATER_WALKING = "Wasserwandeln"; HEALBOT_WATER_BREATHING = "Wasseratmung"; HEALBOT_RESURRECTION = "Auferstehung"; @@ -148,7 +148,7 @@ HEALBOT_CLEANSE = "Reinigung des Glaubens"; HEALBOT_DISPEL_MAGIC = "Magiebannung"; HEALBOT_CURE_POISON = "Vergiftung heilen"; HEALBOT_ABOLISH_POISON = "Vergiftung aufheben"; -HEALBOT_REMOVE_CURSE = "Fluch aufheben"; +HEALBOT_REMOVE_CURSE = "Fluch aufheben"; HEALBOT_REMOVE_LESSER_CURSE= "Geringeren Fluch aufheben"; HEALBOT_DISEASE = "Krankheit"; 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"; diff --git a/HealBot_Localization.en.lua b/HealBot_Localization.en.lua index 4a381b1..648b9a9 100644 --- a/HealBot_Localization.en.lua +++ b/HealBot_Localization.en.lua @@ -93,59 +93,59 @@ HEALBOT_THORNS = "Thorns"; HEALBOT_OMEN_OF_CLARITY = "Omen of Clarity"; HEALBOT_INNER_FIRE = "Inner Fire"; HEALBOT_FEAR_WARD = "Fear Ward"; -HEALBOT_ENLIGHTEN = "Enlighten"; - -HEALBOT_BATTLE_SHOUT = "Battle Shout"; -HEALBOT_BLOODRAGE = "Bloodrage"; -HEALBOT_BERSERKER_RAGE = "Berserker Rage"; - -HEALBOT_DEMON_SKIN = "Demon Skin"; -HEALBOT_DEMON_ARMOR = "Demon Armor"; -HEALBOT_UNENDING_BREATH = "Unending Breath"; -HEALBOT_DETECT_LESSER_INVISIBILITY = "Detect Lesser Invisibility"; -HEALBOT_DETECT_INVISIBILITY = "Detect Invisibility"; -HEALBOT_SHADOW_WARD = "Shadow Ward"; -HEALBOT_SOULSTONE_RESURRECTION = "Soulstone Resurrection"; -HEALBOT_FIRE_SHIELD = "Fire Shield"; - -HEALBOT_TRUESHOT_AURA = "Trueshot Aura"; -HEALBOT_ASPECT_OF_THE_HAWK = "Aspect of the Hawk"; -HEALBOT_ASPECT_OF_THE_MONKEY = "Aspect of the Monkey"; -HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspect of the Cheetah"; -HEALBOT_ASPECT_OF_THE_PACK = "Aspect of the Pack"; -HEALBOT_ASPECT_OF_THE_WILD = "Aspect of the Wild"; -HEALBOT_ASPECT_OF_THE_BEAST = "Aspect of the Beast"; - -HEALBOT_STEALTH = "Stealth"; -HEALBOT_BLADE_FLURRY = "Blade Flurry"; -HEALBOT_EVASION = "Evasion"; -HEALBOT_SPRINT = "Sprint"; -HEALBOT_SLICE_AND_DICE = "Slice and Dice"; - -HEALBOT_FROST_ARMOR = "Frost Armor"; -HEALBOT_ICE_ARMOR = "Ice Armor"; -HEALBOT_MAGE_ARMOR = "Mage Armor"; -HEALBOT_MANA_SHIELD = "Mana Shield"; -HEALBOT_ICE_BARRIER = "Ice Barrier"; -HEALBOT_FIRE_WARD = "Fire Ward"; -HEALBOT_FROST_WARD = "Frost Ward"; - -HEALBOT_GREATER_BLESSING_OF_SALVATION = "Greater Blessing of Salvation"; -HEALBOT_GREATER_BLESSING_OF_MIGHT = "Greater Blessing of Might"; -HEALBOT_GREATER_BLESSING_OF_WISDOM = "Greater Blessing of Wisdom"; -HEALBOT_GREATER_BLESSING_OF_KINGS = "Greater Blessing of Kings"; -HEALBOT_GREATER_BLESSING_OF_LIGHT = "Greater Blessing of Light"; -HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "Greater Blessing of Sanctuary"; -HEALBOT_RIGHTEOUS_FURY = "Righteous Fury"; - -HEALBOT_SHADOWFORM = "Shadowform"; - -HEALBOT_BARKSKIN = "Barkskin"; -HEALBOT_NATURES_GRASP = "Nature's Grasp"; - -HEALBOT_LIGHTNING_SHIELD = "Lightning Shield"; -HEALBOT_WATER_SHIELD = "Water Shield"; -HEALBOT_WATER_WALKING = "Water Walking"; +HEALBOT_ENLIGHTEN = "Enlighten"; + +HEALBOT_BATTLE_SHOUT = "Battle Shout"; +HEALBOT_BLOODRAGE = "Bloodrage"; +HEALBOT_BERSERKER_RAGE = "Berserker Rage"; + +HEALBOT_DEMON_SKIN = "Demon Skin"; +HEALBOT_DEMON_ARMOR = "Demon Armor"; +HEALBOT_UNENDING_BREATH = "Unending Breath"; +HEALBOT_DETECT_LESSER_INVISIBILITY = "Detect Lesser Invisibility"; +HEALBOT_DETECT_INVISIBILITY = "Detect Invisibility"; +HEALBOT_SHADOW_WARD = "Shadow Ward"; +HEALBOT_SOULSTONE_RESURRECTION = "Soulstone Resurrection"; +HEALBOT_FIRE_SHIELD = "Fire Shield"; + +HEALBOT_TRUESHOT_AURA = "Trueshot Aura"; +HEALBOT_ASPECT_OF_THE_HAWK = "Aspect of the Hawk"; +HEALBOT_ASPECT_OF_THE_MONKEY = "Aspect of the Monkey"; +HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspect of the Cheetah"; +HEALBOT_ASPECT_OF_THE_PACK = "Aspect of the Pack"; +HEALBOT_ASPECT_OF_THE_WILD = "Aspect of the Wild"; +HEALBOT_ASPECT_OF_THE_BEAST = "Aspect of the Beast"; + +HEALBOT_STEALTH = "Stealth"; +HEALBOT_BLADE_FLURRY = "Blade Flurry"; +HEALBOT_EVASION = "Evasion"; +HEALBOT_SPRINT = "Sprint"; +HEALBOT_SLICE_AND_DICE = "Slice and Dice"; + +HEALBOT_FROST_ARMOR = "Frost Armor"; +HEALBOT_ICE_ARMOR = "Ice Armor"; +HEALBOT_MAGE_ARMOR = "Mage Armor"; +HEALBOT_MANA_SHIELD = "Mana Shield"; +HEALBOT_ICE_BARRIER = "Ice Barrier"; +HEALBOT_FIRE_WARD = "Fire Ward"; +HEALBOT_FROST_WARD = "Frost Ward"; + +HEALBOT_GREATER_BLESSING_OF_SALVATION = "Greater Blessing of Salvation"; +HEALBOT_GREATER_BLESSING_OF_MIGHT = "Greater Blessing of Might"; +HEALBOT_GREATER_BLESSING_OF_WISDOM = "Greater Blessing of Wisdom"; +HEALBOT_GREATER_BLESSING_OF_KINGS = "Greater Blessing of Kings"; +HEALBOT_GREATER_BLESSING_OF_LIGHT = "Greater Blessing of Light"; +HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "Greater Blessing of Sanctuary"; +HEALBOT_RIGHTEOUS_FURY = "Righteous Fury"; + +HEALBOT_SHADOWFORM = "Shadowform"; + +HEALBOT_BARKSKIN = "Barkskin"; +HEALBOT_NATURES_GRASP = "Nature's Grasp"; + +HEALBOT_LIGHTNING_SHIELD = "Lightning Shield"; +HEALBOT_WATER_SHIELD = "Water Shield"; +HEALBOT_WATER_WALKING = "Water Walking"; HEALBOT_WATER_BREATHING = "Water Breathing"; HEALBOT_RESURRECTION = "Resurrection"; @@ -156,7 +156,7 @@ HEALBOT_ANCESTRALSPIRIT = "Ancestral Spirit"; HEALBOT_PURIFY = "Purify"; HEALBOT_CLEANSE = "Cleanse"; HEALBOT_CURE_POISON = "Cure Poison"; -HEALBOT_REMOVE_CURSE = "Remove Curse"; +HEALBOT_REMOVE_CURSE = "Remove Curse"; HEALBOT_REMOVE_LESSER_CURSE= "Remove Lesser Curse"; HEALBOT_ABOLISH_POISON = "Abolish Poison"; HEALBOT_CURE_DISEASE = "Cure Disease"; @@ -449,3 +449,11 @@ HEALBOT_WORDS_CAST = "Cast" HEALBOT_WORDS_FOR = "for"; HEALBOT_OPTIONS_TESTBARS = "Test Bars"; 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"; diff --git a/HealBot_Localization.fr.lua b/HealBot_Localization.fr.lua index cdae9e0..ef7cb61 100644 --- a/HealBot_Localization.fr.lua +++ b/HealBot_Localization.fr.lua @@ -81,59 +81,59 @@ HEALBOT_CHAIN_HEAL = "Salve de gu\195\169rison"; HEALBOT_POWER_WORD_FORTITUDE = "Mot de pouvoir : Robustesse"; HEALBOT_MARK_OF_THE_WILD = "Marque du fauve"; -HEALBOT_BLESSING_OF_SALVATION = "B\195\169n\195\169diction de salut"; - -HEALBOT_BATTLE_SHOUT = "Cri de guerre"; -HEALBOT_BLOODRAGE = "Rage sanguinaire"; -HEALBOT_BERSERKER_RAGE = "Rage berserker"; - -HEALBOT_DEMON_SKIN = "Peau de d\195\169mon"; -HEALBOT_DEMON_ARMOR = "Armure d\195\169moniaque"; -HEALBOT_UNENDING_BREATH = "Respiration interminable"; -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_SHADOW_WARD = "Gardien de l'ombre"; -HEALBOT_SOULSTONE_RESURRECTION = "R\195\169surrection de pierre d'\195\162me"; -HEALBOT_FIRE_SHIELD = "Bouclier de feu"; - -HEALBOT_TRUESHOT_AURA = "Aura de pr\195\169cision"; -HEALBOT_ASPECT_OF_THE_HAWK = "Aspect du faucon"; -HEALBOT_ASPECT_OF_THE_MONKEY = "Aspect du singe"; -HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspect du gu\195\169pard"; -HEALBOT_ASPECT_OF_THE_PACK = "Aspect de la meute"; -HEALBOT_ASPECT_OF_THE_WILD = "Aspect de la nature"; -HEALBOT_ASPECT_OF_THE_BEAST = "Aspect de la b\195\170te"; - -HEALBOT_STEALTH = "Camouflage"; -HEALBOT_BLADE_FLURRY = "D\195\169luge de lames"; -HEALBOT_EVASION = "Evasion"; -HEALBOT_SPRINT = "Sprint"; -HEALBOT_SLICE_AND_DICE = "D\195\169biter"; - -HEALBOT_FROST_ARMOR = "Armure de givre"; -HEALBOT_ICE_ARMOR = "Armure de glace"; -HEALBOT_MAGE_ARMOR = "Armure du mage"; -HEALBOT_MANA_SHIELD = "Bouclier de mana"; -HEALBOT_ICE_BARRIER = "Barri\195\168re de glace"; -HEALBOT_FIRE_WARD = "Gardien de feu"; -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_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_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_SANCTUARY = "B\195\169n\195\169diction du sanctuaire sup\195\169rieure"; -HEALBOT_RIGHTEOUS_FURY = "Fureur vertueuse"; - -HEALBOT_SHADOWFORM = "Forme d'Ombre"; - -HEALBOT_BARKSKIN = "Peau d'\195\169corce"; -HEALBOT_NATURES_GRASP = "Emprise de la nature"; - -HEALBOT_LIGHTNING_SHIELD = "Bouclier de foudre"; -HEALBOT_WATER_SHIELD = "Bouclier d'eau"; -HEALBOT_WATER_WALKING = "Marche sur l'eau"; +HEALBOT_BLESSING_OF_SALVATION = "B\195\169n\195\169diction de salut"; + +HEALBOT_BATTLE_SHOUT = "Cri de guerre"; +HEALBOT_BLOODRAGE = "Rage sanguinaire"; +HEALBOT_BERSERKER_RAGE = "Rage berserker"; + +HEALBOT_DEMON_SKIN = "Peau de d\195\169mon"; +HEALBOT_DEMON_ARMOR = "Armure d\195\169moniaque"; +HEALBOT_UNENDING_BREATH = "Respiration interminable"; +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_SHADOW_WARD = "Gardien de l'ombre"; +HEALBOT_SOULSTONE_RESURRECTION = "R\195\169surrection de pierre d'\195\162me"; +HEALBOT_FIRE_SHIELD = "Bouclier de feu"; + +HEALBOT_TRUESHOT_AURA = "Aura de pr\195\169cision"; +HEALBOT_ASPECT_OF_THE_HAWK = "Aspect du faucon"; +HEALBOT_ASPECT_OF_THE_MONKEY = "Aspect du singe"; +HEALBOT_ASPECT_OF_THE_CHEETAH = "Aspect du gu\195\169pard"; +HEALBOT_ASPECT_OF_THE_PACK = "Aspect de la meute"; +HEALBOT_ASPECT_OF_THE_WILD = "Aspect de la nature"; +HEALBOT_ASPECT_OF_THE_BEAST = "Aspect de la b\195\170te"; + +HEALBOT_STEALTH = "Camouflage"; +HEALBOT_BLADE_FLURRY = "D\195\169luge de lames"; +HEALBOT_EVASION = "Evasion"; +HEALBOT_SPRINT = "Sprint"; +HEALBOT_SLICE_AND_DICE = "D\195\169biter"; + +HEALBOT_FROST_ARMOR = "Armure de givre"; +HEALBOT_ICE_ARMOR = "Armure de glace"; +HEALBOT_MAGE_ARMOR = "Armure du mage"; +HEALBOT_MANA_SHIELD = "Bouclier de mana"; +HEALBOT_ICE_BARRIER = "Barri\195\168re de glace"; +HEALBOT_FIRE_WARD = "Gardien de feu"; +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_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_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_SANCTUARY = "B\195\169n\195\169diction du sanctuaire sup\195\169rieure"; +HEALBOT_RIGHTEOUS_FURY = "Fureur vertueuse"; + +HEALBOT_SHADOWFORM = "Forme d'Ombre"; + +HEALBOT_BARKSKIN = "Peau d'\195\169corce"; +HEALBOT_NATURES_GRASP = "Emprise de la nature"; + +HEALBOT_LIGHTNING_SHIELD = "Bouclier de foudre"; +HEALBOT_WATER_SHIELD = "Bouclier d'eau"; +HEALBOT_WATER_WALKING = "Marche sur l'eau"; HEALBOT_WATER_BREATHING = "Respiration aquatique"; HEALBOT_RESURRECTION = "R\195\169surrection"; @@ -144,7 +144,7 @@ HEALBOT_ANCESTRALSPIRIT = "Esprit Ancestral"; HEALBOT_PURIFY = "Purification"; HEALBOT_CLEANSE = "Epuration"; 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_ABOLISH_POISON = "Abolir le poison"; 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"; diff --git a/HealBot_Localization.kr.lua b/HealBot_Localization.kr.lua index c14d184..9d5cd5e 100644 --- a/HealBot_Localization.kr.lua +++ b/HealBot_Localization.kr.lua @@ -66,58 +66,58 @@ HEALBOT_INNER_FIRE = "내면의 열정"; HEALBOT_FEAR_WARD = "공포의 결계"; HEALBOT_ENLIGHTEN = "Enlighten"; HEALBOT_MARK_OF_THE_WILD = "야생의 징표"; -HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복"; - -HEALBOT_BATTLE_SHOUT = "전투의 외침"; -HEALBOT_BLOODRAGE = "피의 분노"; -HEALBOT_BERSERKER_RAGE = "광전사의 격노"; - -HEALBOT_DEMON_SKIN = "악마의 피부"; -HEALBOT_DEMON_ARMOR = "악마의 갑옷"; -HEALBOT_UNENDING_BREATH = "영원의 숨결"; -HEALBOT_DETECT_LESSER_INVISIBILITY = "하급 투명체 감지"; -HEALBOT_DETECT_INVISIBILITY = "투명체 감지"; -HEALBOT_SHADOW_WARD = "암흑계 수호"; -HEALBOT_SOULSTONE_RESURRECTION = "영혼석 부활"; -HEALBOT_FIRE_SHIELD = "불의 방패"; - -HEALBOT_TRUESHOT_AURA = "정밀함의 오라"; -HEALBOT_ASPECT_OF_THE_HAWK = "매의 상"; -HEALBOT_ASPECT_OF_THE_MONKEY = "원숭이의 상"; -HEALBOT_ASPECT_OF_THE_CHEETAH = "치타의 상"; -HEALBOT_ASPECT_OF_THE_PACK = "치타 무리의 상"; -HEALBOT_ASPECT_OF_THE_WILD = "야생의 상"; -HEALBOT_ASPECT_OF_THE_BEAST = "야수의 상"; - -HEALBOT_STEALTH = "은신"; -HEALBOT_BLADE_FLURRY = "폭풍의 칼날"; -HEALBOT_EVASION = "회피"; -HEALBOT_SPRINT = "전력 질주"; -HEALBOT_SLICE_AND_DICE = "난도질"; - -HEALBOT_FROST_ARMOR = "서리 갑옷"; -HEALBOT_ICE_ARMOR = "얼음 갑옷"; -HEALBOT_MAGE_ARMOR = "마법사 갑옷"; -HEALBOT_MANA_SHIELD = "마나 보호막"; -HEALBOT_ICE_BARRIER = "얼음 보호막"; -HEALBOT_FIRE_WARD = "화염계 수호"; -HEALBOT_FROST_WARD = "냉기계 수호"; - -HEALBOT_GREATER_BLESSING_OF_MIGHT = "상급 힘의 축복"; -HEALBOT_GREATER_BLESSING_OF_WISDOM = "상급 지혜의 축복"; -HEALBOT_GREATER_BLESSING_OF_KINGS = "상급 왕의 축복"; -HEALBOT_GREATER_BLESSING_OF_LIGHT = "상급 빛의 축복"; -HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "상급 성역의 축복"; -HEALBOT_RIGHTEOUS_FURY = "정의의 격노"; - -HEALBOT_SHADOWFORM = "어둠의 형상"; - -HEALBOT_BARKSKIN = "나무 껍질"; -HEALBOT_NATURES_GRASP = "자연의 파악"; - -HEALBOT_LIGHTNING_SHIELD = "번개 보호막"; -HEALBOT_WATER_SHIELD = "물의 보호막"; -HEALBOT_WATER_WALKING = "수면 보행"; +HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복"; + +HEALBOT_BATTLE_SHOUT = "전투의 외침"; +HEALBOT_BLOODRAGE = "피의 분노"; +HEALBOT_BERSERKER_RAGE = "광전사의 격노"; + +HEALBOT_DEMON_SKIN = "악마의 피부"; +HEALBOT_DEMON_ARMOR = "악마의 갑옷"; +HEALBOT_UNENDING_BREATH = "영원의 숨결"; +HEALBOT_DETECT_LESSER_INVISIBILITY = "하급 투명체 감지"; +HEALBOT_DETECT_INVISIBILITY = "투명체 감지"; +HEALBOT_SHADOW_WARD = "암흑계 수호"; +HEALBOT_SOULSTONE_RESURRECTION = "영혼석 부활"; +HEALBOT_FIRE_SHIELD = "불의 방패"; + +HEALBOT_TRUESHOT_AURA = "정밀함의 오라"; +HEALBOT_ASPECT_OF_THE_HAWK = "매의 상"; +HEALBOT_ASPECT_OF_THE_MONKEY = "원숭이의 상"; +HEALBOT_ASPECT_OF_THE_CHEETAH = "치타의 상"; +HEALBOT_ASPECT_OF_THE_PACK = "치타 무리의 상"; +HEALBOT_ASPECT_OF_THE_WILD = "야생의 상"; +HEALBOT_ASPECT_OF_THE_BEAST = "야수의 상"; + +HEALBOT_STEALTH = "은신"; +HEALBOT_BLADE_FLURRY = "폭풍의 칼날"; +HEALBOT_EVASION = "회피"; +HEALBOT_SPRINT = "전력 질주"; +HEALBOT_SLICE_AND_DICE = "난도질"; + +HEALBOT_FROST_ARMOR = "서리 갑옷"; +HEALBOT_ICE_ARMOR = "얼음 갑옷"; +HEALBOT_MAGE_ARMOR = "마법사 갑옷"; +HEALBOT_MANA_SHIELD = "마나 보호막"; +HEALBOT_ICE_BARRIER = "얼음 보호막"; +HEALBOT_FIRE_WARD = "화염계 수호"; +HEALBOT_FROST_WARD = "냉기계 수호"; + +HEALBOT_GREATER_BLESSING_OF_MIGHT = "상급 힘의 축복"; +HEALBOT_GREATER_BLESSING_OF_WISDOM = "상급 지혜의 축복"; +HEALBOT_GREATER_BLESSING_OF_KINGS = "상급 왕의 축복"; +HEALBOT_GREATER_BLESSING_OF_LIGHT = "상급 빛의 축복"; +HEALBOT_GREATER_BLESSING_OF_SANCTUARY = "상급 성역의 축복"; +HEALBOT_RIGHTEOUS_FURY = "정의의 격노"; + +HEALBOT_SHADOWFORM = "어둠의 형상"; + +HEALBOT_BARKSKIN = "나무 껍질"; +HEALBOT_NATURES_GRASP = "자연의 파악"; + +HEALBOT_LIGHTNING_SHIELD = "번개 보호막"; +HEALBOT_WATER_SHIELD = "물의 보호막"; +HEALBOT_WATER_WALKING = "수면 보행"; HEALBOT_WATER_BREATHING = "수중 호흡"; HEALBOT_RESURRECTION = "부활"; @@ -128,7 +128,7 @@ HEALBOT_WATER_BREATHING = "수중 호흡"; HEALBOT_PURIFY = "정화"; HEALBOT_CLEANSE = "정화"; HEALBOT_CURE_POISON = "해독"; - HEALBOT_REMOVE_CURSE = "저주 해제"; + HEALBOT_REMOVE_CURSE = "저주 해제"; HEALBOT_REMOVE_LESSER_CURSE = "하급 저주 해제"; HEALBOT_ABOLISH_POISON = "독 해제"; 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"; diff --git a/HealBot_Options.lua b/HealBot_Options.lua index 6cd6cb7..4d9ee64 100644 --- a/HealBot_Options.lua +++ b/HealBot_Options.lua @@ -341,6 +341,7 @@ function HealBot_Options_OnShow(this) HealBot_Options_CDCButRight_Refresh() HealBot_SetCDCBarColours() HealBot_Options_CDCMonitor_Refresh() + HealBot_Options_CDCOverlay_Refresh() HealBot_ComboButtons_Button_OnClick(nil,HealBot_Options_ComboButtons_Button); HealBot_Options_EnableHealthy:SetChecked(HealBot_Config.EnableHealthy); HealBot_Options_NewSkinb:Disable(); diff --git a/HealBot_Options_CDC.lua b/HealBot_Options_CDC.lua index 6fb1e27..17cb164 100644 --- a/HealBot_Options_CDC.lua +++ b/HealBot_Options_CDC.lua @@ -43,6 +43,51 @@ function HealBot_WarningSound_OnClick(this,id) 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. function HealBot_Options_CDCMonitor_DropDown() for i=1, getn(HealBot_Options_EmergencyFilter_List), 1 do diff --git a/HealBot_Options_CDC.xml b/HealBot_Options_CDC.xml index 3c82f4d..f4456fa 100644 --- a/HealBot_Options_CDC.xml +++ b/HealBot_Options_CDC.xml @@ -132,7 +132,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -152,7 +152,7 @@ - + @@ -160,6 +160,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + HealBot_Options_CDCOverlay_OnLoad(this) + + +