diff options
Diffstat (limited to 'src/server/game/Server')
80 files changed, 1783 insertions, 1540 deletions
diff --git a/src/server/game/Server/Packets/AchievementPackets.cpp b/src/server/game/Server/Packets/AchievementPackets.cpp index 87181b3006a..2c746b77ad6 100644 --- a/src/server/game/Server/Packets/AchievementPackets.cpp +++ b/src/server/game/Server/Packets/AchievementPackets.cpp @@ -111,7 +111,7 @@ WorldPacket const* WorldPackets::Achievement::AchievementEarned::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Achievement::ServerFirstAchievement::Write() +WorldPacket const* WorldPackets::Achievement::BroadcastAchievement::Write() { _worldPacket.WriteBits(Name.length(), 7); _worldPacket.WriteBit(GuildAchievement); diff --git a/src/server/game/Server/Packets/AchievementPackets.h b/src/server/game/Server/Packets/AchievementPackets.h index 56b027d024d..69262eae72f 100644 --- a/src/server/game/Server/Packets/AchievementPackets.h +++ b/src/server/game/Server/Packets/AchievementPackets.h @@ -101,7 +101,7 @@ namespace WorldPackets class AchievementDeleted final : public ServerPacket { public: - AchievementDeleted() : ServerPacket(SMSG_ACHIEVEMENT_DELETED, 4) { } + AchievementDeleted() : ServerPacket(SMSG_ACHIEVEMENT_DELETED, 8) { } WorldPacket const* Write() override; @@ -125,10 +125,10 @@ namespace WorldPackets ObjectGuid Sender; }; - class ServerFirstAchievement final : public ServerPacket + class BroadcastAchievement final : public ServerPacket { public: - ServerFirstAchievement() : ServerPacket(SMSG_SERVER_FIRST_ACHIEVEMENT) { } + BroadcastAchievement() : ServerPacket(SMSG_BROADCAST_ACHIEVEMENT) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp index f99d9831f91..6b4047d0995 100644 --- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp +++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp @@ -33,7 +33,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::AreaTrigger::AreaTriggerS ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerCircularMovementInfo const& areaTriggerCircularMovement) { - data.WriteBit(areaTriggerCircularMovement.TargetGUID.is_initialized()); + data.WriteBit(areaTriggerCircularMovement.PathTarget.is_initialized()); data.WriteBit(areaTriggerCircularMovement.Center.is_initialized()); data.WriteBit(areaTriggerCircularMovement.CounterClockwise); data.WriteBit(areaTriggerCircularMovement.CanLoop); @@ -46,8 +46,8 @@ ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerCircularMovementInfo const& data << float(areaTriggerCircularMovement.InitialAngle); data << float(areaTriggerCircularMovement.ZOffset); - if (areaTriggerCircularMovement.TargetGUID) - data << *areaTriggerCircularMovement.TargetGUID; + if (areaTriggerCircularMovement.PathTarget) + data << *areaTriggerCircularMovement.PathTarget; if (areaTriggerCircularMovement.Center) data << *areaTriggerCircularMovement.Center; @@ -74,14 +74,6 @@ WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerDenied::Write() WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerRePath::Write() { _worldPacket << TriggerGUID; - _worldPacket << AreaTriggerSpline; - - return &_worldPacket; -} - -WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerReShape::Write() -{ - _worldPacket << TriggerGUID; _worldPacket.WriteBit(AreaTriggerSpline.is_initialized()); _worldPacket.WriteBit(AreaTriggerCircularMovement.is_initialized()); diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h index e3872493481..b3abf08c5d9 100644 --- a/src/server/game/Server/Packets/AreaTriggerPackets.h +++ b/src/server/game/Server/Packets/AreaTriggerPackets.h @@ -68,18 +68,7 @@ namespace WorldPackets class AreaTriggerRePath final : public ServerPacket { public: - AreaTriggerRePath() : ServerPacket(SMSG_AREA_TRIGGER_RE_PATH, 50) { } - - WorldPacket const* Write() override; - - AreaTriggerSplineInfo AreaTriggerSpline; - ObjectGuid TriggerGUID; - }; - - class AreaTriggerReShape final : public ServerPacket - { - public: - AreaTriggerReShape() : ServerPacket(SMSG_AREA_TRIGGER_RE_SHAPE, 17) { } + AreaTriggerRePath() : ServerPacket(SMSG_AREA_TRIGGER_RE_PATH, 17) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/ArtifactPackets.cpp b/src/server/game/Server/Packets/ArtifactPackets.cpp index 8666b709cf0..2612b384f8c 100644 --- a/src/server/game/Server/Packets/ArtifactPackets.cpp +++ b/src/server/game/Server/Packets/ArtifactPackets.cpp @@ -69,11 +69,3 @@ WorldPacket const* WorldPackets::Artifact::ArtifactXpGain::Write() return &_worldPacket; } - -WorldPacket const* WorldPackets::Artifact::ArtifactKnowledge::Write() -{ - _worldPacket << int32(ArtifactCategoryID); - _worldPacket << int8(KnowledgeLevel); - - return &_worldPacket; -} diff --git a/src/server/game/Server/Packets/ArtifactPackets.h b/src/server/game/Server/Packets/ArtifactPackets.h index 25934b75c28..f208a906413 100644 --- a/src/server/game/Server/Packets/ArtifactPackets.h +++ b/src/server/game/Server/Packets/ArtifactPackets.h @@ -99,17 +99,6 @@ namespace WorldPackets ObjectGuid ArtifactGUID; uint64 Amount = 0; }; - - class ArtifactKnowledge final : public ServerPacket - { - public: - ArtifactKnowledge() : ServerPacket(SMSG_ARTIFACT_KNOWLEDGE, 1 + 4) { } - - WorldPacket const* Write() override; - - int32 ArtifactCategoryID = 0; - int8 KnowledgeLevel = 0; - }; } } diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index c28b8281ede..44e9608bddd 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -84,8 +84,6 @@ void WorldPackets::Auth::AuthSession::Read() uint32 realmJoinTicketSize; _worldPacket >> DosResponse; - _worldPacket >> Build; - _worldPacket >> BuildType; _worldPacket >> RegionID; _worldPacket >> BattlegroupID; _worldPacket >> RealmID; @@ -145,6 +143,7 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write() _worldPacket.WriteBit(SuccessInfo->ForceCharacterTemplate); _worldPacket.WriteBit(SuccessInfo->NumPlayersHorde.is_initialized()); _worldPacket.WriteBit(SuccessInfo->NumPlayersAlliance.is_initialized()); + _worldPacket.WriteBit(SuccessInfo->ExpansionTrialExpiration.is_initialized()); _worldPacket.FlushBits(); { @@ -164,6 +163,9 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write() if (SuccessInfo->NumPlayersAlliance) _worldPacket << uint16(*SuccessInfo->NumPlayersAlliance); + if (SuccessInfo->ExpansionTrialExpiration) + _worldPacket << int32(*SuccessInfo->ExpansionTrialExpiration); + for (VirtualRealmInfo const& virtualRealm : SuccessInfo->VirtualRealms) _worldPacket << virtualRealm; diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index 97662944f09..7b0e50844bb 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -83,8 +83,6 @@ namespace WorldPackets Digest.fill(0); } - uint16 Build = 0; - int8 BuildType = 0; uint32 RegionID = 0; uint32 BattlegroupID = 0; uint32 RealmID = 0; @@ -159,6 +157,7 @@ namespace WorldPackets bool ForceCharacterTemplate = false; ///< forces the client to always use a character template when creating a new character. @see Templates. @todo implement Optional<uint16> NumPlayersHorde; ///< number of horde players in this realm. @todo implement Optional<uint16> NumPlayersAlliance; ///< number of alliance players in this realm. @todo implement + Optional<int32> ExpansionTrialExpiration; ///< expansion trial expiration unix timestamp }; AuthResponse(); diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 05851fb1dfd..14ae46e105a 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -67,9 +67,11 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData: data << uint32(playerData.HealingDone); data << uint32(playerData.Stats.size()); data << int32(playerData.PrimaryTalentTree); - data << int32(playerData.PrimaryTalentTreeNameIndex); + data << int32(playerData.Sex); data << int32(playerData.Race); - data << uint32(playerData.Prestige); + data << int32(playerData.Class); + data << int32(playerData.CreatureID); + data << int32(playerData.HonorLevel); if (!playerData.Stats.empty()) data.append(playerData.Stats.data(), playerData.Stats.size()); @@ -89,13 +91,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData: data << uint32(*playerData.PreMatchRating); if (playerData.RatingChange) - data << uint32(*playerData.RatingChange); + data << int32(*playerData.RatingChange); if (playerData.PreMatchMMR) data << uint32(*playerData.PreMatchMMR); if (playerData.MmrChange) - data << uint32(*playerData.MmrChange); + data << int32(*playerData.MmrChange); return data; } diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 7340d8d7fc9..14ebc283cb5 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -122,9 +122,11 @@ namespace WorldPackets Optional<int32> MmrChange; std::vector<int32> Stats; int32 PrimaryTalentTree = 0; - int32 PrimaryTalentTreeNameIndex = 0; // controls which name field from ChrSpecialization.dbc will be sent to lua + int32 Sex = 0; int32 Race = 0; - uint32 Prestige = 0; + int32 Class = 0; + int32 CreatureID = 0; + int32 HonorLevel = 0; }; Optional<uint8> Winner; diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp index 5292bb69b99..7c82bd9d377 100644 --- a/src/server/game/Server/Packets/CalendarPackets.cpp +++ b/src/server/game/Server/Packets/CalendarPackets.cpp @@ -24,7 +24,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Calendar::CalendarSendCal data.AppendPackedTime(eventInfo.Date); data << uint32(eventInfo.Flags); data << int32(eventInfo.TextureID); - data << eventInfo.EventGuildID; + data << uint64(eventInfo.EventClubID); data << eventInfo.OwnerGuid; data.WriteBits(eventInfo.EventName.size(), 8); @@ -80,8 +80,9 @@ void WorldPackets::Calendar::CalendarGetEvent::Read() _worldPacket >> EventID; } -void WorldPackets::Calendar::CalendarGuildFilter::Read() +void WorldPackets::Calendar::CalendarCommunityFilter::Read() { + _worldPacket >> ClubID; _worldPacket >> MinLevel; _worldPacket >> MaxLevel; _worldPacket >> MaxRankOrder; @@ -92,26 +93,45 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarAddEv buffer >> invite.Guid; buffer >> invite.Status; buffer >> invite.Moderator; + if (buffer.ReadBit()) + invite.Unused_801_1 = boost::in_place(); + + if (buffer.ReadBit()) + invite.Unused_801_2 = boost::in_place(); + + if (buffer.ReadBit()) + invite.Unused_801_3 = boost::in_place(); + + if (invite.Unused_801_1) + buffer >> *invite.Unused_801_1; + + if (invite.Unused_801_2) + buffer >> *invite.Unused_801_2; + + if (invite.Unused_801_3) + buffer >> *invite.Unused_801_3; + return buffer; } ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarAddEventInfo& addEventInfo) { - uint8 titleLength = buffer.ReadBits(8); - uint16 descriptionLength = buffer.ReadBits(11); - + buffer >> addEventInfo.ClubID; buffer >> addEventInfo.EventType; buffer >> addEventInfo.TextureID; addEventInfo.Time = buffer.ReadPackedTime(); buffer >> addEventInfo.Flags; addEventInfo.Invites.resize(buffer.read<uint32>()); - addEventInfo.Title = buffer.ReadString(titleLength); - addEventInfo.Description = buffer.ReadString(descriptionLength); + uint8 titleLength = buffer.ReadBits(8); + uint16 descriptionLength = buffer.ReadBits(11); for (WorldPackets::Calendar::CalendarAddEventInviteInfo& invite : addEventInfo.Invites) buffer >> invite; + addEventInfo.Title = buffer.ReadString(titleLength); + addEventInfo.Description = buffer.ReadString(descriptionLength); + return buffer; } @@ -121,20 +141,28 @@ void WorldPackets::Calendar::CalendarAddEvent::Read() _worldPacket >> MaxSize; } -void WorldPackets::Calendar::CalendarUpdateEvent::Read() +ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarUpdateEventInfo& updateEventInfo) { - _worldPacket >> EventInfo.EventID; - _worldPacket >> EventInfo.ModeratorID; - _worldPacket >> EventInfo.EventType; - _worldPacket >> EventInfo.TextureID; - EventInfo.Time = _worldPacket.ReadPackedTime(); - _worldPacket >> EventInfo.Flags; + buffer >> updateEventInfo.ClubID; + buffer >> updateEventInfo.EventID; + buffer >> updateEventInfo.ModeratorID; + buffer >> updateEventInfo.EventType; + buffer >> updateEventInfo.TextureID; + updateEventInfo.Time = buffer.ReadPackedTime(); + buffer >> updateEventInfo.Flags; - uint8 titleLen = _worldPacket.ReadBits(8); - uint16 descLen = _worldPacket.ReadBits(11); + uint8 titleLen = buffer.ReadBits(8); + uint16 descLen = buffer.ReadBits(11); - EventInfo.Title = _worldPacket.ReadString(titleLen); - EventInfo.Description = _worldPacket.ReadString(descLen); + updateEventInfo.Title = buffer.ReadString(titleLen); + updateEventInfo.Description = buffer.ReadString(descLen); + + return buffer; +} + +void WorldPackets::Calendar::CalendarUpdateEvent::Read() +{ + _worldPacket >> EventInfo; _worldPacket >> MaxSize; } @@ -142,6 +170,7 @@ void WorldPackets::Calendar::CalendarRemoveEvent::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; + _worldPacket >> ClubID; _worldPacket >> Flags; } @@ -149,6 +178,7 @@ void WorldPackets::Calendar::CalendarCopyEvent::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; + _worldPacket >> EventClubID; Date = _worldPacket.ReadPackedTime(); } @@ -163,6 +193,7 @@ void WorldPackets::Calendar::CalendarEventInvite::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; + _worldPacket >> ClubID; uint16 nameLen = _worldPacket.ReadBits(9); Creating = _worldPacket.ReadBit(); @@ -174,6 +205,7 @@ void WorldPackets::Calendar::CalendarEventInvite::Read() void WorldPackets::Calendar::CalendarEventSignUp::Read() { _worldPacket >> EventID; + _worldPacket >> ClubID; Tentative = _worldPacket.ReadBit(); } @@ -255,7 +287,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarSendEvent::Write() _worldPacket << uint32(Flags); _worldPacket.AppendPackedTime(Date); _worldPacket << uint32(LockDate); - _worldPacket << EventGuildID; + _worldPacket << uint64(EventClubID); _worldPacket << uint32(Invites.size()); _worldPacket.WriteBits(EventName.size(), 8); _worldPacket.WriteBits(Description.size(), 11); @@ -277,7 +309,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteAlert::Write() _worldPacket << uint32(Flags); _worldPacket << uint8(EventType); _worldPacket << int32(TextureID); - _worldPacket << EventGuildID; + _worldPacket << uint64(EventClubID); _worldPacket << uint64(InviteID); _worldPacket << uint8(Status); _worldPacket << uint8(ModeratorStatus); @@ -344,6 +376,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteRemovedAlert::Writ WorldPacket const* WorldPackets::Calendar::CalendarEventUpdatedAlert::Write() { + _worldPacket << uint64(EventClubID); _worldPacket << uint64(EventID); _worldPacket.AppendPackedTime(OriginalDate); @@ -462,8 +495,8 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteNotes::Write() _worldPacket << InviteGuid; _worldPacket << uint64(EventID); - _worldPacket.WriteBits(Notes.size(), 8); _worldPacket.WriteBit(ClearPending); + _worldPacket.WriteBits(Notes.size(), 8); _worldPacket.FlushBits(); _worldPacket.WriteString(Notes); diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h index f7337386c3c..7757e51144b 100644 --- a/src/server/game/Server/Packets/CalendarPackets.h +++ b/src/server/game/Server/Packets/CalendarPackets.h @@ -45,13 +45,14 @@ namespace WorldPackets uint64 EventID = 0; }; - class CalendarGuildFilter final : public ClientPacket + class CalendarCommunityFilter final : public ClientPacket { public: - CalendarGuildFilter(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GUILD_FILTER, std::move(packet)) { } + CalendarCommunityFilter(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_COMMUNITY_FILTER, std::move(packet)) { } void Read() override; + uint64 ClubID = 0; uint8 MinLevel = 1; uint8 MaxLevel = 100; uint8 MaxRankOrder = 0; @@ -62,10 +63,14 @@ namespace WorldPackets ObjectGuid Guid; uint8 Status = 0; uint8 Moderator = 0; + Optional<ObjectGuid> Unused_801_1; + Optional<uint64> Unused_801_2; + Optional<uint64> Unused_801_3; }; struct CalendarAddEventInfo { + uint64 ClubID = 0; std::string Title; std::string Description; uint8 EventType = 0; @@ -88,6 +93,7 @@ namespace WorldPackets struct CalendarUpdateEventInfo { + uint64 ClubID = 0; uint64 EventID = 0; uint64 ModeratorID = 0; std::string Title; @@ -118,6 +124,7 @@ namespace WorldPackets uint64 ModeratorID = 0; uint64 EventID = 0; + uint64 ClubID = 0; uint32 Flags = 0; }; @@ -130,6 +137,7 @@ namespace WorldPackets uint64 ModeratorID = 0; uint64 EventID = 0; + uint64 EventClubID = 0; time_t Date = time_t(0); }; @@ -176,7 +184,7 @@ namespace WorldPackets time_t Date = time_t(0); uint32 Flags = 0; int32 TextureID = 0; - ObjectGuid EventGuildID; + uint64 EventClubID = 0; ObjectGuid OwnerGuid; }; @@ -213,7 +221,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid OwnerGuid; - ObjectGuid EventGuildID; + uint64 EventClubID = 0; uint64 EventID = 0; time_t Date = time_t(0); time_t LockDate = time_t(0); @@ -234,7 +242,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid OwnerGuid; - ObjectGuid EventGuildID; + uint64 EventClubID = 0; ObjectGuid InvitedByGuid; uint64 InviteID = 0; uint64 EventID = 0; @@ -258,6 +266,7 @@ namespace WorldPackets bool IsSignUp = false; bool Creating = true; uint64 EventID = 0; + uint64 ClubID = 0; std::string Name; }; @@ -343,6 +352,7 @@ namespace WorldPackets WorldPacket const* Write() override; + uint64 EventClubID = 0; uint64 EventID = 0; time_t Date = time_t(0); uint32 Flags = 0; @@ -395,6 +405,7 @@ namespace WorldPackets bool Tentative = false; uint64 EventID = 0; + uint64 ClubID = 0; }; class CalendarRemoveInvite final : public ClientPacket diff --git a/src/server/game/Server/Packets/ChannelPackets.cpp b/src/server/game/Server/Packets/ChannelPackets.cpp index fe6969d07cf..d5cb727b441 100644 --- a/src/server/game/Server/Packets/ChannelPackets.cpp +++ b/src/server/game/Server/Packets/ChannelPackets.cpp @@ -128,7 +128,6 @@ WorldPackets::Channel::ChannelCommand::ChannelCommand(WorldPacket&& packet) : Cl case CMSG_CHAT_CHANNEL_DECLINE_INVITE: case CMSG_CHAT_CHANNEL_DISPLAY_LIST: case CMSG_CHAT_CHANNEL_LIST: - case CMSG_CHAT_CHANNEL_MODERATE: case CMSG_CHAT_CHANNEL_OWNER: break; default: @@ -150,12 +149,10 @@ WorldPackets::Channel::ChannelPlayerCommand::ChannelPlayerCommand(WorldPacket&& case CMSG_CHAT_CHANNEL_INVITE: case CMSG_CHAT_CHANNEL_KICK: case CMSG_CHAT_CHANNEL_MODERATOR: - case CMSG_CHAT_CHANNEL_MUTE: case CMSG_CHAT_CHANNEL_SET_OWNER: case CMSG_CHAT_CHANNEL_SILENCE_ALL: case CMSG_CHAT_CHANNEL_UNBAN: case CMSG_CHAT_CHANNEL_UNMODERATOR: - case CMSG_CHAT_CHANNEL_UNMUTE: case CMSG_CHAT_CHANNEL_UNSILENCE_ALL: break; default: diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 538a2c7e1d5..3973c55cf0e 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -140,6 +140,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharacters ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::CharacterInfo const& charInfo) { data << charInfo.Guid; + data << uint64(charInfo.GuildClubMemberID); data << uint8(charInfo.ListPosition); data << uint8(charInfo.Race); data << uint8(charInfo.Class); @@ -201,9 +202,9 @@ WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write() _worldPacket.WriteBit(Success); _worldPacket.WriteBit(IsDeletedCharacters); - _worldPacket.WriteBit(IsDemonHunterCreationAllowed); + _worldPacket.WriteBit(IsTestDemonHunterCreationAllowed); _worldPacket.WriteBit(HasDemonHunterOnRealm); - _worldPacket.WriteBit(Unknown7x); + _worldPacket.WriteBit(IsDemonHunterCreationAllowed); _worldPacket.WriteBit(DisabledClassesMask.is_initialized()); _worldPacket.WriteBit(IsAlliedRacesCreationAllowed); _worldPacket << uint32(Characters.size()); @@ -227,6 +228,7 @@ void WorldPackets::Character::CreateCharacter::Read() CreateInfo.reset(new CharacterCreateInfo()); uint32 nameLength = _worldPacket.ReadBits(6); bool const hasTemplateSet = _worldPacket.ReadBit(); + CreateInfo->IsTrialBoost = _worldPacket.ReadBit(); _worldPacket >> CreateInfo->Race; _worldPacket >> CreateInfo->Class; @@ -246,6 +248,7 @@ void WorldPackets::Character::CreateCharacter::Read() WorldPacket const* WorldPackets::Character::CreateChar::Write() { _worldPacket << uint8(Code); + _worldPacket << Guid; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 1f4ce11621a..fb5984efc8a 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -56,6 +56,7 @@ namespace WorldPackets std::array<uint8, PLAYER_CUSTOM_DISPLAY_SIZE> CustomDisplay = { }; uint8 OutfitId = 0; Optional<int32> TemplateSet; + bool IsTrialBoost = false; std::string Name; /// Server side data @@ -121,6 +122,7 @@ namespace WorldPackets CharacterInfo(Field* fields); ObjectGuid Guid; + uint64 GuildClubMemberID = 0; ///< same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known) std::string Name; uint8 ListPosition = 0; ///< Order of the characters in list uint8 Race = 0; @@ -170,22 +172,22 @@ namespace WorldPackets struct RaceUnlock { - int32 RaceID; - bool HasExpansion; - bool HasAchievement; - bool HasHeritageArmor; + int32 RaceID = 0; + bool HasExpansion = false; + bool HasAchievement = false; + bool HasHeritageArmor = false; }; EnumCharactersResult() : ServerPacket(SMSG_ENUM_CHARACTERS_RESULT) { } WorldPacket const* Write() override; - bool Success = false; ///< - bool IsDeletedCharacters = false; ///< used for character undelete list - bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access - bool HasDemonHunterOnRealm = false; - bool Unknown7x = false; - bool IsAlliedRacesCreationAllowed = false; + bool Success = false; ///< + bool IsDeletedCharacters = false; ///< used for character undelete list + bool IsTestDemonHunterCreationAllowed = false; ///< allows client to skip 1 per realm and level 70 requirements + bool HasDemonHunterOnRealm = false; + bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access + bool IsAlliedRacesCreationAllowed = false; int32 MaxCharacterLevel = 1; Optional<uint32> DisabledClassesMask; @@ -225,6 +227,7 @@ namespace WorldPackets WorldPacket const* Write() override; uint8 Code = 0; ///< Result code @see enum ResponseCodes + ObjectGuid Guid; }; class CharDelete final : public ClientPacket @@ -537,7 +540,7 @@ namespace WorldPackets class InitialSetup final : public ServerPacket { public: - InitialSetup() : ServerPacket(SMSG_INITIAL_SETUP, 1 + 1 + 4 + 4) { } + InitialSetup() : ServerPacket(SMSG_INITIAL_SETUP, 1 + 1) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index 26cbd48f7bf..044fe086f48 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -47,32 +47,30 @@ void WorldPackets::Chat::ChatMessageChannel::Read() Text = _worldPacket.ReadString(textLen); } -void WorldPackets::Chat::ChatAddonMessage::Read() +ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Chat::ChatAddonMessageParams& params) { - uint32 prefixLen = _worldPacket.ReadBits(5); - uint32 textLen = _worldPacket.ReadBits(9); - Prefix = _worldPacket.ReadString(prefixLen); - Text = _worldPacket.ReadString(textLen); + uint32 prefixLen = data.ReadBits(5); + uint32 textLen = data.ReadBits(8); + params.IsLogged = data.ReadBit(); + params.Type = ChatMsg(data.read<int32>()); + params.Prefix = data.ReadString(prefixLen); + params.Text = data.ReadString(textLen); + + return data; } -void WorldPackets::Chat::ChatAddonMessageWhisper::Read() +void WorldPackets::Chat::ChatAddonMessage::Read() { - uint32 targetLen = _worldPacket.ReadBits(9); - uint32 prefixLen = _worldPacket.ReadBits(5); - uint32 textLen = _worldPacket.ReadBits(9); - Target = _worldPacket.ReadString(targetLen); - Prefix = _worldPacket.ReadString(prefixLen); - Text = _worldPacket.ReadString(textLen); + _worldPacket >> Params; } -void WorldPackets::Chat::ChatAddonMessageChannel::Read() +void WorldPackets::Chat::ChatAddonMessageTargeted::Read() { uint32 targetLen = _worldPacket.ReadBits(9); - uint32 prefixLen = _worldPacket.ReadBits(5); - uint32 textLen = _worldPacket.ReadBits(9); + _worldPacket.ResetBitPos(); + + _worldPacket >> Params; Target = _worldPacket.ReadString(targetLen); - Prefix = _worldPacket.ReadString(prefixLen); - Text = _worldPacket.ReadString(textLen); } void WorldPackets::Chat::ChatMessageDND::Read() @@ -162,17 +160,17 @@ void WorldPackets::Chat::Chat::SetReceiver(WorldObject const* receiver, LocaleCo WorldPacket const* WorldPackets::Chat::Chat::Write() { - _worldPacket << SlashCmd; - _worldPacket << _Language; + _worldPacket << uint8(SlashCmd); + _worldPacket << uint32(_Language); _worldPacket << SenderGUID; _worldPacket << SenderGuildGUID; _worldPacket << SenderAccountGUID; _worldPacket << TargetGUID; - _worldPacket << TargetVirtualAddress; - _worldPacket << SenderVirtualAddress; + _worldPacket << uint32(TargetVirtualAddress); + _worldPacket << uint32(SenderVirtualAddress); _worldPacket << PartyGUID; - _worldPacket << AchievementID; - _worldPacket << DisplayTime; + _worldPacket << uint32(AchievementID); + _worldPacket << float(DisplayTime); _worldPacket.WriteBits(SenderName.length(), 11); _worldPacket.WriteBits(TargetName.length(), 11); _worldPacket.WriteBits(Prefix.length(), 5); @@ -181,6 +179,7 @@ WorldPacket const* WorldPackets::Chat::Chat::Write() _worldPacket.WriteBits(_ChatFlags, 11); _worldPacket.WriteBit(HideChatLog); _worldPacket.WriteBit(FakeSenderName); + _worldPacket.WriteBit(Unused_801.is_initialized()); _worldPacket.FlushBits(); _worldPacket.WriteString(SenderName); @@ -189,6 +188,9 @@ WorldPacket const* WorldPackets::Chat::Chat::Write() _worldPacket.WriteString(_Channel); _worldPacket.WriteString(ChatText); + if (Unused_801) + _worldPacket << uint32(*Unused_801); + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index 97654aa656e..cbb9da156b0 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -53,7 +53,7 @@ namespace WorldPackets class ChatMessageWhisper final : public ClientPacket { public: - ChatMessageWhisper(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } + ChatMessageWhisper(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_MESSAGE_WHISPER, std::move(packet)) { } void Read() override; @@ -66,7 +66,7 @@ namespace WorldPackets class ChatMessageChannel final : public ClientPacket { public: - ChatMessageChannel(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } + ChatMessageChannel(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_MESSAGE_CHANNEL, std::move(packet)) { } void Read() override; @@ -75,46 +75,35 @@ namespace WorldPackets std::string Target; }; - // CMSG_CHAT_ADDON_MESSAGE_GUILD - // 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 + struct ChatAddonMessageParams { - public: - ChatAddonMessage(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } - - void Read() override; - std::string Prefix; std::string Text; + ChatMsg Type = CHAT_MSG_PARTY; + bool IsLogged = false; }; - // CMSG_CHAT_ADDON_MESSAGE_WHISPER - class ChatAddonMessageWhisper final : public ClientPacket + // CMSG_CHAT_ADDON_MESSAGE + class ChatAddonMessage final : public ClientPacket { public: - ChatAddonMessageWhisper(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_WHISPER, std::move(packet)) { } + ChatAddonMessage(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE, std::move(packet)) { } void Read() override; - std::string Prefix; - std::string Target; - std::string Text; + ChatAddonMessageParams Params; }; // CMSG_CHAT_ADDON_MESSAGE_CHANNEL - class ChatAddonMessageChannel final : public ClientPacket + class ChatAddonMessageTargeted final : public ClientPacket { public: - ChatAddonMessageChannel(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_CHANNEL, std::move(packet)) { } + ChatAddonMessageTargeted(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_TARGETED, std::move(packet)) { } void Read() override; - std::string Text; std::string Target; - std::string Prefix; + ChatAddonMessageParams Params; }; class ChatMessageDND final : public ClientPacket @@ -161,7 +150,7 @@ namespace WorldPackets WorldPacket const* Write() override; uint8 SlashCmd = 0; ///< @see enum ChatMsg - uint8 _Language = LANG_UNIVERSAL; + uint32 _Language = LANG_UNIVERSAL; ObjectGuid SenderGUID; ObjectGuid SenderGuildGUID; ObjectGuid SenderAccountGUID; @@ -177,6 +166,7 @@ namespace WorldPackets uint32 AchievementID = 0; uint8 _ChatFlags = 0; ///< @see enum ChatFlags float DisplayTime = 0.0f; + Optional<uint32> Unused_801; bool HideChatLog = false; bool FakeSenderName = false; }; diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index 22196336960..243a7fd6e43 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -26,6 +26,7 @@ WorldPacket const* WorldPackets::CombatLog::SpellNonMeleeDamageLog::Write() *this << int32(SpellID); *this << int32(SpellXSpellVisualID); *this << int32(Damage); + *this << int32(OriginalDamage); *this << int32(Overkill); *this << uint8(SchoolMask); *this << int32(Absorbed); @@ -35,11 +36,11 @@ WorldPacket const* WorldPackets::CombatLog::SpellNonMeleeDamageLog::Write() WriteBits(Flags, 7); WriteBit(false); // Debug info WriteLogDataBit(); - WriteBit(SandboxScaling.is_initialized()); + WriteBit(ContentTuning.is_initialized()); FlushBits(); WriteLogData(); - if (SandboxScaling) - *this << *SandboxScaling; + if (ContentTuning) + *this << *ContentTuning; return &_worldPacket; } @@ -61,12 +62,12 @@ WorldPacket const* WorldPackets::CombatLog::EnvironmentalDamageLog::Write() WorldPacket const* WorldPackets::CombatLog::SpellExecuteLog::Write() { *this << Caster; - *this << SpellID; + *this << int32(SpellID); *this << uint32(Effects.size()); for (SpellLogEffect const& effect : Effects) { - *this << effect.Effect; + *this << int32(effect.Effect); *this << uint32(effect.PowerDrainTargets.size()); *this << uint32(effect.ExtraAttacksTargets.size()); @@ -78,32 +79,32 @@ WorldPacket const* WorldPackets::CombatLog::SpellExecuteLog::Write() for (SpellLogEffectPowerDrainParams const& powerDrainTarget : effect.PowerDrainTargets) { *this << powerDrainTarget.Victim; - *this << powerDrainTarget.Points; - *this << powerDrainTarget.PowerType; - *this << powerDrainTarget.Amplitude; + *this << uint32(powerDrainTarget.Points); + *this << uint32(powerDrainTarget.PowerType); + *this << float(powerDrainTarget.Amplitude); } for (SpellLogEffectExtraAttacksParams const& extraAttacksTarget : effect.ExtraAttacksTargets) { *this << extraAttacksTarget.Victim; - *this << extraAttacksTarget.NumAttacks; + *this << uint32(extraAttacksTarget.NumAttacks); } for (SpellLogEffectDurabilityDamageParams const& durabilityDamageTarget : effect.DurabilityDamageTargets) { *this << durabilityDamageTarget.Victim; - *this << durabilityDamageTarget.ItemID; - *this << durabilityDamageTarget.Amount; + *this << int32(durabilityDamageTarget.ItemID); + *this << int32(durabilityDamageTarget.Amount); } for (SpellLogEffectGenericVictimParams const& genericVictimTarget : effect.GenericVictimTargets) *this << genericVictimTarget.Victim; for (SpellLogEffectTradeSkillItemParams const& tradeSkillTarget : effect.TradeSkillTargets) - *this << tradeSkillTarget.ItemID; + *this << int32(tradeSkillTarget.ItemID); for (SpellLogEffectFeedPetParams const& feedPetTarget : effect.FeedPetTargets) - *this << feedPetTarget.ItemID; + *this << int32(feedPetTarget.ItemID); } WriteLogDataBit(); @@ -119,13 +120,14 @@ WorldPacket const* WorldPackets::CombatLog::SpellHealLog::Write() *this << CasterGUID; *this << int32(SpellID); *this << int32(Health); + *this << int32(OriginalHeal); *this << int32(OverHeal); *this << int32(Absorbed); WriteBit(Crit); WriteBit(CritRollMade.is_initialized()); WriteBit(CritRollNeeded.is_initialized()); WriteLogDataBit(); - WriteBit(SandboxScaling.is_initialized()); + WriteBit(ContentTuning.is_initialized()); FlushBits(); WriteLogData(); @@ -136,8 +138,8 @@ WorldPacket const* WorldPackets::CombatLog::SpellHealLog::Write() if (CritRollNeeded) *this << *CritRollNeeded; - if (SandboxScaling) - *this << *SandboxScaling; + if (ContentTuning) + *this << *ContentTuning; return &_worldPacket; } @@ -155,24 +157,24 @@ WorldPacket const* WorldPackets::CombatLog::SpellPeriodicAuraLog::Write() { *this << int32(effect.Effect); *this << int32(effect.Amount); + *this << int32(effect.OriginalDamage); *this << int32(effect.OverHealOrKill); *this << int32(effect.SchoolMaskOrPower); *this << int32(effect.AbsorbedOrAmplitude); *this << int32(effect.Resisted); WriteBit(effect.Crit); WriteBit(effect.DebugInfo.is_initialized()); - WriteBit(effect.SandboxScaling.is_initialized()); + WriteBit(effect.ContentTuning.is_initialized()); FlushBits(); - if (effect.SandboxScaling) - *this << *effect.SandboxScaling; + if (effect.ContentTuning) + *this << *effect.ContentTuning; if (effect.DebugInfo) { *this << float(effect.DebugInfo->CritRollMade); *this << float(effect.DebugInfo->CritRollNeeded); } - } WriteLogData(); @@ -280,6 +282,7 @@ WorldPacket const* WorldPackets::CombatLog::SpellDamageShield::Write() *this << Defender; *this << int32(SpellID); *this << int32(TotalDamage); + *this << int32(OriginalDamage); *this << int32(OverKill); *this << int32(SchoolMask); *this << int32(LogAbsorbed); @@ -297,6 +300,7 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write() attackRoundInfo << AttackerGUID; attackRoundInfo << VictimGUID; attackRoundInfo << int32(Damage); + attackRoundInfo << int32(OriginalDamage); attackRoundInfo << int32(OverDamage); attackRoundInfo << uint8(SubDmg.is_initialized()); if (SubDmg) @@ -338,15 +342,16 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write() if (HitInfo & (HITINFO_BLOCK | HITINFO_UNK12)) attackRoundInfo << float(Unk); - attackRoundInfo << uint8(SandboxScaling.Type); - attackRoundInfo << uint8(SandboxScaling.TargetLevel); - attackRoundInfo << uint8(SandboxScaling.Expansion); - attackRoundInfo << uint8(SandboxScaling.Class); - attackRoundInfo << uint8(SandboxScaling.TargetMinScalingLevel); - attackRoundInfo << uint8(SandboxScaling.TargetMaxScalingLevel); - attackRoundInfo << int16(SandboxScaling.PlayerLevelDelta); - attackRoundInfo << int8(SandboxScaling.TargetScalingLevelDelta); - attackRoundInfo << uint16(SandboxScaling.PlayerItemLevel); + attackRoundInfo << uint8(ContentTuning.Type); + attackRoundInfo << uint8(ContentTuning.TargetLevel); + attackRoundInfo << uint8(ContentTuning.Expansion); + attackRoundInfo << uint8(ContentTuning.TargetMinScalingLevel); + attackRoundInfo << uint8(ContentTuning.TargetMaxScalingLevel); + attackRoundInfo << int16(ContentTuning.PlayerLevelDelta); + attackRoundInfo << int8(ContentTuning.TargetScalingLevelDelta); + attackRoundInfo << uint16(ContentTuning.PlayerItemLevel); + attackRoundInfo << uint16(ContentTuning.ScalingHealthItemLevelCurveID); + attackRoundInfo << uint8(ContentTuning.ScalesWithItemLevel ? 1 : 0); WriteLogDataBit(); FlushBits(); diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h index 88a427ac962..4f3d1361796 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.h +++ b/src/server/game/Server/Packets/CombatLogPackets.h @@ -39,6 +39,7 @@ namespace WorldPackets int32 SpellID = 0; int32 SpellXSpellVisualID = 0; int32 Damage = 0; + int32 OriginalDamage = 0; int32 Overkill = -1; uint8 SchoolMask = 0; int32 ShieldBlock = 0; @@ -47,7 +48,7 @@ namespace WorldPackets int32 Absorbed = 0; int32 Flags = 0; // Optional<SpellNonMeleeDamageLogDebugInfo> DebugInfo; - Optional<Spells::SandboxScalingData> SandboxScaling; + Optional<Spells::ContentTuningParams> ContentTuning; }; class EnvironmentalDamageLog final : public CombatLogServerPacket @@ -99,12 +100,13 @@ namespace WorldPackets ObjectGuid TargetGUID; int32 SpellID = 0; int32 Health = 0; + int32 OriginalHeal = 0; int32 OverHeal = 0; int32 Absorbed = 0; bool Crit = false; Optional<float> CritRollMade; Optional<float> CritRollNeeded; - Optional<Spells::SandboxScalingData> SandboxScaling; + Optional<Spells::ContentTuningParams> ContentTuning; }; class SpellPeriodicAuraLog final : public CombatLogServerPacket @@ -120,13 +122,14 @@ namespace WorldPackets { int32 Effect = 0; int32 Amount = 0; + int32 OriginalDamage = 0; int32 OverHealOrKill = 0; int32 SchoolMaskOrPower = 0; int32 AbsorbedOrAmplitude = 0; int32 Resisted = 0; bool Crit = false; Optional<PeriodicalAuraLogEffectDebugInfo> DebugInfo; - Optional<Spells::SandboxScalingData> SandboxScaling; + Optional<Spells::ContentTuningParams> ContentTuning; }; SpellPeriodicAuraLog() : CombatLogServerPacket(SMSG_SPELL_PERIODIC_AURA_LOG, 16 + 16 + 4 + 4 + 1) { } @@ -267,6 +270,7 @@ namespace WorldPackets ObjectGuid Defender; int32 SpellID = 0; int32 TotalDamage = 0; + int32 OriginalDamage = 0; int32 OverKill = 0; int32 SchoolMask = 0; int32 LogAbsorbed = 0; @@ -308,6 +312,7 @@ namespace WorldPackets ObjectGuid AttackerGUID; ObjectGuid VictimGUID; int32 Damage = 0; + int32 OriginalDamage = 0; int32 OverDamage = -1; // (damage - health) or -1 if unit is still alive Optional<SubDamage> SubDmg; uint8 VictimState = 0; @@ -317,7 +322,7 @@ namespace WorldPackets int32 RageGained = 0; UnkAttackerState UnkState; float Unk = 0.0f; - Spells::SandboxScalingData SandboxScaling; + Spells::ContentTuningParams ContentTuning; }; } } diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp index e2f18ace45e..b1e22a3746f 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp @@ -27,6 +27,7 @@ void WorldPackets::Spells::SpellCastLogData::Initialize(Unit const* unit) Health = unit->GetHealth(); AttackPower = unit->GetTotalAttackPowerValue(unit->getClass() == CLASS_HUNTER ? RANGED_ATTACK : BASE_ATTACK); SpellPower = unit->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SPELL); + Armor = unit->GetArmor(); PowerData.emplace_back(int32(unit->GetPowerType()), unit->GetPower(unit->GetPowerType()), int32(0)); } @@ -35,6 +36,7 @@ void WorldPackets::Spells::SpellCastLogData::Initialize(Spell const* spell) Health = spell->GetCaster()->GetHealth(); AttackPower = spell->GetCaster()->GetTotalAttackPowerValue(spell->GetCaster()->getClass() == CLASS_HUNTER ? RANGED_ATTACK : BASE_ATTACK); SpellPower = spell->GetCaster()->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SPELL); + Armor = spell->GetCaster()->GetArmor(); Powers primaryPowerType = spell->GetCaster()->GetPowerType(); bool primaryPowerAdded = false; for (SpellPowerCost const& cost : spell->GetPowerCost()) @@ -53,22 +55,22 @@ namespace WorldPackets namespace Spells { template<class T, class U> - bool SandboxScalingData::GenerateDataForUnits(T* /*attacker*/, U* /*target*/) + bool ContentTuningParams::GenerateDataForUnits(T* /*attacker*/, U* /*target*/) { return false; } template<> - bool SandboxScalingData::GenerateDataForUnits<Creature, Player>(Creature* attacker, Player* target) + bool ContentTuningParams::GenerateDataForUnits<Creature, Player>(Creature* attacker, Player* target) { CreatureTemplate const* creatureTemplate = attacker->GetCreatureTemplate(); Type = TYPE_CREATURE_TO_PLAYER_DAMAGE; - PlayerLevelDelta = target->GetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); + PlayerLevelDelta = target->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); PlayerItemLevel = target->GetAverageItemLevel(); + ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID); TargetLevel = target->getLevel(); Expansion = creatureTemplate->RequiredExpansion; - Class = creatureTemplate->unit_class; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); TargetScalingLevelDelta = int8(attacker->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); @@ -76,16 +78,16 @@ namespace WorldPackets } template<> - bool SandboxScalingData::GenerateDataForUnits<Player, Creature>(Player* attacker, Creature* target) + bool ContentTuningParams::GenerateDataForUnits<Player, Creature>(Player* attacker, Creature* target) { CreatureTemplate const* creatureTemplate = target->GetCreatureTemplate(); Type = TYPE_PLAYER_TO_CREATURE_DAMAGE; - PlayerLevelDelta = attacker->GetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); + PlayerLevelDelta = attacker->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); PlayerItemLevel = attacker->GetAverageItemLevel(); + ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID); TargetLevel = target->getLevel(); Expansion = creatureTemplate->RequiredExpansion; - Class = creatureTemplate->unit_class; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); TargetScalingLevelDelta = int8(target->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); @@ -93,7 +95,7 @@ namespace WorldPackets } template<> - bool SandboxScalingData::GenerateDataForUnits<Creature, Creature>(Creature* attacker, Creature* target) + bool ContentTuningParams::GenerateDataForUnits<Creature, Creature>(Creature* attacker, Creature* target) { Creature* accessor = target->HasScalableLevels() ? target : attacker; CreatureTemplate const* creatureTemplate = accessor->GetCreatureTemplate(); @@ -103,7 +105,6 @@ namespace WorldPackets PlayerItemLevel = 0; TargetLevel = target->getLevel(); Expansion = creatureTemplate->RequiredExpansion; - Class = creatureTemplate->unit_class; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); TargetScalingLevelDelta = int8(accessor->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); @@ -111,7 +112,7 @@ namespace WorldPackets } template<> - bool SandboxScalingData::GenerateDataForUnits<Unit, Unit>(Unit* attacker, Unit* target) + bool ContentTuningParams::GenerateDataForUnits<Unit, Unit>(Unit* attacker, Unit* target) { if (Player* playerAttacker = attacker->ToPlayer()) { @@ -152,6 +153,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData data << int64(spellCastLogData.Health); data << int32(spellCastLogData.AttackPower); data << int32(spellCastLogData.SpellPower); + data << int32(spellCastLogData.Armor); data.WriteBits(spellCastLogData.PowerData.size(), 9); data.FlushBits(); @@ -165,16 +167,18 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SandboxScalingData const& sandboxScalingData) +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::ContentTuningParams const& contentTuningParams) { - data.WriteBits(sandboxScalingData.Type, 4); - data << int16(sandboxScalingData.PlayerLevelDelta); - data << uint16(sandboxScalingData.PlayerItemLevel); - data << uint8(sandboxScalingData.TargetLevel); - data << uint8(sandboxScalingData.Expansion); - data << uint8(sandboxScalingData.Class); - data << uint8(sandboxScalingData.TargetMinScalingLevel); - data << uint8(sandboxScalingData.TargetMaxScalingLevel); - data << int8(sandboxScalingData.TargetScalingLevelDelta); + data << int16(contentTuningParams.PlayerLevelDelta); + data << uint16(contentTuningParams.PlayerItemLevel); + data << uint16(contentTuningParams.ScalingHealthItemLevelCurveID); + data << uint8(contentTuningParams.TargetLevel); + data << uint8(contentTuningParams.Expansion); + data << uint8(contentTuningParams.TargetMinScalingLevel); + data << uint8(contentTuningParams.TargetMaxScalingLevel); + data << int8(contentTuningParams.TargetScalingLevelDelta); + data.WriteBits(contentTuningParams.Type, 4); + data.WriteBit(contentTuningParams.ScalesWithItemLevel); + data.FlushBits(); return data; } diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h index 172f94e7031..b30c5fefe34 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h @@ -41,31 +41,34 @@ namespace WorldPackets int64 Health = 0; int32 AttackPower = 0; int32 SpellPower = 0; + int32 Armor = 0; std::vector<SpellLogPowerData> PowerData; void Initialize(Unit const* unit); void Initialize(Spell const* spell); }; - struct SandboxScalingData + struct ContentTuningParams { - enum SandboxScalingDataType : uint32 + enum ContentTuningType : uint32 { - TYPE_PLAYER_TO_PLAYER = 1, // NYI - TYPE_CREATURE_TO_PLAYER_DAMAGE = 2, - TYPE_PLAYER_TO_CREATURE_DAMAGE = 3, + TYPE_PLAYER_TO_PLAYER = 7, // NYI + TYPE_PLAYER_TO_PLAYER_HEALING = 8, + TYPE_CREATURE_TO_PLAYER_DAMAGE = 1, + TYPE_PLAYER_TO_CREATURE_DAMAGE = 2, TYPE_CREATURE_TO_CREATURE_DAMAGE = 4 }; uint32 Type = 0; int16 PlayerLevelDelta = 0; uint16 PlayerItemLevel = 0; + uint16 ScalingHealthItemLevelCurveID = 0; uint8 TargetLevel = 0; uint8 Expansion = 0; - uint8 Class = 0; uint8 TargetMinScalingLevel = 0; uint8 TargetMaxScalingLevel = 0; int8 TargetScalingLevelDelta = 0; + bool ScalesWithItemLevel = false; template<class T, class U> bool GenerateDataForUnits(T* attacker, U* target); @@ -126,6 +129,6 @@ namespace WorldPackets } ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData const& spellCastLogData); -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SandboxScalingData const& sandboxScalingData); +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::ContentTuningParams const& contentTuningParams); #endif // CombatLogPacketsCommon_h__ diff --git a/src/server/game/Server/Packets/CombatPackets.cpp b/src/server/game/Server/Packets/CombatPackets.cpp index 5048595314c..63fc4ac1ed1 100644 --- a/src/server/game/Server/Packets/CombatPackets.cpp +++ b/src/server/game/Server/Packets/CombatPackets.cpp @@ -96,7 +96,7 @@ WorldPacket const* WorldPackets::Combat::AIReaction::Write() WorldPacket const* WorldPackets::Combat::AttackSwingError::Write() { - _worldPacket.WriteBits(Reason, 2); + _worldPacket.WriteBits(Reason, 3); _worldPacket.FlushBits(); return &_worldPacket; } @@ -107,8 +107,8 @@ WorldPacket const* WorldPackets::Combat::PowerUpdate::Write() _worldPacket << uint32(Powers.size()); for (PowerUpdatePower const& power : Powers) { - _worldPacket << power.Power; - _worldPacket << power.PowerType; + _worldPacket << int32(power.Power); + _worldPacket << uint8(power.PowerType); } return &_worldPacket; diff --git a/src/server/game/Server/Packets/CombatPackets.h b/src/server/game/Server/Packets/CombatPackets.h index 446d9f5453b..313d573eae1 100644 --- a/src/server/game/Server/Packets/CombatPackets.h +++ b/src/server/game/Server/Packets/CombatPackets.h @@ -41,9 +41,9 @@ namespace WorldPackets public: enum AttackSwingErr : uint8 { - CantAttack = 0, + NotInRange = 0, BadFacing = 1, - NotInRange = 2, + CantAttack = 2, DeadTarget = 3 }; diff --git a/src/server/game/Server/Packets/DuelPackets.cpp b/src/server/game/Server/Packets/DuelPackets.cpp index f76ccecaa89..ccee13b731a 100644 --- a/src/server/game/Server/Packets/DuelPackets.cpp +++ b/src/server/game/Server/Packets/DuelPackets.cpp @@ -59,6 +59,7 @@ void WorldPackets::Duel::DuelResponse::Read() { _worldPacket >> ArbiterGUID; Accepted = _worldPacket.ReadBit(); + Forfeited = _worldPacket.ReadBit(); } WorldPacket const* WorldPackets::Duel::DuelWinner::Write() diff --git a/src/server/game/Server/Packets/DuelPackets.h b/src/server/game/Server/Packets/DuelPackets.h index b45a8b42ba7..efa2701741a 100644 --- a/src/server/game/Server/Packets/DuelPackets.h +++ b/src/server/game/Server/Packets/DuelPackets.h @@ -103,6 +103,7 @@ namespace WorldPackets ObjectGuid ArbiterGUID; bool Accepted = false; + bool Forfeited = false; }; class DuelWinner final : public ServerPacket diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.h b/src/server/game/Server/Packets/EquipmentSetPackets.h index 1dd7040ec32..5c17fdc3cae 100644 --- a/src/server/game/Server/Packets/EquipmentSetPackets.h +++ b/src/server/game/Server/Packets/EquipmentSetPackets.h @@ -28,7 +28,7 @@ namespace WorldPackets class EquipmentSetID final : public ServerPacket { public: - EquipmentSetID() : ServerPacket(SMSG_EQUIPMENT_SET_ID, 8 + 4) { } + EquipmentSetID() : ServerPacket(SMSG_EQUIPMENT_SET_ID, 8 + 4 + 4) { } WorldPacket const* Write() override; @@ -89,7 +89,7 @@ namespace WorldPackets class UseEquipmentSetResult final : public ServerPacket { public: - UseEquipmentSetResult() : ServerPacket(SMSG_USE_EQUIPMENT_SET_RESULT, 1) { } + UseEquipmentSetResult() : ServerPacket(SMSG_USE_EQUIPMENT_SET_RESULT, 8 + 1) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h index a7bd016909c..bf83f006b1e 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.h +++ b/src/server/game/Server/Packets/GarrisonPackets.h @@ -249,7 +249,7 @@ namespace WorldPackets class GarrisonLearnBlueprintResult final : public ServerPacket { public: - GarrisonLearnBlueprintResult() : ServerPacket(SMSG_GARRISON_LEARN_BLUEPRINT_RESULT, 4 + 4) { } + GarrisonLearnBlueprintResult() : ServerPacket(SMSG_GARRISON_LEARN_BLUEPRINT_RESULT, 4 + 4 + 4) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/GuildFinderPackets.cpp b/src/server/game/Server/Packets/GuildFinderPackets.cpp index ac8bcfea9df..2ce269fbdcb 100644 --- a/src/server/game/Server/Packets/GuildFinderPackets.cpp +++ b/src/server/game/Server/Packets/GuildFinderPackets.cpp @@ -108,7 +108,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::GuildFinder::GuildPostDat data << int32(post.Availability); data << int32(post.ClassRoles); data << int32(post.LevelRange); - data << uint32(post.SecondsRemaining); + data << int32(post.SecondsRemaining); data.WriteString(post.Comment); return data; } diff --git a/src/server/game/Server/Packets/GuildFinderPackets.h b/src/server/game/Server/Packets/GuildFinderPackets.h index 1fe3183156a..94084934fc1 100644 --- a/src/server/game/Server/Packets/GuildFinderPackets.h +++ b/src/server/game/Server/Packets/GuildFinderPackets.h @@ -157,7 +157,7 @@ namespace WorldPackets int32 Availability = 0; int32 ClassRoles = 0; int32 LevelRange = 0; - time_t SecondsRemaining = time_t(0); + int32 SecondsRemaining = 0; std::string Comment; }; diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 777891b3cef..2a3739f2470 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -63,9 +63,9 @@ WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write() WorldPacket const* WorldPackets::Guild::GuildRoster::Write() { - _worldPacket << NumAccounts; + _worldPacket << int32(NumAccounts); _worldPacket.AppendPackedTime(CreateDate); - _worldPacket << GuildFlags; + _worldPacket << int32(GuildFlags); _worldPacket << uint32(MemberData.size()); _worldPacket.WriteBits(WelcomeText.length(), 10); _worldPacket.WriteBits(InfoText.length(), 11); @@ -98,8 +98,8 @@ void WorldPackets::Guild::GuildUpdateMotdText::Read() WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write() { - _worldPacket << Result; - _worldPacket << Command; + _worldPacket << int32(Result); + _worldPacket << int32(Command); _worldPacket.WriteBits(Name.length(), 8); _worldPacket.FlushBits(); @@ -127,17 +127,17 @@ WorldPacket const* WorldPackets::Guild::GuildInvite::Write() _worldPacket.WriteBits(OldGuildName.length(), 7); _worldPacket.FlushBits(); - _worldPacket << InviterVirtualRealmAddress; - _worldPacket << GuildVirtualRealmAddress; + _worldPacket << uint32(InviterVirtualRealmAddress); + _worldPacket << uint32(GuildVirtualRealmAddress); _worldPacket << GuildGUID; - _worldPacket << OldGuildVirtualRealmAddress; + _worldPacket << uint32(OldGuildVirtualRealmAddress); _worldPacket << OldGuildGUID; - _worldPacket << EmblemStyle; - _worldPacket << EmblemColor; - _worldPacket << BorderStyle; - _worldPacket << BorderColor; - _worldPacket << Background; - _worldPacket << AchievementPoints; + _worldPacket << uint32(EmblemStyle); + _worldPacket << uint32(EmblemColor); + _worldPacket << uint32(BorderStyle); + _worldPacket << uint32(BorderColor); + _worldPacket << uint32(Background); + _worldPacket << int32(AchievementPoints); _worldPacket.WriteString(InviterName); _worldPacket.WriteString(GuildName); @@ -148,9 +148,9 @@ WorldPacket const* WorldPackets::Guild::GuildInvite::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfessionData const& rosterProfessionData) { - data << rosterProfessionData.DbID; - data << rosterProfessionData.Rank; - data << rosterProfessionData.Step; + data << int32(rosterProfessionData.DbID); + data << int32(rosterProfessionData.Rank); + data << int32(rosterProfessionData.Step); return data; } @@ -158,20 +158,20 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfess ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData) { data << rosterMemberData.Guid; - data << rosterMemberData.RankID; - data << rosterMemberData.AreaID; - data << rosterMemberData.PersonalAchievementPoints; - data << rosterMemberData.GuildReputation; - data << rosterMemberData.LastSave; + data << int32(rosterMemberData.RankID); + data << int32(rosterMemberData.AreaID); + data << int32(rosterMemberData.PersonalAchievementPoints); + data << int32(rosterMemberData.GuildReputation); + data << float(rosterMemberData.LastSave); for (uint8 i = 0; i < 2; i++) data << rosterMemberData.Profession[i]; - data << rosterMemberData.VirtualRealmAddress; - data << rosterMemberData.Status; - data << rosterMemberData.Level; - data << rosterMemberData.ClassID; - data << rosterMemberData.Gender; + data << uint32(rosterMemberData.VirtualRealmAddress); + data << uint8(rosterMemberData.Status); + data << uint8(rosterMemberData.Level); + data << uint8(rosterMemberData.ClassID); + data << uint8(rosterMemberData.Gender); data.WriteBits(rosterMemberData.Name.length(), 6); data.WriteBits(rosterMemberData.Note.length(), 8); @@ -190,7 +190,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberD WorldPacket const* WorldPackets::Guild::GuildEventPresenceChange::Write() { _worldPacket << Guid; - _worldPacket << VirtualRealmAddress; + _worldPacket << uint32(VirtualRealmAddress); _worldPacket.WriteBits(Name.length(), 6); _worldPacket.WriteBit(LoggedOn); @@ -215,7 +215,7 @@ WorldPacket const* WorldPackets::Guild::GuildEventMotd::Write() WorldPacket const* WorldPackets::Guild::GuildEventPlayerJoined::Write() { _worldPacket << Guid; - _worldPacket << VirtualRealmAddress; + _worldPacket << uint32(VirtualRealmAddress); _worldPacket.WriteBits(Name.length(), 6); _worldPacket.FlushBits(); @@ -249,9 +249,9 @@ WorldPacket const* WorldPackets::Guild::GuildEventLogQueryResults::Write() { _worldPacket << entry.PlayerGUID; _worldPacket << entry.OtherGUID; - _worldPacket << entry.TransactionType; - _worldPacket << entry.RankID; - _worldPacket << entry.TransactionDate; + _worldPacket << uint8(entry.TransactionType); + _worldPacket << uint8(entry.RankID); + _worldPacket << uint32(entry.TransactionDate); } return &_worldPacket; @@ -269,12 +269,12 @@ WorldPacket const* WorldPackets::Guild::GuildEventPlayerLeft::Write() _worldPacket.FlushBits(); _worldPacket << RemoverGUID; - _worldPacket << RemoverVirtualRealmAddress; + _worldPacket << uint32(RemoverVirtualRealmAddress); _worldPacket.WriteString(RemoverName); } _worldPacket << LeaverGUID; - _worldPacket << LeaverVirtualRealmAddress; + _worldPacket << uint32(LeaverVirtualRealmAddress); _worldPacket.WriteString(LeaverName); return &_worldPacket; @@ -282,16 +282,16 @@ WorldPacket const* WorldPackets::Guild::GuildEventPlayerLeft::Write() WorldPacket const* WorldPackets::Guild::GuildPermissionsQueryResults::Write() { - _worldPacket << RankID; - _worldPacket << WithdrawGoldLimit; - _worldPacket << Flags; - _worldPacket << NumTabs; + _worldPacket << uint32(RankID); + _worldPacket << int32(WithdrawGoldLimit); + _worldPacket << int32(Flags); + _worldPacket << int32(NumTabs); _worldPacket << uint32(Tab.size()); for (GuildRankTabPermissions const& tab : Tab) { - _worldPacket << tab.Flags; - _worldPacket << tab.WithdrawItemLimit; + _worldPacket << int32(tab.Flags); + _worldPacket << int32(tab.WithdrawItemLimit); } return &_worldPacket; @@ -325,9 +325,9 @@ WorldPacket const* WorldPackets::Guild::GuildEventNewLeader::Write() _worldPacket.FlushBits(); _worldPacket << OldLeaderGUID; - _worldPacket << OldLeaderVirtualRealmAddress; + _worldPacket << uint32(OldLeaderVirtualRealmAddress); _worldPacket << NewLeaderGUID; - _worldPacket << NewLeaderVirtualRealmAddress; + _worldPacket << uint32(NewLeaderVirtualRealmAddress); _worldPacket.WriteString(OldLeaderName); _worldPacket.WriteString(NewLeaderName); @@ -337,7 +337,7 @@ WorldPacket const* WorldPackets::Guild::GuildEventNewLeader::Write() WorldPacket const* WorldPackets::Guild::GuildEventTabModified::Write() { - _worldPacket << Tab; + _worldPacket << int32(Tab); _worldPacket.WriteBits(Name.length(), 7); _worldPacket.WriteBits(Icon.length(), 9); @@ -358,15 +358,15 @@ WorldPacket const* WorldPackets::Guild::GuildEventTabTextChanged::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData) { - data << rankData.RankID; - data << rankData.RankOrder; - data << rankData.Flags; - data << rankData.WithdrawGoldLimit; + data << uint32(rankData.RankID); + data << uint32(rankData.RankOrder); + data << uint32(rankData.Flags); + data << uint32(rankData.WithdrawGoldLimit); for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++) { - data << rankData.TabFlags[i]; - data << rankData.TabWithdrawItemLimit[i]; + data << uint32(rankData.TabFlags[i]); + data << uint32(rankData.TabWithdrawItemLimit[i]); } data.WriteBits(rankData.RankName.length(), 7); @@ -416,7 +416,7 @@ WorldPacket const* WorldPackets::Guild::GuildSendRankChange::Write() { _worldPacket << Officer; _worldPacket << Other; - _worldPacket << RankID; + _worldPacket << uint32(RankID); _worldPacket.WriteBit(Promote); _worldPacket.FlushBits(); @@ -499,25 +499,25 @@ WorldPacket const* WorldPackets::Guild::GuildPartyState::Write() _worldPacket.WriteBit(InGuildParty); _worldPacket.FlushBits(); - _worldPacket << NumMembers; - _worldPacket << NumRequired; - _worldPacket << GuildXPEarnedMult; + _worldPacket << int32(NumMembers); + _worldPacket << int32(NumRequired); + _worldPacket << float(GuildXPEarnedMult); return &_worldPacket; } ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRewardItem const& rewardItem) { - data << rewardItem.ItemID; - data << rewardItem.Unk4; + data << uint32(rewardItem.ItemID); + data << uint32(rewardItem.Unk4); data << uint32(rewardItem.AchievementsRequired.size()); data << uint64(rewardItem.RaceMask); - data << rewardItem.MinGuildLevel; - data << rewardItem.MinGuildRep; - data << rewardItem.Cost; + data << int32(rewardItem.MinGuildLevel); + data << int32(rewardItem.MinGuildRep); + data << uint64(rewardItem.Cost); - for (uint8 i = 0; i < rewardItem.AchievementsRequired.size(); i++) - data << rewardItem.AchievementsRequired[i]; + for (std::size_t i = 0; i < rewardItem.AchievementsRequired.size(); i++) + data << uint32(rewardItem.AchievementsRequired[i]); return data; } @@ -529,7 +529,7 @@ void WorldPackets::Guild::RequestGuildRewardsList::Read() WorldPacket const* WorldPackets::Guild::GuildRewardList::Write() { - _worldPacket << Version; + _worldPacket << int32(Version); _worldPacket << uint32(RewardItems.size()); for (GuildRewardItem const& item : RewardItems) @@ -592,9 +592,9 @@ void WorldPackets::Guild::GuildBankWithdrawMoney::Read() WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write() { - _worldPacket << Money; - _worldPacket << Tab; - _worldPacket << WithdrawalsRemaining; + _worldPacket << uint64(Money); + _worldPacket << int32(Tab); + _worldPacket << int32(WithdrawalsRemaining); _worldPacket << uint32(TabInfo.size()); _worldPacket << uint32(ItemInfo.size()); _worldPacket.WriteBit(FullUpdate); @@ -602,7 +602,7 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write() for (GuildBankTabInfo const& tab : TabInfo) { - _worldPacket << tab.TabIndex; + _worldPacket << int32(tab.TabIndex); _worldPacket.WriteBits(tab.Name.length(), 7); _worldPacket.WriteBits(tab.Icon.length(), 9); _worldPacket.FlushBits(); @@ -613,12 +613,12 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write() for (GuildBankItemInfo const& item : ItemInfo) { - _worldPacket << item.Slot; - _worldPacket << item.Count; - _worldPacket << item.EnchantmentID; - _worldPacket << item.Charges; - _worldPacket << item.OnUseEnchantmentID; - _worldPacket << item.Flags; + _worldPacket << int32(item.Slot); + _worldPacket << int32(item.Count); + _worldPacket << int32(item.EnchantmentID); + _worldPacket << int32(item.Charges); + _worldPacket << int32(item.OnUseEnchantmentID); + _worldPacket << int32(item.Flags); _worldPacket << item.Item; _worldPacket.WriteBits(item.SocketEnchant.size(), 2); _worldPacket.WriteBit(item.Locked); @@ -658,7 +658,7 @@ void WorldPackets::Guild::GuildBankLogQuery::Read() WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write() { - _worldPacket << Tab; + _worldPacket << int32(Tab); _worldPacket << uint32(Entry.size()); _worldPacket.WriteBit(WeeklyBonusMoney.is_initialized()); _worldPacket.FlushBits(); @@ -666,8 +666,8 @@ WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write() for (GuildBankLogEntry const& logEntry : Entry) { _worldPacket << logEntry.PlayerGUID; - _worldPacket << logEntry.TimeOffset; - _worldPacket << logEntry.EntryType; + _worldPacket << uint32(logEntry.TimeOffset); + _worldPacket << int8(logEntry.EntryType); _worldPacket.WriteBit(logEntry.Money.is_initialized()); _worldPacket.WriteBit(logEntry.ItemID.is_initialized()); @@ -676,20 +676,20 @@ WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write() _worldPacket.FlushBits(); if (logEntry.Money.is_initialized()) - _worldPacket << *logEntry.Money; + _worldPacket << uint64(*logEntry.Money); if (logEntry.ItemID.is_initialized()) - _worldPacket << *logEntry.ItemID; + _worldPacket << int32(*logEntry.ItemID); if (logEntry.Count.is_initialized()) - _worldPacket << *logEntry.Count; + _worldPacket << int32(*logEntry.Count); if (logEntry.OtherTab.is_initialized()) - _worldPacket << *logEntry.OtherTab; + _worldPacket << int8(*logEntry.OtherTab); } if (WeeklyBonusMoney) - _worldPacket << *WeeklyBonusMoney; + _worldPacket << uint64(*WeeklyBonusMoney); return &_worldPacket; } @@ -701,7 +701,7 @@ void WorldPackets::Guild::GuildBankTextQuery::Read() WorldPacket const* WorldPackets::Guild::GuildBankTextQueryResult::Write() { - _worldPacket << Tab; + _worldPacket << int32(Tab); _worldPacket.WriteBits(Text.length(), 14); _worldPacket.FlushBits(); @@ -724,13 +724,13 @@ void WorldPackets::Guild::GuildQueryNews::Read() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildNewsEvent const& newsEvent) { - data << newsEvent.Id; + data << int32(newsEvent.Id); data.AppendPackedTime(newsEvent.CompletedDate); - data << newsEvent.Type; - data << newsEvent.Flags; + data << int32(newsEvent.Type); + data << int32(newsEvent.Flags); - for (uint8 i = 0; i < 2; i++) - data << newsEvent.Data[i]; + for (std::size_t i = 0; i < newsEvent.Data.size(); ++i) + data << int32(newsEvent.Data[i]); data << newsEvent.MemberGuid; data << uint32(newsEvent.MemberList.size()); diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index 350ff772000..844dba91f5c 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -432,11 +432,11 @@ namespace WorldPackets int32 RankID = 0; int32 RankOrder = 0; - int32 WithdrawGoldLimit = 0; + uint32 WithdrawGoldLimit = 0; uint32 Flags = 0; uint32 OldFlags = 0; - int32 TabFlags[GUILD_BANK_MAX_TABS]; - int32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS]; + uint32 TabFlags[GUILD_BANK_MAX_TABS]; + uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS]; std::string RankName; }; @@ -687,7 +687,7 @@ namespace WorldPackets WorldPacket const* Write() override; std::vector<GuildRewardItem> RewardItems; - uint32 Version = 0; + int32 Version = 0; }; class GuildBankActivate final : public ClientPacket @@ -813,10 +813,11 @@ namespace WorldPackets bool FullUpdate = false; }; + // TODO: research new guild bank opcodes class GuildBankSwapItems final : public ClientPacket { public: - GuildBankSwapItems(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_SWAP_ITEMS, std::move(packet)) { } + GuildBankSwapItems(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } void Read() override; @@ -917,9 +918,9 @@ namespace WorldPackets uint32 CompletedDate = 0; int32 Type = 0; int32 Flags = 0; - int32 Data[2]; + std::array<int32, 2> Data; ObjectGuid MemberGuid; - GuidList MemberList; + std::vector<ObjectGuid> MemberList; Optional<Item::ItemInstance> Item; }; diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index df9b540e164..04fc01ad669 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -35,6 +35,10 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectItemData { data << itemData.CreatorGUID; data << uint8(itemData.Index); + data << uint32(itemData.AzeritePowers.size()); + if (!itemData.AzeritePowers.empty()) + data.append(itemData.AzeritePowers.data(), itemData.AzeritePowers.size()); + data << itemData.Item; data.WriteBit(itemData.Usable); data.WriteBits(itemData.Enchants.size(), 4); @@ -76,10 +80,11 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint { if (gemData.ItemId) { - WorldPackets::Item::ItemGemData gem; + Gems.emplace_back(); + + WorldPackets::Item::ItemGemData& gem = Gems.back(); gem.Slot = i; gem.Item.Initialize(&gemData); - Gems.push_back(gem); } ++i; } @@ -103,6 +108,7 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write() _worldPacket.append(PvpTalents.data(), PvpTalents.size()); _worldPacket.WriteBit(GuildData.is_initialized()); + _worldPacket.WriteBit(AzeriteLevel.is_initialized()); _worldPacket.FlushBits(); for (size_t i = 0; i < Items.size(); ++i) @@ -111,6 +117,9 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write() if (GuildData) _worldPacket << *GuildData; + if (AzeriteLevel) + _worldPacket << int32(*AzeriteLevel); + return &_worldPacket; } @@ -138,6 +147,7 @@ void WorldPackets::Inspect::InspectPVPRequest::Read() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData const& bracket) { + data << uint8(bracket.Bracket); data << int32(bracket.Rating); data << int32(bracket.Rank); data << int32(bracket.WeeklyPlayed); @@ -146,7 +156,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData c data << int32(bracket.SeasonWon); data << int32(bracket.WeeklyBestRating); data << int32(bracket.Unk710); - data << uint8(bracket.Bracket); + data << int32(bracket.Unk801_1); + data.WriteBit(bracket.Unk801_2); + data.FlushBits(); return data; } diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h index 7bf6b0baa2a..c6437f182f7 100644 --- a/src/server/game/Server/Packets/InspectPackets.h +++ b/src/server/game/Server/Packets/InspectPackets.h @@ -56,6 +56,7 @@ namespace WorldPackets bool Usable = false; std::vector<InspectEnchantData> Enchants; std::vector<Item::ItemGemData> Gems; + std::vector<int32> AzeritePowers; }; struct InspectGuildData @@ -68,7 +69,10 @@ namespace WorldPackets class InspectResult final : public ServerPacket { public: - InspectResult() : ServerPacket(SMSG_INSPECT_RESULT, 45) { } + InspectResult() : ServerPacket(SMSG_INSPECT_RESULT, 45) + { + PvpTalents.fill(0); + } WorldPacket const* Write() override; @@ -76,11 +80,12 @@ namespace WorldPackets std::vector<InspectItemData> Items; std::vector<uint16> Glyphs; std::vector<uint16> Talents; - std::vector<uint16> PvpTalents; + std::array<uint16, MAX_PVP_TALENT_SLOTS> PvpTalents; int32 ClassID = CLASS_NONE; int32 GenderID = GENDER_NONE; Optional<InspectGuildData> GuildData; int32 SpecializationID = 0; + Optional<int32> AzeriteLevel; }; class RequestHonorStats final : public ClientPacket @@ -128,7 +133,9 @@ namespace WorldPackets int32 SeasonWon = 0; int32 WeeklyBestRating = 0; int32 Unk710 = 0; + int32 Unk801_1 = 0; uint8 Bracket = 0; + bool Unk801_2 = false; }; class InspectPVPResponse final : public ServerPacket diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp index 0a6e29e6838..258aa24bd1f 100644 --- a/src/server/game/Server/Packets/InstancePackets.cpp +++ b/src/server/game/Server/Packets/InstancePackets.cpp @@ -31,23 +31,13 @@ WorldPacket const* WorldPackets::Instance::UpdateInstanceOwnership::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Instance::InstanceInfo::Write() -{ - _worldPacket << int32(LockList.size()); - - for (InstanceLockInfos const& lockInfos : LockList) - _worldPacket << lockInfos; - - return &_worldPacket; -} - -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInfos const& lockInfos) +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLock const& lockInfos) { - data << lockInfos.MapID; - data << lockInfos.DifficultyID; - data << lockInfos.InstanceID; - data << lockInfos.TimeRemaining; - data << lockInfos.CompletedMask; + data << uint32(lockInfos.MapID); + data << uint32(lockInfos.DifficultyID); + data << uint64(lockInfos.InstanceID); + data << uint32(lockInfos.TimeRemaining); + data << uint32(lockInfos.CompletedMask); data.WriteBit(lockInfos.Locked); data.WriteBit(lockInfos.Extended); @@ -57,6 +47,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInf return data; } +WorldPacket const* WorldPackets::Instance::InstanceInfo::Write() +{ + _worldPacket << int32(LockList.size()); + + for (InstanceLock const& instanceLock : LockList) + _worldPacket << instanceLock; + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Instance::InstanceReset::Write() { _worldPacket << uint32(MapID); diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h index f13e046906e..0869a137926 100644 --- a/src/server/game/Server/Packets/InstancePackets.h +++ b/src/server/game/Server/Packets/InstancePackets.h @@ -47,7 +47,7 @@ namespace WorldPackets // but it has been deperecated in favor of simply checking group leader, being inside an instance or using dungeon finder }; - struct InstanceLockInfos + struct InstanceLock { uint64 InstanceID = 0u; uint32 MapID = 0u; @@ -66,7 +66,7 @@ namespace WorldPackets WorldPacket const* Write() override; - std::vector<InstanceLockInfos> LockList; + std::vector<InstanceLock> LockList; }; class ResetInstances final : public ClientPacket @@ -90,7 +90,7 @@ namespace WorldPackets class InstanceResetFailed final : public ServerPacket { public: - InstanceResetFailed() : ServerPacket(SMSG_INSTANCE_RESET_FAILED, 4 + 4) { } + InstanceResetFailed() : ServerPacket(SMSG_INSTANCE_RESET_FAILED, 4 + 1) { } WorldPacket const* Write() override; @@ -248,6 +248,4 @@ namespace WorldPackets } } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInfos const& lockInfos); - #endif // InstancePackets_h__ diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index 87599873de5..55f4274eefc 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -280,7 +280,7 @@ WorldPacket const* WorldPackets::Item::ReadItemResultFailed::Write() { _worldPacket << Item; _worldPacket << uint32(Delay); - _worldPacket.WriteBits(Subcode, 3); + _worldPacket.WriteBits(Subcode, 2); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp index 5b8d66afd6a..1ec2dec7804 100644 --- a/src/server/game/Server/Packets/LFGPackets.cpp +++ b/src/server/game/Server/Packets/LFGPackets.cpp @@ -311,10 +311,15 @@ WorldPacket const* WorldPackets::LFG::LFGQueueStatus::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LFGPlayerRewards const& lfgPlayerRewards) { - data << int32(lfgPlayerRewards.RewardItem); - data << uint32(lfgPlayerRewards.RewardItemQuantity); - data << int32(lfgPlayerRewards.BonusCurrency); - data.WriteBit(lfgPlayerRewards.IsCurrency); + data.WriteBit(lfgPlayerRewards.RewardItem.is_initialized()); + data.WriteBit(lfgPlayerRewards.RewardCurrency.is_initialized()); + if (lfgPlayerRewards.RewardItem) + data << *lfgPlayerRewards.RewardItem; + + data << uint32(lfgPlayerRewards.Quantity); + data << int32(lfgPlayerRewards.BonusQuantity); + if (lfgPlayerRewards.RewardCurrency) + data << int32(*lfgPlayerRewards.RewardCurrency); return data; } diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h index 9e1c513aece..2b31074094d 100644 --- a/src/server/game/Server/Packets/LFGPackets.h +++ b/src/server/game/Server/Packets/LFGPackets.h @@ -20,6 +20,7 @@ #include "Packet.h" #include "PacketUtilities.h" +#include "ItemPacketsCommon.h" #include "LFGPacketsCommon.h" #include "Optional.h" @@ -325,13 +326,24 @@ namespace WorldPackets struct LFGPlayerRewards { LFGPlayerRewards() { } - LFGPlayerRewards(int32 rewardItem, uint32 rewardItemQuantity, int32 bonusCurrency, bool isCurrency) - : RewardItem(rewardItem), RewardItemQuantity(rewardItemQuantity), BonusCurrency(bonusCurrency), IsCurrency(isCurrency) { } - - int32 RewardItem = 0; - uint32 RewardItemQuantity = 0; - int32 BonusCurrency = 0; - bool IsCurrency = false; + LFGPlayerRewards(int32 id, uint32 quantity, int32 bonusQuantity, bool isCurrency) + : Quantity(quantity), BonusQuantity(bonusQuantity) + { + if (!isCurrency) + { + RewardItem = boost::in_place(); + RewardItem->ItemID = id; + } + else + { + RewardCurrency = id; + } + } + + Optional<Item::ItemInstance> RewardItem; + Optional<int32> RewardCurrency; + uint32 Quantity = 0; + int32 BonusQuantity = 0; }; class LFGPlayerReward final : public ServerPacket diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index a03f1ff35fc..9f98092d091 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -346,7 +346,8 @@ WorldPacket const* WorldPackets::Misc::LevelUpInfo::Write() for (int32 stat : StatDelta) _worldPacket << stat; - _worldPacket << int32(Cp); + _worldPacket << int32(NumNewTalents); + _worldPacket << int32(NumNewPvpTalentSlots); return &_worldPacket; } @@ -404,11 +405,11 @@ WorldPacket const* WorldPackets::Misc::PhaseShiftChange::Write() _worldPacket << uint32(PreloadMapIDs.size() * 2); // size in bytes for (uint16 preloadMapId : PreloadMapIDs) - _worldPacket << uint16(preloadMapId); // Inactive terrain swap map id + _worldPacket << uint16(preloadMapId); // Inactive terrain swap map id - _worldPacket << uint32(UiWorldMapAreaIDSwaps.size() * 2); // size in bytes - for (uint16 uiWorldMapAreaIDSwap : UiWorldMapAreaIDSwaps) - _worldPacket << uint16(uiWorldMapAreaIDSwap); // UI map id, WorldMapArea.db2, controls map display + _worldPacket << uint32(UiMapPhaseIDs.size() * 2); // size in bytes + for (uint16 uiMapPhaseId : UiMapPhaseIDs) + _worldPacket << uint16(uiMapPhaseId); // phase id, controls only map display (visible on all maps) return &_worldPacket; } diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 26affbaf934..df9c99e063b 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -258,7 +258,7 @@ namespace WorldPackets void Read() override; - int32 DifficultyID = 0; + uint32 DifficultyID = 0; }; class SetRaidDifficulty final : public ClientPacket @@ -480,7 +480,8 @@ namespace WorldPackets int32 HealthDelta = 0; std::array<int32, 6> PowerDelta = { }; std::array<int32, MAX_STATS> StatDelta = { }; - int32 Cp = 0; + int32 NumNewTalents = 0; + int32 NumNewPvpTalentSlots = 0; }; class PlayMusic final : public ServerPacket @@ -551,7 +552,7 @@ namespace WorldPackets ObjectGuid Client; PhaseShiftData Phaseshift; std::vector<uint16> PreloadMapIDs; - std::vector<uint16> UiWorldMapAreaIDSwaps; + std::vector<uint16> UiMapPhaseIDs; std::vector<uint16> VisibleMapIDs; }; @@ -878,14 +879,6 @@ namespace WorldPackets bool IsFavorite = false; }; - class PvpPrestigeRankUp final : public ClientPacket - { - public: - PvpPrestigeRankUp(WorldPacket&& packet) : ClientPacket(CMSG_PVP_PRESTIGE_RANK_UP, std::move(packet)) { } - - void Read() override { } - }; - class CloseInteraction final : public ClientPacket { public: diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 38a7f8f68fd..3dd719f46b0 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -213,6 +213,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineSp data << uint32(spellEffectExtraData.SpellVisualID); data << uint32(spellEffectExtraData.ProgressCurveID); data << uint32(spellEffectExtraData.ParabolicCurveID); + data << float(spellEffectExtraData.JumpGravity); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineJumpExtraData const& jumpExtraData) +{ + data << float(jumpExtraData.JumpGravity); + data << uint32(jumpExtraData.StartTime); + data << uint32(jumpExtraData.Duration); return data; } @@ -224,8 +234,7 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline data << uint32(movementSpline.TierTransStartTime); data << int32(movementSpline.Elapsed); data << uint32(movementSpline.MoveTime); - data << float(movementSpline.JumpGravity); - data << uint32(movementSpline.SpecialTime); + data << uint32(movementSpline.FadeObjectTime); data << uint8(movementSpline.Mode); data << uint8(movementSpline.VehicleExitVoluntary); data << movementSpline.TransportGUID; @@ -235,6 +244,7 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline data.WriteBits(movementSpline.PackedDeltas.size(), 16); data.WriteBit(movementSpline.SplineFilter.is_initialized()); data.WriteBit(movementSpline.SpellEffectExtraData.is_initialized()); + data.WriteBit(movementSpline.JumpExtraData.is_initialized()); data.FlushBits(); if (movementSpline.SplineFilter) @@ -262,6 +272,9 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline if (movementSpline.SpellEffectExtraData) data << *movementSpline.SpellEffectExtraData; + if (movementSpline.JumpExtraData) + data << *movementSpline.JumpExtraData; + return data; } @@ -300,12 +313,12 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(:: data << float(1.0f); // DurationModifier data << float(1.0f); // NextDurationModifier data.WriteBits(moveSpline.facing.type, 2); // Face - bool HasJumpGravity = data.WriteBit(moveSpline.splineflags.parabolic || moveSpline.splineflags.animation); // HasJumpGravity - bool HasSpecialTime = data.WriteBit(moveSpline.splineflags.parabolic && moveSpline.effect_start_time < moveSpline.Duration()); // HasSpecialTime + bool hasFadeObjectTime = data.WriteBit(moveSpline.splineflags.fadeObject && moveSpline.effect_start_time < moveSpline.Duration()); data.WriteBits(moveSpline.getPath().size(), 16); data.WriteBits(uint8(moveSpline.spline.mode()), 2); // Mode data.WriteBit(0); // HasSplineFilter data.WriteBit(moveSpline.spell_effect_extra.is_initialized()); // HasSpellEffectExtraData + data.WriteBit(moveSpline.splineflags.parabolic); // HasJumpExtraData data.FlushBits(); //if (HasSplineFilterKey) @@ -341,11 +354,8 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(:: break; } - if (HasJumpGravity) - data << float(moveSpline.vertical_acceleration); // JumpGravity - - if (HasSpecialTime) - data << uint32(moveSpline.effect_start_time); // SpecialTime + if (hasFadeObjectTime) + data << uint32(moveSpline.effect_start_time); // FadeObjectTime data.append(moveSpline.getPath().data(), moveSpline.getPath().size()); @@ -355,6 +365,14 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(:: data << uint32(moveSpline.spell_effect_extra->SpellVisualId); data << uint32(moveSpline.spell_effect_extra->ProgressCurveId); data << uint32(moveSpline.spell_effect_extra->ParabolicCurveId); + data << float(moveSpline.vertical_acceleration); + } + + if (moveSpline.splineflags.parabolic) + { + data << float(moveSpline.vertical_acceleration); + data << uint32(moveSpline.effect_start_time); + data << uint32(0); // Duration (override) } } } @@ -388,12 +406,13 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS if (splineFlags.parabolic) { - movementSpline.JumpGravity = moveSpline.vertical_acceleration; - movementSpline.SpecialTime = moveSpline.effect_start_time; + movementSpline.JumpExtraData = boost::in_place(); + movementSpline.JumpExtraData->JumpGravity = moveSpline.vertical_acceleration; + movementSpline.JumpExtraData->StartTime = moveSpline.effect_start_time; } if (splineFlags.fadeObject) - movementSpline.SpecialTime = moveSpline.effect_start_time; + movementSpline.FadeObjectTime = moveSpline.effect_start_time; if (moveSpline.spell_effect_extra) { @@ -402,6 +421,7 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS movementSpline.SpellEffectExtraData->SpellVisualID = moveSpline.spell_effect_extra->SpellVisualId; movementSpline.SpellEffectExtraData->ProgressCurveID = moveSpline.spell_effect_extra->ProgressCurveId; movementSpline.SpellEffectExtraData->ParabolicCurveID = moveSpline.spell_effect_extra->ParabolicCurveId; + movementSpline.SpellEffectExtraData->JumpGravity = moveSpline.vertical_acceleration; } ::Movement::Spline<int32> const& spline = moveSpline.spline; diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index aaa5f770535..e50a8cf6a71 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -75,6 +75,14 @@ namespace WorldPackets uint32 SpellVisualID = 0; uint32 ProgressCurveID = 0; uint32 ParabolicCurveID = 0; + float JumpGravity = 0.0f; + }; + + struct MonsterSplineJumpExtraData + { + float JumpGravity = 0.0f; + uint32 StartTime = 0; + uint32 Duration = 0; }; struct MovementSpline @@ -85,8 +93,7 @@ namespace WorldPackets uint32 TierTransStartTime = 0; int32 Elapsed = 0; uint32 MoveTime = 0; - float JumpGravity = 0.0f; - uint32 SpecialTime = 0; + uint32 FadeObjectTime = 0; std::vector<TaggedPosition<Position::XYZ>> Points; // Spline path uint8 Mode = 0; // Spline mode - actually always 0 in this packet - Catmullrom mode appears only in SMSG_UPDATE_OBJECT. In this packet it is determined by flags uint8 VehicleExitVoluntary = 0; @@ -95,6 +102,7 @@ namespace WorldPackets std::vector<TaggedPosition<Position::PackedXYZ>> PackedDeltas; Optional<MonsterSplineFilter> SplineFilter; Optional<MonsterSplineSpellEffectExtraData> SpellEffectExtraData; + Optional<MonsterSplineJumpExtraData> JumpExtraData; float FaceDirection = 0.0f; ObjectGuid FaceGUID; TaggedPosition<Position::XYZ> FaceSpot; diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index 2b7f9ab7d18..749b4b9a330 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -96,19 +96,19 @@ WorldPacket const* WorldPackets::NPC::VendorInventory::Write() WorldPacket const* WorldPackets::NPC::TrainerList::Write() { _worldPacket << TrainerGUID; - _worldPacket << TrainerType; - _worldPacket << TrainerID; + _worldPacket << uint32(TrainerType); + _worldPacket << uint32(TrainerID); - _worldPacket << int32(Spells.size()); + _worldPacket << uint32(Spells.size()); for (TrainerListSpell const& spell : Spells) { - _worldPacket << spell.SpellID; - _worldPacket << spell.MoneyCost; - _worldPacket << spell.ReqSkillLine; - _worldPacket << spell.ReqSkillRank; + _worldPacket << int32(spell.SpellID); + _worldPacket << uint32(spell.MoneyCost); + _worldPacket << uint32(spell.ReqSkillLine); + _worldPacket << uint32(spell.ReqSkillRank); _worldPacket.append(spell.ReqAbility.data(), spell.ReqAbility.size()); - _worldPacket << spell.Usable; - _worldPacket << spell.ReqLevel; + _worldPacket << uint8(spell.Usable); + _worldPacket << uint8(spell.ReqLevel); } _worldPacket.WriteBits(Greeting.length(), 11); @@ -144,11 +144,13 @@ WorldPacket const* WorldPackets::NPC::PlayerTabardVendorActivate::Write() WorldPacket const* WorldPackets::NPC::GossipPOI::Write() { - _worldPacket.WriteBits(Flags, 14); - _worldPacket.WriteBits(Name.length(), 6); + _worldPacket << int32(ID); _worldPacket << Pos; _worldPacket << int32(Icon); _worldPacket << int32(Importance); + _worldPacket.WriteBits(Flags, 14); + _worldPacket.WriteBits(Name.length(), 6); + _worldPacket.FlushBits(); _worldPacket.WriteString(Name); return &_worldPacket; diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index a094f25dc22..8148e3aff60 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -131,9 +131,9 @@ namespace WorldPackets struct TrainerListSpell { int32 SpellID = 0; - int32 MoneyCost = 0; - int32 ReqSkillLine = 0; - int32 ReqSkillRank = 0; + uint32 MoneyCost = 0; + uint32 ReqSkillLine = 0; + uint32 ReqSkillRank = 0; std::array<int32, 3> ReqAbility = { }; uint8 Usable = 0; uint8 ReqLevel = 0; @@ -180,6 +180,7 @@ namespace WorldPackets WorldPacket const* Write() override; + int32 ID = 0; uint32 Flags = 0; TaggedPosition<Position::XY> Pos; int32 Icon = 0; diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h index f7913b9c51d..99b214aab36 100644 --- a/src/server/game/Server/Packets/PacketUtilities.h +++ b/src/server/game/Server/Packets/PacketUtilities.h @@ -42,6 +42,8 @@ namespace WorldPackets typedef typename storage_type::value_type value_type; typedef typename storage_type::size_type size_type; + typedef typename storage_type::pointer pointer; + typedef typename storage_type::const_pointer const_pointer; typedef typename storage_type::reference reference; typedef typename storage_type::const_reference const_reference; typedef typename storage_type::iterator iterator; @@ -55,6 +57,9 @@ namespace WorldPackets iterator end() { return _storage.end(); } const_iterator end() const { return _storage.end(); } + pointer data() { return _storage.data(); } + const_pointer data() const { return _storage.data(); } + size_type size() const { return _storage.size(); } bool empty() const { return _storage.empty(); } diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 939f0a65db1..9251addde38 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -33,7 +33,7 @@ WorldPacket const* WorldPackets::Party::PartyCommandResult::Write() _worldPacket.WriteBits(Command, 4); _worldPacket.WriteBits(Result, 6); - _worldPacket << ResultData; + _worldPacket << uint32(ResultData); _worldPacket << ResultGUID; _worldPacket.WriteString(Name); @@ -78,12 +78,12 @@ WorldPacket const* WorldPackets::Party::PartyInvite::Write() _worldPacket << InviterBNetAccountId; _worldPacket << uint16(Unk1); _worldPacket << uint32(ProposedRoles); - _worldPacket << int32(LfgSlots.size()); - _worldPacket << LfgCompletedMask; + _worldPacket << uint32(LfgSlots.size()); + _worldPacket << uint32(LfgCompletedMask); _worldPacket.WriteString(InviterName); - for (int32 LfgSlot : LfgSlots) + for (uint32 LfgSlot : LfgSlots) _worldPacket << LfgSlot; return &_worldPacket; @@ -212,7 +212,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyMemberStats c data << int16(memberStats.PositionY); data << int16(memberStats.PositionZ); data << int32(memberStats.VehicleSeat); - data << int32(memberStats.Auras.size()); + data << uint32(memberStats.Auras.size()); data << memberStats.Phases; for (WorldPackets::Party::PartyMemberAuraStates const& aura : memberStats.Auras) @@ -318,15 +318,13 @@ WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateSingle::Write() WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateAll::Write() { - _worldPacket << PartyIndex; - - _worldPacket << int32(TargetIcons.size()); + _worldPacket << uint8(PartyIndex); + _worldPacket << uint32(TargetIcons.size()); - std::map<uint8, ObjectGuid>::const_iterator itr; - for (itr = TargetIcons.begin(); itr != TargetIcons.end(); itr++) + for (auto itr = TargetIcons.begin(); itr != TargetIcons.end(); ++itr) { _worldPacket << itr->second; - _worldPacket << itr->first; + _worldPacket << uint8(itr->first); } return &_worldPacket; @@ -420,7 +418,9 @@ WorldPacket const* WorldPackets::Party::GroupNewLeader::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo const& playerInfo) { data.WriteBits(playerInfo.Name.size(), 6); + data.WriteBits(playerInfo.VoiceStateID.size(), 6); data.WriteBit(playerInfo.FromSocialQueue); + data.WriteBit(playerInfo.VoiceChatSilenced); data << playerInfo.GUID; data << uint8(playerInfo.Status); data << uint8(playerInfo.Subgroup); @@ -428,6 +428,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo co data << uint8(playerInfo.RolesAssigned); data << uint8(playerInfo.Class); data.WriteString(playerInfo.Name); + data.WriteString(playerInfo.VoiceStateID); return data; } @@ -524,8 +525,8 @@ void WorldPackets::Party::ClearRaidMarker::Read() WorldPacket const* WorldPackets::Party::RaidMarkersChanged::Write() { - _worldPacket << PartyIndex; - _worldPacket << ActiveMarkers; + _worldPacket << uint8(PartyIndex); + _worldPacket << uint32(ActiveMarkers); _worldPacket.WriteBits(RaidMarkers.size(), 4); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index f62e61d0990..d0b689ffb04 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -48,8 +48,8 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; - int32 ProposedRoles = 0; + uint8 PartyIndex = 0; + uint32 ProposedRoles = 0; std::string TargetName; std::string TargetRealm; ObjectGuid TargetGUID; @@ -85,9 +85,9 @@ namespace WorldPackets std::string InviterRealmNameNormalized; // Lfg - int32 ProposedRoles = 0; - int32 LfgCompletedMask = 0; - std::vector<int32> LfgSlots; + uint32 ProposedRoles = 0; + uint32 LfgCompletedMask = 0; + std::vector<uint32> LfgSlots; }; class PartyInviteResponse final : public ClientPacket @@ -97,9 +97,9 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; bool Accept = false; - Optional<int32> RolesDesired; + Optional<uint32> RolesDesired; }; class PartyUninvite final : public ClientPacket @@ -109,7 +109,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; ObjectGuid TargetGUID; std::string Reason; }; @@ -327,7 +327,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; std::map<uint8, ObjectGuid> TargetIcons; }; @@ -359,7 +359,7 @@ namespace WorldPackets void Read() override; ObjectGuid Target; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; bool Apply = false; }; @@ -405,7 +405,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; bool IsReady = false; }; @@ -486,13 +486,14 @@ namespace WorldPackets { ObjectGuid GUID; std::string Name; + std::string VoiceStateID; // same as bgs.protocol.club.v1.MemberVoiceState.id uint8 Class = 0; - uint8 Status = 0u; uint8 Subgroup = 0u; uint8 Flags = 0u; uint8 RolesAssigned = 0u; bool FromSocialQueue = false; + bool VoiceChatSilenced = false; }; struct PartyLFGInfo @@ -554,7 +555,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; bool EveryoneIsAssistant = false; }; @@ -599,7 +600,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; uint32 ActiveMarkers = 0u; std::vector<RaidMarker*> RaidMarkers; diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp index 06182856bb4..d62ce6840cb 100644 --- a/src/server/game/Server/Packets/PetPackets.cpp +++ b/src/server/game/Server/Packets/PetPackets.cpp @@ -65,9 +65,8 @@ WorldPacket const* WorldPackets::Pet::PetStableList::Write() _worldPacket << int32(pet.CreatureID); _worldPacket << int32(pet.DisplayID); _worldPacket << int32(pet.ExperienceLevel); - _worldPacket << int32(pet.PetFlags); - - _worldPacket << int8(pet.PetName.length()); + _worldPacket << uint8(pet.PetFlags); + _worldPacket.WriteBits(pet.PetName.length(), 8); _worldPacket.WriteString(pet.PetName); } @@ -92,21 +91,18 @@ WorldPacket const* WorldPackets::Pet::PetUnlearnedSpells::Write() WorldPacket const* WorldPackets::Pet::PetNameInvalid::Write() { + _worldPacket << uint8(Result); _worldPacket << RenameData.PetGUID; _worldPacket << int32(RenameData.PetNumber); _worldPacket << uint8(RenameData.NewName.length()); _worldPacket.WriteBit(RenameData.DeclinedNames.is_initialized()); - _worldPacket.FlushBits(); if (RenameData.DeclinedNames) { for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) - { _worldPacket.WriteBits(RenameData.DeclinedNames->name[i].length(), 7); - _worldPacket.FlushBits(); - } for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) _worldPacket << RenameData.DeclinedNames->name[i]; @@ -121,8 +117,7 @@ void WorldPackets::Pet::PetRename::Read() _worldPacket >> RenameData.PetGUID; _worldPacket >> RenameData.PetNumber; - int8 nameLen = 0; - _worldPacket >> nameLen; + uint8 nameLen = _worldPacket.ReadBits(8); if (_worldPacket.ReadBit()) { diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h index 965dc0b60c4..3f57f0360c9 100644 --- a/src/server/game/Server/Packets/PetPackets.h +++ b/src/server/game/Server/Packets/PetPackets.h @@ -125,7 +125,7 @@ namespace WorldPackets uint32 CreatureID = 0; uint32 DisplayID = 0; uint32 ExperienceLevel = 0; - uint32 PetFlags = 0; + uint8 PetFlags = 0; std::string PetName; }; diff --git a/src/server/game/Server/Packets/PetitionPackets.cpp b/src/server/game/Server/Packets/PetitionPackets.cpp index 132494aed46..06823e15204 100644 --- a/src/server/game/Server/Packets/PetitionPackets.cpp +++ b/src/server/game/Server/Packets/PetitionPackets.cpp @@ -25,32 +25,31 @@ void WorldPackets::Petition::QueryPetition::Read() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Petition::PetitionInfo const& petitionInfo) { - data << petitionInfo.PetitionID; + data << int32(petitionInfo.PetitionID); data << petitionInfo.Petitioner; - - data << petitionInfo.MinSignatures; - data << petitionInfo.MaxSignatures; - data << petitionInfo.DeadLine; - data << petitionInfo.IssueDate; - data << petitionInfo.AllowedGuildID; - data << petitionInfo.AllowedClasses; - data << petitionInfo.AllowedRaces; - data << petitionInfo.AllowedGender; - data << petitionInfo.AllowedMinLevel; - data << petitionInfo.AllowedMaxLevel; - data << petitionInfo.NumChoices; - data << petitionInfo.StaticType; - data << petitionInfo.Muid; + data << int32(petitionInfo.MinSignatures); + data << int32(petitionInfo.MaxSignatures); + data << int32(petitionInfo.DeadLine); + data << int32(petitionInfo.IssueDate); + data << int32(petitionInfo.AllowedGuildID); + data << int32(petitionInfo.AllowedClasses); + data << int32(petitionInfo.AllowedRaces); + data << int16(petitionInfo.AllowedGender); + data << int32(petitionInfo.AllowedMinLevel); + data << int32(petitionInfo.AllowedMaxLevel); + data << int32(petitionInfo.NumChoices); + data << int32(petitionInfo.StaticType); + data << uint32(petitionInfo.Muid); data.WriteBits(petitionInfo.Title.length(), 7); data.WriteBits(petitionInfo.BodyText.length(), 12); - for (uint8 i = 0; i < 10; i++) + for (std::size_t i = 0; i < petitionInfo.Choicetext.size(); ++i) data.WriteBits(petitionInfo.Choicetext[i].length(), 6); data.FlushBits(); - for (uint8 i = 0; i < 10; i++) + for (std::size_t i = 0; i < petitionInfo.Choicetext.size(); ++i) data.WriteString(petitionInfo.Choicetext[i]); data.WriteString(petitionInfo.Title); @@ -61,7 +60,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Petition::PetitionInfo co WorldPacket const* WorldPackets::Petition::QueryPetitionResponse::Write() { - _worldPacket << PetitionID; + _worldPacket << uint32(PetitionID); _worldPacket.WriteBit(Allow); _worldPacket.FlushBits(); @@ -102,13 +101,13 @@ WorldPacket const* WorldPackets::Petition::ServerPetitionShowSignatures::Write() _worldPacket << Item; _worldPacket << Owner; _worldPacket << OwnerAccountID; - _worldPacket << PetitionID; + _worldPacket << int32(PetitionID); _worldPacket << uint32(Signatures.size()); - for (PetitionSignature signature : Signatures) + for (PetitionSignature const& signature : Signatures) { _worldPacket << signature.Signer; - _worldPacket << signature.Choice; + _worldPacket << int32(signature.Choice); } return &_worldPacket; diff --git a/src/server/game/Server/Packets/PetitionPackets.h b/src/server/game/Server/Packets/PetitionPackets.h index a5b4e8dca6f..c378c053d84 100644 --- a/src/server/game/Server/Packets/PetitionPackets.h +++ b/src/server/game/Server/Packets/PetitionPackets.h @@ -56,7 +56,7 @@ namespace WorldPackets int32 NumChoices = 0; int32 StaticType = 0; uint32 Muid = 0; - std::string Choicetext[10]; + std::array<std::string, 10> Choicetext; }; class QueryPetitionResponse final : public ServerPacket diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index c640394be93..f941c895722 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -29,7 +29,7 @@ void WorldPackets::Query::QueryCreature::Read() WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() { - _worldPacket << CreatureID; + _worldPacket << uint32(CreatureID); _worldPacket.WriteBit(Allow); _worldPacket.FlushBits(); @@ -61,7 +61,16 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() _worldPacket << int32(Stats.CreatureFamily); _worldPacket << int32(Stats.Classification); _worldPacket.append(Stats.ProxyCreatureID.data(), Stats.ProxyCreatureID.size()); - _worldPacket.append(Stats.CreatureDisplayID.data(), Stats.CreatureDisplayID.size()); + _worldPacket << uint32(Stats.Display.CreatureDisplay.size()); + _worldPacket << float(Stats.Display.TotalProbability); + + for (CreatureXDisplay const& display : Stats.Display.CreatureDisplay) + { + _worldPacket << uint32(display.CreatureDisplayID); + _worldPacket << float(display.Scale); + _worldPacket << float(display.Probability); + } + _worldPacket << float(Stats.HpMulti); _worldPacket << float(Stats.EnergyMulti); _worldPacket << uint32(Stats.QuestItems.size()); @@ -69,6 +78,7 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() _worldPacket << int32(Stats.HealthScalingExpansion); _worldPacket << int32(Stats.RequiredExpansion); _worldPacket << int32(Stats.VignetteID); + _worldPacket << int32(Stats.Class); if (!Stats.Title.empty()) _worldPacket << Stats.Title; @@ -79,8 +89,8 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() if (!Stats.CursorName.empty()) _worldPacket << Stats.CursorName; - for (int32 questItem : Stats.QuestItems) - _worldPacket << questItem; + if (!Stats.QuestItems.empty()) + _worldPacket.append(Stats.QuestItems.data(), Stats.QuestItems.size()); } return &_worldPacket; @@ -162,6 +172,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupDa data << lookupData.AccountID; data << lookupData.BnetAccountID; data << lookupData.GuidActual; + data << uint64(lookupData.GuildClubMemberID); data << uint32(lookupData.VirtualRealmAddress); data << uint8(lookupData.Race); data << uint8(lookupData.Sex); @@ -174,7 +185,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupDa WorldPacket const* WorldPackets::Query::QueryPlayerNameResponse::Write() { - _worldPacket << Result; + _worldPacket << uint8(Result); _worldPacket << Player; if (Result == RESPONSE_SUCCESS) @@ -206,7 +217,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::QueryPageTextRespo WorldPacket const* WorldPackets::Query::QueryPageTextResponse::Write() { - _worldPacket << PageTextID; + _worldPacket << uint32(PageTextID); _worldPacket.WriteBit(Allow); _worldPacket.FlushBits(); @@ -229,7 +240,7 @@ void WorldPackets::Query::QueryNPCText::Read() WorldPacket const* WorldPackets::Query::QueryNPCTextResponse::Write() { - _worldPacket << TextID; + _worldPacket << uint32(TextID); _worldPacket.WriteBit(Allow); _worldPacket.FlushBits(); @@ -238,10 +249,8 @@ WorldPacket const* WorldPackets::Query::QueryNPCTextResponse::Write() if (Allow) { - for (uint32 i = 0; i < MAX_NPC_TEXT_OPTIONS; ++i) - _worldPacket << Probabilities[i]; - for (uint32 i = 0; i < MAX_NPC_TEXT_OPTIONS; ++i) - _worldPacket << BroadcastTextID[i]; + _worldPacket.append(Probabilities.data(), Probabilities.size()); + _worldPacket.append(BroadcastTextID.data(), BroadcastTextID.size()); } return &_worldPacket; @@ -276,8 +285,8 @@ WorldPacket const* WorldPackets::Query::QueryGameObjectResponse::Write() statsData << float(Stats.Size); statsData << uint8(Stats.QuestItems.size()); - for (int32 questItem : Stats.QuestItems) - statsData << int32(questItem); + if (!Stats.QuestItems.empty()) + statsData.append(Stats.QuestItems.data(), Stats.QuestItems.size()); statsData << int32(Stats.RequiredLevel); } @@ -334,7 +343,7 @@ void WorldPackets::Query::QuestPOIQuery::Read() { _worldPacket >> MissingQuestCount; - for (uint8 i = 0; i < 50; ++i) + for (std::size_t i = 0; i < MissingQuestPOIs.size(); ++i) _worldPacket >> MissingQuestPOIs[i]; } @@ -356,13 +365,12 @@ WorldPacket const* WorldPackets::Query::QuestPOIQueryResponse::Write() _worldPacket << int32(questPOIBlobData.QuestObjectiveID); _worldPacket << int32(questPOIBlobData.QuestObjectID); _worldPacket << int32(questPOIBlobData.MapID); - _worldPacket << int32(questPOIBlobData.WorldMapAreaID); - _worldPacket << int32(questPOIBlobData.Floor); + _worldPacket << int32(questPOIBlobData.UiMapID); _worldPacket << int32(questPOIBlobData.Priority); _worldPacket << int32(questPOIBlobData.Flags); _worldPacket << int32(questPOIBlobData.WorldEffectID); _worldPacket << int32(questPOIBlobData.PlayerConditionID); - _worldPacket << int32(questPOIBlobData.UnkWoD1); + _worldPacket << int32(questPOIBlobData.SpawnTrackingID); _worldPacket << int32(questPOIBlobData.QuestPOIBlobPointStats.size()); for (QuestPOIBlobPoint const& questPOIBlobPoint : questPOIBlobData.QuestPOIBlobPointStats) @@ -381,13 +389,9 @@ WorldPacket const* WorldPackets::Query::QuestPOIQueryResponse::Write() void WorldPackets::Query::QueryQuestCompletionNPCs::Read() { - uint32 questCount = 0; - - _worldPacket >> questCount; - QuestCompletionNPCs.resize(questCount); - - for (int32& QuestID : QuestCompletionNPCs) - _worldPacket >> QuestID; + QuestCompletionNPCs.resize(_worldPacket.read<uint32>()); + if (!QuestCompletionNPCs.empty()) + _worldPacket.read(QuestCompletionNPCs.data(), QuestCompletionNPCs.size()); } WorldPacket const* WorldPackets::Query::QuestCompletionNPCResponse::Write() @@ -396,10 +400,9 @@ WorldPacket const* WorldPackets::Query::QuestCompletionNPCResponse::Write() for (auto& quest : QuestCompletionNPCs) { _worldPacket << int32(quest.QuestID); - _worldPacket << uint32(quest.NPCs.size()); - for (int32 const& npc : quest.NPCs) - _worldPacket << int32(npc); + if (!quest.NPCs.empty()) + _worldPacket.append(quest.NPCs.data(), quest.NPCs.size()); } return &_worldPacket; @@ -453,6 +456,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::ItemTextCache cons WorldPacket const* WorldPackets::Query::QueryItemTextResponse::Write() { _worldPacket.WriteBit(Valid); + _worldPacket.FlushBits(); _worldPacket << Item; _worldPacket << Id; diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 7639f165dae..dfdf3d437a0 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -23,6 +23,7 @@ #include "NPCHandler.h" #include "ObjectGuid.h" #include "Position.h" +#include "QuestDef.h" #include "SharedDefines.h" #include "UnitDefines.h" #include <array> @@ -43,13 +44,25 @@ namespace WorldPackets uint32 CreatureID = 0; }; + struct CreatureXDisplay + { + uint32 CreatureDisplayID = 0; + float Scale = 1.0f; + float Probability = 1.0f; + }; + + struct CreatureDisplayStats + { + float TotalProbability = 0.0f; + std::vector<CreatureXDisplay> CreatureDisplay; + }; + struct CreatureStats { CreatureStats() { Flags.fill(0); ProxyCreatureID.fill(0); - CreatureDisplayID.fill(0); } std::string Title; @@ -58,6 +71,7 @@ namespace WorldPackets int32 CreatureType = 0; int32 CreatureFamily = 0; int32 Classification = 0; + CreatureDisplayStats Display; float HpMulti = 0.0f; float EnergyMulti = 0.0f; bool Leader = false; @@ -66,9 +80,9 @@ namespace WorldPackets int32 HealthScalingExpansion = 0; uint32 RequiredExpansion = 0; uint32 VignetteID = 0; + int32 Class = 0; std::array<uint32, 2> Flags; std::array<uint32, 2> ProxyCreatureID; - std::array<uint32, 4> CreatureDisplayID; std::array<std::string, 4> Name; std::array<std::string, 4> NameAlt; }; @@ -110,6 +124,7 @@ namespace WorldPackets ObjectGuid BnetAccountID; ObjectGuid GuidActual; std::string Name; + uint64 GuildClubMemberID = 0; // same as bgs.protocol.club.v1.MemberId.unique_id uint32 VirtualRealmAddress = 0; uint8 Race = RACE_NONE; uint8 Sex = GENDER_NONE; @@ -182,8 +197,8 @@ namespace WorldPackets uint32 TextID = 0; bool Allow = false; - float Probabilities[MAX_NPC_TEXT_OPTIONS]; - uint32 BroadcastTextID[MAX_NPC_TEXT_OPTIONS]; + std::array<float, MAX_NPC_TEXT_OPTIONS> Probabilities; + std::array<uint32, MAX_NPC_TEXT_OPTIONS> BroadcastTextID; }; class QueryGameObject final : public ClientPacket @@ -297,7 +312,7 @@ namespace WorldPackets void Read() override; int32 MissingQuestCount = 0; - int32 MissingQuestPOIs[50]; + std::array<int32, 100> MissingQuestPOIs; }; struct QuestPOIBlobPoint @@ -313,13 +328,12 @@ namespace WorldPackets int32 QuestObjectiveID = 0; int32 QuestObjectID = 0; int32 MapID = 0; - int32 WorldMapAreaID = 0; - int32 Floor = 0; + int32 UiMapID = 0; int32 Priority = 0; int32 Flags = 0; int32 WorldEffectID = 0; int32 PlayerConditionID = 0; - int32 UnkWoD1 = 0; + int32 SpawnTrackingID = 0; std::vector<QuestPOIBlobPoint> QuestPOIBlobPointStats; bool AlwaysAllowMergingBlobs = false; }; @@ -347,7 +361,7 @@ namespace WorldPackets void Read() override; - std::vector<int32> QuestCompletionNPCs; + Array<int32, 100> QuestCompletionNPCs; }; struct QuestCompletionNPC diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 20a6539ae1d..0468e170d7c 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -65,6 +65,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << int32(Info.QuestID); _worldPacket << int32(Info.QuestType); _worldPacket << int32(Info.QuestLevel); + _worldPacket << int32(Info.QuestScalingFactionGroup); _worldPacket << int32(Info.QuestMaxScalingLevel); _worldPacket << int32(Info.QuestPackageID); _worldPacket << int32(Info.QuestMinLevel); @@ -88,6 +89,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << int32(Info.StartItem); _worldPacket << uint32(Info.Flags); _worldPacket << uint32(Info.FlagsEx); + _worldPacket << uint32(Info.FlagsEx2); for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) { @@ -115,6 +117,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << int32(Info.RewardNumSkillUps); _worldPacket << int32(Info.PortraitGiver); + _worldPacket << int32(Info.PortraitGiverMount); _worldPacket << int32(Info.PortraitTurnIn); for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i) @@ -141,7 +144,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << uint32(Info.Objectives.size()); _worldPacket << uint64(Info.AllowableRaces); - _worldPacket << int32(Info.QuestRewardID); + _worldPacket << int32(Info.TreasurePickerID); _worldPacket << int32(Info.Expansion); _worldPacket.WriteBits(Info.LogTitle.size(), 9); @@ -222,13 +225,6 @@ WorldPacket const* WorldPackets::Quest::QuestUpdateAddPvPCredit::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const& questRewards) { data << int32(questRewards.ChoiceItemCount); - - for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) - { - data << int32(questRewards.ChoiceItems[i].ItemID); - data << int32(questRewards.ChoiceItems[i].Quantity); - } - data << int32(questRewards.ItemCount); for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) @@ -266,7 +262,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const data << int32(questRewards.SkillLineID); data << int32(questRewards.NumSkillUps); - data << int32(questRewards.RewardID); + data << int32(questRewards.TreasurePickerID); + + for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) + { + data << questRewards.ChoiceItems[i].Item; + data << int32(questRewards.ChoiceItems[i].Quantity); + } data.WriteBit(questRewards.IsBoostSpell); data.FlushBits(); @@ -302,6 +304,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverOfferRewardMessage::Write() _worldPacket << QuestData; // WorldPackets::Quest::QuestGiverOfferReward _worldPacket << int32(QuestPackageID); _worldPacket << int32(PortraitGiver); + _worldPacket << int32(PortraitGiverMount); _worldPacket << int32(PortraitTurnIn); _worldPacket.WriteBits(QuestTitle.size(), 9); @@ -360,6 +363,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write() _worldPacket << int32(QuestID); _worldPacket << int32(QuestPackageID); _worldPacket << int32(PortraitGiver); + _worldPacket << int32(PortraitGiverMount); _worldPacket << int32(PortraitTurnIn); _worldPacket << uint32(QuestFlags[0]); // Flags _worldPacket << uint32(QuestFlags[1]); // FlagsEx @@ -643,6 +647,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceRespon { data << int32(playerChoiceResponse.ResponseID); data << int32(playerChoiceResponse.ChoiceArtFileID); + data << int32(playerChoiceResponse.Flags); + data << uint32(playerChoiceResponse.WidgetSetID); + data << uint8(playerChoiceResponse.GroupID); data.WriteBits(playerChoiceResponse.Answer.length(), 9); data.WriteBits(playerChoiceResponse.Header.length(), 9); @@ -670,6 +677,7 @@ WorldPacket const* WorldPackets::Quest::DisplayPlayerChoice::Write() _worldPacket.WriteBits(Question.length(), 8); _worldPacket.WriteBit(CloseChoiceFrame); _worldPacket.WriteBit(HideWarboardHeader); + _worldPacket.WriteBit(KeepOpenAfterChoice); _worldPacket.FlushBits(); for (PlayerChoiceResponse const& response : Responses) diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 1dd40e1ccc2..1315a57949c 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -109,6 +109,7 @@ namespace WorldPackets int32 QuestID = 0; int32 QuestType = 0; // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details) int32 QuestLevel = 0; // may be -1, static data, in other cases must be used dynamic level: Player::GetQuestLevel (0 is not known, but assuming this is no longer valid for quest intended for client) + int32 QuestScalingFactionGroup = 0; int32 QuestMaxScalingLevel = 255; int32 QuestPackageID = 0; int32 QuestMinLevel = 0; @@ -132,6 +133,7 @@ namespace WorldPackets int32 StartItem = 0; uint32 Flags = 0; uint32 FlagsEx = 0; + uint32 FlagsEx2 = 0; int32 POIContinent = 0; float POIx = 0.0f; float POIy = 0.0f; @@ -146,6 +148,7 @@ namespace WorldPackets int32 RewardSkillLineID = 0; // reward skill id int32 RewardNumSkillUps = 0; // reward skill points int32 PortraitGiver = 0; // quest giver entry ? + int32 PortraitGiverMount = 0; int32 PortraitTurnIn = 0; // quest turn in entry ? std::string PortraitGiverText; std::string PortraitGiverName; @@ -157,7 +160,7 @@ namespace WorldPackets int32 CompleteSoundKitID = 0; int32 AreaGroupID = 0; int32 TimeAllowed = 0; - int32 QuestRewardID = 0; + int32 TreasurePickerID = 0; int32 Expansion = 0; std::vector<QuestObjective> Objectives; int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { }; @@ -225,7 +228,7 @@ namespace WorldPackets struct QuestChoiceItem { - int32 ItemID = 0; + Item::ItemInstance Item; int32 Quantity = 0; }; @@ -244,7 +247,7 @@ namespace WorldPackets int32 SpellCompletionID = 0; int32 SkillLineID = 0; int32 NumSkillUps = 0; - int32 RewardID = 0; + int32 TreasurePickerID = 0; QuestChoiceItem ChoiceItems[QUEST_REWARD_CHOICES_COUNT]; int32 ItemID[QUEST_REWARD_ITEM_COUNT] = { }; int32 ItemQty[QUEST_REWARD_ITEM_COUNT] = { }; @@ -285,6 +288,7 @@ namespace WorldPackets int32 PortraitTurnIn = 0; int32 PortraitGiver = 0; + int32 PortraitGiverMount = 0; std::string QuestTitle; std::string RewardText; std::string PortraitGiverText; @@ -365,6 +369,7 @@ namespace WorldPackets std::vector<int32> LearnSpells; int32 PortraitTurnIn = 0; int32 PortraitGiver = 0; + int32 PortraitGiverMount = 0; int32 QuestStartItemID = 0; std::string PortraitGiverText; std::string PortraitGiverName; @@ -663,6 +668,9 @@ namespace WorldPackets { int32 ResponseID = 0; int32 ChoiceArtFileID = 0; + int32 Flags = 0; + uint32 WidgetSetID = 0; + uint8 GroupID = 0; std::string Answer; std::string Header; std::string Description; @@ -684,6 +692,7 @@ namespace WorldPackets std::vector<PlayerChoiceResponse> Responses; bool CloseChoiceFrame = false; bool HideWarboardHeader = false; + bool KeepOpenAfterChoice = false; }; class ChoiceResponse final : public ClientPacket diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp index 314dac85c5e..5e4eb54a918 100644 --- a/src/server/game/Server/Packets/ReputationPackets.cpp +++ b/src/server/game/Server/Packets/ReputationPackets.cpp @@ -46,8 +46,6 @@ WorldPacket const* WorldPackets::Reputation::SetForcedReactions::Write() for (ForcedReaction const& reaction : Reactions) _worldPacket << reaction; - _worldPacket.FlushBits(); - return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h index 0156d504491..2046e169ab5 100644 --- a/src/server/game/Server/Packets/ReputationPackets.h +++ b/src/server/game/Server/Packets/ReputationPackets.h @@ -30,7 +30,7 @@ namespace WorldPackets class InitializeFactions final : public ServerPacket { public: - InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, 1312) + InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, FactionCount * (4 + 1) + FactionCount / 8) { FactionStandings.fill(0); FactionHasBonus.fill(false); diff --git a/src/server/game/Server/Packets/ScenarioPackets.cpp b/src/server/game/Server/Packets/ScenarioPackets.cpp index 38a667980a1..73f5120ee8d 100644 --- a/src/server/game/Server/Packets/ScenarioPackets.cpp +++ b/src/server/game/Server/Packets/ScenarioPackets.cpp @@ -109,8 +109,7 @@ WorldPacket const* WorldPackets::Scenario::ScenarioPOIs::Write() { _worldPacket << int32(scenarioPOI.BlobIndex); _worldPacket << int32(scenarioPOI.MapID); - _worldPacket << int32(scenarioPOI.WorldMapAreaID); - _worldPacket << int32(scenarioPOI.Floor); + _worldPacket << int32(scenarioPOI.UiMapID); _worldPacket << int32(scenarioPOI.Priority); _worldPacket << int32(scenarioPOI.Flags); _worldPacket << int32(scenarioPOI.WorldEffectID); diff --git a/src/server/game/Server/Packets/ScenarioPackets.h b/src/server/game/Server/Packets/ScenarioPackets.h index c9e1004d51a..71bcbd12d65 100644 --- a/src/server/game/Server/Packets/ScenarioPackets.h +++ b/src/server/game/Server/Packets/ScenarioPackets.h @@ -22,7 +22,7 @@ #include "PacketUtilities.h" #include "AchievementPackets.h" -#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE 40 +#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE 42 struct ScenarioPOI; diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index ec6d57f2748..7b3117156fc 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -33,6 +33,7 @@ void WorldPackets::Spells::PetCancelAura::Read() void WorldPackets::Spells::CancelChannelling::Read() { _worldPacket >> ChannelSpell; + _worldPacket >> Reason; } WorldPacket const* WorldPackets::Spells::CategoryCooldown::Write() @@ -99,16 +100,17 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraDataInfo cons data << uint32(auraData.ActiveFlags); data << uint16(auraData.CastLevel); data << uint8(auraData.Applications); + data << int32(auraData.ContentTuningID); data.WriteBit(auraData.CastUnit.is_initialized()); data.WriteBit(auraData.Duration.is_initialized()); data.WriteBit(auraData.Remaining.is_initialized()); data.WriteBit(auraData.TimeMod.is_initialized()); data.WriteBits(auraData.Points.size(), 6); data.WriteBits(auraData.EstimatedPoints.size(), 6); - data.WriteBit(auraData.SandboxScaling.is_initialized()); + data.WriteBit(auraData.ContentTuning.is_initialized()); - if (auraData.SandboxScaling) - data << *auraData.SandboxScaling; + if (auraData.ContentTuning) + data << *auraData.ContentTuning; if (auraData.CastUnit) data << *auraData.CastUnit; @@ -211,7 +213,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellCastReques buffer >> request.SpellID; buffer >> request.SpellXSpellVisualID; buffer >> request.MissileTrajectory; - buffer >> request.Charmer; + buffer >> request.CraftingNPC; request.SendCastFlags = buffer.ReadBits(5); bool hasMoveUpdate = buffer.ReadBit(); request.Weight.resize(buffer.ReadBits(2)); @@ -366,13 +368,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastData con data << int32(spellCastData.SpellID); data << uint32(spellCastData.SpellXSpellVisualID); data << uint32(spellCastData.CastFlags); + data << uint32(spellCastData.CastFlagsEx); data << uint32(spellCastData.CastTime); data << spellCastData.MissileTrajectory; data << int32(spellCastData.Ammo.DisplayID); data << uint8(spellCastData.DestLocSpellCastIndex); data << spellCastData.Immunities; data << spellCastData.Predict; - data.WriteBits(spellCastData.CastFlagsEx, 23); data.WriteBits(spellCastData.HitTargets.size(), 16); data.WriteBits(spellCastData.MissTargets.size(), 16); data.WriteBits(spellCastData.MissStatus.size(), 16); @@ -716,6 +718,7 @@ WorldPacket const* WorldPackets::Spells::PlayOrphanSpellVisual::Write() _worldPacket << int32(SpellVisualID); _worldPacket << float(TravelSpeed); _worldPacket << float(UnkZero); + _worldPacket << float(Unk801); _worldPacket.WriteBit(SpeedAsTime); _worldPacket.FlushBits(); @@ -726,12 +729,14 @@ WorldPacket const* WorldPackets::Spells::PlaySpellVisual::Write() { _worldPacket << Source; _worldPacket << Target; + _worldPacket << Unk801_1; _worldPacket << TargetPosition; - _worldPacket << SpellVisualID; - _worldPacket << TravelSpeed; - _worldPacket << MissReason; - _worldPacket << ReflectStatus; - _worldPacket << Orientation; + _worldPacket << uint32(SpellVisualID); + _worldPacket << float(TravelSpeed); + _worldPacket << uint16(MissReason); + _worldPacket << uint16(ReflectStatus); + _worldPacket << float(Orientation); + _worldPacket << float(Unk801_2); _worldPacket.WriteBit(SpeedAsTime); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index b1230459627..1df8e8772c0 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -57,6 +57,8 @@ namespace WorldPackets void Read() override; int32 ChannelSpell = 0; + int32 Reason = 0; // 40 = /run SpellStopCasting(), 16 = movement/AURA_INTERRUPT_FLAG_MOVE, 41 = turning/AURA_INTERRUPT_FLAG_TURNING + // does not match SpellCastResult enum }; class CancelGrowthAura final : public ClientPacket @@ -177,7 +179,8 @@ namespace WorldPackets uint32 ActiveFlags = 0; uint16 CastLevel = 1; uint8 Applications = 1; - Optional<SandboxScalingData> SandboxScaling; + int32 ContentTuningID = 0; + Optional<ContentTuningParams> ContentTuning; Optional<ObjectGuid> CastUnit; Optional<int32> Duration; Optional<int32> Remaining; @@ -245,7 +248,7 @@ namespace WorldPackets MissileTrajectoryRequest MissileTrajectory; Optional<MovementInfo> MoveUpdate; std::vector<SpellWeight> Weight; - ObjectGuid Charmer; + ObjectGuid CraftingNPC; int32 Misc[2] = { }; }; @@ -613,7 +616,7 @@ namespace WorldPackets class SetSpellCharges final : public ServerPacket { public: - SetSpellCharges() : ServerPacket(SMSG_SET_SPELL_CHARGES, 1 + 4 + 4) { } + SetSpellCharges() : ServerPacket(SMSG_SET_SPELL_CHARGES, 4 + 4 + 1 + 4 + 1) { } WorldPacket const* Write() override; @@ -697,6 +700,7 @@ namespace WorldPackets bool SpeedAsTime = false; float TravelSpeed = 0.0f; float UnkZero = 0.0f; // Always zero + float Unk801 = 0.0f; TaggedPosition<Position::XYZ> SourceRotation; // Vector of rotations, Orientation is z TaggedPosition<Position::XYZ> TargetLocation; // Exclusive with Target }; @@ -710,6 +714,7 @@ namespace WorldPackets ObjectGuid Source; ObjectGuid Target; // Exclusive with TargetPosition + ObjectGuid Unk801_1; uint16 MissReason = 0; uint32 SpellVisualID = 0; bool SpeedAsTime = false; @@ -717,6 +722,7 @@ namespace WorldPackets float TravelSpeed = 0.0f; TaggedPosition<Position::XYZ> TargetPosition; // Exclusive with Target float Orientation = 0.0f; + float Unk801_2 = 0.0f; }; class PlaySpellVisualKit final : public ServerPacket diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index da674178456..853e35fce5c 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -37,6 +37,8 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write() _worldPacket << uint32(BpayStoreProductDeliveryDelay); + _worldPacket << uint32(ClubsPresenceUpdateTimer); + _worldPacket.WriteBit(VoiceEnabled); _worldPacket.WriteBit(EuropaTicketSystemStatus.is_initialized()); _worldPacket.WriteBit(ScrollOfResurrectionEnabled); @@ -49,16 +51,22 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write() _worldPacket.WriteBit(RecruitAFriendSendingEnabled); _worldPacket.WriteBit(CharUndeleteEnabled); _worldPacket.WriteBit(RestrictedAccount); + _worldPacket.WriteBit(CommerceSystemEnabled); _worldPacket.WriteBit(TutorialsEnabled); _worldPacket.WriteBit(NPETutorialsEnabled); _worldPacket.WriteBit(TwitterEnabled); - _worldPacket.WriteBit(CommerceSystemEnabled); _worldPacket.WriteBit(Unk67); _worldPacket.WriteBit(WillKickFromWorld); _worldPacket.WriteBit(KioskModeEnabled); _worldPacket.WriteBit(CompetitiveModeEnabled); _worldPacket.WriteBit(RaceClassExpansionLevels.is_initialized()); _worldPacket.WriteBit(TokenBalanceEnabled); + _worldPacket.WriteBit(WarModeFeatureEnabled); + _worldPacket.WriteBit(ClubsEnabled); + _worldPacket.WriteBit(ClubsBattleNetClubTypeAllowed); + _worldPacket.WriteBit(ClubsCharacterClubTypeAllowed); + _worldPacket.WriteBit(VoiceChatDisabledByParentalControl); + _worldPacket.WriteBit(VoiceChatMutedByParentalControl); _worldPacket.FlushBits(); @@ -102,6 +110,12 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write() _worldPacket.append(RaceClassExpansionLevels->data(), RaceClassExpansionLevels->size()); } + { + _worldPacket.WriteBit(VoiceChatManagerSettings.Enabled); + _worldPacket << VoiceChatManagerSettings.BnetAccountGuid; + _worldPacket << VoiceChatManagerSettings.GuildGuid; + } + if (EuropaTicketSystemStatus) { _worldPacket.WriteBit(EuropaTicketSystemStatus->TicketsEnabled); @@ -141,7 +155,12 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatusGlueScreen::Write() _worldPacket << int32(TokenPollTimeSeconds); _worldPacket << int32(TokenRedeemIndex); _worldPacket << int64(TokenBalanceAmount); + _worldPacket << int32(MaxCharactersPerRealm); _worldPacket << uint32(BpayStoreProductDeliveryDelay); + _worldPacket << int32(ActiveCharacterUpgradeBoostType); + _worldPacket << int32(ActiveClassTrialBoostType); + _worldPacket << int32(MinimumExpansionLevel); + _worldPacket << int32(MaximumExpansionLevel); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index 74d40bf4e05..4d0812e7e67 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -80,6 +80,13 @@ namespace WorldPackets float ThrottleDfBestPriority = 0.0f; }; + struct VoiceChatProxySettings + { + bool Enabled = false; + ObjectGuid BnetAccountGuid; + ObjectGuid GuildGuid; + }; + FeatureSystemStatus() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS, 48) { } WorldPacket const* Write() override; @@ -103,6 +110,7 @@ namespace WorldPackets uint32 TokenRedeemIndex = 0; int64 TokenBalanceAmount = 0; uint32 BpayStoreProductDeliveryDelay = 0; + uint32 ClubsPresenceUpdateTimer = 0; bool ItemRestorationButtonEnabled = false; bool CharUndeleteEnabled = false; ///< Implemented bool BpayStoreDisabledByParentalControls = false; @@ -110,16 +118,22 @@ namespace WorldPackets bool CommerceSystemEnabled = false; bool Unk67 = false; bool WillKickFromWorld = false; - bool RestrictedAccount = false; bool TutorialsEnabled = false; bool NPETutorialsEnabled = false; bool KioskModeEnabled = false; bool CompetitiveModeEnabled = false; bool TokenBalanceEnabled = false; + bool WarModeFeatureEnabled = false; + bool ClubsEnabled = false; + bool ClubsBattleNetClubTypeAllowed = false; + bool ClubsCharacterClubTypeAllowed = false; + bool VoiceChatDisabledByParentalControl = false; + bool VoiceChatMutedByParentalControl = false; Optional<std::vector<uint8>> RaceClassExpansionLevels; SocialQueueConfig QuickJoinConfig; + VoiceChatProxySettings VoiceChatManagerSettings; }; class FeatureSystemStatusGlueScreen final : public ServerPacket @@ -147,7 +161,12 @@ namespace WorldPackets int32 TokenPollTimeSeconds = 0; // NYI int32 TokenRedeemIndex = 0; // NYI int64 TokenBalanceAmount = 0; // NYI + int32 MaxCharactersPerRealm = 0; uint32 BpayStoreProductDeliveryDelay = 0; // NYI + int32 ActiveCharacterUpgradeBoostType = 0; // NYI + int32 ActiveClassTrialBoostType = 0; // NYI + int32 MinimumExpansionLevel = 0; + int32 MaximumExpansionLevel = 0; }; class MOTD final : public ServerPacket diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp index c5cbb0769a5..3344ef292fc 100644 --- a/src/server/game/Server/Packets/TalentPackets.cpp +++ b/src/server/game/Server/Packets/TalentPackets.cpp @@ -17,6 +17,20 @@ #include "TalentPackets.h" +ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Talent::PvPTalent& pvpTalent) +{ + data >> pvpTalent.PvPTalentID; + data >> pvpTalent.Slot; + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Talent::PvPTalent const& pvpTalent) +{ + data << uint16(pvpTalent.PvPTalentID); + data << uint8(pvpTalent.Slot); + return data; +} + WorldPacket const* WorldPackets::Talent::UpdateTalentData::Write() { _worldPacket << uint8(Info.ActiveGroup); @@ -27,13 +41,13 @@ WorldPacket const* WorldPackets::Talent::UpdateTalentData::Write() { _worldPacket << uint32(talentGroupInfo.SpecID); _worldPacket << uint32(talentGroupInfo.TalentIDs.size()); - _worldPacket << uint32(talentGroupInfo.PvPTalentIDs.size()); + _worldPacket << uint32(talentGroupInfo.PvPTalents.size()); - for (uint16 talentID : talentGroupInfo.TalentIDs) - _worldPacket << uint16(talentID); + for (uint16 talent : talentGroupInfo.TalentIDs) + _worldPacket << uint16(talent); - for (uint16 talentID : talentGroupInfo.PvPTalentIDs) - _worldPacket << uint16(talentID); + for (PvPTalent talent : talentGroupInfo.PvPTalents) + _worldPacket << talent; } return &_worldPacket; @@ -92,7 +106,7 @@ WorldPacket const* WorldPackets::Talent::ActiveGlyphs::Write() void WorldPackets::Talent::LearnPvpTalents::Read() { - Talents.resize(_worldPacket.ReadBits(6)); + Talents.resize(_worldPacket.read<uint32>()); for (uint32 i = 0; i < Talents.size(); ++i) _worldPacket >> Talents[i]; } @@ -102,8 +116,8 @@ WorldPacket const* WorldPackets::Talent::LearnPvpTalentsFailed::Write() _worldPacket.WriteBits(Reason, 4); _worldPacket << int32(SpellID); _worldPacket << uint32(Talents.size()); - if (!Talents.empty()) - _worldPacket.append(Talents.data(), Talents.size()); + for (PvPTalent pvpTalent : Talents) + _worldPacket << pvpTalent; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/TalentPackets.h b/src/server/game/Server/Packets/TalentPackets.h index 920f724095e..6cbc8aca057 100644 --- a/src/server/game/Server/Packets/TalentPackets.h +++ b/src/server/game/Server/Packets/TalentPackets.h @@ -27,11 +27,17 @@ namespace WorldPackets { namespace Talent { + struct PvPTalent + { + uint16 PvPTalentID = 0; + uint8 Slot = 0; + }; + struct TalentGroupInfo { uint32 SpecID = 0; std::vector<uint16> TalentIDs; - std::vector<uint16> PvPTalentIDs; + std::vector<PvPTalent> PvPTalents; }; struct TalentInfoUpdate @@ -121,19 +127,19 @@ namespace WorldPackets void Read() override; - Array<uint16, 6> Talents; + Array<PvPTalent, 4> Talents; }; class LearnPvpTalentsFailed final : public ServerPacket { public: - LearnPvpTalentsFailed() : ServerPacket(SMSG_LEARN_PVP_TALENTS_FAILED, 1 + 4 + 4 + 2 * MAX_PVP_TALENT_TIERS) { } + LearnPvpTalentsFailed() : ServerPacket(SMSG_LEARN_PVP_TALENTS_FAILED, 1 + 4 + 4 + (2 + 1) * MAX_PVP_TALENT_SLOTS) { } WorldPacket const* Write() override; uint32 Reason = 0; int32 SpellID = 0; - std::vector<uint16> Talents; + std::vector<PvPTalent> Talents; }; } } diff --git a/src/server/game/Server/Packets/TaxiPackets.cpp b/src/server/game/Server/Packets/TaxiPackets.cpp index 9e8e552f363..a39e37425f7 100644 --- a/src/server/game/Server/Packets/TaxiPackets.cpp +++ b/src/server/game/Server/Packets/TaxiPackets.cpp @@ -36,8 +36,8 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write() _worldPacket.WriteBit(WindowInfo.is_initialized()); _worldPacket.FlushBits(); - _worldPacket << uint32(CanLandNodes->size()); - _worldPacket << uint32(CanUseNodes->size()); + _worldPacket << uint32(CanLandNodes.size()); + _worldPacket << uint32(CanUseNodes.size()); if (WindowInfo.is_initialized()) { @@ -45,8 +45,8 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write() _worldPacket << uint32(WindowInfo->CurrentNode); } - _worldPacket.append(CanLandNodes->data(), CanLandNodes->size()); - _worldPacket.append(CanUseNodes->data(), CanUseNodes->size()); + _worldPacket.append(CanLandNodes.data(), CanLandNodes.size()); + _worldPacket.append(CanUseNodes.data(), CanUseNodes.size()); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/TaxiPackets.h b/src/server/game/Server/Packets/TaxiPackets.h index 098ed293fbb..dbf730a8bd9 100644 --- a/src/server/game/Server/Packets/TaxiPackets.h +++ b/src/server/game/Server/Packets/TaxiPackets.h @@ -62,8 +62,8 @@ namespace WorldPackets WorldPacket const* Write() override; Optional<ShowTaxiNodesWindowInfo> WindowInfo; - TaxiMask const* CanLandNodes = nullptr; // Nodes known by player - TaxiMask const* CanUseNodes = nullptr; // Nodes available for use - this can temporarily disable a known node + TaxiMask CanLandNodes; // Nodes known by player + TaxiMask CanUseNodes; // Nodes available for use - this can temporarily disable a known node }; class EnableTaxiNode final : public ClientPacket @@ -110,7 +110,7 @@ namespace WorldPackets class ActivateTaxiReply final : public ServerPacket { public: - ActivateTaxiReply() : ServerPacket(SMSG_ACTIVATE_TAXI_REPLY, 4) { } + ActivateTaxiReply() : ServerPacket(SMSG_ACTIVATE_TAXI_REPLY, 1) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp index cafb723c062..fe74550c77f 100644 --- a/src/server/game/Server/Packets/TicketPackets.cpp +++ b/src/server/game/Server/Packets/TicketPackets.cpp @@ -201,9 +201,17 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read() bool hasGuildInfo = _worldPacket.ReadBit(); bool hasLFGListSearchResult = _worldPacket.ReadBit(); bool hasLFGListApplicant = _worldPacket.ReadBit(); + bool hasClubMessage = _worldPacket.ReadBit(); _worldPacket.ResetBitPos(); + if (hasClubMessage) + { + CommunityMessage = boost::in_place(); + CommunityMessage->IsPlayerUsingVoice = _worldPacket.ReadBit(); + _worldPacket.ResetBitPos(); + } + if (hasMailInfo) _worldPacket >> MailInfo; diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h index 6e25f3da4a9..5e7fc20f2eb 100644 --- a/src/server/game/Server/Packets/TicketPackets.h +++ b/src/server/game/Server/Packets/TicketPackets.h @@ -178,6 +178,11 @@ namespace WorldPackets std::string Comment; }; + struct SupportTicketCommunityMessage + { + bool IsPlayerUsingVoice = false; + }; + SupportTicketSubmitComplaint(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, std::move(packet)) { } void Read() override; @@ -193,7 +198,7 @@ namespace WorldPackets Optional<SupportTicketGuildInfo> GuildInfo; Optional<SupportTicketLFGListSearchResult> LFGListSearchResult; Optional<SupportTicketLFGListApplicant> LFGListApplicant; - + Optional<SupportTicketCommunityMessage> CommunityMessage; }; class Complaint final : public ClientPacket diff --git a/src/server/game/Server/Packets/TotemPackets.cpp b/src/server/game/Server/Packets/TotemPackets.cpp index 1bd8f1c915e..a7b042ca19a 100644 --- a/src/server/game/Server/Packets/TotemPackets.cpp +++ b/src/server/game/Server/Packets/TotemPackets.cpp @@ -25,7 +25,7 @@ void WorldPackets::Totem::TotemDestroyed::Read() WorldPacket const* WorldPackets::Totem::TotemCreated::Write() { - _worldPacket << Slot; + _worldPacket << uint8(Slot); _worldPacket << Totem; _worldPacket << int32(Duration); _worldPacket << int32(SpellID); diff --git a/src/server/game/Server/Packets/TotemPackets.h b/src/server/game/Server/Packets/TotemPackets.h index b438109825c..232b26f1cbb 100644 --- a/src/server/game/Server/Packets/TotemPackets.h +++ b/src/server/game/Server/Packets/TotemPackets.h @@ -46,7 +46,7 @@ namespace WorldPackets ObjectGuid Totem; int32 SpellID = 0; int32 Duration = 0; - int8 Slot = 0; + uint8 Slot = 0; float TimeMod = 1.0f; bool CannotDismiss = false; }; diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.cpp b/src/server/game/Server/Packets/TransmogrificationPackets.cpp index 7d50891bc3e..da2c3972b12 100644 --- a/src/server/game/Server/Packets/TransmogrificationPackets.cpp +++ b/src/server/game/Server/Packets/TransmogrificationPackets.cpp @@ -41,8 +41,8 @@ WorldPacket const* WorldPackets::Transmogrification::TransmogCollectionUpdate::W _worldPacket.WriteBit(IsFullUpdate); _worldPacket.WriteBit(IsSetFavorite); _worldPacket << uint32(FavoriteAppearances.size()); - for (uint32 itemModifiedAppearanceId : FavoriteAppearances) - _worldPacket << uint32(itemModifiedAppearanceId); + if (!FavoriteAppearances.empty()) + _worldPacket.append(FavoriteAppearances.data(), FavoriteAppearances.size()); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/WhoPackets.cpp b/src/server/game/Server/Packets/WhoPackets.cpp index afc6c3bdd28..9cfbc04e488 100644 --- a/src/server/game/Server/Packets/WhoPackets.cpp +++ b/src/server/game/Server/Packets/WhoPackets.cpp @@ -117,8 +117,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Who::WhoResponse const& r data.WriteBits(response.Entries.size(), 6); data.FlushBits(); - for (size_t i = 0; i < response.Entries.size(); ++i) - data << response.Entries[i]; + for (WorldPackets::Who::WhoEntry const& whoEntry : response.Entries) + data << whoEntry; return data; } diff --git a/src/server/game/Server/Packets/WorldStatePackets.cpp b/src/server/game/Server/Packets/WorldStatePackets.cpp index 0c202978de8..8129e2e8af0 100644 --- a/src/server/game/Server/Packets/WorldStatePackets.cpp +++ b/src/server/game/Server/Packets/WorldStatePackets.cpp @@ -24,14 +24,14 @@ WorldPacket const* WorldPackets::WorldState::InitWorldStates::Write() { _worldPacket.reserve(16 + Worldstates.size() * 8); - _worldPacket << uint32(MapID); - _worldPacket << uint32(AreaID); - _worldPacket << uint32(SubareaID); + _worldPacket << int32(MapID); + _worldPacket << int32(AreaID); + _worldPacket << int32(SubareaID); _worldPacket << uint32(Worldstates.size()); for (WorldStateInfo const& wsi : Worldstates) { - _worldPacket << uint32(wsi.VariableID); + _worldPacket << int32(wsi.VariableID); _worldPacket << int32(wsi.Value); } diff --git a/src/server/game/Server/Packets/WorldStatePackets.h b/src/server/game/Server/Packets/WorldStatePackets.h index ba7aa8fe282..766725fcf66 100644 --- a/src/server/game/Server/Packets/WorldStatePackets.h +++ b/src/server/game/Server/Packets/WorldStatePackets.h @@ -29,10 +29,10 @@ namespace WorldPackets public: struct WorldStateInfo { - WorldStateInfo(uint32 variableID, int32 value) + WorldStateInfo(int32 variableID, int32 value) : VariableID(variableID), Value(value) { } - uint32 VariableID; + int32 VariableID; int32 Value; }; @@ -40,9 +40,9 @@ namespace WorldPackets WorldPacket const* Write() override; - uint32 AreaID = 0; ///< ZoneId - uint32 SubareaID = 0; ///< AreaId - uint32 MapID = 0; ///< MapId + int32 AreaID = 0; ///< ZoneId + int32 SubareaID = 0; ///< AreaId + int32 MapID = 0; ///< MapId std::vector<WorldStateInfo> Worldstates; }; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 448b277aa16..2f75b82ec74 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -156,14 +156,12 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_ADD_TOY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddToy); DEFINE_HANDLER(CMSG_ADVENTURE_JOURNAL_OPEN_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ADVENTURE_JOURNAL_START_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_ADVENTURE_MAP_POI_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ALTER_APPEARANCE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAlterAppearance); DEFINE_HANDLER(CMSG_AREA_SPIRIT_HEALER_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaSpiritHealerQueryOpcode); DEFINE_HANDLER(CMSG_AREA_SPIRIT_HEALER_QUEUE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaSpiritHealerQueueOpcode); DEFINE_HANDLER(CMSG_AREA_TRIGGER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaTriggerOpcode); DEFINE_HANDLER(CMSG_ARTIFACT_ADD_POWER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleArtifactAddPower); - DEFINE_HANDLER(CMSG_ARTIFACT_ADD_RELIC_TALENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_ARTIFACT_ATTUNE_PREVIEW_RELIC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_ARTIFACT_ATTUNE_SOCKETED_RELIC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ARTIFACT_SET_APPEARANCE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleArtifactSetAppearance); DEFINE_HANDLER(CMSG_ATTACK_STOP, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackStopOpcode); DEFINE_HANDLER(CMSG_ATTACK_SWING, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackSwingOpcode); @@ -185,6 +183,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemOpcode); DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemSlotOpcode); DEFINE_HANDLER(CMSG_AUTO_STORE_BAG_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBagItemOpcode); + DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_VIEWED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBankerActivateOpcode); DEFINE_HANDLER(CMSG_BATTLEFIELD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldLeaveOpcode); DEFINE_HANDLER(CMSG_BATTLEFIELD_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldListOpcode); @@ -198,10 +198,12 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BATTLENET_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetRequest); DEFINE_HANDLER(CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetRequestRealmListTicket); DEFINE_HANDLER(CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_GET_PRODUCT_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_GET_PURCHASE_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BATTLE_PAY_OPEN_CHECKOUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -211,6 +213,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BATTLE_PAY_START_VAS_PURCHASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PET_CLEAR_FANFARE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PET_DELETE_PET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlePetDeletePet); DEFINE_HANDLER(CMSG_BATTLE_PET_DELETE_PET_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -230,6 +233,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BLACK_MARKET_BID_ON_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBlackMarketBidOnItem); DEFINE_HANDLER(CMSG_BLACK_MARKET_OPEN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBlackMarketOpen); DEFINE_HANDLER(CMSG_BLACK_MARKET_REQUEST_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBlackMarketRequestItems); + DEFINE_HANDLER(CMSG_BONUS_ROLL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BUG_REPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBugReportOpcode); DEFINE_HANDLER(CMSG_BUSY_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBusyTradeOpcode); DEFINE_HANDLER(CMSG_BUY_BACK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuybackItem); @@ -240,6 +244,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BUY_WOW_TOKEN_START, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CAGE_BATTLE_PET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCageBattlePet); DEFINE_HANDLER(CMSG_CALENDAR_ADD_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarAddEvent); + DEFINE_HANDLER(CMSG_CALENDAR_COMMUNITY_FILTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarCommunityFilter); DEFINE_HANDLER(CMSG_CALENDAR_COMPLAIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarComplain); DEFINE_HANDLER(CMSG_CALENDAR_COPY_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarCopyEvent); DEFINE_HANDLER(CMSG_CALENDAR_EVENT_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarEventInvite); @@ -250,7 +255,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CALENDAR_GET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarGetCalendar); DEFINE_HANDLER(CMSG_CALENDAR_GET_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarGetEvent); DEFINE_HANDLER(CMSG_CALENDAR_GET_NUM_PENDING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarGetNumPending); - DEFINE_HANDLER(CMSG_CALENDAR_GUILD_FILTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarGuildFilter); DEFINE_HANDLER(CMSG_CALENDAR_REMOVE_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarRemoveEvent); DEFINE_HANDLER(CMSG_CALENDAR_REMOVE_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarEventRemoveInvite); DEFINE_HANDLER(CMSG_CALENDAR_UPDATE_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarUpdateEvent); @@ -271,19 +275,15 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_LEADERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHANGE_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CHANGE_BANK_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHANGE_MONUMENT_APPEARANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHANGE_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSubGroupOpcode); DEFINE_HANDLER(CMSG_CHARACTER_RENAME_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharRenameOpcode); DEFINE_HANDLER(CMSG_CHAR_CUSTOMIZE, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharCustomizeOpcode); DEFINE_HANDLER(CMSG_CHAR_DELETE, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharDeleteOpcode); DEFINE_HANDLER(CMSG_CHAR_RACE_OR_FACTION_CHANGE, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharRaceOrFactionChangeOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageChannelOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_OFFICER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageWhisperOpcode); + DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); + DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_TARGETED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageTargetedOpcode); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_ANNOUNCEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_BAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_DECLINE_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); @@ -291,16 +291,13 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CHAT_CHANNEL_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_KICK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); - DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); - DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MUTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_PASSWORD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPassword); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_SET_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_SILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNBAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); - DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMUTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNSILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_JOIN_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleJoinChannel); DEFINE_HANDLER(CMSG_CHAT_LEAVE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveChannel); @@ -328,6 +325,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CLEAR_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleClearTradeItemOpcode); DEFINE_HANDLER(CMSG_CLIENT_PORT_GRAVEYARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePortGraveyard); DEFINE_HANDLER(CMSG_CLOSE_INTERACTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCloseInteraction); + DEFINE_HANDLER(CMSG_CLOSE_QUEST_CHOICE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLUB_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COLLECTION_ITEM_SET_FAVORITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCollectionItemSetFavorite); DEFINE_HANDLER(CMSG_COMMENTATOR_ENABLE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COMMENTATOR_ENTER_INSTANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -380,6 +379,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_ENUM_CHARACTERS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharEnumOpcode); DEFINE_HANDLER(CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharUndeleteEnumOpcode); DEFINE_HANDLER(CMSG_FAR_SIGHT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleFarSightOpcode); + DEFINE_HANDLER(CMSG_GAME_EVENT_DEBUG_DISABLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_GAME_EVENT_DEBUG_ENABLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GAME_OBJ_REPORT_USE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGameobjectReportUse); DEFINE_HANDLER(CMSG_GAME_OBJ_USE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGameObjectUseOpcode); DEFINE_HANDLER(CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -407,6 +408,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_GARRISON_START_MISSION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_SWAP_BUILDINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GENERATE_RANDOM_CHARACTER_NAME, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomizeCharNameOpcode); + DEFINE_HANDLER(CMSG_GET_ACCOUNT_CHARACTER_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GET_CHALLENGE_MODE_REWARDS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GET_GARRISON_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetGarrisonInfo); DEFINE_HANDLER(CMSG_GET_ITEM_PURCHASE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetItemPurchaseData); @@ -431,7 +433,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_GUILD_BANK_QUERY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankQueryTab); DEFINE_HANDLER(CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankMoneyWithdrawn); DEFINE_HANDLER(CMSG_GUILD_BANK_SET_TAB_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankSetTabText); - DEFINE_HANDLER(CMSG_GUILD_BANK_SWAP_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankSwapItems); DEFINE_HANDLER(CMSG_GUILD_BANK_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankTextQuery); DEFINE_HANDLER(CMSG_GUILD_BANK_UPDATE_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankUpdateTab); DEFINE_HANDLER(CMSG_GUILD_BANK_WITHDRAW_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankWithdrawMoney); @@ -473,6 +474,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_INSPECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectOpcode); DEFINE_HANDLER(CMSG_INSPECT_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectPVP); DEFINE_HANDLER(CMSG_INSTANCE_LOCK_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInstanceLockResponse); + DEFINE_HANDLER(CMSG_ISLAND_QUEUE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ITEM_PURCHASE_REFUND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleItemRefund); DEFINE_HANDLER(CMSG_ITEM_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleItemTextQuery); DEFINE_HANDLER(CMSG_JOIN_PET_BATTLE_QUEUE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -544,6 +546,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck); DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck); + DEFINE_HANDLER(CMSG_MOVE_FORCE_MOVEMENT_FORCE_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck); DEFINE_HANDLER(CMSG_MOVE_FORCE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck); @@ -634,8 +637,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_PROTOCOL_MISMATCH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PUSH_QUEST_TO_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePushQuestToParty); DEFINE_HANDLER(CMSG_PVP_LOG_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePVPLogDataOpcode); - DEFINE_HANDLER(CMSG_PVP_PRESTIGE_RANK_UP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePvpPrestigeRankUp); DEFINE_HANDLER(CMSG_QUERY_BATTLE_PET_NAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_QUERY_COMMUNITY_NAME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryCorpseLocation); DEFINE_HANDLER(CMSG_QUERY_CORPSE_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryCorpseTransport); DEFINE_HANDLER(CMSG_QUERY_COUNTDOWN_TIMER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -652,10 +655,10 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_QUERY_PLAYER_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNameQueryOpcode); DEFINE_HANDLER(CMSG_QUERY_QUEST_COMPLETION_NPCS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryQuestCompletionNPCs); DEFINE_HANDLER(CMSG_QUERY_QUEST_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestQueryOpcode); - DEFINE_HANDLER(CMSG_QUERY_QUEST_REWARDS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_REALM_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryRealmName); DEFINE_HANDLER(CMSG_QUERY_SCENARIO_POI, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryScenarioPOI); DEFINE_HANDLER(CMSG_QUERY_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryTimeOpcode); + DEFINE_HANDLER(CMSG_QUERY_TREASURE_PICKER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_VOID_STORAGE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleVoidStorageQuery); DEFINE_HANDLER(CMSG_QUEST_CONFIRM_ACCEPT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestConfirmAccept); DEFINE_HANDLER(CMSG_QUEST_GIVER_ACCEPT_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestgiverAcceptQuestOpcode); @@ -696,6 +699,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_REQUEST_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestBattlefieldStatusOpcode); DEFINE_HANDLER(CMSG_REQUEST_CATEGORY_COOLDOWNS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCategoryCooldowns); DEFINE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCemeteryList); + DEFINE_HANDLER(CMSG_REQUEST_CHALLENGE_MODE_AFFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_CROWD_CONTROL_SPELL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -748,7 +752,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetAssistantLeaderOpcode); DEFINE_HANDLER(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_BANK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_SET_BANK_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_CONTACT_NOTES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetContactNotesOpcode); DEFINE_HANDLER(CMSG_SET_CURRENCY_FLAGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_DIFFICULTY_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -757,6 +760,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_FACTION_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionAtWar); DEFINE_HANDLER(CMSG_SET_FACTION_INACTIVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionInactiveOpcode); DEFINE_HANDLER(CMSG_SET_FACTION_NOT_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionNotAtWar); + DEFINE_HANDLER(CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_LFG_BONUS_FACTION_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_LOOT_METHOD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetLootMethodOpcode); @@ -779,6 +783,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_TRADE_GOLD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetTradeGoldOpcode); DEFINE_HANDLER(CMSG_SET_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetTradeItemOpcode); DEFINE_HANDLER(CMSG_SET_USING_PARTY_GARRISON, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_SET_WAR_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_WATCHED_FACTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetWatchedFactionOpcode); DEFINE_HANDLER(CMSG_SHOW_TRADE_SKILL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SIGN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSignPetition); @@ -850,6 +855,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_USE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUseItemOpcode); DEFINE_HANDLER(CMSG_USE_TOY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUseToy); DEFINE_HANDLER(CMSG_VIOLENCE_LEVEL, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleViolenceLevel); + DEFINE_HANDLER(CMSG_VOICE_CHAT_JOIN_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_VOICE_CHAT_LOGIN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VOID_STORAGE_TRANSFER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleVoidStorageTransfer); DEFINE_HANDLER(CMSG_WARDEN_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleWardenData); DEFINE_HANDLER(CMSG_WHO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleWhoOpcode); @@ -878,6 +885,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_LOSS_OF_CONTROL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_RUNE_POWER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADJUST_SPLINE_DURATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADVENTURE_MAP_POI_QUERY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AE_LOOT_TARGETS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AE_LOOT_TARGET_ACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AI_REACTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -890,12 +898,11 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_DENIED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_NO_CORPSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_SHAPE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_SHAPE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_CROWD_CONTROL_SPELLS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_FORGE_OPENED, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_KNOWLEDGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_RESPEC_CONFIRM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_TRAITS_REFUNDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_XP_GAIN, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -920,6 +927,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_CHALLENGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AVAILABLE_HOTFIXES, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_XP_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BAN_REASON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BARBER_SHOP_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -942,6 +951,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_REALM_LIST_TICKET, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_SET_SESSION_STATE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_UPDATE_SESSION_KEY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_ACK_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_CONFIRM_PURCHASE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -952,6 +962,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_MOUNT_DELIVERED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_OPEN_CHECKOUT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_PURCHASE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -991,11 +1002,13 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_WON, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BONUS_ROLL_EMPTY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BONUS_ROLL_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BOSS_KILL_CREDIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BREAK_TARGET, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BROADCAST_ACHIEVEMENT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BUY_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BUY_SUCCEEDED, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CACHE_INFO, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CACHE_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CACHE_VERSION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CALENDAR_CLEAR_PENDING_ACTION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CALENDAR_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1027,10 +1040,11 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAN_DUEL_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CATEGORY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_AFFIXES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_ALL_MAP_STATS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_MAP_STATS_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_NEW_PLAYER_SEASON_RECORD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REWARDS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1085,6 +1099,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONNECT_TO, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONSOLE_WRITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONTRIBUTION_COLLECTOR_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONTACT_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONTROL_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COOLDOWN_CHEAT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1121,6 +1136,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_COUNTDOWN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_IN_BOUNDS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_OPPONENT_SELECTED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_OUT_OF_BOUNDS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_REQUESTED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_WINNER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1148,9 +1164,11 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_ANIM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_OBJECT_RELINK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FRIEND_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_EVENT_DEBUG_INITIALIZE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_CUSTOM_ANIM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_DESPAWN, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_MULTI_TRANSITION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_RESET_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1170,6 +1188,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_COMPLETE_MISSION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CREATE_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_DELETE_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CATEGORIES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_ABILITIES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_DURABILITY, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); @@ -1218,6 +1237,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_POI, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_TEXT_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_ACTION_THROTTLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DECLINE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DESTROYED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1306,6 +1326,9 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALID_PROMOTION_CODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_CHANGE_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLAND_AZERITE_XP_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLAND_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLAND_OPEN_QUEUE_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_IS_QUEST_COMPLETE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1349,6 +1372,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_COMMAND_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_POST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_RECRUITS, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIGHTNING_STORM_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIGHTNING_STORM_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_CHARACTER_COPY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1362,6 +1387,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOG_XP_GAIN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ALL_PASSED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_LEGACY_RULES_IN_EFFECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_LIST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_MONEY_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_RELEASE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1412,6 +1438,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVERING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_LAND_WALK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_MOVEMENT_FORCE_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_NORMAL_FALL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1462,6 +1489,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_MOVEMENT_FORCE_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1493,7 +1521,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_INVITE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_KILL_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAUSE_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PENDING_RAID_LOCK, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1552,7 +1580,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_TIME_WARNING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PONG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_POWER_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRESTIGE_AND_HONOR_INVOLUNTARILY_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRE_RESSURECT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRINT_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROC_RESIST, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1563,6 +1590,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_SEASON, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_COMMUNITY_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_CREATURE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GAME_OBJECT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1574,8 +1602,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PET_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PLAYER_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUEST_INFO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUEST_REWARD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TREASURE_PICKER_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_COMPLETION_NPC_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_FORCE_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1629,7 +1657,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_PVP_BRAWL_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_PVP_REWARDS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESEARCH_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_AREA_TRIGGER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_COMPRESSION_CONTEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_FAILED_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_RANGED_COMBAT_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1668,7 +1695,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_HISTORY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_UNLEARN_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_FIRST_ACHIEVEMENT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_FIRST_ACHIEVEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1809,6 +1835,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_FINISH, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARFRONT_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEATHER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index c39cd5ca314..9164e453ad7 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -46,38 +46,36 @@ enum OpcodeMisc : uint16 enum OpcodeClient : uint16 { CMSG_ACCEPT_GUILD_INVITE = 0x35FC, - CMSG_ACCEPT_LEVEL_GRANT = 0x34FD, + CMSG_ACCEPT_LEVEL_GRANT = 0x34FA, CMSG_ACCEPT_TRADE = 0x315A, CMSG_ACCEPT_WARGAME_INVITE = 0x35E0, - CMSG_ACTIVATE_TAXI = 0x34AE, + CMSG_ACTIVATE_TAXI = 0x34AB, CMSG_ADDON_LIST = 0x35D8, CMSG_ADD_BATTLENET_FRIEND = 0x365A, - CMSG_ADD_FRIEND = 0x36CF, - CMSG_ADD_IGNORE = 0x36D3, - CMSG_ADD_TOY = 0x328B, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x31F9, - CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x332E, - CMSG_ALTER_APPEARANCE = 0x34F9, - CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B3, - CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B4, - CMSG_AREA_TRIGGER = 0x31CD, - CMSG_ARTIFACT_ADD_POWER = 0x31A5, - CMSG_ARTIFACT_ADD_RELIC_TALENT = 0x31A8, - CMSG_ARTIFACT_ATTUNE_PREVIEW_RELIC = 0x31A9, - CMSG_ARTIFACT_ATTUNE_SOCKETED_RELIC = 0x31AA, - CMSG_ARTIFACT_SET_APPEARANCE = 0x31A7, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3200, - CMSG_ATTACK_STOP = 0x324D, - CMSG_ATTACK_SWING = 0x324C, - CMSG_AUCTION_HELLO_REQUEST = 0x34CF, - CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x34D5, - CMSG_AUCTION_LIST_ITEMS = 0x34D2, - CMSG_AUCTION_LIST_OWNER_ITEMS = 0x34D4, - CMSG_AUCTION_LIST_PENDING_SALES = 0x34D7, - CMSG_AUCTION_PLACE_BID = 0x34D6, - CMSG_AUCTION_REMOVE_ITEM = 0x34D1, - CMSG_AUCTION_REPLICATE_ITEMS = 0x34D3, - CMSG_AUCTION_SELL_ITEM = 0x34D0, + CMSG_ADD_FRIEND = 0x36D0, + CMSG_ADD_IGNORE = 0x36D4, + CMSG_ADD_TOY = 0x3298, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3201, + CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x333D, + CMSG_ADVENTURE_MAP_POI_QUERY = 0x3244, + CMSG_ALTER_APPEARANCE = 0x34F6, + CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B0, + CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B1, + CMSG_AREA_TRIGGER = 0x31D5, + CMSG_ARTIFACT_ADD_POWER = 0x31A9, + CMSG_ARTIFACT_SET_APPEARANCE = 0x31AB, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3209, + CMSG_ATTACK_STOP = 0x3256, + CMSG_ATTACK_SWING = 0x3255, + CMSG_AUCTION_HELLO_REQUEST = 0x34CB, + CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x34D1, + CMSG_AUCTION_LIST_ITEMS = 0x34CE, + CMSG_AUCTION_LIST_OWNER_ITEMS = 0x34D0, + CMSG_AUCTION_LIST_PENDING_SALES = 0x34D3, + CMSG_AUCTION_PLACE_BID = 0x34D2, + CMSG_AUCTION_REMOVE_ITEM = 0x34CD, + CMSG_AUCTION_REPLICATE_ITEMS = 0x34CF, + CMSG_AUCTION_SELL_ITEM = 0x34CC, CMSG_AUTH_CONTINUED_SESSION = 0x3766, CMSG_AUTH_SESSION = 0x3765, CMSG_AUTOBANK_ITEM = 0x3996, @@ -87,32 +85,37 @@ enum OpcodeClient : uint16 CMSG_AUTO_EQUIP_ITEM = 0x399A, CMSG_AUTO_EQUIP_ITEM_SLOT = 0x399F, CMSG_AUTO_STORE_BAG_ITEM = 0x399B, - CMSG_BANKER_ACTIVATE = 0x34B6, - CMSG_BATTLEFIELD_LEAVE = 0x3171, - CMSG_BATTLEFIELD_LIST = 0x317D, - CMSG_BATTLEFIELD_PORT = 0x3529, - CMSG_BATTLEMASTER_HELLO = 0x32A1, - CMSG_BATTLEMASTER_JOIN = 0x3524, - CMSG_BATTLEMASTER_JOIN_ARENA = 0x3525, - CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3527, - CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3526, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D2, - CMSG_BATTLENET_REQUEST = 0x36F6, - CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36F7, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CA, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C9, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C0, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BA, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BB, - CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C3, - CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C1, - CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x3708, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3707, - CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x3709, - CMSG_BATTLE_PAY_START_PURCHASE = 0x36F2, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F3, - CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C2, - CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x370A, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x335B, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3347, + CMSG_BANKER_ACTIVATE = 0x34B3, + CMSG_BATTLEFIELD_LEAVE = 0x3172, + CMSG_BATTLEFIELD_LIST = 0x317E, + CMSG_BATTLEFIELD_PORT = 0x3527, + CMSG_BATTLEMASTER_HELLO = 0x32B0, + CMSG_BATTLEMASTER_JOIN = 0x3522, + CMSG_BATTLEMASTER_JOIN_ARENA = 0x3523, + CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3525, + CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3524, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D3, + CMSG_BATTLENET_REQUEST = 0x36F7, + CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36FB, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CB, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3716, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CA, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C1, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BB, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BC, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370F, + CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C4, + CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C2, + CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x370C, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x370B, + CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x370D, + CMSG_BATTLE_PAY_START_PURCHASE = 0x36F3, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F4, + CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C3, + CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x370E, + CMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x36F2, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x312C, CMSG_BATTLE_PET_DELETE_PET = 0x3624, CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3625, @@ -122,23 +125,25 @@ enum OpcodeClient : uint16 CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362B, CMSG_BATTLE_PET_SET_FLAGS = 0x362F, CMSG_BATTLE_PET_SUMMON = 0x3628, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31D7, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31D6, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31DF, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31DE, CMSG_BEGIN_TRADE = 0x3157, - CMSG_BINDER_ACTIVATE = 0x34B5, - CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3531, - CMSG_BLACK_MARKET_OPEN = 0x352F, - CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3530, + CMSG_BINDER_ACTIVATE = 0x34B2, + CMSG_BLACK_MARKET_BID_ON_ITEM = 0x352F, + CMSG_BLACK_MARKET_OPEN = 0x352D, + CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x352E, + CMSG_BONUS_ROLL = 0x335C, CMSG_BUG_REPORT = 0x3686, CMSG_BUSY_TRADE = 0x3158, - CMSG_BUY_BACK_ITEM = 0x34A7, - CMSG_BUY_BANK_SLOT = 0x34B7, - CMSG_BUY_ITEM = 0x34A6, - CMSG_BUY_REAGENT_BANK = 0x34B8, - CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36EB, - CMSG_BUY_WOW_TOKEN_START = 0x36EA, - CMSG_CAGE_BATTLE_PET = 0x31E8, + CMSG_BUY_BACK_ITEM = 0x34A4, + CMSG_BUY_BANK_SLOT = 0x34B4, + CMSG_BUY_ITEM = 0x34A3, + CMSG_BUY_REAGENT_BANK = 0x34B5, + CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36EC, + CMSG_BUY_WOW_TOKEN_START = 0x36EB, + CMSG_CAGE_BATTLE_PET = 0x31F0, CMSG_CALENDAR_ADD_EVENT = 0x367D, + CMSG_CALENDAR_COMMUNITY_FILTER = 0x3671, CMSG_CALENDAR_COMPLAIN = 0x3679, CMSG_CALENDAR_COPY_EVENT = 0x3678, CMSG_CALENDAR_EVENT_INVITE = 0x3672, @@ -149,84 +154,78 @@ enum OpcodeClient : uint16 CMSG_CALENDAR_GET = 0x366F, CMSG_CALENDAR_GET_EVENT = 0x3670, CMSG_CALENDAR_GET_NUM_PENDING = 0x367A, - CMSG_CALENDAR_GUILD_FILTER = 0x3671, CMSG_CALENDAR_REMOVE_EVENT = 0x3677, CMSG_CALENDAR_REMOVE_INVITE = 0x3673, CMSG_CALENDAR_UPDATE_EVENT = 0x367E, - CMSG_CANCEL_AURA = 0x31AC, - CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34EB, - CMSG_CANCEL_CAST = 0x3291, - CMSG_CANCEL_CHANNELLING = 0x325C, - CMSG_CANCEL_GROWTH_AURA = 0x3261, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3208, - CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AB, - CMSG_CANCEL_MOUNT_AURA = 0x3272, - CMSG_CANCEL_QUEUED_SPELL = 0x317E, - CMSG_CANCEL_TEMP_ENCHANTMENT = 0x34F6, + CMSG_CANCEL_AURA = 0x31AD, + CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34E8, + CMSG_CANCEL_CAST = 0x329E, + CMSG_CANCEL_CHANNELLING = 0x326A, + CMSG_CANCEL_GROWTH_AURA = 0x326F, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3211, + CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AC, + CMSG_CANCEL_MOUNT_AURA = 0x3280, + CMSG_CANCEL_QUEUED_SPELL = 0x317F, + CMSG_CANCEL_TEMP_ENCHANTMENT = 0x34F3, CMSG_CANCEL_TRADE = 0x315C, CMSG_CAN_DUEL = 0x3662, - CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x3706, - CMSG_CAST_SPELL = 0x328E, + CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x370A, + CMSG_CAST_SPELL = 0x329B, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x308F, CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS = 0x308E, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x3312, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x32F4, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x3321, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3322, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3303, CMSG_CHANGE_SUB_GROUP = 0x364C, - CMSG_CHARACTER_RENAME_REQUEST = 0x36BE, - CMSG_CHAR_CUSTOMIZE = 0x368E, - CMSG_CHAR_DELETE = 0x369B, - CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3694, - CMSG_CHAT_ADDON_MESSAGE_CHANNEL = 0x37D0, - CMSG_CHAT_ADDON_MESSAGE_GUILD = 0x37D4, - CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT = 0x37F3, - CMSG_CHAT_ADDON_MESSAGE_OFFICER = 0x37D6, - CMSG_CHAT_ADDON_MESSAGE_PARTY = 0x37EF, - CMSG_CHAT_ADDON_MESSAGE_RAID = 0x37F1, - CMSG_CHAT_ADDON_MESSAGE_WHISPER = 0x37D2, - CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E7, - CMSG_CHAT_CHANNEL_BAN = 0x37E5, - CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x37EA, - CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x37DA, - CMSG_CHAT_CHANNEL_INVITE = 0x37E3, - CMSG_CHAT_CHANNEL_KICK = 0x37E4, - CMSG_CHAT_CHANNEL_LIST = 0x37D9, - CMSG_CHAT_CHANNEL_MODERATE = 0x37DE, - CMSG_CHAT_CHANNEL_MODERATOR = 0x37DF, - CMSG_CHAT_CHANNEL_MUTE = 0x37E1, - CMSG_CHAT_CHANNEL_OWNER = 0x37DD, - CMSG_CHAT_CHANNEL_PASSWORD = 0x37DB, - CMSG_CHAT_CHANNEL_SET_OWNER = 0x37DC, - CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x37E8, - CMSG_CHAT_CHANNEL_UNBAN = 0x37E6, - CMSG_CHAT_CHANNEL_UNMODERATOR = 0x37E0, - CMSG_CHAT_CHANNEL_UNMUTE = 0x37E2, - CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x37E9, + CMSG_CHARACTER_RENAME_REQUEST = 0x36BF, + CMSG_CHAR_CUSTOMIZE = 0x368F, + CMSG_CHAR_DELETE = 0x369C, + CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3695, + CMSG_CHAT_ADDON_MESSAGE = 0x37EE, + CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x37EF, + CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E3, + CMSG_CHAT_CHANNEL_BAN = 0x37E1, + CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x37E6, + CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x37D6, + CMSG_CHAT_CHANNEL_INVITE = 0x37DF, + CMSG_CHAT_CHANNEL_KICK = 0x37E0, + CMSG_CHAT_CHANNEL_LIST = 0x37D5, + CMSG_CHAT_CHANNEL_MODERATOR = 0x37DB, + CMSG_CHAT_CHANNEL_OWNER = 0x37D9, + CMSG_CHAT_CHANNEL_PASSWORD = 0x37D7, + CMSG_CHAT_CHANNEL_SET_OWNER = 0x37D8, + CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x37E4, + CMSG_CHAT_CHANNEL_UNBAN = 0x37E2, + CMSG_CHAT_CHANNEL_UNMODERATOR = 0x37DC, + CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x37E5, CMSG_CHAT_JOIN_CHANNEL = 0x37C8, CMSG_CHAT_LEAVE_CHANNEL = 0x37C9, - CMSG_CHAT_MESSAGE_AFK = 0x37D7, + CMSG_CHAT_MESSAGE_AFK = 0x37D3, CMSG_CHAT_MESSAGE_CHANNEL = 0x37CF, - CMSG_CHAT_MESSAGE_DND = 0x37D8, - CMSG_CHAT_MESSAGE_EMOTE = 0x37EC, - CMSG_CHAT_MESSAGE_GUILD = 0x37D3, - CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x37F2, - CMSG_CHAT_MESSAGE_OFFICER = 0x37D5, - CMSG_CHAT_MESSAGE_PARTY = 0x37EE, - CMSG_CHAT_MESSAGE_RAID = 0x37F0, - CMSG_CHAT_MESSAGE_RAID_WARNING = 0x37F4, - CMSG_CHAT_MESSAGE_SAY = 0x37EB, - CMSG_CHAT_MESSAGE_WHISPER = 0x37D1, - CMSG_CHAT_MESSAGE_YELL = 0x37ED, + CMSG_CHAT_MESSAGE_DND = 0x37D4, + CMSG_CHAT_MESSAGE_EMOTE = 0x37E8, + CMSG_CHAT_MESSAGE_GUILD = 0x37D1, + CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x37EC, + CMSG_CHAT_MESSAGE_OFFICER = 0x37D2, + CMSG_CHAT_MESSAGE_PARTY = 0x37EA, + CMSG_CHAT_MESSAGE_RAID = 0x37EB, + CMSG_CHAT_MESSAGE_RAID_WARNING = 0x37ED, + CMSG_CHAT_MESSAGE_SAY = 0x37E7, + CMSG_CHAT_MESSAGE_WHISPER = 0x37D0, + CMSG_CHAT_MESSAGE_YELL = 0x37E9, CMSG_CHAT_REGISTER_ADDON_PREFIXES = 0x37CD, CMSG_CHAT_REPORT_FILTERED = 0x37CC, CMSG_CHAT_REPORT_IGNORED = 0x37CB, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE, - CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36CB, - CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36E9, - CMSG_CHOICE_RESPONSE = 0x3293, - CMSG_CLEAR_RAID_MARKER = 0x31A1, + CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36CC, + CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EA, + CMSG_CHOICE_RESPONSE = 0x32A0, + CMSG_CLEAR_RAID_MARKER = 0x31A5, CMSG_CLEAR_TRADE_ITEM = 0x315E, - CMSG_CLIENT_PORT_GRAVEYARD = 0x352B, - CMSG_CLOSE_INTERACTION = 0x3496, + CMSG_CLIENT_PORT_GRAVEYARD = 0x3529, + CMSG_CLOSE_INTERACTION = 0x3493, + CMSG_CLOSE_QUEST_CHOICE = 0x32A1, + CMSG_CLUB_INVITE = 0x36FA, CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3632, CMSG_COMMENTATOR_ENABLE = 0x35F0, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4, @@ -236,26 +235,26 @@ enum OpcodeClient : uint16 CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2, CMSG_COMMENTATOR_START_WARGAME = 0x35EF, CMSG_COMPLAINT = 0x366C, - CMSG_COMPLETE_CINEMATIC = 0x3549, - CMSG_COMPLETE_MOVIE = 0x34E1, - CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31A6, - CMSG_CONFIRM_RESPEC_WIPE = 0x3202, + CMSG_COMPLETE_CINEMATIC = 0x3547, + CMSG_COMPLETE_MOVIE = 0x34DE, + CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AA, + CMSG_CONFIRM_RESPEC_WIPE = 0x320B, CMSG_CONNECT_TO_FAILED = 0x35D4, - CMSG_CONTRIBUTION_CONTRIBUTE = 0x3558, - CMSG_CONTRIBUTION_GET_STATE = 0x3559, - CMSG_CONVERSATION_LINE_STARTED = 0x354A, - CMSG_CONVERT_CONSUMPTION_TIME = 0x36F9, + CMSG_CONTRIBUTION_CONTRIBUTE = 0x3557, + CMSG_CONTRIBUTION_GET_STATE = 0x3558, + CMSG_CONVERSATION_LINE_STARTED = 0x3548, + CMSG_CONVERT_CONSUMPTION_TIME = 0x36FD, CMSG_CONVERT_RAID = 0x364E, CMSG_CREATE_CHARACTER = 0x3643, - CMSG_CREATE_SHIPMENT = 0x32E0, + CMSG_CREATE_SHIPMENT = 0x32EF, CMSG_DB_QUERY_BULK = 0x35E4, - CMSG_DECLINE_GUILD_INVITES = 0x3522, - CMSG_DECLINE_PETITION = 0x3538, - CMSG_DELETE_EQUIPMENT_SET = 0x3510, - CMSG_DEL_FRIEND = 0x36D0, - CMSG_DEL_IGNORE = 0x36D4, - CMSG_DEPOSIT_REAGENT_BANK = 0x331B, - CMSG_DESTROY_ITEM = 0x3285, + CMSG_DECLINE_GUILD_INVITES = 0x3520, + CMSG_DECLINE_PETITION = 0x3536, + CMSG_DELETE_EQUIPMENT_SET = 0x350D, + CMSG_DEL_FRIEND = 0x36D1, + CMSG_DEL_IGNORE = 0x36D5, + CMSG_DEPOSIT_REAGENT_BANK = 0x332A, + CMSG_DESTROY_ITEM = 0x3292, CMSG_DF_BOOT_PLAYER_VOTE = 0x3615, CMSG_DF_GET_JOIN_STATUS = 0x3613, CMSG_DF_GET_SYSTEM_INFO = 0x3612, @@ -266,74 +265,76 @@ enum OpcodeClient : uint16 CMSG_DF_SET_ROLES = 0x3614, CMSG_DF_TELEPORT = 0x3616, CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A3C, - CMSG_DISMISS_CRITTER = 0x34FF, - CMSG_DO_MASTER_LOOT_ROLL = 0x3207, + CMSG_DISMISS_CRITTER = 0x34FC, + CMSG_DO_MASTER_LOOT_ROLL = 0x3210, CMSG_DO_READY_CHECK = 0x3633, - CMSG_DUEL_RESPONSE = 0x34E6, - CMSG_EJECT_PASSENGER = 0x3230, - CMSG_EMOTE = 0x3545, + CMSG_DUEL_RESPONSE = 0x34E3, + CMSG_EJECT_PASSENGER = 0x3239, + CMSG_EMOTE = 0x3543, CMSG_ENABLE_ENCRYPTION_ACK = 0x3767, CMSG_ENABLE_NAGLE = 0x376B, - CMSG_ENABLE_TAXI_NODE = 0x34AC, - CMSG_ENGINE_SURVEY = 0x36E3, + CMSG_ENABLE_TAXI_NODE = 0x34A9, + CMSG_ENGINE_SURVEY = 0x36E4, CMSG_ENUM_CHARACTERS = 0x35E8, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DD, - CMSG_FAR_SIGHT = 0x34EC, - CMSG_GAME_OBJ_REPORT_USE = 0x34F3, - CMSG_GAME_OBJ_USE = 0x34F2, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32CB, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32BC, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x330E, - CMSG_GARRISON_COMPLETE_MISSION = 0x3301, - CMSG_GARRISON_GENERATE_RECRUITS = 0x32CE, - CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32DC, - CMSG_GARRISON_GET_MISSION_REWARD = 0x3334, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3303, - CMSG_GARRISON_PURCHASE_BUILDING = 0x32B8, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32D0, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x32F8, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32CC, - CMSG_GARRISON_RENAME_FOLLOWER = 0x32CD, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32B7, - CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32D5, - CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32DF, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32DE, - CMSG_GARRISON_RESEARCH_TALENT = 0x32D1, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32B9, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32C9, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32C5, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32CF, - CMSG_GARRISON_START_MISSION = 0x3300, - CMSG_GARRISON_SWAP_BUILDINGS = 0x32BD, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DE, + CMSG_FAR_SIGHT = 0x34E9, + CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B0, + CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31AF, + CMSG_GAME_OBJ_REPORT_USE = 0x34F0, + CMSG_GAME_OBJ_USE = 0x34EF, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32DA, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32CB, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x331D, + CMSG_GARRISON_COMPLETE_MISSION = 0x3310, + CMSG_GARRISON_GENERATE_RECRUITS = 0x32DD, + CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32EB, + CMSG_GARRISON_GET_MISSION_REWARD = 0x3341, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3312, + CMSG_GARRISON_PURCHASE_BUILDING = 0x32C7, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32DF, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x3307, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32DB, + CMSG_GARRISON_RENAME_FOLLOWER = 0x32DC, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32C6, + CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32E4, + CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32EE, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32ED, + CMSG_GARRISON_RESEARCH_TALENT = 0x32E0, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32C8, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32D8, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32D4, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32DE, + CMSG_GARRISON_START_MISSION = 0x330F, + CMSG_GARRISON_SWAP_BUILDINGS = 0x32CC, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B7, CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3683, - CMSG_GET_GARRISON_INFO = 0x32B2, - CMSG_GET_ITEM_PURCHASE_DATA = 0x3533, - CMSG_GET_MIRROR_IMAGE_DATA = 0x3289, + CMSG_GET_GARRISON_INFO = 0x32C1, + CMSG_GET_ITEM_PURCHASE_DATA = 0x3531, + CMSG_GET_MIRROR_IMAGE_DATA = 0x3296, CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE, - CMSG_GET_REMAINING_GAME_TIME = 0x36EC, - CMSG_GET_TROPHY_LIST = 0x32F1, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DF, - CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3692, - CMSG_GM_TICKET_GET_CASE_STATUS = 0x3691, - CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3690, - CMSG_GOSSIP_SELECT_OPTION = 0x3497, - CMSG_GRANT_LEVEL = 0x34FB, + CMSG_GET_REMAINING_GAME_TIME = 0x36ED, + CMSG_GET_TROPHY_LIST = 0x3300, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E0, + CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3693, + CMSG_GM_TICKET_GET_CASE_STATUS = 0x3692, + CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3691, + CMSG_GOSSIP_SELECT_OPTION = 0x3494, + CMSG_GRANT_LEVEL = 0x34F8, CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308D, CMSG_GUILD_ADD_RANK = 0x3064, CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x305F, CMSG_GUILD_AUTO_DECLINE_INVITATION = 0x3061, - CMSG_GUILD_BANK_ACTIVATE = 0x34B9, - CMSG_GUILD_BANK_BUY_TAB = 0x34C8, - CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x34CA, + CMSG_GUILD_BANK_ACTIVATE = 0x34B6, + CMSG_GUILD_BANK_BUY_TAB = 0x34C4, + CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x34C6, CMSG_GUILD_BANK_LOG_QUERY = 0x3082, - CMSG_GUILD_BANK_QUERY_TAB = 0x34C7, + CMSG_GUILD_BANK_QUERY_TAB = 0x34C3, CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x3083, CMSG_GUILD_BANK_SET_TAB_TEXT = 0x3086, - CMSG_GUILD_BANK_SWAP_ITEMS = 0x34BA, CMSG_GUILD_BANK_TEXT_QUERY = 0x3087, - CMSG_GUILD_BANK_UPDATE_TAB = 0x34C9, - CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x34CB, + CMSG_GUILD_BANK_UPDATE_TAB = 0x34C5, + CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x34C7, CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x307B, CMSG_GUILD_CHANGE_NAME_REQUEST = 0x307E, CMSG_GUILD_DECLINE_INVITATION = 0x3060, @@ -358,40 +359,41 @@ enum OpcodeClient : uint16 CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3088, CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x306F, CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3070, - CMSG_GUILD_SET_GUILD_MASTER = 0x36C5, + CMSG_GUILD_SET_GUILD_MASTER = 0x36C6, CMSG_GUILD_SET_MEMBER_NOTE = 0x3072, CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3067, CMSG_GUILD_SHIFT_RANK = 0x3066, CMSG_GUILD_UPDATE_INFO_TEXT = 0x3075, CMSG_GUILD_UPDATE_MOTD_TEXT = 0x3074, - CMSG_HEARTH_AND_RESURRECT = 0x350C, + CMSG_HEARTH_AND_RESURRECT = 0x3509, CMSG_HOTFIX_REQUEST = 0x35E5, CMSG_IGNORE_TRADE = 0x3159, CMSG_INITIATE_ROLE_POLL = 0x35DA, CMSG_INITIATE_TRADE = 0x3156, - CMSG_INSPECT = 0x352D, - CMSG_INSPECT_PVP = 0x36A1, - CMSG_INSTANCE_LOCK_RESPONSE = 0x3511, - CMSG_ITEM_PURCHASE_REFUND = 0x3534, - CMSG_ITEM_TEXT_QUERY = 0x330F, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x31D4, - CMSG_JOIN_RATED_BATTLEGROUND = 0x3176, + CMSG_INSPECT = 0x352B, + CMSG_INSPECT_PVP = 0x36A2, + CMSG_INSTANCE_LOCK_RESPONSE = 0x350E, + CMSG_ISLAND_QUEUE = 0x3387, + CMSG_ITEM_PURCHASE_REFUND = 0x3532, + CMSG_ITEM_TEXT_QUERY = 0x331E, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DC, + CMSG_JOIN_RATED_BATTLEGROUND = 0x3177, CMSG_KEEP_ALIVE = 0x367F, - CMSG_KEYBOUND_OVERRIDE = 0x3219, - CMSG_LEARN_PVP_TALENTS = 0x3557, - CMSG_LEARN_TALENTS = 0x3556, + CMSG_KEYBOUND_OVERRIDE = 0x3222, + CMSG_LEARN_PVP_TALENTS = 0x3556, + CMSG_LEARN_TALENTS = 0x3554, CMSG_LEAVE_GROUP = 0x3649, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31D5, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31DD, CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360C, CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360D, CMSG_LFG_LIST_DECLINE_APPLICANT = 0x360E, CMSG_LFG_LIST_GET_STATUS = 0x360A, CMSG_LFG_LIST_INVITE_APPLICANT = 0x360F, CMSG_LFG_LIST_INVITE_RESPONSE = 0x3610, - CMSG_LFG_LIST_JOIN = 0x3345, + CMSG_LFG_LIST_JOIN = 0x3359, CMSG_LFG_LIST_LEAVE = 0x3609, CMSG_LFG_LIST_SEARCH = 0x360B, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x3346, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x335A, CMSG_LF_GUILD_ADD_RECRUIT = 0x361B, CMSG_LF_GUILD_BROWSE = 0x361D, CMSG_LF_GUILD_DECLINE_RECRUIT = 0x3078, @@ -400,37 +402,38 @@ enum OpcodeClient : uint16 CMSG_LF_GUILD_GET_RECRUITS = 0x3077, CMSG_LF_GUILD_REMOVE_RECRUIT = 0x307A, CMSG_LF_GUILD_SET_GUILD_POST = 0x361C, - CMSG_LIST_INVENTORY = 0x34A4, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B9, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B8, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B7, + CMSG_LIST_INVENTORY = 0x34A1, + CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36BA, + CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B9, + CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B8, CMSG_LOADING_SCREEN_NOTIFY = 0x35F8, - CMSG_LOAD_SELECTED_TROPHY = 0x32F2, - CMSG_LOGOUT_CANCEL = 0x34DC, - CMSG_LOGOUT_INSTANT = 0x34DD, - CMSG_LOGOUT_REQUEST = 0x34DB, + CMSG_LOAD_SELECTED_TROPHY = 0x3301, + CMSG_LOGOUT_CANCEL = 0x34D9, + CMSG_LOGOUT_INSTANT = 0x34DA, + CMSG_LOGOUT_REQUEST = 0x34D7, CMSG_LOG_DISCONNECT = 0x3769, CMSG_LOG_STREAMING_ERROR = 0x376D, - CMSG_LOOT_ITEM = 0x3205, - CMSG_LOOT_MONEY = 0x3204, - CMSG_LOOT_RELEASE = 0x3209, - CMSG_LOOT_ROLL = 0x320A, - CMSG_LOOT_UNIT = 0x3203, - CMSG_LOW_LEVEL_RAID1 = 0x369F, - CMSG_LOW_LEVEL_RAID2 = 0x3518, - CMSG_MAIL_CREATE_TEXT_ITEM = 0x353F, - CMSG_MAIL_DELETE = 0x321B, - CMSG_MAIL_GET_LIST = 0x353A, - CMSG_MAIL_MARK_AS_READ = 0x353E, + CMSG_LOOT_ITEM = 0x320E, + CMSG_LOOT_MONEY = 0x320D, + CMSG_LOOT_RELEASE = 0x3212, + CMSG_LOOT_ROLL = 0x3213, + CMSG_LOOT_UNIT = 0x320C, + CMSG_LOW_LEVEL_RAID1 = 0x36A0, + CMSG_LOW_LEVEL_RAID2 = 0x3515, + CMSG_MAIL_CREATE_TEXT_ITEM = 0x353D, + CMSG_MAIL_DELETE = 0x3224, + CMSG_MAIL_GET_LIST = 0x3538, + CMSG_MAIL_MARK_AS_READ = 0x353C, CMSG_MAIL_RETURN_TO_SENDER = 0x3655, - CMSG_MAIL_TAKE_ITEM = 0x353C, - CMSG_MAIL_TAKE_MONEY = 0x353B, - CMSG_MASTER_LOOT_ITEM = 0x3206, + CMSG_MAIL_TAKE_ITEM = 0x353A, + CMSG_MAIL_TAKE_MONEY = 0x3539, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3227, + CMSG_MASTER_LOOT_ITEM = 0x320F, CMSG_MINIMAP_PING = 0x364B, - CMSG_MISSILE_TRAJECTORY_COLLISION = 0x3189, + CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318A, CMSG_MOUNT_CLEAR_FANFARE = 0x312D, CMSG_MOUNT_SET_FAVORITE = 0x3631, - CMSG_MOUNT_SPECIAL_ANIM = 0x3273, + CMSG_MOUNT_SPECIAL_ANIM = 0x3281, CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A12, CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2C, CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A31, @@ -443,6 +446,7 @@ enum OpcodeClient : uint16 CMSG_MOVE_FEATHER_FALL_ACK = 0x3A19, CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2B, CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2A, + CMSG_MOVE_FORCE_MOVEMENT_FORCE_SPEED_CHANGE_ACK = 0x3A3D, CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A2F, CMSG_MOVE_FORCE_ROOT_ACK = 0x3A0B, CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A09, @@ -492,264 +496,268 @@ enum OpcodeClient : uint16 CMSG_MOVE_TIME_SKIPPED = 0x3A18, CMSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x3A05, CMSG_MOVE_WATER_WALK_ACK = 0x3A1A, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31CA, - CMSG_NEXT_CINEMATIC_CAMERA = 0x3548, - CMSG_OBJECT_UPDATE_FAILED = 0x317F, - CMSG_OBJECT_UPDATE_RESCUED = 0x3180, - CMSG_OFFER_PETITION = 0x36AF, - CMSG_OPENING_CINEMATIC = 0x3547, - CMSG_OPEN_ITEM = 0x3310, - CMSG_OPEN_MISSION_NPC = 0x32D7, - CMSG_OPEN_SHIPMENT_NPC = 0x32DD, - CMSG_OPEN_TRADESKILL_NPC = 0x32E8, - CMSG_OPT_OUT_OF_LOOT = 0x34FA, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D2, + CMSG_NEXT_CINEMATIC_CAMERA = 0x3546, + CMSG_OBJECT_UPDATE_FAILED = 0x3180, + CMSG_OBJECT_UPDATE_RESCUED = 0x3181, + CMSG_OFFER_PETITION = 0x36B0, + CMSG_OPENING_CINEMATIC = 0x3545, + CMSG_OPEN_ITEM = 0x331F, + CMSG_OPEN_MISSION_NPC = 0x32E6, + CMSG_OPEN_SHIPMENT_NPC = 0x32EC, + CMSG_OPEN_TRADESKILL_NPC = 0x32F7, + CMSG_OPT_OUT_OF_LOOT = 0x34F7, CMSG_PARTY_INVITE = 0x3602, CMSG_PARTY_INVITE_RESPONSE = 0x3603, CMSG_PARTY_UNINVITE = 0x3647, - CMSG_PETITION_BUY = 0x34CD, - CMSG_PETITION_RENAME_GUILD = 0x36C6, - CMSG_PETITION_SHOW_LIST = 0x34CC, - CMSG_PETITION_SHOW_SIGNATURES = 0x34CE, - CMSG_PET_ABANDON = 0x3490, - CMSG_PET_ACTION = 0x348E, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31D9, + CMSG_PETITION_BUY = 0x34C9, + CMSG_PETITION_RENAME_GUILD = 0x36C7, + CMSG_PETITION_SHOW_LIST = 0x34C8, + CMSG_PETITION_SHOW_SIGNATURES = 0x34CA, + CMSG_PET_ABANDON = 0x348D, + CMSG_PET_ACTION = 0x348B, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E1, CMSG_PET_BATTLE_INPUT = 0x3640, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x321A, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31D8, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3223, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E0, CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3641, - CMSG_PET_BATTLE_REQUEST_PVP = 0x31D2, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31D3, - CMSG_PET_BATTLE_REQUEST_WILD = 0x31D0, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31DA, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31D1, - CMSG_PET_CANCEL_AURA = 0x3491, - CMSG_PET_CAST_SPELL = 0x328D, + CMSG_PET_BATTLE_REQUEST_PVP = 0x31DA, + CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DB, + CMSG_PET_BATTLE_REQUEST_WILD = 0x31D8, + CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E2, + CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31D9, + CMSG_PET_CANCEL_AURA = 0x348E, + CMSG_PET_CAST_SPELL = 0x329A, CMSG_PET_RENAME = 0x3685, - CMSG_PET_SET_ACTION = 0x348D, - CMSG_PET_SPELL_AUTOCAST = 0x3492, - CMSG_PET_STOP_ATTACK = 0x348F, + CMSG_PET_SET_ACTION = 0x348A, + CMSG_PET_SPELL_AUTOCAST = 0x348F, + CMSG_PET_STOP_ATTACK = 0x348C, CMSG_PING = 0x3768, CMSG_PLAYER_LOGIN = 0x35EA, CMSG_PROTOCOL_MISMATCH = 0x376E, - CMSG_PUSH_QUEST_TO_PARTY = 0x34A2, - CMSG_PVP_LOG_DATA = 0x317A, - CMSG_PVP_PRESTIGE_RANK_UP = 0x3332, - CMSG_QUERY_BATTLE_PET_NAME = 0x3268, + CMSG_PUSH_QUEST_TO_PARTY = 0x349F, + CMSG_PVP_LOG_DATA = 0x317B, + CMSG_QUERY_BATTLE_PET_NAME = 0x3276, + CMSG_QUERY_COMMUNITY_NAME = 0x368C, CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3660, CMSG_QUERY_CORPSE_TRANSPORT = 0x3661, - CMSG_QUERY_COUNTDOWN_TIMER = 0x31A4, - CMSG_QUERY_CREATURE = 0x3262, - CMSG_QUERY_GAME_OBJECT = 0x3263, - CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3269, - CMSG_QUERY_GUILD_INFO = 0x368D, - CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3506, - CMSG_QUERY_NEXT_MAIL_TIME = 0x353D, - CMSG_QUERY_NPC_TEXT = 0x3264, - CMSG_QUERY_PAGE_TEXT = 0x3266, - CMSG_QUERY_PETITION = 0x326A, - CMSG_QUERY_PET_NAME = 0x3267, + CMSG_QUERY_COUNTDOWN_TIMER = 0x31A8, + CMSG_QUERY_CREATURE = 0x3270, + CMSG_QUERY_GAME_OBJECT = 0x3271, + CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3277, + CMSG_QUERY_GUILD_INFO = 0x368E, + CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3503, + CMSG_QUERY_NEXT_MAIL_TIME = 0x353B, + CMSG_QUERY_NPC_TEXT = 0x3272, + CMSG_QUERY_PAGE_TEXT = 0x3274, + CMSG_QUERY_PETITION = 0x3278, + CMSG_QUERY_PET_NAME = 0x3275, CMSG_QUERY_PLAYER_NAME = 0x368B, - CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3173, - CMSG_QUERY_QUEST_INFO = 0x3265, - CMSG_QUERY_QUEST_REWARDS = 0x3336, - CMSG_QUERY_REALM_NAME = 0x368C, + CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3174, + CMSG_QUERY_QUEST_INFO = 0x3273, + CMSG_QUERY_REALM_NAME = 0x368D, CMSG_QUERY_SCENARIO_POI = 0x3656, - CMSG_QUERY_TIME = 0x34DA, - CMSG_QUERY_VOID_STORAGE = 0x319D, - CMSG_QUEST_CONFIRM_ACCEPT = 0x34A1, - CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349B, - CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x349D, - CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x349C, - CMSG_QUEST_GIVER_HELLO = 0x3499, - CMSG_QUEST_GIVER_QUERY_QUEST = 0x349A, - CMSG_QUEST_GIVER_REQUEST_REWARD = 0x349E, - CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x34A0, - CMSG_QUEST_GIVER_STATUS_QUERY = 0x349F, - CMSG_QUEST_LOG_REMOVE_QUEST = 0x3532, - CMSG_QUEST_POI_QUERY = 0x36B0, - CMSG_QUEST_PUSH_RESULT = 0x34A3, + CMSG_QUERY_TIME = 0x34D6, + CMSG_QUERY_TREASURE_PICKER = 0x3343, + CMSG_QUERY_VOID_STORAGE = 0x31A1, + CMSG_QUEST_CONFIRM_ACCEPT = 0x349E, + CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x3498, + CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x349A, + CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x3499, + CMSG_QUEST_GIVER_HELLO = 0x3496, + CMSG_QUEST_GIVER_QUERY_QUEST = 0x3497, + CMSG_QUEST_GIVER_REQUEST_REWARD = 0x349B, + CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x349D, + CMSG_QUEST_GIVER_STATUS_QUERY = 0x349C, + CMSG_QUEST_LOG_REMOVE_QUEST = 0x3530, + CMSG_QUEST_POI_QUERY = 0x36B1, + CMSG_QUEST_PUSH_RESULT = 0x34A0, CMSG_QUEUED_MESSAGES_END = 0x376C, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3705, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3704, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3703, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3702, - CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E4, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3709, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3708, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3707, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3706, + CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E5, CMSG_RANDOM_ROLL = 0x3654, CMSG_READY_CHECK_RESPONSE = 0x3634, - CMSG_READ_ITEM = 0x3311, - CMSG_RECLAIM_CORPSE = 0x34DF, - CMSG_RECRUIT_A_FRIEND = 0x36CC, - CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36EE, - CMSG_REDEEM_WOW_TOKEN_START = 0x36ED, - CMSG_REMOVE_NEW_ITEM = 0x3339, + CMSG_READ_ITEM = 0x3320, + CMSG_RECLAIM_CORPSE = 0x34DC, + CMSG_RECRUIT_A_FRIEND = 0x36CD, + CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36EF, + CMSG_REDEEM_WOW_TOKEN_START = 0x36EE, + CMSG_REMOVE_NEW_ITEM = 0x3346, CMSG_REORDER_CHARACTERS = 0x35E9, - CMSG_REPAIR_ITEM = 0x34F0, - CMSG_REPLACE_TROPHY = 0x32F3, - CMSG_REPOP_REQUEST = 0x352A, - CMSG_REPORT_CLIENT_VARIABLES = 0x36FF, - CMSG_REPORT_ENABLED_ADDONS = 0x36FE, - CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3700, - CMSG_REPORT_PVP_PLAYER_AFK = 0x34F8, - CMSG_REQUEST_ACCOUNT_DATA = 0x3695, - CMSG_REQUEST_AREA_POI_UPDATE = 0x3338, + CMSG_REPAIR_ITEM = 0x34ED, + CMSG_REPLACE_TROPHY = 0x3302, + CMSG_REPOP_REQUEST = 0x3528, + CMSG_REPORT_CLIENT_VARIABLES = 0x3703, + CMSG_REPORT_ENABLED_ADDONS = 0x3702, + CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3704, + CMSG_REPORT_PVP_PLAYER_AFK = 0x34F5, + CMSG_REQUEST_ACCOUNT_DATA = 0x3696, + CMSG_REQUEST_AREA_POI_UPDATE = 0x3345, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC, - CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317C, - CMSG_REQUEST_CEMETERY_LIST = 0x3174, - CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32A4, - CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO = 0x36F8, - CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x352E, - CMSG_REQUEST_FORCED_REACTIONS = 0x31FE, - CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A3, - CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A2, - CMSG_REQUEST_HONOR_STATS = 0x3179, - CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x3295, + CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317D, + CMSG_REQUEST_CEMETERY_LIST = 0x3175, + CMSG_REQUEST_CHALLENGE_MODE_AFFIXES = 0x3205, + CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32B3, + CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO = 0x36FC, + CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x352C, + CMSG_REQUEST_FORCED_REACTIONS = 0x3207, + CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A7, + CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A6, + CMSG_REQUEST_HONOR_STATS = 0x317A, + CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32A3, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7, CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3653, - CMSG_REQUEST_PET_INFO = 0x3493, - CMSG_REQUEST_PLAYED_TIME = 0x326D, - CMSG_REQUEST_PVP_BRAWL_INFO = 0x3191, - CMSG_REQUEST_PVP_REWARDS = 0x3190, - CMSG_REQUEST_RAID_INFO = 0x36C7, + CMSG_REQUEST_PET_INFO = 0x3490, + CMSG_REQUEST_PLAYED_TIME = 0x327B, + CMSG_REQUEST_PVP_BRAWL_INFO = 0x3195, + CMSG_REQUEST_PVP_REWARDS = 0x3194, + CMSG_REQUEST_RAID_INFO = 0x36C8, CMSG_REQUEST_RATED_BATTLEFIELD_INFO = 0x35E3, CMSG_REQUEST_RESEARCH_HISTORY = 0x3167, - CMSG_REQUEST_STABLED_PETS = 0x3494, - CMSG_REQUEST_VEHICLE_EXIT = 0x322B, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x322D, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x322C, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x322E, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3337, - CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36E6, - CMSG_RESET_CHALLENGE_MODE = 0x31FB, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x31FC, + CMSG_REQUEST_STABLED_PETS = 0x3491, + CMSG_REQUEST_VEHICLE_EXIT = 0x3234, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3236, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3235, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3237, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3344, + CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36E7, + CMSG_RESET_CHALLENGE_MODE = 0x3203, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3204, CMSG_RESET_INSTANCES = 0x3668, CMSG_RESURRECT_RESPONSE = 0x3684, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x32F5, - CMSG_RIDE_VEHICLE_INTERACT = 0x322F, - CMSG_SAVE_CUF_PROFILES = 0x318A, - CMSG_SAVE_EQUIPMENT_SET = 0x350F, - CMSG_SAVE_GUILD_EMBLEM = 0x3299, - CMSG_SCENE_PLAYBACK_CANCELED = 0x3216, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x3215, - CMSG_SCENE_TRIGGER_EVENT = 0x3217, - CMSG_SELF_RES = 0x3535, - CMSG_SELL_ITEM = 0x34A5, - CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36E8, - CMSG_SELL_WOW_TOKEN_START = 0x36E7, - CMSG_SEND_CONTACT_LIST = 0x36CE, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x3304, + CMSG_RIDE_VEHICLE_INTERACT = 0x3238, + CMSG_SAVE_CUF_PROFILES = 0x318B, + CMSG_SAVE_EQUIPMENT_SET = 0x350C, + CMSG_SAVE_GUILD_EMBLEM = 0x32A7, + CMSG_SCENE_PLAYBACK_CANCELED = 0x321F, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x321E, + CMSG_SCENE_TRIGGER_EVENT = 0x3220, + CMSG_SELF_RES = 0x3533, + CMSG_SELL_ITEM = 0x34A2, + CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36E9, + CMSG_SELL_WOW_TOKEN_START = 0x36E8, + CMSG_SEND_CONTACT_LIST = 0x36CF, CMSG_SEND_MAIL = 0x35FA, CMSG_SEND_SOR_REQUEST_VIA_ADDRESS = 0x3620, - CMSG_SEND_TEXT_EMOTE = 0x348A, - CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x321C, - CMSG_SET_ACTION_BAR_TOGGLES = 0x3536, + CMSG_SEND_TEXT_EMOTE = 0x3488, + CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3225, + CMSG_SET_ACTION_BAR_TOGGLES = 0x3534, CMSG_SET_ACTION_BUTTON = 0x3635, CMSG_SET_ACTIVE_MOVER = 0x3A37, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32A5, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32B4, CMSG_SET_ASSISTANT_LEADER = 0x364F, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3314, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3315, - CMSG_SET_BANK_BAG_SLOT_FLAG = 0x3313, - CMSG_SET_CONTACT_NOTES = 0x36D1, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3323, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3324, + CMSG_SET_CONTACT_NOTES = 0x36D2, CMSG_SET_CURRENCY_FLAGS = 0x3169, - CMSG_SET_DIFFICULTY_ID = 0x3218, + CMSG_SET_DIFFICULTY_ID = 0x3221, CMSG_SET_DUNGEON_DIFFICULTY = 0x3682, CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3617, - CMSG_SET_FACTION_AT_WAR = 0x34E2, - CMSG_SET_FACTION_INACTIVE = 0x34E4, - CMSG_SET_FACTION_NOT_AT_WAR = 0x34E3, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3317, - CMSG_SET_LFG_BONUS_FACTION_ID = 0x3294, + CMSG_SET_FACTION_AT_WAR = 0x34DF, + CMSG_SET_FACTION_INACTIVE = 0x34E1, + CMSG_SET_FACTION_NOT_AT_WAR = 0x34E0, + CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B8, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3326, + CMSG_SET_LFG_BONUS_FACTION_ID = 0x32A2, CMSG_SET_LOOT_METHOD = 0x3648, - CMSG_SET_LOOT_SPECIALIZATION = 0x3543, + CMSG_SET_LOOT_SPECIALIZATION = 0x3541, CMSG_SET_PARTY_ASSIGNMENT = 0x3651, CMSG_SET_PARTY_LEADER = 0x364A, CMSG_SET_PET_SLOT = 0x3168, CMSG_SET_PLAYER_DECLINED_NAMES = 0x368A, - CMSG_SET_PREFERRED_CEMETERY = 0x3175, - CMSG_SET_PVP = 0x329D, - CMSG_SET_RAID_DIFFICULTY = 0x36DB, + CMSG_SET_PREFERRED_CEMETERY = 0x3176, + CMSG_SET_PVP = 0x32AB, + CMSG_SET_RAID_DIFFICULTY = 0x36DC, CMSG_SET_ROLE = 0x35D9, CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3688, - CMSG_SET_SELECTION = 0x352C, - CMSG_SET_SHEATHED = 0x348B, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3316, - CMSG_SET_TAXI_BENCHMARK_MODE = 0x34F7, - CMSG_SET_TITLE = 0x3271, + CMSG_SET_SELECTION = 0x352A, + CMSG_SET_SHEATHED = 0x3489, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3325, + CMSG_SET_TAXI_BENCHMARK_MODE = 0x34F4, + CMSG_SET_TITLE = 0x327F, CMSG_SET_TRADE_CURRENCY = 0x3160, CMSG_SET_TRADE_GOLD = 0x315F, CMSG_SET_TRADE_ITEM = 0x315D, - CMSG_SET_USING_PARTY_GARRISON = 0x32D9, - CMSG_SET_WATCHED_FACTION = 0x34E5, - CMSG_SHOW_TRADE_SKILL = 0x36BF, - CMSG_SIGN_PETITION = 0x3537, + CMSG_SET_USING_PARTY_GARRISON = 0x32E8, + CMSG_SET_WAR_MODE = 0x32AC, + CMSG_SET_WATCHED_FACTION = 0x34E2, + CMSG_SHOW_TRADE_SKILL = 0x36C0, + CMSG_SIGN_PETITION = 0x3535, CMSG_SILENCE_PARTY_TALKER = 0x3652, - CMSG_SOCKET_GEMS = 0x34EF, - CMSG_SORT_BAGS = 0x3318, - CMSG_SORT_BANK_BAGS = 0x3319, - CMSG_SORT_REAGENT_BANK_BAGS = 0x331A, - CMSG_SPELL_CLICK = 0x3498, - CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B2, + CMSG_SOCKET_GEMS = 0x34EC, + CMSG_SORT_BAGS = 0x3327, + CMSG_SORT_BANK_BAGS = 0x3328, + CMSG_SORT_REAGENT_BANK_BAGS = 0x3329, + CMSG_SPELL_CLICK = 0x3495, + CMSG_SPIRIT_HEALER_ACTIVATE = 0x34AF, CMSG_SPLIT_ITEM = 0x399E, - CMSG_STAND_STATE_CHANGE = 0x3188, - CMSG_START_CHALLENGE_MODE = 0x354E, + CMSG_STAND_STATE_CHANGE = 0x3189, + CMSG_START_CHALLENGE_MODE = 0x354C, CMSG_START_SPECTATOR_WAR_GAME = 0x35DF, CMSG_START_WAR_GAME = 0x35DE, CMSG_SUMMON_RESPONSE = 0x366A, CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0x3645, CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644, CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x3646, - CMSG_SURRENDER_ARENA = 0x3172, + CMSG_SURRENDER_ARENA = 0x3173, CMSG_SUSPEND_COMMS_ACK = 0x3764, CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A, CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, CMSG_SWAP_SUB_GROUPS = 0x364D, - CMSG_SWAP_VOID_ITEM = 0x319F, - CMSG_TABARD_VENDOR_ACTIVATE = 0x329A, - CMSG_TALK_TO_GOSSIP = 0x3495, - CMSG_TAXI_NODE_STATUS_QUERY = 0x34AB, - CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34AD, - CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34AF, + CMSG_SWAP_VOID_ITEM = 0x31A3, + CMSG_TABARD_VENDOR_ACTIVATE = 0x32A8, + CMSG_TALK_TO_GOSSIP = 0x3492, + CMSG_TAXI_NODE_STATUS_QUERY = 0x34A8, + CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34AA, + CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34AC, CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A3B, CMSG_TIME_SYNC_RESPONSE = 0x3A38, CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3A, CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A39, CMSG_TOGGLE_DIFFICULTY = 0x3657, - CMSG_TOGGLE_PVP = 0x329C, - CMSG_TOTEM_DESTROYED = 0x34FE, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x3335, - CMSG_TRAINER_BUY_SPELL = 0x34B1, - CMSG_TRAINER_LIST = 0x34B0, - CMSG_TRANSMOGRIFY_ITEMS = 0x3192, - CMSG_TURN_IN_PETITION = 0x3539, - CMSG_TUTORIAL = 0x36DC, + CMSG_TOGGLE_PVP = 0x32AA, + CMSG_TOTEM_DESTROYED = 0x34FB, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x3342, + CMSG_TRAINER_BUY_SPELL = 0x34AE, + CMSG_TRAINER_LIST = 0x34AD, + CMSG_TRANSMOGRIFY_ITEMS = 0x3196, + CMSG_TURN_IN_PETITION = 0x3537, + CMSG_TUTORIAL = 0x36DD, CMSG_TWITTER_CHECK_STATUS = 0x312A, CMSG_TWITTER_CONNECT = 0x3127, CMSG_TWITTER_DISCONNECT = 0x312B, - CMSG_TWITTER_POST = 0x331C, - CMSG_UI_TIME_REQUEST = 0x369A, + CMSG_TWITTER_POST = 0x332B, + CMSG_UI_TIME_REQUEST = 0x369B, CMSG_UNACCEPT_TRADE = 0x315B, - CMSG_UNDELETE_CHARACTER = 0x36DE, - CMSG_UNLEARN_SKILL = 0x34E9, - CMSG_UNLEARN_SPECIALIZATION = 0x31A0, - CMSG_UNLOCK_VOID_STORAGE = 0x319C, - CMSG_UPDATE_ACCOUNT_DATA = 0x3696, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x3290, + CMSG_UNDELETE_CHARACTER = 0x36DF, + CMSG_UNLEARN_SKILL = 0x34E6, + CMSG_UNLEARN_SPECIALIZATION = 0x31A4, + CMSG_UNLOCK_VOID_STORAGE = 0x31A0, + CMSG_UPDATE_ACCOUNT_DATA = 0x3697, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x329D, CMSG_UPDATE_CLIENT_SETTINGS = 0x3664, CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A3E, CMSG_UPDATE_RAID_TARGET = 0x3650, - CMSG_UPDATE_SPELL_VISUAL = 0x328F, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F4, - CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36EF, - CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36E5, - CMSG_UPGRADE_GARRISON = 0x32AD, - CMSG_UPGRADE_ITEM = 0x321D, - CMSG_USED_FOLLOW = 0x3185, - CMSG_USE_CRITTER_ITEM = 0x3235, + CMSG_UPDATE_SPELL_VISUAL = 0x329C, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F5, + CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F0, + CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36E6, + CMSG_UPGRADE_GARRISON = 0x32BC, + CMSG_UPGRADE_ITEM = 0x3226, + CMSG_USED_FOLLOW = 0x3186, + CMSG_USE_CRITTER_ITEM = 0x323E, CMSG_USE_EQUIPMENT_SET = 0x3995, - CMSG_USE_ITEM = 0x328A, - CMSG_USE_TOY = 0x328C, - CMSG_VIOLENCE_LEVEL = 0x3183, - CMSG_VOID_STORAGE_TRANSFER = 0x319E, + CMSG_USE_ITEM = 0x3297, + CMSG_USE_TOY = 0x3299, + CMSG_VIOLENCE_LEVEL = 0x3184, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3712, + CMSG_VOICE_CHAT_LOGIN = 0x3711, + CMSG_VOID_STORAGE_TRANSFER = 0x31A2, CMSG_WARDEN_DATA = 0x35EC, CMSG_WHO = 0x3681, CMSG_WHO_IS = 0x3680, @@ -764,63 +772,65 @@ enum OpcodeClient : uint16 enum OpcodeServer : uint16 { SMSG_ABORT_NEW_WORLD = 0x25AD, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2652, - SMSG_ACCOUNT_DATA_TIMES = 0x2749, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2654, + SMSG_ACCOUNT_DATA_TIMES = 0x2752, SMSG_ACCOUNT_MOUNT_UPDATE = 0x25C3, SMSG_ACCOUNT_TOYS_UPDATE = 0x25C4, - SMSG_ACHIEVEMENT_DELETED = 0x271E, - SMSG_ACHIEVEMENT_EARNED = 0x2660, - SMSG_ACTIVATE_TAXI_REPLY = 0x26A6, + SMSG_ACHIEVEMENT_DELETED = 0x2727, + SMSG_ACHIEVEMENT_EARNED = 0x2662, + SMSG_ACTIVATE_TAXI_REPLY = 0x26AB, SMSG_ACTIVE_GLYPHS = 0x2C53, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265A, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265C, SMSG_ADD_ITEM_PASSIVE = 0x25BF, - SMSG_ADD_LOSS_OF_CONTROL = 0x2696, - SMSG_ADD_RUNE_POWER = 0x26E2, + SMSG_ADD_LOSS_OF_CONTROL = 0x269B, + SMSG_ADD_RUNE_POWER = 0x26EA, SMSG_ADJUST_SPLINE_DURATION = 0x25E8, - SMSG_AE_LOOT_TARGETS = 0x262C, - SMSG_AE_LOOT_TARGET_ACK = 0x262D, - SMSG_AI_REACTION = 0x26DF, + SMSG_ADVENTURE_MAP_POI_QUERY_RESPONSE = 0x2845, + SMSG_AE_LOOT_TARGETS = 0x262E, + SMSG_AE_LOOT_TARGET_ACK = 0x262F, + SMSG_AI_REACTION = 0x26E7, SMSG_ALL_ACCOUNT_CRITERIA = 0x2570, SMSG_ALL_ACHIEVEMENT_DATA = 0x256F, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2586, - SMSG_AREA_POI_UPDATE = 0x2848, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x2782, - SMSG_AREA_TRIGGER_DENIED = 0x269D, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x2755, - SMSG_AREA_TRIGGER_RE_PATH = 0x263F, - SMSG_AREA_TRIGGER_RE_SHAPE = 0x263C, - SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x264E, - SMSG_ARENA_ERROR = 0x2711, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2665, - SMSG_ARTIFACT_FORGE_OPENED = 0x27E2, - SMSG_ARTIFACT_KNOWLEDGE = 0x27EA, - SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27E5, - SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27E6, - SMSG_ARTIFACT_XP_GAIN = 0x282D, - SMSG_ATTACKER_STATE_UPDATE = 0x27CF, - SMSG_ATTACK_START = 0x266D, - SMSG_ATTACK_STOP = 0x266E, - SMSG_ATTACK_SWING_ERROR = 0x2733, - SMSG_ATTACK_SWING_LANDED_LOG = 0x2734, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2728, - SMSG_AUCTION_COMMAND_RESULT = 0x2725, - SMSG_AUCTION_HELLO_RESPONSE = 0x2723, - SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x272C, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x272A, - SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x272B, - SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x272D, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2727, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2729, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x2724, - SMSG_AUCTION_WON_NOTIFICATION = 0x2726, + SMSG_AREA_POI_UPDATE = 0x2852, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x278A, + SMSG_AREA_TRIGGER_DENIED = 0x26A2, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x275E, + SMSG_AREA_TRIGGER_RE_PATH = 0x263E, + SMSG_AREA_TRIGGER_RE_SHAPE = 0x2642, + SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x2650, + SMSG_ARENA_ERROR = 0x271A, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2667, + SMSG_ARTIFACT_FORGE_OPENED = 0x27EE, + SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27F1, + SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27F2, + SMSG_ARTIFACT_XP_GAIN = 0x2835, + SMSG_ATTACKER_STATE_UPDATE = 0x27DB, + SMSG_ATTACK_START = 0x266F, + SMSG_ATTACK_STOP = 0x2670, + SMSG_ATTACK_SWING_ERROR = 0x273C, + SMSG_ATTACK_SWING_LANDED_LOG = 0x273D, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2731, + SMSG_AUCTION_COMMAND_RESULT = 0x272E, + SMSG_AUCTION_HELLO_RESPONSE = 0x272C, + SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x2735, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2733, + SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x2734, + SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x2736, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2730, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2732, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x272D, + SMSG_AUCTION_WON_NOTIFICATION = 0x272F, SMSG_AURA_POINTS_DEPLETED = 0x2C23, SMSG_AURA_UPDATE = 0x2C22, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_RESPONSE = 0x256C, SMSG_AVAILABLE_HOTFIXES = 0x25A1, - SMSG_BAN_REASON = 0x26B2, - SMSG_BARBER_SHOP_RESULT = 0x26E8, + SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN = 0x283F, + SMSG_AZERITE_XP_GAIN = 0x2878, + SMSG_BAN_REASON = 0x26B7, + SMSG_BARBER_SHOP_RESULT = 0x26F0, SMSG_BATTLEFIELD_LIST = 0x2594, SMSG_BATTLEFIELD_PORT_DENIED = 0x259A, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2590, @@ -830,125 +840,130 @@ enum OpcodeServer : uint16 SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2591, SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x25A5, SMSG_BATTLEGROUND_INFO_THROTTLED = 0x259B, - SMSG_BATTLEGROUND_INIT = 0x27A0, + SMSG_BATTLEGROUND_INIT = 0x27A9, SMSG_BATTLEGROUND_PLAYER_JOINED = 0x2598, SMSG_BATTLEGROUND_PLAYER_LEFT = 0x2599, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2595, - SMSG_BATTLEGROUND_POINTS = 0x279F, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x27CE, - SMSG_BATTLENET_CHALLENGE_START = 0x27CD, - SMSG_BATTLENET_NOTIFICATION = 0x2843, - SMSG_BATTLENET_REALM_LIST_TICKET = 0x2845, - SMSG_BATTLENET_RESPONSE = 0x2842, - SMSG_BATTLENET_SET_SESSION_STATE = 0x2844, - SMSG_BATTLE_PAY_ACK_FAILED = 0x27C6, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27BB, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27C5, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27B9, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27B8, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27B7, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27B5, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27B3, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27B4, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27BA, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27C4, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27C2, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27C1, - SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x2864, - SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x285B, - SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27B6, - SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2830, - SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS = 0x2859, - SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x2833, - SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x2834, - SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x2832, - SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x2831, - SMSG_BATTLE_PAY_VAS_TRANSFER_QUEUE_STATUS = 0x2858, - SMSG_BATTLE_PETS_HEALED = 0x2609, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A0, - SMSG_BATTLE_PET_DELETED = 0x2606, - SMSG_BATTLE_PET_ERROR = 0x2655, - SMSG_BATTLE_PET_JOURNAL = 0x2605, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2603, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2604, - SMSG_BATTLE_PET_LICENSE_CHANGED = 0x260A, - SMSG_BATTLE_PET_MAX_COUNT_CHANGED = 0x2601, - SMSG_BATTLE_PET_RESTORED = 0x2608, - SMSG_BATTLE_PET_REVOKED = 0x2607, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x2600, - SMSG_BATTLE_PET_UPDATES = 0x25FF, - SMSG_BINDER_CONFIRM = 0x2739, + SMSG_BATTLEGROUND_POINTS = 0x27A8, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x27DA, + SMSG_BATTLENET_CHALLENGE_START = 0x27D9, + SMSG_BATTLENET_NOTIFICATION = 0x284D, + SMSG_BATTLENET_REALM_LIST_TICKET = 0x284F, + SMSG_BATTLENET_RESPONSE = 0x284C, + SMSG_BATTLENET_SET_SESSION_STATE = 0x284E, + SMSG_BATTLENET_UPDATE_SESSION_KEY = 0x2872, + SMSG_BATTLE_PAY_ACK_FAILED = 0x27D2, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27C7, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27D1, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27C5, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27C4, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27C3, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27C1, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27BF, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27C0, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27C6, + SMSG_BATTLE_PAY_OPEN_CHECKOUT_RESULT = 0x286B, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27D0, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27CE, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27CD, + SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x2874, + SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x2869, + SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27C2, + SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2838, + SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS = 0x2864, + SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x283B, + SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x283C, + SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x283A, + SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x2839, + SMSG_BATTLE_PAY_VAS_TRANSFER_QUEUE_STATUS = 0x2863, + SMSG_BATTLE_PETS_HEALED = 0x260A, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A5, + SMSG_BATTLE_PET_DELETED = 0x2607, + SMSG_BATTLE_PET_ERROR = 0x2657, + SMSG_BATTLE_PET_JOURNAL = 0x2606, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2604, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2605, + SMSG_BATTLE_PET_LICENSE_CHANGED = 0x260B, + SMSG_BATTLE_PET_MAX_COUNT_CHANGED = 0x2602, + SMSG_BATTLE_PET_RESTORED = 0x2609, + SMSG_BATTLE_PET_REVOKED = 0x2608, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x2601, + SMSG_BATTLE_PET_UPDATES = 0x2600, + SMSG_BINDER_CONFIRM = 0x2742, SMSG_BIND_POINT_UPDATE = 0x257C, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2644, - SMSG_BLACK_MARKET_OPEN_RESULT = 0x2642, - SMSG_BLACK_MARKET_OUTBID = 0x2645, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2643, - SMSG_BLACK_MARKET_WON = 0x2646, - SMSG_BONUS_ROLL_EMPTY = 0x2662, - SMSG_BOSS_KILL_CREDIT = 0x27C0, - SMSG_BREAK_TARGET = 0x266C, - SMSG_BUY_FAILED = 0x26F1, - SMSG_BUY_SUCCEEDED = 0x26F0, - SMSG_CACHE_INFO = 0x2743, - SMSG_CACHE_VERSION = 0x2742, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26C6, - SMSG_CALENDAR_COMMAND_RESULT = 0x26C7, - SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26B6, - SMSG_CALENDAR_EVENT_INVITE = 0x26B7, - SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26B8, - SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26BB, - SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26C0, - SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26C1, - SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26BC, - SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26BD, - SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26B9, - SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26BA, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26BE, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26BF, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26C2, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26C3, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26C4, - SMSG_CALENDAR_SEND_CALENDAR = 0x26B4, - SMSG_CALENDAR_SEND_EVENT = 0x26B5, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x26C5, - SMSG_CAMERA_EFFECT = 0x2767, - SMSG_CANCEL_AUTO_REPEAT = 0x2712, - SMSG_CANCEL_COMBAT = 0x2731, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2646, + SMSG_BLACK_MARKET_OPEN_RESULT = 0x2644, + SMSG_BLACK_MARKET_OUTBID = 0x2647, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2645, + SMSG_BLACK_MARKET_WON = 0x2648, + SMSG_BONUS_ROLL_EMPTY = 0x2664, + SMSG_BONUS_ROLL_FAILED = 0x287B, + SMSG_BOSS_KILL_CREDIT = 0x27CC, + SMSG_BREAK_TARGET = 0x266E, + SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, + SMSG_BUY_FAILED = 0x26F9, + SMSG_BUY_SUCCEEDED = 0x26F8, + SMSG_CACHE_INFO = 0x274C, + SMSG_CACHE_VERSION = 0x274B, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26CB, + SMSG_CALENDAR_COMMAND_RESULT = 0x26CC, + SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26BB, + SMSG_CALENDAR_EVENT_INVITE = 0x26BC, + SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26C0, + SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26BF, + SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26C5, + SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26C6, + SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26BD, + SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26C2, + SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26BE, + SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26C1, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26C3, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26C4, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26C7, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26C8, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26C9, + SMSG_CALENDAR_SEND_CALENDAR = 0x26B9, + SMSG_CALENDAR_SEND_EVENT = 0x26BA, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x26CA, + SMSG_CAMERA_EFFECT = 0x276F, + SMSG_CANCEL_AUTO_REPEAT = 0x271B, + SMSG_CANCEL_COMBAT = 0x273A, SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46, - SMSG_CANCEL_SCENE = 0x2654, + SMSG_CANCEL_SCENE = 0x2656, SMSG_CANCEL_SPELL_VISUAL = 0x2C44, SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48, - SMSG_CAN_DUEL_RESULT = 0x2676, + SMSG_CAN_DUEL_RESULT = 0x2679, SMSG_CAST_FAILED = 0x2C56, SMSG_CATEGORY_COOLDOWN = 0x2C16, - SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x2622, - SMSG_CHALLENGE_MODE_COMPLETE = 0x2620, - SMSG_CHALLENGE_MODE_MAP_STATS_UPDATE = 0x2623, - SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2625, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2624, - SMSG_CHALLENGE_MODE_RESET = 0x261F, - SMSG_CHALLENGE_MODE_REWARDS = 0x2621, - SMSG_CHALLENGE_MODE_START = 0x261D, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x261E, - SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x2735, + SMSG_CHALLENGE_MODE_AFFIXES = 0x2624, + SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x2623, + SMSG_CHALLENGE_MODE_COMPLETE = 0x2621, + SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2626, + SMSG_CHALLENGE_MODE_NEW_PLAYER_SEASON_RECORD = 0x2627, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2625, + SMSG_CHALLENGE_MODE_RESET = 0x2620, + SMSG_CHALLENGE_MODE_REWARDS = 0x2622, + SMSG_CHALLENGE_MODE_START = 0x261E, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x261F, + SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x273E, SMSG_CHANNEL_LIST = 0x2BC3, SMSG_CHANNEL_NOTIFY = 0x2BC0, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2, - SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x2804, - SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x2863, - SMSG_CHARACTER_ITEM_FIXUP = 0x2854, - SMSG_CHARACTER_LOGIN_FAILED = 0x2744, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27CC, - SMSG_CHARACTER_RENAME_RESULT = 0x27A5, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x2803, - SMSG_CHARACTER_UPGRADE_QUEUED = 0x2802, - SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F4, - SMSG_CHARACTER_UPGRADE_STARTED = 0x2801, - SMSG_CHARACTER_UPGRADE_UNREVOKE_RESULT = 0x2805, - SMSG_CHAR_CUSTOMIZE = 0x2719, - SMSG_CHAR_CUSTOMIZE_FAILED = 0x2718, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27EE, + SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x280C, + SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x2873, + SMSG_CHARACTER_ITEM_FIXUP = 0x285F, + SMSG_CHARACTER_LOGIN_FAILED = 0x274D, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27D8, + SMSG_CHARACTER_RENAME_RESULT = 0x27B1, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x280B, + SMSG_CHARACTER_UPGRADE_QUEUED = 0x280A, + SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F5, + SMSG_CHARACTER_UPGRADE_STARTED = 0x2809, + SMSG_CHARACTER_UPGRADE_UNREVOKE_RESULT = 0x280D, + SMSG_CHAR_CUSTOMIZE = 0x2722, + SMSG_CHAR_CUSTOMIZE_FAILED = 0x2721, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27F6, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_DOWN = 0x2BBD, @@ -964,97 +979,101 @@ enum OpcodeServer : uint16 SMSG_CHECK_WARGAME_ENTRY = 0x259E, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27, SMSG_CLEAR_BOSS_EMOTES = 0x25CD, - SMSG_CLEAR_COOLDOWN = 0x26E4, + SMSG_CLEAR_COOLDOWN = 0x26EC, SMSG_CLEAR_COOLDOWNS = 0x2C26, - SMSG_CLEAR_LOSS_OF_CONTROL = 0x2698, + SMSG_CLEAR_LOSS_OF_CONTROL = 0x269D, SMSG_CLEAR_SPELL_CHARGES = 0x2C28, - SMSG_CLEAR_TARGET = 0x26DB, - SMSG_COIN_REMOVED = 0x262B, - SMSG_COMBAT_EVENT_FAILED = 0x266F, - SMSG_COMMENTATOR_MAP_INFO = 0x2746, - SMSG_COMMENTATOR_PLAYER_INFO = 0x2747, - SMSG_COMMENTATOR_STATE_CHANGED = 0x2745, - SMSG_COMPLAINT_RESULT = 0x26D3, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27DE, + SMSG_CLEAR_TARGET = 0x26E3, + SMSG_COIN_REMOVED = 0x262D, + SMSG_COMBAT_EVENT_FAILED = 0x2671, + SMSG_COMMENTATOR_MAP_INFO = 0x274F, + SMSG_COMMENTATOR_PLAYER_INFO = 0x2750, + SMSG_COMMENTATOR_STATE_CHANGED = 0x274E, + SMSG_COMPLAINT_RESULT = 0x26DA, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27EA, SMSG_CONNECT_TO = 0x304D, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27C7, - SMSG_CONSOLE_WRITE = 0x2651, - SMSG_CONSUMPTION_CONVERSION_INFO_RESPONSE = 0x2849, - SMSG_CONSUMPTION_CONVERSION_RESULT = 0x284A, - SMSG_CONTACT_LIST = 0x27CA, - SMSG_CONTROL_UPDATE = 0x2664, - SMSG_COOLDOWN_CHEAT = 0x277B, - SMSG_COOLDOWN_EVENT = 0x26E3, - SMSG_CORPSE_LOCATION = 0x266B, - SMSG_CORPSE_RECLAIM_DELAY = 0x278E, - SMSG_CORPSE_TRANSPORT_QUERY = 0x2751, - SMSG_CREATE_CHAR = 0x273E, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x27DD, - SMSG_CRITERIA_DELETED = 0x271D, - SMSG_CRITERIA_UPDATE = 0x2717, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26EC, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27D3, + SMSG_CONSOLE_WRITE = 0x2653, + SMSG_CONSUMPTION_CONVERSION_INFO_RESPONSE = 0x2853, + SMSG_CONSUMPTION_CONVERSION_RESULT = 0x2854, + SMSG_CONTACT_LIST = 0x27D6, + SMSG_CONTRIBUTION_COLLECTOR_STATE = 0x286A, + SMSG_CONTROL_UPDATE = 0x2666, + SMSG_COOLDOWN_CHEAT = 0x2783, + SMSG_COOLDOWN_EVENT = 0x26EB, + SMSG_CORPSE_LOCATION = 0x266D, + SMSG_CORPSE_RECLAIM_DELAY = 0x2796, + SMSG_CORPSE_TRANSPORT_QUERY = 0x275A, + SMSG_CREATE_CHAR = 0x2747, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x27E9, + SMSG_CRITERIA_DELETED = 0x2726, + SMSG_CRITERIA_UPDATE = 0x2720, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26F4, SMSG_CUSTOM_LOAD_SCREEN = 0x25E3, SMSG_DAILY_QUESTS_RESET = 0x2A80, - SMSG_DAMAGE_CALC_LOG = 0x280C, + SMSG_DAMAGE_CALC_LOG = 0x2814, SMSG_DB_REPLY = 0x25A0, - SMSG_DEATH_RELEASE_LOC = 0x2705, + SMSG_DEATH_RELEASE_LOC = 0x270E, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x273F, - SMSG_DESTROY_ARENA_UNIT = 0x2784, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x2732, + SMSG_DELETE_CHAR = 0x2748, + SMSG_DESTROY_ARENA_UNIT = 0x278C, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x273B, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258A, SMSG_DISENCHANT_CREDIT = 0x25BC, - SMSG_DISMOUNT = 0x26DA, + SMSG_DISMOUNT = 0x26E2, SMSG_DISMOUNT_RESULT = 0x257B, SMSG_DISPEL_FAILED = 0x2C30, SMSG_DISPLAY_GAME_ERROR = 0x25B5, - SMSG_DISPLAY_PLAYER_CHOICE = 0x26A1, - SMSG_DISPLAY_PROMOTION = 0x2668, + SMSG_DISPLAY_PLAYER_CHOICE = 0x26A6, + SMSG_DISPLAY_PROMOTION = 0x266A, SMSG_DISPLAY_QUEST_POPUP = 0x2A9D, - SMSG_DISPLAY_TOAST = 0x2638, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F6, + SMSG_DISPLAY_TOAST = 0x263A, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F7, SMSG_DROP_NEW_CONNECTION = 0x304C, - SMSG_DUEL_COMPLETE = 0x2674, - SMSG_DUEL_COUNTDOWN = 0x2673, - SMSG_DUEL_IN_BOUNDS = 0x2672, - SMSG_DUEL_OUT_OF_BOUNDS = 0x2671, - SMSG_DUEL_REQUESTED = 0x2670, - SMSG_DUEL_WINNER = 0x2675, - SMSG_DURABILITY_DAMAGE_DEATH = 0x278A, - SMSG_EMOTE = 0x280D, - SMSG_ENABLE_BARBER_SHOP = 0x26E7, + SMSG_DUEL_COMPLETE = 0x2677, + SMSG_DUEL_COUNTDOWN = 0x2676, + SMSG_DUEL_IN_BOUNDS = 0x2675, + SMSG_DUEL_OPPONENT_SELECTED = 0x2673, + SMSG_DUEL_OUT_OF_BOUNDS = 0x2674, + SMSG_DUEL_REQUESTED = 0x2672, + SMSG_DUEL_WINNER = 0x2678, + SMSG_DURABILITY_DAMAGE_DEATH = 0x2792, + SMSG_EMOTE = 0x2815, + SMSG_ENABLE_BARBER_SHOP = 0x26EF, SMSG_ENABLE_ENCRYPTION = 0x3049, - SMSG_ENCHANTMENT_LOG = 0x2752, - SMSG_ENCOUNTER_END = 0x27BF, - SMSG_ENCOUNTER_START = 0x27BE, + SMSG_ENCHANTMENT_LOG = 0x275B, + SMSG_ENCOUNTER_END = 0x27CB, + SMSG_ENCOUNTER_START = 0x27CA, SMSG_ENUM_CHARACTERS_RESULT = 0x2582, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21, - SMSG_EQUIPMENT_SET_ID = 0x26DC, + SMSG_EQUIPMENT_SET_ID = 0x26E4, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x27A2, - SMSG_FACTION_BONUS_INFO = 0x2766, + SMSG_EXPLORATION_EXPERIENCE = 0x27AE, + SMSG_FACTION_BONUS_INFO = 0x276E, SMSG_FAILED_PLAYER_CONDITION = 0x25E2, SMSG_FEATURE_SYSTEM_STATUS = 0x25D1, SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25D2, - SMSG_FEIGN_DEATH_RESISTED = 0x2787, - SMSG_FISH_ESCAPED = 0x26F9, - SMSG_FISH_NOT_HOOKED = 0x26F8, + SMSG_FEIGN_DEATH_RESISTED = 0x278F, + SMSG_FISH_ESCAPED = 0x2701, + SMSG_FISH_NOT_HOOKED = 0x2700, SMSG_FLIGHT_SPLINE_SYNC = 0x2DF7, - SMSG_FORCED_DEATH_UPDATE = 0x2706, - SMSG_FORCE_ANIM = 0x2794, - SMSG_FORCE_OBJECT_RELINK = 0x2667, - SMSG_FRIEND_STATUS = 0x27CB, + SMSG_FORCED_DEATH_UPDATE = 0x270F, + SMSG_FORCE_ANIM = 0x279D, + SMSG_FORCE_OBJECT_RELINK = 0x2669, + SMSG_FRIEND_STATUS = 0x27D7, + SMSG_GAME_EVENT_DEBUG_INITIALIZE = 0x267F, SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25D6, SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25D7, SMSG_GAME_OBJECT_DESPAWN = 0x25D8, + SMSG_GAME_OBJECT_MULTI_TRANSITION = 0x2879, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A, - SMSG_GAME_OBJECT_RESET_STATE = 0x275D, - SMSG_GAME_OBJECT_SET_STATE = 0x2841, - SMSG_GAME_OBJECT_UI_ACTION = 0x275A, - SMSG_GAME_SPEED_SET = 0x26AA, - SMSG_GAME_TIME_SET = 0x274B, - SMSG_GAME_TIME_UPDATE = 0x274A, + SMSG_GAME_OBJECT_RESET_STATE = 0x2765, + SMSG_GAME_OBJECT_SET_STATE = 0x284B, + SMSG_GAME_OBJECT_UI_ACTION = 0x2762, + SMSG_GAME_SPEED_SET = 0x26AF, + SMSG_GAME_TIME_SET = 0x2754, + SMSG_GAME_TIME_UPDATE = 0x2753, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2902, SMSG_GARRISON_ADD_MISSION_RESULT = 0x2906, SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x2918, @@ -1063,16 +1082,17 @@ enum OpcodeServer : uint16 SMSG_GARRISON_BUILDING_REMOVED = 0x28F4, SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x28F6, SMSG_GARRISON_CLEAR_ALL_FOLLOWERS_EXHAUSTION = 0x2916, - SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x2909, + SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x2908, SMSG_GARRISON_CREATE_RESULT = 0x28FC, SMSG_GARRISON_DELETE_RESULT = 0x2920, + SMSG_GARRISON_FOLLOWER_CATEGORIES = 0x2901, SMSG_GARRISON_FOLLOWER_CHANGED_ABILITIES = 0x2914, SMSG_GARRISON_FOLLOWER_CHANGED_DURABILITY = 0x2904, SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL = 0x2913, SMSG_GARRISON_FOLLOWER_CHANGED_STATUS = 0x2915, SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x2912, SMSG_GARRISON_IS_UPGRADEABLE_RESULT = 0x2929, - SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27E0, + SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27EC, SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x28F7, SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x28F5, SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x2905, @@ -1102,26 +1122,27 @@ enum OpcodeServer : uint16 SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x28F8, SMSG_GARRISON_UPGRADE_RESULT = 0x28FD, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2583, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A3, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27AF, SMSG_GET_DISPLAYED_TROPHY_LIST_RESPONSE = 0x2928, SMSG_GET_GARRISON_INFO_RESULT = 0x28F0, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27DF, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27DB, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x2808, - SMSG_GM_PLAYER_INFO = 0x277A, - SMSG_GM_REQUEST_PLAYER_INFO = 0x25ED, - SMSG_GM_TICKET_CASE_STATUS = 0x26CC, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x26CB, - SMSG_GOD_MODE = 0x2738, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27EB, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27E7, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x2810, + SMSG_GM_PLAYER_INFO = 0x2782, + SMSG_GM_REQUEST_PLAYER_INFO = 0x25EE, + SMSG_GM_TICKET_CASE_STATUS = 0x26D1, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x26D0, + SMSG_GOD_MODE = 0x2741, SMSG_GOSSIP_COMPLETE = 0x2A96, SMSG_GOSSIP_MESSAGE = 0x2A97, - SMSG_GOSSIP_POI = 0x27D8, + SMSG_GOSSIP_POI = 0x27E4, + SMSG_GOSSIP_TEXT_UPDATE = 0x2A98, SMSG_GROUP_ACTION_THROTTLED = 0x259C, - SMSG_GROUP_DECLINE = 0x27D3, - SMSG_GROUP_DESTROYED = 0x27D5, - SMSG_GROUP_INVITE_CONFIRMATION = 0x2855, - SMSG_GROUP_NEW_LEADER = 0x2649, - SMSG_GROUP_UNINVITE = 0x27D4, + SMSG_GROUP_DECLINE = 0x27DF, + SMSG_GROUP_DESTROYED = 0x27E1, + SMSG_GROUP_INVITE_CONFIRMATION = 0x2860, + SMSG_GROUP_NEW_LEADER = 0x264B, + SMSG_GROUP_UNINVITE = 0x27E0, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1174,53 +1195,56 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26FC, - SMSG_HIGHEST_THREAT_UPDATE = 0x270C, + SMSG_HEALTH_UPDATE = 0x2704, + SMSG_HIGHEST_THREAT_UPDATE = 0x2715, SMSG_HOTFIX_MESSAGE = 0x25A2, SMSG_HOTFIX_RESPONSE = 0x25A3, - SMSG_INITIALIZE_FACTIONS = 0x2765, + SMSG_INITIALIZE_FACTIONS = 0x276D, SMSG_INITIAL_SETUP = 0x257F, - SMSG_INIT_WORLD_STATES = 0x278B, + SMSG_INIT_WORLD_STATES = 0x2793, SMSG_INSPECT_HONOR_STATS = 0x25B2, - SMSG_INSPECT_PVP = 0x2761, - SMSG_INSPECT_RESULT = 0x264D, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27F4, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27F3, - SMSG_INSTANCE_ENCOUNTER_END = 0x27FC, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27F2, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27FE, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27FD, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27F7, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27F6, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27FB, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27FF, - SMSG_INSTANCE_ENCOUNTER_SET_ALLOWING_RELEASE = 0x27FA, - SMSG_INSTANCE_ENCOUNTER_SET_SUPPRESSING_RELEASE = 0x27F9, - SMSG_INSTANCE_ENCOUNTER_START = 0x27F8, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27F5, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x2736, - SMSG_INSTANCE_INFO = 0x2650, - SMSG_INSTANCE_RESET = 0x26AF, - SMSG_INSTANCE_RESET_FAILED = 0x26B0, - SMSG_INSTANCE_SAVE_CREATED = 0x27BD, - SMSG_INVALIDATE_PAGE_TEXT = 0x2701, - SMSG_INVALIDATE_PLAYER = 0x26D2, - SMSG_INVALID_PROMOTION_CODE = 0x2795, - SMSG_INVENTORY_CHANGE_FAILURE = 0x2763, + SMSG_INSPECT_PVP = 0x2769, + SMSG_INSPECT_RESULT = 0x264F, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27FC, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27FB, + SMSG_INSTANCE_ENCOUNTER_END = 0x2804, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27FA, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x2806, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x2805, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27FF, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27FE, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x2803, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x2807, + SMSG_INSTANCE_ENCOUNTER_SET_ALLOWING_RELEASE = 0x2802, + SMSG_INSTANCE_ENCOUNTER_SET_SUPPRESSING_RELEASE = 0x2801, + SMSG_INSTANCE_ENCOUNTER_START = 0x2800, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27FD, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x273F, + SMSG_INSTANCE_INFO = 0x2652, + SMSG_INSTANCE_RESET = 0x26B4, + SMSG_INSTANCE_RESET_FAILED = 0x26B5, + SMSG_INSTANCE_SAVE_CREATED = 0x27C9, + SMSG_INVALIDATE_PAGE_TEXT = 0x270A, + SMSG_INVALIDATE_PLAYER = 0x26D9, + SMSG_INVALID_PROMOTION_CODE = 0x279E, + SMSG_INVENTORY_CHANGE_FAILURE = 0x276B, + SMSG_ISLAND_AZERITE_XP_GAIN = 0x27AB, + SMSG_ISLAND_COMPLETED = 0x27AC, + SMSG_ISLAND_OPEN_QUEUE_NPC = 0x2840, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A83, - SMSG_ITEM_CHANGED = 0x2720, - SMSG_ITEM_COOLDOWN = 0x280B, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2797, + SMSG_ITEM_CHANGED = 0x2729, + SMSG_ITEM_COOLDOWN = 0x2813, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x27A0, SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25B1, SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25AF, - SMSG_ITEM_PUSH_RESULT = 0x2637, - SMSG_ITEM_TIME_UPDATE = 0x2796, - SMSG_KICK_REASON = 0x282F, + SMSG_ITEM_PUSH_RESULT = 0x2639, + SMSG_ITEM_TIME_UPDATE = 0x279F, + SMSG_KICK_REASON = 0x2837, SMSG_LEARNED_SPELLS = 0x2C4D, SMSG_LEARN_PVP_TALENTS_FAILED = 0x25EA, SMSG_LEARN_TALENTS_FAILED = 0x25E9, SMSG_LEVEL_UPDATE = 0x2587, - SMSG_LEVEL_UP_INFO = 0x271F, + SMSG_LEVEL_UP_INFO = 0x2728, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x2A25, @@ -1249,44 +1273,47 @@ enum OpcodeServer : uint16 SMSG_LF_GUILD_COMMAND_RESULT = 0x29D0, SMSG_LF_GUILD_POST = 0x29CD, SMSG_LF_GUILD_RECRUITS = 0x29CF, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27B1, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27AF, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A4, + SMSG_LIGHTNING_STORM_END = 0x26D6, + SMSG_LIGHTNING_STORM_START = 0x26D5, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27BD, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27BB, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27B0, SMSG_LOAD_CUF_PROFILES = 0x25CE, - SMSG_LOAD_EQUIPMENT_SET = 0x274D, - SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x2809, - SMSG_LOGIN_SET_TIME_SPEED = 0x274C, + SMSG_LOAD_EQUIPMENT_SET = 0x2756, + SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x2811, + SMSG_LOGIN_SET_TIME_SPEED = 0x2755, SMSG_LOGIN_VERIFY_WORLD = 0x25AC, - SMSG_LOGOUT_CANCEL_ACK = 0x26AE, - SMSG_LOGOUT_COMPLETE = 0x26AD, - SMSG_LOGOUT_RESPONSE = 0x26AC, - SMSG_LOG_XP_GAIN = 0x271B, - SMSG_LOOT_ALL_PASSED = 0x2635, - SMSG_LOOT_LIST = 0x2783, - SMSG_LOOT_MONEY_NOTIFY = 0x2630, - SMSG_LOOT_RELEASE = 0x262F, - SMSG_LOOT_RELEASE_ALL = 0x262E, - SMSG_LOOT_REMOVED = 0x2629, - SMSG_LOOT_RESPONSE = 0x2628, - SMSG_LOOT_ROLL = 0x2632, - SMSG_LOOT_ROLLS_COMPLETE = 0x2634, - SMSG_LOOT_ROLL_WON = 0x2636, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2695, - SMSG_MAIL_COMMAND_RESULT = 0x2658, - SMSG_MAIL_LIST_RESULT = 0x2798, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2799, - SMSG_MAP_OBJECTIVES_INIT = 0x27A1, + SMSG_LOGOUT_CANCEL_ACK = 0x26B3, + SMSG_LOGOUT_COMPLETE = 0x26B2, + SMSG_LOGOUT_RESPONSE = 0x26B1, + SMSG_LOG_XP_GAIN = 0x2724, + SMSG_LOOT_ALL_PASSED = 0x2637, + SMSG_LOOT_LEGACY_RULES_IN_EFFECT = 0x287A, + SMSG_LOOT_LIST = 0x278B, + SMSG_LOOT_MONEY_NOTIFY = 0x2632, + SMSG_LOOT_RELEASE = 0x2631, + SMSG_LOOT_RELEASE_ALL = 0x2630, + SMSG_LOOT_REMOVED = 0x262B, + SMSG_LOOT_RESPONSE = 0x262A, + SMSG_LOOT_ROLL = 0x2634, + SMSG_LOOT_ROLLS_COMPLETE = 0x2636, + SMSG_LOOT_ROLL_WON = 0x2638, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x269A, + SMSG_MAIL_COMMAND_RESULT = 0x265A, + SMSG_MAIL_LIST_RESULT = 0x27A1, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x27A2, + SMSG_MAP_OBJECTIVES_INIT = 0x27AA, SMSG_MAP_OBJ_EVENTS = 0x25D9, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2633, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2635, SMSG_MESSAGE_BOX = 0x2575, - SMSG_MINIMAP_PING = 0x26F7, + SMSG_MINIMAP_PING = 0x26FF, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, SMSG_MISSILE_CANCEL = 0x25DA, - SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27A8, - SMSG_MODIFY_COOLDOWN = 0x27A6, - SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27A7, - SMSG_MODIFY_PARTY_RANGE = 0x2786, + SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27B4, + SMSG_MODIFY_COOLDOWN = 0x27B2, + SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27B3, + SMSG_MODIFY_PARTY_RANGE = 0x278E, SMSG_MOTD = 0x2BAF, SMSG_MOUNT_RESULT = 0x257A, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2DE1, @@ -1312,6 +1339,7 @@ enum OpcodeServer : uint16 SMSG_MOVE_SET_HOVERING = 0x2DCF, SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x2DD7, SMSG_MOVE_SET_LAND_WALK = 0x2DCC, + SMSG_MOVE_SET_MOVEMENT_FORCE_SPEED = 0x2DB4, SMSG_MOVE_SET_NORMAL_FALL = 0x2DCE, SMSG_MOVE_SET_PITCH_RATE = 0x2DC6, SMSG_MOVE_SET_RUN_BACK_SPEED = 0x2DBF, @@ -1362,6 +1390,7 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x2DAA, SMSG_MOVE_UPDATE_FLIGHT_SPEED = 0x2DA9, SMSG_MOVE_UPDATE_KNOCK_BACK = 0x2DB0, + SMSG_MOVE_UPDATE_MOVEMENT_FORCE_SPEED = 0x2DB1, SMSG_MOVE_UPDATE_PITCH_RATE = 0x2DAC, SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x2DB3, SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x2DA5, @@ -1371,111 +1400,111 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_TELEPORT = 0x2DAF, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DAB, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DA6, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25F1, - SMSG_NEW_TAXI_PATH = 0x26A7, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25F2, + SMSG_NEW_TAXI_PATH = 0x26AC, SMSG_NEW_WORLD = 0x25AB, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D1, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D8, SMSG_NOTIFY_MONEY = 0x25AE, - SMSG_NOTIFY_RECEIVED_MAIL = 0x2659, - SMSG_OFFER_PETITION_ERROR = 0x26E0, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x271C, + SMSG_NOTIFY_RECEIVED_MAIL = 0x265B, + SMSG_OFFER_PETITION_ERROR = 0x26E8, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x2725, SMSG_ON_MONSTER_MOVE = 0x2DA2, - SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER = 0x2837, - SMSG_OPEN_CONTAINER = 0x2764, + SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER = 0x2841, + SMSG_OPEN_CONTAINER = 0x276C, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27DA, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27DC, - SMSG_OPEN_TRANSMOGRIFIER = 0x2836, - SMSG_OVERRIDE_LIGHT = 0x26E6, - SMSG_PAGE_TEXT = 0x2759, - SMSG_PARTY_COMMAND_RESULT = 0x27D7, + SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27E6, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27E8, + SMSG_OPEN_TRANSMOGRIFIER = 0x283E, + SMSG_OVERRIDE_LIGHT = 0x26EE, + SMSG_PAGE_TEXT = 0x2761, + SMSG_PARTY_COMMAND_RESULT = 0x27E3, SMSG_PARTY_INVITE = 0x25CF, - SMSG_PARTY_KILL_LOG = 0x279D, - SMSG_PARTY_MEMBER_STATE = 0x279B, - SMSG_PARTY_MEMBER_STATE_UPDATE = 0x279A, - SMSG_PARTY_UPDATE = 0x260B, - SMSG_PAUSE_MIRROR_TIMER = 0x274F, - SMSG_PENDING_RAID_LOCK = 0x2730, + SMSG_PARTY_KILL_LOG = 0x27A6, + SMSG_PARTY_MEMBER_STATE = 0x27A4, + SMSG_PARTY_MEMBER_STATE_UPDATE = 0x27A3, + SMSG_PARTY_UPDATE = 0x260C, + SMSG_PAUSE_MIRROR_TIMER = 0x2758, + SMSG_PENDING_RAID_LOCK = 0x2739, SMSG_PETITION_ALREADY_SIGNED = 0x25B8, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29F7, - SMSG_PETITION_SHOW_LIST = 0x26E9, - SMSG_PETITION_SHOW_SIGNATURES = 0x26EA, - SMSG_PETITION_SIGN_RESULTS = 0x278F, - SMSG_PET_ACTION_FEEDBACK = 0x278D, - SMSG_PET_ACTION_SOUND = 0x26C9, + SMSG_PETITION_SHOW_LIST = 0x26F1, + SMSG_PETITION_SHOW_SIGNATURES = 0x26F2, + SMSG_PETITION_SIGN_RESULTS = 0x2798, + SMSG_PET_ACTION_FEEDBACK = 0x2795, + SMSG_PET_ACTION_SOUND = 0x26CE, SMSG_PET_ADDED = 0x25A8, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2618, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x269C, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x2611, - SMSG_PET_BATTLE_FINAL_ROUND = 0x2616, - SMSG_PET_BATTLE_FINISHED = 0x2617, - SMSG_PET_BATTLE_FIRST_ROUND = 0x2613, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2612, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2619, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x2610, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2656, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2657, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2615, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x260F, - SMSG_PET_BATTLE_ROUND_RESULT = 0x2614, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x2602, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2619, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x26A1, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x2612, + SMSG_PET_BATTLE_FINAL_ROUND = 0x2617, + SMSG_PET_BATTLE_FINISHED = 0x2618, + SMSG_PET_BATTLE_FIRST_ROUND = 0x2614, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2613, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x261A, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x2611, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2658, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x2659, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2616, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x2610, + SMSG_PET_BATTLE_ROUND_RESULT = 0x2615, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x2603, SMSG_PET_CAST_FAILED = 0x2C57, SMSG_PET_CLEAR_SPELLS = 0x2C24, - SMSG_PET_DISMISS_SOUND = 0x26CA, - SMSG_PET_GOD_MODE = 0x26A4, - SMSG_PET_GUIDS = 0x2741, + SMSG_PET_DISMISS_SOUND = 0x26CF, + SMSG_PET_GOD_MODE = 0x26A9, + SMSG_PET_GUIDS = 0x274A, SMSG_PET_LEARNED_SPELLS = 0x2C4F, SMSG_PET_MODE = 0x2589, - SMSG_PET_NAME_INVALID = 0x26EE, + SMSG_PET_NAME_INVALID = 0x26F6, SMSG_PET_SLOT_UPDATED = 0x2588, SMSG_PET_SPELLS_MESSAGE = 0x2C25, SMSG_PET_STABLE_LIST = 0x25A9, SMSG_PET_STABLE_RESULT = 0x25AA, - SMSG_PET_TAME_FAILURE = 0x26DD, + SMSG_PET_TAME_FAILURE = 0x26E5, SMSG_PET_UNLEARNED_SPELLS = 0x2C50, SMSG_PHASE_SHIFT_CHANGE = 0x2577, - SMSG_PLAYED_TIME = 0x2708, + SMSG_PLAYED_TIME = 0x2711, SMSG_PLAYER_BOUND = 0x257D, SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F6, - SMSG_PLAYER_SKINNED = 0x2788, - SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x279C, - SMSG_PLAY_MUSIC = 0x27AB, - SMSG_PLAY_OBJECT_SOUND = 0x27AC, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2772, + SMSG_PLAYER_SKINNED = 0x2790, + SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x27A5, + SMSG_PLAY_MUSIC = 0x27B7, + SMSG_PLAY_OBJECT_SOUND = 0x27B8, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x277A, SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47, - SMSG_PLAY_SCENE = 0x2653, - SMSG_PLAY_SOUND = 0x27AA, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x27AD, + SMSG_PLAY_SCENE = 0x2655, + SMSG_PLAY_SOUND = 0x27B6, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x27B9, SMSG_PLAY_SPELL_VISUAL = 0x2C45, SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49, - SMSG_PLAY_TIME_WARNING = 0x273A, + SMSG_PLAY_TIME_WARNING = 0x2743, SMSG_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26FD, - SMSG_PRESTIGE_AND_HONOR_INVOLUNTARILY_CHANGED = 0x2758, - SMSG_PRE_RESSURECT = 0x27A9, + SMSG_POWER_UPDATE = 0x2705, + SMSG_PRE_RESSURECT = 0x27B5, SMSG_PRINT_NOTIFICATION = 0x25E1, - SMSG_PROC_RESIST = 0x279E, - SMSG_PROPOSE_LEVEL_GRANT = 0x2710, + SMSG_PROC_RESIST = 0x27A7, + SMSG_PROPOSE_LEVEL_GRANT = 0x2719, SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51, - SMSG_PVP_CREDIT = 0x2716, + SMSG_PVP_CREDIT = 0x271F, SMSG_PVP_LOG_DATA = 0x25B3, SMSG_PVP_OPTIONS_ENABLED = 0x25B6, SMSG_PVP_SEASON = 0x25D3, - SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x2703, - SMSG_QUERY_CREATURE_RESPONSE = 0x26FA, - SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x26FB, + SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x270C, + SMSG_QUERY_COMMUNITY_NAME_RESPONSE = 0x2708, + SMSG_QUERY_CREATURE_RESPONSE = 0x2702, + SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2703, SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE = 0x292B, SMSG_QUERY_GUILD_INFO_RESPONSE = 0x29E5, - SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x280A, - SMSG_QUERY_NPC_TEXT_RESPONSE = 0x26FE, - SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2700, - SMSG_QUERY_PETITION_RESPONSE = 0x2704, - SMSG_QUERY_PET_NAME_RESPONSE = 0x2702, - SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x26FF, + SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x2812, + SMSG_QUERY_NPC_TEXT_RESPONSE = 0x2706, + SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2709, + SMSG_QUERY_PETITION_RESPONSE = 0x270D, + SMSG_QUERY_PET_NAME_RESPONSE = 0x270B, + SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x2707, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A95, - SMSG_QUERY_QUEST_REWARD_RESPONSE = 0x2846, - SMSG_QUERY_TIME_RESPONSE = 0x271A, + SMSG_QUERY_TIME_RESPONSE = 0x2723, + SMSG_QUERY_TREASURE_PICKER_RESPONSE = 0x2850, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8E, SMSG_QUEST_FORCE_REMOVED = 0x2A9B, @@ -1485,7 +1514,7 @@ enum OpcodeServer : uint16 SMSG_QUEST_GIVER_QUEST_DETAILS = 0x2A91, SMSG_QUEST_GIVER_QUEST_FAILED = 0x2A85, SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x2A99, - SMSG_QUEST_GIVER_QUEST_TURN_IN_FAILURE = 0x2852, + SMSG_QUEST_GIVER_QUEST_TURN_IN_FAILURE = 0x285D, SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x2A92, SMSG_QUEST_GIVER_STATUS = 0x2A9A, SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x2A90, @@ -1501,117 +1530,115 @@ enum OpcodeServer : uint16 SMSG_QUEST_UPDATE_COMPLETE_BY_SPELL = 0x2A87, SMSG_QUEST_UPDATE_FAILED = 0x2A89, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8A, - SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27C8, - SMSG_RAID_DIFFICULTY_SET = 0x27EF, - SMSG_RAID_GROUP_ONLY = 0x27F1, + SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27D4, + SMSG_RAID_DIFFICULTY_SET = 0x27F7, + SMSG_RAID_GROUP_ONLY = 0x27F9, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, SMSG_RAID_MARKERS_CHANGED = 0x25B9, - SMSG_RANDOM_ROLL = 0x264C, + SMSG_RANDOM_ROLL = 0x264E, SMSG_RATED_BATTLEFIELD_INFO = 0x25A6, - SMSG_READY_CHECK_COMPLETED = 0x260E, - SMSG_READY_CHECK_RESPONSE = 0x260D, - SMSG_READY_CHECK_STARTED = 0x260C, - SMSG_READ_ITEM_RESULT_FAILED = 0x27EB, - SMSG_READ_ITEM_RESULT_OK = 0x27E1, - SMSG_REALM_LOOKUP_INFORMATION = 0x2810, - SMSG_REALM_QUERY_RESPONSE = 0x26E5, - SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27C9, - SMSG_REFER_A_FRIEND_EXPIRED = 0x2762, - SMSG_REFER_A_FRIEND_FAILURE = 0x26EB, - SMSG_REFRESH_COMPONENT = 0x2678, + SMSG_READY_CHECK_COMPLETED = 0x260F, + SMSG_READY_CHECK_RESPONSE = 0x260E, + SMSG_READY_CHECK_STARTED = 0x260D, + SMSG_READ_ITEM_RESULT_FAILED = 0x27F3, + SMSG_READ_ITEM_RESULT_OK = 0x27ED, + SMSG_REALM_LOOKUP_INFORMATION = 0x2818, + SMSG_REALM_QUERY_RESPONSE = 0x26ED, + SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27D5, + SMSG_REFER_A_FRIEND_EXPIRED = 0x276A, + SMSG_REFER_A_FRIEND_FAILURE = 0x26F3, + SMSG_REFRESH_COMPONENT = 0x267B, SMSG_REFRESH_SPELL_HISTORY = 0x2C2C, SMSG_REMOVE_ITEM_PASSIVE = 0x25C0, - SMSG_REMOVE_LOSS_OF_CONTROL = 0x2697, - SMSG_REPLACE_TROPHY_RESPONSE = 0x2807, - SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26D9, - SMSG_REQUEST_ADDON_LIST = 0x265F, + SMSG_REMOVE_LOSS_OF_CONTROL = 0x269C, + SMSG_REPLACE_TROPHY_RESPONSE = 0x280F, + SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26E1, + SMSG_REQUEST_ADDON_LIST = 0x2661, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x259D, SMSG_REQUEST_PVP_BRAWL_INFO_RESPONSE = 0x25D5, SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x25D4, SMSG_RESEARCH_COMPLETE = 0x2585, - SMSG_RESET_AREA_TRIGGER = 0x2640, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26E1, - SMSG_RESET_RANGED_COMBAT_TIMER = 0x2713, + SMSG_RESET_FAILED_NOTIFY = 0x26E9, + SMSG_RESET_RANGED_COMBAT_TIMER = 0x271C, SMSG_RESET_WEEKLY_CURRENCY = 0x2574, - SMSG_RESPEC_WIPE_CONFIRM = 0x2626, + SMSG_RESPEC_WIPE_CONFIRM = 0x2628, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2571, SMSG_RESUME_CAST_BAR = 0x2C3E, SMSG_RESUME_COMMS = 0x304B, SMSG_RESUME_TOKEN = 0x25BE, SMSG_RESURRECT_REQUEST = 0x257E, - SMSG_RESYNC_RUNES = 0x273D, + SMSG_RESYNC_RUNES = 0x2746, SMSG_ROLE_CHANGED_INFORM = 0x258C, SMSG_ROLE_CHOSEN = 0x2A39, SMSG_ROLE_POLL_INFORM = 0x258D, SMSG_RUNE_REGEN_DEBUG = 0x25C8, - SMSG_SCENARIO_BOOT = 0x27EC, - SMSG_SCENARIO_COMPLETED = 0x282C, - SMSG_SCENARIO_POIS = 0x264F, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x2648, - SMSG_SCENARIO_SET_SHOULD_SHOW_CRITERIA = 0x283A, - SMSG_SCENARIO_SPELL_UPDATE = 0x2839, - SMSG_SCENARIO_STATE = 0x2647, - SMSG_SCENE_OBJECT_EVENT = 0x25F7, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FC, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FD, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25F9, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25F8, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25FB, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25FA, + SMSG_SCENARIO_BOOT = 0x27F4, + SMSG_SCENARIO_COMPLETED = 0x2834, + SMSG_SCENARIO_POIS = 0x2651, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x264A, + SMSG_SCENARIO_SET_SHOULD_SHOW_CRITERIA = 0x2844, + SMSG_SCENARIO_SPELL_UPDATE = 0x2843, + SMSG_SCENARIO_STATE = 0x2649, + SMSG_SCENE_OBJECT_EVENT = 0x25F8, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FD, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FE, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25FA, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25F9, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25FC, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25FB, SMSG_SCRIPT_CAST = 0x2C55, - SMSG_SELL_RESPONSE = 0x26EF, + SMSG_SELL_RESPONSE = 0x26F7, SMSG_SEND_ITEM_PASSIVES = 0x25C1, SMSG_SEND_KNOWN_SPELLS = 0x2C2A, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264A, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264B, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264C, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264D, SMSG_SEND_SPELL_CHARGES = 0x2C2D, SMSG_SEND_SPELL_HISTORY = 0x2C2B, SMSG_SEND_UNLEARN_SPELLS = 0x2C2E, - SMSG_SERVER_FIRST_ACHIEVEMENT = 0x2BBC, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266A, - SMSG_SERVER_TIME = 0x26AB, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266C, + SMSG_SERVER_TIME = 0x26B0, SMSG_SETUP_CURRENCY = 0x2572, SMSG_SETUP_RESEARCH_HISTORY = 0x2584, - SMSG_SET_AI_ANIM_KIT = 0x2771, - SMSG_SET_ALL_TASK_PROGRESS = 0x27D1, - SMSG_SET_ANIM_TIER = 0x2775, + SMSG_SET_AI_ANIM_KIT = 0x2779, + SMSG_SET_ALL_TASK_PROGRESS = 0x27DD, + SMSG_SET_ANIM_TIER = 0x277D, SMSG_SET_CURRENCY = 0x2573, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x26CD, - SMSG_SET_FACTION_AT_WAR = 0x273C, - SMSG_SET_FACTION_NOT_VISIBLE = 0x276C, - SMSG_SET_FACTION_STANDING = 0x276D, - SMSG_SET_FACTION_VISIBLE = 0x276B, + SMSG_SET_DUNGEON_DIFFICULTY = 0x26D2, + SMSG_SET_FACTION_AT_WAR = 0x2745, + SMSG_SET_FACTION_NOT_VISIBLE = 0x2774, + SMSG_SET_FACTION_STANDING = 0x2775, + SMSG_SET_FACTION_VISIBLE = 0x2773, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36, - SMSG_SET_FORCED_REACTIONS = 0x275C, + SMSG_SET_FORCED_REACTIONS = 0x2764, SMSG_SET_ITEM_PURCHASE_DATA = 0x25B0, - SMSG_SET_LOOT_METHOD_FAILED = 0x2816, + SMSG_SET_LOOT_METHOD_FAILED = 0x281E, SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25B7, - SMSG_SET_MELEE_ANIM_KIT = 0x2774, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x2773, + SMSG_SET_MELEE_ANIM_KIT = 0x277C, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x277B, SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37, - SMSG_SET_PET_SPECIALIZATION = 0x2641, - SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2707, + SMSG_SET_PET_SPECIALIZATION = 0x2643, + SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2710, SMSG_SET_PLAY_HOVER_ANIM = 0x25CC, - SMSG_SET_PROFICIENCY = 0x2776, + SMSG_SET_PROFICIENCY = 0x277E, SMSG_SET_SPELL_CHARGES = 0x2C29, - SMSG_SET_TASK_COMPLETE = 0x27D2, - SMSG_SET_TIME_ZONE_INFORMATION = 0x269F, - SMSG_SET_VEHICLE_REC_ID = 0x272F, - SMSG_SHOW_ADVENTURE_MAP = 0x2835, - SMSG_SHOW_BANK = 0x26A8, - SMSG_SHOW_MAILBOX = 0x27ED, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25F0, - SMSG_SHOW_TAXI_NODES = 0x26F6, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27B2, - SMSG_SOCKET_GEMS = 0x2768, - SMSG_SOCKET_GEMS_FAILURE = 0x2769, - SMSG_SORT_BAGS_RESULT = 0x2824, - SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25F2, - SMSG_SPECIALIZATION_CHANGED = 0x25EC, - SMSG_SPECIAL_MOUNT_ANIM = 0x26C8, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2757, + SMSG_SET_TASK_COMPLETE = 0x27DE, + SMSG_SET_TIME_ZONE_INFORMATION = 0x26A4, + SMSG_SET_VEHICLE_REC_ID = 0x2738, + SMSG_SHOW_ADVENTURE_MAP = 0x283D, + SMSG_SHOW_BANK = 0x26AD, + SMSG_SHOW_MAILBOX = 0x27F5, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25F1, + SMSG_SHOW_TAXI_NODES = 0x26FE, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27BE, + SMSG_SOCKET_GEMS = 0x2770, + SMSG_SOCKET_GEMS_FAILURE = 0x2771, + SMSG_SORT_BAGS_RESULT = 0x282C, + SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25F3, + SMSG_SPECIALIZATION_CHANGED = 0x25ED, + SMSG_SPECIAL_MOUNT_ANIM = 0x26CD, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2760, SMSG_SPELL_ABSORB_LOG = 0x2C1F, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17, SMSG_SPELL_CHANNEL_START = 0x2C34, @@ -1636,73 +1663,73 @@ enum OpcodeServer : uint16 SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C1B, SMSG_SPELL_PREPARE = 0x2C38, SMSG_SPELL_START = 0x2C3A, - SMSG_SPIRIT_HEALER_CONFIRM = 0x2754, - SMSG_STAND_STATE_UPDATE = 0x275B, - SMSG_START_ELAPSED_TIMER = 0x261A, - SMSG_START_ELAPSED_TIMERS = 0x261C, - SMSG_START_LOOT_ROLL = 0x2631, - SMSG_START_MIRROR_TIMER = 0x274E, + SMSG_SPIRIT_HEALER_CONFIRM = 0x275D, + SMSG_STAND_STATE_UPDATE = 0x2763, + SMSG_START_ELAPSED_TIMER = 0x261B, + SMSG_START_ELAPSED_TIMERS = 0x261D, + SMSG_START_LOOT_ROLL = 0x2633, + SMSG_START_MIRROR_TIMER = 0x2757, SMSG_START_TIMER = 0x25BB, - SMSG_STOP_ELAPSED_TIMER = 0x261B, - SMSG_STOP_MIRROR_TIMER = 0x2750, - SMSG_STOP_SPEAKERBOT_SOUND = 0x27AE, + SMSG_STOP_ELAPSED_TIMER = 0x261C, + SMSG_STOP_MIRROR_TIMER = 0x2759, + SMSG_STOP_SPEAKERBOT_SOUND = 0x27BA, SMSG_STREAMING_MOVIES = 0x25BA, - SMSG_SUMMON_CANCEL = 0x26D8, + SMSG_SUMMON_CANCEL = 0x26E0, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258E, - SMSG_SUMMON_REQUEST = 0x2760, + SMSG_SUMMON_REQUEST = 0x2768, SMSG_SUPERCEDED_SPELLS = 0x2C4C, SMSG_SUSPEND_COMMS = 0x304A, SMSG_SUSPEND_TOKEN = 0x25BD, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2756, - SMSG_TAXI_NODE_STATUS = 0x26A5, - SMSG_TEXT_EMOTE = 0x26A3, - SMSG_THREAT_CLEAR = 0x270F, - SMSG_THREAT_REMOVE = 0x270E, - SMSG_THREAT_UPDATE = 0x270D, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x275F, + SMSG_TAXI_NODE_STATUS = 0x26AA, + SMSG_TEXT_EMOTE = 0x26A8, + SMSG_THREAT_CLEAR = 0x2718, + SMSG_THREAT_REMOVE = 0x2717, + SMSG_THREAT_UPDATE = 0x2716, SMSG_TIME_ADJUSTMENT = 0x2DA1, SMSG_TIME_SYNC_REQUEST = 0x2DA0, - SMSG_TITLE_EARNED = 0x270A, - SMSG_TITLE_LOST = 0x270B, - SMSG_TOTEM_CREATED = 0x26F2, - SMSG_TOTEM_MOVED = 0x26F3, + SMSG_TITLE_EARNED = 0x2713, + SMSG_TITLE_LOST = 0x2714, + SMSG_TOTEM_CREATED = 0x26FA, + SMSG_TOTEM_MOVED = 0x26FB, SMSG_TRADE_STATUS = 0x2581, SMSG_TRADE_UPDATED = 0x2580, - SMSG_TRAINER_BUY_FAILED = 0x2715, - SMSG_TRAINER_LIST = 0x2714, - SMSG_TRANSFER_ABORTED = 0x2740, + SMSG_TRAINER_BUY_FAILED = 0x271E, + SMSG_TRAINER_LIST = 0x271D, + SMSG_TRANSFER_ABORTED = 0x2749, SMSG_TRANSFER_PENDING = 0x25E5, SMSG_TRANSMOG_COLLECTION_UPDATE = 0x25C6, SMSG_TRANSMOG_SET_COLLECTION_UPDATE = 0x25C7, - SMSG_TRIGGER_CINEMATIC = 0x280E, - SMSG_TRIGGER_MOVIE = 0x26F4, - SMSG_TURN_IN_PETITION_RESULT = 0x2791, - SMSG_TUTORIAL_FLAGS = 0x2800, - SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x2840, - SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x283F, + SMSG_TRIGGER_CINEMATIC = 0x2816, + SMSG_TRIGGER_MOVIE = 0x26FC, + SMSG_TURN_IN_PETITION_RESULT = 0x279A, + SMSG_TUTORIAL_FLAGS = 0x2808, + SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x284A, + SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x2849, SMSG_TWITTER_STATUS = 0x2FFD, - SMSG_UI_TIME = 0x2753, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2811, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x2812, + SMSG_UI_TIME = 0x275C, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2819, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x281A, SMSG_UNLEARNED_SPELLS = 0x2C4E, - SMSG_UPDATE_ACCOUNT_DATA = 0x2748, - SMSG_UPDATE_ACTION_BUTTONS = 0x25F5, - SMSG_UPDATE_CELESTIAL_BODY = 0x285E, - SMSG_UPDATE_CHARACTER_FLAGS = 0x2806, - SMSG_UPDATE_EXPANSION_LEVEL = 0x2663, - SMSG_UPDATE_GAME_TIME_STATE = 0x2865, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D0, - SMSG_UPDATE_LAST_INSTANCE = 0x26B1, - SMSG_UPDATE_OBJECT = 0x280F, - SMSG_UPDATE_TALENT_DATA = 0x25EB, - SMSG_UPDATE_TASK_PROGRESS = 0x27D0, + SMSG_UPDATE_ACCOUNT_DATA = 0x2751, + SMSG_UPDATE_ACTION_BUTTONS = 0x25F6, + SMSG_UPDATE_CELESTIAL_BODY = 0x286E, + SMSG_UPDATE_CHARACTER_FLAGS = 0x280E, + SMSG_UPDATE_EXPANSION_LEVEL = 0x2665, + SMSG_UPDATE_GAME_TIME_STATE = 0x2875, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D7, + SMSG_UPDATE_LAST_INSTANCE = 0x26B6, + SMSG_UPDATE_OBJECT = 0x2817, + SMSG_UPDATE_TALENT_DATA = 0x25EC, + SMSG_UPDATE_TASK_PROGRESS = 0x27DC, SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19, - SMSG_UPDATE_WORLD_STATE = 0x278C, + SMSG_UPDATE_WORLD_STATE = 0x2794, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x2792, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x279B, SMSG_VENDOR_INVENTORY = 0x25CA, - SMSG_VIGNETTE_UPDATE = 0x27B0, + SMSG_VIGNETTE_UPDATE = 0x27BC, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x25DF, SMSG_VOID_STORAGE_CONTENTS = 0x25DC, SMSG_VOID_STORAGE_FAILED = 0x25DB, @@ -1711,30 +1738,31 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256E, SMSG_WAIT_QUEUE_UPDATE = 0x256D, SMSG_WARDEN_DATA = 0x2576, + SMSG_WARFRONT_COMPLETED = 0x27AD, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x25B4, - SMSG_WEATHER = 0x26CF, + SMSG_WEATHER = 0x26D4, SMSG_WEEKLY_SPELL_USAGE = 0x2C18, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x26CE, - SMSG_WORLD_QUEST_UPDATE = 0x2847, + SMSG_WHO_IS = 0x26D3, + SMSG_WORLD_QUEST_UPDATE = 0x2851, SMSG_WORLD_SERVER_INFO = 0x25C2, - SMSG_WORLD_TEXT = 0x282E, - SMSG_WOW_TOKEN_AUCTION_SOLD = 0x281C, - SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x281E, - SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x281F, - SMSG_WOW_TOKEN_CAN_REDEEM_FOR_BALANCE_RESULT = 0x2856, - SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x281D, - SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x2817, - SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x2818, - SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x2819, - SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2820, - SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2821, - SMSG_WOW_TOKEN_REDEEM_RESULT = 0x2822, - SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x281A, - SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x281B, - SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x2823, + SMSG_WORLD_TEXT = 0x2836, + SMSG_WOW_TOKEN_AUCTION_SOLD = 0x2824, + SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x2826, + SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x2827, + SMSG_WOW_TOKEN_CAN_REDEEM_FOR_BALANCE_RESULT = 0x2861, + SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x2825, + SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x281F, + SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x2820, + SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x2821, + SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2828, + SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2829, + SMSG_WOW_TOKEN_REDEEM_RESULT = 0x282A, + SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x2822, + SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x2823, + SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x282B, SMSG_XP_GAIN_ABORTED = 0x25E0, - SMSG_XP_GAIN_ENABLED = 0x27F0, + SMSG_XP_GAIN_ENABLED = 0x27F8, SMSG_ZONE_UNDER_ATTACK = 0x2BB5, // Opcodes that are not generated automatically diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index acadaf0d64a..b7994e19bf6 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -572,9 +572,9 @@ void WorldSession::LogoutPlayer(bool save) for (int j = BUYBACK_SLOT_START; j < BUYBACK_SLOT_END; ++j) { eslot = j - BUYBACK_SLOT_START; - _player->SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (j * 4), ObjectGuid::Empty); - _player->SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, 0); - _player->SetUInt32Value(PLAYER_FIELD_BUYBACK_TIMESTAMP_1 + eslot, 0); + _player->SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (j * 4), ObjectGuid::Empty); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, 0); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + eslot, 0); } _player->SaveToDB(); } @@ -1228,11 +1228,8 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) co case CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY: // 0 2.5 case CMSG_BEGIN_TRADE: // 0 2.5 case CMSG_INITIATE_TRADE: // 0 3 - case CMSG_CHAT_ADDON_MESSAGE_GUILD: // 0 3.5 - case CMSG_CHAT_ADDON_MESSAGE_OFFICER: // 0 3.5 - case CMSG_CHAT_ADDON_MESSAGE_PARTY: // 0 3.5 - case CMSG_CHAT_ADDON_MESSAGE_RAID: // 0 3.5 - case CMSG_CHAT_ADDON_MESSAGE_WHISPER: // 0 3.5 + case CMSG_CHAT_ADDON_MESSAGE: // 0 3.5 + case CMSG_CHAT_ADDON_MESSAGE_TARGETED: // 0 3.5 case CMSG_CHAT_MESSAGE_AFK: // 0 3.5 case CMSG_CHAT_MESSAGE_CHANNEL: // 0 3.5 case CMSG_CHAT_MESSAGE_DND: // 0 3.5 diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index bba6b5ce039..ecf3dcf5819 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -178,7 +178,7 @@ namespace WorldPackets class CalendarGetCalendar; class CalendarGetEvent; class CalendarGetNumPending; - class CalendarGuildFilter; + class CalendarCommunityFilter; class CalendarRemoveEvent; class CalendarRemoveInvite; class CalendarUpdateEvent; @@ -243,8 +243,7 @@ namespace WorldPackets class ChatMessageWhisper; class ChatMessageChannel; class ChatAddonMessage; - class ChatAddonMessageWhisper; - class ChatAddonMessageChannel; + class ChatAddonMessageTargeted; class ChatMessageAFK; class ChatMessageDND; class ChatMessageEmote; @@ -466,7 +465,6 @@ namespace WorldPackets class MountSpecial; class SetTaxiBenchmarkMode; class MountSetFavorite; - class PvpPrestigeRankUp; class CloseInteraction; } @@ -1129,7 +1127,7 @@ class TC_GAME_API WorldSession void HandleUndeleteCooldownStatusCallback(PreparedQueryResult result); void HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCharacter& undeleteInfo); - void SendCharCreate(ResponseCodes result); + void SendCharCreate(ResponseCodes result, ObjectGuid const& guid = ObjectGuid::Empty); void SendCharDelete(ResponseCodes result); void SendCharRename(ResponseCodes result, WorldPackets::Character::CharacterRenameInfo const* renameInfo); void SendCharCustomize(ResponseCodes result, WorldPackets::Character::CharCustomizeInfo const* customizeInfo); @@ -1454,8 +1452,7 @@ class TC_GAME_API WorldSession void HandleChatMessageChannelOpcode(WorldPackets::Chat::ChatMessageChannel& chatMessageChannel); 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 HandleChatAddonMessageTargetedOpcode(WorldPackets::Chat::ChatAddonMessageTargeted& chatAddonMessageTargeted); 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); @@ -1608,7 +1605,7 @@ class TC_GAME_API WorldSession // Calendar void HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGetCalendar& calendarGetCalendar); void HandleCalendarGetEvent(WorldPackets::Calendar::CalendarGetEvent& calendarGetEvent); - void HandleCalendarGuildFilter(WorldPackets::Calendar::CalendarGuildFilter& calendarGuildFilter); + void HandleCalendarCommunityFilter(WorldPackets::Calendar::CalendarCommunityFilter& calendarCommunityFilter); void HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEvent& calendarAddEvent); void HandleCalendarUpdateEvent(WorldPackets::Calendar::CalendarUpdateEvent& calendarUpdateEvent); void HandleCalendarRemoveEvent(WorldPackets::Calendar::CalendarRemoveEvent& calendarRemoveEvent); @@ -1717,9 +1714,6 @@ class TC_GAME_API WorldSession // Scenario void HandleQueryScenarioPOI(WorldPackets::Scenario::QueryScenarioPOI& queryScenarioPOI); - // Honor - void HandlePvpPrestigeRankUp(WorldPackets::Misc::PvpPrestigeRankUp& /*pvpPrestigeRankUp*/); - union ConnectToKey { struct diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 974fb7879dc..dd4a75865ac 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -70,8 +70,7 @@ uint8 const WorldSocket::AuthCheckSeed[16] = { 0xC5, 0xC6, 0x98, 0x95, 0x76, 0x3 uint8 const WorldSocket::SessionKeySeed[16] = { 0x58, 0xCB, 0xCF, 0x40, 0xFE, 0x2E, 0xCE, 0xA6, 0x5A, 0x90, 0xB8, 0x01, 0x68, 0x6C, 0x28, 0x0B }; uint8 const WorldSocket::ContinuedSessionSeed[16] = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F }; -uint8 const ClientTypeSeed_Win[16] = { 0x79, 0x7E, 0xCC, 0x19, 0x66, 0x2D, 0xCB, 0xD5, 0x09, 0x0A, 0x44, 0x81, 0x17, 0x3F, 0x1D, 0x26 }; -uint8 const ClientTypeSeed_Wn64[16] = { 0x6E, 0x21, 0x2D, 0xEF, 0x6A, 0x01, 0x24, 0xA3, 0xD9, 0xAD, 0x07, 0xF5, 0xE3, 0x22, 0xF7, 0xAE }; +uint8 const ClientTypeSeed_Wn64[16] = { 0xDD, 0x62, 0x65, 0x17, 0xCC, 0x6D, 0x31, 0x93, 0x2B, 0x47, 0x99, 0x34, 0xCC, 0xDC, 0x0A, 0xBF }; uint8 const ClientTypeSeed_Mc64[16] = { 0x34, 0x1C, 0xFE, 0xFE, 0x3D, 0x72, 0xAC, 0xA9, 0xA4, 0x40, 0x7D, 0xC5, 0x35, 0xDE, 0xD6, 0x6A }; WorldSocket::WorldSocket(tcp::socket&& socket) : Socket(std::move(socket)), @@ -670,9 +669,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth:: SHA256Hash digestKeyHash; digestKeyHash.UpdateData(account.Game.KeyData.data(), account.Game.KeyData.size()); - if (account.Game.OS == "Win") - digestKeyHash.UpdateData(ClientTypeSeed_Win, 16); - else if (account.Game.OS == "Wn64") + if (account.Game.OS == "Wn64") digestKeyHash.UpdateData(ClientTypeSeed_Wn64, 16); else if (account.Game.OS == "Mc64") digestKeyHash.UpdateData(ClientTypeSeed_Mc64, 16); |
