Last active
November 30, 2020 12:39
-
-
Save DenL/4b7f1eabbcfe1b58e4fb162f831b06f7 to your computer and use it in GitHub Desktop.
AngryWorldQuest Edit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local ADDON, Addon = ... | |
local Mod = Addon:NewModule('QuestFrame') | |
local Config | |
local dataProvder | |
local hoveredQuestID | |
local MAPID_AZEROTH = 947 | |
-- Legion | |
local MAPID_BROKENISLES = 619 | |
local MAPID_DALARAN = 627 | |
local MAPID_AZSUNA = 630 | |
local MAPID_STORMHEIM = 634 | |
local MAPID_VALSHARAH = 641 | |
local MAPID_HIGHMOUNTAIN = 650 | |
local MAPID_SURAMAR = 680 | |
local MAPID_EYEOFAZSHARA = 790 | |
local MAPID_BROKENSHORE = 646 | |
local MAPID_ARGUS = 905 | |
local MAPID_ANTORANWASTES = 885 | |
local MAPID_KROKUUN = 830 | |
local MAPID_MACAREE = 882 | |
-- BfA | |
local MAPID_DARKSHORE = 62 | |
local MAPID_ARATHI_HIGHLANDS = 14 | |
local MAPID_ZANDALAR = 875 | |
local MAPID_VOLDUN = 864 | |
local MAPID_NAZMIR = 863 | |
local MAPID_ZULDAZAR = 862 | |
local MAPID_KUL_TIRAS = 876 | |
local MAPID_STORMSONG_VALLEY = 942 | |
local MAPID_DRUSTVAR = 896 | |
local MAPID_TIRAGARDE_SOUND = 895 | |
local MAPID_TOL_DAGOR = 1169 | |
local MAPID_NAZJATAR = 1355 | |
local MAPID_MECHAGON_ISLAND = 1462 | |
-- Shadowlands | |
local MAPID_SHADOWLANDS = 1550 | |
local CURRENCYID_RESOURCES = 1220 | |
local CURRENCYID_WAR_SUPPLIES = 1342 | |
local CURRENCYID_NETHERSHARD = 1226 | |
local CURRENCYID_VEILED_ARGUNITE = 1508 | |
local CURRENCYID_WAKENING_ESSENCE = 1533 | |
local CURRENCYID_AZERITE = 1553 | |
local CURRENCYID_WAR_RESOURCES = 1560 | |
local TitleButton_RarityColorTable = { [Enum.WorldQuestQuality.Common] = 0, [Enum.WorldQuestQuality.Rare] = 3, [Enum.WorldQuestQuality.Epic] = 10 } | |
local FILTER_CURRENCY = 1 | |
local FILTER_ITEMS = 2 | |
local SORT_NAME = 1 | |
local SORT_TIME = 2 | |
local SORT_ZONE = 3 | |
local SORT_FACTION = 4 | |
local SORT_REWARDS = 5 | |
local SORT_ORDER = { SORT_NAME, SORT_TIME, SORT_ZONE, SORT_FACTION, SORT_REWARDS } | |
local REWARDS_ORDER = { ARTIFACT_POWER = 1, LOOT = 2, CURRENCY = 3, GOLD = 4, ITEMS = 5 } | |
Mod.SortOrder = SORT_ORDER | |
local FACTION_ORDER_SHADOWLANDS = {2407, 2410, 2465, 2413} | |
local FACTION_ORDER_HORDE = { 2157, 2164, 2156, 2158, 2103, 2163 } | |
local FACTION_ORDER_ALLIANCE = { 2159, 2164, 2160, 2161, 2162, 2163 } | |
local FACTION_ORDER_LEGION = { 1900, 1883, 1828, 1948, 1894, 1859, 1090, 2045, 2165, 2170 } | |
local FACTION_ORDER | |
local FILTER_LOOT_ALL = 1 | |
local FILTER_LOOT_UPGRADES = 2 | |
local ANIMA_ITEM_COLOR = { r=.6, g=.8, b=1 } | |
local ANIMA_SPELLID = {[347555] = 3, [345706] = 5, [336327] = 35, [336456] = 250} | |
local My_HideDropDownMenu, My_DropDownList1, My_UIDropDownMenu_AddButton, My_UIDropDownMenu_Initialize, My_ToggleDropDownMenu, My_UIDropDownMenuTemplate | |
local function MyDropDown_Init() | |
My_HideDropDownMenu = Lib_HideDropDownMenu or HideDropDownMenu | |
My_DropDownList1 = Lib_DropDownList1 or DropDownList1 | |
My_UIDropDownMenu_AddButton = Lib_UIDropDownMenu_AddButton or UIDropDownMenu_AddButton | |
My_UIDropDownMenu_Initialize = Lib_UIDropDownMenu_Initialize or UIDropDownMenu_Initialize | |
My_ToggleDropDownMenu = Lib_ToggleDropDownMenu or ToggleDropDownMenu | |
My_UIDropDownMenuTemplate = Lib_UIDropDownMenu_Initialize and "Lib_UIDropDownMenuTemplate" or "UIDropDownMenuTemplate" | |
end | |
-- =================== | |
-- Utility Functions | |
-- =================== | |
--TODO: MapUtil.GetMapParentInfo(mapID, Enum.UIMapType.Continent, true) | |
local __continentMapID = {} | |
local function GetMapContinentMapID(mapID) | |
if __continentMapID[mapID] == nil then | |
local continentInfo = MapUtil.GetMapParentInfo(mapID, Enum.UIMapType.Continent) | |
if continentInfo then | |
__continentMapID[mapID] = continentInfo.mapID | |
end | |
end | |
return __continentMapID[mapID] | |
end | |
local function IsShadowlandsMap(mapID) | |
return GetMapContinentMapID(mapID) == MAPID_SHADOWLANDS | |
end | |
local function IsLegionMap(mapID) | |
return GetMapContinentMapID(mapID) == MAPID_BROKENISLES | |
end | |
local function IsLegionWorldQuest(info) | |
return IsLegionMap(info.mapID) | |
end | |
-- ================= | |
-- Event Functions | |
-- ================= | |
local function HeaderButton_OnClick(self, button) | |
local questsCollapsed = Config.collapsed | |
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON) | |
if ( button == "LeftButton" ) then | |
questsCollapsed = not questsCollapsed | |
Config:Set('collapsed', questsCollapsed) | |
QuestMapFrame_UpdateAll() | |
end | |
end | |
local function TitleButton_OnEnter(self) | |
local questTagInfo = C_QuestLog.GetQuestTagInfo(self.questID) | |
local _, color = GetQuestDifficultyColor( UnitLevel("player") + TitleButton_RarityColorTable[questTagInfo.quality] ) | |
self.Text:SetTextColor( color.r, color.g, color.b ) | |
hoveredQuestID = self.questID | |
if dataProvder then | |
local pin = dataProvder.activePins[self.questID] | |
if pin then | |
pin:EnableDrawLayer("HIGHLIGHT") | |
end | |
end | |
if Config.showComparisonRight then | |
WorldMapTooltip.ItemTooltip.Tooltip.overrideComparisonAnchorSide = "right" | |
end | |
TaskPOI_OnEnter(self) | |
end | |
local function TitleButton_OnLeave(self) | |
local questTagInfo = C_QuestLog.GetQuestTagInfo(self.questID) | |
local color = GetQuestDifficultyColor( UnitLevel("player") + TitleButton_RarityColorTable[questTagInfo.quality] ) | |
self.Text:SetTextColor( color.r, color.g, color.b ) | |
hoveredQuestID = nil | |
if dataProvder then | |
local pin = dataProvder.activePins[self.questID] | |
if pin then | |
pin:DisableDrawLayer("HIGHLIGHT") | |
end | |
end | |
TaskPOI_OnLeave(self) | |
end | |
-- WorldQuestPinMixin:OnMouseClickAction | |
local function TitleButton_OnClick(self, button) | |
if ( not ChatEdit_TryInsertQuestLinkForQuestID(self.questID) ) then | |
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON); | |
local watchType = C_QuestLog.GetQuestWatchType(self.questID); | |
if ( button == "RightButton" ) then | |
if ( self.mapID ) then | |
QuestMapFrame:GetParent():SetMapID(self.mapID) | |
end | |
elseif IsShiftKeyDown() then | |
if watchType == Enum.QuestWatchType.Manual or (watchType == Enum.QuestWatchType.Automatic and C_SuperTrack.GetSuperTrackedQuestID() == self.questID) then | |
BonusObjectiveTracker_UntrackWorldQuest(self.questID); | |
else | |
BonusObjectiveTracker_TrackWorldQuest(self.questID, Enum.QuestWatchType.Manual); | |
end | |
else | |
if watchType == Enum.QuestWatchType.Manual then | |
C_SuperTrack.SetSuperTrackedQuestID(self.questID); | |
else | |
BonusObjectiveTracker_TrackWorldQuest(self.questID, Enum.QuestWatchType.Automatic); | |
end | |
end | |
end | |
end | |
local function FilterButton_OnEnter(self) | |
local text = Mod.Filters[ self.filter ].name | |
if self.filter == "EMISSARY" and Config.filterEmissary and not C_QuestLog.IsComplete(Config.filterEmissary) then | |
local title = C_QuestLog.GetTitleForQuestID(Config.filterEmissary) | |
if title then text = text..": "..title end | |
end | |
if self.filter == "LOOT" then | |
if Config.filterLoot == FILTER_LOOT_UPGRADES or (Config.filterLoot == 0 and Config.lootFilterUpgrades) then | |
text = string.format("%s (%s)", text, Addon.Locale.UPGRADES) | |
end | |
end | |
if self.filter == "FACTION" and Config.filterFaction ~= 0 then | |
local title = GetFactionInfoByID(Config.filterFaction) | |
if title then text = text..": "..title end | |
end | |
if self.filter == "SORT" then | |
local title = Addon.Locale["config_sortMethod_"..Config.sortMethod] | |
if title then text = text..": "..title end | |
end | |
if self.filter == "ZONE" and Config.filterZone ~= 0 then | |
local title = GetMapNameByID(Config.filterZone) | |
if title then text = text..": "..title end | |
end | |
if self.filter == "TIME" then | |
local hours = Config.filterTime ~= 0 and Config.filterTime or Config.timeFilterDuration | |
text = string.format(BLACK_MARKET_HOT_ITEM_TIME_LEFT, string.format(FORMATED_HOURS, hours)) | |
end | |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT") | |
GameTooltip:SetText(text) | |
GameTooltip:Show() | |
end | |
local function FilterButton_OnLeave(self) | |
GameTooltip:Hide() | |
end | |
local filterMenu | |
local function FilterMenu_OnClick(self, key) | |
if key == "EMISSARY" then | |
Config:Set('filterEmissary', self.value, true) | |
end | |
if key == "LOOT" then | |
Config:Set('filterLoot', self.value, true) | |
end | |
if key == "FACTION" then | |
Config:Set('filterFaction', self.value, true) | |
end | |
if key == "ZONE" then | |
Config:Set('filterZone', self.value, true) | |
end | |
if key == "TIME" then | |
Config:Set('filterTime', self.value, true) | |
end | |
if key == "SORT" then | |
Config:Set('sortMethod', self.value) | |
elseif IsShiftKeyDown() then | |
Config:SetFilter(key, true) | |
else | |
Config:SetOnlyFilter(key) | |
end | |
end | |
local function FilterMenu_Initialize(self, level) | |
local info = { func = FilterMenu_OnClick, arg1 = self.filter } | |
if self.filter == "EMISSARY" then | |
local value = Config.filterEmissary | |
if not C_QuestLog.IsOnQuest(value) then value = 0 end -- specific bounty not found, show all | |
info.text = ALL | |
info.value = 0 | |
info.checked = info.value == value | |
My_UIDropDownMenu_AddButton(info, level) | |
local mapID = QuestMapFrame:GetParent():GetMapID() | |
if mapID == MAPID_BROKENISLES then mapID = MAPID_DALARAN end -- fix no emissary on broken isles continent map | |
local bounties = C_QuestLog.GetBountiesForMapID(mapID) | |
if bounties then | |
for _, bounty in ipairs(bounties) do | |
if not C_QuestLog.IsComplete(bounty.questID) then | |
info.text = C_QuestLog.GetTitleForQuestID(bounty.questID) | |
info.icon = bounty.icon | |
info.value = bounty.questID | |
info.checked = info.value == value | |
My_UIDropDownMenu_AddButton(info, level) | |
end | |
end | |
end | |
elseif self.filter == "LOOT" then | |
local value = Config.filterLoot | |
if value == 0 then value = Config.lootFilterUpgrades and FILTER_LOOT_UPGRADES or FILTER_LOOT_ALL end | |
info.text = ALL | |
info.value = FILTER_LOOT_ALL | |
info.checked = info.value == value | |
My_UIDropDownMenu_AddButton(info, level) | |
info.text = Addon.Locale.UPGRADES | |
info.value = FILTER_LOOT_UPGRADES | |
info.checked = info.value == value | |
My_UIDropDownMenu_AddButton(info, level) | |
elseif self.filter == "ZONE" then | |
local value = Config.filterZone | |
info.text = Addon.Locale.CURRENT_ZONE | |
info.value = 0 | |
info.checked = info.value == value | |
My_UIDropDownMenu_AddButton(info, level) | |
elseif self.filter == "FACTION" then | |
local value = Config.filterFaction | |
local mapID = QuestMapFrame:GetParent():GetMapID() | |
local factions = IsShadowlandsMap(mapID) and FACTION_ORDER_SHADOWLANDS or IsLegionMap(mapID) and FACTION_ORDER_LEGION or FACTION_ORDER | |
for _, factionID in ipairs(factions) do | |
info.text = GetFactionInfoByID(factionID) | |
info.value = factionID | |
info.checked = info.value == value | |
My_UIDropDownMenu_AddButton(info, level) | |
end | |
elseif self.filter == "TIME" then | |
local value = Config.filterTime ~= 0 and Config.filterTime or Config.timeFilterDuration | |
for _, hours in ipairs(Mod.Filters.TIME.values) do | |
info.text = string.format(FORMATED_HOURS, hours) | |
info.value = hours | |
info.checked = info.value == value | |
My_UIDropDownMenu_AddButton(info, level) | |
end | |
elseif self.filter == "SORT" then | |
local value = Config.sortMethod | |
info.text = Mod.Filters[ self.filter ].name | |
info.notCheckable = true | |
info.isTitle = true | |
My_UIDropDownMenu_AddButton(info, level) | |
info.notCheckable = false | |
info.isTitle = false | |
info.disabled = false | |
for _, sortIndex in ipairs(SORT_ORDER) do | |
info.text = Addon.Locale["config_sortMethod_"..sortIndex] | |
info.value = sortIndex | |
info.checked = info.value == value | |
My_UIDropDownMenu_AddButton(info, level) | |
end | |
end | |
end | |
local function FilterButton_ShowMenu(self) | |
if not filterMenu then | |
filterMenu = CreateFrame("Button", "DropDownMenuAWQ", QuestMapFrame, My_UIDropDownMenuTemplate) | |
end | |
filterMenu.filter = self.filter | |
My_UIDropDownMenu_Initialize(filterMenu, FilterMenu_Initialize, "MENU") | |
My_ToggleDropDownMenu(1, nil, filterMenu, self, 0, 0) | |
end | |
local function FilterButton_OnClick(self, button) | |
PlaySound(SOUNDKIT.IG_MAINMENU_OPTION_CHECKBOX_ON) | |
if (button == 'RightButton' and (self.filter == "EMISSARY" or self.filter == "LOOT" or self.filter == "FACTION" or self.filter == "TIME")) -- or self.filter == "ZONE" | |
or (self.filter == "SORT") | |
or (self.filter == "FACTION" and not Config:GetFilter("FACTION")) then -- and Config.filterFaction == 0 | |
local MY_UIDROPDOWNMENU_OPEN_MENU = Lib_UIDropDownMenu_Initialize and LIB_UIDROPDOWNMENU_OPEN_MENU or UIDROPDOWNMENU_OPEN_MENU | |
if filterMenu and MY_UIDROPDOWNMENU_OPEN_MENU == filterMenu and My_DropDownList1:IsShown() and filterMenu.filter == self.filter then | |
My_HideDropDownMenu(1) | |
else | |
My_HideDropDownMenu(1) | |
FilterButton_ShowMenu(self) | |
end | |
else | |
My_HideDropDownMenu(1) | |
if IsShiftKeyDown() then | |
if self.filter == "EMISSARY" then Config:Set('filterEmissary', 0, true) end | |
if self.filter == "LOOT" then Config:Set('filterLoot', 0, true) end | |
Config:ToggleFilter(self.filter) | |
else | |
if Config:IsOnlyFilter(self.filter) then | |
Config:Set('filterFaction', 0, true) | |
Config:Set('filterEmissary', 0, true) | |
Config:Set('filterLoot', 0, true) | |
Config:Set('filterZone', 0, true) | |
Config:Set('filterTime', 0, true) | |
Config:SetNoFilter() | |
else | |
if self.filter ~= "FACTION" then Config:Set('filterFaction', 0, true) end | |
if self.filter ~= "EMISSARY" then Config:Set('filterEmissary', 0, true) end | |
if self.filter ~= "LOOT" then Config:Set('filterLoot', 0, true) end | |
if self.filter ~= "ZONE" then Config:Set('filterZone', 0, true) end | |
if self.filter ~= "TIME" then Config:Set('filterTime', 0, true) end | |
Config:SetOnlyFilter(self.filter) | |
end | |
end | |
FilterButton_OnEnter(self) | |
end | |
end | |
local MAPID_DISPLAY_OVERRIDE = { | |
[MAPID_NAZJATAR] = {MAPID_NAZJATAR}, | |
[MAPID_ARGUS] = { MAPID_ANTORANWASTES, MAPID_KROKUUN, MAPID_MACAREE }, | |
[MAPID_AZEROTH] = { MAPID_KUL_TIRAS, MAPID_ZANDALAR, MAPID_NAZJATAR } | |
} | |
local function GetMapIDsForDisplay(mapID) | |
if MAPID_DISPLAY_OVERRIDE[mapID] then | |
return MAPID_DISPLAY_OVERRIDE[mapID] | |
end | |
if Config.onlyCurrentZone then | |
return {mapID} | |
else | |
return {GetMapContinentMapID(mapID)} | |
end | |
end | |
local filterButtons = {} | |
local function GetFilterButton(key) | |
local index = Mod.Filters[key].index | |
if ( not filterButtons[index] ) then | |
local button = CreateFrame("Button", nil, QuestMapFrame.QuestsFrame.Contents) | |
button.filter = key | |
button:SetScript("OnEnter", FilterButton_OnEnter) | |
button:SetScript("OnLeave", FilterButton_OnLeave) | |
button:RegisterForClicks("LeftButtonUp","RightButtonUp") | |
button:SetScript("OnClick", FilterButton_OnClick) | |
button:SetSize(24, 24) | |
if key == "SORT" then | |
button:SetNormalTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Up") | |
button:SetPushedTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Down") | |
button:SetDisabledTexture("Interface\\ChatFrame\\UI-ChatIcon-ScrollDown-Disabled") | |
button:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight", "ADD") | |
else | |
button:SetNormalAtlas("worldquest-tracker-ring") | |
button:SetHighlightAtlas("worldquest-tracker-ring") | |
button:GetHighlightTexture():SetAlpha(0.4) | |
local icon = button:CreateTexture(nil, "BACKGROUND", nil, -1) | |
icon:SetMask("Interface\\CharacterFrame\\TempPortraitAlphaMask") | |
icon:SetSize(16, 16) | |
icon:SetPoint("CENTER", 0, 1) | |
icon:SetTexture(Mod.Filters[key].icon or "inv_misc_questionmark") | |
button.Icon = icon | |
end | |
filterButtons[index] = button | |
end | |
return filterButtons[index] | |
end | |
local function TitleButton_Initiliaze(button) | |
if not button.awq then | |
button:SetScript("OnEnter", TitleButton_OnEnter) | |
button:SetScript("OnLeave", TitleButton_OnLeave) | |
button:SetScript("OnClick", TitleButton_OnClick) | |
button.TagTexture:SetSize(24, 24) | |
button.TagTexture:ClearAllPoints() | |
button.TagTexture:SetPoint("TOP", button.Text, "CENTER", 0, 8) | |
button.TagTexture:SetPoint("RIGHT", 0, 0) | |
button.TagTexture:Hide() | |
button.TagText = button:CreateFontString(nil, nil, "GameFontNormalLeft") | |
button.TagText:SetTextColor(1, 1, 1) | |
button.TagText:Hide() | |
button.TaskIcon:ClearAllPoints() | |
button.TaskIcon:SetPoint("CENTER", button.Text, "LEFT", -15, 0) | |
button.TimeIcon = button:CreateTexture(nil, "OVERLAY") | |
button.TimeIcon:SetAtlas("worldquest-icon-clock") | |
local filename, fontHeight = button.TagText:GetFont() | |
button.TagTexture:SetSize(16, 16) | |
button.TagText:ClearAllPoints() | |
button.TagText:SetPoint("RIGHT", button.TagTexture , "LEFT", -3, 0) | |
button.TagText:SetFont(filename, fontHeight, "") | |
button.awq = true | |
end | |
end | |
local titleFramePool | |
local headerButton | |
local spacerFrame | |
local function QuestFrame_AddQuestButton(questInfo, prevButton) | |
local totalHeight = 8 | |
local button = titleFramePool:Acquire() | |
TitleButton_Initiliaze(button) | |
local questID = questInfo.questId | |
local title, factionID, capped = C_TaskQuest.GetQuestInfoByQuestID(questID) | |
local questTagInfo = C_QuestLog.GetQuestTagInfo(questID) | |
local tradeskillLineID = questTagInfo.tradeskillLineID--tradeskillLineIndex and select(7, GetProfessionInfo(tradeskillLineIndex)) | |
local timeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes(questID) | |
C_TaskQuest.RequestPreloadRewardData(questID) | |
local totalHeight = 8 | |
button.worldQuest = true | |
button.questID = questID | |
button.mapID = questInfo.mapID | |
button.factionID = factionID | |
button.timeLeftMinutes = timeLeftMinutes | |
button.numObjectives = questInfo.numObjectives | |
button.infoX = questInfo.x | |
button.infoY = questInfo.y | |
local difficultyColor = GetQuestDifficultyColor( UnitLevel("player") + TitleButton_RarityColorTable[questTagInfo.quality] ) | |
button.Text:SetText(title) | |
button.Text:SetTextColor( difficultyColor.r, difficultyColor.g, difficultyColor.b ) | |
totalHeight = totalHeight + button.Text:GetHeight() | |
if ( WorldMap_IsWorldQuestEffectivelyTracked(questID) ) then | |
button.Check:Show() | |
button.Check:SetPoint("LEFT", button.Text, button.Text:GetWrappedWidth() + 2, 0) | |
else | |
button.Check:Hide() | |
end | |
local hasIcon = true | |
button.TaskIcon:Show() | |
button.TaskIcon:SetTexCoord(0, 1, 0, 1) | |
if questInfo.inProgress then | |
button.TaskIcon:SetAtlas("worldquest-questmarker-questionmark") | |
button.TaskIcon:SetSize(10, 15) | |
elseif questTagInfo.worldQuestType == Enum.QuestTagType.PvP then | |
button.TaskIcon:SetAtlas("worldquest-icon-pvp-ffa", true) | |
elseif questTagInfo.worldQuestType == Enum.QuestTagType.PetBattle then | |
button.TaskIcon:SetAtlas("worldquest-icon-petbattle", true) | |
elseif questTagInfo.worldQuestType == Enum.QuestTagType.Dungeon then | |
button.TaskIcon:SetAtlas("worldquest-icon-dungeon", true) | |
elseif questTagInfo.worldQuestType == Enum.QuestTagType.Raid then | |
button.TaskIcon:SetAtlas("worldquest-icon-raid", true) | |
elseif ( questTagInfo.worldQuestType == Enum.QuestTagType.Profession and WORLD_QUEST_ICONS_BY_PROFESSION[tradeskillLineID] ) then | |
button.TaskIcon:SetAtlas(WORLD_QUEST_ICONS_BY_PROFESSION[tradeskillLineID], true) | |
elseif questTagInfo.isElite then | |
local tagCoords = QUEST_TAG_TCOORDS[Enum.QuestTag.Heroic] | |
button.TaskIcon:SetSize(16, 16) | |
button.TaskIcon:SetTexture(QUEST_ICONS_FILE) | |
button.TaskIcon:SetTexCoord( unpack(tagCoords) ) | |
elseif ( questTagInfo.worldQuestType == Enum.QuestTagType.Invasion ) then | |
button.TaskIcon:SetAtlas("worldquest-icon-burninglegion", true) | |
else | |
hasIcon = false | |
button.TaskIcon:Hide() | |
end | |
if ( timeLeftMinutes and timeLeftMinutes > 0 and timeLeftMinutes <= WORLD_QUESTS_TIME_LOW_MINUTES ) then | |
button.TimeIcon:Show() | |
if hasIcon then | |
button.TimeIcon:SetSize(14, 14) | |
button.TimeIcon:SetPoint("CENTER", button.TaskIcon, "BOTTOMLEFT", 0, 0) | |
else | |
button.TimeIcon:SetSize(16, 16) | |
button.TimeIcon:SetPoint("CENTER", button.Text, "LEFT", -15, 0) | |
end | |
else | |
button.TimeIcon:Hide() | |
end | |
local tagText, tagTexture, tagTexCoords, tagColor | |
tagColor = {r=1, g=1, b=1} | |
local money = GetQuestLogRewardMoney(questID) | |
if ( money > 0 ) then | |
local gold = floor(money / (COPPER_PER_GOLD)) | |
tagTexture = "Interface\\MoneyFrame\\UI-MoneyIcons" | |
tagTexCoords = { 0, 0.25, 0, 1 } | |
tagText = BreakUpLargeNumbers(gold) | |
button.rewardCategory = "GOLD" | |
button.rewardValue = gold | |
button.rewardValue2 = 0 | |
end | |
local numQuestCurrencies = GetNumQuestLogRewardCurrencies(questID) | |
if numQuestCurrencies > 0 then | |
for currencyNum = 1, numQuestCurrencies do | |
local name, texture, numItems, currencyID = GetQuestLogRewardCurrencyInfo(currencyNum, questID) | |
if currencyID ~= CURRENCYID_WAR_SUPPLIES and currencyID ~= CURRENCYID_NETHERSHARD then | |
tagText = numItems | |
tagTexture = texture | |
tagTexCoords = nil | |
if currencyID == CURRENCYID_AZERITE then | |
tagColor = BAG_ITEM_QUALITY_COLORS[Enum.ItemQuality.Artifact] | |
end | |
button.rewardCategory = "CURRENCY" | |
button.rewardValue = currencyID | |
button.rewardValue2 = numItems | |
end | |
end | |
end | |
local numQuestRewards = GetNumQuestLogRewards(questID) | |
if numQuestRewards > 0 then | |
local itemName, itemTexture, quantity, quality, isUsable, itemID = GetQuestLogRewardInfo(1, questID) | |
if itemName and itemTexture then | |
local iLevel = Addon.Data:RewardItemLevel(itemID, questID) | |
tagTexture = itemTexture | |
tagTexCoords = nil | |
if iLevel then | |
tagText = iLevel | |
tagColor = BAG_ITEM_QUALITY_COLORS[quality] | |
button.rewardCategory = "LOOT" | |
button.rewardValue = iLevel | |
button.rewardValue2 = 0 | |
else | |
tagText = quantity > 1 and quantity | |
button.rewardCategory = "ITEMS" | |
button.rewardValue = quantity | |
button.rewardValue2 = 0 | |
end | |
if C_Item.IsAnimaItemByID(itemID) then | |
_, spellID = GetItemSpell(itemID) | |
tagTexture = 3528288 -- Interface/Icons/Spell_AnimaBastion_Orb | |
tagColor = ANIMA_ITEM_COLOR | |
tagText = quantity * ANIMA_SPELLID[spellID] | |
end | |
end | |
end | |
if tagTexture and tagText then | |
button.TagText:Show() | |
button.TagText:SetText(tagText) | |
button.TagText:SetTextColor(tagColor.r, tagColor.g, tagColor.b ) | |
button.TagTexture:Show() | |
button.TagTexture:SetTexture(tagTexture) | |
elseif tagTexture then | |
button.TagText:Hide() | |
button.TagText:SetText("") | |
button.TagTexture:Show() | |
button.TagTexture:SetTexture(tagTexture) | |
end | |
if tagTexture then | |
if tagTexCoords then | |
button.TagTexture:SetTexCoord( unpack(tagTexCoords) ) | |
else | |
button.TagTexture:SetTexCoord( 0, 1, 0, 1 ) | |
end | |
end | |
button:SetHeight(totalHeight) | |
button:Show() | |
return button | |
end | |
local function TaskPOI_IsFilteredReward(selectedFilters, questID) | |
local positiveMatch = false | |
local hasCurrencyFilter = false | |
local money = GetQuestLogRewardMoney(questID) | |
if money > 0 and selectedFilters["GOLD"] then | |
positiveMatch = true | |
end | |
local numQuestCurrencies = GetNumQuestLogRewardCurrencies(questID) | |
for key,_ in pairs(selectedFilters) do | |
local filter = Mod.Filters[key] | |
if filter.preset == FILTER_CURRENCY then | |
hasCurrencyFilter = true | |
for i = 1, numQuestCurrencies do | |
local name, texture, numItems, currencyID = GetQuestLogRewardCurrencyInfo(i, questID) | |
if filter.currencyID == currencyID then | |
positiveMatch = true | |
end | |
end | |
end | |
end | |
local numQuestRewards = GetNumQuestLogRewards(questID) | |
if numQuestRewards > 0 then | |
local itemName, itemTexture, quantity, quality, isUsable, itemID = GetQuestLogRewardInfo(1, questID) | |
-- local itemSpellName = GetItemSpell(itemID); | |
if itemName and itemTexture then | |
if C_Item.IsAnimaItemByID(itemID) and selectedFilters.ANIMA then | |
positiveMatch = true | |
elseif C_Soulbinds.IsItemConduitByItemInfo(itemID) and selectedFilters.CONDUIT then | |
positiveMatch = true | |
else | |
local iLevel = Addon.Data:RewardItemLevel(itemID, questID) | |
if iLevel then | |
local upgradesOnly = Config.filterLoot == FILTER_LOOT_UPGRADES or (Config.filterLoot == 0 and Config.lootFilterUpgrades) | |
if selectedFilters.LOOT and (not upgradesOnly or Addon.Data:RewardIsUpgrade(itemID, questID)) then | |
positiveMatch = true | |
end | |
else | |
if selectedFilters.ITEMS then | |
positiveMatch = true | |
end | |
end | |
end | |
end | |
end | |
if positiveMatch then | |
return false | |
elseif hasCurrencyFilter or selectedFilters.ANIMA or selectedFilters.LOOT or selectedFilters.ITEMS then | |
return true | |
end | |
end | |
local function TaskPOI_IsFiltered(info, displayMapID) | |
local hasFilters = Config:HasFilters() | |
local selectedFilters = Config:GetFilterTable() | |
local title, factionID, capped = C_TaskQuest.GetQuestInfoByQuestID(info.questId) | |
local questTagInfo = C_QuestLog.GetQuestTagInfo(info.questId) | |
local timeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes(info.questId) | |
C_TaskQuest.RequestPreloadRewardData(info.questId) | |
local isFiltered = hasFilters | |
if C_QuestLog.IsQuestFlaggedCompleted(51722) then -- BfA World Quest unlocked | |
if IsLegionWorldQuest(info) and not IsLegionMap(displayMapID) then | |
return true | |
end | |
if not IsLegionWorldQuest(info) and IsLegionMap(displayMapID) then | |
return true | |
end | |
end | |
if hasFilters then | |
local lootFiltered = TaskPOI_IsFilteredReward(selectedFilters, info.questId) | |
if lootFiltered ~= nil then | |
isFiltered = lootFiltered | |
end | |
if selectedFilters.FACTION then | |
if (factionID == Config.filterFaction or Addon.Data:QuestHasFaction(info.questId, Config.filterFaction)) then | |
isFiltered = false | |
end | |
end | |
if selectedFilters.TIME then | |
local hours = Config.filterTime ~= 0 and Config.filterTime or Config.timeFilterDuration | |
if timeLeftMinutes and (timeLeftMinutes - WORLD_QUESTS_TIME_CRITICAL_MINUTES) <= (hours * 60) then | |
isFiltered = false | |
end | |
end | |
if selectedFilters.PVP then | |
if questTagInfo.worldQuestType == Enum.QuestTagType.PvP then | |
isFiltered = false | |
end | |
end | |
if selectedFilters.PETBATTLE then | |
if questTagInfo.worldQuestType == Enum.QuestTagType.PetBattle then | |
isFiltered = false | |
end | |
end | |
if selectedFilters.PROFESSION then | |
if questTagInfo.tradeskillLineID then | |
isFiltered = false | |
end | |
end | |
if selectedFilters.TRACKED then | |
if IsWorldQuestHardWatched(info.questId) or GetSuperTrackedQuestID() == info.questId then | |
isFiltered = false | |
end | |
end | |
if selectedFilters.RARE then | |
if questTagInfo.quality ~= Enum.WorldQuestQuality.Common then | |
isFiltered = false | |
end | |
end | |
if selectedFilters.DUNGEON then | |
if questTagInfo.worldQuestType == Enum.QuestTagType.Dungeon or questTagInfo.worldQuestType == Enum.QuestTagType.Raid then | |
isFiltered = false | |
end | |
end | |
if selectedFilters.ZONE then | |
local currentMapID = QuestMapFrame:GetParent():GetMapID() | |
local filterMapID = Config.filterZone | |
if filterMapID ~= 0 then | |
if info.mapID and info.mapID == filterMapID then | |
isFiltered = false | |
end | |
else | |
if info.mapID and info.mapID == currentMapID then | |
isFiltered = false | |
end | |
end | |
end | |
if selectedFilters.EMISSARY then | |
local mapID = QuestMapFrame:GetParent():GetMapID() | |
if mapID == MAPID_BROKENISLES then mapID = MAPID_DALARAN end -- fix no emissary on broken isles continent map | |
local bounties = C_QuestLog.GetBountiesForMapID(mapID) | |
if bounties then | |
local bountyFilter = Config.filterEmissary | |
if not C_QuestLog.IsOnQuest(bountyFilter) or C_QuestLog.IsComplete(bountyFilter) then bountyFilter = 0 end -- show all bounties | |
for _, bounty in ipairs(bounties) do | |
if bounty and not C_QuestLog.IsComplete(bounty.questID) and C_QuestLog.IsQuestCriteriaForBounty(info.questId, bounty.questID) and (bountyFilter == 0 or bountyFilter == bounty.questID) then | |
isFiltered = false | |
end | |
end | |
end | |
end | |
end | |
return isFiltered | |
end | |
local function TaskPOI_Sorter(a, b) | |
if Config.sortMethod == SORT_FACTION then | |
if (a.factionID or 0) ~= (b.factionID or 0) then | |
return (a.factionID or 0) < (b.factionID or 0) | |
end | |
elseif Config.sortMethod == SORT_TIME then | |
if math.abs( (a.timeLeftMinutes or 0) - (b.timeLeftMinutes or 0) ) > 2 then | |
return (a.timeLeftMinutes or 0) < (b.timeLeftMinutes or 0) | |
end | |
elseif Config.sortMethod == SORT_ZONE then | |
if a.mapID ~= b.mapID then | |
return (a.mapID or 0) < (b.mapID or 0) | |
end | |
elseif Config.sortMethod == SORT_REWARDS then | |
local default_cat = #Mod.Filters + 1 | |
local acat = (a.rewardCategory and REWARDS_ORDER[a.rewardCategory]) or default_cat | |
local bcat = (b.rewardCategory and REWARDS_ORDER[b.rewardCategory]) or default_cat | |
if acat ~= bcat then | |
return acat < bcat | |
elseif acat ~= default_cat then | |
if (a.rewardValue or 0) ~= (b.rewardValue or 0) then | |
return (a.rewardValue or 0) > (b.rewardValue or 0) | |
elseif (a.rewardValue2 or 0) ~= (b.rewardValue2 or 0) then | |
return (a.rewardValue2 or 0) > (b.rewardValue2 or 0) | |
end | |
end | |
end | |
return a.Text:GetText() < b.Text:GetText() | |
end | |
local function QuestFrame_Update() | |
titleFramePool:ReleaseAll() | |
local mapID = QuestMapFrame:GetParent():GetMapID() | |
local displayLocation, lockedQuestID = C_QuestLog.GetBountySetInfoForMapID(mapID); | |
local tasksOnMap = C_TaskQuest.GetQuestsForPlayerByMapID(mapID) | |
if (Config.onlyCurrentZone) and (not displayLocation or lockedQuestID) and not (tasksOnMap and #tasksOnMap > 0) and (mapID ~= MAPID_ARGUS) then | |
for i = 1, #filterButtons do filterButtons[i]:Hide() end | |
if spaceFrame then spacerFrame:Hide() end | |
if headerButton then headerButton:Hide() end | |
QuestScrollFrame.Contents:Layout() | |
return | |
end | |
local questsCollapsed = Config.collapsed | |
local button, storyButton, prevButton | |
local layoutIndex = Config.showAtTop and 0 or 10000 | |
if layoutIndex == 0 then | |
local storyAchievementID, storyMapID = C_QuestLog.GetZoneStoryInfo(mapID) | |
if storyAchievementID then | |
storyButton = QuestScrollFrame.Contents.StoryHeader | |
layoutIndex = storyButton.layoutIndex + 0.001; | |
end | |
end | |
if layoutIndex == 0 then | |
for header in QuestScrollFrame.headerFramePool:EnumerateActive() do | |
local lowestHeaderIndex = 10000 | |
-- normal story header left padding is 4 | |
if header.leftPadding == 4 and header.layoutIndex < lowestHeaderIndex then | |
lowestHeaderIndex = header.layoutIndex | |
layoutIndex = lowestHeaderIndex - 1 + 0.001 | |
end | |
end | |
end | |
if not headerButton then | |
headerButton = CreateFrame("BUTTON", nil, QuestMapFrame.QuestsFrame.Contents, "QuestLogHeaderTemplate") | |
headerButton:SetScript("OnClick", HeaderButton_OnClick) | |
headerButton:SetText(TRACKER_HEADER_WORLD_QUESTS) | |
headerButton:SetHitRectInsets(0, -headerButton.ButtonText:GetWidth(), 0, 0) | |
headerButton:SetHighlightTexture("Interface\\Buttons\\UI-PlusButton-Hilight") | |
end | |
headerButton:SetNormalAtlas(questsCollapsed and "Campaign_HeaderIcon_Closed" or "Campaign_HeaderIcon_Open" ); | |
headerButton:SetPushedAtlas(questsCollapsed and "Campaign_HeaderIcon_ClosedPressed" or "Campaign_HeaderIcon_OpenPressed"); | |
headerButton:ClearAllPoints() | |
if storyButton then | |
headerButton:SetPoint("TOPLEFT", storyButton, "BOTTOMLEFT", 0, 0) | |
else | |
headerButton:SetPoint("TOPLEFT", 1, -6) | |
end | |
headerButton.layoutIndex = layoutIndex | |
layoutIndex = layoutIndex + 0.001 | |
headerButton:Show() | |
prevButton = headerButton | |
local displayedQuestIDs = {} | |
local usedButtons = {} | |
local filtersOwnRow = false | |
if questsCollapsed then | |
for i = 1, #filterButtons do filterButtons[i]:Hide() end | |
else | |
local hasFilters = Config:HasFilters() | |
local selectedFilters = Config:GetFilterTable() | |
local enabledCount = 0 | |
for i=#Mod.FiltersOrder, 1, -1 do | |
if not Config:GetFilterDisabled(Mod.FiltersOrder[i]) then enabledCount = enabledCount + 1 end | |
end | |
local prevFilter | |
for j=1, #Mod.FiltersOrder, 1 do | |
local i = j | |
if not filtersOwnRow then i = #Mod.FiltersOrder - i + 1 end | |
local filterButton = GetFilterButton(Mod.FiltersOrder[i]) | |
filterButton:SetFrameLevel(50 + i) | |
if Config:GetFilterDisabled(Mod.FiltersOrder[i]) then | |
filterButton:Hide() | |
else | |
filterButton:Show() | |
filterButton:ClearAllPoints() | |
if prevFilter then | |
filterButton:SetPoint("RIGHT", prevFilter, "LEFT", 5, 0) | |
filterButton:SetPoint("TOP", prevButton, "TOP", 0, 3) | |
else | |
filterButton:SetPoint("RIGHT", 1, 0) | |
filterButton:SetPoint("TOP", prevButton, "TOP", 0, 3) | |
end | |
if Mod.FiltersOrder[i] ~= "SORT" then | |
if selectedFilters[Mod.FiltersOrder[i]] then | |
filterButton:SetNormalAtlas("worldquest-tracker-ring-selected") | |
else | |
filterButton:SetNormalAtlas("worldquest-tracker-ring") | |
end | |
end | |
prevFilter = filterButton | |
end | |
end | |
local displayMapIDs = GetMapIDsForDisplay(mapID) | |
for _, mID in ipairs(displayMapIDs) do | |
local taskInfo = C_TaskQuest.GetQuestsForPlayerByMapID(mID) | |
if taskInfo then | |
for i, info in ipairs(taskInfo) do -- GetQuestsForPlayerByMapID sometimes return neighbour zone quests | |
if HaveQuestData(info.questId) and QuestUtils_IsQuestWorldQuest(info.questId) and (info.mapID == mID or GetMapContinentMapID(mID) == mID) then | |
if WorldMap_DoesWorldQuestInfoPassFilters(info) then | |
local isFiltered = TaskPOI_IsFiltered(info, mapID) | |
if not isFiltered then | |
local button = QuestFrame_AddQuestButton(info) | |
table.insert(usedButtons, button) | |
end | |
end | |
end | |
end | |
end | |
end | |
table.sort(usedButtons, TaskPOI_Sorter) | |
for i, button in ipairs(usedButtons) do | |
button.layoutIndex = layoutIndex | |
layoutIndex = layoutIndex + 0.001 | |
button:Show() | |
prevButton = button | |
if hoveredQuestID == button.questID then | |
TitleButton_OnEnter(button) | |
end | |
end | |
end | |
if not spacerFrame then | |
spacerFrame = CreateFrame("FRAME", nil, QuestMapFrame.QuestsFrame.Contents) | |
spacerFrame:SetHeight(6) | |
end | |
if #usedButtons > 0 then | |
spacerFrame:Show() | |
spacerFrame.layoutIndex = layoutIndex | |
layoutIndex = layoutIndex + 0.001 | |
else | |
spacerFrame:Hide() | |
end | |
QuestScrollFrame.Contents:Layout() | |
end | |
local function WorldMap_WorldQuestDataProviderMixin_ShouldShowQuest(self, info) | |
if self:IsQuestSuppressed(info.questId) then | |
return false; | |
end | |
if self.focusedQuestID then | |
return C_QuestLog.IsQuestCalling(self.focusedQuestID) and self:ShouldHighlightInfo(info.questId); | |
end | |
local mapID = self:GetMap():GetMapID() | |
if Config.showHoveredPOI and hoveredQuestID == info.questId then | |
return true | |
end | |
if Config.hideFilteredPOI then | |
if TaskPOI_IsFiltered(info, mapID) then | |
return false | |
end | |
end | |
if Config.hideUntrackedPOI then | |
if not (WorldMap_IsWorldQuestEffectivelyTracked(info.questId)) then | |
return false | |
end | |
end | |
local mapInfo = C_Map.GetMapInfo(mapID) | |
if Config.showContinentPOI and mapInfo.mapType == Enum.UIMapType.Continent then | |
return mapID == info.mapID or (GetMapContinentMapID(info.mapID) == mapID) | |
else | |
return mapID == info.mapID | |
end | |
end | |
function Mod:AddFilter(key, name, icon, default) | |
local filter = { | |
key = key, | |
name = name, | |
icon = "Interface\\Icons\\"..icon, | |
default = default, | |
index = #self.FiltersOrder+1, | |
} | |
self.Filters[key] = filter | |
table.insert(self.FiltersOrder, key) | |
return filter | |
end | |
function Mod:AddCurrencyFilter(key, currencyID, default) | |
local currencyInfo = C_CurrencyInfo.GetCurrencyInfo(currencyID) | |
local name = currencyInfo.name | |
local icon = currencyInfo.iconFileID | |
local filter = { | |
key = key, | |
name = name, | |
icon = icon, | |
default = default, | |
index = #self.FiltersOrder+1, | |
preset = FILTER_CURRENCY, | |
currencyID = currencyID, | |
} | |
self.Filters[key] = filter | |
table.insert(self.FiltersOrder, key) | |
return filter | |
end | |
function Mod:BeforeStartup() | |
MyDropDown_Init() | |
self.Filters = {} | |
self.FiltersOrder = {} | |
self:AddFilter("EMISSARY", BOUNTY_BOARD_LOCKED_TITLE, "achievement_reputation_01", true) | |
self:AddFilter("TIME", CLOSES_IN, "ability_bossmagistrix_timewarp2") | |
self:AddFilter("ZONE", Addon.Locale.CURRENT_ZONE, "inv_misc_map02") -- ZONE | |
self:AddFilter("TRACKED", TRACKING, "icon_treasuremap") | |
self:AddFilter("FACTION", FACTION, "achievement_reputation_06") | |
-- self:AddFilter("ARTIFACT_POWER", ARTIFACT_POWER, "inv_7xp_inscription_talenttome01", true) | |
self:AddFilter("ANIMA", ANIMA, "spell_animabastion_orb", true) | |
self:AddFilter("CONDUIT", "Conduits", "sha_ability_mage_firestarter_nightborne", true) | |
self:AddFilter("LOOT", BONUS_ROLL_REWARD_ITEM, "inv_misc_lockboxghostiron", true) | |
-- self:AddCurrencyFilter("ORDER_RESOURCES", CURRENCYID_RESOURCES, true) | |
-- self:AddCurrencyFilter("WAR_SUPPLIES", CURRENCYID_WAR_SUPPLIES) | |
-- self:AddCurrencyFilter("NETHERSHARD", CURRENCYID_NETHERSHARD) | |
-- self:AddCurrencyFilter("VEILED_ARGUNITE", CURRENCYID_VEILED_ARGUNITE) | |
-- self:AddCurrencyFilter("WAKENING_ESSENCE", CURRENCYID_WAKENING_ESSENCE) | |
--self:AddCurrencyFilter("AZERITE", CURRENCYID_AZERITE) | |
--self:AddCurrencyFilter("WAR_RESOURCES", CURRENCYID_WAR_RESOURCES) | |
self:AddFilter("GOLD", BONUS_ROLL_REWARD_MONEY, "inv_misc_coin_01") | |
self:AddFilter("ITEMS", ITEMS, "inv_box_01", true) | |
-- self:AddFilter("PVP", PVP, "pvpcurrency-honor-horde") | |
self:AddFilter("PROFESSION", TRADE_SKILLS, "inv_misc_note_01") | |
self:AddFilter("PETBATTLE", SHOW_PET_BATTLES_ON_MAP_TEXT, "tracking_wildpet") | |
self:AddFilter("RARE", ITEM_QUALITY3_DESC, "achievement_general_stayclassy") | |
self:AddFilter("DUNGEON", GROUP_FINDER, "inv_misc_summonable_boss_token") | |
self:AddFilter("SORT", RAID_FRAME_SORT_LABEL, "inv_misc_map_01") | |
-- if UnitFactionGroup("player") == "Alliance" then self.Filters.PVP.icon = "Interface\\Icons\\pvpcurrency-honor-alliance" end | |
self.Filters.TIME.values = { 1, 3, 6, 12, 24 } | |
end | |
function Mod:Blizzard_WorldMap() | |
for dp,_ in pairs(WorldMapFrame.dataProviders) do | |
if dp.AddWorldQuest and dp.AddWorldQuest == WorldMap_WorldQuestDataProviderMixin.AddWorldQuest then | |
dataProvder = dp | |
dataProvder.ShouldShowQuest = WorldMap_WorldQuestDataProviderMixin_ShouldShowQuest | |
end | |
end | |
for _,of in ipairs(WorldMapFrame.overlayFrames) do | |
if of.OnLoad and of.OnLoad == WorldMapTrackingOptionsButtonMixin.OnLoad then | |
hooksecurefunc(of, "OnSelection", QuestMapFrame_UpdateAll) | |
end | |
end | |
end | |
--[[ | |
local function OverrideLayoutManager() | |
if Config.showAtTop then | |
QuestMapFrame.layoutIndexManager.startingLayoutIndexes["Other"] = QUEST_LOG_STORY_LAYOUT_INDEX + 500 + 1 | |
QuestMapFrame.layoutIndexManager:AddManagedLayoutIndex("AWQ", QUEST_LOG_STORY_LAYOUT_INDEX + 1) | |
else | |
QuestMapFrame.layoutIndexManager.startingLayoutIndexes["Other"] = QUEST_LOG_STORY_LAYOUT_INDEX + 1 | |
QuestMapFrame.layoutIndexManager:AddManagedLayoutIndex("AWQ", QUEST_LOG_STORY_LAYOUT_INDEX + 500 + 1) | |
end | |
end | |
]] | |
function Mod:Startup() | |
Config = Addon.Config | |
if UnitFactionGroup("player") == "Alliance" then | |
FACTION_ORDER = FACTION_ORDER_ALLIANCE | |
else | |
FACTION_ORDER = FACTION_ORDER_HORDE | |
end | |
self:RegisterAddOnLoaded("Blizzard_WorldMap") | |
titleFramePool = CreateFramePool("BUTTON", QuestMapFrame.QuestsFrame.Contents, "QuestLogTitleTemplate") | |
hooksecurefunc("QuestLogQuests_Update", QuestFrame_Update) | |
Config:RegisterCallback('showAtTop', function() | |
QuestMapFrame_UpdateAll() | |
end) | |
Config:RegisterCallback({'hideUntrackedPOI', 'hideFilteredPOI', 'showContinentPOI', 'onlyCurrentZone', 'sortMethod', 'selectedFilters', 'disabledFilters', 'filterEmissary', 'filterLoot', 'filterFaction', 'filterZone', 'filterTime', 'lootFilterUpgrades', 'lootUpgradesLevel', 'timeFilterDuration'}, function() | |
QuestMapFrame_UpdateAll() | |
dataProvder:RefreshAllData() | |
end) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment