init
This commit is contained in:
@@ -0,0 +1,332 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster_Auctioning --
|
||||
-- http://www.curse.com/addons/wow/tradeskillmaster_auctioning --
|
||||
-- --
|
||||
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
|
||||
-- All Rights Reserved* - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
local TSM = select(2, ...)
|
||||
local Util = TSM:NewModule("Util")
|
||||
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Auctioning") -- loads the localization table
|
||||
|
||||
local currentBank = nil
|
||||
local bFrame = nil
|
||||
local buttonFrame = nil
|
||||
local groupTree = nil
|
||||
|
||||
function Util:OnEnable()
|
||||
TSM:RegisterEvent("GUILDBANKFRAME_OPENED", function(event)
|
||||
currentBank = "guildbank"
|
||||
end)
|
||||
|
||||
TSM:RegisterEvent("BANKFRAME_OPENED", function(event)
|
||||
currentBank = "bank"
|
||||
end)
|
||||
|
||||
TSM:RegisterEvent("GUILDBANKFRAME_CLOSED", function(event, addon)
|
||||
currentBank = nil
|
||||
end)
|
||||
|
||||
TSM:RegisterEvent("BANKFRAME_CLOSED", function(event)
|
||||
currentBank = nil
|
||||
end)
|
||||
end
|
||||
|
||||
local function GetItemPrice(operationPrice, itemString)
|
||||
local func = TSMAPI:ParseCustomPrice(operationPrice)
|
||||
local price = func and func(itemString)
|
||||
return price ~= 0 and price or nil
|
||||
end
|
||||
|
||||
function Util:GetItemPrices(operation, itemString, isResetScan)
|
||||
local prices = {}
|
||||
|
||||
prices.cost = GetItemPrice("crafting", itemString)
|
||||
|
||||
prices.undercut = GetItemPrice(operation.undercut, itemString)
|
||||
prices.minPrice = GetItemPrice(operation.minPrice, itemString)
|
||||
prices.maxPrice = GetItemPrice(operation.maxPrice, itemString)
|
||||
prices.normalPrice = GetItemPrice(operation.normalPrice, itemString)
|
||||
prices.cancelRepostThreshold = GetItemPrice(operation.cancelRepostThreshold, itemString)
|
||||
if isResetScan then
|
||||
prices.resetMaxCost = GetItemPrice(operation.resetMaxCost, itemString)
|
||||
prices.resetMinProfit = GetItemPrice(operation.resetMinProfit, itemString)
|
||||
prices.resetResolution = GetItemPrice(operation.resetResolution, itemString)
|
||||
prices.resetMaxItemCost = GetItemPrice(operation.resetMaxItemCost, itemString)
|
||||
end
|
||||
if TSM.db.global.roundNormalPrice and prices.normalPrice then
|
||||
prices.normalPrice = ceil(prices.normalPrice / COPPER_PER_GOLD) * COPPER_PER_GOLD
|
||||
end
|
||||
prices.resetPrice = operation.priceReset ~= "none" and operation.priceReset ~= "ignore" and prices[operation.priceReset]
|
||||
prices.aboveMax = operation.aboveMax ~= "none" and prices[operation.aboveMax]
|
||||
return prices
|
||||
end
|
||||
|
||||
local function createButton(text, parent, func)
|
||||
local btn = TSMAPI.GUI:CreateButton(bFrame, 15, "Button")
|
||||
btn:SetText(text)
|
||||
btn:SetHeight(17)
|
||||
btn:SetWidth(230)
|
||||
return btn
|
||||
end
|
||||
|
||||
function Util:createTab(parent)
|
||||
|
||||
bFrame = CreateFrame("Frame", nil, parent)
|
||||
--TSMAPI.Design:SetFrameColor(bFrame)
|
||||
bFrame:Hide()
|
||||
|
||||
--size--
|
||||
bFrame:SetAllPoints()
|
||||
|
||||
--GroupTree--
|
||||
local tFrame = CreateFrame("Frame", nil, bFrame)
|
||||
tFrame:SetPoint("TOPLEFT", 0, -5)
|
||||
tFrame:SetPoint("TOPRIGHT", 0, -5)
|
||||
tFrame:SetPoint("BOTTOMLEFT", 0, 120)
|
||||
tFrame:SetPoint("BOTTOMRIGHT", 0, 120)
|
||||
|
||||
groupTree = TSMAPI:CreateGroupTree(tFrame, "Auctioning", "Auctioning_Bank")
|
||||
groupTree:SetPoint("TOPLEFT", 5, -5)
|
||||
groupTree:SetPoint("BOTTOMRIGHT", -5, 5)
|
||||
|
||||
--Buttons--
|
||||
buttonFrame = CreateFrame("Frame", nil, bFrame)
|
||||
buttonFrame:SetPoint("TOPLEFT", 0, -330)
|
||||
buttonFrame:SetPoint("TOPRIGHT", 0, -330)
|
||||
buttonFrame:SetPoint("BOTTOMLEFT")
|
||||
buttonFrame:SetPoint("BOTTOMRIGHT")
|
||||
|
||||
buttonFrame.btnToBank = createButton(L["Move Group To Bank"], buttonFrame, nil)
|
||||
buttonFrame.btnToBank:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 95)
|
||||
|
||||
buttonFrame.btnNonGroup = createButton(L["Move Non Group Items to Bank"], buttonFrame, nil)
|
||||
buttonFrame.btnNonGroup:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 75)
|
||||
|
||||
buttonFrame.btnToBags = createButton(L["Move Post Cap To Bags"], buttonFrame, nil)
|
||||
buttonFrame.btnToBags:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 45)
|
||||
|
||||
buttonFrame.btnAHToBags = createButton(L["Move AH Shortfall To Bags"], buttonFrame, nil)
|
||||
buttonFrame.btnAHToBags:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 25)
|
||||
|
||||
buttonFrame.btnAllToBags = createButton(L["Move Group To Bags"], buttonFrame, nil)
|
||||
buttonFrame.btnAllToBags:SetPoint("BOTTOM", buttonFrame, "BOTTOM", 0, 5)
|
||||
|
||||
Util:updateButtons()
|
||||
|
||||
return bFrame
|
||||
end
|
||||
|
||||
function Util:updateButtons()
|
||||
------------------
|
||||
-- Move to Bank --
|
||||
------------------
|
||||
buttonFrame.btnToBank:SetScript("OnClick", function(self)
|
||||
Util:groupTree(groupTree:GetSelectedGroupInfo(), "bags")
|
||||
end)
|
||||
|
||||
-----------------------------------
|
||||
-- Move Non Group Items to Bank --
|
||||
-----------------------------------
|
||||
buttonFrame.btnNonGroup:SetScript("OnClick", function(self)
|
||||
Util:nonGroupTree(groupTree:GetSelectedGroupInfo(), "bags")
|
||||
end)
|
||||
|
||||
----------------------------
|
||||
-- Move Post Cap to Bags --
|
||||
----------------------------
|
||||
buttonFrame.btnToBags:SetScript("OnClick", function(self)
|
||||
Util:groupTree(groupTree:GetSelectedGroupInfo(), currentBank)
|
||||
end)
|
||||
|
||||
--------------------------------
|
||||
-- Move AH Shortfall to Bags --
|
||||
--------------------------------
|
||||
buttonFrame.btnAHToBags:SetScript("OnClick", function(self)
|
||||
Util:groupTree(groupTree:GetSelectedGroupInfo(), currentBank, false, true)
|
||||
end)
|
||||
|
||||
|
||||
----------------------------
|
||||
-- Move All to Bags --
|
||||
----------------------------
|
||||
buttonFrame.btnAllToBags:SetScript("OnClick", function(self)
|
||||
Util:groupTree(groupTree:GetSelectedGroupInfo(), currentBank, true)
|
||||
end)
|
||||
end
|
||||
|
||||
function Util:groupTree(grpInfo, src, all, ah)
|
||||
local next = next
|
||||
local newgrp = {}
|
||||
local totalItems = Util:getTotalItems(src)
|
||||
local bagItems = Util:getTotalItems("bags") or {}
|
||||
for groupName, data in pairs(grpInfo) do
|
||||
groupName = TSMAPI:FormatGroupPath(groupName, true)
|
||||
for _, opName in ipairs(data.operations) do
|
||||
TSMAPI:UpdateOperation("Auctioning", opName)
|
||||
local opSettings = TSM.operations[opName]
|
||||
|
||||
if not opSettings then
|
||||
-- operation doesn't exist anymore in Auctioning
|
||||
TSM:Printf(L["'%s' has an Auctioning operation of '%s' which no longer exists."], groupName, opName)
|
||||
else
|
||||
--it's a valid operation
|
||||
for itemString in pairs(data.items) do
|
||||
local totalq = 0
|
||||
local usedq = 0
|
||||
local maxPost = opSettings.stackSize * opSettings.postCap
|
||||
|
||||
if totalItems then
|
||||
totalq = totalItems[itemString] or 0
|
||||
end
|
||||
|
||||
if src == "bags" then -- move them all back to bank/gbank
|
||||
if totalq > 0 then
|
||||
newgrp[itemString] = totalq * -1
|
||||
totalItems[itemString] = nil -- remove the current bag count in case we loop round for another operation
|
||||
end
|
||||
else -- move from bank/gbank to bags
|
||||
if totalq > 0 then
|
||||
if all then
|
||||
newgrp[itemString] = totalq
|
||||
totalq = 0
|
||||
else
|
||||
local quantity = maxPost - (bagItems[itemString] or 0)
|
||||
newgrp[itemString] = (newgrp[itemString] or 0) + quantity
|
||||
totalq = totalq - quantity -- remove this operations qty to move from source quantity in case we loop again for another operation
|
||||
if bagItems[itemString] then --remove this operations maxPost quantity from the bag total in case we loop again for another operation
|
||||
bagItems[itemString] = bagItems[itemString] - maxPost
|
||||
if bagItems[itemString] <= 0 then
|
||||
bagItems[itemString] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if src ~= "bags" and ah then -- remove ah/mail quantities from the total to move
|
||||
local playermail = TSMAPI:ModuleAPI("ItemTracker", "playermail")
|
||||
local playerauctions = TSMAPI:ModuleAPI("ItemTracker", "playerauctions")
|
||||
for itemString in pairs(newgrp) do
|
||||
if playerauctions then
|
||||
newgrp[itemString] = newgrp[itemString] - (playerauctions[itemString] or 0)
|
||||
end
|
||||
if playermail then
|
||||
newgrp[itemString] = newgrp[itemString] - (playermail[itemString] or 0)
|
||||
end
|
||||
if newgrp[itemString] < 0 then
|
||||
newgrp[itemString] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if next(newgrp) == nil then
|
||||
TSM:Print(L["Nothing to Move"])
|
||||
else
|
||||
TSM:Print(L["Preparing to Move"])
|
||||
TSMAPI:MoveItems(newgrp, TSM.PrintMsg)
|
||||
end
|
||||
end
|
||||
|
||||
function Util:nonGroupTree(grpInfo, src)
|
||||
local next = next
|
||||
local newgrp = {}
|
||||
local bagItems = Util:getTotalItems("bags")
|
||||
for groupName, data in pairs(grpInfo) do
|
||||
groupName = TSMAPI:FormatGroupPath(groupName, true)
|
||||
for _, opName in ipairs(data.operations) do
|
||||
TSMAPI:UpdateOperation("Auctioning", opName)
|
||||
local opSettings = TSM.operations[opName]
|
||||
|
||||
if not opSettings then
|
||||
-- operation doesn't exist anymore in Auctioning
|
||||
TSM:Printf(L["'%s' has an Auctioning operation of '%s' which no longer exists."], groupName, opName)
|
||||
else
|
||||
-- it's a valid operation so remove all the items from bagItems so we are left with non group items to move
|
||||
for itemString in pairs(data.items) do
|
||||
if bagItems then
|
||||
if bagItems[itemString] then
|
||||
bagItems[itemString] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
for itemString, quantity in pairs(bagItems) do
|
||||
quantity = quantity * -1
|
||||
if newgrp[itemString] then
|
||||
newgrp[itemString] = newgrp[itemString] + quantity
|
||||
else
|
||||
newgrp[itemString] = quantity
|
||||
end
|
||||
end
|
||||
|
||||
if next(newgrp) == nil then
|
||||
TSM:Print(L["Nothing to Move"])
|
||||
else
|
||||
TSM:Print(L["Preparing to Move"])
|
||||
TSMAPI:MoveItems(newgrp, TSM.PrintMsg)
|
||||
end
|
||||
end
|
||||
|
||||
function TSM.PrintMsg(message)
|
||||
TSM:Print(message)
|
||||
end
|
||||
|
||||
function Util:getTotalItems(src)
|
||||
local results = {}
|
||||
if src == "bank" then
|
||||
local function ScanBankBag(bag)
|
||||
for slot = 1, GetContainerNumSlots(bag) do
|
||||
if not TSMAPI:IsSoulbound(bag, slot) then
|
||||
local itemString = TSMAPI:GetBaseItemString(GetContainerItemLink(bag, slot), true)
|
||||
if itemString then
|
||||
local quantity = select(2, GetContainerItemInfo(bag, slot))
|
||||
if not results[itemString] then results[itemString] = 0 end
|
||||
results[itemString] = results[itemString] + quantity
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for bag = NUM_BAG_SLOTS + 1, NUM_BAG_SLOTS + NUM_BANKBAGSLOTS do
|
||||
ScanBankBag(bag)
|
||||
end
|
||||
ScanBankBag(-1)
|
||||
|
||||
return results
|
||||
elseif src == "guildbank" then
|
||||
for bag = 1, GetNumGuildBankTabs() do
|
||||
for slot = 1, MAX_GUILDBANK_SLOTS_PER_TAB or 98 do
|
||||
local link = GetGuildBankItemLink(bag, slot)
|
||||
local itemString = TSMAPI:GetBaseItemString(link, true)
|
||||
if itemString then
|
||||
local quantity = select(2, GetGuildBankItemInfo(bag, slot))
|
||||
if not results[itemString] then results[itemString] = 0 end
|
||||
results[itemString] = results[itemString] + quantity
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return results
|
||||
elseif src == "bags" then
|
||||
for bag, slot, itemString, quantity, locked in TSMAPI:GetBagIterator(true) do
|
||||
if currentBank == "guildbank" then
|
||||
if not TSMAPI:IsSoulbound(bag, slot) then
|
||||
results[itemString] = (results[itemString] or 0) + quantity
|
||||
end
|
||||
else
|
||||
results[itemString] = (results[itemString] or 0) + quantity
|
||||
end
|
||||
end
|
||||
end
|
||||
return results
|
||||
end
|
||||
Reference in New Issue
Block a user