aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/ChatHandler.cpp209
1 files changed, 48 insertions, 161 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/ChatHandler.cpp b/src/server/game/Server/Protocol/Handlers/ChatHandler.cpp
index 0950efa696d..523809ae4c3 100755
--- a/src/server/game/Server/Protocol/Handlers/ChatHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/ChatHandler.cpp
@@ -183,33 +183,66 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
return;
}
- switch(type)
+ std::string to, channel, msg;
+ bool ignoreChecks = false;
+ switch (type)
{
case CHAT_MSG_SAY:
case CHAT_MSG_EMOTE:
case CHAT_MSG_YELL:
- {
- std::string msg;
+ case CHAT_MSG_PARTY:
+ case CHAT_MSG_PARTY_LEADER:
+ case CHAT_MSG_GUILD:
+ case CHAT_MSG_OFFICER:
+ case CHAT_MSG_RAID:
+ case CHAT_MSG_RAID_LEADER:
+ case CHAT_MSG_RAID_WARNING:
+ case CHAT_MSG_BATTLEGROUND:
+ case CHAT_MSG_BATTLEGROUND_LEADER:
+ recv_data >> msg;
+ break;
+ case CHAT_MSG_WHISPER:
+ recv_data >> to;
+ recv_data >> msg;
+ break;
+ case CHAT_MSG_CHANNEL:
+ recv_data >> channel;
+ recv_data >> msg;
+ break;
+ case CHAT_MSG_AFK:
+ case CHAT_MSG_DND:
recv_data >> msg;
+ ignoreChecks = true;
+ break;
+ }
- if (msg.empty())
- break;
+ if (!ignoreChecks)
+ {
+ if (msg.empty())
+ return;
- if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
- break;
+ if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
+ return;
+
+ if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
+ return;
+ if (msg.empty())
+ return;
+ }
+
+ switch (type)
+ {
+ case CHAT_MSG_SAY:
+ case CHAT_MSG_EMOTE:
+ case CHAT_MSG_YELL:
+ {
if (_player->getLevel() < sWorld.getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ))
{
SendNotification(GetTrinityString(LANG_SAY_REQ), sWorld.getIntConfig(CONFIG_CHAT_SAY_LEVEL_REQ));
return;
}
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
if (type == CHAT_MSG_SAY)
GetPlayer()->Say(msg, lang);
else if (type == CHAT_MSG_EMOTE)
@@ -217,28 +250,14 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
else if (type == CHAT_MSG_YELL)
GetPlayer()->Yell(msg, lang);
} break;
-
case CHAT_MSG_WHISPER:
{
- std::string to, msg;
- recv_data >> to;
- recv_data >> msg;
-
- if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
- break;
-
if (_player->getLevel() < sWorld.getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ))
{
SendNotification(GetTrinityString(LANG_WHISPER_REQ), sWorld.getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ));
return;
}
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
if (!normalizePlayerName(to))
{
SendPlayerNotFoundNotice(to);
@@ -273,25 +292,9 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
GetPlayer()->Whisper(msg, lang, player->GetGUID());
} break;
-
case CHAT_MSG_PARTY:
case CHAT_MSG_PARTY_LEADER:
{
- std::string msg;
- recv_data >> msg;
-
- if (msg.empty())
- break;
-
- if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
- break;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
// if player is in battleground, he cannot say to battleground members by /p
Group *group = GetPlayer()->GetOriginalGroup();
if (!group)
@@ -310,24 +313,8 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
ChatHandler::FillMessageData(&data, this, type, lang, NULL, 0, msg.c_str(), NULL);
group->BroadcastPacket(&data, false, group->GetMemberGroup(GetPlayer()->GetGUID()));
} break;
-
case CHAT_MSG_GUILD:
{
- std::string msg;
- recv_data >> msg;
-
- if (msg.empty())
- break;
-
- if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
- break;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
if (GetPlayer()->GetGuildId())
{
if (Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId()))
@@ -337,26 +324,9 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
guild->BroadcastToGuild(this, false, msg, lang == LANG_ADDON ? LANG_ADDON : LANG_UNIVERSAL);
}
}
-
- break;
- }
+ } break;
case CHAT_MSG_OFFICER:
{
- std::string msg;
- recv_data >> msg;
-
- if (msg.empty())
- break;
-
- if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
- break;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
if (GetPlayer()->GetGuildId())
{
if (Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId()))
@@ -366,25 +336,9 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
guild->BroadcastToGuild(this, true, msg, lang == LANG_ADDON ? LANG_ADDON : LANG_UNIVERSAL);
}
}
- break;
- }
+ } break;
case CHAT_MSG_RAID:
{
- std::string msg;
- recv_data >> msg;
-
- if (msg.empty())
- break;
-
- if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
- break;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
// if player is in battleground, he cannot say to battleground members by /ra
Group *group = GetPlayer()->GetOriginalGroup();
if (!group)
@@ -402,21 +356,6 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
} break;
case CHAT_MSG_RAID_LEADER:
{
- std::string msg;
- recv_data >> msg;
-
- if (msg.empty())
- break;
-
- if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
- break;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
// if player is in battleground, he cannot say to battleground members by /ra
Group *group = GetPlayer()->GetOriginalGroup();
if (!group)
@@ -434,15 +373,6 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
} break;
case CHAT_MSG_RAID_WARNING:
{
- std::string msg;
- recv_data >> msg;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
Group *group = GetPlayer()->GetGroup();
if (!group || !group->isRaidGroup() || !(group->IsLeader(GetPlayer()->GetGUID()) || group->IsAssistant(GetPlayer()->GetGUID())) || group->isBGGroup())
return;
@@ -454,18 +384,8 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID_WARNING, lang, "", 0, msg.c_str(), NULL);
group->BroadcastPacket(&data, false);
} break;
-
case CHAT_MSG_BATTLEGROUND:
{
- std::string msg;
- recv_data >> msg;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
//battleground raid is always in Player->GetGroup(), never in GetOriginalGroup()
Group *group = GetPlayer()->GetGroup();
if (!group || !group->isBGGroup())
@@ -477,18 +397,8 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
ChatHandler::FillMessageData(&data, this, CHAT_MSG_BATTLEGROUND, lang, "", 0, msg.c_str(), NULL);
group->BroadcastPacket(&data, false);
} break;
-
case CHAT_MSG_BATTLEGROUND_LEADER:
{
- std::string msg;
- recv_data >> msg;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
- if (msg.empty())
- break;
-
// battleground raid is always in Player->GetGroup(), never in GetOriginalGroup()
Group *group = GetPlayer()->GetGroup();
if (!group || !group->isBGGroup() || !group->IsLeader(GetPlayer()->GetGUID()))
@@ -500,28 +410,14 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
ChatHandler::FillMessageData(&data, this, CHAT_MSG_BATTLEGROUND_LEADER, lang, "", 0, msg.c_str(), NULL);
group->BroadcastPacket(&data, false);
} break;
-
case CHAT_MSG_CHANNEL:
{
- std::string channel, msg;
- recv_data >> channel;
- recv_data >> msg;
-
- if (ChatHandler(this).ParseCommands(msg.c_str()) > 0)
- break;
-
- if (!processChatmessageFurtherAfterSecurityChecks(msg, lang))
- return;
-
if (_player->getLevel() < sWorld.getIntConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ))
{
SendNotification(GetTrinityString(LANG_CHANNEL_REQ), sWorld.getIntConfig(CONFIG_CHAT_CHANNEL_LEVEL_REQ));
return;
}
- if (msg.empty())
- break;
-
if (ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
{
@@ -533,12 +429,8 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
}
}
} break;
-
case CHAT_MSG_AFK:
{
- std::string msg;
- recv_data >> msg;
-
if ((msg.empty() || !_player->isAFK()) && !_player->isInCombat())
{
if (!_player->isAFK())
@@ -555,12 +447,8 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
_player->ToggleDND();
}
} break;
-
case CHAT_MSG_DND:
{
- std::string msg;
- recv_data >> msg;
-
if (msg.empty() || !_player->isDND())
{
if (!_player->isDND())
@@ -577,7 +465,6 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data)
_player->ToggleAFK();
}
} break;
-
default:
sLog.outError("CHAT: unknown message type %u, lang: %u", type, lang);
break;