comparison ProspectMe.lua @ 0:69b46322ff1b v1.2.1-Alpha

Updated Prospect me for initial client v6.0.3 support. Warning, there may be bugs!
author Vynn
date Mon, 15 Dec 2014 22:51:49 -0500
parents
children 61b9ea84a44c
comparison
equal deleted inserted replaced
-1:000000000000 0:69b46322ff1b
1 local PROSPECT_ID = 31252
2 local MILLING_ID = 51005
3 local PROSPECT = GetSpellInfo(PROSPECT_ID)
4 local MILLING = GetSpellInfo(MILLING_ID)
5 local containerID, containerLink = nil, nil
6 local getContents = false
7
8 local function PM_Init()
9 if not PM_ResultsTable then
10 PM_ResultsTable = {}
11 PM_ItemTable = {}
12 end
13 PM_SessionTable = {}
14 end
15
16 local function CreateTableEntry(id)
17 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(id)
18 PM_ItemTable[id] = {}
19 PM_ItemTable[id].name = name
20 PM_ItemTable[id].link = link
21 PM_ItemTable[id].quality = quality
22 PM_ItemTable[id].iLevel = iLevel
23 PM_ItemTable[id].reqLevel = reqLevel
24 PM_ItemTable[id].class = class
25 PM_ItemTable[id].subclass = subclass
26 PM_ItemTable[id].maxStack = maxStack
27 PM_ItemTable[id].equipSlot = equipSlot
28 PM_ItemTable[id].texture = texture
29 PM_ItemTable[id].vendorPrice = vendorPrice
30 PM_ItemTable[id].price = PM_GetItemValue(id)
31 end
32
33 --debugging function to print the databases results
34 function PM_PrintResults()
35 for container, k in pairs(PM_ResultsTable) do
36 print(PM_ItemTable[container].link, PM_ResultsTable[container].timesProspected)
37 for i, num in pairs(k) do
38 if i ~= "timesProspected" then
39 print(PM_ItemTable[i].link, num)
40 end
41 end
42 end
43 end
44
45 local function GetResults()
46 --Create tables for the Container if it doesn't exist yet
47 if not PM_ResultsTable[containerID] then
48 PM_ResultsTable[containerID] = {timesProspected = 0}
49 CreateTableEntry(containerID)
50 end
51
52 --Creates a session table entry, this will be cleared on log out/UI reload
53 if not PM_SessionTable[containerID] then
54 PM_SessionTable[containerID] = {timesProspected = 0}
55 end
56
57 for i = 1, GetNumLootItems() do
58 local itemID = GetLootSlotLink(i):match("Hitem:(%d+)")
59 local quantity = select(3, GetLootSlotInfo(i))
60 if not PM_ItemTable[itemID] then
61 CreateTableEntry(itemID)
62 end
63 if PM_ResultsTable[containerID][itemID] then
64 PM_ResultsTable[containerID][itemID] = PM_ResultsTable[containerID][itemID] + quantity
65 else
66 PM_ResultsTable[containerID][itemID] = quantity
67 end
68 if PM_SessionTable[containerID][itemID] then
69 PM_SessionTable[containerID][itemID] = PM_SessionTable[containerID][itemID] + quantity
70 else
71 PM_SessionTable[containerID][itemID] = quantity
72 end
73 end
74
75 PM_ResultsTable[containerID].timesProspected = PM_ResultsTable[containerID].timesProspected + 1
76 PM_SessionTable[containerID].timesProspected = PM_SessionTable[containerID].timesProspected + 1
77 end
78
79 local function EventHandler(self, event, ...)
80 if event == "VARIABLES_LOADED" then
81 PM_Init()
82 PM_UpdateValues()
83 end
84 if event == "UNIT_SPELLCAST_INTERRUPTED" then
85 local unitID, spell, rank = ...
86 if unitID == "player" and spell == PROSPECT then
87 getContents = false
88 end
89 end
90 if event == "LOOT_OPENED" then
91 if getContents then
92 GetResults()
93 end
94 end
95 if event == "LOOT_CLOSED" then
96 getContents = false
97 end
98 if event == "AUCTION_ITEM_LIST_UPDATE" then
99 PM_UpdateValues()
100 end
101 end
102
103 local frame = CreateFrame("FRAME", "PM_Frame")
104 frame:RegisterEvent("VARIABLES_LOADED")
105 frame:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED")
106 frame:RegisterEvent("LOOT_OPENED")
107 frame:RegisterEvent("LOOT_CLOSED")
108 frame:RegisterEvent("AUCTION_ITEM_LIST_UPDATE")
109 frame:SetScript("OnEvent", EventHandler)
110
111 hooksecurefunc("UseContainerItem", function(...)
112 if getContents then
113 containerLink = GetContainerItemLink(...)
114 containerID = containerLink:match("Hitem:(%d+)")
115 end
116
117 end)
118
119 hooksecurefunc("UseItemByName", function(itemName)
120 if getContents then
121 containerLink = select(2, GetItemInfo(itemName))
122 containerID = containerLink:match("Hitem:(%d+)")
123 end
124 end)
125
126 hooksecurefunc("SpellTargetItem", function(itemName)
127 if getContents then
128 containerLink = select(2, GetItemInfo(itemName))
129 containerID = containerLink:match("Hitem:(%d+)")
130 end
131 end)
132
133 hooksecurefunc("CastSpell", function(...)
134 local spellName = GetSpellInfo(...)
135 if spellName:lower() == PROSPECT:lower() or spellName:lower() == MILLING:lower() then
136 getContents = true
137 end
138 end)
139
140 hooksecurefunc("CastSpellByID", function(spellID)
141 if spellID == PROSPECT_ID or spellID == MILLING_ID then
142 getContents = true
143 end
144 end)
145
146 hooksecurefunc("UseAction", function(actionID)
147 local spellID = select(2, GetActionInfo(actionID))
148 if spellID == PROSPECT_ID or spellID == MILLING_ID then
149 getContents = true
150 end
151 end)
152
153 hooksecurefunc("CastSpellByName", function(spellName, onSelf)
154 if spellName:lower() == PROSPECT:lower() or spellName:lower() == MILLING:lower() then
155 getContents = true
156 end
157 end)