AuctioneerSuite/Enchantrix/EnxTooltip.lua
2026-04-13 17:48:13 -04:00

721 lines
24 KiB
Lua

--[[
Enchantrix Addon for World of Warcraft(tm).
Version: 5.9.4961 (WhackyWallaby)
Revision: $Id: EnxTooltip.lua 4933 2010-10-13 17:16:14Z Nechckn $
URL: http://enchantrix.org/
Tooltip functions.
License:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program(see GPL.txt); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Note:
This AddOn's source code is specifically designed to work with
World of Warcraft's interpreted AddOn system.
You have an implicit license to use this AddOn with these facilities
since that is its designated purpose as per:
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
]]
Enchantrix_RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Enchantrix/EnxTooltip.lua $", "$Rev: 4933 $")
-- Global functions
local addonLoaded -- Enchantrix.Tooltip.AddonLoaded()
local tooltipFormat -- Enchantrix.Tooltip.Format
-- Local functions
local itemTooltip
local enchantTooltip
local hookItemTooltip, hookSpellTooltip
local tooltip = LibStub("nTipHelper:1")
function addonLoaded()
-- Hook in new tooltip code
tooltip:Activate()
tooltip:AddCallback( { type = "item", callback = hookItemTooltip }, 400)
tooltip:AddCallback( { type = "spell", callback = hookSpellTooltip }, 400)
end
tooltipFormat = {
currentFormat = "fancy",
format = {
["fancy"] = " $prob% |q$name|r $rate",
["default"] = " $name: $prob% $rate",
},
patterns = {
-- Strings
["$prob"] = "", -- Probability: "75"
["$name"] = "", -- Name: "Lesser Magic Essence"
["$rate"] = "", -- Avg drop amount: "x1.5"
-- Colors
["|q"] = "", -- Quality color
["|E"] = "|cffcccc33", -- Yellow ("Enchantrix" color)
["|e"] = "|cff7f7f00", -- Dark yellow
["|r"] = "|r", -- Reset color
},
SelectFormat = function(this, fmt)
if this.format[fmt] then
this.currentFormat = fmt
else
this.currentFormat = "default"
end
end,
SetFormat = function(this, fmt, val, counts)
this.format[fmt] = val
end,
GetFormat = function(this, fmt, counts)
if not this.format[fmt] then return end
return this.format[fmt]
end,
GetString = function(this)
local line = this.format[this.currentFormat]
-- Replace patterns
for pat, repl in pairs(this.patterns) do
line = line:gsub(pat, repl or "")
end
return line
end,
SetPattern = function(this, pat, repl)
this.patterns[pat] = repl
end,
}
local function prospectTooltip(prospect, tooltip, name, link, quality, count)
local embed = Enchantrix.Settings.GetSetting('ToolTipEmbedInGameTip')
local lines
local totalFive = {}
local totalHSP, totalMed, totalMkt, totalFive = 0,0,0,0
local totalNumber, totalQuantity
for result, resYield in pairs( prospect ) do
if (not lines) then lines = {} end
local style, extra = Enchantrix.Util.GetPricingModel();
local hsp, med, mkt, five = Enchantrix.Util.GetReagentPrice(result,extra)
local resHSP, resMed, resMkt, resFive = (hsp or 0)*resYield, (med or 0)*resYield, (mkt or 0)*resYield, (five or 0)*resYield
totalHSP = totalHSP + resHSP
totalMed = totalMed + resMed
totalMkt = totalMkt + resMkt
totalFive = totalFive + resFive
-- Probabilities
local prob = tostring( resYield * 100 )
tooltipFormat:SetPattern("$prob", prob)
-- Name and quality
local rName, _, rQuality = Enchantrix.Util.GetReagentInfo(result)
local _, _, _, color = GetItemQualityColor(rQuality or 0)
tooltipFormat:SetPattern("|q", color or "|cffcccc33")
if (not rName) then rName = "item:"..result; end
tooltipFormat:SetPattern("$name", rName)
-- Rate is always unity here (not really 1, but handled in the probability)
tooltipFormat:SetPattern("$rate", "")
-- Store this line and sort key
local line = tooltipFormat:GetString(false) -- no counts here
table.insert(lines, {str = line, sort = resYield})
end
-- multiply values by the number of items in this stack
local groups = count / 5;
totalHSP = totalHSP * groups;
totalMed = totalMed * groups;
totalMkt = totalMkt * groups;
totalFive = totalFive * groups;
tooltip:SetColor(0.8,0.8,0.2);
if (Enchantrix.Settings.GetSetting('TooltipProspectMats')) then
-- Header
local totalText = ""
tooltip:AddLine(_ENCH('FrmtProspectInto')..totalText, nil, embed);
-- Sort in order of decreasing probability before adding to tooltip
table.sort(lines, function(a, b) return a.sort > b.sort end)
for n, line in ipairs(lines) do
tooltip:AddLine(line.str, nil, embed)
if n >= 13 then break end -- Don't add more than 13 lines (1 Powder + 6 Uncommon + 6 Rare)
end
end
if (Enchantrix.Settings.GetSetting('TooltipProspectLevels')) then
local reqSkill = Enchantrix.Util.JewelCraftSkillRequiredForItem(link);
local userSkill = Enchantrix.Util.GetUserJewelCraftingSkill();
local deText = format(_ENCH("TooltipProspectLevel"), reqSkill );
if (userSkill < reqSkill) then
tooltip:AddLine(deText, nil, 0.8,0.1,0.1, embed); -- reddish
else
tooltip:AddLine(deText, nil, 0.1,0.8,0.1, embed); -- greenish
end
end
tooltip:SetColor(0.1,0.6,0.6);
if (Enchantrix.Settings.GetSetting('TooltipProspectValues')) then
if (AucAdvanced and Enchantrix.Settings.GetSetting('TooltipProspectShowAuctAdvValue') and totalFive > 0) then
tooltip:AddLine(_ENCH('FrmtProspectValueAuctVal'), totalFive, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipProspectShowAuctValueHSP') and totalHSP > 0) then
tooltip:AddLine(_ENCH('FrmtProspectValueAuctHsp'), totalHSP, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipProspectShowAuctValueMedian') and totalMed > 0) then
tooltip:AddLine(_ENCH('FrmtProspectValueAuctMed'), totalMed, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipProspectShowBaselineValue') and totalMkt > 0) then
tooltip:AddLine(_ENCH('FrmtProspectValueMarket'), totalMkt, embed);
end
end
end
-- ccox - TODO WOTLK - change strings to milling, see if this can share code with prospecting!
-- probably not
local function millingTooltip(prospect, tooltip, name, link, quality, count)
local embed = Enchantrix.Settings.GetSetting('ToolTipEmbedInGameTip')
local lines
local totalFive = {}
local totalHSP, totalMed, totalMkt, totalFive = 0,0,0,0
local totalNumber, totalQuantity
for result, resYield in pairs( prospect ) do
if (not lines) then lines = {} end
local style, extra = Enchantrix.Util.GetPricingModel();
local hsp, med, mkt, five = Enchantrix.Util.GetReagentPrice(result,extra)
local resHSP, resMed, resMkt, resFive = (hsp or 0)*resYield, (med or 0)*resYield, (mkt or 0)*resYield, (five or 0)*resYield
totalHSP = totalHSP + resHSP
totalMed = totalMed + resMed
totalMkt = totalMkt + resMkt
totalFive = totalFive + resFive
-- Probabilities
local prob = tostring( resYield * 100 )
tooltipFormat:SetPattern("$prob", prob)
-- Name and quality
local rName, _, rQuality = Enchantrix.Util.GetReagentInfo(result)
local _, _, _, color = GetItemQualityColor(rQuality or 0)
tooltipFormat:SetPattern("|q", color or "|cffcccc33")
if (not rName) then rName = "item:"..result; end
tooltipFormat:SetPattern("$name", rName)
-- Rate is always unity here (not really 1, but handled in the probability)
tooltipFormat:SetPattern("$rate", "")
-- Store this line and sort key
local line = tooltipFormat:GetString(false) -- no counts here
table.insert(lines, {str = line, sort = resYield})
end
-- multiply values by the number of items in this stack
local groups = count / 5;
totalHSP = totalHSP * groups;
totalMed = totalMed * groups;
totalMkt = totalMkt * groups;
totalFive = totalFive * groups;
tooltip:SetColor(0.8,0.8,0.2)
if (Enchantrix.Settings.GetSetting('TooltipMillingMats')) then
-- Header
local totalText = ""
tooltip:AddLine(_ENCH('FrmtMillsInto')..totalText, nil, embed);
-- Sort in order of decreasing probability before adding to tooltip
table.sort(lines, function(a, b) return a.sort > b.sort end)
for n, line in ipairs(lines) do
tooltip:AddLine(line.str, nil, embed)
if n >= 13 then break end -- Don't add more than 13 lines (1 Powder + 6 Uncommon + 6 Rare)
end
end
if (Enchantrix.Settings.GetSetting('TooltipMillingLevels')) then
local reqSkill = Enchantrix.Util.InscriptionSkillRequiredForItem(link);
local userSkill = Enchantrix.Util.GetUserInscriptionSkill();
local deText = format(_ENCH("TooltipMillingLevel"), reqSkill );
if (userSkill < reqSkill) then
tooltip:AddLine(deText, nil, 0.8,0.1,0.1, embed); -- reddish
else
tooltip:AddLine(deText, nil, 0.1,0.8,0.1, embed); -- greenish
end
end
tooltip:SetColor(0.1,0.6,0.6)
if (Enchantrix.Settings.GetSetting('TooltipMillingValues')) then
if (AucAdvanced and Enchantrix.Settings.GetSetting('TooltipMillingShowAuctAdvValue') and totalFive > 0) then
tooltip:AddLine(_ENCH('FrmtMillingValueAuctVal'), totalFive, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipMillingShowAuctValueHSP') and totalHSP > 0) then
tooltip:AddLine(_ENCH('FrmtMillingValueAuctHsp'), totalHSP, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipMillingShowAuctValueMedian') and totalMed > 0) then
tooltip:AddLine(_ENCH('FrmtMillingValueAuctMed'), totalMed, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipProspectShowBaselineValue') and totalMkt > 0) then
tooltip:AddLine(_ENCH('FrmtMillingValueMarket'), totalMkt, embed);
end
end
end
function itemTooltip(tooltip, name, link, itemType, itemId, quality, count)
if Enchantrix.Settings.GetSetting('ModTTShow') and not IsAltKeyDown() then
return
end
-- see if this is a simple reagent produced from disenchanting, prospecting or milling
if ( Enchantrix.Settings.GetSetting('TooltipShowMatSources') ) then
local deReagent = Enchantrix.Constants.ReverseDisenchantLevelList[ itemId ]
if (deReagent) then
local lowest = deReagent[1]
local highest = deReagent[2]
if (lowest and highest) then
local deText = format( _ENCH('FrmtDEItemLevels'), lowest, highest )
tooltip:SetColor(0.8,0.8,0.2);
tooltip:AddLine(deText, nil, embed)
return
end
end
local prospectGem = Enchantrix.Constants.ReverseProspectingSources[ itemId ]
if (prospectGem) then
local oreCount = #prospectGem
local oreString = Enchantrix.Util.GetReagentInfo( prospectGem[1] )
for index = 2, oreCount, 1 do
oreString = oreString..", "..Enchantrix.Util.GetReagentInfo( prospectGem[ index ] )
end
local prospectText = format( _ENCH('FrmtProspectFrom'), oreString )
tooltip:SetColor(0.8,0.8,0.2);
tooltip:AddLine( prospectText, nil, embed)
return
end
local inkList = Enchantrix.Constants.ReverseInkList[ itemId ]
if (inkList) then
local pigmentString = Enchantrix.Util.GetReagentInfo( inkList[1] )
local inkText = format( _ENCH('FrmtInkFrom'), pigmentString )
tooltip:SetColor(0.8,0.8,0.2);
tooltip:AddLine(inkText, nil, embed)
return
end
end
-- first, see if this is a prospectable item (short list)
local prospect = Enchantrix.Storage.GetItemProspects(link)
if (prospect and Enchantrix.Settings.GetSetting('TooltipShowProspecting')) then
prospectTooltip(prospect, tooltip, name, link, quality, count)
return
end
-- next, see if this is a millable item (short list)
local milling = Enchantrix.Storage.GetItemMilling(link)
if (milling and Enchantrix.Settings.GetSetting('TooltipShowMilling')) then
millingTooltip(milling, tooltip, name, link, quality, count)
return
end
-- then see if it's disenchantable
local data = Enchantrix.Storage.GetItemDisenchants(link)
if not data then
-- error message would have been printed inside GetItemDisenchants
return
end
local lines
local total = data.total
local totalFive = {}
local totalHSP, totalMed, totalMkt, totalFive = 0,0,0,0
local totalNumber, totalQuantity
local allFixed = true
if (total and total[1] > 0) then
totalNumber, totalQuantity = unpack(total)
for result, resData in pairs(data) do
if (result ~= "total") then
if (not lines) then lines = {} end
local resNumber, resQuantity = unpack(resData)
local style, extra = Enchantrix.Util.GetPricingModel()
local hsp, med, mkt, five, fix = Enchantrix.Util.GetReagentPrice(result, extra)
local resProb, resCount = resNumber/totalNumber, resQuantity/resNumber
local resYield = resProb * resCount; -- == resQuantity / totalNumber;
local resHSP, resMed, resMkt, resFive, resFix = (hsp or 0)*resYield, (med or 0)*resYield, (mkt or 0)*resYield, (five or 0)*resYield, (fix or 0)*resYield
if (fix) then
resHSP, resMed, resMkt, resFive = resFix,resFix,resFix,resFix
else
allFixed = false
end
totalHSP = totalHSP + resHSP
totalMed = totalMed + resMed
totalMkt = totalMkt + resMkt
totalFive = totalFive + resFive
local prob = 100 * resProb
-- Probabilities
tooltipFormat:SetPattern("$prob", tostring(prob))
-- Name and quality
local rName, _, rQuality = Enchantrix.Util.GetReagentInfo(result)
local _, _, _, color = GetItemQualityColor(rQuality or 0)
tooltipFormat:SetPattern("|q", color or "|cffcccc33")
if (not rName) then rName = "item:"..result; end
tooltipFormat:SetPattern("$name", rName)
-- Rate
tooltipFormat:SetPattern("$rate", ("x%0.1f"):format(resCount))
-- Store this line and sort key
local line = tooltipFormat:GetString()
table.insert(lines, {str = line, sort = prob})
end
end
else
return
end
-- normally disenchanting deals with single items
-- but the appraiser window can show multiple items and wants a value for the group
totalHSP = totalHSP * count;
totalMed = totalMed * count;
totalMkt = totalMkt * count;
totalFive = totalFive * count;
local embed = Enchantrix.Settings.GetSetting('ToolTipEmbedInGameTip')
tooltip:SetColor(0.8,0.8,0.2);
if (Enchantrix.Settings.GetSetting('TooltipShowDisenchantMats')) then
-- Header
local totalText = ""
tooltip:AddLine(_ENCH('FrmtDisinto')..totalText, nil, embed);
-- Sort in order of decreasing probability before adding to tooltip
table.sort(lines, function(a, b) return a.sort > b.sort end)
for n, line in ipairs(lines) do
tooltip:AddLine(line.str, nil, embed)
if n >= 5 then break end -- Don't add more than 5 lines
end
end
if (Enchantrix.Settings.GetSetting('TooltipShowDisenchantLevel')) then
local reqSkill = Enchantrix.Util.DisenchantSkillRequiredForItem(link);
local userSkill = Enchantrix.Util.GetUserEnchantingSkill();
local deText = format(_ENCH("TooltipShowDisenchantLevel"), reqSkill );
if (userSkill < reqSkill) then
tooltip:AddLine(deText, nil, 0.8,0.1,0.1, embed); -- reddish
else
tooltip:AddLine(deText, nil, 0.1,0.8,0.1, embed); -- greenish
end
end
tooltip:SetColor(0.1,0.6,0.6);
if (Enchantrix.Settings.GetSetting('TooltipShowValues')) then
if (allFixed) then
tooltip:AddLine(_ENCH('FrmtValueFixedVal'), totalHSP, embed);
else
if (AucAdvanced and Enchantrix.Settings.GetSetting('TooltipShowAuctAdvValue') and totalFive > 0) then
tooltip:AddLine(_ENCH('FrmtValueAuctVal'), totalFive, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipShowAuctValueHSP') and totalHSP > 0) then
tooltip:AddLine(_ENCH('FrmtValueAuctHsp'), totalHSP, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipShowAuctValueMedian') and totalMed > 0) then
tooltip:AddLine(_ENCH('FrmtValueAuctMed'), totalMed, embed);
end
if (Enchantrix.Settings.GetSetting('TooltipShowBaselineValue') and totalMkt > 0) then
tooltip:AddLine(_ENCH('FrmtValueMarket'), totalMkt, embed);
end
end
end
end
-- using the Trade APIs
local function getReagentsFromTradeFrame(craftIndex)
local reagentList = {}
local numReagents = GetTradeSkillNumReagents(craftIndex)
for i = 1, numReagents do
local link = GetTradeSkillReagentItemLink(craftIndex, i)
if link then
local hlink = link:match("|H([^|]+)|h")
local reagentName, reagentTexture, reagentCount, playerReagentCount = GetTradeSkillReagentInfo(craftIndex, i)
table.insert(reagentList, {hlink, reagentCount})
end
end
return reagentList
end
-- NOTE - ccox - to match non enchants, I'd need to search for "Requires (.+)"
local function getReagentsFromTooltip(frame)
local frameName = frame:GetName()
local nLines = frame:NumLines()
local reagents
-- Find reagents line ("Reagents: ...")
for i = 1, nLines do
local text = _G[frameName.."TextLeft"..i]:GetText()
-- text:find("Reagents: (.+)")
local _, _, r = text:find(_ENCH('PatReagents'))
if r then
reagents = r
--Enchantrix.Util.DebugPrintQuick("matched reagents line ", reagents )
break
end
end
if not reagents then return end
local reagentList = {}
local name, quality, color, hlink
-- Process reagents separated by ","
for reagent in Enchantrix.Util.Spliterator(reagents, ",") do
-- Chomp whitespace
reagent = reagent:gsub("^%s*", "") -- remove leading spaces
reagent = reagent:gsub("%s*$", "") -- remove trailing spaces
--reagent = reagent:gsub("%c*", "") -- remove all control characters
-- ...and newlines
reagent = reagent:gsub("%|n", "") -- remove blizzard style newline codes
-- ...and color codes
reagent = reagent:gsub("^%|c%x%x%x%x%x%x%x%x", "")
reagent = reagent:gsub("%|r$", "") -- remove blizzard style return at end of line
-- NOTE - ccox - if reagents aren't being found, Blizzard may have added more formatting that needs to be removed above
-- Enchantrix.Util.DebugPrintQuick("cleaned reagent string ", reagent )
-- Get and chomp counts, e.g "Strange Dust (2)"
local _, _, count = reagent:find("%((%d+)%)$")
if count then
reagent = reagent:gsub("%s*%(%d+%)$", "")
count = tonumber(count)
else
count = 1
end
hlink = Enchantrix.Util.GetLinkFromName(reagent)
if hlink then
table.insert(reagentList, {hlink, count})
else
return
end
end
return reagentList
end
-- this can be used by non enchanters when clicking on an enchant tooltip
-- this WAS also used inside the enchanting/crafting trade window, but that broke when the new tooltip library was added
function enchantTooltip(tooltip, name, link, isItem)
-- TODO - ccox - for items, get the number made! But what about items with random yield?
-- TODO - ccox - this really should recursively descend crafted items for true costs not AH prices
-- most of the time they'll be in the cache, so it won't add a lot of time to the search
local craftIndex = nil
local tradeIndex = nil
local reagentList
local frame = tooltip:GetFrame()
-- if it's an item, try our cache
if isItem then
reagentList = Enchantrix.Util.GetCraftReagentInfoFromCache(name)
end
if not reagentList or (#reagentList < 1) then
-- clean up the craft item string
--Enchantrix.Util.DebugPrintQuick("original name is ", name )
name = name:gsub("^%a+:", "") -- remove crafting type "Enchanting:"
name = name:gsub("^%s*", "") -- remove leading spaces
--Enchantrix.Util.DebugPrintQuick("cleaned name is ", name )
for i = GetFirstTradeSkill(), GetNumTradeSkills() do
local tradeName = GetTradeSkillInfo(i);
if name == tradeName then
tradeIndex = i
break
end
end
if tradeIndex then
reagentList = getReagentsFromTradeFrame(tradeIndex)
else
-- if all else fails
reagentList = getReagentsFromTooltip(frame)
end
if not reagentList or (#reagentList < 1) then
--Enchantrix.Util.DebugPrintQuick("no reagents found for ", link, " in ", name )
return
end
-- now save it to the cache
if isItem then
Enchantrix.Util.SaveCraftReagentInfoToCache( name, reagentList );
end
end
-- Append additional reagent info
for _, reagent in ipairs(reagentList) do
local rName, _, rQuality = Enchantrix.Util.GetReagentInfo(reagent[1])
local style, extra = Enchantrix.Util.GetPricingModel();
local hsp, median, market, five, fix = Enchantrix.Util.GetReagentPrice(reagent[1],extra)
local _, _, _, color = GetItemQualityColor(rQuality)
reagent[1] = rName
table.insert(reagent, rQuality)
table.insert(reagent, color)
if fix then
table.insert(reagent, fix)
elseif AucAdvanced and five and five > 0 then
table.insert(reagent, five)
else
table.insert(reagent, hsp)
end
end
local NAME, COUNT, QUALITY, COLOR, PRICE = 1, 2, 3, 4, 5
-- Sort by rarity and price
table.sort(reagentList, function(a,b)
if (not b) or (not a) then return end
return ((b[QUALITY] or -1) < (a[QUALITY] or -1)) or ((b[PRICE] or 0) < (a[PRICE] or 0))
end)
-- Header
tooltip:SetColor(0.7,0.7,0.1)
local embed = Enchantrix.Settings.GetSetting('ToolTipEmbedInGameTip');
if not embed and not isItem then
local hLink = link:match("|H([^|]+)|h")
if not hLink then hLink = link end
tooltip:AddLine(hLink)
end
tooltip:AddLine(_ENCH('FrmtSuggestedPrice'), 0.8,0.8,0.2, embed)
local price = 0
local unknownPrices
-- Add reagent list to tooltip and sum reagent prices
for _, reagent in pairs(reagentList) do
local line = " "
if reagent[COLOR] then
line = line..reagent[COLOR]
end
line = line..reagent[NAME]
if reagent[COLOR] then
line = line.."|r"
end
line = line.." x"..reagent[COUNT]
if reagent[COUNT] > 1 and reagent[PRICE] then
line = line.." ".._ENCH('FrmtPriceEach'):format(AucAdvanced.Coins(Enchantrix.Util.Round(reagent[PRICE], 3)))
tooltip:AddLine(line, Enchantrix.Util.Round(reagent[PRICE] * reagent[COUNT], 3), embed)
price = price + reagent[PRICE] * reagent[COUNT]
elseif reagent[PRICE] then
tooltip:AddLine(line, Enchantrix.Util.Round(reagent[PRICE], 3), embed)
price = price + reagent[PRICE]
else
tooltip:AddLine(line, nil, embed)
unknownPrices = true
end
end
-- Totals
tooltip:SetColor(0.8,0.8,0.2)
if price > 0 then
tooltip:AddLine(_ENCH('FrmtTotal'), Enchantrix.Util.Round(price, 2.5), embed)
-- add barker line, if barker is loaded
if (Barker and Barker.Settings.GetSetting('barker')) then
local margin = Barker.Settings.GetSetting("barker.profit_margin")
local profit = price * margin * 0.01
profit = math.min(profit, Barker.Settings.GetSetting("barker.highest_profit"))
local barkerPrice = Enchantrix.Util.Round(price + profit)
-- "Barker Price (%d%% margin)"
tooltip:AddLine(_ENCH('FrmtBarkerPrice'):format(Barker.Util.Round(margin)), barkerPrice, embed)
end
if not Enchantrix.State.Auctioneer_Loaded then
tooltip:AddLine(_ENCH('FrmtWarnAuctNotLoaded'), 0.6,0.6,0.1, embed)
end
if unknownPrices then
tooltip:AddLine(_ENCH('FrmtWarnPriceUnavail'), 0.6,0.6,0.1, embed)
end
else
tooltip:AddLine(_ENCH('FrmtWarnNoPrices'), 0.6,0.6,0.1, embed)
end
end
function hookItemTooltip(tipFrame, item, count, name, link, quality)
if ((not Enchantrix.Settings.GetSetting('all'))
or (not Enchantrix.Settings.GetSetting('TooltipShowReagents'))) then return end
-- we're getting nil links in here somehow, just return if that happens
if (link == nil) then return end
tooltip:SetFrame(tipFrame)
-- ccox - tooltip:DecodeLink will only work with type "item"
local itemType, itemId = tooltip:DecodeLink(link)
if itemType == "item" then
name = name or ""
-- safety, some other addons pass in strings for count by mistake
count = tonumber(count) or 1
itemTooltip(tooltip, name, link, itemType, itemId, quality, count)
if (Enchantrix.Settings.GetSetting('ShowAllCraftReagents')) then
enchantTooltip(tooltip, name, link, true)
end
end
tooltip:ClearFrame(tipFrame)
end
function hookSpellTooltip(tipFrame, link, name, rank)
if ((not Enchantrix.Settings.GetSetting('all'))
or (not Enchantrix.Settings.GetSetting('TooltipShowReagents'))) then return end
-- we're getting nil links in here somehow, just return if that happens
if (link == nil) then return end
tooltip:SetFrame(tipFrame)
if link:sub(0, 8) == "enchant:" or link:sub(0, 6) == "spell:" then
link = "|H"..link.."|h|cffffffff["..name.."]|r|h"
end
-- ccox - tooltip:DecodeLink will only work with type "item", returning nil for any other link type
-- so we have to do this the hard way
local itemType, itemId = tooltip:BreakHyperlink("H", 1, strsplit("|", link))
if itemType == "enchant" or itemType == "spell" then
name = name or ""
enchantTooltip(tooltip, name, link, false)
end
tooltip:ClearFrame(tipFrame)
end
Enchantrix.Tooltip = {
Revision = "$Revision: 4933 $",
AddonLoaded = addonLoaded,
Format = tooltipFormat,
}