aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MailHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/MailHandler.cpp')
-rwxr-xr-xsrc/server/game/Handlers/MailHandler.cpp44
1 files changed, 20 insertions, 24 deletions
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp
index 00579c2dc80..158fb9b8f55 100755
--- a/src/server/game/Handlers/MailHandler.cpp
+++ b/src/server/game/Handlers/MailHandler.cpp
@@ -577,8 +577,8 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data)
for (PlayerMails::iterator itr = player->GetMailBegin(); itr != player->GetMailEnd(); ++itr)
{
- // packet send mail count as uint8, prevent overflow
- if (mailsCount >= 254)
+ // Only first 50 mails are displayed
+ if (mailsCount >= 50)
{
realCount += 1;
continue;
@@ -590,7 +590,7 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data)
uint8 item_count = (*itr)->items.size(); // max count is MAX_MAIL_ITEMS (12)
- size_t next_mail_size = 2+4+1+((*itr)->messageType == MAIL_NORMAL ? 8 : 4)+4*8+((*itr)->subject.size()+1)+((*itr)->body.size()+1)+1+item_count*(1+4+4+7*3*4+4+4+4+4+4+4+1);
+ size_t next_mail_size = 2+4+1+((*itr)->messageType == MAIL_NORMAL ? 8 : 4)+4*8+((*itr)->subject.size()+1)+((*itr)->body.size()+1)+1+item_count*(1+4+4+MAX_INSPECTED_ENCHANTMENT_SLOT*3*4+4+4+4+4+4+4+1);
if (data.wpos()+next_mail_size > maxPacketSize)
{
@@ -659,8 +659,8 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data)
data << uint8(0);
}
- realCount += 1;
- mailsCount += 1;
+ ++realCount;
+ ++mailsCount;
}
data.put<uint32>(0, realCount); // this will display warning about undelivered mail to player if realCount > mailsCount
@@ -747,11 +747,12 @@ void WorldSession::HandleQueryNextMailTime(WorldPacket & /*recv_data*/)
if (_player->unReadMails > 0)
{
- data << float(0); // float
+ data << float(0); // float
data << uint32(0); // count
uint32 count = 0;
time_t now = time(NULL);
+ std::set<uint32> sentSenders;
for (PlayerMails::iterator itr = _player->GetMailBegin(); itr != _player->GetMailEnd(); ++itr)
{
Mail* m = (*itr);
@@ -763,25 +764,19 @@ void WorldSession::HandleQueryNextMailTime(WorldPacket & /*recv_data*/)
if (now < m->deliver_time)
continue;
- data << uint64(m->sender);
-
- 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;
- }
+ // only send each mail sender once
+ if (sentSenders.count(m->sender))
+ continue;
- data << uint32(0xC6000000); // float unk, time or something
+ data << uint64(m->messageType == MAIL_NORMAL ? m->sender : 0); // player guid
+ data << uint32(m->messageType != MAIL_NORMAL ? m->sender : 0); // non-player entries
+ data << uint32(m->messageType);
+ data << uint32(m->stationery);
+ data << float(m->deliver_time - now);
- if (++count >= 2) // do not display more than 2 mails
+ sentSenders.insert(m->sender);
+ ++count;
+ if (count == 2) // do not display more than 2 mails
break;
}
@@ -790,7 +785,8 @@ void WorldSession::HandleQueryNextMailTime(WorldPacket & /*recv_data*/)
else
{
data << float(-DAY);
- data << uint32(0x00000000);
+ data << uint32(0);
}
+
SendPacket(&data);
}