You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

198 lines
7.1 KiB

4 years ago
-- ------------------------------------------------------------------------------ --
-- 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 Other = TSM:NewModule("Other", "AceEvent-3.0")
local L = LibStub("AceLocale-3.0"):GetLocale("TradeSkillMaster_Mailing") -- loads the localization table
local private = {}
function Other:CreateTab(parent)
local frame = CreateFrame("Frame", nil, parent)
frame:Hide()
frame:SetAllPoints()
local deBox = CreateFrame("Frame", nil, frame)
TSMAPI.Design:SetFrameColor(deBox)
deBox:SetPoint("TOPLEFT", 5, -5)
deBox:SetPoint("TOPRIGHT", -5, -5)
deBox:SetHeight(80)
private:CreateDisenchantBox(deBox)
TSMAPI.GUI:CreateHorizontalLine(frame, -103)
local sendGoldBox = CreateFrame("Frame", nil, frame)
TSMAPI.Design:SetFrameColor(sendGoldBox)
sendGoldBox:SetPoint("TOPLEFT", deBox, "BOTTOMLEFT", 0, -50)
sendGoldBox:SetPoint("TOPRIGHT", deBox, "BOTTOMRIGHT", 0, -50)
sendGoldBox:SetHeight(80)
private:CreateSendGoldBox(sendGoldBox)
return frame
end
function private:CreateDisenchantBox(frame)
local label = TSMAPI.GUI:CreateLabel(frame, "normal")
label:SetPoint("TOPLEFT", 5, -5)
label:SetPoint("TOPRIGHT", -5, -5)
label:SetHeight(20)
label:SetJustifyV("TOP")
label:SetJustifyH("LEFT")
label:SetText(L["Mail Disenchantables:"])
local targetBoxLabel = TSMAPI.GUI:CreateLabel(frame, "small")
targetBoxLabel:SetPoint("TOPLEFT", 5, -30)
targetBoxLabel:SetHeight(20)
targetBoxLabel:SetJustifyV("CENTER")
targetBoxLabel:SetJustifyH("LEFT")
targetBoxLabel:SetText(L["Target Player:"])
local targetBox = TSMAPI.GUI:CreateInputBox(frame)
targetBox:SetPoint("TOPLEFT", targetBoxLabel, "TOPRIGHT", 5, 0)
targetBox:SetPoint("TOPRIGHT", -5, -30)
targetBox:SetHeight(20)
targetBox:SetText(TSM.db.realm.deMailTarget)
4 years ago
targetBox:SetScript("OnEnterPressed", function(self)
TSM.db.realm.deMailTarget = self:GetText():trim()
4 years ago
self:ClearFocus()
frame.btn:Update()
end)
targetBox.tooltip = L["Enter name of the character disenchantable greens should be sent to."].."\n\n"..TSM.SPELLING_WARNING
local function OnClick()
local target = TSM.db.realm.deMailTarget
4 years ago
if target == "" then return end
local items = {}
local hasItems
for bag, slot, itemString, quantity in TSMAPI:GetBagIterator() do
if private:IsDisenchantable(itemString) and not TSMAPI:GetGroupPath(TSMAPI:GetBaseItemString(itemString, true)) and not TSMAPI:IsSoulbound(bag, slot) then
items[itemString] = (items[itemString] or 0) + quantity
hasItems = true
end
end
if hasItems then
local function callback()
TSM:Printf(L["Sent all disenchantable greens to %s."], target)
frame.btn:Update()
end
frame.btn:Disable()
frame.btn:SetText(L["Sending..."])
TSM.AutoMail:SendItems(items, target, callback)
end
end
local btn = TSMAPI.GUI:CreateButton(frame, 15)
btn:SetPoint("TOPLEFT", 5, -55)
btn:SetPoint("TOPRIGHT", -5, -55)
btn:SetHeight(20)
btn:SetScript("OnClick", OnClick)
btn.tooltip = L["Click this button to send all disenchantable greens in your bags to the specified character."]
btn.Update = function(self)
if TSM.db.realm.deMailTarget ~= "" then
4 years ago
self:Enable()
self:SetText(format(L["Send Disenchantable Greens to %s"], TSM.db.realm.deMailTarget))
4 years ago
else
self:Disable()
self:SetText(L["No Target Player"])
end
end
btn:Update()
frame.btn = btn
end
function private:CreateSendGoldBox(frame)
local label = TSMAPI.GUI:CreateLabel(frame, "normal")
label:SetPoint("TOPLEFT", 5, -5)
label:SetPoint("TOPRIGHT", -5, -5)
label:SetHeight(20)
label:SetJustifyV("TOP")
label:SetJustifyH("LEFT")
label:SetText(L["Send Excess Gold to Banker:"])
local targetBoxLabel = TSMAPI.GUI:CreateLabel(frame, "small")
targetBoxLabel:SetPoint("TOPLEFT", 5, -30)
targetBoxLabel:SetHeight(20)
targetBoxLabel:SetJustifyV("CENTER")
targetBoxLabel:SetJustifyH("LEFT")
targetBoxLabel:SetText(L["Target Player:"])
local targetBox = TSMAPI.GUI:CreateInputBox(frame)
targetBox:SetPoint("TOPLEFT", targetBoxLabel, "TOPRIGHT", 5, 0)
targetBox:SetWidth(80)
targetBox:SetHeight(20)
targetBox:SetText(TSM.db.char.goldMailTarget)
targetBox:SetScript("OnEnterPressed", function(self)
TSM.db.char.goldMailTarget = self:GetText():trim()
self:ClearFocus()
frame.btn:Update()
end)
targetBox.tooltip = L["Enter the name of the player you want to send excess gold to."].."\n\n"..TSM.SPELLING_WARNING
local goldBoxLabel = TSMAPI.GUI:CreateLabel(frame, "small")
goldBoxLabel:SetPoint("TOPLEFT", targetBox, "TOPRIGHT", 15, 0)
goldBoxLabel:SetHeight(20)
goldBoxLabel:SetJustifyV("CENTER")
goldBoxLabel:SetJustifyH("LEFT")
goldBoxLabel:SetText(L["Limit (In Gold):"])
local goldBox = TSMAPI.GUI:CreateInputBox(frame)
goldBox:SetPoint("TOPLEFT", goldBoxLabel, "TOPRIGHT", 5, 0)
goldBox:SetPoint("TOPRIGHT", -5, -30)
goldBox:SetHeight(20)
goldBox:SetNumeric(true)
goldBox:SetNumber(TSM.db.char.goldKeepAmount)
goldBox:SetScript("OnTextChanged", function(self)
TSM.db.char.goldKeepAmount = self:GetNumber()
frame.btn:Update()
end)
goldBox:SetScript("OnEnterPressed", function(self) self:ClearFocus() end)
goldBox.tooltip = L["This is maximum amount of gold you want to keep on the current player. Any amount over this limit will be send to the specified character."]
local function OnClick()
local extra = (GetMoney() - 30) - (TSM.db.char.goldKeepAmount * COPPER_PER_GOLD)
if extra <= 0 then
TSM:Print(L["Not sending any gold as you have less than the specified limit."])
return
end
SetSendMailMoney(extra)
SendMail(TSM.db.char.goldMailTarget, L["TSM_Mailing Excess Gold"], "")
TSM:Printf(L["Sent %s to %s."], TSMAPI:FormatTextMoney(extra), TSM.db.char.goldMailTarget)
end
local btn = TSMAPI.GUI:CreateButton(frame, 15)
btn:SetPoint("TOPLEFT", 5, -55)
btn:SetPoint("TOPRIGHT", -5, -55)
btn:SetHeight(20)
btn:SetScript("OnClick", OnClick)
btn.tooltip = L["Click this button to send excess gold to the specified character."]
btn.Update = function(self)
if TSM.db.char.goldMailTarget == "" then
self:Disable()
self:SetText(L["Not Target Specified"])
elseif TSMAPI:IsPlayer(TSM.db.char.goldMailTarget) then
self:Disable()
self:SetText(L["Target is Current Player"])
else
self:Enable()
self:SetText(format(L["Send Excess Gold to %s"], TSM.db.char.goldMailTarget))
end
end
btn:Update()
frame.btn = btn
end
function private:IsDisenchantable(itemString)
local _, link, quality, _, _, iType = TSMAPI:GetSafeItemInfo(itemString)
local WEAPON, ARMOR = GetAuctionItemClasses()
if itemString and not TSMAPI.DisenchantingData.notDisenchantable[itemString] and (iType == ARMOR or iType == WEAPON) and quality == ITEM_QUALITY_UNCOMMON then
return true
end
end