From 8658d6cc6167da671321572eea01864e4c34ae2b Mon Sep 17 00:00:00 2001 From: Manuel Simon Hirsig Date: Wed, 16 Mar 2016 22:48:53 +0100 Subject: [PATCH] forgot to add tooltip file --- tooltip.lua | 227 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 tooltip.lua diff --git a/tooltip.lua b/tooltip.lua new file mode 100644 index 0000000..803c59d --- /dev/null +++ b/tooltip.lua @@ -0,0 +1,227 @@ +local private, public = {}, {} +Aux.tooltip = public + +local game_tooltip_hooks = {} + +function public.on_load() + for func, hook in game_tooltip_hooks do + local old = GameTooltip[func] + local hook = hook + GameTooltip[func] = function(self, ...) + local result = old(unpack(Aux.util.cons(self, arg))) + hook(unpack(arg)) + return result + end + end + local old = SetItemRef + SetItemRef = function(...) + local result = old(unpack(arg)) + local name, _, quality = GetItemInfo(arg[1]) + if not IsShiftKeyDown() and not IsControlKeyDown() and name then + local _, _, _, hex = GetItemQualityColor(quality) + local link = hex.. '|H'..arg[1]..'|h['..name..']|h|r' + private.extend_tooltip(ItemRefTooltip, link, 1) + end + return result + end +end + +function private.format_money(money, exact) + local TEXT_NONE = '0' + + local GSC_GOLD = 'ffd100' + local GSC_SILVER = 'e6e6e6' + local GSC_COPPER = 'c8602c' + local GSC_START = '|cff%s%d|r' + local GSC_PART = '.|cff%s%02d|r' + local GSC_NONE = '|cffa0a0a0'..TEXT_NONE..'|r' + + if not exact and money >= 10000 then + -- Round to nearest silver + money = math.floor(money / 100 + 0.5) * 100 + end + local g, s, c = Aux.money.to_GSC(money) + + local gsc = '' + + local fmt = GSC_START + if g > 0 then + gsc = gsc..string.format(fmt, GSC_GOLD, g) + fmt = GSC_PART + end + if s > 0 or c > 0 then + gsc = gsc..string.format(fmt, GSC_SILVER, s) + fmt = GSC_PART + end + if c > 0 then + gsc = gsc..string.format(fmt, GSC_COPPER, c) + end + if gsc == '' then + gsc = GSC_NONE + end + return gsc +end + +function private.extend_tooltip(tooltip, hyperlink, quantity) + local item_id, suffix_id = Aux.info.parse_hyperlink(hyperlink) + + if not Aux.static.item_info(item_id) then + return + end + + local item_key = (item_id or 0)..':'..(suffix_id or 0) + + local value = Aux.history.value(item_key) + + local value_line = 'Value: ' + + value_line = value_line..(value and private.format_money(value) or '---') + + local _, _, _, market_values = Aux.history.price_data(item_key) + if value and getn(market_values) < 5 then + value_line = value_line..' (?)' + end + + tooltip:AddLine(value_line, 0.1, 0.8, 0.5) + + if aux_tooltip_daily then + local market_value = Aux.history.market_value(item_key) + + local market_value_line = 'Today: ' + market_value_line = market_value_line..(market_value and private.format_money(market_value)..' ('..Aux.auction_listing.percentage_historical(Aux.round(market_value / value * 100))..')' or '---') + + tooltip:AddLine(market_value_line, 0.1, 0.8, 0.5) + end + + tooltip:Show() +end + +function game_tooltip_hooks.SetHyperlink(itemstring) + local name, _, quality = GetItemInfo(itemstring) + if name then + local _, _, _, hex = GetItemQualityColor(quality) + local link = hex.. '|H'..itemstring..'|h['..name..']|h|r' + private.extend_tooltip(GameTooltip, link, 1) + end +end + +function game_tooltip_hooks.SetAuctionItem(type, index) + local link = GetAuctionItemLink(type, index) + if link then + local _, _, quantity = GetAuctionItemInfo(type, index) + private.extend_tooltip(GameTooltip, link, quantity) + end +end + +function game_tooltip_hooks.SetLootItem(slot) + local link = GetLootSlotLink(slot) + if link then + local _, _, quantity = GetLootSlotInfo(slot) + private.extend_tooltip(GameTooltip, link, quantity) + end +end + +function game_tooltip_hooks.SetQuestItem(qtype, slot) + local link = GetQuestItemLink(qtype, slot) + if link then + local _, _, quantity = GetQuestItemInfo(qtype, slot) + private.extend_tooltip(GameTooltip, link, quantity) + end +end + +function game_tooltip_hooks.SetQuestLogItem(qtype, slot) + local link = GetQuestLogItemLink(qtype, slot) + if link then + local _, _, quantity = GetQuestLogRewardInfo(slot) + private.extend_tooltip(GameTooltip, link, quantity) + end +end + +function game_tooltip_hooks.SetBagItem(bag, slot) + local link = GetContainerItemLink(bag, slot) + if link then + local _, quantity = GetContainerItemInfo(bag, slot) + private.extend_tooltip(GameTooltip, link, quantity) + end +end + +--function game_tooltip_hooks.SetInboxItem(index) +-- local name, _, quantity = GetInboxItem(index) +-- +-- for itemID = 1, 30000 do +-- local itemName, itemstring, itemQuality = GetItemInfo(itemID) +-- if (itemName and itemName == inboxItemName) then +-- local _, _, _, hex = GetItemQualityColor(tonumber(itemQuality)) +-- local itemLink = hex.. '|H'..itemstring..'|h['..itemName..']|h|r' +-- tooltipCall(GameTooltip, inboxItemName, itemLink, inboxItemQuality, inboxItemCount) +-- break +-- end +-- end +--end + +function game_tooltip_hooks.SetInventoryItem(unit, slot) + local link = GetInventoryItemLink(unit, slot) + if link then + private.extend_tooltip(GameTooltip, link, 1) + end +end + +function game_tooltip_hooks.SetMerchantItem(slot) + local link = GetMerchantItemLink(slot) + if link then + local _, _, _, quantity = GetMerchantItemInfo(slot) + private.extend_tooltip(GameTooltip, link, quantity) + end +end + +function game_tooltip_hooks.SetCraftItem(skill, slot) + local link, quantity + if slot then + link = GetCraftReagentItemLink(skill, slot) + quantity = ({GetCraftReagentInfo(skill, slot)})[3] + else + link = GetCraftItemLink(skill) + quantity = 1 + end + if link then + private.extend_tooltip(GameTooltip, link, quantity) + end +end + +function game_tooltip_hooks.SetCraftSpell(slot) + local link = GetCraftItemLink(slot) + if link then + private.extend_tooltip(GameTooltip, link, 1) + end +end + +function game_tooltip_hooks.SetTradeSkillItem(skill, slot) + local link, quantity + if slot then + link = GetTradeSkillReagentItemLink(skill, slot) + quantity = ({GetTradeSkillReagentInfo(skill, slot)})[3] + else + link = GetTradeSkillItemLink(skill) + quantity = 1 + end + if link then + private.extend_tooltip(GameTooltip, link, quantity) + end +end + +function game_tooltip_hooks.SetAuctionSellItem() + local name, _, quantity, _, _, _ = GetAuctionSellItemInfo() + if name then + for bag = 0, 4 do + if GetBagName(bag) then + for slot = 1, GetContainerNumSlots(bag) do + local link = GetContainerItemLink(bag, slot) + if link and ({Aux.info.parse_hyperlink(link)})[5] == name then + private.extend_tooltip(GameTooltip, link, quantity) + return + end + end + end + end + end +end \ No newline at end of file