mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Chat: Implemented instance chat type
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -4264,33 +4264,36 @@ enum ChatMsg
|
||||
CHAT_MSG_RAID_BOSS_EMOTE = 0x29,
|
||||
CHAT_MSG_RAID_BOSS_WHISPER = 0x2A,
|
||||
CHAT_MSG_FILTERED = 0x2B,
|
||||
CHAT_MSG_BATTLEGROUND = 0x2C,
|
||||
CHAT_MSG_BATTLEGROUND_LEADER = 0x2D,
|
||||
CHAT_MSG_RESTRICTED = 0x2E,
|
||||
CHAT_MSG_BATTLENET = 0x2F,
|
||||
CHAT_MSG_ACHIEVEMENT = 0x30,
|
||||
CHAT_MSG_GUILD_ACHIEVEMENT = 0x31,
|
||||
CHAT_MSG_ARENA_POINTS = 0x32,
|
||||
CHAT_MSG_PARTY_LEADER = 0x33,
|
||||
CHAT_MSG_TARGETICONS = 0x34,
|
||||
CHAT_MSG_BN_WHISPER = 0x35,
|
||||
CHAT_MSG_BN_WHISPER_INFORM = 0x36,
|
||||
CHAT_MSG_BN_CONVERSATION = 0x37,
|
||||
CHAT_MSG_BN_CONVERSATION_NOTICE = 0x38,
|
||||
CHAT_MSG_BN_CONVERSATION_LIST = 0x39,
|
||||
CHAT_MSG_BN_INLINE_TOAST_ALERT = 0x3A,
|
||||
CHAT_MSG_BN_INLINE_TOAST_BROADCAST = 0x3B,
|
||||
CHAT_MSG_BN_INLINE_TOAST_BROADCAST_INFORM = 0x3C,
|
||||
CHAT_MSG_BN_INLINE_TOAST_CONVERSATION = 0x3D,
|
||||
CHAT_MSG_BN_WHISPER_PLAYER_OFFLINE = 0x3E,
|
||||
CHAT_MSG_COMBAT_GUILD_XP_GAIN = 0x3F,
|
||||
CHAT_MSG_CURRENCY = 0x40
|
||||
CHAT_MSG_RESTRICTED = 0x2C,
|
||||
CHAT_MSG_BATTLENET = 0x2D,
|
||||
CHAT_MSG_ACHIEVEMENT = 0x2E,
|
||||
CHAT_MSG_GUILD_ACHIEVEMENT = 0x2F,
|
||||
CHAT_MSG_ARENA_POINTS = 0x30,
|
||||
CHAT_MSG_PARTY_LEADER = 0x31,
|
||||
CHAT_MSG_TARGETICONS = 0x32,
|
||||
CHAT_MSG_BN_WHISPER = 0x33,
|
||||
CHAT_MSG_BN_WHISPER_INFORM = 0x34,
|
||||
CHAT_MSG_BN_CONVERSATION = 0x35,
|
||||
CHAT_MSG_BN_CONVERSATION_NOTICE = 0x36,
|
||||
CHAT_MSG_BN_CONVERSATION_LIST = 0x37,
|
||||
CHAT_MSG_BN_INLINE_TOAST_ALERT = 0x38,
|
||||
CHAT_MSG_BN_INLINE_TOAST_BROADCAST = 0x39,
|
||||
CHAT_MSG_BN_INLINE_TOAST_BROADCAST_INFORM = 0x3A,
|
||||
CHAT_MSG_BN_INLINE_TOAST_CONVERSATION = 0x3B,
|
||||
CHAT_MSG_BN_WHISPER_PLAYER_OFFLINE = 0x3C,
|
||||
CHAT_MSG_COMBAT_GUILD_XP_GAIN = 0x3D,
|
||||
CHAT_MSG_CURRENCY = 0x3E,
|
||||
CHAT_MSG_QUEST_BOSS_EMOTE = 0x3F,
|
||||
CHAT_MSG_PET_BATTLE_COMBAT_LOG = 0x40,
|
||||
CHAT_MSG_PET_BATTLE_INFO = 0x41,
|
||||
CHAT_MSG_INSTANCE_CHAT = 0x42,
|
||||
CHAT_MSG_INSTANCE_CHAT_LEADER = 0x43,
|
||||
|
||||
MAX_CHAT_MSG_TYPE
|
||||
};
|
||||
|
||||
#define GM_SILENCE_AURA 1852
|
||||
|
||||
#define MAX_CHAT_MSG_TYPE 0x41
|
||||
|
||||
enum ChatFlags
|
||||
{
|
||||
CHAT_FLAG_NONE = 0x00,
|
||||
|
||||
@@ -64,6 +64,16 @@ void WorldPackets::Chat::ChatAddonMessageWhisper::Read()
|
||||
Text = _worldPacket.ReadString(textLen);
|
||||
}
|
||||
|
||||
void WorldPackets::Chat::ChatAddonMessageChannel::Read()
|
||||
{
|
||||
uint32 targetLen = _worldPacket.ReadBits(9);
|
||||
uint32 prefixLen = _worldPacket.ReadBits(5);
|
||||
uint32 textLen = _worldPacket.ReadBits(8);
|
||||
Target = _worldPacket.ReadString(targetLen);
|
||||
Prefix = _worldPacket.ReadString(prefixLen);
|
||||
Text = _worldPacket.ReadString(textLen);
|
||||
}
|
||||
|
||||
void WorldPackets::Chat::ChatMessageDND::Read()
|
||||
{
|
||||
uint32 len = _worldPacket.ReadBits(8);
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace WorldPackets
|
||||
// CMSG_CHAT_MESSAGE_PARTY
|
||||
// CMSG_CHAT_MESSAGE_RAID
|
||||
// CMSG_CHAT_MESSAGE_RAID_WARNING
|
||||
// CMSG_CHAT_MESSAGE_INSTANCE_CHAT
|
||||
class ChatMessage final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
@@ -76,6 +77,7 @@ namespace WorldPackets
|
||||
// CMSG_CHAT_ADDON_MESSAGE_OFFICER
|
||||
// CMSG_CHAT_ADDON_MESSAGE_PARTY
|
||||
// CMSG_CHAT_ADDON_MESSAGE_RAID
|
||||
// CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT
|
||||
class ChatAddonMessage final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
@@ -91,7 +93,7 @@ namespace WorldPackets
|
||||
class ChatAddonMessageWhisper final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ChatAddonMessageWhisper(WorldPacket&& packet) : ClientPacket(std::move(packet)) { }
|
||||
ChatAddonMessageWhisper(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_WHISPER, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
@@ -100,6 +102,19 @@ namespace WorldPackets
|
||||
std::string Text;
|
||||
};
|
||||
|
||||
// CMSG_CHAT_ADDON_MESSAGE_CHANNEL
|
||||
class ChatAddonMessageChannel final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ChatAddonMessageChannel(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_CHANNEL, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::string Text;
|
||||
std::string Target;
|
||||
std::string Prefix;
|
||||
};
|
||||
|
||||
class ChatMessageDND final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
|
||||
@@ -261,9 +261,9 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_CHAR_CUSTOMIZE, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharCustomize, &WorldSession::HandleCharCustomizeOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAR_DELETE, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharDelete, &WorldSession::HandleCharDeleteOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAR_RACE_OR_FACTION_CHANGE, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::CharRaceOrFactionChange, &WorldSession::HandleCharRaceOrFactionChangeOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_ADDON_MESSAGE_CHANNEL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatAddonMessageChannel, &WorldSession::HandleChatAddonMessageChannelOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatAddonMessage, &WorldSession::HandleChatAddonMessageOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatAddonMessage, &WorldSession::HandleChatAddonMessageOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_OFFICER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatAddonMessage, &WorldSession::HandleChatAddonMessageOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatAddonMessage, &WorldSession::HandleChatAddonMessageOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatAddonMessage, &WorldSession::HandleChatAddonMessageOpcode);
|
||||
@@ -297,7 +297,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_DND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessageDND, &WorldSession::HandleChatMessageDNDOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_EMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessageEmote, &WorldSession::HandleChatMessageEmoteOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_MESSAGE_INSTANCE_CHAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_INSTANCE_CHAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_OFFICER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
|
||||
|
||||
@@ -168,6 +168,7 @@ namespace WorldPackets
|
||||
class ChatMessageChannel;
|
||||
class ChatAddonMessage;
|
||||
class ChatAddonMessageWhisper;
|
||||
class ChatAddonMessageChannel;
|
||||
class ChatMessageAFK;
|
||||
class ChatMessageDND;
|
||||
class ChatMessageEmote;
|
||||
@@ -1207,6 +1208,7 @@ class WorldSession
|
||||
void HandleChatMessage(ChatMsg type, uint32 lang, std::string msg, std::string target = "");
|
||||
void HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMessage& chatAddonMessage);
|
||||
void HandleChatAddonMessageWhisperOpcode(WorldPackets::Chat::ChatAddonMessageWhisper& chatAddonMessageWhisper);
|
||||
void HandleChatAddonMessageChannelOpcode(WorldPackets::Chat::ChatAddonMessageChannel& chatAddonMessageChannel);
|
||||
void HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, std::string target = "");
|
||||
void HandleChatMessageAFKOpcode(WorldPackets::Chat::ChatMessageAFK& chatMessageAFK);
|
||||
void HandleChatMessageDNDOpcode(WorldPackets::Chat::ChatMessageDND& chatMessageDND);
|
||||
|
||||
@@ -95,17 +95,17 @@ class ChatLogScript : public PlayerScript
|
||||
player->GetName().c_str(), msg.c_str());
|
||||
break;
|
||||
|
||||
case CHAT_MSG_BATTLEGROUND:
|
||||
case CHAT_MSG_INSTANCE_CHAT:
|
||||
if (lang != LANG_ADDON)
|
||||
TC_LOG_DEBUG("chat.log.bg", "Player %s tells battleground with leader %s: %s",
|
||||
TC_LOG_DEBUG("chat.log.bg", "Player %s tells instance with leader %s: %s",
|
||||
player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str());
|
||||
else
|
||||
TC_LOG_DEBUG("chat.log.addon.bg", "Player %s tells battleground with leader %s: %s",
|
||||
TC_LOG_DEBUG("chat.log.addon.bg", "Player %s tells instance with leader %s: %s",
|
||||
player->GetName().c_str(), group ? group->GetLeaderName() : "<unknown>", msg.c_str());
|
||||
break;
|
||||
|
||||
case CHAT_MSG_BATTLEGROUND_LEADER:
|
||||
TC_LOG_DEBUG("chat.log.bg", "Leader player %s tells battleground: %s",
|
||||
case CHAT_MSG_INSTANCE_CHAT_LEADER:
|
||||
TC_LOG_DEBUG("chat.log.bg", "Leader player %s tells instance: %s",
|
||||
player->GetName().c_str(), msg.c_str());
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user