first working version

This commit is contained in:
telkar-rg
2023-10-10 15:47:04 +02:00
parent f13ae48730
commit 0cedfdd9d4
5 changed files with 1100 additions and 5 deletions
+3 -1
View File
@@ -67,4 +67,6 @@ Frames\Recipes.xml
Frames\Quests.xml Frames\Quests.xml
Frames\Skills.xml Frames\Skills.xml
Frames\Search.xml Frames\Search.xml
Frames\Talents.xml Frames\Talents.xml
Frames\Keys.xml
+701
View File
@@ -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
+353
View File
@@ -0,0 +1,353 @@
<Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.blizzard.com/wow/ui/">
<Script file="Keys.lua"></Script>
<Button name="AltoKeyItemTemplate" hidden="true" virtual="true">
<Size>
<AbsDimension x="37" y="37"/>
</Size>
<Layers>
<Layer level="BACKGROUND">
<Texture name="$parent_Background">
<Size>
<AbsDimension x="33" y="33"/>
</Size>
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="2" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Color r="0.2" g="0.2" b="0.2" a="1" />
</Texture>
</Layer>
<Layer level="OVERLAY">
<FontString name="$parentName" inherits="GameFontNormalSmall" justifyH="CENTER" >
<Size>
<AbsDimension x="26" y="18"/>
</Size>
<Anchors>
<Anchor point="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Color r="1" g="1" b="1" />
</FontString>
</Layer>
</Layers>
<Scripts>
<OnEnter>
Altoholic.Keys:Item_OnEnter(self)
</OnEnter>
<OnLeave>
AltoTooltip:Hide();
</OnLeave>
<OnClick>
Altoholic.Keys:Item_OnClick(self, button)
</OnClick>
</Scripts>
<Backdrop name="$parentBackdrop" bgFile="Interface\TutorialFrame\TutorialFrameBackground" edgeFile="Interface\Tooltips\UI-Tooltip-Border" tile="true">
<EdgeSize>
<AbsValue val="8"/>
</EdgeSize>
<TileSize>
<AbsValue val="36"/>
</TileSize>
<BackgroundInsets>
<AbsInset left="5" right="5" top="5" bottom="5"/>
</BackgroundInsets>
<Color r="1" g="1" b="1" a="0"/>
</Backdrop>
</Button>
<Button name="AltoKeyEntryTemplate" virtual="true">
<Size>
<AbsDimension x="615" y="38"/>
</Size>
<Layers>
<!-- <Layer level="BACKGROUND">
<FontString name="$parentTag" inherits="GameFontNormalSmall" justifyH="LEFT">
<Size>
<AbsDimension x="70" y="18"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="0"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>-->
<Layer level="BACKGROUND">
<!-- <FontString name="$parentName" inherits="GameFontNormal" justifyH="LEFT" justifyV="MIDDLE">
<Size>
<AbsDimension x="160" y="37"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="0"/>
</Offset>
</Anchor>
</Anchors>
</FontString> -->
</Layer>
</Layers>
<Frames>
<Button name="$parentCollapse" hidden="true">
<Size>
<AbsDimension x="16" y="16"/>
</Size>
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="5" y="-2"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
Altoholic.Keys:Collapse_OnClick(self, button)
</OnClick>
</Scripts>
<NormalTexture name="$parentIcon" file="Interface\Buttons\UI-MinusButton-UP" />
<HighlightTexture file="Interface\Buttons\UI-PlusButton-Hilight" alphaMode="ADD" />
</Button>
<Button name="$parentEntryLink" id="1">
<Size>
<AbsDimension x="160" y="37"/>
</Size>
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="10" y="0"/>
</Offset>
</Anchor>
</Anchors>
<!-- <ButtonText name="$parentNormalText" justifyH="LEFT"> -->
<ButtonText name="$parentText" justifyH="LEFT">
<Size>
<AbsDimension x="160" y="37"/>
</Size>
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
</ButtonText>
<Scripts>
<OnEnter>
Altoholic.Keys:Link_OnEnter(self)
</OnEnter>
<OnLeave>
GameTooltip:Hide();
</OnLeave>
<OnClick>
Altoholic.Keys:Link_OnClick(self, button)
</OnClick>
</Scripts>
<NormalFont style="GameFontNormal"/>
</Button>
<Button name="$parentItem1" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="185" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem2" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem1" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem3" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem2" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem4" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem3" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem5" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem4" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem6" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem5" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem7" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem6" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem8" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem7" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem9" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem8" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentItem10" inherits="AltoKeyItemTemplate">
<Anchors>
<Anchor point="BOTTOMLEFT" relativeTo="$parentItem9" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Button>
</Frames>
</Button>
<Frame name="AltoholicFrameKeys" parent="AltoholicTabCharacters" hidden="true">
<Size>
<AbsDimension x="615" y="306"/>
</Size>
<Anchors>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="39" y="-105"/>
</Offset>
</Anchor>
</Anchors>
<Frames>
<ScrollFrame name="$parentScrollFrame" inherits="FauxScrollFrameTemplate">
<Anchors>
<Anchor point="TOPLEFT" />
<Anchor point="BOTTOMRIGHT" />
</Anchors>
<Layers>
<Layer level="ARTWORK">
<Texture file="Interface\PaperDollInfoFrame\UI-Character-ScrollBar">
<Size>
<AbsDimension x="31" y="256"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="-2" y="5"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0" right="0.484375" top="0" bottom="1.0"/>
</Texture>
<Texture file="Interface\PaperDollInfoFrame\UI-Character-ScrollBar">
<Size>
<AbsDimension x="31" y="106"/>
</Size>
<Anchors>
<Anchor point="BOTTOMLEFT" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="-2" y="0"/>
</Offset>
</Anchor>
</Anchors>
<TexCoords left="0.515625" right="1.0" top="0" bottom="0.4140625"/>
</Texture>
</Layer>
</Layers>
<Scripts>
<OnVerticalScroll>
FauxScrollFrame_OnVerticalScroll(self, offset, 41, Altoholic.Keys.Update)
</OnVerticalScroll>
</Scripts>
</ScrollFrame>
<Button name="$parentEntry1" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentScrollFrame" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="3" y="3"/>
</Offset>
</Anchor>
</Anchors>
</Button>
<Button name="$parentEntry2" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry1" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry3" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry2" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry4" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry3" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry5" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry4" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry6" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry5" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry7" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry6" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
<Button name="$parentEntry8" inherits="AltoKeyEntryTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="$parentEntry7" relativePoint="BOTTOMLEFT" />
</Anchors>
</Button>
</Frames>
</Frame>
</Ui>
@@ -22,17 +22,21 @@ local VIEW_MOUNTS = 8
local VIEW_REP = 9 local VIEW_REP = 9
local VIEW_EQUIP = 10 local VIEW_EQUIP = 10
local VIEW_TOKENS = 11 local VIEW_TOKENS = 11
local VIEW_KEYS = 12
local ICON_VIEW_BAGS = "Interface\\Buttons\\Button-Backpack-Up" local ICON_VIEW_BAGS = "Interface\\Buttons\\Button-Backpack-Up"
local ICON_VIEW_MAILS = "Interface\\Icons\\INV_Misc_Note_01" -- 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_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_AUCTIONS = "Interface\\Icons\\INV_Misc_Coin_01"
local ICON_VIEW_BIDS = "Interface\\Icons\\INV_Misc_Coin_03" local ICON_VIEW_BIDS = "Interface\\Icons\\INV_Misc_Coin_03"
local ICON_VIEW_COMPANIONS = "Interface\\Icons\\INV_Box_Birdcage_01" local ICON_VIEW_COMPANIONS = "Interface\\Icons\\INV_Box_Birdcage_01"
local ICON_VIEW_MOUNTS = "Interface\\Icons\\Ability_Mount_RidingHorse" local ICON_VIEW_MOUNTS = "Interface\\Icons\\Ability_Mount_RidingHorse"
local ICON_VIEW_REP = "Interface\\Icons\\INV_BannerPVP_02" local ICON_VIEW_REP = "Interface\\Icons\\INV_BannerPVP_02"
local ICON_VIEW_EQUIP = "Interface\\Icons\\INV_Chest_Plate04" 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_TALENTS = "Interface\\Icons\\Spell_Nature_NatureGuardian"
local ICON_VIEW_TOKENS = "Interface\\Icons\\Spell_Holy_SummonChampion" local ICON_VIEW_TOKENS = "Interface\\Icons\\Spell_Holy_SummonChampion"
@@ -77,6 +81,8 @@ local function HideAll()
AltoholicFrameReputations:Hide() AltoholicFrameReputations:Hide()
AltoholicFrameEquipment:Hide() AltoholicFrameEquipment:Hide()
AltoholicFrameCurrencies:Hide() AltoholicFrameCurrencies:Hide()
AltoholicFrameKeys:Hide()
AltoholicFrameClasses:Hide() AltoholicFrameClasses:Hide()
end end
@@ -88,7 +94,8 @@ function ns:OnShow()
if AltoholicFrameReputations:IsVisible() or if AltoholicFrameReputations:IsVisible() or
AltoholicFrameEquipment:IsVisible() or AltoholicFrameEquipment:IsVisible() or
AltoholicFrameCurrencies:IsVisible() or AltoholicFrameCurrencies:IsVisible() or
AltoholicFramePetsAllInOne:IsVisible() then AltoholicFramePetsAllInOne:IsVisible()or
AltoholicFrameKeys:IsVisible() then
AltoholicFrameClasses:Show() AltoholicFrameClasses:Show()
end end
@@ -411,6 +418,11 @@ function ns:ShowCharInfo(infoType)
AltoholicFrameQuests:Show() AltoholicFrameQuests:Show()
addon.Quests:InvalidateView() addon.Quests:InvalidateView()
addon.Quests:Update(); addon.Quests:Update();
elseif infoType == VIEW_KEYS then
AltoholicFrameClasses:Show()
AltoholicFrameKeys:Show()
addon.Keys:InvalidateView()
addon.Keys:Update();
elseif infoType == VIEW_AUCTIONS then elseif infoType == VIEW_AUCTIONS then
addon.AuctionHouse:SetListType("Auctions") addon.AuctionHouse:SetListType("Auctions")
AltoholicFrameAuctions:Show() AltoholicFrameAuctions:Show()
@@ -704,3 +704,30 @@ L["Zelemar the Wrathful"] = true
L["Zone"] = true L["Zone"] = true
L["Keys"] = 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."