MAX_MEGAMACROS = 84; NUM_MACRO_ICONS_SHOWN = 20; NUM_ICONS_PER_ROW = 5; NUM_ICON_ROWS = 4; MACRO_ICON_ROW_HEIGHT = 36; local menucheck = 0; local loadcheck = 0; BINDING_HEADER_MEGAMACROHEADER = "Megamacro"; BINDING_NAME_MEGAMACRO = "MegaMacro Toggle"; MegaMacroText = {}; SLASH_MEGAMACRO1 = "/megamacro"; SlashCmdList["MEGAMACRO"] = function(msg) ShowMegaMacroFrame(); end SlashCmdList["MACRO"] = function(msg) ShowMegaMacroFrame(); end UIPanelWindows["MegaMacroFrame"] = { area = "left", pushable = 5 }; -- Hook the New MacroFrame Load to load MegaMacro LoadOnDemand Style :) --MacroFrame_LoadUI = MegaMacroFrame_LoadUI; function MegaMacroFrame_LoadUI() -- Hmm :) do nothing for now.. --UIParentLoadAddOn("MegaMacro"); if ( not MegaMacroFrame:IsVisible() ) then ShowUIPanel(MegaMacroFrame); end end function ShowMegaMacroFrame() ShowUIPanel(MegaMacroFrame); end function MegaMacro_SpellButton_OnClick(drag) local id = SpellBook_GetSpellID(this:GetID()); if ( id > MAX_SPELLS ) then return; end this:SetChecked("false"); if ( drag ) then PickupSpell(id, SpellBookFrame.bookType); elseif ( IsShiftKeyDown() ) then if ( MegaMacroFrame and MegaMacroFrame:IsVisible() ) then local spellName, subSpellName = GetSpellName(id, SpellBookFrame.bookType); if ( spellName and not IsSpellPassive(id, SpellBookFrame.bookType) ) then if ( subSpellName and (strlen(subSpellName) > 0) ) then MegaMacroFrame_AddMacroLine(TEXT(SLASH_CAST1).." "..spellName.."("..subSpellName..")"); else MegaMacroFrame_AddMacroLine(TEXT(SLASH_CAST1).." "..spellName); end end else PickupSpell(id, SpellBookFrame.bookType ); end elseif ( arg1 ~= "LeftButton" and SpellBookFrame.bookType == BOOKTYPE_PET ) then ToggleSpellAutocast(id, SpellBookFrame.bookType); else CastSpell(id, SpellBookFrame.bookType); SpellButton_UpdateSelection(); end end function MegaMacroFrame_OnLoad() --Fix the load error hopefully --this:RegisterEvent("VARIABLES_LOADED"); this:RegisterEvent("PLAYER_ENTERING_WORLD"); -- Hook functions MacroFrame_LoadUI = MegaMacroFrame_LoadUI; ShowMacroFrame = ShowMegaMacroFrame; -- Hook spellbook to allow shift clicking of spells SpellButton_OnClick = MegaMacro_SpellButton_OnClick; if ( GetNumMacros() > 0 ) then MegaMacroFrame_SelectMacro(1); MegaMacroFrameSelectedMacroButton:SetID(1); else MegaMacroFrame_SelectMacro(nil); end end function DeleteMegaMacroFrame_OnLoad() if ( GetNumMacros() > 0 ) then MegaMacroFrame_SelectMacro(1); MegaMacroFrameSelectedMacroButton:SetID(1); else MegaMacroFrame_SelectMacro(nil); end end function MegaMacro_OnEvent() if ( event == "PLAYER_ENTERING_WORLD" ) then MegaMacro_Init(); end end function MegaMacro_Init() if ( loadcheck == 0 ) then local numMacros = GetNumMacros(); for i=1, MAX_MEGAMACROS do if ( i <= numMacros ) then macroName = GetMacroInfo(i); if ( not MegaMacroText[macroName] ) then MegaMacroText[macroName] = ""; else RunScript(MegaMacroText[macroName]); end end end loadcheck = 1; end end function NewChatMenu_OnShow() UIMenu_OnShow(); EmoteMenu:Hide(); if (menucheck ==0) then --ChatMenuButton10:Hide(); UIMenu_AddButton("MegaMacro", nil, ShowMegaMacroFrame); menucheck = 1; end end function MegaMacro_Execute() MegaMacroText[macroName] = MegaMacroEditBox:GetText(); RunScript(MegaMacroText[macroName]); MegaMegaMacroNewButton:Disable(); end function MegaMacro_UpdateText(macroName) --if ( not macroName ) then -- Hmm --else --if ( not MegaMacroText[macroName] ) then --MegaMacroText[macroName] = ""; --end MegaMacroText[macroName] = MegaMacroEditBox:GetText(); --end end function MegaMacroFrame_OnShow() MegaMacroFrame_Update(); PlaySound("igCharacterInfoOpen"); --MacroNewButton:SetText(NEW); --Mega macro updates MegaMegaMacroNewButton:Disable(); MegaMacroID = MegaMacroFrame.selectedMacro; if ( not MegaMacroID ) then -- Hmm else macroName = GetMacroInfo(MegaMacroID); MegaMacroEditBox:SetText(MegaMacroText[macroName]); end end function MegaMacroFrame_OnHide() MegaMacroPopupFrame:Hide(); if ( MegaMacroFrame.textChanged and MegaMacroFrame.selectedMacro and GetNumMacros() > 0) then EditMacro(MegaMacroFrame.selectedMacro, nil, nil, MegaMacroFrameText:GetText(), 1); end MegaMacroFrame.textChanged = nil; --Dunno why but this is what blizzard did.. --SaveMacros(); PlaySound("igCharacterInfoClose"); end function MegaMacroFrame_Update() local numMacros = GetNumMacros(); local megamacroButton, macroIcon, macroName; local name, texture, body, isLocal; local selectedName, selectedBody, selectedIcon; -- Macro List for i=1, MAX_MEGAMACROS do megamacroButton = getglobal("MegaMacroButton"..i); macroIcon = getglobal("MegaMacroButton"..i.."Icon"); macroName = getglobal("MegaMacroButton"..i.."Name"); if ( i <= numMacros ) then name, texture, body, isLocal = GetMacroInfo(i); macroIcon:SetTexture(texture); macroName:SetText(name); megamacroButton:Enable(); -- Highlight Selected Macro if ( i == MegaMacroFrame.selectedMacro ) then megamacroButton:SetChecked(1); MegaMacroFrameSelectedMacroName:SetText(name); MegaMacroFrameText:SetText(body); MegaMacroFrameSelectedMacroButtonIcon:SetTexture(texture); else megamacroButton:SetChecked(0); end else megamacroButton:SetChecked(0); macroIcon:SetTexture(""); macroName:SetText(""); megamacroButton:Disable(); end end --Mega Macro Updates local numMacros = GetNumMacros(); for i=1, MAX_MEGAMACROS do if ( i <= numMacros ) then macroName = GetMacroInfo(i); if ( not MegaMacroText[macroName] ) then MegaMacroText[macroName] = ""; else --RunScript on PLAYER_ENTERING_WORLD once --RunScript(MegaMacroText[macroName]); end end end -- Macro Details if ( MegaMacroFrame.selectedMacro ~= nil ) then MegaMacroFrame_ShowDetails(); MegaMacroDeleteButton:Enable(); else MegaMacroFrame_HideDetails(); MegaMacroDeleteButton:Disable(); end if ( numMacros == MAX_MEGAMACROS or MegaMacroPopupFrame:IsVisible() ) then MegaMacroNewButton:Disable(); else MegaMacroNewButton:Enable(); end -- Disable Buttons if ( MegaMacroPopupFrame:IsVisible() ) then MegaMacroEditButton:Disable(); MegaMacroDeleteButton:Disable(); else MegaMacroEditButton:Enable(); MegaMacroDeleteButton:Enable(); end if ( not MegaMacroFrame.selectedMacro ) then MegaMacroDeleteButton:Disable(); end end function MegaMacroFrame_AddMacroLine(line) if ( MegaMacroFrameText:IsVisible() ) then MegaMacroFrameText:SetText(MegaMacroFrameText:GetText()..line); end end function MegaMacroButton_OnClick() if ( MegaMacroFrame.textChanged and MegaMacroFrame.selectedMacro ) then EditMacro(MegaMacroFrame.selectedMacro, nil, nil, MegaMacroFrameText:GetText(), 1); end MegaMacroFrame.textChanged = nil; MegaMacroFrame_SelectMacro(this:GetID()); MegaMacroFrameSelectedMacroButton:SetID(this:GetID()); MegaMacroFrame_Update(); MegaMacroPopupFrame:Hide(); MegaMacroFrameText:ClearFocus(); --Mega Macro Stuff MegaMacroEditBox:ClearFocus(); MegaMacroEditBox:SetTextColor(25,25,25); MegaMacroID = MegaMacroFrame.selectedMacro; macroName = GetMacroInfo(MegaMacroID); --if ( not MegaMacroText[macroName] ) then --MegaMacroText[macroName] = ""; --end MegaMacroEditBox:SetText(MegaMacroText[macroName]); MegaMacro_UpdateText(macroName); end function MegaMacroFrame_SelectMacro(id) MegaMacroFrame.selectedMacro = id; end function MegaMacroNewButton_OnClick() if ( MegaMacroNewButton:GetText() == COMPLETE ) then MegaMacroFrameText:ClearFocus(); EditMacro(MegaMacroFrame.selectedMacro, nil, nil, MegaMacroFrameText:GetText(), 1); --MegaMacroNewButton:SetText(NEW); return; end MegaMacroPopupFrame.mode = "new"; if ( MegaMacroFrame.textChanged and MegaMacroFrame.selectedMacro ) then EditMacro(MegaMacroFrame.selectedMacro, nil, nil, MegaMacroFrameText:GetText(), 1); end MegaMacroFrameText:Hide(); MegaMacroFrame.textChanged = nil; MegaMacroFrameSelectedMacroButtonIcon:SetTexture(""); MegaMacroPopupFrame.selectedIcon = nil; MegaMacroPopupFrame:Show(); --MegaMacroNewButton:SetText(COMPLETE); MegaMegaMacroNewButton:Disable(); end function MegaMacroEditButton_OnClick() MegaMacroPopupFrame.mode = "edit"; if ( MegaMacroFrame.textChanged ) then EditMacro(MegaMacroFrame.selectedMacro, nil, nil, MegaMacroFrameText:GetText(), 1); end MegaMacroFrame.textChanged = nil; MegaMacroPopupOkayButton_Update(); MegaMacroPopupFrame:Show(); end function MegaMacroFrame_HideDetails() MegaMacroEditButton:Hide(); MegaMacroFrameCharLimitText:Hide(); MegaMacroFrameText:Hide(); MegaMacroFrameSelectedMacroName:Hide(); MegaMacroFrameSelectedMacroBackground:Hide(); MegaMacroFrameSelectedMacroButton:Hide(); end function MegaMacroFrame_ShowDetails() MegaMacroEditButton:Show(); MegaMacroFrameCharLimitText:Show(); MegaMacroFrameEnterMacroText:Show(); MegaMacroFrameText:Show(); MegaMacroFrameSelectedMacroName:Show(); MegaMacroFrameSelectedMacroBackground:Show(); MegaMacroFrameSelectedMacroButton:Show(); end function MegaMacroPopupFrame_OnShow() MegaMacroPopupFrame_Update(); PlaySound("igCharacterInfoOpen"); MegaMacroFrameText:ClearFocus(); MegaMacroPopupEditBox:SetFocus(); MegaMacroPopupOkayButton_Update(); -- Disable Buttons MegaMacroEditButton:Disable(); MegaMacroDeleteButton:Disable(); MegaMacroNewButton:Disable(); end function MegaMacroPopupFrame_OnHide() if ( this.mode == "new" ) then MegaMacroFrameText:Show(); MegaMacroFrameText:SetFocus(); end -- Enable Buttons MegaMacroEditButton:Enable(); MegaMacroDeleteButton:Enable(); MegaMacroNewButton:Enable(); end function MegaMacroPopupFrame_Update() local numMacroIcons = GetNumMacroIcons(); local macroPopupIcon, macroPopupButton; local macroPopupOffset = FauxScrollFrame_GetOffset(MegaMacroPopupScrollFrame); local index; -- Determine whether we're creating a new macro or editing an existing one if ( this.mode == "new" ) then MegaMacroPopupEditBox:SetText(""); elseif ( this.mode == "edit" ) then local name, texture, body, isLocal = GetMacroInfo(MegaMacroFrame.selectedMacro); MegaMacroPopupEditBox:SetText(name); end -- Icon list for i=1, NUM_MACRO_ICONS_SHOWN do macroPopupIcon = getglobal("MegaMacroPopupButton"..i.."Icon"); macroPopupButton = getglobal("MegaMacroPopupButton"..i); index = (macroPopupOffset * NUM_ICONS_PER_ROW) + i; if ( index <= numMacroIcons ) then macroPopupIcon:SetTexture(GetMacroIconInfo(index)); macroPopupButton:Show(); else macroPopupIcon:SetTexture(""); macroPopupButton:Hide(); end if ( index == MegaMacroPopupFrame.selectedIcon ) then macroPopupButton:SetChecked(1); else macroPopupButton:SetChecked(nil); end end -- Scrollbar stuff FauxScrollFrame_Update(MegaMacroPopupScrollFrame, ceil(numMacroIcons / NUM_ICONS_PER_ROW) , NUM_ICON_ROWS, MACRO_ICON_ROW_HEIGHT ); end function MegaMacroPopupOkayButton_Update() if ( (strlen(MegaMacroPopupEditBox:GetText()) > 0) and MegaMacroPopupFrame.selectedIcon ) then MegaMacroPopupOkayButton:Enable(); else MegaMacroPopupOkayButton:Disable(); end if ( MegaMacroPopupFrame.mode == "edit" and (strlen(MegaMacroPopupEditBox:GetText()) > 0) ) then MegaMacroPopupOkayButton:Enable(); end end function MegaMacroPopupButton_OnClick() MegaMacroPopupFrame.selectedIcon = this:GetID() + (FauxScrollFrame_GetOffset(MegaMacroPopupScrollFrame) * NUM_ICONS_PER_ROW) MegaMacroFrameSelectedMacroButtonIcon:SetTexture(GetMacroIconInfo(MegaMacroPopupFrame.selectedIcon)); MegaMacroPopupOkayButton_Update(); MegaMacroPopupFrame_Update(); end function MegaMacroPopupOkayButton_OnClick() local index = 1 if ( MegaMacroPopupFrame.mode == "new" ) then index = CreateMacro(MegaMacroPopupEditBox:GetText(), MegaMacroPopupFrame.selectedIcon, nil, 1); elseif ( MegaMacroPopupFrame.mode == "edit" ) then local id = MegaMacroFrame.selectedMacro; if ( not id ) then -- Hmm else local idName = GetMacroInfo(id); local newmacroName = MegaMacroPopupEditBox:GetText(); if ( not MegaMacroText[newmacroName] ) then MegaMacroText[newmacroName] = MegaMacroText[idName]; end MegaMacroText[idName] = nil; end index = EditMacro(MegaMacroFrame.selectedMacro, MegaMacroPopupEditBox:GetText(), MegaMacroPopupFrame.selectedIcon); end MegaMacroFrame_SelectMacro(index); MegaMacroPopupFrame:Hide(); MegaMacroFrame_Update(); end function MegaMacroFrame_EditMacro() if ( MegaMacroFrameText:IsVisible() ) then if ( MegaMacroFrame.textChanged ) then EditMacro(MegaMacroFrame.selectedMacro, nil, nil, MegaMacroFrameText:GetText(), 1); MegaMacroFrame.textChanged = nil; end end end function ToggleMegaMacroFrame() if ( MegaMacroFrame:IsVisible() ) then MegaMacroFrame:Hide(); else MegaMacroFrame:Show(); end end