mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 16:38:42 +01:00
Core/PacketsIO: Updated and enabled SMSG_CHANNEL_NOTIFY, CMSG_CHAT_REGISTER_ADDON_PREFIXES, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES
- Thanks to @MitchesD for all his help, you're awesome! - Packets have been sniffed & parsed and they all check out.
This commit is contained in:
@@ -233,3 +233,15 @@ WorldPacket const* WorldPackets::Chat::ChatServerMessage::Write()
|
||||
|
||||
return &_worldPacket;
|
||||
}
|
||||
|
||||
void WorldPackets::Chat::ChatRegisterAddonPrefixes::Read()
|
||||
{
|
||||
int32 count;
|
||||
_worldPacket >> count;
|
||||
|
||||
for (int32 i = 0; i < count; ++i)
|
||||
{
|
||||
uint32 lenghts = _worldPacket.ReadBits(5);
|
||||
Prefixes.push_back(_worldPacket.ReadString(lenghts));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -250,6 +250,24 @@ namespace WorldPackets
|
||||
int32 MessageID = 0;
|
||||
std::string StringParam;
|
||||
};
|
||||
|
||||
class ChatRegisterAddonPrefixes final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ChatRegisterAddonPrefixes(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_REGISTER_ADDON_PREFIXES, std::move(packet)) { }
|
||||
|
||||
void Read() override;
|
||||
|
||||
std::vector<std::string> Prefixes;
|
||||
};
|
||||
|
||||
class ChatUnregisterAllAddonPrefixes final : public ClientPacket
|
||||
{
|
||||
public:
|
||||
ChatUnregisterAllAddonPrefixes(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, std::move(packet)) { }
|
||||
|
||||
void Read() override { }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -309,10 +309,10 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_SAY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessageWhisper, &WorldSession::HandleChatMessageWhisperOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_MESSAGE_YELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_REGISTER_ADDON_PREFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonRegisteredPrefixesOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_REGISTER_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatRegisterAddonPrefixes, &WorldSession::HandleAddonRegisteredPrefixesOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_REPORT_FILTERED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_REPORT_IGNORED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleChatIgnoredOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUnregisterAddonPrefixesOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatUnregisterAllAddonPrefixes, &WorldSession::HandleUnregisterAllAddonPrefixesOpcode);
|
||||
DEFINE_HANDLER(CMSG_CHECK_RAF_EMAIL_ENABLED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
DEFINE_HANDLER(CMSG_CHOICE_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
|
||||
@@ -991,7 +991,7 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_JOINED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_LEFT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_LOGIN_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -913,31 +913,23 @@ bool WorldSession::IsAddonRegistered(const std::string& prefix) const
|
||||
return itr != _registeredAddonPrefixes.end();
|
||||
}
|
||||
|
||||
void WorldSession::HandleUnregisterAddonPrefixesOpcode(WorldPacket& /*recvPacket*/) // empty packet
|
||||
void WorldSession::HandleUnregisterAllAddonPrefixesOpcode(WorldPackets::Chat::ChatUnregisterAllAddonPrefixes& /*packet*/) // empty packet
|
||||
{
|
||||
_registeredAddonPrefixes.clear();
|
||||
}
|
||||
|
||||
void WorldSession::HandleAddonRegisteredPrefixesOpcode(WorldPacket& recvPacket)
|
||||
void WorldSession::HandleAddonRegisteredPrefixesOpcode(WorldPackets::Chat::ChatRegisterAddonPrefixes& packet)
|
||||
{
|
||||
// This is always sent after CMSG_UNREGISTER_ALL_ADDON_PREFIXES
|
||||
// This is always sent after CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES
|
||||
|
||||
uint32 count = recvPacket.ReadBits(25);
|
||||
|
||||
if (count > REGISTERED_ADDON_PREFIX_SOFTCAP)
|
||||
if (packet.Prefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP)
|
||||
{
|
||||
// if we have hit the softcap (64) nothing should be filtered
|
||||
_filterAddonMessages = false;
|
||||
recvPacket.rfinish();
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<uint8> lengths(count);
|
||||
for (uint32 i = 0; i < count; ++i)
|
||||
lengths[i] = recvPacket.ReadBits(5);
|
||||
|
||||
for (uint32 i = 0; i < count; ++i)
|
||||
_registeredAddonPrefixes.push_back(recvPacket.ReadString(lengths[i]));
|
||||
_registeredAddonPrefixes.insert(_registeredAddonPrefixes.end(), packet.Prefixes.begin(), packet.Prefixes.end());
|
||||
|
||||
if (_registeredAddonPrefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP) // shouldn't happen
|
||||
{
|
||||
|
||||
@@ -186,6 +186,8 @@ namespace WorldPackets
|
||||
class ChatMessageEmote;
|
||||
class CTextEmote;
|
||||
class EmoteClient;
|
||||
class ChatRegisterAddonPrefixes;
|
||||
class ChatUnregisterAllAddonPrefixes;
|
||||
}
|
||||
|
||||
namespace Combat
|
||||
@@ -1312,8 +1314,8 @@ class WorldSession
|
||||
void HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet);
|
||||
void HandleChatIgnoredOpcode(WorldPacket& recvPacket);
|
||||
|
||||
void HandleUnregisterAddonPrefixesOpcode(WorldPacket& recvPacket);
|
||||
void HandleAddonRegisteredPrefixesOpcode(WorldPacket& recvPacket);
|
||||
void HandleUnregisterAllAddonPrefixesOpcode(WorldPackets::Chat::ChatUnregisterAllAddonPrefixes& packet);
|
||||
void HandleAddonRegisteredPrefixesOpcode(WorldPackets::Chat::ChatRegisterAddonPrefixes& packet);
|
||||
|
||||
void HandleReclaimCorpse(WorldPackets::Misc::ReclaimCorpse& packet);
|
||||
void HandleQueryCorpseLocation(WorldPackets::Query::QueryCorpseLocationFromClient& packet);
|
||||
|
||||
Reference in New Issue
Block a user