void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) { WorldPacket data; Log::getSingleton().outDebug("CHAT: packet received"); uint32 type; uint32 lang; recv_data >> type; recv_data >> lang; switch(type) { case CHAT_MSG_SAY: { std::string msg = ""; recv_data >> msg; if (sChatHandler.ParseCommands(msg.c_str(), this) > 0) break; sChatHandler.FillMessageData( &data, this, type, LANG_UNIVERSAL, NULL, msg.c_str() ); GetPlayer()->SendMessageToSet( &data, true ); } break; case CHAT_MSG_CHANNEL: { std::string channel = "", msg = ""; recv_data >> channel; recv_data >> msg; Channel *chn = channelmgr.GetChannel(channel.c_str(),GetPlayer()); if(chn) chn->Say(GetPlayer(),msg.c_str()); } break; case CHAT_MSG_WHISPER: { std::string to = "", msg = ""; recv_data >> to >> msg; sChatHandler.FillMessageData(&data, this, type, LANG_UNIVERSAL, NULL, msg.c_str() ); Player *player = objmgr.GetPlayer(to.c_str()); if(!player) { data.clear(); msg = "Player '"; msg += to.c_str(); msg += "' is not online (Names are case sensitive)"; sChatHandler.FillSystemMessageData( &data, this ,msg.c_str() ); SendPacket(&data); break; } player->GetSession()->SendPacket(&data); // Sent the to Users id as the channel, this should be fine as it's not used for wisper sChatHandler.FillMessageData(&data, this, CHAT_MSG_WHISPER_INFORM, LANG_UNIVERSAL, ((char *)(player->GetGUID())), msg.c_str() ); SendPacket(&data); } break; case CHAT_MSG_YELL: { std::string msg = ""; recv_data >> msg; if (sChatHandler.ParseCommands(msg.c_str(), this) > 0) break; sChatHandler.FillMessageData(&data, this, type, LANG_UNIVERSAL, NULL, msg.c_str() ); SendPacket(&data); sWorld.SendGlobalMessage(&data, this); } break; case CHAT_MSG_PARTY: { std::string msg = ""; recv_data >> msg; if (sChatHandler.ParseCommands(msg.c_str(), this) > 0) break; if (GetPlayer()->IsInGroup()) { Group *group = objmgr.GetGroupByLeader(GetPlayer()->GetGroupLeader()); if (group) group->BroadcastToGroup(this, msg); } } default: Log::getSingleton().outError("CHAT: unknown msg type %u, lang: %u", type, lang); } }
void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) { WorldPacket data; sLog.outDebug("CHAT: packet received"); uint32 type; uint32 lang; recv_data >> type; recv_data >> lang; switch(type) { case CHAT_MSG_SAY: { std::string msg, t; recv_data >> msg; t = msg; if (sChatHandler.ParseCommands (t.c_str(), this) > 0) break; // If you want universal chatting use this instead of following line //sChatHandler.FillMessageData( &data, this, type, LANG_UNIVERSAL, NULL, msg.c_str() ); sChatHandler.FillMessageData( &data, this, CHAT_MSG_SAY, lang, NULL, msg.c_str() ); GetPlayer()->SendMessageToSet( &data, true ); sLog.outChat(lang, GetPlayer()->GetName(), "Say", msg.c_str()); } break; case CHAT_MSG_CHANNEL: { std::string channel, msg, t; recv_data >> channel; recv_data >> msg; t = msg; if (sChatHandler.ParseCommands (t.c_str(), this) > 0) break; Channel *chn = channelmgr.GetChannel(channel.c_str(),GetPlayer()); if(chn) chn->Say (GetPlayer(), msg.c_str()); sLog.outChat(lang, GetPlayer()->GetName(), channel.c_str(), msg.c_str()); } break; case CHAT_MSG_WHISPER: { std::string to, msg, t; recv_data >> to >> msg; t = msg; if (sChatHandler.ParseCommands (t.c_str(), this) > 0) break; Player *player = objmgr.GetPlayer(to.c_str()); if (!player) { data.clear(); //sChatHandler.FillSystemMessageData( &data, this, msg.c_str() ); //SendPacket(&data); this->SystemMessage ("Player '%s' isn't online", to.c_str()); sLog.outDebug ("ChatHandler.Whisper: Player '%s' isn't online", to.c_str()); break; } // Send whisper MSG to receiver sChatHandler.FillMessageData(&data, this, type, lang, NULL, msg.c_str()); player->GetSession()->SendPacket(&data); // Echo whisper back to sender sChatHandler.FillMessageData(&data, this, CHAT_MSG_WHISPER_INFORM, lang, NULL, msg.c_str(), player->GetGUID()); SendPacket(&data); sLog.outChat(lang, GetPlayer()->GetName(), "Wh", msg.c_str()); } break; case CHAT_MSG_YELL: { std::string msg; recv_data >> msg; sChatHandler.FillMessageData(&data, this, type, lang, NULL, msg.c_str() ); SendPacket(&data); GetPlayer()->SendMessageToSet( &data, false ); sLog.outChat(lang, GetPlayer()->GetName(), "Yell", msg.c_str()); } break; case CHAT_MSG_EMOTE: { std::string msg; recv_data >> msg; sChatHandler.FillMessageData(&data, this, type, lang, NULL, msg.c_str() ); SendPacket(&data); GetPlayer()->SendMessageToSet( &data, false ); } break; case CHAT_MSG_PARTY: { std::string msg; recv_data >> msg; if (sChatHandler.ParseCommands(msg.c_str(), this) > 0) break; if (GetPlayer()->IsInGroup()) { Group *group = objmgr.GetGroupByLeader(GetPlayer()->GetGroupLeader()); if (group) group->BroadcastToGroup(this, msg); } sLog.outChat(lang, GetPlayer()->GetName(), "Party", msg.c_str()); } case CHAT_MSG_GUILD: { std::string msg; recv_data >> msg; if (sChatHandler.ParseCommands(msg.c_str(), this) > 0) break; if (GetPlayer()->GetGuildId() > 0) { Guild *guild = objmgr.GetGuildById(GetPlayer()->GetGuildId()); if (guild) guild->BroadcastToGuild(this, msg); } sLog.outChat(lang, GetPlayer()->GetName(), "Guild", msg.c_str()); } case CHAT_MSG_AFK: { //TODO: Working AFK State GetPlayer()->ToggleAFK(); if(GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAG_AFK)) GetPlayer()->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAG_AFK); else GetPlayer()->SetFlag(PLAYER_FLAGS, PLAYER_FLAG_AFK); } break; case CHAT_MSG_DND: { //TODO: Working DND State GetPlayer()->ToggleAFK(); if(GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAG_AFK)) GetPlayer()->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAG_AFK); else GetPlayer()->SetFlag(PLAYER_FLAGS, PLAYER_FLAG_AFK); } break; default: sLog.outError("CHAT: unknown msg type %u, lang: %u", type, lang); } }