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 From 3802cc2904ba7d4684652e6c32bd63d4b6e7929c Mon Sep 17 00:00:00 2001 From: Discover- Date: Sun, 19 Jan 2014 16:51:53 +0100 Subject: Core/Creature: Fix compile and logic in previous pull request. Also implemented UNIT_NPC_FLAG_MAILBOX. Thanks @Shauren --- src/server/game/Entities/Player/Player.cpp | 5 +++-- src/server/game/Entities/Unit/Unit.h | 3 ++- src/server/game/Handlers/MailHandler.cpp | 15 ++++----------- 3 files changed, 9 insertions(+), 14 deletions(-) (limited to 'src/server/game/Handlers/MailHandler.cpp') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 1dea84d0279..61768b0f84c 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17459,8 +17459,9 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder) UpdateHonorFields(); m_deathExpireTime = time_t(fields[36].GetUInt32()); - if (m_deathExpireTime > now+MAX_DEATH_COUNT*DEATH_EXPIRE_STEP) - m_deathExpireTime = now+MAX_DEATH_COUNT*DEATH_EXPIRE_STEP-1; + + if (m_deathExpireTime > now + MAX_DEATH_COUNT * DEATH_EXPIRE_STEP) + m_deathExpireTime = now + MAX_DEATH_COUNT * DEATH_EXPIRE_STEP - 1; // clear channel spell data (if saved at channel spell casting) SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, 0); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 151f20d09f9..9eef3b023e0 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -683,7 +683,8 @@ enum NPCFlags UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // 100% UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // cause client to send 997 opcode UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, // cause client to send 1015 opcode (spell click) - UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000 // players with mounts that have vehicle data should have it set + UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000, // players with mounts that have vehicle data should have it set + UNIT_NPC_FLAG_MAILBOX = 0x04000000 // }; enum MovementFlags diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index 4cb06a1d469..10ef7810d1d 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -31,29 +31,22 @@ bool WorldSession::CanOpenMailBox(uint64 guid) { - if (guid == GetPlayer()->GetGUID()) + if (guid == _player->GetGUID()) { if (!HasPermission(rbac::RBAC_PERM_COMMAND_MAILBOX)) { - TC_LOG_WARN("cheat", "%s attempt open mailbox in cheating way.", GetPlayer()->GetName()); + TC_LOG_WARN("cheat", "%s attempt open mailbox in cheating way.", _player->GetName().c_str()); return false; } } else if (IS_GAMEOBJECT_GUID(guid)) { - if(!GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_MAILBOX)) + if (!_player->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()) + if (!_player->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_MAILBOX)) return false; } else -- cgit v1.2.3