From 92ca575dffa0f2d0925c10abe20130fd04278675 Mon Sep 17 00:00:00 2001 From: "Nathanial.C.Jones" Date: Fri, 10 Feb 2012 00:59:22 +0000 Subject: [PATCH] Added functionality to track the elders based on their associated achievements, and the ability to clear the entire list. "/qh find elder[s] achievement [elder_or_achievement]" will track the incomplete achievements of the specified elder or achievement, or all incomplete elder achievements if none is specified. "/qh find elder[s] clear" will clear the tracker of all tracked elders regardless of completion. --- QuestHelper/director_find.lua | 215 ++++++++++++++++++++-------------- 1 file changed, 127 insertions(+), 88 deletions(-) diff --git a/QuestHelper/director_find.lua b/QuestHelper/director_find.lua index 0919460..3ed6576 100644 --- a/QuestHelper/director_find.lua +++ b/QuestHelper/director_find.lua @@ -137,37 +137,37 @@ end local elders = { ["Alliance"] = { -- Achievement 915 - ["Bladeswift"] = {381, 39, 32, 8718}, --"Darnassus 39 32", - ["Bronzebeard"] = {341, 29, 16, 8866}, --"Ironforge 29 16", - ["Hammershout"] = {30, 2, 10, 8646}, --"Elwynn Forest 34 50" + ["Bladeswift"] = {381, 39, 32, 8718, 1999}, --"Darnassus 39 32", + ["Bronzebeard"] = {341, 29, 16, 8866, 1997}, --"Ironforge 29 16", + ["Hammershout"] = { 30, 2, 10, 8646, 1998}, --"Elwynn Forest 34 50" }, ["Horde"] = { -- Achievement 914 - ["Darkhorn"] = {321, 52, 60, 8677}, --"Orgrimmar 52 60", - ["Wheathoof"] = {362, 73.0, 23.3, 8678}, --"Thunder Bluff 73.0 23.3", - ["Darkcore"] = {382, 67, 38, 8648}, --"Undercity 67 38" + ["Darkhorn"] = {321, 52, 60, 8677, 1991}, --"Orgrimmar 52 60", + ["Wheathoof"] = {362, 73.0, 23.3, 8678, 1993}, --"Thunder Bluff 73.0 23.3", + ["Darkcore"] = {382, 67, 38, 8648, 1992}, --"Undercity 67 38" }, ["Kalimdor"] = { -- Achievement 911 - ["Riversong"] = {43, 35.5, 48.9, 8725}, --"Ashenvale 35.5 48.9", - ["Skygleam"] = {181, 64.8, 79.3, 8720}, --"Azshara 64.8 79.3", - ["High Mountain"] = {607, 41.5, 47.5, 8686}, --"Southern Barrens 41.5 47.5", - ["Moonwarden"] = {11, 48.5, 59.2, 8717}, --"Northern Barrens 48.5 59.2", - ["Windtotem"] = {11, 68.4, 70, 8680}, --"Northern Barrens 68.4 70", - ["Starweave"] = {42, 49.5, 19.0, 8721}, --"Darkshore 49.5 19.0", - ["Runetotem"] = {4, 53.2, 43.6, 8670}, --"Durotar 53.2 43.6", - ["Nightwind"] = {182, 38.3, 52.9, 8723}, --"Felwood 38.3 52.9", - ["Grimtotem"] = {121, 76.7, 37.9, 8679}, --"Feralas 76.7 37.9", - ["Mistwalker"] = {121, 62.6, 31.1, 8685}, --"Feralas 62.6 31.1", - ["Bloodhoof"] = {9, 48, 53, 8673}, --"Mulgore 48 53", - ["Bladesing"] = {261, 53, 35, 8719}, --"Silithus 53 35", - ["Primestone"] = {261, 30.7, 13.3, 8654}, --"Silithus 30.7 13.3", - ["Dreamseer"] = {161, 50, 28, 8684}, --"Tanaris 50 28", - ["Ragetotem"] = {161, 36, 80, 8671}, --"Tanaris 36 80", - ["Bladeleaf"] = {41, 56.8, 53.1, 8715}, --"Teldrassil 56.8 53.1", - ["Skyseer"] = {61, 46.3, 51.0, 8682}, --"Thousand Needles 46.3 51.0", - ["Morningdew"] = {61, 77.0, 75.6, 8724}, --"Thousand Needles 77.0 75.6", - ["Thunderhorn"] = {201, 51, 75, 8681}, --"Un'Goro Crater 51 75", - ["Brightspear"] = {281, 53.0, 56.7, 8726}, --"Winterspring 53.0 56.7", - ["Stonespire"] = {281, 60.0, 50.0, 8672}, --"Winterspring 60.0 50.0", + ["Bladeleaf"] = { 41, 56.8, 53.1, 8715, 1951}, --"Teldrassil 56.8 53.1", + ["Bladesing"] = {261, 53, 35, 8719, 1966}, --"Silithus 53 35", + ["Bloodhoof"] = { 9, 48, 53, 8673, 1953}, --"Mulgore 48 53", + ["Brightspear"] = {281, 53.0, 56.7, 8726, 1963}, --"Winterspring 53.0 56.7", + ["Dreamseer"] = {161, 50, 28, 8684, 1961}, --"Tanaris 50 28", + ["Grimtotem"] = {121, 76.7, 37.9, 8679, 1955}, --"Feralas 76.7 37.9", + ["High Mountain"] = {607, 41.5, 47.5, 8686, 1919}, --"Southern Barrens 41.5 47.5", + ["Mistwalker"] = {121, 62.6, 31.1, 8685, 1956}, --"Feralas 62.6 31.1", + ["Moonwarden"] = { 11, 48.5, 59.2, 8717, 1918}, --"Northern Barrens 48.5 59.2", + ["Morningdew"] = { 61, 77.0, 75.6, 8724, 1959}, --"Thousand Needles 77.0 75.6", + ["Nightwind"] = {182, 38.3, 52.9, 8723, 1957}, --"Felwood 38.3 52.9", + ["Primestone"] = {261, 30.7, 13.3, 8654, 1965}, --"Silithus 30.7 13.3", + ["Ragetotem"] = {161, 36, 80, 8671, 1960}, --"Tanaris 36 80", + ["Riversong"] = { 43, 35.5, 48.9, 8725, 1954}, --"Ashenvale 35.5 48.9", + ["Runetotem"] = { 4, 53.2, 43.6, 8670, 1916}, --"Durotar 53.2 43.6", + ["Skygleam"] = {181, 64.8, 79.3, 8720, 1917}, --"Azshara 64.8 79.3", + ["Skyseer"] = { 61, 46.3, 51.0, 8682, 1958}, --"Thousand Needles 46.3 51.0", + ["Starweave"] = { 42, 49.5, 19.0, 8721, 1952}, --"Darkshore 49.5 19.0", + ["Stonespire"] = {281, 60.0, 50.0, 8672, 1964}, --"Winterspring 60.0 50.0", + ["Thunderhorn"] = {201, 51, 75, 8681, 1962}, --"Un'Goro Crater 51 75", + ["Windtotem"] = { 11, 68.4, 70, 8680, 1920}, --"Northern Barrens 68.4 70", }, ["Eastern Kingdoms"] = { -- Achievement 912 ["Bellowrage"] = {19, 54, 49, 8647}, --"Blasted Lands 54 49", @@ -189,92 +189,131 @@ local elders = { ["Skychaser"] = {39, 56, 47, 8675}, --"Westfall 56 47" }, ["Northrend"] = { -- Achievement 1396 - ["Arp"] = {486, 57, 44, 13033}, --"Borean Tundra 57 44", - ["Northal"] = {486, 34, 34, 13016}, --"Borean Tundra 34 34", - ["Pamuya"] = {486, 43, 50, 13029}, --"Borean Tundra 43 50", - ["Sardis"] = {486, 59, 66, 13012}, --"Borean Tundra 59 66", - ["Morthie"] = {488, 30, 56, 13014}, --"Dragonblight 30 56", - ["Skywarden"] = {488, 35, 48, 13031}, --"Dragonblight 35 48", - ["Thoim"] = {488, 49, 78, 13019}, --"Dragonblight 49 78", - ["Beldak"] = {490, 61, 28, 13013}, --"Grizzly Hills 61 28", - ["Lunaro"] = {490, 81, 37, 13025}, --"Grizzly Hills 81 37", - ["Whurain"] = {490, 64, 47, 13030}, --"Grizzly Hills 64 47", - ["Bluewolf"] = {501, 49, 14, 13026}, --"Wintergrasp 49 14", - ["Sandrene"] = {493, 50, 64, 13018}, --"Sholazar Basin 50 64", - ["Wanikaya"] = {493, 64, 49, 13024}, --"Sholazar Basin 64 49", - ["Fargal"] = {495, 29, 74, 13015}, --"Storm Peaks 29 74", - ["Graymane"] = {495, 41, 85, 13028}, --"Storm Peaks 41 85", - ["Muraco"] = {495, 64, 51, 13032}, --"Storm Peaks 64 51", - ["Stonebeard"] = {495, 31, 38, 13020}, --"Storm Peaks 31 38", - ["Tauros"] = {496, 59, 56, 13027}, --"Zul'Drak 59 56" + ["Arp"] = {486, 57, 44, 13033, 5145}, --"Borean Tundra 57 44", + ["Northal"] = {486, 34, 34, 13016, 5146}, --"Borean Tundra 34 34", + ["Pamuya"] = {486, 43, 50, 13029, 5157}, --"Borean Tundra 43 50", + ["Sardis"] = {486, 59, 66, 13012, 5141}, --"Borean Tundra 59 66", + ["Morthie"] = {488, 30, 56, 13014, 5143}, --"Dragonblight 30 56", + ["Skywarden"] = {488, 35, 48, 13031, 5159}, --"Dragonblight 35 48", + ["Thoim"] = {488, 49, 78, 13019, 5154}, --"Dragonblight 49 78", + ["Beldak"] = {490, 61, 28, 13013, 5142}, --"Grizzly Hills 61 28", + ["Lunaro"] = {490, 81, 37, 13025, 5149}, --"Grizzly Hills 81 37", + ["Whurain"] = {490, 64, 47, 13030, 5158}, --"Grizzly Hills 64 47", + ["Bluewolf"] = {501, 49, 14, 13026, 5150}, --"Wintergrasp 49 14", + ["Sandrene"] = {493, 50, 64, 13018, 5147}, --"Sholazar Basin 50 64", + ["Wanikaya"] = {493, 64, 49, 13024, 5148}, --"Sholazar Basin 64 49", + ["Fargal"] = {495, 29, 74, 13015, 5144}, --"Storm Peaks 29 74", + ["Graymane"] = {495, 41, 85, 13028, 5155}, --"Storm Peaks 41 85", + ["Muraco"] = {495, 64, 51, 13032, 5160}, --"Storm Peaks 64 51", + ["Stonebeard"] = {495, 31, 38, 13020, 5156}, --"Storm Peaks 31 38", + ["Tauros"] = {496, 59, 56, 13027, 5151}, --"Zul'Drak 59 56" }, ["Cataclysm"] = { -- Achievement 6006 - ["Moonlance"] = {615, 57, 86, 29738}, -- Biel'aran Ridge, Shimmering Expanse - ["Windsong"] = {606, 27, 62, 29739}, -- Sanctuary of Malorne, Hyjal - ["Evershade"] = {606, 63, 23, 29740}, -- Nordrassil, Hyjal - ["Stonebrand"] = {640, 50, 55, 29735}, -- Temple of Earth, Deepholm - ["Deepforge"] = {640, 28, 69, 29734}, -- Stonehearth, Deepholm - ["Menkhaf"] = {720, 66, 19, 29742}, -- Khartut's Tomb, Uldum - ["Sekhemi"] = {720, 32, 63, 29741}, -- Ruins of Ammon, Uldum - ["Firebeard"] = {700, 51, 71, 29737}, -- Dunward Town Square, Dunward Ruins, Twilight Highlands - ["Darkfeather"] = {700, 52, 33, 29736} -- Thundermar Ruins, Twilight Highlands + ["Moonlance"] = {615, 57, 86, 29738, 18154}, -- Biel'aran Ridge, Shimmering Expanse + ["Windsong"] = {606, 27, 62, 29739, 18156}, -- Sanctuary of Malorne, Hyjal + ["Evershade"] = {606, 63, 23, 29740, 18155}, -- Nordrassil, Hyjal + ["Stonebrand"] = {640, 50, 55, 29735, 18157}, -- Temple of Earth, Deepholm + ["Deepforge"] = {640, 28, 69, 29734, 18158}, -- Stonehearth, Deepholm + ["Menkhaf"] = {720, 66, 19, 29742, 18159}, -- Khartut's Tomb, Uldum + ["Sekhemi"] = {720, 32, 63, 29741, 18160}, -- Ruins of Ammon, Uldum + ["Firebeard"] = {700, 51, 71, 29737, 18161}, -- Dunward Town Square, Dunward Ruins, Twilight Highlands + ["Darkfeather"] = {700, 52, 33, 29736, 18162} -- Thundermar Ruins, Twilight Highlands }, --[===[ Placeholder for Elders of the Dungeons. If enabled prior to 2013, stored coordinates should be the map ID of the zone where the instance is located and the coordinates of the entrance. With any luck, by 2013 dungeons will be mapable. Coordinates listed in comment after each elder need to have floor numbers determined, where necessary, ASAP. ["Dungeons"] = { -- Achievement 910 - ["Wildmane"] = {,,,8676}, -- Zul'Farrak 34.52 39.35 - ["Splitrock"] = {,,,8635}, -- Maraudon 51.47, 93.7 - ["Morndeep"] = {,,,8619}, -- Blackrock Depths 50.52 62.97 - ["Jarten"] = {,,,13017}, -- Utgarde Keep 47.4, 69.54 - ["Nurgen"] = {,,,13022}, -- Azjol-Nerub 21.78 43.62 - ["Ohanzee"] = {,,,13065}, -- Gundrak 45.7 61.55 - ["Chogan'gada"] = {,,,13067}, -- Utgarde Pinnacle 47.71 22.99 - ["Starsong"] = {,,,8713}, -- Sunken Temple 62.92 34.46 - ["Stonefort"] = {,,,8644}, -- Blackrock Spire 61.82 40 - ["Farwhisper"] = {,,,8727}, -- Stratholme 78.62 22.14 - ["Igasho"] = {,,,13021}, -- The Nexus 55.18 64.74 - ["Kilias"] = {,,,13023}, -- Drak'tharon Keep 68.85 79.17 - ["Yurauk"] = {,,,13066} -- Halls of Stone 29.39 62.03 + ["Wildmane"] = {,,,8676, 1910}, -- Zul'Farrak 34.52 39.35 + ["Splitrock"] = {,,,8635, 1912}, -- Maraudon 51.47, 93.7 + ["Morndeep"] = {,,,8619, 1914}, -- Blackrock Depths 50.52 62.97 + ["Jarten"] = {,,,13017, 5259}, -- Utgarde Keep 47.4, 69.54 + ["Nurgen"] = {,,,13022, 5261}, -- Azjol-Nerub 21.78 43.62 + ["Ohanzee"] = {,,,13065, 5263}, -- Gundrak 45.7 61.55 + ["Chogan'gada"] = {,,,13067, 5265}, -- Utgarde Pinnacle 47.71 22.99 + ["Starsong"] = {,,,8713, 1911}, -- Sunken Temple 62.92 34.46 + ["Stonefort"] = {,,,8644, 1913}, -- Blackrock Spire 61.82 40 + ["Farwhisper"] = {,,,8727, 1915}, -- Stratholme 78.62 22.14 + ["Igasho"] = {,,,13021, 5260}, -- The Nexus 55.18 64.74 + ["Kilias"] = {,,,13023, 5262}, -- Drak'tharon Keep 68.85 79.17 + ["Yurauk"] = {,,,13066, 5264} -- Halls of Stone 29.39 62.03 } --]===] } + +trackedElders = {} + local function UpdateElders() - local qid = GetQuestID() - for achievement, eldrs in pairs(elders) do - for elder, elderinfo in pairs(eldrs) do - local z, x, y, id = unpack(elderinfo) - if id == qid then - QH_FindCoord(x, y, z, elder) - end - end + local elder, elderinfo + local qid = GetQuestID() + for elder, elderinfo in pairs(trackedElders) do + local z, x, y, id = unpack(elderinfo) + if id == qid then + QH_FindCoord(x, y, z, elder) + trackedElders[elder] = nil + return + end end end QH_Event("QUEST_COMPLETE", UpdateElders) -local function QH_FindElders(elder_or_achievement, all_elders) +local function QH_FindElders(elder_or_achievement, all_elders, forAchievement) + if elder_or_achievement == "CLEAR" then + for elder, elderinfo in pairs(trackedElders) do + local z, x, y = unpack(elderinfo) + QH_FindCoord(x, y, z, elder) + end + + trackedElders = {} + return + end + local achievement_match, elder_match = false, false + + local elderCount = 0 + for achievement, eldrs in pairs(elders) do if not all_elders then if elder_or_achievement == string.upper(achievement) then achievement_match = true end end for elder, elder_info in pairs(eldrs) do - local locz, locx, locy, qid = unpack(elder_info) + local locz, locx, locy, qid, aid = unpack(elder_info) local okToAdd = true - if qid and QHQuestsCompleted and QHQuestsCompleted[qid] then + if forAchievement then + if aid then + local _, _, completed = GetAchievementCriteriaInfo(aid) + if completed then okToAdd = false end + end + elseif qid and QHQuestsCompleted and QHQuestsCompleted[qid] then okToAdd = false end if okToAdd then + if not all_elders then if achievement_match then -- just add it QH_FindCoord(locx, locy, locz, elder) + if trackedElders[elder] then trackedElders[elder] = nil + else + trackedElders[elder] = elder_info + elderCount = elderCount + 1 + end elseif elder_or_achievement == string.upper(elder) then -- We have input and it's not an achievement, so it must be an elder. elder_match = true QH_FindCoord(locx, locy, locz, elder) + if trackedElders[elder] then trackedElders[elder] = nil + else + trackedElders[elder] = elder_info + elderCount = elderCount + 1 + end + break -- We've found him or her. end -- No need for else here. We alread know we don't need everything so we either have an achievement or we have an elder. else -- We came in without an input, therefore we add all. QH_FindCoord(locx, locy, locz, elder) + if trackedElders[elder] then trackedElders[elder] = nil + else + trackedElders[elder] = elder_info + elderCount = elderCount + 1 + end end end end @@ -282,29 +321,29 @@ local function QH_FindElders(elder_or_achievement, all_elders) if achievement_match or elder_match then break end -- We've done our match. end - local shownEldersCount = 0 - - if shownElders then for k, _ in pairs(shownElders) do shownEldersCount = shownEldersCount + 1 end end - - if shownEldersCount > 0 then shownElders = nil end + if elderCount == 0 then QuestHelper:TextOut("No elders were added.") end end function QH_FindName(name) local locd = name:match("^loc (.+)") - local elder_loc + local forAchievement = false, elder_loc, temp if not locd then if name:find("^elders?") then - elder_loc = name:match("elders? (.+)") - if not elder_loc then elder_loc = true end + if name:find("^elders? achievement") then + forAchievement = true + elder_loc = name:match("elders? achievement (.+)") + else + elder_loc = name:match("elders? (.+)") + end end end if locd then QH_FindLoc(locd) elseif elder_loc then - if elder_loc == true then QH_FindElders(nil, true) - else QH_FindElders(string.upper(elder_loc)) + if elder_loc == true then QH_FindElders(nil, true, forAchievement) + else QH_FindElders(string.upper(elder_loc), false, forAchievement) end else if not DB_Ready() then