Language:
Lua     Change language:
Pastebin: 90629
Author: Anonymous
Subject: Untitled
Created: 2008-07-04 17:27:09
Download and save
Toggle line numbers
1----------------------------------------------------------------------------------------------------------- 
2    -- Data Gatherer work file. This will gather all the data needed, and insert it 
3    -- into the proper tables.  
4    -- Author: Jason 'Dreagar' Langlois 
5    -- Version: 1.4 
6    -- Manaview Data Compiler 
7    -- llsirshadow@yahoo.com - Developer e-mail 
8    -- www.manaview.com 
9----------------------------------------------------------------------------------------------------------- 
10 
11 
12----------------------------------------------------------------------------------------------------------- 
13    -- Tables Needed for saving 
14----------------------------------------------------------------------------------------------------------- 
15mvdgRoute = {} 
16mvdgRouteOrder = {} 
17mvdgProfile = {} 
18 
19 
20----------------------------------------------------------------------------------------------------------- 
21    -- Tables Needed Not for saving 
22----------------------------------------------------------------------------------------------------------- 
23local mvdgCQ, mvdgCQI, mvdgOCQ, mvdgOCQI = {}, {}, {}, {} 
24 
25----------------------------------------------------------------------------------------------------------- 
26    -- All other variables, local and global 
27----------------------------------------------------------------------------------------------------------- 
28local mvdgAbandonQuestName = nil 
29local mvdgUID = nil 
30local mvdgLogons = 0 
31local mvdgTimePlayed = 0 
32local mvdgTimePlayedThisLevel = 0 
33local mvdgReturned = nil 
34local mvdgAccepted = nil 
35local match = match 
36local format = format 
37local tonumber = tonumber 
38local mvdgObjectsPattern = "^"..QUEST_OBJECTS_FOUND:gsub("(%%.)", "(.+)").."$" -- QuestObjectsFound = "%s:%d/%d" 
39local mvdgMonstersPattern = "^"..QUEST_MONSTERS_KILLED:gsub("(%%.)", "(.+)").."$" -- QuestMonstersKilled = "%s slain: %d/%d" 
40local mvdgDebugOn = 1 
41mvdgUploaded = 0 -- will change to 1 if the file was uploaded to the site and needs to be cleared. 
42----------------------------------------------------------------------------------------------------------- 
43    -- Frame Methods 
44----------------------------------------------------------------------------------------------------------- 
45function dgframe_OnLoad() 
46    this:RegisterEvent("PLAYER_LOGIN"
47    this:RegisterEvent("QUEST_LOG_UPDATE"
48    this:RegisterEvent("VARIABLES_LOADED"
49    this:RegisterEvent("PLAYER_LEVEL_UP"
50    this:RegisterEvent("TIME_PLAYED_MSG"
51    hooksecurefunc("SetAbandonQuest", function() mvdgAbandonQuestName = GetAbandonQuestName() end
52    hooksecurefunc("AcceptQuest", mvdgAcceptQuest) 
53    hooksecurefunc("GetQuestReward", mvdgGetQuestReward) 
54end 
55 
56function dgframe_OnEvent(event, ...) 
57    if event and mvdgEvent[event] then 
58        mvdgEvent[event](...) 
59    end 
60end 
61 
62----------------------------------------------------------------------------------------------------------- 
63    -- Event Handlers 
64----------------------------------------------------------------------------------------------------------- 
65mvdgEvent = { 
66    ["PLAYER_LOGIN"] = mvdgEvent_PLAYER_LOGIN, 
67    ["QUEST_LOG_UPDATE"] = mvdgEvent_QUEST_LOG_UPDATE, 
68    ["VARIABLES_LOADED"] = mvdgEvent_VARIABLES_LOADED, 
69    ["PLAYER_LEVEL_UP"] = mvdgEvent_PLAYER_LEVEL_UP, 
70    ["TIME_PLAYED_MSG"] = mvdgEvent_TIME_PLAYED_MSG, 
71} 
72 
73function mvdgEvent_PLAYER_LOGIN(...) 
74    mvdgDebug("Player Logged in, setting up tables as needed"
75    if mvdgUploaded == 1 then mvdgClearAfterUpload() end 
76    local playername = UnitName("player"
77    mvdgUID = mvdgTogether(playername, GetRealmName()) 
78    if not mvdgProfile[mvdgUID] or not mvdgProfile[mvdgUID].race ~= UnitRace("player") or mvdgProfile[mvdgUID].class ~= UnitClass("player") then 
79        local _, race = UnitRace("player"
80        local _, class = UnitClass("player"
81        mvdgProfile[mvdgUID] = { 
82            ["race"] = race, 
83            ["class"] = class, 
84            ["logons"] = 0
85            ["faction"] = UnitFactionGroup("player"), 
86            ["sex"] = UnitSex("player"), -- 1 = nuetrum, 2 = male, 3 = female 
87            ["realm"] = GetCVar("realmlist") or nil
88        } 
89    end 
90    if not mvdgRouteOrder[mvdgUID] then mvdgRouteOrder[mvdgUID] = 1 end 
91    mvdgDebug("Current Route order: ",mvdgRouteOrder[mvdgUID]) 
92    if not mvdgRoute[mvdgUID] then mvdgRoute[mvdgUID] = {} end 
93    mvdgLogons = mvdgLogons + 1 
94    mvdgProfile[mvdgUID].logons = mvdgLogons 
95    RequestTimePlayed() 
96    mvdgDebug("Player_login, Route Order = ", mvdgRouteOrder[mvdgUID]) 
97end 
98 
99function mvdgEvent_QUEST_LOG_UPDATE() 
100    local currentTarget = UnitName("target"
101    mvdgCQ, mvdgOCQ = mvdgOCQ, mvdgCQ 
102    mvdgCQI, mvdgOCQI = mvdgOCQI, mvdgCQI 
103    for i in pairs(mvdgCQ) do mvdgCQ[i] = nil end 
104    for i in pairs(mvdgCQI) do mvdgCQI[i] = nil end 
105    for questid = 1, GetNumQuestLogEntries() do 
106        local qtitle, qlevel, qtag, qgroup, header, collapsed, complete, daily = GetQuestLogTitle(questid) 
107        for questob = 1, GetNumQuestLeaderBoards(questid) do 
108            local qdesc, qtype, qdone = GetQuestLogLeaderBoard(questob, questid) 
109            if qtype == "monster" then 
110                mvdgDebug("Entering: ", qtype, " into current Quest db from questLog"
111                mobname, mobhave, mobneed = qdesc:match(mvdgMonstersPattern) 
112                if mobname == nil or mobhave == nil or mobneed == nil then 
113                    local mobname2, mobhave2, mobneed2 = qdesc:match("^w+ (.+):(.+)/(.+)$"
114                    local mobname3, mobhave3, mobneed3 = qdesc:match("^(.+) %w+:(.+)/(.+)$"
115                    if mobname2 == nil or mobhave2 == nil or mobneed2 == nil then 
116                        mvdgCQ[qtitle] = { 
117                        ["name"] = mobname3, 
118                        ["have"] = mobhave3, 
119                        ["need"] = mobneed3, 
120                        } 
121                    else 
122                        mvdgCQ[qtitle] = { 
123                        ["name"] = mobname2, 
124                        ["have"] = mobhave2, 
125                        ["need"] = mobneed2, 
126                        } 
127                    end 
128                else 
129                    mvdgCQ[qtitle] = { 
130                        ["name"] = mobname, 
131                        ["have"] = mobhave, 
132                        ["need"] = mobneed, 
133                    } 
134                end 
135            else 
136                mvdgDebug("Entering: ", qtype, " into current Quest db from questLog"
137                local obname, obhave, obneed = qdesc:match(mvdgObjectsPattern) 
138                mvdgCQI[qtitle] = { 
139                    ["name"] = obname, 
140                    ["have"] = obhave, 
141                    ["need"] = obneed, 
142                } 
143            end 
144        end 
145    end 
146    -- do check for quest objective completes 
147    for i,v in pairs(mvdgCQ) do 
148        if mvdgOCQ[i] then 
149            mvdgDebug("Doin Compare on CQ Quest: ", i," Has: ", v.have, " OCQ Has: ", mvdgOCQ[i].have) 
150            if v.have ~= mvdgOCQ[i].have then 
151                mvdgQuestCompareFailed(i, v.name, "mob", v.have, v.need) 
152            end 
153        end 
154    end 
155    for i,v in pairs(mvdgCQI) do 
156        if mvdgOCQI[i] then 
157            mvdgDebug("Doin Compare on CQI Quest: ", i, " Has: ", v.have, " OCQI Has: ", mvdgOCQI[i].have) 
158            if v.have ~= mvdgOCQI[i].have then 
159                mvdgQuestCompareFailed(i, v.name, "item", v.have, v.need) 
160            end 
161        end 
162    end 
163    if mvdgAbandonQuestName then 
164        mvdgDebug("Quest Abandonded: ", mvdgAbandonQuestName, " Checking Quest Log to see if it's really Abandonded"
165        local found = false 
166        for qindex = 1, GetNumQuestLogEntries() do 
167            local qname = GetQuestLogTitle(qindex) 
168            if qname == mvdgAbandonQuestName then 
169                found = true 
170                break 
171            end 
172        end 
173        if not found then 
174            mvdgDebug("Quest ", mvdgAbandonQuestName, ". Not found in Quest Log, remove from route"
175            mvdgRemoveQuestFromRoute(mvdgAbandonQuestName, mvdgRouteOrder[mvdgUID], mvdgRoute[mvdgUID]) 
176        end 
177        mvdgAbandonQuestName = nil 
178    end 
179end 
180 
181function mvdgEvent_VARIABLES_LOADED() 
182    if mvdgUploaded == 0 then mvdgUploaded = mvdgUploaded end 
183end 
184 
185function mvdgEvent_PLAYER_LEVEL_UP(...) 
186    RequestTimePlayed() 
187    local newLevel = arg1 
188    local x, y, zone, subzone = mvdgGetLoc() 
189    if not mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]] then mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]] = {} end 
190    mvdgDebug("Player Leveled, level is now: ", newLevel, ". Entering into route table"
191    if not mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]].PlayerLeveled then 
192        mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]].PlayerLeveled = { 
193            ["NewLevel"] = newLevel, 
194            ["location"] = { 
195                ["x"] = x, 
196                ["y"] = y, 
197                ["zone"] = zone, 
198                ["subzone"] = subzone, 
199            }
200            ["PlayedTimeTotal"] = mvdgProfile[mvdgUID].PlayedTimes.TimePlayed, 
201            ["TimePlayedThisLevel"] = mvdgProfile[mvdgUID].PlayedTimes.TimePlayedThisLevel, 
202            ["RouteOrder"] = mvdgRouteOrder[mvdgUID], 
203        } 
204        mvdgRouteOrder[mvdgUID] = mvdgRouteOrder[mvdgUID] + 1 
205    mvdgDebug("Current Route order: ",mvdgRouteOrder[mvdgUID]) 
206    end 
207 
208end 
209 
210function mvdgEvent_TIME_PLAYED_MSG(...) 
211    if arg1 == 0 then 
212        if mvdgRouteOrder[mvdgUID] then mvdgRouteOrder[mvdgUID] = 1 end 
213        if mvdgRoute[mvdgUID] then mvdgRoute[mvdgUID] = {} end 
214    end 
215    if not mvdgProfile[mvdgUID].PlayedTimes then 
216        mvdgProfile[mvdgUID].PlayedTimes = { 
217            ["TimePlayed"] = arg1, 
218            ["TimePlayedThisLevel"] = arg2, 
219        } 
220    else 
221        mvdgProfile[mvdgUID].PlayedTimes.TimePlayed = arg1 
222        mvdgProfile[mvdgUID].PlayedTimes.TimePlayedThisLevel = arg2 
223    end 
224end 
225 
226----------------------------------------------------------------------------------------------------------- 
227    -- Quest handling methods 
228----------------------------------------------------------------------------------------------------------- 
229function mvdgAcceptQuest(...) 
230    local curTarg = mvdgGetUnitName("target"
231    if curTarg and curTarg ~= "" then 
232        local qName = GetTitleText() 
233        curTarg = mvdgTogether(t, curTarg) 
234        local x, y, zone, subzone = mvdgGetLoc() 
235        if not mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]] then mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]] = {} end 
236        mvdgDebug("Quest Accepted: ", qName, ". Entering into Route Table"
237        if not mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]]["QuestInfo"] then 
238            mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]]["QuestInfo"] = { 
239                ["QuestName"] = qName, 
240                ["RouteOrder"] = mvdgRouteOrder[mvdgUID], 
241                ["Location"] = { 
242                    ["x"] = x, 
243                    ["y"] = y, 
244                    ["zone"] = zone, 
245                    ["subzone"] = subzone, 
246                }
247                ["QuestGiver"] = curTarg, 
248                ["EventType"] = "Accept Quest"
249                ["PlayerLevel"] = UnitLevel("player"), 
250                ["QuestAbandonded"] = false
251            } 
252            mvdgRouteOrder[mvdgUID] = mvdgRouteOrder[mvdgUID] + 1 
253    mvdgDebug("Current Route order: ",mvdgRouteOrder[mvdgUID]) 
254            mvdgAccepted = true 
255        end 
256    end 
257end 
258 
259function mvdgGetQuestReward(...) 
260    local name = GetTitleText() 
261    local curTarg = mvdgGetUnitName("npc"
262    if not name or name == "" or not curTarg or curTarg == "" or curTarg == UNKNOWNOBJECT or curTarg == UNKNOWNBEING then return end 
263    local x, y, zone, subzone = mvdgGetLoc() 
264    curTarg = mvdgTogether(zone, curTarg) 
265    if not mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]] then mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]] = {} end 
266    mvdgDebug("Quest Returned, entering: ", name, " in route table"
267    if not mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]]["QuestInfo"] then 
268        mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]]["QuestInfo"] = { 
269            ["QuestName"] = name, 
270            ["RouteOrder"] = mvdgRouteOrder[mvdgUID], 
271            ["QuestGiver"] = curTarg, 
272            ["EventType"] = "Return Quest"
273            ["PlayerLevel"] = UnitLevel("player"), 
274            ["QuestAbandonded"] = false
275            ["Location"] = { 
276                ["x"] = x, 
277                ["y"] = y, 
278                ["zone"] = zone, 
279                ["subzone"] = subzone, 
280            }
281        } 
282        mvdgRouteOrder[mvdgUID] = mvdgRouteOrder[mvdgUID] + 1 
283    mvdgDebug("Current Route order: ",mvdgRouteOrder[mvdgUID]) 
284        mvdgReturned = true 
285    end 
286end 
287 
288function mvdgQuestCompareFailed(title, name, moborquest, have, need) 
289    local x, y, zone, subzone = mvdgGetLoc() 
290    local titleName = "" 
291    if moborquest == "mob" then titleName = "QuestMobKilled" else titleName = "QuestItemFound" end 
292    if not mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]] then mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]] = {} end 
293    if not mvdgAccepted or not mvdgReturned then 
294        mvdgDebug("Quest event: ", titleName, " happened. Entering: ", title, " Into Route DB"
295        if not mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]]["QuestInfo"] then 
296            mvdgRoute[mvdgUID][mvdgRouteOrder[mvdgUID]]["QuestInfo"] = { 
297                ["MobName"] = name, 
298                ["QuestName"] = title, 
299                ["HowManyToGet"] = need, 
300                ["HowManyGotten"] = have, 
301                ["PlayerLevel"] = UnitLevel("player"), 
302                ["RouteOrder"] = mvdgRouteOrder[mvdgUID], 
303                ["QuestAbandonded"] = false
304                ["Location"] = { 
305                        ["x"] = x, 
306                        ["y"] = y, 
307                        ["zone"] = zone, 
308                        ["subzone"] = subzone, 
309                }
310            } 
311            mvdgRouteOrder[mvdgUID] = mvdgRouteOrder[mvdgUID] + 1 
312            mvdgDebug("Current Route order: ",mvdgRouteOrder[mvdgUID]) 
313            mvdgReturned = nil 
314            mvdgAccepted = nil 
315        end 
316    end