diff options
author | Carbenium <keresztesschmidt@gmail.com> | 2013-12-06 19:13:40 +0100 |
---|---|---|
committer | Carbenium <keresztesschmidt@gmail.com> | 2013-12-06 21:37:55 +0100 |
commit | fa2616fe4efa4651d48710c7458cd2d479e9338b (patch) | |
tree | 5a832891842f44b66488a37ae9b5234cce5a3876 /src/server/game/Handlers/MailHandler.cpp | |
parent | 2b8fb0d8f65fcc0f1d969b9f125d79ece3a9d579 (diff) |
Add mailbox command
Diffstat (limited to 'src/server/game/Handlers/MailHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MailHandler.cpp | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 6fde51b7189..66cdf26d217 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -29,6 +29,39 @@ #include "Item.h" #include "AccountMgr.h" +bool WorldSession::CheckMailBox(uint64 guid) +{ + if (guid == GetPlayer()->GetGUID()) + { + if (!HasPermission(rbac::RBAC_PERM_COMMAND_MAILBOX)) + { + TC_LOG_WARN("cheat", "%s attempt open mailbox in cheating way.", GetPlayer()->GetName()); + return false; + } + } + else if (IS_GAMEOBJECT_GUID(guid)) + { + if(!GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_MAILBOX)) + return false; + } + else if (IS_CRE_OR_VEH_OR_PET_GUID(guid)) + { + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_NONE); + if (!creature) + return false; + + if (!(creature->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_UNK23)) + return false; + + if (creature->GetOwnerGUID() != GetPlayer()->GetGUID()) + return false; + } + else + return false; + + return true; +} + void WorldSession::HandleSendMail(WorldPacket& recvData) { uint64 mailbox, unk3; @@ -62,7 +95,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) // packet read complete, now do check - if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) + if (!CheckMailBox(mailbox)) return; if (receiverName.empty()) @@ -307,7 +340,7 @@ void WorldSession::HandleMailMarkAsRead(WorldPacket& recvData) recvData >> mailbox; recvData >> mailId; - if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) + if (!CheckMailBox(mailbox)) return; Player* player = _player; @@ -331,7 +364,7 @@ void WorldSession::HandleMailDelete(WorldPacket& recvData) recvData >> mailId; recvData.read_skip<uint32>(); // mailTemplateId - if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) + if (!CheckMailBox(mailbox)) return; Mail* m = _player->GetMail(mailId); @@ -359,7 +392,7 @@ void WorldSession::HandleMailReturnToSender(WorldPacket& recvData) recvData >> mailId; recvData.read_skip<uint64>(); // original sender GUID for return to, not used - if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) + if (!CheckMailBox(mailbox)) return; Player* player = _player; @@ -424,7 +457,7 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData) recvData >> mailId; recvData >> itemId; // item guid low - if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) + if (!CheckMailBox(mailbox)) return; Player* player = _player; @@ -518,7 +551,7 @@ void WorldSession::HandleMailTakeMoney(WorldPacket& recvData) recvData >> mailbox; recvData >> mailId; - if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) + if (!CheckMailBox(mailbox)) return; Player* player = _player; @@ -555,7 +588,7 @@ void WorldSession::HandleGetMailList(WorldPacket& recvData) uint64 mailbox; recvData >> mailbox; - if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) + if (!CheckMailBox(mailbox)) return; Player* player = _player; @@ -678,7 +711,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData) recvData >> mailbox; recvData >> mailId; - if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailbox, GAMEOBJECT_TYPE_MAILBOX)) + if (!CheckMailBox(mailbox)) return; Player* player = _player; |