TourGuide - Cleanup of submitted Dun Morough guide
[WoW-TourGuide.git] / QuestTracking.lua
blob89a1bfdc357cd90ad45245f9d5c699c85784072d
3 local TourGuide = TourGuide
4 local hadquest
7 TourGuide.TrackEvents = {"UI_INFO_MESSAGE", "CHAT_MSG_LOOT", "CHAT_MSG_SYSTEM", "QUEST_WATCH_UPDATE", "QUEST_LOG_UPDATE", "ZONE_CHANGED", "ZONE_CHANGED_INDOORS",
8 "MINIMAP_ZONE_CHANGED", "ZONE_CHANGED_NEW_AREA", "PLAYER_LEVEL_UP", "ADDON_LOADED"}
11 function TourGuide:ADDON_LOADED(event, addon)
12 if addon ~= "Blizzard_TrainerUI" then return end
14 self:UnregisterEvent("ADDON_LOADED")
16 local f = CreateFrame("Frame", nil, ClassTrainerFrame)
17 f:SetScript("OnShow", function() if self:GetObjectiveInfo() == "TRAIN" then self:SetTurnedIn() end end)
18 end
21 function TourGuide:PLAYER_LEVEL_UP(event, newlevel)
22 local level = tonumber((self:GetObjectiveTag("LV")))
23 self:Debug(1, "PLAYER_LEVEL_UP", newlevel, level)
24 if level and newlevel >= level then self:SetTurnedIn() end
25 end
28 function TourGuide:ZONE_CHANGED()
29 local action, quest = self:GetObjectiveInfo()
30 if (action == "RUN" or action == "FLY" or action == "HEARTH" or action == "BOAT") and (GetSubZoneText() == quest or GetZoneText() == quest) then
31 self:DebugF(1, "Detected zone change %q - %q", action, quest)
32 self:SetTurnedIn()
33 end
34 end
35 TourGuide.ZONE_CHANGED_INDOORS = TourGuide.ZONE_CHANGED
36 TourGuide.MINIMAP_ZONE_CHANGED = TourGuide.ZONE_CHANGED
37 TourGuide.ZONE_CHANGED_NEW_AREA = TourGuide.ZONE_CHANGED
40 function TourGuide:CHAT_MSG_SYSTEM(event, msg)
41 local action, quest = self:GetObjectiveInfo()
43 if action == "SETHEARTH" then
44 local _, _, loc = msg:find("(.*) is now your home.")
45 if loc and loc == quest then
46 self:DebugF(1, "Detected setting hearth to %q", loc)
47 return self:SetTurnedIn()
48 end
49 end
51 if action == "ACCEPT" then
52 local _, _, text = msg:find("Quest accepted: (.*)")
53 if text and quest:gsub("%s%(Part %d+%)", "") == text then
54 self:DebugF(1, "Detected quest accept %q", quest)
55 return self:UpdateStatusFrame()
56 end
57 end
58 end
61 function TourGuide:QUEST_WATCH_UPDATE(event)
62 if self:GetObjectiveInfo() == "COMPLETE" then self:UpdateStatusFrame() end
63 end
66 function TourGuide:QUEST_LOG_UPDATE(event)
67 local action, _, logi, complete = self:GetObjectiveInfo(), self:GetObjectiveStatus()
68 self:Debug(10, "QUEST_LOG_UPDATE", action, logi, complete)
70 if (self.updatedelay and not logi) or action == "ACCEPT" or action == "COMPLETE" and complete then self:UpdateStatusFrame() end
72 if action == "KILL" or action == "NOTE" then
73 local quest, questtext = self:GetObjectiveTag("Q"), self:GetObjectiveTag("QO")
74 if not quest or not questtext then return end
76 local qi = self:GetQuestLogIndexByName(quest)
77 for i=1,GetNumQuestLeaderBoards(qi) do
78 if GetQuestLogLeaderBoard(i, qi) == questtext then self:SetTurnedIn() end
79 end
80 end
81 end
84 function TourGuide:CHAT_MSG_LOOT(event, msg)
85 local action, quest = self:GetObjectiveInfo()
86 local lootitem, lootqty = self:GetObjectiveTag("L")
87 local _, _, itemid, name = msg:find("^You .*Hitem:(%d+).*(%[.+%])")
88 self:Debug(10, event, action, quest, lootitem, lootqty, itemid, name)
90 if action == "BUY" and name and name == quest
91 or (action == "BUY" or action == "KILL" or action == "NOTE") and lootitem and itemid == lootitem and (GetItemCount(lootitem) + 1) >= lootqty then
92 return self:SetTurnedIn()
93 end
94 end
97 function TourGuide:UI_INFO_MESSAGE(event, msg)
98 if msg == ERR_NEWTAXIPATH and self:GetObjectiveInfo() == "GETFLIGHTPOINT" then
99 self:Debug(1, "Discovered flight point")
100 self:SetTurnedIn()
105 local orig = GetQuestReward
106 GetQuestReward = function(...)
107 local quest = GetTitleText()
108 TourGuide:Debug(10, "GetQuestReward", quest)
109 TourGuide:CompleteQuest(quest, true)
111 return orig(...)