vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        Auctioneer Addon for World of Warcraft(tm).
        Version: 3.9.0.1000 (Kangaroo)
        Revision: $Id: AucTooltip.lua 874 2006-05-21 20:36:12Z mentalpower $

        Auctioneer tooltip functions.
        Functions to present and draw the tooltips.

        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.
]]

--Local function prototypes
local hookTooltip


function hookTooltip(funcVars, retVal, frame, name, link, quality, count)
        EnhTooltip.DebugPrint("Displaying "..name)
        if (not link) then EnhTooltip.DebugPrint("No link was passed to the client");  return; end

        -- nothing to do, if auctioneer is disabled
        if (not Auctioneer.Command.GetFilter("all")) then
                return;
        end;

        if EnhTooltip.LinkType(link) ~= "item" then return end

        local auctKey = Auctioneer.Util.GetAuctionKey();

        -- initialize local variables
        local itemID, randomProp, enchant, uniqID, lame = EnhTooltip.BreakLink(link);
        local itemKey = itemID..":"..randomProp..":"..enchant;
        local embedded = Auctioneer.Command.GetFilter('embed');

        -- OUTPUT: seperator line
        if (embedded) then
                if (Auctioneer.Command.GetFilter('show-embed-blankline')) then
                        EnhTooltip.AddLine(" ", nil, embedded);
                end
        else
                EnhTooltip.AddLine(name, nil, embedded);
                EnhTooltip.LineQuality(quality);
        end

        if (Auctioneer.Command.GetFilter('show-link')) then
                -- OUTPUT: show item link
                EnhTooltip.AddLine("Link: " .. itemID .. ":" .. enchant .. ":" .. randomProp .. ":" .. uniqID, nil, embedded);
                EnhTooltip.LineQuality(quality);
        end

        local itemInfo = nil;

        -- show item info
        if (itemID > 0) then
                frame.eDone = 1;
                local auctionPriceItem = Auctioneer.Core.GetAuctionPriceItem(itemKey, auctKey);
                local aCount,minCount,minPrice,bidCount,bidPrice,buyCount,buyPrice = Auctioneer.Core.GetAuctionPrices(auctionPriceItem.data);

                -- show auction info
                if (aCount == 0) then
                        -- OUTPUT: "Never seen at auction"
                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoNever'), _AUCT('TextAuction')), nil, embedded);
                        EnhTooltip.LineColor(0.5, 0.8, 0.5);
                else -- (aCount > 0)
                        -- calculate auction values
                        local avgMin = math.floor(minPrice / minCount);

                        local bidPct = math.floor(bidCount / minCount * 100);
                        local avgBid = 0;
                        if (bidCount > 0) then
                                avgBid = math.floor(bidPrice / bidCount);
                        end

                        local buyPct = math.floor(buyCount / minCount * 100);
                        local avgBuy = 0;
                        if (buyCount > 0) then
                                avgBuy = math.floor(buyPrice / buyCount);
                        end

                        local median, medCount = Auctioneer.Statistic.GetUsableMedian(itemKey, auctKey);

                        if (Auctioneer.Command.GetFilter('show-average')) then -- show item's average auction price
                                -- OUTPUT: "Seen [aCount] times at auction total"
                                EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoSeen'), aCount), nil, embedded);
                                EnhTooltip.LineColor(0.5,0.8,0.1);
                                if (not Auctioneer.Command.GetFilter('show-verbose')) then -- default mode
                                        -- OUTPUT: "[avgMin] min/[avgBuy] BO ([avgBid] bid)"
                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoAverage'), EnhTooltip.GetTextGSC(avgMin), EnhTooltip.GetTextGSC(avgBuy), EnhTooltip.GetTextGSC(avgBid)), nil, embedded);
                                        EnhTooltip.LineColor(0.1,0.8,0.5);
                                else -- verbose mode
                                        if (count > 1) then
                                                -- OUTPUT: "Averages for [count] items:"
                                                EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoHeadMulti'), count), nil, embedded);
                                                EnhTooltip.LineColor(0.4,0.5,1.0);
                                                -- OUTPUT: "  Minimum ([avgMin] ea)"
                                                EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoMinMulti'), EnhTooltip.GetTextGSC(avgMin)), avgMin*count, embedded);
                                                EnhTooltip.LineColor(0.4,0.5,0.8);
                                                if (Auctioneer.Command.GetFilter('show-stats')) then -- show buyout/bidded percentages
                                                        -- OUTPUT: "  Bidded ([bidPct]%, [avgBid] ea)"
                                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBidMulti'), bidPct.."%, ", EnhTooltip.GetTextGSC(avgBid)), avgBid*count, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.85);
                                                        -- OUTPUT: "  Buyout ([buyPct]%, [avgBuy] ea)"
                                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBuyMulti'), buyPct.."%, ", EnhTooltip.GetTextGSC(avgBuy)), avgBuy*count, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.9);
                                                else -- don't show buyout/bidded percentages
                                                        -- OUTPUT: "  Bidded ([avgBid] ea)"
                                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBidMulti'), "", EnhTooltip.GetTextGSC(avgBid)), avgBid*count, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.85);
                                                        -- OUTPUT: "  Buyout ([avgBuy] ea)"
                                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBuyMulti'), "", EnhTooltip.GetTextGSC(avgBuy)), avgBuy*count, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.9);
                                                end
                                                if (median) then
                                                        -- OUTPUT: "  Buyout median"
                                                        EnhTooltip.AddLine(_AUCT('FrmtInfoBuymedian'), median * count, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.95);
                                                end
                                        else -- (count = 0 | 1)
                                           -- OUTPUT: "Averages for this item:"
                                                EnhTooltip.AddLine(_AUCT('FrmtInfoHeadOne'), nil, embedded);
                                                EnhTooltip.LineColor(0.4,0.5,1.0);
                                                -- OUTPUT: "  Minimum bid"
                                                EnhTooltip.AddLine(_AUCT('FrmtInfoMinOne'), avgMin, embedded);
                                                EnhTooltip.LineColor(0.4,0.5,0.8);
                                                if (Auctioneer.Command.GetFilter('show-stats')) then -- show buyout/bidded percentages
                                                        -- OUTPUT: "  Bidded [bidPct]%"
                                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBidOne'), " "..bidPct.."%"), avgBid, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.85);
                                                        -- OUTPUT: "  Buyout [buyPct]%"
                                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBuyOne'), " "..buyPct.."%"), avgBuy, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.9);
                                                else -- don't show buyout/bidded percentages
                                                   -- OUTPUT: "  Bidded [bidPct]%"
                                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBidOne'), ""), avgBid, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.85);
                                                        -- OUTPUT: "  Buyout [buyPct]%"
                                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBuyOne'), ""), avgBuy, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.9);
                                                end
                                                if (median) then
                                                        -- OUTPUT: "  Buyout median"
                                                        EnhTooltip.AddLine(_AUCT('FrmtInfoBuymedian'), median, embedded);
                                                        EnhTooltip.LineColor(0.4,0.5,0.95);
                                                end
                                        end
                                end

                                if median and Auctioneer.Command.GetFilter('show-median') then -- show item's median buyout price
                                        local historicalMedian, historicalMedCount = Auctioneer.Statistic.GetItemHistoricalMedianBuyout(itemKey, auctKey);
                                        local snapshotMedian, snapshotMedCount = Auctioneer.Statistic.GetItemSnapshotMedianBuyout(itemKey, auctKey);
                                        if historicalMedian and historicalMedCount > Auctioneer.Util.NullSafe(snapshotMedCount)  then
                                                -- OUTPUT: "Last [historicalMedCount], median BO (ea)"
                                                EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoHistmed'), historicalMedCount), historicalMedian, embedded)
                                                EnhTooltip.LineColor(0.1,0.8,0.5);
                                        end
                                        if snapshotMedian then
                                                -- OUTPUT: "Scanned [snapshotMedCount], median BO (ea)"
                                                EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoSnapmed'), snapshotMedCount), snapshotMedian, embedded)
                                                EnhTooltip.LineColor(0.1,0.8,0.5);
                                        end
                                end
                        end -- if(Auctioneer.Command.GetFilter('show-average')) - show item's average auction price

                        -- seperate line for suggested auction price (for clarification, even if the values have already been shown somewhere else
                        if (Auctioneer.Command.GetFilter('show-suggest')) then -- show item's suggested auction price
                                local hsp, histCount, market, warn, nexthsp, nextwarn = Auctioneer.Statistic.GetHSP(itemKey, auctKey);
                                if hsp == 0 and buyCount > 0 then
                                        hsp = math.floor(buyPrice / buyCount); -- use mean buyout if median not available
                                end
                                local discountBidPercent = tonumber(Auctioneer.Command.GetFilterVal('pct-bidmarkdown'));
                                local countFix = count
                                if countFix == 0 then
                                        countFix = 1
                                end
                                local buyPrice = Auctioneer.Statistic.RoundDownTo95(Auctioneer.Util.NullSafe(hsp) * countFix);
                                local bidPrice = Auctioneer.Statistic.RoundDownTo95(Auctioneer.Statistic.SubtractPercent(buyPrice, discountBidPercent));
                                if (count > 1) then
                                        -- OUTPUT: "Suggested price for your [count] stack: [bidPrice] min/[buyPrice] BO"
                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoSgststx'), count, EnhTooltip.GetTextGSC(bidPrice, true), EnhTooltip.GetTextGSC(buyPrice, true)), nil, embedded);
                                        EnhTooltip.LineColor(0.5,0.5,0.8);
                                else -- count = 0 | 1
                                        -- OUTPUT: "Suggested price: [bidPrice] min/[buyPrice] BO"
                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoSgst'), EnhTooltip.GetTextGSC(bidPrice, true), EnhTooltip.GetTextGSC(buyPrice, true)), nil, embedded);
                                        EnhTooltip.LineColor(0.5,0.5,0.8);
                                end
                                EnhTooltip.AddLine(warn, nil, embedded);
                                local cHex, cRed, cGreen, cBlue = Auctioneer.Util.GetWarnColor(warn);
                                EnhTooltip.LineColor(cRed, cGreen, cBlue);
                        end
                        if (not Auctioneer.Command.GetFilter('show-verbose')) then
                                if (Auctioneer.Command.GetFilter('show-stats')) then -- show buyout/bidded percentages
                                        -- OUTPUT: "[bidPct]% have bid, [buyPct]% have BO"
                                        EnhTooltip.AddLine(string.format(_AUCT('FrmtInfoBidrate'), bidPct, buyPct), nil, embedded);
                                        EnhTooltip.LineColor(0.1,0.5,0.8);
                                end
                        end
                end -- (aCount > 0)

                local also = Auctioneer.Command.GetFilterVal("also");
                if (Auctioneer.Util.IsValidAlso(also)) and (also ~= "off") then

                        if (also == "opposite") then
                                also = Auctioneer.Util.GetOppositeKey();

                        elseif (also == "neutral") then
                                also = Auctioneer.Util.GetNeutralKey();

                        elseif (also == "home") then
                                also = Auctioneer.Util.GetHomeKey();
                        end

                        if (also == auctKey) then return end;

                        local auctionPriceItem = Auctioneer.Core.GetAuctionPriceItem(itemKey, also);
                        local aCount,minCount,minPrice,bidCount,bidPrice,buyCount,buyPrice = Auctioneer.Core.GetAuctionPrices(auctionPriceItem.data);

                        if (aCount == 0) then
                                EnhTooltip.AddLine(string.format(">> ".._AUCT('FrmtInfoNever'), also), nil, embedded);
                                EnhTooltip.LineColor(0.5,0.8,0.1);
                        else
                                -- calculate auction values
                                local avgMin = math.floor(minPrice / minCount);

                                local bidPct = math.floor(bidCount / minCount * 100);
                                local avgBid = 0;
                                if (bidCount > 0) then
                                        avgBid = math.floor(bidPrice / bidCount);
                                end

                                local buyPct = math.floor(buyCount / minCount * 100);
                                local avgBuy = 0;
                                if (buyCount > 0) then
                                        avgBuy = math.floor(buyPrice / buyCount);
                                end

                                if (Auctioneer.Command.GetFilter('show-average')) then
                                        EnhTooltip.AddLine(string.format(">> ".._AUCT('FrmtInfoAlsoseen'), aCount, also), nil, embedded);
                                        EnhTooltip.LineColor(0.5,0.8,0.1);
                                        EnhTooltip.AddLine(string.format(">> ".._AUCT('FrmtInfoAverage'), EnhTooltip.GetTextGSC(avgMin), EnhTooltip.GetTextGSC(avgBuy), EnhTooltip.GetTextGSC(avgBid)), nil, embedded);
                                        EnhTooltip.LineColor(0.1,0.8,0.5);
                                end

                                if (Auctioneer.Command.GetFilter('show-stats')) then
                                        EnhTooltip.AddLine(string.format(">> ".._AUCT('FrmtInfoBidrate'), bidPct, buyPct), nil, embedded);
                                        EnhTooltip.LineColor(0.1,0.5,0.8);
                                end

                                -- seperate line for suggested auction price (for clarification, even if the values have already been shown somewhere else
                                if (Auctioneer.Command.GetFilter('show-suggest')) then -- show item's suggested auction price
                                        local hsp, histCount, market, warn, nexthsp, nextwarn = Auctioneer.Statistic.GetHSP(itemKey, also);
                                        if hsp == 0 and buyCount > 0 then
                                                hsp = math.floor(buyPrice / buyCount); -- use mean buyout if median not available
                                        end
                                        local discountBidPercent = tonumber(Auctioneer.Command.GetFilterVal('pct-bidmarkdown'));
                                        local countFix = count
                                        if countFix == 0 then
                                                countFix = 1
                                        end
                                        local buyPrice = Auctioneer.Statistic.RoundDownTo95(Auctioneer.Util.NullSafe(hsp) * countFix);
                                        local bidPrice = Auctioneer.Statistic.RoundDownTo95(Auctioneer.Statistic.SubtractPercent(buyPrice, discountBidPercent));
                                        if (count > 1) then
                                                -- OUTPUT: "Suggested price for your [count] stack: [bidPrice] min/[buyPrice] BO"
                                                EnhTooltip.AddLine(string.format(">> ".._AUCT('FrmtInfoSgststx'), count, EnhTooltip.GetTextGSC(bidPrice, true), EnhTooltip.GetTextGSC(buyPrice, true)), nil, embedded);
                                                EnhTooltip.LineColor(0.5,0.5,0.8);
                                        else -- count = 0 | 1
                                                -- OUTPUT: "Suggested price: [bidPrice] min/[buyPrice] BO"
                                                EnhTooltip.AddLine(string.format(">> ".._AUCT('FrmtInfoSgst'), EnhTooltip.GetTextGSC(bidPrice, true), EnhTooltip.GetTextGSC(buyPrice, true)), nil, embedded);
                                                EnhTooltip.LineColor(0.5,0.5,0.8);
                                        end
                                        EnhTooltip.AddLine(">> "..warn, nil, embedded);
                                        local cHex, cRed, cGreen, cBlue = Auctioneer.Util.GetWarnColor(warn);
                                        EnhTooltip.LineColor(cRed, cGreen, cBlue);
                                end
                        end
                end
        end
end

Auctioneer.Tooltip = {
        HookTooltip = hookTooltip,
}