diff ProspectMe_Tooltip.lua @ 49:9dae86337a41

Merge Prospect Me v2 Branch to default
author Vynn <mischivin@gmail.com>
date Thu, 17 Nov 2016 16:24:48 -0500
parents a2fc078e4d70
children 73a564278360
line wrap: on
line diff
--- a/ProspectMe_Tooltip.lua	Thu Oct 27 12:51:54 2016 -0400
+++ b/ProspectMe_Tooltip.lua	Thu Nov 17 16:24:48 2016 -0500
@@ -1,53 +1,50 @@
---PM_HERBSUBCLASS = select(6, GetAuctionItemSubClasses(6))
---PM_ORESUBCLASS = select(4, GetAuctionItemSubClasses(6))
+local Quality = { [0] = "Junk", [1]= "Common", [2] = "Uncommon", [3] = "Rare", [4] = "Epic", }
 
---Hardcoded until I find a better solution now that GetAuctionItemSubClass() has changed
-PM_HERBSUBCLASS = "Herb"
-PM_ORESUBCLASS = "Metal & Stone"
+local function Initialize()
+	ProspectMe.FormatPrice = function (value)
 
-function PM_FormatPrice(value)
+		local GSC_GOLD="ffffd100"
+		local GSC_SILVER="ffe6e6e6"
+		local GSC_COPPER="ffc8602c"
 
-	local GSC_GOLD="ffffd100"
-	local GSC_SILVER="ffe6e6e6"
-	local GSC_COPPER="ffc8602c"
+		local g, s, c
+		local digits = 0
+		local gsc
 
-	local g, s, c
-	local digits = 0
-	local gsc
+		g = math.floor(value/10000)
+		s = math.fmod(math.floor(value/100),100)
+		c = math.fmod(value,100)
 
-	g = math.floor(value/10000)
-	s = math.fmod(math.floor(value/100),100)
-	c = math.fmod(value,100)
 
+		digits = math.floor(math.log10(value)+1)
 
-	digits = math.floor(math.log10(value)+1)
+		if ( digits < 3 ) then
+			gsc = string.format("   |c%s%2d|r",  GSC_COPPER, c)
+		elseif ( digits < 5 ) then
+			gsc = string.format("|c%s%2d|r |c%s%02d|r", GSC_SILVER, s, GSC_COPPER, c)
+		elseif ( digits < 7 ) then
+			gsc = string.format("|c%s%2d|r |c%s%02d|r", GSC_GOLD, g, GSC_SILVER, s)
+		elseif ( digits < 9 ) then
+			gsc = string.format("|c%s%5d|r", GSC_GOLD, g)
+		else
+			gsc = string.format("|c%s%2.1fk|r", GSC_GOLD, g/1000)
+		end
 
-	if ( digits < 3 ) then
-		gsc = string.format("   |c%s%2d|r",  GSC_COPPER, c)
-	elseif ( digits < 5 ) then
-		gsc = string.format("|c%s%2d|r |c%s%02d|r", GSC_SILVER, s, GSC_COPPER, c)
-	elseif ( digits < 7 ) then
-		gsc = string.format("|c%s%2d|r |c%s%02d|r", GSC_GOLD, g, GSC_SILVER, s)
-	elseif ( digits < 9 ) then
-		gsc = string.format("|c%s%5d|r", GSC_GOLD, g)
-	else
-		gsc = string.format("|c%s%2.1fk|r", GSC_GOLD, g/1000)
+		return gsc
 	end
 
-	return gsc
-end
-
-function PM_GetReturn(containerID)
-	local averageReturn = 0
-	if PM_ResultsTable[containerID].timesProspected > 0 then
-		for itemID, num in pairs(PM_ResultsTable[containerID]) do
-			if itemID ~= "timesProspected" then
-				averageReturn = averageReturn + PM_ItemTable[itemID].price * num 
+	ProspectMe.GetReturn = function (containerID)
+		local averageReturn = 0
+		if ProspectMe.Results[containerID].TimesProspected > 0 then
+			for itemID, num in pairs(ProspectMe.Results[containerID]) do
+				if itemID ~= "TimesProspected" then
+					averageReturn = averageReturn + ProspectMe.GetItemValue(itemID) * num 
+				end
 			end
