mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Add mailbox command
This commit is contained in:
File diff suppressed because one or more lines are too long
10
sql/updates/auth/xxxx_xx_xx_xx_auth_rbac_permissions.sql
Normal file
10
sql/updates/auth/xxxx_xx_xx_xx_auth_rbac_permissions.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
SET @id = 775;
|
||||
|
||||
-- Add new permissions
|
||||
DELETE FROM `rbac_permissions` WHERE `id`=@id;
|
||||
INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
|
||||
(@id, 'Command: mailbox');
|
||||
|
||||
DELETE FROM `rbac_linked_permissions` WHERE `linkedId`=@id;
|
||||
INSERT INTO `rbac_linked_permissions` (`id`, `linkedId`) VALUES
|
||||
(196, @id);
|
||||
5
sql/updates/world/xxxx_xx_xx_xx_world_command.txt
Normal file
5
sql/updates/world/xxxx_xx_xx_xx_world_command.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
SET @id = 775;
|
||||
|
||||
DELETE FROM `command` WHERE `name` = 'mailbox';
|
||||
INSERT INTO `command` (`name`, `permission`, `help`) VALUES
|
||||
('mailbox', @id, 'Syntax: .mailbox\r\n\r\nShow your mailbox content.');
|
||||
@@ -678,6 +678,7 @@ enum RBACPermissions
|
||||
RBAC_PERM_COMMAND_WP_UNLOAD = 772,
|
||||
RBAC_PERM_COMMAND_WP_RELOAD = 773,
|
||||
RBAC_PERM_COMMAND_WP_SHOW = 774,
|
||||
RBAC_PERM_COMMAND_MAILBOX = 775,
|
||||
|
||||
// custom permissions 1000+
|
||||
RBAC_PERM_MAX
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -103,6 +103,13 @@ void WorldSession::SendShowBank(uint64 guid)
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::SendShowMailBox(uint64 guid)
|
||||
{
|
||||
WorldPacket data(SMSG_SHOW_MAILBOX, 8);
|
||||
data << guid;
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::HandleTrainerListOpcode(WorldPacket& recvData)
|
||||
{
|
||||
uint64 guid;
|
||||
|
||||
@@ -275,6 +275,8 @@ class WorldSession
|
||||
void SendTrainerList(uint64 guid, std::string const& strTitle);
|
||||
void SendListInventory(uint64 guid);
|
||||
void SendShowBank(uint64 guid);
|
||||
bool CheckMailBox(uint64 guid);
|
||||
void SendShowMailBox(uint64 guid);
|
||||
void SendTabardVendorActivate(uint64 guid);
|
||||
void SendSpiritResurrect();
|
||||
void SendBindPoint(Creature* npc);
|
||||
|
||||
@@ -94,6 +94,7 @@ public:
|
||||
{ "unpossess", rbac::RBAC_PERM_COMMAND_UNPOSSESS, false, &HandleUnPossessCommand, "", NULL },
|
||||
{ "unstuck", rbac::RBAC_PERM_COMMAND_UNSTUCK, true, &HandleUnstuckCommand, "", NULL },
|
||||
{ "wchange", rbac::RBAC_PERM_COMMAND_WCHANGE, false, &HandleChangeWeather, "", NULL },
|
||||
{ "mailbox", rbac::RBAC_PERM_COMMAND_MAILBOX, false, &HandleMailBoxCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
return commandTable;
|
||||
@@ -2464,6 +2465,14 @@ public:
|
||||
player->StopCastingBindSight();
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleMailBoxCommand(ChatHandler* handler, char const* /*args*/)
|
||||
{
|
||||
Player* player = handler->GetSession()->GetPlayer();
|
||||
|
||||
handler->GetSession()->SendShowMailBox(player->GetGUID());
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_misc_commandscript()
|
||||
|
||||
Reference in New Issue
Block a user