init
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
-- TradeSkillMaster_Mailing --
|
||||
-- http://www.curse.com/addons/wow/tradeskillmaster_mailing --
|
||||
-- --
|
||||
-- A TradeSkillMaster Addon (http://tradeskillmaster.com) --
|
||||
-- All Rights Reserved* - Detailed license information included with addon. --
|
||||
-- ------------------------------------------------------------------------------ --
|
||||
|
||||
local TSM = select(2, ...)
|
||||
local Groups = TSM:NewModule("Groups", "AceEvent-3.0")
|
||||
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Mailing") -- loads the localization table
|
||||
|
||||
local private = {}
|
||||
|
||||
|
||||
function Groups:CreateTab(parent)
|
||||
local frame = CreateFrame("Frame", nil, parent)
|
||||
frame:Hide()
|
||||
frame:SetAllPoints()
|
||||
frame:SetScript("OnHide", function()
|
||||
TSMAPI:CancelFrame("mailingGroupsRepeat")
|
||||
end)
|
||||
|
||||
local stContainer = CreateFrame("Frame", nil, frame)
|
||||
stContainer:SetPoint("TOPLEFT", 5, -5)
|
||||
stContainer:SetPoint("BOTTOMRIGHT", -5, 35)
|
||||
TSMAPI.Design:SetFrameColor(stContainer)
|
||||
frame.groupTree = TSMAPI:CreateGroupTree(stContainer, "Mailing", "Mailing_Send")
|
||||
|
||||
local function OnButtonClick(self)
|
||||
if IsShiftKeyDown() then
|
||||
TSMAPI:CreateTimeDelay("mailingResendDelay", 0.1, private.StartSending, TSM.db.global.resendDelay * 60)
|
||||
else
|
||||
private:StartSending()
|
||||
end
|
||||
end
|
||||
Groups:RegisterEvent("MAIL_CLOSED", function() TSMAPI:CancelFrame("mailingResendDelay") end)
|
||||
|
||||
local button = TSMAPI.GUI:CreateButton(frame, 15)
|
||||
button:SetPoint("BOTTOMLEFT", 5, 5)
|
||||
button:SetPoint("BOTTOMRIGHT", -5, 5)
|
||||
button:SetHeight(25)
|
||||
button:SetText(L["Mail Selected Groups"])
|
||||
button:SetScript("OnClick", OnButtonClick)
|
||||
button.tooltip = L["Shift-Click to automatically re-send after the amount of time specified in the TSM_Mailing options."]
|
||||
frame.button = button
|
||||
|
||||
private.frame = frame
|
||||
return frame
|
||||
end
|
||||
|
||||
local badOperations = {}
|
||||
function private:ValidateOperation(operation, operationName)
|
||||
if not operation then return end
|
||||
if operation.target == "" then
|
||||
-- operation is invalid (no target)
|
||||
if not badOperations[operationName] then
|
||||
TSM:Printf(L["Skipping operation '%s' because there is no target."], operationName)
|
||||
badOperations[operationName] = true
|
||||
end
|
||||
return
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function private:StartSending()
|
||||
if private.isSending then return end
|
||||
|
||||
-- get a table of how many of each item we have in our bags
|
||||
local inventoryItems = {}
|
||||
for bag, slot, itemString, quantity, locked in TSMAPI:GetBagIterator(true) do
|
||||
inventoryItems[itemString] = (inventoryItems[itemString] or 0) + quantity
|
||||
end
|
||||
|
||||
local badOperations = {}
|
||||
local targets = {}
|
||||
for _, data in pairs(private.frame.groupTree:GetSelectedGroupInfo()) do
|
||||
for _, operationName in ipairs(data.operations) do
|
||||
TSMAPI:UpdateOperation("Mailing", operationName)
|
||||
local operation = TSM.operations[operationName]
|
||||
if private:ValidateOperation(operation, operationName) then
|
||||
-- operation is valid
|
||||
for itemString in pairs(data.items) do
|
||||
local numAvailable = (inventoryItems[itemString] or 0) - operation.keepQty
|
||||
if numAvailable > 0 then
|
||||
local quantity = 0
|
||||
if operation.maxQtyEnabled then
|
||||
if TSMAPI:IsPlayer(operation.target) or not operation.restock then
|
||||
quantity = min(numAvailable, operation.maxQty)
|
||||
else
|
||||
local targetQty = private:GetTargetQuantity(operation.target, itemString, operation.restockGBank)
|
||||
quantity = min(numAvailable, operation.maxQty - targetQty)
|
||||
end
|
||||
else
|
||||
quantity = numAvailable
|
||||
end
|
||||
if quantity > 0 then
|
||||
inventoryItems[itemString] = inventoryItems[itemString] - quantity
|
||||
targets[operation.target] = targets[operation.target] or {}
|
||||
targets[operation.target][itemString] = quantity
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for target in pairs(targets) do
|
||||
if TSMAPI:IsPlayer(target) then
|
||||
targets[target] = nil
|
||||
end
|
||||
end
|
||||
|
||||
private.targets = targets
|
||||
private:SendNextTarget()
|
||||
end
|
||||
|
||||
function private:GetTargetQuantity(player, itemString, includeGBank)
|
||||
local num = 0
|
||||
num = num + ((TSMAPI:ModuleAPI("ItemTracker", "playerbags", player, true) or {})[itemString] or 0)
|
||||
num = num + ((TSMAPI:ModuleAPI("ItemTracker", "playerbank", player, true) or {})[itemString] or 0)
|
||||
num = num + ((TSMAPI:ModuleAPI("ItemTracker", "playermail", player, true) or {})[itemString] or 0)
|
||||
num = num + ((TSMAPI:ModuleAPI("ItemTracker", "playerauctions", player, true) or {})[itemString] or 0)
|
||||
if includeGBank then
|
||||
num = num + (TSMAPI:ModuleAPI("ItemTracker", "playerguildtotal", itemString, player) or 0)
|
||||
end
|
||||
return num
|
||||
end
|
||||
|
||||
function private:SendNextTarget()
|
||||
local target, items = next(private.targets)
|
||||
if not target then
|
||||
private.frame.button:SetText(L["Mail Selected Groups"])
|
||||
private.frame.button:Enable()
|
||||
private.isSending = nil
|
||||
TSM:Print(L["Done sending mail."])
|
||||
return
|
||||
end
|
||||
|
||||
private.isSending = true
|
||||
private.targets[target] = nil
|
||||
private.frame.button:SetText(L["Sending..."])
|
||||
private.frame.button:Disable()
|
||||
if not TSM.AutoMail:SendItems(items, target, private.SendNextTarget) then
|
||||
private:SendNextTarget()
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user