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
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.factionrealm.deMailTarget)
|
||
|
|
targetBox:SetScript("OnEnterPressed", function(self)
|
||
|
|
TSM.db.factionrealm.deMailTarget = self:GetText():trim()
|
||
|
|
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.factionrealm.deMailTarget
|
||
|
|
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.factionrealm.deMailTarget ~= "" then
|
||
|
|
self:Enable()
|
||
|
|
self:SetText(format(L["Send Disenchantable Greens to %s"], TSM.db.factionrealm.deMailTarget))
|
||
|
|
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
|