From b77c4d73c646c7816471260356017301335fe731 Mon Sep 17 00:00:00 2001 From: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com> Date: Tue, 30 Jun 2026 18:24:35 +0200 Subject: [PATCH] Merge branch 'dev' --- HealBot.lua | 1977 ++++--------------------- HealBotBlue.toc | 44 +- HealBot_Action.lua | 1602 ++++---------------- HealBot_Controller_Aura.lua | 182 +++ HealBot_Controller_Comms.lua | 114 ++ HealBot_Controller_Events.lua | 440 ++++++ HealBot_Controller_Range.lua | 42 + HealBot_Controller_Spells.lua | 642 ++++++++ HealBot_Data.lua | 18 +- HealBot_Localization.de.lua | 10 +- HealBot_Localization.en.lua | 12 +- HealBot_Localization.fr.lua | 10 +- HealBot_Localization.kr.lua | 10 +- HealBot_Model.lua | 4 +- HealBot_Options.lua | 1568 +------------------- HealBot_Options.xml | 2612 +-------------------------------- HealBot_Options_Buffs.lua | 116 ++ HealBot_Options_Buffs.xml | 372 +++++ HealBot_Options_CDC.lua | 289 ++++ HealBot_Options_CDC.xml | 450 ++++++ HealBot_Options_Chat.lua | 136 ++ HealBot_Options_Chat.xml | 240 +++ HealBot_Options_General.lua | 291 ++++ HealBot_Options_General.xml | 251 ++++ HealBot_Options_Healing.lua | 338 +++++ HealBot_Options_Healing.xml | 359 +++++ HealBot_Options_Skins.lua | 128 ++ HealBot_Options_Skins.xml | 676 +++++++++ HealBot_Options_Spells.lua | 199 +++ HealBot_Options_Spells.xml | 308 ++++ HealBot_View_Layout.lua | 792 ++++++++++ HealBot_View_Tooltip.lua | 250 ++++ README.md | 51 +- 33 files changed, 7431 insertions(+), 7102 deletions(-) create mode 100644 HealBot_Controller_Aura.lua create mode 100644 HealBot_Controller_Comms.lua create mode 100644 HealBot_Controller_Events.lua create mode 100644 HealBot_Controller_Range.lua create mode 100644 HealBot_Controller_Spells.lua create mode 100644 HealBot_Options_Buffs.lua create mode 100644 HealBot_Options_Buffs.xml create mode 100644 HealBot_Options_CDC.lua create mode 100644 HealBot_Options_CDC.xml create mode 100644 HealBot_Options_Chat.lua create mode 100644 HealBot_Options_Chat.xml create mode 100644 HealBot_Options_General.lua create mode 100644 HealBot_Options_General.xml create mode 100644 HealBot_Options_Healing.lua create mode 100644 HealBot_Options_Healing.xml create mode 100644 HealBot_Options_Skins.lua create mode 100644 HealBot_Options_Skins.xml create mode 100644 HealBot_Options_Spells.lua create mode 100644 HealBot_Options_Spells.xml create mode 100644 HealBot_View_Layout.lua create mode 100644 HealBot_View_Tooltip.lua diff --git a/HealBot.lua b/HealBot.lua index 39c4540..06a2533 100644 --- a/HealBot.lua +++ b/HealBot.lua @@ -1,1694 +1,285 @@ ---[[ - - HealBot Contined - -]] - -local _scale=0; -local CalcEquipBonus=false; -local InitCalcEquipBonus=false; -local FlagEquipUpdate1=1; -local FlagEquipUpdate2=1; -local NeedEquipUpdate=0; -local HealValue=0; -local InitSpells=1; -local DebugDebuff=false; -local Delay_RecalcParty=0; - - -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_TogglePanel(panel) - if (not panel) then return end - if ( panel:IsVisible() ) then - HideUIPanel(panel); - else - ShowUIPanel(panel); - end -end - -function HealBot_StartMoving(frame) - if ( not frame.isMoving ) and ( frame.isLocked ~= 1 ) then - frame:StartMoving(); - frame.isMoving = true; - end -end - -function HealBot_StopMoving(frame) - if ( frame.isMoving ) then - frame:StopMovingOrSizing(); - frame.isMoving = false; - end - if HealBot_Config.GrowUpwards==1 then - local left,bottom = HealBot_Action:GetLeft(),HealBot_Action:GetBottom(); - if left and bottom then - HealBot_Config.PanelAnchorX=left; - HealBot_Config.PanelAnchorY=bottom; - end --- HealBot_AddDebug("Pos X="..HealBot_Config.PanelAnchorX.." Pos Y="..HealBot_Config.PanelAnchorY) - end - -end - -function HealBot_SlashCmd(cmd) - if (cmd=="") then - HealBot_TogglePanel(HealBot_Action); - return - end - if (cmd=="options" or cmd=="opt" or cmd=="config" or cmd=="cfg") then - HealBot_TogglePanel(HealBot_Options); - return - end - - if (cmd=="reset" or cmd=="recalc" or cmd=="defaults") then - initSpells=2; - HealBot_Options_Defaults_OnClick(HealBot_Options_Defaults); - return - end - if (cmd=="ui") then - ReloadUI(); - return; - end - if (cmd=="init") then - HealBot_RegisterThis(this); - end - if (cmd=="x") then - initSpells=2; - NeedEquipUpdate=1 - HealBot_RecalcSpells(); - return; - end - if (cmd=="ver") then - local text=UnitName("player"); - HealBot_SendAddonMessage( "HealBot", ">> RequestVersion <<=>> "..text.." <<=>> nil <<" ); - return; - end - if (cmd=="chan") then - HealBot_AddDebug( "Channel active" ); - return; - end -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_TargetName() - if UnitIsEnemy("target","player") then return nil end --- if not UnitPlayerControlled("target") then return nil end - if (UnitIsPlayer("target")) then - if UnitIsUnit("target","player") then return "player" end - if (UnitInParty("target")) then - for i=1,4 do - if UnitIsUnit("target","party"..i) then return "party"..i end - end - end - if (UnitInRaid("target")) then - for i=1,40 do - if UnitIsUnit("target","raid"..i) then return "raid"..i end - end - end - else - if UnitIsUnit("target","pet") then return "pet" end - if (UnitInParty("player")) then - for i=1,4 do - if UnitIsUnit("target","partypet"..i) then return "partypet"..i end - end - end - if (UnitInRaid("player")) then - for i=1,40 do - if UnitIsUnit("target","raidpet"..i) then return "raidpet"..i end - end - end - end - return nil -end - - - -function HealBot_PackBagSlot(bag,slot) - return bag*100+slot; -end - -function HealBot_UnpackBagSlot(bagslot) - return math.floor(bagslot/100),math.mod(bagslot,100); -end - -function HealBot_GetItemName(bag,slot) - local link = GetContainerItemLink(bag,slot); - if not link then return nil end; - local _,_,item = string.find(link,"%[(.*)%]"); - local _,count = GetContainerItemInfo(bag,slot); - return item,count; -end - -function HealBot_GetBagSlot(item) - local BagSlot,BestCount; - for bag=0,NUM_BAG_FRAMES do - for slot=1,GetContainerNumSlots(bag) do - local bagitem,count = HealBot_GetItemName(bag,slot); - if (item==bagitem) then - if not BestCount or BestCount>count then - BagSlot = HealBot_PackBagSlot(bag,slot); - BestCount = count; - end - end - end - end - return BagSlot; -end - -function HealBot_UseItem(item) - local bagslot = HealBot_GetBagSlot(item); - if not bagslot then return end; - local bag,slot = HealBot_UnpackBagSlot(bagslot); - local Link = GetContainerItemLink(bag,slot); - UseContainerItem(bag,slot); -end - -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 - do break end - 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 - -HealBot_CastingSpell = nil; -HealBot_CastingTarget = nil; - -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 - - 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) - end - for i = 1, 5 do - local msgConf = HealBot_Config.ChatMessages[i] - if msgConf and msgConf.Spell == baseSpell and msgConf.Channel ~= "None" 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 - if ttype=="fired" and HealBot_Spells[spell] then --- if not HealBot_Spells[spell].CastTime then --- if HealBot_Spells[spell].id then --- HealBot_InitGetSpellData(spell, HealBot_Spells[spell].id, HealBot_UnitClass("player")) --- HealBot_AddDebug("Requested init spell data for "..spell) --- end --- if not HealBot_Spells[spell].CastTime then --- HealBot_Spells[spell].CastTime=0 --- HealBot_AddDebug("Unable to init spell data for "..spell) --- InitSpells=2; --- return --- end --- end - if HealBot_Spells[spell].CastTime > 1 then - HealValue=HealBot_Spells[spell].HealsDur; - HealBot_SendAddonMessage( HEALBOT_ADDON_ID, ">> "..UnitName(target).." <<=>> "..HealValue.." << " ); - end - end -end - -function HealBot_StopCasting() - if HealBot_CastingTarget then - if HealBot_HealsIn[UnitName(HealBot_CastingTarget)] then - if HealValue > 0 then - HealBot_SendAddonMessage( HEALBOT_ADDON_ID, ">> "..UnitName(HealBot_CastingTarget).." <<=>> "..0-HealValue.." << " ); - HealValue=0; - 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 - - -local HealBot_Health60 = { - ["DRUID"] = 3500, - ["MAGE"] = 2500, - ["HUNTER"] = 3500, - ["PALADIN"] = 4000, - ["PRIEST"] = 2500, - ["ROGUE"] = 3500, - ["SHAMAN"] = 3800, - ["WARLOCK"] = 3500, - ["WARRIOR"] = 5000, -} -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) - local old; - local ttype="other"; - if (not spell or not target or not UnitName(target)) then - return; - end - if (UnitCanAttack("player","target")) then - old = "enemy"; - else - old = UnitName("target"); - if UnitName("target")~=UnitName(target) then - TargetUnit(target); - else - ttype="direct"; - end - end - HealBot_StartCasting(spell,target,ttype); - if (old=="enemy") then - TargetLastEnemy(); - elseif (old) then - TargetByName(old); - else - ClearTarget(); - end -end - -function HealBot_UnitClass(unit) - local playerClass, englishClass = UnitClass(unit); - return englishClass; -end - --- TBD: use the event UNIT_AURA to keep track instead of querying each time - -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 - do break end - 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 - do break end - end - if debuff==effect then - return debuff - end - i = i + 1 - end - return nil; -end --- safer to use GameTooltip:SetUnitBuff and read the lines in the tooltip ... --- maybe make an additional GameTooltip frame if possible ? - -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 = 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 InitSpells>0 then NeedEquipUpdate=1; return; end - - HealBot_Heals = { player = {}, pet = {}, party = {} }; - - table.foreach(HealBot_CurrentSpells, function (index,spell) - if (HealBot_Spells[spell]) then - if CalcEquipBonus then - 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_SetOldDefaults(spell); --- HealBot_Report_Error( "================================" ); --- HealBot_Report_Error( "ERROR: HealBot_Spells[spell].CastTime == nil" ); --- HealBot_Report_Error( "ERROR: spell = "..spell ); - 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 = 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 - - table.foreach(HealBot_Heals, function (key,val) - table.foreachi(val, function (i,val) - end); - end); - if CalcEquipBonus then - HealBot_AddDebug("...Done Equip Bonus:"..RealHealing); - end - CalcEquipBonus=false; -end - - -function HealBot_GetShapeshiftForm() - local forms = GetNumShapeshiftForms(); - if forms then - local i; - for i=1,forms do - local icon,name,active = GetShapeshiftFormInfo(i); - if active and not string.find(icon,"HumanoidForm") then return i; end - end - end - return nil; -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_GetShapeshiftForm() 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(); - HealBot_Action_RefreshButtons(); -end - -function HealBot_RecalcSpells() - HealBot_FindHealSpells(); - HealBot_RecalcParty(); -end - --------------------------------------------------------------------------------------------------- --- OnFoo functions --------------------------------------------------------------------------------------------------- - -function HealBot_OnLoad(this) - this:RegisterEvent("VARIABLES_LOADED"); - - 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() - Delay_RecalcParty = 1 - end) -end - -function HealBot_RegisterThis(this) - -end - -HealBot_View_DirtyUnits = {} -local HealBot_Timer1,HealsIn_Timer = 0,0; -function HealBot_OnUpdate(this,arg1) - -- 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; - InitCalcEquipBonus=true - end - if FlagEquipUpdate1>0 and FlagEquipUpdate2>0 then - FlagEquipUpdate1=0; - FlagEquipUpdate2=0; - NeedEquipUpdate=1; - elseif FlagEquipUpdate1>0 then - FlagEquipUpdate1=FlagEquipUpdate1+1; - if FlagEquipUpdate1>1 then - FlagEquipUpdate1=0; - end - elseif FlagEquipUpdate2>0 then - FlagEquipUpdate2=FlagEquipUpdate2+1; - if FlagEquipUpdate2>1 then - FlagEquipUpdate2=0; - end - end - if NeedEquipUpdate>0 and InitCalcEquipBonus then - NeedEquipUpdate=NeedEquipUpdate+1; - if NeedEquipUpdate>1 then - HealBot_BonusScanner:ScanEquipment() - CalcEquipBonus=true; - InitCalcEquipBonus=false; - NeedEquipUpdate=0; - HealBot_RecalcSpells(); - end - end - if InitSpells>1 then - InitSpells=InitSpells+1; - if InitSpells>2 then - local cnt=HealBot_InitSpells(); - InitSpells=0; - InitCalcEquipBonus=true; - end - end - if Delay_RecalcParty>0 then - Delay_RecalcParty=Delay_RecalcParty+1 - if Delay_RecalcParty>1 then - Delay_RecalcParty=0; - HealBot_RecalcParty(); - end - end - else - HealsIn_Timer=0; - end - HealBot_Timer1 = 0; - HealBot_SpamCnt = 0; - end -end - --------------------------------------------------------------------------------- --- MVC Controller Layer --------------------------------------------------------------------------------- - -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") - HealBot_OnEvent_PlayerEnteringWorld(this) - end, - ["VARIABLES_LOADED"] = function(this) - HealBot_OnEvent_VariablesLoaded(this) - 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_OnEvent_PlayerEquipmentChanged(this) end, - ["UNIT_INVENTORY_CHANGED"] = function(this, arg1) HealBot_OnEvent_PlayerEquipmentChanged2(this,arg1) end, - ["PET_BAR_SHOWGRID"] = function(this) HealBot_OnEvent_PartyMembersChanged(this) end, - ["PET_BAR_HIDEGRID"] = function(this) HealBot_OnEvent_PartyMembersChanged(this) end, - ["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this,arg1) end -} - -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 class=="PRIEST" or class=="DRUID" or class=="PALADIN" or class=="SHAMAN" then - - HealBot_BonusScanner:ScanEquipment(); - - if HealBot_Config.ActionVisible==1 then HealBot_Action:Show() end - - 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_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("CHARACTER_POINTS_CHANGED"); - 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"); - InitSpells=2; - 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 ( strsub(inc_msg, 1, 3) == "RES" ) then - if ( inc_msg == "RESNO" ) then - HealBot_AddDebug(sender_id.." Stopped ressing"); - if HealBot_Ressing[unitname] then HealBot_Ressing[unitname] = nil; 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; - end - end - HealBot_RecalcHeals(HealBot_FindUnitID(unitname)); - end - 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_AddDebug("HB: ZoneChange"); - _scale = 0; - Delay_RecalcParty=1; -end - -HealBot_MissingBuffs = {} - -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, - } - - 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 - do break end - end - end - i = i + 1; - else - if i==1 then HealBot_UnitDebuff[unit] = nil; end - do break end - 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 - -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:Hide(); end; - else - HealBot_Action:Show(); - - -- 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; - Delay_RecalcParty=1; -end - -function HealBot_OnEvent_PlayerTargetChanged(this) - HealBot_RecalcParty(); -end - -function HealBot_OnEvent_PartyMembersChanged(this) - 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, HB_HASLEFTRAID); - if not deserter then - local tmpTest, tmpTest, deserter = string.find(msg, HB_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==HB_YOULEAVETHEGROUP or msg==HB_YOULEAVETHERAID then - Delay_RecalcParty=1; - else - -- find other messges - end - end -end - -function HealBot_OnEvent_PartyMemberEnable(this,unit) - HealBot_RecalcHeals(); -end - -function HealBot_OnEvent_PlayerEquipmentChanged(this) - FlagEquipUpdate1=1; -end - -function HealBot_OnEvent_PlayerEquipmentChanged2(this,unit) - if unit=="player" then - FlagEquipUpdate2=1; - end -end - -function HealBot_OnEvent_SpellsChanged(this, arg1) - if arg1 then return; end - HealBot_AddDebug("HB: SpellsChanged"); - InitSpells=2; -end - -function HealBot_OnEvent_TalentsChanged(this, arg1) - HealBot_AddDebug("HB: TalentsChanged"); -end - -function HealBot_OnEvent_BagUpdate(this,bag) - if FlagEquipUpdate1==0 and FlagEquipUpdate2==0 then - HealBot_RecalcSpells(); - end -end - -function HealBot_OnEvent_BagUpdateCooldown(this,bag) - if not bag then - bag = "undef" - elseif FlagEquipUpdate1==0 and FlagEquipUpdate2==0 then - HealBot_RecalcSpells(); - end -end - -function HealBot_OnEvent_PlayerEnteringWorld(this) - HealBot_IsFighting = false; -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_AddDebug("I am ressing "..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_AddDebug("I finished ressing") - HealBot_IamRessing=false; - end -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 guidence - 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_FindUnitID(unitname) - local text; - for _,unit in ipairs(HealBot_Action_HealGroup) do - text = UnitName(unit); - if text then - if text==unitname then - return unit; - end - end - end - for i=1,40 do - local unit = "raid"..i; - text = UnitName(unit); - if text then - if text==unitname then - return unit; - end - end - end - return nil; -end - -function HealBot_PlaySound(id) - if id==1 then - PlaySoundFile("Sound\\Doodad\\BellTollTribal.wav"); - elseif id==2 then - PlaySoundFile("Sound\\Spells\\Thorns.wav"); - elseif id==3 then - PlaySoundFile("Sound\\Doodad\\BellTollNightElf.wav"); - end -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 - do break end - 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_InitData() - HealBot_Skins = HealBot_Config.Skins; - if(CT_RegisterMod) then - CT_RegisterMod(HEALBOT_ADDON,"HealBot Options",5,"Interface\\AddOns\\HealBotBlue\\Images\\HealBot","Opens HealBot Options","off",nil,HealBot_ToggleOptions); - end - --- remove after 1.126 - local tmp=HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] or 0 - HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]=tmp - - HealBot_Options_CDCMonitor_Reset() - HealBot_Options_EmergencyFilter_Reset() - HealBot_Options_Debuff_Reset() -end - -function HealBot_ToggleOptions() - HealBot_TogglePanel(HealBot_Options) -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, HB_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, HB_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 == HB_TOOLTIP_INSTANT_CAST ) then - _cast = 0; - elseif line == HB_TOOLTIP_CHANNELED then - _cast = 0; - elseif ( tmpText ) then - tmpTest,tmpTest,_cast = string.find(line, HB_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 strsub(spell, 0, 14) == strsub(HEALBOT_POWER_WORD_SHIELD, 0, 14) then - tmpTest,tmpTest,_HealsMin,_shield = string.find(line, HB_SPELL_PATTERN_SHIELD ); - _HealsExt=0; - _HealsMax=_HealsMin; - elseif strsub(spell, 0, 4) == strsub(HEALBOT_RENEW, 0, 4) then - tmpTest,tmpTest,_HealsExt,tmpTest,_duration = string.find(line, HB_SPELL_PATTERN_RENEW ); - _HealsMin=0; - _HealsMax=0; - if ( _HealsExt == nil ) then - tmpTest,tmpTest,_HealsExt,_duration = string.find(line, HB_SPELL_PATTERN_RENEW1 ); - end - if ( _HealsExt == nil ) then - tmpTest,tmpTest,_duration,_HealsExt = string.find(line, HB_SPELL_PATTERN_RENEW2 ); - end - if ( _HealsExt == nil ) then - tmpTest,tmpTest,_duration,_HealsExt = string.find(line, HB_SPELL_PATTERN_RENEW3 ); - end - elseif strsub(spell, 0, 9) == strsub(HEALBOT_LESSER_HEAL, 0, 9) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line,HB_SPELL_PATTERN_LESSER_HEAL); - elseif strsub(spell, 0, 9) == strsub(HEALBOT_GREATER_HEAL, 0, 9) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_GREATER_HEAL ); - elseif strsub(spell, 0, 9) == strsub(HEALBOT_FLASH_HEAL, 0, 9) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_FLASH_HEAL ); - elseif strsub(spell, 0, 4) == strsub(HEALBOT_HEAL, 0, 4) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEAL ); - end - elseif class=="DRUID" then - if strsub(spell, 0, 6) == strsub(HEALBOT_REGROWTH, 0, 6) then - tmpTest,tmpTest,_HealsMin,_HealsMax,_HealsExt = string.find(line, HB_SPELL_PATTERN_REGROWTH ); - if ( tmpTest == nil ) then - tmpTest,tmpTest,_HealsMin,_HealsMax,tmpTest,_HealsExt = string.find(line, HB_SPELL_PATTERN_REGROWTH1 ); - end - elseif strsub(spell, 0, 9) == strsub(HEALBOT_REJUVENATION, 0, 9) then - tmpTest,tmpTest,_HealsExt,_duration = string.find(line, HB_SPELL_PATTERN_REJUVENATION ); - _HealsMin=0; - _HealsMax=0; - if ( _HealsExt == nil ) then - tmpTest,tmpTest,_HealsExt,tmpTest,_duration = string.find(line, HB_SPELL_PATTERN_REJUVENATION1 ); - end - elseif strsub(spell, 0, 7) == strsub(HEALBOT_HEALING_TOUCH, 0, 7) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEALING_TOUCH ); - end - elseif class=="PALADIN" then - if strsub(spell, 0, 9) == strsub(HEALBOT_HOLY_LIGHT, 0, 9) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HOLY_LIGHT ); - elseif strsub(spell, 0, 9) == strsub(HEALBOT_FLASH_OF_LIGHT, 0, 9) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_FLASH_OF_LIGHT ); - end - elseif class=="SHAMAN" then - if strsub(spell, 0, 9) == strsub(HEALBOT_HEALING_WAVE, 0, 9) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEALING_WAVE ); - elseif strsub(spell, 0, 9) == strsub(HEALBOT_LESSER_HEALING_WAVE, 0, 9) then - tmpTest,_HealsMin,_HealsMax = HealBot_Generic_Patten(line, HB_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 = >> "..HB_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 = >> "..HB_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 = >> "..HB_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 - -function HealBot_Get_DebugChan() - local index = GetChannelName("HBmsg"); - if (index>0) then - return index; - else - return nil; - end -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 = 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 - --------------------------------------------------------------------------------- --- Native Action Bar Hovercasting (Mouseover Hook) --------------------------------------------------------------------------------- -do - local pass = function() end - local orig = UseAction - function UseAction(slot, checkCursor, onSelf) - if HealBot_Config.ActionMouseover == 1 then - local mouseover = HealBot_Action_TooltipUnit - if mouseover and mouseover ~= 'target' then - local _PlaySound = PlaySound - local target = UnitName("target") - - PlaySound = pass - ClearTarget() - PlaySound = _PlaySound - - do - local autoSelfCast = GetCVar("autoSelfCast") - SetCVar("autoSelfCast", "0") -- Ensure disabled - orig(slot, checkCursor, onSelf) - if autoSelfCast then - SetCVar("autoSelfCast", autoSelfCast) - end - end - - SpellTargetUnit(mouseover) - - if target then - PlaySound = pass - TargetLastTarget() - PlaySound = _PlaySound - end - - return - end - end - orig(slot, checkCursor, onSelf) - end -end - +--[[ + + HealBot Contined + +]] + +-- local _scale=0; -- moved to HealBot_Controller_Range.lua +CalcEquipBonus=false; +HealBot_EquipChangeTimer = 0; +HealValue=0; +InitSpells=1; +local DebugDebuff=false; +Delay_RecalcParty=0; + + +-- Debugging and Error functions moved to HealBot_Controller_Comms.lua + +function HealBot_TogglePanel(panel) + if (not panel) then return end + if ( panel:IsVisible() ) then + HideUIPanel(panel); + else + ShowUIPanel(panel); + end +end + +function HealBot_StartMoving(frame) + if ( not frame.isMoving ) and ( frame.isLocked ~= 1 ) then + frame:StartMoving(); + frame.isMoving = true; + end +end + +function HealBot_StopMoving(frame) + if ( frame.isMoving ) then + frame:StopMovingOrSizing(); + frame.isMoving = false; + end + if HealBot_Config.GrowUpwards==1 then + local left,bottom = HealBot_Action:GetLeft(),HealBot_Action:GetBottom(); + if left and bottom then + HealBot_Config.PanelAnchorX=left; + HealBot_Config.PanelAnchorY=bottom; + end +-- HealBot_AddDebug("Pos X="..HealBot_Config.PanelAnchorX.." Pos Y="..HealBot_Config.PanelAnchorY) + end + +end + +function HealBot_SlashCmd(cmd) + if (cmd=="") then + HealBot_TogglePanel(HealBot_Action); + return + end + if (cmd=="options" or cmd=="opt" or cmd=="config" or cmd=="cfg") then + HealBot_TogglePanel(HealBot_Options); + return + end + + if (cmd=="reset" or cmd=="recalc" or cmd=="defaults") then + InitSpells=2; + HealBot_Options_Defaults_OnClick(HealBot_Options_Defaults); + return + end + if (cmd=="ui") then + ReloadUI(); + return; + end + if (cmd=="init") then + HealBot_RegisterThis(this); + end + if (cmd=="x") then + InitSpells=2; + NeedEquipUpdate=1 + HealBot_RecalcSpells(); + return; + end + if (cmd=="ver") then + local text=UnitName("player"); + HealBot_SendAddonMessage( "HealBot", ">> RequestVersion <<=>> "..text.." <<=>> nil <<" ); + return; + end + if (cmd=="chan") then + HealBot_AddDebug( "Channel active" ); + return; + end +end + +-- HealBot_SendAddonMessage moved to HealBot_Controller_Comms.lua + +function HealBot_TargetName() + if UnitIsEnemy("target","player") then return nil end +-- if not UnitPlayerControlled("target") then return nil end + if (UnitIsPlayer("target")) then + if UnitIsUnit("target","player") then return "player" end + if (UnitInParty("target")) then + for i=1,4 do + if UnitIsUnit("target","party"..i) then return "party"..i end + end + end + if (UnitInRaid("target")) then + for i=1,40 do + if UnitIsUnit("target","raid"..i) then return "raid"..i end + end + end + else + if UnitIsUnit("target","pet") then return "pet" end + if (UnitInParty("player")) then + for i=1,4 do + if UnitIsUnit("target","partypet"..i) then return "partypet"..i end + end + end + if (UnitInRaid("player")) then + for i=1,40 do + if UnitIsUnit("target","raidpet"..i) then return "raidpet"..i end + end + end + end + return nil +end + + + +function HealBot_PackBagSlot(bag,slot) + return bag*100+slot; +end + +function HealBot_UnpackBagSlot(bagslot) + return math.floor(bagslot/100),math.mod(bagslot,100); +end + +function HealBot_GetItemName(bag,slot) + local link = GetContainerItemLink(bag,slot); + if not link then return nil end; + local _,_,item = string.find(link,"%[(.*)%]"); + local _,count = GetContainerItemInfo(bag,slot); + return item,count; +end + +function HealBot_GetBagSlot(item) + local BagSlot,BestCount; + for bag=0,NUM_BAG_FRAMES do + for slot=1,GetContainerNumSlots(bag) do + local bagitem,count = HealBot_GetItemName(bag,slot); + if (item==bagitem) then + if not BestCount or BestCount>count then + BagSlot = HealBot_PackBagSlot(bag,slot); + BestCount = count; + end + end + end + end + return BagSlot; +end + +function HealBot_UseItem(item) + local bagslot = HealBot_GetBagSlot(item); + if not bagslot then return end; + local bag,slot = HealBot_UnpackBagSlot(bagslot); + local Link = GetContainerItemLink(bag,slot); + UseContainerItem(bag,slot); +end + +-- Spell parsing and casting functions moved to HealBot_Controller_Spells.lua + +function HealBot_UnitClass(unit) + local playerClass, englishClass = UnitClass(unit); + return englishClass; +end + +---- HealBot_UnitAffected moved to HealBot_Controller_Aura.lua +-- safer to use GameTooltip:SetUnitBuff and read the lines in the tooltip ... +-- maybe make an additional GameTooltip frame if possible ? + +-- Spell parsing, default setup, finding, casting, and recalculating functions moved to HealBot_Controller_Spells.lua + +-------------------------------------------------------------------------------------------------- +-- OnFoo functions +-------------------------------------------------------------------------------------------------- + +-- Event loop handlers and event dispatcher moved to HealBot_Controller_Events.lua + +-- SpiBonus and GetBonus functions moved to HealBot_Controller_Spells.lua + +function HealBot_FindUnitID(unitname) + local text; + for _,unit in ipairs(HealBot_Action_HealGroup) do + text = UnitName(unit); + if text then + if text==unitname then + return unit; + end + end + end + for i=1,40 do + local unit = "raid"..i; + text = UnitName(unit); + if text then + if text==unitname then + return unit; + end + end + end + return nil; +end + +function HealBot_PlaySound(id) + if id==1 then + PlaySoundFile("Sound\\Doodad\\BellTollTribal.wav"); + elseif id==2 then + PlaySoundFile("Sound\\Spells\\Thorns.wav"); + elseif id==3 then + PlaySoundFile("Sound\\Doodad\\BellTollNightElf.wav"); + end +end + +-- HealBot_InitSpells moved to HealBot_Controller_Spells.lua + +function HealBot_InitData() + HealBot_Skins = HealBot_Config.Skins; + if(CT_RegisterMod) then + CT_RegisterMod(HEALBOT_ADDON,"HealBot Options",5,"Interface\\AddOns\\HealBotBlue\\Images\\HealBot","Opens HealBot Options","off",nil,HealBot_ToggleOptions); + end + +-- remove after 1.126 + local tmp=HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] or 0 + HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]=tmp + + HealBot_Options_CDCMonitor_Reset() + HealBot_Options_EmergencyFilter_Reset() + HealBot_Options_Debuff_Reset() +end + +function HealBot_ToggleOptions() + HealBot_TogglePanel(HealBot_Options) +end + +-- HealBot_InitGetSpellData and HealBot_Generic_Patten moved to HealBot_Controller_Spells.lua + +-- HealBot_Get_DebugChan moved to HealBot_Controller_Comms.lua + +-- HealBot_Range_Check moved to HealBot_Controller_Range.lua + +-------------------------------------------------------------------------------- +-- Native Action Bar Hovercasting (Mouseover Hook) +-------------------------------------------------------------------------------- +do + local pass = function() end + local orig = UseAction + function UseAction(slot, checkCursor, onSelf) + if HealBot_Config.ActionMouseover == 1 then + local mouseover = HealBot_Action_TooltipUnit + if mouseover and mouseover ~= 'target' then + local _PlaySound = PlaySound + local target = UnitName("target") + + PlaySound = pass + ClearTarget() + PlaySound = _PlaySound + + do + local autoSelfCast = GetCVar("autoSelfCast") + SetCVar("autoSelfCast", "0") -- Ensure disabled + orig(slot, checkCursor, onSelf) + if autoSelfCast then + SetCVar("autoSelfCast", autoSelfCast) + end + end + + SpellTargetUnit(mouseover) + + if target then + PlaySound = pass + TargetLastTarget() + PlaySound = _PlaySound + end + + return + end + end + orig(slot, checkCursor, onSelf) + end +end + diff --git a/HealBotBlue.toc b/HealBotBlue.toc index 3df60a5..1660ca4 100644 --- a/HealBotBlue.toc +++ b/HealBotBlue.toc @@ -1,15 +1,29 @@ -## Interface: 11200 -## Title: HealBotBlue -## Version: 1.2.2 -## Author: Bluewhale -## Notes: Adds panel with skinable bars for healing and decursive -## SavedVariables: HealBot_Config -..\..\FrameXML\Fonts.xml -..\..\FrameXML\OptionsFrameTemplates.xml -..\..\FrameXML\UIPanelTemplates.xml -..\..\FrameXML\UIDropDownMenu.xml -HealBot_Error.xml -HealBot_Model.lua -HealBot.xml -HealBot_Action.xml -HealBot_Options.xml +## Interface: 11200 +## Title: HealBotBlue +## Version: 1.3 +## Author: Bluewhale +## Notes: Adds panel with skinable bars for healing and decursive +## SavedVariables: HealBot_Config +..\..\FrameXML\Fonts.xml +..\..\FrameXML\OptionsFrameTemplates.xml +..\..\FrameXML\UIPanelTemplates.xml +..\..\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 diff --git a/HealBot_Action.lua b/HealBot_Action.lua index c18b830..052a0c6 100644 --- a/HealBot_Action.lua +++ b/HealBot_Action.lua @@ -1,1306 +1,296 @@ -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 -local headerno=0; - -HealBot_Action_HealGroup = { - "player", - "pet", - "party1", - "party2", - "party3", - "party4", -}; - -HealBot_Action_HealTarget = { -}; - -HealBot_Action_HealButtons = { -}; - -HealBot_Action_UnitButtons = { -}; - -function HealBot_Action_AddDebug(msg) - HealBot_AddDebug("Action: " .. msg); -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[HealBot_UnitDebuff[unit]].R - local dg = HealBot_Config.CDCBarColour[HealBot_UnitDebuff[unit]].G - local db = HealBot_Config.CDCBarColour[HealBot_UnitDebuff[unit]].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 pctHealBot_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_AlwaysHeal() - return HealBot_Config.EnableHealthy==1 -end - -function HealBot_MayHeal(unit) - if not UnitName(unit) or not HealBot_Heals[unit] then return false end - if unit ~= 'target' then return true end - if not HealBot_Config.TargetHeals or UnitCanAttack("player",unit) then return false end - return true; -end - -function HealBot_ShouldHeal(unit) - if HealBot_UnitDebuff[unit] and not UnitIsDeadOrGhost(unit) then - if HealBot_Range_Check(unit, 30)==1 then - return true; - end - end - return HealBot_MayHeal(unit) and UnitHealth(unit)>0 and not UnitIsDeadOrGhost(unit) - and (UnitHealth(unit) 0 and pt == 0 then - if HealBot_Config.ManaBarsHealersOnly == 1 then - if isHealer then showMana = true end - else - showMana = true - end - end - - if showMana then - local pr, pg, pb = 0, 0, 1 - - if bar3 then - bar3:SetMinMaxValues(0, state.maxMana) - bar3:SetValue(state.mana) - bar3:SetStatusBarColor(pr, pg, pb, HealBot_Config.Barcola[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.Barcola[HealBot_Config.Current_Skin]); - bar2:SetStatusBarColor(r,g,b,HealBot_Config.Barcola[HealBot_Config.Current_Skin]); - end - - if string.len(name)>textlen then - name = string.sub(name,1,textlen-3) .. '...'; - end - bar.txt:SetText(name); - 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 - 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 - if type(button)~="table" then DEFAULT_CHAT_FRAME:AddMessage("***** "..type(button)) 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() - table.foreach(HealBot_Action_HealButtons, function (index,button) - HealBot_Action_RefreshButton(button); - 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); - local tmpY=OsetY - 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; - HealBot_Action:SetWidth(width+bwidth+10) -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 - 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==1 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 - 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 false end - return a0 then - for j=1,40 do - if not units[j] then break end - local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(strsub(units[j], 5)); - 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 - - OffsetY = 10; - OffsetX = 10; - 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==ceil((numBars)/cols) and z=i then checked=true; end - OffsetY = HealBot_Action_PositionButton(button,OffsetX,OffsetY,bwidth,bheight,checked,nil); - if h==ceil((numBars)/cols) and z 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].HealsMin0 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; - -- GameTooltip_SetDefaultAnchor(HealBot_Tooltip,this); - - - 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 - -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:Hide(); - else - HealBot_Action_RefreshButtons(unit); - end - return; - end - HealBot_Action_RefreshButtons(unit); - if not HealBot_IsFighting then - if (HealBot_Action_MustHealSome()) then - HealBot_Action:Show(); - elseif HealBot_AbortButton==0 then - HealBot_Action:Show(); - elseif (not HealBot_Action_ShouldHealSome()) then - if HealBot_AbortButton==1 and HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then - HealBot_Action:Hide(); - end - end - end -end - -function HealBot_Action_SpellPattern(button) - local combos = HealBot_Config.KeyCombo[UnitClass("player")] - if not combos then return nil end - local press = button; - if IsAltKeyDown() then press = "Alt"..press end - if IsControlKeyDown() then press = "Ctrl"..press end - if IsShiftKeyDown() then press = "Shift"..press end - return combos[press] -end - -function HealBot_Decode_Button(button) - if button=="RightButton" then - button="Right"; - elseif button=="MiddleButton" then - button="Middle"; - elseif button=="Button4" then - button="Button4"; - elseif button=="Button5" then - button="Button5"; - else - button="Left"; - end - return button -end - --------------------------------------------------------------------------------------------------- --- Widget_OnFoo functions --------------------------------------------------------------------------------------------------- - -function HealBot_Action_HealUnit_OnLoad(this) - this:RegisterForClicks("LeftButtonUp", "RightButtonUp", "MiddleButtonUp", "Button4Up", "Button5Up"); -end - -function HealBot_Action_HealUnit_OnEnter(this) - HealBot_Action_ShowTooltip(this); -end - -function HealBot_Action_HealUnit_OnLeave(this) - HealBot_Action_HideTooltip(this); -end - -function HealBot_Action_HealUnit_OnClick(this,button) - local decode_button = HealBot_Decode_Button(button); - local pattern = HealBot_Action_SpellPattern(decode_button); - - -- Buff casting override - if HealBot_Config.BuffWatch == 1 then - local inCombat = UnitAffectingCombat("player") - if (not inCombat) or (HealBot_Config.BuffWatchInCombat == 1) then - local myClass = UnitClass("player") - if HealBot_MissingBuffs[this.unit] then - local missingBuff = HealBot_MissingBuffs[this.unit] - if decode_button == "Left" or decode_button == "Right" then - HealBot_CastSpellOnFriend(missingBuff, this.unit) - return - end - end - end - end - - HealBot_HealUnit(this.unit,pattern); - end - -function HealBot_Action_HealUnitCheck_OnClick(this) - if not this.unit then return end - if this:GetChecked() then - table.insert(HealBot_Action_HealTarget,this.unit) - else - for i=1,table.getn(HealBot_Action_HealTarget) do - if HealBot_Action_HealTarget[i]==this.unit then - table.remove(HealBot_Action_HealTarget,i); - break; - end - end - end - HealBot_Action_PartyChanged(); -end - -function HealBot_Action_OptionsButton_OnClick(this) - HealBot_TogglePanel(HealBot_Options); -end - -function HealBot_Action_AbortButton_OnClick(this) - SpellStopCasting(); -end - -local HealBot_CT_RA_UpdateMTs_Old; -function HealBot_CT_RA_UpdateMTs() - local value = HealBot_CT_RA_UpdateMTs_Old(); - return value; -end - -function HealBot_CT_RaidAssist_DEAD() --- if (type(CT_RA_MemberFrame_OnClick)=="function") then --- HealBot_CT_RA_CustomOnClickFunction_Old = CT_RA_CustomOnClickFunction; --- CT_RA_CustomOnClickFunction = HealBot_CT_RA_CustomOnClickFunction; --- end --- if (type(CT_RA_UpdateMTs)=="function") then --- HealBot_CT_RA_UpdateMTs_Old = CT_RA_UpdateMTs; --- CT_RA_UpdateMTs = HealBot_CT_RA_UpdateMTs; --- end -end - --------------------------------------------------------------------------------------------------- --- Frame_OnFoo functions --------------------------------------------------------------------------------------------------- - -function HealBot_Action_OnLoad(this) --- HealBot_CT_RaidAssist(); -end - -function HealBot_Action_OnShow(this) - if HealBot_Config.PanelSounds==1 then - PlaySound("igAbilityOpen"); - end - HealBot_Config.ActionVisible = 1 - HealBot_Action:SetBackdropColor( - HealBot_Config.backcolr[HealBot_Config.Current_Skin], - HealBot_Config.backcolg[HealBot_Config.Current_Skin], - HealBot_Config.backcolb[HealBot_Config.Current_Skin], - HealBot_Config.backcola[HealBot_Config.Current_Skin]); - local borderStyle = HealBot_Config.bborder[HealBot_Config.Current_Skin] or 2 - if borderStyle == 0 then - HealBot_Action:SetBackdropBorderColor(0,0,0,0); - elseif borderStyle == 1 then - HealBot_Action:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Buttons\\WHITE8X8", - tile = true, tileSize = 8, edgeSize = 1, - insets = { left = 1, right = 1, top = 1, bottom = 1 } - }) - HealBot_Action:SetBackdropBorderColor( - 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]); - else - HealBot_Action:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - tile = true, tileSize = 8, edgeSize = 16, - insets = { left = 4, right = 4, top = 4, bottom = 4 } - }) - HealBot_Action:SetBackdropBorderColor( - 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]); - end -end - -function HealBot_Action_OnHide(this) - HealBot_StopMoving(this); - HealBot_Config.ActionVisible = 0 -end - -function HealBot_Action_OnMouseDown(this,button) - if button~="RightButton" then - if HealBot_Config.ActionLocked==0 then - HealBot_StartMoving(this); - end - end -end - -function HealBot_Action_OnMouseUp(this,button) - if button~="RightButton" then - HealBot_StopMoving(this); - elseif not HealBot_IsFighting then - HealBot_Action_OptionsButton_OnClick(); - end -end - -function HealBot_Action_OnClick(this,button) --- HealBot_Action_AddDebug("OnClick("..button..")"); -end - -function HealBot_Action_OnDragStart(this,button) - if HealBot_Config.ActionLocked==0 then - HealBot_StartMoving(this); - end -end - -function HealBot_Action_OnDragStop(this) - HealBot_StopMoving(this); -end - --- http://www.flexbarforums.com/viewtopic.php?t=66 -function HealBot_Action_OnKey(this,key,state) - local command = GetBindingAction(key); - if command then - DEFAULT_CHAT_FRAME:AddMessage(key.." "..state.." "..(command or "nil")); - keystate = state - RunBinding(command,keystate) - end - DEFAULT_CHAT_FRAME:AddMessage("HealBot_Action_OnKey - "..key); - if key=="SHIFT" or key=="CTRL" or key=="ALT" then - DEFAULT_CHAT_FRAME:AddMessage((IsShiftKeyDown() or 0).." "..(IsControlKeyDown() or 0).." "..(IsAltKeyDown() or 0)); - HealBot_Action_Refresh(); - end -end - - - - - +-- Status bar layout functions and tables moved to HealBot_View_Layout.lua + +function HealBot_AlwaysHeal() + return HealBot_Config.EnableHealthy==1 +end + +function HealBot_MayHeal(unit) + if not UnitName(unit) or not HealBot_Heals[unit] then return false end + if unit ~= 'target' then return true end + if not HealBot_Config.TargetHeals or UnitCanAttack("player",unit) then return false end + return true; +end + +function HealBot_ShouldHeal(unit) + if HealBot_UnitDebuff[unit] and not UnitIsDeadOrGhost(unit) then + if HealBot_Range_Check(unit, 30)==1 then + return true; + end + end + return HealBot_MayHeal(unit) and UnitHealth(unit)>0 and not UnitIsDeadOrGhost(unit) + and (UnitHealth(unit) 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, + } + + 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 diff --git a/HealBot_Controller_Comms.lua b/HealBot_Controller_Comms.lua new file mode 100644 index 0000000..ef8434a --- /dev/null +++ b/HealBot_Controller_Comms.lua @@ -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 diff --git a/HealBot_Controller_Events.lua b/HealBot_Controller_Events.lua new file mode 100644 index 0000000..f6078c3 --- /dev/null +++ b/HealBot_Controller_Events.lua @@ -0,0 +1,440 @@ +-- 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"); + + 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() + Delay_RecalcParty = 1 + 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() + CalcEquipBonus = true; + HealBot_RecalcSpells(); + end + end + + if InitSpells > 1 then + InitSpells = InitSpells + 1; + if InitSpells > 2 then + local cnt = HealBot_InitSpells(); + InitSpells = 0; + HealBot_RecalcSpells(); + end + end + if Delay_RecalcParty > 0 then + Delay_RecalcParty = Delay_RecalcParty + 1 + if Delay_RecalcParty > 1 then + 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") + HealBot_OnEvent_PlayerEnteringWorld(this) + end, + ["VARIABLES_LOADED"] = function(this) + HealBot_OnEvent_VariablesLoaded(this) + 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_OnEvent_PlayerEquipmentChanged(this) end, + ["UNIT_INVENTORY_CHANGED"] = function(this, arg1) HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1) end, + ["PET_BAR_SHOWGRID"] = function(this) HealBot_OnEvent_PartyMembersChanged(this) end, + ["PET_BAR_HIDEGRID"] = function(this) HealBot_OnEvent_PartyMembersChanged(this) end, + ["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) end +} + +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_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"); + InitSpells = 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(); + 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; + Delay_RecalcParty = 1; +end + +function HealBot_OnEvent_PlayerTargetChanged(this) + HealBot_RecalcParty(); +end + +function HealBot_OnEvent_PartyMembersChanged(this) + 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, HB_HASLEFTRAID); + if not deserter then + local tmpTest, tmpTest, deserter = string.find(msg, HB_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 == HB_YOULEAVETHEGROUP or msg == HB_YOULEAVETHERAID then + 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"); + InitSpells = 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; +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 diff --git a/HealBot_Controller_Range.lua b/HealBot_Controller_Range.lua new file mode 100644 index 0000000..e34a3e3 --- /dev/null +++ b/HealBot_Controller_Range.lua @@ -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 diff --git a/HealBot_Controller_Spells.lua b/HealBot_Controller_Spells.lua new file mode 100644 index 0000000..c1225bd --- /dev/null +++ b/HealBot_Controller_Spells.lua @@ -0,0 +1,642 @@ +-- 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_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 + + 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) + end + for i = 1, 5 do + local msgConf = HealBot_Config.ChatMessages[i] + if msgConf and msgConf.Spell == baseSpell and msgConf.Channel ~= "None" 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 + if ttype == "fired" and HealBot_Spells[spell] then + if HealBot_Spells[spell].CastTime > 1 then + HealValue = HealBot_Spells[spell].HealsDur; + HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(target) .. " <<=>> " .. HealValue .. " << "); + end + end +end + +function HealBot_StopCasting() + if HealBot_CastingTarget then + if HealBot_HealsIn[UnitName(HealBot_CastingTarget)] then + if HealValue > 0 then + HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(HealBot_CastingTarget) .. " <<=>> " .. 0 - HealValue .. " << "); + HealValue = 0; + 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 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 InitSpells > 0 then NeedEquipUpdate = 1; return; end + + HealBot_Heals = { player = {}, pet = {}, party = {} }; + + table.foreach(HealBot_CurrentSpells, function (index, spell) + if (HealBot_Spells[spell]) then + if CalcEquipBonus then + 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 CalcEquipBonus then + HealBot_AddDebug("...Done Equip Bonus:" .. RealHealing); + end + 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_GetShapeshiftForm() 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, HB_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, HB_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 == HB_TOOLTIP_INSTANT_CAST) then + _cast = 0; + elseif line == HB_TOOLTIP_CHANNELED then + _cast = 0; + elseif (tmpText) then + tmpTest, tmpTest, _cast = string.find(line, HB_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, HB_SPELL_PATTERN_SHIELD); + _HealsExt = 0; + _HealsMax = _HealsMin; + elseif string.sub(spell, 1, 4) == string.sub(HEALBOT_RENEW, 1, 4) then + tmpTest, tmpTest, _HealsExt, tmpTest, _duration = string.find(line, HB_SPELL_PATTERN_RENEW); + _HealsMin = 0; + _HealsMax = 0; + if (_HealsExt == nil) then + tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HB_SPELL_PATTERN_RENEW1); + end + if (_HealsExt == nil) then + tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HB_SPELL_PATTERN_RENEW2); + end + if (_HealsExt == nil) then + tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HB_SPELL_PATTERN_RENEW3); + end + elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_LESSER_HEAL, 1, 9) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_LESSER_HEAL); + elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_GREATER_HEAL, 1, 9) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_GREATER_HEAL); + elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_FLASH_HEAL, 1, 9) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_FLASH_HEAL); + elseif string.sub(spell, 1, 4) == string.sub(HEALBOT_HEAL, 1, 4) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEAL); + end + elseif class == "DRUID" then + if string.sub(spell, 1, 6) == string.sub(HEALBOT_REGROWTH, 1, 6) then + tmpTest, tmpTest, _HealsMin, _HealsMax, _HealsExt = string.find(line, HB_SPELL_PATTERN_REGROWTH); + if (tmpTest == nil) then + tmpTest, tmpTest, _HealsMin, _HealsMax, tmpTest, _HealsExt = string.find(line, HB_SPELL_PATTERN_REGROWTH1); + end + elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_REJUVENATION, 1, 9) then + tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HB_SPELL_PATTERN_REJUVENATION); + _HealsMin = 0; + _HealsMax = 0; + if (_HealsExt == nil) then + tmpTest, tmpTest, _HealsExt, tmpTest, _duration = string.find(line, HB_SPELL_PATTERN_REJUVENATION1); + end + elseif string.sub(spell, 1, 7) == string.sub(HEALBOT_HEALING_TOUCH, 1, 7) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEALING_TOUCH); + end + elseif class == "PALADIN" then + if string.sub(spell, 1, 9) == string.sub(HEALBOT_HOLY_LIGHT, 1, 9) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HOLY_LIGHT); + elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_FLASH_OF_LIGHT, 1, 9) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_FLASH_OF_LIGHT); + end + elseif class == "SHAMAN" then + if string.sub(spell, 1, 9) == string.sub(HEALBOT_HEALING_WAVE, 1, 9) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_HEALING_WAVE); + elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_LESSER_HEALING_WAVE, 1, 9) then + tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HB_SPELL_PATTERN_LESSER_HEALING_WAVE); + 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 = >> " .. HB_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 = >> " .. HB_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 = >> " .. HB_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 diff --git a/HealBot_Data.lua b/HealBot_Data.lua index c1b0fa7..262bba0 100644 --- a/HealBot_Data.lua +++ b/HealBot_Data.lua @@ -1,6 +1,6 @@ HealBot_ConfigDefaults = { ShowManaBars=0, - ManaBarsHealersOnly=1, + ManaBarsHealersOnly=0, Version = HEALBOT_VERSION, AlertLevel = 0.95, AutoClose = 1, @@ -10,6 +10,8 @@ HealBot_ConfigDefaults = { TargetHeals = 1, EmergencyHeals = 1, ActionLocked = 0, + ActionVisible = 1, + HideSolo = 0, OverHeal = 0.25, CastNotify = 1, ChatMessages = { @@ -172,15 +174,15 @@ HealBot_ConfigDefaults = { ActionVisible = 0, 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 +215,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 = {}; diff --git a/HealBot_Localization.de.lua b/HealBot_Localization.de.lua index edbbfb6..e02cdf0 100644 --- a/HealBot_Localization.de.lua +++ b/HealBot_Localization.de.lua @@ -205,7 +205,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 +218,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 +321,13 @@ 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_SHOWTOOLTIP = "Zeige Tooltips"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Zeige detaillierte Spruchinfos"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Zeige Zielinfos"; diff --git a/HealBot_Localization.en.lua b/HealBot_Localization.en.lua index f2b51cc..c38609f 100644 --- a/HealBot_Localization.en.lua +++ b/HealBot_Localization.en.lua @@ -1,4 +1,4 @@ -HEALBOT_VERSION = "1.2.2"; +HEALBOT_VERSION = "1.3"; ------------- -- ENGLISH -- @@ -230,7 +230,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 +243,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 +359,13 @@ 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_SHOWTOOLTIP = "Show tooltips"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Show detailed spell information"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Show target information"; diff --git a/HealBot_Localization.fr.lua b/HealBot_Localization.fr.lua index 52d6440..6d591e7 100644 --- a/HealBot_Localization.fr.lua +++ b/HealBot_Localization.fr.lua @@ -188,7 +188,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 +200,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 +260,13 @@ 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_BARALPHAINHEAL= "Incoming heal opacity"; -- *************** needs French translation *************** HEALBOT_OPTIONS_CDCBUTTONS = "Curing buttons"; -- *************** needs French translation *************** diff --git a/HealBot_Localization.kr.lua b/HealBot_Localization.kr.lua index a840e19..a564c0b 100644 --- a/HealBot_Localization.kr.lua +++ b/HealBot_Localization.kr.lua @@ -184,7 +184,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 +197,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 +303,13 @@ 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_SHOWTOOLTIP = "툴팁 표시"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "주문 정보 표시"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "대상 정보 표시"; diff --git a/HealBot_Model.lua b/HealBot_Model.lua index 7a4c78b..0154eb1 100644 --- a/HealBot_Model.lua +++ b/HealBot_Model.lua @@ -32,11 +32,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 diff --git a/HealBot_Options.lua b/HealBot_Options.lua index 2257221..d599b52 100644 --- a/HealBot_Options.lua +++ b/HealBot_Options.lua @@ -1,4 +1,28 @@ -local HealBot_Options_ComboButtons_Button=1; +-- HealBot Options panel file: HealBot_Options.lua +-- Split from original HealBot_Options.lua + +HealBot_Options_ComboButtons_Button=1; +HealBot_Options_CurrentPanel = 0; + +HealBot_ColourObjWaiting = nil + +HealBot_Options_EmergencyFilter_List = { + HEALBOT_OPTIONS_MONITORNO, + HEALBOT_OPTIONS_MONITORALL, + HEALBOT_DRUID, + HEALBOT_HUNTER, + HEALBOT_MAGE, + HEALBOT_PALADIN, + HEALBOT_PRIEST, + HEALBOT_ROGUE, + HEALBOT_SHAMAN, + HEALBOT_WARLOCK, + HEALBOT_WARRIOR, + HEALBOT_OPTIONS_MONITORMELEE, + HEALBOT_OPTIONS_MONITORRANGE, + HEALBOT_OPTIONS_MONITORHEALERS, + HEALBOT_OPTIONS_MONITORCUSTOM, +} function HealBot_Options_AddDebug(msg) HealBot_AddDebug("Options: " .. msg); @@ -44,459 +68,52 @@ function HealBot_Options_Pct_OnValueChanged(this) end -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_ShowHeaders_OnLoad(this) - getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_SHOWHEADERS); -end - -function HealBot_Options_ShowHeaders_OnClick(this) - HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] = this:GetChecked(); - 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 - -local HealBot_ColourObjWaiting -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() - local btextheight=HealBot_Config.btextheight[HealBot_Config.Current_Skin] or 10; - - HealBot_EnTextColorpick:SetStatusBarColor(0,1,0,HealBot_Config.Barcola[HealBot_Config.Current_Skin]); - HealBot_EnTextColorpickin:SetStatusBarColor(0,1,0,HealBot_Config.Barcola[HealBot_Config.Current_Skin]*HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]); - HealBot_DisTextColorpick:SetStatusBarColor(0,1,0,HealBot_Config.bardisa[HealBot_Config.Current_Skin]); - HealBot_EnTextColorpickt:SetTextColor( - 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]); - HealBot_DisTextColorpickt:SetTextColor( - 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]); - HealBot_DebTextColorpickt:SetTextColor( - 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]); - HealBot_BackgroundColorpick:SetStatusBarColor( - 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]); - HealBot_BorderColorpick:SetStatusBarColor( - 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]); - HealBot_AbortColorpick:SetStatusBarColor( - 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]); - - local borderStyle = HealBot_Config.bborder[HealBot_Config.Current_Skin] or 2 - if borderStyle == 0 then - HealBot_Action:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Buttons\\WHITE8X8", - tile = true, tileSize = 8, edgeSize = 1, - insets = { left = 1, right = 1, top = 1, bottom = 1 } - }) - HealBot_Action:SetBackdropBorderColor(0,0,0,0); - elseif borderStyle == 1 then - HealBot_Action:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Buttons\\WHITE8X8", - tile = true, tileSize = 8, edgeSize = 1, - insets = { left = 1, right = 1, top = 1, bottom = 1 } - }) - HealBot_Action:SetBackdropColor( - HealBot_Config.backcolr[HealBot_Config.Current_Skin], - HealBot_Config.backcolg[HealBot_Config.Current_Skin], - HealBot_Config.backcolb[HealBot_Config.Current_Skin], - HealBot_Config.backcola[HealBot_Config.Current_Skin]); - HealBot_Action:SetBackdropBorderColor( - 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]); - else - HealBot_Action:SetBackdrop({ - bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", - edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", - tile = true, tileSize = 8, edgeSize = 16, - insets = { left = 4, right = 4, top = 4, bottom = 4 } - }) - HealBot_Action:SetBackdropColor( - HealBot_Config.backcolr[HealBot_Config.Current_Skin], - HealBot_Config.backcolg[HealBot_Config.Current_Skin], - HealBot_Config.backcolb[HealBot_Config.Current_Skin], - HealBot_Config.backcola[HealBot_Config.Current_Skin]); - HealBot_Action:SetBackdropBorderColor( - 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]); - end - - 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); - 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_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 + + + + + + + + + + + + + + + + + + + + + function HealBot_Options_CastNotify_OnLoad(this,text) @@ -507,753 +124,39 @@ function HealBot_Options_CastNotify_OnClick(this,id) -- CastNotify UI elements were removed and replaced by Custom Chat Messages end -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_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_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 - -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_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 + + + + + + + + + + + + + + + + + + + + -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -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 ! - UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFClass,HealBot_Config.EmergencyFClass) -end - -function HealBot_Options_EmergencyFClass_OnLoad(this) - HealBot_Options_EmergencyFClass_Initialize() - UIDropDownMenu_SetWidth(100) -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 ! - UIDropDownMenu_SetSelectedID(HealBot_Options_ExtraSort,HealBot_Config.ExtraOrder) -end - -function HealBot_Options_ExtraSort_OnLoad(this) - HealBot_Options_ExtraSort_Initialize() - UIDropDownMenu_SetWidth(100) -end - -function HealBot_Options_ExtraSort_OnSelect() - HealBot_Config.ExtraOrder = this:GetID() - HealBot_Options_ExtraSort_Refresh(true) - HealBot_Action_PartyChanged() -end - --------------------------------------------------------------------------------- - -local HealBot_Options_EmergencyFilter_List = { - HEALBOT_CLASSES_ALL, - HEALBOT_DRUID, - HEALBOT_HUNTER, - HEALBOT_MAGE, - HEALBOT_PALADIN, - HEALBOT_PRIEST, - HEALBOT_ROGUE, - HEALBOT_SHAMAN, - HEALBOT_WARLOCK, - HEALBOT_WARRIOR, - HEALBOT_CLASSES_MELEE, - HEALBOT_CLASSES_RANGES, - HEALBOT_CLASSES_HEALERS, - HEALBOT_CLASSES_CUSTOM, -} - -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_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_EmergencyFilter_Initialize() - UIDropDownMenu_Initialize(HealBot_Options_EmergencyFilter,HealBot_Options_EmergencyFilter_DropDown) -end - -function HealBot_Options_CDCMonitor_Initialize() - UIDropDownMenu_Initialize(HealBot_Options_CDCMonitor,HealBot_Options_CDCMonitor_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 ! - UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFilter,HealBot_Config.EmergIncMonitor) -end - -function HealBot_Options_CDCMonitor_Refresh(onselect) - if not HealBot_Config.CDCMonitor then return end - if not onselect then HealBot_Options_CDCMonitor_Initialize() end -- or wrong menu may be used ! - UIDropDownMenu_SetSelectedID(HealBot_Options_CDCMonitor,HealBot_Config.CDCMonitor) -end - -function HealBot_Options_EmergencyFilter_OnLoad(this) - HealBot_Options_EmergencyFilter_Initialize() - UIDropDownMenu_SetWidth(100) -end - -function HealBot_Options_CDCMonitor_OnLoad(this) - HealBot_Options_CDCMonitor_Initialize() - UIDropDownMenu_SetWidth(100) -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==1 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==2 then - HealBot_EmergInc[HEALBOT_DRUID] = 1; - elseif HealBot_Config.EmergIncMonitor==3 then - HealBot_EmergInc[HEALBOT_HUNTER] = 1; - elseif HealBot_Config.EmergIncMonitor==4 then - HealBot_EmergInc[HEALBOT_MAGE] = 1; - elseif HealBot_Config.EmergIncMonitor==5 then - HealBot_EmergInc[HEALBOT_PALADIN] = 1; - elseif HealBot_Config.EmergIncMonitor==6 then - HealBot_EmergInc[HEALBOT_PRIEST] = 1; - elseif HealBot_Config.EmergIncMonitor==7 then - HealBot_EmergInc[HEALBOT_ROGUE] = 1; - elseif HealBot_Config.EmergIncMonitor==8 then - HealBot_EmergInc[HEALBOT_SHAMAN] = 1; - elseif HealBot_Config.EmergIncMonitor==9 then - HealBot_EmergInc[HEALBOT_WARLOCK] = 1; - elseif HealBot_Config.EmergIncMonitor==10 then - HealBot_EmergInc[HEALBOT_WARRIOR] = 1; - elseif HealBot_Config.EmergIncMonitor==11 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==12 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==13 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==14 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 - -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==1 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==2 then - HealBot_CDCInc[HEALBOT_DRUID] = 1; - elseif HealBot_Config.CDCMonitor==3 then - HealBot_CDCInc[HEALBOT_HUNTER] = 1; - elseif HealBot_Config.CDCMonitor==4 then - HealBot_CDCInc[HEALBOT_MAGE] = 1; - elseif HealBot_Config.CDCMonitor==5 then - HealBot_CDCInc[HEALBOT_PALADIN] = 1; - elseif HealBot_Config.CDCMonitor==6 then - HealBot_CDCInc[HEALBOT_PRIEST] = 1; - elseif HealBot_Config.CDCMonitor==7 then - HealBot_CDCInc[HEALBOT_ROGUE] = 1; - elseif HealBot_Config.CDCMonitor==8 then - HealBot_CDCInc[HEALBOT_SHAMAN] = 1; - elseif HealBot_Config.CDCMonitor==9 then - HealBot_CDCInc[HEALBOT_WARLOCK] = 1; - elseif HealBot_Config.CDCMonitor==10 then - HealBot_CDCInc[HEALBOT_WARRIOR] = 1; - elseif HealBot_Config.CDCMonitor==11 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==12 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==13 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==14 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_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 ! - UIDropDownMenu_SetSelectedID(HealBot_Options_Skins,HealBot_Config.Skin_ID) -end - -function HealBot_Options_Skins_OnLoad(this) - HealBot_Options_Skins_Initialize() - UIDropDownMenu_SetWidth(100) -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 - --------------------------------------------------------------------------------- - -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 ! - UIDropDownMenu_SetSelectedID(HealBot_Options_TooltipPos,HealBot_Config.TooltipPos) -end - -function HealBot_Options_TooltipPos_OnLoad(this) - HealBot_Options_TooltipPos_Initialize() - UIDropDownMenu_SetWidth(128) -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_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]; - UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButLeft,set_id) -end - -function HealBot_Options_CDCButRight_Refresh(onselect) - local set_id; - local class=UnitClass("Player"); - if not onselect then HealBot_Options_CDCButRight_Initialize() end - set_id = HealBot_Config.Debuff_Right[class]; - UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButRight,set_id) -end - -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_CDCButLeft_OnLoad(this) - HealBot_Options_CDCButLeft_Initialize() - UIDropDownMenu_SetWidth(140) -end - -function HealBot_Options_CDCButRight_OnLoad(this) - HealBot_Options_CDCButRight_Initialize() - UIDropDownMenu_SetWidth(140) -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_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 - - -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_Returned_Colours() local A = OpacitySliderFrame:GetValue(); A = ((0-A)+1); @@ -1295,8 +198,6 @@ function HealBot_Returned_Colours() HealBot_SetSkinColours() HealBot_SetCDCBarColours() end -ColorPickerFrame.func = HealBot_Returned_Colours - function HealBot_UseColourPick(R, G, B, A) if ColorPickerFrame:IsVisible() then ColorPickerFrame:Hide(); @@ -1317,91 +218,6 @@ function HealBot_UseColourPick(R, G, B, A) end return ColorPickerFrame:GetColorRGB(); 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 - --------------------------------------------------------------------------------- - -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 - --------------------------------------------------------------------------------- - function HealBot_Options_Defaults_OnClick(this) HealBot_Options_CastNotify_OnClick(nil,0); -- HealBot_Config = HealBot_ConfigDefaults; @@ -1413,7 +229,6 @@ function HealBot_Options_Defaults_OnClick(this) HealBot_Action_Reset(); HealBot_Config.ActionVisible = HealBot_Action:IsVisible(); end - function HealBot_Options_OnLoad(this) table.insert(UISpecialFrames,this:GetName()); @@ -1423,7 +238,6 @@ function HealBot_Options_OnLoad(this) PanelTemplates_UpdateTabs(this); HealBot_Options_ShowPanel(this.selectedTab); end - function HealBot_Options_OnShow(this) HealBot_Skins = HealBot_Config.Skins; HealBot_Options_SetSkins() @@ -1431,6 +245,8 @@ function HealBot_Options_OnShow(this) HealBot_Options_AlertLevel:SetValue(HealBot_Config.AlertLevel); HealBot_Options_AutoShow:SetChecked(HealBot_Config.AutoClose); HealBot_Options_PanelSounds:SetChecked(HealBot_Config.PanelSounds); + HealBot_Options_ShowManaBars:SetChecked(HealBot_Config.ShowManaBars); + HealBot_Options_ManaBarsHealersOnly:SetChecked(HealBot_Config.ManaBarsHealersOnly); if HealBot_Config.ActionMouseover == nil then HealBot_Config.ActionMouseover = 1; end HealBot_Options_ActionMouseover:SetChecked(HealBot_Config.ActionMouseover); @@ -1456,6 +272,8 @@ function HealBot_Options_OnShow(this) HealBot_Options_ShowTooltipSpellDetail:SetChecked(HealBot_Config.Tooltip_ShowSpellDetail); HealBot_Options_ShowTooltipInstant:SetChecked(HealBot_Config.Tooltip_Recommend); HealBot_Options_HideAbort:SetChecked(HealBot_Config.HideAbort); + HealBot_Options_HideParty:SetChecked(HealBot_Config.HideParty); + HealBot_Options_HideSolo:SetChecked(HealBot_Config.HideSolo); HealBot_WarningSound_OnClick(nil,HealBot_Config.SoundDebuffPlay) if HealBot_Config.SoundDebuffWarning>0 then HealBot_WarningSound1:Enable(); @@ -1480,8 +298,8 @@ function HealBot_Options_OnShow(this) HealBot_Options_ExtraSort_Refresh(); HealBot_Options_TooltipPos_Refresh(); HealBot_Options_SetChatMessages(); + HealBot_Options_ShowPanel(this.selectedTab or 1); end - function HealBot_Options_SetSkins() HealBot_Options_Skins_Refresh() HealBot_Options_BarAlpha:SetValue(HealBot_Config.Barcola[HealBot_Config.Current_Skin]); @@ -1492,6 +310,8 @@ function HealBot_Options_SetSkins() HealBot_Options_BarNumColsS:SetValue(HealBot_Config.numcols[HealBot_Config.Current_Skin]) HealBot_Options_BarBRSpaceS:SetValue(HealBot_Config.brspace[HealBot_Config.Current_Skin]) HealBot_Options_BarBCSpaceS:SetValue(HealBot_Config.bcspace[HealBot_Config.Current_Skin]) + HealBot_Options_FramePaddingS:SetValue((HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10) + HealBot_Options_BorderThicknessS:SetValue((HealBot_Config.bboffset and HealBot_Config.bboffset[HealBot_Config.Current_Skin]) or 1) HealBot_Options_FontHeight:SetValue(HealBot_Config.btextheight[HealBot_Config.Current_Skin]) HealBot_Options_BarAlphaDis:SetValue(HealBot_Config.bardisa[HealBot_Config.Current_Skin]) HealBot_Options_AbortBarSize:SetValue(HealBot_Config.abortsize[HealBot_Config.Current_Skin]) @@ -1513,9 +333,6 @@ function HealBot_Options_SetSkins() HealBot_Options_DeleteSkin:Enable(); end end - -HealBot_Options_CurrentPanel = 0; - function HealBot_Options_ShowPanel(id) if HealBot_Options_CurrentPanel>0 then getglobal("HealBot_Options_Panel"..HealBot_Options_CurrentPanel):Hide(); @@ -1525,242 +342,3 @@ function HealBot_Options_ShowPanel(id) getglobal("HealBot_Options_Panel"..HealBot_Options_CurrentPanel):Show(); end end - - --------------------------------------------------------------------------------- --- Chat Custom Messages UI Logic --------------------------------------------------------------------------------- - -local HealBot_PlayerSpells = nil - -local function HealBot_GetPlayerSpells() - if HealBot_PlayerSpells then return HealBot_PlayerSpells end - local spellSet = {} - local i = 1 - while true do - local spellName, spellRank = GetSpellName(i, BOOKTYPE_SPELL) - if not spellName then - break - end - spellSet[spellName] = true - i = i + 1 - end - local sortedSpells = {} - for k, _ in pairs(spellSet) do - table.insert(sortedSpells, k) - end - table.sort(sortedSpells) - HealBot_PlayerSpells = sortedSpells - return sortedSpells -end - -function HealBot_Options_ChatMsg_Spell_Initialize() - local info - - info = { text = "None", func = HealBot_Options_ChatMsg_Spell_OnClick, value = "None" } - UIDropDownMenu_AddButton(info) - - local spells = HealBot_GetPlayerSpells() - for _, spellName in ipairs(spells) do - info = { - text = spellName, - func = HealBot_Options_ChatMsg_Spell_OnClick, - value = spellName - } - UIDropDownMenu_AddButton(info) - end -end - -function HealBot_Options_ChatMsg_Spell_OnClick() - local frameName = UIDROPDOWNMENU_OPEN_MENU - local frame = getglobal(frameName) - local id = frame:GetID() - - if not HealBot_Config.ChatMessages then HealBot_Config.ChatMessages = {} end - if not HealBot_Config.ChatMessages[id] then - HealBot_Config.ChatMessages[id] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" } - end - - HealBot_Config.ChatMessages[id].Spell = this.value - - local text = this.value - if text == "None" then text = "None" end - - UIDropDownMenu_SetSelectedValue(frame, this.value) - UIDropDownMenu_SetText(text, frame) -end - -function HealBot_Options_ChatMsg_Channel_OnClick(id, buttonFrame) - if not HealBot_Config.ChatMessages then HealBot_Config.ChatMessages = {} end - if not HealBot_Config.ChatMessages[id] then - HealBot_Config.ChatMessages[id] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" } - 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 = "None", Message = "Casting #Spell# on #Target#", Channel = "None" } - end - end - for i = 1, 5 do - local msgConfig = HealBot_Config.ChatMessages[i] - if msgConfig then - local dropDown = getglobal("HealBot_Options_ChatMsg"..i) - local editBox = getglobal("HealBot_Options_ChatMsg"..i.."_Text") - local chanButton = getglobal("HealBot_Options_ChatMsg"..i.."_Channel") - - if dropDown then - UIDropDownMenu_Initialize(dropDown, HealBot_Options_ChatMsg_Spell_Initialize) - UIDropDownMenu_SetSelectedValue(dropDown, msgConfig.Spell) - UIDropDownMenu_SetWidth(110, dropDown) - UIDropDownMenu_SetText(msgConfig.Spell, dropDown) - end - if editBox then - editBox:SetText(msgConfig.Message or "") - end - if chanButton then - chanButton:SetText(msgConfig.Channel or "None") - end - end - end -end - - - -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 -end - -function HealBot_Options_BuffWatchInCombat_OnClick(self) - local frame = self or this - HealBot_Config.BuffWatchInCombat = frame:GetChecked() or 0; -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 - this:SetChecked(HealBot_Config.BuffWatchSelf[id]) - else - this:SetChecked(0) - 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 -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 - - UIDropDownMenu_SetSelectedID(frame, this.value + 1) - UIDropDownMenu_SetText(text, frame) -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) - UIDropDownMenu_SetSelectedID(dropDown, val + 1) - end - end -end - - - - - - - - diff --git a/HealBot_Options.xml b/HealBot_Options.xml index c56c67a..31db38a 100644 --- a/HealBot_Options.xml +++ b/HealBot_Options.xml @@ -143,2581 +143,6 @@ - - - - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_ActionLocked_OnLoad(this) - HealBot_Options_ActionLocked_OnClick(this) - - - - - - - - - - - - HealBot_Options_GrowUpwards_OnLoad(this,HEALBOT_OPTIONS_GROWUPWARDS) - HealBot_Options_GrowUpwards_OnClick(this) - - - - - - - - - - - - - getglobal(this:GetName().."Text"):SetText("Show Mana Bars"); - this:SetChecked(HealBot_Config.ShowManaBars); - - - if (this:GetChecked()) then - HealBot_Config.ShowManaBars = 1; - else - HealBot_Config.ShowManaBars = 0; - end - HealBot_Action_Refresh(); - - - - - - - - - - - - - HealBot_Options_AutoShow_OnLoad(this) - HealBot_Options_AutoShow_OnClick(this) - - - - - - - - - - - - HealBot_Options_PanelSounds_OnLoad(this) - HealBot_Options_PanelSounds_OnClick(this) - - - - - - - - - - - - HealBot_Options_ActionMouseover_OnLoad(this,"Enable Action Bar Mouseover") - HealBot_Options_ActionMouseover_OnClick(this) - - - - - - - - - - - - - - - - - HealBot_Options_HideOptions_OnLoad(this,HEALBOT_OPTIONS_HIDEOPTIONS) - - HealBot_Options_HideOptions_OnClick(this) - - - - - - - - - - - - HealBot_Options_HideAbort_OnLoad(this,HEALBOT_OPTIONS_HIDEABORT) - HealBot_Options_HideAbort_OnClick(this) - - - - - - - - - - - - HealBot_Options_QualityRange_OnLoad(this,HEALBOT_OPTIONS_QUALITYRANGE) - HealBot_Options_QualityRange_OnClick(this) - - - - - - - - - - - - HealBot_Options_ProtectPvP_OnLoad(this,HEALBOT_OPTIONS_PROTECTPVP) - HealBot_Options_ProtectPvP_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONLEFT) - HealBot_ComboButtons_Button_OnClick(this,this:GetID()) - - - - - - - - - - - - - - - HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONMIDDLE) - HealBot_ComboButtons_Button_OnClick(this,this:GetID()) - - - - - - - - - - - - HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONRIGHT) - HealBot_ComboButtons_Button_OnClick(this,this:GetID()) - - - - - - - - - - - - HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTON4) - HealBot_ComboButtons_Button_OnClick(this,this:GetID()) - - - - - - - - - - - - HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTON5) - HealBot_ComboButtons_Button_OnClick(this,this:GetID()) - - - - - - - - - - - - - - HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_CLICK) - - - HealBot_Options_Click_OnTextChanged(this) - - - - - - - - - - - - - - HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_SHIFT) - - - HealBot_Options_Shift_OnTextChanged(this) - - - - - - - - - - - - - - HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_CTRL) - - - HealBot_Options_Ctrl_OnTextChanged(this) - - - - - - - - - - - - - - HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_SHIFTCTRL) - - - HealBot_Options_ShiftCtrl_OnTextChanged(this) - - - - - - - - - - - - - HealBot_Options_EnableHealthy_OnLoad(this,HEALBOT_OPTIONS_ENABLEHEALTHY) - HealBot_Options_EnableHealthy_OnClick(this) - - - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_ShowTooltip_OnLoad(this,HEALBOT_OPTIONS_SHOWTOOLTIP) - HealBot_Options_ShowTooltip_OnClick(this) - - - - - - - - - - - - HealBot_Options_TooltipPos_OnLoad(this) - - - - - - - - - - - - HealBot_Options_ShowTooltipTarget_OnLoad(this,HEALBOT_OPTIONS_SHOWUNITTOOLTIP) - HealBot_Options_ShowTooltipTarget_OnClick(this) - - - - - - - - - - - - HealBot_Options_ShowTooltipSpellDetail_OnLoad(this,HEALBOT_OPTIONS_SHOWDETTOOLTIP) - HealBot_Options_ShowTooltipSpellDetail_OnClick(this) - - - - - - - - - - - - HealBot_Options_ShowTooltipInstant_OnLoad(this,HEALBOT_OPTIONS_SHOWRECTOOLTIP) - HealBot_Options_ShowTooltipInstant_OnClick(this) - - - - - - - - - - - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_GroupHeals_OnLoad(this,HEALBOT_OPTIONS_GROUPHEALS) - HealBot_Options_GroupHeals_OnClick(this) - - - - - - - - - - - - HealBot_Options_TankHeals_OnLoad(this,HEALBOT_OPTIONS_TANKHEALS) - HealBot_Options_TankHeals_OnClick(this) - - - - - - - - - - - - HealBot_Options_TargetHeals_OnLoad(this,HEALBOT_OPTIONS_TARGETHEALS) - HealBot_Options_TargetHeals_OnClick(this) - - - - - - - - - - - - HealBot_Options_EmergencyHeals_OnLoad(this,HEALBOT_OPTIONS_EMERGENCYHEALS) - HealBot_Options_EmergencyHeals_OnClick(this) - - - - - - - - - - - - - - - - HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_ALERTLEVEL) - HealBot_Options_AlertLevel_OnValueChanged(this) - - - - - - - - - - - - HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_OVERHEAL) - HealBot_Options_OverHeal_OnValueChanged(this) - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_EmergencyFilter_OnLoad(this) - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_ExtraSort_OnLoad(this) - - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_EmergencyFClass_OnLoad(this) - - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_DRUID) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_HUNTER) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_MAGE) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_PALADIN) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_PRIEST) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_ROGUE) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_SHAMAN) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_WARLOCK) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - HealBot_Options_EFClass_OnLoad(this,HEALBOT_WARRIOR) - HealBot_Options_EFClass_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_CDCMonitor_OnLoad(this) - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_CDCButLeft_OnLoad(this) - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_CDCButRight_OnLoad(this) - - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_ShowDebuffWarning_OnLoad(this,HEALBOT_OPTIONS_SHOWDEBUFFWARNING) - HealBot_Options_ShowDebuffWarning_OnClick(this) - - - - - - - - - - - - HealBot_Options_SoundDebuffWarning_OnLoad(this,HEALBOT_OPTIONS_SOUNDDEBUFFWARNING) - HealBot_Options_SoundDebuffWarning_OnClick(this) - - - - - - - - - - - - - HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND1) - HealBot_WarningSound_OnClick(this,this:GetID()) - - - - - - - - - - - - HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND2) - HealBot_WarningSound_OnClick(this,this:GetID()) - - - - - - - - - - - - HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND3) - HealBot_WarningSound_OnClick(this,this:GetID()) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Skins_OnLoad(this) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_NewSkin_OnTextChanged(this) - - - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_ShowHeaders_OnLoad(this,HEALBOT_OPTIONS_SHOWHEADERS) - HealBot_Options_ShowHeaders_OnClick(this) - - - - - - getglobal(this:GetName().."Text"):SetText("Class Colors") - HealBot_Config.bcolormode[HealBot_Config.Current_Skin] = (this:GetChecked() and 2 or 1); HealBot_Action_ResetSkin() - - - - - - getglobal(this:GetName().."Text"):SetText("Font Outline") - HealBot_Config.bfontoutline[HealBot_Config.Current_Skin] = (this:GetChecked() and 1 or 0); HealBot_Action_ResetSkin() - - - - - - getglobal(this:GetName().."Text"):SetText("1px Borders") - HealBot_Config.bborder[HealBot_Config.Current_Skin] = (this:GetChecked() and 1 or 2); HealBot_Action_ResetSkin() - - - - - - - - - - - - - - - - HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINTEXTURE,1,14) - HealBot_Options_BarTextureS_OnValueChanged(this) - - - - - - - - - - - - - - - HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINNUMCOLS,1,8) - HealBot_Options_BarNumColsS_OnValueChanged(this) - - - - - - - - - - - - - - - HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINHEIGHT,10,100) - HealBot_Options_BarHeightS_OnValueChanged(this) - - - - - - - - - - - - - - - HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINWIDTH,50,225) - HealBot_Options_BarWidthS_OnValueChanged(this) - - - - - - - - - - - - - - - - HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINBRSPACE,0,10) - HealBot_Options_BarBRSpaceS_OnValueChanged(this) - - - - - - - - - - - - - - - HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINBCSPACE,0,25) - HealBot_Options_BarBCSpaceS_OnValueChanged(this) - - - - - - - - - - - - HealBot_Options_Pct_OnLoad_MinMax(this,HEALBOT_OPTIONS_BARALPHA,0.25,1) - HealBot_Options_BarAlpha_OnValueChanged(this) - - - - - - - - - - - - - HealBot_Options_Pct_OnLoad_MinMax(this,HEALBOT_OPTIONS_BARALPHAINHEAL,0.05,0.75) - HealBot_Options_BarAlphaInHeal_OnValueChanged(this) - - - - - - - - - - - - HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_BARALPHADIS) - HealBot_Options_BarAlphaDis_OnValueChanged(this) - - - - - - - - - - - - - - HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINFHEIGHT,7,18) - HealBot_Options_FontHeight_OnValueChanged(this) - - - - - - - - - - - - - - - HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_ABORTSIZE,0,15) - HealBot_Options_AbortBarSize_OnValueChanged(this) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(70); - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - this:SetMinMaxValues(0,100); this:SetValue(100); - - - - - - - - - - - - - - - - - - - - - - this:SetBackdropBorderColor(0.4, 0.4, 0.4); - this:SetBackdropColor(0, 0, 0, 0); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_BUFFWATCH) - HealBot_Options_BuffWatch_OnClick(this) - - - - - - - - - - - - - HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_BUFFWATCHINCOMBAT) - HealBot_Options_BuffWatchInCombat_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Buff_OnLoad(this) - - - - - - - - - - - HealBot_Options_BuffSelf_OnLoad(this) - HealBot_Options_BuffSelf_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Buff_OnLoad(this) - - - - - - - - - - - HealBot_Options_BuffSelf_OnLoad(this) - HealBot_Options_BuffSelf_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Buff_OnLoad(this) - - - - - - - - - - - HealBot_Options_BuffSelf_OnLoad(this) - HealBot_Options_BuffSelf_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Buff_OnLoad(this) - - - - - - - - - - - HealBot_Options_BuffSelf_OnLoad(this) - HealBot_Options_BuffSelf_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Buff_OnLoad(this) - - - - - - - - - - - HealBot_Options_BuffSelf_OnLoad(this) - HealBot_Options_BuffSelf_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Buff_OnLoad(this) - - - - - - - - - - - HealBot_Options_BuffSelf_OnLoad(this) - HealBot_Options_BuffSelf_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Buff_OnLoad(this) - - - - - - - - - - - HealBot_Options_BuffSelf_OnLoad(this) - HealBot_Options_BuffSelf_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - HealBot_Options_Buff_OnLoad(this) - - - - - - - - - - - HealBot_Options_BuffSelf_OnLoad(this) - HealBot_Options_BuffSelf_OnClick(this) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - if HealBot_Config.ChatMessages then - HealBot_Config.ChatMessages[1].Message = this:GetText(); - end - - - - - - - - - - - - - - - - - - - - - - - - - - - - if HealBot_Config.ChatMessages then - HealBot_Config.ChatMessages[2].Message = this:GetText(); - end - - - - - - - - - - - - - - - - - - - - - - - - - - - - if HealBot_Config.ChatMessages then - HealBot_Config.ChatMessages[3].Message = this:GetText(); - end - - - - - - - - - - - - - - - - - - - - - - - - - - - - if HealBot_Config.ChatMessages then - HealBot_Config.ChatMessages[4].Message = this:GetText(); - end - - - - - - - - - - - - - - - - - - - - - - - - - - - - if HealBot_Config.ChatMessages then - HealBot_Config.ChatMessages[5].Message = this:GetText(); - end - - - - - - + + HealBot_Options_OnLoad(this); @@ -2802,3 +259,8 @@ + + + + + diff --git a/HealBot_Options_Buffs.lua b/HealBot_Options_Buffs.lua new file mode 100644 index 0000000..2be1da1 --- /dev/null +++ b/HealBot_Options_Buffs.lua @@ -0,0 +1,116 @@ +-- 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 + this:SetChecked(HealBot_Config.BuffWatchSelf[id]) + else + this:SetChecked(0) + 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 + + 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) + UIDropDownMenu_SetSelectedID(dropDown, val + 1) + end + + local selfCheck = getglobal("HealBot_Options_BuffSelf" .. i) + if selfCheck then + if HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[i] then + selfCheck:SetChecked(HealBot_Config.BuffWatchSelf[i]) + else + selfCheck:SetChecked(0) + end + end + end +end diff --git a/HealBot_Options_Buffs.xml b/HealBot_Options_Buffs.xml new file mode 100644 index 0000000..4688ebf --- /dev/null +++ b/HealBot_Options_Buffs.xml @@ -0,0 +1,372 @@ + +