diff --git a/Altoholic-Addon/Altoholic/Altoholic.toc b/Altoholic-Addon/Altoholic/Altoholic.toc index dff5f4b..3af2c11 100644 --- a/Altoholic-Addon/Altoholic/Altoholic.toc +++ b/Altoholic-Addon/Altoholic/Altoholic.toc @@ -67,4 +67,6 @@ Frames\Recipes.xml Frames\Quests.xml Frames\Skills.xml Frames\Search.xml -Frames\Talents.xml \ No newline at end of file +Frames\Talents.xml + +Frames\Keys.xml \ No newline at end of file diff --git a/Altoholic-Addon/Altoholic/Frames/Keys.lua b/Altoholic-Addon/Altoholic/Frames/Keys.lua new file mode 100644 index 0000000..89e439c --- /dev/null +++ b/Altoholic-Addon/Altoholic/Frames/Keys.lua @@ -0,0 +1,701 @@ +local addonName = ... +local addon = _G[addonName] + +local L = LibStub("AceLocale-3.0"):GetLocale(addonName) +-- local BF = LibStub("LibBabble-Faction-3.0"):GetLookupTable() +local BZ = LibStub("LibBabble-Zone-3.0"):GetLookupTable() +local BB = LibStub("LibBabble-Boss-3.0"):GetLookupTable() + +local print = function(...) DEFAULT_CHAT_FRAME:AddMessage("\124cff00ccff{".. tostring(addonName) .. "-Keys}:\124r " .. strjoin("; ", tostringall(...))) end + +local isViewValid +local collapsedHeaders + +local ICON_DISABLED = "\124TInterface\\RaidFrame\\ReadyCheck-NotReady:14\124t" +local ICON_ENABLED = "\124TInterface\\RaidFrame\\ReadyCheck-Ready:14\124t" + +-- colors +local WHITE = "|cFFFFFFFF" +local RED = "|cFFFF0000" +local GREEN = "|cFF00FF00" +local TEAL = "|cFF00FF9A" +local DARKYELLOW = "|cffffd100" + +local VertexColors = { + ["GRAY"] = { r = 0.3, g = 0.3, b = 0.3 }, + ["ORANGE"] = { r = 0.6, g = 0.4, b = 0.13 }, + ["WHITE"] = { r = 1.0, g = 1.0, b = 1.0 }, + { r = 0.4, g = 0.13, b = 0.13 }, -- hated + { r = 0.5, g = 0.0, b = 0.0 }, -- hostile + { r = 0.6, g = 0.4, b = 0.13 }, -- unfriendly + { r = 0.6, g = 0.6, b = 0.0 }, -- neutral + { r = 0.0, g = 0.6, b = 0.0 }, -- friendly + { r = 0.0, g = 0.6, b = 0.4 }, -- honored + { r = 0.0, g = 0.6, b = 0.6 }, -- revered + { r = 1.0, g = 1.0, b = 1.0 }, -- exalted +} + +local currentFactionGroup = (UnitFactionGroup("player") == "Alliance") and 1 or 2 -- default to alliance or horde + + + +-- local function FormatQuestType(tag, size) + -- if questSizeColors[size] then + -- return format("%s%s%s (%d)", WHITE, tag, questSizeColors[size], size) + -- else + -- return format("%s%s", WHITE, tag) + -- end +-- end + +addon.Keys = {} + +local QuestNames = { + [838] = "Scholomance", + [964] = "Skeletal Fragments", + [5092] = "Clear the Way", + [5096] = "Scarlet Diversions", + [5097] = "All Along the Watchtowers", + [5098] = "All Along the Watchtowers", + [5505] = "The Key to Scholomance", + [5511] = "The Key to Scholomance", + [5514] = "Mold Rhymes With...", + [5533] = "Scholomance", + [5537] = "Skeletal Fragments", + [5538] = "Mold Rhymes With...", + [5801] = "Fire Plume Forged", + [5802] = "Fire Plume Forged", + [5803] = "Araj's Scarab", + [5804] = "Araj's Scarab", + [7487] = "Attunement to the Core", + [7761] = "Blackhand's Command", + [7848] = "Attunement to the Core", + + [9824] = "Arcane Disturbances", + [9825] = "Restless Activity", + [9826] = "Contact from Dalaran", + [9829] = "Khadgar", + [9831] = "Entry Into Karazhan", + [9832] = "The Second and Third Fragments", + [9836] = "The Master's Touch", + [9837] = "Return to Khadgar", + + [10754] = "Entry Into the Citadel", + [10755] = "Entry Into the Citadel", + [10756] = "Grand Master Rohok", + [10757] = "Rohok's Request", + [10758] = "Hotter than Hell", + [10762] = "Grand Master Dumphry", + [10763] = "Dumphry's Request", + [10764] = "Hotter than Hell", + + [10263] = "Assisting the Consortium (Aldor)", + [10264] = "Assisting the Consortium (Scryers)", + [10265] = "Consortium Crystal Collection", + [10262] = "A Heap of Ethereals", + [10205] = "Warp-Raider Nesaad", + [10266] = "Request for Assistance", + [10267] = "Rightful Repossession", + [10268] = "An Audience with the Prince", + [10269] = "Triangulation Point One", + [10275] = "Triangulation Point Two", + [10276] = "Full Triangle", + [10280] = "Special Delivery to Shattrath City", + [10704] = "How to Break Into the Arcatraz", + + [10279] = "To The Master's Lair", + [10277] = "The Caverns of Time", + [10282] = "Old Hillsbrad", + [10283] = "Taretha's Diversion", + [10284] = "Escape from Durnholde", + [10285] = "Return to Andormu", + + [11481] = "Crisis at the Sunwell", + [11488] = "Magisters' Terrace", + [11490] = "The Scryer's Scryer", + [11492] = "Hard to Kill", + + [13604] = "Archivum Data Disc (10)", + [13607] = "The Celestial Planetarium (10)", + [13606] = "Freya's Sigil (10)", + [13609] = "Hodir's Sigil (10)", + [13610] = "Thorim's Sigil (10)", + [13611] = "Mimiron's Sigil (10)", + [13614] = "Algalon (10)", + + [13817] = "Archivum Data Disc (25)", + [13816] = "The Celestial Planetarium (25)", + [13821] = "Freya's Sigil (25)", + [13822] = "Hodir's Sigil (25)", + [13823] = "Thorim's Sigil (25)", + [13824] = "Mimiron's Sigil (25)", + [13818] = "Algalon (25)", +} + +local ItemNames = { + [6893] = "Workshop Key", + [7146] = "The Scarlet Key", + [11000] = "Shadowforge Key", + [12382] = "Key to the City", + [13704] = "Skeleton Key", + [18249] = "Crescent Key", + + [24490] = "The Master's Key", + [27991] = "Shadow Labyrinth Key", + [30622] = "Flamewrought Key", + [30623] = "Reservoir Key", + [30633] = "Auchenai Key", + [30634] = "Warpforged Key", + [30635] = "Key of Time", + [30637] = "Flamewrought Key", + [31084] = "Key to the Arcatraz", + + [44581] = "Heroic Key to the Focusing Iris", + [44582] = "Key to the Focusing Iris", + [45796] = "Celestial Planetarium Key", + [45798] = "Heroic Celestial Planetarium Key", +} + +local KeyList = { + -- https://wowpedia.fandom.com/wiki/Instance_attunement_(Classic) + { -- #################### + name = "Classic", + isHeader = true, + }, + + { + name = BZ["Scarlet Monastery"], + notes = L["KEY_NOTE_ScarletMonastery"], + aquisition = {type="item", item=7146 }, + icon = "inv_misc_key_01", + lockpick = 175 + }, -- The Scarlet Key + { + name = BZ["Gnomeregan"], + notes = L["KEY_NOTE_Gnomeregan"], + aquisition = {type="item", item=6893 }, + icon = "inv_misc_key_06", + lockpick = 150 + }, -- Workshop Key + -- { + -- name = BZ["Sunken Temple"], + -- notes = L["KEY_NOTE_SunkenTemple"], + -- aquisition = {type="questitem", quest={3520, 3527, 4787, 3528}, item=10818 }, + -- icon = "inv_scroll_02" + -- }, -- Yeh'kinya's Scroll + { + name = BZ["Blackrock Depths"], + notes = L["KEY_NOTE_BlackrockDepths"], + aquisition = {type="item", item=11000 }, + icon = "inv_misc_key_08", + lockpick = 250 + }, -- Shadowforge Key + { + name = BZ["Dire Maul"], + notes = L["KEY_NOTE_DireMaul"], + aquisition = {type="item", item=18249 }, + icon = "inv_misc_key_10", + lockpick = 300 + }, -- Crescent Key + { + name = BZ["Scholomance"], + faction=true, + notes = {L["KEY_NOTE_Scholomance_A"], L["KEY_NOTE_Scholomance_H"]}, + -- notesA = L["KEY_NOTE_Scholomance_A"], + -- notesH = L["KEY_NOTE_Scholomance_H"], + aquisition = { + type="questitem", + faction=true, + quest={ {5092, 5097, 5533, 5537, 5538, 5801, 5803, 5505}, {5096, 5098, 838, 964, 5514, 5802, 5804, 5511} }, + -- questA={5092, 5097, 5533, 5537, 5538, 5801, 5803, 5505}, + -- questH={5096, 5098, 838, 964, 5514, 5802, 5804, 5511}, + item={13704,13704} + -- itemA=13704, + -- itemH=13704 + }, + icon = "inv_misc_key_11", + lockpick = 280 + }, -- Skeleton Key + { + name = BZ["Stratholme"], + notes = L["KEY_NOTE_Stratholme"], + aquisition = {type="item", item=12382 }, + icon = "inv_misc_key_13", + lockpick = 300 + }, -- Key to the City + -- { name = BZ["Upper Blackrock Spire"], icon = "achievement_boss_generaldrakkisath" }, -- Seal of Ascension + { + name = BZ["Molten Core"], + notes = L["KEY_NOTE_MoltenCore"], + aquisition = { + type="quest", + faction=true, + quest={ {7848},{7487} } + }, + icon = "inv_misc_gem_opal_01" + }, -- Attunement to the Core + { + name = BZ["Blackwing Lair"], + notes = L["KEY_NOTE_BlackwingLair"], + aquisition = { type="quest", quest={7761} }, + icon = "inv_letter_17" + }, -- Drakkisath's Brand + + -- https://wowpedia.fandom.com/wiki/Instance_attunement_(Burning_Crusade) + { -- #################### + name = "The Burning Crusade", + isHeader = true, + }, + + { + name = BZ["Karazhan"], + notes = L["KEY_NOTE_Karazhan"], + aquisition = { + type="questitem", + quest={9824,9825,9826,9829,9831,9832,9836,9837}, + item=24490 + }, + icon = "inv_misc_key_07", + lockpick = 350 + }, -- The Master's Key + { + name = BZ["The Shattered Halls"], + notes = L["KEY_NOTE_TheShatteredHalls"], + aquisition = { + type="questitem", + faction=true, + quest={ {10754, 10762, 10763, 10764}, {10755, 10756, 10757, 10758} }, + -- questA={10754, 10762, 10763, 10764}, + -- questH={10755, 10756, 10757, 10758}, + item={28395,28395} + -- itemA=28395, + -- itemH=28395 + }, + icon = "inv_misc_key_02", + lockpick = 350 + }, -- Shattered Halls Key + { + name = BZ["Shadow Labyrinth"], + notes = L["KEY_NOTE_ShadowLabyrinth"], + aquisition = { type="item", item=27991 }, + icon = "inv_misc_key_02", + lockpick = 350 + }, -- Shadow Labyrinth Key + { + name = BZ["The Arcatraz"], + notes = L["KEY_NOTE_TheArcatraz"], + aquisition = { + type="questitem", + quest={10263,10264,10265,10262,10205,10266,10267,10268,10269,10275,10276,10280,10704}, + item=31084 + }, + icon = "inv_datacrystal03", + lockpick = 350 + }, -- Key to the Arcatraz + + { + name = BZ["Old Hillsbrad Foothills"], + notes = L["KEY_NOTE_OldHillsbradFoothills"], + aquisition = { type="quest", quest={10279,10277} }, + icon = "achievement_zone_hillsbradfoothills" + }, -- quest=10277 Die Höhlen der Zeit + { + name = BZ["The Black Morass"], + notes = L["KEY_NOTE_TheBlackMorass"], + aquisition = { type="quest", quest={10282,10283,10284,10285} }, + icon = "achievement_zone_dustwallowmarsh" + }, -- quest=10285 Rückkehr zu Andormu + + { + name = "Heroic: "..BZ["Hellfire Citadel"], + -- notes = L["KEY_NOTE_HellfireCitadel"], + aquisition = { + type="item", + faction=true, + item={30622,30637} + }, + icon = "inv_misc_key_13" + }, -- Flamewrought Key + { + name = "Heroic: "..BZ["Coilfang Reservoir"], + -- notes = L["KEY_NOTE_CoilfangReservoir"], + aquisition = { type="item", item=30623 }, + icon = "inv_misc_key_13" + }, -- Reservoir Key + { + name = "Heroic: "..BZ["Auchindoun"], + -- notes = L["KEY_NOTE_Auchindoun"], + aquisition = { type="item", item=30633 }, + icon = "inv_misc_key_11" + }, -- Auchenai Key + { + name = "Heroic: "..BZ["Tempest Keep"], + -- notes = L["KEY_NOTE_TempestKeep"], + aquisition = { type="item", item=30634 }, + icon = "inv_misc_key_09" + }, -- Warpforged Key + { + name = "Heroic: "..BZ["Caverns of Time"], + -- notes = L["KEY_NOTE_CavernsofTime"], + aquisition = { type="item", item=30635 }, + icon = "inv_misc_key_04" + }, -- Key of Time + + { + name = "Heroic: "..BZ["Magisters' Terrace"], + notes = L["KEY_NOTE_MagistersTerrace"], + aquisition = { type="quest", quest={11488,11490,11492} }, + icon = "ability_warrior_innerrage" + }, -- quest=11492 Nicht totzukriegen + + { -- #################### + name = "Wrath of the Lich King", + isHeader = true, + }, + + { + name = BB["Malygos"].." (10)", + notes = L["KEY_NOTE_Malygos_10"], + aquisition = {type="item", item=44582 }, + icon = "spell_holy_mindsooth" + }, -- item=44582 Malygos 10 + { + name = BB["Malygos"].." (25)", + notes = L["KEY_NOTE_Malygos_25"], + aquisition = {type="item", item=44581 }, + icon = "spell_holy_mindsooth" + }, -- item=44581 Malygos 25 + + { + name = BB["Algalon the Observer"].." (10)", + notes = L["KEY_NOTE_AlgalontheObserver_10"], + aquisition = { + type="questitem", + quest={13604,13607,13606,13609,13610,13611,13614}, + item=45796 + }, + icon = "inv_misc_key_15" + }, -- item=45796 Algalon 10 + { + name = BB["Algalon the Observer"].." (25)", + notes = L["KEY_NOTE_AlgalontheObserver_25"], + aquisition = { + type="questitem", + quest={13817,13816,13821,13822,13823,13824,13818}, + item=45798 + }, + icon = "inv_misc_key_15" + }, -- item=45798 Algalon 25 +} + +local setStringColorPrefix = function(txt, color) + return tostring(color) .. txt .. "|r" +end + +local ns = addon.Keys -- ns = namespace + +function ns:Update() + print("Update") + -- local character = addon.Tabs.Characters:GetCurrent() + + + local VisibleLines = 8 + local NumLines = VisibleLines + local frame = "AltoholicFrameKeys" + local entry = frame.."Entry" + + local DS = DataStore + local realm, account = addon:GetCurrentRealm() + local character + + -- if DS:GetQuestLogSize(character) == 0 then + -- AltoholicTabCharactersStatus:SetText(L["No quest found for "] .. addon:GetCurrentCharacter()) + -- addon:ClearScrollFrame( _G[ frame.."ScrollFrame" ], entry, VisibleLines, 18) + -- return + -- end + AltoholicTabCharactersStatus:SetText("") + + local offset = FauxScrollFrame_GetOffset( _G[ frame.."ScrollFrame" ] ); + local DisplayedCount = 0 + local VisibleCount = 0 + local DrawGroup + + collapsedHeaders = collapsedHeaders or {} + if not isViewValid then + wipe(collapsedHeaders) + isViewValid = true + end + + local i=1 + print("offset",offset) + + -- for line = 1, DS:GetQuestLogSize(character) do + for line, keyEntry in pairs(KeyList) do + -- local isHeader, quest, questTag, groupSize, money, isComplete = DS:GetQuestLogInfo(character, line) + local isHeader = not(keyEntry.aquisition) + -- local name = keyEntry.name or "" + local name = tostring(line).." ".. (keyEntry.name or "") -- DEBUG + local icon = keyEntry.icon or "inv_misc_questionmark" + local aquisition = keyEntry.aquisition + print("--", + "line",line, + "name",name, + "offset",offset, + "VisibleCount",VisibleCount, + "isHeader",isHeader) + + if (offset > 0) or (DisplayedCount >= VisibleLines) then -- if the line will not be visible + if isHeader then -- then keep track of counters + + if not collapsedHeaders[line] then + DrawGroup = true + else + DrawGroup = false + end + VisibleCount = VisibleCount + 1 + offset = offset - 1 -- no further control, nevermind if it goes negative + elseif DrawGroup then + VisibleCount = VisibleCount + 1 + offset = offset - 1 -- no further control, nevermind if it goes negative + end + else -- line will be displayed + if isHeader then + do -- DEBUG - remove later + if not collapsedHeaders[line] then + _G[ entry..i.."Collapse" ]:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up"); + DrawGroup = true + else + _G[ entry..i.."Collapse" ]:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up"); + DrawGroup = false + end + _G[entry..i.."Collapse"]:Show() + + -- _G[entry..i.."Name"]:SetText( setStringColorPrefix(name, DARKYELLOW) ) + _G[entry..i.."EntryLinkText"]:SetText( setStringColorPrefix(name, TEAL) ) + -- _G[entry..i.."EntryLink"]:SetJustifyH("LEFT") + -- _G[entry..i.."EntryLink"]:SetPoint("TOPLEFT", 25, 0) + + -- print(entry..i.."EntryLink") + _G[entry..i.."EntryLink"]:SetID(0) + _G[entry..i.."EntryLink"]:SetPoint("TOPLEFT", 25, 0) + + + _G[ entry..i ]:SetID(line) + _G[ entry..i ]:Show() + + for j = 1, 10 do -- loop through the 10 alts + local itemName = entry.. i .. "Item" .. j; + local itemButton = _G[itemName] + itemButton:Hide() + end + + i = i + 1 + VisibleCount = VisibleCount + 1 + DisplayedCount = DisplayedCount + 1 + end + elseif DrawGroup then + _G[entry..i.."Collapse"]:Hide() + + -- local _, _, level = DS:GetQuestInfo(quest) + -- quick fix, level may be nil, I suspect that due to certain locales, the quest link may require different parsing. + -- level = level or 0 + + _G[entry..i.."EntryLinkText"]:SetText( name ) + -- _G[entry..i.."Name"]:SetPoint("TOPLEFT", 15, 0) + _G[entry..i.."EntryLink"]:SetID(line) + _G[entry..i.."EntryLink"]:SetPoint("TOPLEFT", 10, 0) + + + for j = 1, 10 do -- loop through the 10 alts + local itemName = entry.. i .. "Item" .. j; + local itemButton = _G[itemName] + local classButton = _G["AltoholicFrameClassesItem" .. j] + + local itemTexture = _G[itemName .. "_Background"] + itemTexture:SetTexture("Interface\\Icons\\"..icon) + + local status, charFaction, itemBags, itemBank, searchedID, questList, questHistory, progress + + if classButton.CharName then -- if there's an alt in this column.. + itemButton.CharName = classButton.CharName + + -- if character then wipe(character) end + if questList then wipe(questList) end + if questHistory then wipe(questHistory) end + character = DS:GetCharacter(classButton.CharName, realm, account) + charFaction = (DS:GetCharacterFaction(character) == "Alliance") and 1 or 2 + questHistory = DS:GetQuestHistory(character) or {} + progress = 0 + status = false + + if aquisition.type == "item" then + if aquisition.faction then + searchedID = aquisition.item[charFaction] + else + searchedID = aquisition.item + end + itemBags, itemBank = DataStore:GetContainerItemCount(character, searchedID) + status = (itemBags + itemBank) > 0 + elseif aquisition.type == "quest" then + if aquisition.faction then + questList = aquisition.quest[charFaction] + else + questList = aquisition.quest + end + if questHistory[questList[#questList]] then -- if the last quest is done, then we are active + status = true + else -- else: we calculate the quest progress + progress = 0 + for _,questID in pairs(questList) do + if questHistory[questID] then progress=progress+1 end + end + progress = progress / #questList + end + + elseif aquisition.type == "questitem" then + if aquisition.faction then + searchedID = aquisition.item[charFaction] + questList = aquisition.quest[charFaction] + else + searchedID = aquisition.item + questList = aquisition.quest + end + itemBags, itemBank = DataStore:GetContainerItemCount(character, searchedID) + status = (itemBags + itemBank) > 0 + + if not(status) then + if questHistory[questList[#questList]] then -- if the last quest is done, then we are active + status = true + else -- else: we calculate the quest progress + progress = 0 + for _,questID in pairs(questList) do + if questHistory[questID] then progress=progress+1 end + end + progress = progress / #questList + end + end + end + + local vc, text + if status then + vc = VertexColors["WHITE"] + itemTexture:SetVertexColor(vc.r, vc.g, vc.b); + + _G[itemName .. "Name"]:SetPoint("BOTTOMRIGHT", 5, 0) + + _G[itemName .. "Name"]:SetText( ICON_ENABLED ) + elseif progress > 0 then + vc = VertexColors["ORANGE"] + itemTexture:SetVertexColor(vc.r, vc.g, vc.b); + + _G[itemName .. "Name"]:SetPoint("BOTTOMRIGHT", -5, 0) + + text = format("%2d", floor(progress*100+0.5)) .. "%" + _G[itemName .. "Name"]:SetText( text ) + + else + vc = VertexColors["GRAY"] + itemTexture:SetVertexColor(vc.r, vc.g, vc.b); + + _G[itemName .. "Name"]:SetPoint("BOTTOMRIGHT", 5, 0) + + _G[itemName .. "Name"]:SetText( ICON_DISABLED ) + -- itemButton.CharName = nil + end + itemButton:Show() + else + itemButton:Hide() + end + end + + _G[ entry..i ]:SetID(line) + _G[ entry..i ]:Show() + i = i + 1 + VisibleCount = VisibleCount + 1 + DisplayedCount = DisplayedCount + 1 + end + end + end + + while i <= VisibleLines do + _G[ entry..i ]:SetID(0) + _G[ entry..i ]:Hide() + i = i + 1 + end + + FauxScrollFrame_Update( _G[ frame.."ScrollFrame" ], VisibleCount, VisibleLines, 41); +end + +function ns:InvalidateView() + print("InvalidateView") + isViewValid = nil +end + + +function ns:Collapse_OnClick(frame, button) + print("Collapse_OnClick(frame, button)") + if true then return end + + local id = frame:GetParent():GetID() + if id ~= 0 then + collapsedHeaders[id] = not collapsedHeaders[id] + ns:Update() + end +end + +function ns:Item_OnEnter(frame) + print("Item_OnEnter(frame)") + if true then return end +end + +function ns:Link_OnEnter(frame) + print("Link_OnEnter(frame)") + if true then return end + + local id = frame:GetID() + if id == 0 then return end + + local DS = DataStore + local character = addon.Tabs.Characters:GetCurrent() + local _, link = DS:GetQuestLogInfo(character, id) + if not link then return end + + local questName, questID, level = DS:GetQuestInfo(link) + if IsAddOnLoaded("Odyssey") and IsAddOnLoaded("OdysseyQuests") then + Odyssey:ShowQuestTooltip(frame, questID) + return + end + + GameTooltip:ClearLines(); + GameTooltip:SetOwner(frame, "ANCHOR_RIGHT"); + GameTooltip:SetHyperlink(link); + GameTooltip:AddLine(" ",1,1,1); + + GameTooltip:AddDoubleLine(LEVEL .. ": |cFF00FF9A" .. level, L["QuestID"] .. ": |cFF00FF9A" .. questID); + + local player = addon:GetCurrentCharacter() + addon.Quests:ListCharsOnQuest(questName, player, GameTooltip) + GameTooltip:Show(); +end + +function ns:Item_OnClick(frame, button) + print("Item_OnClick(frame, button)") + if true then return end +end +function ns:Link_OnClick(frame, button) + print("Link_OnClick(frame, button)") + if true then return end + + if button == "LeftButton" and IsShiftKeyDown() then + local chat = ChatEdit_GetLastActiveWindow() + if chat:IsShown() then + local id = frame:GetID() + if id == 0 then return end + + local character = addon.Tabs.Characters:GetCurrent() + local _, link = DataStore:GetQuestLogInfo(character, id) + if link then + chat:Insert(link) + end + end + end +end diff --git a/Altoholic-Addon/Altoholic/Frames/Keys.xml b/Altoholic-Addon/Altoholic/Frames/Keys.xml new file mode 100644 index 0000000..59531e4 --- /dev/null +++ b/Altoholic-Addon/Altoholic/Frames/Keys.xml @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FauxScrollFrame_OnVerticalScroll(self, offset, 41, Altoholic.Keys.Update) + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Altoholic-Addon/Altoholic/Frames/TabCharacters.lua b/Altoholic-Addon/Altoholic/Frames/TabCharacters.lua index 3c4fc5f..83bf46a 100644 --- a/Altoholic-Addon/Altoholic/Frames/TabCharacters.lua +++ b/Altoholic-Addon/Altoholic/Frames/TabCharacters.lua @@ -22,17 +22,21 @@ local VIEW_MOUNTS = 8 local VIEW_REP = 9 local VIEW_EQUIP = 10 local VIEW_TOKENS = 11 +local VIEW_KEYS = 12 local ICON_VIEW_BAGS = "Interface\\Buttons\\Button-Backpack-Up" -local ICON_VIEW_MAILS = "Interface\\Icons\\INV_Misc_Note_01" -local ICON_VIEW_QUESTS = "Interface\\Icons\\INV_Misc_Book_07" +-- local ICON_VIEW_MAILS = "Interface\\Icons\\INV_Misc_Note_01" +local ICON_VIEW_MAILS = "Interface\\Icons\\inv_letter_15" +-- local ICON_VIEW_QUESTS = "Interface\\Icons\\INV_Misc_Book_07" +local ICON_VIEW_QUESTS = "Interface\\Icons\\achievement_quests_completed_06" local ICON_VIEW_AUCTIONS = "Interface\\Icons\\INV_Misc_Coin_01" local ICON_VIEW_BIDS = "Interface\\Icons\\INV_Misc_Coin_03" local ICON_VIEW_COMPANIONS = "Interface\\Icons\\INV_Box_Birdcage_01" local ICON_VIEW_MOUNTS = "Interface\\Icons\\Ability_Mount_RidingHorse" local ICON_VIEW_REP = "Interface\\Icons\\INV_BannerPVP_02" local ICON_VIEW_EQUIP = "Interface\\Icons\\INV_Chest_Plate04" -local ICON_VIEW_KEY = "Interface\\Icons\\inv_misc_key_11" +-- local ICON_VIEW_KEY = "Interface\\Icons\\inv_misc_key_11" +local ICON_VIEW_KEY = "Interface\\Icons\\spell_nature_moonkey" local ICON_VIEW_TALENTS = "Interface\\Icons\\Spell_Nature_NatureGuardian" local ICON_VIEW_TOKENS = "Interface\\Icons\\Spell_Holy_SummonChampion" @@ -77,6 +81,8 @@ local function HideAll() AltoholicFrameReputations:Hide() AltoholicFrameEquipment:Hide() AltoholicFrameCurrencies:Hide() + AltoholicFrameKeys:Hide() + AltoholicFrameClasses:Hide() end @@ -88,7 +94,8 @@ function ns:OnShow() if AltoholicFrameReputations:IsVisible() or AltoholicFrameEquipment:IsVisible() or AltoholicFrameCurrencies:IsVisible() or - AltoholicFramePetsAllInOne:IsVisible() then + AltoholicFramePetsAllInOne:IsVisible()or + AltoholicFrameKeys:IsVisible() then AltoholicFrameClasses:Show() end @@ -411,6 +418,11 @@ function ns:ShowCharInfo(infoType) AltoholicFrameQuests:Show() addon.Quests:InvalidateView() addon.Quests:Update(); + elseif infoType == VIEW_KEYS then + AltoholicFrameClasses:Show() + AltoholicFrameKeys:Show() + addon.Keys:InvalidateView() + addon.Keys:Update(); elseif infoType == VIEW_AUCTIONS then addon.AuctionHouse:SetListType("Auctions") AltoholicFrameAuctions:Show() diff --git a/Altoholic-Addon/Altoholic/Locales/enUS.lua b/Altoholic-Addon/Altoholic/Locales/enUS.lua index b11be8c..4667e45 100644 --- a/Altoholic-Addon/Altoholic/Locales/enUS.lua +++ b/Altoholic-Addon/Altoholic/Locales/enUS.lua @@ -704,3 +704,30 @@ L["Zelemar the Wrathful"] = true L["Zone"] = true L["Keys"] = true +L["KEY_NOTE_Lockpick"] = "Alternative: |cffff8040Lockpicking %d+|r" + +L["KEY_NOTE_ScarletMonastery"] = "Found in chest in room of |cffff8040Arcanist Doan|r in the Library section of the |cff82c5ffScarlet Monastery|r.\nOpens the Armory and Cathedral sections of the |cff82c5ffScarlet Monastery|r." +L["KEY_NOTE_Gnomeregan"] = "Drops from |cffff8040Electrocutioner 6000|r in |cff82c5ffGnomeregan|r.\nOpens the back door to |cff82c5ffGnomeregan|r, which lets you skip most trash mobs." +L["KEY_NOTE_BlackrockDepths"] = "Quest given by |cffff8040Franclorn Forgewright|r at the center of |cff82c5ffBlackrock Mountain|r, whilst dead.\nOpens shadowforge doors in |cff82c5ffBlackrock Depths|r." +L["KEY_NOTE_DireMaul"] = "Drops from |cffff8040Pusillin|r in |cff82c5ffDire Maul East|r.\nOpens the doors to |cff82c5ffDire Maul North|r and |cff82c5ffWest|r." +L["KEY_NOTE_Scholomance_A"] = "Quest-Series starts at |cffff8040Commander Ashlam Valorfist|r in |cff82c5ffWestern Plaguelands (43,84)|r.\nOpens the door to |cff82c5ffScholomance|r." +L["KEY_NOTE_Scholomance_H"] = "Quest-Series starts at |cffff8040High Executor Derrington|r in |cff82c5ffTirisfal Glades (83,69)|r.\nOpens the door to |cff82c5ffScholomance|r." +L["KEY_NOTE_Stratholme"] = "Drops from |cffff8040Magistrate Barthilas|r in |cff82c5ffStratholme|r.\nOpens the service entrance gate to |cff82c5ffStratholme|r." +L["KEY_NOTE_MoltenCore"] = "Quest given by |cffff8040Lothos Riftwaker|r at the center of |cff82c5ffBlackrock Mountain|r.\nAllows fast entry to |cff82c5ffMolten Core|r." +L["KEY_NOTE_BlackwingLair"] = "Quest starts from an item which drops from |cffff8040Scarshield Quartermaster|r near the entrance to the |cff82c5ffBlackrock Spire|r dungeon.\nAllows fast entry to |cff82c5ffBlackwing Lair|r." +L["KEY_NOTE_HellfireCitadel"] = "Unlocks Heroic Difficulty for |cff82c5ffHellfire Citadel|r dungeons." +L["KEY_NOTE_CoilfangReservoir"] = "Unlocks Heroic Difficulty for |cff82c5ffCoilfang Reservoir|r dungeons." +L["KEY_NOTE_Auchindoun"] = "Unlocks Heroic Difficulty for |cff82c5ffAuchindoun|r dungeons." +L["KEY_NOTE_TempestKeep"] = "Unlocks Heroic Difficulty for |cff82c5ffTempest Keep|r dungeons." +L["KEY_NOTE_CavernsofTime"] = "Unlocks Heroic Difficulty for |cff82c5ffCaverns of Time|r dungeons." +L["KEY_NOTE_Karazhan"] = "Quest-series starts at |cffff8040Archmage Alturus|r in |cff82c5ffDeadwind Pass|r (47,75).\nOpens the door to |cff82c5ffKarazhan|r." +L["KEY_NOTE_TheShatteredHalls"] = "Quest-series starts from an item which drops from |cffff8040Smith Gorlunk|r in |cff82c5ffShadowmoon Valley (68,36)|r.\nOpens the door to |cff82c5ffThe Shattered Halls|r." +L["KEY_NOTE_ShadowLabyrinth"] = "Found in chest in room of |cffff8040Talon King Ikiss|r, the final boss in the |cff82c5ffSethekk Halls|r wing of |cff82c5ffAuchindoun|r.\nOpens the |cff82c5ffShadow Labyrinth|r wing of |cff82c5ffAuchindoun|r." +L["KEY_NOTE_TheArcatraz"] = "Quest-series starts from either |cffff8040Aldor|r or |cffff8040Scryers npc|r in |cff82c5ffNetherstorm (32,64)|r.\nOpens the door to |cff82c5ffThe Arcatraz|r dungeon of |cff82c5ffTempest Keep|r." +L["KEY_NOTE_OldHillsbradFoothills"] = "Quest-series starts at the entrance of the |cff82c5ffCaverns of Time|r in |cff82c5ffTanaris (66,50)|r.\nRequired to enter the first |cff82c5ffCaverns of Time|r dungeon." +L["KEY_NOTE_TheBlackMorass"] = "Quest-series continues at |cffff8040Andormu|r inside the |cff82c5ffCaverns of Time|r in |cff82c5ffTanaris (58,54)|r.\nRequired to enter the second |cff82c5ffCaverns of Time|r dungeon." +L["KEY_NOTE_MagistersTerrace"] = "Quest-series starts at |cffff8040Exarch Larethor|r in |cff82c5ffIsle of Quel'Danas (47,30)|r.\nUnlocks Heroic Difficulty for the |cff82c5ffMagisters' Terrace|r dungeon." +L["KEY_NOTE_Malygos_10"] = "Questitem drops from |cffff8040Sapphiron|r in |cff82c5ffNaxxramas (10)|r.\nSummons |cffff8040Malygos|r in |cff82c5ffThe Eye of Eternity (10)|r." +L["KEY_NOTE_Malygos_25"] = "Questitem drops from |cffff8040Sapphiron|r in |cff82c5ffNaxxramas (25)|r.\nSummons |cffff8040Malygos|r in |cff82c5ffThe Eye of Eternity (10 & 25)|r." +L["KEY_NOTE_AlgalontheObserver_10"] = "Questitem drops from the |cffff8040Assemly of Iron|r in |cff82c5ffUlduar (10)|r in Hard Mode.\nOpens the door to the |cffff8040Algalon encounter|r in |cff82c5ffUlduar (10)|r." +L["KEY_NOTE_AlgalontheObserver_25"] = "Questitem drops from the |cffff8040Assemly Of Iron|r in |cff82c5ffUlduar (25)|r in Hard Mode.\nOpens the door to the |cffff8040Algalon encounter|r in |cff82c5ffUlduar (10 & 25)|r."