Mercurial > wow > prospect-me
view ProspectMe.lua @ 32:fc13da07d8e4 Prospect Me 2
Cleaned up some code, added comments, refined ProspectMe:AddEntry()
author | Vynn <mischivin@gmail.com> |
---|---|
date | Tue, 08 Nov 2016 02:36:30 -0500 |
parents | c11461d5095c |
children | 31cf11210635 |
line wrap: on
line source
--[[ Check for Saved Variables, if they don't exist, set defaults. ]] if not ProspectMe then ProspectMe = { Config = { ShowQualities = { junk = false common = false, uncommon = true, rare = true, epic = true, } PerSession = false ShowPercent = true ShowNumber = true } } end --[[ Creates an table entry, if it does not exist, and adds results to the entry. Expects the Item ID and pairs of arguments in table with key being the results ItemID and value being the quantity returned ]] local function ProspectMe:AddEntry (ItemID, ...) if not ProspectMe[ItemID] then ProspectMe[ItemID] = {} end for k, v in pairs arg do if not ProspectMe[ItemID][k] then ProspectMe[ItemID][k] = v else ProspectMe[ItemID][k] = ProspectMe[ItemID][k] = v end end return true end local PROSPECT_ID = 31252 local MILLING_ID = 51005 local MASS_PROSPECT_FELSLATE_ID = 225902 local MASS_PROSPECT_LEYSTONE_ID = 225902 local MASS_MILLING_YSERALLINE_ID = 210116 local PROSPECT = GetSpellInfo(PROSPECT_ID):lower() local MILLING = GetSpellInfo(MILLING_ID):lower() local MASS_PROSPECT_FELSLATE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower() local MASS_PROSPECT_LEYSTONE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower() local MASS_MILLING_YSERALLINE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower() local containerID, containerLink = nil, nil local getContents = false local bulkMultiplier = 1 --This will be used for mass prospecting/milling in Legion local function CreateTableEntry(id) local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(id) PM_ItemTable[id] = {} PM_ItemTable[id].name = name PM_ItemTable[id].link = link PM_ItemTable[id].quality = quality PM_ItemTable[id].iLevel = iLevel PM_ItemTable[id].reqLevel = reqLevel PM_ItemTable[id].class = class PM_ItemTable[id].subclass = subclass PM_ItemTable[id].maxStack = maxStack PM_ItemTable[id].equipSlot = equipSlot PM_ItemTable[id].texture = texture PM_ItemTable[id].vendorPrice = vendorPrice PM_ItemTable[id].price = PM_GetItemValue(id) end local function PM_Init() if not PM_ResultsTable then PM_ResultsTable = {} PM_ItemTable = {} end PM_SessionTable = {} PM_GemCleanup() --Run cleanup on excess Gem Chips created in v1.7.0.2 and earlier end --debugging function to print the databases results function PM_PrintResults() for container, k in pairs(PM_ResultsTable) do print(PM_ItemTable[container].link, PM_ResultsTable[container].timesProspected) for i, num in pairs(k) do if i ~= "timesProspected" then print(PM_ItemTable[i].link, num) end end end end local function GetResults() --Create tables for the Container if it doesn't exist yet if not PM_ResultsTable[containerID] then PM_ResultsTable[containerID] = {timesProspected = 0} CreateTableEntry(containerID) end --Creates a session table entry, this will be cleared on log out/UI reload if not PM_SessionTable[containerID] then PM_SessionTable[containerID] = {timesProspected = 0} end for i = 1, GetNumLootItems() do local itemID = GetLootSlotLink(i):match("Hitem:(%d+)") 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 itemID = "129100" end local quantity = select(3, GetLootSlotInfo(i)) if not PM_ItemTable[itemID] then CreateTableEntry(itemID) end if PM_ResultsTable[containerID][itemID] then PM_ResultsTable[containerID][itemID] = PM_ResultsTable[containerID][itemID] + quantity else PM_ResultsTable[containerID][itemID] = quantity end if PM_SessionTable[containerID][itemID] then PM_SessionTable[containerID][itemID] = PM_SessionTable[containerID][itemID] + quantity else PM_SessionTable[containerID][itemID] = quantity end end PM_ResultsTable[containerID].timesProspected = PM_ResultsTable[containerID].timesProspected + bulkMultiplier PM_SessionTable[containerID].timesProspected = PM_SessionTable[containerID].timesProspected + bulkMultiplier end local function EventHandler(self, event, ...) if event == "VARIABLES_LOADED" then PM_Init() PM_UpdateValues() end if event == "UNIT_SPELLCAST_INTERRUPTED" then local unitID, spell, rank = ... spell = spell:lower() 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 getContents = false end end if event == "LOOT_OPENED" then if getContents then GetResults() end end if event == "LOOT_CLOSED" then getContents = false end if event == "AUCTION_ITEM_LIST_UPDATE" then PM_UpdateValues() end end local frame = CreateFrame("FRAME", "PM_Frame") frame:RegisterEvent("VARIABLES_LOADED") frame:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED") frame:RegisterEvent("LOOT_OPENED") frame:RegisterEvent("LOOT_CLOSED") frame:RegisterEvent("AUCTION_ITEM_LIST_UPDATE") frame:SetScript("OnEvent", EventHandler) hooksecurefunc("UseContainerItem", function(...) if getContents then containerLink = GetContainerItemLink(...) containerID = containerLink:match("Hitem:(%d+)") end end) hooksecurefunc("UseItemByName", function(itemName) if getContents then containerLink = select(2, GetItemInfo(itemName)) containerID = containerLink:match("Hitem:(%d+)") end end) hooksecurefunc("SpellTargetItem", function(itemName) if getContents then containerLink = select(2, GetItemInfo(itemName)) containerID = containerLink:match("Hitem:(%d+)") end end) hooksecurefunc("CastSpell", function(...) local spellName = GetSpellInfo(...):lower() if spellName == PROSPECT or spellName == MILLING or spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then getContents = true if spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then bulkMultiplier = 4 else bulkMultiplier = 1 end end end) hooksecurefunc("CastSpellByID", function(spellID) 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 getContents = true if spellID == MASS_PROSPECT_FELSTATE_ID or spellID == MASS_PROSPECT_LEYSTONE_ID or spellID == MASS_MILLING_YSERALLINE_ID then bulkMultiplier = 4 else bulkMultiplier = 1 end end end) hooksecurefunc("UseAction", function(actionID) local spellID = select(2, GetActionInfo(actionID)) 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 getContents = true if spellID == MASS_PROSPECT_FELSTATE_ID or spellID == MASS_PROSPECT_LEYSTONE_ID or spellID == MASS_MILLING_YSERALLINE_ID then bulkMultiplier = 4 else bulkMultiplier = 1 end end end) hooksecurefunc("CastSpellByName", function(spellName, onSelf) spellName = spellName:lower() if spellName == PROSPECT or spellName == MILLING or spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then getContents = true if spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then bulkMultiplier = 4 else bulkMultiplier = 1 end end end)