18 Commits

Author SHA1 Message Date
totalllyswede 298424ebdf Add files via upload 2025-11-24 00:29:28 -08:00
totalllyswede 6926a59e8e Update README.md 2025-11-24 00:29:09 -08:00
totalllyswede 8d6c686692 Update README.md 2025-11-23 02:21:22 -08:00
totalllyswede 115dc0c7e9 Add files via upload 2025-11-23 00:33:34 -08:00
totalllyswede 45a287e7cc Add files via upload 2025-11-23 00:20:42 -08:00
totalllyswede ad2b1a0091 Update README.md 2025-11-23 00:03:04 -08:00
totalllyswede ee70573392 Update README.md 2025-11-23 00:02:29 -08:00
totalllyswede 54bd7a319f Add files via upload 2025-11-23 00:01:38 -08:00
totalllyswede 9a3ad6f6c5 Update README.md 2025-11-22 23:59:42 -08:00
totalllyswede a8d4b2bf01 Update README.md 2025-11-22 07:48:34 -08:00
totalllyswede b3aa6b3a2c Update README.md 2025-11-22 07:48:17 -08:00
totalllyswede 89aa56d5a0 Update README.md 2025-11-22 07:32:21 -08:00
totalllyswede 69de94628f Update README.md 2025-11-22 07:31:48 -08:00
totalllyswede de0977dbda Update README.md 2025-11-22 07:31:25 -08:00
totalllyswede ed7a9c95dd Update README.md 2025-11-22 07:30:21 -08:00
totalllyswede a94f4c920f Update README.md 2025-11-22 07:30:02 -08:00
totalllyswede f7f4563519 Add files via upload 2025-11-22 07:27:04 -08:00
totalllyswede 91dab47f20 Update README.md 2025-11-21 06:07:21 -08:00
5 changed files with 509 additions and 161 deletions
+487 -147
View File
@@ -1,3 +1,5 @@
local MM_Initialized = false
-- --
-- Global variable for storage of settings/options -- Global variable for storage of settings/options
-- --
@@ -9,53 +11,57 @@ MiniMageOptions = { };
-- --
function class_OnLoad() function class_OnLoad()
MM_class = UnitClass("player"); MM_class = UnitClass("player");
if (MM_class ~= "Mage") then if (MM_class ~= "Mage") then
this:Hide(); this:Hide();
end end
end end
function MM_Initialize() function MM_Initialize()
MM_fac = UnitFactionGroup('player'); if MM_Initialized then return end
M_class = UnitClass("player"); MM_Initialized = true
if (M_class == "Mage") then MM_fac = UnitFactionGroup('player');
if (DEFAULT_CHAT_FRAME) then M_class = UnitClass("player");
DEFAULT_CHAT_FRAME:AddMessage(MINIMAGE_ANNOUNCE_GREETING..M_class..MINIMAGE_ANNOUNCE_ENABLED); if (M_class == "Mage") then
end if (DEFAULT_CHAT_FRAME) then
else DEFAULT_CHAT_FRAME:AddMessage(MINIMAGE_ANNOUNCE_GREETING..M_class..MINIMAGE_ANNOUNCE_ENABLED);
if (DEFAULT_CHAT_FRAME) then end
DEFAULT_CHAT_FRAME:AddMessage(MINIMAGE_ANNOUNCE_GREETING..M_class..MINIMAGE_ANNOUNCE_DISABLED); else
end if (DEFAULT_CHAT_FRAME) then
end DEFAULT_CHAT_FRAME:AddMessage(MINIMAGE_ANNOUNCE_GREETING..M_class..MINIMAGE_ANNOUNCE_DISABLED);
end
end
end end
function MM_Button_Initialize() function MM_Button_Initialize()
if(event == "VARIABLES_LOADED") then if(event == "VARIABLES_LOADED") then
if (MiniMageOptions.MMButtonPosition == nil) then if (MiniMageOptions.MMButtonPosition == nil) then
MiniMageOptions.MMButtonPosition = 0; MiniMageOptions.MMButtonPosition = 0;
end end
end if (MiniMageOptions.HidePortals == nil) then
MiniMageOptions.HidePortals = false;
end
end
end end
function MM_DropDown_Initialize() function MM_DropDown_Initialize()
local dropdown; local dropdown;
if ( UIDROPDOWNMENU_OPEN_MENU ) then if ( UIDROPDOWNMENU_OPEN_MENU ) then
dropdown = getglobal(UIDROPDOWNMENU_OPEN_MENU); dropdown = getglobal(UIDROPDOWNMENU_OPEN_MENU);
else else
dropdown = this; dropdown = this;
end end
MM_DropDown_InitButtons(); MM_DropDown_InitButtons();
end end
function MM_DropDown_OnLoad() function MM_DropDown_OnLoad()
UIDropDownMenu_Initialize(this, MM_DropDown_Initialize, "MENU"); UIDropDownMenu_Initialize(this, MM_DropDown_Initialize, "MENU");
end end
-- --
-- Minimap button drag/drop functions -- Minimap button drag/drop functions
--
-- Thanks to Atlas for the button dragging code -- Thanks to Atlas for the button dragging code
--
function MM_Button_BeingDragged() function MM_Button_BeingDragged()
local xpos,ypos = GetCursorPosition(); local xpos,ypos = GetCursorPosition();
@@ -66,7 +72,7 @@ function MM_Button_BeingDragged()
end end
function MM_Button_OnClick() function MM_Button_OnClick()
MM_ToggleDropDown(); MM_ToggleDropDown();
end end
function MM_Button_OnEnter() function MM_Button_OnEnter()
@@ -86,13 +92,25 @@ function MM_Button_SetPosition(v)
end end
function MM_Button_UpdatePosition() function MM_Button_UpdatePosition()
MM_ButtonFrame:SetPoint( MM_ButtonFrame:SetPoint(
"TOPLEFT", "TOPLEFT",
"Minimap", "Minimap",
"TOPLEFT", "TOPLEFT",
54 - (78 * cos(MiniMageOptions.MMButtonPosition)), 54 - (78 * cos(MiniMageOptions.MMButtonPosition)),
(78 * sin(MiniMageOptions.MMButtonPosition)) - 55 (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 end
-- --
@@ -100,145 +118,467 @@ end
-- --
function MM_ToggleDropDown() function MM_ToggleDropDown()
MM_DropDownFrame.point = "TOPRIGHT"; MM_DropDownFrame.point = "TOPRIGHT";
MM_DropDownFrame.relativePoint = "BOTTOMLEFT"; MM_DropDownFrame.relativePoint = "BOTTOMLEFT";
ToggleDropDownMenu(1, nil, MM_DropDownFrame); ToggleDropDownMenu(1, nil, MM_DropDownFrame);
end end
function MM_DropDown_InitButtons() function MM_DropDown_InitButtons()
local info = {}; local info = {};
info.text = MINIMAGE_LABEL_TITLE; info.text = MINIMAGE_LABEL_TITLE;
info.isTitle = 1; info.isTitle = 1;
info.justifyH = "CENTER"; info.justifyH = "CENTER";
info.notCheckable = 1; info.notCheckable = 1;
UIDropDownMenu_AddButton(info);
local fact = UnitFactionGroup('player'); info.tooltipTitle = info.text
if (fact == "Horde") then info.tooltipText = "Click to cast"
MM_DropDown_ForTheHorde(); info.tooltipOnButton = true
else
MM_DropDown_ForTheAlliance(); UIDropDownMenu_AddButton(info);
end
local fact = UnitFactionGroup('player');
if (fact == "Horde") then
MM_DropDown_ForTheHorde();
else
MM_DropDown_ForTheAlliance();
end
end end
function MM_DropDown_ForTheHorde() function MM_DropDown_ForTheHorde()
local appender = ': '; local appender = ': ';
local info = { }; if not MiniMageOptions.HidePortals then
info.text = MINIMAGE_LABEL_PORTAL; local info = { };
info.isTitle = 1; info.text = MINIMAGE_LABEL_PORTAL;
info.notCheckable = 1; info.isTitle = 1;
UIDropDownMenu_AddButton(info); info.notCheckable = 1;
info = { }; info.tooltipTitle = info.text
info.text = MINIMAGE_LABEL_ORG; info.tooltipText = "Portal spells"
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_ORG); end; info.tooltipOnButton = true
UIDropDownMenu_AddButton(info);
info = { }; UIDropDownMenu_AddButton(info);
info.text = MINIMAGE_LABEL_STONARD;
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_STONARD); end;
UIDropDownMenu_AddButton(info);
info = { }; -- ORG PORTAL
info.text = MINIMAGE_LABEL_TB; info = { };
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_TB); end; info.text = MINIMAGE_LABEL_ORG;
UIDropDownMenu_AddButton(info); info.disabled = not MM_CanCastPortal();
info.func = function(msg)
if MM_CanCastPortal() then
MM_TryCast(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_ORG);
end
end;
info = { }; info.tooltipTitle = info.text
info.text = MINIMAGE_LABEL_UC; info.tooltipText = "Portal to Orgrimmar"
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_UC); end; info.tooltipOnButton = true
UIDropDownMenu_AddButton(info);
info = { }; UIDropDownMenu_AddButton(info);
info.text = MINIMAGE_LABEL_TELEPORT;
info.isTitle = 1;
info.notCheckable = 1;
UIDropDownMenu_AddButton(info);
info = { }; -- STONARD PORTAL
info.text = MINIMAGE_LABEL_ORG; info = { };
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_ORG); end; info.text = MINIMAGE_LABEL_STONARD;
UIDropDownMenu_AddButton(info); info.disabled = not MM_CanCastPortal();
info.func = function(msg)
if MM_CanCastPortal() then
MM_TryCast(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_STONARD);
end
end;
info = { }; info.tooltipTitle = info.text
info.text = MINIMAGE_LABEL_STONARD; info.tooltipText = "Portal to Stonard"
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_STONARD); end; info.tooltipOnButton = true
UIDropDownMenu_AddButton(info);
info = { }; UIDropDownMenu_AddButton(info);
info.text = MINIMAGE_LABEL_TB;
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_TB); end;
UIDropDownMenu_AddButton(info);
info = { }; -- TB PORTAL
info.text = MINIMAGE_LABEL_UC; info = { };
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_UC); end; info.text = MINIMAGE_LABEL_TB;
UIDropDownMenu_AddButton(info); info.disabled = not MM_CanCastPortal();
info.func = function(msg)
if MM_CanCastPortal() then
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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 end
function MM_DropDown_ForTheAlliance() function MM_DropDown_ForTheAlliance()
local appender = ': '; local appender = ': ';
local info = { }; if not MiniMageOptions.HidePortals then
info.text = MINIMAGE_LABEL_PORTAL; local info = { };
info.isTitle = 1; info.text = MINIMAGE_LABEL_PORTAL;
info.notCheckable = 1; info.isTitle = 1;
UIDropDownMenu_AddButton(info); info.notCheckable = 1;
info = { }; info.tooltipTitle = info.text
info.text = MINIMAGE_LABEL_ALAH; info.tooltipText = "Portal spells"
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_ALAH); end; info.tooltipOnButton = true
UIDropDownMenu_AddButton(info);
info = { }; UIDropDownMenu_AddButton(info);
info.text = MINIMAGE_LABEL_DARNASSUS;
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_DARNASSUS); end;
UIDropDownMenu_AddButton(info);
info = { }; -- ALAH PORTAL
info.text = MINIMAGE_LABEL_IF; info = { };
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_IF); end; info.text = MINIMAGE_LABEL_ALAH;
UIDropDownMenu_AddButton(info); info.disabled = not MM_CanCastPortal();
info.func = function(msg)
if MM_CanCastPortal() then
MM_TryCast(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_ALAH);
end
end;
info = { }; info.tooltipTitle = info.text
info.text = MINIMAGE_LABEL_SW; info.tooltipText = "Portal to Aerie Peak"
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_SW); end; info.tooltipOnButton = true
UIDropDownMenu_AddButton(info);
info = { }; UIDropDownMenu_AddButton(info);
info.text = MINIMAGE_LABEL_THERAMORE;
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_THERAMORE); end;
UIDropDownMenu_AddButton(info);
info = { }; -- DARNASSUS PORTAL
info.text = MINIMAGE_LABEL_TELEPORT; info = { };
info.isTitle = 1; info.text = MINIMAGE_LABEL_DARNASSUS;
info.notCheckable = 1; info.disabled = not MM_CanCastPortal();
UIDropDownMenu_AddButton(info); info.func = function(msg)
if MM_CanCastPortal() then
MM_TryCast(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_DARNASSUS);
end
end;
info = { }; info.tooltipTitle = info.text
info.text = MINIMAGE_LABEL_ALAH; info.tooltipText = "Portal to Darnassus"
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_ALAH); end; info.tooltipOnButton = true
UIDropDownMenu_AddButton(info);
info = { }; UIDropDownMenu_AddButton(info);
info.text = MINIMAGE_LABEL_DARNASSUS;
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_DARNASSUS); end;
UIDropDownMenu_AddButton(info);
info = { }; -- IF PORTAL
info.text = MINIMAGE_LABEL_IF; info = { };
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_IF); end; info.text = MINIMAGE_LABEL_IF;
UIDropDownMenu_AddButton(info); info.disabled = not MM_CanCastPortal();
info.func = function(msg)
if MM_CanCastPortal() then
MM_TryCast(MINIMAGE_LABEL_PORTAL..appender..MINIMAGE_LABEL_IF);
end
end;
info = { }; info.tooltipTitle = info.text
info.text = MINIMAGE_LABEL_SW; info.tooltipText = "Portal to Ironforge"
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_SW); end; info.tooltipOnButton = true
UIDropDownMenu_AddButton(info);
info = { }; UIDropDownMenu_AddButton(info);
info.text = MINIMAGE_LABEL_THERAMORE;
info.func = function(msg) CastSpellByName(MINIMAGE_LABEL_TELEPORT..appender..MINIMAGE_LABEL_THERAMORE); end; -- SW PORTAL
UIDropDownMenu_AddButton(info); info = { };
info.text = MINIMAGE_LABEL_SW;
info.disabled = not MM_CanCastPortal();
info.func = function(msg)
if MM_CanCastPortal() then
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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
MM_TryCast(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 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
-- ===== ADDED: Minimal cast tracking + wrapper + error listener + spell check =====
-- Track last attempted spell cast
local MM_LastAttemptedSpell = nil
local MM_LastAttemptTime = 0
-- Check if player knows the spell
function MM_HasSpell(spellName)
for i=1, GetNumSpellTabs() do
local _, _, offset, numSpells = GetSpellTabInfo(i)
for j=1, numSpells do
local name = GetSpellName(j + offset, BOOKTYPE_SPELL)
if name == spellName then
return true
end
end
end
return false
end
-- Wrapper to track attempts and check if learned
function MM_TryCast(spellName)
if not MM_HasSpell(spellName) then
DEFAULT_CHAT_FRAME:AddMessage("|cffff0000You Have Not Learned " .. spellName .. ".|r")
return
end
MM_LastAttemptedSpell = spellName
MM_LastAttemptTime = GetTime()
CastSpellByName(spellName)
end
-- Event frame to listen for UI error messages and show custom text
local MM_EventFrame = CreateFrame("Frame")
MM_EventFrame:RegisterEvent("UI_ERROR_MESSAGE")
MM_EventFrame:SetScript("OnEvent", function(self, event, message)
local now = GetTime()
-- Only react if the error happens within 1 second of our own click
if MM_LastAttemptedSpell and (now - MM_LastAttemptTime) < 1.0 then
-- Any standard "failed" message triggers custom output
if message then
DEFAULT_CHAT_FRAME:AddMessage("|cffff0000You Have Not Learned " .. MM_LastAttemptedSpell .. ".|r")
end
MM_LastAttemptedSpell = nil
MM_LastAttemptTime = 0
end
end)
+3 -2
View File
@@ -1,7 +1,8 @@
## Interface: 11200 ## Interface: 11200
## Title: MiniMage_TWOW ## Title: MiniMage_TWOW
## Version: 1.0 ## Version: 1.2
## Notes: Forked version of MiniMage 1.2b. No original GitHub Repo found, only found in Wow1.12.1_Addons_Collection ## Notes: Forked version of MiniMage 1.2b. No original GitHub Repo found, only found in Wow1.12.1_Addons_Collection
## SavedVariables: MiniMageOptions ## SavedVariables: MiniMageOptions
MiniMage_TWOW.xml
localization.lua localization.lua
MiniMage_TWOW.lua
MiniMage_TWOW.xml
+2 -2
View File
@@ -1,6 +1,6 @@
<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/ C:\Projects\WoW\Bin\Interface\FrameXML\UI.xsd"> <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/ C:\Projects\WoW\Bin\Interface\FrameXML\UI.xsd">
<Script file="MiniMage_TWOW.lua"/> <Script file="localization.lua"/>
<Script file="localization.lua"/> <Script file="MiniMage_TWOW.lua"/>
<!-- Empty core frame used for initialization and such --> <!-- Empty core frame used for initialization and such -->
+12 -5
View File
@@ -7,7 +7,7 @@ MiniMage_TWOW is a lightweight World of Warcraft addon designed for Mages, provi
* I do not take credit for creating this addon, only modifying it to include TurtleWoW specific features * I do not take credit for creating this addon, only modifying it to include TurtleWoW specific features
# Version 1.2
## TurtleWoW Specific Features ## TurtleWoW Specific Features
* Includes Alah'Thalas and Theramore for Alliance characters. * Includes Alah'Thalas and Theramore for Alliance characters.
* Includes Stonard for Horde characters. * Includes Stonard for Horde characters.
@@ -17,6 +17,9 @@ MiniMage_TWOW is a lightweight World of Warcraft addon designed for Mages, provi
* **Minimap Button**: Drag and position a minimap button for easy access. * **Minimap Button**: Drag and position a minimap button for easy access.
* **Dropdown Menu**: Quick-cast portals and teleports, organized by faction. * **Dropdown Menu**: Quick-cast portals and teleports, organized by faction.
* **Faction Support**: Automatically shows relevant portal and teleport spells for Horde or Alliance Mages. * **Faction Support**: Automatically shows relevant portal and teleport spells for Horde or Alliance Mages.
* Teleport Section Greyed out Until Level 20
* Portals Section Greyed out Until Level 40
* "Haven't Learned Spell" Message when trying to cast a Teleport/Portal you don't have trained.
## Installation ## Installation
@@ -31,13 +34,18 @@ The launcher will automatically download and install the addon and keep it updat
### Manual Install ### Manual Install
1. Download the repository into your `Interface/AddOns/` folder. 1. Download the repository into your `Interface/AddOns/` folder.
2. Ensure the folder structure is `MiniMage_TWOW/MiniMage.lua`. 2. Ensure the folder structure is `MiniMage_TWOW/MiniMage_TWOW.lua`.
3. Reload the UI or restart WoW. 3. Reload the UI or restart WoW.
## Usage ## Usage & Options
* Click the minimap button to open the dropdown menu. * Click the minimap button to open the dropdown menu.
* Select the desired portal or teleport. * Select the desired portal or teleport.
### /mmage Commands
* /mmage help - Show Commands
* /mmage icon - Show/Hide Minimap Icon
* /mmage portals - Show/Hide Portals from Menu
* /mmage reset - Reset Addon Settings
## Contributing ## Contributing
@@ -45,5 +53,4 @@ Let me know if you have any issues, I'll fix it if I am able to.
## Screenshots ## Screenshots
![MiniMage_TWOWa](https://github.com/user-attachments/assets/ed95ae31-580e-49ae-b469-eca9d63a2328) <img width="800" height="600" alt="ss1" src="https://github.com/user-attachments/assets/e1344159-2bd9-43a1-8edb-9b16e123d022" />
+1 -1
View File
@@ -1,6 +1,6 @@
--the only place MINIMAGE_VERSION should be set --the only place MINIMAGE_VERSION should be set
MINIMAGE_VERSION = "1.0"; MINIMAGE_VERSION = "1.2";
--[[ --[[