From 9f433f3789248afc154c506f8dc63b064427bf7c Mon Sep 17 00:00:00 2001 From: hunuza Date: Mon, 6 Jul 2009 16:31:58 +0200 Subject: [PATCH] Minor optimizations to MSG_QUERY_NEXT_MAIL_TIME handler. * Do not search for more unread mails when already found 2. * Do not call time(NULL) every iteration. Signed-off-by: hunuza --- src/game/Mail.cpp | 50 ++++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index 2453f193f..2f2dfe85c 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -762,38 +762,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_RED) + 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(4, count); } -- 2.11.4.GIT