diff --git a/HealBot_Controller_Aura.lua b/HealBot_Controller_Aura.lua index 9dee3c1..29f9d75 100644 --- a/HealBot_Controller_Aura.lua +++ b/HealBot_Controller_Aura.lua @@ -33,9 +33,32 @@ end function HealBot_CheckShamanWeaponBuff(spellName) local hasMainHandEnchant, _, _, hasOffHandEnchant = GetWeaponEnchantInfo() - if hasMainHandEnchant or hasOffHandEnchant then - return true + if not (hasMainHandEnchant or hasOffHandEnchant) then return false end + + local firstWord = string.match(spellName, "^(%w+)") + if not firstWord then return false end + + HealBot_ScanTooltip:SetOwner(UIParent, "ANCHOR_NONE") + local slots = {} + if hasMainHandEnchant then table.insert(slots, 16) end + if hasOffHandEnchant then table.insert(slots, 17) end + + for _, slot in ipairs(slots) do + HealBot_ScanTooltip:ClearLines() + HealBot_ScanTooltip:SetInventoryItem("player", slot) + for i = 1, HealBot_ScanTooltip:NumLines() do + local textObj = getglobal("HealBot_ScanTooltipTextLeft" .. i) + if textObj then + local text = textObj:GetText() + if text and string.find(text, firstWord) then + HealBot_ScanTooltip:Hide() + return true + end + end + end end + + HealBot_ScanTooltip:Hide() return false end @@ -104,7 +127,7 @@ function HealBot_CheckBuffs(unit) end if not hasIt then - if myClass == "SHAMAN" and UnitIsUnit(unit, "player") and string.find(spellName, " Weapon") then + if myClass == HEALBOT_SHAMAN and UnitIsUnit(unit, "player") and string.find(spellName, " Weapon") then hasIt = HealBot_CheckShamanWeaponBuff(spellName) end end diff --git a/HealBot_Localization.en.lua b/HealBot_Localization.en.lua index 8afa9ab..cf44909 100644 --- a/HealBot_Localization.en.lua +++ b/HealBot_Localization.en.lua @@ -320,13 +320,14 @@ HEALBOT_OPTIONS_SOUND2 = "Sound 2" HEALBOT_OPTIONS_SOUND3 = "Sound 3" HEALBOT_OPTIONS_HEAL_BUTTONS = "Healing bars"; -HEALBOT_OPTIONS_EMERGFILTER = "Show extra bars for"; +HEALBOT_OPTIONS_EMERGFILTER = "Show raid bars for"; HEALBOT_OPTIONS_GROUPHEALS = "Group"; HEALBOT_OPTIONS_GROUPHEALS_LABEL = "Group Only"; HEALBOT_OPTIONS_TANKHEALS = "Main tanks"; HEALBOT_OPTIONS_TARGETHEALS = "Targets"; -HEALBOT_OPTIONS_EMERGENCYHEALS= "Raid / Extra"; +HEALBOT_OPTIONS_EMERGENCYHEALS= "Raid"; +HEALBOT_OPTIONS_PETHEALS = "Pets"; HEALBOT_OPTIONS_HEALLEVEL = "Healing Level"; HEALBOT_OPTIONS_ALERTLEVEL = "Alert Level"; HEALBOT_OPTIONS_OVERHEAL = "Show Abort button when overhealing" diff --git a/HealBot_Options.lua b/HealBot_Options.lua index 9a974cc..7c49722 100644 --- a/HealBot_Options.lua +++ b/HealBot_Options.lua @@ -7,18 +7,7 @@ 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_PETS, HEALBOT_OPTIONS_MONITORMELEE, HEALBOT_OPTIONS_MONITORRANGE, HEALBOT_OPTIONS_MONITORHEALERS, diff --git a/HealBot_Options_Healing.lua b/HealBot_Options_Healing.lua index ce20d92..772f17b 100644 --- a/HealBot_Options_Healing.lua +++ b/HealBot_Options_Healing.lua @@ -33,6 +33,14 @@ function HealBot_Options_EmergencyHeals_OnClick(this) HealBot_Config.EmergencyHeals = this:GetChecked() or 0; HealBot_RecalcParty(); end +function HealBot_Options_PetHeals_OnLoad(this,text) + this.text = text + getglobal(this:GetName().."Text"):SetText(text); +end +function HealBot_Options_PetHeals_OnClick(this) + HealBot_Config.PetHeals = this:GetChecked() or 0; + HealBot_RecalcParty(); +end function HealBot_Options_OverHeal_OnValueChanged(this) HealBot_Config.OverHeal = HealBot_Options_Pct_OnValueChanged(this); end @@ -279,7 +287,7 @@ function HealBot_Options_EmergencyFilter_Reset() HealBot_EmergInc[HEALBOT_SHAMAN] = 0; HealBot_EmergInc[HEALBOT_WARLOCK] = 0; HealBot_EmergInc[HEALBOT_WARRIOR] = 0; - if HealBot_Config.EmergIncMonitor==2 then + if HealBot_Config.EmergIncMonitor==1 then HealBot_EmergInc[HEALBOT_DRUID] = 1; HealBot_EmergInc[HEALBOT_HUNTER] = 1; HealBot_EmergInc[HEALBOT_MAGE] = 1; @@ -289,27 +297,7 @@ function HealBot_Options_EmergencyFilter_Reset() HealBot_EmergInc[HEALBOT_SHAMAN] = 1; HealBot_EmergInc[HEALBOT_WARLOCK] = 1; HealBot_EmergInc[HEALBOT_WARRIOR] = 1; - elseif HealBot_Config.EmergIncMonitor==3 then - HealBot_EmergInc[HEALBOT_DRUID] = 1; - elseif HealBot_Config.EmergIncMonitor==4 then - HealBot_EmergInc[HEALBOT_HUNTER] = 1; - elseif HealBot_Config.EmergIncMonitor==5 then - HealBot_EmergInc[HEALBOT_MAGE] = 1; - elseif HealBot_Config.EmergIncMonitor==6 then - HealBot_EmergInc[HEALBOT_PALADIN] = 1; - elseif HealBot_Config.EmergIncMonitor==7 then - HealBot_EmergInc[HEALBOT_PRIEST] = 1; - elseif HealBot_Config.EmergIncMonitor==8 then - HealBot_EmergInc[HEALBOT_ROGUE] = 1; - elseif HealBot_Config.EmergIncMonitor==9 then - HealBot_EmergInc[HEALBOT_SHAMAN] = 1; - elseif HealBot_Config.EmergIncMonitor==10 then - HealBot_EmergInc[HEALBOT_WARLOCK] = 1; - elseif HealBot_Config.EmergIncMonitor==11 then - HealBot_EmergInc[HEALBOT_WARRIOR] = 1; - elseif HealBot_Config.EmergIncMonitor==12 then - -- Pets: no player classes enabled (handled separately in layout) - elseif HealBot_Config.EmergIncMonitor==13 then + elseif HealBot_Config.EmergIncMonitor==2 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]; @@ -319,7 +307,7 @@ function HealBot_Options_EmergencyFilter_Reset() HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN]; HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK]; HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR]; - elseif HealBot_Config.EmergIncMonitor==14 then + elseif HealBot_Config.EmergIncMonitor==3 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]; @@ -329,7 +317,7 @@ function HealBot_Options_EmergencyFilter_Reset() HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN]; HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK]; HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR]; - elseif HealBot_Config.EmergIncMonitor==15 then + elseif HealBot_Config.EmergIncMonitor==4 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]; @@ -339,7 +327,7 @@ function HealBot_Options_EmergencyFilter_Reset() HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN]; HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK]; HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR]; - elseif HealBot_Config.EmergIncMonitor==16 then + elseif HealBot_Config.EmergIncMonitor==5 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]; diff --git a/HealBot_Options_Healing.xml b/HealBot_Options_Healing.xml index ef1d845..18d0a13 100644 --- a/HealBot_Options_Healing.xml +++ b/HealBot_Options_Healing.xml @@ -95,6 +95,19 @@ HealBot_Options_EmergencyHeals_OnClick(this) + + + + + + + + + + HealBot_Options_PetHeals_OnLoad(this,HEALBOT_OPTIONS_PETHEALS) + HealBot_Options_PetHeals_OnClick(this) + + diff --git a/HealBot_View_Layout.lua b/HealBot_View_Layout.lua index 5e85306..76c56e7 100644 --- a/HealBot_View_Layout.lua +++ b/HealBot_View_Layout.lua @@ -602,7 +602,7 @@ function HealBot_Action_PartyChanged() numBars = numBars + 1; numHeaders = numHeaders + 1; end - if HealBot_Config.EmergIncMonitor == 2 then + if HealBot_Config.EmergIncMonitor == 1 then if GetNumRaidMembers() > 0 then for j = 1, 40 do local PossibleEmerg = 1; @@ -653,50 +653,7 @@ function HealBot_Action_PartyChanged() end end end - elseif HealBot_Config.EmergIncMonitor == 12 then - if GetNumRaidMembers() > 0 then - for j = 1, 40 do - local unit = "raidpet" .. j; - if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then - local ownerIndex = j; - local name = UnitName(unit) or "Pet"; - local _, _, subgroup = GetRaidRosterInfo(ownerIndex); - subgroup = subgroup or 1; - - if HealBot_Config.ExtraOrder == 1 then - order[unit] = name; - elseif HealBot_Config.ExtraOrder == 2 then - order[unit] = HEALBOT_OPTIONS_PETS; - elseif HealBot_Config.ExtraOrder == 3 then - order[unit] = subgroup; - else - order[unit] = 0 - UnitHealthMax(unit); - if UnitHealthMax(unit) > TempMaxH then TempMaxH = UnitHealthMax(unit); end - end - table.insert(units, unit); - numBars = numBars + 1; - end - end - else - local petUnits = { "pet", "partypet1", "partypet2", "partypet3", "partypet4" }; - for _, unit in ipairs(petUnits) do - if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then - local name = UnitName(unit) or "Pet"; - if HealBot_Config.ExtraOrder == 1 then - order[unit] = name; - elseif HealBot_Config.ExtraOrder == 2 then - order[unit] = HEALBOT_OPTIONS_PETS; - elseif HealBot_Config.ExtraOrder == 3 then - order[unit] = 1; - else - order[unit] = 0 - UnitHealthMax(unit); - if UnitHealthMax(unit) > TempMaxH then TempMaxH = UnitHealthMax(unit); end - end - table.insert(units, unit); - numBars = numBars + 1; - end - end - end + else if GetNumRaidMembers() > 0 then for j = 1, 40 do @@ -763,25 +720,29 @@ function HealBot_Action_PartyChanged() local TempSort = "init" TempMaxH = math.ceil(TempMaxH / 1000) * 1000; - if GetNumRaidMembers() > 0 or HealBot_Config.EmergIncMonitor == 12 then - for j = 1, 40 do - if not units[j] then break end - local name, rank, subgroup, level, class, fileName, zone, online, isDead; - local ownerIndex = nil; - if string.sub(units[j], 1, 7) == "raidpet" then - ownerIndex = tonumber(string.sub(units[j], 8)); - elseif string.sub(units[j], 1, 4) == "raid" then - ownerIndex = tonumber(string.sub(units[j], 5)); - end - if ownerIndex then - name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(ownerIndex); - end - - if string.sub(units[j], 1, 7) == "raidpet" or string.sub(units[j], 1, 8) == "partypet" or units[j] == "pet" then - name = UnitName(units[j]) or "Pet"; - class = HEALBOT_OPTIONS_PETS; - subgroup = subgroup or 1; - end + for j = 1, 40 do + if not units[j] then break end + local name, rank, subgroup, level, class, fileName, zone, online, isDead; + local ownerIndex = nil; + if string.sub(units[j], 1, 7) == "raidpet" then + ownerIndex = tonumber(string.sub(units[j], 8)); + elseif string.sub(units[j], 1, 4) == "raid" then + ownerIndex = tonumber(string.sub(units[j], 5)); + end + + if ownerIndex then + name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(ownerIndex); + else + name = UnitName(units[j]) or "not known"; + class = UnitClass(units[j]) or "not known"; + subgroup = 1; + end + + if string.sub(units[j], 1, 7) == "raidpet" or string.sub(units[j], 1, 8) == "partypet" or units[j] == "pet" then + name = UnitName(units[j]) or "Pet"; + class = HEALBOT_OPTIONS_PETS; + subgroup = subgroup or 1; + end if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 and HealBot_Config.ExtraOrder == 2 and TempSort ~= class then TempSort = class @@ -805,12 +766,47 @@ function HealBot_Action_PartyChanged() 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 + + last = last + 40 + local PetsValid = numBars; + if HealBot_Config.PetHeals == 1 then + if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then + HeaderPos[i + 1] = HEALBOT_OPTIONS_PETHEALS + numBars = numBars + 1; + numHeaders = numHeaders + 1; + end + if GetNumRaidMembers() > 0 then + for j = 1, 40 do + local unit = "raidpet" .. j; + 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 + else + local petUnits = { "pet", "partypet1", "partypet2", "partypet3", "partypet4" }; + for _, unit in ipairs(petUnits) do + if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then + i = i + 1; + HealBot_Action_SetHealButton(i, unit); + numBars = numBars + 1; + end + if i == last then break end + end + end + end + if numBars == PetsValid + 1 and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then + HeaderPos[PetsValid + 1] = nil; + numBars = numBars - 1; + numHeaders = numHeaders - 1; + end local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10 local OffsetY = bpadding; @@ -1096,7 +1092,11 @@ function HealBot_Action_AppendNewUnits() if CT_RA_MainTanks[j] then for k = 1, GetNumRaidMembers() do local unit = "raid" .. k - if UnitName(unit) == CT_RA_MainTanks[j] then + local skip = false + if UnitInParty(unit) and HealBot_Config.GroupHeals == 1 and not UnitIsUnit(unit, "player") then + skip = true + end + if not skip and UnitName(unit) == CT_RA_MainTanks[j] then table.insert(unitsToCheck, unit) end end @@ -1114,7 +1114,10 @@ function HealBot_Action_AppendNewUnits() if HealBot_Config.EmergencyHeals == 1 then if GetNumRaidMembers() > 0 then for j = 1, 40 do - table.insert(unitsToCheck, "raid" .. j) + local unit = "raid" .. j + if not (UnitInParty(unit) and HealBot_Config.GroupHeals == 1) then + table.insert(unitsToCheck, unit) + end end else for j = 1, 4 do diff --git a/README.md b/README.md index 16f025b..9220c21 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,10 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\ ### Change Log +**v1.6.2** +* **Hotfix - raid and party frames** - if getNumRaidMembers() > 0 wrapper around extra bars stopped from displaying all frames blocked from displaying Extras\Raid. +* **UI Update - Raid & Pets Split** - Split the "Raid / Extra" toggle into separate "Raid" and "Pets" toggles. Simplified the raid bars filter dropdown to core options (All, Melee, Ranged, Heals, Custom). + **v1.6.1** * **Hotfix - pet frames** - With class colours toggled extra frames for player pets were given some classy mint colour. * **Hotfi - raidframes in combat** - Modfied how frames behave when player leaves during combat. diff --git a/Talents.md b/Talents.md deleted file mode 100644 index 583181a..0000000 --- a/Talents.md +++ /dev/null @@ -1,40 +0,0 @@ -Druid: -Name - Rank - Effect -Genesis - 1 - increase damage and healing of periodic spells by 5% -Genesis - 2 - increase damage and healing of periodic spells by 10% -Genesis - 3 -increase damage and healing of periodic spells by 15% - -Gift of Nature - 1- Increases effectivenes of all healing spells by 2% -Gift of Nature - 2- Increases effectivenes of all healing spells by 4% -Gift of Nature - 3- Increases effectivenes of all healing spells by 6% -Gift of Nature - 4- Increases effectivenes of all healing spells by 8% -Gift of Nature - 5- Increases effectivenes of all healing spells by 10% - -Preservation - 1 - Increases the periodic healing of Regrowth by 10% if target is affected by Rejuvenation -Preservation - 2 - Increases the periodic healing of Regrowth by 20% if target is affected by Rejuvenation -Preservation - 3 - Increases the periodic healing of Regrowth by 30% if target is affected by Rejuvenation - -Paladin: - -Healing Light - 1 - Increases the amount of healed by Holy Light, Flash of Light and Holy Shock by 4% -Healing Light - 2 - Increases the amount of healed by Holy Light, Flash of Light and Holy Shock by 8% -Healing Light - 3 - Increases the amount of healed by Holy Light, Flash of Light and Holy Shock by 12% - -Ironclad - 1 - Improves healing done by 1% of current armour from items -Ironclad - 2 - Improves healing done by 2% of current armour from items - -Priest: - -Improved Renew - 1 - Improves amount healed by renew by 5% -Improved Renew - 2 - Improves amount healed by renew by 10% -Improved Renew - 3 - Improves amount healed by renew by 15% - -Spiritual Healing - 1 - Improves amount healed by all healing spells by 6% -Spiritual Healing - 2 - Improves amount healed by all healing spells by 12% -Spiritual Healing - 3 - Improves amount healed by all healing spells by 18% -Spiritual Healing - 4 - Improves amount healed by all healing spells by 24% -Spiritual Healing - 5 - Improves amount healed by all healing spells by 30% - -Shaman: - -none \ No newline at end of file