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