[11560] Implement .mailbox command

Work semilar .bank for mailbox case.
This commit is contained in:
VladimirMangos 2011-05-29 09:34:40 +04:00
parent e3463dca0d
commit 598c843548
10 changed files with 61 additions and 11 deletions

View file

@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
`version` varchar(120) default NULL,
`creature_ai_version` varchar(120) default NULL,
`cache_id` int(10) default '0',
`required_11549_01_mangos_spell_proc_event` bit(1) default NULL
`required_11560_01_mangos_command` bit(1) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
--
@ -649,6 +649,7 @@ INSERT INTO `command` VALUES
('lookup taxinode',3,'Syntax: .lookup taxinode $substring\r\n\r\nSearch and output all taxinodes with provide $substring in name.'),
('lookup tele',1,'Syntax: .lookup tele $substring\r\n\r\nSearch and output all .tele command locations with provide $substring in name.'),
('lookup title',2,'Syntax: .lookup title $$namepart\r\n\r\nLooks up a title by $namepart, and returns all matches with their title ID\'s and index\'s.'),
('mailbox',3,'Syntax: .mailbox\r\n\r\nShow your mailbox content.'),
('maxskill',3,'Syntax: .maxskill\r\nSets all skills of the targeted player to their maximum VALUESfor its current level.'),
('modify arena',1,'Syntax: .modify arena #value\r\nAdd $amount arena points to the selected player.'),
('modify aspeed',1,'Syntax: .modify aspeed #rate\r\n\r\nModify all speeds -run,swim,run back,swim back- of the selected player to \"normalbase speed for this move type\"*rate. If no player is selected, modify your speed.\r\n\r\n #rate may range from 0.1 to 10.'),

View file

@ -0,0 +1,6 @@
ALTER TABLE db_version CHANGE COLUMN required_11549_01_mangos_spell_proc_event required_11560_01_mangos_command bit;
DELETE FROM command WHERE name = 'mailbox';
INSERT INTO command (name, security, help) VALUES
('mailbox',3,'Syntax: .mailbox\r\n\r\nShow your mailbox content.');

View file

@ -749,6 +749,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "additem", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddItemCommand, "", NULL },
{ "additemset", SEC_ADMINISTRATOR, false, &ChatHandler::HandleAddItemSetCommand, "", NULL },
{ "bank", SEC_ADMINISTRATOR, false, &ChatHandler::HandleBankCommand, "", NULL },
{ "mailbox", SEC_ADMINISTRATOR, false, &ChatHandler::HandleMailBoxCommand, "", NULL },
{ "wchange", SEC_ADMINISTRATOR, false, &ChatHandler::HandleChangeWeatherCommand, "", NULL },
{ "ticket", SEC_GAMEMASTER, true, &ChatHandler::HandleTicketCommand, "", NULL },
{ "delticket", SEC_GAMEMASTER, true, &ChatHandler::HandleDelTicketCommand, "", NULL },

View file

@ -570,6 +570,7 @@ class MANGOS_DLL_SPEC ChatHandler
bool HandleBankCommand(char* args);
bool HandleChangeWeatherCommand(char* args);
bool HandleKickPlayerCommand(char* args);
bool HandleMailBoxCommand(char* args);
bool HandleTicketCommand(char* args);
bool HandleDelTicketCommand(char* args);

View file

