Just take apart the case for CHAT_MSG_WHISPER and modify it for your needs.
Code:
case CHAT_MSG_WHISPER:
{
Player *player = objmgr.GetPlayer(misc.c_str(), false);
if(!player)
{
data = new WorldPacket(SMSG_CHAT_PLAYER_NOT_FOUND, misc.length() + 1);
*data << misc;
SendPacket(data);
delete data;
break;
}
// Check that the player isn't a gm with his status on
if(!_player->GetSession()->GetPermissionCount() && player->bGMTagOn && player->gmTargets.count(_player) == 0)
{
// Build automated reply
string Reply = "This Game Master does not currently have an open ticket from you and did not receive your whisper. Please submit a new GM Ticket request if you need to speak to a GM. This is an automatic message.";
data = sChatHandler.FillMessageData( CHAT_MSG_WHISPER, LANG_UNIVERSAL, Reply.c_str(), player->GetGUID(), 3);
SendPacket(data);
delete data;
break;
}
if(lang > 0 && LanguageSkills[lang] && _player->_HasSkillLine(LanguageSkills[lang]) == false)
return;
if(lang==0 && !CanUseCommand('c'))
return;
if( player->Social_IsIgnoring( _player->GetLowGUID() ) )
{
data = sChatHandler.FillMessageData( CHAT_MSG_IGNORED, LANG_UNIVERSAL, msg.c_str(), _player->GetGUID(), _player->bGMTagOn ? 4 : 0 );
SendPacket(data);
delete data;
}
else
{
if(GetPlayer()->m_modlanguage >=0)
data = sChatHandler.FillMessageData( CHAT_MSG_WHISPER, GetPlayer()->m_modlanguage, msg.c_str(), _player->GetGUID(), _player->bGMTagOn ? 4 : 0 );
else
data = sChatHandler.FillMessageData( CHAT_MSG_WHISPER, ((CanUseCommand('c') || player->GetSession()->CanUseCommand('c')) && lang != -1) ? LANG_UNIVERSAL : lang, msg.c_str(), _player->GetGUID(), _player->bGMTagOn ? 4 : 0 );
player->GetSession()->SendPacket(data);
delete data;
}
//Sent the to Users id as the channel, this should be fine as it's not used for wisper
data = sChatHandler.FillMessageData(CHAT_MSG_WHISPER_INFORM, LANG_UNIVERSAL,msg.c_str(), player->GetGUID(), player->bGMTagOn ? 4 : 0 );
SendPacket(data);
delete data;
if(player->HasFlag(PLAYER_FLAGS, 0x02))
{
// Has AFK flag, autorespond.
data = sChatHandler.FillMessageData(CHAT_MSG_AFK, LANG_UNIVERSAL, player->m_afk_reason.c_str(),player->GetGUID(), _player->bGMTagOn ? 4 : 0);
SendPacket(data);
delete data;
}
else if(player->HasFlag(PLAYER_FLAGS, 0x04))
{
// Has AFK flag, autorespond.
data = sChatHandler.FillMessageData(CHAT_MSG_DND, LANG_UNIVERSAL, player->m_afk_reason.c_str(),player->GetGUID(), _player->bGMTagOn ? 4 : 0);
SendPacket(data);
delete data;
}
} break;