diff options
-rwxr-xr-x | src/server/game/Server/Protocol/Handlers/ChatHandler.cpp | 209 |
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; |