diff --git a/Data.lua b/Data.lua index e715f44..5c7df31 100644 --- a/Data.lua +++ b/Data.lua @@ -1213,8 +1213,6 @@ for k, v in pairs(_V["WQT_FACTION_DATA"]) do end end - - -- This is just easier to maintain than changing the entire string every time _V["PATCH_NOTES"] = { {["version"] = "9.0.02" @@ -1224,10 +1222,15 @@ _V["PATCH_NOTES"] = { } ,["changes"] = { "The 'Pins On Continent' setting has been replaced by the new 'Continent Map Pins'. Its value has been transfered over." + ,"Moved the settings and 'What's new' options from the filters to a separate button." } ,["fixes"] = { "Fixed Ally Quests in Nazjatar not showing the daily quest icon on their map pins." ,"Fixed the missing backdrop in the debug dump window." + ,"'Fixed' the quest log counter." + ,"Fixed an error that could occur when trying to right-click certain quests." + ,"Fixed flickering of the quest list background when it's being reloaded" + ,"Fixed being able to add daily quests to the quest watch list, as the official API doesn't support them." } } ,{["version"] = "9.0.01" diff --git a/Dataprovider.lua b/Dataprovider.lua index 3fd7a76..9b596f5 100644 --- a/Dataprovider.lua +++ b/Dataprovider.lua @@ -151,9 +151,7 @@ function QuestInfoMixin:Init(questId, isDaily, isCombatAllyQuest, alwaysHide, po self.isValid = HaveQuestData(self.questId); self.time.seconds = WQT_Utils:GetQuestTimeString(self); -- To check if expired or never had a time limit self.passedFilter = true; - --self.isCriteria = WorldMapFrame.overlayFrames[_V["WQT_BOUNDYBOARD_OVERLAYID"]]:IsWorldQuestCriteriaForSelectedBounty(questId); - --self.isCriteriaAny = - + self:LoadRewards(); return self.hasRewardData; @@ -233,7 +231,7 @@ function QuestInfoMixin:LoadRewards() end -- Gold if (GetQuestLogRewardMoney(self.questId) > 0) then - local numItems = floor(abs(GetQuestLogRewardMoney(self.questId) / 10000)) + local numItems = floor(abs(GetQuestLogRewardMoney(self.questId))) self:AddReward(WQT_REWARDTYPE.gold, numItems, 133784, 1, _V["WQT_COLOR_GOLD"]); end -- Currency diff --git a/Debug.lua b/Debug.lua index 462bba7..d925ed8 100644 --- a/Debug.lua +++ b/Debug.lua @@ -150,7 +150,8 @@ local function bts(bool) end local function GetQuestDump() - local counted, limit = WQT_Utils:GetQuestLogInfo() + local removedQuests = {}; + local counted, limit = WQT_Utils:GetQuestLogInfo(removedQuests); local output = FORMAT_QUEST_HEADER:format(counted, limit); local numEntries = C_QuestLog.GetNumQuestLogEntries(); diff --git a/Locals.lua b/Locals.lua index c983476..272f928 100644 --- a/Locals.lua +++ b/Locals.lua @@ -104,8 +104,8 @@ L["PIN_VISIBILITY_CONTINENT_TT"] = "Which quests should be allowed to show map p L["PRECISE_FILTER"] = "Precise Filter" L["PRECISE_FILTER_TT"] = "Filtering only shows quests matching all filter categories, rather than just any of the categories." L["QUEST_COUNTER"] = "Quest Log Counter" -L["QUEST_COUNTER_INFO"] = "Following |cFFFFd100%d|r hidden quests count to your quest cap and can't be abandoned. This is an issue on Blizzard's end." -L["QUEST_COUNTER_TITLE"] = "Hidden quests" +L["QUEST_COUNTER_INFO"] = "This number is an aproximation as the value from the official API isn't guaranteed to be correct.\nSome quests might be hidden yet still count." +L["QUEST_COUNTER_TITLE"] = "Quest Log Limit" L["QUEST_COUNTER_TT"] = "Show the number of quests in your default quest log." L["QUEST_LIST"] = "Quest List" L["SAVE_SETTINGS"] = "Save Filters/Sort" @@ -369,6 +369,10 @@ L["DEFAULT_TAB_TT"] = [=[將WQT設定為預設啟用標籤。 這不適用於等級110以下角色。]=] L["EMISSARY_COUNTER"] = "特使任務計數器" L["EMISSARY_COUNTER_TT"] = "在特使標籤添加計數以指示你每個特使任務的進度。" +L["EMISSARY_REWARD"] = "特使獎勵圖示" +L["EMISSARY_REWARD_TT"] = "在特使標籤頁加上圖示,顯示所提供的獎勵類型。" +L["EMISSARY_SELECTED_ONLY"] = "只有選擇的特使" +L["EMISSARY_SELECTED_ONLY_TT"] = "只標記目前所選特使的任務,關閉此選項時會標示任何現有特使的任務。點一下特使標籤頁仍然只會顯示指定特使相關的任務。" L["FILTER_PINS"] = "過濾地圖顯示" L["FILTER_PINS_TT"] = "將過濾套用到地圖上的任務點" L["FORMAT_GROUP_CREATE"] = "輸入|cFFFFFFFF%d|r 為此任務建立一個隊伍。 或輸入其名稱:|cFFFFFFFF%s|r。考慮兩者兼用,讓沒有插件的玩家也可以找到你的隊伍。" diff --git a/Templates.lua b/Templates.lua index 54ad935..959941f 100644 --- a/Templates.lua +++ b/Templates.lua @@ -575,6 +575,20 @@ function WQT_Utils:RemoveTomTomArrowbyQuestId(questId) end end +function WQT_Utils:QuestIncorrectlyCounts(questLogIndex) + local questInfo = C_QuestLog.GetInfo(questLogIndex); + if (questInfo.isHeader or questInfo.isTask or questInfo.isBounty) then + return false, questInfo.isHidden; + end + + local tagInfo = C_QuestLog.GetQuestTagInfo(questInfo.questID); + + if (tagInfo and tagInfo.tagID == 102) then + return true, questInfo.isHidden; + end + +end + function WQT_Utils:QuestCountsToCap(questLogIndex) local questInfo = C_QuestLog.GetInfo(questLogIndex); @@ -592,22 +606,21 @@ function WQT_Utils:QuestCountsToCap(questLogIndex) return counts, questInfo.isHidden; end --- Count quests counting to the quest log cap and collect hidden ones that can't be abandoned -function WQT_Utils:GetQuestLogInfo(hiddenList) - local _, numEntries = C_QuestLog.GetNumQuestLogEntries(); +-- Count quests counting to the quest log cap and collect the ones that shouldn't count +function WQT_Utils:GetQuestLogInfo(list) + local numEntries, questCount = C_QuestLog.GetNumQuestLogEntries(); local maxQuests = C_QuestLog.GetMaxNumQuestsCanAccept(); - local questCount = 0; - if (hiddenList) then - wipe(hiddenList); + + if (list) then + wipe(list); end + for questLogIndex = 1, numEntries do - local counts, isHidden = WQT_Utils:QuestCountsToCap(questLogIndex); - if (counts) then - questCount = questCount + 1; - - -- hidden quest counting to the cap - if (isHidden and hiddenList) then - tinsert(hiddenList, questLogIndex); + -- Remove the ones that shouldn't be counted + if (WQT_Utils:QuestIncorrectlyCounts(questLogIndex)) then + questCount = questCount - 1; + if (list) then + tinsert(list, questLogIndex); end end end @@ -701,6 +714,13 @@ function WQT_Utils:GetQuestRewardIcon(questID) end end +function WQT_Utils:CalculateWarmodeAmount(rewardType, amount) + if (C_PvP.IsWarModeDesired() and _V["WARMODE_BONUS_REWARD_TYPES"][rewardType]) then + amount = amount + floor(amount * C_PvP.GetWarModeRewardBonus() / 100); + end + return amount; +end + function WQT_Utils:DeepWipeTable(t) for k, v in pairs(t) do if (type(v) == "table") then diff --git a/WorldQuestTab.lua b/WorldQuestTab.lua index 7663e08..28f8361 100644 --- a/WorldQuestTab.lua +++ b/WorldQuestTab.lua @@ -58,6 +58,7 @@ -- Callbacks (WQT_WorldQuestFrame:RegisterCallback(event, func, addonName)) -- -- "InitFilter" (self, level) After InitFilter finishes +-- "InitSettings" (self, level) After InitSettings finishes -- "DisplayQuestList" (skipPins) After all buttons in the list have been updated -- "FilterQuestList" () After the list has been filtered -- "UpdateQuestList" () After the list has been both filtered and updated @@ -188,41 +189,7 @@ local function InitFilter(self, level) info.value = k; ADD:AddButton(info, level) end - - info.hasArrow = false; - - -- Settings button - info.text = SETTINGS; - info.func = function() - WQT_WorldQuestFrame:ShowOverlayFrame(WQT_SettingsFrame); - end - - ADD:AddButton(info, level) - - -- What's new - local newText = WQT.settings.updateSeen and "" or "|TInterface\\FriendsFrame\\InformationIcon:14|t "; - - info.text = newText .. _L["WHATS_NEW"]; - info.tooltipTitle = _L["WHATS_NEW"]; - info.tooltipText = _L["WHATS_NEW_TT"]; - - info.func = function() - local scrollFrame = WQT_VersionFrame; - local blockerText = scrollFrame.Text; - - blockerText:SetText(_V["LATEST_UPDATE"]); - blockerText:SetHeight(blockerText:GetContentHeight()); - scrollFrame.limit = max(0, blockerText:GetHeight() - scrollFrame:GetHeight()); - scrollFrame.scrollBar:SetMinMaxValues(0, scrollFrame.limit) - scrollFrame.scrollBar:SetValue(0); - - WQT.settings.updateSeen = true; - - WQT_WorldQuestFrame:ShowOverlayFrame(scrollFrame, 10, -18, -3, 3); - - end - ADD:AddButton(info, level) - + elseif level == 2 then -- Filters info.keepShownOnClick = true; @@ -413,6 +380,58 @@ local function InitFilter(self, level) WQT_WorldQuestFrame:TriggerCallback("InitFilter", self, level); end +local function InitSettings(self, level) + local info = ADD:CreateInfo(); + info.keepShownOnClick = true; + info.tooltipWhileDisabled = true; + info.tooltipOnButton = true; + info.motionScriptsWhileDisabled = true; + info.disabled = nil; + + if level == 1 then + info.checked = nil; + info.isNotRadio = true; + info.func = nil; + info.hasArrow = false; + info.notCheckable = true; + + -- Settings button + info.text = SETTINGS; + info.func = function() + WQT_WorldQuestFrame:ShowOverlayFrame(WQT_SettingsFrame); + end + + ADD:AddButton(info, level) + + -- What's new + local newText = WQT.db.global.updateSeen and "" or "|TInterface\\FriendsFrame\\InformationIcon:14|t "; + + info.text = newText .. _L["WHATS_NEW"]; + info.tooltipTitle = _L["WHATS_NEW"]; + info.tooltipText = _L["WHATS_NEW_TT"]; + + info.func = function() + local scrollFrame = WQT_VersionFrame; + local blockerText = scrollFrame.Text; + + blockerText:SetText(_V["LATEST_UPDATE"]); + blockerText:SetHeight(blockerText:GetContentHeight()); + scrollFrame.limit = max(0, blockerText:GetHeight() - scrollFrame:GetHeight()); + scrollFrame.scrollBar:SetMinMaxValues(0, scrollFrame.limit) + scrollFrame.scrollBar:SetValue(0); + + WQT.db.global.updateSeen = true; + + WQT_WorldQuestFrame:ShowOverlayFrame(scrollFrame, 10, -18, -3, 3); + + end + ADD:AddButton(info, level) + + end + + WQT_WorldQuestFrame:TriggerCallback("InitSettings", self, level); +end + -- Sort filters alphabetically regardless of localization local function GetSortedFilterOrder(filterId) local filter = WQT.settings.filters[filterId]; @@ -1030,8 +1049,8 @@ function WQT_RewardDisplayMixin:AddReward(rewardType, texture, quality, amount, amount = amount or 1; -- Calculate warmode bonus - if (warmodeBonus and C_PvP.IsWarModeDesired() and _V["WARMODE_BONUS_REWARD_TYPES"][rewardType]) then - amount = amount + floor(amount * C_PvP.GetWarModeRewardBonus() / 100); + if (warmodeBonus) then + amount = WQT_Utils:CalculateWarmodeAmount(rewardType, amount); end self:SetWidth(num * 29 - 1); @@ -1045,6 +1064,10 @@ function WQT_RewardDisplayMixin:AddReward(rewardType, texture, quality, amount, if (amount > 1) then rewardFrame.Amount:Show(); + if (rewardType == WQT_REWARDTYPE.gold) then + amount = floor(amount / 10000); + end + local amountDisplay = GetLocalizedAbbreviatedNumber(amount); if (rewardType == WQT_REWARDTYPE.relic) then @@ -1098,11 +1121,12 @@ function WQT_ListButtonMixin:OnClick(button) if (not self.questId or self.questId== -1) then return end local isBonus = QuestUtils_IsQuestBonusObjective(self.questId); local reward = self.questInfo:GetReward(1); + local tagInfo = C_QuestLog.GetQuestTagInfo(self.questId); -- 'Hard' tracking quests with shift if (IsModifiedClick("QUESTWATCHTOGGLE")) then -- Don't track bonus objectives. The object tracker doesn't like it; - if (not isBonus) then + if (not isBonus and tagInfo and tagInfo.worldQuestType) then -- Only do tracking if we aren't adding the link tot he chat if (not ChatEdit_TryInsertQuestLinkForQuestID(self.questId)) then if (QuestUtils_IsQuestWatched(self.questId)) then @@ -1124,7 +1148,7 @@ function WQT_ListButtonMixin:OnClick(button) -- 'Soft' tracking and jumping map to relevant zone elseif (button == "LeftButton") then -- Don't track bonus objectives. The object tracker doesn't like it; - if (not isBonus) then + if (not isBonus and tagInfo and tagInfo.worldQuestType) then local hardWatched = WQT_Utils:QuestIsWatchedManual(self.questId); -- if it was hard watched, keep it that way @@ -1318,9 +1342,8 @@ function WQT_ListButtonMixin:Update(questInfo, shouldShowZone) -- Show border if quest is tracked local isHardWatched = WQT_Utils:QuestIsWatchedManual(questInfo.questId); - if (C_SuperTrack.GetSuperTrackedQuestID() == questInfo.questId or isHardWatched) then + if (isHardWatched) then self.TrackedBorder:Show(); - self.TrackedBorder:SetAlpha(isHardWatched and 0.6 or 1); else self.TrackedBorder:Hide(); end @@ -1559,17 +1582,22 @@ WQT_QuestCounterMixin = {} function WQT_QuestCounterMixin:OnLoad() self:SetFrameLevel(self:GetParent():GetFrameLevel() +5); - self.hiddenList = {}; + self.falseCounted = {}; + self.numQuests = 0 end -- Entering the hidden quests indicator function WQT_QuestCounterMixin:InfoOnEnter(frame) GameTooltip:SetOwner(frame, "ANCHOR_RIGHT"); - GameTooltip:SetText(_L["QUEST_COUNTER_TITLE"], nil, nil, nil, nil, true); - GameTooltip:AddLine(_L["QUEST_COUNTER_INFO"]:format(#self.hiddenList), 1, 1, 1, true); + GameTooltip:SetText(_L["QUEST_COUNTER_TITLE"], 1, 1, 1, 1, true); + GameTooltip:AddLine(_L["QUEST_COUNTER_INFO"]:format(#self.falseCounted), nil, nil, nil, true); + + local _, questCount = C_QuestLog.GetNumQuestLogEntries(); + GameTooltip:AddDoubleLine("API - Addon = Displayed", ("|cFFFFFFFF%d - %d = %d|r"):format(questCount , #self.falseCounted, self.numQuests), 1, 1, 1, 1, 1, 1, true); + --GameTooltip:AddLine(, nil, nil, nil, true); -- Add culprits - for k, i in ipairs(self.hiddenList) do + for k, i in ipairs(self.falseCounted) do local info = C_QuestLog.GetInfo(i); local tagInfo = C_QuestLog.GetQuestTagInfo(info.questID); GameTooltip:AddDoubleLine(string.format("%s (%s)", info.title, info.questID), tagInfo and tagInfo.tagName or "No tag", 1, 1, 1, 1, 1, 1, true); @@ -1579,13 +1607,11 @@ function WQT_QuestCounterMixin:InfoOnEnter(frame) end function WQT_QuestCounterMixin:UpdateText() - local numQuests, maxQuests, color = WQT_Utils:GetQuestLogInfo(self.hiddenList); + local numQuests, maxQuests, color = WQT_Utils:GetQuestLogInfo(self.falseCounted); self.QuestCount:SetText(GENERIC_FRACTION_STRING_WITH_SPACING:format(numQuests, maxQuests)); self.QuestCount:SetTextColor(color.r, color.g, color.b); - - -- Show or hide the icon - local showIcon = #self.hiddenList > 0; - self.HiddenInfo:SetShown(showIcon); + + self.numQuests = numQuests; end function WQT_QuestCounterMixin:UpdateVisibility() @@ -1864,11 +1890,17 @@ function WQT_CoreMixin:OnLoad() -- Sort self.sortButton = ADD:CreateMenuTemplate("WQT_WorldQuestFrameSortButton", self, nil, "BUTTON"); - self.sortButton:SetSize(110, 22); + self.sortButton:SetSize(100, 22); self.sortButton:SetPoint("RIGHT", "WQT_WorldQuestFrameFilterButton", "LEFT", -2, -1); ADD:Initialize(self.sortButton, function(self, level) WQT:InitSort(self, level) end); + + -- Settings + self.settingsDropDown = ADD:CreateMenuTemplate("WQT_WorldQuestFrameSettingsDropDown", self); + self.settingsDropDown.noResize = true; + ADD:Initialize(self.settingsDropDown, function(dd, level) InitSettings(dd, level) end, "MENU"); + -- Context menu local frame = ADD:CreateMenuTemplate("WQT_TrackDropDown", self); frame:EnableMouse(true); @@ -2333,18 +2365,6 @@ function WQT_CoreMixin:ShouldAllowLFG(questInfo) return tagInfo.worldQuestType and not (tagInfo.worldQuestType == Enum.QuestTagType.PetBattle or tagInfo.worldQuestType == Enum.QuestTagType.Dungeon or tagInfo.worldQuestType == Enum.QuestTagType.Progession or tagInfo.worldQuestType == Enum.QuestTagType.Raid); end ---[[ -function WQT_CoreMixin:HookEvent(event, func) - local list = self.eventHooks[event]; - if (not self.eventHooks[event]) then - list = {}; - self.eventHooks[event] = list; - end - - list[func] = true; -end -]] - function WQT_CoreMixin:UnhookEvent(event, func) local list = self.eventHooks[event]; if (list) then @@ -2534,9 +2554,13 @@ function WQT_CoreMixin:SetCustomEnabled(value) if value then self.FilterButton:Enable(); self.sortButton:Enable(); + self.SettingsButton:Enable(); + self.SettingsButton.darken:SetAlpha(0.15); else self.FilterButton:Disable(); self.sortButton:Disable(); + self.SettingsButton:Disable(); + self.SettingsButton.darken:SetAlpha(0.35); end self.ScrollFrame:SetButtonsEnabled(value); diff --git a/WorldQuestTab.toc b/WorldQuestTab.toc index 1261362..aa5feef 100644 --- a/WorldQuestTab.toc +++ b/WorldQuestTab.toc @@ -2,7 +2,7 @@ ## Title: World Quest Tab ## Notes: Creates a new quest tab to keep track of world quests. ## Author: LanceDH -## Version: 9.0.01 +## Version: 9.0.02 ## SavedVariables: BWQDB WorldQuestTab.xml diff --git a/WorldQuestTab.xml b/WorldQuestTab.xml index 947aa81..f7ba273 100644 --- a/WorldQuestTab.xml +++ b/WorldQuestTab.xml @@ -233,7 +233,7 @@ - + @@ -811,10 +811,47 @@ + + + + @@ -916,10 +953,9 @@ - + - - + @@ -927,7 +963,7 @@ - + @@ -967,14 +1003,7 @@ - - - - - - - - + @@ -983,32 +1012,26 @@ + + + + + + + + + - - - - - - - - - - - - - - self:GetParent():InfoOnEnter(self); - - - GameTooltip:Hide(); - - - - + + self:InfoOnEnter(self); + + + GameTooltip:Hide(); +