mirror of
https://github.com/Bluewhale1337/HealBotBlue.git
synced 2026-09-12 18:15:01 +00:00
Compare commits
89 Commits
v1.4.0
..
a0b6e2f72d
| Author | SHA1 | Date | |
|---|---|---|---|
| a0b6e2f72d | |||
| 2af99cbc2b | |||
| b0195b30b9 | |||
| 2aaa53a9e6 | |||
| b64e7070ba | |||
| 6760e4e43d | |||
| 16bc4d95ee | |||
| 59ceb3b465 | |||
| e05238a5b2 | |||
| d2642745cb | |||
| 8026e14cde | |||
| 377c2c31d0 | |||
| 998a64a83f | |||
| cf05b94611 | |||
| 5aab23314a | |||
| 36fad01424 | |||
| bcd566d80b | |||
| 553a5ece36 | |||
| 60ef3bc41f | |||
| 50661ac924 | |||
| 9c1f873b48 | |||
| 6d977f6963 | |||
| d09e49d26a | |||
| 9a033a1045 | |||
| 6a6a9e3283 | |||
| b3c2b4a096 | |||
| d0e027ec12 | |||
| dc2f0ca089 | |||
| d021441b32 | |||
| 58f593947e | |||
| 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 | |||
| 12838ff250 | |||
| e6ad9e7506 | |||
| 9f08b356e1 | |||
| 3845ada15f | |||
| 826bf64eda | |||
| 8854cd3caa | |||
| c8a5e4f0eb | |||
| 2d75406d88 | |||
| 2e35be6516 | |||
| 07a9c3a93d | |||
| c8e62fe80e | |||
| 1334fc09bf | |||
| ce594af5fa | |||
| f1c5d6a8d1 | |||
| 0186fc1d93 | |||
| ff97414bb1 | |||
| d0d6a39fb9 | |||
| 66172cab45 |
+37
-3
@@ -15,6 +15,7 @@ HealBot_Delay_RecalcParty=0;
|
|||||||
|
|
||||||
-- Debugging and Error functions moved to HealBot_Controller_Comms.lua
|
-- Debugging and Error functions moved to HealBot_Controller_Comms.lua
|
||||||
|
|
||||||
|
-- HealBot_TogglePanel: Toggles visibility of a frame panel.
|
||||||
function HealBot_TogglePanel(panel)
|
function HealBot_TogglePanel(panel)
|
||||||
if (not panel) then return end
|
if (not panel) then return end
|
||||||
if ( panel:IsVisible() ) then
|
if ( panel:IsVisible() ) then
|
||||||
@@ -24,6 +25,7 @@ function HealBot_TogglePanel(panel)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_StartMoving: Initiates frame dragging when unlocked.
|
||||||
function HealBot_StartMoving(frame)
|
function HealBot_StartMoving(frame)
|
||||||
if ( not frame.isMoving ) and ( frame.isLocked ~= 1 ) then
|
if ( not frame.isMoving ) and ( frame.isLocked ~= 1 ) then
|
||||||
frame:StartMoving();
|
frame:StartMoving();
|
||||||
@@ -31,6 +33,7 @@ function HealBot_StartMoving(frame)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_StopMoving: Stops frame dragging.
|
||||||
function HealBot_StopMoving(frame)
|
function HealBot_StopMoving(frame)
|
||||||
if ( frame.isMoving ) then
|
if ( frame.isMoving ) then
|
||||||
frame:StopMovingOrSizing();
|
frame:StopMovingOrSizing();
|
||||||
@@ -47,6 +50,7 @@ function HealBot_StopMoving(frame)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_SlashCmd: Handles '/hb' or '/healbot' chat commands.
|
||||||
function HealBot_SlashCmd(cmd)
|
function HealBot_SlashCmd(cmd)
|
||||||
if (cmd=="") then
|
if (cmd=="") then
|
||||||
HealBot_TogglePanel(HealBot_Action);
|
HealBot_TogglePanel(HealBot_Action);
|
||||||
@@ -103,6 +107,7 @@ end
|
|||||||
|
|
||||||
-- HealBot_SendAddonMessage moved to HealBot_Controller_Comms.lua
|
-- HealBot_SendAddonMessage moved to HealBot_Controller_Comms.lua
|
||||||
|
|
||||||
|
-- HealBot_TargetName: Retrieves the name of the current target, ignoring enemies.
|
||||||
function HealBot_TargetName()
|
function HealBot_TargetName()
|
||||||
if UnitIsEnemy("target","player") then return nil end
|
if UnitIsEnemy("target","player") then return nil end
|
||||||
-- if not UnitPlayerControlled("target") then return nil end
|
-- if not UnitPlayerControlled("target") then return nil end
|
||||||
@@ -136,14 +141,17 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- HealBot_PackBagSlot: Combines bag and slot into a single ID.
|
||||||
function HealBot_PackBagSlot(bag,slot)
|
function HealBot_PackBagSlot(bag,slot)
|
||||||
return bag*100+slot;
|
return bag*100+slot;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_UnpackBagSlot: Extracts bag and slot from a combined ID.
|
||||||
function HealBot_UnpackBagSlot(bagslot)
|
function HealBot_UnpackBagSlot(bagslot)
|
||||||
return math.floor(bagslot/100),math.mod(bagslot,100);
|
return math.floor(bagslot/100),math.mod(bagslot,100);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetItemName: Gets item name from bag slot link.
|
||||||
function HealBot_GetItemName(bag,slot)
|
function HealBot_GetItemName(bag,slot)
|
||||||
local link = GetContainerItemLink(bag,slot);
|
local link = GetContainerItemLink(bag,slot);
|
||||||
if not link then return nil end;
|
if not link then return nil end;
|
||||||
@@ -152,6 +160,7 @@ function HealBot_GetItemName(bag,slot)
|
|||||||
return item,count;
|
return item,count;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetBagSlot: Finds bag slot ID for an item name.
|
||||||
function HealBot_GetBagSlot(item)
|
function HealBot_GetBagSlot(item)
|
||||||
local BagSlot,BestCount;
|
local BagSlot,BestCount;
|
||||||
for bag=0,NUM_BAG_FRAMES do
|
for bag=0,NUM_BAG_FRAMES do
|
||||||
@@ -168,6 +177,7 @@ function HealBot_GetBagSlot(item)
|
|||||||
return BagSlot;
|
return BagSlot;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_UseItem: Uses an item from inventory.
|
||||||
function HealBot_UseItem(item)
|
function HealBot_UseItem(item)
|
||||||
local bagslot = HealBot_GetBagSlot(item);
|
local bagslot = HealBot_GetBagSlot(item);
|
||||||
if not bagslot then return end;
|
if not bagslot then return end;
|
||||||
@@ -178,9 +188,24 @@ end
|
|||||||
|
|
||||||
-- Spell parsing and casting functions moved to HealBot_Controller_Spells.lua
|
-- Spell parsing and casting functions moved to HealBot_Controller_Spells.lua
|
||||||
|
|
||||||
|
-- HealBot_UnitClass: Returns English class string for a unit.
|
||||||
function HealBot_UnitClass(unit)
|
function HealBot_UnitClass(unit)
|
||||||
local playerClass, englishClass = UnitClass(unit);
|
local locClass, enClass = UnitClass(unit)
|
||||||
return englishClass;
|
if enClass then return string.upper(enClass) end
|
||||||
|
|
||||||
|
-- Fallback for Vanilla 1.12 where enClass is nil
|
||||||
|
if locClass == HEALBOT_DRUID then return "DRUID"
|
||||||
|
elseif locClass == HEALBOT_HUNTER then return "HUNTER"
|
||||||
|
elseif locClass == HEALBOT_MAGE then return "MAGE"
|
||||||
|
elseif locClass == HEALBOT_PALADIN then return "PALADIN"
|
||||||
|
elseif locClass == HEALBOT_PRIEST then return "PRIEST"
|
||||||
|
elseif locClass == HEALBOT_ROGUE then return "ROGUE"
|
||||||
|
elseif locClass == HEALBOT_SHAMAN then return "SHAMAN"
|
||||||
|
elseif locClass == HEALBOT_WARLOCK then return "WARLOCK"
|
||||||
|
elseif locClass == HEALBOT_WARRIOR then return "WARRIOR"
|
||||||
|
end
|
||||||
|
|
||||||
|
return locClass
|
||||||
end
|
end
|
||||||
|
|
||||||
---- HealBot_UnitAffected moved to HealBot_Controller_Aura.lua
|
---- HealBot_UnitAffected moved to HealBot_Controller_Aura.lua
|
||||||
@@ -197,6 +222,7 @@ end
|
|||||||
|
|
||||||
-- SpiBonus and GetBonus functions moved to HealBot_Controller_Spells.lua
|
-- SpiBonus and GetBonus functions moved to HealBot_Controller_Spells.lua
|
||||||
|
|
||||||
|
-- HealBot_FindUnitID: Finds a unit token for a given player name.
|
||||||
function HealBot_FindUnitID(unitname)
|
function HealBot_FindUnitID(unitname)
|
||||||
local text;
|
local text;
|
||||||
for _,unit in ipairs(HealBot_Action_HealGroup) do
|
for _,unit in ipairs(HealBot_Action_HealGroup) do
|
||||||
@@ -219,6 +245,7 @@ function HealBot_FindUnitID(unitname)
|
|||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_PlaySound: Plays an audio alert based on ID.
|
||||||
function HealBot_PlaySound(id)
|
function HealBot_PlaySound(id)
|
||||||
if id==1 then
|
if id==1 then
|
||||||
PlaySoundFile("Sound\\Doodad\\BellTollTribal.wav");
|
PlaySoundFile("Sound\\Doodad\\BellTollTribal.wav");
|
||||||
@@ -231,6 +258,7 @@ end
|
|||||||
|
|
||||||
-- HealBot_InitSpells moved to HealBot_Controller_Spells.lua
|
-- HealBot_InitSpells moved to HealBot_Controller_Spells.lua
|
||||||
|
|
||||||
|
-- HealBot_InitData: Registers options and basic setup on variables loaded.
|
||||||
function HealBot_InitData()
|
function HealBot_InitData()
|
||||||
HealBot_Skins = HealBot_Config.Skins;
|
HealBot_Skins = HealBot_Config.Skins;
|
||||||
if(CT_RegisterMod) then
|
if(CT_RegisterMod) then
|
||||||
@@ -246,6 +274,7 @@ function HealBot_InitData()
|
|||||||
HealBot_Options_Debuff_Reset()
|
HealBot_Options_Debuff_Reset()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_ToggleOptions: Toggles the main options menu.
|
||||||
function HealBot_ToggleOptions()
|
function HealBot_ToggleOptions()
|
||||||
HealBot_TogglePanel(HealBot_Options)
|
HealBot_TogglePanel(HealBot_Options)
|
||||||
end
|
end
|
||||||
@@ -262,6 +291,7 @@ end
|
|||||||
do
|
do
|
||||||
local pass = function() end
|
local pass = function() end
|
||||||
local orig = UseAction
|
local orig = UseAction
|
||||||
|
-- UseAction: Intercepts standard clicks for mouseover support.
|
||||||
function UseAction(slot, checkCursor, onSelf)
|
function UseAction(slot, checkCursor, onSelf)
|
||||||
if HealBot_Config.ActionMouseover == 1 then
|
if HealBot_Config.ActionMouseover == 1 then
|
||||||
local mouseover = HealBot_Action_TooltipUnit
|
local mouseover = HealBot_Action_TooltipUnit
|
||||||
@@ -284,12 +314,16 @@ do
|
|||||||
spellName = HealBot_ScanTooltipTextLeft1 and HealBot_ScanTooltipTextLeft1:GetText()
|
spellName = HealBot_ScanTooltipTextLeft1 and HealBot_ScanTooltipTextLeft1:GetText()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
HealBot_CastFailed = false
|
||||||
orig(slot, checkCursor, onSelf)
|
orig(slot, checkCursor, onSelf)
|
||||||
if autoSelfCast then
|
if autoSelfCast then
|
||||||
SetCVar("autoSelfCast", autoSelfCast)
|
SetCVar("autoSelfCast", autoSelfCast)
|
||||||
end
|
end
|
||||||
|
|
||||||
if spellName and HealBot_AnnounceCast then
|
if spellName and not HealBot_CastFailed then
|
||||||
|
HealBot_CastingSpell = spellName
|
||||||
|
HealBot_CastingTarget = mouseover
|
||||||
|
HealBot_Process_HealValue(spellName, mouseover)
|
||||||
HealBot_AnnounceCast(spellName, mouseover)
|
HealBot_AnnounceCast(spellName, mouseover)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@
|
|||||||
<FontString name="$parent_text" inherits="GameFontNormalSmall">
|
<FontString name="$parent_text" inherits="GameFontNormalSmall">
|
||||||
<Anchors>
|
<Anchors>
|
||||||
<Anchor point="CENTER">
|
<Anchor point="CENTER">
|
||||||
<Offset> <AbsDimension y="1"/> </Offset>
|
<Offset> <AbsDimension y="0"/> </Offset>
|
||||||
</Anchor>
|
</Anchor>
|
||||||
</Anchors>
|
</Anchors>
|
||||||
</FontString>
|
</FontString>
|
||||||
|
|||||||
+6
-3
@@ -1,15 +1,16 @@
|
|||||||
## Interface: 11200
|
## Interface: 11200
|
||||||
## Title: HealBotBlue
|
## Title: HealBotBlue
|
||||||
## Version: 1.4.0
|
## Version: 1.7.0
|
||||||
## Author: Bluewhale
|
## Author: Bluewhale
|
||||||
## Notes: Adds panel with skinable bars for healing and decursive
|
## Notes: Raidframe replacement for healing, decursing, resource tracking and buffing with optional support for SuperWow, ClassicAPI, UnitXP_SP3 and Nampower.
|
||||||
## SavedVariables: HealBot_Config
|
## SavedVariablesPerCharacter: HealBot_Config
|
||||||
..\..\FrameXML\Fonts.xml
|
..\..\FrameXML\Fonts.xml
|
||||||
..\..\FrameXML\OptionsFrameTemplates.xml
|
..\..\FrameXML\OptionsFrameTemplates.xml
|
||||||
..\..\FrameXML\UIPanelTemplates.xml
|
..\..\FrameXML\UIPanelTemplates.xml
|
||||||
..\..\FrameXML\UIDropDownMenu.xml
|
..\..\FrameXML\UIDropDownMenu.xml
|
||||||
HealBot_Error.xml
|
HealBot_Error.xml
|
||||||
HealBot_Model.lua
|
HealBot_Model.lua
|
||||||
|
HealBot_Integrations.lua
|
||||||
HealBot_Controller_Range.lua
|
HealBot_Controller_Range.lua
|
||||||
HealBot_Controller_Comms.lua
|
HealBot_Controller_Comms.lua
|
||||||
HealBot_Controller_Aura.lua
|
HealBot_Controller_Aura.lua
|
||||||
@@ -27,3 +28,5 @@ HealBot_Options_CDC.xml
|
|||||||
HealBot_Options_Skins.xml
|
HealBot_Options_Skins.xml
|
||||||
HealBot_Options_Buffs.xml
|
HealBot_Options_Buffs.xml
|
||||||
HealBot_Options_Chat.xml
|
HealBot_Options_Chat.xml
|
||||||
|
HealBot_Options_Auto.xml
|
||||||
|
HealBot_Options_Integrations.xml
|
||||||
|
|||||||
+170
-15
@@ -1,9 +1,11 @@
|
|||||||
-- Status bar layout functions and tables moved to HealBot_View_Layout.lua
|
-- Status bar layout functions and tables moved to HealBot_View_Layout.lua
|
||||||
|
|
||||||
|
-- HealBot_AlwaysHeal: Returns true if healthy units should be shown.
|
||||||
function HealBot_AlwaysHeal()
|
function HealBot_AlwaysHeal()
|
||||||
return HealBot_Config.EnableHealthy==1
|
return HealBot_Config.EnableHealthy==1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_MayHeal: Checks if unit is eligible for healing UI.
|
||||||
function HealBot_MayHeal(unit)
|
function HealBot_MayHeal(unit)
|
||||||
if not UnitName(unit) or not HealBot_Heals[unit] then return false end
|
if not UnitName(unit) or not HealBot_Heals[unit] then return false end
|
||||||
if unit ~= 'target' then return true end
|
if unit ~= 'target' then return true end
|
||||||
@@ -11,6 +13,7 @@ function HealBot_MayHeal(unit)
|
|||||||
return true;
|
return true;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_ShouldHeal: Checks if unit needs immediate healing.
|
||||||
function HealBot_ShouldHeal(unit)
|
function HealBot_ShouldHeal(unit)
|
||||||
if HealBot_UnitDebuff[unit] and not UnitIsDeadOrGhost(unit) then
|
if HealBot_UnitDebuff[unit] and not UnitIsDeadOrGhost(unit) then
|
||||||
if HealBot_Range_Check(unit, 30)==1 then
|
if HealBot_Range_Check(unit, 30)==1 then
|
||||||
@@ -21,22 +24,26 @@ function HealBot_ShouldHeal(unit)
|
|||||||
and (UnitHealth(unit)<UnitHealthMax(unit)*HealBot_Config.AlertLevel or HealBot_AlwaysHeal());
|
and (UnitHealth(unit)<UnitHealthMax(unit)*HealBot_Config.AlertLevel or HealBot_AlwaysHeal());
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_ShouldHealSome: Alias for checking if any unit needs healing.
|
||||||
function HealBot_Action_ShouldHealSome()
|
function HealBot_Action_ShouldHealSome()
|
||||||
return table.foreach(HealBot_Action_HealButtons, function (index,button)
|
for index, button in pairs(HealBot_Action_HealButtons) do
|
||||||
if (HealBot_ShouldHeal(button.unit)) then return button.unit; end
|
if (HealBot_ShouldHeal(button.unit)) then return button.unit; end
|
||||||
end);
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_MustHeal: Internal utility: HealBot_MustHeal
|
||||||
function HealBot_MustHeal(unit)
|
function HealBot_MustHeal(unit)
|
||||||
return HealBot_ShouldHeal(unit) and UnitHealth(unit)<UnitHealthMax(unit)*HealBot_Config.AlertLevel
|
return HealBot_ShouldHeal(unit) and UnitHealth(unit)<UnitHealthMax(unit)*HealBot_Config.AlertLevel
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_MustHealSome: Checks if emergency healing is required.
|
||||||
function HealBot_Action_MustHealSome()
|
function HealBot_Action_MustHealSome()
|
||||||
return table.foreach(HealBot_Action_HealButtons, function (index,button)
|
for index, button in pairs(HealBot_Action_HealButtons) do
|
||||||
if (HealBot_MustHeal(button.unit)) then return button.unit; end
|
if (HealBot_MustHeal(button.unit)) then return button.unit; end
|
||||||
end);
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetRezSpellForClass: Internal utility: HealBot_GetRezSpellForClass
|
||||||
function HealBot_GetRezSpellForClass()
|
function HealBot_GetRezSpellForClass()
|
||||||
local _, class = UnitClass("player");
|
local _, class = UnitClass("player");
|
||||||
if class == "PRIEST" then return HEALBOT_RESURRECTION;
|
if class == "PRIEST" then return HEALBOT_RESURRECTION;
|
||||||
@@ -47,6 +54,7 @@ function HealBot_GetRezSpellForClass()
|
|||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_CanHeal: Internal utility: HealBot_CanHeal
|
||||||
function HealBot_CanHeal(unit)
|
function HealBot_CanHeal(unit)
|
||||||
if UnitIsDeadOrGhost(unit) then
|
if UnitIsDeadOrGhost(unit) then
|
||||||
local rezSpell = HealBot_GetRezSpellForClass();
|
local rezSpell = HealBot_GetRezSpellForClass();
|
||||||
@@ -76,6 +84,7 @@ end
|
|||||||
|
|
||||||
-- Refresh and reset functions moved to HealBot_View_Layout.lua
|
-- Refresh and reset functions moved to HealBot_View_Layout.lua
|
||||||
|
|
||||||
|
-- HealBot_Action_SpellPattern: Resolves spell string based on click modifiers.
|
||||||
function HealBot_Action_SpellPattern(button)
|
function HealBot_Action_SpellPattern(button)
|
||||||
local combos = HealBot_Config.KeyCombo[UnitClass("player")]
|
local combos = HealBot_Config.KeyCombo[UnitClass("player")]
|
||||||
if not combos then return nil end
|
if not combos then return nil end
|
||||||
@@ -86,6 +95,7 @@ function HealBot_Action_SpellPattern(button)
|
|||||||
return combos[press]
|
return combos[press]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Decode_Button: Decodes click action to spell pattern.
|
||||||
function HealBot_Decode_Button(button)
|
function HealBot_Decode_Button(button)
|
||||||
if button=="RightButton" then
|
if button=="RightButton" then
|
||||||
button="Right";
|
button="Right";
|
||||||
@@ -105,36 +115,106 @@ end
|
|||||||
-- Widget_OnFoo functions
|
-- Widget_OnFoo functions
|
||||||
--------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-- HealBot_Action_HealUnit_OnLoad: Internal utility: HealBot_Action_HealUnit_OnLoad
|
||||||
function HealBot_Action_HealUnit_OnLoad(this)
|
function HealBot_Action_HealUnit_OnLoad(this)
|
||||||
this:RegisterForClicks("LeftButtonUp", "RightButtonUp", "MiddleButtonUp", "Button4Up", "Button5Up");
|
this:RegisterForClicks("LeftButtonUp", "RightButtonUp", "MiddleButtonUp", "Button4Up", "Button5Up");
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_HealUnit_OnEnter: Internal utility: HealBot_Action_HealUnit_OnEnter
|
||||||
function HealBot_Action_HealUnit_OnEnter(this)
|
function HealBot_Action_HealUnit_OnEnter(this)
|
||||||
HealBot_Action_ShowTooltip(this);
|
HealBot_Action_ShowTooltip(this);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_HealUnit_OnLeave: Internal utility: HealBot_Action_HealUnit_OnLeave
|
||||||
function HealBot_Action_HealUnit_OnLeave(this)
|
function HealBot_Action_HealUnit_OnLeave(this)
|
||||||
HealBot_Action_HideTooltip(this);
|
HealBot_Action_HideTooltip(this);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------------------------
|
||||||
|
-- Puppeteer Utility Ports for Macro and Item Execution
|
||||||
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-- HealBot_SplitString: Internal utility: HealBot_SplitString
|
||||||
|
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)
|
||||||
|
if not end_pos then
|
||||||
|
table.insert(result, string.sub(str, start_pos))
|
||||||
|
break
|
||||||
|
end
|
||||||
|
table.insert(result, string.sub(str, start_pos, end_pos - 1))
|
||||||
|
start_pos = end_pos + string.len(delimiter)
|
||||||
|
end
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_RunMacroText: Internal utility: HealBot_RunMacroText
|
||||||
|
function HealBot_RunMacroText(body)
|
||||||
|
local commands = HealBot_SplitString(body, "\n")
|
||||||
|
for i = 1, table.getn(commands) do
|
||||||
|
ChatFrameEditBox:SetText(commands[i])
|
||||||
|
ChatEdit_SendText(ChatFrameEditBox)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_RunMacro: Internal utility: HealBot_RunMacro
|
||||||
|
function HealBot_RunMacro(name)
|
||||||
|
if GetMacroIndexByName(name) == 0 then return end
|
||||||
|
local _, _, body = GetMacroInfo(GetMacroIndexByName(name))
|
||||||
|
HealBot_RunMacroText(body)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetBagSlotInfo: Internal utility: HealBot_GetBagSlotInfo
|
||||||
|
function HealBot_GetBagSlotInfo(bag, slot)
|
||||||
|
local link = GetContainerItemLink(bag, slot)
|
||||||
|
if not link then return end
|
||||||
|
local _, _, name = string.find(link, "%[(.*)%]")
|
||||||
|
local _, count = GetContainerItemInfo(bag, slot)
|
||||||
|
return name, count
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_FindBagSlot: Internal utility: HealBot_FindBagSlot
|
||||||
|
function HealBot_FindBagSlot(itemName)
|
||||||
|
local bestBag, bestSlot, lowestStackSize
|
||||||
|
for bag = 0, NUM_BAG_FRAMES do
|
||||||
|
for slot = 1, GetContainerNumSlots(bag) do
|
||||||
|
local name, count = HealBot_GetBagSlotInfo(bag, slot)
|
||||||
|
if itemName == name then
|
||||||
|
if not lowestStackSize or lowestStackSize > count then
|
||||||
|
bestBag = bag
|
||||||
|
bestSlot = slot
|
||||||
|
lowestStackSize = count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return bestBag, bestSlot
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_UseItem: Uses an item from inventory.
|
||||||
|
function HealBot_UseItem(itemName)
|
||||||
|
local bag, slot = HealBot_FindBagSlot(itemName)
|
||||||
|
if not bag then return false end
|
||||||
|
UseContainerItem(bag, slot)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_HealUnit_OnClick: Click event handler.
|
||||||
function HealBot_Action_HealUnit_OnClick(this,button)
|
function HealBot_Action_HealUnit_OnClick(this,button)
|
||||||
local decode_button = HealBot_Decode_Button(button);
|
local decode_button = HealBot_Decode_Button(button);
|
||||||
local pattern = HealBot_Action_SpellPattern(decode_button);
|
local pattern = HealBot_Action_SpellPattern(decode_button);
|
||||||
|
|
||||||
-- Resurrection override on dead target
|
if not pattern then return end
|
||||||
if UnitIsDeadOrGhost(this.unit) then
|
|
||||||
local rezSpell = HealBot_GetRezSpellForClass();
|
|
||||||
if rezSpell then
|
|
||||||
HealBot_CastSpellOnFriend(rezSpell, this.unit);
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Buff casting override
|
-- Buff casting override (Spells only)
|
||||||
if HealBot_Config.BuffWatch == 1 then
|
if HealBot_Config.BuffWatch == 1 then
|
||||||
local inCombat = UnitAffectingCombat("player")
|
local inCombat = UnitAffectingCombat("player")
|
||||||
if (not inCombat) or (HealBot_Config.BuffWatchInCombat == 1) then
|
if (not inCombat) or (HealBot_Config.BuffWatchInCombat == 1) then
|
||||||
local myClass = UnitClass("player")
|
|
||||||
if HealBot_MissingBuffs[this.unit] then
|
if HealBot_MissingBuffs[this.unit] then
|
||||||
local missingBuff = HealBot_MissingBuffs[this.unit]
|
local missingBuff = HealBot_MissingBuffs[this.unit]
|
||||||
if decode_button == "Left" or decode_button == "Right" then
|
if decode_button == "Left" or decode_button == "Right" then
|
||||||
@@ -145,9 +225,72 @@ function HealBot_Action_HealUnit_OnClick(this,button)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
HealBot_HealUnit(this.unit,pattern);
|
-- Special cases for targeting
|
||||||
|
if string.lower(pattern) == "target" or string.lower(pattern) == "/target" then
|
||||||
|
TargetUnit(this.unit)
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Priority 1: Inline Scripts (starts with /)
|
||||||
|
if string.sub(pattern, 1, 1) == "/" then
|
||||||
|
local oldTarget = nil
|
||||||
|
if UnitExists("target") then oldTarget = UnitName("target") end
|
||||||
|
TargetUnit(this.unit)
|
||||||
|
HealBot_RunMacroText(pattern)
|
||||||
|
if oldTarget then
|
||||||
|
TargetByName(oldTarget)
|
||||||
|
else
|
||||||
|
ClearTarget()
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Priority 2: Spells
|
||||||
|
-- Resurrection override on dead target first
|
||||||
|
if UnitIsDeadOrGhost(this.unit) then
|
||||||
|
local rezSpell = HealBot_GetRezSpellForClass();
|
||||||
|
if rezSpell then
|
||||||
|
HealBot_CastSpellOnFriend(rezSpell, this.unit);
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if HealBot_Spells[pattern] or HealBot_GetSpellId(pattern) then
|
||||||
|
HealBot_HealUnit(this.unit, pattern);
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Priority 3: Named Macros
|
||||||
|
if GetMacroIndexByName(pattern) ~= 0 then
|
||||||
|
local oldTarget = nil
|
||||||
|
if UnitExists("target") then oldTarget = UnitName("target") end
|
||||||
|
TargetUnit(this.unit)
|
||||||
|
HealBot_RunMacro(pattern)
|
||||||
|
if oldTarget then
|
||||||
|
TargetByName(oldTarget)
|
||||||
|
else
|
||||||
|
ClearTarget()
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Priority 4: Items
|
||||||
|
local bag, slot = HealBot_FindBagSlot(pattern)
|
||||||
|
if bag then
|
||||||
|
local oldTarget = nil
|
||||||
|
if UnitExists("target") then oldTarget = UnitName("target") end
|
||||||
|
TargetUnit(this.unit)
|
||||||
|
UseContainerItem(bag, slot)
|
||||||
|
if SpellIsTargeting() then SpellTargetUnit(this.unit) end
|
||||||
|
if oldTarget then TargetByName(oldTarget) else ClearTarget() end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fallback attempt
|
||||||
|
HealBot_HealUnit(this.unit, pattern);
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_HealUnitCheck_OnClick: Click event handler.
|
||||||
function HealBot_Action_HealUnitCheck_OnClick(this)
|
function HealBot_Action_HealUnitCheck_OnClick(this)
|
||||||
if not this.unit then return end
|
if not this.unit then return end
|
||||||
if this:GetChecked() then
|
if this:GetChecked() then
|
||||||
@@ -163,20 +306,24 @@ function HealBot_Action_HealUnitCheck_OnClick(this)
|
|||||||
HealBot_Action_PartyChanged();
|
HealBot_Action_PartyChanged();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_OptionsButton_OnClick: Click event handler.
|
||||||
function HealBot_Action_OptionsButton_OnClick(this)
|
function HealBot_Action_OptionsButton_OnClick(this)
|
||||||
HealBot_TogglePanel(HealBot_Options);
|
HealBot_TogglePanel(HealBot_Options);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_AbortButton_OnClick: Click event handler.
|
||||||
function HealBot_Action_AbortButton_OnClick(this)
|
function HealBot_Action_AbortButton_OnClick(this)
|
||||||
SpellStopCasting();
|
SpellStopCasting();
|
||||||
end
|
end
|
||||||
|
|
||||||
local HealBot_CT_RA_UpdateMTs_Old;
|
local HealBot_CT_RA_UpdateMTs_Old;
|
||||||
|
-- HealBot_CT_RA_UpdateMTs: Internal utility: HealBot_CT_RA_UpdateMTs
|
||||||
function HealBot_CT_RA_UpdateMTs()
|
function HealBot_CT_RA_UpdateMTs()
|
||||||
local value = HealBot_CT_RA_UpdateMTs_Old();
|
local value = HealBot_CT_RA_UpdateMTs_Old();
|
||||||
return value;
|
return value;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_CT_RaidAssist_DEAD: Internal utility: HealBot_CT_RaidAssist_DEAD
|
||||||
function HealBot_CT_RaidAssist_DEAD()
|
function HealBot_CT_RaidAssist_DEAD()
|
||||||
-- if (type(CT_RA_MemberFrame_OnClick)=="function") then
|
-- if (type(CT_RA_MemberFrame_OnClick)=="function") then
|
||||||
-- HealBot_CT_RA_CustomOnClickFunction_Old = CT_RA_CustomOnClickFunction;
|
-- HealBot_CT_RA_CustomOnClickFunction_Old = CT_RA_CustomOnClickFunction;
|
||||||
@@ -192,10 +339,12 @@ end
|
|||||||
-- Frame_OnFoo functions
|
-- Frame_OnFoo functions
|
||||||
--------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-- HealBot_Action_OnLoad: Internal utility: HealBot_Action_OnLoad
|
||||||
function HealBot_Action_OnLoad(this)
|
function HealBot_Action_OnLoad(this)
|
||||||
-- HealBot_CT_RaidAssist();
|
-- HealBot_CT_RaidAssist();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_OnShow: Show event handler.
|
||||||
function HealBot_Action_OnShow(this)
|
function HealBot_Action_OnShow(this)
|
||||||
if HealBot_Config.PanelSounds==1 then
|
if HealBot_Config.PanelSounds==1 then
|
||||||
PlaySound("igAbilityOpen");
|
PlaySound("igAbilityOpen");
|
||||||
@@ -236,6 +385,7 @@ function HealBot_Action_OnShow(this)
|
|||||||
HealBot_Config.backcola[HealBot_Config.Current_Skin]);
|
HealBot_Config.backcola[HealBot_Config.Current_Skin]);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_OnHide: Hide event handler.
|
||||||
function HealBot_Action_OnHide(this)
|
function HealBot_Action_OnHide(this)
|
||||||
HealBot_StopMoving(this);
|
HealBot_StopMoving(this);
|
||||||
if not this.ProgrammaticHide then
|
if not this.ProgrammaticHide then
|
||||||
@@ -243,6 +393,7 @@ function HealBot_Action_OnHide(this)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_OnMouseDown: Internal utility: HealBot_Action_OnMouseDown
|
||||||
function HealBot_Action_OnMouseDown(this,button)
|
function HealBot_Action_OnMouseDown(this,button)
|
||||||
if button~="RightButton" then
|
if button~="RightButton" then
|
||||||
if HealBot_Config.ActionLocked==0 then
|
if HealBot_Config.ActionLocked==0 then
|
||||||
@@ -251,6 +402,7 @@ function HealBot_Action_OnMouseDown(this,button)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_OnMouseUp: Internal utility: HealBot_Action_OnMouseUp
|
||||||
function HealBot_Action_OnMouseUp(this,button)
|
function HealBot_Action_OnMouseUp(this,button)
|
||||||
if button~="RightButton" then
|
if button~="RightButton" then
|
||||||
HealBot_StopMoving(this);
|
HealBot_StopMoving(this);
|
||||||
@@ -259,16 +411,19 @@ function HealBot_Action_OnMouseUp(this,button)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_OnClick: Handles click events on heal buttons.
|
||||||
function HealBot_Action_OnClick(this,button)
|
function HealBot_Action_OnClick(this,button)
|
||||||
-- HealBot_Action_AddDebug("OnClick("..button..")");
|
-- HealBot_Action_AddDebug("OnClick("..button..")");
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_OnDragStart: Internal utility: HealBot_Action_OnDragStart
|
||||||
function HealBot_Action_OnDragStart(this,button)
|
function HealBot_Action_OnDragStart(this,button)
|
||||||
if HealBot_Config.ActionLocked==0 then
|
if HealBot_Config.ActionLocked==0 then
|
||||||
HealBot_StartMoving(this);
|
HealBot_StartMoving(this);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Action_OnDragStop: Internal utility: HealBot_Action_OnDragStop
|
||||||
function HealBot_Action_OnDragStop(this)
|
function HealBot_Action_OnDragStop(this)
|
||||||
HealBot_StopMoving(this);
|
HealBot_StopMoving(this);
|
||||||
end
|
end
|
||||||
|
|||||||
+110
-13
@@ -18,6 +18,20 @@
|
|||||||
<OnClick>HealBot_Action_HealUnit_OnClick(this,arg1);</OnClick>
|
<OnClick>HealBot_Action_HealUnit_OnClick(this,arg1);</OnClick>
|
||||||
</Scripts>
|
</Scripts>
|
||||||
<Frames>
|
<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">
|
<StatusBar name="$parentBar" inherits="HealBot_StatusBar">
|
||||||
<Anchors>
|
<Anchors>
|
||||||
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
||||||
@@ -33,6 +47,14 @@
|
|||||||
</Anchors>
|
</Anchors>
|
||||||
<Layers>
|
<Layers>
|
||||||
<Layer level="OVERLAY">
|
<Layer level="OVERLAY">
|
||||||
|
<Texture name="$parentRaidIcon" file="Interface\TargetingFrame\UI-RaidTargetingIcons" hidden="true">
|
||||||
|
<Size><AbsDimension x="14" y="14"/></Size>
|
||||||
|
<Anchors>
|
||||||
|
<Anchor point="CENTER">
|
||||||
|
<Offset><AbsDimension x="0" y="0"/></Offset>
|
||||||
|
</Anchor>
|
||||||
|
</Anchors>
|
||||||
|
</Texture>
|
||||||
<Texture name="$parentIcon1" hidden="true">
|
<Texture name="$parentIcon1" hidden="true">
|
||||||
<Size><AbsDimension x="12" y="12"/></Size>
|
<Size><AbsDimension x="12" y="12"/></Size>
|
||||||
<Anchors>
|
<Anchors>
|
||||||
@@ -73,22 +95,48 @@
|
|||||||
</Anchor>
|
</Anchor>
|
||||||
</Anchors>
|
</Anchors>
|
||||||
</Texture>
|
</Texture>
|
||||||
</Layer>
|
<Texture name="$parentIcon6" hidden="true">
|
||||||
</Layers>
|
<Size><AbsDimension x="12" y="12"/></Size>
|
||||||
</StatusBar>
|
|
||||||
<StatusBar name="$parentBar2" inherits="HealBot_StatusBar">
|
|
||||||
<Anchors>
|
<Anchors>
|
||||||
<Anchor point="TOPLEFT" relativePoint="TOPLEFT">
|
<Anchor point="LEFT" relativeTo="$parentIcon5" relativePoint="RIGHT">
|
||||||
<Offset>
|
<Offset><AbsDimension x="1" y="0"/></Offset>
|
||||||
<AbsDimension x="0" y="0"/>
|
|
||||||
</Offset>
|
|
||||||
</Anchor>
|
|
||||||
<Anchor point="TOPRIGHT" relativePoint="TOPRIGHT">
|
|
||||||
<Offset>
|
|
||||||
<AbsDimension x="0" y="0"/>
|
|
||||||
</Offset>
|
|
||||||
</Anchor>
|
</Anchor>
|
||||||
</Anchors>
|
</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>
|
||||||
<StatusBar name="$parentBar3" inherits="HealBot_StatusBar" hidden="true">
|
<StatusBar name="$parentBar3" inherits="HealBot_StatusBar" hidden="true">
|
||||||
<Anchors>
|
<Anchors>
|
||||||
@@ -232,6 +280,15 @@
|
|||||||
<Button name="HealBot_Action_HealUnit39" inherits="HealingButtonTemplate" text="Unit not set"/>
|
<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_HealUnit40" inherits="HealingButtonTemplate" text="Unit not set"/>
|
||||||
<Button name="HealBot_Action_HealUnit41" 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_HealUnit51" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||||
<Button name="HealBot_Action_HealUnit52" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
<Button name="HealBot_Action_HealUnit52" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||||
@@ -243,6 +300,46 @@
|
|||||||
<Button name="HealBot_Action_HealUnit58" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
<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_HealUnit59" inherits="HealingButtonTemplate2" text="Unit not set"/>
|
||||||
<Button name="HealBot_Action_HealUnit60" 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_Header1" inherits="HealingButtonTemplate4" text="Unit not set"/>
|
||||||
<Button name="HealBot_Action_Header2" inherits="HealingButtonTemplate4" text="Unit not set"/>
|
<Button name="HealBot_Action_Header2" inherits="HealingButtonTemplate4" text="Unit not set"/>
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ HealBot_BonusScanner = {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:GetBonus: Internal utility: HealBot_BonusScanner:GetBonus
|
||||||
function HealBot_BonusScanner:GetBonus()
|
function HealBot_BonusScanner:GetBonus()
|
||||||
if(HealBot_BonusScanner.bonuses) then
|
if(HealBot_BonusScanner.bonuses) then
|
||||||
return HealBot_BonusScanner.bonuses;
|
return HealBot_BonusScanner.bonuses;
|
||||||
@@ -58,6 +59,7 @@ function HealBot_BonusScanner:GetBonus()
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner_Update: Internal utility: HealBot_BonusScanner_Update
|
||||||
function HealBot_BonusScanner_Update()
|
function HealBot_BonusScanner_Update()
|
||||||
|
|
||||||
if (HealBot_BonusScanner.IsUpdating) then
|
if (HealBot_BonusScanner.IsUpdating) then
|
||||||
@@ -69,6 +71,7 @@ function HealBot_BonusScanner_Update()
|
|||||||
HealBot_BonusScanner.IsUpdating = false;
|
HealBot_BonusScanner.IsUpdating = false;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:ScanEquipment: Internal utility: HealBot_BonusScanner:ScanEquipment
|
||||||
function HealBot_BonusScanner:ScanEquipment()
|
function HealBot_BonusScanner:ScanEquipment()
|
||||||
local slotid, slotname, hasItem, i;
|
local slotid, slotname, hasItem, i;
|
||||||
|
|
||||||
@@ -90,6 +93,7 @@ function HealBot_BonusScanner:ScanEquipment()
|
|||||||
HealBot_BonusScanner.bonuses = HealBot_BonusScanner.temp.bonuses;
|
HealBot_BonusScanner.bonuses = HealBot_BonusScanner.temp.bonuses;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:ScanTooltip: Internal utility: HealBot_BonusScanner:ScanTooltip
|
||||||
function HealBot_BonusScanner:ScanTooltip()
|
function HealBot_BonusScanner:ScanTooltip()
|
||||||
local tmpTxt, line;
|
local tmpTxt, line;
|
||||||
local lines = HealBot_BonusTooltip:NumLines();
|
local lines = HealBot_BonusTooltip:NumLines();
|
||||||
@@ -103,6 +107,7 @@ function HealBot_BonusScanner:ScanTooltip()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:AddValue: Internal utility: HealBot_BonusScanner:AddValue
|
||||||
function HealBot_BonusScanner:AddValue(effect, value)
|
function HealBot_BonusScanner:AddValue(effect, value)
|
||||||
local i,e;
|
local i,e;
|
||||||
if(type(effect) == "string") then
|
if(type(effect) == "string") then
|
||||||
@@ -126,6 +131,7 @@ function HealBot_BonusScanner:AddValue(effect, value)
|
|||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:ScanLine: Internal utility: HealBot_BonusScanner:ScanLine
|
||||||
function HealBot_BonusScanner:ScanLine(line)
|
function HealBot_BonusScanner:ScanLine(line)
|
||||||
local tmpStr, found;
|
local tmpStr, found;
|
||||||
if(string.sub(line,0,string.len(HEALBOT_BONUSSCANNER_PREFIX_EQUIP)) == HEALBOT_BONUSSCANNER_PREFIX_EQUIP) then
|
if(string.sub(line,0,string.len(HEALBOT_BONUSSCANNER_PREFIX_EQUIP)) == HEALBOT_BONUSSCANNER_PREFIX_EQUIP) then
|
||||||
@@ -150,6 +156,7 @@ function HealBot_BonusScanner:ScanLine(line)
|
|||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:CheckPassive: Internal utility: HealBot_BonusScanner:CheckPassive
|
||||||
function HealBot_BonusScanner:CheckPassive(line)
|
function HealBot_BonusScanner:CheckPassive(line)
|
||||||
local i, p, value, found;
|
local i, p, value, found;
|
||||||
|
|
||||||
@@ -166,6 +173,7 @@ function HealBot_BonusScanner:CheckPassive(line)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:CheckGeneric: Internal utility: HealBot_BonusScanner:CheckGeneric
|
||||||
function HealBot_BonusScanner:CheckGeneric(line)
|
function HealBot_BonusScanner:CheckGeneric(line)
|
||||||
local value, token, pos, tmpStr, found;
|
local value, token, pos, tmpStr, found;
|
||||||
found = false;
|
found = false;
|
||||||
@@ -199,6 +207,7 @@ function HealBot_BonusScanner:CheckGeneric(line)
|
|||||||
return found;
|
return found;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:CheckToken: Internal utility: HealBot_BonusScanner:CheckToken
|
||||||
function HealBot_BonusScanner:CheckToken(token, value)
|
function HealBot_BonusScanner:CheckToken(token, value)
|
||||||
local i, p, s1, s2;
|
local i, p, s1, s2;
|
||||||
|
|
||||||
@@ -209,6 +218,7 @@ function HealBot_BonusScanner:CheckToken(token, value)
|
|||||||
return false;
|
return false;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_BonusScanner:CheckOther: Internal utility: HealBot_BonusScanner:CheckOther
|
||||||
function HealBot_BonusScanner:CheckOther(line)
|
function HealBot_BonusScanner:CheckOther(line)
|
||||||
local i, p, value, start, found;
|
local i, p, value, start, found;
|
||||||
|
|
||||||
|
|||||||
+141
-25
@@ -2,7 +2,9 @@
|
|||||||
-- Handles tracking buffs/debuffs (auras) on group/raid units
|
-- Handles tracking buffs/debuffs (auras) on group/raid units
|
||||||
|
|
||||||
HealBot_MissingBuffs = {}
|
HealBot_MissingBuffs = {}
|
||||||
|
local StaticHasBuff = {}
|
||||||
|
|
||||||
|
-- HealBot_UnitAffected: Checks if a specific buff/debuff exists on a unit.
|
||||||
function HealBot_UnitAffected(unit, effect)
|
function HealBot_UnitAffected(unit, effect)
|
||||||
if not effect then return nil; end
|
if not effect then return nil; end
|
||||||
local i = 1
|
local i = 1
|
||||||
@@ -30,14 +32,41 @@ function HealBot_UnitAffected(unit, effect)
|
|||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_CheckShamanWeaponBuff: Checks for Shaman weapon enchants via API.
|
||||||
function HealBot_CheckShamanWeaponBuff(spellName)
|
function HealBot_CheckShamanWeaponBuff(spellName)
|
||||||
local hasMainHandEnchant, _, _, hasOffHandEnchant = GetWeaponEnchantInfo()
|
local hasMainHandEnchant, _, _, hasOffHandEnchant = GetWeaponEnchantInfo()
|
||||||
if hasMainHandEnchant or hasOffHandEnchant then
|
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 = HealBot_GetTable()
|
||||||
|
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()
|
||||||
|
HealBot_ReleaseTable(slots)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
HealBot_ScanTooltip:Hide()
|
||||||
|
HealBot_ReleaseTable(slots)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_CheckBuffs: Scans unit for missing tracked buffs.
|
||||||
function HealBot_CheckBuffs(unit)
|
function HealBot_CheckBuffs(unit)
|
||||||
if HealBot_Config.BuffWatch ~= 1 then
|
if HealBot_Config.BuffWatch ~= 1 then
|
||||||
HealBot_MissingBuffs[unit] = nil
|
HealBot_MissingBuffs[unit] = nil
|
||||||
@@ -68,7 +97,10 @@ function HealBot_CheckBuffs(unit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
-- Gather buffs on unit
|
-- Gather buffs on unit
|
||||||
local hasBuff = {}
|
local hasBuff = StaticHasBuff
|
||||||
|
for k in pairs(hasBuff) do
|
||||||
|
hasBuff[k] = nil
|
||||||
|
end
|
||||||
local i = 1
|
local i = 1
|
||||||
while true do
|
while true do
|
||||||
local buffTexture = UnitBuff(unit, i)
|
local buffTexture = UnitBuff(unit, i)
|
||||||
@@ -91,7 +123,7 @@ function HealBot_CheckBuffs(unit)
|
|||||||
local val = HealBot_Config.BuffDropDowns[myClass][j]
|
local val = HealBot_Config.BuffDropDowns[myClass][j]
|
||||||
if val and val > 0 then
|
if val and val > 0 then
|
||||||
local isSelfOnly = (HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[j] == 1)
|
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 spellName = HealBot_Buff_Spells[myClass][val]
|
||||||
|
|
||||||
local hasIt = hasBuff[spellName]
|
local hasIt = hasBuff[spellName]
|
||||||
@@ -100,7 +132,7 @@ function HealBot_CheckBuffs(unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if not hasIt then
|
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)
|
hasIt = HealBot_CheckShamanWeaponBuff(spellName)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -115,14 +147,7 @@ function HealBot_CheckBuffs(unit)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function HealBot_OnEvent_UnitAura(this, unit)
|
local HealBot_TrackedHoTs = {
|
||||||
local DebuffType;
|
|
||||||
|
|
||||||
if HealBot_Heals[unit] and unit ~= "target" then
|
|
||||||
HealBot_UnitIcons[unit] = {}
|
|
||||||
local iconCount = 0
|
|
||||||
|
|
||||||
local HealBot_TrackedHoTs = {
|
|
||||||
["Interface\\Icons\\Spell_Holy_Renew"] = true,
|
["Interface\\Icons\\Spell_Holy_Renew"] = true,
|
||||||
["Interface\\Icons\\Spell_Nature_Rejuvenation"] = true,
|
["Interface\\Icons\\Spell_Nature_Rejuvenation"] = true,
|
||||||
["Interface\\Icons\\Spell_Nature_ResistNature"] = true,
|
["Interface\\Icons\\Spell_Nature_ResistNature"] = true,
|
||||||
@@ -130,54 +155,145 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
|||||||
["Interface\\Icons\\Spell_Holy_SealOfProtection"] = true,
|
["Interface\\Icons\\Spell_Holy_SealOfProtection"] = true,
|
||||||
["Interface\\Icons\\Spell_Holy_Excorcism"] = true,
|
["Interface\\Icons\\Spell_Holy_Excorcism"] = true,
|
||||||
["Interface\\Icons\\btnholyscriptures"] = true,
|
["Interface\\Icons\\btnholyscriptures"] = true,
|
||||||
}
|
["Interface\\Icons\\Spell_Holy_AshesToAshes"] = true,
|
||||||
|
}
|
||||||
|
|
||||||
|
local HealBot_DebuffTypeMap = nil
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_UnitAura: Updates debuff lists and icon textures on aura change.
|
||||||
|
function HealBot_OnEvent_UnitAura(this, unit)
|
||||||
|
if not HealBot_DebuffTypeMap then
|
||||||
|
HealBot_DebuffTypeMap = {
|
||||||
|
[HEALBOT_DISEASE] = HEALBOT_DISEASE_en,
|
||||||
|
[HEALBOT_MAGIC] = HEALBOT_MAGIC_en,
|
||||||
|
[HEALBOT_POISON] = HEALBOT_POISON_en,
|
||||||
|
[HEALBOT_CURSE] = HEALBOT_CURSE_en
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local DebuffType;
|
||||||
|
|
||||||
|
if HealBot_Heals[unit] then
|
||||||
|
if not HealBot_UnitIcons[unit] then
|
||||||
|
HealBot_UnitIcons[unit] = {}
|
||||||
|
end
|
||||||
|
for j = 1, 10 do
|
||||||
|
HealBot_UnitIcons[unit][j] = nil
|
||||||
|
end
|
||||||
|
local iconCount = 0
|
||||||
local i = 1;
|
local i = 1;
|
||||||
|
HealBot_UnitDebuff[unit] = nil;
|
||||||
|
local trackedTextures = {}
|
||||||
|
|
||||||
while true do
|
while true do
|
||||||
local debuff, tmp, debuff_type = UnitDebuff(unit, i, 1)
|
local debuff, tmp, debuff_type = UnitDebuff(unit, i, 1)
|
||||||
if debuff then
|
if debuff then
|
||||||
if iconCount < 5 then
|
local mapped_type = nil
|
||||||
|
if debuff_type then
|
||||||
|
mapped_type = HealBot_DebuffTypeMap[debuff_type] or debuff_type
|
||||||
|
end
|
||||||
|
|
||||||
|
local localizedClass = UnitClass(unit)
|
||||||
|
local shouldTrack = false
|
||||||
|
if unit == "target" then
|
||||||
|
shouldTrack = true
|
||||||
|
elseif localizedClass and HealBot_CDCInc[localizedClass] == 1 then
|
||||||
|
shouldTrack = true
|
||||||
|
elseif not localizedClass or HealBot_CDCInc[localizedClass] == nil then
|
||||||
|
shouldTrack = true
|
||||||
|
end
|
||||||
|
|
||||||
|
local isDispellable = false
|
||||||
|
if mapped_type and HealBot_DebuffWatch[mapped_type] then
|
||||||
|
isDispellable = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if isDispellable or HealBot_Config.CDCShowAllDebuffs == 1 then
|
||||||
|
if iconCount < 10 and not trackedTextures[debuff] then
|
||||||
iconCount = iconCount + 1
|
iconCount = iconCount + 1
|
||||||
HealBot_UnitIcons[unit][iconCount] = debuff
|
HealBot_UnitIcons[unit][iconCount] = debuff
|
||||||
|
trackedTextures[debuff] = true
|
||||||
end
|
end
|
||||||
if HealBot_CDCInc[UnitClass(unit)] == 1 and HealBot_DebuffWatch[debuff_type] == "YES" then
|
end
|
||||||
HealBot_UnitDebuff[unit] = debuff_type
|
|
||||||
DebuffType = debuff_type;
|
if shouldTrack and isDispellable then
|
||||||
if HealBot_DebuffPriority[debuff_type] then
|
HealBot_UnitDebuff[unit] = mapped_type
|
||||||
|
DebuffType = mapped_type;
|
||||||
|
|
||||||
|
local isPriority = false
|
||||||
|
if HealBot_DebuffPriority then
|
||||||
|
for _, pType in ipairs(HealBot_DebuffPriority) do
|
||||||
|
if pType == mapped_type then
|
||||||
|
isPriority = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if isPriority then
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
else
|
else
|
||||||
if i == 1 then HealBot_UnitDebuff[unit] = nil; end
|
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if HealBot_Config.CDCShowAllDebuffs == 1 then
|
||||||
|
local k = 1
|
||||||
|
while true do
|
||||||
|
local debuff = UnitDebuff(unit, k)
|
||||||
|
if not debuff then break end
|
||||||
|
if not trackedTextures[debuff] and iconCount < 10 then
|
||||||
|
iconCount = iconCount + 1
|
||||||
|
HealBot_UnitIcons[unit][iconCount] = debuff
|
||||||
|
trackedTextures[debuff] = true
|
||||||
|
end
|
||||||
|
k = k + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local b = 1
|
local b = 1
|
||||||
while true do
|
while true do
|
||||||
local buff = UnitBuff(unit, b)
|
local buff = UnitBuff(unit, b)
|
||||||
if not buff then break end
|
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
|
iconCount = iconCount + 1
|
||||||
HealBot_UnitIcons[unit][iconCount] = buff
|
HealBot_UnitIcons[unit][iconCount] = buff
|
||||||
end
|
end
|
||||||
b = b + 1
|
b = b + 1
|
||||||
end
|
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 HealBot_UnitDebuff[unit] then
|
||||||
if DebuffType and HealBot_Range_Check(unit, 27) == 1 then
|
if DebuffType and HealBot_Range_Check(unit, 27) == 1 then
|
||||||
if HealBot_Config.ShowDebuffWarning == 1 then
|
if HealBot_Config.ShowDebuffWarning == 1 then
|
||||||
|
local color = HealBot_Config.CDCBarColour[DebuffType]
|
||||||
|
local r, g, b = 1, 0, 0
|
||||||
|
if color then
|
||||||
|
r, g, b = color.R, color.G, color.B
|
||||||
|
end
|
||||||
UIErrorsFrame:AddMessage(UnitName(unit) .. " suffers from " .. DebuffType,
|
UIErrorsFrame:AddMessage(UnitName(unit) .. " suffers from " .. DebuffType,
|
||||||
HealBot_Config.CDCBarColour[DebuffType].R,
|
r, g, b,
|
||||||
HealBot_Config.CDCBarColour[DebuffType].G,
|
|
||||||
HealBot_Config.CDCBarColour[DebuffType].B,
|
|
||||||
1, UIERRORS_HOLD_TIME);
|
1, UIERRORS_HOLD_TIME);
|
||||||
end
|
end
|
||||||
if HealBot_Config.SoundDebuffWarning == 1 then HealBot_PlaySound(HealBot_Config.SoundDebuffPlay); end
|
if HealBot_Config.SoundDebuffWarning == 1 then HealBot_PlaySound(HealBot_Config.SoundDebuffPlay); end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
HealBot_CheckBuffs(unit);
|
-- Check buffs synchronously because tooltip scanning fails in OnUpdate
|
||||||
HealBot_RecalcHeals(unit);
|
HealBot_CheckBuffs(unit)
|
||||||
|
|
||||||
|
-- Defer UI updates
|
||||||
|
HealBot_View_DirtyUnits[unit] = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
-- HealBot_Controller_Comms.lua
|
-- HealBot_Controller_Comms.lua
|
||||||
-- Handles network sync (addon messaging), errors, and chat debugging
|
-- Handles network sync (addon messaging), errors, and chat debugging
|
||||||
|
|
||||||
|
-- HealBot_Get_DebugChan: Internal utility: HealBot_Get_DebugChan
|
||||||
function HealBot_Get_DebugChan()
|
function HealBot_Get_DebugChan()
|
||||||
local index = GetChannelName("HBmsg");
|
local index = GetChannelName("HBmsg");
|
||||||
if (index > 0) then
|
if (index > 0) then
|
||||||
@@ -10,6 +11,7 @@ function HealBot_Get_DebugChan()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_AddChat: Prints standard messages to default chat frame.
|
||||||
function HealBot_AddChat(msg)
|
function HealBot_AddChat(msg)
|
||||||
local chanid = HealBot_Get_DebugChan();
|
local chanid = HealBot_Get_DebugChan();
|
||||||
if chanid and HealBot_SpamCnt < 3 then
|
if chanid and HealBot_SpamCnt < 3 then
|
||||||
@@ -28,6 +30,7 @@ function HealBot_AddChat(msg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_AddDebug: Prints debug messages to internal chat channel.
|
||||||
function HealBot_AddDebug(msg)
|
function HealBot_AddDebug(msg)
|
||||||
local chanid = HealBot_Get_DebugChan();
|
local chanid = HealBot_Get_DebugChan();
|
||||||
if chanid and HealBot_SpamCnt < 3 then
|
if chanid and HealBot_SpamCnt < 3 then
|
||||||
@@ -44,6 +47,7 @@ function HealBot_AddDebug(msg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Report_Error: Formats and prints error logs.
|
||||||
function HealBot_Report_Error(msg)
|
function HealBot_Report_Error(msg)
|
||||||
if HealBot_ErrorCnt < 28 then
|
if HealBot_ErrorCnt < 28 then
|
||||||
HealBot_ErrorCnt = HealBot_ErrorCnt + 1;
|
HealBot_ErrorCnt = HealBot_ErrorCnt + 1;
|
||||||
@@ -52,11 +56,13 @@ function HealBot_Report_Error(msg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_AddError: Displays error text in the UI frame.
|
||||||
function HealBot_AddError(msg)
|
function HealBot_AddError(msg)
|
||||||
UIErrorsFrame:AddMessage(msg, 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
|
UIErrorsFrame:AddMessage(msg, 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
|
||||||
HealBot_AddDebug(msg);
|
HealBot_AddDebug(msg);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_SendAddonMessage: Broadcasts data to party/raid channels.
|
||||||
function HealBot_SendAddonMessage(prefix, text)
|
function HealBot_SendAddonMessage(prefix, text)
|
||||||
if GetNumRaidMembers() > 0 then
|
if GetNumRaidMembers() > 0 then
|
||||||
SendAddonMessage(prefix, text, "RAID")
|
SendAddonMessage(prefix, text, "RAID")
|
||||||
@@ -65,11 +71,13 @@ function HealBot_SendAddonMessage(prefix, text)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_AddonMsg: Parses incoming heal data from other clients.
|
||||||
function HealBot_OnEvent_AddonMsg(this, addon_id, inc_msg, dist_target, sender_id)
|
function HealBot_OnEvent_AddonMsg(this, addon_id, inc_msg, dist_target, sender_id)
|
||||||
if addon_id == HEALBOT_ADDON_ID then
|
if addon_id == HEALBOT_ADDON_ID then
|
||||||
local tmpTest, unitname, heal_val
|
local tmpTest, unitname, heal_val
|
||||||
tmpTest, tmpTest, unitname, heal_val = string.find(inc_msg, ">> (%a+) <<=>> (.%d+) <<" );
|
tmpTest, tmpTest, unitname, heal_val = string.find(inc_msg, ">> (%a+) <<=>> (.%d+) <<" );
|
||||||
if heal_val then
|
if heal_val then
|
||||||
|
if sender_id == UnitName("player") then return end
|
||||||
if not HealBot_HealsIn[unitname] then
|
if not HealBot_HealsIn[unitname] then
|
||||||
HealBot_HealsIn[unitname] = 0;
|
HealBot_HealsIn[unitname] = 0;
|
||||||
end
|
end
|
||||||
|
|||||||
+208
-60
@@ -2,11 +2,13 @@
|
|||||||
-- Manages WoW Frame events and periodic updates, routing to respective services
|
-- Manages WoW Frame events and periodic updates, routing to respective services
|
||||||
|
|
||||||
HealBot_View_DirtyUnits = {}
|
HealBot_View_DirtyUnits = {}
|
||||||
|
HealBot_View_DirtyPower = {}
|
||||||
local HealBot_Timer1, HealsIn_Timer = 0, 0;
|
local HealBot_Timer1, HealsIn_Timer = 0, 0;
|
||||||
|
HealBot_LastModState = ""
|
||||||
|
|
||||||
|
-- HealBot_OnLoad: Registers core events and observers on addon load.
|
||||||
function HealBot_OnLoad(this)
|
function HealBot_OnLoad(this)
|
||||||
this:RegisterEvent("VARIABLES_LOADED");
|
this:RegisterEvent("VARIABLES_LOADED");
|
||||||
this:RegisterEvent("MODIFIER_STATE_CHANGED");
|
|
||||||
|
|
||||||
SLASH_HEALBOT1 = "/healbot";
|
SLASH_HEALBOT1 = "/healbot";
|
||||||
SLASH_HEALBOT2 = "/hb";
|
SLASH_HEALBOT2 = "/hb";
|
||||||
@@ -20,7 +22,7 @@ function HealBot_OnLoad(this)
|
|||||||
HealBot_View_DirtyUnits[unitID] = true
|
HealBot_View_DirtyUnits[unitID] = true
|
||||||
end)
|
end)
|
||||||
HealBot_Model:RegisterObserver("UNIT_POWER_CHANGED", function(unitID)
|
HealBot_Model:RegisterObserver("UNIT_POWER_CHANGED", function(unitID)
|
||||||
HealBot_View_DirtyUnits[unitID] = true
|
HealBot_View_DirtyPower[unitID] = true
|
||||||
end)
|
end)
|
||||||
HealBot_Model:RegisterObserver("UNIT_AURA_CHANGED", function(unitID)
|
HealBot_Model:RegisterObserver("UNIT_AURA_CHANGED", function(unitID)
|
||||||
HealBot_View_DirtyUnits[unitID] = true
|
HealBot_View_DirtyUnits[unitID] = true
|
||||||
@@ -30,18 +32,35 @@ function HealBot_OnLoad(this)
|
|||||||
end)
|
end)
|
||||||
HealBot_Model:RegisterObserver("EQUIPMENT_CHANGED", function(unitID)
|
HealBot_Model:RegisterObserver("EQUIPMENT_CHANGED", function(unitID)
|
||||||
if unitID == "player" then
|
if unitID == "player" then
|
||||||
HealBot_BonusScanner:ScanEquipment()
|
HealBot_EquipChangeTimer = 1
|
||||||
HealBot_CalcEquipBonus = true;
|
|
||||||
HealBot_RecalcSpells();
|
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_RegisterThis: Internal utility: HealBot_RegisterThis
|
||||||
function HealBot_RegisterThis(this)
|
function HealBot_RegisterThis(this)
|
||||||
-- Deprecated / not used
|
-- Deprecated / not used
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnUpdate: Main loop: processes dirty queues and timers.
|
||||||
function HealBot_OnUpdate(this, arg1)
|
function HealBot_OnUpdate(this, arg1)
|
||||||
|
if HealBot_Action_TooltipUnit and HealBot_Tooltip:IsVisible() then
|
||||||
|
local s = IsShiftKeyDown() and true or false
|
||||||
|
local c = IsControlKeyDown() and true or false
|
||||||
|
local a = IsAltKeyDown() and true or false
|
||||||
|
|
||||||
|
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_LastModS = false
|
||||||
|
HealBot_LastModC = false
|
||||||
|
HealBot_LastModA = false
|
||||||
|
end
|
||||||
|
|
||||||
if HealBot_TargetRestorePending then
|
if HealBot_TargetRestorePending then
|
||||||
HealBot_TargetRestoreTimer = HealBot_TargetRestoreTimer + arg1;
|
HealBot_TargetRestoreTimer = HealBot_TargetRestoreTimer + arg1;
|
||||||
if HealBot_TargetRestoreTimer >= 0.1 then
|
if HealBot_TargetRestoreTimer >= 0.1 then
|
||||||
@@ -58,22 +77,105 @@ function HealBot_OnUpdate(this, arg1)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Process Dirty Queue for MVC View
|
if HealBot_PendingShapeshiftCast then
|
||||||
if next(HealBot_View_DirtyUnits) ~= nil then
|
local pendingCast = HealBot_PendingShapeshiftCast
|
||||||
for unitID in pairs(HealBot_View_DirtyUnits) do
|
|
||||||
HealBot_Action_RefreshButtons(unitID)
|
-- Wait for server to process the unshift before attempting the cast
|
||||||
HealBot_View_DirtyUnits[unitID] = nil
|
if GetTime() >= pendingCast.fireTime then
|
||||||
|
if not HealBot_GetShapeshiftForm() then
|
||||||
|
-- Target the unit if necessary before casting
|
||||||
|
-- Target the unit if necessary before casting
|
||||||
|
if pendingCast.oldTarget ~= UnitName(pendingCast.target) then
|
||||||
|
TargetUnit(pendingCast.target)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 1. Initialize the MVC side effects (AnnounceCast, Incoming Heals) only ONCE
|
||||||
|
if not pendingCast.started then
|
||||||
|
pendingCast.started = true
|
||||||
|
|
||||||
|
-- Extract base spell
|
||||||
|
local baseSpell = pendingCast.spell
|
||||||
|
local parenIndex = string.find(pendingCast.spell, "%(")
|
||||||
|
if parenIndex then
|
||||||
|
baseSpell = string.sub(pendingCast.spell, 1, parenIndex - 1)
|
||||||
|
end
|
||||||
|
baseSpell = string.gsub(baseSpell, "%s+$", "")
|
||||||
|
|
||||||
|
-- Force MVC updates since we guarantee the cast will eventually pierce the server
|
||||||
|
HealBot_CastFailed = true -- Trigger first attempt immediately
|
||||||
|
HealBot_CastingSpell = baseSpell
|
||||||
|
HealBot_CastingTarget = pendingCast.target
|
||||||
|
HealBot_Process_HealValue(baseSpell, pendingCast.target)
|
||||||
|
HealBot_AnnounceCast(pendingCast.spell, pendingCast.target)
|
||||||
|
|
||||||
|
-- Restore target logic
|
||||||
|
if pendingCast.targetEnemy then
|
||||||
|
HealBot_TargetRestorePending = { type = "enemy" }
|
||||||
|
elseif pendingCast.oldTarget and pendingCast.oldTarget ~= UnitName(pendingCast.target) then
|
||||||
|
HealBot_TargetRestorePending = { type = "friend" }
|
||||||
|
elseif not pendingCast.oldTarget then
|
||||||
|
HealBot_TargetRestorePending = { type = "clear" }
|
||||||
|
end
|
||||||
|
HealBot_TargetRestoreTimer = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
-- 2. Spam the cast until the server explicitly accepts it (firing SPELLCAST_START)
|
||||||
|
if pendingCast.started then
|
||||||
|
if not pendingCast.nextSpam or GetTime() >= pendingCast.nextSpam then
|
||||||
|
pendingCast.nextSpam = GetTime() + 0.10
|
||||||
|
|
||||||
|
-- Safely suppress UI errors
|
||||||
|
UIErrorsFrame:UnregisterEvent("UI_ERROR_MESSAGE")
|
||||||
|
|
||||||
|
-- Only use HealBot's native cast wrapper
|
||||||
|
HealBot_CastSpellByName(pendingCast.spell)
|
||||||
|
|
||||||
|
if SpellCanTargetUnit(pendingCast.target) then
|
||||||
|
SpellTargetUnit(pendingCast.target)
|
||||||
|
elseif SpellIsTargeting() then
|
||||||
|
SpellTargetUnit(pendingCast.target)
|
||||||
|
SpellStopTargeting()
|
||||||
|
end
|
||||||
|
|
||||||
|
UIErrorsFrame:RegisterEvent("UI_ERROR_MESSAGE")
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
HealBot_Timer1 = HealBot_Timer1 + arg1;
|
-- Failsafe timeout
|
||||||
if HealBot_Timer1 >= 2.5 then
|
if HealBot_PendingShapeshiftCast and GetTime() > pendingCast.expires then
|
||||||
if not HealBot_IsFighting then
|
HealBot_PendingShapeshiftCast = nil
|
||||||
HealsIn_Timer = HealsIn_Timer + 1;
|
HealBot_StopCasting()
|
||||||
if HealsIn_Timer >= 10 then
|
HealBot_RecalcHeals()
|
||||||
HealBot_HealsIn = {};
|
end
|
||||||
HealBot_Healers = {};
|
end
|
||||||
HealsIn_Timer = 0;
|
|
||||||
|
-- Process Dirty Queue for MVC View
|
||||||
|
local unitsToRefresh = {}
|
||||||
|
for unitID in pairs(HealBot_View_DirtyUnits) do
|
||||||
|
unitsToRefresh[unitID] = true
|
||||||
|
HealBot_View_DirtyUnits[unitID] = nil
|
||||||
|
HealBot_View_DirtyPower[unitID] = nil -- No need to do power-only if full refresh is queued
|
||||||
|
end
|
||||||
|
for unitID in pairs(unitsToRefresh) do
|
||||||
|
HealBot_Action_Refresh(unitID)
|
||||||
|
end
|
||||||
|
|
||||||
|
local powerToRefresh = {}
|
||||||
|
for unitID in pairs(HealBot_View_DirtyPower) do
|
||||||
|
powerToRefresh[unitID] = true
|
||||||
|
HealBot_View_DirtyPower[unitID] = nil
|
||||||
|
end
|
||||||
|
for unitID in pairs(powerToRefresh) do
|
||||||
|
HealBot_Action_RefreshPower(unitID)
|
||||||
|
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
|
end
|
||||||
|
|
||||||
if HealBot_EquipChangeTimer > 0 then
|
if HealBot_EquipChangeTimer > 0 then
|
||||||
@@ -86,6 +188,18 @@ function HealBot_OnUpdate(this, arg1)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
HealBot_Timer1 = HealBot_Timer1 + arg1;
|
||||||
|
if HealBot_Timer1 >= 2.5 then
|
||||||
|
if not HealBot_IsFighting then
|
||||||
|
HealsIn_Timer = HealsIn_Timer + 1;
|
||||||
|
if HealsIn_Timer >= 10 then
|
||||||
|
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_SpellsInitFlag > 1 then
|
if HealBot_SpellsInitFlag > 1 then
|
||||||
HealBot_SpellsInitFlag = HealBot_SpellsInitFlag + 1;
|
HealBot_SpellsInitFlag = HealBot_SpellsInitFlag + 1;
|
||||||
if HealBot_SpellsInitFlag > 2 then
|
if HealBot_SpellsInitFlag > 2 then
|
||||||
@@ -117,32 +231,28 @@ local HealBot_EventHandlers = {
|
|||||||
HealBot_OnEvent_UnitHealth(this, arg1)
|
HealBot_OnEvent_UnitHealth(this, arg1)
|
||||||
end,
|
end,
|
||||||
["UNIT_MANA"] = function(this, arg1)
|
["UNIT_MANA"] = function(this, arg1)
|
||||||
|
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
|
||||||
if HealBot_Model:UpdateUnitPower(arg1) then
|
if HealBot_Model:UpdateUnitPower(arg1) then
|
||||||
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
|
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
|
||||||
end
|
end
|
||||||
if (arg1 == "player") then HealBot_RecalcHeals(); end
|
|
||||||
HealBot_Action_RefreshButtons(arg1);
|
|
||||||
end,
|
end,
|
||||||
["UNIT_RAGE"] = function(this, arg1)
|
["UNIT_RAGE"] = function(this, arg1)
|
||||||
|
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
|
||||||
if HealBot_Model:UpdateUnitPower(arg1) then
|
if HealBot_Model:UpdateUnitPower(arg1) then
|
||||||
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
|
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
|
||||||
end
|
end
|
||||||
if (arg1 == "player") then HealBot_RecalcHeals(); end
|
|
||||||
HealBot_Action_RefreshButtons(arg1);
|
|
||||||
end,
|
end,
|
||||||
["UNIT_ENERGY"] = function(this, arg1)
|
["UNIT_ENERGY"] = function(this, arg1)
|
||||||
|
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
|
||||||
if HealBot_Model:UpdateUnitPower(arg1) then
|
if HealBot_Model:UpdateUnitPower(arg1) then
|
||||||
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
|
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
|
||||||
end
|
end
|
||||||
if (arg1 == "player") then HealBot_RecalcHeals(); end
|
|
||||||
HealBot_Action_RefreshButtons(arg1);
|
|
||||||
end,
|
end,
|
||||||
["UNIT_DISPLAYPOWER"] = function(this, arg1)
|
["UNIT_DISPLAYPOWER"] = function(this, arg1)
|
||||||
|
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
|
||||||
if HealBot_Model:UpdateUnitPower(arg1) then
|
if HealBot_Model:UpdateUnitPower(arg1) then
|
||||||
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
|
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
|
||||||
end
|
end
|
||||||
if (arg1 == "player") then HealBot_RecalcHeals(); end
|
|
||||||
HealBot_Action_RefreshButtons(arg1);
|
|
||||||
end,
|
end,
|
||||||
["UNIT_AURA"] = function(this, arg1)
|
["UNIT_AURA"] = function(this, arg1)
|
||||||
HealBot_Model:MarkAuraChanged(arg1)
|
HealBot_Model:MarkAuraChanged(arg1)
|
||||||
@@ -168,6 +278,23 @@ local HealBot_EventHandlers = {
|
|||||||
HealBot_Model:NotifyObservers("ROSTER_CHANGED")
|
HealBot_Model:NotifyObservers("ROSTER_CHANGED")
|
||||||
HealBot_OnEvent_PartyMembersChanged(this)
|
HealBot_OnEvent_PartyMembersChanged(this)
|
||||||
end,
|
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,
|
||||||
|
["RAID_TARGET_UPDATE"] = function(this)
|
||||||
|
if HealBot_Action_UnitButtons then
|
||||||
|
for unit, _ in pairs(HealBot_Action_UnitButtons) do
|
||||||
|
HealBot_View_DirtyUnits[unit] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
["PLAYER_ENTERING_WORLD"] = function(this)
|
["PLAYER_ENTERING_WORLD"] = function(this)
|
||||||
HealBot_Model:RefreshUnit("player")
|
HealBot_Model:RefreshUnit("player")
|
||||||
HealBot_Model:RefreshUnit("pet")
|
HealBot_Model:RefreshUnit("pet")
|
||||||
@@ -178,22 +305,16 @@ local HealBot_EventHandlers = {
|
|||||||
end,
|
end,
|
||||||
["VARIABLES_LOADED"] = function(this)
|
["VARIABLES_LOADED"] = function(this)
|
||||||
HealBot_OnEvent_VariablesLoaded(this)
|
HealBot_OnEvent_VariablesLoaded(this)
|
||||||
end,
|
HealBot_Integrations_Toggle()
|
||||||
["MODIFIER_STATE_CHANGED"] = function(this, arg1, arg2)
|
|
||||||
if HealBot_Action_TooltipUnit and HealBot_Tooltip:IsVisible() then
|
|
||||||
HealBot_Action_RefreshTooltip(HealBot_Action_TooltipUnit)
|
|
||||||
end
|
|
||||||
end,
|
end,
|
||||||
-- Legacy pass-throughs
|
-- Legacy pass-throughs
|
||||||
["CHAT_MSG_ADDON"] = function(this, arg1, arg2, arg3, arg4) HealBot_OnEvent_AddonMsg(this, arg1, arg2, arg3, arg4) end,
|
["CHAT_MSG_ADDON"] = function(this, arg1, arg2, arg3, arg4) HealBot_OnEvent_AddonMsg(this, arg1, arg2, arg3, arg4) end,
|
||||||
["SPELLCAST_START"] = function(this, arg1, arg2) HealBot_OnEvent_SpellcastStart(this, arg1, arg2) end,
|
["SPELLCAST_START"] = function(this, arg1, arg2) HealBot_OnEvent_SpellcastStart(this, arg1, arg2) end,
|
||||||
["SPELLCAST_STOP"] = function(this) HealBot_OnEvent_SpellcastStop(this) end,
|
["SPELLCAST_STOP"] = function(this) HealBot_OnEvent_SpellcastStop(this, "SPELLCAST_STOP") end,
|
||||||
["SPELLCAST_INTERRUPTED"] = function(this) HealBot_OnEvent_SpellcastStop(this) end,
|
["SPELLCAST_INTERRUPTED"] = function(this) HealBot_OnEvent_SpellcastStop(this, "SPELLCAST_INTERRUPTED") end,
|
||||||
["SPELLCAST_FAILED"] = function(this) HealBot_OnEvent_SpellcastStop(this) end,
|
["SPELLCAST_FAILED"] = function(this) HealBot_OnEvent_SpellcastStop(this, "SPELLCAST_FAILED") end,
|
||||||
["PLAYER_REGEN_DISABLED"] = function(this) HealBot_OnEvent_PlayerRegenDisabled(this) end,
|
["PLAYER_REGEN_DISABLED"] = function(this) HealBot_OnEvent_PlayerRegenDisabled(this) end,
|
||||||
["PLAYER_REGEN_ENABLED"] = function(this) HealBot_OnEvent_PlayerRegenEnabled(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_DISABLE"] = function(this, arg1) HealBot_OnEvent_PartyMemberDisable(this, arg1) end,
|
||||||
["PARTY_MEMBER_ENABLE"] = function(this, arg1) HealBot_OnEvent_PartyMemberEnable(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,
|
["CHAT_MSG_SYSTEM"] = function(this, arg1) HealBot_OnEvent_SystemMsg(this, arg1) end,
|
||||||
@@ -203,17 +324,17 @@ local HealBot_EventHandlers = {
|
|||||||
HealBot_OnEvent_PlayerEquipmentChanged(this)
|
HealBot_OnEvent_PlayerEquipmentChanged(this)
|
||||||
end,
|
end,
|
||||||
["UNIT_INVENTORY_CHANGED"] = function(this, arg1)
|
["UNIT_INVENTORY_CHANGED"] = function(this, arg1)
|
||||||
|
if arg1 ~= "player" then return end
|
||||||
HealBot_Model:NotifyObservers("EQUIPMENT_CHANGED", arg1)
|
HealBot_Model:NotifyObservers("EQUIPMENT_CHANGED", arg1)
|
||||||
HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1)
|
HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1)
|
||||||
end,
|
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,
|
["UNIT_PET"] = function(this, arg1) HealBot_OnEvent_PartyMembersChanged(this) end,
|
||||||
["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) end,
|
["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) end,
|
||||||
["UPDATE_SHAPESHIFT_FORM"] = function(this) HealBot_UpdateShapeshiftForm() end,
|
["UPDATE_SHAPESHIFT_FORM"] = function(this) HealBot_UpdateShapeshiftForm() end,
|
||||||
["UPDATE_SHAPESHIFT_FORMS"] = function(this) HealBot_UpdateShapeshiftForm() end
|
["UPDATE_SHAPESHIFT_FORMS"] = function(this) HealBot_UpdateShapeshiftForm() end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- HealBot_OnEvent: Event dispatcher for WoW UI events.
|
||||||
function HealBot_OnEvent(this, event, arg1, arg2, arg3, arg4)
|
function HealBot_OnEvent(this, event, arg1, arg2, arg3, arg4)
|
||||||
local handler = HealBot_EventHandlers[event]
|
local handler = HealBot_EventHandlers[event]
|
||||||
if handler then
|
if handler then
|
||||||
@@ -223,6 +344,7 @@ function HealBot_OnEvent(this, event, arg1, arg2, arg3, arg4)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_VariablesLoaded: Applies config defaults and initializes state.
|
||||||
function HealBot_OnEvent_VariablesLoaded(this)
|
function HealBot_OnEvent_VariablesLoaded(this)
|
||||||
local class = HealBot_UnitClass("player")
|
local class = HealBot_UnitClass("player")
|
||||||
|
|
||||||
@@ -277,10 +399,10 @@ function HealBot_OnEvent_VariablesLoaded(this)
|
|||||||
this:RegisterEvent("PLAYER_REGEN_ENABLED");
|
this:RegisterEvent("PLAYER_REGEN_ENABLED");
|
||||||
this:RegisterEvent("PLAYER_TARGET_CHANGED");
|
this:RegisterEvent("PLAYER_TARGET_CHANGED");
|
||||||
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
||||||
|
this:RegisterEvent("RAID_ROSTER_UPDATE");
|
||||||
|
this:RegisterEvent("RAID_TARGET_UPDATE");
|
||||||
this:RegisterEvent("PARTY_MEMBER_DISABLE");
|
this:RegisterEvent("PARTY_MEMBER_DISABLE");
|
||||||
this:RegisterEvent("PARTY_MEMBER_ENABLE");
|
this:RegisterEvent("PARTY_MEMBER_ENABLE");
|
||||||
this:RegisterEvent("PET_BAR_SHOWGRID");
|
|
||||||
this:RegisterEvent("PET_BAR_HIDEGRID");
|
|
||||||
this:RegisterEvent("UNIT_PET");
|
this:RegisterEvent("UNIT_PET");
|
||||||
this:RegisterEvent("UNIT_HEALTH");
|
this:RegisterEvent("UNIT_HEALTH");
|
||||||
this:RegisterEvent("UNIT_MANA");
|
this:RegisterEvent("UNIT_MANA");
|
||||||
@@ -292,8 +414,6 @@ function HealBot_OnEvent_VariablesLoaded(this)
|
|||||||
this:RegisterEvent("SPELLCAST_STOP");
|
this:RegisterEvent("SPELLCAST_STOP");
|
||||||
this:RegisterEvent("SPELLCAST_INTERRUPTED");
|
this:RegisterEvent("SPELLCAST_INTERRUPTED");
|
||||||
this:RegisterEvent("SPELLCAST_FAILED");
|
this:RegisterEvent("SPELLCAST_FAILED");
|
||||||
this:RegisterEvent("BAG_UPDATE");
|
|
||||||
this:RegisterEvent("BAG_UPDATE_COOLDOWN");
|
|
||||||
this:RegisterEvent("UNIT_AURA");
|
this:RegisterEvent("UNIT_AURA");
|
||||||
this:RegisterEvent("UPDATE_INVENTORY_ALERTS");
|
this:RegisterEvent("UPDATE_INVENTORY_ALERTS");
|
||||||
this:RegisterEvent("UNIT_INVENTORY_CHANGED");
|
this:RegisterEvent("UNIT_INVENTORY_CHANGED");
|
||||||
@@ -309,27 +429,30 @@ function HealBot_OnEvent_VariablesLoaded(this)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_UnitHealth: Internal utility: HealBot_OnEvent_UnitHealth
|
||||||
function HealBot_OnEvent_UnitHealth(this, unit)
|
function HealBot_OnEvent_UnitHealth(this, unit)
|
||||||
if (not HealBot_Heals[unit]) then return end
|
if (not HealBot_Heals[unit]) then return end
|
||||||
HealBot_CheckCasting(unit);
|
HealBot_CheckCasting(unit);
|
||||||
HealBot_RecalcHeals(unit);
|
|
||||||
if unit == HealBot_Action_TooltipUnit then
|
if unit == HealBot_Action_TooltipUnit then
|
||||||
HealBot_Action_RefreshTooltip(HealBot_Action_TooltipUnit);
|
HealBot_Action_RefreshTooltip(HealBot_Action_TooltipUnit);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_UnitMana: Internal utility: HealBot_OnEvent_UnitMana
|
||||||
function HealBot_OnEvent_UnitMana(this, unit)
|
function HealBot_OnEvent_UnitMana(this, unit)
|
||||||
if (unit ~= "player") then return end
|
if (unit ~= "player") then return end
|
||||||
HealBot_RecalcHeals();
|
HealBot_RecalcHeals();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_ZoneChanged: Internal utility: HealBot_OnEvent_ZoneChanged
|
||||||
function HealBot_OnEvent_ZoneChanged(this)
|
function HealBot_OnEvent_ZoneChanged(this)
|
||||||
HealBot_ResetRangeScale();
|
HealBot_ResetRangeScale();
|
||||||
HealBot_Delay_RecalcParty = 1;
|
HealBot_Delay_RecalcParty = 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_PlayerRegenDisabled: Internal utility: HealBot_OnEvent_PlayerRegenDisabled
|
||||||
function HealBot_OnEvent_PlayerRegenDisabled(this)
|
function HealBot_OnEvent_PlayerRegenDisabled(this)
|
||||||
HealBot_RecalcParty();
|
-- Removed HealBot_RecalcParty();
|
||||||
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
|
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
|
||||||
if HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then
|
if HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then
|
||||||
HealBot_Action.ProgrammaticHide = true;
|
HealBot_Action.ProgrammaticHide = true;
|
||||||
@@ -363,23 +486,36 @@ function HealBot_OnEvent_PlayerRegenDisabled(this)
|
|||||||
-- HealBot_RecalcHeals();
|
-- HealBot_RecalcHeals();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_PlayerRegenEnabled: Internal utility: HealBot_OnEvent_PlayerRegenEnabled
|
||||||
function HealBot_OnEvent_PlayerRegenEnabled(this)
|
function HealBot_OnEvent_PlayerRegenEnabled(this)
|
||||||
HealBot_IsFighting = false;
|
HealBot_IsFighting = false;
|
||||||
HealBot_Delay_RecalcParty = 1;
|
HealBot_Delay_RecalcParty = 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_PlayerTargetChanged: Internal utility: HealBot_OnEvent_PlayerTargetChanged
|
||||||
function HealBot_OnEvent_PlayerTargetChanged(this)
|
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
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_PartyMembersChanged: Internal utility: HealBot_OnEvent_PartyMembersChanged
|
||||||
function HealBot_OnEvent_PartyMembersChanged(this)
|
function HealBot_OnEvent_PartyMembersChanged(this)
|
||||||
|
HealBot_Model:PreserveStateByGUID()
|
||||||
|
HealBot_Integrations_PruneNampower()
|
||||||
|
if HealBot_IsFighting then
|
||||||
|
HealBot_Action_PartyChanged()
|
||||||
|
end
|
||||||
HealBot_Delay_RecalcParty = 1;
|
HealBot_Delay_RecalcParty = 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_PartyMemberDisable: Internal utility: HealBot_OnEvent_PartyMemberDisable
|
||||||
function HealBot_OnEvent_PartyMemberDisable(this, unit)
|
function HealBot_OnEvent_PartyMemberDisable(this, unit)
|
||||||
HealBot_RecalcHeals();
|
HealBot_RecalcHeals();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_SystemMsg: Internal utility: HealBot_OnEvent_SystemMsg
|
||||||
function HealBot_OnEvent_SystemMsg(this, msg)
|
function HealBot_OnEvent_SystemMsg(this, msg)
|
||||||
if type(msg) == "string" then
|
if type(msg) == "string" then
|
||||||
local tmpTest, tmpTest, deserter = string.find(msg, HEALBOT_HASLEFTRAID);
|
local tmpTest, tmpTest, deserter = string.find(msg, HEALBOT_HASLEFTRAID);
|
||||||
@@ -406,44 +542,36 @@ function HealBot_OnEvent_SystemMsg(this, msg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_PartyMemberEnable: Internal utility: HealBot_OnEvent_PartyMemberEnable
|
||||||
function HealBot_OnEvent_PartyMemberEnable(this, unit)
|
function HealBot_OnEvent_PartyMemberEnable(this, unit)
|
||||||
HealBot_RecalcHeals();
|
HealBot_RecalcHeals();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_PlayerEquipmentChanged: Internal utility: HealBot_OnEvent_PlayerEquipmentChanged
|
||||||
function HealBot_OnEvent_PlayerEquipmentChanged(this)
|
function HealBot_OnEvent_PlayerEquipmentChanged(this)
|
||||||
HealBot_EquipChangeTimer = 1;
|
HealBot_EquipChangeTimer = 1;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_PlayerEquipmentChanged2: Internal utility: HealBot_OnEvent_PlayerEquipmentChanged2
|
||||||
function HealBot_OnEvent_PlayerEquipmentChanged2(this, unit)
|
function HealBot_OnEvent_PlayerEquipmentChanged2(this, unit)
|
||||||
if unit == "player" then
|
if unit == "player" then
|
||||||
HealBot_EquipChangeTimer = 1;
|
HealBot_EquipChangeTimer = 1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_SpellsChanged: Internal utility: HealBot_OnEvent_SpellsChanged
|
||||||
function HealBot_OnEvent_SpellsChanged(this, arg1)
|
function HealBot_OnEvent_SpellsChanged(this, arg1)
|
||||||
if arg1 then return; end
|
if arg1 then return; end
|
||||||
HealBot_AddDebug("HB: SpellsChanged");
|
HealBot_AddDebug("HB: SpellsChanged");
|
||||||
HealBot_SpellsInitFlag = 2;
|
HealBot_SpellsInitFlag = 2;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_TalentsChanged: Internal utility: HealBot_OnEvent_TalentsChanged
|
||||||
function HealBot_OnEvent_TalentsChanged(this, arg1)
|
function HealBot_OnEvent_TalentsChanged(this, arg1)
|
||||||
HealBot_AddDebug("HB: TalentsChanged");
|
HealBot_AddDebug("HB: TalentsChanged");
|
||||||
end
|
end
|
||||||
|
|
||||||
function HealBot_OnEvent_BagUpdate(this, bag)
|
-- HealBot_OnEvent_PlayerEnteringWorld: Internal utility: HealBot_OnEvent_PlayerEnteringWorld
|
||||||
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)
|
function HealBot_OnEvent_PlayerEnteringWorld(this)
|
||||||
HealBot_IsFighting = false;
|
HealBot_IsFighting = false;
|
||||||
-- Re-apply the refresh hook late in case another addon overrode it during load
|
-- Re-apply the refresh hook late in case another addon overrode it during load
|
||||||
@@ -452,8 +580,10 @@ function HealBot_OnEvent_PlayerEnteringWorld(this)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_SpellcastStart: Internal utility: HealBot_OnEvent_SpellcastStart
|
||||||
function HealBot_OnEvent_SpellcastStart(this, spell, duration)
|
function HealBot_OnEvent_SpellcastStart(this, spell, duration)
|
||||||
HealBot_IsCasting = true;
|
HealBot_IsCasting = true;
|
||||||
|
HealBot_PendingShapeshiftCast = nil;
|
||||||
HealBot_RecalcHeals();
|
HealBot_RecalcHeals();
|
||||||
HealBot_CheckCasting();
|
HealBot_CheckCasting();
|
||||||
if spell == HEALBOT_RESURRECTION or spell == HEALBOT_ANCESTRALSPIRIT or spell == HEALBOT_REBIRTH or spell == HEALBOT_REDEMPTION then
|
if spell == HEALBOT_RESURRECTION or spell == HEALBOT_ANCESTRALSPIRIT or spell == HEALBOT_REBIRTH or spell == HEALBOT_REDEMPTION then
|
||||||
@@ -464,8 +594,26 @@ function HealBot_OnEvent_SpellcastStart(this, spell, duration)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function HealBot_OnEvent_SpellcastStop(this)
|
-- HealBot_OnEvent_SpellcastStop: Internal utility: HealBot_OnEvent_SpellcastStop
|
||||||
|
function HealBot_OnEvent_SpellcastStop(this, eventName)
|
||||||
HealBot_IsCasting = false;
|
HealBot_IsCasting = false;
|
||||||
|
if eventName == "SPELLCAST_FAILED" or eventName == "SPELLCAST_INTERRUPTED" then
|
||||||
|
HealBot_CastFailed = true;
|
||||||
|
if HealBot_PendingShapeshiftCast then
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if HealBot_PendingShapeshiftCast and eventName == "SPELLCAST_STOP" then
|
||||||
|
if HealBot_CastFailed or not HealBot_PendingShapeshiftCast.started then
|
||||||
|
-- This STOP is either the trailing event of a failed/interrupted cast,
|
||||||
|
-- or it is the STOP event from the unshift spell itself.
|
||||||
|
-- Do not wipe the queue yet!
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
HealBot_PendingShapeshiftCast = nil;
|
||||||
HealBot_StopCasting();
|
HealBot_StopCasting();
|
||||||
HealBot_RecalcHeals();
|
HealBot_RecalcHeals();
|
||||||
if HealBot_IamRessing then
|
if HealBot_IamRessing then
|
||||||
|
|||||||
@@ -3,10 +3,12 @@
|
|||||||
|
|
||||||
local _scale = 0
|
local _scale = 0
|
||||||
|
|
||||||
|
-- HealBot_ResetRangeScale: Resets map range scaling on zone change.
|
||||||
function HealBot_ResetRangeScale()
|
function HealBot_ResetRangeScale()
|
||||||
_scale = 0
|
_scale = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Range_Check: Checks if unit is in range via map distance or API.
|
||||||
function HealBot_Range_Check(unit, range)
|
function HealBot_Range_Check(unit, range)
|
||||||
local return_val = 0;
|
local return_val = 0;
|
||||||
if not range then
|
if not range then
|
||||||
@@ -14,6 +16,22 @@ function HealBot_Range_Check(unit, range)
|
|||||||
end
|
end
|
||||||
if ( unit == "player" ) then
|
if ( unit == "player" ) then
|
||||||
return_val = 1;
|
return_val = 1;
|
||||||
|
elseif HealBot_Integrations_ClassicAPI_Active and UnitDistanceSquared and UnitInLineOfSight then
|
||||||
|
local inSight = UnitInLineOfSight("player", unit)
|
||||||
|
if inSight then
|
||||||
|
local distSq = UnitDistanceSquared(unit)
|
||||||
|
if distSq and distSq <= (range * range) then
|
||||||
|
return_val = 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif HealBot_Integrations_UnitXP_Active then
|
||||||
|
local inSight = UnitXP("inSight", "player", unit)
|
||||||
|
if inSight then
|
||||||
|
local dist = UnitXP("distanceBetween", "player", unit, "Gaussian")
|
||||||
|
if dist and dist <= range then
|
||||||
|
return_val = 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
elseif ( UnitIsVisible(unit) == 1 ) then
|
elseif ( UnitIsVisible(unit) == 1 ) then
|
||||||
local tx, ty = GetPlayerMapPosition(unit)
|
local tx, ty = GetPlayerMapPosition(unit)
|
||||||
local dist
|
local dist
|
||||||
|
|||||||
+250
-68
@@ -18,6 +18,7 @@ local HealBot_Health60 = {
|
|||||||
["WARRIOR"] = 5000,
|
["WARRIOR"] = 5000,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- HealBot_GetSpellName: Internal utility: HealBot_GetSpellName
|
||||||
function HealBot_GetSpellName(id)
|
function HealBot_GetSpellName(id)
|
||||||
if (not id) then
|
if (not id) then
|
||||||
return nil;
|
return nil;
|
||||||
@@ -32,6 +33,7 @@ function HealBot_GetSpellName(id)
|
|||||||
return spellName .. " (" .. subSpellName .. ")";
|
return spellName .. " (" .. subSpellName .. ")";
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetSpellId: Internal utility: HealBot_GetSpellId
|
||||||
function HealBot_GetSpellId(spell)
|
function HealBot_GetSpellId(spell)
|
||||||
local id, idd = 1, 0;
|
local id, idd = 1, 0;
|
||||||
while true do
|
while true do
|
||||||
@@ -55,6 +57,7 @@ function HealBot_GetSpellId(spell)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_CastSpellByName: Internal utility: HealBot_CastSpellByName
|
||||||
function HealBot_CastSpellByName(spell)
|
function HealBot_CastSpellByName(spell)
|
||||||
if (HealBot_Spells[spell] and HealBot_Spells[spell].BagSlot) then
|
if (HealBot_Spells[spell] and HealBot_Spells[spell].BagSlot) then
|
||||||
HealBot_UseItem(spell);
|
HealBot_UseItem(spell);
|
||||||
@@ -74,6 +77,7 @@ function HealBot_CastSpellByName(spell)
|
|||||||
CastSpell(id, BOOKTYPE_SPELL);
|
CastSpell(id, BOOKTYPE_SPELL);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_AnnounceCast: Internal utility: HealBot_AnnounceCast
|
||||||
function HealBot_AnnounceCast(spell, target)
|
function HealBot_AnnounceCast(spell, target)
|
||||||
if not spell or not target then return end
|
if not spell or not target then return end
|
||||||
|
|
||||||
@@ -127,10 +131,60 @@ function HealBot_AnnounceCast(spell, target)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Process_HealValue: Internal utility: HealBot_Process_HealValue
|
||||||
|
function HealBot_Process_HealValue(spell, target)
|
||||||
|
if HealBot_Spells[spell] and (HealBot_Spells[spell].CastTime or 0) > 1 then
|
||||||
|
HealBot_HealValue = HealBot_Spells[spell].HealsDur;
|
||||||
|
|
||||||
|
-- Apply dynamic Preservation bonus
|
||||||
|
if HEALBOT_REGROWTH and string.find(spell, HEALBOT_REGROWTH) then
|
||||||
|
local presRank = HealBot_GetTalentRank("Preservation")
|
||||||
|
if presRank > 0 then
|
||||||
|
local hasRejuv = false
|
||||||
|
for i=1,32 do
|
||||||
|
local buff = UnitBuff(target, i)
|
||||||
|
if not buff then break end
|
||||||
|
if string.find(buff, "Spell_Nature_Rejuvenation") then
|
||||||
|
hasRejuv = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if hasRejuv then
|
||||||
|
local extHeal = HealBot_Spells[spell].HealsExt or 0
|
||||||
|
local bonus = extHeal * (presRank * 0.10)
|
||||||
|
HealBot_HealValue = HealBot_HealValue + math.floor(bonus)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local uname = UnitName(target)
|
||||||
|
if uname then
|
||||||
|
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. HealBot_HealValue .. " << ");
|
||||||
|
if not HealBot_HealsIn[uname] then
|
||||||
|
HealBot_HealsIn[uname] = 0;
|
||||||
|
end
|
||||||
|
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] + HealBot_HealValue;
|
||||||
|
HealBot_RecalcHeals(HealBot_FindUnitID(uname));
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_StartCasting: Initiates spell cast and broadcasts incoming heal.
|
||||||
function HealBot_StartCasting(spell, target, ttype)
|
function HealBot_StartCasting(spell, target, ttype)
|
||||||
|
HealBot_CastFailed = false;
|
||||||
|
|
||||||
|
-- Extract base spell for internal tracking
|
||||||
|
local baseSpell = spell
|
||||||
|
local parenIndex = string.find(spell, " %(")
|
||||||
|
if parenIndex then
|
||||||
|
baseSpell = string.sub(spell, 1, parenIndex - 1)
|
||||||
|
else
|
||||||
|
parenIndex = string.find(spell, "%(")
|
||||||
|
if parenIndex then
|
||||||
|
baseSpell = string.sub(spell, 1, parenIndex - 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
HealBot_CastSpellByName(spell);
|
HealBot_CastSpellByName(spell);
|
||||||
HealBot_CastingSpell = spell;
|
|
||||||
HealBot_CastingTarget = target;
|
|
||||||
if ( SpellCanTargetUnit(target) ) then
|
if ( SpellCanTargetUnit(target) ) then
|
||||||
SpellTargetUnit(target);
|
SpellTargetUnit(target);
|
||||||
ttype = "fired";
|
ttype = "fired";
|
||||||
@@ -138,28 +192,40 @@ function HealBot_StartCasting(spell, target, ttype)
|
|||||||
SpellTargetUnit(target);
|
SpellTargetUnit(target);
|
||||||
SpellStopTargeting()
|
SpellStopTargeting()
|
||||||
elseif ttype == "direct" then
|
elseif ttype == "direct" then
|
||||||
if ( CheckInteractDistance(target, 4) ) then
|
if ( UnitIsUnit(target, "player") or CheckInteractDistance(target, 4) ) then
|
||||||
ttype = "fired";
|
ttype = "fired";
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
HealBot_AnnounceCast(spell, target)
|
if ttype == "fired" and HealBot_Spells[baseSpell] then
|
||||||
|
if not HealBot_CastFailed then
|
||||||
|
HealBot_CastingSpell = baseSpell;
|
||||||
|
HealBot_CastingTarget = target;
|
||||||
|
HealBot_Process_HealValue(baseSpell, target);
|
||||||
|
HealBot_AnnounceCast(spell, target);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if ttype == "fired" and HealBot_Spells[spell] then
|
return ttype == "fired"
|
||||||
if HealBot_Spells[spell].CastTime > 1 then
|
|
||||||
HealBot_HealValue = HealBot_Spells[spell].HealsDur;
|
|
||||||
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(target) .. " <<=>> " .. HealBot_HealValue .. " << ");
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_StopCasting: Internal utility: HealBot_StopCasting
|
||||||
function HealBot_StopCasting()
|
function HealBot_StopCasting()
|
||||||
|
HealBot_IsCasting = false;
|
||||||
if HealBot_CastingTarget then
|
if HealBot_CastingTarget then
|
||||||
if HealBot_HealsIn[UnitName(HealBot_CastingTarget)] then
|
|
||||||
if HealBot_HealValue > 0 then
|
if HealBot_HealValue > 0 then
|
||||||
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. UnitName(HealBot_CastingTarget) .. " <<=>> " .. 0 - HealBot_HealValue .. " << ");
|
local uname = UnitName(HealBot_CastingTarget)
|
||||||
HealBot_HealValue = 0;
|
if uname then
|
||||||
|
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. 0 - HealBot_HealValue .. " << ");
|
||||||
|
if HealBot_HealsIn[uname] then
|
||||||
|
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] - HealBot_HealValue;
|
||||||
|
if HealBot_HealsIn[uname] < 0 then
|
||||||
|
HealBot_HealsIn[uname] = 0;
|
||||||
end
|
end
|
||||||
|
HealBot_RecalcHeals(HealBot_FindUnitID(uname));
|
||||||
|
end
|
||||||
|
end
|
||||||
|
HealBot_HealValue = 0;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
HealBot_CastingSpell = nil;
|
HealBot_CastingSpell = nil;
|
||||||
@@ -178,6 +244,7 @@ function HealBot_StopCasting()
|
|||||||
bar.txt:SetTextColor(sr, sg, sb, sa);
|
bar.txt:SetTextColor(sr, sg, sb, sa);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_UnitHealth: Internal utility: HealBot_UnitHealth
|
||||||
function HealBot_UnitHealth(unit)
|
function HealBot_UnitHealth(unit)
|
||||||
local Current, Desired = UnitHealth(unit), UnitHealthMax(unit);
|
local Current, Desired = UnitHealth(unit), UnitHealthMax(unit);
|
||||||
if unit == 'target' and Desired == 100 then
|
if unit == 'target' and Desired == 100 then
|
||||||
@@ -192,6 +259,7 @@ function HealBot_UnitHealth(unit)
|
|||||||
return Current, Desired;
|
return Current, Desired;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_CheckCasting: Internal utility: HealBot_CheckCasting
|
||||||
function HealBot_CheckCasting(unit)
|
function HealBot_CheckCasting(unit)
|
||||||
if not HealBot_CastingSpell or HealBot_AlwaysHeal() then return nil end
|
if not HealBot_CastingSpell or HealBot_AlwaysHeal() then return nil end
|
||||||
if not HealBot_Spells[HealBot_CastingSpell] then return nil end
|
if not HealBot_Spells[HealBot_CastingSpell] then return nil end
|
||||||
@@ -203,7 +271,7 @@ function HealBot_CheckCasting(unit)
|
|||||||
local ag = HealBot_Config.babortcolg[HealBot_Config.Current_Skin] or 0.1;
|
local ag = HealBot_Config.babortcolg[HealBot_Config.Current_Skin] or 0.1;
|
||||||
local ab = HealBot_Config.babortcolb[HealBot_Config.Current_Skin] or 0.5;
|
local ab = HealBot_Config.babortcolb[HealBot_Config.Current_Skin] or 0.5;
|
||||||
local aa = HealBot_Config.babortcola[HealBot_Config.Current_Skin] or 1;
|
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
|
if HealBot_IsCasting == false and HealBot_AbortButton == 0 then
|
||||||
bar:SetStatusBarColor(ar, ag, ab, 0);
|
bar:SetStatusBarColor(ar, ag, ab, 0);
|
||||||
@@ -238,6 +306,7 @@ function HealBot_CheckCasting(unit)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_CastSpellOnFriend: Target-safe wrapper for casting spells on allies.
|
||||||
function HealBot_CastSpellOnFriend(spell, target)
|
function HealBot_CastSpellOnFriend(spell, target)
|
||||||
if (not spell or not target or not UnitName(target)) then
|
if (not spell or not target or not UnitName(target)) then
|
||||||
return;
|
return;
|
||||||
@@ -245,8 +314,20 @@ function HealBot_CastSpellOnFriend(spell, target)
|
|||||||
local targetEnemy = UnitCanAttack("player", "target");
|
local targetEnemy = UnitCanAttack("player", "target");
|
||||||
local oldTarget = UnitName("target");
|
local oldTarget = UnitName("target");
|
||||||
|
|
||||||
if HealBot_UnitClass("player") == "DRUID" and HealBot_ActiveShapeshiftStance and HealBot_Config.AutoUnshift == 1 then
|
local formCancelled = false
|
||||||
CastShapeshiftForm(HealBot_ActiveShapeshiftStance);
|
if HealBot_UnitClass("player") == "DRUID" and HealBot_Config.AutoUnshift == 1 then
|
||||||
|
local currentForm = HealBot_GetShapeshiftForm()
|
||||||
|
if currentForm then
|
||||||
|
CastShapeshiftForm(currentForm);
|
||||||
|
formCancelled = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if formCancelled then
|
||||||
|
-- ALWAYS put the cast into the Pending queue so the OnUpdate loop can wait for the server
|
||||||
|
-- to process the unshift before attempting the cast, otherwise we get "You are in shapeshift form".
|
||||||
|
HealBot_PendingShapeshiftCast = { spell = spell, target = target, targetEnemy = targetEnemy, oldTarget = oldTarget, fireTime = GetTime() + 0.05, expires = GetTime() + 2.0 }
|
||||||
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
if oldTarget ~= UnitName(target) then
|
if oldTarget ~= UnitName(target) then
|
||||||
@@ -265,6 +346,7 @@ function HealBot_CastSpellOnFriend(spell, target)
|
|||||||
HealBot_TargetRestoreTimer = 0;
|
HealBot_TargetRestoreTimer = 0;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_SetItemDefaults: Internal utility: HealBot_SetItemDefaults
|
||||||
function HealBot_SetItemDefaults(spell)
|
function HealBot_SetItemDefaults(spell)
|
||||||
if not HealBot_Spells[spell].Target then
|
if not HealBot_Spells[spell].Target then
|
||||||
HealBot_Spells[spell].Target = {"player", "party", "pet"};
|
HealBot_Spells[spell].Target = {"player", "party", "pet"};
|
||||||
@@ -297,10 +379,51 @@ function HealBot_SetItemDefaults(spell)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_SetSpellDefaults: Internal utility: HealBot_SetSpellDefaults
|
||||||
function HealBot_SetSpellDefaults(spell)
|
function HealBot_SetSpellDefaults(spell)
|
||||||
HealBot_Spells[spell].HealsDur = math.floor((HealBot_Spells[spell].HealsCast + HealBot_Spells[spell].HealsExt) + HealBot_Spells[spell].RealHealing);
|
local baseHeal = HealBot_Spells[spell].HealsCast or 0
|
||||||
|
local extHeal = HealBot_Spells[spell].HealsExt or 0
|
||||||
|
local realHeal = HealBot_Spells[spell].RealHealing or 0
|
||||||
|
|
||||||
|
local _, class = UnitClass("player")
|
||||||
|
if class == "DRUID" then
|
||||||
|
local giftRank = HealBot_GetTalentRank("Gift of Nature")
|
||||||
|
local genRank = HealBot_GetTalentRank("Genesis")
|
||||||
|
|
||||||
|
local mult = 1 + (giftRank * 0.02)
|
||||||
|
baseHeal = baseHeal * mult
|
||||||
|
extHeal = extHeal * mult
|
||||||
|
realHeal = realHeal * mult
|
||||||
|
|
||||||
|
if genRank > 0 then
|
||||||
|
extHeal = extHeal * (1 + (genRank * 0.05))
|
||||||
|
end
|
||||||
|
elseif class == "PRIEST" then
|
||||||
|
local spiritRank = HealBot_GetTalentRank("Spiritual Healing")
|
||||||
|
local mult = 1 + (spiritRank * 0.06)
|
||||||
|
baseHeal = baseHeal * mult
|
||||||
|
extHeal = extHeal * mult
|
||||||
|
realHeal = realHeal * mult
|
||||||
|
|
||||||
|
if HEALBOT_RENEW and string.find(spell, HEALBOT_RENEW) then
|
||||||
|
local renewRank = HealBot_GetTalentRank("Improved Renew")
|
||||||
|
extHeal = extHeal * (1 + (renewRank * 0.05))
|
||||||
|
end
|
||||||
|
elseif class == "PALADIN" then
|
||||||
|
local hlRank = HealBot_GetTalentRank("Healing Light")
|
||||||
|
if (HEALBOT_HOLY_LIGHT and string.find(spell, HEALBOT_HOLY_LIGHT)) or
|
||||||
|
(HEALBOT_FLASH_OF_LIGHT and string.find(spell, HEALBOT_FLASH_OF_LIGHT)) or
|
||||||
|
(HEALBOT_HOLY_SHOCK and string.find(spell, HEALBOT_HOLY_SHOCK)) then
|
||||||
|
local mult = 1 + (hlRank * 0.04)
|
||||||
|
baseHeal = baseHeal * mult
|
||||||
|
realHeal = realHeal * mult
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
HealBot_Spells[spell].HealsDur = math.floor(baseHeal + extHeal + realHeal);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_AddHeal: Internal utility: HealBot_AddHeal
|
||||||
function HealBot_AddHeal(spell)
|
function HealBot_AddHeal(spell)
|
||||||
HealBot_SetSpellDefaults(spell);
|
HealBot_SetSpellDefaults(spell);
|
||||||
table.foreachi(HealBot_Spells[spell].Target, function (i, val)
|
table.foreachi(HealBot_Spells[spell].Target, function (i, val)
|
||||||
@@ -309,6 +432,7 @@ function HealBot_AddHeal(spell)
|
|||||||
HealBot_Spells[spell].BagSlot = HealBot_GetBagSlot(spell);
|
HealBot_Spells[spell].BagSlot = HealBot_GetBagSlot(spell);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_FindHealSpells: Maps best heal ranks to UI buttons.
|
||||||
function HealBot_FindHealSpells()
|
function HealBot_FindHealSpells()
|
||||||
local id = 1;
|
local id = 1;
|
||||||
if HealBot_SpellsInitFlag > 0 then NeedEquipUpdate = 1; return; end
|
if HealBot_SpellsInitFlag > 0 then NeedEquipUpdate = 1; return; end
|
||||||
@@ -378,9 +502,11 @@ function HealBot_FindHealSpells()
|
|||||||
HealBot_CalcEquipBonus = false;
|
HealBot_CalcEquipBonus = false;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_CanCastSpell: Internal utility: HealBot_CanCastSpell
|
||||||
function HealBot_CanCastSpell(spell, unit)
|
function HealBot_CanCastSpell(spell, unit)
|
||||||
local this = HealBot_Spells[spell];
|
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
|
if this.BagSlot then
|
||||||
local bag, slot = HealBot_UnpackBagSlot(this.BagSlot);
|
local bag, slot = HealBot_UnpackBagSlot(this.BagSlot);
|
||||||
local start, duration, enable = GetContainerItemCooldown(bag, slot);
|
local start, duration, enable = GetContainerItemCooldown(bag, slot);
|
||||||
@@ -391,31 +517,59 @@ function HealBot_CanCastSpell(spell, unit)
|
|||||||
return true;
|
return true;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetHealSpell: Resolves spell rank based on health deficit.
|
||||||
function HealBot_GetHealSpell(unit, pattern)
|
function HealBot_GetHealSpell(unit, pattern)
|
||||||
if (not UnitName(unit)) then return nil end;
|
if (not UnitName(unit)) then return nil end;
|
||||||
|
if not pattern then return nil end;
|
||||||
if UnitOnTaxi("player") then return nil end;
|
if UnitOnTaxi("player") then return nil end;
|
||||||
if HealBot_Config.ProtectPvP == 1 and UnitIsPVP(unit) and not UnitIsPVP("player") then return nil end
|
if HealBot_Config.ProtectPvP == 1 and UnitIsPVP(unit) and not UnitIsPVP("player") then return nil end
|
||||||
if HealBot_UnitClass("player") == "DRUID" then
|
if HealBot_UnitClass("player") == "DRUID" then
|
||||||
if HealBot_ActiveShapeshiftStance and HealBot_Config.AutoUnshift ~= 1 then return nil end;
|
if HealBot_GetShapeshiftForm() and HealBot_Config.AutoUnshift ~= 1 then return nil end;
|
||||||
end
|
end
|
||||||
local spell = HealBot_GetSpellName(HealBot_GetSpellId(pattern))
|
|
||||||
|
-- Handle Inline Scripts
|
||||||
|
if string.sub(pattern, 1, 1) == "/" then
|
||||||
|
return pattern;
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Handle Spells
|
||||||
|
if HealBot_Spells[pattern] or HealBot_GetSpellId(pattern) then
|
||||||
|
local spell = HealBot_GetSpellName(HealBot_GetSpellId(pattern)) or pattern
|
||||||
local range = 40;
|
local range = 40;
|
||||||
if HealBot_Spells[spell] then
|
if HealBot_Spells[spell] then
|
||||||
if not HealBot_CanCastSpell(spell, unit) then return nil end;
|
if not HealBot_CanCastSpell(spell, unit) then return nil end;
|
||||||
range = HealBot_Spells[spell].range;
|
range = HealBot_Spells[spell].range or 40;
|
||||||
end
|
end
|
||||||
if HealBot_Range_Check(unit, range) == 0 then return nil end;
|
if HealBot_Range_Check(unit, range) == 0 then return nil end;
|
||||||
return spell;
|
return spell;
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Handle Named Macros
|
||||||
|
if GetMacroIndexByName(pattern) ~= 0 then
|
||||||
|
return pattern;
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Handle Items
|
||||||
|
local bag, slot = HealBot_FindBagSlot(pattern)
|
||||||
|
if bag then
|
||||||
|
-- optionally check item range, but skipping for now as it's complex in vanilla
|
||||||
|
return pattern;
|
||||||
|
end
|
||||||
|
|
||||||
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_HealUnit: Main entry point for healing a unit.
|
||||||
function HealBot_HealUnit(unit, pattern)
|
function HealBot_HealUnit(unit, pattern)
|
||||||
HealBot_CastSpellOnFriend(HealBot_GetHealSpell(unit, pattern), unit);
|
HealBot_CastSpellOnFriend(HealBot_GetHealSpell(unit, pattern), unit);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_RecalcHeals: Flags unit for visual refresh.
|
||||||
function HealBot_RecalcHeals(unit)
|
function HealBot_RecalcHeals(unit)
|
||||||
HealBot_Action_Refresh(unit);
|
HealBot_Action_Refresh(unit);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_RecalcParty: Triggers group layout rebuild.
|
||||||
function HealBot_RecalcParty()
|
function HealBot_RecalcParty()
|
||||||
HealBot_Action_PartyChanged();
|
HealBot_Action_PartyChanged();
|
||||||
if HealBot_Action_HealButtons then
|
if HealBot_Action_HealButtons then
|
||||||
@@ -428,25 +582,56 @@ function HealBot_RecalcParty()
|
|||||||
HealBot_Action_RefreshButtons();
|
HealBot_Action_RefreshButtons();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_RecalcSpells: Recalculates spells and updates layout.
|
||||||
function HealBot_RecalcSpells()
|
function HealBot_RecalcSpells()
|
||||||
HealBot_FindHealSpells();
|
HealBot_FindHealSpells();
|
||||||
HealBot_RecalcParty();
|
HealBot_RecalcParty();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetTalentRank: Internal utility: HealBot_GetTalentRank
|
||||||
|
function HealBot_GetTalentRank(talentName)
|
||||||
|
for t = 1, GetNumTalentTabs() do
|
||||||
|
for i = 1, GetNumTalents(t) do
|
||||||
|
local nameTalent, icon, tier, column, currRank, maxRank = GetTalentInfo(t, i);
|
||||||
|
if nameTalent == talentName then
|
||||||
|
return currRank;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_SpiBonus: Internal utility: HealBot_SpiBonus
|
||||||
function HealBot_SpiBonus(spell)
|
function HealBot_SpiBonus(spell)
|
||||||
local heals_modifer = 0;
|
local heals_modifer = 0;
|
||||||
local base, stat, posBuff, negBuff = UnitStat("player", 5);
|
local base, stat, posBuff, negBuff = UnitStat("player", 5);
|
||||||
nameTalent, icon, tier, column, currRank, maxRank = GetTalentInfo(2, 14); -- Spiritual guidance
|
local currRank = HealBot_GetTalentRank("Spiritual Guidance")
|
||||||
spiGuideBonus = stat * 0.05;
|
if currRank > 0 then
|
||||||
|
local spiGuideBonus = stat * 0.05;
|
||||||
heals_modifer = heals_modifer + (currRank * spiGuideBonus);
|
heals_modifer = heals_modifer + (currRank * spiGuideBonus);
|
||||||
|
end
|
||||||
return heals_modifer;
|
return heals_modifer;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetBonus: Internal utility: HealBot_GetBonus
|
||||||
function HealBot_GetBonus()
|
function HealBot_GetBonus()
|
||||||
local HealBonus = HealBot_BonusScanner:GetBonus();
|
local HealBonus = 0;
|
||||||
|
if HealBot_Integrations_ClassicAPI_Active and GetSpellBonusHealing then
|
||||||
|
HealBonus = GetSpellBonusHealing() or 0;
|
||||||
|
else
|
||||||
|
HealBonus = HealBot_BonusScanner:GetBonus() or 0;
|
||||||
|
end
|
||||||
|
if UnitClass("player") == "PALADIN" then
|
||||||
|
local ironRank = HealBot_GetTalentRank("Ironclad")
|
||||||
|
if ironRank > 0 then
|
||||||
|
local base, effectiveArmor = UnitArmor("player")
|
||||||
|
HealBonus = HealBonus + (effectiveArmor * (ironRank * 0.01))
|
||||||
|
end
|
||||||
|
end
|
||||||
return HealBonus;
|
return HealBonus;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_InitSpells: Scans spellbook to find available heals.
|
||||||
function HealBot_InitSpells()
|
function HealBot_InitSpells()
|
||||||
local id = 1
|
local id = 1
|
||||||
local cnt = 0;
|
local cnt = 0;
|
||||||
@@ -465,12 +650,11 @@ function HealBot_InitSpells()
|
|||||||
end
|
end
|
||||||
id = id + 1;
|
id = id + 1;
|
||||||
end
|
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;
|
return cnt;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_InitGetSpellData: Extracts mana and cast time from spell tooltips.
|
||||||
function HealBot_InitGetSpellData(spell, id, class)
|
function HealBot_InitGetSpellData(spell, id, class)
|
||||||
local i, _mana, _cast, _HealsMin, _HealsMax, _HealsExt, _duration, _range, _shield, _channel;
|
local i, _mana, _cast, _HealsMin, _HealsMax, _HealsExt, _duration, _range, _shield, _channel;
|
||||||
local tooltip = getglobal("HealBot_ScanTooltip");
|
local tooltip = getglobal("HealBot_ScanTooltip");
|
||||||
@@ -482,47 +666,47 @@ function HealBot_InitGetSpellData(spell, id, class)
|
|||||||
|
|
||||||
HealBot_ScanTooltip:SetOwner(HealBot_ScanTooltip, "ANCHOR_NONE")
|
HealBot_ScanTooltip:SetOwner(HealBot_ScanTooltip, "ANCHOR_NONE")
|
||||||
HealBot_ScanTooltip:SetSpell(id, BOOKTYPE_SPELL);
|
HealBot_ScanTooltip:SetSpell(id, BOOKTYPE_SPELL);
|
||||||
tmpText = getglobal("HealBot_ScanTooltipTextLeft2");
|
_mana = 0;
|
||||||
if (tmpText:GetText()) then
|
_range = 40;
|
||||||
line = tmpText:GetText();
|
|
||||||
tmpTest, tmpTest, _mana = string.find(line, HEALBOT_TOOLTIP_MANA);
|
|
||||||
else
|
|
||||||
HealBot_Report_Error("================================");
|
|
||||||
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
|
|
||||||
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
|
|
||||||
end
|
|
||||||
|
|
||||||
tmpText = getglobal("HealBot_ScanTooltipTextRight2");
|
|
||||||
if (tmpText:GetText()) then
|
|
||||||
line = tmpText:GetText();
|
|
||||||
tmpTest, tmpTest, _range = string.find(line, HEALBOT_TOOLTIP_RANGE);
|
|
||||||
else
|
|
||||||
HealBot_Report_Error("================================");
|
|
||||||
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
|
|
||||||
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
|
|
||||||
end
|
|
||||||
|
|
||||||
tmpText = getglobal("HealBot_ScanTooltipTextLeft3");
|
|
||||||
_cast = nil;
|
|
||||||
if (tmpText:GetText()) then
|
|
||||||
line = tmpText:GetText();
|
|
||||||
if (line == HEALBOT_TOOLTIP_INSTANT_CAST) then
|
|
||||||
_cast = 0;
|
_cast = 0;
|
||||||
elseif line == HEALBOT_TOOLTIP_CHANNELED then
|
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;
|
_cast = 0;
|
||||||
elseif (tmpText) then
|
|
||||||
tmpTest, tmpTest, _cast = string.find(line, HEALBOT_TOOLTIP_CAST_TIME);
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
HealBot_Report_Error("================================");
|
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_CAST_TIME);
|
||||||
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
|
if match then _cast = match; end
|
||||||
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
|
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
|
end
|
||||||
|
|
||||||
tmpText = getglobal("HealBot_ScanTooltipTextLeft4");
|
|
||||||
tmpTest = nil;
|
tmpTest = nil;
|
||||||
if (tmpText:GetText()) then
|
if line then
|
||||||
line = tmpText:GetText();
|
|
||||||
if class == "PRIEST" then
|
if class == "PRIEST" then
|
||||||
if string.sub(spell, 1, 14) == string.sub(HEALBOT_POWER_WORD_SHIELD, 1, 14) 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);
|
tmpTest, tmpTest, _HealsMin, _shield = string.find(line, HEALBOT_SPELL_PATTERN_SHIELD);
|
||||||
@@ -660,6 +844,7 @@ function HealBot_InitGetSpellData(spell, id, class)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Generic_Patten: Internal utility: HealBot_Generic_Patten
|
||||||
function HealBot_Generic_Patten(matchStr, matchPattern)
|
function HealBot_Generic_Patten(matchStr, matchPattern)
|
||||||
local tmpTest, _HealsMin, _HealsMax, _HealsExt, _duration
|
local tmpTest, _HealsMin, _HealsMax, _HealsExt, _duration
|
||||||
tmpTest, tmpTest, _HealsMin, _HealsMax = string.find(matchStr, matchPattern);
|
tmpTest, tmpTest, _HealsMin, _HealsMax = string.find(matchStr, matchPattern);
|
||||||
@@ -672,12 +857,12 @@ function HealBot_Generic_Patten(matchStr, matchPattern)
|
|||||||
return tmpTest, _HealsMin, _HealsMax;
|
return tmpTest, _HealsMin, _HealsMax;
|
||||||
end
|
end
|
||||||
|
|
||||||
HealBot_ActiveShapeshiftStance = nil;
|
-- HealBot_UpdateShapeshiftForm: Called on UPDATE_SHAPESHIFT_FORM
|
||||||
|
|
||||||
function HealBot_UpdateShapeshiftForm()
|
function HealBot_UpdateShapeshiftForm()
|
||||||
HealBot_ActiveShapeshiftStance = HealBot_GetShapeshiftForm();
|
-- Deprecated
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_GetShapeshiftForm: Detects active druid form to prevent invalid casts.
|
||||||
function HealBot_GetShapeshiftForm()
|
function HealBot_GetShapeshiftForm()
|
||||||
local forms = GetNumShapeshiftForms();
|
local forms = GetNumShapeshiftForms();
|
||||||
if forms then
|
if forms then
|
||||||
@@ -685,12 +870,9 @@ function HealBot_GetShapeshiftForm()
|
|||||||
for i=1,forms do
|
for i=1,forms do
|
||||||
local icon,name,active = GetShapeshiftFormInfo(i);
|
local icon,name,active = GetShapeshiftFormInfo(i);
|
||||||
if active then
|
if active then
|
||||||
local icon_lower = string.lower(icon);
|
|
||||||
if not string.find(icon_lower, "humanoidform") and not string.find(icon_lower, "treeoflife") and not string.find(icon_lower, "stoneclawtotem") then
|
|
||||||
return i;
|
return i;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|||||||
+59
-24
@@ -2,6 +2,20 @@ HealBot_ConfigDefaults = {
|
|||||||
ShowManaBars=0,
|
ShowManaBars=0,
|
||||||
ManaBarsHealersOnly=0,
|
ManaBarsHealersOnly=0,
|
||||||
Version = HEALBOT_VERSION,
|
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,
|
AlertLevel = 0.95,
|
||||||
AutoClose = 1,
|
AutoClose = 1,
|
||||||
PanelSounds = 1,
|
PanelSounds = 1,
|
||||||
@@ -13,8 +27,9 @@ HealBot_ConfigDefaults = {
|
|||||||
ActionVisible = 1,
|
ActionVisible = 1,
|
||||||
HideSolo = 0,
|
HideSolo = 0,
|
||||||
OverHeal = 0.25,
|
OverHeal = 0.25,
|
||||||
CastNotify = 1,
|
UpdateFreq = 0.5,
|
||||||
AutoUnshift = 1,
|
AutoUnshift = 1,
|
||||||
|
Integrations_Nampower_Active = true,
|
||||||
ChatMessages = {
|
ChatMessages = {
|
||||||
[1] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" },
|
[1] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" },
|
||||||
[2] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" },
|
[2] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" },
|
||||||
@@ -35,14 +50,14 @@ HealBot_ConfigDefaults = {
|
|||||||
ShowDebuffWarning = 0,
|
ShowDebuffWarning = 0,
|
||||||
SoundDebuffWarning = 0,
|
SoundDebuffWarning = 0,
|
||||||
SoundDebuffPlay = 1,
|
SoundDebuffPlay = 1,
|
||||||
CDCMonitor = 1,
|
CDCMonitor = 2,
|
||||||
PanelAnchorX = -1,
|
PanelAnchorX = -1,
|
||||||
PanelAnchorY = -1,
|
PanelAnchorY = -1,
|
||||||
CDCBarColour = {
|
CDCBarColour = {
|
||||||
[HEALBOT_DISEASE_en] = { R = 0.1, G = 0.05, B = 0.2, },
|
[HEALBOT_DISEASE_en] = { R = 0.55, G = 0.19, B = 0.70, }, -- Bright Purple
|
||||||
[HEALBOT_MAGIC_en] = { R = 0.05, G = 0.05, B = 0.1, },
|
[HEALBOT_MAGIC_en] = { R = 0.01, G = 0.30, B = 0.90, }, -- Bright Blue
|
||||||
[HEALBOT_POISON_en] = { R = 0.05, G = 0.2, B = 0.1, },
|
[HEALBOT_POISON_en] = { R = 0.12, G = 0.46, B = 0.24, }, -- Bright Green
|
||||||
[HEALBOT_CURSE_en] = { R = 0.2, G = 0.05, B = 0.05, },
|
[HEALBOT_CURSE_en] = { R = 0.83, G = 0.01, B = 0.01, }, -- Bright Red
|
||||||
},
|
},
|
||||||
|
|
||||||
Debuff_Left = {
|
Debuff_Left = {
|
||||||
@@ -181,7 +196,17 @@ HealBot_ConfigDefaults = {
|
|||||||
Current_Skin = "Modern Flat",
|
Current_Skin = "Modern Flat",
|
||||||
Skin_ID = 1,
|
Skin_ID = 1,
|
||||||
Skins = {"Modern Flat", HEALBOT_SKINS_STD, "HealBot Party", "HealBot Raid", "Alteric Valley"},
|
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},
|
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},
|
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},
|
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},
|
brspace = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 2, ["HealBot Raid"] = 2, ["Alteric Valley"] = 1, ["Modern Flat"] = 2},
|
||||||
@@ -222,6 +247,7 @@ HealBot_ConfigDefaults = {
|
|||||||
bpadding = {[HEALBOT_SKINS_STD] = 10, ["HealBot Party"] = 10, ["HealBot Raid"] = 10, ["Alteric Valley"] = 10, ["Modern Flat"] = 10},
|
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},
|
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},
|
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,
|
ShowTooltip = 1,
|
||||||
ShowManaBars = 0,
|
ShowManaBars = 0,
|
||||||
ManaBarsHealersOnly = 0,
|
ManaBarsHealersOnly = 0,
|
||||||
@@ -230,15 +256,14 @@ HealBot_ConfigDefaults = {
|
|||||||
Tooltip_Recommend = 1,
|
Tooltip_Recommend = 1,
|
||||||
TooltipPos = 1,
|
TooltipPos = 1,
|
||||||
HideParty = 0,
|
HideParty = 0,
|
||||||
|
HealBot_Integrations_UnitXP = 0,
|
||||||
|
HealBot_Integrations_Nampower = 0,
|
||||||
|
HealBot_Integrations_SuperWoW = 0,
|
||||||
|
HealBot_Integrations_ClassicAPI = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
HealBot_Config = {};
|
HealBot_Config = {};
|
||||||
|
|
||||||
--HealBot_EmergIncMelee = {};
|
|
||||||
--HealBot_EmergIncRange = {};
|
|
||||||
--HealBot_EmergIncHealers = {};
|
|
||||||
--HealBot_EmergIncCustom = {};
|
|
||||||
--HealBot_KeyCombo = {};
|
|
||||||
HealBot_HealsIn = {};
|
HealBot_HealsIn = {};
|
||||||
HealBot_Healers = {};
|
HealBot_Healers = {};
|
||||||
HealBot_UnitDebuff = {};
|
HealBot_UnitDebuff = {};
|
||||||
@@ -250,18 +275,6 @@ HEALBOT_ADDON_ID="HealBot_Heals"
|
|||||||
|
|
||||||
HealBot_AbortButton=1;
|
HealBot_AbortButton=1;
|
||||||
|
|
||||||
HealBot_Groups = {
|
|
||||||
["ITEMS"] = {
|
|
||||||
HEALBOT_BANDAGES,
|
|
||||||
HEALBOT_HEALING_POTIONS,
|
|
||||||
HEALBOT_HEALTHSTONES,
|
|
||||||
},
|
|
||||||
["PALADIN"] = {
|
|
||||||
HEALBOT_HOLY_LIGHT,
|
|
||||||
HEALBOT_FLASH_OF_LIGHT,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
HealBot_Spells = {
|
HealBot_Spells = {
|
||||||
-- Cast = secs until effect starts
|
-- Cast = secs until effect starts
|
||||||
-- Channel = secs until caster available
|
-- Channel = secs until caster available
|
||||||
@@ -545,7 +558,7 @@ HealBot_Debuff_Types = {
|
|||||||
HealBot_IsFighting = false;
|
HealBot_IsFighting = false;
|
||||||
|
|
||||||
HealBot_DebuffPriority = {"none"};
|
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 = {};
|
HealBot_Heals = {};
|
||||||
|
|
||||||
@@ -559,3 +572,25 @@ HealBot_SpamCnt=0;
|
|||||||
HealBot_Action_TooltipUnit=nil;
|
HealBot_Action_TooltipUnit=nil;
|
||||||
HealBot_Ressing = {};
|
HealBot_Ressing = {};
|
||||||
HealBot_IamRessing = false;
|
HealBot_IamRessing = false;
|
||||||
|
|
||||||
|
-- Table Recycling Pool
|
||||||
|
local tablePool = {}
|
||||||
|
-- HealBot_GetTable: Internal utility: HealBot_GetTable
|
||||||
|
function HealBot_GetTable()
|
||||||
|
local t = table.remove(tablePool)
|
||||||
|
if not t then
|
||||||
|
t = {}
|
||||||
|
end
|
||||||
|
return t
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_ReleaseTable: Internal utility: HealBot_ReleaseTable
|
||||||
|
function HealBot_ReleaseTable(t)
|
||||||
|
if type(t) == "table" then
|
||||||
|
for k in pairs(t) do
|
||||||
|
t[k] = nil
|
||||||
|
end
|
||||||
|
table.insert(tablePool, t)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
|
-- HealBot_Errors_OnLoad: Internal utility: HealBot_Errors_OnLoad
|
||||||
function HealBot_Errors_OnLoad(this)
|
function HealBot_Errors_OnLoad(this)
|
||||||
-- do nothing
|
-- do nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Errors_OnShow: Show event handler.
|
||||||
function HealBot_Errors_OnShow(this)
|
function HealBot_Errors_OnShow(this)
|
||||||
local client = getglobal("HealBot_Error_Clientx")
|
local client = getglobal("HealBot_Error_Clientx")
|
||||||
client:SetText("Client="..GetLocale())
|
client:SetText("Client="..GetLocale())
|
||||||
@@ -9,6 +11,7 @@ function HealBot_Errors_OnShow(this)
|
|||||||
HealBot_Error_Classx:SetText("Player class="..HealBot_UnitClass("player"))
|
HealBot_Error_Classx:SetText("Player class="..HealBot_UnitClass("player"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Errors_OnHide: Hide event handler.
|
||||||
function HealBot_Errors_OnHide(this)
|
function HealBot_Errors_OnHide(this)
|
||||||
local errtext;
|
local errtext;
|
||||||
HealBot_StopMoving(this);
|
HealBot_StopMoving(this);
|
||||||
@@ -19,14 +22,17 @@ function HealBot_Errors_OnHide(this)
|
|||||||
HealBot_ErrorCnt=0;
|
HealBot_ErrorCnt=0;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Errors_OnDragStart: Internal utility: HealBot_Errors_OnDragStart
|
||||||
function HealBot_Errors_OnDragStart(this,arg1)
|
function HealBot_Errors_OnDragStart(this,arg1)
|
||||||
HealBot_StartMoving(this);
|
HealBot_StartMoving(this);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Errors_OnDragStop: Internal utility: HealBot_Errors_OnDragStop
|
||||||
function HealBot_Errors_OnDragStop(this)
|
function HealBot_Errors_OnDragStop(this)
|
||||||
HealBot_StopMoving(this);
|
HealBot_StopMoving(this);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_ErrorsIn: Internal utility: HealBot_ErrorsIn
|
||||||
function HealBot_ErrorsIn(msg,id)
|
function HealBot_ErrorsIn(msg,id)
|
||||||
local errtext = getglobal("HealBot_Error"..id);
|
local errtext = getglobal("HealBot_Error"..id);
|
||||||
errtext:SetText(msg)
|
errtext:SetText(msg)
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
HealBot_Integrations_UnitXP_Active = false;
|
||||||
|
HealBot_Integrations_Nampower_Active = false;
|
||||||
|
HealBot_Integrations_SuperWoW_Active = false;
|
||||||
|
HealBot_Integrations_ClassicAPI_Active = false;
|
||||||
|
|
||||||
|
-- HealBot_GetUnitGUID: Internal utility: HealBot_GetUnitGUID
|
||||||
|
function HealBot_GetUnitGUID(unit)
|
||||||
|
if not unit then return nil end
|
||||||
|
if HealBot_Integrations_ClassicAPI_Active and UnitGUID then
|
||||||
|
return UnitGUID(unit)
|
||||||
|
elseif HealBot_Integrations_SuperWoW_Active and GetUnitGUID then
|
||||||
|
return GetUnitGUID(unit)
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_Integrations_Toggle: Enables or disables external addon APIs on load/click.
|
||||||
|
function HealBot_Integrations_Toggle()
|
||||||
|
-- UnitXP
|
||||||
|
if HealBot_Config.HealBot_Integrations_UnitXP == 1 and UnitXP ~= nil then
|
||||||
|
HealBot_Integrations_UnitXP_Active = true;
|
||||||
|
HealBot_AddDebug("UnitXP Integration: ENABLED");
|
||||||
|
else
|
||||||
|
HealBot_Integrations_UnitXP_Active = false;
|
||||||
|
HealBot_AddDebug("UnitXP Integration: DISABLED");
|
||||||
|
end
|
||||||
|
|
||||||
|
-- nampower
|
||||||
|
if HealBot_Config.HealBot_Integrations_Nampower == 1 then
|
||||||
|
HealBot_Integrations_Nampower_Active = true;
|
||||||
|
HealBot_AddDebug("nampower Integration: ENABLED");
|
||||||
|
if not HealBot_NampowerFrame then
|
||||||
|
HealBot_Nampower_Auras = {}
|
||||||
|
HealBot_NampowerFrame = CreateFrame("Frame")
|
||||||
|
HealBot_NampowerFrame:RegisterEvent("AURA_CAST_ON_SELF")
|
||||||
|
HealBot_NampowerFrame:RegisterEvent("AURA_CAST_ON_OTHER")
|
||||||
|
HealBot_NampowerFrame:SetScript("OnEvent", function()
|
||||||
|
if not HealBot_Integrations_Nampower_Active then return end
|
||||||
|
local spellID, caster, target, _, _, _, _, duration = arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8
|
||||||
|
if not caster or not target or duration <= 0 then return end
|
||||||
|
|
||||||
|
local spellName = GetSpellRecField(spellID, "name")
|
||||||
|
if not spellName then return end
|
||||||
|
|
||||||
|
if not HealBot_Nampower_Auras[target] then
|
||||||
|
HealBot_Nampower_Auras[target] = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
local expirationTime = GetTime() + (duration / 1000)
|
||||||
|
HealBot_Nampower_Auras[target][spellName] = expirationTime
|
||||||
|
|
||||||
|
local unitID = HealBot_Model:GetUnitIDByName(target)
|
||||||
|
if unitID then
|
||||||
|
HealBot_OnEvent_UnitAura(nil, unitID)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
HealBot_Integrations_Nampower_Active = false;
|
||||||
|
HealBot_AddDebug("nampower Integration: DISABLED");
|
||||||
|
if HealBot_Nampower_Auras then
|
||||||
|
for k in pairs(HealBot_Nampower_Auras) do
|
||||||
|
HealBot_Nampower_Auras[k] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function HealBot_Integrations_PruneNampower()
|
||||||
|
if not HealBot_Integrations_Nampower_Active or not HealBot_Nampower_Auras then return end
|
||||||
|
|
||||||
|
local currentTime = GetTime()
|
||||||
|
for targetName, auras in pairs(HealBot_Nampower_Auras) do
|
||||||
|
-- Check if target is still in the raid/party
|
||||||
|
if not HealBot_Model:GetUnitIDByName(targetName) then
|
||||||
|
HealBot_Nampower_Auras[targetName] = nil
|
||||||
|
else
|
||||||
|
-- Prune expired auras
|
||||||
|
local hasAuras = false
|
||||||
|
for spellName, expiration in pairs(auras) do
|
||||||
|
if currentTime > expiration then
|
||||||
|
auras[spellName] = nil
|
||||||
|
else
|
||||||
|
hasAuras = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not hasAuras then
|
||||||
|
HealBot_Nampower_Auras[targetName] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- SuperWoW
|
||||||
|
if HealBot_Config.HealBot_Integrations_SuperWoW == 1 and UnitExists ~= nil then
|
||||||
|
-- We can check if GetUnitGUID exists as a quick SuperWoW test, or UnitExists returns 2 args
|
||||||
|
-- Actually SuperWoW adds SpellInfo, or we can just rely on GetUnitGUID if it exists in the environment
|
||||||
|
if GetUnitGUID or (type(UnitExists) == "function") then
|
||||||
|
-- If the client actually supports GUID tracking via SuperWoW (or a similar mod)
|
||||||
|
HealBot_Integrations_SuperWoW_Active = true;
|
||||||
|
HealBot_AddDebug("SuperWoW Integration: ENABLED");
|
||||||
|
else
|
||||||
|
HealBot_Integrations_SuperWoW_Active = false;
|
||||||
|
HealBot_AddDebug("SuperWoW Integration: DISABLED (Mod Not Found)");
|
||||||
|
end
|
||||||
|
else
|
||||||
|
HealBot_Integrations_SuperWoW_Active = false;
|
||||||
|
HealBot_AddDebug("SuperWoW Integration: DISABLED");
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ClassicAPI
|
||||||
|
if HealBot_Config.HealBot_Integrations_ClassicAPI == 1 then
|
||||||
|
if UnitGUID then
|
||||||
|
HealBot_Integrations_ClassicAPI_Active = true;
|
||||||
|
HealBot_AddDebug("ClassicAPI Integration: ENABLED");
|
||||||
|
else
|
||||||
|
HealBot_Integrations_ClassicAPI_Active = false;
|
||||||
|
HealBot_AddDebug("ClassicAPI Integration: DISABLED (Mod Not Found)");
|
||||||
|
end
|
||||||
|
else
|
||||||
|
HealBot_Integrations_ClassicAPI_Active = false;
|
||||||
|
HealBot_AddDebug("ClassicAPI Integration: DISABLED");
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
HEALBOT_VERSION = "1.4";
|
HEALBOT_VERSION = GetAddOnMetadata("HealBotBlue", "Version");
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
-- ENGLISH --
|
-- ENGLISH --
|
||||||
@@ -310,6 +310,7 @@ HEALBOT_OPTIONS_CDCLEFT = "Alt+Left";
|
|||||||
HEALBOT_OPTIONS_CDCRIGHT = "Alt+Right";
|
HEALBOT_OPTIONS_CDCRIGHT = "Alt+Right";
|
||||||
HEALBOT_OPTIONS_CDCBARS = "Healthbar colours";
|
HEALBOT_OPTIONS_CDCBARS = "Healthbar colours";
|
||||||
HEALBOT_OPTIONS_CDCCLASS = "Monitor classes";
|
HEALBOT_OPTIONS_CDCCLASS = "Monitor classes";
|
||||||
|
HEALBOT_OPTIONS_CDCSHOWALLDEBUFFS = "Track All Debuffs";
|
||||||
HEALBOT_OPTIONS_CDCWARNINGS = "Debuff warnings";
|
HEALBOT_OPTIONS_CDCWARNINGS = "Debuff warnings";
|
||||||
HEALBOT_OPTIONS_USEBUTTONS = "Define spells";
|
HEALBOT_OPTIONS_USEBUTTONS = "Define spells";
|
||||||
HEALBOT_OPTIONS_CDC = "Cure/Dispel/Cleanse for";
|
HEALBOT_OPTIONS_CDC = "Cure/Dispel/Cleanse for";
|
||||||
@@ -320,12 +321,14 @@ HEALBOT_OPTIONS_SOUND2 = "Sound 2"
|
|||||||
HEALBOT_OPTIONS_SOUND3 = "Sound 3"
|
HEALBOT_OPTIONS_SOUND3 = "Sound 3"
|
||||||
|
|
||||||
HEALBOT_OPTIONS_HEAL_BUTTONS = "Healing bars";
|
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 = "Group";
|
||||||
|
HEALBOT_OPTIONS_GROUPHEALS_LABEL = "Group Only";
|
||||||
HEALBOT_OPTIONS_TANKHEALS = "Main tanks";
|
HEALBOT_OPTIONS_TANKHEALS = "Main tanks";
|
||||||
HEALBOT_OPTIONS_TARGETHEALS = "Targets";
|
HEALBOT_OPTIONS_TARGETHEALS = "Targets";
|
||||||
HEALBOT_OPTIONS_EMERGENCYHEALS= "Extra";
|
HEALBOT_OPTIONS_EMERGENCYHEALS= "Raid";
|
||||||
|
HEALBOT_OPTIONS_PETHEALS = "Pets";
|
||||||
HEALBOT_OPTIONS_HEALLEVEL = "Healing Level";
|
HEALBOT_OPTIONS_HEALLEVEL = "Healing Level";
|
||||||
HEALBOT_OPTIONS_ALERTLEVEL = "Alert Level";
|
HEALBOT_OPTIONS_ALERTLEVEL = "Alert Level";
|
||||||
HEALBOT_OPTIONS_OVERHEAL = "Show Abort button when overhealing"
|
HEALBOT_OPTIONS_OVERHEAL = "Show Abort button when overhealing"
|
||||||
|
|||||||
+111
-2
@@ -15,6 +15,7 @@ function HealBot_UIDropDownMenu_SetSelectedID(frame, id, useValue)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_UIDropDownMenu_SetSelectedValue: Internal utility: HealBot_UIDropDownMenu_SetSelectedValue
|
||||||
function HealBot_UIDropDownMenu_SetSelectedValue(frame, value, useValue)
|
function HealBot_UIDropDownMenu_SetSelectedValue(frame, value, useValue)
|
||||||
local wasNil = false
|
local wasNil = false
|
||||||
if not UIDROPDOWNMENU_OPEN_MENU then
|
if not UIDROPDOWNMENU_OPEN_MENU then
|
||||||
@@ -35,7 +36,11 @@ HealBot_Model = {
|
|||||||
partyMembers = {},
|
partyMembers = {},
|
||||||
raidMembers = {},
|
raidMembers = {},
|
||||||
playerPet = nil,
|
playerPet = nil,
|
||||||
target = nil
|
target = nil,
|
||||||
|
|
||||||
|
-- Integration maps
|
||||||
|
unitGUIDs = {}, -- unit -> GUID
|
||||||
|
guidUnits = {} -- GUID -> unit
|
||||||
}
|
}
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
@@ -51,6 +56,7 @@ HealBot_Model = {
|
|||||||
-- "EQUIPMENT_CHANGED"
|
-- "EQUIPMENT_CHANGED"
|
||||||
-- "INCOMING_HEAL_CHANGED"
|
-- "INCOMING_HEAL_CHANGED"
|
||||||
|
|
||||||
|
-- HealBot_Model:RegisterObserver: Registers an observer callback for an event.
|
||||||
function HealBot_Model:RegisterObserver(event, callback)
|
function HealBot_Model:RegisterObserver(event, callback)
|
||||||
if not self.observers[event] then
|
if not self.observers[event] then
|
||||||
self.observers[event] = {}
|
self.observers[event] = {}
|
||||||
@@ -58,6 +64,7 @@ function HealBot_Model:RegisterObserver(event, callback)
|
|||||||
table.insert(self.observers[event], callback)
|
table.insert(self.observers[event], callback)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Model:NotifyObservers: Fires all registered callbacks for an event.
|
||||||
function HealBot_Model:NotifyObservers(event, unitID, arg1, arg2)
|
function HealBot_Model:NotifyObservers(event, unitID, arg1, arg2)
|
||||||
if self.observers[event] then
|
if self.observers[event] then
|
||||||
local len = table.getn(self.observers[event])
|
local len = table.getn(self.observers[event])
|
||||||
@@ -71,6 +78,7 @@ end
|
|||||||
-- Model Initialization
|
-- Model Initialization
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-- HealBot_Model:Initialize: Pre-allocates the unit state dictionary.
|
||||||
function HealBot_Model:Initialize()
|
function HealBot_Model:Initialize()
|
||||||
self:InitUnitState("player")
|
self:InitUnitState("player")
|
||||||
self:InitUnitState("target")
|
self:InitUnitState("target")
|
||||||
@@ -89,6 +97,7 @@ function HealBot_Model:Initialize()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Model:InitUnitState: Internal utility: HealBot_Model:InitUnitState
|
||||||
function HealBot_Model:InitUnitState(unit)
|
function HealBot_Model:InitUnitState(unit)
|
||||||
if not self.units[unit] then
|
if not self.units[unit] then
|
||||||
self.units[unit] = {
|
self.units[unit] = {
|
||||||
@@ -131,18 +140,118 @@ function HealBot_Model:UpdateUnitIdentity(unit)
|
|||||||
if not self.units[unit] then return false end
|
if not self.units[unit] then return false end
|
||||||
|
|
||||||
local oldName = self.units[unit].name
|
local oldName = self.units[unit].name
|
||||||
|
local oldEnglishClass = self.units[unit].englishClass
|
||||||
local name = UnitName(unit)
|
local name = UnitName(unit)
|
||||||
local _, englishClass = UnitClass(unit)
|
local _, englishClass = UnitClass(unit)
|
||||||
|
|
||||||
if oldName ~= name then
|
if oldName ~= name or oldEnglishClass ~= englishClass then
|
||||||
self.units[unit].name = name
|
self.units[unit].name = name
|
||||||
self.units[unit].englishClass = englishClass
|
self.units[unit].englishClass = englishClass
|
||||||
self.units[unit].class = UnitClass(unit)
|
self.units[unit].class = UnitClass(unit)
|
||||||
|
|
||||||
|
if (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active) and HealBot_GetUnitGUID then
|
||||||
|
local guid = HealBot_GetUnitGUID(unit)
|
||||||
|
if guid and guid ~= "0" and guid ~= "0x0000000000000000" then
|
||||||
|
self.unitGUIDs[unit] = guid
|
||||||
|
self.guidUnits[guid] = unit
|
||||||
|
end
|
||||||
|
end
|
||||||
return true -- Identity changed
|
return true -- Identity changed
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Model:GetUnitByGUID: Internal utility: HealBot_Model:GetUnitByGUID
|
||||||
|
function HealBot_Model:GetUnitByGUID(guid)
|
||||||
|
if not guid then return nil end
|
||||||
|
return self.guidUnits[guid]
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_Model:GetUnitIDByName: Looks up a group unit token by player name.
|
||||||
|
function HealBot_Model:GetUnitIDByName(name)
|
||||||
|
if not name then return nil end
|
||||||
|
for unit, data in pairs(self.units) do
|
||||||
|
if data.name == name then return unit end
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_Model:PreserveStateByGUID: Preserves icon and debuff state when group indices shift during combat.
|
||||||
|
function HealBot_Model:PreserveStateByGUID()
|
||||||
|
if not (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active) or not HealBot_GetUnitGUID then return end
|
||||||
|
|
||||||
|
local oldGUIDs = {}
|
||||||
|
for unit, guid in pairs(self.unitGUIDs) do
|
||||||
|
if string.find(unit, "^party") or string.find(unit, "^raid") or unit == "player" or unit == "pet" then
|
||||||
|
oldGUIDs[unit] = guid
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local newUnitForGUID = {}
|
||||||
|
-- Scan the new roster
|
||||||
|
for _, unit in ipairs(self.partyMembers) do
|
||||||
|
local guid = HealBot_GetUnitGUID(unit)
|
||||||
|
if guid and guid ~= "0" and guid ~= "0x0000000000000000" then
|
||||||
|
newUnitForGUID[guid] = unit
|
||||||
|
self.unitGUIDs[unit] = guid
|
||||||
|
self.guidUnits[guid] = unit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for _, unit in ipairs(self.raidMembers) do
|
||||||
|
local guid = HealBot_GetUnitGUID(unit)
|
||||||
|
if guid and guid ~= "0" and guid ~= "0x0000000000000000" then
|
||||||
|
newUnitForGUID[guid] = unit
|
||||||
|
self.unitGUIDs[unit] = guid
|
||||||
|
self.guidUnits[guid] = unit
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local stateSwaps = {}
|
||||||
|
local iconSwaps = {}
|
||||||
|
local missingBuffSwaps = {}
|
||||||
|
local debuffSwaps = {}
|
||||||
|
|
||||||
|
for oldUnit, guid in pairs(oldGUIDs) do
|
||||||
|
local newUnit = newUnitForGUID[guid]
|
||||||
|
if newUnit and newUnit ~= oldUnit then
|
||||||
|
stateSwaps[newUnit] = self.units[oldUnit]
|
||||||
|
|
||||||
|
-- Preserve external global tables if they exist
|
||||||
|
if HealBot_UnitIcons and HealBot_UnitIcons[oldUnit] then
|
||||||
|
iconSwaps[newUnit] = HealBot_UnitIcons[oldUnit]
|
||||||
|
end
|
||||||
|
if HealBot_MissingBuffs and HealBot_MissingBuffs[oldUnit] ~= nil then
|
||||||
|
missingBuffSwaps[newUnit] = HealBot_MissingBuffs[oldUnit]
|
||||||
|
end
|
||||||
|
if HealBot_UnitDebuff and HealBot_UnitDebuff[oldUnit] ~= nil then
|
||||||
|
debuffSwaps[newUnit] = HealBot_UnitDebuff[oldUnit]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for targetUnit, stateData in pairs(stateSwaps) do
|
||||||
|
-- Deep copy to prevent memory aliasing
|
||||||
|
self.units[targetUnit] = {}
|
||||||
|
for k, v in pairs(stateData) do
|
||||||
|
self.units[targetUnit][k] = v
|
||||||
|
end
|
||||||
|
self.units[targetUnit].icons = {}
|
||||||
|
|
||||||
|
if HealBot_UnitIcons and iconSwaps[targetUnit] then
|
||||||
|
if not HealBot_UnitIcons[targetUnit] then HealBot_UnitIcons[targetUnit] = {} end
|
||||||
|
for j=1, 10 do
|
||||||
|
HealBot_UnitIcons[targetUnit][j] = iconSwaps[targetUnit][j]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if HealBot_MissingBuffs then
|
||||||
|
HealBot_MissingBuffs[targetUnit] = missingBuffSwaps[targetUnit]
|
||||||
|
end
|
||||||
|
if HealBot_UnitDebuff then
|
||||||
|
HealBot_UnitDebuff[targetUnit] = debuffSwaps[targetUnit]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Updates health/maxHealth values. Returns true if changed.
|
-- Updates health/maxHealth values. Returns true if changed.
|
||||||
function HealBot_Model:UpdateUnitHealth(unit)
|
function HealBot_Model:UpdateUnitHealth(unit)
|
||||||
if not self.units[unit] then return false end
|
if not self.units[unit] then return false end
|
||||||
|
|||||||
+28
-6
@@ -7,6 +7,14 @@ HealBot_Options_CurrentPanel = 0;
|
|||||||
HealBot_ColourObjWaiting = nil
|
HealBot_ColourObjWaiting = nil
|
||||||
|
|
||||||
HealBot_Options_EmergencyFilter_List = {
|
HealBot_Options_EmergencyFilter_List = {
|
||||||
|
HEALBOT_OPTIONS_MONITORALL,
|
||||||
|
HEALBOT_OPTIONS_MONITORMELEE,
|
||||||
|
HEALBOT_OPTIONS_MONITORRANGE,
|
||||||
|
HEALBOT_OPTIONS_MONITORHEALERS,
|
||||||
|
HEALBOT_OPTIONS_MONITORCUSTOM,
|
||||||
|
}
|
||||||
|
|
||||||
|
HealBot_Options_CDCMonitor_List = {
|
||||||
HEALBOT_OPTIONS_MONITORNO,
|
HEALBOT_OPTIONS_MONITORNO,
|
||||||
HEALBOT_OPTIONS_MONITORALL,
|
HEALBOT_OPTIONS_MONITORALL,
|
||||||
HEALBOT_DRUID,
|
HEALBOT_DRUID,
|
||||||
@@ -18,17 +26,14 @@ HealBot_Options_EmergencyFilter_List = {
|
|||||||
HEALBOT_SHAMAN,
|
HEALBOT_SHAMAN,
|
||||||
HEALBOT_WARLOCK,
|
HEALBOT_WARLOCK,
|
||||||
HEALBOT_WARRIOR,
|
HEALBOT_WARRIOR,
|
||||||
HEALBOT_OPTIONS_PETS,
|
|
||||||
HEALBOT_OPTIONS_MONITORMELEE,
|
|
||||||
HEALBOT_OPTIONS_MONITORRANGE,
|
|
||||||
HEALBOT_OPTIONS_MONITORHEALERS,
|
|
||||||
HEALBOT_OPTIONS_MONITORCUSTOM,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- HealBot_Options_AddDebug: UI handler for AddDebug options panel.
|
||||||
function HealBot_Options_AddDebug(msg)
|
function HealBot_Options_AddDebug(msg)
|
||||||
HealBot_AddDebug("Options: " .. msg);
|
HealBot_AddDebug("Options: " .. msg);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Options_Pct_OnLoad: UI handler for OnLoad options panel.
|
||||||
function HealBot_Options_Pct_OnLoad(this,text)
|
function HealBot_Options_Pct_OnLoad(this,text)
|
||||||
this.text = text;
|
this.text = text;
|
||||||
getglobal(this:GetName().."Text"):SetText(text);
|
getglobal(this:GetName().."Text"):SetText(text);
|
||||||
@@ -38,6 +43,7 @@ function HealBot_Options_Pct_OnLoad(this,text)
|
|||||||
this:SetValueStep(0.01);
|
this:SetValueStep(0.01);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Options_Pct_OnLoad_MinMax: UI handler for MinMax options panel.
|
||||||
function HealBot_Options_Pct_OnLoad_MinMax(this,text,Min,Max)
|
function HealBot_Options_Pct_OnLoad_MinMax(this,text,Min,Max)
|
||||||
this.text = text;
|
this.text = text;
|
||||||
local MinTxt,MaxTxt
|
local MinTxt,MaxTxt
|
||||||
@@ -52,6 +58,7 @@ function HealBot_Options_Pct_OnLoad_MinMax(this,text,Min,Max)
|
|||||||
this:SetValueStep(0.01);
|
this:SetValueStep(0.01);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Options_val_OnLoad: UI handler for OnLoad options panel.
|
||||||
function HealBot_Options_val_OnLoad(this,text,Min,Max)
|
function HealBot_Options_val_OnLoad(this,text,Min,Max)
|
||||||
this.text = text;
|
this.text = text;
|
||||||
|
|
||||||
@@ -62,6 +69,7 @@ function HealBot_Options_val_OnLoad(this,text,Min,Max)
|
|||||||
this:SetValueStep(1);
|
this:SetValueStep(1);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Options_Pct_OnValueChanged: UI handler for OnValueChanged options panel.
|
||||||
function HealBot_Options_Pct_OnValueChanged(this)
|
function HealBot_Options_Pct_OnValueChanged(this)
|
||||||
local pct = math.floor(this:GetValue()*100+0.5);
|
local pct = math.floor(this:GetValue()*100+0.5);
|
||||||
getglobal(this:GetName().."Text"):SetText(this.text .. " (" .. pct .. "%)");
|
getglobal(this:GetName().."Text"):SetText(this.text .. " (" .. pct .. "%)");
|
||||||
@@ -117,10 +125,12 @@ end
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- HealBot_Options_CastNotify_OnLoad: UI handler for OnLoad options panel.
|
||||||
function HealBot_Options_CastNotify_OnLoad(this,text)
|
function HealBot_Options_CastNotify_OnLoad(this,text)
|
||||||
getglobal(this:GetName().."Text"):SetText(text);
|
getglobal(this:GetName().."Text"):SetText(text);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- HealBot_Options_CastNotify_OnClick: UI handler for OnClick options panel.
|
||||||
function HealBot_Options_CastNotify_OnClick(this,id)
|
function HealBot_Options_CastNotify_OnClick(this,id)
|
||||||
-- CastNotify UI elements were removed and replaced by Custom Chat Messages
|
-- CastNotify UI elements were removed and replaced by Custom Chat Messages
|
||||||
end
|
end
|
||||||
@@ -158,6 +168,7 @@ end
|
|||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
-- HealBot_Returned_Colours: Internal utility: HealBot_Returned_Colours
|
||||||
function HealBot_Returned_Colours()
|
function HealBot_Returned_Colours()
|
||||||
local A = OpacitySliderFrame:GetValue();
|
local A = OpacitySliderFrame:GetValue();
|
||||||
A = ((0-A)+1);
|
A = ((0-A)+1);
|
||||||
@@ -199,6 +210,7 @@ function HealBot_Returned_Colours()
|
|||||||
HealBot_SetSkinColours()
|
HealBot_SetSkinColours()
|
||||||
HealBot_SetCDCBarColours()
|
HealBot_SetCDCBarColours()
|
||||||
end
|
end
|
||||||
|
-- HealBot_UseColourPick: Internal utility: HealBot_UseColourPick
|
||||||
function HealBot_UseColourPick(R, G, B, A)
|
function HealBot_UseColourPick(R, G, B, A)
|
||||||
if ColorPickerFrame:IsVisible() then
|
if ColorPickerFrame:IsVisible() then
|
||||||
ColorPickerFrame:Hide();
|
ColorPickerFrame:Hide();
|
||||||
@@ -219,6 +231,7 @@ function HealBot_UseColourPick(R, G, B, A)
|
|||||||
end
|
end
|
||||||
return ColorPickerFrame:GetColorRGB();
|
return ColorPickerFrame:GetColorRGB();
|
||||||
end
|
end
|
||||||
|
-- HealBot_Options_Defaults_OnClick: UI handler for OnClick options panel.
|
||||||
function HealBot_Options_Defaults_OnClick(this)
|
function HealBot_Options_Defaults_OnClick(this)
|
||||||
HealBot_Options_CastNotify_OnClick(nil,0);
|
HealBot_Options_CastNotify_OnClick(nil,0);
|
||||||
-- HealBot_Config = HealBot_ConfigDefaults;
|
-- HealBot_Config = HealBot_ConfigDefaults;
|
||||||
@@ -230,15 +243,17 @@ function HealBot_Options_Defaults_OnClick(this)
|
|||||||
HealBot_Action_Reset();
|
HealBot_Action_Reset();
|
||||||
HealBot_Config.ActionVisible = HealBot_Action:IsVisible();
|
HealBot_Config.ActionVisible = HealBot_Action:IsVisible();
|
||||||
end
|
end
|
||||||
|
-- HealBot_Options_OnLoad: UI handler for OnLoad options panel.
|
||||||
function HealBot_Options_OnLoad(this)
|
function HealBot_Options_OnLoad(this)
|
||||||
table.insert(UISpecialFrames,this:GetName());
|
table.insert(UISpecialFrames,this:GetName());
|
||||||
|
|
||||||
-- Tabs
|
-- Tabs
|
||||||
PanelTemplates_SetNumTabs(this,7);
|
PanelTemplates_SetNumTabs(this,9);
|
||||||
this.selectedTab = 1;
|
this.selectedTab = 1;
|
||||||
PanelTemplates_UpdateTabs(this);
|
PanelTemplates_UpdateTabs(this);
|
||||||
HealBot_Options_ShowPanel(this.selectedTab);
|
HealBot_Options_ShowPanel(this.selectedTab);
|
||||||
end
|
end
|
||||||
|
-- HealBot_Options_OnShow: UI handler for OnShow options panel.
|
||||||
function HealBot_Options_OnShow(this)
|
function HealBot_Options_OnShow(this)
|
||||||
HealBot_Skins = HealBot_Config.Skins;
|
HealBot_Skins = HealBot_Config.Skins;
|
||||||
HealBot_Options_SetSkins()
|
HealBot_Options_SetSkins()
|
||||||
@@ -306,14 +321,20 @@ function HealBot_Options_OnShow(this)
|
|||||||
HealBot_Options_SetChatMessages();
|
HealBot_Options_SetChatMessages();
|
||||||
HealBot_Options_ShowPanel(this.selectedTab or 1);
|
HealBot_Options_ShowPanel(this.selectedTab or 1);
|
||||||
end
|
end
|
||||||
|
-- HealBot_Options_SetSkins: UI handler for SetSkins options panel.
|
||||||
function HealBot_Options_SetSkins()
|
function HealBot_Options_SetSkins()
|
||||||
HealBot_Options_Skins_Refresh()
|
HealBot_Options_Skins_Refresh()
|
||||||
HealBot_Options_BarAlpha:SetValue(HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
|
HealBot_Options_BarAlpha:SetValue(HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
|
||||||
HealBot_Options_BarAlphaInHeal:SetValue(HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]);
|
HealBot_Options_BarAlphaInHeal:SetValue(HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]);
|
||||||
HealBot_Options_BarTextureS:SetValue(HealBot_Config.btexture[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_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_BarWidthS:SetValue(HealBot_Config.bwidth[HealBot_Config.Current_Skin])
|
||||||
HealBot_Options_BarNumColsS:SetValue(HealBot_Config.numcols[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_BarBRSpaceS:SetValue(HealBot_Config.brspace[HealBot_Config.Current_Skin])
|
||||||
HealBot_Options_BarBCSpaceS:SetValue(HealBot_Config.bcspace[HealBot_Config.Current_Skin])
|
HealBot_Options_BarBCSpaceS:SetValue(HealBot_Config.bcspace[HealBot_Config.Current_Skin])
|
||||||
HealBot_Options_FramePaddingS:SetValue((HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10)
|
HealBot_Options_FramePaddingS:SetValue((HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10)
|
||||||
@@ -340,6 +361,7 @@ function HealBot_Options_SetSkins()
|
|||||||
HealBot_Options_DeleteSkin:Enable();
|
HealBot_Options_DeleteSkin:Enable();
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- HealBot_Options_ShowPanel: UI handler for ShowPanel options panel.
|
||||||
function HealBot_Options_ShowPanel(id)
|
function HealBot_Options_ShowPanel(id)
|
||||||
if HealBot_Options_CurrentPanel>0 then
|
if HealBot_Options_CurrentPanel>0 then
|
||||||
local panel = getglobal("HealBot_Options_Panel"..HealBot_Options_CurrentPanel);
|
local panel = getglobal("HealBot_Options_Panel"..HealBot_Options_CurrentPanel);
|
||||||
|
|||||||
+9
-22
@@ -94,7 +94,7 @@
|
|||||||
<Frame name="HealBot_Options" toplevel="true" frameStrata="DIALOG"
|
<Frame name="HealBot_Options" toplevel="true" frameStrata="DIALOG"
|
||||||
movable="true" parent="UIParent" enableMouse="true" hidden="true">
|
movable="true" parent="UIParent" enableMouse="true" hidden="true">
|
||||||
<Size>
|
<Size>
|
||||||
<AbsDimension x="420" y="455"/>
|
<AbsDimension x="540" y="455"/>
|
||||||
</Size>
|
</Size>
|
||||||
<Anchors>
|
<Anchors>
|
||||||
<Anchor point="CENTER">
|
<Anchor point="CENTER">
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
<Texture name="HealBot_Options_Header"
|
<Texture name="HealBot_Options_Header"
|
||||||
file="Interface\DialogFrame\UI-DialogBox-Header">
|
file="Interface\DialogFrame\UI-DialogBox-Header">
|
||||||
<Size>
|
<Size>
|
||||||
<AbsDimension x="400" y="64"/>
|
<AbsDimension x="450" y="64"/>
|
||||||
</Size>
|
</Size>
|
||||||
<Anchors>
|
<Anchors>
|
||||||
<Anchor point="TOP">
|
<Anchor point="TOP">
|
||||||
@@ -206,38 +206,25 @@
|
|||||||
</Anchor>
|
</Anchor>
|
||||||
</Anchors>
|
</Anchors>
|
||||||
</Button>
|
</Button>
|
||||||
<Button name="HealBot_Options_Defaults" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_DEFAULTS">
|
<Button name="HealBot_OptionsTab8" inherits="HealBot_Options_Tab" id="8" text="Auto">
|
||||||
<Size>
|
|
||||||
<AbsDimension x="80" y="22"/>
|
|
||||||
</Size>
|
|
||||||
<Anchors>
|
<Anchors>
|
||||||
<Anchor point="BOTTOM" relativePoint="BOTTOM">
|
<Anchor point="LEFT" relativeTo="HealBot_OptionsTab7" relativePoint="RIGHT">
|
||||||
<Offset>
|
<Offset>
|
||||||
<AbsDimension x="-50" y="15"/>
|
<AbsDimension x="-14" y="0" />
|
||||||
</Offset>
|
</Offset>
|
||||||
</Anchor>
|
</Anchor>
|
||||||
</Anchors>
|
</Anchors>
|
||||||
<Scripts>
|
|
||||||
<OnClick>HealBot_Options_Defaults_OnClick(this)</OnClick>
|
|
||||||
</Scripts>
|
|
||||||
</Button>
|
</Button>
|
||||||
<Button name="HealBot_Options_CloseButton" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_CLOSE">
|
<Button name="HealBot_OptionsTab9" inherits="HealBot_Options_Tab" id="9" text="Extras">
|
||||||
<Size>
|
|
||||||
<AbsDimension x="80" y="22"/>
|
|
||||||
</Size>
|
|
||||||
<Anchors>
|
<Anchors>
|
||||||
<Anchor point="BOTTOM" relativePoint="BOTTOM">
|
<Anchor point="LEFT" relativeTo="HealBot_OptionsTab8" relativePoint="RIGHT">
|
||||||
<Offset>
|
<Offset>
|
||||||
<AbsDimension x="50" y="15"/>
|
<AbsDimension x="-14" y="0" />
|
||||||
</Offset>
|
</Offset>
|
||||||
</Anchor>
|
</Anchor>
|
||||||
</Anchors>
|
</Anchors>
|
||||||
<Scripts>
|
|
||||||
<OnClick>
|
|
||||||
HideUIPanel(this:GetParent());
|
|
||||||
</OnClick>
|
|
||||||
</Scripts>
|
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
</Frames>
|
</Frames>
|
||||||
<Scripts>
|
<Scripts>
|
||||||
<OnLoad>HealBot_Options_OnLoad(this);</OnLoad>
|
<OnLoad>HealBot_Options_OnLoad(this);</OnLoad>
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
-- HealBot_Options_AutoSwap_OnClick: UI handler for OnClick options panel.
|
||||||
|
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
|
||||||
|
|
||||||
|
-- HealBot_Options_Auto_Initialize: UI handler for Initialize options panel.
|
||||||
|
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
|
||||||
|
|
||||||
|
-- HealBot_Options_Auto_OnSelect: UI handler for OnSelect options panel.
|
||||||
|
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
|
||||||
|
|
||||||
|
-- HealBot_Options_Auto_OnShow: UI handler for OnShow options panel.
|
||||||
|
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>
|
||||||