Mercurial > wow > prospect-me
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ProspectMe.lua Mon Dec 15 22:51:49 2014 -0500 @@ -0,0 +1,157 @@ +local PROSPECT_ID = 31252 +local MILLING_ID = 51005 +local PROSPECT = GetSpellInfo(PROSPECT_ID) +local MILLING = GetSpellInfo(MILLING_ID) +local containerID, containerLink = nil, nil +local getContents = false + +local function PM_Init() + if not PM_ResultsTable then + PM_ResultsTable = {} + PM_ItemTable = {} + end + PM_SessionTable = {} +end + +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 + +--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+)") + 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 + 1 + PM_SessionTable[containerID].timesProspected = PM_SessionTable[containerID].timesProspected + 1 +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 = ... + if unitID == "player" and spell == PROSPECT 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(...) + if spellName:lower() == PROSPECT:lower() or spellName:lower() == MILLING:lower() then + getContents = true + end +end) + +hooksecurefunc("CastSpellByID", function(spellID) + if spellID == PROSPECT_ID or spellID == MILLING_ID then + getContents = true + end +end) + +hooksecurefunc("UseAction", function(actionID) + local spellID = select(2, GetActionInfo(actionID)) + if spellID == PROSPECT_ID or spellID == MILLING_ID then + getContents = true + end +end) + +hooksecurefunc("CastSpellByName", function(spellName, onSelf) + if spellName:lower() == PROSPECT:lower() or spellName:lower() == MILLING:lower() then + getContents = true + end +end) \ No newline at end of file