TourGuide
[WoW-TourGuide.git] / QuestTracking.lua
blob038e0a87833ddacec115e5038084c1b5f553057d
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 = 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
71 end
74 function TourGuide:CHAT_MSG_LOOT(event, msg)
75 local action, quest = self:GetObjectiveInfo()
76 local lootitem, lootqty = self:GetObjectiveTag("L")
77 local _, _, itemid, name = msg:find("^You .*Hitem:(%d+).*(%[.+%])")
78 self:Debug(10, event, action, quest, lootitem, lootqty, itemid, name)
80 if action == "BUY" and name and name == quest
81 or (action == "BUY" or action == "NOTE") and lootitem and itemid == lootitem and (GetItemCount(lootitem) + 1) >= lootqty then
82 return self:SetTurnedIn()
83 end
84 end
87 function TourGuide:UI_INFO_MESSAGE(event, msg)
88 if msg == ERR_NEWTAXIPATH and self:GetObjectiveInfo() == "GETFLIGHTPOINT" then
89 self:Debug(1, "Discovered flight point")
90 self:SetTurnedIn()
91 end
92 end
95 local orig = GetQuestReward
96 GetQuestReward = function(...)
97 local quest = GetTitleText()
98 TourGuide:Debug(10, "GetQuestReward", quest)
99 TourGuide:CompleteQuest(quest, true)
101 return orig(...)