diff options
Diffstat (limited to 'src/game/Mail.cpp')
-rw-r--r-- | src/game/Mail.cpp | 75 |
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 { |