Files
HealBotBlue/HealBot_Action.lua
T
Bluewhale1337 913ab315b0 Commit 2
Added a native Action Bar Hovercasting (Mouseover) engine. You can now cast spells on hovered targets using action bar keybinds without losing your current target. Togglable in Options -> General.
Added Fear Ward to the global HoT tracker, which will display the icon directly on the unit frame.
Fixed Shaman weapon buff tracking (e.g., Rockbiter) failing due to spell ranks in tooltips.
Fixed missing health bar skin textures by ensuring `.tga` paths are explicitly resolved.
ixed division-by-zero math errors during UI scaling that caused the addon to crash.

Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-06-23 22:48:40 +02:00

1224 lines
45 KiB
Lua

local headerno=0;
HealBot_Action_HealGroup = {
"player",
"pet",
"party1",
"party2",
"party3",
"party4",
};
HealBot_Action_HealTarget = {
};
HealBot_Action_HealButtons = {
};
HealBot_Action_UnitButtons = {
};
function HealBot_Action_AddDebug(msg)
HealBot_AddDebug("Action: " .. msg);
end
function HealBot_HealthColor(unit,hlth,maxhlth)
if HealBot_UnitDebuff[unit] then
local debuff, tmp, debuff_type = UnitDebuff(unit,1, 1)
if not debuff then
HealBot_UnitDebuff[unit] = nil;
HealBot_UnitDebuff[unit.."_debuff_texture"]=nil
else
return HealBot_Config.CDCBarColour[HealBot_UnitDebuff[unit]].R,
HealBot_Config.CDCBarColour[HealBot_UnitDebuff[unit]].G,
HealBot_Config.CDCBarColour[HealBot_UnitDebuff[unit]].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin];
end
end
local text = UnitName(unit);
if not HealBot_HealsIn[text] then
HealBot_HealsIn[text]=0;
end
local pct = hlth+HealBot_HealsIn[text];
if maxhlth and maxhlth > 0 then
if pct<maxhlth then
pct=pct/maxhlth;
else
pct=1;
end
else
pct=0;
end
local r,g,b = 1.0, 1.0, 0.0;
local a=HealBot_Config.Barcola[HealBot_Config.Current_Skin];
if pct>HealBot_Config.AlertLevel then
a=HealBot_Config.bardisa[HealBot_Config.Current_Skin];
end
if pct>=0.98 then r = 0.0; end
if pct<0.98 and pct>=0.65 then r=2.94-(pct*3); end
if pct<=0.64 and pct>0.31 then g=(pct-0.31)*3; end
if pct<=0.31 then g = 0.0; end
return r,g,b,a;
end
function HealBot_Action_HealthBar(button)
local name = button:GetName();
return getglobal(name.."Bar");
end
function HealBot_Action_HealthBar2(button)
local name = button:GetName();
return getglobal(name.."Bar2");
end
function HealBot_AlwaysHeal()
return HealBot_Config.EnableHealthy==1
end
function HealBot_MayHeal(unit)
if not UnitName(unit) or not HealBot_Heals[unit] then return false end
if unit ~= 'target' then return true end
if not HealBot_Config.TargetHeals or UnitCanAttack("player",unit) then return false end
return true;
end
function HealBot_ShouldHeal(unit)
if HealBot_UnitDebuff[unit] and not UnitIsDeadOrGhost(unit) then
if HealBot_Range_Check(unit, 30)==1 then
return true;
end
end
return HealBot_MayHeal(unit) and UnitHealth(unit)>0 and not UnitIsDeadOrGhost(unit)
and (UnitHealth(unit)<UnitHealthMax(unit)*HealBot_Config.AlertLevel or HealBot_AlwaysHeal());
end
function HealBot_Action_ShouldHealSome()
return table.foreach(HealBot_Action_HealButtons, function (index,button)
if (HealBot_ShouldHeal(button.unit)) then return button.unit; end
end);
end
function HealBot_MustHeal(unit)
return HealBot_ShouldHeal(unit) and UnitHealth(unit)<UnitHealthMax(unit)*HealBot_Config.AlertLevel
end
function HealBot_Action_MustHealSome()
return table.foreach(HealBot_Action_HealButtons, function (index,button)
if (HealBot_MustHeal(button.unit)) then return button.unit; end
end);
end
function HealBot_CanHeal(unit)
local SHeal = HealBot_ShouldHeal(unit)
if SHeal then
local spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Left"))
if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Middle")) end
if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Right")) end
if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button4")) end
if not spell then spell = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button5")) end
if not spell then
return false
else
return true
end
end
return false
end
function HealBot_Action_EnableButton(button)
local unit = button.unit;
local hlth=UnitHealth(unit);
local maxhlth=UnitHealthMax(unit);
local name = UnitName(unit);
local bar = HealBot_Action_HealthBar(button);
local bar2 = HealBot_Action_HealthBar2(button);
local bar3 = getglobal(button:GetName().."Bar3");
local btexture=HealBot_Config.btexture[HealBot_Config.Current_Skin];
local bheight=HealBot_Config.bheight[HealBot_Config.Current_Skin];
local sr=HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin];
local sg=HealBot_Config.btextenabledcolg[HealBot_Config.Current_Skin];
local sb=HealBot_Config.btextenabledcolb[HealBot_Config.Current_Skin];
local sa=HealBot_Config.btextenabledcola[HealBot_Config.Current_Skin];
local r,g,b,a = HealBot_HealthColor(button.unit,hlth,maxhlth)
local btextheight=HealBot_Config.btextheight[HealBot_Config.Current_Skin] or 10;
if btextheight == 0 then btextheight = 10 end
local bwidth = HealBot_Config.bwidth[HealBot_Config.Current_Skin]
local textlen = floor(5+(((bwidth*1.8)/btextheight)-(btextheight/2)))
bar:SetMinMaxValues(0,maxhlth);
bar:SetValue(hlth);
local _, englishClass = UnitClass(unit)
local isHealer = false
if englishClass == "PALADIN" or englishClass == "DRUID" or englishClass == "SHAMAN" or englishClass == "PRIEST" then
isHealer = true
end
local pt = UnitPowerType(unit)
if HealBot_Config.ShowManaBars == 1 and UnitManaMax(unit) > 0 and isHealer and pt == 0 then
local pr, pg, pb = 0, 0, 1
if bar3 then
bar3:SetMinMaxValues(0, UnitManaMax(unit))
bar3:SetValue(UnitMana(unit))
bar3:SetStatusBarColor(pr, pg, pb, HealBot_Config.Barcola[HealBot_Config.Current_Skin])
bar3:Show()
bar3:SetHeight(bheight * 0.2)
end
bar:SetHeight(bheight * 0.8)
bar2:SetHeight(bheight * 0.8)
else
if bar3 then
bar3:Hide()
end
bar:SetHeight(bheight)
bar2:SetHeight(bheight)
end
if HealBot_HealsIn[name] then
bar2:SetMinMaxValues(0,maxhlth);
bar2:SetValue(hlth+HealBot_HealsIn[name]);
else
bar2:SetValue(0);
end
bar.txt = getglobal(bar:GetName().."_text");
if (not HealBot_IsCasting and HealBot_CanHeal(unit)) then
button:Enable();
if HealBot_UnitDebuff[unit] then
sr=HealBot_Config.btextcursecolr[HealBot_Config.Current_Skin];
sg=HealBot_Config.btextcursecolg[HealBot_Config.Current_Skin];
sb=HealBot_Config.btextcursecolb[HealBot_Config.Current_Skin];
sa=HealBot_Config.btextcursecola[HealBot_Config.Current_Skin];
elseif HealBot_MissingBuffs[unit] then
r=1.0;
g=1.0;
b=1.0;
sr=0.0;
sg=0.0;
sb=0.0;
end
bar:SetStatusBarColor(r,g,b,HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
bar2:SetStatusBarColor(r,g,b,HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]);
else
button:Disable();
sr=HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
sg=HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
sb=HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin];
sa=HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin];
bar:SetStatusBarColor(r,g,b,HealBot_Config.bardisa[HealBot_Config.Current_Skin]);
bar2:SetStatusBarColor(r,g,b,HealBot_Config.bardisa[HealBot_Config.Current_Skin]);
end
if string.len(name)>textlen then
name = string.sub(name,1,textlen-3) .. '...';
end
bar.txt:SetText(name);
bar.txt:SetTextColor(sr,sg,sb,sa);
for i = 1, 5 do
local icon = getglobal(button:GetName().."BarIcon"..i)
if icon then
if HealBot_UnitIcons and HealBot_UnitIcons[unit] and HealBot_UnitIcons[unit][i] then
icon:SetTexture(HealBot_UnitIcons[unit][i])
icon:Show()
else
icon:Hide()
end
end
end
end
function HealBot_Action_EnableButtons()
table.foreach(HealBot_Action_HealButtons, function (index,button)
HealBot_Action_EnableButton(button);
end);
end
function HealBot_Action_RefreshButton(button)
if not button then return end
if type(button)~="table" then DEFAULT_CHAT_FRAME:AddMessage("***** "..type(button)) end
local unit = button.unit;
if HealBot_MayHeal(unit) then
HealBot_Action_EnableButton(button)
end
end
function HealBot_Action_ResetSkin()
HealBot_Action_PartyChanged()
if HealBot_Options:IsVisible() then
HealBot_DiseaseColorpick:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..HealBot_Config.btexture[HealBot_Config.Current_Skin]..".tga");
HealBot_MagicColorpick:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..HealBot_Config.btexture[HealBot_Config.Current_Skin]..".tga");
HealBot_PoisonColorpick:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..HealBot_Config.btexture[HealBot_Config.Current_Skin]..".tga");
HealBot_CurseColorpick:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..HealBot_Config.btexture[HealBot_Config.Current_Skin]..".tga");
HealBot_EnTextColorpick:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..HealBot_Config.btexture[HealBot_Config.Current_Skin]..".tga");
HealBot_EnTextColorpickin:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..HealBot_Config.btexture[HealBot_Config.Current_Skin]..".tga");
HealBot_DisTextColorpick:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..HealBot_Config.btexture[HealBot_Config.Current_Skin]..".tga");
HealBot_DebTextColorpick:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..HealBot_Config.btexture[HealBot_Config.Current_Skin]..".tga");
HealBot_SetSkinColours()
end
end
function HealBot_Action_RefreshButtons()
table.foreach(HealBot_Action_HealButtons, function (index,button)
HealBot_Action_RefreshButton(button);
end);
end
function HealBot_Action_RefreshButtons(unit)
if unit and HealBot_Action_UnitButtons[unit] then
table.foreach(HealBot_Action_UnitButtons[unit], function (index,button)
HealBot_Action_RefreshButton(button);
end);
else
table.foreach(HealBot_Action_HealButtons, function (index,button)
HealBot_Action_RefreshButton(button);
end);
end
end
function HealBot_Action_PositionButton(button,OsetX,OsetY,bwidth,bheight,checked,header)
local brspace=HealBot_Config.brspace[HealBot_Config.Current_Skin] or 3;
if header then
headerno=headerno+1;
local headerobj=getglobal("HealBot_Action_Header"..headerno);
local tmpY=OsetY
headerobj:SetText(header)
headerobj:Show();
headerobj:ClearAllPoints();
headerobj:SetHeight(bheight);
headerobj:SetWidth(bwidth);
headerobj:SetPoint("TOPLEFT","HealBot_Action","TOPLEFT",OsetX,-OsetY);
headerobj:Disable();
OsetY = OsetY+headerobj:GetHeight()+brspace;
else
local unit = button.unit;
button:SetText(" ");
if (HealBot_MayHeal(unit)) then
button:Show();
button:ClearAllPoints();
button:SetHeight(bheight);
if checked then
button:SetWidth(bwidth-14);
button:SetPoint("TOPLEFT","HealBot_Action","TOPLEFT",OsetX+14,-OsetY);
else
button:SetWidth(bwidth);
button:SetPoint("TOPLEFT","HealBot_Action","TOPLEFT",OsetX,-OsetY);
end
OsetY = OsetY+button:GetHeight()+brspace;
else
button:Hide();
end
end
return OsetY;
end
function HealBot_Action_SetHeightWidth(width,height,bwidth)
if HealBot_ActionHeight then
HealBot_Action:SetHeight(HealBot_ActionHeight);
end
if HealBot_Config.GrowUpwards==1 then
local left,bottom = HealBot_Action:GetLeft(),HealBot_Action:GetBottom();
if left and bottom then
if HealBot_Config.PanelAnchorX==-1 then HealBot_Config.PanelAnchorX=left; end
if HealBot_Config.PanelAnchorY==-1 then HealBot_Config.PanelAnchorY=bottom; end
HealBot_Action:ClearAllPoints();
HealBot_Action:SetPoint("BOTTOMLEFT","UIParent","BOTTOMLEFT",HealBot_Config.PanelAnchorX,HealBot_Config.PanelAnchorY);
end
else
local left,top = HealBot_Action:GetLeft(),HealBot_Action:GetTop();
if left and top then
HealBot_Action:ClearAllPoints();
HealBot_Action:SetPoint("TOPLEFT","UIParent","BOTTOMLEFT",left,top);
end
end
HealBot_Action:SetHeight(height);
HealBot_ActionHeight = height;
HealBot_Action:SetWidth(width+bwidth+10)
end
function HealBot_Action_SetHealButton(index,unit)
if not index then
HealBot_Action_HealButtons = {};
HealBot_Action_UnitButtons = {};
return nil
end
local button = getglobal("HealBot_Action_HealUnit"..index);
button.unit = unit;
if unit then
table.insert(HealBot_Action_HealButtons,button);
if not HealBot_Action_UnitButtons[unit] then HealBot_Action_UnitButtons[unit] = {} end
table.insert(HealBot_Action_UnitButtons[unit],button);
else
button:Hide();
end
return button;
end
function HealBot_Action_PartyChanged()
if not HealBot_IsFighting then
local numBars = 0;
local numHeaders = 0;
local TempMaxH=0;
local HeaderPos = {};
for j=1,15 do
local headerobj=getglobal("HealBot_Action_Header"..j);
headerobj:SetText(" ")
headerobj:Hide();
end
local bwidth = HealBot_Config.bwidth[HealBot_Config.Current_Skin] or 85;
local sr=HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin] or 0.4;
local sg=HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin] or 0.4;
local sb=HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin] or 0.4;
local sa=HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin] or 0.6;
local bheight=HealBot_Config.bheight[HealBot_Config.Current_Skin] or 18;
local btexture=HealBot_Config.btexture[HealBot_Config.Current_Skin] or 5;
local bcspace=HealBot_Config.bcspace[HealBot_Config.Current_Skin] or 4;
local cols=HealBot_Config.numcols[HealBot_Config.Current_Skin] or 2;
local btextheight=HealBot_Config.btextheight[HealBot_Config.Current_Skin] or 10;
local abortsize=HealBot_Config.abortsize[HealBot_Config.Current_Skin] or 10;
local checked_start=0;
local checked_end=0;
headerno=0;
for j=1,41 do
HealBot_Action_SetHealButton(j,nil);
end
for j=51,60 do
HealBot_Action_SetHealButton(j,nil);
end
HealBot_Action_SetHealButton();
local i = 0;
local last = 0;
local GroupValid=numBars;
last = last+6
if HealBot_Config.GroupHeals==1 then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 then
HeaderPos[i+1] = HEALBOT_OPTIONS_GROUPHEALS
end
for _,unit in ipairs(HealBot_Action_HealGroup) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i+1;
HealBot_Action_SetHealButton(i,unit);
numBars=numBars+1;
end
if i==last then break end
end
end
if numBars>GroupValid and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 then
numBars=numBars+1;
numHeaders=numHeaders+1;
end
last = last+10
local TankValid=numBars;
if HealBot_Config.TankHeals==1 then
if GetNumRaidMembers()>0 and CT_RA_MainTanks then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 then
HeaderPos[i+1] = HEALBOT_OPTIONS_TANKHEALS
end
for j=1,10 do
if CT_RA_MainTanks[j] then
for k=1,GetNumRaidMembers() do
local unit = "raid"..k;
local PossibleMT=1;
if UnitInParty(unit) and HealBot_Config.GroupHeals==1 then
if not UnitIsUnit(unit, "player") then
PossibleMT=0;
end
end
if PossibleMT==1 then
if UnitName(unit)==CT_RA_MainTanks[j] then
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i+1;
HealBot_Action_SetHealButton(i,unit);
numBars=numBars+1;
end
end
end
end
end
if i==last then break end
end
end
end
if numBars>TankValid and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 then
numBars=numBars+1;
numHeaders=numHeaders+1;
end
last = last+10;
local h=50;
local TargetValid=numBars;
if HealBot_Config.TargetHeals==1 then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 then
HeaderPos[i+1] = HEALBOT_OPTIONS_TARGETHEALS
end
for _,unit in ipairs(HealBot_Action_HealTarget) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i+1;
h = h+1;
if checked_start==0 then checked_start=i; end
checked_end=i;
HealBot_Action_SetHealButton(h,unit);
local check = getglobal("HealBot_Action_HealUnit"..h.."Check");
check.unit = unit;
check:SetChecked(1);
check:Show();
numBars=numBars+1;
end
if i==last then break end
end
last = last+1
unit = HealBot_TargetName()
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal("target") then
i = i+1;
h = h+1;
if h<61 then
HealBot_Action_SetHealButton(h,"target");
local check = getglobal("HealBot_Action_HealUnit"..h.."Check");
check:SetChecked(0);
check.unit = unit;
if check.unit then
if checked_start==0 then checked_start=i; end
checked_end=i;
check:Show();
else
check:Hide();
end
else
HealBot_Action_SetHealButton(i,"target");
end
numBars=numBars+1;
end
end
if numBars>TargetValid and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 then
numBars=numBars+1;
numHeaders=numHeaders+1;
end
last = last+40
local ExtraValid=numBars;
if HealBot_Config.EmergencyHeals==1 then
local order = {};
local units = {};
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 and HealBot_Config.ExtraOrder==1 then
HeaderPos[i+1] = HEALBOT_OPTIONS_EMERGENCYHEALS
numBars=numBars+1;
numHeaders=numHeaders+1;
end
if HealBot_Config.EmergIncMonitor==1 then
if GetNumRaidMembers()>0 then
for j=1,40 do
local PossibleEmerg=1;
local unit = "raid"..j;
local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(j);
if not name then name="not known" end
if not class then class="not known" end
if not subgroup then subgroup="not known" end
if UnitInParty(unit) and HealBot_Config.GroupHeals==1 then
PossibleEmerg=0;
end
if PossibleEmerg==1 then
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
if HealBot_Config.ExtraOrder==1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder==2 then
order[unit] = class;
elseif HealBot_Config.ExtraOrder==3 then
order[unit] = subgroup;
else
order[unit] = 0-UnitHealthMax(unit);
if UnitHealthMax(unit)>TempMaxH then TempMaxH=UnitHealthMax(unit); end
end
table.insert(units,unit);
numBars=numBars+1;
end
end
end
else
for _,unit in ipairs(HealBot_Action_HealGroup) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
if HealBot_Config.ExtraOrder==1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder==2 then
order[unit] = class;
elseif HealBot_Config.ExtraOrder==3 then
order[unit] = subgroup;
else
order[unit] = 0-UnitHealthMax(unit);
if UnitHealthMax(unit)>TempMaxH then TempMaxH=UnitHealthMax(unit); end
end
table.insert(units,unit);
numBars=numBars+1;
end
end
end
else
if GetNumRaidMembers()>0 then
for j=1,40 do
local unit = "raid"..j;
local Class = UnitClass(unit);
local ProcessUnit = 0;
local PossibleEmerg=1;
local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(j);
if not name then name="not known" end
if not class then class="not known" end
if not subgroup then subgroup="not known" end
if HealBot_EmergInc[Class]==1 then
ProcessUnit = 1;
end
if UnitInParty(unit) and HealBot_Config.GroupHeals==1 then
PossibleEmerg=0;
end
if ProcessUnit==1 and PossibleEmerg==1 then
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
if HealBot_Config.ExtraOrder==1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder==2 then
order[unit] = class;
elseif HealBot_Config.ExtraOrder==3 then
order[unit] = subgroup;
else
order[unit] = 0-UnitHealthMax(unit);
if UnitHealthMax(unit)>TempMaxH then TempMaxH=UnitHealthMax(unit); end
end
table.insert(units,unit);
numBars=numBars+1;
end
end
end
else
for _,unit in ipairs(HealBot_Action_HealGroup) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
if HealBot_Config.ExtraOrder==1 then
order[unit] = name;
elseif HealBot_Config.ExtraOrder==2 then
order[unit] = class;
elseif HealBot_Config.ExtraOrder==3 then
order[unit] = subgroup;
else
order[unit] = 0-UnitHealthMax(unit);
if UnitHealthMax(unit)>TempMaxH then TempMaxH=UnitHealthMax(unit); end
end
table.insert(units,unit);
numBars=numBars+1;
end
end
end
end
table.sort(units,function (a,b)
if order[a]<order[b] then return true end
if order[a]>order[b] then return false end
return a<b
end)
local TempSort="init"
TempMaxH=ceil(TempMaxH/1000)*1000;
if GetNumRaidMembers()>0 then
for j=1,40 do
if not units[j] then break end
local name, rank, subgroup, level, class, fileName, zone, online, isDead = GetRaidRosterInfo(strsub(units[j], 5));
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 and HealBot_Config.ExtraOrder==2 and TempSort~=class then
TempSort=class
HeaderPos[i+1] = class
numBars=numBars+1;
numHeaders=numHeaders+1;
end
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 and HealBot_Config.ExtraOrder==3 and TempSort~=subgroup then
TempSort=subgroup
HeaderPos[i+1] = HEALBOT_OPTIONS_GROUPHEALS..subgroup
numBars=numBars+1;
numHeaders=numHeaders+1;
end
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 and HealBot_Config.ExtraOrder==4 and TempMaxH>UnitHealthMax(units[j]) then
TempMaxH=TempMaxH-1000
HeaderPos[i+1] = ">"..tostring(TempMaxH/1000).."k"
numBars=numBars+1;
numHeaders=numHeaders+1;
end
i = i+1;
HealBot_Action_SetHealButton(i,units[j]);
if i==last then break end
end
end
end
if numBars==ExtraValid+1 and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]==1 then
HeaderPos[i+1] = nil;
numBars=numBars-1;
end
OffsetY = 10;
OffsetX = 10;
MaxOffsetY=0;
if cols>(numBars-numHeaders) then
cols=numBars-numHeaders;
end
if cols <= 0 then cols = 1 end
local h=1;
local i=0;
local z=1;
table.foreach(HealBot_Action_HealButtons, function (index,button)
i=i+1;
local checked=false;
local header;
if HeaderPos[i] then
header=HeaderPos[i];
OffsetY = HealBot_Action_PositionButton(nil,OffsetX,OffsetY,bwidth,bheight,checked,header);
if h==ceil((numBars)/cols) and z<numBars then
h=0;
if MaxOffsetY<OffsetY then MaxOffsetY = OffsetY; end
OffsetY = 10;
OffsetX = OffsetX + bwidth+bcspace;
-- z=z+1;
end
h=h+1;
z=z+1;
end
if checked_start<=i and checked_end>=i then checked=true; end
OffsetY = HealBot_Action_PositionButton(button,OffsetX,OffsetY,bwidth,bheight,checked,nil);
if h==ceil((numBars)/cols) and z<numBars then
h=0;
if MaxOffsetY<OffsetY then MaxOffsetY = OffsetY; end
OffsetY = 10;
OffsetX = OffsetX + bwidth+bcspace;
end
z=z+1;
h=h+1;
local bar = HealBot_Action_HealthBar(button);
local bar2 = HealBot_Action_HealthBar2(button);
bar.txt = getglobal(bar:GetName().."_text");
bar:SetHeight(bheight);
bar:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..btexture..".tga");
bar.txt:SetTextHeight(btextheight);
local barScale = bar:GetScale();
bar:SetScale(barScale + 0.01);
bar:SetScale(barScale);
bar2:SetHeight(bheight);
bar2:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..btexture..".tga");
end);
if MaxOffsetY<OffsetY then MaxOffsetY = OffsetY; end
if HealBot_Config.HideOptions==1 then
HealBot_Action_OptionsButton:Hide();
else
HealBot_Action_OptionsButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10);
HealBot_Action_OptionsButton:Show();
MaxOffsetY = MaxOffsetY+30;
end
if HealBot_Config.HideAbort==1 then
HealBot_Action_AbortButton:Hide();
else
local bar = HealBot_Action_HealthBar(HealBot_Action_AbortButton);
local denom = 6-(abortsize/3)
if denom == 0 then denom = 1 end
local width=(bwidth-12)+(OffsetX/denom);
bar.txt = getglobal(bar:GetName().."_text");
bar.txt:SetTextColor(sr,sg,sb,sa);
bar.txt:SetText(HEALBOT_ACTION_ABORT);
bar:SetStatusBarTexture("Interface\\AddOns\\HealBotBlue\\images\\bar"..btexture..".tga");
bar:SetMinMaxValues(0,100);
bar:SetValue(100);
bar:ClearAllPoints();
bar:SetHeight(bheight+abortsize);
bar:SetWidth(width);
bar:SetStatusBarColor(0.1,0.1,0.4,0);
MaxOffsetY = MaxOffsetY+30+abortsize;
HealBot_Action_AbortButton:ClearAllPoints();
HealBot_Action_AbortButton:SetWidth(width)
HealBot_Action_AbortButton:SetHeight(bheight+abortsize);
if HealBot_Config.HideOptions==1 then
HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10);
bar:SetPoint("BOTTOM","HealBot_Action","BOTTOM",0,10);
else
HealBot_Action_AbortButton:SetPoint("BOTTOM","HealBot_Action_OptionsButton","TOP",0,10);
bar:SetPoint("BOTTOM","HealBot_Action_OptionsButton","TOP",0,10);
end
HealBot_Action_AbortButton:Show();
end
HealBot_Action_SetHeightWidth(OffsetX, MaxOffsetY+10, bwidth);
end
HealBot_Action_RefreshButtons();
end
function HealBot_Action_Reset()
HealBot_Action:ClearAllPoints();
HealBot_Action:SetPoint("TOP","MinimapCluster","BOTTOM",7,10);
HealBot_Action_HealTarget = {};
HealBot_Action_PartyChanged();
end
function HealBot_Action_RefreshTooltip(unit)
if HealBot_Config.ShowTooltip==0 then return end
if not unit then unit = HealBot_Action_TooltipUnit end
if not unit then return end;
local hlth=UnitHealth(unit);
local maxhlth=UnitHealthMax(unit);
local spellLeft = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Left"));
local spellMiddle = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Middle"));
local spellRight = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Right"));
local spellButton4 = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button4"));
local spellButton5 = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button5"));
local linenum = 1
HealBot_Action_Tooltip_ClearLines();
if HealBot_Config.Tooltip_ShowTarget==1 then
if UnitName(unit) then
HealBot_Action_Tooltip_SetLineLeft(UnitName(unit),0,1,0,linenum)
if hlth and maxhlth then
local r,g,b,a=HealBot_HealthColor(unit,hlth,maxhlth);
HealBot_Action_Tooltip_SetLineRight(hlth.."/"..maxhlth.." (-"..maxhlth-hlth..")",r,g,b,linenum)
end
end
end
if HealBot_Config.Tooltip_ShowSpellDetail==1 then
if spellLeft then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONLEFT.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellLeft,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellLeft,linenum);
end
if spellMiddle then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONMIDDLE.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellMiddle,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellMiddle,linenum);
end
if spellRight then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONRIGHT.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellRight,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellRight,linenum);
end
if spellButton4 then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON4.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellButton4,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellButton4,linenum);
end
if spellButton5 then
linenum=linenum+2
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON5.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellButton5,1,1,0,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellButton5,linenum);
end
else
if spellLeft then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONLEFT..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellLeft),1,1,1,linenum)
end
if spellMiddle then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONMIDDLE..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellMiddle),1,1,1,linenum)
end
if spellRight then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONRIGHT..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellRight),1,1,1,linenum)
end
if spellButton4 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON4..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellButton4),1,1,1,linenum)
end
if spellButton5 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON5..":",1,1,0,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellButton5),1,1,1,linenum)
end
end
if HealBot_Config.Tooltip_Recommend==1 then
local Instant_check=0;
if HealBot_Config.Tooltip_ShowSpellDetail==1 then linenum=linenum+1; end
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_TOOLTIP_RECOMMENDTEXT,0.8,0.8,0,linenum)
Instant_check=0;
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellLeft,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellMiddle,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellRight,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellButton4,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellButton5,"upd",linenum,Instant_check);
if Instant_check==0 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(" None",0.4,0.4,0.4,linenum)
end
end
local height = 20
local width = 0
for i = 1, linenum do
local txtL = getglobal("HealBot_TooltipTextL" .. i)
local txtR = getglobal("HealBot_TooltipTextR" .. i)
height = height + txtL:GetHeight() + 2
if (txtL:GetWidth() + txtR:GetWidth() + 25 > width) then
width = txtL:GetWidth() + txtR:GetWidth() + 25
end
end
HealBot_Tooltip:SetWidth(width)
HealBot_Tooltip:SetHeight(height)
HealBot_Tooltip:ClearAllPoints();
if HealBot_Config.TooltipPos>1 then
if HealBot_Config.TooltipPos==2 then
HealBot_Tooltip:SetPoint("TOPRIGHT","HealBot_Action","TOPLEFT",0,0);
elseif HealBot_Config.TooltipPos==3 then
HealBot_Tooltip:SetPoint("TOPLEFT","HealBot_Action","RIGHT",0,0);
elseif HealBot_Config.TooltipPos==4 then
HealBot_Tooltip:SetPoint("BOTTOM","HealBot_Action","TOP",0,0);
else
HealBot_Tooltip:SetPoint("TOP","HealBot_Action","BOTTOM",0,0);
end
else
HealBot_Tooltip:SetPoint("BOTTOMRIGHT","WorldFrame","BOTTOMRIGHT",-105,105);
end
HealBot_Tooltip:Show();
end
function HealBot_Action_Tooltip_SpellInfo(spell,linenum)
local text
if HealBot_Spells[spell] then
if HealBot_Spells[spell].HealsDur>0 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_WORDS_CAST..": "..HealBot_Spells[spell].CastTime.." "..HEALBOT_WORDS_SEC..".",0.8,0.8,0.8,linenum)
HealBot_Action_Tooltip_SetLineRight("Mana: "..HealBot_Spells[spell].Mana,0.5,0.5,1,linenum)
if HealBot_Spells[spell].HealsMax>0 then
local Heals = HEALBOT_HEAL.." "
if HealBot_Spells[spell].Shield then
Heals = HEALBOT_TOOLTIP_SHIELD.." "
end
if HealBot_Spells[spell].HealsMin<HealBot_Spells[spell].HealsMax then
text=Heals..format("%d", HealBot_Spells[spell].HealsMin + HealBot_Spells[spell].RealHealing) .." "..HEALBOT_WORDS_TO.." "..format("%d",HealBot_Spells[spell].HealsMax + HealBot_Spells[spell].RealHealing)
else
text=Heals..format("%d", HealBot_Spells[spell].HealsMax + HealBot_Spells[spell].RealHealing)
end
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,1,1,1,linenum)
end
if HealBot_Spells[spell].HealsExt>0 then
text=HEALBOT_HEAL.." "..HealBot_Spells[spell].HealsDur.." "..HEALBOT_WORDS_OVER.." "..HealBot_Spells[spell].Duration-HealBot_Spells[spell].CastTime.." sec."
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,1,1,1,linenum)
end
if not HealBot_Spells[spell].Shield then
text=HEALBOT_TOOLTIP_ITEMBONUS.." +"..HealBot_GetBonus().." | "..HEALBOT_TOOLTIP_ACTUALBONUS.." +"..HealBot_Spells[spell].RealHealing.." "
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,0.8,0.8,0.8,linenum)
end
end
end
return linenum
end
function HealBot_Action_Tooltip_SpellSummary(spell)
local ret_val = " ";
if HealBot_Spells[spell] then
if HealBot_Spells[spell].HealsDur and HealBot_Spells[spell].HealsDur>0 then
if HealBot_Spells[spell].HealsMax and HealBot_Spells[spell].HealsMax>0 then
local Heals = " "..HEALBOT_HEAL.." ";
if HealBot_Spells[spell].Shield then
Heals = " "..HEALBOT_TOOLTIP_SHIELD.." ";
end
if (HealBot_Spells[spell].HealsMin or 0)<(HealBot_Spells[spell].HealsMax or 0) then
ret_val=ret_val..Heals..format("%d", (((HealBot_Spells[spell].HealsMin or 0)+(HealBot_Spells[spell].HealsMax or 0))/2) + (HealBot_Spells[spell].RealHealing or 0));
else
ret_val=ret_val..Heals..format("%d", (HealBot_Spells[spell].HealsMax or 0) + (HealBot_Spells[spell].RealHealing or 0));
end
end
if HealBot_Spells[spell].HealsExt and HealBot_Spells[spell].HealsExt>0 then
ret_val=ret_val.." HoT "..HealBot_Spells[spell].HealsDur;
end
if HealBot_Spells[spell].Mana then
ret_val=ret_val.." "..HEALBOT_WORDS_FOR.." "..HealBot_Spells[spell].Mana.." Mana";
end
end
end
if string.len(ret_val)<5 then ret_val = " - "..spell; end
return ret_val
end
function HealBot_Action_Tooltip_CheckForInstant(unit,spell,upd,linenum,check)
if HealBot_Spells[spell] then
if HealBot_Spells[spell].CastTime == 0 then
if HealBot_UnitAffected(unit,HealBot_Spells[spell].Buff) then return check,linenum end;
if HealBot_UnitAffected(unit,HealBot_Spells[spell].Debuff) then return check,linenum end;
if upd=="upd" then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(" "..spell,1,1,1,linenum)
end
else
return check,linenum;
end
else
return check,linenum
end
return check+1,linenum;
end
function HealBot_Action_Tooltip_SetLineLeft(Text,R,G,B,linenum)
local txtL = getglobal("HealBot_TooltipTextL" .. linenum)
txtL:SetTextColor(R,G,B)
txtL:SetText(Text)
txtL:Show()
end
function HealBot_Action_Tooltip_SetLineRight(Text,R,G,B,linenum)
local txtR = getglobal("HealBot_TooltipTextR" .. linenum)
txtR:SetTextColor(R,G,B)
txtR:SetText(Text)
txtR:Show()
end
function HealBot_Action_Tooltip_ClearLines()
for j=1,30 do
local txtL = getglobal("HealBot_TooltipTextL" .. j)
local txtR = getglobal("HealBot_TooltipTextR" .. j)
txtL:SetText(" ")
txtR:SetText(" ")
txtL:Hide()
txtR:Hide()
end
end
function HealBot_Action_ShowTooltip(this)
if HealBot_Config.ShowTooltip==0 then return end
if not this.unit then return end;
if not this:IsEnabled() then return end;
-- GameTooltip_SetDefaultAnchor(HealBot_Tooltip,this);
HealBot_Action_TooltipUnit = this.unit;
HealBot_Action_RefreshTooltip(this.unit);
end
function HealBot_Action_HideTooltip(this)
if HealBot_Config.ShowTooltip==0 then return end
HealBot_Tooltip:Hide();
HealBot_Action_TooltipUnit = nil;
end
function HealBot_Action_Refresh(unit)
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
if HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then
HealBot_Action:Hide();
else
HealBot_Action_RefreshButtons(unit);
end
return;
end
HealBot_Action_RefreshButtons(unit);
if not HealBot_IsFighting then
if (HealBot_Action_MustHealSome()) then
HealBot_Action:Show();
elseif HealBot_AbortButton==0 then
HealBot_Action:Show();
elseif (not HealBot_Action_ShouldHealSome()) then
if HealBot_AbortButton==1 and HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then
HealBot_Action:Hide();
end
end
end
end
function HealBot_Action_SpellPattern(button)
local combos = HealBot_Config.KeyCombo[UnitClass("player")]
if not combos then return nil end
local press = button;
if IsAltKeyDown() then press = "Alt"..press end
if IsControlKeyDown() then press = "Ctrl"..press end
if IsShiftKeyDown() then press = "Shift"..press end
return combos[press]
end
function HealBot_Decode_Button(button)
if button=="RightButton" then
button="Right";
elseif button=="MiddleButton" then
button="Middle";
elseif button=="Button4" then
button="Button4";
elseif button=="Button5" then
button="Button5";
else
button="Left";
end
return button
end
--------------------------------------------------------------------------------------------------
-- Widget_OnFoo functions
--------------------------------------------------------------------------------------------------
function HealBot_Action_HealUnit_OnLoad(this)
this:RegisterForClicks("LeftButtonUp", "RightButtonUp", "MiddleButtonUp", "Button4Up", "Button5Up");
end
function HealBot_Action_HealUnit_OnEnter(this)
HealBot_Action_ShowTooltip(this);
end
function HealBot_Action_HealUnit_OnLeave(this)
HealBot_Action_HideTooltip(this);
end
function HealBot_Action_HealUnit_OnClick(this,button)
local decode_button = HealBot_Decode_Button(button);
local pattern = HealBot_Action_SpellPattern(decode_button);
-- Buff casting override
if HealBot_Config.BuffWatch == 1 then
local inCombat = UnitAffectingCombat("player")
if (not inCombat) or (HealBot_Config.BuffWatchInCombat == 1) then
local myClass = UnitClass("player")
if HealBot_MissingBuffs[this.unit] then
local missingBuff = HealBot_MissingBuffs[this.unit]
if decode_button == "Left" or decode_button == "Right" then
HealBot_CastSpellOnFriend(missingBuff, this.unit)
return
end
end
end
end
HealBot_HealUnit(this.unit,pattern);
end
function HealBot_Action_HealUnitCheck_OnClick(this)
if not this.unit then return end
if this:GetChecked() then
table.insert(HealBot_Action_HealTarget,this.unit)
else
for i=1,table.getn(HealBot_Action_HealTarget) do
if HealBot_Action_HealTarget[i]==this.unit then
table.remove(HealBot_Action_HealTarget,i);
break;
end
end
end
HealBot_Action_PartyChanged();
end
function HealBot_Action_OptionsButton_OnClick(this)
HealBot_TogglePanel(HealBot_Options);
end
function HealBot_Action_AbortButton_OnClick(this)
SpellStopCasting();
end
local HealBot_CT_RA_UpdateMTs_Old;
function HealBot_CT_RA_UpdateMTs()
local value = HealBot_CT_RA_UpdateMTs_Old();
return value;
end
function HealBot_CT_RaidAssist_DEAD()
-- if (type(CT_RA_MemberFrame_OnClick)=="function") then
-- HealBot_CT_RA_CustomOnClickFunction_Old = CT_RA_CustomOnClickFunction;
-- CT_RA_CustomOnClickFunction = HealBot_CT_RA_CustomOnClickFunction;
-- end
-- if (type(CT_RA_UpdateMTs)=="function") then
-- HealBot_CT_RA_UpdateMTs_Old = CT_RA_UpdateMTs;
-- CT_RA_UpdateMTs = HealBot_CT_RA_UpdateMTs;
-- end
end
--------------------------------------------------------------------------------------------------
-- Frame_OnFoo functions
--------------------------------------------------------------------------------------------------
function HealBot_Action_OnLoad(this)
-- HealBot_CT_RaidAssist();
end
function HealBot_Action_OnShow(this)
if HealBot_Config.PanelSounds==1 then
PlaySound("igAbilityOpen");
end
HealBot_Config.ActionVisible = 1
HealBot_Action:SetBackdropColor(
HealBot_Config.backcolr[HealBot_Config.Current_Skin],
HealBot_Config.backcolg[HealBot_Config.Current_Skin],
HealBot_Config.backcolb[HealBot_Config.Current_Skin],
HealBot_Config.backcola[HealBot_Config.Current_Skin]);
HealBot_Action:SetBackdropBorderColor(
HealBot_Config.borcolr[HealBot_Config.Current_Skin],
HealBot_Config.borcolg[HealBot_Config.Current_Skin],
HealBot_Config.borcolb[HealBot_Config.Current_Skin],
HealBot_Config.borcola[HealBot_Config.Current_Skin]);
end
function HealBot_Action_OnHide(this)
HealBot_StopMoving(this);
HealBot_Config.ActionVisible = 0
end
function HealBot_Action_OnMouseDown(this,button)
if button~="RightButton" then
if HealBot_Config.ActionLocked==0 then
HealBot_StartMoving(this);
end
end
end
function HealBot_Action_OnMouseUp(this,button)
if button~="RightButton" then
HealBot_StopMoving(this);
elseif not HealBot_IsFighting then
HealBot_Action_OptionsButton_OnClick();
end
end
function HealBot_Action_OnClick(this,button)
-- HealBot_Action_AddDebug("OnClick("..button..")");
end
function HealBot_Action_OnDragStart(this,button)
if HealBot_Config.ActionLocked==0 then
HealBot_StartMoving(this);
end
end
function HealBot_Action_OnDragStop(this)
HealBot_StopMoving(this);
end
-- http://www.flexbarforums.com/viewtopic.php?t=66
function HealBot_Action_OnKey(this,key,state)
local command = GetBindingAction(key);
if command then
DEFAULT_CHAT_FRAME:AddMessage(key.." "..state.." "..(command or "nil"));
keystate = state
RunBinding(command,keystate)
end
DEFAULT_CHAT_FRAME:AddMessage("HealBot_Action_OnKey - "..key);
if key=="SHIFT" or key=="CTRL" or key=="ALT" then
DEFAULT_CHAT_FRAME:AddMessage((IsShiftKeyDown() or 0).." "..(IsControlKeyDown() or 0).." "..(IsAltKeyDown() or 0));
HealBot_Action_Refresh();
end
end