forked from John-The-Baptist/OctoAuctionator
888 lines
23 KiB
Lua
888 lines
23 KiB
Lua
|
|
local addonName, addonTable = "Auctionator", AtrNS;
|
|
local zc = addonTable.zc;
|
|
|
|
|
|
-----------------------------------------
|
|
|
|
local auctionator_orig_GameTooltip_OnTooltipAddMoney;
|
|
|
|
-----------------------------------------
|
|
|
|
function auctionator_GameTooltip_OnTooltipAddMoney (self, cost, maxcost)
|
|
|
|
if (AUCTIONATOR_V_TIPS == 1) then
|
|
return;
|
|
end
|
|
|
|
auctionator_orig_GameTooltip_OnTooltipAddMoney (self, cost, maxcost);
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_Hook_OnTooltipAddMoney()
|
|
-- the 3.x port hid the stock vendor line here; the 1.12 tooltip has no such hook
|
|
end
|
|
|
|
------------------------------------------------
|
|
|
|
local function Atr_AppendHint (results, price, text, volume)
|
|
|
|
if (price and price > 0) then
|
|
local e = {};
|
|
e.price = price;
|
|
e.text = text;
|
|
e.volume = volume;
|
|
|
|
table.insert (results, e);
|
|
end
|
|
|
|
end
|
|
|
|
------------------------------------------------
|
|
|
|
function Atr_BuildHints (itemName)
|
|
|
|
local results = {};
|
|
|
|
local itemLink = Atr_GetItemLink (itemName);
|
|
|
|
if (itemLink == nil and itemName == nil) then
|
|
return results;
|
|
end
|
|
|
|
-- Auctionator Full Scan
|
|
|
|
if (itemName ~= nil and gAtr_ScanDB[itemName] ~= nil) then
|
|
Atr_AppendHint (results, gAtr_ScanDB[itemName], ZT("Auctionator scan data"));
|
|
end
|
|
|
|
-- most recent historical price
|
|
|
|
local price = Atr_GetMostRecentSale(itemName);
|
|
if (price ~= nil) then
|
|
Atr_AppendHint (results, price, ZT("your most recent posting"));
|
|
end
|
|
|
|
-- Wowecon
|
|
|
|
if (Wowecon and Wowecon.API) then
|
|
|
|
local priceG, volG, priceS, volS;
|
|
|
|
if (itemLink) then
|
|
priceG, volG = Wowecon.API.GetAuctionPrice_ByLink (itemLink, Wowecon.API.GLOBAL_PRICE)
|
|
priceS, volS = Wowecon.API.GetAuctionPrice_ByLink (itemLink, Wowecon.API.SERVER_PRICE)
|
|
else
|
|
priceG, volG = Wowecon.API.GetAuctionPrice_ByName (itemName, Wowecon.API.GLOBAL_PRICE)
|
|
priceS, volS = Wowecon.API.GetAuctionPrice_ByName (itemName, Wowecon.API.SERVER_PRICE)
|
|
end
|
|
|
|
Atr_AppendHint (results, priceG, ZT("Wowecon global price"), volG);
|
|
Atr_AppendHint (results, priceS, ZT("Wowecon server price"), volS);
|
|
|
|
end
|
|
|
|
if (itemLink) then
|
|
|
|
-- GoingPrice Wowhead
|
|
|
|
local id = zc.ItemIDfromLink (itemLink);
|
|
|
|
id = tonumber(id);
|
|
|
|
if (GoingPrice_Wowhead_Data and GoingPrice_Wowhead_Data[id] and GoingPrice_Wowhead_SV._index) then
|
|
local index = GoingPrice_Wowhead_SV._index["Buyout price"];
|
|
|
|
if (index ~= nil) then
|
|
local price = GoingPrice_Wowhead_Data[id][index];
|
|
|
|
Atr_AppendHint (results, price, "GoingPrice - Wowhead");
|
|
end
|
|
end
|
|
|
|
-- GoingPrice Allakhazam
|
|
|
|
if (GoingPrice_Allakhazam_Data and GoingPrice_Allakhazam_Data[id] and GoingPrice_Allakhazam_SV._index) then
|
|
local index = GoingPrice_Allakhazam_SV._index["Median"];
|
|
|
|
if (index ~= nil) then
|
|
local price = GoingPrice_Allakhazam_Data[id][index];
|
|
|
|
Atr_AppendHint (results, price, "GoingPrice - Allakhazam");
|
|
end
|
|
end
|
|
end
|
|
|
|
return results;
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_ShowHints ()
|
|
|
|
Atr_Col1_Heading:Hide();
|
|
Atr_Col1_Heading_Button:Hide();
|
|
Atr_Col3_Heading_Button:Hide();
|
|
Atr_Col3_Heading:Hide();
|
|
Atr_Col4_Heading:Hide();
|
|
|
|
Atr_Col3_Heading:SetText (ZT("Source"));
|
|
|
|
local currentPane = Atr_GetCurrentPane();
|
|
|
|
currentPane.hints = Atr_BuildHints (currentPane.activeScan.itemName);
|
|
|
|
local numrows = currentPane.hints and getn(currentPane.hints) or 0;
|
|
|
|
if (numrows > 0) then
|
|
Atr_Col1_Heading:Show();
|
|
Atr_Col3_Heading:Show();
|
|
end
|
|
|
|
local line; -- 1 through 12 of our window to scroll
|
|
local dataOffset; -- an index into our data calculated from the scroll offset
|
|
|
|
FauxScrollFrame_Update (AuctionatorScrollFrame, numrows, 12, 16);
|
|
|
|
for line = 1,12 do
|
|
|
|
dataOffset = line + FauxScrollFrame_GetOffset (AuctionatorScrollFrame);
|
|
|
|
local lineEntry = getglobal ("AuctionatorEntry"..line);
|
|
|
|
lineEntry:SetID(dataOffset);
|
|
|
|
if (dataOffset <= numrows and currentPane.hints[dataOffset]) then
|
|
|
|
local data = currentPane.hints[dataOffset];
|
|
|
|
local lineEntry_item_tag = "AuctionatorEntry"..line.."_PerItem_Price";
|
|
|
|
local lineEntry_item = getglobal(lineEntry_item_tag);
|
|
local lineEntry_itemtext = getglobal("AuctionatorEntry"..line.."_PerItem_Text");
|
|
local lineEntry_text = getglobal("AuctionatorEntry"..line.."_EntryText");
|
|
local lineEntry_stack = getglobal("AuctionatorEntry"..line.."_StackPrice");
|
|
|
|
lineEntry_item:Show();
|
|
lineEntry_itemtext:Hide();
|
|
lineEntry_stack:SetText ("");
|
|
Atr_ShowRowStackMoney (lineEntry, nil);
|
|
|
|
Atr_SetMFcolor (lineEntry_item_tag, true);
|
|
|
|
MoneyFrame_Update (lineEntry_item_tag, zc.round(data.price) );
|
|
|
|
local text = data.text;
|
|
if (data.volume) then
|
|
text = text.." ("..ZT("trade volume")..": "..data.volume..")";
|
|
end
|
|
|
|
lineEntry_text:SetText (text);
|
|
lineEntry_text:SetTextColor (0.8, 0.8, 1.0);
|
|
|
|
lineEntry:Show();
|
|
else
|
|
lineEntry:Hide();
|
|
end
|
|
end
|
|
|
|
Atr_HighlightEntry (currentPane.hintsIndex);
|
|
end
|
|
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_SetMFcolor (frameName, blue)
|
|
|
|
local r, g, b = 1, 1, 1;
|
|
|
|
if (blue) then
|
|
r, g, b = 0.7, 0.7, 1.0;
|
|
end
|
|
|
|
local names = { "GoldButtonText", "SilverButtonText", "CopperButtonText" };
|
|
local i;
|
|
|
|
for i = 1, 3 do
|
|
local fs = getglobal (frameName..names[i]);
|
|
if (fs) then
|
|
fs:SetTextColor (r, g, b);
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_GetAuctionPrice (item) -- itemName or itemID
|
|
|
|
local itemName;
|
|
|
|
if (type (item) == "number") then
|
|
itemName = Atr_GetItemInfo (item);
|
|
else
|
|
itemName = item;
|
|
end
|
|
|
|
if (itemName == nil) then
|
|
return nil;
|
|
end
|
|
|
|
if (gAtr_ScanDB[itemName]) then
|
|
return gAtr_ScanDB[itemName];
|
|
end
|
|
|
|
return Atr_GetMostRecentSale (itemName);
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local function Atr_CalcTextWid (price)
|
|
|
|
local wid = 15;
|
|
|
|
if (price > 9) then wid = wid + 12; end;
|
|
if (price > 99) then wid = wid + 44; end;
|
|
if (price > 999) then wid = wid + 12; end;
|
|
if (price > 9999) then wid = wid + 44; end;
|
|
if (price > 99999) then wid = wid + 12; end;
|
|
if (price > 999999) then wid = wid + 12; end;
|
|
if (price > 9999999) then wid = wid + 12; end;
|
|
if (price > 99999999) then wid = wid + 12; end;
|
|
|
|
return wid;
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local function Atr_CalcTTpadding (price1, price2)
|
|
|
|
local padding = "";
|
|
|
|
if (price1 and price2) then
|
|
local vpwidth = Atr_CalcTextWid (price1);
|
|
local apwidth = Atr_CalcTextWid (price2);
|
|
|
|
local padlen = math.floor ((apwidth - vpwidth)/6);
|
|
local k;
|
|
|
|
for k = 1,padlen do
|
|
padding = padding.." ";
|
|
end
|
|
end
|
|
|
|
return padding;
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local UNCOMMON = 2;
|
|
local RARE = 3;
|
|
local EPIC = 4;
|
|
|
|
local WEAPON = 1;
|
|
local ARMOR = 2;
|
|
|
|
local LESSER_MAGIC = 10938;
|
|
local GREATER_MAGIC = 10939;
|
|
local STRANGE_DUST = 10940;
|
|
|
|
local SMALL_GLIMMERING = 10978;
|
|
local LESSER_ASTRAL = 10998;
|
|
|
|
local GREATER_ASTRAL = 11082;
|
|
local SOUL_DUST = 11083;
|
|
local LARGE_GLIMMERING = 11084;
|
|
|
|
local LESSER_MYSTIC = 11134;
|
|
local GREATER_MYSTIC = 11135;
|
|
local VISION_DUST = 11137;
|
|
local SMALL_GLOWING = 11138;
|
|
local LARGE_GLOWING = 11139;
|
|
|
|
local LESSER_NETHER = 11174;
|
|
local GREATER_NETHER = 11175;
|
|
local DREAM_DUST = 11176;
|
|
local SMALL_RADIANT = 11177;
|
|
local LARGE_RADIANT = 11178;
|
|
|
|
local SMALL_BRILLIANT = 14343;
|
|
local LARGE_BRILLIANT = 14344;
|
|
|
|
local LESSER_ETERNAL = 16202;
|
|
local GREATER_ETERNAL = 16203;
|
|
local ILLUSION_DUST = 16204;
|
|
|
|
local NEXUS_CRYSTAL = 20725;
|
|
|
|
local ARCANE_DUST = 22445;
|
|
local GREATER_PLANAR = 22446;
|
|
local LESSER_PLANAR = 22447;
|
|
local SMALL_PRISMATIC = 22448;
|
|
local LARGE_PRISMATIC = 22449;
|
|
local VOID_CRYSTAL = 22450;
|
|
|
|
local DREAM_SHARD = 34052;
|
|
local SMALL_DREAM = 34053;
|
|
|
|
local INFINITE_DUST = 34054;
|
|
local GREATER_COSMIC = 34055;
|
|
local LESSER_COSMIC = 34056;
|
|
local ABYSS_CRYSTAL = 34057;
|
|
|
|
local engDEnames = {};
|
|
|
|
engDEnames [LESSER_MAGIC] = "Lesser Magic Essence";
|
|
engDEnames [GREATER_MAGIC] = "Greater Magic Essence";
|
|
engDEnames [STRANGE_DUST] = "Strange Dust";
|
|
|
|
engDEnames [SMALL_GLIMMERING] = "Small Glimmering Shard";
|
|
engDEnames [LESSER_ASTRAL] = "Lesser Astral Essence";
|
|
|
|
engDEnames [GREATER_ASTRAL] = "Greater Astral Essence";
|
|
engDEnames [SOUL_DUST] = "Soul Dust";
|
|
engDEnames [LARGE_GLIMMERING] = "Large Glimmering Essence";
|
|
|
|
engDEnames [LESSER_MYSTIC] = "Lesser Mystic Essence";
|
|
engDEnames [GREATER_MYSTIC] = "Greater Mystic Essence";
|
|
engDEnames [VISION_DUST] = "Vision Dust";
|
|
engDEnames [SMALL_GLOWING] = "Small Glowing Shard";
|
|
engDEnames [LARGE_GLOWING] = "Large Glowing Shard";
|
|
|
|
engDEnames [LESSER_NETHER] = "Lesser Nether Essence";
|
|
engDEnames [GREATER_NETHER] = "Greater Nether Essence";
|
|
engDEnames [DREAM_DUST] = "Dream Dust";
|
|
engDEnames [SMALL_RADIANT] = "Small Radiant";
|
|
engDEnames [LARGE_RADIANT] = "Large Radiant";
|
|
|
|
engDEnames [SMALL_BRILLIANT] = "Small Brilliant Shard";
|
|
engDEnames [LARGE_BRILLIANT] = "Large Brilliant Shard";
|
|
|
|
engDEnames [LESSER_ETERNAL] = "Lesser Eternal Essence";
|
|
engDEnames [GREATER_ETERNAL] = "Greater Eternal Essence";
|
|
engDEnames [ILLUSION_DUST] = "Illusion Dust";
|
|
|
|
engDEnames [NEXUS_CRYSTAL] = "Nexus Crystal";
|
|
|
|
engDEnames [ARCANE_DUST] = "Arcane Dust";
|
|
engDEnames [GREATER_PLANAR] = "Greater Planar Essence";
|
|
engDEnames [LESSER_PLANAR] = "Lesser Planar Essence";
|
|
engDEnames [SMALL_PRISMATIC] = "Small Prismatic Shard";
|
|
engDEnames [LARGE_PRISMATIC] = "Large Prismatic Shard";
|
|
engDEnames [VOID_CRYSTAL] = "Void Crystal";
|
|
|
|
engDEnames [DREAM_SHARD] = "Dream Shard";
|
|
engDEnames [SMALL_DREAM] = "Small Dream Shard";
|
|
|
|
engDEnames [INFINITE_DUST] = "Infinite Dust";
|
|
engDEnames [GREATER_COSMIC] = "Greater Cosmic Essence";
|
|
engDEnames [LESSER_COSMIC] = "Lesser Cosmic Essence";
|
|
engDEnames [ABYSS_CRYSTAL] = "Abyss Crystal";
|
|
|
|
|
|
local dustsAndEssences = {};
|
|
|
|
tinsert (dustsAndEssences, LESSER_MAGIC)
|
|
tinsert (dustsAndEssences, GREATER_MAGIC)
|
|
tinsert (dustsAndEssences, STRANGE_DUST)
|
|
|
|
tinsert (dustsAndEssences, SMALL_GLIMMERING)
|
|
tinsert (dustsAndEssences, LESSER_ASTRAL)
|
|
|
|
tinsert (dustsAndEssences, GREATER_ASTRAL)
|
|
tinsert (dustsAndEssences, SOUL_DUST)
|
|
tinsert (dustsAndEssences, LARGE_GLIMMERING)
|
|
|
|
tinsert (dustsAndEssences, LESSER_MYSTIC)
|
|
tinsert (dustsAndEssences, GREATER_MYSTIC)
|
|
tinsert (dustsAndEssences, VISION_DUST)
|
|
tinsert (dustsAndEssences, SMALL_GLOWING)
|
|
tinsert (dustsAndEssences, LARGE_GLOWING)
|
|
|
|
tinsert (dustsAndEssences, LESSER_NETHER)
|
|
tinsert (dustsAndEssences, GREATER_NETHER)
|
|
tinsert (dustsAndEssences, DREAM_DUST)
|
|
tinsert (dustsAndEssences, SMALL_RADIANT)
|
|
tinsert (dustsAndEssences, LARGE_RADIANT)
|
|
|
|
tinsert (dustsAndEssences, SMALL_BRILLIANT)
|
|
tinsert (dustsAndEssences, LARGE_BRILLIANT)
|
|
|
|
tinsert (dustsAndEssences, LESSER_ETERNAL)
|
|
tinsert (dustsAndEssences, GREATER_ETERNAL)
|
|
tinsert (dustsAndEssences, ILLUSION_DUST)
|
|
|
|
tinsert (dustsAndEssences, NEXUS_CRYSTAL)
|
|
|
|
tinsert (dustsAndEssences, ARCANE_DUST)
|
|
tinsert (dustsAndEssences, GREATER_PLANAR)
|
|
tinsert (dustsAndEssences, LESSER_PLANAR)
|
|
tinsert (dustsAndEssences, SMALL_PRISMATIC)
|
|
tinsert (dustsAndEssences, LARGE_PRISMATIC)
|
|
tinsert (dustsAndEssences, VOID_CRYSTAL)
|
|
|
|
tinsert (dustsAndEssences, DREAM_SHARD)
|
|
tinsert (dustsAndEssences, SMALL_DREAM)
|
|
|
|
tinsert (dustsAndEssences, INFINITE_DUST)
|
|
tinsert (dustsAndEssences, GREATER_COSMIC)
|
|
tinsert (dustsAndEssences, LESSER_COSMIC)
|
|
tinsert (dustsAndEssences, ABYSS_CRYSTAL)
|
|
|
|
gAtr_dustCacheIndex = 0; -- the 3.x dust list is not cached on 1.12 (pulling unknown items can disconnect)
|
|
local dustCacheState = 0;
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_GetNextDustIntoCache() -- make sure all the dusts and essences are in the local cache
|
|
-- only needed after a major patch and a cache wipe
|
|
if (gAtr_dustCacheIndex == 0) then
|
|
return;
|
|
end
|
|
|
|
local itemID = dustsAndEssences[gAtr_dustCacheIndex];
|
|
local itemString = "item:"..itemID..":0:0:0:0:0:0:0";
|
|
|
|
local itemName, itemLink = Atr_GetItemInfo (itemString);
|
|
|
|
if (itemLink == nil and dustCacheState == 0) then
|
|
dustCacheState = 1;
|
|
zc.md ("pulling "..itemString.." into the local cache");
|
|
AtrScanningTooltip:SetHyperlink(itemString);
|
|
end
|
|
|
|
if (itemLink) then
|
|
--zc.md (itemName.." is already in local cache");
|
|
dustCacheState = 0;
|
|
gAtr_dustCacheIndex = gAtr_dustCacheIndex + 1;
|
|
|
|
if (gAtr_dustCacheIndex > getn(dustsAndEssences)) then
|
|
gAtr_dustCacheIndex = 0; -- finished
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local deItemNames = {};
|
|
|
|
local function Atr_GetDEitemName (itemID)
|
|
|
|
if (deItemNames[itemID] == nil) then
|
|
local itemName = Atr_GetItemInfo (itemID);
|
|
if (itemName == nil) then
|
|
zc.md ("defaulting to english DE mat name: "..engDEnames [itemID]);
|
|
return engDEnames [itemID];
|
|
end
|
|
|
|
deItemNames[itemID] = itemName;
|
|
end
|
|
|
|
return deItemNames[itemID];
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_GetAuctionPriceDE (itemID) -- same as Atr_GetAuctionPrice but understands that some "lesser" essences are convertible with "greater"
|
|
|
|
local lesserPrice;
|
|
local greaterPrice;
|
|
|
|
if (itemID == LESSER_COSMIC) then
|
|
lesserPrice = Atr_GetAuctionPrice (Atr_GetDEitemName (LESSER_COSMIC));
|
|
greaterPrice = Atr_GetAuctionPrice (Atr_GetDEitemName (GREATER_COSMIC));
|
|
end
|
|
|
|
if (itemID == LESSER_PLANAR) then
|
|
lesserPrice = Atr_GetAuctionPrice (Atr_GetDEitemName (LESSER_PLANAR));
|
|
greaterPrice = Atr_GetAuctionPrice (Atr_GetDEitemName (GREATER_PLANAR));
|
|
end
|
|
|
|
if (lesserPrice ~= nil and greaterPrice ~= nil and lesserPrice * 3 > greaterPrice) then
|
|
return math.floor (greaterPrice / 3);
|
|
end
|
|
|
|
return Atr_GetAuctionPrice (Atr_GetDEitemName (itemID));
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local deTable = {};
|
|
|
|
-----------------------------------------
|
|
|
|
local function deKey (itemType, itemRarity)
|
|
local s = tostring(itemType).."_"..itemRarity
|
|
return s;
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local function DEtableInsert(t, info)
|
|
|
|
local entry = {};
|
|
|
|
local x, i, n;
|
|
|
|
entry[1] = info[1];
|
|
entry[2] = info[2];
|
|
|
|
n = 3;
|
|
|
|
for x = 3,getn(info),3 do
|
|
local nums = info[x+1];
|
|
if (type(nums) == "number") then
|
|
entry[n] = info[x];
|
|
entry[n+1] = info[x+1];
|
|
entry[n+2] = info[x+2];
|
|
n = n + 3;
|
|
else
|
|
for i = nums[1],nums[2] do
|
|
entry[n] = info[x]/(nums[2]-nums[1]+1);
|
|
entry[n+1] = i;
|
|
entry[n+2] = info[x+2];
|
|
n = n + 3;
|
|
end
|
|
end
|
|
end
|
|
|
|
table.insert (t, entry);
|
|
|
|
end
|
|
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_InitDETable() -- disenchant tables are for the 3.x item level system; vanilla items have no item level
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local function Atr_FindDEentry (itemType, itemRarity, itemLevel)
|
|
|
|
local itemTypeNum = Atr_ItemType2AuctionClass (itemType);
|
|
|
|
local t = deTable[deKey(itemTypeNum, itemRarity)];
|
|
|
|
if (t) then
|
|
local n;
|
|
for n = 1, getn(t) do
|
|
|
|
local ta = t[n];
|
|
|
|
if (itemLevel >= ta[1] and itemLevel <= ta[2]) then
|
|
return ta;
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local function Atr_AddDEDetailsToTip (tip, itemType, itemRarity, itemLevel, DEreqLevel)
|
|
|
|
local ta = Atr_FindDEentry (itemType, itemRarity, itemLevel);
|
|
|
|
if (ta) then
|
|
local x;
|
|
for x = 3,getn(ta),3 do
|
|
local percent = math.floor (ta[x]*100) / 100;
|
|
|
|
local deitem = Atr_GetDEitemName(ta[x+2]);
|
|
if (deitem == nil) then
|
|
deitem = "???";
|
|
end
|
|
|
|
tip:AddLine (" |cFFFFFFFF"..percent.."%|r "..ta[x+1].." "..deitem);
|
|
end
|
|
end
|
|
|
|
tip:AddLine (" |cFFAAAAFF"..ZT("Required DE skill level")..": "..DEreqLevel);
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_DumpDETable (itemType, itemRarity)
|
|
|
|
local t = deTable[deKey(itemType, itemRarity)];
|
|
|
|
if (t) then
|
|
local n, x;
|
|
for n = 1, getn(t) do
|
|
local ta = t[n];
|
|
|
|
zc.msg_pink ("iLvl: "..ta[1].."-"..ta[2]);
|
|
|
|
for x = 3,getn(ta),3 do
|
|
zc.msg_pink (" "..ta[x].."% "..ta[x+1].." "..Atr_GetDEitemName(ta[x+2]).." ("..Atr_GetAuctionPrice (Atr_GetDEitemName(ta[x+2]))..")");
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
function Atr_CalcDisenchantPrice (itemType, itemRarity, itemLevel)
|
|
|
|
if (Atr_IsWeaponType (itemType) or Atr_IsArmorType (itemType)) then
|
|
if (itemRarity == UNCOMMON or itemRarity == RARE or itemRarity == EPIC) then
|
|
|
|
local dePrice = 0;
|
|
|
|
local ta = Atr_FindDEentry (itemType, itemRarity, itemLevel);
|
|
if (ta) then
|
|
local x;
|
|
for x = 3,getn(ta),3 do
|
|
local price = Atr_GetAuctionPriceDE (ta[x+2]);
|
|
if (price) then
|
|
dePrice = dePrice + (ta[x] * ta[x+1] * price);
|
|
end
|
|
end
|
|
end
|
|
|
|
return math.floor (dePrice/100);
|
|
end
|
|
end
|
|
|
|
return nil; -- can't be disenchanted
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local function ShowTipWithPricing (tip, link, num)
|
|
|
|
Atr_TipBeginMoney (tip);
|
|
|
|
|
|
if (link == nil) then
|
|
return;
|
|
end
|
|
|
|
--[[
|
|
if (num == "tradeskill") then
|
|
|
|
local skill = link;
|
|
|
|
local n;
|
|
for n = 1,GetTradeSkillNumReagents(skill) do
|
|
local rname, _, rnum = GetTradeSkillReagentInfo(skill, n);
|
|
local rlink = GetTradeSkillReagentItemLink (skill, n);
|
|
zc.md (skill, rlink, rnum);
|
|
end
|
|
|
|
return;
|
|
end
|
|
]]--
|
|
|
|
local itemName, itemLink, itemRarity, itemLevel, itemMinLevel, itemType, _, _, _, _, itemVendorPrice = Atr_GetItemInfo (link);
|
|
|
|
local itemID = zc.ItemIDfromLink (link);
|
|
itemID = tonumber(itemID);
|
|
|
|
local vendorPrice = 0;
|
|
local auctionPrice = 0;
|
|
local dePrice = nil;
|
|
|
|
if (AUCTIONATOR_V_TIPS == 1) then vendorPrice = itemVendorPrice; end;
|
|
if (AUCTIONATOR_A_TIPS == 1) then auctionPrice = Atr_GetAuctionPrice (itemName); end;
|
|
if (AUCTIONATOR_D_TIPS == 1 and itemLevel) then dePrice = Atr_CalcDisenchantPrice (itemType, itemRarity, itemLevel); end;
|
|
|
|
local xstring = "";
|
|
local showStackPrices = IsShiftKeyDown();
|
|
|
|
if (AUCTIONATOR_SHIFT_TIPS == 2) then
|
|
showStackPrices = not IsShiftKeyDown();
|
|
end
|
|
|
|
if (num and showStackPrices) then
|
|
if (auctionPrice) then auctionPrice = auctionPrice * num; end;
|
|
if (vendorPrice) then vendorPrice = vendorPrice * num; end;
|
|
if (dePrice) then dePrice = dePrice * num; end;
|
|
xstring = "|cFFAAAAFF x"..num.."|r";
|
|
end;
|
|
|
|
if (vendorPrice == nil) then
|
|
vendorPrice = 0;
|
|
end
|
|
|
|
-- vendor info
|
|
|
|
if (AUCTIONATOR_V_TIPS == 1 and vendorPrice > 0) then
|
|
local vpadding = Atr_CalcTTpadding (vendorPrice, auctionPrice);
|
|
Atr_TipAddMoneyLine (tip, ZT("Vendor")..xstring, vendorPrice)
|
|
end
|
|
|
|
-- auction info
|
|
|
|
if (AUCTIONATOR_A_TIPS == 1) then
|
|
|
|
local bonding = Atr_GetBonding(itemID);
|
|
local isBOP = (bonding == 1);
|
|
local isQuest = (bonding == 4 or bonding == 5);
|
|
|
|
if (isBOP) then
|
|
tip:AddDoubleLine (ZT("Auction")..xstring, "|cFFFFFFFF"..ZT("BOP").." ");
|
|
elseif (isQuest) then
|
|
tip:AddDoubleLine (ZT("Auction")..xstring, "|cFFFFFFFF"..ZT("Quest Item").." ");
|
|
elseif (auctionPrice ~= nil) then
|
|
Atr_TipAddMoneyLine (tip, ZT("Auction")..xstring, auctionPrice);
|
|
else
|
|
tip:AddDoubleLine (ZT("Auction")..xstring, "|cFFFFFFFF"..ZT("unknown").." ");
|
|
end
|
|
end
|
|
|
|
-- disenchanting info
|
|
|
|
if (AUCTIONATOR_D_TIPS == 1 and dePrice ~= nil) then
|
|
if (dePrice > 0) then
|
|
Atr_TipAddMoneyLine (tip, ZT("Disenchant")..xstring, dePrice);
|
|
else
|
|
tip:AddDoubleLine (ZT("Disenchant")..xstring, "|cFFFFFFFF"..ZT("unknown").." ");
|
|
end
|
|
end
|
|
|
|
local showDetails = true;
|
|
|
|
if (AUCTIONATOR_DE_DETAILS_TIPS == 1) then showDetails = IsShiftKeyDown(); end;
|
|
if (AUCTIONATOR_DE_DETAILS_TIPS == 2) then showDetails = IsControlKeyDown(); end;
|
|
if (AUCTIONATOR_DE_DETAILS_TIPS == 3) then showDetails = IsAltKeyDown(); end;
|
|
if (AUCTIONATOR_DE_DETAILS_TIPS == 4) then showDetails = false; end;
|
|
if (AUCTIONATOR_DE_DETAILS_TIPS == 5) then showDetails = true; end;
|
|
|
|
if (showDetails and dePrice ~= nil) then
|
|
Atr_AddDEDetailsToTip (tip, itemType, itemRarity, itemLevel, Atr_DEReqLevel(itemID));
|
|
end
|
|
|
|
tip:Show()
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
local function Atr_SafeTipHook (tip, method, fn)
|
|
|
|
Atr_hooksecurefunc (tip, method, function (t, a, b, c, d)
|
|
local ok, err = pcall (fn, t, a, b, c, d);
|
|
if (not ok) then
|
|
Atr_ReportError ("tooltip "..method..": "..tostring(err)); -- never break the tooltip, but say why
|
|
end
|
|
end);
|
|
|
|
end
|
|
|
|
-----------------------------------------
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetBagItem",
|
|
function(tip, bag, slot)
|
|
local _, num = GetContainerItemInfo(bag, slot);
|
|
ShowTipWithPricing (tip, GetContainerItemLink(bag, slot), num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetAuctionItem",
|
|
function (tip, type, index)
|
|
local _, _, num = GetAuctionItemInfo(type, index);
|
|
ShowTipWithPricing (tip, GetAuctionItemLink(type, index), num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetAuctionSellItem",
|
|
function (tip)
|
|
local link, name, count = Atr_SellSlotLink();
|
|
ShowTipWithPricing (tip, link, count);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetLootItem",
|
|
function (tip, slot)
|
|
if LootSlotIsItem(slot) then
|
|
local _, _, num = GetLootSlotInfo(slot);
|
|
ShowTipWithPricing (tip, GetLootSlotLink(slot), num);
|
|
end
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetLootRollItem",
|
|
function (tip, slot)
|
|
local _, _, num = GetLootRollItemInfo(slot);
|
|
ShowTipWithPricing (tip, GetLootRollItemLink(slot), num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetInventoryItem",
|
|
function (tip, unit, slot)
|
|
ShowTipWithPricing (tip, GetInventoryItemLink(unit, slot), GetInventoryItemCount(unit, slot));
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetTradeSkillItem",
|
|
function (tip, skill, id)
|
|
local link = GetTradeSkillItemLink(skill);
|
|
local num = GetTradeSkillNumMade(skill);
|
|
if id then
|
|
local _, _, reagentNum = GetTradeSkillReagentInfo(skill, id);
|
|
link = GetTradeSkillReagentItemLink(skill, id);
|
|
num = reagentNum;
|
|
end
|
|
|
|
ShowTipWithPricing (tip, link, num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetTradePlayerItem",
|
|
function (tip, id)
|
|
local _, _, num = GetTradePlayerItemInfo(id);
|
|
ShowTipWithPricing (tip, GetTradePlayerItemLink(id), num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetTradeTargetItem",
|
|
function (tip, id)
|
|
local _, _, num = GetTradeTargetItemInfo(id);
|
|
ShowTipWithPricing (tip, GetTradeTargetItemLink(id), num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetQuestItem",
|
|
function (tip, type, index)
|
|
local _, _, num = GetQuestItemInfo(type, index);
|
|
ShowTipWithPricing (tip, GetQuestItemLink(type, index), num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetQuestLogItem",
|
|
function (tip, type, index)
|
|
local num, _;
|
|
if type == "choice" then
|
|
_, _, num = GetQuestLogChoiceInfo(index);
|
|
else
|
|
_, _, num = GetQuestLogRewardInfo(index)
|
|
end
|
|
|
|
ShowTipWithPricing (tip, GetQuestLogItemLink(type, index), num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (GameTooltip, "SetHyperlink",
|
|
function (tip, itemstring, num)
|
|
local name, link = Atr_GetItemInfo (itemstring);
|
|
ShowTipWithPricing (tip, link, num);
|
|
end
|
|
);
|
|
|
|
Atr_SafeTipHook (ItemRefTooltip, "SetHyperlink",
|
|
function (tip, itemstring)
|
|
local name, link = Atr_GetItemInfo (itemstring);
|
|
ShowTipWithPricing (tip, link);
|
|
end
|
|
);
|