+			averageReturn = averageReturn/ProspectMe.Results[containerID].TimesProspected
 		end
-		averageReturn = averageReturn/PM_ResultsTable[containerID].timesProspected
+			return tonumber(string.format("%.0f", averageReturn))
 	end
-		return tonumber(string.format("%.0f", averageReturn))
 end
 
 local cleared = true
@@ -57,65 +54,115 @@
  
 local function OnTooltipSetItem(self)
 	if cleared then
-		local name, tooltipLink = self:GetItem()
-		if tooltipLink then
-			local item = tooltipLink:match("Hitem:(%d+)")
-			if PM_ResultsTable[item] then
-				local lifetimeReturn = PM_GetReturn(item)
+		local tooltipLink = select(2, self:GetItem())
+		local spellid = select(3, self:GetSpell())
+		local item = nil
+		if spellid == 225902 then
+			item = 123918
+		elseif spellid == 225904 then
+			item = 123919
+		elseif spellid == 210116 then
+			item = 128304
+		elseif tooltipLink then 
+			item = tonumber(tooltipLink:match("Hitem:(%d+)"))
+			spellid = nil
+		else
+			item = nil
+			spellid = nil
+		end
+		if item then
+			if ProspectMe.Results[item] then
+				local price = ProspectMe.GetItemValue(item)
+				local lifetimeReturn = ProspectMe.GetReturn(item)
+				local subclass = select(7,GetItemInfo(item))
+				local ctp = price * 5
 				--NumofEachQuality, Percent of Each Quality
 				self:AddLine(" ")
-				self:AddLine("Prospect Me",0.5,1,0.5)
-				-- Subclass Detection is broken in Legion - may need to hard-code this or find another way of getting locatlizes subclass names.
-				if PM_ItemTable[item].subclass == PM_ORESUBCLASS then
-					self:AddLine("Times Prospected: " .. PM_ResultsTable[item].timesProspected)
-					self:AddDoubleLine("Cost to Prospect: " .. PM_FormatPrice(5 * PM_ItemTable[item].price), " Average Return: " .. PM_FormatPrice(PM_GetReturn(item)))
-				elseif PM_ItemTable[item].subclass == PM_HERBSUBCLASS then
-					self:AddLine("Times Milled: " .. PM_ResultsTable[item].timesProspected)
-					self:AddDoubleLine("Cost to Mill: " .. PM_FormatPrice(5 * PM_ItemTable[item].price), " Average Return: " .. PM_FormatPrice(PM_GetReturn(item)))
-
+				local color
+				if ProspectMe.Results[item].TimesProspected < 100 then
+					color = "|cffff0000"
+				elseif ProspectMe.Results[item].TimesProspected < 200 then
+					color = "|cffffff00"
+				else
+					color = "|cff00ff00"
 				end
-				if lifetimeReturn-(5 * PM_ItemTable[item].price) > 0 then
-					self:AddLine("Estimated Profit: " .. PM_FormatPrice(lifetimeReturn-(5 * PM_ItemTable[item].price)))
-					self:AddLine(" ")
+				
+				-- SKill Text Block ""
+				local skilltext
+				if spellid == 225902 or spellid == 225904 or subclass == ProspectMe.Vars.ORE then
+					skilltext = "Prospected"
+				elseif spellid == 210116 or subclass == ProspectMe.Vars.HERB then
+					skilltext = "Milled"
 				else
-					self:AddLine("No profit to be made",1,0,0)
-					self:AddLine(" ")
+					skilltext = "Processed"
 				end
