⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enxtooltip.lua

📁 时间太紧了
💻 LUA
字号:
--[[	Enchantrix Addon for World of Warcraft(tm).	Version: 3.5.0.0917 (Platypus)	Revision: $Id: EnxTooltip.lua 911 2006-06-23 10:08:24Z aradan $	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 GLP.txt); if not, write to the Free Software		Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.]]-- Global functionslocal addonLoaded	-- Enchantrix.Tooltip.AddonLoaded()local tooltipFormat	-- Enchantrix.Tooltip.Format-- Local functionslocal itemTooltiplocal enchantTooltiplocal hookTooltipfunction addonLoaded()	-- Hook in new tooltip code	Stubby.RegisterFunctionHook("EnhTooltip.AddTooltip", 400, hookTooltip)endtooltipFormat = {	currentFormat = "fancy",	format = {		["fancy"] = {			-- counts = off			['off'] = "  $conf% |q$name|r $rate",			-- counts = on			['on'] = "  $conf% |q$name|r $rate |e(B=$bcount L=$lcount)|r",		},		["default"] = {			['off'] = "  $name: $prob% $rate",			['on'] = "  $name: $prob% $rate |e(B=$bcount L=$lcount)|r",		},	},	patterns = {		-- Strings		["$prob"]	= "",			-- Probability: "75"		["$conf"]	= "",			-- Confidence interval: "<1", "72-78", ">99"		["$count"]	= "",			-- Local + base counts: "51"		["$lcount"] = "",			-- Local count: "13"		["$bcount"] = "",			-- Base count: "38"		["$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)		if counts == nil then			counts = Enchantrix.Config.GetFilter('counts')		end		if counts then			this.format[fmt]['on'] = val		else			this.format[fmt]['off'] = val		end	end,	GetFormat = function(this, fmt, counts)		if not this.format[fmt] then return end		if counts == nil then			counts = Enchantrix.Config.GetFilter('counts')		end		if counts then			return this.format[fmt]['on']		else			return this.format[fmt]['off']		end	end,	GetString = function(this, counts)		local line		if counts == nil then			counts = Enchantrix.Config.GetFilter('counts')		end		if counts then			line = this.format[this.currentFormat]['on']		else			line = this.format[this.currentFormat]['off']		end		-- Replace patterns		for pat, repl in pairs(this.patterns) do			line = string.gsub(line, pat, repl or "")		end		return line	end,	SetPattern = function(this, pat, repl)		this.patterns[pat] = repl	end,}function itemTooltip(funcVars, retVal, frame, name, link, quality, count)	local embed = Enchantrix.Config.GetFilter('embed');	-- Check for disenchantable target	local id = Enchantrix.Util.GetItemIdFromLink(link)	if (not id or id == 0 or not Enchantrix.Util.IsDisenchantable(id)) then		return	end	local disenchantsTo = Enchantrix.Storage.GetItemDisenchants(Enchantrix.Util.GetSigFromLink(link), name, true);	-- Process the results	local totals = disenchantsTo.totals;	disenchantsTo.totals = nil;	if (totals and totals.total > 0) then		-- Terse mode		if Enchantrix.Config.GetFilter('terse') and not IsControlKeyDown() then			if Enchantrix.Config.GetFilter('valuate-hsp') and totals.hspValue > 0 then				EnhTooltip.AddLine(_ENCH('FrmtValueAuctHsp'), Enchantrix.Util.Round(totals.hspValue * totals.conf, 3), embed);				EnhTooltip.LineColor(0.1,0.6,0.6);			elseif Enchantrix.Config.GetFilter('valuate-median') and totals.medValue > 0 then				EnhTooltip.AddLine(_ENCH('FrmtValueAuctMed'), Enchantrix.Util.Round(totals.medValue * totals.conf, 3), embed);				EnhTooltip.LineColor(0.1,0.6,0.6);			elseif Enchantrix.Config.GetFilter('valuate-baseline') and totals.mktValue > 0 then				EnhTooltip.AddLine(_ENCH('FrmtValueMarket'), Enchantrix.Util.Round(totals.mktValue * totals.conf, 3), embed);				EnhTooltip.LineColor(0.1,0.6,0.6);			end			return		end		-- If it looks quirky, and we haven't disenchanted it, then ignore it...		if (totals.iCount + totals.biCount < 1) then return; end		-- Header		local total = ""		if (Enchantrix.Config.GetFilter('counts')) then			total = string.format(" |cff7f7f00(%d)|r", totals.total)		end		EnhTooltip.AddLine(_ENCH('FrmtDisinto')..total, nil, embed);		EnhTooltip.LineColor(0.8,0.8,0.2);		local lines = {}		for dSig, counts in pairs(disenchantsTo) do			local p = (counts.biCount + counts.iCount) / totals.total			local pmin, pmax = Enchantrix.Util.ConfidenceInterval(p, totals.total)			-- Probabilities			p, pmin, pmax = math.floor(p * 100 + 0.5), math.floor(pmin * 100 + 0.5), math.floor(pmax * 100 + 0.5)			tooltipFormat:SetPattern("$prob", tostring(p))			if pmin == 0 then				tooltipFormat:SetPattern("$conf", "<"..max(pmax, 1))			elseif pmax == 100 then				tooltipFormat:SetPattern("$conf", ">"..min(pmin, 99))			else				if pmin ~= pmax then					tooltipFormat:SetPattern("$conf", pmin.."-"..pmax)				else					tooltipFormat:SetPattern("$conf", tostring(p))				end			end			-- Counts			tooltipFormat:SetPattern("$count", tostring(counts.biCount + counts.iCount))			tooltipFormat:SetPattern("$lcount", tostring(counts.iCount))			tooltipFormat:SetPattern("$bcount", tostring(counts.biCount))			-- Name and quality			local name, _, quality = Enchantrix.Util.GetReagentInfo(dSig)			local _, _, _, color = GetItemQualityColor(quality or 0)			tooltipFormat:SetPattern("|q", color or "|cffcccc33")			tooltipFormat:SetPattern("$name", name or counts.name)			-- Rate			if counts.rate ~= 1 then				tooltipFormat:SetPattern("$rate", string.format("x%0.1f", counts.rate))			else				tooltipFormat:SetPattern("$rate", "")			end			-- Store this line and sort key			local line = tooltipFormat:GetString(Enchantrix.Config.GetFilter('counts'))			table.insert(lines,  {str = line, sort = pmin})		end		-- 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			EnhTooltip.AddLine(line.str, nil, embed)			EnhTooltip.LineColor(0.8, 0.8, 0.2);			if n >= 5 then break end -- Don't add more than 5 lines		end		if (Enchantrix.Config.GetFilter('valuate')) then			local confidence = totals.conf;			if (Enchantrix.Config.GetFilter('valuate-hsp') and totals.hspValue > 0) then				EnhTooltip.AddLine(_ENCH('FrmtValueAuctHsp'), Enchantrix.Util.Round(totals.hspValue * confidence, 3), embed);				EnhTooltip.LineColor(0.1,0.6,0.6);			end			if (Enchantrix.Config.GetFilter('valuate-median') and totals.medValue > 0) then				EnhTooltip.AddLine(_ENCH('FrmtValueAuctMed'), Enchantrix.Util.Round(totals.medValue * confidence, 3), embed);				EnhTooltip.LineColor(0.1,0.6,0.6);			end			if (Enchantrix.Config.GetFilter('valuate-baseline') and totals.mktValue > 0) then				EnhTooltip.AddLine(_ENCH('FrmtValueMarket'), Enchantrix.Util.Round(totals.mktValue * confidence, 3), embed);				EnhTooltip.LineColor(0.1,0.6,0.6);			end		end	endendlocal function getReagentsFromCraftFrame(craftIndex)	local reagentList = {}	local numReagents = GetCraftNumReagents(craftIndex)	for i = 1, numReagents do		local link = GetCraftReagentItemLink(craftIndex, i)		if link then			local hlink = EnhTooltip.HyperlinkFromLink(link)			local reagentName, reagentTexture, reagentCount, playerReagentCount = GetCraftReagentInfo(craftIndex, i)			table.insert(reagentList, {hlink, reagentCount})		end	end	return reagentListendlocal function getReagentsFromTooltip(frame)	local frameName = frame:GetName()	local nLines = frame:NumLines()	local reagents	-- Find reagents line ("Reagents: ...")	for i = 1, nLines do		local text = getglobal(frameName.."TextLeft"..i):GetText()		-- string.find(text, "Reagents: (.+)")		local _, _, r = string.find(text, _ENCH('PatReagents'))		if r then			reagents = r			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 = string.gsub(reagent, "^%s*", "")		reagent = string.gsub(reagent, "%s*$", "")		-- ...and color codes		reagent = string.gsub(reagent, "^%|c%x%x%x%x%x%x%x%x", "")		reagent = string.gsub(reagent, "%|r$", "")		-- Get and chomp counts, e.g "Strange Dust (2)"		local _, _, count = string.find(reagent, "%((%d+)%)$")		if count then			reagent = string.gsub(reagent, "%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 reagentListendfunction enchantTooltip(funcVars, retVal, frame, name, link)	local embed = Enchantrix.Config.GetFilter('embed');	local craftIndex	for i = 1, GetNumCrafts() do		local craftName = GetCraftInfo(i)		if name == craftName then			craftIndex = i			break		end	end	-- Get reagent list	local reagentList	if craftIndex then		reagentList = getReagentsFromCraftFrame(craftIndex)	else		reagentList = getReagentsFromTooltip(frame)	end	if not reagentList or table.getn(reagentList) < 1 then		return	end	-- Append additional reagent info	for _, reagent in ipairs(reagentList) do		local name, link, quality = Enchantrix.Util.GetReagentInfo(reagent[1])		local hsp, median, market = Enchantrix.Util.GetReagentPrice(reagent[1])		local _, _, _, color = GetItemQualityColor(quality)		reagent[1] = name		table.insert(reagent, quality)		table.insert(reagent, color)		table.insert(reagent, hsp)	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	if not embed then		local icon		if craftIndex then			icon = GetCraftIcon(craftIndex)		else			icon = "Interface\\Icons\\Spell_Holy_GreaterHeal"		end		EnhTooltip.SetIcon(icon)		EnhTooltip.AddLine(name)		EnhTooltip.AddLine(EnhTooltip.HyperlinkFromLink(link))	end	EnhTooltip.AddLine(_ENCH('FrmtSuggestedPrice'), nil, embed)	EnhTooltip.LineColor(0.8,0.8,0.2)	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.." "..string.format(_ENCH('FrmtPriceEach'), EnhTooltip.GetTextGSC(Enchantrix.Util.Round(reagent[PRICE], 3)))			EnhTooltip.AddLine(line, Enchantrix.Util.Round(reagent[PRICE] * reagent[COUNT], 3), embed)			price = price + reagent[PRICE] * reagent[COUNT]		elseif reagent[PRICE] then			EnhTooltip.AddLine(line, Enchantrix.Util.Round(reagent[PRICE], 3), embed)			price = price + reagent[PRICE]		else			EnhTooltip.AddLine(line, nil, embed)			unknownPrices = true		end		EnhTooltip.LineColor(0.7,0.7,0.1)	end	-- Barker price	local margin = Enchantrix_BarkerGetConfig("profit_margin")	local profit = price * margin * 0.01	profit = math.min(profit, Enchantrix_BarkerGetConfig("highest_profit"))	local barkerPrice = Enchantrix_RoundPrice(price + profit)	-- Totals	if price > 0 then		EnhTooltip.AddLine(_ENCH('FrmtTotal'), Enchantrix.Util.Round(price, 2.5), embed)		EnhTooltip.LineColor(0.8,0.8,0.2)		if Enchantrix.Config.GetFilter('barker') and (GetLocale() == "enUS") then			-- "Barker Price (%d%% margin)"			EnhTooltip.AddLine(string.format(_ENCH('FrmtBarkerPrice'), Enchantrix.Util.Round(margin)), barkerPrice, embed)			EnhTooltip.LineColor(0.8,0.8,0.2)		end		if not Enchantrix.State.Auctioneer_Loaded then			EnhTooltip.AddLine(_ENCH('FrmtWarnAuctNotLoaded'))			EnhTooltip.LineColor(0.6,0.6,0.1)		end		if unknownPrices then			EnhTooltip.AddLine(_ENCH('FrmtWarnPriceUnavail'))			EnhTooltip.LineColor(0.6,0.6,0.1)		end	else		EnhTooltip.AddLine(_ENCH('FrmtWarnNoPrices'))		EnhTooltip.LineColor(0.6,0.6,0.1)	endendfunction hookTooltip(funcVars, retVal, frame, name, link, quality, count)	-- nothing to do, if enchantrix is disabled	if (not Enchantrix.Config.GetFilter('all')) then		return	end	local ltype = EnhTooltip.LinkType(link)	if ltype == "item" then		itemTooltip(funcVars, retVal, frame, name, link, quality, count)	elseif ltype == "enchant" then		enchantTooltip(funcVars, retVal, frame, name, link)	endendEnchantrix.Tooltip = {	Revision		= "$Revision: 911 $",	AddonLoaded		= addonLoaded,	Format			= tooltipFormat,}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -