diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-06-28 21:08:20 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2014-06-28 21:08:20 +0200 |
commit | a260454ad6ecea04db8c31c084d2266ea8df92e8 (patch) | |
tree | d6b8e3a94efe7abda80c2afa51eb6a715d097d28 /src/server/game/Handlers/MailHandler.cpp | |
parent | a6602478112f27901dc9b23c8fa9c17ba92b5726 (diff) | |
parent | 95f864f4adcebc759d38e4fcd31c8fe3187beb8d (diff) |
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src/server/game/Handlers/MailHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MailHandler.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 3c4e5feb771..10b7541f5dd 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -406,7 +406,7 @@ void WorldSession::HandleMailMarkAsRead(WorldPacket& recvData) Player* player = _player; Mail* m = player->GetMail(mailId); - if (m) + if (m && m->state != MAIL_STATE_DELETED) { if (player->unReadMails) --player->unReadMails; @@ -523,6 +523,13 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData) return; } + // verify that the mail has the item to avoid cheaters taking COD items without paying + if (std::find_if(m->items.begin(), m->items.end(), [itemId](MailItemInfo info){ return info.item_guid == itemId; }) == m->items.end()) + { + player->SendMailResult(mailId, MAIL_ITEM_TAKEN, MAIL_ERR_INTERNAL_ERROR); + return; + } + // prevent cheating with skip client money check if (!player->HasEnoughMoney(uint64(m->COD))) { @@ -776,7 +783,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData) Player* player = _player; Mail* m = player->GetMail(mailId); - if (!m || (m->body.empty() && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL)) + if (!m || (m->body.empty() && !m->mailTemplateId) || m->state == MAIL_STATE_DELETED || m->deliver_time > time(NULL) || (m->checked & MAIL_CHECK_MASK_COPIED)) { player->SendMailResult(mailId, MAIL_MADE_PERMANENT, MAIL_ERR_INTERNAL_ERROR); return; |