mirror of
https://github.com/Bluewhale1337/ElvUIModernized.git
synced 2026-07-27 08:24:44 +00:00
LibItemPrice
Needs some more work
This commit is contained in:
@@ -0,0 +1,217 @@
|
||||
local E, L, V, P, G = unpack(ElvUI)
|
||||
local IP = E:NewModule("Tooltip_ItemPrice", "AceHook-3.0")
|
||||
|
||||
local LIP = LibStub:GetLibrary("ItemPrice-1.1")
|
||||
|
||||
local match = string.match
|
||||
|
||||
local GetActionCount = GetActionCount
|
||||
local GetAuctionItemInfo = GetAuctionItemInfo
|
||||
local GetAuctionSellItemInfo = GetAuctionSellItemInfo
|
||||
local GetContainerItemInfo = GetContainerItemInfo
|
||||
local GetCraftReagentInfo = GetCraftReagentInfo
|
||||
local GetInboxItem = GetInboxItem
|
||||
local GetItemCount = GetItemCount
|
||||
local GetLootRollItemInfo = GetLootRollItemInfo
|
||||
local GetLootSlotInfo = GetLootSlotInfo
|
||||
local GetMerchantItemInfo = GetMerchantItemInfo
|
||||
local GetQuestItemInfo = GetQuestItemInfo
|
||||
local GetQuestLogRewardInfo = GetQuestLogRewardInfo
|
||||
local GetSendMailItem = GetSendMailItem
|
||||
local GetTradePlayerItemInfo = GetTradePlayerItemInfo
|
||||
local GetTradeSkillReagentInfo = GetTradeSkillReagentInfo
|
||||
local GetTradeTargetItemInfo = GetTradeTargetItemInfo
|
||||
local IsConsumableAction = IsConsumableAction
|
||||
|
||||
local tooltips = {
|
||||
"GameTooltip",
|
||||
"ItemRefTooltip"
|
||||
}
|
||||
|
||||
function IP:SetAction(tt, id)
|
||||
local item
|
||||
for i = 1, tt:NumLines() do
|
||||
if i == 1 then
|
||||
local tiptext = _G["GameTooltipTextLeft"..i]
|
||||
local linetext = tiptext:GetText()
|
||||
|
||||
item = linetext
|
||||
end
|
||||
end
|
||||
|
||||
if not item then return end
|
||||
|
||||
local count = 1
|
||||
if IsConsumableAction(id) then
|
||||
local actionCount = GetActionCount(id)
|
||||
if actionCount and actionCount == GetItemCount(item) then
|
||||
count = actionCount
|
||||
end
|
||||
end
|
||||
|
||||
self:SetPrice(tt, count, item)
|
||||
end
|
||||
|
||||
function IP:SetAuctionItem(tt, type, index)
|
||||
local _, _, count = GetAuctionItemInfo(type, index)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetAuctionSellItem(tt)
|
||||
local _, _, count = GetAuctionSellItemInfo()
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetBagItem(tt, bag, slot)
|
||||
local _, count = GetContainerItemInfo(bag, slot)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetCraftItem(tt, skill, slot)
|
||||
local count = 1
|
||||
if slot then
|
||||
count = select(3, GetCraftReagentInfo(skill, slot))
|
||||
end
|
||||
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetHyperlink(tt, link, count)
|
||||
count = tonumber(count)
|
||||
if not count or count < 1 then
|
||||
local owner = tt:GetParent()
|
||||
count = owner and tonumber(owner.count)
|
||||
if not count or count < 1 then
|
||||
count = 1
|
||||
end
|
||||
end
|
||||
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetInboxItem(tt, index, attachmentIndex)
|
||||
local _, _, count = GetInboxItem(index, attachmentIndex)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetInventoryItem(tt, unit, slot)
|
||||
if type(slot) ~= "number" or slot < 0 then return end
|
||||
|
||||
local count = 1
|
||||
if slot < 20 or slot > 39 and slot < 68 then
|
||||
count = GetInventoryItemCount(unit, slot)
|
||||
end
|
||||
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetLootItem(tt, slot)
|
||||
local _, _, count = GetLootSlotInfo(slot)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetLootRollItem(tt, rollID)
|
||||
local _, _, count = GetLootRollItemInfo(rollID)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetMerchantItem(tt, slot)
|
||||
local _, _, _, count = GetMerchantItemInfo(slot)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetQuestItem(tt, type, slot)
|
||||
local _, _, count = GetQuestItemInfo(type, slot)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetQuestLogItem(tt, type, index)
|
||||
local _, _, count = GetQuestLogRewardInfo(index)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetSendMailItem(tt, index)
|
||||
local _, _, count = GetSendMailItem(index)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetTradePlayerItem(tt, index)
|
||||
local _, _, count = GetTradePlayerItemInfo(index)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetTradeSkillItem(tt, skill, slot)
|
||||
local count = 1
|
||||
if slot then
|
||||
count = select(3, GetTradeSkillReagentInfo(skill, slot))
|
||||
end
|
||||
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetTradeTargetItem(tt, index)
|
||||
local _, _, count = GetTradeTargetItemInfo(index)
|
||||
self:SetPrice(tt, count)
|
||||
end
|
||||
|
||||
function IP:SetPrice(tt, count)
|
||||
if MerchantFrame:IsShown() then return end
|
||||
|
||||
local bag, slot = this:GetParent():GetID(), this:GetID()
|
||||
local itemLink = GetContainerItemLink(bag, slot)
|
||||
local item, itemID
|
||||
if itemLink then
|
||||
itemID = match(itemLink, "item:(%d+)")
|
||||
item = GetItemInfo(itemID)
|
||||
end
|
||||
|
||||
if not item then return end
|
||||
|
||||
local price = LIP:GetSellValue(itemID)
|
||||
|
||||
if price and price > 0 then
|
||||
tt:AddDoubleLine(SALE_PRICE_COLON, E:FormatMoney(count and price * count or price, "BLIZZARD", false), nil, nil, nil, 1, 1, 1)
|
||||
end
|
||||
|
||||
if tt:IsShown() then tt:Show() end
|
||||
end
|
||||
|
||||
function IP:ApplyHooks(tooltip)
|
||||
self:SecureHook(tooltip, "SetAction", "SetAction")
|
||||
self:SecureHook(tooltip, "SetAuctionItem", "SetAuctionItem")
|
||||
self:SecureHook(tooltip, "SetAuctionSellItem", "SetAuctionSellItem")
|
||||
self:SecureHook(tooltip, "SetBagItem", "SetBagItem")
|
||||
self:SecureHook(tooltip, "SetCraftItem", "SetCraftItem")
|
||||
self:SecureHook(tooltip, "SetHyperlink", "SetHyperlink")
|
||||
self:SecureHook(tooltip, "SetInboxItem", "SetInboxItem")
|
||||
self:SecureHook(tooltip, "SetInventoryItem", "SetInventoryItem")
|
||||
self:SecureHook(tooltip, "SetLootItem", "SetLootItem")
|
||||
self:SecureHook(tooltip, "SetLootRollItem", "SetLootRollItem")
|
||||
self:SecureHook(tooltip, "SetMerchantItem", "SetMerchantItem")
|
||||
self:SecureHook(tooltip, "SetQuestItem", "SetQuestItem")
|
||||
self:SecureHook(tooltip, "SetQuestLogItem", "SetQuestLogItem")
|
||||
self:SecureHook(tooltip, "SetSendMailItem", "SetSendMailItem")
|
||||
self:SecureHook(tooltip, "SetTradePlayerItem", "SetTradePlayerItem")
|
||||
self:SecureHook(tooltip, "SetTradeSkillItem", "SetTradeSkillItem")
|
||||
self:SecureHook(tooltip, "SetTradeTargetItem", "SetTradeTargetItem")
|
||||
end
|
||||
|
||||
function IP:UpdateSettings()
|
||||
if E.db.tooltip.itemPrice then
|
||||
for _, tooltip in pairs(tooltips) do
|
||||
self:ApplyHooks(_G[tooltip])
|
||||
end
|
||||
else
|
||||
self:UnhookAll()
|
||||
end
|
||||
end
|
||||
|
||||
function IP:Initialize()
|
||||
self:UpdateSettings()
|
||||
end
|
||||
|
||||
local function InitializeCallback()
|
||||
IP:Initialize()
|
||||
end
|
||||
|
||||
E:RegisterModule(IP:GetName(), InitializeCallback)
|
||||
Reference in New Issue
Block a user