aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MailHandler.cpp
diff options
context:
space:
mode:
authorCarbenium <keresztesschmidt@gmail.com>2013-12-06 19:13:40 +0100
committerCarbenium <keresztesschmidt@gmail.com>2013-12-06 21:37:55 +0100
commitfa2616fe4efa4651d48710c7458cd2d479e9338b (patch)
tree5a832891842f44b66488a37ae9b5234cce5a3876 /src/server/game/Handlers/MailHandler.cpp
parent2b8fb0d8f65fcc0f1d969b9f125d79ece3a9d579 (diff)
Add mailbox command
Diffstat (limited to 'src/server/game/Handlers/MailHandler.cpp')
-rw-r--r--src/server/game/Handlers/MailHandler.cpp49
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;