aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.cpp43
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.h50
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp6
-rw-r--r--src/server/game/Server/WorldSession.h3
4 files changed, 99 insertions, 3 deletions
diff --git a/src/server/game/Server/Packets/ChannelPackets.cpp b/src/server/game/Server/Packets/ChannelPackets.cpp
index 5acb018b46f..c8779052c95 100644
--- a/src/server/game/Server/Packets/ChannelPackets.cpp
+++ b/src/server/game/Server/Packets/ChannelPackets.cpp
@@ -83,6 +83,49 @@ WorldPacket const* WorldPackets::Channel::ChannelNotifyLeft::Write()
return &_worldPacket;
}
+WorldPacket const* WorldPackets::Channel::UserlistAdd::Write()
+{
+ _worldPacket << AddedUserGUID;
+ _worldPacket << uint8(ChannelFlags);
+ _worldPacket << uint8(UserFlags);
+
+ _worldPacket << uint32(ChannelID);
+
+ _worldPacket.WriteBits(ChannelName.length(), 7);
+ _worldPacket.FlushBits();
+ _worldPacket.WriteString(ChannelName);
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Channel::UserlistRemove::Write()
+{
+ _worldPacket << RemovedUserGUID;
+
+ _worldPacket << uint8(ChannelFlags);
+
+ _worldPacket << uint32(ChannelID);
+
+ _worldPacket.WriteBits(ChannelName.length(), 7);
+ _worldPacket.FlushBits();
+ _worldPacket.WriteString(ChannelName);
+ return &_worldPacket;
+}
+
+WorldPacket const* WorldPackets::Channel::UserlistUpdate::Write()
+{
+ _worldPacket << UpdatedUserGUID;
+
+ _worldPacket << uint8(ChannelFlags);
+ _worldPacket << uint8(UserFlags);
+
+ _worldPacket << uint32(ChannelID);
+
+ _worldPacket.WriteBits(ChannelName.length(), 7);
+ _worldPacket.FlushBits();
+ _worldPacket.WriteString(ChannelName);
+ return &_worldPacket;
+}
+
void WorldPackets::Channel::ChannelPlayerCommand::Read()
{
switch (GetOpcode())
diff --git a/src/server/game/Server/Packets/ChannelPackets.h b/src/server/game/Server/Packets/ChannelPackets.h
index ca47c76edc9..6c43588e86a 100644
--- a/src/server/game/Server/Packets/ChannelPackets.h
+++ b/src/server/game/Server/Packets/ChannelPackets.h
@@ -95,6 +95,56 @@ namespace WorldPackets
bool Suspended = false; ///< User Leave - false, On Zone Change - true
};
+ class UserlistAdd final : public ServerPacket
+ {
+ public:
+ UserlistAdd() : ServerPacket(SMSG_USERLIST_ADD, 30) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid AddedUserGUID;
+
+ ChannelFlags ChannelFlags = CHANNEL_FLAG_NONE;
+ ChannelMemberFlags UserFlags = MEMBER_FLAG_NONE;
+
+ int32 ChannelID = 0;
+
+ std::string ChannelName;
+ };
+
+ class UserlistRemove final : public ServerPacket
+ {
+ public:
+ UserlistRemove() : ServerPacket(SMSG_USERLIST_REMOVE, 30) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid RemovedUserGUID;
+
+ ChannelFlags ChannelFlags = CHANNEL_FLAG_NONE;
+
+ uint32 ChannelID = 0;
+
+ std::string ChannelName;
+ };
+
+ class UserlistUpdate final : public ServerPacket
+ {
+ public:
+ UserlistUpdate() : ServerPacket(SMSG_USERLIST_UPDATE, 30) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid UpdatedUserGUID;
+
+ ChannelFlags ChannelFlags = CHANNEL_FLAG_NONE;
+ ChannelMemberFlags UserFlags = MEMBER_FLAG_NONE;
+
+ int32 ChannelID = 0;
+
+ std::string ChannelName;
+ };
+
class ChannelPlayerCommand final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 8c559fe80c7..4c87e00fc91 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1719,9 +1719,9 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WORLD_STATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_USE_EQUIPMENT_SET_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VENDOR_INVENTORY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_VIGNETTE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index bd4fefdd665..6cfa8202af4 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -171,6 +171,9 @@ namespace WorldPackets
class ChannelPlayerCommand;
class JoinChannel;
class LeaveChannel;
+ class UserlistAdd;
+ class UserlistRemove;
+ class UserlistUpdate;
}
namespace Chat