libtooltip: add tooltop library for extended infos

Add tooltip library, based on the sellvalue item hooks,
in order to obtain extended gametooltip data, that can be used
to query the current GameTooltip for ItemLink and ItemID.
This commit is contained in:
shagu
2019-12-05 21:49:12 +01:00
parent c90c0ea8ba
commit a5df9db348
3 changed files with 153 additions and 110 deletions
+1
View File
@@ -5,4 +5,5 @@
<Include file="..\libs\libdebuff.lua"/>
<Include file="..\libs\librange.lua"/>
<Include file="..\libs\libunitscan.lua"/>
<Include file="..\libs\libtooltip.lua"/>
</Ui>
+149
View File
@@ -0,0 +1,149 @@
-- load pfUI environment
setfenv(1, pfUI:GetEnvironment())
--[[ libtooltip ]]--
-- A pfUI library that provides additional GameTooltip information.
--
-- libtooltip:GetItemID()
-- returns the itemID of the current GameTooltip
-- `nil` when no item is displayed
--
-- libtooltip:GetItemLink()
-- returns the itemLink of the current GameTooltip
-- `nil` when no item is displayed
--
-- libtooltip:GetItemCount()
-- returns the item count (bags) of the current GameTooltip
-- `nil` when no item is displayed
-- return instantly when another libtooltip is already active
if pfUI.api.libtooltip then return end
local _
local libtooltip = CreateFrame("Frame" , "pfLibTooltip", GameTooltip)
libtooltip:SetScript("OnHide", function()
this.itemID = nil
this.itemLink = nil
this.itemCount = nil
end)
-- core functions
libtooltip.GetItemID = function(self)
if not libtooltip.itemLink then return end
if not libtooltip.itemID then
local _, _, itemID = string.find(libtooltip.itemLink, "item:(%d+):%d+:%d+:%d+")
libtooltip.itemID = tonumber(itemID)
end
return libtooltip.itemID
end
libtooltip.GetItemLink = function(self)
return libtooltip.itemLink
end
libtooltip.GetItemCount = function(self)
return libtooltip.itemCount
end
pfUI.api.libtooltip = libtooltip
-- setup item hooks
local pfHookSetBagItem = GameTooltip.SetBagItem
function GameTooltip.SetBagItem(self, container, slot)
libtooltip.itemLink = GetContainerItemLink(container, slot)
_, libtooltip.itemCount = GetContainerItemInfo(container, slot)
return pfHookSetBagItem(self, container, slot)
end
local pfHookSetQuestLogItem = GameTooltip.SetQuestLogItem
function GameTooltip.SetQuestLogItem(self, itemType, index)
libtooltip.itemLink = GetQuestLogItemLink(itemType, index)
if not libtooltip.itemLink then return end
return pfHookSetQuestLogItem(self, itemType, index)
end
local pfHookSetQuestItem = GameTooltip.SetQuestItem
function GameTooltip.SetQuestItem(self, itemType, index)
libtooltip.itemLink = GetQuestItemLink(itemType, index)
return pfHookSetQuestItem(self, itemType, index)
end
local pfHookSetLootItem = GameTooltip.SetLootItem
function GameTooltip.SetLootItem(self, slot)
libtooltip.itemLink = GetLootSlotLink(slot)
pfHookSetLootItem(self, slot)
end
local pfHookSetInboxItem = GameTooltip.SetInboxItem
function GameTooltip.SetInboxItem(self, mailID, attachmentIndex)
local itemName, itemTexture, inboxItemCount, inboxItemQuality = GetInboxItem(mailID)
libtooltip.itemLink = GetItemLinkByName(itemName)
return pfHookSetInboxItem(self, mailID, attachmentIndex)
end
local pfHookSetInventoryItem = GameTooltip.SetInventoryItem
function GameTooltip.SetInventoryItem(self, unit, slot)
libtooltip.itemLink = GetInventoryItemLink(unit, slot)
return pfHookSetInventoryItem(self, unit, slot)
end
local pfHookSetLootRollItem = GameTooltip.SetLootRollItem
function GameTooltip.SetLootRollItem(self, id)
libtooltip.itemLink = GetLootRollItemLink(id)
return pfHookSetLootRollItem(self, id)
end
local pfHookSetLootRollItem = GameTooltip.SetLootRollItem
function GameTooltip.SetLootRollItem(self, id)
libtooltip.itemLink = GetLootRollItemLink(id)
return pfHookSetLootRollItem(self, id)
end
local pfHookSetMerchantItem = GameTooltip.SetMerchantItem
function GameTooltip.SetMerchantItem(self, merchantIndex)
libtooltip.itemLink = GetMerchantItemLink(merchantIndex)
return pfHookSetMerchantItem(self, merchantIndex)
end
local pfHookSetCraftItem = GameTooltip.SetCraftItem
function GameTooltip.SetCraftItem(self, skill, slot)
libtooltip.itemLink = GetCraftReagentItemLink(skill, slot)
return pfHookSetCraftItem(self, skill, slot)
end
local pfHookSetCraftSpell = GameTooltip.SetCraftSpell
function GameTooltip.SetCraftSpell(self, slot)
libtooltip.itemLink = GetCraftItemLink(slot)
return pfHookSetCraftSpell(self, slot)
end
local pfHookSetTradeSkillItem = GameTooltip.SetTradeSkillItem
function GameTooltip.SetTradeSkillItem(self, skillIndex, reagentIndex)
if reagentIndex then
libtooltip.itemLink = GetTradeSkillReagentItemLink(skillIndex, reagentIndex)
else
libtooltip.itemLink = GetTradeSkillItemLink(skillIndex)
end
return pfHookSetTradeSkillItem(self, skillIndex, reagentIndex)
end
local pfHookSetAuctionSellItem = GameTooltip.SetAuctionSellItem
function GameTooltip.SetAuctionSellItem(self)
local itemName, _, itemCount = GetAuctionSellItemInfo()
libtooltip.itemCount = itemCount
libtooltip.itemLink = GetItemLinkByName(itemName)
return pfHookSetAuctionSellItem(self)
end
local pfHookSetTradePlayerItem = GameTooltip.SetTradePlayerItem
function GameTooltip.SetTradePlayerItem(self, index)
libtooltip.itemLink = GetTradePlayerItemLink(index)
return pfHookSetTradePlayerItem(self, index)
end
local pfHookSetTradeTargetItem = GameTooltip.SetTradeTargetItem
function GameTooltip.SetTradeTargetItem(self, index)
libtooltip.itemLink = GetTradeTargetItemLink(index)
return pfHookSetTradeTargetItem(self, index)
end
+3 -110
View File
@@ -1,16 +1,9 @@
pfUI:RegisterModule("sellvalue", "vanilla:tbc", function ()
pfUI.sellvalue = CreateFrame( "Frame" , "pfGameTooltip", GameTooltip )
pfUI.sellvalue:SetScript("OnHide", function()
GameTooltip.itemLink = nil
GameTooltip.itemCount = nil
end)
pfUI.sellvalue:SetScript("OnShow", function()
if GameTooltip.itemLink then
local _, _, itemID = string.find(GameTooltip.itemLink, "item:(%d+):%d+:%d+:%d+")
local itemID = tonumber(itemID)
local count = GameTooltip.itemCount or 1
if libtooltip:GetItemLink() then
local itemID = libtooltip:GetItemID()
local count = libtooltip:GetItemCount() or 1
if pfSellData[itemID] then
local _, _, sell, buy = strfind(pfSellData[itemID], "(.*),(.*)")
@@ -40,104 +33,4 @@ pfUI:RegisterModule("sellvalue", "vanilla:tbc", function ()
end
end
end)
local pfHookSetBagItem = GameTooltip.SetBagItem
function GameTooltip.SetBagItem(self, container, slot)
GameTooltip.itemLink = GetContainerItemLink(container, slot)
local _
_, GameTooltip.itemCount = GetContainerItemInfo(container, slot)
return pfHookSetBagItem(self, container, slot)
end
local pfHookSetQuestLogItem = GameTooltip.SetQuestLogItem
function GameTooltip.SetQuestLogItem(self, itemType, index)
GameTooltip.itemLink = GetQuestLogItemLink(itemType, index)
if not GameTooltip.itemLink then return end
return pfHookSetQuestLogItem(self, itemType, index)
end
local pfHookSetQuestItem = GameTooltip.SetQuestItem
function GameTooltip.SetQuestItem(self, itemType, index)
GameTooltip.itemLink = GetQuestItemLink(itemType, index)
return pfHookSetQuestItem(self, itemType, index)
end
local pfHookSetLootItem = GameTooltip.SetLootItem
function GameTooltip.SetLootItem(self, slot)
GameTooltip.itemLink = GetLootSlotLink(slot)
pfHookSetLootItem(self, slot)
end
local pfHookSetInboxItem = GameTooltip.SetInboxItem
function GameTooltip.SetInboxItem(self, mailID, attachmentIndex)
local itemName, itemTexture, inboxItemCount, inboxItemQuality = GetInboxItem(mailID)
GameTooltip.itemLink = GetItemLinkByName(itemName)
return pfHookSetInboxItem(self, mailID, attachmentIndex)
end
local pfHookSetInventoryItem = GameTooltip.SetInventoryItem
function GameTooltip.SetInventoryItem(self, unit, slot)
GameTooltip.itemLink = GetInventoryItemLink(unit, slot)
return pfHookSetInventoryItem(self, unit, slot)
end
local pfHookSetLootRollItem = GameTooltip.SetLootRollItem
function GameTooltip.SetLootRollItem(self, id)
GameTooltip.itemLink = GetLootRollItemLink(id)
return pfHookSetLootRollItem(self, id)
end
local pfHookSetLootRollItem = GameTooltip.SetLootRollItem
function GameTooltip.SetLootRollItem(self, id)
GameTooltip.itemLink = GetLootRollItemLink(id)
return pfHookSetLootRollItem(self, id)
end
local pfHookSetMerchantItem = GameTooltip.SetMerchantItem
function GameTooltip.SetMerchantItem(self, merchantIndex)
GameTooltip.itemLink = GetMerchantItemLink(merchantIndex)
return pfHookSetMerchantItem(self, merchantIndex)
end
local pfHookSetCraftItem = GameTooltip.SetCraftItem
function GameTooltip.SetCraftItem(self, skill, slot)
GameTooltip.itemLink = GetCraftReagentItemLink(skill, slot)
return pfHookSetCraftItem(self, skill, slot)
end
local pfHookSetCraftSpell = GameTooltip.SetCraftSpell
function GameTooltip.SetCraftSpell(self, slot)
GameTooltip.itemLink = GetCraftItemLink(slot)
return pfHookSetCraftSpell(self, slot)
end
local pfHookSetTradeSkillItem = GameTooltip.SetTradeSkillItem
function GameTooltip.SetTradeSkillItem(self, skillIndex, reagentIndex)
if reagentIndex then
GameTooltip.itemLink = GetTradeSkillReagentItemLink(skillIndex, reagentIndex)
else
GameTooltip.itemLink = GetTradeSkillItemLink(skillIndex)
end
return pfHookSetTradeSkillItem(self, skillIndex, reagentIndex)
end
local pfHookSetAuctionSellItem = GameTooltip.SetAuctionSellItem
function GameTooltip.SetAuctionSellItem(self)
local itemName, _, itemCount = GetAuctionSellItemInfo()
GameTooltip.itemCount = itemCount
GameTooltip.itemLink = GetItemLinkByName(itemName)
return pfHookSetAuctionSellItem(self)
end
local pfHookSetTradePlayerItem = GameTooltip.SetTradePlayerItem
function GameTooltip.SetTradePlayerItem(self, index)
GameTooltip.itemLink = GetTradePlayerItemLink(index)
return pfHookSetTradePlayerItem(self, index)
end
local pfHookSetTradeTargetItem = GameTooltip.SetTradeTargetItem
function GameTooltip.SetTradeTargetItem(self, index)
GameTooltip.itemLink = GetTradeTargetItemLink(index)
return pfHookSetTradeTargetItem(self, index)
end
end)