Vynn@0: local PROSPECT_ID = 31252 Vynn@0: local MILLING_ID = 51005 mischivin@11: local MASS_PROSPECT_FELSLATE_ID = 225902 mischivin@11: local MASS_PROSPECT_LEYSTONE_ID = 225902 mischivin@11: local MASS_MILLING_YSERALLINE_ID = 210116 Vynn@0: local PROSPECT = GetSpellInfo(PROSPECT_ID) Vynn@0: local MILLING = GetSpellInfo(MILLING_ID) mischivin@11: local MASS_PROSPECT_FELSLATE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID) mischivin@11: local MASS_PROSPECT_LEYSTONE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID) mischivin@11: local MASS_MILLING_YSERALLINE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID) Vynn@0: local containerID, containerLink = nil, nil Vynn@0: local getContents = false mischivin@11: local bulkMultiplier = 1 --This will be used for mass prospecting/milling in Legion Vynn@0: Vynn@0: local function PM_Init() Vynn@0: if not PM_ResultsTable then Vynn@0: PM_ResultsTable = {} Vynn@0: PM_ItemTable = {} Vynn@0: end Vynn@0: PM_SessionTable = {} Vynn@0: end Vynn@0: Vynn@0: local function CreateTableEntry(id) Vynn@0: local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(id) Vynn@0: PM_ItemTable[id] = {} Vynn@0: PM_ItemTable[id].name = name Vynn@0: PM_ItemTable[id].link = link Vynn@0: PM_ItemTable[id].quality = quality Vynn@0: PM_ItemTable[id].iLevel = iLevel Vynn@0: PM_ItemTable[id].reqLevel = reqLevel Vynn@0: PM_ItemTable[id].class = class Vynn@0: PM_ItemTable[id].subclass = subclass Vynn@0: PM_ItemTable[id].maxStack = maxStack Vynn@0: PM_ItemTable[id].equipSlot = equipSlot Vynn@0: PM_ItemTable[id].texture = texture Vynn@0: PM_ItemTable[id].vendorPrice = vendorPrice Vynn@0: PM_ItemTable[id].price = PM_GetItemValue(id) Vynn@0: end Vynn@0: Vynn@0: --debugging function to print the databases results Vynn@0: function PM_PrintResults() Vynn@0: for container, k in pairs(PM_ResultsTable) do Vynn@0: print(PM_ItemTable[container].link, PM_ResultsTable[container].timesProspected) Vynn@0: for i, num in pairs(k) do Vynn@0: if i ~= "timesProspected" then Vynn@0: print(PM_ItemTable[i].link, num) Vynn@0: end Vynn@0: end Vynn@0: end Vynn@0: end Vynn@0: Vynn@0: local function GetResults() Vynn@0: --Create tables for the Container if it doesn't exist yet Vynn@0: if not PM_ResultsTable[containerID] then Vynn@0: PM_ResultsTable[containerID] = {timesProspected = 0} Vynn@0: CreateTableEntry(containerID) Vynn@0: end Vynn@0: Vynn@0: --Creates a session table entry, this will be cleared on log out/UI reload Vynn@0: if not PM_SessionTable[containerID] then Vynn@0: PM_SessionTable[containerID] = {timesProspected = 0} Vynn@0: end Vynn@0: Vynn@0: for i = 1, GetNumLootItems() do Vynn@0: local itemID = GetLootSlotLink(i):match("Hitem:(%d+)") Vynn@0: local quantity = select(3, GetLootSlotInfo(i)) Vynn@0: if not PM_ItemTable[itemID] then Vynn@0: CreateTableEntry(itemID) Vynn@0: end Vynn@0: if PM_ResultsTable[containerID][itemID] then Vynn@0: PM_ResultsTable[containerID][itemID] = PM_ResultsTable[containerID][itemID] + quantity Vynn@0: else Vynn@0: PM_ResultsTable[containerID][itemID] = quantity Vynn@0: end Vynn@0: if PM_SessionTable[containerID][itemID] then Vynn@0: PM_SessionTable[containerID][itemID] = PM_SessionTable[containerID][itemID] + quantity Vynn@0: else Vynn@0: PM_SessionTable[containerID][itemID] = quantity Vynn@0: end Vynn@0: end Vynn@0: mischivin@11: PM_ResultsTable[containerID].timesProspected = PM_ResultsTable[containerID].timesProspected + bulkMultiplier mischivin@11: PM_SessionTable[containerID].timesProspected = PM_SessionTable[containerID].timesProspected + bulkMultiplier Vynn@0: end Vynn@0: Vynn@0: local function EventHandler(self, event, ...) Vynn@0: if event == "VARIABLES_LOADED" then Vynn@0: PM_Init() Vynn@0: PM_UpdateValues() Vynn@0: end Vynn@0: if event == "UNIT_SPELLCAST_INTERRUPTED" then Vynn@0: local unitID, spell, rank = ... mischivin@12: 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: getContents = false Vynn@0: end Vynn@0: end Vynn@0: if event == "LOOT_OPENED" then Vynn@0: if getContents then Vynn@0: GetResults() Vynn@0: end Vynn@0: end Vynn@0: if event == "LOOT_CLOSED" then Vynn@0: getContents = false Vynn@0: end Vynn@0: if event == "AUCTION_ITEM_LIST_UPDATE" then Vynn@0: PM_UpdateValues() Vynn@0: end Vynn@0: end Vynn@0: Vynn@0: local frame = CreateFrame("FRAME", "PM_Frame") Vynn@0: frame:RegisterEvent("VARIABLES_LOADED") Vynn@0: frame:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED") Vynn@0: frame:RegisterEvent("LOOT_OPENED") Vynn@0: frame:RegisterEvent("LOOT_CLOSED") Vynn@0: frame:RegisterEvent("AUCTION_ITEM_LIST_UPDATE") Vynn@0: frame:SetScript("OnEvent", EventHandler) Vynn@0: Vynn@0: hooksecurefunc("UseContainerItem", function(...) Vynn@0: if getContents then Vynn@0: containerLink = GetContainerItemLink(...) Vynn@0: containerID = containerLink:match("Hitem:(%d+)") Vynn@0: end Vynn@0: Vynn@0: end) Vynn@0: Vynn@0: hooksecurefunc("UseItemByName", function(itemName) Vynn@0: if getContents then Vynn@0: containerLink = select(2, GetItemInfo(itemName)) Vynn@0: containerID = containerLink:match("Hitem:(%d+)") Vynn@0: end Vynn@0: end) Vynn@0: Vynn@0: hooksecurefunc("SpellTargetItem", function(itemName) Vynn@0: if getContents then Vynn@0: containerLink = select(2, GetItemInfo(itemName)) Vynn@0: containerID = containerLink:match("Hitem:(%d+)") Vynn@0: end Vynn@0: end) Vynn@0: Vynn@0: hooksecurefunc("CastSpell", function(...) Vynn@0: local spellName = GetSpellInfo(...) mischivin@11: 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: getContents = true mischivin@12: if spellName:lower() == MASS_PROSPECT_FELSLATE:lower() or spellName:lower() == MASS_PROSPECT_LEYSTONE:lower() or spellName:lower() == MASS_MILLING_YSERALLINE:lower () then mischivin@11: bulkMultiplier = 4 mischivin@11: else mischivin@11: bulkMultiplier = 1 mischivin@11: end Vynn@0: end Vynn@0: end) Vynn@0: Vynn@0: hooksecurefunc("CastSpellByID", function(spellID) mischivin@11: 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: getContents = true mischivin@11: if spellID == MASS_PROSPECT_FELSTATE_ID or spellID == MASS_PROSPECT_LEYSTONE_ID or spellID == MASS_MILLING_YSERALLINE_ID then mischivin@11: bulkMultiplier = 4 mischivin@11: else mischivin@11: bulkMultiplier = 1 mischivin@11: end Vynn@0: end Vynn@0: end) Vynn@0: Vynn@0: hooksecurefunc("UseAction", function(actionID) Vynn@0: local spellID = select(2, GetActionInfo(actionID)) mischivin@11: 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: getContents = true mischivin@11: if spellID == MASS_PROSPECT_FELSTATE_ID or spellID == MASS_PROSPECT_LEYSTONE_ID or spellID == MASS_MILLING_YSERALLINE_ID then mischivin@11: bulkMultiplier = 4 mischivin@11: else mischivin@11: bulkMultiplier = 1 mischivin@11: end Vynn@0: end Vynn@0: end) Vynn@0: Vynn@0: hooksecurefunc("CastSpellByName", function(spellName, onSelf) mischivin@11: 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: getContents = true mischivin@12: if spellName:lower() == MASS_PROSPECT_FELSLATE:lower() or spellName:lower() == MASS_PROSPECT_LEYSTONE:lower() or spellName:lower() == MASS_MILLING_YSERALLINE:lower () then mischivin@11: bulkMultiplier = 4 mischivin@11: else mischivin@11: bulkMultiplier = 1 mischivin@11: end Vynn@0: end Vynn@0: end)