Core/Chat: Implemented instance chat type

This commit is contained in:
Shauren
2015-04-12 00:20:06 +02:00
parent 92026f1b6a
commit d02f4da355
7 changed files with 110 additions and 35 deletions

View File

@@ -68,6 +68,9 @@ void WorldSession::HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& chat
case CMSG_CHAT_MESSAGE_RAID_WARNING:
type = CHAT_MSG_RAID_WARNING;
break;
case CMSG_CHAT_MESSAGE_INSTANCE_CHAT:
type = CHAT_MSG_INSTANCE_CHAT;
break;
default:
TC_LOG_ERROR("network", "HandleMessagechatOpcode : Unknown chat opcode (%u)", chatMessage.GetOpcode());
return;
@@ -366,6 +369,22 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg,
}
break;
}
case CHAT_MSG_INSTANCE_CHAT:
{
Group* group = GetPlayer()->GetGroup();
if (!group)
return;
if (group->IsLeader(GetPlayer()->GetGUID()))
type = CHAT_MSG_INSTANCE_CHAT_LEADER;
sScriptMgr->OnPlayerChat(GetPlayer(), type, lang, msg, group);
WorldPackets::Chat::Chat packet;
packet.Initalize(ChatMsg(type), Language(lang), sender, nullptr, msg);
group->BroadcastPacket(packet.Write(), false);
break;
}
default:
TC_LOG_ERROR("network", "CHAT: unknown message type %u, lang: %u", type, lang);
break;
@@ -390,6 +409,9 @@ void WorldSession::HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMes
case CMSG_CHAT_ADDON_MESSAGE_RAID:
type = CHAT_MSG_RAID;
break;
case CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT:
type = CHAT_MSG_INSTANCE_CHAT;
break;
default:
TC_LOG_ERROR("network", "HandleChatAddonMessageOpcode: Unknown addon chat opcode (%u)", chatAddonMessage.GetOpcode());
return;
@@ -403,6 +425,11 @@ void WorldSession::HandleChatAddonMessageWhisperOpcode(WorldPackets::Chat::ChatA
HandleChatAddonMessage(CHAT_MSG_WHISPER, chatAddonMessageWhisper.Prefix, chatAddonMessageWhisper.Text, chatAddonMessageWhisper.Target);
}
void WorldSession::HandleChatAddonMessageChannelOpcode(WorldPackets::Chat::ChatAddonMessageChannel& chatAddonMessageChannel)
{
HandleChatAddonMessage(CHAT_MSG_CHANNEL, chatAddonMessageChannel.Prefix, chatAddonMessageChannel.Text, chatAddonMessageChannel.Target);
}
void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, std::string target /*= ""*/)
{
Player* sender = GetPlayer();
@@ -439,15 +466,33 @@ void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std:
// Messages sent to "RAID" while in a party will get delivered to "PARTY"
case CHAT_MSG_PARTY:
case CHAT_MSG_RAID:
case CHAT_MSG_INSTANCE_CHAT:
{
Group* group = nullptr;
int32 subGroup = -1;
if (type != CHAT_MSG_INSTANCE_CHAT)
group = sender->GetOriginalGroup();
Group* group = sender->GetGroup();
if (!group)
break;
{
group = sender->GetGroup();
if (!group)
break;
if (type == CHAT_MSG_PARTY)
subGroup = sender->GetSubGroup();
}
WorldPackets::Chat::Chat packet;
packet.Initalize(type, LANG_ADDON, sender, nullptr, text, 0, "", DEFAULT_LOCALE, prefix);
group->BroadcastAddonMessagePacket(packet.Write(), prefix, true, -1, sender->GetGUID());
group->BroadcastAddonMessagePacket(packet.Write(), prefix, true, subGroup, sender->GetGUID());
break;
}
case CHAT_MSG_CHANNEL:
{
if (ChannelMgr* cMgr = ChannelMgr::ForTeam(sender->GetTeam()))
if (Channel* chn = cMgr->GetChannel(target, sender, false))
chn->Say(sender->GetGUID(), text.c_str(), LANG_ADDON);
break;
}
default: