aboutsummaryrefslogtreecommitdiff
path: root/src/game/Mail.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Mail.cpp')
-rw-r--r--src/game/Mail.cpp75
1 files changed, 47 insertions, 28 deletions
diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp
index 0af4999092f..94f40f0079e 100644
--- a/src/game/Mail.cpp
+++ b/src/game/Mail.cpp
@@ -32,6 +32,15 @@
#include "AuctionHouseBot.h"
#include "DBCStores.h"
+enum MailShowFlags
+{
+ MAIL_SHOW_UNK0 = 0x0001,
+ MAIL_SHOW_DELETE = 0x0002, // forced show delete button instead return button
+ MAIL_SHOW_AUCTION = 0x0004, // from old comment
+ MAIL_SHOW_COD = 0x0008, // show subject prefix
+ MAIL_SHOW_UNK4 = 0x0010,
+};
+
void MailItem::deleteItem( bool inDB )
{
if(item)
@@ -381,7 +390,7 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data )
}
}
- if (m->sender == AHBplayerGUID)
+ if (m->sender == auctionbot.GetAHBplayerGUID())
{
SendReturnToSender(MAIL_CREATURE, GetAccountId(), m->receiver, m->sender, m->subject, m->itemTextId, &mi, m->money, m->mailTemplateId);
}
@@ -567,7 +576,7 @@ void WorldSession::HandleMailTakeMoney(WorldPacket & recv_data )
// save money and mail to prevent cheating
CharacterDatabase.BeginTransaction();
- pl->SaveDataFieldToDB(); // contains money
+ pl->SaveGoldToDB();
pl->_SaveMail();
CharacterDatabase.CommitTransaction();
}
@@ -611,6 +620,14 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data )
if(data.wpos()+next_mail_size > maxPacketSize)
break;
+ uint32 show_flags = 0;
+ if ((*itr)->messageType != MAIL_NORMAL)
+ show_flags |= MAIL_SHOW_DELETE;
+ if ((*itr)->messageType == MAIL_AUCTION)
+ show_flags |= MAIL_SHOW_AUCTION;
+ if ((*itr)->COD)
+ show_flags |= MAIL_SHOW_COD;
+
data << (uint16) 0x0040; // unknown 2.3.0, different values
data << (uint32) (*itr)->messageID; // Message ID
data << (uint8) (*itr)->messageType; // Message Type
@@ -634,7 +651,7 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data )
data << (uint32) 0; // unknown
data << (uint32) (*itr)->stationery; // stationery (Stationery.dbc)
data << (uint32) (*itr)->money; // Gold
- data << (uint32) 0x04; // unknown, 0x4 - auction, 0x10 - normal
+ data << (uint32) show_flags; // unknown, 0x4 - auction, 0x10 - normal
// Time
data << (float) ((*itr)->expire_time-time(NULL))/DAY;
data << (uint32) (*itr)->mailTemplateId; // mail template (MailTemplate.dbc)
@@ -772,38 +789,40 @@ void WorldSession::HandleQueryNextMailTime(WorldPacket & /*recv_data*/ )
{
data << (uint32) 0; // float
data << (uint32) 0; // count
+
uint32 count = 0;
+ time_t now = time(NULL);
for(PlayerMails::iterator itr = _player->GetmailBegin(); itr != _player->GetmailEnd(); ++itr)
{
Mail *m = (*itr);
- // not checked yet, already must be delivered
- if((m->checked & MAIL_CHECK_MASK_READ)==0 && (m->deliver_time <= time(NULL)))
- {
- ++count;
+ // must be not checked yet
+ if(m->checked & MAIL_CHECK_MASK_READ)
+ continue;
- if(count > 2)
- {
- count = 2;
- break;
- }
+ // and already delivered
+ if(now < m->deliver_time)
+ continue;
- data << (uint64) m->sender; // sender guid
+ data << (uint64) m->sender; // sender guid
- switch(m->messageType)
- {
- case MAIL_AUCTION:
- data << (uint32) 2;
- data << (uint32) 2;
- data << (uint32) m->stationery;
- break;
- default:
- data << (uint32) 0;
- data << (uint32) 0;
- data << (uint32) m->stationery;
- break;
- }
- data << (uint32) 0xC6000000; // float unk, time or something
+ switch(m->messageType)
+ {
+ case MAIL_AUCTION:
+ data << (uint32) 2;
+ data << (uint32) 2;
+ data << (uint32) m->stationery;
+ break;
+ default:
+ data << (uint32) 0;
+ data << (uint32) 0;
+ data << (uint32) m->stationery;
+ break;
}
+ data << (uint32) 0xC6000000; // float unk, time or something
+
+ ++count;
+ if(count == 2) // do not display more than 2 mails
+ break;
}
data.put<uint32>(4, count);
}
@@ -817,7 +836,7 @@ void WorldSession::HandleQueryNextMailTime(WorldPacket & /*recv_data*/ )
void WorldSession::SendMailTo(Player* receiver, uint8 messageType, uint8 stationery, uint32 sender_guidlow_or_entry, uint32 receiver_guidlow, std::string subject, uint32 itemTextId, MailItemsInfo* mi, uint32 money, uint32 COD, uint32 checked, uint32 deliver_delay, uint16 mailTemplateId)
{
- if (receiver_guidlow == AHBplayerGUID)
+ if (receiver_guidlow == auctionbot.GetAHBplayerGUID())
{
if(messageType == MAIL_AUCTION && mi) // auction mail with items
{