-				if PM_Config.results then
-					local t
-					if IsAltKeyDown() == PM_Config.session then
-						t = PM_ResultsTable
-						self:AddDoubleLine("Lifetime Results","Hold/Release Alt to toggle",0.5,0.5,1,0.5,0.5,0.5)
-					else
-						t = PM_SessionTable
-						self:AddDoubleLine("Session Results","Hold/Release Alt to toggle",0.5,0.5,1,0.5,0.5,0.5)
-					end
-					if t[item] then
-						for q = 7, 0, -1 do
-							for result, num in pairs(t[item]) do 
-								if result ~= "timesProspected" and PM_ItemTable[result].quality == q and PM_Config.qualities[q] then
-									local p, n = "", ""
-									if PM_Config.percent then
-										p = num/t[item].timesProspected*100
-										if p < 10 then
-											p = string.format("[%.1f%%]", p)
-										else
-											p = string.format("[%.0f%%]", p)
-										end
+				self:AddDoubleLine("Prospect Me","Times " .. skilltext .. ":  " .. color .. ProspectMe.Results[item].TimesProspected,1,0.82,0,1,1,1)
+				self:AddLine(" ")
+				
+				-- Economics Text Block
+				local spelltext
+				if spellid == 225902 or spellid == 225904 then
+					spelltext = "Mass Prospect"
+				elseif spellid == 210116 then
+					spelltext = "Mass Mill"
+				elseif subclass == ProspectMe.Vars.ORE then
+					spelltext = "Prospect"
+				elseif subclass == ProspectMe.Vars.HERB then
+					spelltext = "Mill" 
+				else
+					spelltext = "Process"
+				end
+				if spellid then
+					ctp = price * 20
+					lifetimeReturn = lifetimeReturn * 4
+				end
+				local profit = lifetimeReturn - ctp
+				local margin = (lifetimeReturn / ctp * 100) - 100
+				self:AddDoubleLine("Estimated Profit:  " .. ProspectMe.FormatPrice(profit), "Cost to " .. spelltext .. ":  " .. ProspectMe.FormatPrice(ctp),1,1,1,1,1,1)
+				if margin < 30 then
+					color = "|cffffff00"
+				elseif margin < 15 then
+					color = "|cffff0000"
+				else
+					color = "|cff00ff00"
+				end
+				self:AddDoubleLine("Margin:  " .. color .. string.format("[%.1f%%]", margin),  "Average Return:  " .. ProspectMe.FormatPrice(lifetimeReturn),1,1,1,1,1,1)
+				self:AddLine(" ")
+				
+				-- Results Text Block
+				local t
+				if IsAltKeyDown() == ProspectMe.Config.PerSession then
+					t = ProspectMe.Results
+					self:AddDoubleLine("Lifetime Results","Hold Alt to display",1,0.82,0,0.5,0.5,0.5)
+				else
+					t = ProspectMe.Session
+					self:AddDoubleLine("Session Results","Hold Alt to display",1,0.82,0,0.5,0.5,0.5)
+				end
+				if t[item] then
+					for q = 7, 0, -1 do
+						for result, num in pairs(t[item]) do 
+							if result ~= "TimesProspected" and select(3, GetItemInfo(result)) == q and ProspectMe.Config.ShowQualities[Quality[q]] then
+								local p, n = "", ""
+								if ProspectMe.Config.ShowPercent then
+									p = num/t[item].TimesProspected*100
+									if p < 10 then
+										p = string.format("[%.1f%%]", p)
 									else
-										p = ""
+										p = string.format("[%.0f%%]", p)
 									end
-									if PM_Config.number then
-										n = "[" .. num .. "]"
-									else
-										n = ""
-									end
-									self:AddDoubleLine(p .. PM_ItemTable[result].link .. n, PM_FormatPrice(PM_ItemTable[result].price))
+								else
+									p = ""
 								end
+								if ProspectMe.Config.ShowNumber then
+									n = "|cffffffffx" .. num
+								else
+									n = ""
+								end
+								self:AddDoubleLine(p .. select(2, GetItemInfo(result)) .. n, ProspectMe.FormatPrice(ProspectMe.GetItemValue(result)))
 							end
 						end
 					end
-					self:AddLine(" ")
+					--self:AddLine(" ")
 				end
 			end
 			cleared = true
@@ -124,4 +171,11 @@
 end
  
 GameTooltip:HookScript("OnTooltipCleared", OnTooltipCleared)
-GameTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem)
\ No newline at end of file
+GameTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem)
+ItemRefTooltip:HookScript("OnTooltipCleared", OnTooltipCleared)
+ItemRefTooltip:HookScript("OnTooltipSetItem", OnTooltipSetItem)
+
+local frame = CreateFrame("FRAME", "ProspectMe_Value")
+frame:RegisterEvent("VARIABLES_LOADED")
+--frame:SetScript("OnEvent", EventHandler)
+frame:SetScript("OnEvent", Initialize)
\ No newline at end of file