From fa2616fe4efa4651d48710c7458cd2d479e9338b Mon Sep 17 00:00:00 2001 From: Carbenium Date: Fri, 6 Dec 2013 19:13:40 +0100 Subject: Add mailbox command --- src/server/game/Handlers/MailHandler.cpp | 49 ++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 8 deletions(-) (limited to 'src/server/game/Handlers/MailHandler.cpp') 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(); // 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(); // 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; -- cgit v1.2.3 From 2f3cc24e7fedf54e6171e6a9da2b24832372459c Mon Sep 17 00:00:00 2001 From: d-sat Date: Thu, 12 Dec 2013 23:38:32 +0100 Subject: Renamed method --- src/server/game/Handlers/MailHandler.cpp | 18 +++++++++--------- src/server/game/Server/WorldSession.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src/server/game/Handlers/MailHandler.cpp') diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 66cdf26d217..574756d8fcd 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -29,7 +29,7 @@ #include "Item.h" #include "AccountMgr.h" -bool WorldSession::CheckMailBox(uint64 guid) +bool WorldSession::CanOpenMailBox(uint64 guid) { if (guid == GetPlayer()->GetGUID()) { @@ -95,7 +95,7 @@ void WorldSession::HandleSendMail(WorldPacket& recvData) // packet read complete, now do check - if (!CheckMailBox(mailbox)) + if (!CanOpenMailBox(mailbox)) return; if (receiverName.empty()) @@ -340,7 +340,7 @@ void WorldSession::HandleMailMarkAsRead(WorldPacket& recvData) recvData >> mailbox; recvData >> mailId; - if (!CheckMailBox(mailbox)) + if (!CanOpenMailBox(mailbox)) return; Player* player = _player; @@ -364,7 +364,7 @@ void WorldSession::HandleMailDelete(WorldPacket& recvData) recvData >> mailId; recvData.read_skip(); // mailTemplateId - if (!CheckMailBox(mailbox)) + if (!CanOpenMailBox(mailbox)) return; Mail* m = _player->GetMail(mailId); @@ -392,7 +392,7 @@ void WorldSession::HandleMailReturnToSender(WorldPacket& recvData) recvData >> mailId; recvData.read_skip(); // original sender GUID for return to, not used - if (!CheckMailBox(mailbox)) + if (!CanOpenMailBox(mailbox)) return; Player* player = _player; @@ -457,7 +457,7 @@ void WorldSession::HandleMailTakeItem(WorldPacket& recvData) recvData >> mailId; recvData >> itemId; // item guid low - if (!CheckMailBox(mailbox)) + if (!CanOpenMailBox(mailbox)) return; Player* player = _player; @@ -551,7 +551,7 @@ void WorldSession::HandleMailTakeMoney(WorldPacket& recvData) recvData >> mailbox; recvData >> mailId; - if (!CheckMailBox(mailbox)) + if (!CanOpenMailBox(mailbox)) return; Player* player = _player; @@ -588,7 +588,7 @@ void WorldSession::HandleGetMailList(WorldPacket& recvData) uint64 mailbox; recvData >> mailbox; - if (!CheckMailBox(mailbox)) + if (!CanOpenMailBox(mailbox)) return; Player* player = _player; @@ -711,7 +711,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket& recvData) recvData >> mailbox; recvData >> mailId; - if (!CheckMailBox(mailbox)) + if (!CanOpenMailBox(mailbox)) return; Player* player = _player; diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 27895fa5685..a24316eec1d 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -275,7 +275,7 @@ class WorldSession void SendTrainerList(uint64 guid, std::string const& strTitle); void SendListInventory(uint64 guid); void SendShowBank(uint64 guid); - bool CheckMailBox(uint64 guid); + bool CanOpenMailBox(uint64 guid); void SendShowMailBox(uint64 guid); void SendTabardVendorActivate(uint64 guid); void SendSpiritResurrect(); -- cgit v1.2.3