-------------------------------------------------------------------------- -- TitanQuests.lua -------------------------------------------------------------------------- --[[ Titan Panel [Quests] Displays number of quests in Titan Panel. When hovered over it displays the following info: - total number of quests - number of Elite quests - number of Dungeon quests - number of Raid quests - number of PvP quests - number of regular quests (non elite/dungeon/raid/pvp) - number of quests in log currently completed Right-click to see a color coded list of current quests. When hovered over a dropdown menu will appear with a list of quest objectives, add to Blizzard's Quest Tracker, share quest, abandon quest, open quest details and link quest to chat. The Options menu allows you to sort and groupthe quests by level, zone, or by title. You can also apply a filter to view only dungeon, elite, complete, incomplete, or regular quests. Can toggle MonkeyQuest, QuestHistory, PartyQuests, QuestIon and QuestBank if these AddOns are installed. NOTE: Requires Titan Panel version 1.22+ TODO: Minor French and German translations. Complete Korean translations. v0.18 (June 8, 2006 01:00 PST) - updated toc# to latest patch) [Ryessa] - fixed background on quest detail frame [Ryessa] - re-positioned close button on text frame [Ryessa] v0.17 (January 7, 2006 13:30 PST) - fixed quest detail frame v0.16 (January 6, 2006 10:00 PST) - updated toc# for 1.9 patch v0.15 (September 20, 2005 10:15 PST) - updated toc# for 1.70 patch - fixed the error caused when minimizing a quest section in Blizzard's QuestLog v0.14 (July 6, 2005 10:18 PST) - Added persistence of quests over UI reloads and logout [Ryessa] - Refactored Titan [Quests] into smaller, more logical files TitanQuests (.lua, .xml), TitanQuestsDetails (.lua, .xml), and TitanQuestsUtils (.lua) [Ryessa] v0.13 (June 28, 2005 9:11 PST) - fixed bug when clicking on "Quest Details" - minor German translation fix (thanks Scarabeus) v0.12 (June 26, 2005 1:00 PST) - added ability to click on a quest to add to the quest tracker directly [Ryessa] - added option to set "Watch" or "Quest Details" as primary action when clicking a quest [Ryessa] - added SHIFT-click to perform the secondary action ("Watch" or "Quest Details") [Ryessa] - cleaned up info display panel a bit [Ryessa] - set quests to store their toggle state in Titan variables (prep to persist watched quests between sessions) [Ryessa] - added option to disable grouping of quests under Zone or Level headings [Ryessa] - moved a lot of code into utility functions for code cleanliness at cost of a slight perf hit (not noticable) [Ryessa] - added "Failed" quest tag [Corgi] v0.11 (June 15, 2005 16:40 PST) - new quest list layout [Ryessa] - added option to show only incomplete quests (need loc guys to review) [Ryessa] - added grouping headers when sorting by location or level [Ryessa] - moved most options to a side menu because of the larger size from grouping [Ryessa] - Shortened English tooltip descriptors [Ryessa] - Changed Titan button text to be NumComplete/NumCurrent [Ryessa] - updated for Titan Panel 1.24 [Corgi] v0.10 (June 7, 2005 20:30 PST) - German localization changes (thanks Kaesemuffin) - added French localization (thanks Vorpale) - toc updated for 1.50 patch v0.09 (June 2, 2005 15:31 PST) - fixed bug that was causing WoW.exe to crash when changing characters - added German localization (thanks Scarabeus) v0.08 (May 30, 2005 14:00 PST) - added the ability to sort the quest list by location (default), level or title. - added the ability to just show quests based on their type (ie, just show elite quests). v0.07 (May 27, 2005 17:41 PST) - added a [Quests] icon for the Titan Panel, which can be turned on/off. - minor changes to text displayed in mouseover tooltip. v0.06 (May 20, 2005 20:27 PST) - added 'Quest Details' button to quest dropdown menu. - added a 'Link Quest' button to quest dropdown menu. - added Location to Quest Details. - added colored quest level text to Quest Details window title. - fixed ui scaling issue with Quest Details window. - added 'Toggle' dropdown menu to toggle the blizzard's quest log and various 3rd party addons. - clicking on quest now opens a movable window with complete quest info, including rewards. - Share Quest has been added to quest dropdown menu. - Abandon Quest has been added to quest dropdown menu (a window will open for confirmation). - localization.lua is ready for german, french and korean translations v0.05 (May 15, 2005 16:20 PST) - clicking on a quest in the quest list will open a dropdown menu showing the quest objectives and a button to add/remove the quest from Blizzard's Quest Tracker. - added quest location and complete tag to the quest list. - added the ability to toggle PartyQuests, QuestBank, QuestIon if they are installed. - changed 'About' button to open a dropdown menu displaying mod name, version and author name. v0.04 (May 14, 2005 19:43 PST) - added the ability to toggle MonkeyQuest and/or QuestHistory from the right-click menu if they are installed. - added version info to mouseover tooltip. - added 'About' to right-click menu, which opens a window displaying mod name, version and author name. v0.03 (May 13, 2005 14:28 PST) - clicking on quest will now open the quest log to that particular quest. v0.02 (May 13, 2005 12:01 PST) - fixed typo to allow 'Show Label Text' to work. v0.01 (May 13, 2005 10:30 PST) - Initial Release ]]-- -- -- Titan Panel Variables -- TITAN_QUESTS_ID = "Quests"; TITAN_QUESTS_ARTWORK_PATH = "Interface\\AddOns\\TitanQuests\\Artwork\\"; TitanQuestsWatched = nil; TitanQuestsSettingsInit = nil; -- -- OnFunctions -- function TitanPanelQuestsButton_OnLoad() this.registry = { id = TITAN_QUESTS_ID, menuText = TITAN_QUESTS_MENU_TEXT, buttonTextFunction = "TitanPanelQuestsButton_GetButtonText", tooltipTitle = TITAN_QUESTS_TOOLTIP, tooltipTextFunction = "TitanPanelQuestsButton_GetTooltipText", icon = TITAN_QUESTS_ARTWORK_PATH.."TitanQuests", iconWidth = 16, savedVariables = { ShowIcon = 1, ShowLabelText = 1, SortByLevel = TITAN_NIL, SortByLocation = 1, SortByTitle = TITAN_NIL, ShowElite = TITAN_NIL, ShowDungeon = TITAN_NIL, ShowRaid = TITAN_NIL, ShowPVP = TITAN_NIL, ShowRegular = TITAN_NIL, ShowCompleted = TITAN_NIL, ShowIncomplete = TITAN_NIL, ShowAll = 1, GroupBehavior = 1, ClickBehavior = TITAN_NIL, QuestsWatched = { nil, nil, nil, nil, nil }, } }; this:RegisterEvent("VARIABLES_LOADED"); this:RegisterEvent("PLAYER_ENTERING_WORLD"); this:RegisterEvent("UNIT_NAME_UPDATE"); this:RegisterEvent("QUEST_LOG_UPDATE"); end function TitanPanelQuestsButton_OnUpdate(elapsed) if ( TitanQuestsWatched ) then return; end if ( TitanQuestsSettingsInit ) then return; end if ( TitanGetVar(TITAN_QUESTS_ID,"QuestsWatched") ~= nil ) then TitanPanelQuests_InitSettings(); end end function TitanPanelQuestsButton_OnEvent() if ( event == "VARIABLES_LOADED" or event == "PLAYER_ENTERING_WORLD" or event == "UNIT_NAME_UPDATE" ) then TitanQuestsWatched = nil; TitanQuestsSettingsInit = nil; elseif ( event == "QUEST_LOG_UPDATE" ) then -- Update Details panel if needed. if ( TitanQuests_Details ~= nil ) then if ( TitanQuests_Details:IsVisible() ) then TitanQuests_Details_Update(); end end -- Update the QuestWatched trackers TitanPanelQuests_UpdateSettings(); end TitanPanelButton_UpdateButton(TITAN_QUESTS_ID); TitanPanelButton_UpdateTooltip(); end -- -- initialize all Titan Quests settings -- function TitanPanelQuests_InitSettings() TitanQuestsSettingsInit = 1; -- Load up the Blizzard Quest Tracker if ( not TitanQuestsWatched ) then if (TitanGetVar(TITAN_QUESTS_ID, "QuestsWatched") ~= nil) then TitanQuestsWatched = TitanGetVar(TITAN_QUESTS_ID, "QuestsWatched"); else TitanQuestsWatched = { nil, nil, nil, nil, nil }; TitanSetVar(TITAN_QUESTS_ID, "QuestsWatched", TitanQuestsWatched); end for i=1, MAX_WATCHABLE_QUESTS do if (TitanQuestsWatched[i] ~= nil) then if ( GetNumQuestLeaderBoards(TitanQuestsWatched[i]) > 0 ) then local foundQuest = nil; for j=1, GetNumQuestWatches() do local questIndex = GetQuestIndexForWatch(j); if ( questIndex == TitanQuestsWatched[i] ) then foundQuest = 1; end; end if (not foundQuest) then AddQuestWatch(TitanQuestsWatched[i]); end else TitanQuestsWatched[i] = nil; TitanSetVar(TITAN_QUESTS_ID, "QuestsWatched", TitanQuestsWatched); end end end QuestWatch_Update(); end end -- -- update the Titan Quests settings following a log update -- function TitanPanelQuests_UpdateSettings() local questIndex; local numWatched; -- Fill in the watched quests. if ( not TitanQuestsWatched or not TitanGetVar(TITAN_QUESTS_ID, "QuestsWatched") ) then return; end numWatched = GetNumQuestWatches(); for i=1, MAX_WATCHABLE_QUESTS do if ( i <= numWatched ) then questIndex = GetQuestIndexForWatch(i); if ( questIndex ) then TitanQuestsWatched[i] = questIndex; end else TitanQuestsWatched[i] = nil; end end TitanSetVar(TITAN_QUESTS_ID, "QuestsWatched", TitanQuestsWatched); end -- -- create button text -- function TitanPanelQuestsButton_GetButtonText(id) local MaxQuests = 20; local NumCompleteQuests = 0; local NumEntries, NumQuests; NumEntries, NumQuests = GetNumQuestLogEntries(); -- get quest list local questlist = TitanPanelQuests_BuildQuestList(); local i = 0; -- count the number of incomplete quests for i=1, NumQuests do if ( questlist[i] ~= nil and questlist[i].questisComplete ) then NumCompleteQuests = NumCompleteQuests + 1; end end -- create string for Titan bar display local buttonRichText = format(TITAN_QUESTS_BUTTON_TEXT, TitanUtils_GetGreenText(NumCompleteQuests), TitanUtils_GetHighlightText(NumQuests) ); -- Return our button label return TITAN_QUESTS_BUTTON_LABEL, buttonRichText; end -- -- create tooltip text -- function TitanPanelQuestsButton_GetTooltipText() -- Expand everything ExpandQuestHeader(0); -- return string for tooltip local tooltipRichText = ""; -- counters local numElite = 0; local numDungeon = 0; local numRaid = 0; local numPVP = 0; local numReg = 0; local numComplete = 0; local numIncomplete = 0; local i = 0; local numQuests = 0; -- get quest list local questlist = TitanPanelQuests_BuildQuestList(); -- total number of quests numQuests = table.getn(questlist); -- count the different type of quests and count completed quests for i=1, numQuests do if ( questlist[i].questTag == ELITE ) then numElite = numElite + 1; elseif ( questlist[i].questTag == TITAN_QUESTS_DUNGEON ) then numDungeon = numDungeon + 1; elseif ( questlist[i].questTag == TITAN_QUESTS_RAID ) then numRaid = numRaid + 1; elseif ( questlist[i].questTag == TITAN_QUESTS_PVP ) then numPVP = numPVP + 1; else numReg = numReg + 1; end if ( questlist[i].questisComplete ) then numComplete = numComplete + 1; else numIncomplete = numIncomplete + 1; end end tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(TITAN_QUESTS_TOOLTIP_QUESTS_TEXT)..TitanUtils_GetHighlightText(numQuests.."\n"); tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(TITAN_QUESTS_TOOLTIP_ELITE_TEXT)..TitanUtils_GetHighlightText(numElite.."\n"); tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(TITAN_QUESTS_TOOLTIP_DUNGEON_TEXT)..TitanUtils_GetHighlightText(numDungeon.."\n"); tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(TITAN_QUESTS_TOOLTIP_RAID_TEXT)..TitanUtils_GetHighlightText(numRaid.."\n"); tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(TITAN_QUESTS_TOOLTIP_PVP_TEXT)..TitanUtils_GetHighlightText(numPVP.."\n"); tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(TITAN_QUESTS_TOOLTIP_REGULAR_TEXT)..TitanUtils_GetHighlightText(numReg.."\n"); tooltipRichText = tooltipRichText.."\n"; tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(TITAN_QUESTS_TOOLTIP_COMPLETED_TEXT)..TitanUtils_GetHighlightText(numComplete).."\n"; tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(TITAN_QUESTS_TOOLTIP_INCOMPLETE_TEXT)..TitanUtils_GetHighlightText(numIncomplete).."\n"; tooltipRichText = tooltipRichText.."\n"..TitanUtils_GetGreenText(TITAN_QUESTS_TOOLTIP_HINT_TEXT); return tooltipRichText; end -- -- create toplevel right-click menu -- function TitanPanelRightClickMenu_PrepareQuestsMenu() -- Large sections commented out, since they are replaced by various utility functions. - Ryessa if ( UIDROPDOWNMENU_MENU_LEVEL >= 2 ) then TitanPanelQuestsRightClickMenu_CreateMenu(); else -- get quest list local questlist = TitanPanelQuests_BuildQuestList(); -- total number of quests local numQuests = table.getn(questlist); local groupBy = "Location"; -- tracking length of list local numButtons = 1; -- Starts at 1 because "Quests" header is added elsewhere. - Ryessa if ( TitanGetVar(TITAN_QUESTS_ID, "SortByLevel") ) then table.sort(questlist, function(a,b) return (a.questLevel < b.questLevel); end); groupBy = "Level"; end if ( TitanGetVar(TITAN_QUESTS_ID, "SortByTitle") ) then table.sort(questlist, function(a,b) return (a.questTitle < b.questTitle); end); groupBy = "Title"; end local useTag; local completeTag; local questWatched = ""; local diff; local groupId = ""; local lastGroupId = ""; local questDisplayCount = 0; local i = 0; local info = {}; TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_QUESTS_ID].menuText); -- create a configuration entry info = {}; info.text = TITAN_QUESTS_OPTIONS_TEXT; info.value = "Options"; info.hasArrow = 1; UIDropDownMenu_AddButton(info); numButtons = numButtons + 1; -- output quest list to menu for i=1, numQuests do local unCheckableQuest = nil; -- added if ( TitanGetVar(TITAN_QUESTS_ID, "SortByLocation") and TitanGetVar(TITAN_QUESTS_ID, "GroupBehavior") ) then groupId = questlist[i].questLocation; elseif ( TitanGetVar(TITAN_QUESTS_ID, "SortByLevel") and TitanGetVar(TITAN_QUESTS_ID, "GroupBehavior") ) then groupId = TITAN_QUESTS_LEVEL_TEXT..questlist[i].questLevel; end -- check to see if quest is to be displayed local checkDisplay = 0; if ( TitanGetVar(TITAN_QUESTS_ID, "ShowElite") ) then if ( questlist[i].questTag == ELITE ) then checkDisplay = 1; end elseif ( TitanGetVar(TITAN_QUESTS_ID, "ShowDungeon") ) then if ( questlist[i].questTag == TITAN_QUESTS_DUNGEON ) then checkDisplay = 1; end elseif ( TitanGetVar(TITAN_QUESTS_ID, "ShowRaid") ) then if ( questlist[i].questTag == TITAN_QUESTS_RAID ) then checkDisplay = 1; end elseif ( TitanGetVar(TITAN_QUESTS_ID, "ShowPVP") ) then if ( questlist[i].questTag == TITAN_QUESTS_PVP ) then checkDisplay = 1; end elseif ( TitanGetVar(TITAN_QUESTS_ID, "ShowRegular") ) then if ( questlist[i].questTag == nil ) then checkDisplay = 1; end elseif ( TitanGetVar(TITAN_QUESTS_ID, "ShowCompleted") ) then if ( questlist[i].questisComplete ) then checkDisplay = 1; end elseif ( TitanGetVar(TITAN_QUESTS_ID, "ShowIncomplete") ) then if ( not questlist[i].questisComplete ) then checkDisplay = 1; end else checkDisplay = 1; end if ( checkDisplay == 1 ) then -- Check if this will be the last item displayed if ( (questDisplayCount == 29) or ((groupId ~= "" and groupId ~= lastGroupId) and (questDisplayCount==28)) ) then -- Display a truncation notice and exit for loop info.text = TITAN_QUESTS_QUESTLOG_TRUNCATED_TEXT; info.isTitle = 1; info.value = "QuestLogTruncated"; info.hasArrow = nil; info.notCheckable = 1; UIDropDownMenu_AddButton(info); numButtons = numButtons + 1; break; else questDisplayCount = questDisplayCount + 1; info = {}; if ( groupId ~= "" and groupId ~= lastGroupId ) then info.text = groupId; info.isTitle = 1; info.notCheckable = 1; UIDropDownMenu_AddButton(info); numButtons = numButtons + 1; info = {}; lastGroupId = groupId; questDisplayCount = questDisplayCount + 1; end if ( IsQuestWatched(questlist[i].questID) ) then -- May want to move part of this code to OnLoad() - Ryessa TitanSetVar(TITAN_QUESTS_ID, questlist[i].questID, 1); info.checked = TitanGetVar(TITAN_QUESTS_ID, questlist[i].questID); end info.text = TitanPanelQuests_GetQuestText(questlist[i].questID); -- added info.value = {TITAN_QUESTS_ID, questlist[i].questID, nil}; info.hasArrow = 1; info.func = TitanPanelQuests_ClickQuest; --info.notCheckable = 1; info.keepShownOnClick = 1; UIDropDownMenu_AddButton(info); numButtons = numButtons + 1; -- Add a tracking variable to set the button id for this quest. TitanSetVar(TITAN_QUESTS_ID, questlist[i].questID.."ButtonID", numButtons); end end end end end -- -- create 2nd level right-click menu -- function TitanPanelQuestsRightClickMenu_CreateMenu() local info = {}; if ( UIDROPDOWNMENU_MENU_LEVEL == 2 ) then if ( UIDROPDOWNMENU_MENU_VALUE == "Options" ) then -- sort selection info = {}; info.text = TITAN_QUESTS_SORT_TEXT; info.value = "Sort"; info.hasArrow = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show selection info = {}; info.text = TITAN_QUESTS_SHOW_TEXT; info.value = "Show"; info.hasArrow = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- toggle dropdown menu info = {}; info.text = TITAN_QUESTS_TOGGLE_TEXT; info.value = "Toggle"; info.hasArrow = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); TitanPanelRightClickMenu_AddSpacer(UIDROPDOWNMENU_MENU_LEVEL); -- toggle click behavior info = {}; info.text = TITAN_QUESTS_CLICK_BEHAVIOR_TEXT; info.value = "ClickBehavior"; info.hasArrow = nil; info.keepShownOnClick = 1; info.func = TitanPanelQuests_ToggleClickBehavior; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ClickBehavior"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- toggle grouping info = {}; info.text = TITAN_QUESTS_GROUP_BEHAVIOR_TEXT; info.value = "GroupBehavior"; info.hasArrow = nil; info.keepShownOnClick = nil; info.func = TitanPanelQuests_ToggleGroupBehavior; info.checked = TitanGetVar(TITAN_QUESTS_ID, "GroupBehavior"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); TitanPanelRightClickMenu_AddSpacer(UIDROPDOWNMENU_MENU_LEVEL); -- Toggle icon info = {}; info.text = TITAN_PANEL_MENU_SHOW_ICON; info.value = {TITAN_QUESTS_ID, "ShowIcon", nil}; info.func = TitanPanelRightClickMenu_ToggleVar; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowIcon"); info.keepShownOnClick = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- Toggle Label Text info = {}; info.text = TITAN_PANEL_MENU_SHOW_LABEL_TEXT; info.value = {TITAN_QUESTS_ID, "ShowLabelText", nil}; info.func = TitanPanelRightClickMenu_ToggleVar; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowLabelText"); info.keepShownOnClick = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE,TITAN_QUESTS_ID,TITAN_PANEL_MENU_FUNC_HIDE, UIDROPDOWNMENU_MENU_LEVEL); TitanPanelRightClickMenu_AddSpacer(UIDROPDOWNMENU_MENU_LEVEL); -- info about plugin info = {}; info.text = TITAN_QUESTS_ABOUT_TEXT; info.value = "DisplayAbout"; info.hasArrow = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); else -- -- build quest objectives list -- local questID = UIDROPDOWNMENU_MENU_VALUE[2]; --TitanPanelQuests_ChatPrint("QuestID: "..questID); --local questTitle, questLevel, questTag, questisHeader, questisCollapsed, questisComplete; --local diff, useTag, completeTag; --questTitle, questLevel, questTag, questisHeader, questisCollapsed, questisComplete = GetQuestLogTitle(questID); local questTitle, questLevel = GetQuestLogTitle(questID); local questDescription = ""; local questObjectives = ""; local numObjectives = 0; local ObjectivesText = ""; -- select the quest entry SelectQuestLogEntry(questID); QuestLog_SetSelection(questID); questDescription, questObjectives = GetQuestLogQuestText(); numObjectives = GetNumQuestLeaderBoards(); info = {}; info.value = questTitle; info.text = questTitle; info.isTitle = 1; info.notClickable = 1; info.notCheckable = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); if ( numObjectives > 0 ) then for j = 1, numObjectives, 1 do local text; local type; local finished; info = {}; text, type, finished = GetQuestLogLeaderBoard(j); if ( finished ) then info.text = TitanUtils_GetRedText(text); else info.text = text; end info.value = text; info.notClickable = 1; --info.isTitle = 0; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end else info = {}; if ( strlen(questObjectives) < 65 ) then info.text = TitanUtils_GetHighlightText(questObjectives); else info.text = TitanUtils_GetHighlightText(TITAN_QUESTS_OBJECTIVESTXT_LONG_TEXT); end info.value = "noobjective"; info.notClickable = 1; info.func = TitanPanelQuests_DisplayQuest; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end -- spacer info = {}; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- Header for options stuff info = {}; info.value = "Quest Options"; info.text = TITAN_QUESTS_QUEST_DETAILS_OPTIONS_TEXT; info.isTitle = 1; info.notClickable = 1; info.notCheckable = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- Add/Remove quest from Quest Tracker if ( IsQuestWatched(questID) ) then info = {}; info.text = TITAN_QUESTS_REMOVE_FROM_WATCHER_TEXT; info.value = {TITAN_QUESTS_ID, questID, nil}; info.isTitle = nil; info.notClickable = nil; info.notCheckable = nil; info.func = TitanPanelQuests_ToggleWatchStatus; --function () -- RemoveQuestWatch(questID); -- QuestWatch_Update(); --end UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); else if ( GetNumQuestLeaderBoards(questID) > 0 ) then info.text = TITAN_QUESTS_ADD_TO_WATCHER_TEXT; info.value = {TITAN_QUESTS_ID, questID, nil}; info.isTitle = nil; info.notClickable = nil; info.notCheckable = nil; info.disabled = nil; info.func = TitanPanelQuests_ToggleWatchStatus; --function () -- if ( GetNumQuestWatches() >= MAX_WATCHABLE_QUESTS ) then -- -- Set an error message if trying to show too many quests -- UIErrorsFrame:AddMessage(format(QUEST_WATCH_TOO_MANY, MAX_WATCHABLE_QUESTS), 1.0, 0.1, 0.1, 1.0, UIERRORS_HOLD_TIME); -- else -- AddQuestWatch(questID); -- QuestWatch_Update(); -- end --end UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end end -- share quest if ( GetQuestLogPushable() ) then info = {}; info.value = "ShareQuest"; info.text = SHARE_QUEST; info.func = function () QuestLogPushQuest(); end UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end -- abandon quest info = {}; info.value = "AbandonQuest"; info.text = ABANDON_QUEST; info.func = function () DropDownList1:Hide(); SetAbandonQuest(); StaticPopup_Show("ABANDON_QUEST", GetAbandonQuestName()); end UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- spacer info = {}; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- quest details info = {}; --info.value = questID; info.value = {TITAN_QUESTS_ID, questID, nil}; info.text = TITAN_QUESTS_QUEST_DETAILS_TEXT; info.func = TitanPanelQuests_DisplayQuest; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- link quest info = {}; info.value = "LinkQuest"; info.text = TITAN_QUESTS_LINK_QUEST_TEXT; info.func = function () ChatFrameEditBox:Insert("["..questLevel.."]"..questTitle.." "); end UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end elseif ( UIDROPDOWNMENU_MENU_LEVEL == 3 ) then if ( UIDROPDOWNMENU_MENU_VALUE == "DisplayAbout" ) then local AboutText = TITAN_QUESTS_ABOUT_POPUP_TEXT; info.text = AboutText; info.value = "AboutTextPopUP"; info.notClickable = 1; info.isTitle = 0; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); elseif ( UIDROPDOWNMENU_MENU_VALUE == "Sort" ) then info = { }; info.text = TITAN_QUESTS_SORT_TEXT; info.isTitle = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- sort by location (default) info = {}; info.text = TITAN_QUESTS_SORT_LOCATION_TEXT; info.func = TitanPanelQuests_SortByLocation; info.checked = TitanGetVar(TITAN_QUESTS_ID, "SortByLocation"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- sort by level info = {}; info.text = TITAN_QUESTS_SORT_LEVEL_TEXT; info.func = TitanPanelQuests_SortByLevel; info.checked = TitanGetVar(TITAN_QUESTS_ID, "SortByLevel"); --info.checked = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- sort by title info = {}; info.text = TITAN_QUESTS_SORT_TITLE_TEXT; info.func = TitanPanelQuests_SortByTitle; info.checked = TitanGetVar(TITAN_QUESTS_ID, "SortByTitle"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); elseif ( UIDROPDOWNMENU_MENU_VALUE == "Show" ) then info = { }; info.text = TITAN_QUESTS_SHOW_TEXT; info.isTitle = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show just elite info = {}; info.text = TITAN_QUESTS_SHOW_ELITE_TEXT; info.func = TitanPanelQuests_ShowElite; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowElite"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show just dungeon info = {}; info.text = TITAN_QUESTS_SHOW_DUNGEON_TEXT; info.func = TitanPanelQuests_ShowDungeon; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowDungeon"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show just raid info = {}; info.text = TITAN_QUESTS_SHOW_RAID_TEXT; info.func = TitanPanelQuests_ShowRaid; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowRaid"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show just pvp info = {}; info.text = TITAN_QUESTS_SHOW_PVP_TEXT; info.func = TitanPanelQuests_ShowPVP; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowPVP"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show just regular info = {}; info.text = TITAN_QUESTS_SHOW_REGULAR_TEXT; info.func = TitanPanelQuests_ShowRegular; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowRegular"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show just completed info = {}; info.text = TITAN_QUESTS_SHOW_COMPLETED_TEXT; info.func = TitanPanelQuests_ShowCompleted; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowCompleted"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show only incomplete info = {}; info.text = TITAN_QUESTS_SHOW_INCOMPLETE_TEXT; info.func = TitanPanelQuests_ShowIncomplete; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowIncomplete"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- show all info = {}; info.text = TITAN_QUESTS_SHOW_ALL_TEXT; info.func = TitanPanelQuests_ShowAll; info.checked = TitanGetVar(TITAN_QUESTS_ID, "ShowAll"); UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); elseif ( UIDROPDOWNMENU_MENU_VALUE == "Toggle" ) then info = { }; info.text = TITAN_QUESTS_TOGGLE_TEXT; info.isTitle = 1; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- toggle blizzard's questlog info = {}; if ( QuestLogFrame:IsVisible() ) then info.text = TITAN_QUESTS_CLOSE_QUESTLOG_TEXT; else info.text = TITAN_QUESTS_OPEN_QUESTLOG_TEXT; end info.value = "OpenQuestLog"; info.func = ToggleQuestLog; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); -- toggle MonkeyQuest if ( MonkeyQuestFrame ~= nil ) then info = {}; if ( MonkeyQuestFrame:IsVisible() ) then info.text = TITAN_QUESTS_CLOSE_MONKEYQUEST_TEXT; else info.text = TITAN_QUESTS_OPEN_MONKEYQUEST_TEXT; end info.value = "OpenMonkeyQuest"; info.func = TitanPanelQuests_ToggleMonkeyQuest; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end -- toggle QuestIon if ( QuestIon_Frame ~= nil ) then info = {}; if ( QuestIon_Frame:IsVisible() ) then info.text = TITAN_QUESTS_CLOSE_QUESTION_TEXT; else info.text = TITAN_QUESTS_OPEN_QUESTION_TEXT; end info.value = "OpenQuestIon"; info.func = QuestIon_ToggleVisible; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end -- toggle PartyQuests if ( PartyQuestsFrame ~= nil ) then info = {}; if ( PartyQuestsFrame:IsVisible() ) then info.text = TITAN_QUESTS_CLOSE_PARTYQUESTS_TEXT; else info.text = TITAN_QUESTS_OPEN_PARTYQUESTS_TEXT; end info.value = "OpenPartyQuests"; info.func = TogglePartyQuests; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end -- toggle QuestHistory if ( QuestHistoryFrame ~= nil ) then info = {}; if ( QuestHistoryFrame:IsVisible() ) then info.text = TITAN_QUESTS_CLOSE_QUESTHISTORY_TEXT; else info.text = TITAN_QUESTS_OPEN_QUESTHISTORY_TEXT; end info.value = "OpenQuestHistory"; info.func = QuestHistory_Toggle; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end -- toggle QuestBank if (QuestBankFrame ~= nil ) then info = {}; if ( QuestBankFrame:IsVisible() ) then info.text = TITAN_QUESTS_CLOSE_QUESTBANK_TEXT; else info.text = TITAN_QUESTS_OPEN_QUESTHISTORY_TEXT; end info.value = "OpenQuestBank"; info.func = QuestBank_Toggle; UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); end -- end toggles end end end -- -- Click on a Quest entry -- function TitanPanelQuests_ClickQuest() if ( (TitanGetVar(TITAN_QUESTS_ID, "ClickBehavior") and not IsShiftKeyDown()) or (not TitanGetVar(TITAN_QUESTS_ID, "ClickBehavior") and IsShiftKeyDown()) ) then TitanPanelQuests_ToggleWatchStatus() else TitanPanelQuests_DisplayQuest(); this:GetParent():Hide(); end end -- -- Toggle Watch Status -- function TitanPanelQuests_ToggleWatchStatus() local questID; local button; -- Get current Quest selected questID = this.value[2]; -- Get the quest button for i=1, UIDROPDOWNMENU_MAXBUTTONS, 1 do button = getglobal("DropDownList1Button"..i); if ( type(button.value) == type(this.value) ) then if ( button.value[2] and this.value[2] == button.value[2] ) then break; else button = nil; end else button = nil; end end -- Add/Remove quest from Quest Tracker if ( IsQuestWatched(questID) ) then -- Update Quest Tracker RemoveQuestWatch(questID); QuestWatch_Update(); TitanPanelQuests_UpdateSettings(); -- Toggle Status TitanPanelRightClickMenu_ToggleVar(TITAN_QUESTS_ID, questID); -- Update watcher tag. button:SetText(TitanPanelQuests_GetQuestText(questID)); -- Update the secondary pane getglobal("DropDownList2"):Hide(); if ( this:GetParent():GetName() == "DropDownList2" ) then button.checked = nil; getglobal(button:GetName().."Check"):Hide(); UIDropDownMenu_Refresh(); end else if (TitanPanelQuests_IsWatchAllowed(questID)) then -- Update Quest Tracker AddQuestWatch(questID); QuestWatch_Update(); TitanPanelQuests_UpdateSettings(); -- Toggle Status TitanPanelRightClickMenu_ToggleVar(TITAN_QUESTS_ID, questID); -- Update watcher tag. button:SetText(TitanPanelQuests_GetQuestText(questID)); -- Update the secondary pane getglobal("DropDownList2"):Hide(); if ( this:GetParent():GetName() == "DropDownList2" ) then button.checked = 1; getglobal(button:GetName().."Check"):Show(); UIDropDownMenu_Refresh(); end else -- Prevent checkmark from showing up... pretty counter-intuitive, we need to set this to checked -- so that the later code in UIDropDownMenu.lua will uncheck it again. - Ryessa if ( this:GetParent():GetName() == "DropDownList1" ) then button.checked = 1; else button.checked = nil; getglobal(button:GetName().."Check"):Hide(); this:GetParent():Hide(); UIDropDownMenu_Refresh(); end; end end end -- -- SortBy toggle functions -- function TitanPanelQuests_SortByLevel() if ( TitanGetVar(TITAN_QUESTS_ID, "SortByLevel") ) then TitanSetVar(TITAN_QUESTS_ID, "SortByLevel", nil); TitanSetVar(TITAN_QUESTS_ID, "SortByLocation", 1); TitanSetVar(TITAN_QUESTS_ID, "SortByTitle", nil); else TitanSetVar(TITAN_QUESTS_ID, "SortByLevel", 1); TitanSetVar(TITAN_QUESTS_ID, "SortByLocation", nil); TitanSetVar(TITAN_QUESTS_ID, "SortByTitle", nil); end DropDownList1:Hide(); end function TitanPanelQuests_SortByLocation() TitanSetVar(TITAN_QUESTS_ID, "SortByLevel", nil); TitanSetVar(TITAN_QUESTS_ID, "SortByLocation", 1); TitanSetVar(TITAN_QUESTS_ID, "SortByTitle", nil); TitanPanelButton_UpdateButton(TITAN_QUESTS_ID) DropDownList1:Hide(); end function TitanPanelQuests_SortByTitle() if ( TitanGetVar(TITAN_QUESTS_ID, "SortByTitle") ) then TitanSetVar(TITAN_QUESTS_ID, "SortByLevel", nil); TitanSetVar(TITAN_QUESTS_ID, "SortByLocation", 1); TitanSetVar(TITAN_QUESTS_ID, "SortByTitle", nil); else TitanSetVar(TITAN_QUESTS_ID, "SortByLevel", nil); TitanSetVar(TITAN_QUESTS_ID, "SortByLocation", nil); TitanSetVar(TITAN_QUESTS_ID, "SortByTitle", 1); end DropDownList1:Hide(); end -- -- Show toggle functions -- function TitanPanelQuests_ShowElite() if ( TitanGetVar(TITAN_QUESTS_ID, "ShowElite") ) then TitanSetVar(TITAN_QUESTS_ID, "ShowElite", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", 1); else TitanSetVar(TITAN_QUESTS_ID, "ShowElite", 1); TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", nil); end DropDownList1:Hide(); end function TitanPanelQuests_ShowDungeon() if ( TitanGetVar(TITAN_QUESTS_ID, "ShowDungeon") ) then TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", 1); else TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", 1); TitanSetVar(TITAN_QUESTS_ID, "ShowElite", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", nil); end DropDownList1:Hide(); end function TitanPanelQuests_ShowRaid() if ( TitanGetVar(TITAN_QUESTS_ID, "ShowRaid") ) then TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", 1); else TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", 1); TitanSetVar(TITAN_QUESTS_ID, "ShowElite", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", nil); end DropDownList1:Hide(); end function TitanPanelQuests_ShowPVP() if ( TitanGetVar(TITAN_QUESTS_ID, "ShowPVP") ) then TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", 1); else TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", 1); TitanSetVar(TITAN_QUESTS_ID, "ShowElite", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", nil); end DropDownList1:Hide(); end function TitanPanelQuests_ShowRegular() if ( TitanGetVar(TITAN_QUESTS_ID, "ShowRegular") ) then TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", 1); else TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", 1); TitanSetVar(TITAN_QUESTS_ID, "ShowElite", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", nil); end DropDownList1:Hide(); end function TitanPanelQuests_ShowCompleted() if ( TitanGetVar(TITAN_QUESTS_ID, "ShowCompleted") ) then TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", 1); else TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", 1); TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowElite", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", nil); end DropDownList1:Hide(); end function TitanPanelQuests_ShowIncomplete() if ( TitanGetVar(TITAN_QUESTS_ID, "ShowIncomplete") ) then TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", 1); else TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", 1); TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowElite", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowAll", nil); end DropDownList1:Hide(); end function TitanPanelQuests_ShowAll() TitanSetVar(TITAN_QUESTS_ID, "ShowAll", 1); TitanSetVar(TITAN_QUESTS_ID, "ShowElite", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowDungeon", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRaid", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowPVP", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowRegular", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowCompleted", nil); TitanSetVar(TITAN_QUESTS_ID, "ShowIncomplete", nil); DropDownList1:Hide(); end -- -- Click Behavior toggle function -- function TitanPanelQuests_ToggleClickBehavior() TitanToggleVar(TITAN_QUESTS_ID, "ClickBehavior"); end -- -- Group Behavior toggle function -- function TitanPanelQuests_ToggleGroupBehavior() TitanToggleVar(TITAN_QUESTS_ID, "GroupBehavior"); TitanPanelRightClickMenu_Close(); end -- -- toggle quest details window -- function TitanQuests_DetailsShowHide() if ( TitanQuests_Details:IsVisible() ) then TitanQuests_Details:Hide(); else TitanQuests_Details:Show(); TitanQuests_Details_Update(); TitanPanelQuests_DisplayQuest(); end end -- -- toggle MonkeyQuest -- function TitanPanelQuests_ToggleMonkeyQuest() if ( MonkeyQuestFrame:IsVisible() ) then HideUIPanel(MonkeyQuestFrame); else ShowUIPanel(MonkeyQuestFrame); end end