3 local TourGuide
= TourGuide
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)
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
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
)
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()
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()
61 function TourGuide
:QUEST_WATCH_UPDATE(event
)
62 if self
:GetObjectiveInfo() == "COMPLETE" then self
:UpdateStatusFrame() 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
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()
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")
95 local orig
= GetQuestReward
96 GetQuestReward
= function(...)
97 local quest
= GetTitleText()
98 TourGuide
:Debug(10, "GetQuestReward", quest
)
99 TourGuide
:CompleteQuest(quest
, true)