TourGuide
[WoW-TourGuide.git] / QuestTracking.lua
blobf7aff33c615f91cc1623ea265ec4ff9f632210a2
3 local TourGuide = TourGuide
4 local hadquest
7 TourGuide.turnedin = {}
9 local f = CreateFrame("Frame")
10 f:SetScript("OnEvent", function(self, event, ...) if self[event] then self[event](TourGuide, event, ...) end end)
13 function f:CHAT_MSG_SYSTEM(event, a1)
14 local _, _, quest = a1:find("Quest accepted: (.*)")
15 if quest and self.actions[self.current] == "ACCEPT" and self.quests[self.current] == quest then return self:UpdateStatusFrame() end
17 local _, _, questc = a1:find("(.*) completed.")
18 if questc and self.actions[self.current] == "TURNIN" and self.quests[self.current] == questc then
19 self.turnedin[questc] = true
20 return self:UpdateStatusFrame()
21 end
22 end
25 function f:QUEST_COMPLETE(event)
26 if self.actions[self.current] == "TURNIN" and GetQuestLogIndexByName(" "..self.quests[self.current]) then hadquest = self.quests[self.current]
27 else hadquest = nil end
28 end
31 function f:UNIT_QUEST_LOG_UPDATE(event, unit)
32 if unit ~= "player" then return end
34 if hadquest == self.quests[self.current] and not GetQuestLogIndexByName(" "..self.quests[self.current]) then self:UpdateStatusFrame() end
35 hadquest = nil
36 end
39 function f:QUEST_WATCH_UPDATE(event)
40 if self.actions[self.current] ~= "COMPLETE" then return end
41 local i = self.current
42 repeat
43 local qi = GetQuestLogIndexByName(" "..self.quests[i])
44 if qi and select(7, GetQuestLogTitle(qi)) == 1 then RemoveQuestWatch(qi) end
45 i = i + 1
46 until self.actions[i] ~= "COMPLETE"
47 QuestLog_Update()
48 QuestWatch_Update()
50 local i = GetQuestLogIndexByName(" "..self.quests[self.current])
51 if i and select(7, GetQuestLogTitle(i)) == 1 then return self:UpdateStatusFrame() end
52 end
55 local turninquest
56 function f:QUEST_FINISHED()
57 if self.actions[self.current] == "TURNIN" and GetQuestLogIndexByName(" "..self.quests[self.current]) then turninquest = self.quests[self.current]
58 else turninquest = nil end
59 end
62 function f:QUEST_LOG_UPDATE(event)
63 if self.actions[self.current] == "ACCEPT" then return self:UpdateStatusFrame() end
64 if self.actions[self.current] == "TURNIN" and turninquest == self.quests[self.current] and not GetQuestLogIndexByName(" "..turninquest) then
65 TourGuide.turnedin[turninquest] = true
66 return self:UpdateStatusFrame()
67 end
68 if self.actions[self.current] ~= "COMPLETE" then return end
70 local i = self.current
71 repeat
72 local qi = GetQuestLogIndexByName(" "..self.quests[i])
73 if qi and select(7, GetQuestLogTitle(qi)) == 1 then RemoveQuestWatch(qi) end
74 i = i + 1
75 until self.actions[i] ~= "COMPLETE"
76 QuestLog_Update()
77 QuestWatch_Update()
79 local i = GetQuestLogIndexByName(" "..self.quests[self.current])
80 if i and select(7, GetQuestLogTitle(i)) == 1 then return self:UpdateStatusFrame() end
82 if self.actions[self.current] == "COMPLETE" then
83 local qi = GetQuestLogIndexByName(" "..self.quests[self.current])
84 if qi then
85 AddQuestWatch(qi)
86 QuestLog_Update()
87 QuestWatch_Update()
88 end
89 elseif self.actions[self.current] == "TURNIN" then
90 if not GetQuestLogIndexByName(" "..self.quests[self.current]) then return self:UpdateStatusFrame() end
91 end
92 end
95 for i in pairs(f) do f:RegisterEvent(i) end