vanilla-wow-addons – Rev 1
?pathlinks?
local IMBA_SLASH_COMMAND = "/imba";
IMBA_Version="1.4";
IMBA_RaidVersions={};
IMBA_Addons = {};
IMBA_SavedVariables = {};
IMBA_SavedVariables.Mods = {};
-- Raid zones
IMBA_LOCATIONS_MC = "Molten Core";
IMBA_LOCATIONS_BWL = "Blackwing Lair";
IMBA_LOCATIONS_ZG = "Zul'Gurub";
IMBA_LOCATIONS_AQ20 = "Ruins of Ahn'Qiraj";
IMBA_LOCATIONS_AQ40 = "Temple of Ahn'Qiraj";
IMBA_LOCATIONS_NAXX = "Naxxramas";
IMBA_LOCATIONS_NAXX_ABOM = "Naxxramas - Abomination Wing";
IMBA_LOCATIONS_NAXX_DK = "Naxxramas - Deathknight Wing";
IMBA_LOCATIONS_NAXX_PLAGUE = "Naxxramas - Plague Wing";
IMBA_LOCATIONS_NAXX_SPIDER = "Naxxramas - Spider Wing";
IMBA_LOCATIONS_NAXX_LAIR = "Naxxramas - Frostwyrm Lair";
IMBA_LOCATIONS_OTHER = "Other";
IMBA_Locations = {{IMBA_LOCATIONS_MC,0}, {IMBA_LOCATIONS_BWL,0}, {IMBA_LOCATIONS_ZG,0}, {IMBA_LOCATIONS_AQ20,0}, {IMBA_LOCATIONS_AQ40,0}, { IMBA_LOCATIONS_NAXX_ABOM, 0 }, { IMBA_LOCATIONS_NAXX_DK, 0 }, { IMBA_LOCATIONS_NAXX_PLAGUE, 0 }, { IMBA_LOCATIONS_NAXX_SPIDER, 0 }, { IMBA_LOCATIONS_NAXX_LAIR, 0}, { IMBA_LOCATIONS_OTHER, 0}};
IMBA_DEATH_MSG = "(.+) dies."
if (GetLocale()=="frFR") then
--Translation by A.su.K.A
IMBA_DEATH_MSG = "(.+) meurt."
end
function IMBA_SetBackdrops(num)
for k, v in IMBA_Addons do
if v.MainFrame~=nil then
getglobal(v.MainFrame):SetBackdrop(IMBA_BG[num].table);
getglobal(v.MainFrame):SetBackdropBorderColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b,IMBA_SavedVariables.Colors["FrameBorder"].a);
getglobal(v.MainFrame):SetBackdropColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b,IMBA_SavedVariables.Colors["FrameBG"].a);
if getglobal(v.MainFrame.."_Close_Image") then
getglobal(v.MainFrame.."_Close_Image"):SetTexture(IMBA_BG[num].close);
getglobal(v.MainFrame.."_Close_Image"):SetVertexColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b,IMBA_SavedVariables.Colors["FrameBorder"].a);
end
end
end
IMBA_Alerts:SetBackdrop(IMBA_BG[num].table);
if IMBA_SavedVariables.ShowAlertWindow then
IMBA_Alerts:SetBackdropBorderColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b,IMBA_SavedVariables.Colors["FrameBorder"].a);
IMBA_Alerts:SetBackdropColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b,IMBA_SavedVariables.Colors["FrameBG"].a);
else
IMBA_Alerts:SetBackdropBorderColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b,0);
IMBA_Alerts:SetBackdropColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b,0);
end
end
function IMBA_HideCloseButtons()
for k, v in IMBA_Addons do
if v.MainFrame~=nil then
if getglobal(v.MainFrame.."_Close") then
getglobal(v.MainFrame.."_Close"):Hide();
end
end
end
end
function IMBA_ShowCloseButtons()
for k, v in IMBA_Addons do
if v.MainFrame~=nil then
if getglobal(v.MainFrame.."_Close") then
getglobal(v.MainFrame.."_Close"):Show();
end
end
end
end
function IMBA_ResetPositions()
for k, v in IMBA_Addons do
if v.MainFrame~=nil then
getglobal(v.MainFrame):ClearAllPoints();
getglobal(v.MainFrame):SetPoint("CENTER", "UIParent", "CENTER", 0, 0);
end
end
IMBA_Alerts:ClearAllPoints();
IMBA_Alerts:SetPoint("CENTER", "UIParent", "CENTER", 0, 0);
end
function IMBA_AddAddon(BossName, Description, Location, RegenActivator, YellActivator, TestYell, MainFrame)
IMBA_Addons[BossName]={};
IMBA_Addons[BossName].Active=true;
IMBA_Addons[BossName].Running=false;
IMBA_Addons[BossName].BossName=BossName;
IMBA_Addons[BossName].Location=Location;
IMBA_Addons[BossName].Description=Description;
IMBA_Addons[BossName].RegenActivator=RegenActivator;
IMBA_Addons[BossName].YellActivator=YellActivator;
IMBA_Addons[BossName].TestYell=TestYell;
IMBA_Addons[BossName].MainFrame=MainFrame;
IMBA_Addons[BossName].MultiBoss=0;
IMBA_Addons[BossName].BossNames={};
IMBA_SavedVariables.Mods[BossName]={};
IMBA_SavedVariables.Mods[BossName].Active=true;
IMBA_SavedVariables.Mods[BossName].Visible=false;
getglobal(MainFrame):Hide();
--Sync Variables we track if the last change has been sent(delay by one cycle to allow for combat log variances),
--then check the last value to see if its change update the last value and set Sent to false
--The method determines how the variable gets sycned ("MAX" - whichever value is max gets chosen, "MIN" whatever value is minimum is chosen, "REPLACE" allows you to overwrite the value)
IMBA_Addons[BossName].SyncVariableFunc=nil;
IMBA_Addons[BossName].SyncVariablesSent={};
IMBA_Addons[BossName].SyncVariablesLastVal={};
IMBA_Addons[BossName].SyncVariablesMethod={};
--DEFAULT_CHAT_FRAME:AddMessage("IMBA - "..BossName.." Added", 1.0, 1.0, 0.0);
end
function IMBA_AddBossName(AddonName,BossName)
IMBA_Addons[AddonName].MultiBoss=IMBA_Addons[AddonName].MultiBoss+1;
IMBA_Addons[AddonName].BossNames[IMBA_Addons[AddonName].MultiBoss]=BossName;
IMBA_Addons[AddonName].BossesAlive=IMBA_Addons[AddonName].MultiBoss;
end
function IMBA_AddOption(AddonName,OptionText,Func,ValueFunc)
if IMBA_Addons[AddonName].Options==nil then
IMBA_Addons[AddonName].Options={};
end
IMBA_Addons[AddonName].Options[OptionText]={};
IMBA_Addons[AddonName].Options[OptionText].text=OptionText;
IMBA_Addons[AddonName].Options[OptionText].valuefunc=ValueFunc;
IMBA_Addons[AddonName].Options[OptionText].func=Func;
if IMBA_Addons[AddonName].OptionsOrder==nil then
IMBA_Addons[AddonName].OptionsOrder={};
end
tinsert(IMBA_Addons[AddonName].OptionsOrder,OptionText);
end
function IMBA_AddOption2(AddonName,VarName, OptionText)
if IMBA_SavedVariables.Mods[AddonName].Var==nil then
IMBA_SavedVariables.Mods[AddonName].Var={};
IMBA_Addons[AddonName].VarText={};
end
IMBA_SavedVariables.Mods[AddonName].Var[VarName]=false;
IMBA_Addons[AddonName].VarText[VarName]=OptionText;
if IMBA_Addons[AddonName].OptionsOrder2==nil then
IMBA_Addons[AddonName].OptionsOrder2={};
end
tinsert(IMBA_Addons[AddonName].OptionsOrder2,VarName);
end
function IMBA_CheckVar(AddonName,VarName)
if IMBA_SavedVariables.Mods[AddonName]==nil then
IMBA_SavedVariables.Mods[AddonName]={};
end
if IMBA_SavedVariables.Mods[AddonName].Var==nil then
IMBA_SavedVariables.Mods[AddonName].Var={};
end
if IMBA_SavedVariables.Mods[AddonName].Var[VarName]==nil then
IMBA_SavedVariables.Mods[AddonName].Var[VarName]=false;
end
return IMBA_SavedVariables.Mods[AddonName].Var[VarName]
end
function IMBA_CheckSyncVariables(Addon)
for k, v in Addon.SyncVariablesLastVal do
--First Checking to see if need to send a variable
if Addon.SyncVariablesSent[k]==false then
SendAddonMessage("IMBA", "VARSYNC "..k.." "..Addon.SyncVariablesLastVal[k].." "..Addon.SyncVariablesMethod[k],"RAID");
Addon.SyncVariablesSent[k]=true;
end
--Only want to potentially send if the variable has changed
if Addon.SyncVariablesLastVal[k]~=getglobal(k) then
Addon.SyncVariablesLastVal[k]=getglobal(k);
Addon.SyncVariablesSent[k]=false;
end
end
end
function IMBA_SyncVar(Addon,VarName,Value,Method)
if Method=="MAX" then
if Value>getglobal(VarName) then
setglobal(VarName,Value);
Addon.SyncVariablesLastVal[VarName]=Value;
Addon.SyncVariablesSent[VarName]=true;
if Addon.SyncVariableFunc~=nil then
getglobal(Addon.SyncVariableFunc)();
end
end
elseif Method=="MIN" then
if Value<getglobal(VarName) then
setglobal(VarName,Value);
Addon.SyncVariablesLastVal[VarName]=Value;
Addon.SyncVariablesSent[VarName]=true;
if Addon.SyncVariableFunc~=nil then
getglobal(Addon.SyncVariableFunc)();
end
end
elseif Method=="REPLACE" then
setglobal(VarName,Value);
Addon.SyncVariablesLastVal[VarName]=Value;
Addon.SyncVariablesSent[VarName]=true;
if Addon.SyncVariableFunc~=nil then
getglobal(Addon.SyncVariableFunc)();
end
end
end
function IMBA_AddSyncVar(Addon,VarName,Method)
IMBA_Addons[Addon].SyncVariablesSent[VarName]=true;
IMBA_Addons[Addon].SyncVariablesLastVal[VarName]=getglobal(VarName);
IMBA_Addons[Addon].SyncVariablesMethod[VarName]=Method;
end
function IMBA_SetSyncFunction(Addon,Func)
IMBA_Addons[Addon].SyncVariableFunc=Func;
end
function IMBA_CheckIfRunning(Addon)
return IMBA_Addons[Addon].Running;
end
function IMBA_OnUpdate()
--First do we need to check for boss mod activations based on regen and is it time to?
if IMBA_CheckRegen and (IMBA_CheckRegenTimer < GetTime()) then
IMBA_CheckRegen=false;
for k, v in IMBA_Addons do
if v.Active and (v.RegenActivator ~= nil) and (v.Running==false) then
if v.MultiBoss==0 then
if IMBA_BossAggroed(v.BossName) then
IMBA_CombatCheckTime=GetTime()+10; --Next Time to Check in Combat
IMBA_SyncTime=GetTime()+2+2*math.random(); --We add a random delay to the variable syncing
IMBA_AddonRunning=true;
v.Running=true;
getglobal(v.RegenActivator)();
SendAddonMessage("IMBA", "STARTADDON "..string.gsub(v.BossName," ","*"),"RAID");
end
else
for i=1,v.MultiBoss do
if IMBA_BossAggroed(v.BossNames[i]) then
IMBA_CombatCheckTime=GetTime()+10; --Next Time to Check in Combat
IMBA_SyncTime=GetTime()+2+2*math.random(); --We add a random delay to the variable syncing
IMBA_AddonRunning=true;
v.Running=true;
getglobal(v.RegenActivator)();
v.BossesAlive=v.MultiBoss;
SendAddonMessage("IMBA", "STARTADDON "..string.gsub(v.BossName," ","*"),"RAID");
end
end
end
end
end
end
--Alright if Addons are running
if IMBA_AddonRunning then
if IMBA_CombatCheckTime<GetTime() then
IMBA_AddonRunning=IMBA_RaidInCombat();
if IMBA_AddonRunning==false then
for k, v in IMBA_Addons do
v.Running=false;
end
end
end
--If still running we can sync variables etc
if IMBA_AddonRunning then
if IMBA_SyncTime<GetTime() then
for k, v in IMBA_Addons do
if v.Running then
IMBA_CheckSyncVariables(v);
end
end
IMBA_SyncTime=GetTime()+7.5+2.5*math.random();
end
else--Otherwise deactivate all addons
for k, v in IMBA_Addons do
v.Running=false;
end
end
end
if IMBA_CheckVisibility<GetTime() then
for k, v in IMBA_Addons do
if v.MainFrame~=nil then
IMBA_SavedVariables.Mods[k].Visible=getglobal(v.MainFrame):IsShown();
end
end
IMBA_CheckVisibility=GetTime()+0.25;
end
end
function IMBA_LoadColors()
if IMBA_SavedVariables.Colors==nil then
IMBA_SavedVariables.Colors={};
end
if IMBA_SavedVariables.Colors["FrameBG"]==nil then
IMBA_SavedVariables.Colors["FrameBG"]={r=0,g=0,b=0,a=0.6};
end
if IMBA_SavedVariables.Colors["FrameBorder"]==nil then
IMBA_SavedVariables.Colors["FrameBorder"]={r=1,g=1,b=1,a=1};
end
if IMBA_SavedVariables.Colors["BarStart"]==nil then
IMBA_SavedVariables.Colors["BarStart"]={r=1,g=1,b=1};
end
if IMBA_SavedVariables.Colors["BarEnd"]==nil then
IMBA_SavedVariables.Colors["BarEnd"]={r=1,g=1,b=1};
end
if IMBA_SavedVariables.Colors["BarInner"]==nil then
IMBA_SavedVariables.Colors["BarInner"]={r=0.4,g=0.4,b=0.4,a=0.6};
end
if IMBA_SavedVariables.Colors["BarBorder"]==nil then
IMBA_SavedVariables.Colors["BarBorder"]={r=0.9,g=0.9,b=0.9,a=0.6};
end
end
function IMBA_OnEvent(event)
if event=="PLAYER_REGEN_DISABLED" then
IMBA_CheckRegen=true;
IMBA_CheckRegenTimer=GetTime()+5;
elseif event=="CHAT_MSG_MONSTER_YELL" then
for k, v in IMBA_Addons do
if v.Active and (v.YellActivator ~= nil) and (v.Running~=true) then
if IMBA_AddonRunning==false then
IMBA_CombatCheckTime=GetTime()+10; --Next Time to Check in Combat
IMBA_SyncTime=GetTime()+2+2*math.random(); --We add a random delay to the variable syncing
end
v.Running=v.Running or getglobal(v.YellActivator)(arg1);
IMBA_AddonRunning=IMBA_AddonRunning or v.Running;
end
end
elseif event=="CHAT_MSG_ADDON" then
if arg1=="IMBA" then
local commandName, params = IMBA_ExtractNextParam(arg2);
if commandName=="VARSYNC" then
local Addon, VarName, Value, Method;
VarName, params = IMBA_ExtractNextParam(params);
Value, params = IMBA_ExtractNextParam(params);
Method, params = IMBA_ExtractNextParam(params);
for k, v in IMBA_Addons do
for k2, v2 in v.SyncVariablesLastVal do
if k2==VarName then
IMBA_SyncVar(v,VarName,tonumber(Value),Method);
end
end
end
elseif commandName=="STARTADDON" then
local Addon
Addon,params=IMBA_ExtractNextParam(params);
Addon=string.gsub(Addon,"*"," ");
if IMBA_Addons[Addon] then
if (not IMBA_CheckIfRunning(Addon)) and IMBA_Addons[Addon].Active and IMBA_Addons[Addon].RegenActivator then
if getglobal(IMBA_Addons[Addon].RegenActivator) then
getglobal(IMBA_Addons[Addon].RegenActivator)();
IMBA_Addons[Addon].Running=true;
IMBA_Addons[Addon].BossesAlive=IMBA_Addons[Addon].MultiBoss;
IMBA_CombatCheckTime=GetTime()+10; --Next Time to Check in Combat
IMBA_SyncTime=GetTime()+2+2*math.random(); --We add a random delay to the variable syncing
IMBA_AddonRunning=true;
end
end
end
elseif commandName=="VERSCHECK" then
SendAddonMessage("IMBA", "VERSNUM "..IMBA_Version,"RAID");
elseif commandName=="VERSNUM" then
IMBA_RaidVersions[arg4]=params;
end
end
elseif event=="PLAYER_LOGIN" then
if IMBA_SavedVariables then
for k2, v2 in IMBA_Addons do
local FoundModSettings;
FoundModSettings=false
for k, v in IMBA_SavedVariables.Mods do
if k==k2 then
v2.Active=v.Active;
if v2.MainFrame then
if v.Visible then
getglobal(v2.MainFrame):Show();
else
getglobal(v2.MainFrame):Hide();
end
end
FoundModSettings=true;
end
end
if FoundModSettings==false then
IMBA_SavedVariables.Mods[k2]={};
IMBA_SavedVariables.Mods[k2].Visible=false;
getglobal(v2.MainFrame):Hide();
IMBA_SavedVariables.Mods[k2].Active=true;
end
end
else
IMBA_SavedVariables={};
IMBA_SavedVariables.Mods={};
for k, v in IMBA_Addons do
IMBA_SavedVariables.Mods[k]={};
IMBA_SavedVariables.Mods[k].Visible=false;
getglobal(v.MainFrame):Hide();
IMBA_SavedVariables.Mods[k].Active=true;
end
end
if IMBA_SavedVariables.Scale==nil then
IMBA_SavedVariables.Scale=1;
end
if IMBA_SavedVariables.BarTextureNum==nil then
IMBA_SavedVariables.BarTextureNum=1;
end
if IMBA_SavedVariables.FrameType==nil then
IMBA_SavedVariables.FrameType=1;
end
IMBA_LoadColors();
IMBA_SetBackdrops(IMBA_SavedVariables.FrameType);
IMBA_SetScale(true);
IMBA_Options_GraphicsFrame_Slider_Scale:SetValue(IMBA_SavedVariables.Scale);
IMBA_Options_GraphicsFrame_Slider_ScaleText:SetText(string.format("Window Scale Size : %.2f",IMBA_SavedVariables.Scale));
IMBA_SetScaleAlert(true);
IMBA_Options_GraphicsFrame_Slider_ScaleAlert:SetValue(IMBA_SavedVariables.ScaleAlert);
IMBA_Alert1:SetText("",0);
IMBA_Alert2:SetText("",0);
IMBA_Alert3:SetText("",0);
if IMBA_SavedVariables.ButtonPos==nil then
IMBA_SavedVariables.ButtonPos=300;
end
IMBA_Options_GraphicsFrame_Slider_Icon:SetValue(IMBA_SavedVariables.ButtonPos);
IMBA_Options_GraphicsFrame_Slider_IconText:SetText(string.format("Minimap Icon Position : %.0f",IMBA_SavedVariables.ButtonPos));
if IMBA_SavedVariables.LockedWindows then
IMBA_LockWindows();
else
IMBA_UnlockWindows()
end
if IMBA_SavedVariables.HideClose==nil then
IMBA_SavedVariables.HideClose=false;
end
if IMBA_SavedVariables.HideClose then
IMBA_HideCloseButtons()
else
IMBA_ShowCloseButtons()
end
if IMBA_SavedVariables.HideMinimapIcon then
IMBA_OptionsButton:Hide();
else
IMBA_OptionsButton:Show();
end
if IMBA_SavedVariables.ShowAlertWindow then
IMBA_Alerts.isLocked=false;
IMBA_Alerts:EnableMouse(true);
IMBA_Alerts:SetMovable(true);
IMBA_Alerts:SetBackdropBorderColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b,IMBA_SavedVariables.Colors["FrameBorder"].a);
IMBA_Alerts:SetBackdropColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b,IMBA_SavedVariables.Colors["FrameBG"].a);
else
IMBA_Alerts.isLocked=true;
IMBA_Alerts:EnableMouse(false);
IMBA_Alerts:SetMovable(false);
IMBA_Alerts:SetBackdropBorderColor(IMBA_SavedVariables.Colors["FrameBorder"].r,IMBA_SavedVariables.Colors["FrameBorder"].g,IMBA_SavedVariables.Colors["FrameBorder"].b,0);
IMBA_Alerts:SetBackdropColor(IMBA_SavedVariables.Colors["FrameBG"].r,IMBA_SavedVariables.Colors["FrameBG"].g,IMBA_SavedVariables.Colors["FrameBG"].b,0);
end
IMBA_CheckVisibility=GetTime()+2.5;
if not IMBA_SavedVariables.CombatLogDist then
IMBA_SavedVariables.CombatLogDist=200;
end
IMBA_Options_GraphicsFrame_Slider_CombatLogDist:SetValue(IMBA_SavedVariables.CombatLogDist);
IMBA_Options_GraphicsFrame_Slider_CombatLogDistText:SetText(string.format("Combat Log Distance : %.0f",IMBA_SavedVariables.CombatLogDist));
IMBA_SetLogDistance(IMBA_SavedVariables.CombatLogDist);
if not SCT_MSG_FRAME then
IMBA_Options_GraphicsFrame_UseSCTForAlerts:Hide();
end
if IMBA_SavedVariables.UseSCTForAlerts then
IMBA_Options_GraphicsFrame_UseSCTForAlerts:SetChecked(IMBA_SavedVariables.UseSCTForAlerts)
end
IMBA_Loaded = true;
elseif event=="CHAT_MSG_COMBAT_HOSTILE_DEATH" then
local _,_, MobName = string.find(arg1,IMBA_DEATH_MSG);
if MobName then
for k, v in IMBA_Addons do
if getglobal(v.MainFrame):IsShown() then
if not (v.MultiBoss>0) then
if k==MobName then
getglobal(v.MainFrame):Hide();
v.Running=false;
end
else
for i=1,v.MultiBoss do
if MobName==v.BossNames[i] then
v.BossesAlive=v.BossesAlive-1;
if v.BossesAlive<=0 then
getglobal(v.MainFrame):Hide();
v.Running=false;
end
end
end
end
end
end
end
end
end
function IMBA_Command(msg)
msg=strlower(msg);
if msg=="lock" then
IMBA_LockWindows();
elseif msg=="unlock" then
IMBA_UnlockWindows();
elseif msg=="options" then
IMBA_Options:Show();
elseif msg=="minimap" then
if IMBA_SavedVariables.HideMinimapIcon then
IMBA_SavedVariables.HideMinimapIcon=false;
IMBA_OptionsButton:Show();
else
IMBA_SavedVariables.HideMinimapIcon=true;
IMBA_OptionsButton:Hide();
end
IMBA_Options_GraphicsFrame_HideMinimapIcon:SetChecked(IMBA_SavedVariables.HideMinimapIcon)
else
DEFAULT_CHAT_FRAME:AddMessage("IMBA Commands "..IMBA_Version, 1.0, 1.0, 0.0);
DEFAULT_CHAT_FRAME:AddMessage(" lock - Locks all windows", 1.0, 1.0, 0.0);
DEFAULT_CHAT_FRAME:AddMessage(" minimap - Toggles Minimap Icon", 1.0, 1.0, 0.0);
DEFAULT_CHAT_FRAME:AddMessage(" options - Shows the options window", 1.0, 1.0, 0.0);
DEFAULT_CHAT_FRAME:AddMessage(" unlock - Unlocks all windows", 1.0, 1.0, 0.0);
end
end
function IMBA_SetScale(loading)
for k, v in IMBA_Addons do
if v.MainFrame then
if getglobal(v.MainFrame) then
if not loading then
local pointNum=getglobal(v.MainFrame):GetNumPoints()
local curScale=getglobal(v.MainFrame):GetScale();
local pointsCleared=false
local points={}
for i=1,pointNum,1 do
points[i]={};
points[i][1], points[i][2], points[i][3], points[i][4], points[i][5]=getglobal(v.MainFrame):GetPoint(i)
points[i][4]=points[i][4]*curScale/IMBA_SavedVariables.Scale;
points[i][5]=points[i][5]*curScale/IMBA_SavedVariables.Scale;
end
pointsCleared=false
for i=1,pointNum,1 do
if points[i][1] and points[i][2] and points[i][3] and points[i][4] and points[i][5] then
if not pointsCleared then
getglobal(v.MainFrame):ClearAllPoints()
pointsCleared=true;
end
getglobal(v.MainFrame):SetPoint(points[i][1],UIParent,points[i][3],points[i][4],points[i][5]);
end
end
end
getglobal(v.MainFrame):SetScale(IMBA_SavedVariables.Scale);
end
end
end
end
function IMBA_LockWindows()
for k, v in IMBA_Addons do
if v.MainFrame then
getglobal(v.MainFrame).isLocked=true;
end
end
IMBA_SavedVariables.LockedWindows=true;
DEFAULT_CHAT_FRAME:AddMessage("IMBA - Windows Locked", 1.0, 1.0, 0.0);
end
function IMBA_UnlockWindows()
for k, v in IMBA_Addons do
if v.MainFrame then
getglobal(v.MainFrame).isLocked=false;
end
end
IMBA_SavedVariables.LockedWindows=false;
DEFAULT_CHAT_FRAME:AddMessage("IMBA - Windows Unlocked", 1.0, 1.0, 0.0);
end
function IMBA_RegisterEvents()
this:RegisterEvent("CHAT_MSG_MONSTER_YELL");
this:RegisterEvent("PLAYER_REGEN_DISABLED");
this:RegisterEvent("CHAT_MSG_ADDON");
this:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH");
this:RegisterEvent("PLAYER_LOGIN");
end
function IMBA_UnregisterEvents()
this:UnregisterEvent("CHAT_MSG_MONSTER_YELL");
this:UnregisterEvent("PLAYER_REGEN_DISABLED");
this:UnregisterEvent("CHAT_MSG_ADDON");
this:UnregisterEvent("PLAYER_LOGIN");
this:UnregisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH")
end
function IMBA_CloseAllWindows()
for k, v in IMBA_Addons do
if v.MainFrame then
getglobal(v.MainFrame):Hide();
end
end
end
function IMBA_OnLoad()
DEFAULT_CHAT_FRAME:AddMessage("IMBA (IMPervious Boss Addons) "..IMBA_Version.." is Loading", 1.0, 1.0, 0.0);
IMBA_LoadColors();
IMBA_RegisterEvents();
--Register the slash commands
SLASH_IMBA1= IMBA_SLASH_COMMAND;
SlashCmdList["IMBA"] = function(msg)
IMBA_Command(msg);
end
IMBA_AddonRunning=false; --To check if an addon is currently doing something
IMBA_CombatCheckTime=0; --Last time checked if still in combat
IMBA_SyncTime=0; --Last Time synced
IMBA_CheckVisibility=GetTime()+1000000000; --Don't want it to start checking till variables are loaded
IMBA_SavedVariables.Mods={};
DEFAULT_CHAT_FRAME:AddMessage(" Access the command via /imba", 1.0, 1.0, 0.0);
end