diff options
Diffstat (limited to 'src/server/game/Handlers/ChatHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 8b994c2fedc..2b6f7b89b02 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -509,6 +509,46 @@ void WorldSession::HandleMessagechatOpcode(WorldPacket& recvData) } } +void WorldSession::HandleUnregisterAddonPrefixesOpcode(WorldPacket& /*recvPacket*/) // empty packet +{ + sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_UNREGISTER_ALL_ADDON_PREFIXES"); + + _registeredAddonPrefixes.clear(); +} + +void WorldSession::HandleAddonRegisteredPrefixesOpcode(WorldPacket& recvPacket) +{ + sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Received CMSG_ADDON_REGISTERED_PREFIXES"); + + // This is always sent after CMSG_UNREGISTER_ALL_ADDON_PREFIXES + + uint32 count = recvPacket.ReadBits(25); + + if (count > 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.push_back(recvPacket.ReadBits(5)); + + std::vector<std::string> prefixes(count); + for (uint32 i = 0; i < count; ++i) + _registeredAddonPrefixes.push_back(recvPacket.ReadString(lengths[i])); + + if (_registeredAddonPrefixes.size() > REGISTERED_ADDON_PREFIX_SOFTCAP) // shouldn't happen + { + _filterAddonMessages = false; + return; + } + + _filterAddonMessages = true; +} + void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData) { Player* sender = GetPlayer(); @@ -601,7 +641,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData) WorldPacket data; ChatHandler::FillMessageData(&data, this, type, LANG_ADDON, "", 0, message.c_str(), NULL); - group->BroadcastPacket(&data, false); + group->BroadcastAddonMessagePacket(&data, prefix, false); break; } case CHAT_MSG_GUILD: @@ -620,7 +660,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData) if (!receiver) break; - sender->WhisperAddon(message, prefix, receiver->GetGUID()); + sender->WhisperAddon(message, prefix, receiver); break; } // Messages sent to "RAID" while in a party will get delivered to "PARTY" @@ -634,7 +674,7 @@ void WorldSession::HandleAddonMessagechatOpcode(WorldPacket& recvData) WorldPacket data; ChatHandler::FillMessageData(&data, this, type, LANG_ADDON, "", 0, message.c_str(), NULL, prefix.c_str()); - group->BroadcastPacket(&data, true, -1, group->GetMemberGroup(sender->GetGUID())); + group->BroadcastAddonMessagePacket(&data, true, prefix, -1, group->GetMemberGroup(sender->GetGUID())); break; } default: |