diff options
author | megamage <none@none> | 2009-07-10 08:38:35 +0800 |
---|---|---|
committer | megamage <none@none> | 2009-07-10 08:38:35 +0800 |
commit | bf6102e7ed8866feba28622eb3b0089812ec5f36 (patch) | |
tree | 2d4b0663398e6a02e2afedc6fc55cad958a0664d /src | |
parent | 65eb52de117bc977b077b3f2148cd512c0a84fe3 (diff) |
Minor optimizations to MSG_QUERY_NEXT_MAIL_TIME handler. Author: hunuza
* Do not search for more unread mails when already found 2.
* Do not call time(NULL) every iteration.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Mail.cpp | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index 33ff65e7fe0..64ff1c8e0cb 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -772,38 +772,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<uint32>(4, count); } |