16 Commits

Author SHA1 Message Date
Bluewhale1337 4209b05ca0 Merge pull request #3 from Bluewhale1337/dev
Dev branch changes merged to main
2026-07-12 00:51:45 +02:00
Bluewhale1337 eec5745dbb Update of readme 2026-07-12 00:20:04 +02:00
Bluewhale1337 4678236cc0 feat: add Enlighten spell support and update localization files 2026-07-11 15:21:28 +02:00
Bluewhale1337 a1aa1a4c1d feat: add spell cast announcements with target validation for resurrections and added announcements for hoovercasting (mousover frames) 2026-07-11 11:06:27 +02:00
Bluewhale1337 86e0e0b18a Refactor: rename global variables and constants with HealBot prefix and register MODIFIER_STATE_CHANGED event 2026-07-10 23:13:48 +02:00
Bluewhale1337 becb2ddfdb Feat: added customizable unit frame health text and support for non-mana resource tracking 2026-07-10 17:08:50 +02:00
Bluewhale1337 7eb07d724e Merge branch 'main' into dev - applying hotfixes 2026-07-10 16:06:16 +02:00
Bluewhale1337 2e8e57f5c4 Merge branch 'main' of https://github.com/Bluewhale1337/HealBotBlue 2026-07-10 15:54:42 +02:00
Bluewhale1337 f8c6c3493b Refactor + Horfixes: replace UIDropDownMenu calls with wrapper functions and redesign chat option UI to support spell-based configuration. 2026-07-10 15:54:36 +02:00
Bluewhale1337 01a8e3bc6c Update README.md
Known issues section added
2026-07-09 08:13:34 +02:00
Bluewhale1337 c50bcd54f3 Hotfix - prevent legacy UIDropDownMenu crashes by patching refresh and selection functions 2026-07-06 22:15:41 +02:00
Bluewhale1337 4c7cfbde8e add null checks when toggling HealBot options panels to prevent errors 2026-07-04 14:47:22 +02:00
Bluewhale1337 cb1ba1ab75 Implement auto-unshifting for druid shapeshift forms and add status command 2026-07-04 09:41:06 +02:00
Bluewhale1337 0c8b687f53 Implement EQUIPMENT_CHANGED observer pattern and update project to v1.4.0 2026-07-03 12:37:20 +02:00
Bluewhale1337 42715fba47 Added pet frames support 2026-07-03 11:55:42 +02:00
Bluewhale1337 6fe02c1a16 Merge pull request #1 from Bluewhale1337/main
Propagate hotfixes
2026-07-02 12:05:41 +02:00
25 changed files with 1071 additions and 724 deletions
+33 -6
View File
@@ -5,12 +5,12 @@
]]
-- local _scale=0; -- moved to HealBot_Controller_Range.lua
CalcEquipBonus=false;
HealBot_CalcEquipBonus=false;
HealBot_EquipChangeTimer = 0;
HealValue=0;
InitSpells=1;
HealBot_HealValue=0;
HealBot_SpellsInitFlag=1;
local DebugDebuff=false;
Delay_RecalcParty=0;
HealBot_Delay_RecalcParty=0;
-- Debugging and Error functions moved to HealBot_Controller_Comms.lua
@@ -56,9 +56,24 @@ function HealBot_SlashCmd(cmd)
HealBot_TogglePanel(HealBot_Options);
return
end
if (cmd=="forms" or cmd=="form") then
local forms = GetNumShapeshiftForms();
if forms and forms > 0 then
HealBot_AddChat("HealBot: Available shapeshift forms:");
for i=1,forms do
local icon, name, active = GetShapeshiftFormInfo(i);
local actStr = "false"
if active then actStr = "true" end
HealBot_AddChat(" Form " .. i .. ": " .. (name or "nil") .. " | Icon: " .. (icon or "nil") .. " | Active: " .. actStr);
end
else
HealBot_AddChat("HealBot: No shapeshift forms found.");
end
return
end
if (cmd=="reset" or cmd=="recalc" or cmd=="defaults") then
InitSpells=2;
HealBot_SpellsInitFlag=2;
HealBot_Options_Defaults_OnClick(HealBot_Options_Defaults);
return
end
@@ -70,7 +85,7 @@ function HealBot_SlashCmd(cmd)
HealBot_RegisterThis(this);
end
if (cmd=="x") then
InitSpells=2;
HealBot_SpellsInitFlag=2;
NeedEquipUpdate=1
HealBot_RecalcSpells();
return;
@@ -261,10 +276,22 @@ do
do
local autoSelfCast = GetCVar("autoSelfCast")
SetCVar("autoSelfCast", "0") -- Ensure disabled
local spellName = nil
if not GetActionText(slot) then
HealBot_ScanTooltip:SetOwner(HealBot_ScanTooltip, "ANCHOR_NONE")
HealBot_ScanTooltip:SetAction(slot)
spellName = HealBot_ScanTooltipTextLeft1 and HealBot_ScanTooltipTextLeft1:GetText()
end
orig(slot, checkCursor, onSelf)
if autoSelfCast then
SetCVar("autoSelfCast", autoSelfCast)
end
if spellName and HealBot_AnnounceCast then
HealBot_AnnounceCast(spellName, mouseover)
end
end
SpellTargetUnit(mouseover)
+1 -1
View File
@@ -1,6 +1,6 @@
## Interface: 11200
## Title: HealBotBlue
## Version: 1.3.1
## Version: 1.4.0
## Author: Bluewhale
## Notes: Adds panel with skinable bars for healing and decursive
## SavedVariables: HealBot_Config
+14 -14
View File
@@ -6,9 +6,9 @@
-- http://www.curse-gaming.com/mod.php?addid=2384
--------------------------------------------------
HB_BONUSSCANNER_PATTERN_SETNAME = "^(.*) %(%d/%d%)$";
HB_BONUSSCANNER_PATTERN_GENERIC_PREFIX = "^%+(%d+)%%?(.*)$";
HB_BONUSSCANNER_PATTERN_GENERIC_SUFFIX = "^(.*)%+(%d+)%%?$";
HEALBOT_BONUSSCANNER_PATTERN_SETNAME = "^(.*) %(%d/%d%)$";
HEALBOT_BONUSSCANNER_PATTERN_GENERIC_PREFIX = "^%+(%d+)%%?(.*)$";
HEALBOT_BONUSSCANNER_PATTERN_GENERIC_SUFFIX = "^(.*)%+(%d+)%%?$";
HealBot_BonusScanner = {
bonuses = 0;
@@ -128,17 +128,17 @@ end;
function HealBot_BonusScanner:ScanLine(line)
local tmpStr, found;
if(string.sub(line,0,string.len(HB_BONUSSCANNER_PREFIX_EQUIP)) == HB_BONUSSCANNER_PREFIX_EQUIP) then
tmpStr = string.sub(line,string.len(HB_BONUSSCANNER_PREFIX_EQUIP)+1);
if(string.sub(line,0,string.len(HEALBOT_BONUSSCANNER_PREFIX_EQUIP)) == HEALBOT_BONUSSCANNER_PREFIX_EQUIP) then
tmpStr = string.sub(line,string.len(HEALBOT_BONUSSCANNER_PREFIX_EQUIP)+1);
HealBot_BonusScanner:CheckPassive(tmpStr);
elseif(string.sub(line,0,string.len(HB_BONUSSCANNER_PREFIX_SET)) == HB_BONUSSCANNER_PREFIX_SET
elseif(string.sub(line,0,string.len(HEALBOT_BONUSSCANNER_PREFIX_SET)) == HEALBOT_BONUSSCANNER_PREFIX_SET
and HealBot_BonusScanner.temp.set ~= ""
and not HealBot_BonusScanner.temp.sets[HealBot_BonusScanner.temp.set]) then
tmpStr = string.sub(line,string.len(HB_BONUSSCANNER_PREFIX_SET)+1);
tmpStr = string.sub(line,string.len(HEALBOT_BONUSSCANNER_PREFIX_SET)+1);
HealBot_BonusScanner.temp.slot = "Set";
HealBot_BonusScanner:CheckPassive(tmpStr);
else
_, _, tmpStr = string.find(line, HB_BONUSSCANNER_PATTERN_SETNAME);
_, _, tmpStr = string.find(line, HEALBOT_BONUSSCANNER_PATTERN_SETNAME);
if(tmpStr) then
HealBot_BonusScanner.temp.set = tmpStr;
else
@@ -154,7 +154,7 @@ function HealBot_BonusScanner:CheckPassive(line)
local i, p, value, found;
found = nil;
for i,p in HB_BONUSSCANNER_PATTERNS_PASSIVE do
for i,p in HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE do
_, _, value = string.find(line, "^" .. p.pattern);
if(value) then
HealBot_BonusScanner:AddValue(p.effect, value)
@@ -183,9 +183,9 @@ function HealBot_BonusScanner:CheckGeneric(line)
tmpStr = string.gsub( tmpStr, "%s+$", "" );
tmpStr = string.gsub( tmpStr, "%.$", "" );
_, _, value, token = string.find(tmpStr, HB_BONUSSCANNER_PATTERN_GENERIC_PREFIX);
_, _, value, token = string.find(tmpStr, HEALBOT_BONUSSCANNER_PATTERN_GENERIC_PREFIX);
if(not value) then
_, _, token, value = string.find(tmpStr, HB_BONUSSCANNER_PATTERN_GENERIC_SUFFIX);
_, _, token, value = string.find(tmpStr, HEALBOT_BONUSSCANNER_PATTERN_GENERIC_SUFFIX);
end
if(token and value) then
token = string.gsub( token, "^%s+", "" );
@@ -202,8 +202,8 @@ end
function HealBot_BonusScanner:CheckToken(token, value)
local i, p, s1, s2;
if(HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token]) then
HealBot_BonusScanner:AddValue(HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token], value);
if(HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token]) then
HealBot_BonusScanner:AddValue(HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token], value);
return true;
end
return false;
@@ -212,7 +212,7 @@ end
function HealBot_BonusScanner:CheckOther(line)
local i, p, value, start, found;
for i,p in HB_BONUSSCANNER_PATTERNS_OTHER do
for i,p in HEALBOT_BONUSSCANNER_PATTERNS_OTHER do
start, _, value = string.find(line, "^" .. p.pattern);
if(start) then
if(p.value) then
+1
View File
@@ -129,6 +129,7 @@ function HealBot_OnEvent_UnitAura(this, unit)
["Interface\\Icons\\Spell_Holy_PowerWordShield"] = true,
["Interface\\Icons\\Spell_Holy_SealOfProtection"] = true,
["Interface\\Icons\\Spell_Holy_Excorcism"] = true,
["Interface\\Icons\\btnholyscriptures"] = true,
}
local i = 1;
+57 -22
View File
@@ -6,6 +6,7 @@ local HealBot_Timer1, HealsIn_Timer = 0, 0;
function HealBot_OnLoad(this)
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("MODIFIER_STATE_CHANGED");
SLASH_HEALBOT1 = "/healbot";
SLASH_HEALBOT2 = "/hb";
@@ -25,7 +26,14 @@ function HealBot_OnLoad(this)
HealBot_View_DirtyUnits[unitID] = true
end)
HealBot_Model:RegisterObserver("ROSTER_CHANGED", function()
Delay_RecalcParty = 1
HealBot_Delay_RecalcParty = 1
end)
HealBot_Model:RegisterObserver("EQUIPMENT_CHANGED", function(unitID)
if unitID == "player" then
HealBot_BonusScanner:ScanEquipment()
HealBot_CalcEquipBonus = true;
HealBot_RecalcSpells();
end
end)
end
@@ -73,23 +81,23 @@ function HealBot_OnUpdate(this, arg1)
if HealBot_EquipChangeTimer <= 0 then
HealBot_EquipChangeTimer = 0
HealBot_BonusScanner:ScanEquipment()
CalcEquipBonus = true;
HealBot_CalcEquipBonus = true;
HealBot_RecalcSpells();
end
end
if InitSpells > 1 then
InitSpells = InitSpells + 1;
if InitSpells > 2 then
if HealBot_SpellsInitFlag > 1 then
HealBot_SpellsInitFlag = HealBot_SpellsInitFlag + 1;
if HealBot_SpellsInitFlag > 2 then
local cnt = HealBot_InitSpells();
InitSpells = 0;
HealBot_SpellsInitFlag = 0;
HealBot_RecalcSpells();
end
end
if Delay_RecalcParty > 0 then
Delay_RecalcParty = Delay_RecalcParty + 1
if Delay_RecalcParty > 1 then
Delay_RecalcParty = 0;
if HealBot_Delay_RecalcParty > 0 then
HealBot_Delay_RecalcParty = HealBot_Delay_RecalcParty + 1
if HealBot_Delay_RecalcParty > 1 then
HealBot_Delay_RecalcParty = 0;
HealBot_RecalcParty();
end
end
@@ -163,11 +171,19 @@ local HealBot_EventHandlers = {
["PLAYER_ENTERING_WORLD"] = function(this)
HealBot_Model:RefreshUnit("player")
HealBot_Model:RefreshUnit("pet")
if HealBot_UnitClass("player") == "DRUID" then
HealBot_UpdateShapeshiftForm()
end
HealBot_OnEvent_PlayerEnteringWorld(this)
end,
["VARIABLES_LOADED"] = function(this)
HealBot_OnEvent_VariablesLoaded(this)
end,
["MODIFIER_STATE_CHANGED"] = function(this, arg1, arg2)
if HealBot_Action_TooltipUnit and HealBot_Tooltip:IsVisible() then
HealBot_Action_RefreshTooltip(HealBot_Action_TooltipUnit)
end
end,
-- Legacy pass-throughs
["CHAT_MSG_ADDON"] = function(this, arg1, arg2, arg3, arg4) HealBot_OnEvent_AddonMsg(this, arg1, arg2, arg3, arg4) end,
["SPELLCAST_START"] = function(this, arg1, arg2) HealBot_OnEvent_SpellcastStart(this, arg1, arg2) end,
@@ -182,11 +198,20 @@ local HealBot_EventHandlers = {
["PARTY_MEMBER_ENABLE"] = function(this, arg1) HealBot_OnEvent_PartyMemberEnable(this, arg1) end,
["CHAT_MSG_SYSTEM"] = function(this, arg1) HealBot_OnEvent_SystemMsg(this, arg1) end,
["ZONE_CHANGED_NEW_AREA"] = function(this) HealBot_OnEvent_ZoneChanged(this) end,
["UPDATE_INVENTORY_ALERTS"] = function(this) HealBot_OnEvent_PlayerEquipmentChanged(this) end,
["UNIT_INVENTORY_CHANGED"] = function(this, arg1) HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1) end,
["UPDATE_INVENTORY_ALERTS"] = function(this)
HealBot_Model:NotifyObservers("EQUIPMENT_CHANGED", "player")
HealBot_OnEvent_PlayerEquipmentChanged(this)
end,
["UNIT_INVENTORY_CHANGED"] = function(this, arg1)
HealBot_Model:NotifyObservers("EQUIPMENT_CHANGED", arg1)
HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1)
end,
["PET_BAR_SHOWGRID"] = function(this) HealBot_OnEvent_PartyMembersChanged(this) end,
["PET_BAR_HIDEGRID"] = function(this) HealBot_OnEvent_PartyMembersChanged(this) end,
["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) end
["UNIT_PET"] = function(this, arg1) HealBot_OnEvent_PartyMembersChanged(this) end,
["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) end,
["UPDATE_SHAPESHIFT_FORM"] = function(this) HealBot_UpdateShapeshiftForm() end,
["UPDATE_SHAPESHIFT_FORMS"] = function(this) HealBot_UpdateShapeshiftForm() end
}
function HealBot_OnEvent(this, event, arg1, arg2, arg3, arg4)
@@ -256,6 +281,7 @@ function HealBot_OnEvent_VariablesLoaded(this)
this:RegisterEvent("PARTY_MEMBER_ENABLE");
this:RegisterEvent("PET_BAR_SHOWGRID");
this:RegisterEvent("PET_BAR_HIDEGRID");
this:RegisterEvent("UNIT_PET");
this:RegisterEvent("UNIT_HEALTH");
this:RegisterEvent("UNIT_MANA");
this:RegisterEvent("UNIT_RAGE");
@@ -274,7 +300,12 @@ function HealBot_OnEvent_VariablesLoaded(this)
this:RegisterEvent("CHAT_MSG_ADDON");
this:RegisterEvent("CHAT_MSG_SYSTEM");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
InitSpells = 2;
if class == "DRUID" then
this:RegisterEvent("UPDATE_SHAPESHIFT_FORM");
this:RegisterEvent("UPDATE_SHAPESHIFT_FORMS");
HealBot_UpdateShapeshiftForm();
end
HealBot_SpellsInitFlag = 2;
end
end
@@ -294,7 +325,7 @@ end
function HealBot_OnEvent_ZoneChanged(this)
HealBot_ResetRangeScale();
Delay_RecalcParty = 1;
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PlayerRegenDisabled(this)
@@ -334,7 +365,7 @@ end
function HealBot_OnEvent_PlayerRegenEnabled(this)
HealBot_IsFighting = false;
Delay_RecalcParty = 1;
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PlayerTargetChanged(this)
@@ -342,7 +373,7 @@ function HealBot_OnEvent_PlayerTargetChanged(this)
end
function HealBot_OnEvent_PartyMembersChanged(this)
Delay_RecalcParty = 1;
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PartyMemberDisable(this, unit)
@@ -351,9 +382,9 @@ end
function HealBot_OnEvent_SystemMsg(this, msg)
if type(msg) == "string" then
local tmpTest, tmpTest, deserter = string.find(msg, HB_HASLEFTRAID);
local tmpTest, tmpTest, deserter = string.find(msg, HEALBOT_HASLEFTRAID);
if not deserter then
local tmpTest, tmpTest, deserter = string.find(msg, HB_HASLEFTPARTY);
local tmpTest, tmpTest, deserter = string.find(msg, HEALBOT_HASLEFTPARTY);
end
if deserter then
if (HealBot_Healers[deserter]) then
@@ -369,8 +400,8 @@ function HealBot_OnEvent_SystemMsg(this, msg)
end
end
end
elseif msg == HB_YOULEAVETHEGROUP or msg == HB_YOULEAVETHERAID then
Delay_RecalcParty = 1;
elseif msg == HEALBOT_YOULEAVETHEGROUP or msg == HEALBOT_YOULEAVETHERAID then
HealBot_Delay_RecalcParty = 1;
end
end
end
@@ -392,7 +423,7 @@ end
function HealBot_OnEvent_SpellsChanged(this, arg1)
if arg1 then return; end
HealBot_AddDebug("HB: SpellsChanged");
InitSpells = 2;
HealBot_SpellsInitFlag = 2;
end
function HealBot_OnEvent_TalentsChanged(this, arg1)
@@ -415,6 +446,10 @@ end
function HealBot_OnEvent_PlayerEnteringWorld(this)
HealBot_IsFighting = false;
-- Re-apply the refresh hook late in case another addon overrode it during load
if HealBot_ApplyRefreshHook then
HealBot_ApplyRefreshHook()
end
end
function HealBot_OnEvent_SpellcastStart(this, spell, duration)
+93 -51
View File
@@ -74,19 +74,13 @@ function HealBot_CastSpellByName(spell)
CastSpell(id, BOOKTYPE_SPELL);
end
function HealBot_StartCasting(spell, target, ttype)
HealBot_CastSpellByName(spell);
HealBot_CastingSpell = spell;
HealBot_CastingTarget = target;
if ( SpellCanTargetUnit(target) ) then
SpellTargetUnit(target);
ttype = "fired";
elseif SpellIsTargeting() then
SpellTargetUnit(target);
SpellStopTargeting()
elseif ttype == "direct" then
if ( CheckInteractDistance(target, 4) ) then
ttype = "fired";
function HealBot_AnnounceCast(spell, target)
if not spell or not target then return end
if UnitIsDeadOrGhost(target) then
local spellLower = string.lower(spell)
if not (string.find(spellLower, "resurrection") or string.find(spellLower, "ancestral spirit") or string.find(spellLower, "redemption") or string.find(spellLower, "rebirth")) then
return
end
end
@@ -96,12 +90,25 @@ function HealBot_StartCasting(spell, target, ttype)
if not tName then tName = target end
local baseSpell = spell
local parenIndex = string.find(spell, " %(")
if parenIndex then
baseSpell = string.sub(spell, 1, parenIndex - 1)
else
parenIndex = string.find(spell, "%(")
if parenIndex then
baseSpell = string.sub(spell, 1, parenIndex - 1)
end
end
-- Strip trailing spaces from base spell
baseSpell = string.gsub(baseSpell, "%s+$", "")
for i = 1, 5 do
local msgConf = HealBot_Config.ChatMessages[i]
if msgConf and msgConf.Spell == baseSpell and msgConf.Channel ~= "None" then
local configSpell = msgConf and msgConf.Spell or ""
-- Strip trailing spaces from config spell just in case
configSpell = string.gsub(configSpell, "%s+$", "")
if msgConf and configSpell ~= "" and msgConf.Channel ~= "None" and (configSpell == spell or configSpell == baseSpell) then
local msg = msgConf.Message or ""
msg = string.gsub(msg, "#Spell#", spell)
msg = string.gsub(msg, "#Target#", tName)
@@ -118,10 +125,30 @@ function HealBot_StartCasting(spell, target, ttype)
end
end
end
end
function HealBot_StartCasting(spell, target, ttype)
HealBot_CastSpellByName(spell);
HealBot_CastingSpell = spell;
HealBot_CastingTarget = target;
if ( SpellCanTargetUnit(target) ) then
SpellTargetUnit(target);
ttype = "fired";
elseif SpellIsTargeting() then
SpellTargetUnit(target);
SpellStopTargeting()
elseif ttype == "direct" then
if ( CheckInteractDistance(target, 4) ) then
ttype = "fired";
end
end
HealBot_AnnounceCast(spell, target)
if ttype == "fired" and HealBot_Spells[spell] then
if HealBot_Spells[spell].CastTime > 1 then
HealValue = HealBot_Spells[spell].HealsDur;
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(target) .. " <<=>> " .. HealValue .. " << ");
HealBot_HealValue = HealBot_Spells[spell].HealsDur;
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(target) .. " <<=>> " .. HealBot_HealValue .. " << ");
end
end
end
@@ -129,9 +156,9 @@ end
function HealBot_StopCasting()
if HealBot_CastingTarget then
if HealBot_HealsIn[UnitName(HealBot_CastingTarget)] then
if HealValue > 0 then
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(HealBot_CastingTarget) .. " <<=>> " .. 0 - HealValue .. " << ");
HealValue = 0;
if HealBot_HealValue > 0 then
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(HealBot_CastingTarget) .. " <<=>> " .. 0 - HealBot_HealValue .. " << ");
HealBot_HealValue = 0;
end
end
end
@@ -218,6 +245,10 @@ function HealBot_CastSpellOnFriend(spell, target)
local targetEnemy = UnitCanAttack("player", "target");
local oldTarget = UnitName("target");
if HealBot_UnitClass("player") == "DRUID" and HealBot_ActiveShapeshiftStance and HealBot_Config.AutoUnshift == 1 then
CastShapeshiftForm(HealBot_ActiveShapeshiftStance);
end
if oldTarget ~= UnitName(target) then
TargetUnit(target);
end
@@ -280,13 +311,13 @@ end
function HealBot_FindHealSpells()
local id = 1;
if InitSpells > 0 then NeedEquipUpdate = 1; return; end
if HealBot_SpellsInitFlag > 0 then NeedEquipUpdate = 1; return; end
HealBot_Heals = { player = {}, pet = {}, party = {} };
table.foreach(HealBot_CurrentSpells, function (index, spell)
if (HealBot_Spells[spell]) then
if CalcEquipBonus then
if HealBot_CalcEquipBonus then
local healingbonus_penalty = 1;
if HealBot_Spells[spell].Level < 20 then
healingbonus_penalty = (1 - ((20 - HealBot_Spells[spell].Level) * 0.0375));
@@ -341,10 +372,10 @@ function HealBot_FindHealSpells()
HealBot_Heals["raidpet" .. i] = HealBot_Heals.party;
end
if CalcEquipBonus then
if HealBot_CalcEquipBonus then
HealBot_AddDebug("...Done Equip Bonus:" .. RealHealing);
end
CalcEquipBonus = false;
HealBot_CalcEquipBonus = false;
end
function HealBot_CanCastSpell(spell, unit)
@@ -365,7 +396,7 @@ function HealBot_GetHealSpell(unit, pattern)
if UnitOnTaxi("player") then return nil end;
if HealBot_Config.ProtectPvP == 1 and UnitIsPVP(unit) and not UnitIsPVP("player") then return nil end
if HealBot_UnitClass("player") == "DRUID" then
if HealBot_GetShapeshiftForm() then return nil end;
if HealBot_ActiveShapeshiftStance and HealBot_Config.AutoUnshift ~= 1 then return nil end;
end
local spell = HealBot_GetSpellName(HealBot_GetSpellId(pattern))
local range = 40;
@@ -454,7 +485,7 @@ function HealBot_InitGetSpellData(spell, id, class)
tmpText = getglobal("HealBot_ScanTooltipTextLeft2");
if (tmpText:GetText()) then
line = tmpText:GetText();
tmpTest, tmpTest, _mana = string.find(line, HB_TOOLTIP_MANA);
tmpTest, tmpTest, _mana = string.find(line, HEALBOT_TOOLTIP_MANA);
else
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
@@ -464,7 +495,7 @@ function HealBot_InitGetSpellData(spell, id, class)
tmpText = getglobal("HealBot_ScanTooltipTextRight2");
if (tmpText:GetText()) then
line = tmpText:GetText();
tmpTest, tmpTest, _range = string.find(line, HB_TOOLTIP_RANGE);
tmpTest, tmpTest, _range = string.find(line, HEALBOT_TOOLTIP_RANGE);
else
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
@@ -475,12 +506,12 @@ function HealBot_InitGetSpellData(spell, id, class)
_cast = nil;
if (tmpText:GetText()) then
line = tmpText:GetText();
if (line == HB_TOOLTIP_INSTANT_CAST) then
if (line == HEALBOT_TOOLTIP_INSTANT_CAST) then
_cast = 0;
elseif line == HB_TOOLTIP_CHANNELED then
elseif line == HEALBOT_TOOLTIP_CHANNELED then
_cast = 0;
elseif (tmpText) then
tmpTest, tmpTest, _cast = string.find(line, HB_TOOLTIP_CAST_TIME);
tmpTest, tmpTest, _cast = string.find(line, HEALBOT_TOOLTIP_CAST_TIME);
end
else
HealBot_Report_Error("================================");
@@ -494,58 +525,58 @@ function HealBot_InitGetSpellData(spell, id, class)
line = tmpText:GetText();
if class == "PRIEST" then
if string.sub(spell, 1, 14) == string.sub(HEALBOT_POWER_WORD_SHIELD, 1, 14) then
tmpTest, tmpTest, _HealsMin, _shield = string.find(line, HB_SPELL_PATTERN_SHIELD);
tmpTest, tmpTest, _HealsMin, _shield = string.find(line, HEALBOT_SPELL_PATTERN_SHIELD);
_HealsExt = 0;
_HealsMax = _HealsMin;
elseif string.sub(spell, 1, 4) == string.sub(HEALBOT_RENEW, 1, 4) then
tmpTest, tmpTest, _HealsExt, tmpTest, _duration = string.find(line, HB_SPELL_PATTERN_RENEW);
tmpTest, tmpTest, _HealsExt, tmpTest, _duration = string.find(line, HEALBOT_SPELL_PATTERN_RENEW);
_HealsMin = 0;
_HealsMax = 0;
if (_HealsExt == nil) then
tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HB_SPELL_PATTERN_RENEW1);
tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HEALBOT_SPELL_PATTERN_RENEW1);
end
if (_HealsExt == nil) then
tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HB_SPELL_PATTERN_RENEW2);
tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_RENEW2);
end
if (_HealsExt == nil) then
tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HB_SPELL_PATTERN_RENEW3);
tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_RENEW3);
end
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_LESSER_HEAL, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_LESSER_HEAL);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_LESSER_HEAL);
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_GREATER_HEAL, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_GREATER_HEAL);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_GREATER_HEAL);
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_FLASH_HEAL, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_FLASH_HEAL);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_FLASH_HEAL);
elseif string.sub(spell, 1, 4) == string.sub(HEALBOT_HEAL, 1, 4) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEAL);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_HEAL);
end
elseif class == "DRUID" then
if string.sub(spell, 1, 6) == string.sub(HEALBOT_REGROWTH, 1, 6) then
tmpTest, tmpTest, _HealsMin, _HealsMax, _HealsExt = string.find(line, HB_SPELL_PATTERN_REGROWTH);
tmpTest, tmpTest, _HealsMin, _HealsMax, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_REGROWTH);
if (tmpTest == nil) then
tmpTest, tmpTest, _HealsMin, _HealsMax, tmpTest, _HealsExt = string.find(line, HB_SPELL_PATTERN_REGROWTH1);
tmpTest, tmpTest, _HealsMin, _HealsMax, tmpTest, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_REGROWTH1);
end
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_REJUVENATION, 1, 9) then
tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HB_SPELL_PATTERN_REJUVENATION);
tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HEALBOT_SPELL_PATTERN_REJUVENATION);
_HealsMin = 0;
_HealsMax = 0;
if (_HealsExt == nil) then
tmpTest, tmpTest, _HealsExt, tmpTest, _duration = string.find(line, HB_SPELL_PATTERN_REJUVENATION1);
tmpTest, tmpTest, _HealsExt, tmpTest, _duration = string.find(line, HEALBOT_SPELL_PATTERN_REJUVENATION1);
end
elseif string.sub(spell, 1, 7) == string.sub(HEALBOT_HEALING_TOUCH, 1, 7) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEALING_TOUCH);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_HEALING_TOUCH);
end
elseif class == "PALADIN" then
if string.sub(spell, 1, 9) == string.sub(HEALBOT_HOLY_LIGHT, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HOLY_LIGHT);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_HOLY_LIGHT);
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_FLASH_OF_LIGHT, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_FLASH_OF_LIGHT);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT);
end
elseif class == "SHAMAN" then
if string.sub(spell, 1, 9) == string.sub(HEALBOT_HEALING_WAVE, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEALING_WAVE);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_HEALING_WAVE);
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_LESSER_HEALING_WAVE, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_LESSER_HEALING_WAVE);
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE);
end
end
else
@@ -561,7 +592,7 @@ function HealBot_InitGetSpellData(spell, id, class)
if HealBot_ScanTooltipTextLeft2:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextLeft2:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HB_TOOLTIP_MANA .. " <<");
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_MANA .. " <<");
end
if (_range == nil) then
HealBot_Report_Error("================================");
@@ -570,7 +601,7 @@ function HealBot_InitGetSpellData(spell, id, class)
if HealBot_ScanTooltipTextRight2:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextRight2:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HB_TOOLTIP_RANGE .. " <<");
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_RANGE .. " <<");
end
if (_cast == nil) then
HealBot_Report_Error("================================");
@@ -579,7 +610,7 @@ function HealBot_InitGetSpellData(spell, id, class)
if HealBot_ScanTooltipTextLeft3:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextLeft3:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HB_TOOLTIP_CAST_TIME .. " <<");
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_CAST_TIME .. " <<");
end
if (tmpTest == nil) then
HealBot_Report_Error("================================");
@@ -641,13 +672,24 @@ function HealBot_Generic_Patten(matchStr, matchPattern)
return tmpTest, _HealsMin, _HealsMax;
end
HealBot_ActiveShapeshiftStance = nil;
function HealBot_UpdateShapeshiftForm()
HealBot_ActiveShapeshiftStance = HealBot_GetShapeshiftForm();
end
function HealBot_GetShapeshiftForm()
local forms = GetNumShapeshiftForms();
if forms then
local i;
for i=1,forms do
local icon,name,active = GetShapeshiftFormInfo(i);
if active and not string.find(icon,"HumanoidForm") then return i; end
if active then
local icon_lower = string.lower(icon);
if not string.find(icon_lower, "humanoidform") and not string.find(icon_lower, "treeoflife") and not string.find(icon_lower, "stoneclawtotem") then
return i;
end
end
end
end
return nil;
+5
View File
@@ -14,6 +14,7 @@ HealBot_ConfigDefaults = {
HideSolo = 0,
OverHeal = 0.25,
CastNotify = 1,
AutoUnshift = 1,
ChatMessages = {
[1] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" },
[2] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" },
@@ -24,6 +25,7 @@ HealBot_ConfigDefaults = {
HideOptions = 0,
HideAbort = 1,
ShowTooltip = 1,
ShowHealthText = 0,
GrowUpwards = 0,
ProtectPvP = 1,
QualityRange = 0,
@@ -171,7 +173,9 @@ HealBot_ConfigDefaults = {
},
},
EnableHealthy = 0,
ShowNonManaBars = 0,
ActionVisible = 0,
ActionMouseover = 1,
CDCLeftText = {[HEALBOT_PRIEST]="None", [HEALBOT_SHAMAN]="None", [HEALBOT_DRUID]="None", [HEALBOT_PALADIN]="None",},
CDCRightText = {[HEALBOT_PRIEST]="None", [HEALBOT_SHAMAN]="None", [HEALBOT_DRUID]="None", [HEALBOT_PALADIN]="None",},
Current_Skin = "Modern Flat",
@@ -510,6 +514,7 @@ HealBot_Buff_Spells = {
HEALBOT_PRAYER_OF_SHADOW_PROTECTION,
HEALBOT_INNER_FIRE,
HEALBOT_FEAR_WARD,
HEALBOT_ENLIGHTEN,
},
[HEALBOT_MAGE] = {
HEALBOT_ARCANE_INTELLECT,
+35 -32
View File
@@ -70,6 +70,9 @@ HEALBOT_LESSER_HEAL = "Geringes Heilen";
HEALBOT_LESSER_HEALING_WAVE = "Geringe Welle der Heilung";
HEALBOT_MEND_PET = "Tier Heilen";
HEALBOT_POWER_WORD_SHIELD = "Machtwort: Schild";
HEALBOT_INNER_FIRE = "Inneres Feuer";
HEALBOT_FEAR_WARD = "Furchtzauberschutz";
HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_REGROWTH = "Nachwachsen";
HEALBOT_RENEW = "Erneuerung";
HEALBOT_REJUVENATION = "Verj\195\188ngung";
@@ -113,25 +116,25 @@ HEALBOT_RANK_11 = " (Rang 11)";
HEALBOT_LIBRARY_INCHEAL = "Erh\195\182ht durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%.";
HEALBOT_LIBRARY_INCDAMHEAL = "Erh\195\182ht durch Zauber und magische Effekte zugef\195\188gten Schaden und Heilung um bis zu (%d+)%.";
HB_BONUSSCANNER_NAMES = {
HEALBOT_BONUSSCANNER_NAMES = {
HEAL = "Heilung",
}
HB_BONUSSCANNER_PREFIX_EQUIP = "Anlegen: ";
HB_BONUSSCANNER_PREFIX_SET = "Set: ";
HEALBOT_BONUSSCANNER_PREFIX_EQUIP = "Anlegen: ";
HEALBOT_BONUSSCANNER_PREFIX_SET = "Set: ";
HB_BONUSSCANNER_PATTERNS_PASSIVE = {
HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE = {
{ pattern = "Erh\195\182ht durch Zauber und magische Effekte zugef\195\188gten Schaden und Heilung um bis zu (%d+)%.", effect = {"HEAL","DMG"} },
{ pattern = "Erh\195\182ht durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%.", effect = "HEAL" },
{ pattern = "Erh\195\182ht die durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%.", effect = "HEAL" },
};
HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["Heilzauber"] = "HEAL",
["Heilung und Zauberschaden"] = {"HEAL","DMG"},
};
HB_BONUSSCANNER_PATTERNS_OTHER = {
HEALBOT_BONUSSCANNER_PATTERNS_OTHER = {
{ pattern = "Zandalarianisches Siegel des Mojo", effect = {"DMG", "HEAL"}, value = 18 },
{ pattern = "Zandalarianisches Siegel der Inneren Ruhe", effect = "HEAL", value = 33 },
@@ -154,32 +157,32 @@ HEALBOT_DEBUFF_WEAKENED_SOUL = "Interface\\Icons\\Spell_Holy_AshesToAshes";
HEALBOT_DEBUFF_RECENTLY_BANDAGED = "Interface\\Icons\\INV_Misc_Bandage_08";
HB_SPELL_PATTERN_LESSER_HEAL = "Euer Ziel um (%d+) bis (%d+) Punkt%(e%) heilen";
HB_SPELL_PATTERN_HEAL = "Euer Ziel um (%d+) bis (%d+) Punkt%(e%) heilen";
HB_SPELL_PATTERN_GREATER_HEAL = "Ein langsam zu wirkender Zauber, der ein einzelnes Ziel um (%d+) bis (%d+) Punkt%(e%) heilt";
HB_SPELL_PATTERN_FLASH_HEAL = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_RENEW2 = "Heilt das Ziel (%d+) Sek. lang um (%d+) bis (%d+) Schadenspunk";
HB_SPELL_PATTERN_RENEW3 = "Heilt das Ziel (%d+) Sek. lang um (%d+) Schadenspunk";
HB_SPELL_PATTERN_SHIELD = "absorbiert dabei (%d+) Punkt%(e%) Schaden. H\195\164lt (%d+) Sek";
HB_SPELL_PATTERN_HEALING_TOUCH = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_REGROWTH = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) und \195\188ber (%d+) Sek%. um weitere (%d+)";
HB_SPELL_PATTERN_REGROWTH1 = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) und \195\188ber (%d+) Sek%. um weitere (%d+) bis (%d+)";
HB_SPELL_PATTERN_HOLY_LIGHT = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_FLASH_OF_LIGHT = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_HEALING_WAVE = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_LESSER_HEALING_WAVE = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_REJUVENATION = "Heilt das Ziel von (%d+) \195\188ber (%d+) Sek";
HB_SPELL_PATTERN_REJUVENATION1 = "Heilt das Ziel von (%d+) bis (%d+) \195\188ber (%d+) Sek";
HEALBOT_SPELL_PATTERN_LESSER_HEAL = "Euer Ziel um (%d+) bis (%d+) Punkt%(e%) heilen";
HEALBOT_SPELL_PATTERN_HEAL = "Euer Ziel um (%d+) bis (%d+) Punkt%(e%) heilen";
HEALBOT_SPELL_PATTERN_GREATER_HEAL = "Ein langsam zu wirkender Zauber, der ein einzelnes Ziel um (%d+) bis (%d+) Punkt%(e%) heilt";
HEALBOT_SPELL_PATTERN_FLASH_HEAL = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HEALBOT_SPELL_PATTERN_RENEW2 = "Heilt das Ziel (%d+) Sek. lang um (%d+) bis (%d+) Schadenspunk";
HEALBOT_SPELL_PATTERN_RENEW3 = "Heilt das Ziel (%d+) Sek. lang um (%d+) Schadenspunk";
HEALBOT_SPELL_PATTERN_SHIELD = "absorbiert dabei (%d+) Punkt%(e%) Schaden. H\195\164lt (%d+) Sek";
HEALBOT_SPELL_PATTERN_HEALING_TOUCH = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HEALBOT_SPELL_PATTERN_REGROWTH = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) und \195\188ber (%d+) Sek%. um weitere (%d+)";
HEALBOT_SPELL_PATTERN_REGROWTH1 = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) und \195\188ber (%d+) Sek%. um weitere (%d+) bis (%d+)";
HEALBOT_SPELL_PATTERN_HOLY_LIGHT = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HEALBOT_SPELL_PATTERN_HEALING_WAVE = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HEALBOT_SPELL_PATTERN_REJUVENATION = "Heilt das Ziel von (%d+) \195\188ber (%d+) Sek";
HEALBOT_SPELL_PATTERN_REJUVENATION1 = "Heilt das Ziel von (%d+) bis (%d+) \195\188ber (%d+) Sek";
HB_TOOLTIP_MANA = "^(%d+) Mana$";
HB_TOOLTIP_RANGE = "(%d+) m";
HB_TOOLTIP_INSTANT_CAST = "Spontanzauber";
HB_TOOLTIP_CAST_TIME = "(%d+.?%d*) Sek";
HB_TOOLTIP_CHANNELED = "Abgebrochen";
HB_HASLEFTRAID = "^([^%s]+) hat die \195\131\197\147berfallgruppe verlassen%.$";
HB_HASLEFTPARTY = "^([^%s]+) hat die Gruppe verlassen";
HB_YOULEAVETHEGROUP = "Du hast die Gruppe verlassen"
HB_YOULEAVETHERAID = "Du hast den Schlachtzug verlassen"
HEALBOT_TOOLTIP_MANA = "^(%d+) Mana$";
HEALBOT_TOOLTIP_RANGE = "(%d+) m";
HEALBOT_TOOLTIP_INSTANT_CAST = "Spontanzauber";
HEALBOT_TOOLTIP_CAST_TIME = "(%d+.?%d*) Sek";
HEALBOT_TOOLTIP_CHANNELED = "Abgebrochen";
HEALBOT_HASLEFTRAID = "^([^%s]+) hat die \195\131\197\147berfallgruppe verlassen%.$";
HEALBOT_HASLEFTPARTY = "^([^%s]+) hat die Gruppe verlassen";
HEALBOT_YOULEAVETHEGROUP = "Du hast die Gruppe verlassen"
HEALBOT_YOULEAVETHERAID = "Du hast den Schlachtzug verlassen"
-----------------
-- Translation --
@@ -327,6 +330,7 @@ HEALBOT_OPTIONS_MONITORMELEE = "Nahkampf";
HEALBOT_OPTIONS_MONITORRANGE = "Fernkampf";
HEALBOT_OPTIONS_MONITORHEALERS = "Heiler";
HEALBOT_OPTIONS_MONITORCUSTOM = "Eigene";
HEALBOT_OPTIONS_PETS = "Begleiter";
HEALBOT_OPTIONS_SHOWTOOLTIP = "Zeige Tooltips";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Zeige detaillierte Spruchinfos";
@@ -352,7 +356,6 @@ HEALBOT_WORDS_SEC = "Sek";
HEALBOT_WORDS_TO = "zu";
HEALBOT_WORDS_CAST = "Zauber"
HEALBOT_WORDS_FOR = "f\195\188r";
end
+37 -43
View File
@@ -1,4 +1,4 @@
HEALBOT_VERSION = "1.3.1";
HEALBOT_VERSION = "1.4";
-------------
-- ENGLISH --
@@ -93,6 +93,7 @@ HEALBOT_THORNS = "Thorns";
HEALBOT_OMEN_OF_CLARITY = "Omen of Clarity";
HEALBOT_INNER_FIRE = "Inner Fire";
HEALBOT_FEAR_WARD = "Fear Ward";
HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_RESURRECTION = "Resurrection";
HEALBOT_REDEMPTION = "Redemption";
@@ -131,19 +132,19 @@ HEALBOT_RANK_11 = " (Rank 11)";
HEALBOT_LIBRARY_INCHEAL = "Increases healing done by spells and effects by up to (%d+)%.";
HEALBOT_LIBRARY_INCDAMHEAL = "Increases damage and healing done by magical spells and effects by up to (%d+)%.";
HB_BONUSSCANNER_NAMES = {
HEALBOT_BONUSSCANNER_NAMES = {
HEAL = "Healing",
};
HB_BONUSSCANNER_PREFIX_EQUIP = "Equip: ";
HB_BONUSSCANNER_PREFIX_SET = "Set: ";
HEALBOT_BONUSSCANNER_PREFIX_EQUIP = "Equip: ";
HEALBOT_BONUSSCANNER_PREFIX_SET = "Set: ";
HB_BONUSSCANNER_PATTERNS_PASSIVE = {
HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE = {
{ pattern = "Increases healing done by spells and effects by up to (%d+)%.", effect = "HEAL" },
{ pattern = "Increases damage and healing done by magical spells and effects by up to (%d+)%.", effect = {"HEAL", "DMG"} },
};
HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["Healing Spells"] = "HEAL",
["Increases Healing"] = "HEAL",
["Healing and Spell Damage"] = {"HEAL", "DMG"},
@@ -151,7 +152,7 @@ HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["Spell Damage and Healing"] = {"HEAL", "DMG"},
};
HB_BONUSSCANNER_PATTERNS_OTHER = {
HEALBOT_BONUSSCANNER_PATTERNS_OTHER = {
{ pattern = "Zandalar Signet of Mojo", effect = {"DMG", "HEAL"}, value = 18 },
{ pattern = "Zandalar Signet of Serenity", effect = "HEAL", value = 33 },
@@ -173,35 +174,35 @@ HEALBOT_DEBUFF_WEAKENED_SOUL = "Interface\\Icons\\Spell_Holy_AshesToAshes";
HEALBOT_DEBUFF_RECENTLY_BANDAGED = "Interface\\Icons\\INV_Misc_Bandage_08";
HB_SPELL_PATTERN_LESSER_HEAL = "Heal your target for (%d+) to (%d+)";
HB_SPELL_PATTERN_HEAL = "Heal your target for (%d+) to (%d+)";
HB_SPELL_PATTERN_GREATER_HEAL = "A slow casting spell that heals a single target for (%d+) to (%d+)";
HB_SPELL_PATTERN_FLASH_HEAL = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_RENEW = "Heals the target of (%d+) to (%d+) damage over (%d+) sec";
HB_SPELL_PATTERN_RENEW1 = "Heals the target of (%d+) damage over (%d+) sec";
HB_SPELL_PATTERN_RENEW2 = "Not needed for en";
HB_SPELL_PATTERN_RENEW3 = "Not needed for en";
HB_SPELL_PATTERN_SHIELD = "absorbing (%d+) damage. Lasts (%d+) sec.";
HB_SPELL_PATTERN_HEALING_TOUCH = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_REGROWTH = "Heals a friendly target for (%d+) to (%d+) and another (%d+) over (%d+) sec";
HB_SPELL_PATTERN_REGROWTH1 = "Heals a friendly target for (%d+) to (%d+) and another (%d+) to (%d+) over (%d+) sec";
HB_SPELL_PATTERN_HOLY_LIGHT = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_FLASH_OF_LIGHT = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_HEALING_WAVE = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_LESSER_HEALING_WAVE = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_REJUVENATION = "Heals the target for (%d+) over (%d+) sec";
HB_SPELL_PATTERN_REJUVENATION1 = "Heals the target for (%d+) to (%d+) over (%d+) sec";
HB_SPELL_PATTERN_MEND_PET = "Heals your pet (%d+) health every second while you focus. Lasts (%d+) sec";
HEALBOT_SPELL_PATTERN_LESSER_HEAL = "Heal your target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_HEAL = "Heal your target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_GREATER_HEAL = "A slow casting spell that heals a single target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_FLASH_HEAL = "Heals a friendly target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_RENEW = "Heals the target of (%d+) to (%d+) damage over (%d+) sec";
HEALBOT_SPELL_PATTERN_RENEW1 = "Heals the target of (%d+) damage over (%d+) sec";
HEALBOT_SPELL_PATTERN_RENEW2 = "Not needed for en";
HEALBOT_SPELL_PATTERN_RENEW3 = "Not needed for en";
HEALBOT_SPELL_PATTERN_SHIELD = "absorbing (%d+) damage. Lasts (%d+) sec.";
HEALBOT_SPELL_PATTERN_HEALING_TOUCH = "Heals a friendly target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_REGROWTH = "Heals a friendly target for (%d+) to (%d+) and another (%d+) over (%d+) sec";
HEALBOT_SPELL_PATTERN_REGROWTH1 = "Heals a friendly target for (%d+) to (%d+) and another (%d+) to (%d+) over (%d+) sec";
HEALBOT_SPELL_PATTERN_HOLY_LIGHT = "Heals a friendly target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT = "Heals a friendly target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_HEALING_WAVE = "Heals a friendly target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE = "Heals a friendly target for (%d+) to (%d+)";
HEALBOT_SPELL_PATTERN_REJUVENATION = "Heals the target for (%d+) over (%d+) sec";
HEALBOT_SPELL_PATTERN_REJUVENATION1 = "Heals the target for (%d+) to (%d+) over (%d+) sec";
HEALBOT_SPELL_PATTERN_MEND_PET = "Heals your pet (%d+) health every second while you focus. Lasts (%d+) sec";
HB_TOOLTIP_MANA = "^(%d+) Mana$";
HB_TOOLTIP_RANGE = "(%d+) yd range";
HB_TOOLTIP_INSTANT_CAST = "Instant cast";
HB_TOOLTIP_CAST_TIME = "(%d+.?%d*) sec cast";
HB_TOOLTIP_CHANNELED = "Channeled";
HB_HASLEFTRAID = "^([^%s]+) has left the raid group$";
HB_HASLEFTPARTY = "^([^%s]+) leaves the party$";
HB_YOULEAVETHEGROUP = "You leave the group."
HB_YOULEAVETHERAID = "You have left the raid group"
HEALBOT_TOOLTIP_MANA = "^(%d+) Mana$";
HEALBOT_TOOLTIP_RANGE = "(%d+) yd range";
HEALBOT_TOOLTIP_INSTANT_CAST = "Instant cast";
HEALBOT_TOOLTIP_CAST_TIME = "(%d+.?%d*) sec cast";
HEALBOT_TOOLTIP_CHANNELED = "Channeled";
HEALBOT_HASLEFTRAID = "^([^%s]+) has left the raid group$";
HEALBOT_HASLEFTPARTY = "^([^%s]+) leaves the party$";
HEALBOT_YOULEAVETHEGROUP = "You leave the group."
HEALBOT_YOULEAVETHERAID = "You have left the raid group"
-----------------
@@ -365,6 +366,7 @@ HEALBOT_OPTIONS_MONITORMELEE = "Melee";
HEALBOT_OPTIONS_MONITORRANGE = "Ranged";
HEALBOT_OPTIONS_MONITORHEALERS = "Healers";
HEALBOT_OPTIONS_MONITORCUSTOM = "Custom";
HEALBOT_OPTIONS_PETS = "Pets";
HEALBOT_OPTIONS_SHOWTOOLTIP = "Show tooltips";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Show detailed spell information";
@@ -385,11 +387,3 @@ HEALBOT_WORDS_SEC = "sec";
HEALBOT_WORDS_TO = "to";
HEALBOT_WORDS_CAST = "Cast"
HEALBOT_WORDS_FOR = "for";
+35 -32
View File
@@ -61,6 +61,9 @@ HEALBOT_FLASH_HEAL = "Soins rapides";
HEALBOT_FLASH_OF_LIGHT = "Eclair lumineux";
HEALBOT_HOLY_SHOCK = "Holy Shock";
HEALBOT_GREATER_HEAL = "Soins sup\195\169rieurs";
HEALBOT_INNER_FIRE = "Feu int\195\169rieur";
HEALBOT_FEAR_WARD = "Gardien de peur";
HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_HEALING_TOUCH = "Toucher gu\195\169risseur";
HEALBOT_HEAL = "Soins";
HEALBOT_HEALING_WAVE = "Vague de soins";
@@ -112,14 +115,14 @@ HEALBOT_RANK_11 = " (Rang 11)";
HEALBOT_LIBRARY_INCHEAL = "Increases healing done by spells and effects by up to (%d+)%."; -- *************** needs French translation ***************
HEALBOT_LIBRARY_INCDAMHEAL = "Increases damage and healing done by magical spells and effects by up to (%d+)%."; -- *************** needs French translation ***************
HB_BONUSSCANNER_NAMES = {
HEALBOT_BONUSSCANNER_NAMES = {
HEAL = "Soins",
};
HB_BONUSSCANNER_PREFIX_EQUIP = "Equip\195\169 : ";
HB_BONUSSCANNER_PREFIX_SET = "Complet : ";
HEALBOT_BONUSSCANNER_PREFIX_EQUIP = "Equip\195\169 : ";
HEALBOT_BONUSSCANNER_PREFIX_SET = "Complet : ";
HB_BONUSSCANNER_PATTERNS_PASSIVE = {
HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE = {
{ pattern = "Augmente les effets des sorts de soins de (%d+)% au maximum.", effect = "HEAL" },
{ pattern = "Augmente les soins prodigu\195\169s par les sorts et effets de (%d+)% au maximum.", effect = "HEAL"},
{ pattern = "Augmente les d\195\169g\195\162ts et les soins prodigu\195\169s par les sortsfalseles effets magiques de (%d+)% au maximum.", effect = "HEAL" },
@@ -127,39 +130,39 @@ HB_BONUSSCANNER_PATTERNS_PASSIVE = {
};
HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["Sorts de Soins"] = "HEAL",
["D\195\169g\195\162ts et soins "] = {"HEAL", "DMG"},
};
HB_SPELL_PATTERN_LESSER_HEAL = "Soigne la cible de (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_HEAL = "Soigne la cible de (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_GREATER_HEAL = "Une longue incantation qui rend (%d+) \195\160 (%d+) points de vie \195\160 une cible unique";
HB_SPELL_PATTERN_FLASH_HEAL = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_RENEW = "Rend (%d+) \195\160 (%d+) points de vie \195\160 la cible en (%d+) sec";
HB_SPELL_PATTERN_RENEW1 = "Rend (%d+) points de vie \195\160 la cible en (%d+) sec";
HB_SPELL_PATTERN_HEALING_TOUCH = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_REGROWTH = "Soigne une cible amie pour (%d+) \195\160 (%d+) puis pour (%d+) points suppl.+mentaires pendant (%d+) sec";
HB_SPELL_PATTERN_REGROWTH1 = "Soigne une cible amie pour (%d+) \195\160 (%d+) puis pour (%d+) \195\160 (%d+) points suppl.+mentaires pendant (%d+) sec";
HB_SPELL_PATTERN_HOLY_LIGHT = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_FLASH_OF_LIGHT = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_HEALING_WAVE = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_LESSER_HEALING_WAVE = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_REJUVENATION = "Soigne la cible de (%d+) durant (%d+) sec";
HB_SPELL_PATTERN_REJUVENATION1 = "Soigne la cible de (%d+) a (%d+) durant (%d+) sec";
HB_SPELL_PATTERN_SHIELD = "absorbe (%d+) points de d\195\169g\195\162ts. Dure (%d+) sec";
HB_SPELL_PATTERN_MEND_PET = "Soigne votre compagnon de (%d+) points de vie chaques secondes que vous le ciblez. Dure (%d+) sec"
HEALBOT_SPELL_PATTERN_LESSER_HEAL = "Soigne la cible de (%d+) \195\160 (%d+) points de vie";
HEALBOT_SPELL_PATTERN_HEAL = "Soigne la cible de (%d+) \195\160 (%d+) points de vie";
HEALBOT_SPELL_PATTERN_GREATER_HEAL = "Une longue incantation qui rend (%d+) \195\160 (%d+) points de vie \195\160 une cible unique";
HEALBOT_SPELL_PATTERN_FLASH_HEAL = "Rend (%d+) \195\160 (%d+) points de vie";
HEALBOT_SPELL_PATTERN_RENEW = "Rend (%d+) \195\160 (%d+) points de vie \195\160 la cible en (%d+) sec";
HEALBOT_SPELL_PATTERN_RENEW1 = "Rend (%d+) points de vie \195\160 la cible en (%d+) sec";
HEALBOT_SPELL_PATTERN_HEALING_TOUCH = "Rend (%d+) \195\160 (%d+) points de vie";
HEALBOT_SPELL_PATTERN_REGROWTH = "Soigne une cible amie pour (%d+) \195\160 (%d+) puis pour (%d+) points suppl.+mentaires pendant (%d+) sec";
HEALBOT_SPELL_PATTERN_REGROWTH1 = "Soigne une cible amie pour (%d+) \195\160 (%d+) puis pour (%d+) \195\160 (%d+) points suppl.+mentaires pendant (%d+) sec";
HEALBOT_SPELL_PATTERN_HOLY_LIGHT = "Rend (%d+) \195\160 (%d+) points de vie";
HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT = "Rend (%d+) \195\160 (%d+) points de vie";
HEALBOT_SPELL_PATTERN_HEALING_WAVE = "Rend (%d+) \195\160 (%d+) points de vie";
HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE = "Rend (%d+) \195\160 (%d+) points de vie";
HEALBOT_SPELL_PATTERN_REJUVENATION = "Soigne la cible de (%d+) durant (%d+) sec";
HEALBOT_SPELL_PATTERN_REJUVENATION1 = "Soigne la cible de (%d+) a (%d+) durant (%d+) sec";
HEALBOT_SPELL_PATTERN_SHIELD = "absorbe (%d+) points de d\195\169g\195\162ts. Dure (%d+) sec";
HEALBOT_SPELL_PATTERN_MEND_PET = "Soigne votre compagnon de (%d+) points de vie chaques secondes que vous le ciblez. Dure (%d+) sec"
HB_TOOLTIP_MANA = "^Mana : (%d+)$";
HB_TOOLTIP_INSTANT_CAST = 'Incantation imm\195\169diate';
HB_TOOLTIP_CAST_TIME = '(%d+.?%d*) sec';
HEALBOT_TOOLTIP_MANA = "^Mana : (%d+)$";
HEALBOT_TOOLTIP_INSTANT_CAST = 'Incantation imm\195\169diate';
HEALBOT_TOOLTIP_CAST_TIME = '(%d+.?%d*) sec';
HB_TOOLTIP_RANGE = "de (%d+) m"
HB_TOOLTIP_CHANNELED = "Focaliser"
HB_HASLEFTRAID = "^([^%s]+) a quitt\195\131\194\169 le groupe de raid$";
HB_HASLEFTPARTY = "^([^%s]+) has left the party$"; -- *************** needs French translation ***************
HB_YOULEAVETHEGROUP = "You leave the group" -- *************** needs translation ***************
HB_YOULEAVETHERAID = "You have left the raid group" -- *************** needs translation ***************
HEALBOT_TOOLTIP_RANGE = "de (%d+) m"
HEALBOT_TOOLTIP_CHANNELED = "Focaliser"
HEALBOT_HASLEFTRAID = "^([^%s]+) a quitt\195\131\194\169 le groupe de raid$";
HEALBOT_HASLEFTPARTY = "^([^%s]+) has left the party$"; -- *************** needs French translation ***************
HEALBOT_YOULEAVETHEGROUP = "You leave the group" -- *************** needs translation ***************
HEALBOT_YOULEAVETHERAID = "You have left the raid group" -- *************** needs translation ***************
-----------------
-- Translation --
@@ -266,6 +269,7 @@ HEALBOT_OPTIONS_MONITORMELEE = "M\195\169l\195\169e";
HEALBOT_OPTIONS_MONITORRANGE = "\195\128 distance";
HEALBOT_OPTIONS_MONITORHEALERS = "Soigneurs";
HEALBOT_OPTIONS_MONITORCUSTOM = "Personnalis\195\169";
HEALBOT_OPTIONS_PETS = "Familiers";
HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heal opacity"; -- *************** needs French translation ***************
@@ -333,7 +337,6 @@ HEALBOT_WORDS_SEC = "sec"; -- *************** needs translati
HEALBOT_WORDS_TO = "to"; -- *************** needs translation ***************
HEALBOT_WORDS_CAST = "Cast" -- *************** needs translation ***************
HEALBOT_WORDS_FOR = "for"; -- *************** needs translation ***************
end
+36 -33
View File
@@ -61,6 +61,9 @@ HEALBOT_PRAYER_OF_HEALING = "치유의 기원";
HEALBOT_CHAIN_HEAL = "연쇄 치유";
HEALBOT_POWER_WORD_FORTITUDE = "신의 권능: 인내";
HEALBOT_INNER_FIRE = "내면의 열정";
HEALBOT_FEAR_WARD = "공포의 결계";
HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_MARK_OF_THE_WILD = "야생의 징표";
HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
@@ -97,20 +100,20 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_LIBRARY_INCHEAL = "모든 주문 및 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%.";
HEALBOT_LIBRARY_INCDAMHEAL = "모든 주문 및 효과에 의한 피해와 치유량이 최대 (%d+)만큼 증가합니다%.";
HB_BONUSSCANNER_NAMES = {
HEALBOT_BONUSSCANNER_NAMES = {
HEAL = "치유량",
};
HB_BONUSSCANNER_PREFIX_EQUIP = "착용 효과: ";
HB_BONUSSCANNER_PREFIX_SET = "세트 효과: ";
HEALBOT_BONUSSCANNER_PREFIX_EQUIP = "착용 효과: ";
HEALBOT_BONUSSCANNER_PREFIX_SET = "세트 효과: ";
HB_BONUSSCANNER_PATTERNS_PASSIVE = {
HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE = {
{ pattern = "모든 주문 및 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%.", effect = "HEAL" },
{ pattern = "주문과 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%.", effect = "HEAL" },
{ pattern = "모든 주문 및 효과에 의한 피해와 치유량이 최대 (%d+)만큼 증가합니다%.", effect = {"HEAL", "DMG"} },
};
HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["치유 주문"] = "HEAL",
["치유량 증가"] = "HEAL",
["치유 효과 증가"] = "HEAL",
@@ -120,7 +123,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
["치유 및 공격 주문 위력"] = {"HEAL", "DMG"},
};
HB_BONUSSCANNER_PATTERNS_OTHER = {
HEALBOT_BONUSSCANNER_PATTERNS_OTHER = {
{ pattern = "잔달라 모조의 인장", effect = {"DMG", "HEAL"}, value = 18 },
{ pattern = "잔달라 평온의 인장", effect = "HEAL", value = 33 },
@@ -132,33 +135,33 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
{ pattern = "반짝이는 마나 오일", effect = { "MANAREG", "HEAL"}, value = {12, 25} },
};
HB_SPELL_PATTERN_LESSER_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_GREATER_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_FLASH_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_RENEW = "(%d+)초에 걸쳐 대상의 생명력을 총 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_RENEW1 = "(%d+)초에 걸쳐 대상의 생명력을 총 (%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_SHIELD = "(%d+)의 피해를 흡수합니다. (%d+)초 동안 지속됩니다.";
HB_SPELL_PATTERN_HEALING_TOUCH = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_REGROWTH = "대상의 생명력을 (%d+)~(%d+)만큼 회복시키고 추가로 (%d+)초에 걸쳐 총 (%d+)의 생명력을 회복시킵니다";
HB_SPELL_PATTERN_REGROWTH1 = "대상의 생명력을 (%d+)~(%d+)만큼 회복시키고 추가로 (%d+)초에 걸쳐 총 (%d+)~(%d+)의 생명력을 회복시킵니다";
HB_SPELL_PATTERN_HOLY_LIGHT = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_FLASH_OF_LIGHT = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_HEALING_WAVE = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_LESSER_HEALING_WAVE = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_REJUVENATION = "(%d+)에 걸쳐 (%d+)의 생명력을 회복시킵니다";
HB_SPELL_PATTERN_REJUVENATION1 = "(%d+)에 걸쳐 (%d+)~(%d+)의 생명력을 회복시킵니다";
HB_SPELL_PATTERN_MEND_PET = "야수에 정신을 집중하는 동안 매초마다 (%d+)의 생명력을 치료합니다";
HEALBOT_SPELL_PATTERN_LESSER_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_GREATER_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_FLASH_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_RENEW = "(%d+)초에 걸쳐 대상의 생명력을 총 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_RENEW1 = "(%d+)초에 걸쳐 대상의 생명력을 총 (%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_SHIELD = "(%d+)의 피해를 흡수합니다. (%d+)초 동안 지속됩니다.";
HEALBOT_SPELL_PATTERN_HEALING_TOUCH = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_REGROWTH = "대상의 생명력을 (%d+)~(%d+)만큼 회복시키고 추가로 (%d+)초에 걸쳐 총 (%d+)의 생명력을 회복시킵니다";
HEALBOT_SPELL_PATTERN_REGROWTH1 = "대상의 생명력을 (%d+)~(%d+)만큼 회복시키고 추가로 (%d+)초에 걸쳐 총 (%d+)~(%d+)의 생명력을 회복시킵니다";
HEALBOT_SPELL_PATTERN_HOLY_LIGHT = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_HEALING_WAVE = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HEALBOT_SPELL_PATTERN_REJUVENATION = "(%d+)에 걸쳐 (%d+)의 생명력을 회복시킵니다";
HEALBOT_SPELL_PATTERN_REJUVENATION1 = "(%d+)에 걸쳐 (%d+)~(%d+)의 생명력을 회복시킵니다";
HEALBOT_SPELL_PATTERN_MEND_PET = "야수에 정신을 집중하는 동안 매초마다 (%d+)의 생명력을 치료합니다";
HB_TOOLTIP_MANA = "^마나 (%d+)$";
HB_TOOLTIP_RANGE = "(%d+)미터";
HB_TOOLTIP_INSTANT_CAST = "즉시 시전";
HB_TOOLTIP_CAST_TIME = "(%d+.?%d*)초";
HB_TOOLTIP_CHANNELED = "채널링";
HB_HASLEFTRAID = "^([^%s]+)님이 공격대를 떠났습니다$";
HB_HASLEFTPARTY = "^([^%s]+)님이 파티를 떠났습니다$";
HB_YOULEAVETHEGROUP = "당신은 파티를 떠났습니다"
HB_YOULEAVETHERAID = "공격대를 떠났습니다"
HEALBOT_TOOLTIP_MANA = "^마나 (%d+)$";
HEALBOT_TOOLTIP_RANGE = "(%d+)미터";
HEALBOT_TOOLTIP_INSTANT_CAST = "즉시 시전";
HEALBOT_TOOLTIP_CAST_TIME = "(%d+.?%d*)초";
HEALBOT_TOOLTIP_CHANNELED = "채널링";
HEALBOT_HASLEFTRAID = "^([^%s]+)님이 공격대를 떠났습니다$";
HEALBOT_HASLEFTPARTY = "^([^%s]+)님이 파티를 떠났습니다$";
HEALBOT_YOULEAVETHEGROUP = "당신은 파티를 떠났습니다"
HEALBOT_YOULEAVETHERAID = "공격대를 떠났습니다"
-----------------
-- Translation --
@@ -309,6 +312,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_OPTIONS_MONITORRANGE = "원거리";
HEALBOT_OPTIONS_MONITORHEALERS = "힐러";
HEALBOT_OPTIONS_MONITORCUSTOM = "사용자 정의";
HEALBOT_OPTIONS_PETS = "소환수";
HEALBOT_OPTIONS_SHOWTOOLTIP = "툴팁 표시";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "주문 정보 표시";
@@ -329,7 +333,6 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_WORDS_TO = "~";
HEALBOT_WORDS_CAST = "시전"
HEALBOT_WORDS_FOR = "for";
end
+26
View File
@@ -1,6 +1,32 @@
-- HealBot_Model.lua
-- Centralized Data Store and Observer System for HealBotBlue
-- Safe local wrappers to prevent native UIDropDownMenu concatenation crashes
-- when setting selected values on closed dropdowns during initialization.
function HealBot_UIDropDownMenu_SetSelectedID(frame, id, useValue)
local wasNil = false
if not UIDROPDOWNMENU_OPEN_MENU then
UIDROPDOWNMENU_OPEN_MENU = "DropDownList1"
wasNil = true
end
UIDropDownMenu_SetSelectedID(frame, id, useValue)
if wasNil then
UIDROPDOWNMENU_OPEN_MENU = nil
end
end
function HealBot_UIDropDownMenu_SetSelectedValue(frame, value, useValue)
local wasNil = false
if not UIDROPDOWNMENU_OPEN_MENU then
UIDROPDOWNMENU_OPEN_MENU = "DropDownList1"
wasNil = true
end
UIDropDownMenu_SetSelectedValue(frame, value, useValue)
if wasNil then
UIDROPDOWNMENU_OPEN_MENU = nil
end
end
HealBot_Model = {
observers = {},
units = {},
+16 -3
View File
@@ -18,6 +18,7 @@ HealBot_Options_EmergencyFilter_List = {
HEALBOT_SHAMAN,
HEALBOT_WARLOCK,
HEALBOT_WARRIOR,
HEALBOT_OPTIONS_PETS,
HEALBOT_OPTIONS_MONITORMELEE,
HEALBOT_OPTIONS_MONITORRANGE,
HEALBOT_OPTIONS_MONITORHEALERS,
@@ -247,6 +248,8 @@ function HealBot_Options_OnShow(this)
HealBot_Options_PanelSounds:SetChecked(HealBot_Config.PanelSounds);
HealBot_Options_ShowManaBars:SetChecked(HealBot_Config.ShowManaBars);
HealBot_Options_ManaBarsHealersOnly:SetChecked(HealBot_Config.ManaBarsHealersOnly);
if HealBot_Config.ShowNonManaBars == nil then HealBot_Config.ShowNonManaBars = 0; end
HealBot_Options_ShowNonManaBars:SetChecked(HealBot_Config.ShowNonManaBars);
if HealBot_Config.ActionMouseover == nil then HealBot_Config.ActionMouseover = 1; end
HealBot_Options_ActionMouseover:SetChecked(HealBot_Config.ActionMouseover);
@@ -260,6 +263,9 @@ function HealBot_Options_OnShow(this)
HealBot_Options_TargetHeals:SetChecked(HealBot_Config.TargetHeals);
HealBot_Options_EmergencyHeals:SetChecked(HealBot_Config.EmergencyHeals);
HealBot_Options_OverHeal:SetValue(HealBot_Config.OverHeal);
if HealBot_Config.ShowHealthText == nil then HealBot_Config.ShowHealthText = 0; end
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_HealthText, HealBot_Config.ShowHealthText + 1);
UIDropDownMenu_SetText(HealBot_Options_HealthText_List[HealBot_Config.ShowHealthText + 1], HealBot_Options_HealthText);
HealBot_Options_CastNotify_OnClick(nil,HealBot_Config.CastNotify);
HealBot_Options_SetBuffs();
HealBot_Options_HideOptions:SetChecked(HealBot_Config.HideOptions);
@@ -315,7 +321,8 @@ function HealBot_Options_SetSkins()
HealBot_Options_FontHeight:SetValue(HealBot_Config.btextheight[HealBot_Config.Current_Skin])
HealBot_Options_BarAlphaDis:SetValue(HealBot_Config.bardisa[HealBot_Config.Current_Skin])
HealBot_Options_AbortBarSize:SetValue(HealBot_Config.abortsize[HealBot_Config.Current_Skin])
HealBot_Options_ShowHeaders:SetChecked(HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] or 0)
local isShowHeaders = (HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1)
HealBot_Options_ShowHeaders:SetChecked(isShowHeaders and 1 or nil)
local isColorMode = (HealBot_Config.bcolormode[HealBot_Config.Current_Skin] == 2)
HealBot_Options_BarColorMode:SetChecked(isColorMode and 1 or nil)
@@ -335,10 +342,16 @@ function HealBot_Options_SetSkins()
end
function HealBot_Options_ShowPanel(id)
if HealBot_Options_CurrentPanel>0 then
getglobal("HealBot_Options_Panel"..HealBot_Options_CurrentPanel):Hide();
local panel = getglobal("HealBot_Options_Panel"..HealBot_Options_CurrentPanel);
if panel then
panel:Hide();
end
end
HealBot_Options_CurrentPanel = id;
if HealBot_Options_CurrentPanel>0 then
getglobal("HealBot_Options_Panel"..HealBot_Options_CurrentPanel):Show();
local panel = getglobal("HealBot_Options_Panel"..HealBot_Options_CurrentPanel);
if panel then
panel:Show();
end
end
end
+8 -6
View File
@@ -21,9 +21,10 @@ function HealBot_Options_BuffSelf_OnLoad(self)
getglobal(this:GetName().."Text"):SetText("Self Only")
local id = this:GetID()
if HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[id] then
this:SetChecked(HealBot_Config.BuffWatchSelf[id])
local isSelf = (HealBot_Config.BuffWatchSelf[id] == 1)
this:SetChecked(isSelf and 1 or nil)
else
this:SetChecked(0)
this:SetChecked(nil)
end
end
function HealBot_Options_BuffSelf_OnClick(self)
@@ -77,7 +78,7 @@ function HealBot_Options_Buff_OnClick()
text = HealBot_Buff_Spells[myClass][this.value]
end
UIDropDownMenu_SetSelectedID(frame, this.value + 1)
HealBot_UIDropDownMenu_SetSelectedID(frame, this.value + 1)
UIDropDownMenu_SetText(text, frame)
HealBot_RecalcParty();
end
@@ -101,15 +102,16 @@ function HealBot_Options_SetBuffs()
if dropDown then
local val = HealBot_Config.BuffDropDowns[myClass][i] or 0
UIDropDownMenu_Initialize(dropDown, HealBot_Options_Buff_Initialize)
UIDropDownMenu_SetSelectedID(dropDown, val + 1)
HealBot_UIDropDownMenu_SetSelectedID(dropDown, val + 1)
end
local selfCheck = getglobal("HealBot_Options_BuffSelf" .. i)
if selfCheck then
if HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[i] then
selfCheck:SetChecked(HealBot_Config.BuffWatchSelf[i])
local isSelf = (HealBot_Config.BuffWatchSelf[i] == 1)
selfCheck:SetChecked(isSelf and 1 or nil)
else
selfCheck:SetChecked(0)
selfCheck:SetChecked(nil)
end
end
end
+3 -3
View File
@@ -51,7 +51,7 @@ end
function HealBot_Options_CDCMonitor_Refresh(onselect)
if not HealBot_Config.CDCMonitor then return end
if not onselect then HealBot_Options_CDCMonitor_Initialize() end -- or wrong menu may be used !
UIDropDownMenu_SetSelectedID(HealBot_Options_CDCMonitor,HealBot_Config.CDCMonitor)
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCMonitor,HealBot_Config.CDCMonitor)
end
function HealBot_Options_CDCMonitor_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCMonitor_DropDown)
@@ -200,14 +200,14 @@ function HealBot_Options_CDCButLeft_Refresh(onselect)
local class=UnitClass("Player");
if not onselect then HealBot_Options_CDCButLeft_Initialize() end
set_id = HealBot_Config.Debuff_Left[class];
UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButLeft,set_id)
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButLeft,set_id)
end
function HealBot_Options_CDCButRight_Refresh(onselect)
local set_id;
local class=UnitClass("Player");
if not onselect then HealBot_Options_CDCButRight_Initialize() end
set_id = HealBot_Config.Debuff_Right[class];
UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButRight,set_id)
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButRight,set_id)
end
function HealBot_Options_CDCButLeft_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCButLeft_DropDown)
+13 -70
View File
@@ -1,69 +1,10 @@
-- HealBot Options panel file: HealBot_Options_Chat.lua
-- Split from original HealBot_Options.lua
local HealBot_PlayerSpells = nil
function HealBot_GetPlayerSpells()
if HealBot_PlayerSpells then return HealBot_PlayerSpells end
local spellSet = {}
local i = 1
while true do
local spellName, spellRank = GetSpellName(i, BOOKTYPE_SPELL)
if not spellName then
break
end
spellSet[spellName] = true
i = i + 1
end
local sortedSpells = {}
for k, _ in pairs(spellSet) do
table.insert(sortedSpells, k)
end
table.sort(sortedSpells)
HealBot_PlayerSpells = sortedSpells
return sortedSpells
end
function HealBot_Options_ChatMsg_Spell_Initialize()
local info
info = { text = "None", func = HealBot_Options_ChatMsg_Spell_OnClick, value = "None" }
UIDropDownMenu_AddButton(info)
local spells = HealBot_GetPlayerSpells()
for _, spellName in ipairs(spells) do
info = {
text = spellName,
func = HealBot_Options_ChatMsg_Spell_OnClick,
value = spellName
}
UIDropDownMenu_AddButton(info)
end
end
function HealBot_Options_ChatMsg_Spell_OnClick()
local frameName = UIDROPDOWNMENU_OPEN_MENU
local frame = getglobal(frameName)
local id = frame:GetID()
if not HealBot_Config.ChatMessages then HealBot_Config.ChatMessages = {} end
if not HealBot_Config.ChatMessages[id] then
HealBot_Config.ChatMessages[id] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" }
end
HealBot_Config.ChatMessages[id].Spell = this.value
local text = this.value
if text == "None" then text = "None" end
UIDropDownMenu_SetSelectedValue(frame, this.value)
UIDropDownMenu_SetText(text, frame)
end
function HealBot_Options_ChatMsg_Channel_OnClick(id, buttonFrame)
if not HealBot_Config.ChatMessages then HealBot_Config.ChatMessages = {} end
if not HealBot_Config.ChatMessages[id] then
HealBot_Config.ChatMessages[id] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" }
HealBot_Config.ChatMessages[id] = { Spell = "", Message = "Casting #Spell# on #Target#", Channel = "None" }
end
local current = HealBot_Config.ChatMessages[id].Channel
@@ -91,24 +32,26 @@ function HealBot_Options_SetChatMessages()
end
for i = 1, 5 do
if not HealBot_Config.ChatMessages[i] then
HealBot_Config.ChatMessages[i] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" }
HealBot_Config.ChatMessages[i] = { Spell = "", Message = "Casting #Spell# on #Target#", Channel = "None" }
end
end
for i = 1, 5 do
local msgConfig = HealBot_Config.ChatMessages[i]
if msgConfig then
local dropDown = getglobal("HealBot_Options_ChatMsg"..i)
local editBox = getglobal("HealBot_Options_ChatMsg"..i.."_Text")
local spellEdit = getglobal("HealBot_Options_ChatMsg"..i.."_Spell")
local textEdit = getglobal("HealBot_Options_ChatMsg"..i.."_Text")
local chanButton = getglobal("HealBot_Options_ChatMsg"..i.."_Channel")
if dropDown then
UIDropDownMenu_Initialize(dropDown, HealBot_Options_ChatMsg_Spell_Initialize)
UIDropDownMenu_SetSelectedValue(dropDown, msgConfig.Spell)
UIDropDownMenu_SetWidth(110, dropDown)
UIDropDownMenu_SetText(msgConfig.Spell, dropDown)
if spellEdit then
if msgConfig.Spell == "None" then
spellEdit:SetText("")
msgConfig.Spell = ""
else
spellEdit:SetText(msgConfig.Spell or "")
end
if editBox then
editBox:SetText(msgConfig.Message or "")
end
if textEdit then
textEdit:SetText(msgConfig.Message or "")
end
if chanButton then
chanButton:SetText(msgConfig.Channel or "None")
+142 -93
View File
@@ -5,23 +5,50 @@
<Frame name="HealBot_Options_Panel7" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<!-- Chat Message 1 -->
<Frame name="HealBot_Options_ChatMsg1" inherits="UIDropDownMenuTemplate" id="1">
<EditBox name="HealBot_Options_ChatMsg1_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-30" />
<AbsDimension x="25" y="-30" />
</Offset>
</Anchor>
</Anchors>
</Frame>
<EditBox name="HealBot_Options_ChatMsg1_Text" inherits="InputBoxTemplate" autoFocus="false">
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[1].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg1_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="200" y="20"/>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg1" relativePoint="RIGHT">
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg1_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="0" y="2"/>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(1, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg1_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg1_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
@@ -33,41 +60,51 @@
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg1_Channel" inherits="UIPanelButtonTemplate" text="None">
<!-- Chat Message 2 -->
<EditBox name="HealBot_Options_ChatMsg2_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-90" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[2].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg2_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg1_Text" relativePoint="BOTTOMLEFT">
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg2_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="0" y="-5"/>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(1, this);
HealBot_Options_ChatMsg_Channel_OnClick(2, this);
</OnClick>
</Scripts>
</Button>
<!-- Chat Message 2 -->
<Frame name="HealBot_Options_ChatMsg2" inherits="UIDropDownMenuTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-90" />
</Offset>
</Anchor>
</Anchors>
</Frame>
<EditBox name="HealBot_Options_ChatMsg2_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="200" y="20"/>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg2" relativePoint="RIGHT">
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg2_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="2"/>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
@@ -79,41 +116,51 @@
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg2_Channel" inherits="UIPanelButtonTemplate" text="None">
<!-- Chat Message 3 -->
<EditBox name="HealBot_Options_ChatMsg3_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-150" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[3].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg3_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg2_Text" relativePoint="BOTTOMLEFT">
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg3_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="0" y="-5"/>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(2, this);
HealBot_Options_ChatMsg_Channel_OnClick(3, this);
</OnClick>
</Scripts>
</Button>
<!-- Chat Message 3 -->
<Frame name="HealBot_Options_ChatMsg3" inherits="UIDropDownMenuTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-150" />
</Offset>
</Anchor>
</Anchors>
</Frame>
<EditBox name="HealBot_Options_ChatMsg3_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="200" y="20"/>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg3" relativePoint="RIGHT">
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg3_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="2"/>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
@@ -125,41 +172,51 @@
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg3_Channel" inherits="UIPanelButtonTemplate" text="None">
<!-- Chat Message 4 -->
<EditBox name="HealBot_Options_ChatMsg4_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-210" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[4].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg4_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg3_Text" relativePoint="BOTTOMLEFT">
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg4_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="0" y="-5"/>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(3, this);
HealBot_Options_ChatMsg_Channel_OnClick(4, this);
</OnClick>
</Scripts>
</Button>
<!-- Chat Message 4 -->
<Frame name="HealBot_Options_ChatMsg4" inherits="UIDropDownMenuTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-210" />
</Offset>
</Anchor>
</Anchors>
</Frame>
<EditBox name="HealBot_Options_ChatMsg4_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="200" y="20"/>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg4" relativePoint="RIGHT">
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg4_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="2"/>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
@@ -171,41 +228,51 @@
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg4_Channel" inherits="UIPanelButtonTemplate" text="None">
<!-- Chat Message 5 -->
<EditBox name="HealBot_Options_ChatMsg5_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-270" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[5].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg5_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg4_Text" relativePoint="BOTTOMLEFT">
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg5_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="0" y="-5"/>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(4, this);
HealBot_Options_ChatMsg_Channel_OnClick(5, this);
</OnClick>
</Scripts>
</Button>
<!-- Chat Message 5 -->
<Frame name="HealBot_Options_ChatMsg5" inherits="UIDropDownMenuTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-270" />
</Offset>
</Anchor>
</Anchors>
</Frame>
<EditBox name="HealBot_Options_ChatMsg5_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="200" y="20"/>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg5" relativePoint="RIGHT">
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg5_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="2"/>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
@@ -217,24 +284,6 @@
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg5_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg5_Text" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(5, this);
</OnClick>
</Scripts>
</Button>
</Frames>
</Frame>
</Ui>
+2 -1
View File
@@ -5,7 +5,8 @@ function HealBot_Options_ShowHeaders_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_SHOWHEADERS);
end
function HealBot_Options_ShowHeaders_OnClick(this)
HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] = this:GetChecked();
local isChecked = this:GetChecked()
HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] = isChecked and 1 or 0;
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarTextureS_OnValueChanged(this)
+24 -2
View File
@@ -102,7 +102,7 @@
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="70"/>
<AbsDimension y="95"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
@@ -156,7 +156,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
<AbsDimension x="180" y="0" />
</Offset>
</Anchor>
</Anchors>
@@ -174,6 +174,28 @@
</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ShowNonManaBars" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Track Non-Mana Resources");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ShowNonManaBars = 1;
else
HealBot_Config.ShowNonManaBars = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
+46 -17
View File
@@ -85,6 +85,33 @@ function HealBot_Options_EFClass_OnClick(this)
HealBot_Action_PartyChanged();
end
end
HealBot_Options_HealthText_List = {
"Name Only",
"Health Percentage",
"Real Health",
"Health Deficit",
}
function HealBot_Options_HealthText_DropDown()
for i=1, getn(HealBot_Options_HealthText_List), 1 do
local info = {};
info.text = HealBot_Options_HealthText_List[i];
info.func = HealBot_Options_HealthText_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_HealthText_OnLoad(this)
UIDropDownMenu_Initialize(this, HealBot_Options_HealthText_DropDown);
UIDropDownMenu_SetWidth(110, this);
end
function HealBot_Options_HealthText_OnSelect()
HealBot_Config.ShowHealthText = this:GetID() - 1;
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_HealthText, this:GetID())
HealBot_Action_RefreshButtons();
end
local HealBot_Options_EmergencyFClass_List = {
HEALBOT_CLASSES_MELEE,
HEALBOT_CLASSES_RANGES,
@@ -108,7 +135,7 @@ end
function HealBot_Options_EmergencyFClass_Refresh(onselect)
if not HealBot_Config.EmergencyFClass then return end
if not onselect then HealBot_Options_EmergencyFClass_Initialize() end -- or wrong menu may be used !
UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFClass,HealBot_Config.EmergencyFClass)
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFClass,HealBot_Config.EmergencyFClass)
end
function HealBot_Options_EmergencyFClass_OnLoad()
@@ -191,7 +218,7 @@ end
function HealBot_Options_ExtraSort_Refresh(onselect)
if not HealBot_Config.ExtraOrder then return end
if not onselect then HealBot_Options_ExtraSort_Initialize() end -- or wrong menu may be used !
UIDropDownMenu_SetSelectedID(HealBot_Options_ExtraSort,HealBot_Config.ExtraOrder)
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_ExtraSort,HealBot_Config.ExtraOrder)
end
function HealBot_Options_ExtraSort_OnLoad()
@@ -225,7 +252,7 @@ end
function HealBot_Options_EmergencyFilter_Refresh(onselect)
if not HealBot_Config.EmergIncMonitor then return end
if not onselect then HealBot_Options_EmergencyFilter_Initialize() end -- or wrong menu may be used !
UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFilter,HealBot_Config.EmergIncMonitor)
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFilter,HealBot_Config.EmergIncMonitor)
end
@@ -252,7 +279,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = 0;
HealBot_EmergInc[HEALBOT_WARLOCK] = 0;
HealBot_EmergInc[HEALBOT_WARRIOR] = 0;
if HealBot_Config.EmergIncMonitor==1 then
if HealBot_Config.EmergIncMonitor==2 then
HealBot_EmergInc[HEALBOT_DRUID] = 1;
HealBot_EmergInc[HEALBOT_HUNTER] = 1;
HealBot_EmergInc[HEALBOT_MAGE] = 1;
@@ -262,25 +289,27 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
HealBot_EmergInc[HEALBOT_WARLOCK] = 1;
HealBot_EmergInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.EmergIncMonitor==2 then
HealBot_EmergInc[HEALBOT_DRUID] = 1;
elseif HealBot_Config.EmergIncMonitor==3 then
HealBot_EmergInc[HEALBOT_HUNTER] = 1;
HealBot_EmergInc[HEALBOT_DRUID] = 1;
elseif HealBot_Config.EmergIncMonitor==4 then
HealBot_EmergInc[HEALBOT_MAGE] = 1;
HealBot_EmergInc[HEALBOT_HUNTER] = 1;
elseif HealBot_Config.EmergIncMonitor==5 then
HealBot_EmergInc[HEALBOT_PALADIN] = 1;
HealBot_EmergInc[HEALBOT_MAGE] = 1;
elseif HealBot_Config.EmergIncMonitor==6 then
HealBot_EmergInc[HEALBOT_PRIEST] = 1;
HealBot_EmergInc[HEALBOT_PALADIN] = 1;
elseif HealBot_Config.EmergIncMonitor==7 then
HealBot_EmergInc[HEALBOT_ROGUE] = 1;
HealBot_EmergInc[HEALBOT_PRIEST] = 1;
elseif HealBot_Config.EmergIncMonitor==8 then
HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
HealBot_EmergInc[HEALBOT_ROGUE] = 1;
elseif HealBot_Config.EmergIncMonitor==9 then
HealBot_EmergInc[HEALBOT_WARLOCK] = 1;
HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
elseif HealBot_Config.EmergIncMonitor==10 then
HealBot_EmergInc[HEALBOT_WARRIOR] = 1;
HealBot_EmergInc[HEALBOT_WARLOCK] = 1;
elseif HealBot_Config.EmergIncMonitor==11 then
HealBot_EmergInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.EmergIncMonitor==12 then
-- Pets: no player classes enabled (handled separately in layout)
elseif HealBot_Config.EmergIncMonitor==13 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncMelee[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE];
@@ -290,7 +319,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR];
elseif HealBot_Config.EmergIncMonitor==12 then
elseif HealBot_Config.EmergIncMonitor==14 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE];
@@ -300,7 +329,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR];
elseif HealBot_Config.EmergIncMonitor==13 then
elseif HealBot_Config.EmergIncMonitor==15 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE];
@@ -310,7 +339,7 @@ function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR];
elseif HealBot_Config.EmergIncMonitor==14 then
elseif HealBot_Config.EmergIncMonitor==16 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE];
+29 -1
View File
@@ -183,6 +183,34 @@
</Scripts>
</Frame>
<Frame name="HealBot_Options_HealthText" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="155" y="-271" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="Health Text">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-110" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_HealthText_OnLoad(this)
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_EmergLFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
@@ -196,7 +224,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-275"/>
<AbsDimension x="21" y="-308"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
+1 -1
View File
@@ -112,7 +112,7 @@ end
function HealBot_Options_Skins_Refresh(onselect)
if not HealBot_Config.Skin_ID then return end
if not onselect then HealBot_Options_Skins_Initialize() end -- or wrong menu may be used !
UIDropDownMenu_SetSelectedID(HealBot_Options_Skins,HealBot_Config.Skin_ID)
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_Skins,HealBot_Config.Skin_ID)
end
function HealBot_Options_Skins_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_Skins_DropDown)
+1 -1
View File
@@ -62,7 +62,7 @@ end
function HealBot_Options_TooltipPos_Refresh(onselect)
if not HealBot_Config.TooltipPos then return end
if not onselect then HealBot_Options_TooltipPos_Initialize() end -- or wrong menu may be used !
UIDropDownMenu_SetSelectedID(HealBot_Options_TooltipPos,HealBot_Config.TooltipPos)
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_TooltipPos,HealBot_Config.TooltipPos)
end
function HealBot_Options_TooltipPos_OnLoad()
+103 -8
View File
@@ -132,16 +132,25 @@ function HealBot_Action_EnableButton(button)
local pt = state.powerType
local showMana = false
if HealBot_Config.ShowManaBars == 1 and state.maxMana > 0 and pt == 0 then
local pr, pg, pb = 0, 0, 1 -- Default Blue for Mana
if HealBot_Config.ShowManaBars == 1 and state.maxMana > 0 then
if pt == 0 then
if HealBot_Config.ManaBarsHealersOnly == 1 then
if isHealer then showMana = true end
else
showMana = true
end
elseif HealBot_Config.ShowNonManaBars == 1 then
showMana = true
if pt == 1 then pr, pg, pb = 1, 0, 0 -- Rage (Red)
elseif pt == 3 then pr, pg, pb = 1, 1, 0 -- Energy (Yellow)
elseif pt == 2 then pr, pg, pb = 1, 0.5, 0 -- Focus (Orange)
end
end
end
if showMana then
local pr, pg, pb = 0, 0, 1
if bar3 then
bar3:SetMinMaxValues(0, state.maxMana)
bar3:SetValue(state.mana)
@@ -193,10 +202,36 @@ function HealBot_Action_EnableButton(button)
bar:SetStatusBarColor(r, g, b, HealBot_Config.bardisa[HealBot_Config.Current_Skin]);
bar2:SetStatusBarColor(r, g, b, HealBot_Config.bardisa[HealBot_Config.Current_Skin]);
end
if string.len(name) > textlen then
name = string.sub(name, 1, textlen - 3) .. '...';
local healthTextOpt = HealBot_Config.ShowHealthText or 0
local displayText = name
if healthTextOpt == 1 then
local pct = 0
if maxhlth > 0 then pct = math.floor((hlth / maxhlth) * 100) end
displayText = name .. " - " .. pct .. "%"
elseif healthTextOpt == 2 then
displayText = name .. " - " .. hlth .. "/" .. maxhlth
elseif healthTextOpt == 3 then
local deficit = maxhlth - hlth
if deficit > 0 then
displayText = name .. " - -" .. deficit
end
bar.txt:SetText(name);
end
if string.len(displayText) > textlen then
if healthTextOpt > 0 then
-- If we have numbers, just truncate the name part so the numbers still show.
-- Find where " - " starts.
local dashIndex = string.find(displayText, " %- ")
if dashIndex then
local numbersPart = string.sub(displayText, dashIndex)
local namePart = string.sub(name, 1, math.max(1, textlen - string.len(numbersPart) - 3)) .. "..."
displayText = namePart .. numbersPart
end
else
displayText = string.sub(name, 1, textlen - 3) .. '...';
end
end
bar.txt:SetText(displayText);
bar.txt:SetTextColor(sr, sg, sb, sa);
local fontName, fontHeight, fontFlags = bar.txt:GetFont()
local fontOutline = HealBot_Config.bfontoutline[HealBot_Config.Current_Skin] or 0
@@ -495,7 +530,7 @@ function HealBot_Action_PartyChanged()
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
if HealBot_Config.EmergIncMonitor == 1 then
if HealBot_Config.EmergIncMonitor == 2 then
if GetNumRaidMembers() > 0 then
for j = 1, 40 do
local PossibleEmerg = 1;
@@ -543,6 +578,50 @@ function HealBot_Action_PartyChanged()
end
end
end
elseif HealBot_Config.EmergIncMonitor == 12 then
if GetNumRaidMembers() > 0 then
for j = 1, 40 do
local unit = "raidpet" .. j;
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
local ownerIndex = j;
local name = UnitName(unit) or "Pet";
local _, _, subgroup = GetRaidRosterInfo(ownerIndex);
subgroup = subgroup or 1;
if HealBot_Config.ExtraOrder == 1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder == 2 then
order[unit] = HEALBOT_OPTIONS_PETS;
elseif HealBot_Config.ExtraOrder == 3 then
order[unit] = subgroup;
else
order[unit] = 0 - UnitHealthMax(unit);
if UnitHealthMax(unit) > TempMaxH then TempMaxH = UnitHealthMax(unit); end
end
table.insert(units, unit);
numBars = numBars + 1;
end
end
else
local petUnits = { "pet", "partypet1", "partypet2", "partypet3", "partypet4" };
for _, unit in ipairs(petUnits) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
local name = UnitName(unit) or "Pet";
if HealBot_Config.ExtraOrder == 1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder == 2 then
order[unit] = HEALBOT_OPTIONS_PETS;
elseif HealBot_Config.ExtraOrder == 3 then
order[unit] = 1;
else
order[unit] = 0 - UnitHealthMax(unit);
if UnitHealthMax(unit) > TempMaxH then TempMaxH = UnitHealthMax(unit); end
end
table.insert(units, unit);
numBars = numBars + 1;
end
end
end
else
if GetNumRaidMembers() > 0 then
for j = 1, 40 do
@@ -606,10 +685,26 @@ function HealBot_Action_PartyChanged()
local TempSort = "init"
TempMaxH = math.ceil(TempMaxH / 1000) * 1000;
if GetNumRaidMembers() > 0 then
if GetNumRaidMembers() > 0 or HealBot_Config.EmergIncMonitor == 12 then
for j = 1, 40 do
if not units[j] then break end
local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(string.sub(units[j], 5));
local name, rank, subgroup, level, class, fileName, zone, online, isDead;
local ownerIndex = nil;
if string.sub(units[j], 1, 7) == "raidpet" then
ownerIndex = tonumber(string.sub(units[j], 8));
elseif string.sub(units[j], 1, 4) == "raid" then
ownerIndex = tonumber(string.sub(units[j], 5));
end
if ownerIndex then
name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(ownerIndex);
end
if string.sub(units[j], 1, 7) == "raidpet" or string.sub(units[j], 1, 8) == "partypet" or units[j] == "pet" then
name = UnitName(units[j]) or "Pet";
class = HEALBOT_OPTIONS_PETS;
subgroup = subgroup or 1;
end
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 and HealBot_Config.ExtraOrder == 2 and TempSort ~= class then
TempSort = class
HeaderPos[i + 1] = class
+26
View File
@@ -26,9 +26,35 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Mana Bars for Healers:** Enable and position mini-mana status bars next to unit frames, toggleable to display for healer classes only or all classes.
* **Equipment Bonus Integration:** Automatically scans equipped gear (for classes capable of healing) to dynamically scale healing predictions.
* **Curse & Debuff Warning (CDC):** Dynamic visual and audio alerts for cleanable debuffs. Customizable colors based on debuff type (Curse, Poison, Disease, Magic).
* **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).
* **Non-Mana Resource Tracking:** Track Rage, Energy, and Focus for non-mana classes.
* **Highly Customizable Skins:** Fully configure dimensions (width, height), row spacing, column layouts, custom textures, opacity, class-colored frames, and outline of fonts.
### Known issues
* **New spell rank bug** you may experience lua error spaming your chat frame after learning new healing spells. /reload will clear the issue. To be fixed next release
### Change Log
**v1.4**
* **Extra Frame support for pets and familiars added:** Togglable from healing tab - Extra frames option selected & pets selected from dropdown.
* **Customizable Health Text:** Added a new dropdown in the Healing Options tab that allows users to choose how health text is displayed on unit frames (`Name Only`, `Health Percentage`, `Real Health`, or `Health Deficit`). Includes a smart truncation algorithm to preserve critical health numbers even if the unit name is too long.
* **Non-Mana Resource Tracking:** Added a new toggle in the General Options tab to track secondary resources (Energy, Rage, Focus) for non-mana classes. Bars are dynamically color-coded based on the resource type.
* **Dropdown UI Initialization Fix:** Resolved a Vanilla API bug where dropdown menus sharing an ID (like the new Health Text dropdown) would temporarily inherit text from previously loaded dropdowns (e.g., "Modern Flat").
* **Dynamic Modifier Tooltips:** Fixed a bug where the spell tooltip would not dynamically update its spells when pressing modifier keys (Shift/Ctrl/Alt) while hovering over a unit frame. Registered the `MODIFIER_STATE_CHANGED` event to instantly refresh the tooltip.
* **Global Variable Namespace Refactoring:** Executed a codebase-wide refactoring to encapsulate all floating global variables inside the `HealBot_` or `HEALBOT_` namespace. This prevents HealBot from silently shadowing other addons or the native WoW API, ensuring strict adherence to Vanilla Lua best practices. (Also resolved a namespace collision with `InitSpells`).
* **Chat Announcements & Mouseover Casts:** Chat announcements are now correctly fired when using native Hovercasting (Mouseover). Additionally, added safety checks to prevent spamming chat announcements when accidentally clicking on a dead player (unless casting a resurrection spell).
* **New Priest Buff (Enlighten):** Added the custom "Enlighten" buff to Priest trackable buffs, complete with the `btnholyscriptures` icon on unit frames.
**1.3.3**
* **Chat Panel Refactor:** Completely replaced the spell selection dropdowns in the Chat tab with manual text input boxes, allowing users to type exact spell names (with or without ranks) directly, matching the behavior of the key-bindings configuration. Fixed a string matching bug caused by Vanilla WoW's hidden trailing spaces when comparing spell names, ensuring that both rankless (e.g. `Flash Heal`) and ranked inputs trigger correctly.
* **Chat Layout Stack:** Restructured the Chat Options XML layout to correctly stack the inputs into neat rows, preventing horizontal overlap and providing more space for typing long announce messages.
* **UI Persistence Bug Fixes:** Fixed a Vanilla WoW API quirk where unchecking the "Show Headers" or "Self Only" (Buffs) checkboxes caused the UI to either visually re-check itself or overwrite the setting with defaults upon a `/reload`.
**1.3.2**
* **UIDropDownMenu Fixes:** Resolved native client crash (`UIDROPDOWNMENU_OPEN_MENU` nil concatenation) when setting values on closed dropdowns.
**1.3.1**
* **Hotfix: missing helper function restored** Fixed issue with lua error for druids.