536 lines
14 KiB
Lua
536 lines
14 KiB
Lua
local MM_Initialized = false
|
|
|
|
--
|
|
-- Global variable for storage of settings/options
|
|
--
|
|
|
|
MiniMageOptions = { };
|
|
|
|
--
|
|
-- Initialization functions
|
|
--
|
|
|
|
function class_OnLoad()
|
|
MM_class = UnitClass("player");
|
|
if (MM_class ~= "Mage") then
|
|
this:Hide();
|
|
end
|
|
end
|
|
|
|
function MM_Initialize()
|
|
if MM_Initialized then return end
|
|
MM_Initialized = true
|
|
MM_fac = UnitFactionGroup('player');
|
|
M_class = UnitClass("player");
|
|
if (M_class == "Mage") then
|
|
if (DEFAULT_CHAT_FRAME) then
|
|
DEFAULT_CHAT_FRAME:AddMessage(MINIMAGE_ANNOUNCE_GREETING..M_class..MINIMAGE_ANNOUNCE_ENABLED);
|
|
end
|
|
else
|
|
if (DEFAULT_CHAT_FRAME) then
|
|
DEFAULT_CHAT_FRAME:AddMessage(MINIMAGE_ANNOUNCE_GREETING..M_class..MINIMAGE_ANNOUNCE_DISABLED);
|
|
end
|
|
end
|
|
end
|
|
|
|
function MM_Button_Initialize()
|
|
if(event == "VARIABLES_LOADED") then
|
|
if (MiniMageOptions.MMButtonPosition == nil) then
|
|
MiniMageOptions.MMButtonPosition = 0;
|
|
end
|
|
if (MiniMageOptions.HidePortals == nil) then
|
|
MiniMageOptions.HidePortals = false;
|
|
end
|
|
end
|
|
end
|
|
|
|
function MM_DropDown_Initialize()
|
|
local dropdown;
|
|
if ( UIDROPDOWNMENU_OPEN_MENU ) then
|
|
dropdown = getglobal(UIDROPDOWNMENU_OPEN_MENU);
|
|
else
|
|
dropdown = this;
|
|
end
|
|
MM_DropDown_InitButtons();
|
|
end
|
|
|
|
function MM_DropDown_OnLoad()
|
|
UIDropDownMenu_Initialize(this, MM_DropDown_Initialize, "MENU");
|
|
end
|
|
|
|
--
|
|
-- Minimap button drag/drop functions
|
|
-- Thanks to Atlas for the button dragging code
|
|
--
|
|
|
|
function MM_Button_BeingDragged()
|
|
local xpos,ypos = GetCursorPosition();
|
|
local xmin,ymin = Minimap:GetLeft(), Minimap:GetBottom();
|
|
xpos = xmin-xpos/UIParent:GetScale()+70;
|
|
ypos = ypos/UIParent:GetScale()-ymin-70;
|
|
MM_Button_SetPosition(math.deg(math.atan2(ypos,xpos)));
|
|
end
|
|
|
|
function MM_Button_OnClick()
|
|
MM_ToggleDropDown();
|
|
end
|
|
|
|
function MM_Button_OnEnter()
|
|
GameTooltip:SetOwner(this, "ANCHOR_LEFT");
|
|
GameTooltip:SetText(MINIMAGE_BUTTON_TOOLTIP0);
|
|
GameTooltip:AddLine(MINIMAGE_BUTTON_TOOLTIP1);
|
|
GameTooltip:AddLine(MINIMAGE_BUTTON_TOOLTIP2);
|
|
GameTooltip:Show();
|
|
end
|
|
|
|
function MM_Button_SetPosition(v)
|
|
if(v < 0) then
|
|
v = v + 360;
|
|
end
|
|
MiniMageOptions.MMButtonPosition = v;
|
|
MM_Button_UpdatePosition();
|
|
end
|
|
|
|
function MM_Button_UpdatePosition()
|
|
MM_ButtonFrame:SetPoint(
|
|
"TOPLEFT",
|
|
"Minimap",
|
|
"TOPLEFT",
|
|
54 - (78 * cos(MiniMageOptions.MMButtonPosition)),
|
|
(78 * sin(MiniMageOptions.MMButtonPosition)) - 55
|
|
);
|
|
end
|
|
|
|
--
|
|
-- ADDED: REQUIRED LEVEL CHECKS
|
|
--
|
|
|
|
function MM_CanCastTeleport()
|
|
return UnitLevel("player") >= 20;
|
|
end
|
|
|
|
function MM_CanCastPortal()
|
|
return UnitLevel("player") >= 40;
|
|
end
|
|
|
|
--
|
|
-- Drop down menu functions
|
|
--
|
|
|
|
function MM_ToggleDropDown()
|
|
MM_DropDownFrame.point = "TOPRIGHT";
|
|
MM_DropDownFrame.relativePoint = "BOTTOMLEFT";
|
|
ToggleDropDownMenu(1, nil, MM_DropDownFrame);
|
|
end
|
|
|
|
function MM_DropDown_InitButtons()
|
|
local info = {};
|
|
info.text = MINIMAGE_LABEL_TITLE;
|
|
info.isTitle = 1;
|
|
info.justifyH = "CENTER";
|
|
info.notCheckable = 1;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Click to cast"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
local fact = UnitFactionGroup('player');
|
|
if (fact == "Horde") then
|
|
MM_DropDown_ForTheHorde();
|
|
else
|
|
MM_DropDown_ForTheAlliance();
|
|
end
|
|
end
|
|
|
|
function MM_DropDown_ForTheHorde()
|
|
local appender = ': ';
|
|
|
|
if not MiniMageOptions.HidePortals then
|
|
local info = { };
|
|
info.text = MINIMAGE_LABEL_PORTAL;
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal spells"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- ORG PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_ORG;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_ORG);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Orgrimmar"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- STONARD PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_STONARD;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_STONARD);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Stonard"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- TB PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_TB;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_TB);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Thunder Bluff"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- UC PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_UC;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_UC);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Undercity"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
|
|
-- TELEPORT SECTION
|
|
local info = { };
|
|
info.text = MINIMAGE_LABEL_TELEPORT;
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport spells"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- ORG TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_ORG;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_ORG);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Orgrimmar"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- STONARD TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_STONARD;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_STONARD);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Stonard"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- TB TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_TB;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_TB);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Thunder Bluff"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- UC TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_UC;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_UC);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Undercity"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
|
|
function MM_DropDown_ForTheAlliance()
|
|
local appender = ': ';
|
|
|
|
if not MiniMageOptions.HidePortals then
|
|
local info = { };
|
|
info.text = MINIMAGE_LABEL_PORTAL;
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal spells"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- ALAH PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_ALAH;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_ALAH);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Aerie Peak"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- DARNASSUS PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_DARNASSUS;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_DARNASSUS);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Darnassus"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- IF PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_IF;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_IF);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Ironforge"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- SW PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_SW;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_SW);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Stormwind"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- THERAMORE PORTAL
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_THERAMORE;
|
|
info.disabled = not MM_CanCastPortal();
|
|
info.func = function(msg)
|
|
if MM_CanCastPortal() then
|
|
CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_THERAMORE);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Portal to Theramore"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
|
|
-- TELEPORT TITLE
|
|
local info = { };
|
|
info.text = MINIMAGE_LABEL_TELEPORT;
|
|
info.isTitle = 1;
|
|
info.notCheckable = 1;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport spells"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- ALAH TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_ALAH;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_ALAH);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Aerie Peak"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- DARN TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_DARNASSUS;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_DARNASSUS);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Darnassus"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- IF TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_IF;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_IF);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Ironforge"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- SW TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_SW;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_SW);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Stormwind"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
|
|
-- THERAMORE TELEPORT
|
|
info = { };
|
|
info.text = MINIMAGE_LABEL_THERAMORE;
|
|
info.disabled = not MM_CanCastTeleport();
|
|
info.func = function(msg)
|
|
if MM_CanCastTeleport() then
|
|
CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_THERAMORE);
|
|
end
|
|
end;
|
|
|
|
info.tooltipTitle = info.text
|
|
info.tooltipText = "Teleport to Theramore"
|
|
info.tooltipOnButton = true
|
|
|
|
UIDropDownMenu_AddButton(info);
|
|
end
|
|
|
|
--
|
|
-- Slash Commands
|
|
--
|
|
|
|
SLASH_MINIMAGE1 = "/mmage"
|
|
|
|
SlashCmdList["MINIMAGE"] = function(msg)
|
|
msg = string.lower(msg or "")
|
|
|
|
if msg == "reset" then
|
|
MiniMageOptions = {}
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00MiniMage: options reset.|r")
|
|
|
|
elseif msg == "icon" then
|
|
if MM_ButtonFrame:IsShown() then
|
|
MM_ButtonFrame:Hide()
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00MiniMage: minimap button hidden.|r")
|
|
else
|
|
MM_ButtonFrame:Show()
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00MiniMage: minimap button shown.|r")
|
|
end
|
|
|
|
elseif msg == "portals" then
|
|
MiniMageOptions.HidePortals = not MiniMageOptions.HidePortals
|
|
|
|
if MiniMageOptions.HidePortals then
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00MiniMage: Portal hidden.|r")
|
|
else
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00MiniMage: Portal shown.|r")
|
|
end
|
|
|
|
elseif msg == "help" or msg == "" then
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffffff00MiniMage commands:|r")
|
|
DEFAULT_CHAT_FRAME:AddMessage("/mmage help - Show this help")
|
|
DEFAULT_CHAT_FRAME:AddMessage("/mmage icon - Show/Hide minimap button")
|
|
DEFAULT_CHAT_FRAME:AddMessage("/mmage reset - Reset addon saved options")
|
|
DEFAULT_CHAT_FRAME:AddMessage("/mmage portals - Show/Hide portal in dropdown")
|
|
|
|
else
|
|
DEFAULT_CHAT_FRAME:AddMessage("|cffff0000MiniMage: unknown command.|r")
|
|
DEFAULT_CHAT_FRAME:AddMessage("Type /mmage help for options.")
|
|
end
|
|
end
|