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