annotate ProspectMe.lua @ 2:dabd5c6540ca v1.2.2-Beta

Fixed a bug with saved player configurations. Vetted some other minor updates.
author Vynn
date Tue, 16 Dec 2014 00:24:54 -0500
parents 69b46322ff1b
children 61b9ea84a44c
rev   line source
Vynn@0 1 local PROSPECT_ID = 31252
Vynn@0 2 local MILLING_ID = 51005
Vynn@0 3 local PROSPECT = GetSpellInfo(PROSPECT_ID)
Vynn@0 4 local MILLING = GetSpellInfo(MILLING_ID)
Vynn@0 5 local containerID, containerLink = nil, nil
Vynn@0 6 local getContents = false
Vynn@0 7
Vynn@0 8 local function PM_Init()
Vynn@0 9 if not PM_ResultsTable then
Vynn@0 10 PM_ResultsTable = {}
Vynn@0 11 PM_ItemTable = {}
Vynn@0 12 end
Vynn@0 13 PM_SessionTable = {}
Vynn@0 14 end
Vynn@0 15
Vynn@0 16 local function CreateTableEntry(id)
Vynn@0 17 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(id)
Vynn@0 18 PM_ItemTable[id] = {}
Vynn@0 19 PM_ItemTable[id].name = name
Vynn@0 20 PM_ItemTable[id].link = link
Vynn@0 21 PM_ItemTable[id].quality = quality
Vynn@0 22 PM_ItemTable[id].iLevel = iLevel
Vynn@0 23 PM_ItemTable[id].reqLevel = reqLevel
Vynn@0 24 PM_ItemTable[id].class = class
Vynn@0 25 PM_ItemTable[id].subclass = subclass
Vynn@0 26 PM_ItemTable[id].maxStack = maxStack
Vynn@0 27 PM_ItemTable[id].equipSlot = equipSlot
Vynn@0 28 PM_ItemTable[id].texture = texture
Vynn@0 29 PM_ItemTable[id].vendorPrice = vendorPrice
Vynn@0 30 PM_ItemTable[id].price = PM_GetItemValue(id)
Vynn@0 31 end
Vynn@0 32
Vynn@0 33 --debugging function to print the databases results
Vynn@0 34 function PM_PrintResults()
Vynn@0 35 for container, k in pairs(PM_ResultsTable) do
Vynn@0 36 print(PM_ItemTable[container].link, PM_ResultsTable[container].timesProspected)
Vynn@0 37 for i, num in pairs(k) do
Vynn@0 38 if i ~= "timesProspected" then
Vynn@0 39 print(PM_ItemTable[i].link, num)
Vynn@0 40 end
Vynn@0 41 end
Vynn@0 42 end
Vynn@0 43 end
Vynn@0 44
Vynn@0 45 local function GetResults()
Vynn@0 46 --Create tables for the Container if it doesn't exist yet
Vynn@0 47 if not PM_ResultsTable[containerID] then
Vynn@0 48 PM_ResultsTable[containerID] = {timesProspected = 0}
Vynn@0 49 CreateTableEntry(containerID)
Vynn@0 50 end
Vynn@0 51
Vynn@0 52 --Creates a session table entry, this will be cleared on log out/UI reload
Vynn@0 53 if not PM_SessionTable[containerID] then
Vynn@0 54 PM_SessionTable[containerID] = {timesProspected = 0}
Vynn@0 55 end
Vynn@0 56
Vynn@0 57 for i = 1, GetNumLootItems() do
Vynn@0 58 local itemID = GetLootSlotLink(i):match("Hitem:(%d+)")
Vynn@0 59 local quantity = select(3, GetLootSlotInfo(i))
Vynn@0 60 if not PM_ItemTable[itemID] then
Vynn@0 61 CreateTableEntry(itemID)
Vynn@0 62 end
Vynn@0 63 if PM_ResultsTable[containerID][itemID] then
Vynn@0 64 PM_ResultsTable[containerID][itemID] = PM_ResultsTable[containerID][itemID] + quantity
Vynn@0 65 else
Vynn@0 66 PM_ResultsTable[containerID][itemID] = quantity
Vynn@0 67 end
Vynn@0 68 if PM_SessionTable[containerID][itemID] then
Vynn@0 69 PM_SessionTable[containerID][itemID] = PM_SessionTable[containerID][itemID] + quantity
Vynn@0 70 else
Vynn@0 71 PM_SessionTable[containerID][itemID] = quantity
Vynn@0 72 end
Vynn@0 73 end
Vynn@0 74
Vynn@0 75 PM_ResultsTable[containerID].timesProspected = PM_ResultsTable[containerID].timesProspected + 1
Vynn@0 76 PM_SessionTable[containerID].timesProspected = PM_SessionTable[containerID].timesProspected + 1
Vynn@0 77 end
Vynn@0 78
Vynn@0 79 local function EventHandler(self, event, ...)
Vynn@0 80 if event == "VARIABLES_LOADED" then
Vynn@0 81 PM_Init()
Vynn@0 82 PM_UpdateValues()
Vynn@0 83 end
Vynn@0 84 if event == "UNIT_SPELLCAST_INTERRUPTED" then
Vynn@0 85 local unitID, spell, rank = ...
Vynn@0 86 if unitID == "player" and spell == PROSPECT then
Vynn@0 87 getContents = false
Vynn@0 88 end
Vynn@0 89 end
Vynn@0 90 if event == "LOOT_OPENED" then
Vynn@0 91 if getContents then
Vynn@0 92 GetResults()
Vynn@0 93 end
Vynn@0 94 end
Vynn@0 95 if event == "LOOT_CLOSED" then
Vynn@0 96 getContents = false
Vynn@0 97 end
Vynn@0 98 if event == "AUCTION_ITEM_LIST_UPDATE" then
Vynn@0 99 PM_UpdateValues()
Vynn@0 100 end
Vynn@0 101 end
Vynn@0 102
Vynn@0 103 local frame = CreateFrame("FRAME", "PM_Frame")
Vynn@0 104 frame:RegisterEvent("VARIABLES_LOADED")
Vynn@0 105 frame:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED")
Vynn@0 106 frame:RegisterEvent("LOOT_OPENED")
Vynn@0 107 frame:RegisterEvent("LOOT_CLOSED")
Vynn@0 108 frame:RegisterEvent("AUCTION_ITEM_LIST_UPDATE")
Vynn@0 109 frame:SetScript("OnEvent", EventHandler)
Vynn@0 110
Vynn@0 111 hooksecurefunc("UseContainerItem", function(...)
Vynn@0 112 if getContents then
Vynn@0 113 containerLink = GetContainerItemLink(...)
Vynn@0 114 containerID = containerLink:match("Hitem:(%d+)")
Vynn@0 115 end
Vynn@0 116
Vynn@0 117 end)
Vynn@0 118
Vynn@0 119 hooksecurefunc("UseItemByName", function(itemName)
Vynn@0 120 if getContents then
Vynn@0 121 containerLink = select(2, GetItemInfo(itemName))
Vynn@0 122 containerID = containerLink:match("Hitem:(%d+)")
Vynn@0 123 end
Vynn@0 124 end)
Vynn@0 125
Vynn@0 126 hooksecurefunc("SpellTargetItem", 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("CastSpell", function(...)
Vynn@0 134 local spellName = GetSpellInfo(...)
Vynn@0 135 if spellName:lower() == PROSPECT:lower() or spellName:lower() == MILLING:lower() then
Vynn@0 136 getContents = true
Vynn@0 137 end
Vynn@0 138 end)
Vynn@0 139
Vynn@0 140 hooksecurefunc("CastSpellByID", function(spellID)
Vynn@0 141 if spellID == PROSPECT_ID or spellID == MILLING_ID then
Vynn@0 142 getContents = true
Vynn@0 143 end
Vynn@0 144 end)
Vynn@0 145
Vynn@0 146 hooksecurefunc("UseAction", function(actionID)
Vynn@0 147 local spellID = select(2, GetActionInfo(actionID))
Vynn@0 148 if spellID == PROSPECT_ID or spellID == MILLING_ID then
Vynn@0 149 getContents = true
Vynn@0 150 end
Vynn@0 151 end)
Vynn@0 152
Vynn@0 153 hooksecurefunc("CastSpellByName", function(spellName, onSelf)
Vynn@0 154 if spellName:lower() == PROSPECT:lower() or spellName:lower() == MILLING:lower() then
Vynn@0 155 getContents = true
Vynn@0 156 end
Vynn@0 157 end)