diff --git a/src/game/ChatHandler.cpp b/src/game/ChatHandler.cpp index d043af46f..f4c7ef807 100644 --- a/src/game/ChatHandler.cpp +++ b/src/game/ChatHandler.cpp @@ -73,7 +73,7 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) return; } - //sLog.outDebug("CHAT: packet received. type %u, lang %u", type, lang ); + sLog.outDebug("CHAT: packet received. type %u, lang %u", type, lang ); // prevent talking at unknown language (cheating) LanguageDesc const* langDesc = GetLanguageDescByID(lang); @@ -87,7 +87,7 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) // also check SPELL_AURA_COMPREHEND_LANGUAGE (client offers option to speak in that language) Unit::AuraList const& langAuras = _player->GetAurasByType(SPELL_AURA_COMPREHEND_LANGUAGE); bool foundAura = false; - for(Unit::AuraList::const_iterator i = langAuras.begin();i != langAuras.end(); ++i) + for(Unit::AuraList::const_iterator i = langAuras.begin(); i != langAuras.end(); ++i) { if((*i)->GetModifier()->m_miscvalue == int32(lang)) { @@ -149,7 +149,7 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if (!_player->CanSpeak()) { std::string timeStr = secsToTimeString(m_muteTime - time(NULL)); - SendNotification(GetMangosString(LANG_WAIT_BEFORE_SPEAKING),timeStr.c_str()); + SendNotification(GetMangosString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str()); return; } @@ -163,7 +163,7 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) case CHAT_MSG_EMOTE: case CHAT_MSG_YELL: { - std::string msg = ""; + std::string msg; recv_data >> msg; if(msg.empty()) @@ -200,9 +200,7 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if(!normalizePlayerName(to)) { - WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1)); - data<GetSession()->GetSecurity() : SEC_PLAYER; if (!player || (tSecurity == SEC_PLAYER && pSecurity > SEC_PLAYER && !player->isAcceptWhispers())) { - WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1)); - data<GetTeam(); if( sidea != sideb ) { - WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1)); - data<Whisper(msg, lang,player->GetGUID()); + GetPlayer()->Whisper(msg, lang, player->GetGUID()); } break; case CHAT_MSG_PARTY: + case CHAT_MSG_PARTY_LEADER: { - std::string msg = ""; + std::string msg; recv_data >> msg; if(msg.empty()) @@ -252,18 +247,24 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) // if player is in battleground, he cannot say to battleground members by /p Group *group = GetPlayer()->GetOriginalGroup(); - // so if player hasn't OriginalGroup and his player->GetGroup() is BG raid, then return - if( !group && (!(group = GetPlayer()->GetGroup()) || group->isBGGroup()) ) + if(!group) + { + group = _player->GetGroup(); + if(!group || group->isBGGroup()) + return; + } + + if((type == CHAT_MSG_PARTY_LEADER) && !group->IsLeader(_player->GetGUID())) return; WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_PARTY, lang, NULL, 0, msg.c_str(),NULL); + ChatHandler::FillMessageData(&data, this, type, lang, NULL, 0, msg.c_str(), NULL); group->BroadcastPacket(&data, false, group->GetMemberGroup(GetPlayer()->GetGUID())); - } - break; + } break; + case CHAT_MSG_GUILD: { - std::string msg = ""; + std::string msg; recv_data >> msg; if(msg.empty()) @@ -279,17 +280,13 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) break; if (GetPlayer()->GetGuildId()) - { - Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId()); - if (guild) + if (Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId())) guild->BroadcastToGuild(this, msg, lang == LANG_ADDON ? LANG_ADDON : LANG_UNIVERSAL); - } + } break; - break; - } case CHAT_MSG_OFFICER: { - std::string msg = ""; + std::string msg; recv_data >> msg; if(msg.empty()) @@ -305,16 +302,13 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) break; if (GetPlayer()->GetGuildId()) - { - Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId()); - if (guild) + if (Guild *guild = sObjectMgr.GetGuildById(GetPlayer()->GetGuildId())) guild->BroadcastToOfficers(this, msg, lang == LANG_ADDON ? LANG_ADDON : LANG_UNIVERSAL); - } - break; - } + } break; + case CHAT_MSG_RAID: { - std::string msg=""; + std::string msg; recv_data >> msg; if(msg.empty()) @@ -331,17 +325,20 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) // if player is in battleground, he cannot say to battleground members by /ra Group *group = GetPlayer()->GetOriginalGroup(); - // so if player hasn't OriginalGroup and his player->GetGroup() is BG raid or his group isn't raid, then return - if ((!group && !(group = GetPlayer()->GetGroup())) || group->isBGGroup() || !group->isRaidGroup()) - return; + if(!group) + { + group = GetPlayer()->GetGroup(); + if(!group || group->isBGGroup() || !group->isRaidGroup()) + return; + } WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID, lang, "", 0, msg.c_str(),NULL); + ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID, lang, "", 0, msg.c_str(), NULL); group->BroadcastPacket(&data, false); } break; case CHAT_MSG_RAID_LEADER: { - std::string msg=""; + std::string msg; recv_data >> msg; if(msg.empty()) @@ -358,16 +355,21 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) // if player is in battleground, he cannot say to battleground members by /ra Group *group = GetPlayer()->GetOriginalGroup(); - if ((!group && !(group = GetPlayer()->GetGroup())) || group->isBGGroup() || !group->isRaidGroup()) - return; + if(!group) + { + group = GetPlayer()->GetGroup(); + if(!group || group->isBGGroup() || !group->isRaidGroup() || !group->IsLeader(_player->GetGUID())) + return; + } WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID_LEADER, lang, "", 0, msg.c_str(),NULL); + ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID_LEADER, lang, "", 0, msg.c_str(), NULL); group->BroadcastPacket(&data, false); } break; + case CHAT_MSG_RAID_WARNING: { - std::string msg=""; + std::string msg; recv_data >> msg; if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) @@ -382,13 +384,13 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) WorldPacket data; //in battleground, raid warning is sent only to players in battleground - code is ok - ChatHandler::FillMessageData(&data, this, CHAT_MSG_RAID_WARNING, lang, "", 0, msg.c_str(),NULL); + 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=""; + std::string msg; recv_data >> msg; if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) @@ -397,19 +399,19 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if(msg.empty()) break; - //battleground raid is always in Player->GetGroup(), never in GetOriginalGroup() + // battleground raid is always in Player->GetGroup(), never in GetOriginalGroup() Group *group = GetPlayer()->GetGroup(); if(!group || !group->isBGGroup()) return; WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_BATTLEGROUND, lang, "", 0, msg.c_str(),NULL); + 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=""; + std::string msg; recv_data >> msg; if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) @@ -418,21 +420,20 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) if(msg.empty()) break; - //battleground raid is always in Player->GetGroup(), never in GetOriginalGroup() + // battleground raid is always in Player->GetGroup(), never in GetOriginalGroup() Group *group = GetPlayer()->GetGroup(); if(!group || !group->isBGGroup() || !group->IsLeader(GetPlayer()->GetGUID())) return; WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_BATTLEGROUND_LEADER, lang, "", 0, msg.c_str(),NULL); + 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 = ""; + std::string channel, msg; recv_data >> channel; - recv_data >> msg; if (!processChatmessageFurtherAfterSecurityChecks(msg, lang)) @@ -442,10 +443,8 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) break; if(ChannelMgr* cMgr = channelMgr(_player->GetTeam())) - { - if(Channel *chn = cMgr->GetChannel(channel,_player)) - chn->Say(_player->GetGUID(),msg.c_str(),lang); - } + if(Channel *chn = cMgr->GetChannel(channel, _player)) + chn->Say(_player->GetGUID(), msg.c_str(), lang); } break; case CHAT_MSG_AFK: @@ -542,7 +541,7 @@ void WorldSession::HandleTextEmoteOpcode( WorldPacket & recv_data ) if (!GetPlayer()->CanSpeak()) { std::string timeStr = secsToTimeString(m_muteTime - time(NULL)); - SendNotification(GetMangosString(LANG_WAIT_BEFORE_SPEAKING),timeStr.c_str()); + SendNotification(GetMangosString(LANG_WAIT_BEFORE_SPEAKING), timeStr.c_str()); return; } @@ -581,16 +580,16 @@ void WorldSession::HandleTextEmoteOpcode( WorldPacket & recv_data ) MaNGOS::EmoteChatBuilder emote_builder(*GetPlayer(), text_emote, emoteNum, unit); MaNGOS::LocalizedPacketDo emote_do(emote_builder); - MaNGOS::PlayerDistWorker > emote_worker(GetPlayer(),sWorld.getConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE),emote_do); - TypeContainerVisitor >, WorldTypeMapContainer > message(emote_worker); + MaNGOS::PlayerDistWorker > emote_worker(GetPlayer(), sWorld.getConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), emote_do); + TypeContainerVisitor>, WorldTypeMapContainer> message(emote_worker); CellLock cell_lock(cell, p); cell_lock->Visit(cell_lock, message, *GetPlayer()->GetMap(), *GetPlayer(), sWorld.getConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE)); GetPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE, text_emote, 0, unit); //Send scripted event call - if (unit && unit->GetTypeId()==TYPEID_UNIT && ((Creature*)unit)->AI()) - ((Creature*)unit)->AI()->ReceiveEmote(GetPlayer(),text_emote); + if (unit && unit->GetTypeId() == TYPEID_UNIT && ((Creature*)unit)->AI()) + ((Creature*)unit)->AI()->ReceiveEmote(GetPlayer(), text_emote); } void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recv_data ) @@ -607,6 +606,13 @@ void WorldSession::HandleChatIgnoredOpcode(WorldPacket& recv_data ) return; WorldPacket data; - ChatHandler::FillMessageData(&data, this, CHAT_MSG_IGNORED, LANG_UNIVERSAL, NULL, GetPlayer()->GetGUID(), GetPlayer()->GetName(),NULL); + ChatHandler::FillMessageData(&data, this, CHAT_MSG_IGNORED, LANG_UNIVERSAL, NULL, GetPlayer()->GetGUID(), GetPlayer()->GetName(), NULL); player->GetSession()->SendPacket(&data); } + +void WorldSession::SendPlayerNotFoundNotice(std::string name) +{ + WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, name.size()+1); + data << name; + SendPacket(&data); +} diff --git a/src/game/Guild.cpp b/src/game/Guild.cpp index 93a459db7..027d52276 100644 --- a/src/game/Guild.cpp +++ b/src/game/Guild.cpp @@ -572,7 +572,7 @@ void Guild::BroadcastToGuild(WorldSession *session, const std::string& msg, uint void Guild::BroadcastToOfficers(WorldSession *session, const std::string& msg, uint32 language) { - if (session && session->GetPlayer() && HasRankRight(session->GetPlayer()->GetRank(),GR_RIGHT_OFFCHATSPEAK)) + if (session && session->GetPlayer() && HasRankRight(session->GetPlayer()->GetRank(), GR_RIGHT_OFFCHATSPEAK)) { for(MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index 7f8528ba4..f2064ca84 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -561,6 +561,7 @@ class MANGOS_DLL_SPEC WorldSession void HandleQuestPushResult(WorldPacket& recvPacket); bool processChatmessageFurtherAfterSecurityChecks(std::string&, uint32); + void SendPlayerNotFoundNotice(std::string name); void HandleMessagechatOpcode(WorldPacket& recvPacket); void HandleTextEmoteOpcode(WorldPacket& recvPacket); void HandleChatIgnoredOpcode(WorldPacket& recvPacket);