30 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
Bluewhale1337 a6c75b78f7 Update HealBot_Localization.en.lua
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-02 10:54:17 +02:00
Bluewhale1337 1e1e06163c Update HealBotBlue.toc
hotfix 1.3.1

Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-02 10:54:06 +02:00
Bluewhale1337 2995ccbd32 Update README.md
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-02 10:53:17 +02:00
Bluewhale1337 8b3355656e Update HealBot_Controller_Spells.lua
Hotfix: reimplemented missing helper function back.

Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-02 10:51:49 +02:00
Bluewhale1337 dc50c9797f Fixing readme 2026-06-30 18:33:59 +02:00
Bluewhale1337 dd7fcaf082 Merge branch 'dev'
Moving last comit from dev before it gets reset
2026-06-30 18:29:49 +02:00
Bluewhale1337 b77c4d73c6 Merge branch 'dev' 2026-06-30 18:24:35 +02:00
Bluewhale1337 e567c0f394 Minor bugfixes to target restoration, layout, Buff tracking 2026-06-30 18:18:01 +02:00
Bluewhale1337 b8b6a57ef8 Port and adapt 6 main hotfixes to decoupled architecture + small function re-write HealBot_SetSkinColours to adhere to DRY principles 2026-06-28 13:07:19 +02:00
Bluewhale1337 3ae3f26f77 Further modularization of HealBot codebase by splitting core logic into dedicated controller and view components 2026-06-25 19:33:48 +02:00
Bluewhale1337 786e5d66df Reorganized skins panel slider layout and optimize spell initialization sequence 2026-06-25 08:57:46 +02:00
Bluewhale1337 63fc88b006 refactor: modularize configuration UI by splitting options into dedicated component files using coding agent 2026-06-25 08:44:56 +02:00
Bluewhale1337 03634b37e4 Re
factor: fix UI layout overlaps and anchor constraints in options menu and update changelog
2026-06-24 22:24:47 +02:00
Bluewhale1337 dd9cfc301a feat: add customizable frame padding and border thickness settings to UI and optimize equipment change scanning 2026-06-24 20:49:47 +02:00
34 changed files with 7677 additions and 6992 deletions
+46 -1428
View File
File diff suppressed because it is too large Load Diff
+15 -1
View File
@@ -1,6 +1,6 @@
## Interface: 11200
## Title: HealBotBlue
## Version: 1.2.2
## Version: 1.4.0
## Author: Bluewhale
## Notes: Adds panel with skinable bars for healing and decursive
## SavedVariables: HealBot_Config
@@ -10,6 +10,20 @@
..\..\FrameXML\UIDropDownMenu.xml
HealBot_Error.xml
HealBot_Model.lua
HealBot_Controller_Range.lua
HealBot_Controller_Comms.lua
HealBot_Controller_Aura.lua
HealBot_Controller_Spells.lua
HealBot_Controller_Events.lua
HealBot.xml
HealBot_View_Layout.lua
HealBot_View_Tooltip.lua
HealBot_Action.xml
HealBot_Options.xml
HealBot_Options_General.xml
HealBot_Options_Spells.xml
HealBot_Options_Healing.xml
HealBot_Options_CDC.xml
HealBot_Options_Skins.xml
HealBot_Options_Buffs.xml
HealBot_Options_Chat.xml
+39 -1049
View File
File diff suppressed because it is too large Load Diff
+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
+183
View File
@@ -0,0 +1,183 @@
-- HealBot_Controller_Aura.lua
-- Handles tracking buffs/debuffs (auras) on group/raid units
HealBot_MissingBuffs = {}
function HealBot_UnitAffected(unit, effect)
if not effect then return nil; end
local i = 1
while true do
local buff = UnitBuff(unit, i)
if not buff then
break
end
if buff == effect then
return buff
end
i = i + 1
end
i = 1
while true do
local debuff = UnitDebuff(unit, i)
if not debuff then
break
end
if debuff == effect then
return debuff
end
i = i + 1
end
return nil;
end
function HealBot_CheckShamanWeaponBuff(spellName)
local hasMainHandEnchant, _, _, hasOffHandEnchant = GetWeaponEnchantInfo()
if hasMainHandEnchant or hasOffHandEnchant then
return true
end
return false
end
function HealBot_CheckBuffs(unit)
if HealBot_Config.BuffWatch ~= 1 then
HealBot_MissingBuffs[unit] = nil
return
end
local inCombat = UnitAffectingCombat("player") or UnitAffectingCombat(unit)
if inCombat and HealBot_Config.BuffWatchInCombat ~= 1 then
HealBot_MissingBuffs[unit] = nil
return
end
local myClass = UnitClass("player")
if not HealBot_Buff_Spells[myClass] then return end
if UnitIsDeadOrGhost(unit) or not UnitIsConnected(unit) then
HealBot_MissingBuffs[unit] = nil
return
end
-- Group Buff Equivalents
local HealBot_Buff_Equivalents = {
[HEALBOT_POWER_WORD_FORTITUDE] = HEALBOT_PRAYER_OF_FORTITUDE,
[HEALBOT_DIVINE_SPIRIT] = HEALBOT_PRAYER_OF_SPIRIT,
[HEALBOT_SHADOW_PROTECTION] = HEALBOT_PRAYER_OF_SHADOW_PROTECTION,
[HEALBOT_ARCANE_INTELLECT] = HEALBOT_ARCANE_BRILLIANCE,
[HEALBOT_MARK_OF_THE_WILD] = HEALBOT_GIFT_OF_THE_WILD,
}
-- Gather buffs on unit
local hasBuff = {}
local i = 1
while true do
local buffTexture = UnitBuff(unit, i)
if not buffTexture then break end
HealBot_ScanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
HealBot_ScanTooltip:ClearLines()
HealBot_ScanTooltip:SetUnitBuff(unit, i)
local buffName = HealBot_ScanTooltipTextLeft1:GetText()
if buffName then
hasBuff[buffName] = true
end
i = i + 1
end
HealBot_ScanTooltip:Hide()
HealBot_MissingBuffs[unit] = nil
if HealBot_Config.BuffDropDowns and HealBot_Config.BuffDropDowns[myClass] then
for j = 1, 8 do
local val = HealBot_Config.BuffDropDowns[myClass][j]
if val and val > 0 then
local isSelfOnly = (HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[j] == 1)
if not (isSelfOnly and unit ~= "player") then
local spellName = HealBot_Buff_Spells[myClass][val]
local hasIt = hasBuff[spellName]
if not hasIt and HealBot_Buff_Equivalents[spellName] then
hasIt = hasBuff[HealBot_Buff_Equivalents[spellName]]
end
if not hasIt then
if myClass == "SHAMAN" and unit == "player" and string.find(spellName, " Weapon") then
hasIt = HealBot_CheckShamanWeaponBuff(spellName)
end
end
if not hasIt then
HealBot_MissingBuffs[unit] = spellName
break
end
end
end
end
end
end
function HealBot_OnEvent_UnitAura(this, unit)
local DebuffType;
if HealBot_Heals[unit] and unit ~= "target" then
HealBot_UnitIcons[unit] = {}
local iconCount = 0
local HealBot_TrackedHoTs = {
["Interface\\Icons\\Spell_Holy_Renew"] = true,
["Interface\\Icons\\Spell_Nature_Rejuvenation"] = true,
["Interface\\Icons\\Spell_Nature_ResistNature"] = true,
["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;
while true do
local debuff, tmp, debuff_type = UnitDebuff(unit, i, 1)
if debuff then
if iconCount < 5 then
iconCount = iconCount + 1
HealBot_UnitIcons[unit][iconCount] = debuff
end
if HealBot_CDCInc[UnitClass(unit)] == 1 and HealBot_DebuffWatch[debuff_type] == "YES" then
HealBot_UnitDebuff[unit] = debuff_type
DebuffType = debuff_type;
if HealBot_DebuffPriority[debuff_type] then
break
end
end
i = i + 1;
else
if i == 1 then HealBot_UnitDebuff[unit] = nil; end
break
end
end
local b = 1
while true do
local buff = UnitBuff(unit, b)
if not buff then break end
if HealBot_TrackedHoTs[buff] and iconCount < 5 then
iconCount = iconCount + 1
HealBot_UnitIcons[unit][iconCount] = buff
end
b = b + 1
end
if HealBot_UnitDebuff[unit] then
if DebuffType and HealBot_Range_Check(unit, 27) == 1 then
if HealBot_Config.ShowDebuffWarning == 1 then
UIErrorsFrame:AddMessage(UnitName(unit) .. " suffers from " .. DebuffType,
HealBot_Config.CDCBarColour[DebuffType].R,
HealBot_Config.CDCBarColour[DebuffType].G,
HealBot_Config.CDCBarColour[DebuffType].B,
1, UIERRORS_HOLD_TIME);
end
if HealBot_Config.SoundDebuffWarning == 1 then HealBot_PlaySound(HealBot_Config.SoundDebuffPlay); end
end
end
HealBot_CheckBuffs(unit);
HealBot_RecalcHeals(unit);
end
end
+114
View File
@@ -0,0 +1,114 @@
-- HealBot_Controller_Comms.lua
-- Handles network sync (addon messaging), errors, and chat debugging
function HealBot_Get_DebugChan()
local index = GetChannelName("HBmsg");
if (index > 0) then
return index;
else
return nil;
end
end
function HealBot_AddChat(msg)
local chanid = HealBot_Get_DebugChan();
if chanid and HealBot_SpamCnt < 3 then
HealBot_SpamCnt = HealBot_SpamCnt + 1;
local hour, minute = GetGameTime();
if minute == 0 then
msg = "[" .. hour .. ":00] " .. msg;
elseif minute < 10 then
msg = "[" .. hour .. ":0" .. minute .. "] " .. msg;
else
msg = "[" .. hour .. ":" .. minute .. "] " .. msg;
end
SendChatMessage(msg, "CHANNEL", nil, chanid);
elseif ( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end
function HealBot_AddDebug(msg)
local chanid = HealBot_Get_DebugChan();
if chanid and HealBot_SpamCnt < 3 then
HealBot_SpamCnt = HealBot_SpamCnt + 1;
local hour, minute = GetGameTime();
if minute == 0 then
msg = "[" .. hour .. ":00] DEBUG: " .. msg;
elseif minute < 10 then
msg = "[" .. hour .. ":0" .. minute .. "] DEBUG: " .. msg;
else
msg = "[" .. hour .. ":" .. minute .. "] DEBUG: " .. msg;
end
SendChatMessage(msg, "CHANNEL", nil, chanid);
end
end
function HealBot_Report_Error(msg)
if HealBot_ErrorCnt < 28 then
HealBot_ErrorCnt = HealBot_ErrorCnt + 1;
ShowUIPanel(HealBot_Error);
HealBot_ErrorsIn(msg, HealBot_ErrorCnt);
end
end
function HealBot_AddError(msg)
UIErrorsFrame:AddMessage(msg, 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
HealBot_AddDebug(msg);
end
function HealBot_SendAddonMessage(prefix, text)
if GetNumRaidMembers() > 0 then
SendAddonMessage(prefix, text, "RAID")
elseif GetNumPartyMembers() > 0 then
SendAddonMessage(prefix, text, "PARTY")
end
end
function HealBot_OnEvent_AddonMsg(this, addon_id, inc_msg, dist_target, sender_id)
if addon_id == HEALBOT_ADDON_ID then
local tmpTest, unitname, heal_val
tmpTest, tmpTest, unitname, heal_val = string.find(inc_msg, ">> (%a+) <<=>> (.%d+) <<" );
if heal_val then
if not HealBot_HealsIn[unitname] then
HealBot_HealsIn[unitname] = 0;
end
HealBot_Healers[sender_id] = ">> " .. unitname .. " <<=>> " .. heal_val .. " <<";
HealBot_HealsIn[unitname] = HealBot_HealsIn[unitname] + tonumber(heal_val);
if tonumber(heal_val) > 0 then
HealBot_RecalcHeals(HealBot_FindUnitID(unitname))
elseif HealBot_HealsIn[unitname] < 0 then
HealBot_HealsIn[unitname] = 0;
end
end
elseif addon_id == "HealBot" then
local tmpTest, datatype, datamsg, sender
local PName = UnitName("player");
tmpTest, tmpTest, datatype, sender, datamsg = string.find(inc_msg, ">> (%a+) <<=>> (%a+) <<=>> (.+)");
if datatype == "RequestVersion" then
HealBot_SendAddonMessage("HealBot", ">> SendVersion <<=>> " .. sender .. " <<=>> Version=" .. HEALBOT_VERSION);
elseif datatype == "SendVersion" and PName == sender then
HealBot_AddChat(sender_id .. ": " .. datamsg);
end
elseif addon_id == "CTRA" then
if ( string.sub(inc_msg, 1, 3) == "RES" ) then
if ( inc_msg == "RESNO" ) then
HealBot_AddDebug(sender_id .. " Stopped ressing");
for unit, resser in pairs(HealBot_Ressing) do
if resser == sender_id then
HealBot_Ressing[unit] = nil;
HealBot_RecalcHeals(HealBot_FindUnitID(unit));
end
end
else
local unitname, tmpTest
tmpTest, tmpTest, unitname = string.find(inc_msg, "^RES (.+)$");
if ( unitname ) then
HealBot_AddDebug(sender_id .. " is ressing " .. unitname);
HealBot_Ressing[unitname] = sender_id;
HealBot_RecalcHeals(HealBot_FindUnitID(unitname));
end
end
end
end
end
+475
View File
@@ -0,0 +1,475 @@
-- HealBot_Controller_Events.lua
-- Manages WoW Frame events and periodic updates, routing to respective services
HealBot_View_DirtyUnits = {}
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";
SlashCmdList["HEALBOT"] = function(msg)
HealBot_SlashCmd(msg);
end
HealBot_AddError(HEALBOT_ADDON .. HEALBOT_LOADED);
-- Register MVC Observers
HealBot_Model:RegisterObserver("UNIT_HEALTH_CHANGED", function(unitID)
HealBot_View_DirtyUnits[unitID] = true
end)
HealBot_Model:RegisterObserver("UNIT_POWER_CHANGED", function(unitID)
HealBot_View_DirtyUnits[unitID] = true
end)
HealBot_Model:RegisterObserver("UNIT_AURA_CHANGED", function(unitID)
HealBot_View_DirtyUnits[unitID] = true
end)
HealBot_Model:RegisterObserver("ROSTER_CHANGED", function()
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
function HealBot_RegisterThis(this)
-- Deprecated / not used
end
function HealBot_OnUpdate(this, arg1)
if HealBot_TargetRestorePending then
HealBot_TargetRestoreTimer = HealBot_TargetRestoreTimer + arg1;
if HealBot_TargetRestoreTimer >= 0.1 then
local pending = HealBot_TargetRestorePending;
HealBot_TargetRestorePending = nil;
HealBot_TargetRestoreTimer = 0;
if pending.type == "enemy" then
TargetLastEnemy();
elseif pending.type == "friend" then
TargetLastTarget();
elseif pending.type == "clear" then
ClearTarget();
end
end
end
-- Process Dirty Queue for MVC View
if next(HealBot_View_DirtyUnits) ~= nil then
for unitID in pairs(HealBot_View_DirtyUnits) do
HealBot_Action_RefreshButtons(unitID)
HealBot_View_DirtyUnits[unitID] = nil
end
end
HealBot_Timer1 = HealBot_Timer1 + arg1;
if HealBot_Timer1 >= 2.5 then
if not HealBot_IsFighting then
HealsIn_Timer = HealsIn_Timer + 1;
if HealsIn_Timer >= 10 then
HealBot_HealsIn = {};
HealBot_Healers = {};
HealsIn_Timer = 0;
end
if HealBot_EquipChangeTimer > 0 then
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
if HealBot_EquipChangeTimer <= 0 then
HealBot_EquipChangeTimer = 0
HealBot_BonusScanner:ScanEquipment()
HealBot_CalcEquipBonus = true;
HealBot_RecalcSpells();
end
end
if HealBot_SpellsInitFlag > 1 then
HealBot_SpellsInitFlag = HealBot_SpellsInitFlag + 1;
if HealBot_SpellsInitFlag > 2 then
local cnt = HealBot_InitSpells();
HealBot_SpellsInitFlag = 0;
HealBot_RecalcSpells();
end
end
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
else
HealsIn_Timer = 0;
end
HealBot_Timer1 = 0;
HealBot_SpamCnt = 0;
end
end
local HealBot_EventHandlers = {
["UNIT_HEALTH"] = function(this, arg1)
if HealBot_Model:UpdateUnitHealth(arg1) then
HealBot_Model:NotifyObservers("UNIT_HEALTH_CHANGED", arg1)
end
HealBot_OnEvent_UnitHealth(this, arg1)
end,
["UNIT_MANA"] = function(this, arg1)
if HealBot_Model:UpdateUnitPower(arg1) then
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
end
if (arg1 == "player") then HealBot_RecalcHeals(); end
HealBot_Action_RefreshButtons(arg1);
end,
["UNIT_RAGE"] = function(this, arg1)
if HealBot_Model:UpdateUnitPower(arg1) then
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
end
if (arg1 == "player") then HealBot_RecalcHeals(); end
HealBot_Action_RefreshButtons(arg1);
end,
["UNIT_ENERGY"] = function(this, arg1)
if HealBot_Model:UpdateUnitPower(arg1) then
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
end
if (arg1 == "player") then HealBot_RecalcHeals(); end
HealBot_Action_RefreshButtons(arg1);
end,
["UNIT_DISPLAYPOWER"] = function(this, arg1)
if HealBot_Model:UpdateUnitPower(arg1) then
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
end
if (arg1 == "player") then HealBot_RecalcHeals(); end
HealBot_Action_RefreshButtons(arg1);
end,
["UNIT_AURA"] = function(this, arg1)
HealBot_Model:MarkAuraChanged(arg1)
HealBot_Model:NotifyObservers("UNIT_AURA_CHANGED", arg1)
HealBot_OnEvent_UnitAura(this, arg1)
end,
["PLAYER_TARGET_CHANGED"] = function(this)
if HealBot_Model:UpdateUnitIdentity("target") then
HealBot_Model:NotifyObservers("ROSTER_CHANGED", "target")
end
HealBot_Model:UpdateUnitStatus("target")
HealBot_Model:UpdateUnitHealth("target")
HealBot_Model:UpdateUnitPower("target")
HealBot_OnEvent_PlayerTargetChanged(this)
end,
["PARTY_MEMBERS_CHANGED"] = function(this)
for _, unit in ipairs(HealBot_Model.partyMembers) do
HealBot_Model:RefreshUnit(unit)
end
for _, unit in ipairs(HealBot_Model.raidMembers) do
HealBot_Model:RefreshUnit(unit)
end
HealBot_Model:NotifyObservers("ROSTER_CHANGED")
HealBot_OnEvent_PartyMembersChanged(this)
end,
["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,
["SPELLCAST_STOP"] = function(this) HealBot_OnEvent_SpellcastStop(this) end,
["SPELLCAST_INTERRUPTED"] = function(this) HealBot_OnEvent_SpellcastStop(this) end,
["SPELLCAST_FAILED"] = function(this) HealBot_OnEvent_SpellcastStop(this) end,
["PLAYER_REGEN_DISABLED"] = function(this) HealBot_OnEvent_PlayerRegenDisabled(this) end,
["PLAYER_REGEN_ENABLED"] = function(this) HealBot_OnEvent_PlayerRegenEnabled(this) end,
["BAG_UPDATE_COOLDOWN"] = function(this, arg1) HealBot_OnEvent_BagUpdateCooldown(this, arg1) end,
["BAG_UPDATE"] = function(this, arg1) HealBot_OnEvent_BagUpdate(this, arg1) end,
["PARTY_MEMBER_DISABLE"] = function(this, arg1) HealBot_OnEvent_PartyMemberDisable(this, arg1) end,
["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_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,
["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)
local handler = HealBot_EventHandlers[event]
if handler then
handler(this, arg1, arg2, arg3, arg4)
else
HealBot_AddDebug("OnEvent (" .. event .. ")")
end
end
function HealBot_OnEvent_VariablesLoaded(this)
local class = HealBot_UnitClass("player")
table.foreach(HealBot_ConfigDefaults, function (key, val)
if not HealBot_Config[key] then
HealBot_Config[key] = val;
end
if type(val) == "table" and type(HealBot_Config[key]) == "table" then
for k, v in pairs(val) do
if HealBot_Config[key][k] == nil then
HealBot_Config[key][k] = v
end
end
end
end);
local foundModern = false
if HealBot_Config.Skins then
for _, skin in ipairs(HealBot_Config.Skins) do
if skin == "Modern Flat" then foundModern = true break end
end
if not foundModern then
table.insert(HealBot_Config.Skins, "Modern Flat")
end
end
HealBot_InitData();
if not HealBot_PartyFrameHooked then
local origShowPartyFrame = ShowPartyFrame;
ShowPartyFrame = function()
if HealBot_Config.HideParty == 1 then
if HidePartyFrame then HidePartyFrame(); end
elseif origShowPartyFrame then
origShowPartyFrame();
end
end
HealBot_PartyFrameHooked = true;
end
if HealBot_Config.HideParty == 1 and HidePartyFrame then
HidePartyFrame();
end
if class == "PRIEST" or class == "DRUID" or class == "PALADIN" or class == "SHAMAN" then
HealBot_BonusScanner:ScanEquipment();
HealBot_Action_ShowFrame();
this:RegisterEvent("ZONE_CHANGED_NEW_AREA");
this:RegisterEvent("PLAYER_REGEN_DISABLED");
this:RegisterEvent("PLAYER_REGEN_ENABLED");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
this:RegisterEvent("PARTY_MEMBER_DISABLE");
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");
this:RegisterEvent("UNIT_ENERGY");
this:RegisterEvent("UNIT_DISPLAYPOWER");
this:RegisterEvent("SPELLS_CHANGED");
this:RegisterEvent("SPELLCAST_START");
this:RegisterEvent("SPELLCAST_STOP");
this:RegisterEvent("SPELLCAST_INTERRUPTED");
this:RegisterEvent("SPELLCAST_FAILED");
this:RegisterEvent("BAG_UPDATE");
this:RegisterEvent("BAG_UPDATE_COOLDOWN");
this:RegisterEvent("UNIT_AURA");
this:RegisterEvent("UPDATE_INVENTORY_ALERTS");
this:RegisterEvent("UNIT_INVENTORY_CHANGED");
this:RegisterEvent("CHAT_MSG_ADDON");
this:RegisterEvent("CHAT_MSG_SYSTEM");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
if class == "DRUID" then
this:RegisterEvent("UPDATE_SHAPESHIFT_FORM");
this:RegisterEvent("UPDATE_SHAPESHIFT_FORMS");
HealBot_UpdateShapeshiftForm();
end
HealBot_SpellsInitFlag = 2;
end
end
function HealBot_OnEvent_UnitHealth(this, unit)
if (not HealBot_Heals[unit]) then return end
HealBot_CheckCasting(unit);
HealBot_RecalcHeals(unit);
if unit == HealBot_Action_TooltipUnit then
HealBot_Action_RefreshTooltip(HealBot_Action_TooltipUnit);
end
end
function HealBot_OnEvent_UnitMana(this, unit)
if (unit ~= "player") then return end
HealBot_RecalcHeals();
end
function HealBot_OnEvent_ZoneChanged(this)
HealBot_ResetRangeScale();
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PlayerRegenDisabled(this)
HealBot_RecalcParty();
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
if HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
end;
else
HealBot_Action_ShowFrame();
-- Reapply user settings to override the engine's white default
if HealBot_Config and HealBot_Config.Current_Skin then
local skin = HealBot_Config.Current_Skin;
if HealBot_Config.backcolr and HealBot_Config.backcolr[skin] then
HealBot_Action:SetBackdropColor(
HealBot_Config.backcolr[skin],
HealBot_Config.backcolg[skin],
HealBot_Config.backcolb[skin],
HealBot_Config.backcola[skin]
);
HealBot_Action:SetBackdropBorderColor(
HealBot_Config.borcolr[skin],
HealBot_Config.borcolg[skin],
HealBot_Config.borcolb[skin],
HealBot_Config.borcola[skin]
);
end
end
HealBot_IsFighting = true;
end
-- HealBot_RecalcHeals();
end
function HealBot_OnEvent_PlayerRegenEnabled(this)
HealBot_IsFighting = false;
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PlayerTargetChanged(this)
HealBot_RecalcParty();
end
function HealBot_OnEvent_PartyMembersChanged(this)
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PartyMemberDisable(this, unit)
HealBot_RecalcHeals();
end
function HealBot_OnEvent_SystemMsg(this, msg)
if type(msg) == "string" then
local tmpTest, tmpTest, deserter = string.find(msg, HEALBOT_HASLEFTRAID);
if not deserter then
local tmpTest, tmpTest, deserter = string.find(msg, HEALBOT_HASLEFTPARTY);
end
if deserter then
if (HealBot_Healers[deserter]) then
local tmpTest, unitname, heal_val, heal_valn
tmpTest, tmpTest, unitname, heal_val = string.find(HealBot_Healers[deserter], ">> (%a+) <<=>> (.%d+) <<" );
heal_valn = tonumber(heal_val)
HealBot_Healers[deserter] = nil;
HealBot_AddDebug("Healer " .. deserter .. " left the group - Last known activity was heal " .. unitname .. " for " .. heal_val .. " << trapped in event SystemMsg");
if heal_valn > 0 and HealBot_HealsIn[unitname] then
HealBot_HealsIn[unitname] = HealBot_HealsIn[unitname] - heal_valn;
if HealBot_HealsIn[unitname] < 0 then
HealBot_HealsIn[unitname] = 0;
end
end
end
elseif msg == HEALBOT_YOULEAVETHEGROUP or msg == HEALBOT_YOULEAVETHERAID then
HealBot_Delay_RecalcParty = 1;
end
end
end
function HealBot_OnEvent_PartyMemberEnable(this, unit)
HealBot_RecalcHeals();
end
function HealBot_OnEvent_PlayerEquipmentChanged(this)
HealBot_EquipChangeTimer = 1;
end
function HealBot_OnEvent_PlayerEquipmentChanged2(this, unit)
if unit == "player" then
HealBot_EquipChangeTimer = 1;
end
end
function HealBot_OnEvent_SpellsChanged(this, arg1)
if arg1 then return; end
HealBot_AddDebug("HB: SpellsChanged");
HealBot_SpellsInitFlag = 2;
end
function HealBot_OnEvent_TalentsChanged(this, arg1)
HealBot_AddDebug("HB: TalentsChanged");
end
function HealBot_OnEvent_BagUpdate(this, bag)
if HealBot_EquipChangeTimer == 0 then
HealBot_RecalcSpells();
end
end
function HealBot_OnEvent_BagUpdateCooldown(this, bag)
if not bag then
bag = "undef"
elseif HealBot_EquipChangeTimer == 0 then
HealBot_RecalcSpells();
end
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)
HealBot_IsCasting = true;
HealBot_RecalcHeals();
HealBot_CheckCasting();
if spell == HEALBOT_RESURRECTION or spell == HEALBOT_ANCESTRALSPIRIT or spell == HEALBOT_REBIRTH or spell == HEALBOT_REDEMPTION then
if UnitName("Target") then
HealBot_SendAddonMessage("CTRA", "RES " .. UnitName("Target"));
HealBot_IamRessing = true;
end
end
end
function HealBot_OnEvent_SpellcastStop(this)
HealBot_IsCasting = false;
HealBot_StopCasting();
HealBot_RecalcHeals();
if HealBot_IamRessing then
HealBot_SendAddonMessage("CTRA", "RESNO");
HealBot_IamRessing = false;
end
end
+42
View File
@@ -0,0 +1,42 @@
-- HealBot_Controller_Range.lua
-- Handles periodic range checking for units
local _scale = 0
function HealBot_ResetRangeScale()
_scale = 0
end
function HealBot_Range_Check(unit, range)
local return_val = 0;
if not range then
range = 40;
end
if ( unit == "player" ) then
return_val = 1;
elseif ( UnitIsVisible(unit) == 1 ) then
local tx, ty = GetPlayerMapPosition(unit)
local dist
if tx > 0 or ty > 0 then
local px, py = GetPlayerMapPosition("player")
dist = math.sqrt((px - tx)^2 + (py - ty)^2)
if dist > _scale and (px > 0 or py > 0) then
if ( CheckInteractDistance(unit, 4) ) then
_scale = dist
end
end
if dist <= (_scale * range / 27) then
return_val = 1
end
else
if ( HealBot_Config.QualityRange == 1 ) or range <= 27 then
if ( CheckInteractDistance(unit, 4) ) then
return_val = 1;
end
else
return_val = 1;
end
end
end
return return_val;
end
+696
View File
@@ -0,0 +1,696 @@
-- HealBot_Controller_Spells.lua
-- Centralized Spell management, calculation, and casting logic
HealBot_CastingSpell = nil;
HealBot_CastingTarget = nil;
HealBot_TargetRestorePending = nil;
HealBot_TargetRestoreTimer = 0;
local HealBot_Health60 = {
["DRUID"] = 3500,
["MAGE"] = 2500,
["HUNTER"] = 3500,
["PALADIN"] = 4000,
["PRIEST"] = 2500,
["ROGUE"] = 3500,
["SHAMAN"] = 3800,
["WARLOCK"] = 3500,
["WARRIOR"] = 5000,
}
function HealBot_GetSpellName(id)
if (not id) then
return nil;
end
local spellName, subSpellName = GetSpellName(id, BOOKTYPE_SPELL);
if (not spellName) then
return nil;
end
if (not subSpellName or subSpellName == "") then
return spellName;
end
return spellName .. " (" .. subSpellName .. ")";
end
function HealBot_GetSpellId(spell)
local id, idd = 1, 0;
while true do
local spellName, subSpellName = GetSpellName(id, BOOKTYPE_SPELL);
if (spellName) then
if (spell == spellName .. " (" .. subSpellName .. ")") or (spell == spellName .. "(" .. subSpellName .. ")") then
return id;
end
if (spell == spellName) then
idd = id;
end
else
break
end
id = id + 1;
end
if idd > 0 then
return idd
else
return nil;
end
end
function HealBot_CastSpellByName(spell)
if (HealBot_Spells[spell] and HealBot_Spells[spell].BagSlot) then
HealBot_UseItem(spell);
return;
end
local id;
if not HealBot_Spells[spell] then
id = HealBot_GetSpellId(spell);
elseif HealBot_Spells[spell].id then
id = HealBot_Spells[spell].id
else
id = HealBot_GetSpellId(spell);
end
if (not id) then
return;
end
CastSpell(id, BOOKTYPE_SPELL);
end
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
if HealBot_Config.ChatMessages then
local tName = target
if target == "target" then tName = HealBot_TargetName() or "target" else tName = UnitName(target) end
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]
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)
local chan = msgConf.Channel
if chan == "Say" then
SendChatMessage(msg, "SAY")
elseif chan == "Party" and GetNumPartyMembers() > 0 then
SendChatMessage(msg, "PARTY")
elseif chan == "Raid" and GetNumRaidMembers() > 0 then
SendChatMessage(msg, "RAID")
elseif chan == "Whisper" and UnitIsPlayer(target) then
SendChatMessage(msg, "WHISPER", nil, tName)
end
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
HealBot_HealValue = HealBot_Spells[spell].HealsDur;
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(target) .. " <<=>> " .. HealBot_HealValue .. " << ");
end
end
end
function HealBot_StopCasting()
if HealBot_CastingTarget then
if HealBot_HealsIn[UnitName(HealBot_CastingTarget)] then
if HealBot_HealValue > 0 then
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(HealBot_CastingTarget) .. " <<=>> " .. 0 - HealBot_HealValue .. " << ");
HealBot_HealValue = 0;
end
end
end
HealBot_CastingSpell = nil;
HealBot_CastingTarget = nil;
local bar = HealBot_Action_HealthBar(HealBot_Action_AbortButton);
local ar = HealBot_Config.babortcolr[HealBot_Config.Current_Skin] or 0.1;
local ag = HealBot_Config.babortcolg[HealBot_Config.Current_Skin] or 0.1;
local ab = HealBot_Config.babortcolb[HealBot_Config.Current_Skin] or 0.5;
local aa = HealBot_Config.babortcola[HealBot_Config.Current_Skin] or 1;
bar.txt = getglobal(bar:GetName() .. "_text");
bar:SetStatusBarColor(ar, ag, ab, 0);
local sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin];
bar.txt:SetTextColor(sr, sg, sb, sa);
end
function HealBot_UnitHealth(unit)
local Current, Desired = UnitHealth(unit), UnitHealthMax(unit);
if unit == 'target' and Desired == 100 then
local class, level = HealBot_UnitClass(unit), UnitLevel(unit);
if HealBot_Health60[class] and level > 0 then
Desired = math.floor(HealBot_Health60[class] / 60 * level + 0.5)
else
Desired = UnitHealthMax('player');
end
Current = Desired / 100 * Current;
end
return Current, Desired;
end
function HealBot_CheckCasting(unit)
if not HealBot_CastingSpell or HealBot_AlwaysHeal() then return nil end
if not HealBot_Spells[HealBot_CastingSpell] then return nil end
if not unit then unit = HealBot_CastingTarget end
if unit ~= HealBot_CastingTarget then return nil end
local bar = HealBot_Action_HealthBar(HealBot_Action_AbortButton);
local ar = HealBot_Config.babortcolr[HealBot_Config.Current_Skin] or 0.1;
local ag = HealBot_Config.babortcolg[HealBot_Config.Current_Skin] or 0.1;
local ab = HealBot_Config.babortcolb[HealBot_Config.Current_Skin] or 0.5;
local aa = HealBot_Config.babortcola[HealBot_Config.Current_Skin] or 1;
bar.txt = getglobal(bar:GetName() .. "_text");
if HealBot_IsCasting == false and HealBot_AbortButton == 0 then
bar:SetStatusBarColor(ar, ag, ab, 0);
local sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin];
bar.txt:SetTextColor(sr, sg, sb, sa);
return nil
end
local Current, Desired = HealBot_UnitHealth(unit)
local Needed = Desired - Current;
Needed = Needed * (1 + (HealBot_Config.OverHeal * 4));
if Needed < 0 then Needed = 0 end
if (Needed > HealBot_Spells[HealBot_CastingSpell].HealsDur) then
local sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin];
bar.txt:SetTextColor(sr, sg, sb, sa);
bar:SetStatusBarColor(ar, ag, ab, 0);
return nil
elseif HealBot_AbortButton == 1 and HealBot_IsCasting == true then
bar:SetStatusBarColor(ar, ag, ab, aa);
local sr = HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextenabledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextenabledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextenabledcola[HealBot_Config.Current_Skin];
bar.txt = getglobal(bar:GetName() .. "_text");
bar.txt:SetTextColor(sr, sg, sb, sa);
end
end
function HealBot_CastSpellOnFriend(spell, target)
if (not spell or not target or not UnitName(target)) then
return;
end
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
HealBot_StartCasting(spell, target, "direct");
if targetEnemy then
HealBot_TargetRestorePending = { type = "enemy" };
elseif oldTarget and oldTarget ~= UnitName(target) then
HealBot_TargetRestorePending = { type = "friend" };
elseif not oldTarget then
HealBot_TargetRestorePending = { type = "clear" };
end
HealBot_TargetRestoreTimer = 0;
end
function HealBot_SetItemDefaults(spell)
if not HealBot_Spells[spell].Target then
HealBot_Spells[spell].Target = {"player", "party", "pet"};
end
if not HealBot_Spells[spell].Price then
HealBot_Spells[spell].Price = 0;
end
if not HealBot_Spells[spell].CastTime then
HealBot_Spells[spell].CastTime = 0;
end
if not HealBot_Spells[spell].Mana then
HealBot_Spells[spell].Mana = 0;
end
if not HealBot_Spells[spell].Channel then
HealBot_Spells[spell].Channel = HealBot_Spells[spell].CastTime;
end
if not HealBot_Spells[spell].Duration then
HealBot_Spells[spell].Duration = HealBot_Spells[spell].Channel;
end
if not HealBot_Spells[spell].HealsMin then
HealBot_Spells[spell].HealsMin = 0;
end
if not HealBot_Spells[spell].HealsMax then
HealBot_Spells[spell].HealsMax = 0;
end
HealBot_Spells[spell].RealHealing = 0;
HealBot_Spells[spell].HealsCast = (HealBot_Spells[spell].HealsMin + HealBot_Spells[spell].HealsMax) / 2;
if not HealBot_Spells[spell].HealsExt then
HealBot_Spells[spell].HealsExt = 0;
end
end
function HealBot_SetSpellDefaults(spell)
HealBot_Spells[spell].HealsDur = math.floor((HealBot_Spells[spell].HealsCast + HealBot_Spells[spell].HealsExt) + HealBot_Spells[spell].RealHealing);
end
function HealBot_AddHeal(spell)
HealBot_SetSpellDefaults(spell);
table.foreachi(HealBot_Spells[spell].Target, function (i, val)
table.insert(HealBot_Heals[val], spell);
end);
HealBot_Spells[spell].BagSlot = HealBot_GetBagSlot(spell);
end
function HealBot_FindHealSpells()
local id = 1;
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 HealBot_CalcEquipBonus then
local healingbonus_penalty = 1;
if HealBot_Spells[spell].Level < 20 then
healingbonus_penalty = (1 - ((20 - HealBot_Spells[spell].Level) * 0.0375));
end
local temp_Spell_cast = 3.5;
if HealBot_Spells[spell].CastTime == 0 then
temp_Spell_cast = 3.5;
end
if not HealBot_Spells[spell].CastTime then
HealBot_Spells[spell].CastTime = 1.5;
end
if HealBot_Spells[spell].CastTime >= 1.5 and HealBot_Spells[spell].CastTime < 3.5 then
temp_Spell_cast = HealBot_Spells[spell].CastTime;
end
RealHealing = ((HealBot_GetBonus() * healingbonus_penalty) * (temp_Spell_cast / 3.5));
local playerClass, englishClass = UnitClass("player");
local SpiBonus = 0;
if (englishClass == "PRIEST") then
SpiBonus = ((HealBot_SpiBonus(spell) * healingbonus_penalty) * (temp_Spell_cast / 3.5))
RealHealing = RealHealing + SpiBonus;
end
RealHealing = math.floor(RealHealing);
HealBot_Spells[spell].RealHealing = RealHealing;
end
HealBot_AddHeal(spell);
end
end);
local items = {};
for bag = 0, NUM_BAG_FRAMES do
for slot = 1, GetContainerNumSlots(bag) do
local item = HealBot_GetItemName(bag, slot);
if HealBot_Spells[item] and not items[item] then
HealBot_SetItemDefaults(item);
HealBot_AddHeal(item);
items[item] = 1;
end
end
end
table.foreach(HealBot_Heals, function (key, val)
if (table.getn(val) == 0) then
HealBot_Heals[key] = nil;
end
end);
HealBot_Heals.target = HealBot_Heals.party;
for i = 1, 4 do
HealBot_Heals["party" .. i] = HealBot_Heals.party;
HealBot_Heals["partypet" .. i] = HealBot_Heals.party;
end
for i = 1, 40 do
HealBot_Heals["raid" .. i] = HealBot_Heals.party;
HealBot_Heals["raidpet" .. i] = HealBot_Heals.party;
end
if HealBot_CalcEquipBonus then
HealBot_AddDebug("...Done Equip Bonus:" .. RealHealing);
end
HealBot_CalcEquipBonus = false;
end
function HealBot_CanCastSpell(spell, unit)
local this = HealBot_Spells[spell];
if this.Mana > UnitMana("player") then return false end;
if this.BagSlot then
local bag, slot = HealBot_UnpackBagSlot(this.BagSlot);
local start, duration, enable = GetContainerItemCooldown(bag, slot);
if (start > 0 and duration > 0 and enable > 0) then
return false;
end
end
return true;
end
function HealBot_GetHealSpell(unit, pattern)
if (not UnitName(unit)) then return nil end;
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_ActiveShapeshiftStance and HealBot_Config.AutoUnshift ~= 1 then return nil end;
end
local spell = HealBot_GetSpellName(HealBot_GetSpellId(pattern))
local range = 40;
if HealBot_Spells[spell] then
if not HealBot_CanCastSpell(spell, unit) then return nil end;
range = HealBot_Spells[spell].range;
end
if HealBot_Range_Check(unit, range) == 0 then return nil end;
return spell;
end
function HealBot_HealUnit(unit, pattern)
HealBot_CastSpellOnFriend(HealBot_GetHealSpell(unit, pattern), unit);
end
function HealBot_RecalcHeals(unit)
HealBot_Action_Refresh(unit);
end
function HealBot_RecalcParty()
HealBot_Action_PartyChanged();
if HealBot_Action_HealButtons then
for _, button in ipairs(HealBot_Action_HealButtons) do
if button and button.unit then
HealBot_OnEvent_UnitAura(nil, button.unit);
end
end
end
HealBot_Action_RefreshButtons();
end
function HealBot_RecalcSpells()
HealBot_FindHealSpells();
HealBot_RecalcParty();
end
function HealBot_SpiBonus(spell)
local heals_modifer = 0;
local base, stat, posBuff, negBuff = UnitStat("player", 5);
nameTalent, icon, tier, column, currRank, maxRank = GetTalentInfo(2, 14); -- Spiritual guidance
spiGuideBonus = stat * 0.05;
heals_modifer = heals_modifer + (currRank * spiGuideBonus);
return heals_modifer;
end
function HealBot_GetBonus()
local HealBonus = HealBot_BonusScanner:GetBonus();
return HealBonus;
end
function HealBot_InitSpells()
local id = 1
local cnt = 0;
local class = HealBot_UnitClass("player")
HealBot_CurrentSpells = {};
while true do
local spell = HealBot_GetSpellName(id);
if not spell then
break
end
if (HealBot_Spells[spell]) then
HealBot_Spells[spell].id = id;
HealBot_InitGetSpellData(spell, id, class);
table.insert(HealBot_CurrentSpells, spell);
cnt = cnt + 1;
end
id = id + 1;
end
if class == "PRIEST" or class == "DRUID" or class == "PALADIN" or class == "SHAMAN" then
HealBot_AddChat("Initiated HealBot_CurrentSpells with " .. cnt .. " Spells");
end
return cnt;
end
function HealBot_InitGetSpellData(spell, id, class)
local i, _mana, _cast, _HealsMin, _HealsMax, _HealsExt, _duration, _range, _shield, _channel;
local tooltip = getglobal("HealBot_ScanTooltip");
local tmpText, line, tmpTest
if (not spell) then
return;
end
HealBot_ScanTooltip:SetOwner(HealBot_ScanTooltip, "ANCHOR_NONE")
HealBot_ScanTooltip:SetSpell(id, BOOKTYPE_SPELL);
tmpText = getglobal("HealBot_ScanTooltipTextLeft2");
if (tmpText:GetText()) then
line = tmpText:GetText();
tmpTest, tmpTest, _mana = string.find(line, HEALBOT_TOOLTIP_MANA);
else
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
end
tmpText = getglobal("HealBot_ScanTooltipTextRight2");
if (tmpText:GetText()) then
line = tmpText:GetText();
tmpTest, tmpTest, _range = string.find(line, HEALBOT_TOOLTIP_RANGE);
else
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
end
tmpText = getglobal("HealBot_ScanTooltipTextLeft3");
_cast = nil;
if (tmpText:GetText()) then
line = tmpText:GetText();
if (line == HEALBOT_TOOLTIP_INSTANT_CAST) then
_cast = 0;
elseif line == HEALBOT_TOOLTIP_CHANNELED then
_cast = 0;
elseif (tmpText) then
tmpTest, tmpTest, _cast = string.find(line, HEALBOT_TOOLTIP_CAST_TIME);
end
else
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
end
tmpText = getglobal("HealBot_ScanTooltipTextLeft4");
tmpTest = nil;
if (tmpText:GetText()) then
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, 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, HEALBOT_SPELL_PATTERN_RENEW);
_HealsMin = 0;
_HealsMax = 0;
if (_HealsExt == nil) then
tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HEALBOT_SPELL_PATTERN_RENEW1);
end
if (_HealsExt == nil) then
tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_RENEW2);
end
if (_HealsExt == nil) then
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, 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, 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, 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, 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, HEALBOT_SPELL_PATTERN_REGROWTH);
if (tmpTest == nil) then
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, HEALBOT_SPELL_PATTERN_REJUVENATION);
_HealsMin = 0;
_HealsMax = 0;
if (_HealsExt == nil) then
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, 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, 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, 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, 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, HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE);
end
end
else
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
end
if (_mana == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: _mana is NIL");
HealBot_Report_Error("ERROR: Spell: " .. spell);
if HealBot_ScanTooltipTextLeft2:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextLeft2:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_MANA .. " <<");
end
if (_range == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: _range is NIL");
HealBot_Report_Error("ERROR: Spell: " .. spell);
if HealBot_ScanTooltipTextRight2:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextRight2:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_RANGE .. " <<");
end
if (_cast == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: _cast is NIL");
HealBot_Report_Error("ERROR: Spell: " .. spell);
if HealBot_ScanTooltipTextLeft3:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextLeft3:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_CAST_TIME .. " <<");
end
if (tmpTest == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: tmpTest == nil");
HealBot_Report_Error("ERROR: spell = " .. spell);
if line then
HealBot_Report_Error("ERROR: Tooltip = >> " .. line .. " <<");
end
end
HealBot_Spells[spell].CastTime = tonumber(_cast);
HealBot_Spells[spell].Mana = tonumber(_mana);
HealBot_Spells[spell].Range = tonumber(_range);
HealBot_Spells[spell].HealsMin = tonumber(_HealsMin);
HealBot_Spells[spell].HealsMax = tonumber(_HealsMax);
if _HealsExt then
HealBot_Spells[spell].HealsExt = tonumber(_HealsExt);
end
if _duration then
HealBot_Spells[spell].Duration = tonumber(_duration);
end
if _shield then
HealBot_Spells[spell].Shield = tonumber(_shield);
end
if _channel then
HealBot_Spells[spell].Channel = tonumber(_channel);
end
if not HealBot_Spells[spell].Target then
HealBot_Spells[spell].Target = {"player", "party", "pet"};
end
if not HealBot_Spells[spell].Price then
HealBot_Spells[spell].Price = 0;
end
if not HealBot_Spells[spell].Channel then
HealBot_Spells[spell].Channel = HealBot_Spells[spell].CastTime;
end
if not HealBot_Spells[spell].Duration then
HealBot_Spells[spell].Duration = HealBot_Spells[spell].Channel;
end
if not HealBot_Spells[spell].RealHealing then
HealBot_Spells[spell].RealHealing = 0;
end
HealBot_Spells[spell].HealsCast = (HealBot_Spells[spell].HealsMin + HealBot_Spells[spell].HealsMax) / 2;
if not HealBot_Spells[spell].HealsExt then
HealBot_Spells[spell].HealsExt = 0;
end
end
function HealBot_Generic_Patten(matchStr, matchPattern)
local tmpTest, _HealsMin, _HealsMax, _HealsExt, _duration
tmpTest, tmpTest, _HealsMin, _HealsMax = string.find(matchStr, matchPattern);
if (tmpTest == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: tmpTest == nil");
HealBot_Report_Error("ERROR: pattern = " .. matchPattern);
HealBot_Report_Error("ERROR: Tooltip = >> " .. matchStr .. " <<");
end
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 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;
end
+18 -5
View File
@@ -1,6 +1,6 @@
HealBot_ConfigDefaults = {
ShowManaBars=0,
ManaBarsHealersOnly=1,
ManaBarsHealersOnly=0,
Version = HEALBOT_VERSION,
AlertLevel = 0.95,
AutoClose = 1,
@@ -10,8 +10,11 @@ HealBot_ConfigDefaults = {
TargetHeals = 1,
EmergencyHeals = 1,
ActionLocked = 0,
ActionVisible = 1,
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" },
@@ -22,6 +25,7 @@ HealBot_ConfigDefaults = {
HideOptions = 0,
HideAbort = 1,
ShowTooltip = 1,
ShowHealthText = 0,
GrowUpwards = 0,
ProtectPvP = 1,
QualityRange = 0,
@@ -169,18 +173,20 @@ 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 = HEALBOT_SKINS_STD,
Current_Skin = "Modern Flat",
Skin_ID = 1,
Skins = {HEALBOT_SKINS_STD, "HealBot Party", "HealBot Raid", "Alteric Valley", "Modern Flat"},
Skins = {"Modern Flat", HEALBOT_SKINS_STD, "HealBot Party", "HealBot Raid", "Alteric Valley"},
numcols = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 4, ["Alteric Valley"] = 2, ["Modern Flat"] = 1},
btexture = {[HEALBOT_SKINS_STD] = 8,["HealBot Party"] = 6, ["HealBot Raid"] = 7, ["Alteric Valley"] = 9, ["Modern Flat"] = 10},
bcspace = {[HEALBOT_SKINS_STD] = 4, ["HealBot Party"] = 4, ["HealBot Raid"] = 2, ["Alteric Valley"] = 2, ["Modern Flat"] = 4},
brspace = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 2, ["HealBot Raid"] = 2, ["Alteric Valley"] = 1, ["Modern Flat"] = 2},
bwidth = {[HEALBOT_SKINS_STD] = 122, ["HealBot Party"] = 115, ["HealBot Raid"] = 90, ["Alteric Valley"] = 85, ["Modern Flat"] = 122},
bheight = {[HEALBOT_SKINS_STD] = 19, ["HealBot Party"] = 18, ["HealBot Raid"] = 14, ["Alteric Valley"] = 16, ["Modern Flat"] = 20},
bwidth = {[HEALBOT_SKINS_STD] = 122, ["HealBot Party"] = 115, ["HealBot Raid"] = 90, ["Alteric Valley"] = 85, ["Modern Flat"] = 100},
bheight = {[HEALBOT_SKINS_STD] = 19, ["HealBot Party"] = 18, ["HealBot Raid"] = 14, ["Alteric Valley"] = 16, ["Modern Flat"] = 40},
btextenabledcolr = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
btextenabledcolg = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
btextenabledcolb = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 1},
@@ -213,11 +219,17 @@ HealBot_ConfigDefaults = {
ShowHeader = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
bcolormode = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 2},
bborder = {[HEALBOT_SKINS_STD] = 2, ["HealBot Party"] = 2, ["HealBot Raid"] = 2, ["Alteric Valley"] = 2, ["Modern Flat"] = 1},
bpadding = {[HEALBOT_SKINS_STD] = 10, ["HealBot Party"] = 10, ["HealBot Raid"] = 10, ["Alteric Valley"] = 10, ["Modern Flat"] = 10},
bboffset = {[HEALBOT_SKINS_STD] = 16, ["HealBot Party"] = 16, ["HealBot Raid"] = 16, ["Alteric Valley"] = 16, ["Modern Flat"] = 3},
bfontoutline = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 1},
ShowTooltip = 1,
ShowManaBars = 0,
ManaBarsHealersOnly = 0,
Tooltip_ShowSpellDetail = 0,
Tooltip_ShowTarget = 1,
Tooltip_Recommend = 1,
TooltipPos = 1,
HideParty = 0,
};
HealBot_Config = {};
@@ -502,6 +514,7 @@ HealBot_Buff_Spells = {
HEALBOT_PRAYER_OF_SHADOW_PROTECTION,
HEALBOT_INNER_FIRE,
HEALBOT_FEAR_WARD,
HEALBOT_ENLIGHTEN,
},
[HEALBOT_MAGE] = {
HEALBOT_ARCANE_INTELLECT,
+44 -33
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 --
@@ -205,7 +208,7 @@ HEALBOT_OPTIONS_TAB_HEALING = "Heilung";
HEALBOT_OPTIONS_TAB_CDC = "Debuffs";
HEALBOT_OPTIONS_TAB_SKIN = "Skin"
HEALBOT_OPTIONS_PANEL_TEXT = "Heilungspanel Optionen:"
HEALBOT_OPTIONS_PANEL_TEXT = "Manabalken Optionen:"
HEALBOT_OPTIONS_BARALPHA = "Leisten Transparenz";
HEALBOT_OPTIONS_BARALPHAINHEAL = "Ankomm.Heilung Transparenz";
HEALBOT_OPTIONS_ACTIONLOCKED = "Fenster fixieren";
@@ -218,6 +221,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exakter 25 Meter Check in Instanzen";
HEALBOT_OPTIONS_INTEGRATECTRA = "Integriere CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Vermeidung des PvP Flags";
HEALBOT_OPTIONS_HIDEPARTY = "Standard-Gruppenfenster ausblenden";
HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Optionen";
HEALBOT_OPTIONS_SKINTEXT = "Skin"
@@ -320,6 +324,14 @@ HEALBOT_CLASSES_RANGES = "Fernkampf";
HEALBOT_CLASSES_HEALERS = "Heiler";
HEALBOT_CLASSES_CUSTOM = "pers\195\182nlich";
HEALBOT_OPTIONS_MONITORNO = "Keine";
HEALBOT_OPTIONS_MONITORALL = "Alle";
HEALBOT_OPTIONS_MONITORMELEE = "Nahkampf";
HEALBOT_OPTIONS_MONITORRANGE = "Fernkampf";
HEALBOT_OPTIONS_MONITORHEALERS = "Heiler";
HEALBOT_OPTIONS_MONITORCUSTOM = "Eigene";
HEALBOT_OPTIONS_PETS = "Begleiter";
HEALBOT_OPTIONS_SHOWTOOLTIP = "Zeige Tooltips";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Zeige detaillierte Spruchinfos";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Zeige Zielinfos";
@@ -344,7 +356,6 @@ HEALBOT_WORDS_SEC = "Sek";
HEALBOT_WORDS_TO = "zu";
HEALBOT_WORDS_CAST = "Zauber"
HEALBOT_WORDS_FOR = "f\195\188r";
end
+46 -44
View File
@@ -1,4 +1,4 @@
HEALBOT_VERSION = "1.2.2";
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"
-----------------
@@ -230,7 +231,7 @@ HEALBOT_OPTIONS_TAB_SKIN = "Skin";
HEALBOT_OPTIONS_TAB_BUFF = "Buff";
HEALBOT_OPTIONS_TAB_CHAT = "Chat";
HEALBOT_OPTIONS_PANEL_TEXT = "Healing panel options:"
HEALBOT_OPTIONS_PANEL_TEXT = "Mana bar options:"
HEALBOT_OPTIONS_BARALPHA = "Bar opacity";
HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heals opacity";
HEALBOT_OPTIONS_ACTIONLOCKED = "Lock position";
@@ -243,6 +244,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exact 27yard range check in instances";
--HEALBOT_OPTIONS_INTEGRATECTRA = "Integrate CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging";
HEALBOT_OPTIONS_HIDEPARTY = "Hide Default Party Frames";
HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Options";
HEALBOT_OPTIONS_SKINTEXT = "Use skin"
@@ -358,6 +360,14 @@ HEALBOT_CLASSES_RANGES = "Ranged";
HEALBOT_CLASSES_HEALERS = "Healers";
HEALBOT_CLASSES_CUSTOM = "Custom";
HEALBOT_OPTIONS_MONITORNO = "None";
HEALBOT_OPTIONS_MONITORALL = "All";
HEALBOT_OPTIONS_MONITORMELEE = "Melee";
HEALBOT_OPTIONS_MONITORRANGE = "Ranged";
HEALBOT_OPTIONS_MONITORHEALERS = "Healers";
HEALBOT_OPTIONS_MONITORCUSTOM = "Custom";
HEALBOT_OPTIONS_PETS = "Pets";
HEALBOT_OPTIONS_SHOWTOOLTIP = "Show tooltips";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Show detailed spell information";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Show target information";
@@ -377,11 +387,3 @@ HEALBOT_WORDS_SEC = "sec";
HEALBOT_WORDS_TO = "to";
HEALBOT_WORDS_CAST = "Cast"
HEALBOT_WORDS_FOR = "for";
+44 -33
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 --
@@ -188,7 +191,7 @@ HEALBOT_OPTIONS_TAB_CDC = "Cure";
HEALBOT_OPTIONS_TAB_SKIN = "Skin"
HEALBOT_OPTIONS_PANEL_TEXT = "Panneau d'option de soin:"
HEALBOT_OPTIONS_PANEL_TEXT = "Options de barre de mana:"
HEALBOT_OPTIONS_ACTIONLOCKED = "Bloquer la position";
HEALBOT_OPTIONS_GROWUPWARDS = "Monter";
HEALBOT_OPTIONS_AUTOSHOW = "Ouvrir automatiquement";
@@ -200,6 +203,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exact 27yard range check in instances";
HEALBOT_OPTIONS_INTEGRATECTRA = "Intregrer CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging";
HEALBOT_OPTIONS_HIDEPARTY = "Masquer les cadres de groupe par défaut";
HEALBOT_OPTIONS_ITEMS = "Objets";
@@ -259,6 +263,14 @@ HEALBOT_CLASSES_RANGES = "Distances";
HEALBOT_CLASSES_HEALERS = "Soigneurs";
HEALBOT_CLASSES_CUSTOM = "Divers";
HEALBOT_OPTIONS_MONITORNO = "Aucun";
HEALBOT_OPTIONS_MONITORALL = "Tous";
HEALBOT_OPTIONS_MONITORMELEE = "M\195\169l\195\169e";
HEALBOT_OPTIONS_MONITORRANGE = "\195\128 distance";
HEALBOT_OPTIONS_MONITORHEALERS = "Soigneurs";
HEALBOT_OPTIONS_MONITORCUSTOM = "Personnalis\195\169";
HEALBOT_OPTIONS_PETS = "Familiers";
HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heal opacity"; -- *************** needs French translation ***************
HEALBOT_OPTIONS_CDCBUTTONS = "Curing buttons"; -- *************** needs French translation ***************
@@ -325,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
+45 -34
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 --
@@ -184,7 +187,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_OPTIONS_TAB_CDC = "치료";
HEALBOT_OPTIONS_TAB_SKIN = "스킨"
HEALBOT_OPTIONS_PANEL_TEXT = "치유 패널 옵션:"
HEALBOT_OPTIONS_PANEL_TEXT = "마나 바 옵션:"
HEALBOT_OPTIONS_BARALPHA = "바 불투명도";
HEALBOT_OPTIONS_BARALPHAINHEAL = "들어오는 치유 불투명도";
HEALBOT_OPTIONS_ACTIONLOCKED = "위치 고정";
@@ -197,6 +200,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
--HEALBOT_OPTIONS_INTEGRATECTRA = "CTRA 연동";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Alt-key 토글";
HEALBOT_OPTIONS_PROTECTPVP = "우발적 PvP 상태 피함";
HEALBOT_OPTIONS_HIDEPARTY = "기본 파티 프레임 숨김";
HEALBOT_OPTIONS_HEAL_CHATOPT = "대화창 옵션";
HEALBOT_OPTIONS_SKINTEXT = "스킨 사용"
@@ -302,6 +306,14 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_CLASSES_HEALERS = "힐러들";
HEALBOT_CLASSES_CUSTOM = "사용자";
HEALBOT_OPTIONS_MONITORNO = "없음";
HEALBOT_OPTIONS_MONITORALL = "모두";
HEALBOT_OPTIONS_MONITORMELEE = "근접";
HEALBOT_OPTIONS_MONITORRANGE = "원거리";
HEALBOT_OPTIONS_MONITORHEALERS = "힐러";
HEALBOT_OPTIONS_MONITORCUSTOM = "사용자 정의";
HEALBOT_OPTIONS_PETS = "소환수";
HEALBOT_OPTIONS_SHOWTOOLTIP = "툴팁 표시";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "주문 정보 표시";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "대상 정보 표시";
@@ -321,7 +333,6 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_WORDS_TO = "~";
HEALBOT_WORDS_CAST = "시전"
HEALBOT_WORDS_FOR = "for";
end
+28 -2
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 = {},
@@ -32,11 +58,11 @@ function HealBot_Model:RegisterObserver(event, callback)
table.insert(self.observers[event], callback)
end
function HealBot_Model:NotifyObservers(event, unitID, ...)
function HealBot_Model:NotifyObservers(event, unitID, arg1, arg2)
if self.observers[event] then
local len = table.getn(self.observers[event])
for i = 1, len do
self.observers[event][i](unitID, unpack(arg))
self.observers[event][i](unitID, arg1, arg2)
end
end
end
+93 -1502
View File
File diff suppressed because it is too large Load Diff
+37 -2575
View File
File diff suppressed because it is too large Load Diff
+118
View File
@@ -0,0 +1,118 @@
-- HealBot Options panel file: HealBot_Options_Buffs.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_BuffWatch_OnClick(self)
local frame = self or this
HealBot_Config.BuffWatch = frame:GetChecked() or 0;
if HealBot_Config.BuffWatch == 0 then
HealBot_Options_BuffWatchInCombat:Disable()
else
HealBot_Options_BuffWatchInCombat:Enable()
end
HealBot_RecalcParty();
end
function HealBot_Options_BuffWatchInCombat_OnClick(self)
local frame = self or this
HealBot_Config.BuffWatchInCombat = frame:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_BuffSelf_OnLoad(self)
local frame = self or this
getglobal(this:GetName().."Text"):SetText("Self Only")
local id = this:GetID()
if HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[id] then
local isSelf = (HealBot_Config.BuffWatchSelf[id] == 1)
this:SetChecked(isSelf and 1 or nil)
else
this:SetChecked(nil)
end
end
function HealBot_Options_BuffSelf_OnClick(self)
local frame = self or this
local id = this:GetID()
if not HealBot_Config.BuffWatchSelf then
HealBot_Config.BuffWatchSelf = {0,0,0,0,0,0,0,0}
end
if frame:GetChecked() then
HealBot_Config.BuffWatchSelf[id] = 1
else
HealBot_Config.BuffWatchSelf[id] = 0
end
HealBot_RecalcParty();
end
function HealBot_Options_Buff_OnLoad(self)
local frame = self or this
UIDropDownMenu_Initialize(frame, HealBot_Options_Buff_Initialize)
UIDropDownMenu_SetWidth(110, frame)
end
function HealBot_Options_Buff_Initialize()
local myClass = UnitClass("player")
local info
info = { text = "None", func = HealBot_Options_Buff_OnClick, value = 0 }
UIDropDownMenu_AddButton(info)
if HealBot_Buff_Spells[myClass] then
for i, spellName in ipairs(HealBot_Buff_Spells[myClass]) do
info = {
text = spellName,
func = HealBot_Options_Buff_OnClick,
value = i
}
UIDropDownMenu_AddButton(info)
end
end
end
function HealBot_Options_Buff_OnClick()
local frameName = UIDROPDOWNMENU_OPEN_MENU
local frame = getglobal(frameName)
local myClass = UnitClass("player")
local id = frame:GetID()
if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end
if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end
HealBot_Config.BuffDropDowns[myClass][id] = this.value
local text = "None"
if this.value > 0 then
text = HealBot_Buff_Spells[myClass][this.value]
end
HealBot_UIDropDownMenu_SetSelectedID(frame, this.value + 1)
UIDropDownMenu_SetText(text, frame)
HealBot_RecalcParty();
end
function HealBot_Options_SetBuffs()
local myClass = UnitClass("player")
if HealBot_Options_BuffWatch then
HealBot_Options_BuffWatch:SetChecked(HealBot_Config.BuffWatch)
HealBot_Options_BuffWatchInCombat:SetChecked(HealBot_Config.BuffWatchInCombat)
if HealBot_Config.BuffWatch == 0 then
HealBot_Options_BuffWatchInCombat:Disable()
else
HealBot_Options_BuffWatchInCombat:Enable()
end
end
if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end
if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end
for i = 1, 8 do
local dropDown = getglobal("HealBot_Options_Buff" .. i)
if dropDown then
local val = HealBot_Config.BuffDropDowns[myClass][i] or 0
UIDropDownMenu_Initialize(dropDown, HealBot_Options_Buff_Initialize)
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
local isSelf = (HealBot_Config.BuffWatchSelf[i] == 1)
selfCheck:SetChecked(isSelf and 1 or nil)
else
selfCheck:SetChecked(nil)
end
end
end
end
+372
View File
@@ -0,0 +1,372 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Buffs.lua" />
<Frame name="HealBot_Options_Panel6" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_BuffFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="330"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-35"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_BuffPanel_Text" text="Buff Settings" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="15" y="10" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<CheckButton name="HealBot_Options_BuffWatch" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffFrame" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="15" y="-15"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_BUFFWATCH)</OnLoad>
<OnClick>HealBot_Options_BuffWatch_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_BuffWatchInCombat" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffWatch" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="20" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_BUFFWATCHINCOMBAT)</OnLoad>
<OnClick>HealBot_Options_BuffWatchInCombat_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff1" inherits="UIDropDownMenuTemplate" id="1">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff1Text" text="HEALBOT_OPTIONS_BUFF1" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffWatchInCombat" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-15" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff1Self" inherits="OptionsCheckButtonTemplate" id="1">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff2" inherits="UIDropDownMenuTemplate" id="2">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff2Text" text="HEALBOT_OPTIONS_BUFF2" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff2Self" inherits="OptionsCheckButtonTemplate" id="2">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff2" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff3" inherits="UIDropDownMenuTemplate" id="3">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff3Text" text="HEALBOT_OPTIONS_BUFF3" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff2" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff3Self" inherits="OptionsCheckButtonTemplate" id="3">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff3" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff4" inherits="UIDropDownMenuTemplate" id="4">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff4Text" text="HEALBOT_OPTIONS_BUFF4" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff3" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff4Self" inherits="OptionsCheckButtonTemplate" id="4">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff4" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff5" inherits="UIDropDownMenuTemplate" id="5">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff5Text" text="HEALBOT_OPTIONS_BUFF5" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffWatchInCombat" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="160" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff5Self" inherits="OptionsCheckButtonTemplate" id="5">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff5" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff6" inherits="UIDropDownMenuTemplate" id="6">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff6Text" text="HEALBOT_OPTIONS_BUFF6" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff5" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff6Self" inherits="OptionsCheckButtonTemplate" id="6">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff6" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff7" inherits="UIDropDownMenuTemplate" id="7">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff7Text" text="HEALBOT_OPTIONS_BUFF7" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff6" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff7Self" inherits="OptionsCheckButtonTemplate" id="7">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff7" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff8" inherits="UIDropDownMenuTemplate" id="8">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff8Text" text="HEALBOT_OPTIONS_BUFF8" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff7" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff8Self" inherits="OptionsCheckButtonTemplate" id="8">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff8" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Ui>
+289
View File
@@ -0,0 +1,289 @@
-- HealBot Options panel file: HealBot_Options_CDC.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_ShowDebuffWarning_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowDebuffWarning_OnClick(this)
HealBot_Config.ShowDebuffWarning = this:GetChecked() or 0;
end
function HealBot_Options_SoundDebuffWarning_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_SoundDebuffWarning_OnClick(this)
HealBot_Config.SoundDebuffWarning = this:GetChecked() or 0;
if HealBot_Config.SoundDebuffWarning==0 then
HealBot_WarningSound1:Disable();
HealBot_WarningSound2:Disable();
HealBot_WarningSound3:Disable();
else
HealBot_WarningSound1:Enable();
HealBot_WarningSound2:Enable();
HealBot_WarningSound3:Enable();
end
end
function HealBot_WarningSound_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_WarningSound_OnClick(this,id)
if HealBot_Config.SoundDebuffPlay>0 then
getglobal("HealBot_WarningSound"..HealBot_Config.SoundDebuffPlay):SetChecked(nil);
end
HealBot_Config.SoundDebuffPlay = id;
if HealBot_Config.SoundDebuffPlay>0 then
getglobal("HealBot_WarningSound"..HealBot_Config.SoundDebuffPlay):SetChecked(1);
if this then
HealBot_PlaySound(HealBot_Config.SoundDebuffPlay)
end
end
end
function HealBot_Options_CDCMonitor_DropDown()
for i=1, getn(HealBot_Options_EmergencyFilter_List), 1 do
local info = {};
info.text = HealBot_Options_EmergencyFilter_List[i];
info.func = HealBot_Options_CDCMonitor_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_CDCMonitor_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_CDCMonitor,HealBot_Options_CDCMonitor_DropDown)
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 !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCMonitor,HealBot_Config.CDCMonitor)
end
function HealBot_Options_CDCMonitor_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCMonitor_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_CDCMonitor_OnSelect()
HealBot_Config.CDCMonitor = this:GetID()
HealBot_Options_CDCMonitor_Refresh(true)
HealBot_Options_CDCMonitor_Reset()
end
function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_DRUID] = 0;
HealBot_CDCInc[HEALBOT_HUNTER] = 0;
HealBot_CDCInc[HEALBOT_MAGE] = 0;
HealBot_CDCInc[HEALBOT_PALADIN] = 0;
HealBot_CDCInc[HEALBOT_PRIEST] = 0;
HealBot_CDCInc[HEALBOT_ROGUE] = 0;
HealBot_CDCInc[HEALBOT_SHAMAN] = 0;
HealBot_CDCInc[HEALBOT_WARLOCK] = 0;
HealBot_CDCInc[HEALBOT_WARRIOR] = 0;
if HealBot_Config.CDCMonitor==2 then
HealBot_CDCInc[HEALBOT_DRUID] = 1;
HealBot_CDCInc[HEALBOT_HUNTER] = 1;
HealBot_CDCInc[HEALBOT_MAGE] = 1;
HealBot_CDCInc[HEALBOT_PALADIN] = 1;
HealBot_CDCInc[HEALBOT_PRIEST] = 1;
HealBot_CDCInc[HEALBOT_ROGUE] = 1;
HealBot_CDCInc[HEALBOT_SHAMAN] = 1;
HealBot_CDCInc[HEALBOT_WARLOCK] = 1;
HealBot_CDCInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.CDCMonitor==3 then
HealBot_CDCInc[HEALBOT_DRUID] = 1;
elseif HealBot_Config.CDCMonitor==4 then
HealBot_CDCInc[HEALBOT_HUNTER] = 1;
elseif HealBot_Config.CDCMonitor==5 then
HealBot_CDCInc[HEALBOT_MAGE] = 1;
elseif HealBot_Config.CDCMonitor==6 then
HealBot_CDCInc[HEALBOT_PALADIN] = 1;
elseif HealBot_Config.CDCMonitor==7 then
HealBot_CDCInc[HEALBOT_PRIEST] = 1;
elseif HealBot_Config.CDCMonitor==8 then
HealBot_CDCInc[HEALBOT_ROGUE] = 1;
elseif HealBot_Config.CDCMonitor==9 then
HealBot_CDCInc[HEALBOT_SHAMAN] = 1;
elseif HealBot_Config.CDCMonitor==10 then
HealBot_CDCInc[HEALBOT_WARLOCK] = 1;
elseif HealBot_Config.CDCMonitor==11 then
HealBot_CDCInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.CDCMonitor==12 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncMelee[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE];
HealBot_CDCInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncMelee[HEALBOT_PALADIN];
HealBot_CDCInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncMelee[HEALBOT_PRIEST];
HealBot_CDCInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncMelee[HEALBOT_ROGUE];
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==13 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE];
HealBot_CDCInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncRange[HEALBOT_PALADIN];
HealBot_CDCInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncRange[HEALBOT_PRIEST];
HealBot_CDCInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncRange[HEALBOT_ROGUE];
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==14 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE];
HealBot_CDCInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncHealers[HEALBOT_PALADIN];
HealBot_CDCInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncHealers[HEALBOT_PRIEST];
HealBot_CDCInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncHealers[HEALBOT_ROGUE];
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==15 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE];
HealBot_CDCInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncCustom[HEALBOT_PALADIN];
HealBot_CDCInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncCustom[HEALBOT_PRIEST];
HealBot_CDCInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncCustom[HEALBOT_ROGUE];
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncCustom[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR];
end
HealBot_Action_PartyChanged()
end
function HealBot_Options_GetDebuffSpells_List(class)
local DebuffSpells = HealBot_Debuff_Spells[class];
return DebuffSpells;
end
function HealBot_Options_CDCButLeft_DropDown()
local classEN=HealBot_UnitClass("player")
if classEN=="PRIEST" or classEN=="DRUID" or classEN=="PALADIN" or classEN=="SHAMAN" then
local class=UnitClass("Player");
local DebuffSpells_List = HealBot_Options_GetDebuffSpells_List(class)
local info = {};
info.text = "None";
info.func = HealBot_Options_CDCButLeft_OnSelect;
UIDropDownMenu_AddButton(info);
for i=1, getn(DebuffSpells_List), 1 do
local spell=HealBot_GetSpellName(HealBot_GetSpellId(DebuffSpells_List[i]));
if spell then
local info = {};
info.text = spell;
info.func = HealBot_Options_CDCButLeft_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
end
end
function HealBot_Options_CDCButRight_DropDown()
local classEN=HealBot_UnitClass("player")
if classEN=="PRIEST" or classEN=="DRUID" or classEN=="PALADIN" or classEN=="SHAMAN" then
local class=UnitClass("Player");
local DebuffSpells_List = HealBot_Options_GetDebuffSpells_List(class)
local info = {};
info.text = "None";
info.func = HealBot_Options_CDCButRight_OnSelect;
UIDropDownMenu_AddButton(info);
for i=1, getn(DebuffSpells_List), 1 do
local spell=HealBot_GetSpellName(HealBot_GetSpellId(DebuffSpells_List[i]));
if spell then
local info = {};
info.text = spell;
info.func = HealBot_Options_CDCButRight_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
end
end
function HealBot_Options_CDCButLeft_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_CDCButLeft,HealBot_Options_CDCButLeft_DropDown)
end
function HealBot_Options_CDCButRight_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_CDCButRight,HealBot_Options_CDCButRight_DropDown)
end
function HealBot_Options_CDCButLeft_Refresh(onselect)
local set_id=1;
local class=UnitClass("Player");
if not onselect then HealBot_Options_CDCButLeft_Initialize() end
set_id = HealBot_Config.Debuff_Left[class];
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];
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButRight,set_id)
end
function HealBot_Options_CDCButLeft_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCButLeft_DropDown)
UIDropDownMenu_SetWidth(140, this)
end
function HealBot_Options_CDCButRight_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCButRight_DropDown)
UIDropDownMenu_SetWidth(140, this)
end
function HealBot_Options_CDCButLeft_OnSelect()
local class=UnitClass("Player");
HealBot_Config.Debuff_Left[class] = this:GetID();
HealBot_Options_CDCButLeft_Refresh(true)
HealBot_Config.CDCLeftText[class]=HealBot_Options_CDCButLeftText:GetText();
if this:GetID()>1 then
HealBot_Options_CDC_SetCombo(HealBot_Options_CDCButLeftText:GetText(), "Left", class)
end
HealBot_DebuffPriority = HealBot_Debuff_Types[HealBot_Options_CDCButLeftText:GetText()];
HealBot_Options_Debuff_Reset()
end
function HealBot_Options_CDCButRight_OnSelect()
local class=UnitClass("Player");
HealBot_Config.Debuff_Right[class] = this:GetID();
HealBot_Options_CDCButRight_Refresh(true)
HealBot_Config.CDCRightText[class]=HealBot_Options_CDCButRightText:GetText();
if this:GetID()>1 then
HealBot_Options_CDC_SetCombo(HealBot_Options_CDCButRightText:GetText(), "Right", class)
end
HealBot_Options_Debuff_Reset()
end
function HealBot_Options_CDC_SetCombo(spell, button, class)
local combo = HealBot_Config.KeyCombo[class]
combo["Alt"..button] = spell
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_Debuff_Reset()
local classEN=HealBot_UnitClass("player")
if classEN=="PRIEST" or classEN=="DRUID" or classEN=="PALADIN" or classEN=="SHAMAN" then
local spell = HealBot_Config.CDCLeftText[UnitClass("player")];
HealBot_DebuffWatch = {[HEALBOT_DISEASE_en]="NO", [HEALBOT_MAGIC_en]="NO", [HEALBOT_POISON_en]="NO", [HEALBOT_CURSE_en]="NO" }
if spell ~= "None" then
table.foreach(HealBot_Debuff_Types[spell], function (index,debuff)
HealBot_DebuffWatch[debuff]="YES";
end)
end
spell = HealBot_Config.CDCRightText[UnitClass("player")];
if spell ~= "None" then
table.foreach(HealBot_Debuff_Types[spell], function (index,debuff)
HealBot_DebuffWatch[debuff]="YES";
end)
end
end
end
function HealBot_Colorpick_OnClick(CDCType)
HealBot_ColourObjWaiting=CDCType;
HealBot_UseColourPick(HealBot_Config.CDCBarColour[CDCType].R,HealBot_Config.CDCBarColour[CDCType].G,HealBot_Config.CDCBarColour[CDCType].B, nil)
end
function HealBot_SetCDCBarColours()
HealBot_DiseaseColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].R,
HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].G,
HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
HealBot_MagicColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_MAGIC_en].R,
HealBot_Config.CDCBarColour[HEALBOT_MAGIC_en].G,
HealBot_Config.CDCBarColour[HEALBOT_MAGIC_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
HealBot_PoisonColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_POISON_en].R,
HealBot_Config.CDCBarColour[HEALBOT_POISON_en].G,
HealBot_Config.CDCBarColour[HEALBOT_POISON_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
HealBot_CurseColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_CURSE_en].R,
HealBot_Config.CDCBarColour[HEALBOT_CURSE_en].G,
HealBot_Config.CDCBarColour[HEALBOT_CURSE_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
HealBot_DebTextColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].R,
HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].G,
HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin])
end
+450
View File
@@ -0,0 +1,450 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_CDC.lua" />
<Frame name="HealBot_Options_Panel4" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_CDCMonitor" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="170" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCCLASS">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-105" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> HealBot_Options_CDCMonitor_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_CureDispelCleanse" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="110"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-75"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-75"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_CDCBut_Text" text="HEALBOT_OPTIONS_CDCBUTTONS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="105" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<Frame name="HealBot_Options_CDCButLeft" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="100" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCLEFT">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="40" y="-42"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_CDCButLeft_OnLoad(this)
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_CDCButRight" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="100" y="-67" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCRIGHT">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="40" y="-74"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_CDCButRight_OnLoad(this)
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_CureDispelCleanseCol" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="95"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-185"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-190"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_CDCCol_Text" text="HEALBOT_OPTIONS_CDCBARS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="98" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<Button name="HealBot_DiseaseColorpickb">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="81" y="-55"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Colorpick_OnClick(HEALBOT_DISEASE_en)</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_DiseaseColorpick" inherits="TextStatusBar">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="81" y="-55"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_DISEASE">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_DiseaseColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_MagicColorpickb">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_DiseaseColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Colorpick_OnClick(HEALBOT_MAGIC_en)</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_MagicColorpick" inherits="TextStatusBar">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_DiseaseColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_MAGIC">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_MagicColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_PoisonColorpickb">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_DiseaseColorpick" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="65" y="-45"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Colorpick_OnClick(HEALBOT_POISON_en)</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_PoisonColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_DiseaseColorpick" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="65" y="-45"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_POISON">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_PoisonColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_CurseColorpickb">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_PoisonColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Colorpick_OnClick(HEALBOT_CURSE_en)</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_CurseColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_PoisonColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_CURSE">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_CurseColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Frame name="HealBot_Options_CureDispelCleanseWarn" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="120"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-285"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-290"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_CDCWarn_Text" text="HEALBOT_OPTIONS_CDCWARNINGS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="98" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<CheckButton name="HealBot_Options_ShowDebuffWarning" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanseWarn" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="25" y="90" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowDebuffWarning_OnLoad(this,HEALBOT_OPTIONS_SHOWDEBUFFWARNING)</OnLoad>
<OnClick>HealBot_Options_ShowDebuffWarning_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_SoundDebuffWarning" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowDebuffWarning" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_SoundDebuffWarning_OnLoad(this,HEALBOT_OPTIONS_SOUNDDEBUFFWARNING)</OnLoad>
<OnClick>HealBot_Options_SoundDebuffWarning_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_WarningSound1" inherits="SendMailRadioButtonTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_SoundDebuffWarning" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND1)</OnLoad>
<OnClick>HealBot_WarningSound_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_WarningSound2" inherits="SendMailRadioButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_WarningSound1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="55" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND2)</OnLoad>
<OnClick>HealBot_WarningSound_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_WarningSound3" inherits="SendMailRadioButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_WarningSound2" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="65" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND3)</OnLoad>
<OnClick>HealBot_WarningSound_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Ui>
+79
View File
@@ -0,0 +1,79 @@
-- HealBot Options panel file: HealBot_Options_Chat.lua
-- Split from original HealBot_Options.lua
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 = "", Message = "Casting #Spell# on #Target#", Channel = "None" }
end
local current = HealBot_Config.ChatMessages[id].Channel
local nextChan = "None"
if current == "None" then
nextChan = "Say"
elseif current == "Say" then
nextChan = "Party"
elseif current == "Party" then
nextChan = "Raid"
elseif current == "Raid" then
nextChan = "Whisper"
elseif current == "Whisper" then
nextChan = "None"
end
HealBot_Config.ChatMessages[id].Channel = nextChan
buttonFrame:SetText(nextChan)
end
function HealBot_Options_SetChatMessages()
if not HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages = {}
end
for i = 1, 5 do
if not HealBot_Config.ChatMessages[i] then
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 spellEdit = getglobal("HealBot_Options_ChatMsg"..i.."_Spell")
local textEdit = getglobal("HealBot_Options_ChatMsg"..i.."_Text")
local chanButton = getglobal("HealBot_Options_ChatMsg"..i.."_Channel")
if spellEdit then
if msgConfig.Spell == "None" then
spellEdit:SetText("")
msgConfig.Spell = ""
else
spellEdit:SetText(msgConfig.Spell or "")
end
end
if textEdit then
textEdit:SetText(msgConfig.Message or "")
end
if chanButton then
chanButton:SetText(msgConfig.Channel or "None")
end
end
end
end
+289
View File
@@ -0,0 +1,289 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Chat.lua" />
<Frame name="HealBot_Options_Panel7" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<!-- Chat Message 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="25" y="-30" />
</Offset>
</Anchor>
</Anchors>
<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="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg1_Spell" relativePoint="RIGHT">
<Offset>
<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>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[1].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- 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="LEFT" relativeTo="HealBot_Options_ChatMsg2_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(2, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg2_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg2_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[2].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- 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="LEFT" relativeTo="HealBot_Options_ChatMsg3_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(3, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg3_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg3_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[3].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- 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="LEFT" relativeTo="HealBot_Options_ChatMsg4_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(4, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg4_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg4_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[4].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- 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="LEFT" relativeTo="HealBot_Options_ChatMsg5_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(5, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg5_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg5_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[5].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
</Frames>
</Frame>
</Ui>
+292
View File
@@ -0,0 +1,292 @@
-- HealBot Options panel file: HealBot_Options_General.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_ShowHeaders_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_SHOWHEADERS);
end
function HealBot_Options_ShowHeaders_OnClick(this)
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)
HealBot_Config.btexture[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarHeightS_OnValueChanged(this)
HealBot_Config.bheight[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarWidthS_OnValueChanged(this)
HealBot_Config.bwidth[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarNumColsS_OnValueChanged(this)
HealBot_Config.numcols[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarBRSpaceS_OnValueChanged(this)
HealBot_Config.brspace[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarBCSpaceS_OnValueChanged(this)
HealBot_Config.bcspace[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_FontHeight_OnValueChanged(this)
HealBot_Config.btextheight[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_AbortBarSize_OnValueChanged(this)
HealBot_Config.abortsize[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_ActionAlpha_OnValueChanged(this)
HealBot_Config.backcola[HealBot_Config.Current_Skin] = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarAlpha_OnValueChanged(this)
HealBot_Config.Barcola[HealBot_Config.Current_Skin] = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarAlphaInHeal_OnValueChanged(this)
HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin] = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarAlphaDis_OnValueChanged(this)
HealBot_Config.bardisa[HealBot_Config.Current_Skin] = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_ResetSkin()
end
function HealBot_SkinColorpick_OnClick(SkinType)
HealBot_ColourObjWaiting=SkinType;
if SkinType=="En" then
HealBot_UseColourPick(HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin],
HealBot_Config.btextenabledcolg[HealBot_Config.Current_Skin],
HealBot_Config.btextenabledcolb[HealBot_Config.Current_Skin],
HealBot_Config.btextenabledcola[HealBot_Config.Current_Skin]);
elseif SkinType=="Dis" then
HealBot_UseColourPick(HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin],
HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin],
HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin],
HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin])
elseif SkinType=="Debuff" then
HealBot_UseColourPick(HealBot_Config.btextcursecolr[HealBot_Config.Current_Skin],
HealBot_Config.btextcursecolg[HealBot_Config.Current_Skin],
HealBot_Config.btextcursecolb[HealBot_Config.Current_Skin],
HealBot_Config.btextcursecola[HealBot_Config.Current_Skin])
elseif SkinType=="Back" then
HealBot_UseColourPick(HealBot_Config.backcolr[HealBot_Config.Current_Skin],
HealBot_Config.backcolg[HealBot_Config.Current_Skin],
HealBot_Config.backcolb[HealBot_Config.Current_Skin],
HealBot_Config.backcola[HealBot_Config.Current_Skin])
elseif SkinType=="Bor" then
HealBot_UseColourPick(HealBot_Config.borcolr[HealBot_Config.Current_Skin],
HealBot_Config.borcolg[HealBot_Config.Current_Skin],
HealBot_Config.borcolb[HealBot_Config.Current_Skin],
HealBot_Config.borcola[HealBot_Config.Current_Skin])
elseif SkinType=="Abort" then
HealBot_UseColourPick(HealBot_Config.babortcolr[HealBot_Config.Current_Skin],
HealBot_Config.babortcolg[HealBot_Config.Current_Skin],
HealBot_Config.babortcolb[HealBot_Config.Current_Skin],
HealBot_Config.babortcola[HealBot_Config.Current_Skin])
end
end
function HealBot_SetSkinColours()
-- Cache the current skin configuration for performance and readability
local skin = HealBot_Config.Current_Skin
local btextheight = HealBot_Config.btextheight[skin] or 10
-- 1. Set Status Bar Colors (Green with variations based on configuration)
local alpha = HealBot_Config.Barcola[skin]
local inHealAlpha = alpha * (HealBot_Config.BarcolaInHeal[skin] or 1)
local disabledAlpha = HealBot_Config.bardisa[skin]
HealBot_EnTextColorpick:SetStatusBarColor(0, 1, 0, alpha)
HealBot_EnTextColorpickin:SetStatusBarColor(0, 1, 0, inHealAlpha)
HealBot_DisTextColorpick:SetStatusBarColor(0, 1, 0, disabledAlpha)
-- 2. Set Text Colors
HealBot_EnTextColorpickt:SetTextColor(
HealBot_Config.btextenabledcolr[skin], HealBot_Config.btextenabledcolg[skin],
HealBot_Config.btextenabledcolb[skin], HealBot_Config.btextenabledcola[skin]
)
HealBot_DisTextColorpickt:SetTextColor(
HealBot_Config.btextdisbledcolr[skin], HealBot_Config.btextdisbledcolg[skin],
HealBot_Config.btextdisbledcolb[skin], HealBot_Config.btextdisbledcola[skin]
)
HealBot_DebTextColorpickt:SetTextColor(
HealBot_Config.btextcursecolr[skin], HealBot_Config.btextcursecolg[skin],
HealBot_Config.btextcursecolb[skin], HealBot_Config.btextcursecola[skin]
)
-- 3. Set Preview Component Colors
local bgR, bgG, bgB, bgA = HealBot_Config.backcolr[skin], HealBot_Config.backcolg[skin], HealBot_Config.backcolb[skin], HealBot_Config.backcola[skin]
local borderR, borderG, borderB, borderA = HealBot_Config.borcolr[skin], HealBot_Config.borcolg[skin], HealBot_Config.borcolb[skin], HealBot_Config.borcola[skin]
HealBot_BackgroundColorpick:SetStatusBarColor(bgR, bgG, bgB, bgA)
HealBot_BorderColorpick:SetStatusBarColor(borderR, borderG, borderB, borderA)
HealBot_AbortColorpick:SetStatusBarColor(
HealBot_Config.babortcolr[skin], HealBot_Config.babortcolg[skin],
HealBot_Config.babortcolb[skin], HealBot_Config.babortcola[skin]
)
-- 4. Setup Main Panel Backdrop (Fixed scoping bugs)
local borderStyle = HealBot_Config.bborder[skin] or 2
local backdrop = {
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
tile = true,
tileSize = 8,
}
if borderStyle == 0 then
-- No border
backdrop.edgeFile = "Interface\\Buttons\\WHITE8X8"
backdrop.edgeSize = 1
backdrop.insets = { left = 1, right = 1, top = 1, bottom = 1 }
HealBot_Action:SetBackdrop(backdrop)
HealBot_Action:SetBackdropBorderColor(0, 0, 0, 0)
HealBot_Action:SetBackdropColor(bgR, bgG, bgB, bgA)
elseif borderStyle == 1 then
-- Custom flat border
local bboffset = (HealBot_Config.bboffset and HealBot_Config.bboffset[skin]) or 1
local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[skin]) or 10
backdrop.edgeFile = "Interface\\Buttons\\WHITE8X8"
backdrop.edgeSize = bboffset
backdrop.insets = { left = bpadding, right = bpadding, top = bpadding, bottom = bpadding }
HealBot_Action:SetBackdrop(backdrop)
HealBot_Action:SetBackdropColor(bgR, bgG, bgB, bgA)
HealBot_Action:SetBackdropBorderColor(borderR, borderG, borderB, borderA)
else
-- Default Blizzard Tooltip Border
backdrop.edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border"
backdrop.edgeSize = 16
backdrop.insets = { left = 4, right = 4, top = 4, bottom = 4 }
HealBot_Action:SetBackdrop(backdrop)
HealBot_Action:SetBackdropColor(bgR, bgG, bgB, bgA)
HealBot_Action:SetBackdropBorderColor(borderR, borderG, borderB, borderA)
end
-- 5. Update Text Labels
HealBot_EnTextColorpickt:SetTextHeight(btextheight)
HealBot_DisTextColorpickt:SetTextHeight(btextheight)
HealBot_DebTextColorpickt:SetTextHeight(btextheight)
HealBot_EnTextColorpickt:SetText(HEALBOT_SKIN_ENTEXT)
HealBot_DisTextColorpickt:SetText(HEALBOT_SKIN_DISTEXT)
HealBot_DebTextColorpickt:SetText(HEALBOT_SKIN_DEBTEXT)
-- 6. Force UI redraw (Kept the scale hack since it addresses a specific engine quirk)
local barScale = HealBot_EnTextColorpick:GetScale()
HealBot_EnTextColorpick:SetScale(barScale + 0.01); HealBot_EnTextColorpick:SetScale(barScale)
HealBot_DisTextColorpick:SetScale(barScale + 0.01); HealBot_DisTextColorpick:SetScale(barScale)
HealBot_DebTextColorpick:SetScale(barScale + 0.01); HealBot_DebTextColorpick:SetScale(barScale)
HealBot_Action_PartyChanged()
end
function HealBot_Options_AlertLevel_OnValueChanged(this)
HealBot_Config.AlertLevel = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_Refresh();
end
function HealBot_Options_AutoShow_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_AUTOSHOW);
end
function HealBot_Options_AutoShow_OnClick(this)
HealBot_Config.AutoClose = this:GetChecked() or 0;
HealBot_Action_Refresh();
end
function HealBot_Options_PanelSounds_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_PANELSOUNDS);
end
function HealBot_Options_PanelSounds_OnClick(this)
HealBot_Config.PanelSounds = this:GetChecked() or 0;
end
function HealBot_Options_ActionMouseover_OnLoad(this, text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ActionMouseover_OnClick(this)
HealBot_Config.ActionMouseover = this:GetChecked() or 0;
end
function HealBot_Options_ActionLocked_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_ACTIONLOCKED);
end
function HealBot_Options_ActionLocked_OnClick(this)
HealBot_Config.ActionLocked = this:GetChecked() or 0;
end
function HealBot_Options_HideOptions_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_HideOptions_OnClick(this)
HealBot_Config.HideOptions = this:GetChecked() or 0;
HealBot_Action_PartyChanged();
end
function HealBot_Options_HideAbort_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_HideAbort_OnClick(this)
HealBot_Config.HideAbort = this:GetChecked() or 0;
HealBot_Action_PartyChanged();
end
function HealBot_Options_GrowUpwards_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_GrowUpwards_OnClick(this)
HealBot_Config.GrowUpwards = this:GetChecked() or 0;
HealBot_Action_PartyChanged();
end
function HealBot_Options_QualityRange_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_QualityRange_OnClick(this)
HealBot_Config.QualityRange = this:GetChecked() or 0;
HealBot_Action_PartyChanged();
end
function HealBot_Options_ProtectPvP_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ProtectPvP_OnClick(this)
HealBot_Config.ProtectPvP = this:GetChecked() or 0;
HealBot_Action_Refresh();
end
function HealBot_Options_FramePaddingS_OnValueChanged(this)
if not HealBot_Config.bpadding then HealBot_Config.bpadding = {} end
HealBot_Config.bpadding[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BorderThicknessS_OnValueChanged(this)
if not HealBot_Config.bboffset then HealBot_Config.bboffset = {} end
HealBot_Config.bboffset[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_HideParty_OnLoad(this, text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_HideParty_OnClick(this)
HealBot_Config.HideParty = this:GetChecked() or 0;
HealBot_Options_TogglePartyFrames();
end
function HealBot_Options_TogglePartyFrames()
if HealBot_Config.HideParty == 1 then
if HidePartyFrame then HidePartyFrame(); end
else
if ShowPartyFrame then ShowPartyFrame(); end
end
end
+273
View File
@@ -0,0 +1,273 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_General.lua" />
<Frame name="HealBot_Options_Panel1" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<CheckButton name="HealBot_Options_ActionLocked" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="31" y="-40" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ActionLocked_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_ActionLocked_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_GrowUpwards" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionLocked" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_GrowUpwards_OnLoad(this,HEALBOT_OPTIONS_GROWUPWARDS)</OnLoad>
<OnClick>HealBot_Options_GrowUpwards_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ActionMouseover" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ActionMouseover_OnLoad(this,"Hovercasting")</OnLoad>
<OnClick>HealBot_Options_ActionMouseover_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_AutoShow" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionLocked" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_AutoShow_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_AutoShow_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_PanelSounds" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_PanelSounds_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_PanelSounds_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_HideSolo" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionMouseover" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Hide when Solo");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.HideSolo = 1;
else
HealBot_Config.HideSolo = 0;
end
HealBot_Action_ShowFrame();
</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_GenFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="95"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-135"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-135"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_GeneralPanel_Text" text="HEALBOT_OPTIONS_PANEL_TEXT" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="130" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<CheckButton name="HealBot_Options_ShowManaBars" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Show Mana Bars");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ShowManaBars = 1;
else
HealBot_Config.ShowManaBars = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ManaBarsHealersOnly" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="180" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("For Healers Only");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ManaBarsHealersOnly = 1;
else
HealBot_Config.ManaBarsHealersOnly = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
<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>
<CheckButton name="HealBot_Options_HideOptions" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GenFrame" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="10" y="-10" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_HideOptions_OnLoad(this,HEALBOT_OPTIONS_HIDEOPTIONS)</OnLoad>
<OnClick>HealBot_Options_HideOptions_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_HideAbort" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideOptions" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_HideAbort_OnLoad(this,HEALBOT_OPTIONS_HIDEABORT)</OnLoad>
<OnClick>HealBot_Options_HideAbort_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_QualityRange" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideAbort" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_QualityRange_OnLoad(this,HEALBOT_OPTIONS_QUALITYRANGE)</OnLoad>
<OnClick>HealBot_Options_QualityRange_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ProtectPvP" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_QualityRange" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ProtectPvP_OnLoad(this,HEALBOT_OPTIONS_PROTECTPVP)</OnLoad>
<OnClick>HealBot_Options_ProtectPvP_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_HideParty" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ProtectPvP" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_HideParty_OnLoad(this,HEALBOT_OPTIONS_HIDEPARTY)</OnLoad>
<OnClick>HealBot_Options_HideParty_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Ui>
+367
View File
@@ -0,0 +1,367 @@
-- HealBot Options panel file: HealBot_Options_Healing.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_GroupHeals_OnLoad(this,text)
this.text = text
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_GroupHeals_OnClick(this)
HealBot_Config.GroupHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_TankHeals_OnLoad(this,text)
this.text = text
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_TankHeals_OnClick(this)
HealBot_Config.TankHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_TargetHeals_OnLoad(this,text)
this.text = text
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_TargetHeals_OnClick(this)
HealBot_Config.TargetHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_EmergencyHeals_OnLoad(this,text)
this.text = text
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_EmergencyHeals_OnClick(this)
HealBot_Config.EmergencyHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_OverHeal_OnValueChanged(this)
HealBot_Config.OverHeal = HealBot_Options_Pct_OnValueChanged(this);
end
function HealBot_Options_EFClass_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_EFClass_OnClick(this)
if HealBot_Config.EmergencyFClass==1 then
HealBot_Config.EmergIncMelee[HEALBOT_DRUID] = HealBot_Options_EFClassDruid:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_HUNTER] = HealBot_Options_EFClassHunter:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_MAGE] = HealBot_Options_EFClassMage:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_PALADIN] = HealBot_Options_EFClassPaladin:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_PRIEST] = HealBot_Options_EFClassPriest:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_ROGUE] = HealBot_Options_EFClassRogue:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN] = HealBot_Options_EFClassShaman:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
elseif HealBot_Config.EmergencyFClass==2 then
HealBot_Config.EmergIncRange[HEALBOT_DRUID] = HealBot_Options_EFClassDruid:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_HUNTER] = HealBot_Options_EFClassHunter:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_MAGE] = HealBot_Options_EFClassMage:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_PALADIN] = HealBot_Options_EFClassPaladin:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_PRIEST] = HealBot_Options_EFClassPriest:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_ROGUE] = HealBot_Options_EFClassRogue:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_SHAMAN] = HealBot_Options_EFClassShaman:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
elseif HealBot_Config.EmergencyFClass==3 then
HealBot_Config.EmergIncHealers[HEALBOT_DRUID] = HealBot_Options_EFClassDruid:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_HUNTER] = HealBot_Options_EFClassHunter:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_MAGE] = HealBot_Options_EFClassMage:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_PALADIN] = HealBot_Options_EFClassPaladin:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_PRIEST] = HealBot_Options_EFClassPriest:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_ROGUE] = HealBot_Options_EFClassRogue:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN] = HealBot_Options_EFClassShaman:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
elseif HealBot_Config.EmergencyFClass==4 then
HealBot_Config.EmergIncCustom[HEALBOT_DRUID] = HealBot_Options_EFClassDruid:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_HUNTER] = HealBot_Options_EFClassHunter:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_MAGE] = HealBot_Options_EFClassMage:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_PALADIN] = HealBot_Options_EFClassPaladin:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_PRIEST] = HealBot_Options_EFClassPriest:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_ROGUE] = HealBot_Options_EFClassRogue:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_SHAMAN] = HealBot_Options_EFClassShaman:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
end
if HealBot_Config.EmergIncMonitor>10 then
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,
HEALBOT_CLASSES_HEALERS,
HEALBOT_CLASSES_CUSTOM,
}
function HealBot_Options_EmergencyFClass_DropDown()
for i=1, getn(HealBot_Options_EmergencyFClass_List), 1 do
local info = {};
info.text = HealBot_Options_EmergencyFClass_List[i];
info.func = HealBot_Options_EmergencyFClass_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_EmergencyFClass_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_EmergencyFClass,HealBot_Options_EmergencyFClass_DropDown)
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 !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFClass,HealBot_Config.EmergencyFClass)
end
function HealBot_Options_EmergencyFClass_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_EmergencyFClass_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_EmergencyFClass_OnSelect()
HealBot_Config.EmergencyFClass = this:GetID()
HealBot_Options_EmergencyFClass_Refresh(true)
HealBot_Options_EFClass_Reset()
end
function HealBot_Options_EFClass_Reset()
if HealBot_Config.EmergencyFClass==1 then
HealBot_Options_EFClassDruid:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_DRUID]);
HealBot_Options_EFClassHunter:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_HUNTER]);
HealBot_Options_EFClassMage:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_MAGE]);
HealBot_Options_EFClassPaladin:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_PALADIN]);
HealBot_Options_EFClassPriest:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_PRIEST]);
HealBot_Options_EFClassRogue:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_ROGUE]);
HealBot_Options_EFClassShaman:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN]);
HealBot_Options_EFClassWarlock:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK]);
HealBot_Options_EFClassWarrior:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR]);
elseif HealBot_Config.EmergencyFClass==2 then
HealBot_Options_EFClassDruid:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_DRUID]);
HealBot_Options_EFClassHunter:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_HUNTER]);
HealBot_Options_EFClassMage:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_MAGE]);
HealBot_Options_EFClassPaladin:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_PALADIN]);
HealBot_Options_EFClassPriest:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_PRIEST]);
HealBot_Options_EFClassRogue:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_ROGUE]);
HealBot_Options_EFClassShaman:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_SHAMAN]);
HealBot_Options_EFClassWarlock:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_WARLOCK]);
HealBot_Options_EFClassWarrior:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_WARRIOR]);
elseif HealBot_Config.EmergencyFClass==3 then
HealBot_Options_EFClassDruid:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_DRUID]);
HealBot_Options_EFClassHunter:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_HUNTER]);
HealBot_Options_EFClassMage:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_MAGE]);
HealBot_Options_EFClassPaladin:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_PALADIN]);
HealBot_Options_EFClassPriest:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_PRIEST]);
HealBot_Options_EFClassRogue:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_ROGUE]);
HealBot_Options_EFClassShaman:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN]);
HealBot_Options_EFClassWarlock:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK]);
HealBot_Options_EFClassWarrior:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR]);
elseif HealBot_Config.EmergencyFClass==4 then
HealBot_Options_EFClassDruid:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_DRUID]);
HealBot_Options_EFClassHunter:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_HUNTER]);
HealBot_Options_EFClassMage:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_MAGE]);
HealBot_Options_EFClassPaladin:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_PALADIN]);
HealBot_Options_EFClassPriest:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_PRIEST]);
HealBot_Options_EFClassRogue:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_ROGUE]);
HealBot_Options_EFClassShaman:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_SHAMAN]);
HealBot_Options_EFClassWarlock:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK]);
HealBot_Options_EFClassWarrior:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR]);
end
end
--------------------------------------------------------------------------------
local HealBot_Options_ExtraSort_List = {
HEALBOT_SORTBY_NAME,
HEALBOT_SORTBY_CLASS,
HEALBOT_SORTBY_GROUP,
HEALBOT_SORTBY_MAXHEALTH,
}
function HealBot_Options_ExtraSort_DropDown()
for i=1, getn(HealBot_Options_ExtraSort_List), 1 do
local info = {};
info.text = HealBot_Options_ExtraSort_List[i];
info.func = HealBot_Options_ExtraSort_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_ExtraSort_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_ExtraSort,HealBot_Options_ExtraSort_DropDown)
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 !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_ExtraSort,HealBot_Config.ExtraOrder)
end
function HealBot_Options_ExtraSort_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_ExtraSort_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_ExtraSort_OnSelect()
HealBot_Config.ExtraOrder = this:GetID()
HealBot_Options_ExtraSort_Refresh(true)
HealBot_Action_PartyChanged()
end
--------------------------------------------------------------------------------
function HealBot_Options_EmergencyFilter_DropDown()
for i=1, getn(HealBot_Options_EmergencyFilter_List), 1 do
local info = {};
info.text = HealBot_Options_EmergencyFilter_List[i];
info.func = HealBot_Options_EmergencyFilter_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_EmergencyFilter_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_EmergencyFilter,HealBot_Options_EmergencyFilter_DropDown)
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 !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFilter,HealBot_Config.EmergIncMonitor)
end
function HealBot_Options_EmergencyFilter_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_EmergencyFilter_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_EmergencyFilter_OnSelect()
HealBot_Config.EmergIncMonitor = this:GetID()
HealBot_Options_EmergencyFilter_Refresh(true)
HealBot_Options_EmergencyFilter_Reset()
end
function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_DRUID] = 0;
HealBot_EmergInc[HEALBOT_HUNTER] = 0;
HealBot_EmergInc[HEALBOT_MAGE] = 0;
HealBot_EmergInc[HEALBOT_PALADIN] = 0;
HealBot_EmergInc[HEALBOT_PRIEST] = 0;
HealBot_EmergInc[HEALBOT_ROGUE] = 0;
HealBot_EmergInc[HEALBOT_SHAMAN] = 0;
HealBot_EmergInc[HEALBOT_WARLOCK] = 0;
HealBot_EmergInc[HEALBOT_WARRIOR] = 0;
if HealBot_Config.EmergIncMonitor==2 then
HealBot_EmergInc[HEALBOT_DRUID] = 1;
HealBot_EmergInc[HEALBOT_HUNTER] = 1;
HealBot_EmergInc[HEALBOT_MAGE] = 1;
HealBot_EmergInc[HEALBOT_PALADIN] = 1;
HealBot_EmergInc[HEALBOT_PRIEST] = 1;
HealBot_EmergInc[HEALBOT_ROGUE] = 1;
HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
HealBot_EmergInc[HEALBOT_WARLOCK] = 1;
HealBot_EmergInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.EmergIncMonitor==3 then
HealBot_EmergInc[HEALBOT_DRUID] = 1;
elseif HealBot_Config.EmergIncMonitor==4 then
HealBot_EmergInc[HEALBOT_HUNTER] = 1;
elseif HealBot_Config.EmergIncMonitor==5 then
HealBot_EmergInc[HEALBOT_MAGE] = 1;
elseif HealBot_Config.EmergIncMonitor==6 then
HealBot_EmergInc[HEALBOT_PALADIN] = 1;
elseif HealBot_Config.EmergIncMonitor==7 then
HealBot_EmergInc[HEALBOT_PRIEST] = 1;
elseif HealBot_Config.EmergIncMonitor==8 then
HealBot_EmergInc[HEALBOT_ROGUE] = 1;
elseif HealBot_Config.EmergIncMonitor==9 then
HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
elseif HealBot_Config.EmergIncMonitor==10 then
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];
HealBot_EmergInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncMelee[HEALBOT_PALADIN];
HealBot_EmergInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncMelee[HEALBOT_PRIEST];
HealBot_EmergInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncMelee[HEALBOT_ROGUE];
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==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];
HealBot_EmergInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncRange[HEALBOT_PALADIN];
HealBot_EmergInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncRange[HEALBOT_PRIEST];
HealBot_EmergInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncRange[HEALBOT_ROGUE];
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==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];
HealBot_EmergInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncHealers[HEALBOT_PALADIN];
HealBot_EmergInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncHealers[HEALBOT_PRIEST];
HealBot_EmergInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncHealers[HEALBOT_ROGUE];
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==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];
HealBot_EmergInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncCustom[HEALBOT_PALADIN];
HealBot_EmergInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncCustom[HEALBOT_PRIEST];
HealBot_EmergInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncCustom[HEALBOT_ROGUE];
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncCustom[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR];
end
HealBot_Action_PartyChanged()
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
+387
View File
@@ -0,0 +1,387 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Healing.lua" />
<Frame name="HealBot_Options_Panel3" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_HealTargetFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="88"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-30"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_HealButtons_Text" text="HEALBOT_OPTIONS_HEAL_BUTTONS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="100" y="-8" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<CheckButton name="HealBot_Options_GroupHeals" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-21" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_GroupHeals_OnLoad(this,HEALBOT_OPTIONS_GROUPHEALS)</OnLoad>
<OnClick>HealBot_Options_GroupHeals_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_TankHeals" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_TankHeals_OnLoad(this,HEALBOT_OPTIONS_TANKHEALS)</OnLoad>
<OnClick>HealBot_Options_TankHeals_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_TargetHeals" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="122" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_TargetHeals_OnLoad(this,HEALBOT_OPTIONS_TARGETHEALS)</OnLoad>
<OnClick>HealBot_Options_TargetHeals_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EmergencyHeals" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="122" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EmergencyHeals_OnLoad(this,HEALBOT_OPTIONS_EMERGENCYHEALS)</OnLoad>
<OnClick>HealBot_Options_EmergencyHeals_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
<Slider name="HealBot_Options_AlertLevel" inherits="HealBot_Options_SliderTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="45" y="-132" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_ALERTLEVEL)</OnLoad>
<OnValueChanged>HealBot_Options_AlertLevel_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_OverHeal" inherits="HealBot_Options_SliderTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_AlertLevel" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-27" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_OVERHEAL)</OnLoad>
<OnValueChanged>HealBot_Options_OverHeal_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Frame name="HealBot_Options_EmergencyFilter" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="155" y="-205" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_EMERGFILTER">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-110" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_EmergencyFilter_OnLoad(this)
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_ExtraSort" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="155" y="-238" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_EXTRASORT">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-110" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_ExtraSort_OnLoad(this)
</OnLoad>
</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>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="125"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-308"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Frames>
<Frame name="HealBot_Options_EmergencyFClass" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="128" y="-10" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_EMERGFCLASS">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-105" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> HealBot_Options_EmergencyFClass_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_EFClassDruid" inherits="SendMailRadioButtonTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EmergencyFClass" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-90" y="-8"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_DRUID)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassHunter" inherits="SendMailRadioButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassDruid" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_HUNTER)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassMage" inherits="SendMailRadioButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassHunter" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_MAGE)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassPaladin" inherits="SendMailRadioButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassDruid" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-8"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_PALADIN)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassPriest" inherits="SendMailRadioButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassPaladin" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_PRIEST)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassRogue" inherits="SendMailRadioButtonTemplate" id="6">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassPriest" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_ROGUE)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassShaman" inherits="SendMailRadioButtonTemplate" id="7">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassPaladin" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-8"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_SHAMAN)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassWarlock" inherits="SendMailRadioButtonTemplate" id="8">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassShaman" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_WARLOCK)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassWarrior" inherits="SendMailRadioButtonTemplate" id="9">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassWarlock" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_WARRIOR)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Frames>
</Frame>
</Ui>
+128
View File
@@ -0,0 +1,128 @@
-- HealBot Options panel file: HealBot_Options_Skins.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_NewSkin_OnTextChanged(this)
local text= this:GetText()
if string.len(text)>0 then
HealBot_Options_NewSkinb:Enable();
else
HealBot_Options_NewSkinb:Disable();
end
end
function HealBot_Options_NewSkinb_OnClick(this)
HealBot_Config.numcols[HealBot_Options_NewSkin:GetText()] = HealBot_Config.numcols[HealBot_Config.Current_Skin]
HealBot_Config.btexture[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btexture[HealBot_Config.Current_Skin]
HealBot_Config.bcspace[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bcspace[HealBot_Config.Current_Skin]
HealBot_Config.brspace[HealBot_Options_NewSkin:GetText()] = HealBot_Config.brspace[HealBot_Config.Current_Skin]
HealBot_Config.bwidth[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bwidth[HealBot_Config.Current_Skin]
HealBot_Config.bheight[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bheight[HealBot_Config.Current_Skin]
HealBot_Config.btextenabledcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin]
HealBot_Config.btextenabledcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextenabledcolg[HealBot_Config.Current_Skin]
HealBot_Config.btextenabledcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextenabledcolb[HealBot_Config.Current_Skin]
HealBot_Config.btextenabledcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextenabledcola[HealBot_Config.Current_Skin]
HealBot_Config.btextdisbledcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin]
HealBot_Config.btextdisbledcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin]
HealBot_Config.btextdisbledcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin]
HealBot_Config.btextdisbledcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin]
HealBot_Config.btextcursecolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextcursecolr[HealBot_Config.Current_Skin]
HealBot_Config.btextcursecolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextcursecolg[HealBot_Config.Current_Skin]
HealBot_Config.btextcursecolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextcursecolb[HealBot_Config.Current_Skin]
HealBot_Config.btextcursecola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextcursecola[HealBot_Config.Current_Skin]
HealBot_Config.backcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.backcola[HealBot_Config.Current_Skin]
HealBot_Config.Barcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.Barcola[HealBot_Config.Current_Skin]
HealBot_Config.BarcolaInHeal[HealBot_Options_NewSkin:GetText()] = HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]
HealBot_Config.backcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.backcolr[HealBot_Config.Current_Skin]
HealBot_Config.backcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.backcolg[HealBot_Config.Current_Skin]
HealBot_Config.backcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.backcolb[HealBot_Config.Current_Skin]
HealBot_Config.borcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.borcolr[HealBot_Config.Current_Skin]
HealBot_Config.borcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.borcolg[HealBot_Config.Current_Skin]
HealBot_Config.borcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.borcolb[HealBot_Config.Current_Skin]
HealBot_Config.borcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.borcola[HealBot_Config.Current_Skin]
HealBot_Config.btextheight[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextheight[HealBot_Config.Current_Skin]
HealBot_Config.bardisa[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bardisa[HealBot_Config.Current_Skin]
HealBot_Config.abortsize[HealBot_Options_NewSkin:GetText()] = HealBot_Config.abortsize[HealBot_Config.Current_Skin]
HealBot_Config.babortcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.babortcolr[HealBot_Config.Current_Skin]
HealBot_Config.babortcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.babortcolg[HealBot_Config.Current_Skin]
HealBot_Config.babortcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.babortcolb[HealBot_Config.Current_Skin]
HealBot_Config.babortcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.babortcola[HealBot_Config.Current_Skin]
HealBot_Config.ShowHeader[HealBot_Options_NewSkin:GetText()] = HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]
table.insert(HealBot_Skins,2,HealBot_Options_NewSkin:GetText())
HealBot_Config.Skin_ID = 2;
HealBot_Config.Skins = HealBot_Skins; HealBot_Config.Current_Skin = HealBot_Options_NewSkin:GetText();
HealBot_Options_SetSkins()
HealBot_Options_NewSkin:SetText("")
end
function HealBot_Options_DeleteSkin_OnClick(this)
if HealBot_Config.Current_Skin~=HEALBOT_SKINS_STD then
HealBot_Config.numcols[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btexture[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.bcspace[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.brspace[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.bwidth[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.bheight[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextenabledcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextenabledcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextenabledcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextenabledcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextdisbledcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextdisbledcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextdisbledcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextdisbledcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextcursecolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextcursecolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextcursecolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextcursecola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.backcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.Barcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.BarcolaInHeal[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.backcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.backcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.backcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.borcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.borcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.borcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.borcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextheight[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.bardisa[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.abortsize[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.ShowHeader[HealBot_Options_SkinsText:GetText()] = nil
table.remove(HealBot_Skins,HealBot_Config.Skin_ID)
HealBot_Config.Skin_ID = 1;
HealBot_Config.Skins = HealBot_Skins;
HealBot_Config.Current_Skin = HEALBOT_SKINS_STD;
HealBot_Options_SetSkins()
end
end
function HealBot_Options_Skins_DropDown()
for i=1, getn(HealBot_Skins), 1 do
local info = {};
info.text = HealBot_Skins[i];
info.func = HealBot_Options_Skins_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_Skins_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_Skins,HealBot_Options_Skins_DropDown)
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 !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_Skins,HealBot_Config.Skin_ID)
end
function HealBot_Options_Skins_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_Skins_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_Skins_OnSelect()
HealBot_Config.Skin_ID = this:GetID()
HealBot_Options_Skins_Refresh(true)
if this:GetID()>=1 then
HealBot_Config.Current_Skin = this:GetText()
HealBot_Options_SetSkins()
end
end
+676
View File
@@ -0,0 +1,676 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Skins.lua" />
<Frame name="HealBot_Options_Panel5" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_Skins" inherits="UIDropDownMenuTemplate" id="1">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_ScaleFrameText" text="HEALBOT_OPTIONS_SKINTEXT" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-45" y="-5" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="70" y="-28" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Skins_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<Button name="HealBot_Options_DeleteSkin" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_DELSKIN">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Skins" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="7" y="-1"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Options_DeleteSkin_OnClick(this)</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_NewSkin" inherits="HealBot_Options_EditBoxTemplate">
<Size>
<AbsDimension x="100" y="20"/>
</Size>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_ScaleFrameText2" text="HEALBOT_OPTIONS_NEWSKINTEXT" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-70" y="-2" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Skins" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="25" y="-2"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
HealBot_Options_NewSkin_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_NewSkinb" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_SAVESKIN">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_NewSkin" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="32" y="2"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Options_NewSkinb_OnClick(this)</OnClick>
</Scripts>
</Button>
<Frame name="HealBot_Options_Scale" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="325"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-88"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-20" y="-180"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_ScaleFrameText3" text="HEALBOT_OPTIONS_SKINBARS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="50" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<CheckButton name="HealBot_Options_ShowHeaders" inherits="SendMailRadioButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="155" y="-8" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowHeaders_OnLoad(this,HEALBOT_OPTIONS_SHOWHEADERS)</OnLoad>
<OnClick>HealBot_Options_ShowHeaders_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_BarColorMode" inherits="SendMailRadioButtonTemplate">
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="290" y="-8" /></Offset></Anchor></Anchors>
<Scripts>
<OnLoad>getglobal(this:GetName().."Text"):SetText("Class Colors")</OnLoad>
<OnClick>HealBot_Config.bcolormode[HealBot_Config.Current_Skin] = (this:GetChecked() and 2 or 1); HealBot_Action_ResetSkin()</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_FontOutline" inherits="SendMailRadioButtonTemplate">
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="290" y="-33" /></Offset></Anchor></Anchors>
<Scripts>
<OnLoad>getglobal(this:GetName().."Text"):SetText("Font Outline")</OnLoad>
<OnClick>HealBot_Config.bfontoutline[HealBot_Config.Current_Skin] = (this:GetChecked() and 1 or 0); HealBot_Action_ResetSkin()</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_1pxBorders" inherits="SendMailRadioButtonTemplate">
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="290" y="-58" /></Offset></Anchor></Anchors>
<Scripts>
<OnLoad>getglobal(this:GetName().."Text"):SetText("1px Borders")</OnLoad>
<OnClick>HealBot_Config.bborder[HealBot_Config.Current_Skin] = (this:GetChecked() and 1 or 2); HealBot_Action_ResetSkin()</OnClick>
</Scripts>
</CheckButton>
<Slider name="HealBot_Options_BarTextureS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-40" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINTEXTURE,1,14)</OnLoad>
<OnValueChanged>HealBot_Options_BarTextureS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarNumColsS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="18" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarTextureS" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINNUMCOLS,1,8)</OnLoad>
<OnValueChanged>HealBot_Options_BarNumColsS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarHeightS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="18" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarTextureS" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-32" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINHEIGHT,10,100)</OnLoad>
<OnValueChanged>HealBot_Options_BarHeightS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarWidthS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarHeightS" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINWIDTH,50,225)</OnLoad>
<OnValueChanged>HealBot_Options_BarWidthS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarBRSpaceS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarHeightS" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-32" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINBRSPACE,0,10)</OnLoad>
<OnValueChanged>HealBot_Options_BarBRSpaceS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarBCSpaceS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBRSpaceS" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINBCSPACE,0,25)</OnLoad>
<OnValueChanged>HealBot_Options_BarBCSpaceS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_FramePaddingS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBRSpaceS" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,"Frame Padding",0,50)</OnLoad>
<OnValueChanged>HealBot_Options_FramePaddingS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BorderThicknessS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FramePaddingS" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,"Solid Border",1,10)</OnLoad>
<OnValueChanged>HealBot_Options_BorderThicknessS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarAlpha" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FramePaddingS" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad_MinMax(this,HEALBOT_OPTIONS_BARALPHA,0.25,1)</OnLoad>
<OnValueChanged>HealBot_Options_BarAlpha_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarAlphaInHeal" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlpha" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad_MinMax(this,HEALBOT_OPTIONS_BARALPHAINHEAL,0.05,0.75)</OnLoad>
<OnValueChanged>HealBot_Options_BarAlphaInHeal_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarAlphaDis" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlpha" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_BARALPHADIS)</OnLoad>
<OnValueChanged>HealBot_Options_BarAlphaDis_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_AbortBarSize" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlphaDis" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,"Abort size",0,15)</OnLoad>
<OnValueChanged>HealBot_Options_AbortBarSize_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_FontHeight" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlphaDis" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINFHEIGHT,7,18)</OnLoad>
<OnValueChanged>HealBot_Options_FontHeight_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Button name="HealBot_EnTextColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-15"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("En")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_EnTextColorpick" inherits="TextStatusBar">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-15"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString name="HealBot_EnTextColorpickt" inherits="GameFontNormalSmall" text="HEALBOT_SKIN_ENTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_EnTextColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(70); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<StatusBar name="HealBot_EnTextColorpickin" inherits="TextStatusBar">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-15"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_DisTextColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_EnTextColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Dis")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_DisTextColorpick" inherits="TextStatusBar">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_EnTextColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString name="HealBot_DisTextColorpickt" inherits="GameFontNormalSmall" text="HEALBOT_SKIN_DISTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_DisTextColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_DebTextColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_DisTextColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Debuff")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_DebTextColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_DisTextColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString name="HealBot_DebTextColorpickt" inherits="GameFontNormalSmall" text="HEALBOT_SKIN_DEBTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_DebTextColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_BackgroundColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_EnTextColorpick" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-25"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Back")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_BackgroundColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_EnTextColorpick" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-25"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_SKIN_BACKTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_BackgroundColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_BorderColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_BackgroundColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Bor")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_BorderColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_BackgroundColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_SKIN_BORDERTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_BorderColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_AbortColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_BorderColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Abort")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_AbortColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_BorderColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_ACTION_ABORT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_AbortColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
</Frames>
</Frame>
</Frames>
</Frame>
</Ui>
+199
View File
@@ -0,0 +1,199 @@
-- HealBot Options panel file: HealBot_Options_Spells.lua
-- Split from original HealBot_Options.lua
function HealBot_ComboButtons_Button_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_ComboButtons_Button_OnClick(this,id)
if HealBot_Options_ComboButtons_Button>0 then
getglobal("HealBot_ComboButtons_Button"..HealBot_Options_ComboButtons_Button):SetChecked(nil);
end
HealBot_Options_ComboButtons_Button = id;
if HealBot_Options_ComboButtons_Button>0 then
getglobal("HealBot_ComboButtons_Button"..HealBot_Options_ComboButtons_Button):SetChecked(1);
end
HealBot_Options_ComboClass_Text()
end
function HealBot_Options_ShowTooltip_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowTooltip_OnClick(this)
HealBot_Config.ShowTooltip = this:GetChecked() or 0;
end
function HealBot_Options_ShowTooltipTarget_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowTooltipTarget_OnClick(this)
HealBot_Config.Tooltip_ShowTarget = this:GetChecked() or 0;
end
function HealBot_Options_ShowTooltipSpellDetail_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowTooltipSpellDetail_OnClick(this)
HealBot_Config.Tooltip_ShowSpellDetail = this:GetChecked() or 0;
end
function HealBot_Options_ShowTooltipInstant_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowTooltipInstant_OnClick(this)
HealBot_Config.Tooltip_Recommend = this:GetChecked() or 0;
end
local HealBot_Options_TooltipPos_List = {
HEALBOT_TOOLTIP_POSDEFAULT,
HEALBOT_TOOLTIP_POSLEFT,
HEALBOT_TOOLTIP_POSRIGHT,
HEALBOT_TOOLTIP_POSABOVE,
HEALBOT_TOOLTIP_POSBELOW,
}
function HealBot_Options_TooltipPos_DropDown()
for i=1, getn(HealBot_Options_TooltipPos_List), 1 do
local info = {};
info.text = HealBot_Options_TooltipPos_List[i];
info.func = HealBot_Options_TooltipPos_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_TooltipPos_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_TooltipPos,HealBot_Options_TooltipPos_DropDown)
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 !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_TooltipPos,HealBot_Config.TooltipPos)
end
function HealBot_Options_TooltipPos_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_TooltipPos_DropDown)
UIDropDownMenu_SetWidth(128, this)
end
function HealBot_Options_TooltipPos_OnSelect()
HealBot_Config.TooltipPos = this:GetID()
HealBot_Options_TooltipPos_Refresh(true)
end
--------------------------------------------------------------------------------
local HealBot_Options_ComboClass_List = {
HEALBOT_DRUID,
HEALBOT_PALADIN,
HEALBOT_PRIEST,
HEALBOT_SHAMAN,
}
function HealBot_Options_ComboClass_Text()
local class=UnitClass("Player");
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
if combo then
HealBot_Options_Click:SetText(combo[button] or "")
HealBot_Options_Shift:SetText(combo["Shift"..button] or "")
HealBot_Options_Ctrl:SetText(combo["Ctrl"..button] or "")
HealBot_Options_ShiftCtrl:SetText(combo["ShiftCtrl"..button] or "")
end
end
function HealBot_Options_ComboClass_Button()
local button = "Left"
if HealBot_Options_ComboButtons_Button==2 then button = "Middle"; end
if HealBot_Options_ComboButtons_Button==3 then button = "Right"; end
if HealBot_Options_ComboButtons_Button==4 then button = "Button4"; end
if HealBot_Options_ComboButtons_Button==5 then button = "Button5"; end
return button;
end
ColorPickerFrame.func = HealBot_Returned_Colours
--------------------------------------------------------------------------------
function HealBot_Options_EditBox_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_Click_OnTextChanged(this)
local class=UnitClass("Player");
if not HealBot_Config.KeyCombo[class] then HealBot_Config.KeyCombo[class] = {} end
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
combo[button] = this:GetText()
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_Shift_OnTextChanged(this)
local class=UnitClass("Player");
if not HealBot_Config.KeyCombo[class] then HealBot_Config.KeyCombo[class] = {} end
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
combo["Shift"..button] = this:GetText()
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_Ctrl_OnTextChanged(this)
local class=UnitClass("Player");
if not HealBot_Config.KeyCombo[class] then HealBot_Config.KeyCombo[class] = {} end
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
combo["Ctrl"..button] = this:GetText()
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_ShiftCtrl_OnTextChanged(this)
local class=UnitClass("Player");
if not HealBot_Config.KeyCombo[class] then HealBot_Config.KeyCombo[class] = {} end
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
combo["ShiftCtrl"..button] = this:GetText()
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_KeyCombo_Change()
local class=UnitClass("Player");
HealBot_Config.KeyCombo[class]=HealBot_Config.KeyCombo[class];
end
function HealBot_Options_EnableHealthy_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_EnableHealthy_OnClick(this)
HealBot_Config.EnableHealthy = this:GetChecked() or 0;
HealBot_Action_EnableButtons();
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Chat Custom Messages UI Logic
--------------------------------------------------------------------------------
+308
View File
@@ -0,0 +1,308 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Spells.lua" />
<Frame name="HealBot_Options_Panel2" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_KeysFrame" inherits="OptionFrameBoxTemplate">
<Size>
<AbsDimension y="268"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-30"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_ComboButtons_ButtonText1" text="HEALBOT_OPTIONS_USEBUTTONS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="110" y="-10" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Slider name="HealBot_Options_Dummy" hidden="true" inherits="HealBot_Options_SliderTemplate">
<Anchors>
<Anchor point="TOP">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Slider>
<Frame name="HealBot_Options_ComboClassButton">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_ComboButtons_ButtonText" text="HEALBOT_OPTIONS_COMBOBUTTON" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Dummy" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-5" y="-25" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<CheckButton name="HealBot_ComboButtons_Button1" inherits="SendMailRadioButtonTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Dummy" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="40" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONLEFT)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button2" inherits="SendMailRadioButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="40" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONMIDDLE)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button3" inherits="SendMailRadioButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button2" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="50" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONRIGHT)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button4" inherits="SendMailRadioButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="0" y="-18"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTON4)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button5" inherits="SendMailRadioButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button4" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="55" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTON5)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<EditBox name="HealBot_Options_Click" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Dummy" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-5" y="-68"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_CLICK)
</OnLoad>
<OnTextChanged>
HealBot_Options_Click_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_Shift" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Click" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_SHIFT)
</OnLoad>
<OnTextChanged>
HealBot_Options_Shift_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_Ctrl" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_Shift" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_CTRL)
</OnLoad>
<OnTextChanged>
HealBot_Options_Ctrl_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_ShiftCtrl" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_Ctrl" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_SHIFTCTRL)
</OnLoad>
<OnTextChanged>
HealBot_Options_ShiftCtrl_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<CheckButton name="HealBot_Options_EnableHealthy" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShiftCtrl" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="25" y="-4" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EnableHealthy_OnLoad(this,HEALBOT_OPTIONS_ENABLEHEALTHY)</OnLoad>
<OnClick>HealBot_Options_EnableHealthy_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
<Frame name="HealBot_Options_TooltipsPanel" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="118"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-300"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-20" y="-180"/>
</Offset>
</Anchor>
</Anchors>
<Frames>
<CheckButton name="HealBot_Options_ShowTooltip" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_TooltipsPanel" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-4" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltip_OnLoad(this,HEALBOT_OPTIONS_SHOWTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltip_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_TooltipPos" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowTooltip" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="68" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_TooltipPos_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_ShowTooltipTarget" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_TooltipsPanel" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipTarget_OnLoad(this,HEALBOT_OPTIONS_SHOWUNITTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipTarget_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ShowTooltipSpellDetail" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_TooltipsPanel" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-55" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipSpellDetail_OnLoad(this,HEALBOT_OPTIONS_SHOWDETTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipSpellDetail_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ShowTooltipInstant" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_TooltipsPanel" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-80" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipInstant_OnLoad(this,HEALBOT_OPTIONS_SHOWRECTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipInstant_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Frames>
</Frame>
</Ui>
+887
View File
@@ -0,0 +1,887 @@
-- HealBot_View_Layout.lua
-- Manages skins, status bar layouts, anchoring, and grid rendering for the HealBot panel
local headerno = 0
HealBot_Action_HealGroup = {
"player",
"pet",
"party1",
"party2",
"party3",
"party4",
};
HealBot_Action_HealTarget = {};
HealBot_Action_HealButtons = {};
HealBot_Action_UnitButtons = {};
function HealBot_Action_SetTexture(bar, btexture)
if not bar then return end
if btexture == 10 then
bar:SetStatusBarTexture("Interface\\Buttons\\WHITE8X8");
else
bar:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\Images\\bar" .. tostring(btexture) .. ".tga");
end
end
function HealBot_HealthColor(unit, hlth, maxhlth)
if HealBot_UnitDebuff[unit] then
local debuff, tmp, debuff_type = UnitDebuff(unit, 1, 1)
if not debuff then
HealBot_UnitDebuff[unit] = nil;
HealBot_UnitDebuff[unit .. "_debuff_texture"] = nil
else
local dr = HealBot_Config.CDCBarColour[debuff_type].R
local dg = HealBot_Config.CDCBarColour[debuff_type].G
local db = HealBot_Config.CDCBarColour[debuff_type].B
if HealBot_Config.btexture[HealBot_Config.Current_Skin] == 10 then
dr = dr * 4
dg = dg * 4
db = db * 4
if dr > 1 then dr = 1 end
if dg > 1 then dg = 1 end
if db > 1 then db = 1 end
end
return dr, dg, db, HealBot_Config.Barcola[HealBot_Config.Current_Skin];
end
end
local text = UnitName(unit);
if not HealBot_HealsIn[text] then
HealBot_HealsIn[text] = 0;
end
local pct = hlth + HealBot_HealsIn[text];
if maxhlth and maxhlth > 0 then
if pct < maxhlth then
pct = pct / maxhlth;
else
pct = 1;
end
else
pct = 0;
end
local r, g, b = 1.0, 1.0, 0.0;
local a = HealBot_Config.Barcola[HealBot_Config.Current_Skin];
if pct > HealBot_Config.AlertLevel then
a = HealBot_Config.bardisa[HealBot_Config.Current_Skin];
end
local colorMode = HealBot_Config.bcolormode[HealBot_Config.Current_Skin] or 1
if colorMode == 2 and HealBot_Model and HealBot_Model.units[unit] and HealBot_Model.units[unit].englishClass then
local engClass = HealBot_Model.units[unit].englishClass
if RAID_CLASS_COLORS and RAID_CLASS_COLORS[engClass] then
r = RAID_CLASS_COLORS[engClass].r
g = RAID_CLASS_COLORS[engClass].g
b = RAID_CLASS_COLORS[engClass].b
end
else
if pct >= 0.98 then r = 0.0; end
if pct < 0.98 and pct >= 0.65 then r = 2.94 - (pct * 3); end
if pct <= 0.64 and pct > 0.31 then g = (pct - 0.31) * 3; end
if pct <= 0.31 then g = 0.0; end
end
return r, g, b, a;
end
function HealBot_Action_HealthBar(button)
local name = button:GetName();
return getglobal(name .. "Bar");
end
function HealBot_Action_HealthBar2(button)
local name = button:GetName();
return getglobal(name .. "Bar2");
end
function HealBot_Action_EnableButton(button)
local unit = button.unit;
local state = HealBot_Model.units[unit]
if not state then return end
local hlth = state.health
local maxhlth = state.maxHealth
local name = state.name
if not name then name = UnitName(unit) end -- fallback
local bar = HealBot_Action_HealthBar(button);
local bar2 = HealBot_Action_HealthBar2(button);
local bar3 = getglobal(button:GetName() .. "Bar3");
local btexture = HealBot_Config.btexture[HealBot_Config.Current_Skin];
local bheight = HealBot_Config.bheight[HealBot_Config.Current_Skin];
local sr = HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextenabledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextenabledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextenabledcola[HealBot_Config.Current_Skin];
local r, g, b, a = HealBot_HealthColor(button.unit, hlth, maxhlth)
local btextheight = HealBot_Config.btextheight[HealBot_Config.Current_Skin] or 10;
if btextheight == 0 then btextheight = 10 end
local bwidth = HealBot_Config.bwidth[HealBot_Config.Current_Skin]
local textlen = math.floor(5 + (((bwidth * 1.8) / btextheight) - (btextheight / 2)))
bar:SetMinMaxValues(0, maxhlth);
bar:SetValue(hlth);
local englishClass = state.englishClass
local isHealer = false
if englishClass == "PALADIN" or englishClass == "DRUID" or englishClass == "SHAMAN" or englishClass == "PRIEST" then
isHealer = true
end
local pt = state.powerType
local showMana = false
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
if bar3 then
bar3:SetMinMaxValues(0, state.maxMana)
bar3:SetValue(state.mana)
bar3:SetStatusBarColor(pr, pg, pb, HealBot_Config.Barcola[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(bar3, HealBot_Config.btexture[HealBot_Config.Current_Skin])
bar3:Show()
bar3:SetHeight(bheight * 0.2)
end
bar:SetHeight(bheight * 0.8)
bar2:SetHeight(bheight * 0.8)
else
if bar3 then
bar3:Hide()
end
bar:SetHeight(bheight)
bar2:SetHeight(bheight)
end
if HealBot_HealsIn[name] then
bar2:SetMinMaxValues(0, maxhlth);
bar2:SetValue(hlth + HealBot_HealsIn[name]);
else
bar2:SetValue(0);
end
bar.txt = getglobal(bar:GetName() .. "_text");
if (not HealBot_IsCasting and (HealBot_CanHeal(unit) or HealBot_MissingBuffs[unit])) then
button:Enable();
if HealBot_UnitDebuff[unit] then
sr = HealBot_Config.btextcursecolr[HealBot_Config.Current_Skin];
sg = HealBot_Config.btextcursecolg[HealBot_Config.Current_Skin];
sb = HealBot_Config.btextcursecolb[HealBot_Config.Current_Skin];
sa = HealBot_Config.btextcursecola[HealBot_Config.Current_Skin];
elseif HealBot_MissingBuffs[unit] then
r = r * 0.5;
g = g * 0.5;
b = b * 0.5;
sr = 1.0;
sg = 1.0;
sb = 0.0;
end
bar:SetStatusBarColor(r, g, b, HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
bar2:SetStatusBarColor(r, g, b, HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]);
else
button:Disable();
sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
sb = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin];
sa = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin];
bar:SetStatusBarColor(r, g, b, HealBot_Config.bardisa[HealBot_Config.Current_Skin]);
bar2:SetStatusBarColor(r, g, b, HealBot_Config.bardisa[HealBot_Config.Current_Skin]);
end
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
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
if fontOutline == 1 then
bar.txt:SetFont(fontName, fontHeight, "OUTLINE")
else
bar.txt:SetFont(fontName, fontHeight, "")
end
for i = 1, 5 do
local icon = getglobal(button:GetName() .. "BarIcon" .. i)
if icon then
if HealBot_UnitIcons and HealBot_UnitIcons[unit] and HealBot_UnitIcons[unit][i] then
icon:SetTexture(HealBot_UnitIcons[unit][i])
icon:Show()
else
icon:Hide()
end
end
end
end
function HealBot_Action_EnableButtons()
table.foreach(HealBot_Action_HealButtons, function (index, button)
HealBot_Action_EnableButton(button);
end);
end
function HealBot_Action_RefreshButton(button)
if not button then return end
local unit = button.unit;
if HealBot_MayHeal(unit) then
HealBot_Action_EnableButton(button)
end
end
function HealBot_Action_ResetSkin()
HealBot_Action_PartyChanged()
if HealBot_Options:IsVisible() then
HealBot_Action_SetTexture(HealBot_DiseaseColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_MagicColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_PoisonColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_CurseColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_EnTextColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_EnTextColorpickin, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_DisTextColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_DebTextColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_SetSkinColours()
end
end
function HealBot_Action_RefreshButtons(unit)
if unit and HealBot_Action_UnitButtons[unit] then
table.foreach(HealBot_Action_UnitButtons[unit], function (index, button)
HealBot_Action_RefreshButton(button);
end);
else
table.foreach(HealBot_Action_HealButtons, function (index, button)
HealBot_Action_RefreshButton(button);
end);
end
end
function HealBot_Action_PositionButton(button, OsetX, OsetY, bwidth, bheight, checked, header)
local brspace = HealBot_Config.brspace[HealBot_Config.Current_Skin] or 3;
if header then
headerno = headerno + 1;
local headerobj = getglobal("HealBot_Action_Header" .. headerno);
headerobj:SetText(header)
headerobj:Show();
headerobj:ClearAllPoints();
headerobj:SetHeight(bheight);
headerobj:SetWidth(bwidth);
headerobj:SetPoint("TOPLEFT", "HealBot_Action", "TOPLEFT", OsetX, -OsetY);
headerobj:Disable();
OsetY = OsetY + headerobj:GetHeight() + brspace;
else
local unit = button.unit;
button:SetText(" ");
if (HealBot_MayHeal(unit)) then
button:Show();
button:ClearAllPoints();
button:SetHeight(bheight);
if checked then
button:SetWidth(bwidth - 14);
button:SetPoint("TOPLEFT", "HealBot_Action", "TOPLEFT", OsetX + 14, -OsetY);
else
button:SetWidth(bwidth);
button:SetPoint("TOPLEFT", "HealBot_Action", "TOPLEFT", OsetX, -OsetY);
end
OsetY = OsetY + button:GetHeight() + brspace;
else
button:Hide();
end
end
return OsetY;
end
function HealBot_Action_SetHeightWidth(width, height, bwidth)
if HealBot_ActionHeight then
HealBot_Action:SetHeight(HealBot_ActionHeight);
end
if HealBot_Config.GrowUpwards == 1 then
local left, bottom = HealBot_Action:GetLeft(), HealBot_Action:GetBottom();
if left and bottom then
if HealBot_Config.PanelAnchorX == -1 then HealBot_Config.PanelAnchorX = left; end
if HealBot_Config.PanelAnchorY == -1 then HealBot_Config.PanelAnchorY = bottom; end
HealBot_Action:ClearAllPoints();
HealBot_Action:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", HealBot_Config.PanelAnchorX, HealBot_Config.PanelAnchorY);
end
else
local left, top = HealBot_Action:GetLeft(), HealBot_Action:GetTop();
if left and top then
HealBot_Action:ClearAllPoints();
HealBot_Action:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", left, top);
end
end
HealBot_Action:SetHeight(height);
HealBot_ActionHeight = height;
local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10
HealBot_Action:SetWidth(width + bwidth + bpadding)
end
function HealBot_Action_SetHealButton(index, unit)
if not index then
HealBot_Action_HealButtons = {};
HealBot_Action_UnitButtons = {};
return nil
end
local button = getglobal("HealBot_Action_HealUnit" .. index);
button.unit = unit;
if unit then
table.insert(HealBot_Action_HealButtons, button);
if not HealBot_Action_UnitButtons[unit] then HealBot_Action_UnitButtons[unit] = {} end
table.insert(HealBot_Action_UnitButtons[unit], button);
else
button:Hide();
end
return button;
end
function HealBot_Action_PartyChanged()
if not HealBot_IsFighting then
local numBars = 0;
local numHeaders = 0;
local TempMaxH = 0;
local HeaderPos = {};
for j = 1, 15 do
local headerobj = getglobal("HealBot_Action_Header" .. j);
headerobj:SetText(" ")
headerobj:Hide();
end
local bwidth = HealBot_Config.bwidth[HealBot_Config.Current_Skin] or 85;
local sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin] or 0.4;
local sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin] or 0.4;
local sb = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin] or 0.4;
local sa = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin] or 0.6;
local bheight = HealBot_Config.bheight[HealBot_Config.Current_Skin] or 18;
local btexture = HealBot_Config.btexture[HealBot_Config.Current_Skin] or 5;
local bcspace = HealBot_Config.bcspace[HealBot_Config.Current_Skin] or 4;
local cols = HealBot_Config.numcols[HealBot_Config.Current_Skin] or 2;
local btextheight = HealBot_Config.btextheight[HealBot_Config.Current_Skin] or 10;
local abortsize = HealBot_Config.abortsize[HealBot_Config.Current_Skin] or 10;
local checked_start = 0;
local checked_end = 0;
headerno = 0;
for j = 1, 41 do
HealBot_Action_SetHealButton(j, nil);
end
for j = 51, 60 do
HealBot_Action_SetHealButton(j, nil);
end
HealBot_Action_SetHealButton();
local i = 0;
local last = 0;
local GroupValid = numBars;
last = last + 6
if HealBot_Config.GroupHeals == 1 then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = HEALBOT_OPTIONS_GROUPHEALS
end
for _, unit in ipairs(HealBot_Action_HealGroup) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i + 1;
HealBot_Action_SetHealButton(i, unit);
numBars = numBars + 1;
end
if i == last then break end
end
end
if numBars > GroupValid and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
last = last + 10
local TankValid = numBars;
if HealBot_Config.TankHeals == 1 then
if GetNumRaidMembers() > 0 and CT_RA_MainTanks then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = HEALBOT_OPTIONS_TANKHEALS
end
for j = 1, 10 do
if CT_RA_MainTanks[j] then
for k = 1, GetNumRaidMembers() do
local unit = "raid" .. k;
local PossibleMT = 1;
if UnitInParty(unit) and HealBot_Config.GroupHeals == 1 then
if not UnitIsUnit(unit, "player") then
PossibleMT = 0;
end
end
if PossibleMT == 1 then
if UnitName(unit) == CT_RA_MainTanks[j] then
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i + 1;
HealBot_Action_SetHealButton(i, unit);
numBars = numBars + 1;
end
end
end
end
end
if i == last then break end
end
end
end
if numBars > TankValid and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
last = last + 10;
local h = 50;
local TargetValid = numBars;
if HealBot_Config.TargetHeals == 1 then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = HEALBOT_OPTIONS_TARGETHEALS
end
for _, unit in ipairs(HealBot_Action_HealTarget) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i + 1;
h = h + 1;
if checked_start == 0 then checked_start = i; end
checked_end = i;
HealBot_Action_SetHealButton(h, unit);
local check = getglobal("HealBot_Action_HealUnit" .. h .. "Check");
check.unit = unit;
check:SetChecked(1);
check:Show();
numBars = numBars + 1;
end
if i == last then break end
end
last = last + 1
local unit = HealBot_TargetName()
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal("target") then
i = i + 1;
h = h + 1;
if h < 61 then
HealBot_Action_SetHealButton(h, "target");
local check = getglobal("HealBot_Action_HealUnit" .. h .. "Check");
check:SetChecked(0);
check.unit = unit;
if check.unit then
if checked_start == 0 then checked_start = i; end
checked_end = i;
check:Show();
else
check:Hide();
end
else
HealBot_Action_SetHealButton(i, "target");
end
numBars = numBars + 1;
end
end
if numBars > TargetValid and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
last = last + 40
local ExtraValid = numBars;
if HealBot_Config.EmergencyHeals == 1 then
local order = {};
local units = {};
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 and HealBot_Config.ExtraOrder == 1 then
HeaderPos[i + 1] = HEALBOT_OPTIONS_EMERGENCYHEALS
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
if HealBot_Config.EmergIncMonitor == 2 then
if GetNumRaidMembers() > 0 then
for j = 1, 40 do
local PossibleEmerg = 1;
local unit = "raid" .. j;
local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(j);
if not name then name = "not known" end
if not class then class = "not known" end
if not subgroup then subgroup = "not known" end
if UnitInParty(unit) and HealBot_Config.GroupHeals == 1 then
PossibleEmerg = 0;
end
if PossibleEmerg == 1 then
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
if HealBot_Config.ExtraOrder == 1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder == 2 then
order[unit] = class;
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
end
else
for _, unit in ipairs(HealBot_Action_HealGroup) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
if HealBot_Config.ExtraOrder == 1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder == 2 then
order[unit] = class;
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
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
local unit = "raid" .. j;
local Class = UnitClass(unit);
local ProcessUnit = 0;
local PossibleEmerg = 1;
local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(j);
if not name then name = "not known" end
if not class then class = "not known" end
if not subgroup then subgroup = "not known" end
if HealBot_EmergInc[Class] == 1 then
ProcessUnit = 1;
end
if UnitInParty(unit) and HealBot_Config.GroupHeals == 1 then
PossibleEmerg = 0;
end
if ProcessUnit == 1 and PossibleEmerg == 1 then
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
if HealBot_Config.ExtraOrder == 1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder == 2 then
order[unit] = class;
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
end
else
for _, unit in ipairs(HealBot_Action_HealGroup) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
if HealBot_Config.ExtraOrder == 1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder == 2 then
order[unit] = class;
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
end
end
table.sort(units, function (a, b)
if order[a] < order[b] then return true end
if order[a] > order[b] then return false end
return a < b
end)
local TempSort = "init"
TempMaxH = math.ceil(TempMaxH / 1000) * 1000;
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;
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
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 and HealBot_Config.ExtraOrder == 3 and TempSort ~= subgroup then
TempSort = subgroup
HeaderPos[i + 1] = HEALBOT_OPTIONS_GROUPHEALS .. subgroup
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 and HealBot_Config.ExtraOrder == 4 and TempMaxH > UnitHealthMax(units[j]) then
TempMaxH = TempMaxH - 1000
HeaderPos[i + 1] = ">" .. tostring(TempMaxH / 1000) .. "k"
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
i = i + 1;
HealBot_Action_SetHealButton(i, units[j]);
if i == last then break end
end
end
end
if numBars == ExtraValid + 1 and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = nil;
numBars = numBars - 1;
end
local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10
local OffsetY = bpadding;
local OffsetX = bpadding;
local MaxOffsetY = 0;
if cols > (numBars - numHeaders) then
cols = numBars - numHeaders;
end
if cols <= 0 then cols = 1 end
local h = 1;
local i = 0;
local z = 1;
table.foreach(HealBot_Action_HealButtons, function (index, button)
i = i + 1;
local checked = false;
local header;
if HeaderPos[i] then
header = HeaderPos[i];
OffsetY = HealBot_Action_PositionButton(nil, OffsetX, OffsetY, bwidth, bheight, checked, header);
if h == math.ceil((numBars) / cols) and z < numBars then
h = 0;
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
OffsetY = bpadding;
OffsetX = OffsetX + bwidth + bcspace;
end
h = h + 1;
z = z + 1;
end
if checked_start <= i and checked_end >= i then checked = true; end
OffsetY = HealBot_Action_PositionButton(button, OffsetX, OffsetY, bwidth, bheight, checked, nil);
if h == math.ceil((numBars) / cols) and z < numBars then
h = 0;
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
OffsetY = bpadding;
OffsetX = OffsetX + bwidth + bcspace;
end
z = z + 1;
h = h + 1;
local bar = HealBot_Action_HealthBar(button);
local bar2 = HealBot_Action_HealthBar2(button);
bar.txt = getglobal(bar:GetName() .. "_text");
bar:SetHeight(bheight);
HealBot_Action_SetTexture(bar, btexture);
bar.txt:SetTextHeight(btextheight);
local barScale = bar:GetScale();
bar:SetScale(barScale + 0.01);
bar:SetScale(barScale);
bar2:SetHeight(bheight);
HealBot_Action_SetTexture(bar2, btexture);
end);
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
if HealBot_Config.HideOptions == 1 then
HealBot_Action_OptionsButton:Hide();
else
HealBot_Action_OptionsButton:SetPoint("BOTTOM", "HealBot_Action", "BOTTOM", 0, bpadding);
HealBot_Action_OptionsButton:Show();
MaxOffsetY = MaxOffsetY + 30;
end
if HealBot_Config.HideAbort == 1 then
HealBot_Action_AbortButton:Hide();
else
local bar = HealBot_Action_HealthBar(HealBot_Action_AbortButton);
local denom = 6 - (abortsize / 3)
if denom == 0 then denom = 1 end
local width = (bwidth - 12) + (OffsetX / denom);
bar.txt = getglobal(bar:GetName() .. "_text");
bar.txt:SetTextColor(sr, sg, sb, sa);
bar.txt:SetText(HEALBOT_ACTION_ABORT);
HealBot_Action_SetTexture(bar, btexture);
bar:SetMinMaxValues(0, 100);
bar:SetValue(100);
bar:ClearAllPoints();
bar:SetHeight(bheight + abortsize);
bar:SetWidth(width);
bar:SetStatusBarColor(0.1, 0.1, 0.4, 0);
MaxOffsetY = MaxOffsetY + 30 + abortsize;
HealBot_Action_AbortButton:ClearAllPoints();
HealBot_Action_AbortButton:SetWidth(width)
HealBot_Action_AbortButton:SetHeight(bheight + abortsize);
if HealBot_Config.HideOptions == 1 then
HealBot_Action_AbortButton:SetPoint("BOTTOM", "HealBot_Action", "BOTTOM", 0, bpadding);
bar:SetPoint("BOTTOM", "HealBot_Action", "BOTTOM", 0, bpadding);
else
HealBot_Action_AbortButton:SetPoint("BOTTOM", "HealBot_Action_OptionsButton", "TOP", 0, 10);
bar:SetPoint("BOTTOM", "HealBot_Action_OptionsButton", "TOP", 0, 10);
end
HealBot_Action_AbortButton:Show();
end
HealBot_Action_SetHeightWidth(OffsetX, MaxOffsetY + bpadding, bwidth);
if HealBot_Config.HideParty == 1 and HidePartyFrame then
HidePartyFrame();
end
end
HealBot_Action_RefreshButtons();
HealBot_Action_ShowFrame();
end
function HealBot_Action_ShowFrame()
if HealBot_Config.ActionVisible == 1 then
if HealBot_Config.HideSolo == 1 and GetNumPartyMembers() == 0 and GetNumRaidMembers() == 0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
else
HealBot_Action:Show();
end
end
end
function HealBot_Action_Reset()
HealBot_Action:ClearAllPoints();
HealBot_Action:SetPoint("TOP", "MinimapCluster", "BOTTOM", 7, 10);
HealBot_Action_HealTarget = {};
HealBot_Action_PartyChanged();
end
function HealBot_Action_Refresh(unit)
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
if HealBot_Config.AutoClose == 1 and HealBot_Config.ActionVisible ~= 0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
else
HealBot_Action_RefreshButtons(unit);
end
return;
end
HealBot_Action_RefreshButtons(unit);
if not HealBot_IsFighting then
if (HealBot_Action_MustHealSome()) then
HealBot_Action_ShowFrame();
elseif HealBot_AbortButton == 0 then
HealBot_Action_ShowFrame();
elseif (not HealBot_Action_ShouldHealSome()) then
if HealBot_AbortButton == 1 and HealBot_Config.AutoClose == 1 and HealBot_Config.ActionVisible ~= 0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
end
end
end
end
+250
View File
@@ -0,0 +1,250 @@
-- HealBot_View_Tooltip.lua
-- Handles rendering of unit and spell tooltips in the HealBot UI
HealBot_Action_TooltipUnit = nil
function HealBot_Action_RefreshTooltip(unit)
if HealBot_Config.ShowTooltip==0 then return end
if not unit then unit = HealBot_Action_TooltipUnit end
if not unit then return end;
local hlth=UnitHealth(unit);
local maxhlth=UnitHealthMax(unit);
local spellLeft = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Left"));
local spellMiddle = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Middle"));
local spellRight = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Right"));
local spellButton4 = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button4"));
local spellButton5 = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button5"));
local linenum = 1
HealBot_Action_Tooltip_ClearLines();
if HealBot_Config.Tooltip_ShowTarget==1 then
if UnitName(unit) then
HealBot_Action_Tooltip_SetLineLeft(UnitName(unit),0,1,0,linenum)
if hlth and maxhlth then
local r,g,b,a=HealBot_HealthColor(unit,hlth,maxhlth);
HealBot_Action_Tooltip_SetLineRight(hlth.."/"..maxhlth.." (-"..maxhlth-hlth..")",r,g,b,linenum)
end
end
end
if HealBot_Config.Tooltip_ShowSpellDetail==1 then
if spellLeft then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONLEFT.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellLeft,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellLeft,linenum);
end
if spellMiddle then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONMIDDLE.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellMiddle,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellMiddle,linenum);
end
if spellRight then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONRIGHT.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellRight,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellRight,linenum);
end
if spellButton4 then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON4.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellButton4,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellButton4,linenum);
end
if spellButton5 then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON5.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellButton5,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellButton5,linenum);
end
else
if spellLeft then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONLEFT..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellLeft),1,1,1,linenum)
end
if spellMiddle then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONMIDDLE..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellMiddle),1,1,1,linenum)
end
if spellRight then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONRIGHT..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellRight),1,1,1,linenum)
end
if spellButton4 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON4..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellButton4),1,1,1,linenum)
end
if spellButton5 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON5..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellButton5),1,1,1,linenum)
end
end
if HealBot_Config.Tooltip_Recommend==1 then
local Instant_check=0;
if HealBot_Config.Tooltip_ShowSpellDetail==1 then linenum=linenum+1; end
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_TOOLTIP_RECOMMENDTEXT,0.8,0.8,0,linenum)
Instant_check=0;
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellLeft,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellMiddle,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellRight,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellButton4,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellButton5,"upd",linenum,Instant_check);
if Instant_check==0 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(" None",0.4,0.4,0.4,linenum)
end
end
local height = 20
local width = 0
for i = 1, linenum do
local txtL = getglobal("HealBot_TooltipTextL" .. i)
local txtR = getglobal("HealBot_TooltipTextR" .. i)
height = height + txtL:GetHeight() + 2
if (txtL:GetWidth() + txtR:GetWidth() + 25 > width) then
width = txtL:GetWidth() + txtR:GetWidth() + 25
end
end
HealBot_Tooltip:SetWidth(width)
HealBot_Tooltip:SetHeight(height)
HealBot_Tooltip:ClearAllPoints();
if HealBot_Config.TooltipPos>1 then
if HealBot_Config.TooltipPos==2 then
HealBot_Tooltip:SetPoint("TOPRIGHT","HealBot_Action","TOPLEFT",0,0);
elseif HealBot_Config.TooltipPos==3 then
HealBot_Tooltip:SetPoint("TOPLEFT","HealBot_Action","RIGHT",0,0);
elseif HealBot_Config.TooltipPos==4 then
HealBot_Tooltip:SetPoint("BOTTOM","HealBot_Action","TOP",0,0);
else
HealBot_Tooltip:SetPoint("TOP","HealBot_Action","BOTTOM",0,0);
end
else
HealBot_Tooltip:SetPoint("BOTTOMRIGHT","WorldFrame","BOTTOMRIGHT",-105,105);
end
HealBot_Tooltip:Show();
end
function HealBot_Action_Tooltip_SpellInfo(spell,linenum)
local text
if HealBot_Spells[spell] then
if HealBot_Spells[spell].HealsDur>0 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_WORDS_CAST..": "..HealBot_Spells[spell].CastTime.." "..HEALBOT_WORDS_SEC..".",0.8,0.8,0.8,linenum)
HealBot_Action_Tooltip_SetLineRight("Mana: "..HealBot_Spells[spell].Mana,0.5,0.5,1,linenum)
if HealBot_Spells[spell].HealsMax>0 then
local Heals = HEALBOT_HEAL.." "
if HealBot_Spells[spell].Shield then
Heals = HEALBOT_TOOLTIP_SHIELD.." "
end
if HealBot_Spells[spell].HealsMin<HealBot_Spells[spell].HealsMax then
text=Heals..format("%d", HealBot_Spells[spell].HealsMin + HealBot_Spells[spell].RealHealing) .." "..HEALBOT_WORDS_TO.." "..format("%d",HealBot_Spells[spell].HealsMax + HealBot_Spells[spell].RealHealing)
else
text=Heals..format("%d", HealBot_Spells[spell].HealsMax + HealBot_Spells[spell].RealHealing)
end
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,1,1,1,linenum)
end
if HealBot_Spells[spell].HealsExt>0 then
text=HEALBOT_HEAL.." "..HealBot_Spells[spell].HealsDur.." "..HEALBOT_WORDS_OVER.." "..HealBot_Spells[spell].Duration-HealBot_Spells[spell].CastTime.." sec."
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,1,1,1,linenum)
end
if not HealBot_Spells[spell].Shield then
text=HEALBOT_TOOLTIP_ITEMBONUS.." +"..HealBot_GetBonus().." | "..HEALBOT_TOOLTIP_ACTUALBONUS.." +"..HealBot_Spells[spell].RealHealing.." "
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,0.8,0.8,0.8,linenum)
end
end
end
return linenum
end
function HealBot_Action_Tooltip_SpellSummary(spell)
local ret_val = " ";
if HealBot_Spells[spell] then
if HealBot_Spells[spell].HealsDur and HealBot_Spells[spell].HealsDur>0 then
if HealBot_Spells[spell].HealsMax and HealBot_Spells[spell].HealsMax>0 then
local Heals = " "..HEALBOT_HEAL.." ";
if HealBot_Spells[spell].Shield then
Heals = " "..HEALBOT_TOOLTIP_SHIELD.." ";
end
if (HealBot_Spells[spell].HealsMin or 0)<(HealBot_Spells[spell].HealsMax or 0) then
ret_val=ret_val..Heals..format("%d", (((HealBot_Spells[spell].HealsMin or 0)+(HealBot_Spells[spell].HealsMax or 0))/2) + (HealBot_Spells[spell].RealHealing or 0));
else
ret_val=ret_val..Heals..format("%d", (HealBot_Spells[spell].HealsMax or 0) + (HealBot_Spells[spell].RealHealing or 0));
end
end
if HealBot_Spells[spell].HealsExt and HealBot_Spells[spell].HealsExt>0 then
ret_val=ret_val.." HoT "..HealBot_Spells[spell].HealsDur;
end
if HealBot_Spells[spell].Mana then
ret_val=ret_val.." "..HEALBOT_WORDS_FOR.." "..HealBot_Spells[spell].Mana.." Mana";
end
end
end
if string.len(ret_val)<5 then ret_val = " - "..spell; end
return ret_val
end
function HealBot_Action_Tooltip_CheckForInstant(unit,spell,upd,linenum,check)
if HealBot_Spells[spell] then
if HealBot_Spells[spell].CastTime == 0 then
if HealBot_UnitAffected(unit,HealBot_Spells[spell].Buff) then return check,linenum end;
if HealBot_UnitAffected(unit,HealBot_Spells[spell].Debuff) then return check,linenum end;
if upd=="upd" then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(" "..spell,1,1,1,linenum)
end
else
return check,linenum;
end
else
return check,linenum
end
return check+1,linenum;
end
function HealBot_Action_Tooltip_SetLineLeft(Text,R,G,B,linenum)
local txtL = getglobal("HealBot_TooltipTextL" .. linenum)
txtL:SetTextColor(R,G,B)
txtL:SetText(Text)
txtL:Show()
end
function HealBot_Action_Tooltip_SetLineRight(Text,R,G,B,linenum)
local txtR = getglobal("HealBot_TooltipTextR" .. linenum)
txtR:SetTextColor(R,G,B)
txtR:SetText(Text)
txtR:Show()
end
function HealBot_Action_Tooltip_ClearLines()
for j=1,30 do
local txtL = getglobal("HealBot_TooltipTextL" .. j)
local txtR = getglobal("HealBot_TooltipTextR" .. j)
txtL:SetText(" ")
txtR:SetText(" ")
txtL:Hide()
txtR:Hide()
end
end
function HealBot_Action_ShowTooltip(this)
if HealBot_Config.ShowTooltip==0 then return end
if not this.unit then return end;
if not this:IsEnabled() then return end;
HealBot_Action_TooltipUnit = this.unit;
HealBot_Action_RefreshTooltip(this.unit);
end
function HealBot_Action_HideTooltip(this)
if HealBot_Config.ShowTooltip==0 then return end
HealBot_Tooltip:Hide();
HealBot_Action_TooltipUnit = nil;
end
+68 -6
View File
@@ -1,6 +1,9 @@
**HealBotBlue**
By Bluewhale.
Original HealBot, while being a staple healing addon in Wrath and later expansions, was in its infancy during Vanilla WoW. It was a memory and CPU hog that ate up resources, featured a clunky UI, and offered limited functions. To fix all of the above while still using it as a base framework, I refactored the entire codebase. The monolithic code structure was split to follow a more modern approach (MVC design pattern), making it more stable and easily editable. Additionally, the inefficient AURA scanning was replaced with lightweight (Observer Pattern) reactive programming. It now updates only what is necessary when a trigger fires, rather than performing clumsy, continuous scans of a 40-man raid. By doing so, I managed to throttle down CPU and memory usage significantly, placing it on par with modern addons. Additional functionalities are being added over time to provide a holistic, healer-centered raid frame.
> **NOTE:** For HealBot to work correctly, the **Selfcast** feature in WoW options needs to be disabled.
### Reporting Errors
@@ -15,9 +18,67 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* `/hb options` - Toggles the HealBot options panel on and off
* `/hb reset` - Resets the contents of the main HealBot panel
### Option Changes from the original HealBot Continues
### Key Features & Current Functionality
* **MVC & Observer Architecture:** High-performance, reactive engine that updates frames dynamically on state changes, drastically reducing CPU and memory overhead compared to traditional polling.
* **Native Hovercasting (Mouseover):** Cast configured spells on hovered unit frames using keybinds directly from your action bars, without losing your current target. (Toggleable in Options -> General).
* **Blizzard Party Frame Toggle:** Toggle to automatically hide Blizzard's default party frames when in a group in favor of HealBot's layouts.
* **HoT & Buff Tracking:** Intelligently track active HoTs and buffs directly on the grid frames with custom icons (e.g., Renew, Rejuvenation, Regrowth, Fear Ward).
* **Mana Bars for Healers:** Enable and position mini-mana status bars next to unit frames, toggleable to display for healer classes only or all classes.
* **Equipment Bonus Integration:** Automatically scans equipped gear (for classes capable of healing) to dynamically scale healing predictions.
* **Curse & Debuff Warning (CDC):** Dynamic visual and audio alerts for cleanable debuffs. Customizable colors based on debuff type (Curse, Poison, Disease, Magic).
* **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.
**v1.3**
* **General Options Layout & Renaming:** Relabeled "Healing panel options" to "Mana bar options:", moved the "For Healers Only" checkbox side-by-side with "Show Mana Bars", and renamed "Enable mouse over action bar" to "Hovercasting".
* **OnShow Empty Panel Bug Fix:** Solved the rendering issue where the options panel would load empty initially until another tab was clicked.
* **Backdrop Alpha Reset Bug Fix:** Resolved a WoW API client quirk where showing the HealBot frame would reset the background color and alpha channel back to default white/transparent by calling `SetBackdropColor` after `SetBackdrop`.
* **Default Party Frame Toggle:** Added a "Hide Default Party Frames" toggle option (fully localized in English, German, French, and Korean) to hide Blizzard's default party frames. Integrated immediate toggling on joining/leaving groups.
* **Safety Guards & Crash Prevention:** Added safety guards to `HidePartyFrame` and `ShowPartyFrame` calls to prevent nil-value crashes when solo.
* **Checkbox State Initialization Fixes:** Fixed options menu bugs where "Hide when Solo", "Show Mana Bars", and "For Healers Only" checkboxes failed to reflect their saved configuration value when opening the menu.
* **CurrentPanel Nil Comparison Fix:** Fixed a startup Lua comparison crash by initializing `HealBot_Options_CurrentPanel` at the top of the main options file.
* **Monolithic Code Modularization (Options):** Split the massive, single-file options system (`HealBot_Options.xml`/`HealBot_Options.lua`) into 7 dedicated, content-named panel subfiles (`General`, `Spells`, `Healing`, `CDC`, `Skins`, `Buffs`, and `Chat`) to improve codebase modularity and stability.
* **Core Code Decoupling (MVC & Observer Pattern):** Modularized `HealBot.lua` and `HealBot_Action.lua` by decoupling them into dedicated service files: `Range`, `Comms`, `Aura`, `Spells`, `Events` controllers, and `Layout`, `Tooltip` views.
* **Scope Resolution Fix:** Promoted `HealBot_Options_ComboButtons_Button` to global scope in the base options file to resolve a `nil` comparison error when loading spell settings.
* **Global Scoping & Variable Promotion:** Promoted `CalcEquipBonus`, `HealBot_EquipChangeTimer`, `HealValue`, `InitSpells`, and `Delay_RecalcParty` to global scope in `HealBot.lua` to ensure cross-module visibility.
* **CTRA Resurrection Cancel Bug Fix:** Fixed a nil table indexing crash in the CTRA `RESNO` message handler in `HealBot_Controller_Comms.lua`.
* **Core Options Layout Correction:** Relocated the "Defaults" and "Close" buttons back into the parent options frame's container, ensuring they display consistently at the bottom of all configuration tabs.
* **UI Layout & Skins Alignment:** Reorganized all 13 opacity sliders on the Skins panel into a clean, uniform 2-column grid with explicit width/height sizes (`123 x 17`) to resolve layout overlaps. Realigned Chat tab buttons to stay within window bounds and corrected Color Picker anchors.
* **Startup Refresh Optimization:** Resolved initial loading lag where action bars would be missing by forcing an immediate UI refresh (`HealBot_RecalcSpells()`) once spell data loads.
* **Menu Cleanup:** Fixed Options panel checkboxes overlapping due to incorrect vertical spacing offsets.
* **Target Restoration Fix:** Fixed spell interruptions and "You don't have a target" errors when healing by implementing a 0.1-second delayed target restoration using `TargetLastEnemy` and `TargetLastTarget`.
* **Buff Watch Initialization & Options Fix:** Fixed a bug where buff watch failed to display missing buffs on login/UI reload when the player had no active buffs. Enabled immediate buff/aura rescanning when modifying options in the Buff watch configuration tab.
**v1.2.2**
* **White background fix** Fixed issue where white background would persist while alpha channel got changes.
* **Alpha slider** Fixed bug where alpha slider wouldn't apply changes instantly.
@@ -39,11 +100,12 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Bug Fix:** Fixed division-by-zero math errors during UI scaling that caused the addon to crash.
**v1.0**
* **Buff tracking** - Added submenu for tracking buffs on element
* ***Hot tracking with icons** - Hots and DoTs display on player bars
* **Incoming heals use newer protocol**
* **Chat functionalities** - modified chat functionalities for spellcast announcements
* **Mana Bars** - Mana bars for healers in the grid added togglable from options menu.
* **Buff tracking:** Added a submenu for tracking buffs on elements.
* **HoT tracking with icons:** HoTs and DoTs display on player bars.
* **Incoming heals:** Now using a newer protocol.
* **Chat functionalities:** Modified chat functionalities for spellcast announcements.
* **Mana Bars:** Mana bars for healers in the grid added, toggleable from the options menu.