-- Log Script file for Extended Questlog 3.5 -- Copyright © 2006 Daniel Rehn function EQL3_Maximize() EQL3_QuestLogFrameCloseButton:Hide(); EQL3_QuestLogFrameMaximizeButton:Hide(); EQL3_QuestLogCountRight:SetPoint("TOPRIGHT", -28, -43); EQL3_QuestLogTitleText:SetPoint("TOP", 48, -16); EQL3_QuestLogVersionText:SetPoint("TOPRIGHT", -67, -16); EQL3_QuestFrameOptionsButton:SetPoint("BOTTOMRIGHT", -25, 5); EQL3_Top_Switch_On:Show(); EQL3_Bottom_Switch_On:Show(); EQL3_Top_Switch_Off:Hide(); EQL3_Bottom_Switch_Off:Hide(); -- EQL3_Top_Switch:SetTexture("Interface\Addons\EQL3\Images\EQL3_TopSwitchOn.tga"); -- EQL3_Bottom_Switch:SetTexture("Interface\Addons\EQL3\Images\EQL3_BottomSwitchOn.tga"); QuestlogOptions[EQL3_Player].WindowState = 1; ShowUIPanel(EQL3_QuestLogFrame_Description); end function EQL3_Minimize() EQL3_QuestLogFrameCloseButton:Show(); EQL3_QuestLogFrameMaximizeButton:Show(); EQL3_QuestLogCountRight:SetPoint("TOPRIGHT", -356, -43); EQL3_QuestLogTitleText:SetPoint("TOP", -114, -16); EQL3_QuestLogVersionText:SetPoint("TOPRIGHT", -395, -16); EQL3_QuestFrameOptionsButton:SetPoint("BOTTOMRIGHT", -354, 5); EQL3_Top_Switch_On:Hide(); EQL3_Bottom_Switch_On:Hide(); EQL3_Top_Switch_Off:Show(); EQL3_Bottom_Switch_Off:Show(); -- EQL3_Top_Switch:SetTexture("Interface\Addons\EQL3\Images\EQL3_TopSwitchOff"); -- EQL3_Bottom_Switch:SetTexture("Interface\Addons\EQL3\Images\EQL3_BottomSwitchOff"); QuestlogOptions[EQL3_Player].WindowState = 0; HideUIPanel(EQL3_QuestLogFrame_Description); end -- Toggle local old_ToggleQuestLog = ToggleQuestLog; function ToggleQuestLog() if ( EQL3_QuestLogFrame:IsVisible() ) then HideUIPanel(EQL3_QuestLogFrame); else ShowUIPanel(EQL3_QuestLogFrame); end end -- ::::::::::::::::::: On Functions ::::::::::::::::::: -- -- OnLoad function EQL_QuestLog_OnLoad() this:RegisterEvent("VARIABLES_LOADED"); this:RegisterEvent("QUEST_PROGRESS"); this:RegisterEvent("QUEST_COMPLETE"); end -- OnEvent function EQL_QuestLog_OnEvent(event) if (event == "VARIABLES_LOADED") then EQL3_Player = UnitName("player").."-"..GetRealmName(); DEFAULT_CHAT_FRAME:AddMessage("Extended QuestLog "..EQL3_QUESTLOG_VERSION.." Loaded for "..UnitName("player").. " of "..GetRealmName()..".", 1, 1, 1, 1); if(QuestlogOptions == nil) then QuestlogOptions = {}; end if(QuestlogOptions[EQL3_Player] == nil) then QuestlogOptions[EQL3_Player] = {}; end -- Organizer if (QuestlogOptions[EQL3_Player].OrganizerSettings == nil) then QuestlogOptions[EQL3_Player].OrganizerSettings = {}; end if (QuestlogOptions[EQL3_Player].WindowState == nil) then QuestlogOptions[EQL3_Player].WindowState = 0; end if(QuestlogOptions[EQL3_Player].WindowState == 1) then EQL3_Maximize(); end if(QuestlogOptions[EQL3_Player].QuestWatches == nil) then QuestlogOptions[EQL3_Player].QuestWatches = {}; end if(QuestlogOptions[EQL3_Player].ShowQuestLevels == nil) then QuestlogOptions[EQL3_Player].ShowQuestLevels = 1; end if(QuestlogOptions[EQL3_Player].RestoreUponSelect == nil) then QuestlogOptions[EQL3_Player].RestoreUponSelect = 1; end if(QuestlogOptions[EQL3_Player].MinimizeUponClose == nil) then QuestlogOptions[EQL3_Player].MinimizeUponClose = 1; end if(QuestlogOptions[EQL3_Player].LockQuestLog == nil) then QuestlogOptions[EQL3_Player].LockQuestLog = 1; end -- Make It movable if so... if(QuestlogOptions[EQL3_Player].LockQuestLog == 1) then EQL3_QuestLogFrame:RegisterForDrag(0); EQL3_QuestLogFrame_Description:RegisterForDrag(0); else EQL3_QuestLogFrame:RegisterForDrag("LeftButton"); EQL3_QuestLogFrame_Description:RegisterForDrag("LeftButton"); end if (QuestlogOptions[EQL3_Player].LogLockPoints and QuestlogOptions[EQL3_Player].LogLockPoints.pointone and QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo) then EQL3_QuestLogFrame:ClearAllPoints(); EQL3_QuestLogFrame:SetPoint("TOPLEFT","UIParent","BOTTOMLEFT",QuestlogOptions[EQL3_Player].LogLockPoints.pointone,QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo); end if(QuestlogOptions[EQL3_Player].LogOpacity == nil) then QuestlogOptions[EQL3_Player].LogOpacity = 1.0; end EQL3_QuestLogFrame:SetAlpha(QuestlogOptions[EQL3_Player].LogOpacity); if(QuestlogOptions[EQL3_Player].ShowZonesInTracker == nil) then QuestlogOptions[EQL3_Player].ShowZonesInTracker = 1; end if(QuestlogOptions[EQL3_Player].SortTrackerItems == nil) then QuestlogOptions[EQL3_Player].SortTrackerItems = 0; end if(QuestlogOptions[EQL3_Player].CustomZoneColor == nil) then QuestlogOptions[EQL3_Player].CustomZoneColor = 0; end if(QuestlogOptions[EQL3_Player].CustomHeaderColor == nil) then QuestlogOptions[EQL3_Player].CustomHeaderColor = 0; end if(QuestlogOptions[EQL3_Player].CustomObjetiveColor == nil) then QuestlogOptions[EQL3_Player].CustomObjetiveColor = 0; end if(QuestlogOptions[EQL3_Player].FadeHeaderColor == nil) then QuestlogOptions[EQL3_Player].FadeHeaderColor = 0; end if(QuestlogOptions[EQL3_Player].FadeObjectiveColor == nil) then QuestlogOptions[EQL3_Player].FadeObjectiveColor = 0; end if(QuestlogOptions[EQL3_Player].CustomTrackerBGColor == nil) then QuestlogOptions[EQL3_Player].CustomTrackerBGColor = 0; end if(QuestlogOptions[EQL3_Player].UseTrackerListing == nil) then QuestlogOptions[EQL3_Player].UseTrackerListing = 0; end if(QuestlogOptions[EQL3_Player].TrackerList == nil) then QuestlogOptions[EQL3_Player].TrackerList = 0; end if(QuestlogOptions[EQL3_Player].TrackerSymbol == nil) then QuestlogOptions[EQL3_Player].TrackerSymbol = 0; end if(QuestlogOptions[EQL3_Player].Color == nil) then QuestlogOptions[EQL3_Player].Color = {}; end -- Colors if(QuestlogOptions[EQL3_Player].Color["TrackerBG"] == nil) then QuestlogOptions[EQL3_Player].Color["TrackerBG"] = { r = TOOLTIP_DEFAULT_BACKGROUND_COLOR.r, g = TOOLTIP_DEFAULT_BACKGROUND_COLOR.g, b = TOOLTIP_DEFAULT_BACKGROUND_COLOR.b, a = 0.0}; end if(QuestlogOptions[EQL3_Player].Color["TrackerBG"].a == nil) then QuestlogOptions[EQL3_Player].Color["TrackerBG"].a = 0.0; end if(QuestlogOptions[EQL3_Player].Color["Zone"] == nil) then QuestlogOptions[EQL3_Player].Color["Zone"] = {r = 1.0, g = 1.0, b = 1.0}; end if(QuestlogOptions[EQL3_Player].Color["HeaderEmpty"] == nil) then QuestlogOptions[EQL3_Player].Color["HeaderEmpty"] = {r = 0.75, g = 0.61, b = 0.0}; end if(QuestlogOptions[EQL3_Player].Color["HeaderComplete"] == nil) then QuestlogOptions[EQL3_Player].Color["HeaderComplete"] = {r = NORMAL_FONT_COLOR.r, g = NORMAL_FONT_COLOR.g, b = NORMAL_FONT_COLOR.b}; end if(QuestlogOptions[EQL3_Player].Color["ObjectiveEmpty"] == nil) then QuestlogOptions[EQL3_Player].Color["ObjectiveEmpty"] = {r = 0.8, g = 0.8, b = 0.8}; end if(QuestlogOptions[EQL3_Player].Color["ObjectiveComplete"] == nil) then QuestlogOptions[EQL3_Player].Color["ObjectiveComplete"] = {r = HIGHLIGHT_FONT_COLOR.r, g = HIGHLIGHT_FONT_COLOR.g, b = HIGHLIGHT_FONT_COLOR.b}; end if(QuestlogOptions[EQL3_Player].LockTracker == nil) then QuestlogOptions[EQL3_Player].LockTracker = 0; end if(QuestlogOptions[EQL3_Player].LockPoints == nil) then QuestlogOptions[EQL3_Player].LockPoints = {}; end if(QuestlogOptions[EQL3_Player].AddNew == nil) then QuestlogOptions[EQL3_Player].AddNew = 0; end if(QuestlogOptions[EQL3_Player].RemoveFinished == nil) then QuestlogOptions[EQL3_Player].RemoveFinished = 0; end if(QuestlogOptions[EQL3_Player].MinimizeFinished == nil) then QuestlogOptions[EQL3_Player].MinimizeFinished = 0; end if(QuestlogOptions[EQL3_Player].AddUntracked == nil) then QuestlogOptions[EQL3_Player].AddUntracked = 0; end if(QuestlogOptions[EQL3_Player].TrackerFontHeight == nil) then QuestlogOptions[EQL3_Player].TrackerFontHeight = 12; end if(QuestlogOptions[EQL3_Player].TrackerShowMinimizer == nil) then QuestlogOptions[EQL3_Player].TrackerShowMinimizer = 0; end if(QuestlogOptions[EQL3_Player].TrackerIsMinimized == nil) then QuestlogOptions[EQL3_Player].TrackerIsMinimized = 0; end -- 3.5.6b if( QuestlogOptions[EQL3_Player].AutoCompleteQuests == nil ) then QuestlogOptions[EQL3_Player].AutoCompleteQuests = 0; end if( QuestlogOptions[EQL3_Player].RemoveCompletedObjectives == nil ) then QuestlogOptions[EQL3_Player].RemoveCompletedObjectives = 0; end if( QuestlogOptions[EQL3_Player].ShowObjectiveMarkers == nil ) then QuestlogOptions[EQL3_Player].ShowObjectiveMarkers = 1; end if( QuestlogOptions[EQL3_Player].OnlyLevelsInLog == nil ) then QuestlogOptions[EQL3_Player].OnlyLevelsInLog = 0; end -- 3.5.9 if( QuestlogOptions[EQL3_Player].ItemTooltip == nil ) then QuestlogOptions[EQL3_Player].ItemTooltip = 0; end if( QuestlogOptions[EQL3_Player].MobTooltip == nil ) then QuestlogOptions[EQL3_Player].MobTooltip = 0; end if( QuestlogOptions[EQL3_Player].InfoOnQuestCompletion == nil ) then QuestlogOptions[EQL3_Player].InfoOnQuestCompletion = 0; end if(QuestlogOptions[EQL3_Player].Color["Tooltip"] == nil) then QuestlogOptions[EQL3_Player].Color["Tooltip"] = {r = 1.0, g = 0.8, b = 0.0}; end if(QuestlogOptions[EQL3_Player].CustomTooltipColor == nil) then QuestlogOptions[EQL3_Player].CustomTooltipColor = 0; end elseif ( event == "QUEST_PROGRESS" ) then if ( QuestlogOptions[EQL3_Player].AutoCompleteQuests == 1 ) then if ( IsQuestCompletable() ) then CompleteQuest(); end end elseif ( event == "QUEST_COMPLETE" ) then if ( QuestlogOptions[EQL3_Player].AutoCompleteQuests == 1 and GetNumQuestChoices() == 0 ) then GetQuestReward(QuestFrameRewardPanel.itemChoice); end end end local old_QuestLog_OnEvent = QuestLog_OnEvent; function QuestLog_OnEvent(event) if ( event == "QUEST_LOG_UPDATE" or event == "UPDATE_FACTION" or (event == "UNIT_QUEST_LOG_CHANGED" and arg1 == "player") ) then QuestLog_Update(); QuestWatch_Update(); if ( EQL3_QuestLogFrame:IsVisible() ) then QuestLog_UpdateQuestDetails(1); end if(event == "QUEST_LOG_UPDATE") then if(QuestlogOptions[EQL3_Player].InfoOnQuestCompletion == 1) then LookForCompletedQuests(); end end else QuestLog_Update(); if ( event == "PARTY_MEMBERS_CHANGED" ) then -- Determine whether the selected quest is pushable or not if ( GetQuestLogPushable() and GetNumPartyMembers() > 0 ) then EQL3_QuestFramePushQuestButton:Enable(); else EQL3_QuestFramePushQuestButton:Disable(); end end end end -- OnShow local old_QuestLog_OnShow = QuestLog_OnShow; function QuestLog_OnShow() -- fix for crash with gypsy causing blank log and error if ( Gypsy_ShowQuestLevels and Gypsy_ShowQuestLevels == 1 ) then Gypsy_ShowQuestLevels = 0 end if(QuestLogFrame:IsVisible()) then QuestLogFrame:Hide(); end ShowUIPanel(EQL3_QuestLogFrame); if (QuestlogOptions[EQL3_Player].LogLockPoints and QuestlogOptions[EQL3_Player].LogLockPoints.pointone and QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo) then EQL3_QuestLogFrame:ClearAllPoints(); EQL3_QuestLogFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", QuestlogOptions[EQL3_Player].LogLockPoints.pointone,QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo); end UpdateMicroButtons(); PlaySound("igQuestLogOpen"); QuestLog_SetSelection(GetQuestLogSelection()); QuestLog_Update(); end -- OnHide local old_QuestLog_OnHide = QuestLog_OnHide; function QuestLog_OnHide() HideUIPanel(EQL3_QuestLogFrame); UpdateMicroButtons(); PlaySound("igQuestLogClose"); EQL3_Organize_Popup:Hide(); EQL3_OptionsFrame:Hide(); if ( QuestlogOptions[EQL3_Player].MinimizeUponClose == 1 ) then EQL3_Minimize(); end end -- OnUpdate local old_QuestLog_OnUpdate = QuestLog_OnUpdate; function QuestLog_OnUpdate(elapsed) if ( EQL3_QuestLogFrame.hasTimer ) then EQL3_QuestLogFrame.timePassed = EQL3_QuestLogFrame.timePassed + elapsed; if ( EQL3_QuestLogFrame.timePassed > UPDATE_DELAY ) then EQL3_QuestLogTimerText:SetText(TEXT(TIME_REMAINING).." "..SecondsToTime(GetQuestLogTimeLeft())); EQL3_QuestLogFrame.timePassed = 0; end end end local normal_QuestLog_Update = QuestLog_Update; function QuestLog_Update() local numEntries, numQuests = GetNumQuestLogEntries(); if ( numEntries == 0 ) then EQL3_EmptyQuestLogFrame:Show(); EQL3_QuestLogFrameAbandonButton:Disable(); QuestLogFrame.hasTimer = nil; EQL3_QuestLogDetailScrollFrame:Hide(); EQL3_QuestLogExpandButtonFrame:Hide(); else EQL3_EmptyQuestLogFrame:Hide(); EQL3_QuestLogFrameAbandonButton:Enable(); EQL3_QuestLogDetailScrollFrame:Show(); EQL3_QuestLogExpandButtonFrame:Show(); end -- Update Quest Count EQL3_QuestLogQuestCount:SetText(format(QUEST_LOG_COUNT_TEMPLATE, numQuests, MAX_QUESTLOG_QUESTS)); EQL3_QuestLogCountMiddle:SetWidth(EQL3_QuestLogQuestCount:GetWidth()); -- ScrollFrame update FauxScrollFrame_Update(EQL3_QuestLogListScrollFrame, numEntries, EQL3_QUESTS_DISPLAYED, QUESTLOG_QUEST_HEIGHT, nil, nil, nil, EQL3_QuestLogHighlightFrame, 293, 316 ) -- Update the quest listing EQL3_QuestLogHighlightFrame:Hide(); local questIndex, questLogTitle, questTitleTag, questNumGroupMates, questNormalText, questHighlightText, questDisabledText, questHighlight, questCheck; local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete, color; local numPartyMembers, partyMembersOnQuest, tempWidth, textWidth, tempLevel; for i=1, EQL3_QUESTS_DISPLAYED, 1 do questIndex = i + FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame); questLogTitle = getglobal("EQL3_QuestLogTitle"..i); questTitleTag = getglobal("EQL3_QuestLogTitle"..i.."Tag"); questNumGroupMates = getglobal("EQL3_QuestLogTitle"..i.."GroupMates"); questCheck = getglobal("EQL3_QuestLogTitle"..i.."Check"); questNormalText = getglobal("EQL3_QuestLogTitle"..i.."NormalText"); questHighlightText = getglobal("EQL3_QuestLogTitle"..i.."NormalText"); questDisabledText = getglobal("EQL3_QuestLogTitle"..i.."NormalText"); questHighlight = getglobal("EQL3_QuestLogTitle"..i.."Highlight"); if ( questIndex <= numEntries ) then questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(questIndex); if(not questLogTitleText) then questLogTitleText = "Please report this error!" end if ( isHeader ) then if ( questLogTitleText ) then questLogTitle:SetText(questLogTitleText); else questLogTitle:SetText(""); end --[[ if ( isCollapsed ) then questLogTitle:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up"); else questLogTitle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up"); end ]]-- questLogTitle:SetNormalTexture("Interface\\Addons\\EQL3\\Images\\EQL3_Header_Icon"); questHighlight:SetTexture("Interface\\Buttons\\UI-PlusButton-Hilight"); questNumGroupMates:SetText(""); questCheck:Hide(); else if(QuestlogOptions[EQL3_Player].ShowQuestLevels == 1) then tempLevel = level; if (questTag ~= NIL) then tempLevel = tempLevel.."+"; end questLogTitle:SetText(" ".."["..tempLevel.."] "..questLogTitleText); else questLogTitle:SetText(" "..questLogTitleText); end -- Set Dummy text to get text width *SUPER HACK* QuestLogDummyText:SetText(questLogTitle:GetText()); questLogTitle:SetNormalTexture(""); questHighlight:SetTexture(""); -- If not a header see if any nearby group mates are on this quest numPartyMembers = GetNumPartyMembers(); if ( numPartyMembers == 0 ) then --return; end partyMembersOnQuest = 0; for j=1, numPartyMembers do if ( IsUnitOnQuest(questIndex, "party"..j) ) then partyMembersOnQuest = partyMembersOnQuest + 1; end end if ( partyMembersOnQuest > 0 ) then questNumGroupMates:SetText("["..partyMembersOnQuest.."]"); else questNumGroupMates:SetText(""); end end -- Save if its a header or not questLogTitle.isHeader = isHeader; -- Set the quest tag if ( isComplete and isComplete < 0 ) then questTag = FAILED; elseif ( isComplete and isComplete > 0 ) then questTag = COMPLETE; end if ( questTag ) then questTitleTag:SetText("("..questTag..")"); -- Shrink text to accomdate quest tags without wrapping tempWidth = 275 - 15 - questTitleTag:GetWidth(); if ( QuestLogDummyText:GetWidth() > tempWidth ) then textWidth = tempWidth; else textWidth = QuestLogDummyText:GetWidth(); end questNormalText:SetWidth(tempWidth); questHighlightText:SetWidth(tempWidth); questDisabledText:SetWidth(tempWidth); -- If there's quest tag position check accordingly questCheck:Hide(); if ( IsQuestWatched(questIndex) ) then questCheck:SetPoint("LEFT", questLogTitle, "LEFT", textWidth+24, 0); questCheck:Show(); end else questTitleTag:SetText(""); -- Reset to max text width questNormalText:SetWidth(275); questHighlightText:SetWidth(275); questDisabledText:SetWidth(275); -- Show check if quest is being watched questCheck:Hide(); if ( IsQuestWatched(questIndex) ) then questCheck:SetPoint("LEFT", questLogTitle, "LEFT", QuestLogDummyText:GetWidth()+24, 0); questCheck:Show(); end end -- Color the quest title and highlight according to the difficulty level if(not level) then level = 0; end local playerLevel = UnitLevel("player"); if ( isHeader ) then color = QuestDifficultyColor["header"]; else color = GetDifficultyColor(level); end questTitleTag:SetTextColor(color.r, color.g, color.b); questLogTitle:SetTextColor(color.r, color.g, color.b); questNumGroupMates:SetTextColor(color.r, color.g, color.b); questLogTitle.r = color.r; questLogTitle.g = color.g; questLogTitle.b = color.b; questLogTitle:Show(); -- Place the highlight and lock the highlight state if ( EQL3_QuestLogFrame.selectedButtonID and GetQuestLogSelection() == questIndex ) then EQL3_QuestLogHighlightFrame:SetPoint("TOPLEFT", "EQL3_QuestLogTitle"..i, "TOPLEFT", 0, 0); EQL3_QuestLogHighlightFrame:Show(); questTitleTag:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b); questLogTitle:LockHighlight(); else questLogTitle:UnlockHighlight(); end else questLogTitle:Hide(); end end -- Set the expand/collapse all button texture local numHeaders = 0; local notExpanded = 0; -- Somewhat redundant loop, but cleaner than the alternatives for i=1, numEntries, 1 do local index = i; local questLogTitleText, level, questTag, isHeader, isCollapsed = GetQuestLogTitle(i); if ( questLogTitleText and isHeader ) then numHeaders = numHeaders + 1; if ( isCollapsed ) then notExpanded = notExpanded + 1; end end end -- If all headers are not expanded then show collapse button, otherwise show the expand button if ( notExpanded ~= numHeaders ) then EQL3_QuestLogCollapseAllButton.collapsed = nil; EQL3_QuestLogCollapseAllButton:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up"); else EQL3_QuestLogCollapseAllButton.collapsed = 1; EQL3_QuestLogCollapseAllButton:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up"); end -- Update Quest Count EQL3_QuestLogQuestCount:SetText(format(QUEST_LOG_COUNT_TEMPLATE, numQuests, MAX_QUESTLOG_QUESTS)); EQL3_QuestLogCountMiddle:SetWidth(EQL3_QuestLogQuestCount:GetWidth()); -- If no selection then set it to the first available quest if ( GetQuestLogSelection() == 0 ) then QuestLog_SetFirstValidSelection(); end -- Determine whether the selected quest is pushable or not if ( numEntries == 0 ) then EQL3_QuestFramePushQuestButton:Disable(); elseif ( GetQuestLogPushable() and GetNumPartyMembers() > 0 ) then EQL3_QuestFramePushQuestButton:Enable(); else EQL3_QuestFramePushQuestButton:Disable(); end end local normal_QuestLog_SetSelection = QuestLog_SetSelection; function QuestLog_SetSelection(questID) local selectedQuest; if ( questID == 0 ) then EQL3_QuestLogDetailScrollFrame:Hide(); return 0; end -- Get xml id local id = questID - FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame); SelectQuestLogEntry(questID); local titleButton = getglobal("EQL3_QuestLogTitle"..id); local titleButtonTag = getglobal("EQL3_QuestLogTitle"..id.."Tag"); local questLogTitleText, level, questTag, isHeader, isCollapsed = GetQuestLogTitle(questID); if ( isHeader ) then if ( isCollapsed ) then ExpandQuestHeader(questID); MakeQuestHeaderList(); return 0; else CollapseQuestHeader(questID); MakeQuestHeaderList(); return 0; end else -- Set newly selected quest and highlight it EQL3_QuestLogFrame.selectedButtonID = questID; local scrollFrameOffset = FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame); if ( questID > scrollFrameOffset and questID <= (scrollFrameOffset + EQL3_QUESTS_DISPLAYED) and questID <= GetNumQuestLogEntries() ) then titleButton:LockHighlight(); titleButtonTag:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b); EQL3_QuestLogSkillHighlight:SetVertexColor(titleButton.r, titleButton.g, titleButton.b); EQL3_QuestLogHighlightFrame:SetPoint("TOPLEFT", "EQL3_QuestLogTitle"..id, "TOPLEFT", 5, 0); EQL3_QuestLogHighlightFrame:Show(); end end if ( GetQuestLogSelection() > GetNumQuestLogEntries() ) then return 0; end QuestLog_UpdateQuestDetails(); return 1; end local normal_QuestLog_UpdateQuestDetails = QuestLog_UpdateQuestDetails; function QuestLog_UpdateQuestDetails(doNotScroll) local questID = GetQuestLogSelection(); local questTitle = GetQuestLogTitle(questID); if ( not questTitle ) then questTitle = ""; end if ( IsCurrentQuestFailed() ) then questTitle = questTitle.." - ("..TEXT(FAILED)..")"; end EQL3_QuestLogQuestTitle:SetText(questTitle); local questDescription; local questObjectives; questDescription, questObjectives = GetQuestLogQuestText(); EQL3_QuestLogObjectivesText:SetText(questObjectives); local questTimer = GetQuestLogTimeLeft(); if ( questTimer ) then EQL3_QuestLogFrame.hasTimer = 1; EQL3_QuestLogFrame.timePassed = 0; EQL3_QuestLogTimerText:Show(); EQL3_QuestLogTimerText:SetText(TEXT(TIME_REMAINING).." "..SecondsToTime(questTimer)); EQL3_QuestLogObjective1:SetPoint("TOPLEFT", "EQL3_QuestLogTimerText", "BOTTOMLEFT", 0, -10); else EQL3_QuestLogFrame.hasTimer = nil; EQL3_QuestLogTimerText:Hide(); EQL3_QuestLogObjective1:SetPoint("TOPLEFT", "EQL3_QuestLogObjectivesText", "BOTTOMLEFT", 0, -10); end -- Show Quest Watch if track quest is checked local numObjectives = GetNumQuestLeaderBoards(); for i=1, numObjectives, 1 do local string = getglobal("EQL3_QuestLogObjective"..i); local text; local type; local finished; text, type, finished = GetQuestLogLeaderBoard(i); if ( not text or strlen(text) == 0 ) then text = type; end if ( finished ) then string:SetTextColor(0.2, 0.2, 0.2); text = text.." ("..TEXT(COMPLETE)..")"; else string:SetTextColor(0, 0, 0); end string:SetText(text); string:Show(); QuestFrame_SetAsLastShown(string); end for i=numObjectives + 1, MAX_OBJECTIVES, 1 do getglobal("EQL3_QuestLogObjective"..i):Hide(); end -- If there's money required then anchor and display it if ( GetQuestLogRequiredMoney() > 0 ) then if ( numObjectives > 0 ) then EQL3_QuestLogRequiredMoneyText:SetPoint("TOPLEFT", "EQL3_QuestLogObjective"..numObjectives, "BOTTOMLEFT", 0, -4); else EQL3_QuestLogRequiredMoneyText:SetPoint("TOPLEFT", "EQL3_QuestLogObjectivesText", "BOTTOMLEFT", 0, -10); end MoneyFrame_Update("EQL3_QuestLogRequiredMoneyFrame", GetQuestLogRequiredMoney()); if ( GetQuestLogRequiredMoney() > GetMoney() ) then -- Not enough money EQL3_QuestLogRequiredMoneyText:SetTextColor(0, 0, 0); SetMoneyFrameColor("EQL3_QuestLogRequiredMoneyFrame", 1.0, 0.1, 0.1); else EQL3_QuestLogRequiredMoneyText:SetTextColor(0.2, 0.2, 0.2); SetMoneyFrameColor("EQL3_QuestLogRequiredMoneyFrame", 1.0, 1.0, 1.0); end EQL3_QuestLogRequiredMoneyText:Show(); EQL3_QuestLogRequiredMoneyFrame:Show(); else EQL3_QuestLogRequiredMoneyText:Hide(); EQL3_QuestLogRequiredMoneyFrame:Hide(); end if ( GetQuestLogRequiredMoney() > 0 ) then EQL3_QuestLogDescriptionTitle:SetPoint("TOPLEFT", "EQL3_QuestLogRequiredMoneyText", "BOTTOMLEFT", 0, -10); elseif ( numObjectives > 0 ) then EQL3_QuestLogDescriptionTitle:SetPoint("TOPLEFT", "EQL3_QuestLogObjective"..numObjectives, "BOTTOMLEFT", 0, -10); else if ( questTimer ) then EQL3_QuestLogDescriptionTitle:SetPoint("TOPLEFT", "EQL3_QuestLogTimerText", "BOTTOMLEFT", 0, -10); else EQL3_QuestLogDescriptionTitle:SetPoint("TOPLEFT", "EQL3_QuestLogObjectivesText", "BOTTOMLEFT", 0, -10); end end if ( questDescription ) then EQL3_QuestLogQuestDescription:SetText(questDescription); QuestFrame_SetAsLastShown(EQL3_QuestLogQuestDescription); end local numRewards = GetNumQuestLogRewards(); local numChoices = GetNumQuestLogChoices(); local money = GetQuestLogRewardMoney(); if ( (numRewards + numChoices + money) > 0 ) then EQL3_QuestLogRewardTitleText:Show(); QuestFrame_SetAsLastShown(EQL3_QuestLogRewardTitleText); else EQL3_QuestLogRewardTitleText:Hide(); end QuestFrameItems_Update("QuestLog"); if ( not doNotScroll ) then EQL3_QuestLogDetailScrollFrameScrollBar:SetValue(0); end EQL3_QuestLogDetailScrollFrame:UpdateScrollChildRect(); end local normal_QuestFrame_SetAsLastShown = QuestFrame_SetAsLastShown; function QuestFrame_SetAsLastShown(frame, spacerFrame) if ( not spacerFrame ) then spacerFrame = EQL3_QuestLogSpacerFrame; end spacerFrame:SetPoint("TOP", frame, "BOTTOM", 0, 0); end local normal_QuestLogTitleButton_OnClick = QuestLogTitleButton_OnClick; function QuestLogTitleButton_OnClick(button) local questName = this:GetText(); local questIndex = this:GetID() + FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame); if(button == "LeftButton") then if ( IsShiftKeyDown() ) then if( IsControlKeyDown() ) then if ( this.isHeader ) then return; end if ( not ChatFrameEditBox:IsVisible() ) then EQL3_ClearTracker(); AddQuestWatch(questIndex); QuestWatch_Update(); end else -- If header then return local questLogTitleText, isHeader, isCollapsed, firstTrackable, lastTrackable, numTracked, numUntracked; lastTrackable = -1; numTracked = 0; numUntracked = 0; local track = false; if ( this.isHeader ) then for i=1, GetNumQuestLogEntries(), 1 do questLogTitleText, _, _, isHeader, isCollapsed, _ = GetQuestLogTitle(i); if ( questLogTitleText == questName ) then track = true; firstTrackable = i+1; elseif ( track ) then if ( not isHeader ) then if( IsQuestWatched(i) ) then numTracked = numTracked+1; RemoveQuestWatch(i); else numUntracked = numUntracked+1; RemoveQuestWatch(i); end; end if ( isHeader and questLogTitleText ~= questName ) then lastTrackable = i-1; break; end end end if ( lastTrackable == -1 ) then lastTrackable = GetNumQuestLogEntries(); end if ( numUntracked == 0 ) then -- Untrack all for i=firstTrackable, lastTrackable, 1 do RemoveQuestWatch(i); end QuestWatch_Update(); else -- Track all for i=firstTrackable, lastTrackable, 1 do AddQuestWatch(i); end QuestWatch_Update(); end QuestLog_Update(); return; end -- Otherwise try to track it or put it into chat if ( ChatFrameEditBox:IsVisible() ) then -- Trim leading whitespace ChatFrameEditBox:Insert(gsub(this:GetText(), " *(.*)", "%1")); else -- Shift-click toggles quest-watch on this quest. if ( IsQuestWatched(questIndex) ) then RemoveQuestWatch(questIndex); QuestWatch_Update(); else --[[ Set error if no objectives if ( GetNumQuestLeaderBoards(questIndex) == 0 ) then UIErrorsFrame:AddMessage(QUEST_WATCH_NO_OBJECTIVES, 1.0, 0.1, 0.1, 1.0, UIERRORS_HOLD_TIME); return; end]]-- -- Set an error message if trying to show too many quests if ( GetNumQuestWatches() >= MAX_WATCHABLE_QUESTS ) then UIErrorsFrame:AddMessage(format(QUEST_WATCH_TOO_MANY, MAX_WATCHABLE_QUESTS), 1.0, 0.1, 0.1, 1.0, UIERRORS_HOLD_TIME); return; end AddQuestWatch(questIndex); QuestWatch_Update(); end end end end if(this.isHeader) then if ( EQL3_OrganizeFrame:IsVisible() ) then EQL3_OrganizeFrame_Text:SetText(questName); EQL3_OrganizeFrame_Text:ClearFocus(); EQL3_OrganizeFunctions(questName); EQL3_OrganizeFrame:Hide(); end end end if(QuestLog_SetSelection(questIndex) == 1) then if(not EQL3_QuestLogFrame_Description:IsVisible() and not IsShiftKeyDown() and not IsControlKeyDown() and QuestlogOptions[EQL3_Player].RestoreUponSelect == 1) then EQL3_Maximize(); end end if(button == "LeftButton") then if( not IsShiftKeyDown() and IsControlKeyDown() ) then if ( ChatFrameEditBox:IsVisible() ) then AddQuestStatusToChatFrame(questIndex, questName); end end else if ( not this.isHeader ) then if ( EQL3_IsQuestWatched(questIndex) ) then EQL3_Organize_Popup_Track_Text:SetText(EQL3_POPUP_UNTRACK); else EQL3_Organize_Popup_Track_Text:SetText(EQL3_POPUP_TRACK); end EQL3_Organize_Popup:ClearAllPoints(); EQL3_Organize_Popup:SetPoint("TOPLEFT", this, "TOPLEFT", 24, 0); EQL3_Organize_Popup:Raise(); EQL3_Organize_Popup:Show(); end end QuestLog_Update(); end function AddQuestStatusToChatFrame(questIndex, questName) local text, type, finished; if ( ChatFrameEditBox:IsVisible() ) then local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(questIndex); if(isComplete) then ChatFrameEditBox:Insert("(Complete) "); end ChatFrameEditBox:Insert(questLogTitleText); local numObjectives = GetNumQuestLeaderBoards(); if (numObjectives>0) then ChatFrameEditBox:Insert(": "); for i=1, numObjectives, 1 do text, type, finished = GetQuestLogLeaderBoard(i); if(not text or strlen(text) == 0) then text = type; end ChatFrameEditBox:Insert(text); if(i < numObjectives) then ChatFrameEditBox:Insert(", "); end end end end end -- Only called on load function ManageQuestHeaders() QuestLog_SetSelection(GetQuestLogSelection()); EQL3_Temp.hasManaged = true; if(QuestlogOptions[EQL3_Player].HeaderList) then local questLogTitleText, isHeader, isCollapsed; local numHeaders = table.getn(QuestlogOptions[EQL3_Player].HeaderList); local numEntries = GetNumQuestLogEntries(); if(numHeaders > 0) then for i=numEntries, 1, -1 do questLogTitleText, _, _, isHeader, isCollapsed = GetQuestLogTitle(i); if(isHeader) then for j=1, numHeaders, 1 do if(questLogTitleText == QuestlogOptions[EQL3_Player].HeaderList[j]) then CollapseQuestHeader(i); end end end end end end end function MakeQuestHeaderList() QuestlogOptions[EQL3_Player].HeaderList = {}; local numEntries = GetNumQuestLogEntries(); local questLogTitleText, isHeader, isCollapsed; for j=numEntries, 1, -1 do questLogTitleText, _, _, isHeader, isCollapsed = GetQuestLogTitle(j); if (isHeader and isCollapsed) then table.insert(QuestlogOptions[EQL3_Player].HeaderList, questLogTitleText); end end end local normal_QuestLog_UpdatePartyInfoTooltip = QuestLog_UpdatePartyInfoTooltip; function QuestLog_UpdatePartyInfoTooltip() local index = this:GetID() + FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame); local numPartyMembers = GetNumPartyMembers(); if ( numPartyMembers == 0 or this.isHeader ) then return; end GameTooltip_SetDefaultAnchor(GameTooltip, this); local questLogTitleText = GetQuestLogTitle(index); GameTooltip:SetText(questLogTitleText); local partyMemberOnQuest; for i=1, numPartyMembers do if ( IsUnitOnQuest(index, "party"..i) ) then if ( not partyMemberOnQuest ) then GameTooltip:AddLine(HIGHLIGHT_FONT_COLOR_CODE..PARTY_QUEST_STATUS_ON..FONT_COLOR_CODE_CLOSE); partyMemberOnQuest = 1; end GameTooltip:AddLine(LIGHTYELLOW_FONT_COLOR_CODE..UnitName("party"..i)..FONT_COLOR_CODE_CLOSE); end end if ( not partyMemberOnQuest ) then GameTooltip:AddLine(HIGHLIGHT_FONT_COLOR_CODE..PARTY_QUEST_STATUS_NONE..FONT_COLOR_CODE_CLOSE); end GameTooltip:Show(); end local normal_QuestLogCollapseAllButton_OnClick = QuestLogCollapseAllButton_OnClick; function QuestLogCollapseAllButton_OnClick() if (this.collapsed) then this.collapsed = nil; ExpandQuestHeader(0); MakeQuestHeaderList(); else this.collapsed = 1; EQL3_QuestLogListScrollFrameScrollBar:SetValue(0); CollapseQuestHeader(0); MakeQuestHeaderList(); end end old_GetQuestLogTitle = GetQuestLogTitle; function GetQuestLogTitle(questIndex) local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete; if (not EQL3_UpdateDB()) then questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = old_GetQuestLogTitle(questIndex); end if(EQL3_Temp.savedQuestIDMap and EQL3_Temp.savedQuestIDMap[questIndex]) then if(EQL3_Temp.savedQuestIDMap[questIndex].questID) then questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = old_GetQuestLogTitle(EQL3_Temp.savedQuestIDMap[questIndex].questID); else return EQL3_Temp.savedQuestIDMap[questIndex].header, 0, nil, true, nil, nil; end end if ( isHeader or not questLogTitleText ) then else if ( not QuestLevel_Quest2Level[questLogTitleText] ) then local queststorage = ""; queststorage = QuestLevel_StorageSet(queststorage, "levelmin", level); if (questTag ~= NIL) then queststorage = QuestLevel_StorageSet(queststorage, "elite", "x"); end QuestLevel_Quest2Level[questLogTitleText] = queststorage; else local queststorage = QuestLevel_Quest2Level[questLogTitleText]; local levelmin = tonumber(QuestLevel_StorageGet(queststorage, "levelmin")); local levelmax = QuestLevel_StorageGet(queststorage, "levelmax"); if ( levelmax == nil ) then levelmax = levelmin; else levelmax = tonumber(levelmax); end if (levelmin > level) then queststorage = QuestLevel_StorageSet(queststorage, "levelmin", level); queststorage = QuestLevel_StorageSet(queststorage, "levelmax", levelmax); end if (levelmax < level) then queststorage = QuestLevel_StorageSet(queststorage, "levelmax", level); end if (questTag ~= NIL and QuestLevel_StorageGet(queststorage, "elite") == nil) then queststorage = QuestLevel_StorageSet(queststorage, "elite", ""); end QuestLevel_Quest2Level[questLogTitleText] = queststorage; end end return questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete; end local old_QuestFrameItems_Update = QuestFrameItems_Update; function QuestFrameItems_Update(questState) local isQuestLog = 0; if ( questState == "QuestLog" ) then isQuestLog = 1; questState = "EQL3_QuestLog"; end local numQuestRewards; local numQuestChoices; local numQuestSpellRewards = 0; local money; local spacerFrame; if ( isQuestLog == 1 ) then numQuestRewards = GetNumQuestLogRewards(); numQuestChoices = GetNumQuestLogChoices(); if ( GetQuestLogRewardSpell() ) then numQuestSpellRewards = 1; end money = GetQuestLogRewardMoney(); spacerFrame = EQL3_QuestLogSpacerFrame; else numQuestRewards = GetNumQuestRewards(); numQuestChoices = GetNumQuestChoices(); if ( GetRewardSpell() ) then numQuestSpellRewards = 1; end money = GetRewardMoney(); spacerFrame = QuestSpacerFrame; end local totalRewards = numQuestRewards + numQuestChoices + numQuestSpellRewards; local questItemName = questState.."Item"; local material = QuestFrame_GetMaterial(); local questItemReceiveText = getglobal(questState.."ItemReceiveText") if ( totalRewards == 0 and money == 0 ) then getglobal(questState.."RewardTitleText"):Hide(); else getglobal(questState.."RewardTitleText"):Show(); QuestFrame_SetTitleTextColor(getglobal(questState.."RewardTitleText"), material); QuestFrame_SetAsLastShown(getglobal(questState.."RewardTitleText"), spacerFrame); end if ( money == 0 ) then getglobal(questState.."MoneyFrame"):Hide(); else getglobal(questState.."MoneyFrame"):Show(); QuestFrame_SetAsLastShown(getglobal(questState.."MoneyFrame"), spacerFrame); MoneyFrame_Update(questState.."MoneyFrame", money); end for i=totalRewards + 1, MAX_NUM_ITEMS, 1 do getglobal(questItemName..i):Hide(); end local questItem, name, texture, quality, isUsable, numItems = 1; if ( numQuestChoices > 0 ) then getglobal(questState.."ItemChooseText"):Show(); QuestFrame_SetTextColor(getglobal(questState.."ItemChooseText"), material); QuestFrame_SetAsLastShown(getglobal(questState.."ItemChooseText"), spacerFrame); for i=1, numQuestChoices, 1 do questItem = getglobal(questItemName..i); questItem.type = "choice"; numItems = 1; if ( isQuestLog == 1 ) then name, texture, numItems, quality, isUsable = GetQuestLogChoiceInfo(i); else name, texture, numItems, quality, isUsable = GetQuestItemInfo(questItem.type, i); end questItem:SetID(i) questItem:Show(); -- For the tooltip questItem.rewardType = "item" QuestFrame_SetAsLastShown(questItem, spacerFrame); getglobal(questItemName..i.."Name"):SetText(name); SetItemButtonCount(questItem, numItems); SetItemButtonTexture(questItem, texture); if ( isUsable ) then SetItemButtonTextureVertexColor(questItem, 1.0, 1.0, 1.0); SetItemButtonNameFrameVertexColor(questItem, 1.0, 1.0, 1.0); else SetItemButtonTextureVertexColor(questItem, 0.9, 0, 0); SetItemButtonNameFrameVertexColor(questItem, 0.9, 0, 0); end if ( i > 1 ) then if ( mod(i,2) == 1 ) then questItem:SetPoint("TOPLEFT", questItemName..(i - 2), "BOTTOMLEFT", 0, -2); else questItem:SetPoint("TOPLEFT", questItemName..(i - 1), "TOPRIGHT", 1, 0); end else questItem:SetPoint("TOPLEFT", questState.."ItemChooseText", "BOTTOMLEFT", -3, -5); end end else getglobal(questState.."ItemChooseText"):Hide(); end local rewardsCount = 0; if ( numQuestRewards > 0 or money > 0 or numQuestSpellRewards > 0) then QuestFrame_SetTextColor(questItemReceiveText, material); -- Anchor the reward text differently if there are choosable rewards if ( numQuestChoices > 0 ) then questItemReceiveText:SetText(TEXT(REWARD_ITEMS)); local index = numQuestChoices; if ( mod(index, 2) == 0 ) then index = index - 1; end questItemReceiveText:SetPoint("TOPLEFT", questItemName..index, "BOTTOMLEFT", 3, -5); else questItemReceiveText:SetText(TEXT(REWARD_ITEMS_ONLY)); questItemReceiveText:SetPoint("TOPLEFT", questState.."RewardTitleText", "BOTTOMLEFT", 3, -5); end questItemReceiveText:Show(); QuestFrame_SetAsLastShown(questItemReceiveText, spacerFrame); -- Setup mandatory rewards for i=1, numQuestRewards, 1 do questItem = getglobal(questItemName..(i + numQuestChoices)); questItem.type = "reward"; numItems = 1; if ( isQuestLog == 1 ) then name, texture, numItems, quality, isUsable = GetQuestLogRewardInfo(i); else name, texture, numItems, quality, isUsable = GetQuestItemInfo(questItem.type, i); end questItem:SetID(i) questItem:Show(); -- For the tooltip questItem.rewardType = "item"; QuestFrame_SetAsLastShown(questItem, spacerFrame); getglobal(questItemName..(i + numQuestChoices).."Name"):SetText(name); SetItemButtonCount(questItem, numItems); SetItemButtonTexture(questItem, texture); if ( isUsable ) then SetItemButtonTextureVertexColor(questItem, 1.0, 1.0, 1.0); SetItemButtonNameFrameVertexColor(questItem, 1.0, 1.0, 1.0); else SetItemButtonTextureVertexColor(questItem, 0.5, 0, 0); SetItemButtonNameFrameVertexColor(questItem, 1.0, 0, 0); end if ( i > 1 ) then if ( mod(i,2) == 1 ) then questItem:SetPoint("TOPLEFT", questItemName..((i + numQuestChoices) - 2), "BOTTOMLEFT", 0, -2); else questItem:SetPoint("TOPLEFT", questItemName..((i + numQuestChoices) - 1), "TOPRIGHT", 1, 0); end else questItem:SetPoint("TOPLEFT", questState.."ItemReceiveText", "BOTTOMLEFT", -3, -5); end rewardsCount = rewardsCount + 1; end -- Setup spell reward if ( numQuestSpellRewards > 0 ) then if ( isQuestLog == 1 ) then texture, name = GetQuestLogRewardSpell(); else texture, name = GetRewardSpell(); end questItem = getglobal(questItemName..(rewardsCount + numQuestChoices + 1)); questItem:Show(); -- For the tooltip questItem.rewardType = "spell"; SetItemButtonCount(questItem, 0); SetItemButtonTexture(questItem, texture); getglobal(questItemName..(rewardsCount + numQuestChoices + 1).."Name"):SetText(name); if ( rewardsCount > 0 ) then if ( mod(rewardsCount,2) == 0 ) then questItem:SetPoint("TOPLEFT", questItemName..((rewardsCount + numQuestChoices) - 1), "BOTTOMLEFT", 0, -2); else questItem:SetPoint("TOPLEFT", questItemName..((rewardsCount + numQuestChoices)), "TOPRIGHT", 1, 0); end else questItem:SetPoint("TOPLEFT", questState.."ItemReceiveText", "BOTTOMLEFT", -3, -5); end end else questItemReceiveText:Hide(); end if ( questState == "QuestReward" ) then QuestFrameCompleteQuestButton:Enable(); QuestFrameRewardPanel.itemChoice = 0; QuestRewardItemHighlight:Hide(); end end function QuestLogFrame_LockCorner() local Left = EQL3_QuestLogFrame:GetLeft(); local Top = EQL3_QuestLogFrame:GetTop(); if (Left and Top) then EQL3_QuestLogFrame:ClearAllPoints(); EQL3_QuestLogFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", Left , Top); QuestlogOptions[EQL3_Player].LogLockPoints = {}; QuestlogOptions[EQL3_Player].LogLockPoints.pointone = Left; QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo = Top; elseif (QuestlogOptions[EQL3_Player].LogLockPoints and QuestlogOptions[EQL3_Player].LogLockPoints.pointone and QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo) then EQL3_QuestLogFrame:ClearAllPoints(); EQL3_QuestLogFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", QuestlogOptions[EQL3_Player].LogLockPoints.pointone,QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo); end end function LookForCompletedQuests(ding) if ( not QuestlogOptions[EQL3_Player].CompletedQuests ) then QuestlogOptions[EQL3_Player].CompletedQuests = {}; end local questID; local numEntries = GetNumQuestLogEntries(); local questTitle, isComplete, isHeader; for i=1, numEntries, 1 do questID = i; questTitle, _, _, isHeader, _, isComplete = GetQuestLogTitle(questID); if(QuestlogOptions[EQL3_Player].CompletedQuests[questTitle]) then QuestlogOptions[EQL3_Player].CompletedQuests[questTitle].isOk = true; else QuestlogOptions[EQL3_Player].CompletedQuests[questTitle] = {}; QuestlogOptions[EQL3_Player].CompletedQuests[questTitle].isOk = true; end if ( (not isHeader) and isComplete and ( not QuestlogOptions[EQL3_Player].CompletedQuests[questTitle].isCompleted ) ) then QuestlogOptions[EQL3_Player].CompletedQuests[questTitle].isCompleted = true; if( (ding == nil) or (ding~=false)) then UIErrorsFrame:AddMessage(questTitle.." Completed!", 1.0, 0.8, 0.0, 1.0, UIERRORS_HOLD_TIME); PlaySound("GnomeExploration"); end end end --clean up for quest in QuestlogOptions[EQL3_Player].CompletedQuests do if ( QuestlogOptions[EQL3_Player].CompletedQuests[quest].isOk ) then QuestlogOptions[EQL3_Player].CompletedQuests[quest].isOk = false; else QuestlogOptions[EQL3_Player].CompletedQuests[quest] = nil; end end end