📄 ct_mailmod.lua
字号:
-- Allows the mail frame to be pushed
if ( UIPanelWindows["MailFrame"] ) then
UIPanelWindows["MailFrame"].pushable = 1;
else
UIPanelWindows["MailFrame"] = { area = "left", pushable = 1 };
end
-- This makes sure the FriendsFrame will close if you try to open a mail with mailframe+friendsframe open
if ( UIPanelWindows["FriendsFrame"] ) then
UIPanelWindows["FriendsFrame"].pushable = 2;
else
UIPanelWindows["FriendsFrame"] = { area = "left", pushable = 2 };
end
CT_MAIL_NUMITEMBUTTONS = 21;
-- Hook the ContainerFrameItemButton_OnClick function
local CT_MM_oldCFIB_OC = ContainerFrameItemButton_OnClick;
function CT_MM_ContainerFrameItemButton_OnClick(btn, ignore)
if ( CT_Mail_GetItemFrame(this:GetParent():GetID(), this:GetID()) ) then
return;
end
CT_MM_oldCFIB_OC(btn, ignore);
CT_Mail_UpdateItemButtons();
end
ContainerFrameItemButton_OnClick = CT_MM_ContainerFrameItemButton_OnClick;
CT_oldPickupContainerItem = PickupContainerItem;
function CT_newPickupContainerItem(bag, item, special)
if ( ( CT_Mail_GetItemFrame(bag, item) or ( CT_Mail_addItem and CT_Mail_addItem[1] == bag and CT_Mail_addItem[2] == item ) ) and not special ) then
return;
end
if ( not CursorHasItem() ) then
CT_MailFrame.bag = bag;
CT_MailFrame.item = item;
end
if ( IsAltKeyDown() and CT_MailFrame:IsVisible() and not CursorHasItem() ) then
local i;
for i = 1, CT_MAIL_NUMITEMBUTTONS, 1 do
if ( not getglobal("CT_MailButton" .. i).item ) then
local canMail = CT_Mail_ItemIsMailable(bag, item);
if ( canMail ) then
DEFAULT_CHAT_FRAME:AddMessage("CT_MAIL_CAI" .. canMail, 1, 0.5, 0);
return;
end
CT_oldPickupContainerItem(bag, item);
CT_MailButton_OnClick(getglobal("CT_MailButton" .. i));
CT_Mail_UpdateItemButtons();
return;
end
end
elseif ( IsAltKeyDown() and SendMailFrame:IsVisible() and not CursorHasItem() ) then
CT_oldPickupContainerItem(bag, item);
ClickSendMailItemButton();
return;
elseif ( IsAltKeyDown() and TradeFrame:IsVisible() and not CursorHasItem() ) then
for i = 1, 6, 1 do
if ( not GetTradePlayerItemLink(i) ) then
CT_oldPickupContainerItem(bag, item);
ClickTradeButton(i);
return;
end
end
elseif ( IsAltKeyDown() and not CursorHasItem() and ( not TradeFrame or not TradeFrame:IsVisible() ) and ( not AuctionFrame or not AuctionFrame:IsVisible() ) and UnitExists("target") and CheckInteractDistance("target", 2) and UnitIsFriend("player", "target") and UnitIsPlayer("target") ) then
InitiateTrade("target");
CT_Mail_addItem = { bag, item, UnitName("target"), 2 };
for i = 1, NUM_CONTAINER_FRAMES, 1 do
if ( getglobal("ContainerFrame" .. i):IsVisible() ) then
ContainerFrame_Update(getglobal("ContainerFrame" .. i));
end
end
return;
end
CT_oldPickupContainerItem(bag, item);
CT_Mail_UpdateItemButtons();
end
PickupContainerItem = CT_newPickupContainerItem;
-- Hook the MailFrameTab_OnClick function
local CT_MM_oldMFT_OC = MailFrameTab_OnClick;
function CT_MM_MailFrameTab_OnClick(tab)
if ( not tab ) then
tab = this:GetID();
end
if ( tab == 3 ) then
PanelTemplates_SetTab(MailFrame, 3);
InboxFrame:Hide();
SendMailFrame:Hide();
CT_MailFrame:Show();
SendMailFrame.sendMode = "massmail";
MailFrameTopLeft:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-TopLeft");
MailFrameTopRight:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-TopRight");
MailFrameBotLeft:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-BotLeft");
MailFrameBotRight:SetTexture("Interface\\ClassTrainerFrame\\UI-ClassTrainer-BotRight");
MailFrameTopLeft:SetPoint("TOPLEFT", "MailFrame", "TOPLEFT", 2, -1);
return;
else
CT_MailFrame:Hide();
end
CT_MM_oldMFT_OC(tab);
end
MailFrameTab_OnClick = CT_MM_MailFrameTab_OnClick;
-- Hook the ClickSendMailItemButton function
local CT_MM_oldCSMIB = ClickSendMailItemButton;
function CT_MM_newCSMIB()
if ( not GetSendMailItem() ) then
CT_MailFrame.mailbag = CT_MailFrame.bag;
CT_MailFrame.mailitem = CT_MailFrame.item;
end
CT_MM_oldCSMIB();
end
ClickSendMailItemButton = CT_MM_newCSMIB;
-- Handle the dragging of items
function CT_MailButton_OnClick(button)
if ( not button ) then button = this; end
if ( CursorHasItem() ) then
local bag = CT_MailFrame.bag;
local item = CT_MailFrame.item;
if ( not bag or not item ) then return; end
local canMail = CT_Mail_ItemIsMailable(bag, item)
if ( canMail ) then
DEFAULT_CHAT_FRAME:AddMessage("CT_MAIL_CAI" .. canMail, 1, 0.5, 0);
CT_oldPickupContainerItem(bag, item);
return;
end
CT_oldPickupContainerItem(bag, item);
if ( this.bag and this.item ) then
-- There's already an item there
-- Pickup that item to replicate Send Mail's behaviour
CT_oldPickupContainerItem(button.bag, button.item);
CT_MailFrame.bag = button.bag;
CT_MailFrame.item = button.item;
else
CT_MailFrame.bag = nil;
CT_MailFrame.item = nil;
end
local texture, count = GetContainerItemInfo(bag, item);
getglobal(button:GetName() .. "IconTexture"):Show();
getglobal(button:GetName() .. "IconTexture"):SetTexture(texture);
if ( count > 1 ) then
getglobal(button:GetName() .. "Count"):SetText(count);
getglobal(button:GetName() .. "Count"):Show();
else
getglobal(button:GetName() .. "Count"):Hide();
end
button.bag = bag;
button.item = item;
button.texture = texture;
button.count = count;
elseif ( button.item and button.bag ) then
CT_oldPickupContainerItem(button.bag, button.item);
getglobal(button:GetName() .. "IconTexture"):Hide();
getglobal(button:GetName() .. "Count"):Hide();
CT_MailFrame.bag = button.bag;
CT_MailFrame.item = button.item;
button.item = nil;
button.bag = nil;
button.count = nil;
button.texture = nil;
end
local num = CT_Mail_GetNumMails();
CT_MailFrame.num = num;
CT_Mail_CanSend(CT_MailNameEditBox);
if ( num == 0 ) then num = 1; end
MoneyFrame_Update("CT_MailCostMoneyFrame", GetSendMailPrice()*num);
for i = 1, NUM_CONTAINER_FRAMES, 1 do
if ( getglobal("ContainerFrame" .. i):IsVisible() ) then
ContainerFrame_Update(getglobal("ContainerFrame" .. i));
end
end
end
function CT_Mail_ItemIsMailable(bag, item)
-- Make sure tooltip is cleared
for i = 1, 29, 1 do
getglobal("CT_MMTooltipTextLeft" .. i):SetText("");
end
CT_MMTooltip:SetBagItem(bag, item);
for i = 1, CT_MMTooltip:NumLines(), 1 do
local text = getglobal("CT_MMTooltipTextLeft" .. i):GetText();
if ( text == ITEM_SOULBOUND ) then
return "CT_MAIL_Soulbound";
elseif ( text == ITEM_BIND_QUEST ) then
return "CT_MAIL_Quest";
elseif ( text == ITEM_CONJURED ) then
return "CT_MAIL_Conjured";
end
end
return nil;
end
function CT_Mail_UpdateItemButtons(frame)
local i;
for i = 1, CT_MAIL_NUMITEMBUTTONS, 1 do
local btn = getglobal("CT_MailButton" .. i);
if ( not frame or btn ~= frame ) then
local texture, count;
if ( btn.item and btn.bag ) then
texture, count = GetContainerItemInfo(btn.bag, btn.item);
end
if ( not texture ) then
getglobal(btn:GetName() .. "IconTexture"):Hide();
getglobal(btn:GetName() .. "Count"):Hide();
btn.item = nil; btn.bag = nil; btn.count = nil; btn.texture = nil;
else
btn.count = count;
btn.texture = texture;
getglobal(btn:GetName() .. "IconTexture"):Show();
getglobal(btn:GetName() .. "IconTexture"):SetTexture(texture);
if ( count > 1 ) then
getglobal(btn:GetName() .. "Count"):Show();
getglobal(btn:GetName() .. "Count"):SetText(count);
else
getglobal(btn:GetName() .. "Count"):Hide();
end
end
end
end
end
function CT_Mail_GetItemFrame(bag, item)
local i;
for i = 1, CT_MAIL_NUMITEMBUTTONS, 1 do
local btn = getglobal("CT_MailButton" .. i);
if ( btn.item == item and btn.bag == bag ) then
return btn;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -