mischivin@32: --[[ mischivin@32: Check for Saved Variables, if they don't exist, set defaults. mischivin@32: ]] mischivin@31: if not ProspectMe then mischivin@31: ProspectMe = { mischivin@31: Config = { mischivin@31: ShowQualities = { mischivin@31: junk = false mischivin@31: common = false, mischivin@31: uncommon = true, mischivin@31: rare = true, mischivin@31: epic = true, mischivin@31: } mischivin@31: PerSession = false mischivin@31: ShowPercent = true mischivin@31: ShowNumber = true mischivin@31: } mischivin@31: mischivin@31: } mischivin@31: end mischivin@31: mischivin@32: --[[ mischivin@32: Creates an table entry, if it does not exist, and adds results to the entry. mischivin@32: Expects the Item ID and pairs of arguments in table with key being the results ItemID and value being the quantity returned mischivin@32: ]] mischivin@32: local function ProspectMe:AddEntry (ItemID, ...) mischivin@32: if not ProspectMe[ItemID] then mischivin@32: ProspectMe[ItemID] = {} mischivin@31: end mischivin@32: for k, v in pairs arg do mischivin@32: if not ProspectMe[ItemID][k] then mischivin@32: ProspectMe[ItemID][k] = v mischivin@32: else mischivin@32: ProspectMe[ItemID][k] = ProspectMe[ItemID][k] = v mischivin@32: end mischivin@32: end mischivin@32: return true mischivin@32: end mischivin@31: mischivin@31: 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 mischivin@14: local PROSPECT = GetSpellInfo(PROSPECT_ID):lower() mischivin@14: local MILLING = GetSpellInfo(MILLING_ID):lower() mischivin@14: local MASS_PROSPECT_FELSLATE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower() mischivin@14: local MASS_PROSPECT_LEYSTONE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower() mischivin@14: local MASS_MILLING_YSERALLINE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower() 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 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: mischivin@21: local function PM_Init() mischivin@21: if not PM_ResultsTable then mischivin@21: PM_ResultsTable = {} mischivin@21: PM_ItemTable = {} mischivin@21: end mischivin@21: PM_SessionTable = {} mischivin@21: PM_GemCleanup() --Run cleanup on excess Gem Chips created in v1.7.0.2 and earlier mischivin@21: end mischivin@21: 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 mischivin@18: Vynn@0: for i = 1, GetNumLootItems() do Vynn@0: local itemID = GetLootSlotLink(i):match("Hitem:(%d+)") mischivin@18: if itemID == "129099" or itemID == "130200" or itemID == "130201" or itemID == "130202" or itemID == "130203" or itemID == "130204" then --consolidate Colored Gem Chips into their resulting item mischivin@18: itemID = "129100" mischivin@18: end 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@14: spell = spell:lower() 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(...) mischivin@14: local spellName = GetSpellInfo(...):lower() mischivin@14: if spellName == PROSPECT or spellName == MILLING or spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then Vynn@0: getContents = true mischivin@14: if spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE 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@14: spellName = spellName:lower() mischivin@14: if spellName == PROSPECT or spellName == MILLING or spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then Vynn@0: getContents = true mischivin@14: if spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then mischivin@11: bulkMultiplier = 4 mischivin@11: else mischivin@11: bulkMultiplier = 1 mischivin@11: end Vynn@0: end Vynn@0: end)