mirror of
https://github.com/Bluewhale1337/HealBotBlue.git
synced 2026-09-11 09:50:21 +00:00
Compare commits
49 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a6a9e3283 | |||
| d021441b32 | |||
| 99997b711a | |||
| 496013ae9c | |||
| f7443fcdf0 | |||
| a0d435eb70 | |||
| 048970d1b7 | |||
| d5dec0f1f0 | |||
| ad302f299e | |||
| 327cd7a08c | |||
| 2f01ca3f1b | |||
| 45ce2a024f | |||
| 2ab7a93a6e | |||
| 7cf0956a84 | |||
| 6c4297c126 | |||
| 4f7a06ad6f | |||
| 178d1184a3 | |||
| f1b7e3950f | |||
| faf040997e | |||
| 4c9f50770a | |||
| ed11046eda | |||
| d36ad994ea | |||
| a3f3d9e4c6 | |||
| caa3a03bc3 | |||
| 2b1ccb03c5 | |||
| 5340eb253a | |||
| bbff4a461c | |||
| 40ad96ae07 | |||
| 611f584b8d | |||
| 5f015c89e5 | |||
| e20c5baf74 | |||
| 9fd6f47946 | |||
| 1f339a8da5 | |||
| 00f9c3d485 | |||
| 41e4a15075 | |||
| 026d4093aa | |||
| db07c467a3 | |||
| c47d17f790 | |||
| dd9f9886b4 | |||
| 85ad55c1cb | |||
| 441a45150f | |||
| 0b610adaab | |||
| 609e2cc87b | |||
| e6ad9e7506 | |||
| 9f08b356e1 | |||
| 3845ada15f | |||
| 826bf64eda | |||
| 8854cd3caa | |||
| c8a5e4f0eb |
+1
-1
@@ -18,7 +18,7 @@
|
||||
<FontString name="$parent_text" inherits="GameFontNormalSmall">
|
||||
<Anchors>
|
||||
<Anchor point="CENTER">
|
||||
<Offset> <AbsDimension y="1"/> </Offset>
|
||||
<Offset> <AbsDimension y="0"/> </Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
|
||||
+3
-2
@@ -1,9 +1,9 @@
|
||||
## Interface: 11200
|
||||
## Title: HealBotBlue
|
||||
## Version: 1.5
|
||||
## Version: 1.6.5
|
||||
## Author: Bluewhale
|
||||
## Notes: Adds panel with skinable bars for healing and decursive
|
||||
## SavedVariables: HealBot_Config
|
||||
## SavedVariablesPerCharacter: HealBot_Config
|
||||
..\..\FrameXML\Fonts.xml
|
||||
..\..\FrameXML\OptionsFrameTemplates.xml
|
||||
..\..\FrameXML\UIPanelTemplates.xml
|
||||
@@ -27,3 +27,4 @@ HealBot_Options_CDC.xml
|
||||
HealBot_Options_Skins.xml
|
||||
HealBot_Options_Buffs.xml
|
||||
HealBot_Options_Chat.xml
|
||||
HealBot_Options_Auto.xml
|
||||
|
||||
@@ -123,6 +123,9 @@ end
|
||||
|
||||
function HealBot_SplitString(str, delimiter)
|
||||
local result = {}
|
||||
if not delimiter or delimiter == "" then
|
||||
return {str}
|
||||
end
|
||||
local start_pos = 1
|
||||
while true do
|
||||
local end_pos = string.find(str, delimiter, start_pos, true)
|
||||
|
||||
+103
-14
@@ -18,6 +18,20 @@
|
||||
<OnClick>HealBot_Action_HealUnit_OnClick(this,arg1);</OnClick>
|
||||
</Scripts>
|
||||
<Frames>
|
||||
<StatusBar name="$parentBar2" inherits="HealBot_StatusBar">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
<Anchor point="TOPRIGHT" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</StatusBar>
|
||||
<StatusBar name="$parentBar" inherits="HealBot_StatusBar">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
||||
@@ -73,23 +87,49 @@
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon6" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon5" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon7" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon6" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon8" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon7" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon9" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon8" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<Texture name="$parentIcon10" hidden="true">
|
||||
<Size><AbsDimension x="12" y="12"/></Size>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="$parentIcon9" relativePoint="RIGHT">
|
||||
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
</Layer>
|
||||
</Layers>
|
||||
</StatusBar>
|
||||
<StatusBar name="$parentBar2" inherits="HealBot_StatusBar">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
<Anchor point="TOPRIGHT" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</StatusBar>
|
||||
<StatusBar name="$parentBar3" inherits="HealBot_StatusBar" hidden="true">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="$parentBar" relativePoint="BOTTOMLEFT">
|
||||
@@ -232,6 +272,15 @@
|
||||
<Button name="HealBot_Action_HealUnit39" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit40" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit41" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit42" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit43" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit44" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit45" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit46" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit47" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit48" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit49" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit50" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||
|
||||
<Button name="HealBot_Action_HealUnit51" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit52" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
@@ -243,6 +292,46 @@
|
||||
<Button name="HealBot_Action_HealUnit58" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit59" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit60" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit61" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit62" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit63" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit64" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit65" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit66" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit67" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit68" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit69" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit70" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit71" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit72" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit73" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit74" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit75" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit76" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit77" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit78" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit79" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit80" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit81" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit82" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit83" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit84" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit85" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit86" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit87" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit88" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit89" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit90" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit91" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit92" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit93" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit94" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit95" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit96" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit97" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit98" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit99" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_HealUnit100" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||
|
||||
<Button name="HealBot_Action_Header1" inherits="HealingButtonTemplate4" text="Unit not set"/>
|
||||
<Button name="HealBot_Action_Header2" inherits="HealingButtonTemplate4" text="Unit not set"/>
|
||||
|
||||
+49
-10
@@ -2,6 +2,7 @@
|
||||
-- Handles tracking buffs/debuffs (auras) on group/raid units
|
||||
|
||||
HealBot_MissingBuffs = {}
|
||||
local StaticHasBuff = {}
|
||||
|
||||
function HealBot_UnitAffected(unit, effect)
|
||||
if not effect then return nil; end
|
||||
@@ -32,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
|
||||
|
||||
@@ -68,7 +92,10 @@ function HealBot_CheckBuffs(unit)
|
||||
}
|
||||
|
||||
-- Gather buffs on unit
|
||||
local hasBuff = {}
|
||||
local hasBuff = StaticHasBuff
|
||||
for k in pairs(hasBuff) do
|
||||
hasBuff[k] = nil
|
||||
end
|
||||
local i = 1
|
||||
while true do
|
||||
local buffTexture = UnitBuff(unit, i)
|
||||
@@ -91,7 +118,7 @@ function HealBot_CheckBuffs(unit)
|
||||
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
|
||||
if not (isSelfOnly and not UnitIsUnit(unit, "player")) then
|
||||
local spellName = HealBot_Buff_Spells[myClass][val]
|
||||
|
||||
local hasIt = hasBuff[spellName]
|
||||
@@ -100,7 +127,7 @@ function HealBot_CheckBuffs(unit)
|
||||
end
|
||||
|
||||
if not hasIt then
|
||||
if myClass == "SHAMAN" and 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
|
||||
@@ -123,6 +150,7 @@ local HealBot_TrackedHoTs = {
|
||||
["Interface\\Icons\\Spell_Holy_SealOfProtection"] = true,
|
||||
["Interface\\Icons\\Spell_Holy_Excorcism"] = true,
|
||||
["Interface\\Icons\\btnholyscriptures"] = true,
|
||||
["Interface\\Icons\\Spell_Holy_AshesToAshes"] = true,
|
||||
}
|
||||
|
||||
function HealBot_OnEvent_UnitAura(this, unit)
|
||||
@@ -132,19 +160,20 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
||||
if not HealBot_UnitIcons[unit] then
|
||||
HealBot_UnitIcons[unit] = {}
|
||||
end
|
||||
for j = 1, 5 do
|
||||
for j = 1, 10 do
|
||||
HealBot_UnitIcons[unit][j] = nil
|
||||
end
|
||||
local iconCount = 0
|
||||
local i = 1;
|
||||
HealBot_UnitDebuff[unit] = nil;
|
||||
while true do
|
||||
local debuff, tmp, debuff_type = UnitDebuff(unit, i, 1)
|
||||
if debuff then
|
||||
if iconCount < 5 then
|
||||
if iconCount < 10 then
|
||||
iconCount = iconCount + 1
|
||||
HealBot_UnitIcons[unit][iconCount] = debuff
|
||||
end
|
||||
if HealBot_CDCInc[UnitClass(unit)] == 1 and HealBot_DebuffWatch[debuff_type] == "YES" then
|
||||
if HealBot_CDCInc[UnitClass(unit)] == 1 and debuff_type and HealBot_DebuffWatch[debuff_type] then
|
||||
HealBot_UnitDebuff[unit] = debuff_type
|
||||
DebuffType = debuff_type;
|
||||
if HealBot_DebuffPriority[debuff_type] then
|
||||
@@ -153,7 +182,6 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
||||
end
|
||||
i = i + 1;
|
||||
else
|
||||
if i == 1 then HealBot_UnitDebuff[unit] = nil; end
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -162,12 +190,23 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
||||
while true do
|
||||
local buff = UnitBuff(unit, b)
|
||||
if not buff then break end
|
||||
if HealBot_TrackedHoTs[buff] and iconCount < 5 then
|
||||
if HealBot_TrackedHoTs[buff] and iconCount < 10 then
|
||||
iconCount = iconCount + 1
|
||||
HealBot_UnitIcons[unit][iconCount] = buff
|
||||
end
|
||||
b = b + 1
|
||||
end
|
||||
|
||||
local d = 1
|
||||
while true do
|
||||
local debuff = UnitDebuff(unit, d)
|
||||
if not debuff then break end
|
||||
if HealBot_TrackedHoTs[debuff] and iconCount < 10 then
|
||||
iconCount = iconCount + 1
|
||||
HealBot_UnitIcons[unit][iconCount] = debuff
|
||||
end
|
||||
d = d + 1
|
||||
end
|
||||
|
||||
if HealBot_UnitDebuff[unit] then
|
||||
if DebuffType and HealBot_Range_Check(unit, 27) == 1 then
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
-- Manages WoW Frame events and periodic updates, routing to respective services
|
||||
|
||||
HealBot_View_DirtyUnits = {}
|
||||
HealBot_View_DirtyPower = {}
|
||||
local HealBot_Timer1, HealsIn_Timer = 0, 0;
|
||||
HealBot_LastModState = ""
|
||||
|
||||
@@ -20,7 +21,7 @@ function HealBot_OnLoad(this)
|
||||
HealBot_View_DirtyUnits[unitID] = true
|
||||
end)
|
||||
HealBot_Model:RegisterObserver("UNIT_POWER_CHANGED", function(unitID)
|
||||
HealBot_View_DirtyUnits[unitID] = true
|
||||
HealBot_View_DirtyPower[unitID] = true
|
||||
end)
|
||||
HealBot_Model:RegisterObserver("UNIT_AURA_CHANGED", function(unitID)
|
||||
HealBot_View_DirtyUnits[unitID] = true
|
||||
@@ -30,9 +31,7 @@ function HealBot_OnLoad(this)
|
||||
end)
|
||||
HealBot_Model:RegisterObserver("EQUIPMENT_CHANGED", function(unitID)
|
||||
if unitID == "player" then
|
||||
HealBot_BonusScanner:ScanEquipment()
|
||||
HealBot_CalcEquipBonus = true;
|
||||
HealBot_RecalcSpells();
|
||||
HealBot_EquipChangeTimer = 1
|
||||
end
|
||||
end)
|
||||
end
|
||||
@@ -43,17 +42,20 @@ end
|
||||
|
||||
function HealBot_OnUpdate(this, arg1)
|
||||
if HealBot_Action_TooltipUnit and HealBot_Tooltip:IsVisible() then
|
||||
local currentModState = ""
|
||||
if IsShiftKeyDown() then currentModState = currentModState .. "S" end
|
||||
if IsControlKeyDown() then currentModState = currentModState .. "C" end
|
||||
if IsAltKeyDown() then currentModState = currentModState .. "A" end
|
||||
local s = IsShiftKeyDown() and true or false
|
||||
local c = IsControlKeyDown() and true or false
|
||||
local a = IsAltKeyDown() and true or false
|
||||
|
||||
if HealBot_LastModState ~= currentModState then
|
||||
HealBot_LastModState = currentModState
|
||||
if HealBot_LastModS ~= s or HealBot_LastModC ~= c or HealBot_LastModA ~= a then
|
||||
HealBot_LastModS = s
|
||||
HealBot_LastModC = c
|
||||
HealBot_LastModA = a
|
||||
HealBot_Action_RefreshTooltip(HealBot_Action_TooltipUnit)
|
||||
end
|
||||
else
|
||||
HealBot_LastModState = ""
|
||||
HealBot_LastModS = false
|
||||
HealBot_LastModC = false
|
||||
HealBot_LastModA = false
|
||||
end
|
||||
|
||||
if HealBot_TargetRestorePending then
|
||||
@@ -73,10 +75,28 @@ function HealBot_OnUpdate(this, arg1)
|
||||
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
|
||||
local unitID, _ = next(HealBot_View_DirtyUnits)
|
||||
while unitID do
|
||||
HealBot_Action_RefreshButtons(unitID)
|
||||
HealBot_View_DirtyUnits[unitID] = nil
|
||||
HealBot_View_DirtyPower[unitID] = nil -- Skip fast path if doing full refresh
|
||||
unitID, _ = next(HealBot_View_DirtyUnits)
|
||||
end
|
||||
|
||||
local powerID, _ = next(HealBot_View_DirtyPower)
|
||||
while powerID do
|
||||
HealBot_Action_RefreshPower(powerID)
|
||||
HealBot_View_DirtyPower[powerID] = nil
|
||||
powerID, _ = next(HealBot_View_DirtyPower)
|
||||
end
|
||||
|
||||
if HealBot_EquipChangeTimer > 0 then
|
||||
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
|
||||
if HealBot_EquipChangeTimer <= 0 then
|
||||
HealBot_EquipChangeTimer = 0
|
||||
HealBot_BonusScanner:ScanEquipment()
|
||||
HealBot_CalcEquipBonus = true;
|
||||
HealBot_RecalcSpells();
|
||||
end
|
||||
end
|
||||
|
||||
@@ -85,20 +105,12 @@ function HealBot_OnUpdate(this, arg1)
|
||||
if not HealBot_IsFighting then
|
||||
HealsIn_Timer = HealsIn_Timer + 1;
|
||||
if HealsIn_Timer >= 10 then
|
||||
HealBot_HealsIn = {};
|
||||
HealBot_Healers = {};
|
||||
for k in pairs(HealBot_HealsIn) do HealBot_HealsIn[k] = nil end
|
||||
for k in pairs(HealBot_Healers) do HealBot_Healers[k] = nil end
|
||||
HealsIn_Timer = 0;
|
||||
end
|
||||
|
||||
if HealBot_EquipChangeTimer > 0 then
|
||||
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
|
||||
if HealBot_EquipChangeTimer <= 0 then
|
||||
HealBot_EquipChangeTimer = 0
|
||||
HealBot_BonusScanner:ScanEquipment()
|
||||
HealBot_CalcEquipBonus = true;
|
||||
HealBot_RecalcSpells();
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if HealBot_SpellsInitFlag > 1 then
|
||||
HealBot_SpellsInitFlag = HealBot_SpellsInitFlag + 1;
|
||||
@@ -131,32 +143,28 @@ local HealBot_EventHandlers = {
|
||||
HealBot_OnEvent_UnitHealth(this, arg1)
|
||||
end,
|
||||
["UNIT_MANA"] = function(this, arg1)
|
||||
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
|
||||
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 arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
|
||||
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 arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
|
||||
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 arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
|
||||
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)
|
||||
@@ -182,6 +190,16 @@ local HealBot_EventHandlers = {
|
||||
HealBot_Model:NotifyObservers("ROSTER_CHANGED")
|
||||
HealBot_OnEvent_PartyMembersChanged(this)
|
||||
end,
|
||||
["RAID_ROSTER_UPDATE"] = 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")
|
||||
@@ -201,8 +219,6 @@ local HealBot_EventHandlers = {
|
||||
["SPELLCAST_FAILED"] = function(this) HealBot_OnEvent_SpellcastStop(this, "SPELLCAST_FAILED") 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,
|
||||
@@ -212,11 +228,10 @@ local HealBot_EventHandlers = {
|
||||
HealBot_OnEvent_PlayerEquipmentChanged(this)
|
||||
end,
|
||||
["UNIT_INVENTORY_CHANGED"] = function(this, arg1)
|
||||
if arg1 ~= "player" then return end
|
||||
HealBot_Model:NotifyObservers("EQUIPMENT_CHANGED", arg1)
|
||||
HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1)
|
||||
end,
|
||||
["PET_BAR_SHOWGRID"] = function(this) HealBot_OnEvent_PartyMembersChanged(this) end,
|
||||
["PET_BAR_HIDEGRID"] = function(this) HealBot_OnEvent_PartyMembersChanged(this) end,
|
||||
["UNIT_PET"] = function(this, arg1) HealBot_OnEvent_PartyMembersChanged(this) end,
|
||||
["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) end,
|
||||
["UPDATE_SHAPESHIFT_FORM"] = function(this) HealBot_UpdateShapeshiftForm() end,
|
||||
@@ -286,10 +301,9 @@ function HealBot_OnEvent_VariablesLoaded(this)
|
||||
this:RegisterEvent("PLAYER_REGEN_ENABLED");
|
||||
this:RegisterEvent("PLAYER_TARGET_CHANGED");
|
||||
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
||||
this:RegisterEvent("RAID_ROSTER_UPDATE");
|
||||
this:RegisterEvent("PARTY_MEMBER_DISABLE");
|
||||
this:RegisterEvent("PARTY_MEMBER_ENABLE");
|
||||
this:RegisterEvent("PET_BAR_SHOWGRID");
|
||||
this:RegisterEvent("PET_BAR_HIDEGRID");
|
||||
this:RegisterEvent("UNIT_PET");
|
||||
this:RegisterEvent("UNIT_HEALTH");
|
||||
this:RegisterEvent("UNIT_MANA");
|
||||
@@ -301,8 +315,6 @@ function HealBot_OnEvent_VariablesLoaded(this)
|
||||
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");
|
||||
@@ -321,7 +333,6 @@ 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
|
||||
@@ -338,7 +349,7 @@ function HealBot_OnEvent_ZoneChanged(this)
|
||||
end
|
||||
|
||||
function HealBot_OnEvent_PlayerRegenDisabled(this)
|
||||
HealBot_RecalcParty();
|
||||
-- Removed HealBot_RecalcParty();
|
||||
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
|
||||
if HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then
|
||||
HealBot_Action.ProgrammaticHide = true;
|
||||
@@ -378,7 +389,10 @@ function HealBot_OnEvent_PlayerRegenEnabled(this)
|
||||
end
|
||||
|
||||
function HealBot_OnEvent_PlayerTargetChanged(this)
|
||||
HealBot_RecalcParty();
|
||||
if HealBot_Action_UnitButtons and HealBot_Action_UnitButtons["target"] then
|
||||
HealBot_View_DirtyUnits["target"] = true
|
||||
HealBot_OnEvent_UnitAura(nil, "target");
|
||||
end
|
||||
end
|
||||
|
||||
function HealBot_OnEvent_PartyMembersChanged(this)
|
||||
@@ -439,20 +453,6 @@ function HealBot_OnEvent_TalentsChanged(this, arg1)
|
||||
HealBot_AddDebug("HB: TalentsChanged");
|
||||
end
|
||||
|
||||
function HealBot_OnEvent_BagUpdate(this, bag)
|
||||
if HealBot_EquipChangeTimer == 0 then
|
||||
HealBot_RecalcSpells();
|
||||
end
|
||||
end
|
||||
|
||||
function HealBot_OnEvent_BagUpdateCooldown(this, bag)
|
||||
if not bag then
|
||||
bag = "undef"
|
||||
elseif HealBot_EquipChangeTimer == 0 then
|
||||
HealBot_RecalcSpells();
|
||||
end
|
||||
end
|
||||
|
||||
function HealBot_OnEvent_PlayerEnteringWorld(this)
|
||||
HealBot_IsFighting = false;
|
||||
-- Re-apply the refresh hook late in case another addon overrode it during load
|
||||
|
||||
@@ -246,7 +246,7 @@ function HealBot_CheckCasting(unit)
|
||||
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 not bar.txt then bar.txt = getglobal(bar:GetName() .. "_text") end
|
||||
|
||||
if HealBot_IsCasting == false and HealBot_AbortButton == 0 then
|
||||
bar:SetStatusBarColor(ar, ag, ab, 0);
|
||||
@@ -462,7 +462,8 @@ end
|
||||
|
||||
function HealBot_CanCastSpell(spell, unit)
|
||||
local this = HealBot_Spells[spell];
|
||||
if this.Mana > UnitMana("player") then return false end;
|
||||
-- Removed manual mana check so WoW can properly handle 0-cost buffs (Clearcasting/Inner Focus)
|
||||
-- and so tooltips can render in red instead of disappearing.
|
||||
if this.BagSlot then
|
||||
local bag, slot = HealBot_UnpackBagSlot(this.BagSlot);
|
||||
local start, duration, enable = GetContainerItemCooldown(bag, slot);
|
||||
@@ -592,9 +593,7 @@ function HealBot_InitSpells()
|
||||
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
|
||||
|
||||
@@ -609,47 +608,47 @@ function HealBot_InitGetSpellData(spell, id, class)
|
||||
|
||||
HealBot_ScanTooltip:SetOwner(HealBot_ScanTooltip, "ANCHOR_NONE")
|
||||
HealBot_ScanTooltip:SetSpell(id, BOOKTYPE_SPELL);
|
||||
tmpText = getglobal("HealBot_ScanTooltipTextLeft2");
|
||||
if (tmpText:GetText()) then
|
||||
line = tmpText:GetText();
|
||||
tmpTest, tmpTest, _mana = string.find(line, HEALBOT_TOOLTIP_MANA);
|
||||
else
|
||||
HealBot_Report_Error("================================");
|
||||
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
|
||||
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
|
||||
_mana = 0;
|
||||
_range = 40;
|
||||
_cast = 0;
|
||||
line = nil;
|
||||
|
||||
for lineNum = 2, 6 do
|
||||
local lText = getglobal("HealBot_ScanTooltipTextLeft"..lineNum);
|
||||
if lText and lText:IsVisible() and lText:GetText() then
|
||||
local txt = lText:GetText();
|
||||
local t1, t2, match;
|
||||
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_MANA);
|
||||
if match then _mana = match; end
|
||||
|
||||
if txt == HEALBOT_TOOLTIP_INSTANT_CAST or txt == "Instant" then
|
||||
_cast = 0;
|
||||
elseif txt == HEALBOT_TOOLTIP_CHANNELED then
|
||||
_cast = 0;
|
||||
else
|
||||
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_CAST_TIME);
|
||||
if match then _cast = match; end
|
||||
end
|
||||
|
||||
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_RANGE);
|
||||
if match then _range = match; end
|
||||
|
||||
if not string.find(txt, HEALBOT_TOOLTIP_MANA) and txt ~= HEALBOT_TOOLTIP_INSTANT_CAST and txt ~= "Instant" and txt ~= HEALBOT_TOOLTIP_CHANNELED and not string.find(txt, HEALBOT_TOOLTIP_CAST_TIME) and not string.find(txt, HEALBOT_TOOLTIP_RANGE) then
|
||||
if not line then line = txt; end
|
||||
end
|
||||
end
|
||||
|
||||
local rText = getglobal("HealBot_ScanTooltipTextRight"..lineNum);
|
||||
if rText and rText:IsVisible() and rText:GetText() then
|
||||
local txt = rText:GetText();
|
||||
local t1, t2, match;
|
||||
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_RANGE);
|
||||
if match then _range = match; end
|
||||
end
|
||||
end
|
||||
|
||||
tmpText = getglobal("HealBot_ScanTooltipTextRight2");
|
||||
if (tmpText:GetText()) then
|
||||
line = tmpText:GetText();
|
||||
tmpTest, tmpTest, _range = string.find(line, HEALBOT_TOOLTIP_RANGE);
|
||||
else
|
||||
HealBot_Report_Error("================================");
|
||||
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
|
||||
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
|
||||
end
|
||||
|
||||
tmpText = getglobal("HealBot_ScanTooltipTextLeft3");
|
||||
_cast = nil;
|
||||
if (tmpText:GetText()) then
|
||||
line = tmpText:GetText();
|
||||
if (line == HEALBOT_TOOLTIP_INSTANT_CAST) then
|
||||
_cast = 0;
|
||||
elseif line == HEALBOT_TOOLTIP_CHANNELED then
|
||||
_cast = 0;
|
||||
elseif (tmpText) then
|
||||
tmpTest, tmpTest, _cast = string.find(line, HEALBOT_TOOLTIP_CAST_TIME);
|
||||
end
|
||||
else
|
||||
HealBot_Report_Error("================================");
|
||||
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
|
||||
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
|
||||
end
|
||||
|
||||
tmpText = getglobal("HealBot_ScanTooltipTextLeft4");
|
||||
tmpTest = nil;
|
||||
if (tmpText:GetText()) then
|
||||
line = tmpText:GetText();
|
||||
if line then
|
||||
if class == "PRIEST" then
|
||||
if string.sub(spell, 1, 14) == string.sub(HEALBOT_POWER_WORD_SHIELD, 1, 14) then
|
||||
tmpTest, tmpTest, _HealsMin, _shield = string.find(line, HEALBOT_SPELL_PATTERN_SHIELD);
|
||||
|
||||
+27
-14
@@ -2,6 +2,20 @@ HealBot_ConfigDefaults = {
|
||||
ShowManaBars=0,
|
||||
ManaBarsHealersOnly=0,
|
||||
Version = HEALBOT_VERSION,
|
||||
AutoSwap_Enabled = 0,
|
||||
AutoSwap_Profiles = {
|
||||
[1] = HEALBOT_SKINS_STD,
|
||||
[2] = HEALBOT_SKINS_STD,
|
||||
[3] = HEALBOT_SKINS_STD,
|
||||
[4] = HEALBOT_SKINS_STD,
|
||||
[5] = HEALBOT_SKINS_STD,
|
||||
},
|
||||
bmaxrows = {
|
||||
[HEALBOT_SKINS_STD] = 0,
|
||||
},
|
||||
GridOrientation = {
|
||||
[HEALBOT_SKINS_STD] = 1,
|
||||
},
|
||||
AlertLevel = 0.95,
|
||||
AutoClose = 1,
|
||||
PanelSounds = 1,
|
||||
@@ -181,7 +195,17 @@ HealBot_ConfigDefaults = {
|
||||
Current_Skin = "Modern Flat",
|
||||
Skin_ID = 1,
|
||||
Skins = {"Modern Flat", HEALBOT_SKINS_STD, "HealBot Party", "HealBot Raid", "Alteric Valley"},
|
||||
AutoSwap_Enabled = 0,
|
||||
AutoSwap_Profiles = {
|
||||
[1] = "Modern Flat", -- Solo
|
||||
[2] = "HealBot Party", -- Party (2-5)
|
||||
[3] = "HealBot Raid", -- Raid 15 (6-15)
|
||||
[4] = "HealBot Raid", -- Raid 25 (16-25)
|
||||
[5] = "HealBot Raid", -- Raid 40 (26-40)
|
||||
},
|
||||
numcols = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 4, ["Alteric Valley"] = 2, ["Modern Flat"] = 1},
|
||||
bmaxrows = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 0},
|
||||
GridOrientation = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["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},
|
||||
@@ -222,6 +246,7 @@ HealBot_ConfigDefaults = {
|
||||
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},
|
||||
biconsize = {[HEALBOT_SKINS_STD] = 12, ["HealBot Party"] = 12, ["HealBot Raid"] = 12, ["Alteric Valley"] = 12, ["Modern Flat"] = 12},
|
||||
ShowTooltip = 1,
|
||||
ShowManaBars = 0,
|
||||
ManaBarsHealersOnly = 0,
|
||||
@@ -250,18 +275,6 @@ HEALBOT_ADDON_ID="HealBot_Heals"
|
||||
|
||||
HealBot_AbortButton=1;
|
||||
|
||||
HealBot_Groups = {
|
||||
["ITEMS"] = {
|
||||
HEALBOT_BANDAGES,
|
||||
HEALBOT_HEALING_POTIONS,
|
||||
HEALBOT_HEALTHSTONES,
|
||||
},
|
||||
["PALADIN"] = {
|
||||
HEALBOT_HOLY_LIGHT,
|
||||
HEALBOT_FLASH_OF_LIGHT,
|
||||
},
|
||||
}
|
||||
|
||||
HealBot_Spells = {
|
||||
-- Cast = secs until effect starts
|
||||
-- Channel = secs until caster available
|
||||
@@ -545,7 +558,7 @@ HealBot_Debuff_Types = {
|
||||
HealBot_IsFighting = false;
|
||||
|
||||
HealBot_DebuffPriority = {"none"};
|
||||
HealBot_DebuffWatch = {[HEALBOT_DISEASE_en]="NO", [HEALBOT_MAGIC_en]="NO", [HEALBOT_POISON_en]="NO", [HEALBOT_CURSE_en]="NO"};
|
||||
HealBot_DebuffWatch = {[HEALBOT_DISEASE_en]=false, [HEALBOT_MAGIC_en]=false, [HEALBOT_POISON_en]=false, [HEALBOT_CURSE_en]=false};
|
||||
|
||||
HealBot_Heals = {};
|
||||
|
||||
@@ -560,7 +573,7 @@ HealBot_Action_TooltipUnit=nil;
|
||||
HealBot_Ressing = {};
|
||||
HealBot_IamRessing = false;
|
||||
|
||||
-- Table Recycling Pool (Puppeteer-inspired)
|
||||
-- Table Recycling Pool
|
||||
local tablePool = {}
|
||||
function HealBot_GetTable()
|
||||
local t = table.remove(tablePool)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
HEALBOT_VERSION = "1.5";
|
||||
HEALBOT_VERSION = GetAddOnMetadata("HealBotBlue", "Version");
|
||||
|
||||
-------------
|
||||
-- ENGLISH --
|
||||
@@ -320,12 +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= "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"
|
||||
|
||||
+6
-12
@@ -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,
|
||||
@@ -234,7 +223,7 @@ function HealBot_Options_OnLoad(this)
|
||||
table.insert(UISpecialFrames,this:GetName());
|
||||
|
||||
-- Tabs
|
||||
PanelTemplates_SetNumTabs(this,7);
|
||||
PanelTemplates_SetNumTabs(this,8);
|
||||
this.selectedTab = 1;
|
||||
PanelTemplates_UpdateTabs(this);
|
||||
HealBot_Options_ShowPanel(this.selectedTab);
|
||||
@@ -312,8 +301,13 @@ function HealBot_Options_SetSkins()
|
||||
HealBot_Options_BarAlphaInHeal:SetValue(HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]);
|
||||
HealBot_Options_BarTextureS:SetValue(HealBot_Config.btexture[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_BarHeightS:SetValue(HealBot_Config.bheight[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_AbortBarSize:SetValue(HealBot_Config.abortsize[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_FontHeight:SetValue(HealBot_Config.btextheight[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_IconSizeS:SetValue(HealBot_Config.biconsize[HealBot_Config.Current_Skin] or 12)
|
||||
HealBot_Options_BarWidthS:SetValue(HealBot_Config.bwidth[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_BarNumColsS:SetValue(HealBot_Config.numcols[HealBot_Config.Current_Skin])
|
||||
HealBot_Options_BarMaxRowsS:SetValue((HealBot_Config.bmaxrows and HealBot_Config.bmaxrows[HealBot_Config.Current_Skin]) or 0)
|
||||
HealBot_Options_GridOrientation:SetChecked(((HealBot_Config.GridOrientation and HealBot_Config.GridOrientation[HealBot_Config.Current_Skin]) == 2) and 1 or nil)
|
||||
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)
|
||||
|
||||
+5
-27
@@ -94,7 +94,7 @@
|
||||
<Frame name="HealBot_Options" toplevel="true" frameStrata="DIALOG"
|
||||
movable="true" parent="UIParent" enableMouse="true" hidden="true">
|
||||
<Size>
|
||||
<AbsDimension x="420" y="455"/>
|
||||
<AbsDimension x="480" y="455"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="CENTER">
|
||||
@@ -206,38 +206,16 @@
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Button>
|
||||
<Button name="HealBot_Options_Defaults" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_DEFAULTS">
|
||||
<Size>
|
||||
<AbsDimension x="80" y="22"/>
|
||||
</Size>
|
||||
<Button name="HealBot_OptionsTab8" inherits="HealBot_Options_Tab" id="8" text="Auto">
|
||||
<Anchors>
|
||||
<Anchor point="BOTTOM" relativePoint="BOTTOM">
|
||||
<Anchor point="LEFT" relativeTo="HealBot_OptionsTab7" relativePoint="RIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="-50" y="15"/>
|
||||
<AbsDimension x="-14" y="0" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnClick>HealBot_Options_Defaults_OnClick(this)</OnClick>
|
||||
</Scripts>
|
||||
</Button>
|
||||
<Button name="HealBot_Options_CloseButton" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_CLOSE">
|
||||
<Size>
|
||||
<AbsDimension x="80" y="22"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="BOTTOM" relativePoint="BOTTOM">
|
||||
<Offset>
|
||||
<AbsDimension x="50" y="15"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnClick>
|
||||
HideUIPanel(this:GetParent());
|
||||
</OnClick>
|
||||
</Scripts>
|
||||
</Button>
|
||||
|
||||
</Frames>
|
||||
<Scripts>
|
||||
<OnLoad>HealBot_Options_OnLoad(this);</OnLoad>
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
function HealBot_Options_AutoSwap_OnClick(this)
|
||||
if this:GetChecked() then
|
||||
HealBot_Config.AutoSwap_Enabled = 1
|
||||
else
|
||||
HealBot_Config.AutoSwap_Enabled = 0
|
||||
end
|
||||
HealBot_Action_PartyChanged()
|
||||
end
|
||||
|
||||
function HealBot_Options_Auto_Initialize()
|
||||
local dropdownName = UIDROPDOWNMENU_OPEN_MENU
|
||||
if not dropdownName then return end
|
||||
local dropdownFrame = getglobal(dropdownName)
|
||||
if not dropdownFrame then return end
|
||||
local id = dropdownFrame:GetID()
|
||||
if not id then return end
|
||||
|
||||
for i=1, getn(HealBot_Config.Skins), 1 do
|
||||
local info = {}
|
||||
info.text = HealBot_Config.Skins[i]
|
||||
info.func = HealBot_Options_Auto_OnSelect
|
||||
info.value = id
|
||||
if not HealBot_Config.AutoSwap_Profiles then HealBot_Config.AutoSwap_Profiles = {} end
|
||||
if HealBot_Config.AutoSwap_Profiles[id] == HealBot_Config.Skins[i] then
|
||||
info.checked = 1
|
||||
else
|
||||
info.checked = nil
|
||||
end
|
||||
UIDropDownMenu_AddButton(info)
|
||||
end
|
||||
end
|
||||
|
||||
function HealBot_Options_Auto_OnSelect()
|
||||
local skin = this:GetText()
|
||||
local id = this.value
|
||||
if not id or not skin then return end
|
||||
|
||||
if not HealBot_Config.AutoSwap_Profiles then HealBot_Config.AutoSwap_Profiles = {} end
|
||||
HealBot_Config.AutoSwap_Profiles[id] = skin
|
||||
|
||||
local dropdowns = {
|
||||
"HealBot_Options_Auto_Solo",
|
||||
"HealBot_Options_Auto_Party",
|
||||
"HealBot_Options_Auto_Raid15",
|
||||
"HealBot_Options_Auto_Raid25",
|
||||
"HealBot_Options_Auto_Raid40"
|
||||
}
|
||||
local dropdownName = dropdowns[id]
|
||||
local dropdownFrame = getglobal(dropdownName)
|
||||
HealBot_UIDropDownMenu_SetSelectedValue(dropdownFrame, skin)
|
||||
UIDropDownMenu_SetText(skin, dropdownFrame)
|
||||
|
||||
HealBot_Action_PartyChanged()
|
||||
end
|
||||
|
||||
function HealBot_Options_Auto_OnShow(this)
|
||||
if HealBot_Config.AutoSwap_Enabled == 1 then
|
||||
HealBot_Options_AutoSwap:SetChecked(1)
|
||||
else
|
||||
HealBot_Options_AutoSwap:SetChecked(nil)
|
||||
end
|
||||
|
||||
local dropdowns = {
|
||||
"HealBot_Options_Auto_Solo",
|
||||
"HealBot_Options_Auto_Party",
|
||||
"HealBot_Options_Auto_Raid15",
|
||||
"HealBot_Options_Auto_Raid25",
|
||||
"HealBot_Options_Auto_Raid40"
|
||||
}
|
||||
for id, name in ipairs(dropdowns) do
|
||||
local dropdownFrame = getglobal(name)
|
||||
if dropdownFrame then
|
||||
UIDropDownMenu_SetWidth(150, dropdownFrame)
|
||||
if not HealBot_Config.AutoSwap_Profiles then HealBot_Config.AutoSwap_Profiles = {} end
|
||||
local skin = HealBot_Config.AutoSwap_Profiles[id]
|
||||
if skin then
|
||||
HealBot_UIDropDownMenu_SetSelectedValue(dropdownFrame, skin)
|
||||
UIDropDownMenu_SetText(skin, dropdownFrame)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,152 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
|
||||
<Script file="HealBot_Options_Auto.lua" />
|
||||
<Frame name="HealBot_Options_Panel8" parent="HealBot_Options" hidden="true" setAllPoints="true">
|
||||
<Frames>
|
||||
<CheckButton name="HealBot_Options_AutoSwap" inherits="OptionsCheckButtonTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="25" y="-30" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
getglobal(this:GetName().."Text"):SetText("Enable Auto-Swap");
|
||||
</OnLoad>
|
||||
<OnClick>
|
||||
HealBot_Options_AutoSwap_OnClick(this);
|
||||
</OnClick>
|
||||
</Scripts>
|
||||
</CheckButton>
|
||||
|
||||
<Frame name="HealBot_Options_Auto_Solo" inherits="UIDropDownMenuTemplate" id="1">
|
||||
<Layers>
|
||||
<Layer level="BACKGROUND">
|
||||
<FontString name="$parentLabel" text="Solo Skin:" inherits="GameFontNormalSmall">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="-10" y="15" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="30" y="-80" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
|
||||
<Frame name="HealBot_Options_Auto_Party" inherits="UIDropDownMenuTemplate" id="2">
|
||||
<Layers>
|
||||
<Layer level="BACKGROUND">
|
||||
<FontString name="$parentLabel" text="Party Skin:" inherits="GameFontNormalSmall">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="-10" y="15" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="30" y="-130" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
|
||||
<Frame name="HealBot_Options_Auto_Raid15" inherits="UIDropDownMenuTemplate" id="3">
|
||||
<Layers>
|
||||
<Layer level="BACKGROUND">
|
||||
<FontString name="$parentLabel" text="Raid 15 Skin:" inherits="GameFontNormalSmall">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="-10" y="15" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="30" y="-180" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
|
||||
<Frame name="HealBot_Options_Auto_Raid25" inherits="UIDropDownMenuTemplate" id="4">
|
||||
<Layers>
|
||||
<Layer level="BACKGROUND">
|
||||
<FontString name="$parentLabel" text="Raid 25 Skin:" inherits="GameFontNormalSmall">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="-10" y="15" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="30" y="-230" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
|
||||
<Frame name="HealBot_Options_Auto_Raid40" inherits="UIDropDownMenuTemplate" id="5">
|
||||
<Layers>
|
||||
<Layer level="BACKGROUND">
|
||||
<FontString name="$parentLabel" text="Raid 40 Skin:" inherits="GameFontNormalSmall">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="-10" y="15" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="30" y="-280" /></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
|
||||
</Frames>
|
||||
<Scripts>
|
||||
<OnShow>
|
||||
HealBot_Options_Auto_OnShow(this);
|
||||
</OnShow>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
</Ui>
|
||||
@@ -123,7 +123,7 @@
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-20" />
|
||||
<AbsDimension x="0" y="-35" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
@@ -160,7 +160,7 @@
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff2" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-20" />
|
||||
<AbsDimension x="0" y="-35" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
@@ -197,7 +197,7 @@
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff3" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-20" />
|
||||
<AbsDimension x="0" y="-35" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
@@ -271,7 +271,7 @@
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff5" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-20" />
|
||||
<AbsDimension x="0" y="-35" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
@@ -308,7 +308,7 @@
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff6" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-20" />
|
||||
<AbsDimension x="0" y="-35" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
@@ -345,7 +345,7 @@
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff7" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-20" />
|
||||
<AbsDimension x="0" y="-35" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
|
||||
@@ -247,16 +247,16 @@ 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" }
|
||||
HealBot_DebuffWatch = {[HEALBOT_DISEASE_en]=false, [HEALBOT_MAGIC_en]=false, [HEALBOT_POISON_en]=false, [HEALBOT_CURSE_en]=false }
|
||||
if spell ~= "None" then
|
||||
table.foreach(HealBot_Debuff_Types[spell], function (index,debuff)
|
||||
HealBot_DebuffWatch[debuff]="YES";
|
||||
HealBot_DebuffWatch[debuff]=true;
|
||||
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";
|
||||
HealBot_DebuffWatch[debuff]=true;
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -44,6 +44,11 @@ function HealBot_Options_FontHeight_OnValueChanged(this)
|
||||
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
|
||||
HealBot_Action_ResetSkin()
|
||||
end
|
||||
function HealBot_Options_IconSizeS_OnValueChanged(this)
|
||||
HealBot_Config.biconsize[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());
|
||||
|
||||
@@ -265,8 +265,38 @@
|
||||
</Scripts>
|
||||
</CheckButton>
|
||||
|
||||
|
||||
|
||||
<Button name="HealBot_Options_Defaults" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_DEFAULTS">
|
||||
<Size>
|
||||
<AbsDimension x="80" y="22"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="BOTTOM" relativePoint="BOTTOM">
|
||||
<Offset>
|
||||
<AbsDimension x="-50" y="15"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnClick>HealBot_Options_Defaults_OnClick(this)</OnClick>
|
||||
</Scripts>
|
||||
</Button>
|
||||
<Button name="HealBot_Options_CloseButton" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_CLOSE">
|
||||
<Size>
|
||||
<AbsDimension x="80" y="22"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="BOTTOM" relativePoint="BOTTOM">
|
||||
<Offset>
|
||||
<AbsDimension x="50" y="15"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnClick>
|
||||
HideUIPanel(this:GetParent():GetParent());
|
||||
</OnClick>
|
||||
</Scripts>
|
||||
</Button>
|
||||
</Frames>
|
||||
</Frame>
|
||||
|
||||
|
||||
+13
-25
@@ -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];
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>HealBot_Options_GroupHeals_OnLoad(this,HEALBOT_OPTIONS_GROUPHEALS)</OnLoad>
|
||||
<OnLoad>HealBot_Options_GroupHeals_OnLoad(this,HEALBOT_OPTIONS_GROUPHEALS_LABEL)</OnLoad>
|
||||
<OnClick>HealBot_Options_GroupHeals_OnClick(this)</OnClick>
|
||||
</Scripts>
|
||||
</CheckButton>
|
||||
@@ -95,6 +95,19 @@
|
||||
<OnClick>HealBot_Options_EmergencyHeals_OnClick(this)</OnClick>
|
||||
</Scripts>
|
||||
</CheckButton>
|
||||
<CheckButton name="HealBot_Options_PetHeals" inherits="OptionsCheckButtonTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="244" y="5" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>HealBot_Options_PetHeals_OnLoad(this,HEALBOT_OPTIONS_PETHEALS)</OnLoad>
|
||||
<OnClick>HealBot_Options_PetHeals_OnClick(this)</OnClick>
|
||||
</Scripts>
|
||||
</CheckButton>
|
||||
|
||||
</Frames>
|
||||
</Frame>
|
||||
|
||||
@@ -1,6 +1,22 @@
|
||||
-- HealBot Options panel file: HealBot_Options_Skins.lua
|
||||
-- Split from original HealBot_Options.lua
|
||||
|
||||
function HealBot_Options_BarMaxRowsS_OnValueChanged(this)
|
||||
if not HealBot_Config.bmaxrows then HealBot_Config.bmaxrows = {} end
|
||||
HealBot_Config.bmaxrows[HealBot_Config.Current_Skin] = this:GetValue()
|
||||
HealBot_Action_PartyChanged()
|
||||
end
|
||||
|
||||
function HealBot_Options_GridOrientation_OnClick(this)
|
||||
if not HealBot_Config.GridOrientation then HealBot_Config.GridOrientation = {} end
|
||||
if this:GetChecked() then
|
||||
HealBot_Config.GridOrientation[HealBot_Config.Current_Skin] = 2 -- Horizontal
|
||||
else
|
||||
HealBot_Config.GridOrientation[HealBot_Config.Current_Skin] = 1 -- Vertical
|
||||
end
|
||||
HealBot_Action_PartyChanged()
|
||||
end
|
||||
|
||||
function HealBot_Options_NewSkin_OnTextChanged(this)
|
||||
local text= this:GetText()
|
||||
if string.len(text)>0 then
|
||||
@@ -11,6 +27,10 @@ function HealBot_Options_NewSkin_OnTextChanged(this)
|
||||
end
|
||||
function HealBot_Options_NewSkinb_OnClick(this)
|
||||
HealBot_Config.numcols[HealBot_Options_NewSkin:GetText()] = HealBot_Config.numcols[HealBot_Config.Current_Skin]
|
||||
if not HealBot_Config.bmaxrows then HealBot_Config.bmaxrows = {} end
|
||||
if not HealBot_Config.GridOrientation then HealBot_Config.GridOrientation = {} end
|
||||
HealBot_Config.bmaxrows[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bmaxrows[HealBot_Config.Current_Skin] or 0
|
||||
HealBot_Config.GridOrientation[HealBot_Options_NewSkin:GetText()] = HealBot_Config.GridOrientation[HealBot_Config.Current_Skin] or 1
|
||||
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]
|
||||
@@ -56,6 +76,8 @@ end
|
||||
function HealBot_Options_DeleteSkin_OnClick(this)
|
||||
if HealBot_Config.Current_Skin~=HEALBOT_SKINS_STD then
|
||||
HealBot_Config.numcols[HealBot_Options_SkinsText:GetText()] = nil
|
||||
if HealBot_Config.bmaxrows then HealBot_Config.bmaxrows[HealBot_Options_SkinsText:GetText()] = nil end
|
||||
if HealBot_Config.GridOrientation then HealBot_Config.GridOrientation[HealBot_Options_SkinsText:GetText()] = nil end
|
||||
HealBot_Config.btexture[HealBot_Options_SkinsText:GetText()] = nil
|
||||
HealBot_Config.bcspace[HealBot_Options_SkinsText:GetText()] = nil
|
||||
HealBot_Config.brspace[HealBot_Options_SkinsText:GetText()] = nil
|
||||
|
||||
+71
-19
@@ -266,9 +266,9 @@
|
||||
<AbsDimension x="123" y="17" />
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBRSpaceS" relativePoint="TOPLEFT">
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBCSpaceS" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-35" />
|
||||
<AbsDimension x="10" y="0" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
@@ -277,28 +277,14 @@
|
||||
<OnValueChanged>HealBot_Options_FramePaddingS_OnValueChanged(this)</OnValueChanged>
|
||||
</Scripts>
|
||||
</Slider>
|
||||
<Slider name="HealBot_Options_BorderThicknessS" inherits="HealBot_Options_SliderTemplate">
|
||||
<Size>
|
||||
<AbsDimension x="123" y="17" />
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FramePaddingS" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="10" y="0" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>HealBot_Options_val_OnLoad(this,"Solid Border",1,10)</OnLoad>
|
||||
<OnValueChanged>HealBot_Options_BorderThicknessS_OnValueChanged(this)</OnValueChanged>
|
||||
</Scripts>
|
||||
</Slider>
|
||||
|
||||
|
||||
<Slider name="HealBot_Options_BarAlpha" inherits="HealBot_Options_SliderTemplate">
|
||||
<Size>
|
||||
<AbsDimension x="123" y="17" />
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FramePaddingS" relativePoint="TOPLEFT">
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBRSpaceS" relativePoint="TOPLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-35" />
|
||||
</Offset>
|
||||
@@ -374,6 +360,72 @@
|
||||
<OnValueChanged>HealBot_Options_FontHeight_OnValueChanged(this)</OnValueChanged>
|
||||
</Scripts>
|
||||
</Slider>
|
||||
<Slider name="HealBot_Options_IconSizeS" inherits="HealBot_Options_SliderTemplate">
|
||||
<Size>
|
||||
<AbsDimension x="123" y="17" />
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="10" y="0" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>HealBot_Options_val_OnLoad(this,"Icon size",5,30)</OnLoad>
|
||||
<OnValueChanged>HealBot_Options_IconSizeS_OnValueChanged(this)</OnValueChanged>
|
||||
</Scripts>
|
||||
</Slider>
|
||||
|
||||
<Slider name="HealBot_Options_BorderThicknessS" inherits="HealBot_Options_SliderTemplate">
|
||||
<Size>
|
||||
<AbsDimension x="123" y="17" />
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlphaInHeal" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="10" y="0" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>HealBot_Options_val_OnLoad(this,"Solid Border",1,10)</OnLoad>
|
||||
<OnValueChanged>HealBot_Options_BorderThicknessS_OnValueChanged(this)</OnValueChanged>
|
||||
</Scripts>
|
||||
</Slider>
|
||||
<Slider name="HealBot_Options_BarMaxRowsS" inherits="HealBot_Options_SliderTemplate">
|
||||
<Size>
|
||||
<AbsDimension x="123" y="17" />
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_AbortBarSize" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="10" y="0" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>HealBot_Options_val_OnLoad(this,"Max Rows",0,40)</OnLoad>
|
||||
<OnValueChanged>HealBot_Options_BarMaxRowsS_OnValueChanged(this)</OnValueChanged>
|
||||
</Scripts>
|
||||
</Slider>
|
||||
<CheckButton name="HealBot_Options_GridOrientation" inherits="OptionsCheckButtonTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarMaxRowsS" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="-5" y="-10" />
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
getglobal(this:GetName().."Text"):SetText("Horizontal Grid");
|
||||
</OnLoad>
|
||||
<OnClick>
|
||||
HealBot_Options_GridOrientation_OnClick(this);
|
||||
</OnClick>
|
||||
</Scripts>
|
||||
</CheckButton>
|
||||
|
||||
<Button name="HealBot_EnTextColorpickb">
|
||||
<Size>
|
||||
|
||||
+390
-116
@@ -27,24 +27,19 @@ end
|
||||
|
||||
function HealBot_HealthColor(unit, hlth, maxhlth)
|
||||
if HealBot_UnitDebuff[unit] then
|
||||
local debuff, tmp, debuff_type = UnitDebuff(unit, 1, 1)
|
||||
if not debuff then
|
||||
HealBot_UnitDebuff[unit] = nil;
|
||||
HealBot_UnitDebuff[unit .. "_debuff_texture"] = nil
|
||||
else
|
||||
local dr = HealBot_Config.CDCBarColour[debuff_type].R
|
||||
local dg = HealBot_Config.CDCBarColour[debuff_type].G
|
||||
local db = HealBot_Config.CDCBarColour[debuff_type].B
|
||||
if HealBot_Config.btexture[HealBot_Config.Current_Skin] == 10 then
|
||||
dr = dr * 4
|
||||
dg = dg * 4
|
||||
db = db * 4
|
||||
if dr > 1 then dr = 1 end
|
||||
if dg > 1 then dg = 1 end
|
||||
if db > 1 then db = 1 end
|
||||
end
|
||||
return dr, dg, db, HealBot_Config.Barcola[HealBot_Config.Current_Skin];
|
||||
local debuff_type = HealBot_UnitDebuff[unit]
|
||||
local dr = HealBot_Config.CDCBarColour[debuff_type].R
|
||||
local dg = HealBot_Config.CDCBarColour[debuff_type].G
|
||||
local db = HealBot_Config.CDCBarColour[debuff_type].B
|
||||
if HealBot_Config.btexture[HealBot_Config.Current_Skin] == 10 then
|
||||
dr = dr * 4
|
||||
dg = dg * 4
|
||||
db = db * 4
|
||||
if dr > 1 then dr = 1 end
|
||||
if dg > 1 then dg = 1 end
|
||||
if db > 1 then db = 1 end
|
||||
end
|
||||
return dr, dg, db, HealBot_Config.Barcola[HealBot_Config.Current_Skin];
|
||||
end
|
||||
|
||||
local text = UnitName(unit);
|
||||
@@ -70,13 +65,13 @@ function HealBot_HealthColor(unit, hlth, maxhlth)
|
||||
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
|
||||
if colorMode == 2 and HealBot_Model and HealBot_Model.units[unit] and HealBot_Model.units[unit].englishClass and RAID_CLASS_COLORS and RAID_CLASS_COLORS[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
|
||||
r = RAID_CLASS_COLORS[engClass].r
|
||||
g = RAID_CLASS_COLORS[engClass].g
|
||||
b = RAID_CLASS_COLORS[engClass].b
|
||||
elseif colorMode == 2 and string.find(unit, "pet") then
|
||||
r, g, b = 0.4, 0.9, 0.6 -- Mint color
|
||||
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
|
||||
@@ -87,13 +82,17 @@ function HealBot_HealthColor(unit, hlth, maxhlth)
|
||||
end
|
||||
|
||||
function HealBot_Action_HealthBar(button)
|
||||
local name = button:GetName();
|
||||
return getglobal(name .. "Bar");
|
||||
if not button.bar then
|
||||
button.bar = getglobal(button:GetName() .. "Bar")
|
||||
end
|
||||
return button.bar;
|
||||
end
|
||||
|
||||
function HealBot_Action_HealthBar2(button)
|
||||
local name = button:GetName();
|
||||
return getglobal(name .. "Bar2");
|
||||
if not button.bar2 then
|
||||
button.bar2 = getglobal(button:GetName() .. "Bar2")
|
||||
end
|
||||
return button.bar2;
|
||||
end
|
||||
|
||||
function HealBot_Action_EnableButton(button)
|
||||
@@ -105,10 +104,16 @@ function HealBot_Action_EnableButton(button)
|
||||
local maxhlth = state.maxHealth
|
||||
local name = state.name
|
||||
if not name then name = UnitName(unit) end -- fallback
|
||||
|
||||
if not name or name == "Unknown" then
|
||||
button:Hide()
|
||||
return
|
||||
end
|
||||
|
||||
local bar = HealBot_Action_HealthBar(button);
|
||||
local bar2 = HealBot_Action_HealthBar2(button);
|
||||
local bar3 = getglobal(button:GetName() .. "Bar3");
|
||||
if not button.bar3 then button.bar3 = getglobal(button:GetName() .. "Bar3") end
|
||||
local bar3 = button.bar3;
|
||||
local btexture = HealBot_Config.btexture[HealBot_Config.Current_Skin];
|
||||
local bheight = HealBot_Config.bheight[HealBot_Config.Current_Skin];
|
||||
local sr = HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin];
|
||||
@@ -175,7 +180,7 @@ function HealBot_Action_EnableButton(button)
|
||||
else
|
||||
bar2:SetValue(0);
|
||||
end
|
||||
bar.txt = getglobal(bar:GetName() .. "_text");
|
||||
if not bar.txt then bar.txt = getglobal(bar:GetName() .. "_text") end
|
||||
if (not HealBot_IsCasting and (HealBot_CanHeal(unit) or HealBot_MissingBuffs[unit])) then
|
||||
button:Enable();
|
||||
if HealBot_UnitDebuff[unit] then
|
||||
@@ -241,11 +246,14 @@ function HealBot_Action_EnableButton(button)
|
||||
bar.txt:SetFont(fontName, fontHeight, "")
|
||||
end
|
||||
|
||||
for i = 1, 5 do
|
||||
local iconSize = HealBot_Config.biconsize[HealBot_Config.Current_Skin] or 12
|
||||
for i = 1, 10 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:SetWidth(iconSize)
|
||||
icon:SetHeight(iconSize)
|
||||
icon:Show()
|
||||
else
|
||||
icon:Hide()
|
||||
@@ -295,6 +303,21 @@ function HealBot_Action_RefreshButtons(unit)
|
||||
end
|
||||
end
|
||||
|
||||
function HealBot_Action_RefreshPower(unit)
|
||||
if not unit or not HealBot_Action_UnitButtons[unit] then return end
|
||||
local state = HealBot_Model.units[unit]
|
||||
if not state then return end
|
||||
|
||||
for index, button in pairs(HealBot_Action_UnitButtons[unit]) do
|
||||
if not button.bar3 then button.bar3 = getglobal(button:GetName() .. "Bar3") end
|
||||
local bar3 = button.bar3
|
||||
if bar3 and bar3:IsVisible() then
|
||||
bar3:SetMinMaxValues(0, state.maxMana)
|
||||
bar3:SetValue(state.mana)
|
||||
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
|
||||
@@ -330,6 +353,41 @@ function HealBot_Action_PositionButton(button, OsetX, OsetY, bwidth, bheight, ch
|
||||
return OsetY;
|
||||
end
|
||||
|
||||
function HealBot_Action_PositionButtonHorizontal(button, OsetX, OsetY, bwidth, bheight, checked, header)
|
||||
local bcspace = HealBot_Config.bcspace[HealBot_Config.Current_Skin] or 3;
|
||||
if header then
|
||||
headerno = headerno + 1;
|
||||
local headerobj = getglobal("HealBot_Action_Header" .. headerno);
|
||||
headerobj:SetText(header)
|
||||
headerobj:Show();
|
||||
headerobj:ClearAllPoints();
|
||||
headerobj:SetHeight(bheight);
|
||||
headerobj:SetWidth(bwidth);
|
||||
headerobj:SetPoint("TOPLEFT", "HealBot_Action", "TOPLEFT", OsetX, -OsetY);
|
||||
headerobj:Disable();
|
||||
OsetX = OsetX + bwidth + bcspace;
|
||||
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
|
||||
OsetX = OsetX + bwidth + bcspace;
|
||||
else
|
||||
button:Hide();
|
||||
end
|
||||
end
|
||||
return OsetX;
|
||||
end
|
||||
|
||||
function HealBot_Action_SetHeightWidth(width, height, bwidth)
|
||||
if HealBot_ActionHeight then
|
||||
HealBot_Action:SetHeight(HealBot_ActionHeight);
|
||||
@@ -362,6 +420,7 @@ function HealBot_Action_SetHealButton(index, unit)
|
||||
return nil
|
||||
end
|
||||
local button = getglobal("HealBot_Action_HealUnit" .. index);
|
||||
if not button then return nil end
|
||||
button.unit = unit;
|
||||
if unit then
|
||||
table.insert(HealBot_Action_HealButtons, button);
|
||||
@@ -374,12 +433,41 @@ function HealBot_Action_SetHealButton(index, unit)
|
||||
end
|
||||
|
||||
function HealBot_Action_PartyChanged()
|
||||
if not HealBot_IsFighting then
|
||||
local numBars = 0;
|
||||
if HealBot_IsFighting then
|
||||
HealBot_Action_AppendNewUnits()
|
||||
return
|
||||
end
|
||||
|
||||
local numBars = 0;
|
||||
local numHeaders = 0;
|
||||
local TempMaxH = 0;
|
||||
local HeaderPos = {};
|
||||
|
||||
if HealBot_Config.AutoSwap_Enabled == 1 then
|
||||
local totalMembers = GetNumRaidMembers()
|
||||
if totalMembers == 0 then totalMembers = GetNumPartyMembers() end
|
||||
|
||||
local threshold = 1
|
||||
if totalMembers == 0 then
|
||||
threshold = 1 -- Solo
|
||||
elseif totalMembers > 0 and totalMembers <= 5 then
|
||||
threshold = 2 -- Party
|
||||
elseif totalMembers > 5 and totalMembers <= 15 then
|
||||
threshold = 3 -- Raid15
|
||||
elseif totalMembers > 15 and totalMembers <= 25 then
|
||||
threshold = 4 -- Raid25
|
||||
else
|
||||
threshold = 5 -- Raid40
|
||||
end
|
||||
|
||||
if not HealBot_Config.AutoSwap_Profiles then HealBot_Config.AutoSwap_Profiles = {} end
|
||||
local swapSkin = HealBot_Config.AutoSwap_Profiles[threshold]
|
||||
if swapSkin and swapSkin ~= HealBot_Config.Current_Skin then
|
||||
HealBot_Config.Current_Skin = swapSkin
|
||||
HealBot_Options_SetSkins()
|
||||
end
|
||||
end
|
||||
|
||||
for j = 1, 15 do
|
||||
local headerobj = getglobal("HealBot_Action_Header" .. j);
|
||||
headerobj:SetText(" ")
|
||||
@@ -401,10 +489,7 @@ function HealBot_Action_PartyChanged()
|
||||
local checked_end = 0;
|
||||
headerno = 0;
|
||||
|
||||
for j = 1, 41 do
|
||||
HealBot_Action_SetHealButton(j, nil);
|
||||
end
|
||||
for j = 51, 60 do
|
||||
for j = 1, 100 do
|
||||
HealBot_Action_SetHealButton(j, nil);
|
||||
end
|
||||
HealBot_Action_SetHealButton();
|
||||
@@ -530,7 +615,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;
|
||||
@@ -563,6 +648,9 @@ function HealBot_Action_PartyChanged()
|
||||
else
|
||||
for _, unit in ipairs(HealBot_Action_HealGroup) do
|
||||
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
|
||||
local name = UnitName(unit) or "not known"
|
||||
local class = UnitClass(unit) or "not known"
|
||||
local subgroup = 1
|
||||
if HealBot_Config.ExtraOrder == 1 then
|
||||
order[unit] = name;
|
||||
elseif HealBot_Config.ExtraOrder == 2 then
|
||||
@@ -578,50 +666,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
|
||||
@@ -661,6 +706,9 @@ function HealBot_Action_PartyChanged()
|
||||
else
|
||||
for _, unit in ipairs(HealBot_Action_HealGroup) do
|
||||
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
|
||||
local name = UnitName(unit) or "not known"
|
||||
local class = UnitClass(unit) or "not known"
|
||||
local subgroup = 1
|
||||
if HealBot_Config.ExtraOrder == 1 then
|
||||
order[unit] = name;
|
||||
elseif HealBot_Config.ExtraOrder == 2 then
|
||||
@@ -685,25 +733,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
|
||||
@@ -727,19 +779,58 @@ 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;
|
||||
local OffsetX = bpadding;
|
||||
local MaxOffsetY = 0;
|
||||
local MaxOffsetX = 0;
|
||||
|
||||
if cols > (numBars - numHeaders) then
|
||||
local maxRows = (HealBot_Config.bmaxrows and HealBot_Config.bmaxrows[HealBot_Config.Current_Skin]) or 0
|
||||
local orientation = (HealBot_Config.GridOrientation and HealBot_Config.GridOrientation[HealBot_Config.Current_Skin]) or 1
|
||||
|
||||
if cols > (numBars - numHeaders) and maxRows == 0 then
|
||||
cols = numBars - numHeaders;
|
||||
end
|
||||
if cols <= 0 then cols = 1 end
|
||||
@@ -747,6 +838,15 @@ function HealBot_Action_PartyChanged()
|
||||
local h = 1;
|
||||
local i = 0;
|
||||
local z = 1;
|
||||
local brspace = HealBot_Config.brspace[HealBot_Config.Current_Skin] or 3;
|
||||
local bcspace = HealBot_Config.bcspace[HealBot_Config.Current_Skin] or 3;
|
||||
|
||||
local limit = math.ceil((numBars) / cols)
|
||||
if orientation == 1 and maxRows > 0 then
|
||||
limit = maxRows
|
||||
elseif orientation == 2 then
|
||||
limit = cols
|
||||
end
|
||||
|
||||
for index, button in pairs(HealBot_Action_HealButtons) do
|
||||
i = i + 1;
|
||||
@@ -755,25 +855,47 @@ function HealBot_Action_PartyChanged()
|
||||
|
||||
if HeaderPos[i] then
|
||||
header = HeaderPos[i];
|
||||
OffsetY = HealBot_Action_PositionButton(nil, OffsetX, OffsetY, bwidth, bheight, checked, header);
|
||||
if h == math.ceil((numBars) / cols) and z < numBars then
|
||||
h = 0;
|
||||
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
|
||||
OffsetY = bpadding;
|
||||
OffsetX = OffsetX + bwidth + bcspace;
|
||||
if orientation == 1 then
|
||||
OffsetY = HealBot_Action_PositionButton(nil, OffsetX, OffsetY, bwidth, bheight, checked, header);
|
||||
if h == limit and z < numBars then
|
||||
h = 0;
|
||||
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
|
||||
OffsetY = bpadding;
|
||||
OffsetX = OffsetX + bwidth + bcspace;
|
||||
end
|
||||
else
|
||||
OffsetX = HealBot_Action_PositionButtonHorizontal(nil, OffsetX, OffsetY, bwidth, bheight, checked, header);
|
||||
if h == limit and z < numBars then
|
||||
h = 0;
|
||||
if MaxOffsetX < OffsetX then MaxOffsetX = OffsetX; end
|
||||
OffsetX = bpadding;
|
||||
OffsetY = OffsetY + bheight + brspace;
|
||||
end
|
||||
end
|
||||
h = h + 1;
|
||||
z = z + 1;
|
||||
end
|
||||
|
||||
if checked_start <= i and checked_end >= i then checked = true; end
|
||||
OffsetY = HealBot_Action_PositionButton(button, OffsetX, OffsetY, bwidth, bheight, checked, nil);
|
||||
if h == math.ceil((numBars) / cols) and z < numBars then
|
||||
h = 0;
|
||||
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
|
||||
OffsetY = bpadding;
|
||||
OffsetX = OffsetX + bwidth + bcspace;
|
||||
|
||||
if orientation == 1 then
|
||||
OffsetY = HealBot_Action_PositionButton(button, OffsetX, OffsetY, bwidth, bheight, checked, nil);
|
||||
if h == limit and z < numBars then
|
||||
h = 0;
|
||||
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
|
||||
OffsetY = bpadding;
|
||||
OffsetX = OffsetX + bwidth + bcspace;
|
||||
end
|
||||
else
|
||||
OffsetX = HealBot_Action_PositionButtonHorizontal(button, OffsetX, OffsetY, bwidth, bheight, checked, nil);
|
||||
if h == limit and z < numBars then
|
||||
h = 0;
|
||||
if MaxOffsetX < OffsetX then MaxOffsetX = OffsetX; end
|
||||
OffsetX = bpadding;
|
||||
OffsetY = OffsetY + bheight + brspace;
|
||||
end
|
||||
end
|
||||
|
||||
z = z + 1;
|
||||
h = h + 1;
|
||||
local bar = HealBot_Action_HealthBar(button);
|
||||
@@ -789,7 +911,27 @@ function HealBot_Action_PartyChanged()
|
||||
HealBot_Action_SetTexture(bar2, btexture);
|
||||
end
|
||||
|
||||
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
|
||||
if orientation == 1 then
|
||||
if MaxOffsetY < OffsetY then MaxOffsetY = OffsetY; end
|
||||
else
|
||||
if MaxOffsetX < OffsetX then MaxOffsetX = OffsetX; end
|
||||
-- In horizontal mode, OffsetY represents the active row. We need to measure total height.
|
||||
MaxOffsetY = OffsetY + bheight + brspace
|
||||
OffsetX = MaxOffsetX
|
||||
if numBars > 0 then
|
||||
OffsetX = OffsetX - bwidth - bcspace
|
||||
end
|
||||
end
|
||||
|
||||
HealBot_Grid_LastI = i;
|
||||
HealBot_Grid_LastH = h;
|
||||
HealBot_Grid_LastZ = z;
|
||||
HealBot_Grid_OffsetX = OffsetX;
|
||||
HealBot_Grid_OffsetY = OffsetY;
|
||||
HealBot_Grid_MaxOffsetX = MaxOffsetX;
|
||||
HealBot_Grid_MaxOffsetY = MaxOffsetY;
|
||||
HealBot_Grid_Limit = limit;
|
||||
HealBot_Grid_NumBars = numBars;
|
||||
|
||||
if HealBot_Config.HideOptions == 1 then
|
||||
HealBot_Action_OptionsButton:Hide();
|
||||
@@ -835,7 +977,6 @@ function HealBot_Action_PartyChanged()
|
||||
if HealBot_Config.HideParty == 1 and HidePartyFrame then
|
||||
HidePartyFrame();
|
||||
end
|
||||
end
|
||||
HealBot_Action_RefreshButtons();
|
||||
HealBot_Action_ShowFrame();
|
||||
end
|
||||
@@ -885,3 +1026,136 @@ function HealBot_Action_Refresh(unit)
|
||||
end
|
||||
end
|
||||
end
|
||||
function HealBot_Action_AppendUnit(unit)
|
||||
if not HealBot_Grid_LastI then return end
|
||||
if HealBot_Grid_LastI >= 100 then return end
|
||||
|
||||
HealBot_Grid_LastI = HealBot_Grid_LastI + 1
|
||||
HealBot_Grid_NumBars = HealBot_Grid_NumBars + 1
|
||||
|
||||
local button = HealBot_Action_SetHealButton(HealBot_Grid_LastI, unit)
|
||||
if not button then return end
|
||||
|
||||
local orientation = (HealBot_Config.GridOrientation and HealBot_Config.GridOrientation[HealBot_Config.Current_Skin]) or 1
|
||||
local bwidth = (HealBot_Config.bwidth and HealBot_Config.bwidth[HealBot_Config.Current_Skin]) or 85
|
||||
local bheight = (HealBot_Config.bheight and HealBot_Config.bheight[HealBot_Config.Current_Skin]) or 18
|
||||
local bcspace = (HealBot_Config.bcspace and HealBot_Config.bcspace[HealBot_Config.Current_Skin]) or 3
|
||||
local brspace = (HealBot_Config.brspace and HealBot_Config.brspace[HealBot_Config.Current_Skin]) or 3
|
||||
local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10
|
||||
|
||||
if orientation == 1 then
|
||||
HealBot_Grid_OffsetY = HealBot_Action_PositionButton(button, HealBot_Grid_OffsetX, HealBot_Grid_OffsetY, bwidth, bheight, false, nil)
|
||||
if HealBot_Grid_LastH == HealBot_Grid_Limit then
|
||||
HealBot_Grid_LastH = 0
|
||||
if HealBot_Grid_MaxOffsetY < HealBot_Grid_OffsetY then HealBot_Grid_MaxOffsetY = HealBot_Grid_OffsetY end
|
||||
HealBot_Grid_OffsetY = bpadding
|
||||
HealBot_Grid_OffsetX = HealBot_Grid_OffsetX + bwidth + bcspace
|
||||
end
|
||||
else
|
||||
HealBot_Grid_OffsetX = HealBot_Action_PositionButtonHorizontal(button, HealBot_Grid_OffsetX, HealBot_Grid_OffsetY, bwidth, bheight, false, nil)
|
||||
if HealBot_Grid_LastH == HealBot_Grid_Limit then
|
||||
HealBot_Grid_LastH = 0
|
||||
if HealBot_Grid_MaxOffsetX < HealBot_Grid_OffsetX then HealBot_Grid_MaxOffsetX = HealBot_Grid_OffsetX end
|
||||
HealBot_Grid_OffsetX = bpadding
|
||||
HealBot_Grid_OffsetY = HealBot_Grid_OffsetY + bheight + brspace
|
||||
end
|
||||
end
|
||||
|
||||
HealBot_Grid_LastH = HealBot_Grid_LastH + 1
|
||||
HealBot_Grid_LastZ = HealBot_Grid_LastZ + 1
|
||||
|
||||
local bar = HealBot_Action_HealthBar(button)
|
||||
local bar2 = HealBot_Action_HealthBar2(button)
|
||||
bar.txt = getglobal(bar:GetName() .. "_text")
|
||||
bar:SetHeight(bheight)
|
||||
local btexture = (HealBot_Config.btexture and HealBot_Config.btexture[HealBot_Config.Current_Skin]) or 5
|
||||
HealBot_Action_SetTexture(bar, btexture)
|
||||
local btextheight = (HealBot_Config.btextheight and HealBot_Config.btextheight[HealBot_Config.Current_Skin]) or 10
|
||||
bar.txt:SetTextHeight(btextheight)
|
||||
bar2:SetHeight(bheight)
|
||||
HealBot_Action_SetTexture(bar2, btexture)
|
||||
|
||||
local totalOffsetX = HealBot_Grid_OffsetX
|
||||
local totalOffsetY = HealBot_Grid_OffsetY
|
||||
if orientation == 1 then
|
||||
if HealBot_Grid_MaxOffsetY < totalOffsetY then HealBot_Grid_MaxOffsetY = totalOffsetY end
|
||||
totalOffsetY = HealBot_Grid_MaxOffsetY
|
||||
else
|
||||
if HealBot_Grid_MaxOffsetX < totalOffsetX then HealBot_Grid_MaxOffsetX = totalOffsetX end
|
||||
totalOffsetX = HealBot_Grid_MaxOffsetX
|
||||
totalOffsetY = totalOffsetY + bheight + brspace
|
||||
end
|
||||
|
||||
HealBot_Action_SetHeightWidth(totalOffsetX, totalOffsetY + bpadding, bwidth)
|
||||
end
|
||||
function HealBot_Action_AppendNewUnits()
|
||||
if not HealBot_Grid_LastI then return end
|
||||
|
||||
local unitsToCheck = {}
|
||||
|
||||
-- Gather units based on config, similar to PartyChanged
|
||||
if HealBot_Config.GroupHeals == 1 then
|
||||
for _, unit in ipairs(HealBot_Action_HealGroup) do
|
||||
table.insert(unitsToCheck, unit)
|
||||
end
|
||||
end
|
||||
|
||||
if HealBot_Config.TankHeals == 1 and GetNumRaidMembers() > 0 and CT_RA_MainTanks then
|
||||
for j = 1, 10 do
|
||||
if CT_RA_MainTanks[j] then
|
||||
for k = 1, GetNumRaidMembers() do
|
||||
local unit = "raid" .. k
|
||||
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
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if HealBot_Config.TargetHeals == 1 then
|
||||
for _, unit in ipairs(HealBot_Action_HealTarget) do
|
||||
table.insert(unitsToCheck, unit)
|
||||
end
|
||||
table.insert(unitsToCheck, "target")
|
||||
end
|
||||
|
||||
if HealBot_Config.EmergencyHeals == 1 then
|
||||
if GetNumRaidMembers() > 0 then
|
||||
for j = 1, 40 do
|
||||
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
|
||||
table.insert(unitsToCheck, "party" .. j)
|
||||
end
|
||||
table.insert(unitsToCheck, "player")
|
||||
end
|
||||
end
|
||||
|
||||
if HealBot_Config.PetHeals == 1 then
|
||||
if GetNumRaidMembers() > 0 then
|
||||
for j = 1, 40 do
|
||||
table.insert(unitsToCheck, "raidpet" .. j)
|
||||
end
|
||||
else
|
||||
for j = 1, 4 do
|
||||
table.insert(unitsToCheck, "partypet" .. j)
|
||||
end
|
||||
table.insert(unitsToCheck, "pet")
|
||||
end
|
||||
end
|
||||
|
||||
for _, unit in ipairs(unitsToCheck) do
|
||||
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
|
||||
HealBot_Action_AppendUnit(unit)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
**HealBotBlue**
|
||||
By Bluewhale.
|
||||
|
||||
> **NOTE:** For HealBot to work correctly, the **Selfcast** feature in WoW options needs to be disabled.
|
||||
|
||||
Original HealBot, while being a staple healing addon in Wrath and later expansions, was in its infancy during Vanilla WoW. It was a memory and CPU hog that ate up resources, featured a clunky UI, and offered limited functions. To fix all of the above while still using it as a base framework, I refactored the entire codebase. The monolithic code structure was split to follow a more modern approach (MVC design pattern), making it more stable and easily editable. Additionally, the inefficient AURA scanning was replaced with lightweight (Observer Pattern) reactive programming. It now updates only what is necessary when a trigger fires, rather than performing clumsy, continuous scans of a 40-man raid. By doing so, I managed to throttle down CPU and memory usage significantly, placing it on par with modern addons. Additional functionalities are being added over time to provide a holistic, healer-centered raid frame.
|
||||
|
||||
> **Performance First:** The raidframe is not library reliant - unlike popular raidframe replacement addons it doesn't rely at all on external frameworks. While this makes my work a bit harder this allows complete control over garbage collection and CPU use which makes it multiple times more stable and lightweight.
|
||||
|
||||
> **NOTE:** For HealBot to work correctly, the **Selfcast** feature in WoW options needs to be disabled.
|
||||
### Development version
|
||||
There is dev branch available, it might be slightly more unstabl but most of time it does have more features present. It's only merged into main when major feature set is implemented and stabilised.
|
||||
|
||||
### Reporting Errors
|
||||
Major errors will pop up a frame with error information. Take a screenshot and post comments.
|
||||
@@ -19,12 +23,15 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
|
||||
* `/hb reset` - Resets the contents of the main HealBot panel
|
||||
|
||||
### Key Features & Current Functionality
|
||||
* **MVC & Observer Architecture:** High-performance, reactive engine that updates frames dynamically on state changes, drastically reducing CPU and memory overhead compared to traditional polling.
|
||||
* **MVC & Observer Architecture:** High-performance, reactive engine that updates frames dynamically on state changes, drastically reducing CPU and memory overhead. Features memory recycling pool and event loop decoupling for zero-stutter combat.
|
||||
* **Native Hovercasting (Mouseover):** Cast configured spells on hovered unit frames using keybinds directly from your action bars, without losing your current target. (Toggleable in Options -> General).
|
||||
* **Macro, Item, & Script Bindings:** Bind named macros, inventory items, and scripts directly to mouse clicks. Supports implicit `@mouseover` targeting natively.
|
||||
* **Zero-Latency Self-Heals:** Incoming heals for the local player process instantly with zero latency, independent of network lag.
|
||||
* **Talent-Based Calculations & Equipment Bonus:** Dynamic spell healing calculations for Druid, Priest, and Paladin based on talents, and automatically scans equipped gear to scale healing predictions - currently only TurtleWoW patch 1.18 supported.
|
||||
* **Modifier-Aware Tooltips:** Tooltips dynamically update to show exact bound actions (Shift/Ctrl/Alt) and required mana costs (turns red if insufficient mana).
|
||||
* **Blizzard Party Frame Toggle:** Toggle to automatically hide Blizzard's default party frames when in a group in favor of HealBot's layouts.
|
||||
* **HoT & Buff Tracking:** Intelligently track active HoTs and buffs directly on the grid frames with custom icons (e.g., Renew, Rejuvenation, Regrowth, Fear Ward).
|
||||
* **Mana Bars for Healers:** Enable and position mini-mana status bars next to unit frames, toggleable to display for healer classes only or all classes.
|
||||
* **Equipment Bonus Integration:** Automatically scans equipped gear (for classes capable of healing) to dynamically scale healing predictions.
|
||||
* **Curse & Debuff Warning (CDC):** Dynamic visual and audio alerts for cleanable debuffs. Customizable colors based on debuff type (Curse, Poison, Disease, Magic).
|
||||
* **Pet & Familiar Frames:** Dedicated, toggleable frames for tracking and healing player pets.
|
||||
* **Customizable Health Text:** Dynamic unit health display (Name Only, Percentage, Real Health, or Health Deficit).
|
||||
@@ -37,18 +44,52 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
|
||||
|
||||
### Known issues
|
||||
|
||||
* **New spell rank bug** you may experience lua error spaming your chat frame after learning new healing spells. /reload will clear the issue. To be fixed next release
|
||||
* **New spell rank bug** you may experience lua error spaming your chat frame after learning new healing spells. /reload will clear the issue.
|
||||
|
||||
|
||||
### Change Log
|
||||
|
||||
**v1.6.5**
|
||||
* **Performance Update - Mana Tracking** - Added a fast-path redraw pipeline for unit power changes. This massive optimization prevents full frame redraws when players naturally regenerate or consume mana, resolving severe FPS drops in 40-man raids while tracking mana.
|
||||
|
||||
**v1.6.4**
|
||||
* **Bug Fix - UI Opacity** - Fixed a rendering layering bug where incoming heals drew on top of actual health, causing the semi-transparent incoming heal bar to wash out the solid health bar.
|
||||
* **Bug Fix - CDC Colors** - Fixed health bar debuff coloring (CDC) by stopping `HealBot_HealthColor` from incorrectly querying debuffs directly, relying instead on cached debuff types.
|
||||
|
||||
|
||||
**v1.6.3**
|
||||
* **Hotfix string splitter** - added falback for string splitter if the the string is empty or nil.
|
||||
* **UI Update - Icon Limit** - Increased maximum tracked buffs/debuffs per unit from 5 to 10.
|
||||
* **UI Update - Customizable icon size** - Added an option to change size of HoT icons (default to 12px).
|
||||
* **Cleanup** - Removed dead code `HealBot_Groups` table.
|
||||
|
||||
**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.
|
||||
|
||||
**v1.6**
|
||||
* **Event Loop Decoupling:** Ripped out redundant synchronous UI redraws that were bypassed by the new MVC architecture. High-frequency events (mana regen, health ticks) now fully rely on the `HealBot_OnUpdate` dirty queue, severely reducing CPU bottlenecks.
|
||||
* **Combat UI Optimizations:** Removed unnecessary full spell recalculations when dropping combat, preventing client stutter after every mob kill.
|
||||
* **Memory Optimization:** Fixed severe Lua garbage collection spikes during UI reloads by preventing full party layout rebuilds on `PLAYER_TARGET_CHANGED`, and cached dynamic string concatenations directly to unit frames to eliminate memory leakage on high frequency UI refreshes.
|
||||
* **Mana Validation Fix:** Removed artificial spell mana gating, fixing an issue where low-mana spells disappeared from tooltips and couldn't be cast. WoW's native mana validation now correctly processes 0-cost buffs (e.g. Clearcasting, Inner Focus) while turning low-mana tooltip spells red.
|
||||
* **Self-Buff Tracking:** Fixed a bug where "Self Only" buff tracking incorrectly excluded the player when represented by party or raid frames instead of the standard "player" unit ID.
|
||||
* **Settings Persistence Fix:** Changed `SavedVariables` to `SavedVariablesPerCharacter` in TOC so configurations correctly load unique per character instead of account-wide.
|
||||
* **CPU Optimization:** Added early exit logic to resource tracking events (Mana, Rage, Energy) to stop background polling on party/raid members when "Show Mana Bars" is toggled off. Also removed excessive triggers (`BAG_UPDATE`, `PET_BAR_SHOWGRID`) and filtered `UNIT_INVENTORY_CHANGED` to only process the player, eliminating massive CPU spikes and unnecessary UI layout rebuilds during looting, item cooldowns, or when other players change gear.
|
||||
* **OnUpdate GC Spike Fix:** Rewrote the modifier polling logic inside `HealBot_OnUpdate` to use boolean state tracking instead of dynamic string concatenation, eliminating a major source of garbage collection bloat while hovering over unit frames.
|
||||
* **Aura Scanning Optimization:** Refactored Debuff tracking (`HealBot_DebuffWatch`) to use native boolean values (`true`/`false`) instead of string comparisons (`"YES"`/`"NO"`). This improves performance inside the continuous aura scanning loops.
|
||||
|
||||
**v1.5**
|
||||
* **Macro, Item, and Script Bindings:** Support for binding named macros, inventory items, and inline scripts (e.g. `/target`) directly to mouse clicks in the Spells tab. All of these now natively support implicit `@mouseover` targeting on the unit frame you click, without losing your current target.
|
||||
* **Modifier-Aware Tooltips & Resource Costs:** The tooltip dynamically updates to show exactly what action is bound when holding down Shift, Ctrl, or Alt over a frame. Spells also show their required mana cost, turning red if you do not have enough mana to cast them.
|
||||
* **Memory Recycling Pool:** Added a local table recycling pool in the data layer to greatly reduce Lua garbage collection (GC) spikes, improving overall client frame rates during intense combat.
|
||||
|
||||
**v1.4.2**
|
||||
* **Memory Optimization:** Fixed a significant memory leak where tracking tables were being repeatedly allocated every tick during aura scanning, and replaced `table.foreach` with pairs loops to avoid GC spikes during combat.
|
||||
|
||||
**v1.4.1**
|
||||
* **Talent-based Healing Calculations:** Implemented dynamic spell healing calculations for Druid, Priest, and Paladin classes based on talents.
|
||||
* **Modifier Key Polling:** Replaced MODIFIER_STATE_CHANGED event with polling in HealBot_OnUpdate to track modifier keys reliably.
|
||||
|
||||
Reference in New Issue
Block a user