annotate ProspectMe.lua @ 20:4a10e5d1618c

Hardcoded the subclass detection in Legion - will work 100% in english clients, not so sure about non-english clients, so please report back if it breaks for you!
author Geoff Brock <mischivin@gmail.com>
date Sun, 04 Sep 2016 21:51:07 -0400
parents 8e12723d408d
children dc011841fcb4
rev   line source
Vynn@0 1 local PROSPECT_ID = 31252
Vynn@0 2 local MILLING_ID = 51005
mischivin@11 3 local MASS_PROSPECT_FELSLATE_ID = 225902
mischivin@11 4 local MASS_PROSPECT_LEYSTONE_ID = 225902
mischivin@11 5 local MASS_MILLING_YSERALLINE_ID = 210116
mischivin@14 6 local PROSPECT = GetSpellInfo(PROSPECT_ID):lower()
mischivin@14 7 local MILLING = GetSpellInfo(MILLING_ID):lower()
mischivin@14 8 local MASS_PROSPECT_FELSLATE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower()
mischivin@14 9 local MASS_PROSPECT_LEYSTONE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower()
mischivin@14 10 local MASS_MILLING_YSERALLINE = GetSpellInfo(MASS_PROSPECT_FELSLATE_ID):lower()
Vynn@0 11 local containerID, containerLink = nil, nil
Vynn@0 12 local getContents = false
mischivin@11 13 local bulkMultiplier = 1 --This will be used for mass prospecting/milling in Legion
Vynn@0 14
Vynn@0 15 local function PM_Init()
Vynn@0 16 if not PM_ResultsTable then
Vynn@0 17 PM_ResultsTable = {}
Vynn@0 18 PM_ItemTable = {}
Vynn@0 19 end
Vynn@0 20 PM_SessionTable = {}
Vynn@0 21 end
Vynn@0 22
Vynn@0 23 local function CreateTableEntry(id)
Vynn@0 24 local name, link, quality, iLevel, reqLevel, class, subclass, maxStack, equipSlot, texture, vendorPrice = GetItemInfo(id)
Vynn@0 25 PM_ItemTable[id] = {}
Vynn@0 26 PM_ItemTable[id].name = name
Vynn@0 27 PM_ItemTable[id].link = link
Vynn@0 28 PM_ItemTable[id].quality = quality
Vynn@0 29 PM_ItemTable[id].iLevel = iLevel
Vynn@0 30 PM_ItemTable[id].reqLevel = reqLevel
Vynn@0 31 PM_ItemTable[id].class = class
Vynn@0 32 PM_ItemTable[id].subclass = subclass
Vynn@0 33 PM_ItemTable[id].maxStack = maxStack
Vynn@0 34 PM_ItemTable[id].equipSlot = equipSlot
Vynn@0 35 PM_ItemTable[id].texture = texture
Vynn@0 36 PM_ItemTable[id].vendorPrice = vendorPrice
Vynn@0 37 PM_ItemTable[id].price = PM_GetItemValue(id)
Vynn@0 38 end
Vynn@0 39
Vynn@0 40 --debugging function to print the databases results
Vynn@0 41 function PM_PrintResults()
Vynn@0 42 for container, k in pairs(PM_ResultsTable) do
Vynn@0 43 print(PM_ItemTable[container].link, PM_ResultsTable[container].timesProspected)
Vynn@0 44 for i, num in pairs(k) do
Vynn@0 45 if i ~= "timesProspected" then
Vynn@0 46 print(PM_ItemTable[i].link, num)
Vynn@0 47 end
Vynn@0 48 end
Vynn@0 49 end
Vynn@0 50 end
Vynn@0 51
Vynn@0 52 local function GetResults()
Vynn@0 53 --Create tables for the Container if it doesn't exist yet
Vynn@0 54 if not PM_ResultsTable[containerID] then
Vynn@0 55 PM_ResultsTable[containerID] = {timesProspected = 0}
Vynn@0 56 CreateTableEntry(containerID)
Vynn@0 57 end
Vynn@0 58
Vynn@0 59 --Creates a session table entry, this will be cleared on log out/UI reload
Vynn@0 60 if not PM_SessionTable[containerID] then
Vynn@0 61 PM_SessionTable[containerID] = {timesProspected = 0}
Vynn@0 62 end
mischivin@18 63
Vynn@0 64 for i = 1, GetNumLootItems() do
Vynn@0 65 local itemID = GetLootSlotLink(i):match("Hitem:(%d+)")
mischivin@18 66 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 67 itemID = "129100"
mischivin@18 68 end
Vynn@0 69 local quantity = select(3, GetLootSlotInfo(i))
Vynn@0 70 if not PM_ItemTable[itemID] then
Vynn@0 71 CreateTableEntry(itemID)
Vynn@0 72 end
Vynn@0 73 if PM_ResultsTable[containerID][itemID] then
Vynn@0 74 PM_ResultsTable[containerID][itemID] = PM_ResultsTable[containerID][itemID] + quantity
Vynn@0 75 else
Vynn@0 76 PM_ResultsTable[containerID][itemID] = quantity
Vynn@0 77 end
Vynn@0 78 if PM_SessionTable[containerID][itemID] then
Vynn@0 79 PM_SessionTable[containerID][itemID] = PM_SessionTable[containerID][itemID] + quantity
Vynn@0 80 else
Vynn@0 81 PM_SessionTable[containerID][itemID] = quantity
Vynn@0 82 end
Vynn@0 83 end
Vynn@0 84
mischivin@11 85 PM_ResultsTable[containerID].timesProspected = PM_ResultsTable[containerID].timesProspected + bulkMultiplier
mischivin@11 86 PM_SessionTable[containerID].timesProspected = PM_SessionTable[containerID].timesProspected + bulkMultiplier
Vynn@0 87 end
Vynn@0 88
Vynn@0 89 local function EventHandler(self, event, ...)
Vynn@0 90 if event == "VARIABLES_LOADED" then
Vynn@0 91 PM_Init()
Vynn@0 92 PM_UpdateValues()
Vynn@0 93 end
Vynn@0 94 if event == "UNIT_SPELLCAST_INTERRUPTED" then
Vynn@0 95 local unitID, spell, rank = ...
mischivin@14 96 spell = spell:lower()
mischivin@12 97 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 98 getContents = false
Vynn@0 99 end
Vynn@0 100 end
Vynn@0 101 if event == "LOOT_OPENED" then
Vynn@0 102 if getContents then
Vynn@0 103 GetResults()
Vynn@0 104 end
Vynn@0 105 end
Vynn@0 106 if event == "LOOT_CLOSED" then
Vynn@0 107 getContents = false
Vynn@0 108 end
Vynn@0 109 if event == "AUCTION_ITEM_LIST_UPDATE" then
Vynn@0 110 PM_UpdateValues()
Vynn@0 111 end
Vynn@0 112 end
Vynn@0 113
Vynn@0 114 local frame = CreateFrame("FRAME", "PM_Frame")
Vynn@0 115 frame:RegisterEvent("VARIABLES_LOADED")
Vynn@0 116 frame:RegisterEvent("UNIT_SPELLCAST_INTERRUPTED")
Vynn@0 117 frame:RegisterEvent("LOOT_OPENED")
Vynn@0 118 frame:RegisterEvent("LOOT_CLOSED")
Vynn@0 119 frame:RegisterEvent("AUCTION_ITEM_LIST_UPDATE")
Vynn@0 120 frame:SetScript("OnEvent", EventHandler)
Vynn@0 121
Vynn@0 122 hooksecurefunc("UseContainerItem", function(...)
Vynn@0 123 if getContents then
Vynn@0 124 containerLink = GetContainerItemLink(...)
Vynn@0 125 containerID = containerLink:match("Hitem:(%d+)")
Vynn@0 126 end
Vynn@0 127
Vynn@0 128 end)
Vynn@0 129
Vynn@0 130 hooksecurefunc("UseItemByName", function(itemName)
Vynn@0 131 if getContents then
Vynn@0 132 containerLink = select(2, GetItemInfo(itemName))
Vynn@0 133 containerID = containerLink:match("Hitem:(%d+)")
Vynn@0 134 end
Vynn@0 135 end)
Vynn@0 136
Vynn@0 137 hooksecurefunc("SpellTargetItem", function(itemName)
Vynn@0 138 if getContents then
Vynn@0 139 containerLink = select(2, GetItemInfo(itemName))
Vynn@0 140 containerID = containerLink:match("Hitem:(%d+)")
Vynn@0 141 end
Vynn@0 142 end)
Vynn@0 143
Vynn@0 144 hooksecurefunc("CastSpell", function(...)
mischivin@14 145 local spellName = GetSpellInfo(...):lower()
mischivin@14 146 if spellName == PROSPECT or spellName == MILLING or spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then
Vynn@0 147 getContents = true
mischivin@14 148 if spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then
mischivin@11 149 bulkMultiplier = 4
mischivin@11 150 else
mischivin@11 151 bulkMultiplier = 1
mischivin@11 152 end
Vynn@0 153 end
Vynn@0 154 end)
Vynn@0 155
Vynn@0 156 hooksecurefunc("CastSpellByID", function(spellID)
mischivin@11 157 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 158 getContents = true
mischivin@11 159 if spellID == MASS_PROSPECT_FELSTATE_ID or spellID == MASS_PROSPECT_LEYSTONE_ID or spellID == MASS_MILLING_YSERALLINE_ID then
mischivin@11 160 bulkMultiplier = 4
mischivin@11 161 else
mischivin@11 162 bulkMultiplier = 1
mischivin@11 163 end
Vynn@0 164 end
Vynn@0 165 end)
Vynn@0 166
Vynn@0 167 hooksecurefunc("UseAction", function(actionID)
Vynn@0 168 local spellID = select(2, GetActionInfo(actionID))
mischivin@11 169 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 170 getContents = true
mischivin@11 171 if spellID == MASS_PROSPECT_FELSTATE_ID or spellID == MASS_PROSPECT_LEYSTONE_ID or spellID == MASS_MILLING_YSERALLINE_ID then
mischivin@11 172 bulkMultiplier = 4
mischivin@11 173 else
mischivin@11 174 bulkMultiplier = 1
mischivin@11 175 end
Vynn@0 176 end
Vynn@0 177 end)
Vynn@0 178
Vynn@0 179 hooksecurefunc("CastSpellByName", function(spellName, onSelf)
mischivin@14 180 spellName = spellName:lower()
mischivin@14 181 if spellName == PROSPECT or spellName == MILLING or spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then
Vynn@0 182 getContents = true
mischivin@14 183 if spellName == MASS_PROSPECT_FELSLATE or spellName == MASS_PROSPECT_LEYSTONE or spellName == MASS_MILLING_YSERALLINE then
mischivin@11 184 bulkMultiplier = 4
mischivin@11 185 else
mischivin@11 186 bulkMultiplier = 1
mischivin@11 187 end
Vynn@0 188 end
Vynn@0 189 end)