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
-- ------------------------------------------------------------------------------ -- |
|
-- 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 |