annotate Modules/ProspectMe_Tooltip.lua @ 63:17897a788554 v2.7.1.2

Updated Auction API support to explicitly (instead of implicitly via Auctioneer API) work with TSM Fixed a bug that was left over from the transition to v2.
author Vynn <mischivin@gmail.com>
date Thu, 08 Dec 2016 23:04:44 -0500
parents 58d886030d65
children dcb2ec933df7
rev   line source
mischivin@36 1 local Quality = { [0] = "Junk", [1]= "Common", [2] = "Uncommon", [3] = "Rare", [4] = "Epic", }
Vynn@0 2
mischivin@36 3 local function Initialize()
mischivin@36 4 ProspectMe.FormatPrice = function (value)
Vynn@0 5
mischivin@36 6 local GSC_GOLD="ffffd100"
mischivin@36 7 local GSC_SILVER="ffe6e6e6"
mischivin@36 8 local GSC_COPPER="ffc8602c"
Vynn@0 9
mischivin@36 10 local g, s, c
mischivin@36 11 local digits = 0
mischivin@36 12 local gsc
mischivin@62 13 local neg = false
mischivin@62 14
mischivin@62 15 --if value is negative, record it and get the absolute value so log10 works
mischivin@62 16 if value < 0 then
mischivin@62 17 neg = true
mischivin@62 18 value = math.abs(value)
mischivin@62 19 end
mischivin@62 20
Vynn@0 21
mischivin@36 22 g = math.floor(value/10000)
mischivin@36 23 s = math.fmod(math.floor(value/100),100)
mischivin@36 24 c = math.fmod(value,100)
Vynn@0 25
Vynn@0 26
mischivin@36 27 digits = math.floor(math.log10(value)+1)
Vynn@0 28
mischivin@36 29 if ( digits < 3 ) then
mischivin@36 30 gsc = string.format(" |c%s%2d|r", GSC_COPPER, c)
mischivin@36 31 elseif ( digits < 5 ) then
mischivin@36 32 gsc = string.format("|c%s%2d|r |c%s%02d|r", GSC_SILVER, s, GSC_COPPER, c)
mischivin@36 33 elseif ( digits < 7 ) then
mischivin@36 34 gsc = string.format("|c%s%2d|r |c%s%02d|r", GSC_GOLD, g, GSC_SILVER, s)
mischivin@36 35 elseif ( digits < 9 ) then
mischivin@36 36 gsc = string.format("|c%s%5d|r", GSC_GOLD, g)
mischivin@36 37 else
mischivin@36 38 gsc = string.format("|c%s%2.1fk|r", GSC_GOLD, g/1000)
mischivin@36 39 end
mischivin@62 40 --if the original number was negative, add the symbol back in
mischivin@62 41 if neg then
mischivin@62 42 gsc = "|cffff0000(|r" .. gsc .. "|cffff0000)|r"
mischivin@62 43 end
mischivin@36 44 return gsc
Vynn@0 45 end
Vynn@0 46
mischivin@36 47 ProspectMe.GetReturn = function (containerID)
mischivin@36 48 local averageReturn = 0
mischivin@36 49 if ProspectMe.Results[containerID].TimesProspected > 0 then
mischivin@36 50 for itemID, num in pairs(ProspectMe.Results[containerID]) do
mischivin@36 51 if itemID ~= "TimesProspected" then
mischivin@36 52 averageReturn = averageReturn + ProspectMe.GetItemValue(itemID) * num
mischivin@36 53 end
Vynn@0 54 end
mischivin@36 55 averageReturn = averageReturn/ProspectMe.Results[containerID].TimesProspected
Vynn@0 56 end
mischivin@36 57 return tonumber(string.format("%.0f", averageReturn))
Vynn@0 58 end
Vynn@0 59 end
Vynn@0 60
Vynn@0 61 local cleared = true
Vynn@0 62 local function OnTooltipCleared(self)
Vynn@0 63 cleared = true
Vynn@0 64 end
Vynn@0 65
Vynn@0 66 local function OnTooltipSetItem(self)
Vynn@0 67 if cleared then
mischivin@39 68 local tooltipLink = select(2, self:GetItem())
mischivin@39 69 local spellid = select(3, self:GetSpell())
mischivin@39 70 local item = nil
mischivin@39 71 if spellid == 225902 then
mischivin@39 72 item = 123918
mischivin@39 73 elseif spellid == 225904 then
mischivin@39 74 item = 123919
mischivin@39 75 elseif spellid == 210116 then
mischivin@39 76 item = 128304
mischivin@39 77 elseif tooltipLink then
mischivin@39 78 item = tonumber(tooltipLink:match("Hitem:(%d+)"))
mischivin@39 79 spellid = nil
mischivin@39 80 else
mischivin@39 81 item = nil
mischivin@39 82 spellid = nil
mischivin@39 83 end
mischivin@39 84 if item then
mischivin@36 85 if ProspectMe.Results[item] then
mischivin@36 86 local price = ProspectMe.GetItemValue(item)
mischivin@36 87 local lifetimeReturn = ProspectMe.GetReturn(item)
mischivin@41 88 local subclass = select(7,GetItemInfo(item))
mischivin@47 89 local ctp = price * 5
Vynn@0 90 --NumofEachQuality, Percent of Each Quality
Vynn@0 91 self:AddLine(" ")
mischivin@47 92 local color
mischivin@48 93 if ProspectMe.Results[item].TimesProspected < 100 then
mischivin@48 94 color = "|cffff0000"
mischivin@48 95 elseif ProspectMe.Results[item].TimesProspected < 200 then
mischivin@48 96 color = "|cffffff00"
mischivin@48 97 else
mischivin@48 98 color = "|cff00ff00"
mischivin@48 99 end
mischivin@48 100
mischivin@48 101 -- SKill Text Block ""
mischivin@48 102 local skilltext
mischivin@46 103 if spellid == 225902 or spellid == 225904 or subclass == ProspectMe.Vars.ORE then
mischivin@48 104 skilltext = "Prospected"
mischivin@46 105 elseif spellid == 210116 or subclass == ProspectMe.Vars.HERB then
mischivin@48 106 skilltext = "Milled"
mischivin@42 107 else
mischivin@48 108 skilltext = "Processed"
mischivin@48 109 end
mischivin@48 110 self:AddDoubleLine("Prospect Me","Times " .. skilltext .. ": " .. color .. ProspectMe.Results[item].TimesProspected,1,0.82,0,1,1,1)
mischivin@48 111 self:AddLine(" ")
mischivin@48 112
mischivin@48 113 -- Economics Text Block
mischivin@58 114 if ProspectMe.Config.ShowEconomics then
mischivin@58 115 local spelltext
mischivin@58 116 if spellid == 225902 or spellid == 225904 then
mischivin@58 117 spelltext = "Mass Prospect"
mischivin@58 118 elseif spellid == 210116 then
mischivin@58 119 spelltext = "Mass Mill"
mischivin@58 120 elseif subclass == ProspectMe.Vars.ORE then
mischivin@58 121 spelltext = "Prospect"
mischivin@58 122 elseif subclass == ProspectMe.Vars.HERB then
mischivin@58 123 spelltext = "Mill"
mischivin@58 124 else
mischivin@58 125 spelltext = "Process"
mischivin@58 126 end
mischivin@58 127 if spellid then
mischivin@58 128 ctp = price * 20
mischivin@58 129 lifetimeReturn = lifetimeReturn * 4
mischivin@58 130 end
mischivin@58 131 local profit = lifetimeReturn - ctp
mischivin@58 132 local margin = (lifetimeReturn / ctp * 100) - 100
mischivin@58 133 self:AddDoubleLine("Estimated Profit: " .. ProspectMe.FormatPrice(profit), "Cost to " .. spelltext .. ": " .. ProspectMe.FormatPrice(ctp),1,1,1,1,1,1)
mischivin@58 134 if margin < 15 then
mischivin@58 135 color = "|cffff0000"
mischivin@58 136 elseif margin < 30 then
mischivin@58 137 color = "|cffffff00"
mischivin@58 138 else
mischivin@58 139 color = "|cff00ff00"
mischivin@58 140 end
mischivin@58 141 self:AddDoubleLine("Margin: " .. color .. string.format("[%.1f%%]", margin), "Average Return: " .. ProspectMe.FormatPrice(lifetimeReturn),1,1,1,1,1,1)
mischivin@58 142 self:AddLine(" ")
mischivin@42 143 end
mischivin@48 144
mischivin@48 145 -- Results Text Block
mischivin@58 146 local quals = ProspectMe.Config.ShowQualities
mischivin@58 147 if quals.Junk or quals.Common or quals.Uncommon or quals.Rare or quals.Epic then
mischivin@58 148 local hint = true
mischivin@58 149 local tab
mischivin@58 150 if IsAltKeyDown() == ProspectMe.Config.PerSession then
mischivin@58 151 tab = ProspectMe.Results
mischivin@58 152 self:AddDoubleLine("Lifetime Results","Hold Alt to display",1,0.82,0,0.5,0.5,0.5)
mischivin@58 153 else
mischivin@58 154 tab = ProspectMe.Session
mischivin@58 155 self:AddDoubleLine("Session Results","Hold Alt to display",1,0.82,0,0.5,0.5,0.5)
mischivin@58 156 end
mischivin@58 157 if tab[item] then
mischivin@58 158 for q = 7, 0, -1 do
mischivin@58 159 for result, num in pairs(tab[item]) do
mischivin@58 160 if result ~= "TimesProspected" and select(3, GetItemInfo(result)) == q and ProspectMe.Config.ShowQualities[Quality[q]] then
mischivin@58 161 hint = false
mischivin@58 162 local p, n = "", ""
mischivin@58 163 if ProspectMe.Config.ShowPercent then
mischivin@58 164 p = num/tab[item].TimesProspected*100
mischivin@58 165 if p < 10 then
mischivin@58 166 p = string.format("|cffffffff[%.1f%%] ", p)
mischivin@58 167 else
mischivin@58 168 p = string.format("|cffffffff[%.0f%%] ", p)
mischivin@58 169 end
Vynn@0 170 else
mischivin@58 171 p = ""
Vynn@0 172 end
mischivin@58 173 if ProspectMe.Config.ShowNumber then
mischivin@58 174 n = "|cffffffffx" .. num
mischivin@58 175 else
mischivin@58 176 n = ""
mischivin@58 177 end
mischivin@58 178 self:AddDoubleLine(p .. select(2, GetItemInfo(result)) .. n, ProspectMe.FormatPrice(ProspectMe.GetItemValue(result)))
Vynn@0 179 end
Vynn@0 180 end
Vynn@0 181 end
Vynn@0 182 end
mischivin@58 183 if hint then
mischivin@58 184 if spellid == 225902 or spellid == 225904 or subclass == ProspectMe.Vars.ORE then
mischivin@58 185 self:AddLine("|cffffffffTry Prospecting some ore to see your results!")
mischivin@58 186 elseif spellid == 210116 or subclass == ProspectMe.Vars.HERB then
mischivin@58 187 self:AddLine("|cffffffffTry Milling some plants to see your results!")
mischivin@58 188 else
mischivin@58 189 self:Addline("|cffffffffTry processing some material to see your results!")
mischivin@58 190 end
mischivin@58 191 end
mischivin@58 192
mischivin@39 193 --self:AddLine(" ")
Vynn@0 194 end
Vynn@0 195 end
Vynn@0 196 cleared = true
Vynn@0 197 end
Vynn@0 198 end
Vynn@0 199 end
Vynn@0 200
Vynn@0 201 GameTooltip:HookScript("OnTooltipCleared", OnTooltipCleared)
mischivin@36 202 GameTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem)
mischivin@36 203 ItemRefTooltip:HookScript("OnTooltipCleared", OnTooltipCleared)
mischivin@36 204 ItemRefTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem)
mischivin@36 205
mischivin@36 206 local frame = CreateFrame("FRAME", "ProspectMe_Value")
mischivin@36 207 frame:RegisterEvent("VARIABLES_LOADED")
mischivin@36 208 --frame:SetScript("OnEvent", EventHandler)
mischivin@36 209 frame:SetScript("OnEvent", Initialize)