diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Server/Packets/ChannelPackets.cpp | 43 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ChannelPackets.h | 50 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 3 |
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 |