Restore work mail system. thx Win32
--HG-- branch : trunk
This commit is contained in:
+14
-3
@@ -525,8 +525,10 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data )
|
|||||||
const uint32 maxPacketSize = 32767;
|
const uint32 maxPacketSize = 32767;
|
||||||
|
|
||||||
uint32 mailsCount = 0; // real send to client mails amount
|
uint32 mailsCount = 0; // real send to client mails amount
|
||||||
|
uint32 realCount = 0; // real mails amount
|
||||||
|
|
||||||
WorldPacket data(SMSG_MAIL_LIST_RESULT, (200)); // guess size
|
WorldPacket data(SMSG_MAIL_LIST_RESULT, (200)); // guess size
|
||||||
|
data << uint32(0); // real mail's count
|
||||||
data << uint8(0); // mail's count
|
data << uint8(0); // mail's count
|
||||||
time_t cur_time = time(NULL);
|
time_t cur_time = time(NULL);
|
||||||
|
|
||||||
@@ -534,7 +536,10 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data )
|
|||||||
{
|
{
|
||||||
// packet send mail count as uint8, prevent overflow
|
// packet send mail count as uint8, prevent overflow
|
||||||
if (mailsCount >= 254)
|
if (mailsCount >= 254)
|
||||||
break;
|
{
|
||||||
|
realCount += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// skip deleted or not delivered (deliver delay not expired) mails
|
// skip deleted or not delivered (deliver delay not expired) mails
|
||||||
if ((*itr)->state == MAIL_STATE_DELETED || cur_time < (*itr)->deliver_time)
|
if ((*itr)->state == MAIL_STATE_DELETED || cur_time < (*itr)->deliver_time)
|
||||||
@@ -545,7 +550,10 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data )
|
|||||||
size_t next_mail_size = 2+4+1+8+4*8+((*itr)->subject.size()+1)+1+item_count*(1+4+4+6*3*4+4+4+1+4+4+4);
|
size_t next_mail_size = 2+4+1+8+4*8+((*itr)->subject.size()+1)+1+item_count*(1+4+4+6*3*4+4+4+1+4+4+4);
|
||||||
|
|
||||||
if (data.wpos()+next_mail_size > maxPacketSize)
|
if (data.wpos()+next_mail_size > maxPacketSize)
|
||||||
break;
|
{
|
||||||
|
realCount += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
uint32 show_flags = 0;
|
uint32 show_flags = 0;
|
||||||
if ((*itr)->messageType != MAIL_NORMAL)
|
if ((*itr)->messageType != MAIL_NORMAL)
|
||||||
@@ -570,6 +578,7 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data )
|
|||||||
data << uint32((*itr)->sender); // creature/gameobject entry, auction id
|
data << uint32((*itr)->sender); // creature/gameobject entry, auction id
|
||||||
break;
|
break;
|
||||||
case MAIL_ITEM: // item entry (?) sender = "Unknown", NYI
|
case MAIL_ITEM: // item entry (?) sender = "Unknown", NYI
|
||||||
|
data << uint32(0); // item entry
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -618,10 +627,12 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data )
|
|||||||
data << uint8(0);
|
data << uint8(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
realCount += 1;
|
||||||
mailsCount += 1;
|
mailsCount += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
data.put<uint8>(0, mailsCount); // set real send mails to client
|
data.put<uint32>(0, realCount); // this will display warning about undelivered mail to player if realCount > mailsCount
|
||||||
|
data.put<uint8>(4, mailsCount); // set real send mails to client
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
|
|
||||||
// recalculate m_nextMailDelivereTime and unReadMails
|
// recalculate m_nextMailDelivereTime and unReadMails
|
||||||
|
|||||||
Reference in New Issue
Block a user