@ -4502,6 +4502,12 @@ bool ChatHandler::HandleBankCommand(char* /*args*/)
return true;
}
bool ChatHandler::HandleMailBoxCommand(char* /*args*/)
{
m_session->SendShowMailBox(m_session->GetPlayer()->GetObjectGuid());
return true;
}
bool ChatHandler::HandleStableCommand(char* /*args*/)
{
m_session->SendStablePet(m_session->GetPlayer()->GetObjectGuid());

View file

@ -36,6 +36,32 @@
#include "WorldPacket.h"
#include "WorldSession.h"
#include "Opcodes.h"
#include "Chat.h"
bool WorldSession::CheckMailBox(ObjectGuid guid)
{
// GM case
if (guid == GetPlayer()->GetObjectGuid())
{
// command case will return only if player have real access to command
if (!ChatHandler(GetPlayer()).FindCommand("mailbox"))
{
DEBUG_LOG("%s attempt open mailbox in cheating way.", guid.GetString().c_str());
return false;
}
}
// mailbox case
else
{
if (!GetPlayer()->GetGameObjectIfCanInteractWith(guid, GAMEOBJECT_TYPE_MAILBOX))
{
DEBUG_LOG("Mailbox %s not found or you can't interact with him.", guid.GetString().c_str());
return false;
}
}
return true;
}
/**
* Handles the Packet sent by the client when sending a mail.
@ -95,7 +121,7 @@ void WorldSession::HandleSendMail(WorldPacket & recv_data )
// packet read complete, now do check
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailboxGuid, GAMEOBJECT_TYPE_MAILBOX))
if (!CheckMailBox(mailboxGuid))
return;
if (receiver.empty())
@ -295,7 +321,7 @@ void WorldSession::HandleMailMarkAsRead(WorldPacket & recv_data )
recv_data >> mailboxGuid;
recv_data >> mailId;
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailboxGuid, GAMEOBJECT_TYPE_MAILBOX))
if (!CheckMailBox(mailboxGuid))
return;
Player *pl = _player;
@ -326,7 +352,7 @@ void WorldSession::HandleMailDelete(WorldPacket & recv_data )
recv_data >> mailId;
recv_data.read_skip<uint32>(); // mailTemplateId
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailboxGuid, GAMEOBJECT_TYPE_MAILBOX))
if (!CheckMailBox(mailboxGuid))
return;
Player* pl = _player;
@ -362,7 +388,7 @@ void WorldSession::HandleMailReturnToSender(WorldPacket & recv_data )
recv_data >> mailId;
recv_data.read_skip<uint64>(); // original sender GUID for return to, not used
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailboxGuid, GAMEOBJECT_TYPE_MAILBOX))
if (!CheckMailBox(mailboxGuid))
return;
Player *pl = _player;
@ -421,7 +447,7 @@ void WorldSession::HandleMailTakeItem(WorldPacket & recv_data )
recv_data >> mailId;
recv_data >> itemId; // item guid low
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailboxGuid, GAMEOBJECT_TYPE_MAILBOX))
if (!CheckMailBox(mailboxGuid))
return;
Player* pl = _player;
@ -516,7 +542,7 @@ void WorldSession::HandleMailTakeMoney(WorldPacket & recv_data )
recv_data >> mailboxGuid;
recv_data >> mailId;
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailboxGuid, GAMEOBJECT_TYPE_MAILBOX))
if (!CheckMailBox(mailboxGuid))
return;
Player *pl = _player;
@ -551,7 +577,7 @@ void WorldSession::HandleGetMailList(WorldPacket & recv_data )
ObjectGuid mailboxGuid;
recv_data >> mailboxGuid;
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailboxGuid, GAMEOBJECT_TYPE_MAILBOX))
if (!CheckMailBox(mailboxGuid))
return;
// client can't work with packets > max int16 value
@ -680,7 +706,7 @@ void WorldSession::HandleMailCreateTextItem(WorldPacket & recv_data )
recv_data >> mailboxGuid;
recv_data >> mailId;
if (!GetPlayer()->GetGameObjectIfCanInteractWith(mailboxGuid, GAMEOBJECT_TYPE_MAILBOX))
if (!CheckMailBox(mailboxGuid))
return;
Player *pl = _player;

View file

@ -96,6 +96,13 @@ void WorldSession::SendShowBank(ObjectGuid guid)
SendPacket(&data);
}
void WorldSession::SendShowMailBox(ObjectGuid guid)
{
WorldPacket data(SMSG_SHOW_MAILBOX, 8);
data << ObjectGuid(guid);
SendPacket(&data);
}
void WorldSession::HandleTrainerListOpcode( WorldPacket & recv_data )
{
ObjectGuid guid;

View file

@ -300,6 +300,8 @@ class MANGOS_DLL_SPEC WorldSession
void SendListInventory(ObjectGuid guid);
bool CheckBanker(ObjectGuid guid);
void SendShowBank(ObjectGuid guid);
bool CheckMailBox(ObjectGuid guid);
void SendShowMailBox(ObjectGuid guid);
void SendTabardVendorActivate(ObjectGuid guid);
void SendSpiritResurrect();
void SendBindPoint(Creature* npc);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "11559"
#define REVISION_NR "11560"
#endif // __REVISION_NR_H__

View file

@ -1,6 +1,6 @@
#ifndef __REVISION_SQL_H__
#define __REVISION_SQL_H__
#define REVISION_DB_CHARACTERS "required_11436_01_characters_character_queststatus"
#define REVISION_DB_MANGOS "required_11549_01_mangos_spell_proc_event"
#define REVISION_DB_MANGOS "required_11560_01_mangos_command"
#define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version"
#endif // __REVISION_SQL_H__