279 lines
9 KiB
Lua
279 lines
9 KiB
Lua
--[[
|
|
Informant - An addon for World of Warcraft that shows pertinent information about
|
|
an item in a tooltip when you hover over the item in the game.
|
|
Version: 5.9.4961 (WhackyWallaby)
|
|
Revision: $Id: InfTooltip.lua 4576 2009-12-12 21:11:20Z ccox $
|
|
URL: http://auctioneeraddon.com/dl/Informant/
|
|
|
|
Tooltip handler. Assumes the responsibility of filling the tooltip
|
|
with the user-selected information
|
|
|
|
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.
|
|
]]
|
|
Informant_RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Informant/InfTooltip.lua $", "$Rev: 4576 $")
|
|
|
|
local nilSafeString -- nilSafeString(String)
|
|
local whitespace -- whitespace(length)
|
|
local getFilter = Informant.Settings.GetSetting
|
|
local debugPrint
|
|
|
|
local tooltip = LibStub("nTipHelper:1")
|
|
|
|
function Informant.TooltipHandler(frame, item, count, name, link, quality)
|
|
-- nothing to do, if informant is disabled
|
|
if (not getFilter('all')) then
|
|
return
|
|
end
|
|
|
|
tooltip:SetFrame(frame)
|
|
|
|
local extra = tooltip:GetExtra()
|
|
local itemType, itemID, randomProp, factor, enchant, uniqID, gemSlot1, gemSlot2, gemSlot3, gemSlotBonus = tooltip:DecodeLink(link)
|
|
if itemType ~= "item" then return end
|
|
|
|
local quant = 0
|
|
local sell = 0
|
|
local buy = 0
|
|
local stacks = 1
|
|
|
|
local itemInfo
|
|
if (itemID and itemID > 0) then
|
|
itemInfo = Informant.GetItem(itemID)
|
|
end
|
|
if (not itemInfo) then return end
|
|
Informant.itemInfo = itemInfo
|
|
|
|
-- safety, some other addons can pass in strings for count by mistake
|
|
count = tonumber(count) or 1
|
|
|
|
itemInfo.itemName = name
|
|
itemInfo.itemLink = link
|
|
itemInfo.itemCount = count
|
|
itemInfo.itemQuality = quality
|
|
|
|
stacks = itemInfo.stack
|
|
if (not stacks) then stacks = 1 end
|
|
|
|
buy = tonumber(itemInfo.buy) or 0
|
|
sell = tonumber(itemInfo.sell) or 0
|
|
quant = tonumber(itemInfo.quantity) or 0
|
|
|
|
if (quant == 0) and (sell > 0) then
|
|
local ratio = buy / sell
|
|
if ((ratio > 3) and (ratio < 6)) then
|
|
quant = 1
|
|
else
|
|
ratio = buy / (sell * 5)
|
|
if ((ratio > 3) and (ratio < 6)) then
|
|
quant = 5
|
|
end
|
|
end
|
|
end
|
|
if (quant == 0) then quant = 1 end
|
|
|
|
buy = buy/quant
|
|
|
|
itemInfo.itemBuy = buy
|
|
itemInfo.itemSell = sell
|
|
itemInfo.itemQuant = quant
|
|
|
|
if getFilter('ModTTShow') and not IsAltKeyDown() then
|
|
return
|
|
end
|
|
|
|
local embedded = getFilter('embed')
|
|
|
|
tooltip:SetColor(1,1,1)
|
|
if (getFilter('show-ilevel')) then
|
|
if (itemInfo.itemLevel) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_ItemLevel'):format(itemInfo.itemLevel), embedded)
|
|
end
|
|
end
|
|
|
|
if (getFilter('show-link')) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_ItemLink'):format((":"):join(itemID, enchant, gemSlot1, gemSlot2, gemSlot3, gemSlotBonus, randomProp, uniqID), nil, embedded))
|
|
end
|
|
|
|
--DEFAULT_CHAT_FRAME:AddMessage("Got vendor: "..(buy or 0).."/"..(sell or 0))
|
|
if (getFilter('show-vendor')) then
|
|
if ((buy > 0) or (sell > 0)) then
|
|
local bgsc = tooltip:Coins(buy)
|
|
local sgsc = tooltip:Coins(sell)
|
|
|
|
tooltip:SetColor(0.8, 0.5, 0.1)
|
|
if (count and (count > 1)) then
|
|
if (getFilter('show-vendor-buy')) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_ShowVendorBuyMult'):format(count, bgsc), buy*count, embedded)
|
|
end
|
|
if (getFilter('show-vendor-sell')) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_ShowVendorSellMult'):format(count, sgsc), sell*count, embedded)
|
|
end
|
|
else
|
|
if (getFilter('show-vendor-buy')) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_ShowVendorBuy'):format(), buy, embedded)
|
|
end
|
|
if (getFilter('show-vendor-sell')) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_ShowVendorSell'):format(), sell, embedded)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
tooltip:SetColor(1,1,1)
|
|
if (getFilter('show-stack')) then
|
|
if (stacks > 1) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_StackSize'):format(stacks), nil, embedded)
|
|
end
|
|
end
|
|
|
|
if (getFilter('show-merchant')) then
|
|
if (itemInfo.vendors) then
|
|
local merchantCount = #itemInfo.vendors
|
|
if (merchantCount > 0) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_ShowMerchant'):format(merchantCount), 0.5, 0.8, 0.5, embedded)
|
|
else
|
|
-- NOTE - there are 2 cases for "no known": nil list, and zero length list
|
|
if (getFilter('show-zero-merchants')) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_NoKnownMerchants'), 0.8, 0.2, 0.2, embedded)
|
|
end
|
|
end
|
|
else
|
|
-- NOTE - there are 2 cases for "no known": nil list, and zero length list
|
|
if (getFilter('show-zero-merchants')) then
|
|
tooltip:AddLine(_TRANS('INF_Tooltip_NoKnownMerchants'), 0.8, 0.2, 0.2, embedded)
|
|
end
|
|
end
|
|
end
|
|
|
|
if (getFilter('show-usage')) then
|
|
tooltip:SetColor(0.6, 0.4, 0.8)
|
|
local reagentInfo = ""
|
|
if (itemInfo.classText) then
|
|
reagentInfo = _TRANS('INF_Tooltip_Class'):format(itemInfo.classText)
|
|
tooltip:AddLine(reagentInfo, embedded)
|
|
end
|
|
if (itemInfo.usedList and itemInfo.usageText) then
|
|
if (#itemInfo.usedList > 2) then
|
|
|
|
local currentUseLine = nilSafeString(itemInfo.usedList[1])..", "..nilSafeString(itemInfo.usedList[2])..","
|
|
reagentInfo = _TRANS('INF_Tooltip_Use'):format(currentUseLine)
|
|
tooltip:AddLine(reagentInfo, embedded)
|
|
|
|
for index = 3, #itemInfo.usedList, 2 do
|
|
if (itemInfo.usedList[index+1]) then
|
|
reagentInfo = whitespace(#_TRANS('INF_Tooltip_Use') + 3)..nilSafeString(itemInfo.usedList[index])..", "..nilSafeString(itemInfo.usedList[index+1])..","
|
|
tooltip:AddLine(reagentInfo, embedded)
|
|
else
|
|
reagentInfo = whitespace(#_TRANS('INF_Tooltip_Use') + 3)..nilSafeString(itemInfo.usedList[index])
|
|
tooltip:AddLine(reagentInfo, embedded)
|
|
end
|
|
end
|
|
else
|
|
reagentInfo = _TRANS('INF_Tooltip_Use'):format(itemInfo.usageText)
|
|
tooltip:AddLine(reagentInfo, nil, embedded)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- ccox - TODO - localize me!
|
|
if ( getFilter('show-crafted') and itemInfo.crafts) then
|
|
local crafted_item = itemInfo.crafts
|
|
local itemName, itemLink, itemQuality, itemLevel, playerLevel, itemType, itemSubType, stackCount, equipLoc, texture, sellPrice = GetItemInfo( tonumber( crafted_item ) )
|
|
local item_craft_count = itemInfo.craftsCount or 1
|
|
|
|
tooltip:SetColor(0.6, 0.4, 0.8)
|
|
|
|
-- show item that this recipe teaches, in quality color
|
|
if (itemLink) then -- sometimes GetInfo fails
|
|
tooltip:AddLine( ("Crafts: %s"):format(itemLink), embedded)
|
|
else
|
|
tooltip:AddLine( "Crafts item: "..crafted_item, embedded)
|
|
end
|
|
|
|
-- show AucAdv value
|
|
if (itemLink and AucAdvanced) then
|
|
local price5 = AucAdvanced.API.GetMarketValue( itemLink );
|
|
if (price5) then
|
|
tooltip:AddLine( " AucAdv: ", item_craft_count*price5, embedded)
|
|
end
|
|
end
|
|
|
|
-- show DE value if non-zero
|
|
if (Enchantrix and Enchantrix.Storage) then
|
|
local _, _, baseline, aucadv = Enchantrix.Storage.GetItemDisenchantTotals( crafted_item )
|
|
if (aucadv or baseline) then
|
|
-- this can be disenchanted
|
|
tooltip:AddLine( " Disenchant: ", item_craft_count*(aucadv or baseline), embedded)
|
|
end
|
|
end
|
|
|
|
-- show vendor value if non-zero
|
|
if (sellPrice) then
|
|
tooltip:AddLine( " Vendor: ", item_craft_count*sellPrice, embedded)
|
|
end
|
|
end
|
|
|
|
if (getFilter('show-quest')) then
|
|
if (itemInfo.quests) then
|
|
local questCount = itemInfo.questCount
|
|
if (questCount > 0) then
|
|
tooltip:SetColor(0.5, 0.5, 0.8)
|
|
tooltip:AddLine(_TRANS('INF_Interface_InfWinQuest'):format(questCount), embedded)
|
|
end
|
|
end
|
|
end
|
|
|
|
tooltip:ClearFrame(frame)
|
|
end
|
|
|
|
function nilSafeString(str)
|
|
return str or "";
|
|
end
|
|
|
|
function whitespace(length)
|
|
local spaces = ""
|
|
for index = length, 0, -1 do
|
|
spaces = spaces.." "
|
|
end
|
|
return spaces
|
|
end
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Prints the specified message to nLog.
|
|
--
|
|
-- syntax:
|
|
-- errorCode, message = debugPrint([message][, title][, errorCode][, level])
|
|
--
|
|
-- parameters:
|
|
-- message - (string) the error message
|
|
-- nil, no error message specified
|
|
-- title - (string) the title for the debug message
|
|
-- nil, no title specified
|
|
-- errorCode - (number) the error code
|
|
-- nil, no error code specified
|
|
-- level - (string) nLog message level
|
|
-- Any nLog.levels string is valid.
|
|
-- nil, no level specified
|
|
--
|
|
-- returns:
|
|
-- errorCode - (number) errorCode, if one is specified
|
|
-- nil, otherwise
|
|
-- message - (string) message, if one is specified
|
|
-- nil, otherwise
|
|
-------------------------------------------------------------------------------
|
|
function debugPrint(message, title, errorCode, level)
|
|
return Informant.DebugPrint(message, "InfTooltip", title, errorCode, level)
|
|
end
|