vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Tradeskill support
Gives you quantities based upon your tradeskilling abilities.
$Id: InfTrades.lua 716 2006-02-09 15:25:17Z mentalpower $
Version 3.8.0 (Kangaroo)
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 GLP.txt); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
--]]
local p = EnhancedTooltip.DebugPrint;
local tsfHookOnUpdate, tsfHookSetSelection, scanTradeskillLink, tradeSkillText
local readFormula, getCounts, scanBank, scanBags, scanContainer, getPlayerName
local initTrades
-- Hooked functions
function tradeHook(type, selID)
p("Processing trade", trade, selID);
if (selID == nil) then
-- We are hooked into the tradeskill frame and it has been updated
for i=1, TRADE_SKILLS_DISPLAYED, 1 do
local button = getglobal("TradeSkillSkill"..i)
local skillIndex = button:GetID()
local skillName, skillType, numAvailable, isExpanded = GetTradeSkillInfo(skillIndex);
button:SetText(tradeSkillText(skillIndex, skillName))
scanTradeskillID(i, false)
end
else
scanTradeskillLink(selID, true)
end
end
function bankHook()
p("Processing bank contents");
scanContainer(BANK_CONTAINER)
for bag = 5, 10 do
scanContainer(bag)
end
end
function bagHook()
p("Processing bag contents");
for bag = 0, 4 do
scanContainer(bag)
end
end
function initTrades()
Stubby.RegisterFunctionHook("EnhTooltip.TradeHook", 100, tradeHook);
Stubby.RegisterFunctionHook("EnhTooltip.BankHook", 100, bankHook);
Stubby.RegisterFunctionHook("EnhTooltip.BagHook", 100, bagHook);
Informant.InitTrades = function() end
end
Informant.InitTrades = initTrades
-- Associated functions
function scanTradeskillLink(id, setStrings)
-- We are hooked into the tradeskill frame and it has been updated
local skillName, skillType, numAvailable, isExpanded = GetTradeSkillInfo(id)
local skillLink = GetTradeSkillItemLink(id)
local skillID = EnhancedTooltip.baselinkFromLink(skillLink)
if (setStrings) then
local totalSkillItems = getTotalCount(skillID)
if (totalSkillItems > 0) then
local invSkillItems = getInventoryCount(skillID)
TradeSkillSkillName:SetText(skillName.." ["..invSkillItems.."/"..totalSkillItems.."]")
else
TradeSkillSkillName:SetText(skillName)
end
end
local formula = "";
local numReagents = GetTradeSkillNumReagents(id)
for i=1, numReagents, 1 do
local reagentName, reagentTexture, reagentCount, playerReagentCount = GetTradeSkillReagentInfo(id, i)
local reagentLink = GetTradeSkillReagentLink(id, i);
local reagentID = EnhancedTooltip.baselinkFromLink(reagentLink);
local totalReagents = getTotalCount(reagentName)
formula = formula..":"..reagentID.."x"..reagentCount
if (setStrings) then
getglobal("TradeSkillReagent"..i.."Name"):SetText(reagentName.." ["..totalReagents.."]")
end
end
Informant_Formulae[skillID] = formula;
end
function scanContainer(bag)
local texture, itemCount, itemLink
local itemID, randomProperty, enchantment, uniqueID, itemName
local containerItems = GetContainerNumSlots(bag)
if (containerItems) then
for containerItemNum = 1, containerItems do
itemLink = GetContainerItemLink(bag, containerItemNum)
if (itemLink) then
texture, itemCount = GetContainerItemInfo(bag, containerItemNum)
itemID, randomProperty, enchantment, uniqueID, itemName = EnhTooltip.BreakLink(itemLink)
if ((bag == BANK_CONTAINER) or ((bag >= 5) and (bag <= 10))) then
end
end
end
end
end
-- Utility functions
-- Get the current realm and player
local playerRealm = nil
local playerName = nil
function getPlayerName()
if (playerName == nil) then
playerRealm = GetCVar("realmName")
playerName = UnitName("player")
end
return playerRealm, playerName;
end
-- Read (and extrapolate) a formula and work out how many we can make
function readFormula(itemKey)
local formula = Informant_Formulae[itemKey]
local bag, bank, other, make, vend, all
local tBag, tBank, tOther, tMake, tVend, tAll
for reagKey, reagCount in string.gfind(formula, ":(%d+)x(%d+)") do
local _,_, reagID = string.find(reagKey, "(\d+):");
bag, bank, other = getCounts(reagKey)
if (InformantFormula[reagKey]) then
local subMake = readFormula(reagKey)
make = subMake.all
end
vend = 0;
local reagData = Informant.getItem(reagID);
if (reagData.quantity > 0) then
vend = 9999;
end
all = math.max(9999, bag + bank + other + vend + make);
tBag = math.min(tBag, math.floor(bag / reagCount))
tBank = math.min(tBank, math.floor(bank / reagCount))
tOther = math.min(tOther, math.floor(other / reagCount))
tMake = math.min(tMake, math.floor(make / reagCount))
tAll = math.min(tAll, math.floor(all / reagCount))
end
return {
bag = tBag,
bank = tBank,
other = tOther,
make = tMake,
all = tAll,
}
end
-- How many of these do I have?
function getCounts(itemID)
local curRealm, curPlayer = getPlayerName()
local invTotal = 0
local bankTotal = 0
local otherTotal = 0
if (InformantItems and InformatItems[curRealm]) then
for player, pData in Informant_Items[curRealm] do
local i,j, invCount, bankCount = string.find(pData, "(%d):(%d)");
if (player == curPlayer) then
invTotal = tonumber(invCount)
bankTotal = tonumber(bankCount)
else
otherTotal = tonumber(invCount) + tonumber(bankCount)
end
end
end
return invTotal, bankTotal, otherTotal;
end