diff options
Diffstat (limited to 'src/server/game/Server')
51 files changed, 2183 insertions, 1612 deletions
diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp index 08478565728..e3eec9efc7e 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.cpp +++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp @@ -80,8 +80,8 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionBucketKey const& itemKey) ByteBuffer& operator>>(ByteBuffer& data, AuctionListFilterSubClass& filterSubClass) { - data >> filterSubClass.ItemSubclass; data >> filterSubClass.InvTypeMask; + data >> filterSubClass.ItemSubclass; return data; } @@ -595,7 +595,7 @@ WorldPacket const* AuctionHelloResponse::Write() WorldPacket const* AuctionListBiddedItemsResult::Write() { - _worldPacket << int32(Items.size()); + _worldPacket << uint32(Items.size()); _worldPacket << uint32(DesiredDelay); _worldPacket.WriteBit(HasMoreResults); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h index 795565c6fa0..da5a2a6570f 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.h +++ b/src/server/game/Server/Packets/AuctionHousePackets.h @@ -51,7 +51,7 @@ namespace WorldPackets struct AuctionListFilterSubClass { int32 ItemSubclass = 0; - uint32 InvTypeMask = 0; + uint64 InvTypeMask = 0; }; struct AuctionListFilterClass diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index f05643e807e..3809c421c86 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -138,6 +138,7 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write() _worldPacket << uint8(classAvailability.ClassID); _worldPacket << uint8(classAvailability.ActiveExpansionLevel); _worldPacket << uint8(classAvailability.AccountExpansionLevel); + _worldPacket << uint8(classAvailability.MinActiveExpansionLevel); } } @@ -166,7 +167,7 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write() _worldPacket << uint16(*SuccessInfo->NumPlayersAlliance); if (SuccessInfo->ExpansionTrialExpiration) - _worldPacket << int32(*SuccessInfo->ExpansionTrialExpiration); + _worldPacket << *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 0e6b2b65331..7999186ed3d 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -162,7 +162,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 + Optional<Timestamp<>> ExpansionTrialExpiration; ///< expansion trial expiration unix timestamp }; AuthResponse() : ServerPacket(SMSG_AUTH_RESPONSE, 132) { } diff --git a/src/server/game/Server/Packets/AzeritePackets.cpp b/src/server/game/Server/Packets/AzeritePackets.cpp index 13222e3175e..87406b757dc 100644 --- a/src/server/game/Server/Packets/AzeritePackets.cpp +++ b/src/server/game/Server/Packets/AzeritePackets.cpp @@ -26,13 +26,6 @@ WorldPacket const* WorldPackets::Azerite::PlayerAzeriteItemGains::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Azerite::OpenHeartForge::Write() -{ - _worldPacket << ForgeGUID; - - return &_worldPacket; -} - void WorldPackets::Azerite::AzeriteEssenceUnlockMilestone::Read() { _worldPacket >> AzeriteItemMilestonePowerID; @@ -76,10 +69,3 @@ WorldPacket const* WorldPackets::Azerite::PlayerAzeriteItemEquippedStatusChanged return &_worldPacket; } - -WorldPacket const* WorldPackets::Azerite::AzeriteRespecNPC::Write() -{ - _worldPacket << NpcGUID; - - return &_worldPacket; -} diff --git a/src/server/game/Server/Packets/AzeritePackets.h b/src/server/game/Server/Packets/AzeritePackets.h index 487c5d2bced..0a0204c61e7 100644 --- a/src/server/game/Server/Packets/AzeritePackets.h +++ b/src/server/game/Server/Packets/AzeritePackets.h @@ -38,24 +38,6 @@ namespace WorldPackets uint64 XP = 0; }; - class OpenHeartForge final : public ServerPacket - { - public: - OpenHeartForge() : ServerPacket(SMSG_OPEN_HEART_FORGE, 16) { } - - WorldPacket const* Write() override; - - ObjectGuid ForgeGUID; - }; - - class CloseHeartForge final : public ServerPacket - { - public: - CloseHeartForge() : ServerPacket(SMSG_CLOSE_HEART_FORGE, 0) { } - - WorldPacket const* Write() override { return &_worldPacket; } - }; - class AzeriteEssenceUnlockMilestone final : public ClientPacket { public: @@ -122,16 +104,6 @@ namespace WorldPackets bool IsHeartEquipped = false; }; - - class AzeriteRespecNPC final : public ServerPacket - { - public: - AzeriteRespecNPC(ObjectGuid npcGuid) : ServerPacket(SMSG_AZERITE_RESPEC_NPC, 16), NpcGUID(npcGuid) { } - - WorldPacket const* Write() override; - - ObjectGuid NpcGUID; - }; } } diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 1c8abe81261..2fa88ef4901 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -323,12 +323,15 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::RatedPvpInf data << int32(bracketInfo.Unused2); data << int32(bracketInfo.WeeklyPlayed); data << int32(bracketInfo.WeeklyWon); + data << int32(bracketInfo.RoundsSeasonPlayed); + data << int32(bracketInfo.RoundsSeasonWon); + data << int32(bracketInfo.RoundsWeeklyPlayed); + data << int32(bracketInfo.RoundsWeeklyWon); data << int32(bracketInfo.BestWeeklyRating); data << int32(bracketInfo.LastWeeksBestRating); data << int32(bracketInfo.BestSeasonRating); data << int32(bracketInfo.PvpTierID); data << int32(bracketInfo.Unused3); - data << int32(bracketInfo.WeeklyBestWinPvpTierID); data << int32(bracketInfo.Unused4); data << int32(bracketInfo.Rank); data.WriteBit(bracketInfo.Disqualified); diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index fcc98786fa6..587efc4e224 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -450,12 +450,15 @@ namespace WorldPackets int32 Unused2 = 0; int32 WeeklyPlayed = 0; int32 WeeklyWon = 0; + int32 RoundsSeasonPlayed = 0; + int32 RoundsSeasonWon = 0; + int32 RoundsWeeklyPlayed = 0; + int32 RoundsWeeklyWon = 0; int32 BestWeeklyRating = 0; int32 LastWeeksBestRating = 0; int32 BestSeasonRating = 0; int32 PvpTierID = 0; int32 Unused3 = 0; - int32 WeeklyBestWinPvpTierID = 0; int32 Unused4 = 0; int32 Rank = 0; bool Disqualified = false; diff --git a/src/server/game/Server/Packets/BlackMarketPackets.cpp b/src/server/game/Server/Packets/BlackMarketPackets.cpp index aac7626632a..d24019ec693 100644 --- a/src/server/game/Server/Packets/BlackMarketPackets.cpp +++ b/src/server/game/Server/Packets/BlackMarketPackets.cpp @@ -22,15 +22,6 @@ void WorldPackets::BlackMarket::BlackMarketOpen::Read() _worldPacket >> Guid; } -WorldPacket const* WorldPackets::BlackMarket::BlackMarketOpenResult::Write() -{ - _worldPacket << Guid; - _worldPacket.WriteBit(Enable); - _worldPacket.FlushBits(); - - return &_worldPacket; -} - void WorldPackets::BlackMarket::BlackMarketRequestItems::Read() { _worldPacket >> Guid; diff --git a/src/server/game/Server/Packets/BlackMarketPackets.h b/src/server/game/Server/Packets/BlackMarketPackets.h index 5c51cb5f095..aa400617008 100644 --- a/src/server/game/Server/Packets/BlackMarketPackets.h +++ b/src/server/game/Server/Packets/BlackMarketPackets.h @@ -50,17 +50,6 @@ namespace WorldPackets ObjectGuid Guid; }; - class BlackMarketOpenResult final : public ServerPacket - { - public: - BlackMarketOpenResult() : ServerPacket(SMSG_BLACK_MARKET_OPEN_RESULT, 15) { } - - WorldPacket const* Write() override; - - ObjectGuid Guid; - bool Enable = true; - }; - class BlackMarketRequestItems final : public ClientPacket { public: diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 92de494024c..9eae2466da9 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -141,7 +141,7 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field* fields) LastLoginVersion = fields[22].GetUInt32(); - for (uint8 slot = 0; slot < INVENTORY_SLOT_BAG_END; ++slot) + for (uint8 slot = 0; slot < REAGENT_BAG_SLOT_END; ++slot) { uint32 visualBase = slot * 5; VisualItems[slot].InvType = Trinity::StringTo<uint8>(equipment[visualBase + 0]).value_or(0); @@ -193,9 +193,9 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo con data << visualItem; data << charInfo.LastPlayedTime; - data << uint16(charInfo.SpecID); - data << uint32(charInfo.Unknown703); - data << uint32(charInfo.LastLoginVersion); + data << int16(charInfo.SpecID); + data << int32(charInfo.Unknown703); + data << int32(charInfo.LastLoginVersion); data << uint32(charInfo.Flags4); data << uint32(charInfo.MailSenders.size()); data << uint32(charInfo.MailSenderTypes.size()); @@ -245,6 +245,14 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::UnlockedCondition return data; } +ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceLimitDisableInfo const& raceLimitDisableInfo) +{ + data << int32(raceLimitDisableInfo.RaceID); + data << int32(raceLimitDisableInfo.BlockReason); + + return data; +} + WorldPacket const* EnumCharactersResult::Write() { _worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock)); @@ -254,12 +262,14 @@ WorldPacket const* EnumCharactersResult::Write() _worldPacket.WriteBit(IsNewPlayerRestrictionSkipped); _worldPacket.WriteBit(IsNewPlayerRestricted); _worldPacket.WriteBit(IsNewPlayer); + _worldPacket.WriteBit(IsTrialAccountRestricted); _worldPacket.WriteBit(DisabledClassesMask.has_value()); _worldPacket.WriteBit(IsAlliedRacesCreationAllowed); _worldPacket << uint32(Characters.size()); _worldPacket << int32(MaxCharacterLevel); _worldPacket << uint32(RaceUnlockData.size()); _worldPacket << uint32(UnlockedConditionalAppearances.size()); + _worldPacket << uint32(RaceLimitDisables.size()); if (DisabledClassesMask) _worldPacket << uint32(*DisabledClassesMask); @@ -267,6 +277,9 @@ WorldPacket const* EnumCharactersResult::Write() for (UnlockedConditionalAppearance const& unlockedConditionalAppearance : UnlockedConditionalAppearances) _worldPacket << unlockedConditionalAppearance; + for (RaceLimitDisableInfo const& raceLimitDisableInfo : RaceLimitDisables) + _worldPacket << raceLimitDisableInfo; + for (CharacterInfo const& charInfo : Characters) _worldPacket << charInfo; @@ -377,6 +390,7 @@ void CharRaceOrFactionChange::Read() _worldPacket >> RaceOrFactionChangeInfo->Guid; _worldPacket >> RaceOrFactionChangeInfo->SexID; _worldPacket >> RaceOrFactionChangeInfo->RaceID; + _worldPacket >> RaceOrFactionChangeInfo->InitialRaceID; RaceOrFactionChangeInfo->Customizations.resize(_worldPacket.read<uint32>()); RaceOrFactionChangeInfo->Name = _worldPacket.ReadString(nameLength); for (ChrCustomizationChoice& customization : RaceOrFactionChangeInfo->Customizations) @@ -537,6 +551,7 @@ void AlterApperance::Read() { Customizations.resize(_worldPacket.read<uint32>()); _worldPacket >> NewSex; + _worldPacket >> CustomizedRace; for (ChrCustomizationChoice& customization : Customizations) _worldPacket >> customization; @@ -556,7 +571,6 @@ WorldPacket const* LogXPGain::Write() _worldPacket << uint8(Reason); _worldPacket << int32(Amount); _worldPacket << float(GroupBonus); - _worldPacket << uint8(ReferAFriendBonusType); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index d4eff75626a..cf7b14a81ff 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -87,6 +87,7 @@ namespace WorldPackets struct CharRaceOrFactionChangeInfo { uint8 RaceID = RACE_NONE; + uint8 InitialRaceID = RACE_NONE; uint8 SexID = GENDER_NONE; ObjectGuid Guid; bool FactionChange = false; @@ -159,7 +160,7 @@ namespace WorldPackets uint8 Subclass = 0; }; - std::array<VisualItemInfo, 23> VisualItems = { }; + std::array<VisualItemInfo, 35> VisualItems = { }; std::vector<std::string> MailSenders; std::vector<uint32> MailSenderTypes; }; @@ -178,6 +179,18 @@ namespace WorldPackets int32 Unused = 0; }; + struct RaceLimitDisableInfo + { + enum + { + Server, + Level + }; + + int32 RaceID = 0; + int32 BlockReason = 0; + }; + EnumCharactersResult() : ServerPacket(SMSG_ENUM_CHARACTERS_RESULT) { } WorldPacket const* Write() override; @@ -187,6 +200,7 @@ namespace WorldPackets bool IsNewPlayerRestrictionSkipped = false; ///< allows client to skip new player restrictions bool IsNewPlayerRestricted = false; ///< forbids using level boost and class trials bool IsNewPlayer = false; ///< forbids hero classes and allied races + bool IsTrialAccountRestricted = false; bool IsAlliedRacesCreationAllowed = false; int32 MaxCharacterLevel = 1; @@ -195,6 +209,7 @@ namespace WorldPackets std::vector<CharacterInfo> Characters; ///< all characters on the list std::vector<RaceUnlock> RaceUnlockData; ///< std::vector<UnlockedConditionalAppearance> UnlockedConditionalAppearances; + std::vector<RaceLimitDisableInfo> RaceLimitDisables; }; class CheckCharacterNameAvailability final : public ClientPacket @@ -623,6 +638,7 @@ namespace WorldPackets uint8 NewSex = 0; Array<ChrCustomizationChoice, 50> Customizations; + int32 CustomizedRace = 0; }; class BarberShopResult final : public ServerPacket @@ -646,7 +662,7 @@ namespace WorldPackets class LogXPGain final : public ServerPacket { public: - LogXPGain() : ServerPacket(SMSG_LOG_XP_GAIN, 30) { } + LogXPGain() : ServerPacket(SMSG_LOG_XP_GAIN, 16 + 4 + 1 + 4 + 4) { } WorldPacket const* Write() override; @@ -654,8 +670,7 @@ namespace WorldPackets int32 Original = 0; uint8 Reason = 0; int32 Amount = 0; - float GroupBonus = 0; - uint8 ReferAFriendBonusType = 0; // 1 - 300% of normal XP; 2 - 150% of normal XP + float GroupBonus = 0.0f; }; class TitleEarned final : public ServerPacket diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index 2cf1eec9701..c99a5f1b577 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -25,7 +25,7 @@ void WorldPackets::Chat::ChatMessage::Read() { _worldPacket >> Language; - uint32 len = _worldPacket.ReadBits(9); + uint32 len = _worldPacket.ReadBits(11); Text = _worldPacket.ReadString(len); } @@ -33,7 +33,7 @@ void WorldPackets::Chat::ChatMessageWhisper::Read() { _worldPacket >> Language; uint32 targetLen = _worldPacket.ReadBits(9); - uint32 textLen = _worldPacket.ReadBits(9); + uint32 textLen = _worldPacket.ReadBits(11); Target = _worldPacket.ReadString(targetLen); Text = _worldPacket.ReadString(textLen); } @@ -43,7 +43,7 @@ void WorldPackets::Chat::ChatMessageChannel::Read() _worldPacket >> Language; _worldPacket >> ChannelGUID; uint32 targetLen = _worldPacket.ReadBits(9); - uint32 textLen = _worldPacket.ReadBits(9); + uint32 textLen = _worldPacket.ReadBits(11); Target = _worldPacket.ReadString(targetLen); Text = _worldPacket.ReadString(textLen); } @@ -77,19 +77,19 @@ void WorldPackets::Chat::ChatAddonMessageTargeted::Read() void WorldPackets::Chat::ChatMessageDND::Read() { - uint32 len = _worldPacket.ReadBits(9); + uint32 len = _worldPacket.ReadBits(11); Text = _worldPacket.ReadString(len); } void WorldPackets::Chat::ChatMessageAFK::Read() { - uint32 len = _worldPacket.ReadBits(9); + uint32 len = _worldPacket.ReadBits(11); Text = _worldPacket.ReadString(len); } void WorldPackets::Chat::ChatMessageEmote::Read() { - uint32 len = _worldPacket.ReadBits(9); + uint32 len = _worldPacket.ReadBits(11); Text = _worldPacket.ReadString(len); } diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp new file mode 100644 index 00000000000..d06b0e21e7d --- /dev/null +++ b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp @@ -0,0 +1,61 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "CraftingPacketsCommon.h" + +namespace WorldPackets::Crafting +{ +ByteBuffer& operator<<(ByteBuffer& data, SpellReducedReagent const& spellReducedReagent) +{ + data << int32(spellReducedReagent.ItemID); + data << int32(spellReducedReagent.Quantity); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData) +{ + data << int32(craftingData.CraftingQualityID); + data << int32(craftingData.field_4); + data << int32(craftingData.field_8); + data << int32(craftingData.Multicraft); + data << int32(craftingData.field_10); + data << int32(craftingData.field_14); + data << int32(craftingData.CritBonusSkill); + data << float(craftingData.field_1C); + data << uint64(craftingData.field_20); + data << uint32(craftingData.ResourcesReturned.size()); + data << uint32(craftingData.OperationID); + data << craftingData.ItemGUID; + data << int32(craftingData.Quantity); + data << int32(craftingData.EnchantID); + + for (SpellReducedReagent const& spellReducedReagent : craftingData.ResourcesReturned) + data << spellReducedReagent; + + data.WriteBit(craftingData.IsCrit); + data.WriteBit(craftingData.field_29); + data.WriteBit(craftingData.field_2A); + data.WriteBit(craftingData.BonusCraft); + data.FlushBits(); + + data << craftingData.OldItem; + data << craftingData.NewItem; + + return data; +} +} diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.h b/src/server/game/Server/Packets/CraftingPacketsCommon.h new file mode 100644 index 00000000000..b74d77cda29 --- /dev/null +++ b/src/server/game/Server/Packets/CraftingPacketsCommon.h @@ -0,0 +1,59 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TRINITYCORE_CRAFTING_PACKETS_COMMON_H +#define TRINITYCORE_CRAFTING_PACKETS_COMMON_H + +#include "ItemPacketsCommon.h" +#include "ObjectGuid.h" + +namespace WorldPackets::Crafting +{ +struct SpellReducedReagent +{ + int32 ItemID = 0; + int32 Quantity = 0; +}; + +struct CraftingData +{ + int32 CraftingQualityID = 0; + int32 field_4 = 0; + int32 field_8 = 0; + int32 Multicraft = 0; + int32 field_10 = 0; + int32 field_14 = 0; + int32 CritBonusSkill = 0; + float field_1C = 0.0f; + uint64 field_20 = 0; + bool IsCrit = false; + bool field_29 = false; + bool field_2A = false; + bool BonusCraft = false; + std::vector<SpellReducedReagent> ResourcesReturned; + uint32 OperationID = 0; + ObjectGuid ItemGUID; + int32 Quantity = 0; + Item::ItemInstance OldItem; + Item::ItemInstance NewItem; + int32 EnchantID = 0; +}; + +ByteBuffer& operator<<(ByteBuffer& data, SpellReducedReagent const& spellReducedReagent); +ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData); +} +#endif // TRINITYCORE_CRAFTING_PACKETS_COMMON_H diff --git a/src/server/game/Server/Packets/GameObjectPackets.cpp b/src/server/game/Server/Packets/GameObjectPackets.cpp index fd15e7264cf..987a0e4edac 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.cpp +++ b/src/server/game/Server/Packets/GameObjectPackets.cpp @@ -20,11 +20,13 @@ void WorldPackets::GameObject::GameObjUse::Read() { _worldPacket >> Guid; + IsSoftInteract = _worldPacket.ReadBit(); } void WorldPackets::GameObject::GameObjReportUse::Read() { _worldPacket >> Guid; + IsSoftInteract = _worldPacket.ReadBit(); } WorldPacket const* WorldPackets::GameObject::GameObjectDespawn::Write() @@ -70,28 +72,34 @@ WorldPacket const* WorldPackets::GameObject::GameObjectCustomAnim::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::GameObject::GameObjectUILink::Write() +WorldPacket const* WorldPackets::GameObject::GameObjectPlaySpellVisual::Write() { _worldPacket << ObjectGUID; - _worldPacket << int32(UILink); - _worldPacket << int32(UIItemInteractionID); + _worldPacket << ActivatorGUID; + _worldPacket << int32(SpellVisualID); return &_worldPacket; } -WorldPacket const* WorldPackets::GameObject::GameObjectPlaySpellVisual::Write() +WorldPacket const* WorldPackets::GameObject::GameObjectSetStateLocal::Write() { _worldPacket << ObjectGUID; - _worldPacket << ActivatorGUID; - _worldPacket << int32(SpellVisualID); + _worldPacket << uint8(State); return &_worldPacket; } -WorldPacket const* WorldPackets::GameObject::GameObjectSetStateLocal::Write() +WorldPacket const* WorldPackets::GameObject::GameObjectInteraction::Write() { _worldPacket << ObjectGUID; - _worldPacket << uint8(State); + _worldPacket << int32(InteractionType); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::GameObject::GameObjectCloseInteraction::Write() +{ + _worldPacket << int32(InteractionType); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/GameObjectPackets.h b/src/server/game/Server/Packets/GameObjectPackets.h index 3bd71aba0ab..d7ce351bdab 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.h +++ b/src/server/game/Server/Packets/GameObjectPackets.h @@ -21,6 +21,8 @@ #include "Packet.h" #include "GameObject.h" +enum class PlayerInteractionType : int32; + namespace WorldPackets { namespace GameObject @@ -33,6 +35,7 @@ namespace WorldPackets void Read() override; ObjectGuid Guid; + bool IsSoftInteract = false; }; class GameObjReportUse final : public ClientPacket @@ -43,6 +46,7 @@ namespace WorldPackets void Read() override; ObjectGuid Guid; + bool IsSoftInteract = false; }; class GameObjectDespawn final : public ServerPacket @@ -119,39 +123,48 @@ namespace WorldPackets bool PlayAsDespawn = false; }; - class GameObjectUILink final : public ServerPacket + class GameObjectPlaySpellVisual final : public ServerPacket { public: - GameObjectUILink() : ServerPacket(SMSG_GAME_OBJECT_UI_LINK, 16 + 4) { } + GameObjectPlaySpellVisual() : ServerPacket(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL, 16 + 16 + 4) { } WorldPacket const* Write() override; ObjectGuid ObjectGUID; - int32 UILink = 0; - int32 UIItemInteractionID = 0; + ObjectGuid ActivatorGUID; + int32 SpellVisualID = 0; }; - class GameObjectPlaySpellVisual final : public ServerPacket + class GameObjectSetStateLocal final : public ServerPacket { public: - GameObjectPlaySpellVisual() : ServerPacket(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL, 16 + 16 + 4) { } + GameObjectSetStateLocal() : ServerPacket(SMSG_GAME_OBJECT_SET_STATE_LOCAL, 16 + 1) { } WorldPacket const* Write() override; ObjectGuid ObjectGUID; - ObjectGuid ActivatorGUID; - int32 SpellVisualID = 0; + uint8 State = 0; }; - class GameObjectSetStateLocal final : public ServerPacket + class GameObjectInteraction final : public ServerPacket { public: - GameObjectSetStateLocal() : ServerPacket(SMSG_GAME_OBJECT_SET_STATE_LOCAL, 16 + 1) { } + GameObjectInteraction() : ServerPacket(SMSG_GAME_OBJECT_INTERACTION, 16 + 4) { } WorldPacket const* Write() override; ObjectGuid ObjectGUID; - uint8 State = 0; + PlayerInteractionType InteractionType = {}; + }; + + class GameObjectCloseInteraction final : public ServerPacket + { + public: + GameObjectCloseInteraction() : ServerPacket(SMSG_GAME_OBJECT_CLOSE_INTERACTION, 4) { } + + WorldPacket const* Write() override; + + PlayerInteractionType InteractionType = {}; }; } } diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp index 234ce345462..0796748d877 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.cpp +++ b/src/server/game/Server/Packets/GarrisonPackets.cpp @@ -481,13 +481,4 @@ WorldPacket const* GarrisonBuildingActivated::Write() return &_worldPacket; } - -WorldPacket const* GarrisonOpenTalentNpc::Write() -{ - _worldPacket << NpcGUID; - _worldPacket << int32(GarrTalentTreeID); - _worldPacket << int32(FriendshipFactionID); - - return &_worldPacket; -} } diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h index 9b1367a5819..983982842f8 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.h +++ b/src/server/game/Server/Packets/GarrisonPackets.h @@ -437,18 +437,6 @@ namespace WorldPackets uint32 GarrPlotInstanceID = 0; }; - - class GarrisonOpenTalentNpc final : public ServerPacket - { - public: - GarrisonOpenTalentNpc() : ServerPacket(SMSG_GARRISON_OPEN_TALENT_NPC, 16 + 4 + 4) { } - - WorldPacket const* Write() override; - - ObjectGuid NpcGUID; - int32 GarrTalentTreeID = 0; - int32 FriendshipFactionID = 0; // Always 0 except on The Deaths of Chromie Scenario - }; } } diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index 9cd83f4ac62..71cd2daf6d9 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -20,12 +20,14 @@ #include "Item.h" #include "Player.h" -void WorldPackets::Inspect::Inspect::Read() +namespace WorldPackets::Inspect +{ +void Inspect::Read() { _worldPacket >> Target; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectEnchantData const& enchantData) +ByteBuffer& operator<<(ByteBuffer& data, InspectEnchantData const& enchantData) { data << uint32(enchantData.Id); data << uint8(enchantData.Index); @@ -33,7 +35,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectEnchantDa return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::AzeriteEssenceData const& azeriteEssenceData) +ByteBuffer& operator<<(ByteBuffer& data, AzeriteEssenceData const& azeriteEssenceData) { data << uint32(azeriteEssenceData.Index); data << uint32(azeriteEssenceData.AzeriteEssenceID); @@ -44,7 +46,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::AzeriteEssenceDa return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectItemData const& itemData) +ByteBuffer& operator<<(ByteBuffer& data, InspectItemData const& itemData) { data << itemData.CreatorGUID; data << uint8(itemData.Index); @@ -60,19 +62,19 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectItemData data.WriteBits(itemData.Gems.size(), 2); data.FlushBits(); - for (WorldPackets::Inspect::AzeriteEssenceData const& azeriteEssenceData : itemData.AzeriteEssences) + for (AzeriteEssenceData const& azeriteEssenceData : itemData.AzeriteEssences) data << azeriteEssenceData; - for (WorldPackets::Inspect::InspectEnchantData const& enchantData : itemData.Enchants) + for (InspectEnchantData const& enchantData : itemData.Enchants) data << enchantData; - for (WorldPackets::Item::ItemGemData const& gem : itemData.Gems) + for (Item::ItemGemData const& gem : itemData.Gems) data << gem; return data; } -void WorldPackets::Inspect::PlayerModelDisplayInfo::Initialize(Player const* player) +void PlayerModelDisplayInfo::Initialize(Player const* player) { GUID = player->GetGUID(); SpecializationID = player->GetPrimarySpecialization(); @@ -89,7 +91,7 @@ void WorldPackets::Inspect::PlayerModelDisplayInfo::Initialize(Player const* pla Items.emplace_back(item, i); } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PlayerModelDisplayInfo const& displayInfo) +ByteBuffer& operator<<(ByteBuffer& data, PlayerModelDisplayInfo const& displayInfo) { data << displayInfo.GUID; data << int32(displayInfo.SpecializationID); @@ -101,16 +103,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PlayerModelDispl data << uint32(displayInfo.Customizations.size()); data.WriteString(displayInfo.Name); - for (WorldPackets::Character::ChrCustomizationChoice const& customization : displayInfo.Customizations) + for (Character::ChrCustomizationChoice const& customization : displayInfo.Customizations) data << customization; - for (WorldPackets::Inspect::InspectItemData const& item : displayInfo.Items) + for (InspectItemData const& item : displayInfo.Items) data << item; return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectGuildData const& guildData) +ByteBuffer& operator<<(ByteBuffer& data, InspectGuildData const& guildData) { data << guildData.GuildGUID; data << int32(guildData.NumGuildMembers); @@ -119,9 +121,10 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectGuildData return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData const& bracket) +ByteBuffer& operator<<(ByteBuffer& data, PVPBracketData const& bracket) { data << uint8(bracket.Bracket); + data << int32(bracket.Unused3); data << int32(bracket.Rating); data << int32(bracket.Rank); data << int32(bracket.WeeklyPlayed); @@ -134,13 +137,26 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData c data << int32(bracket.WeeklyBestWinPvpTierID); data << int32(bracket.Unused1); data << int32(bracket.Unused2); + data << int32(bracket.RoundsSeasonPlayed); + data << int32(bracket.RoundsSeasonWon); + data << int32(bracket.RoundsWeeklyPlayed); + data << int32(bracket.RoundsWeeklyWon); data.WriteBit(bracket.Disqualified); data.FlushBits(); return data; } -WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint8 index) +ByteBuffer& operator<<(ByteBuffer& data, TraitInspectInfo const& traits) +{ + data << int32(traits.Level); + data << int32(traits.ChrSpecializationID); + data << traits.Config; + + return data; +} + +InspectItemData::InspectItemData(::Item const* item, uint8 index) { CreatorGUID = item->GetCreator(); @@ -159,7 +175,7 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint { Gems.emplace_back(); - WorldPackets::Item::ItemGemData& gem = Gems.back(); + Item::ItemGemData& gem = Gems.back(); gem.Slot = i; gem.Item.Initialize(&gemData); } @@ -174,7 +190,7 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint { AzeriteEssences.emplace_back(); - WorldPackets::Inspect::AzeriteEssenceData& essence = AzeriteEssences.back(); + AzeriteEssenceData& essence = AzeriteEssences.back(); essence.Index = slot; essence.AzeriteEssenceID = essences->AzeriteEssenceID[slot]; if (essence.AzeriteEssenceID) @@ -189,7 +205,7 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint } } -WorldPacket const* WorldPackets::Inspect::InspectResult::Write() +WorldPacket const* InspectResult::Write() { _worldPacket << DisplayInfo; _worldPacket << uint32(Glyphs.size()); @@ -221,10 +237,13 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write() if (AzeriteLevel) _worldPacket << int32(*AzeriteLevel); + _worldPacket << TalentTraits; + return &_worldPacket; } -void WorldPackets::Inspect::QueryInspectAchievements::Read() +void QueryInspectAchievements::Read() { _worldPacket >> Guid; } +} diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h index 94411ef5e07..ac65e1a0785 100644 --- a/src/server/game/Server/Packets/InspectPackets.h +++ b/src/server/game/Server/Packets/InspectPackets.h @@ -24,6 +24,7 @@ #include "ObjectGuid.h" #include "RaceMask.h" #include "SharedDefines.h" +#include "TraitPacketsCommon.h" class Item; class Player; @@ -46,7 +47,7 @@ namespace WorldPackets { InspectEnchantData(uint32 id, uint8 index) : Id(id), Index(index) { } - uint32 Id = 0; + uint32 Id = 0; uint8 Index = 0; }; @@ -95,20 +96,32 @@ namespace WorldPackets struct PVPBracketData { - int32 Rating = 0; - int32 Rank = 0; - int32 WeeklyPlayed = 0; - int32 WeeklyWon = 0; - int32 SeasonPlayed = 0; - int32 SeasonWon = 0; + int32 Rating = 0; + int32 Rank = 0; + int32 WeeklyPlayed = 0; + int32 WeeklyWon = 0; + int32 SeasonPlayed = 0; + int32 SeasonWon = 0; int32 WeeklyBestRating = 0; int32 SeasonBestRating = 0; - int32 PvpTierID = 0; + int32 PvpTierID = 0; int32 WeeklyBestWinPvpTierID = 0; - int32 Unused1 = 0; - int32 Unused2 = 0; - uint8 Bracket = 0; - bool Disqualified = false; + int32 Unused1 = 0; + int32 Unused2 = 0; + int32 Unused3 = 0; + int32 RoundsSeasonPlayed = 0; + int32 RoundsSeasonWon = 0; + int32 RoundsWeeklyPlayed = 0; + int32 RoundsWeeklyWon = 0; + uint8 Bracket = 0; + bool Disqualified = false; + }; + + struct TraitInspectInfo + { + int32 Level = 0; + int32 ChrSpecializationID = 0; + Traits::TraitConfig Config; }; class InspectResult final : public ServerPacket @@ -126,7 +139,7 @@ namespace WorldPackets std::vector<uint16> Talents; std::array<uint16, MAX_PVP_TALENT_SLOTS> PvpTalents; Optional<InspectGuildData> GuildData; - std::array<PVPBracketData, 6> Bracket; + std::array<PVPBracketData, 7> Bracket; Optional<int32> AzeriteLevel; int32 ItemLevel = 0; uint32 LifetimeHK = 0; @@ -134,6 +147,7 @@ namespace WorldPackets uint16 TodayHK = 0; uint16 YesterdayHK = 0; uint8 LifetimeMaxRank = 0; + TraitInspectInfo TalentTraits; }; class QueryInspectAchievements final : public ClientPacket diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index 1c6c2117e76..c747b94a643 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -258,14 +258,27 @@ WorldPacket const* WorldPackets::Item::ItemPushResult::Write() _worldPacket << uint32(BattlePetBreedQuality); _worldPacket << int32(BattlePetLevel); _worldPacket << ItemGUID; + _worldPacket << uint32(Toasts.size()); + for (UiEventToast const& uiEventToast : Toasts) + _worldPacket << uiEventToast; + _worldPacket.WriteBit(Pushed); _worldPacket.WriteBit(Created); _worldPacket.WriteBits(DisplayText, 3); _worldPacket.WriteBit(IsBonusRoll); _worldPacket.WriteBit(IsEncounterLoot); + _worldPacket.WriteBit(CraftingData.has_value()); + _worldPacket.WriteBit(FirstCraftOperationID.has_value()); _worldPacket.FlushBits(); + _worldPacket << Item; + if (FirstCraftOperationID) + _worldPacket << uint32(*FirstCraftOperationID); + + if (CraftingData) + _worldPacket << *CraftingData; + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index caa18789635..702ed6c8adf 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -19,6 +19,7 @@ #define ItemPackets_h__ #include "Packet.h" +#include "CraftingPacketsCommon.h" #include "DBCEnums.h" #include "ItemDefines.h" #include "ItemPacketsCommon.h" @@ -345,12 +346,15 @@ namespace WorldPackets // only set if different than real ID (similar to CreatureTemplate.KillCredit) int32 Quantity = 0; int32 QuantityInInventory = 0; - int32 DungeonEncounterID = 0; + int32 DungeonEncounterID = 0; int32 BattlePetSpeciesID = 0; int32 BattlePetBreedID = 0; uint32 BattlePetBreedQuality = 0; int32 BattlePetLevel = 0; ObjectGuid ItemGUID; + std::vector<UiEventToast> Toasts; + Optional<Crafting::CraftingData> CraftingData; + Optional<uint32> FirstCraftOperationID; bool Pushed = false; DisplayType DisplayText = DISPLAY_TYPE_HIDDEN; bool Created = false; diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp index a022a0b3783..70da5777d07 100644 --- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp +++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp @@ -20,9 +20,7 @@ #include "Loot.h" #include "Player.h" -namespace WorldPackets -{ -namespace Item +namespace WorldPackets::Item { bool ItemBonuses::operator==(ItemBonuses const& r) const { @@ -51,7 +49,7 @@ bool ItemModList::operator==(ItemModList const& r) const void ItemInstance::Initialize(::Item const* item) { ItemID = item->GetEntry(); - std::vector<int32> const& bonusListIds = item->m_itemData->BonusListIDs; + std::vector<int32> const& bonusListIds = item->GetBonusListIDs(); if (!bonusListIds.empty()) { ItemBonus.emplace(); @@ -126,6 +124,20 @@ bool ItemInstance::operator==(ItemInstance const& r) const return true; } +bool ItemBonusKey::operator==(ItemBonusKey const& right) const +{ + if (ItemID != right.ItemID) + return false; + + if (BonusListIDs != right.BonusListIDs) + return false; + + if (Modifications != right.Modifications) + return false; + + return true; +} + ByteBuffer& operator<<(ByteBuffer& data, ItemBonuses const& itemBonusInstanceData) { data << uint8(itemBonusInstanceData.Context); @@ -224,6 +236,21 @@ ByteBuffer& operator>>(ByteBuffer& data, ItemInstance& itemInstance) return data; } +ByteBuffer& operator<<(ByteBuffer& data, ItemBonusKey const& itemBonusKey) +{ + data << int32(itemBonusKey.ItemID); + data << uint32(itemBonusKey.BonusListIDs.size()); + data << uint32(itemBonusKey.Modifications.size()); + + if (!itemBonusKey.BonusListIDs.empty()) + data.append(itemBonusKey.BonusListIDs.data(), itemBonusKey.BonusListIDs.size()); + + for (ItemMod const& modification : itemBonusKey.Modifications) + data << modification; + + return data; +} + ByteBuffer& operator<<(ByteBuffer& data, ItemEnchantData const& itemEnchantData) { data << int32(itemEnchantData.ID); @@ -259,5 +286,12 @@ ByteBuffer& operator>>(ByteBuffer& data, InvUpdate& invUpdate) return data; } + +ByteBuffer& operator<<(ByteBuffer& data, UiEventToast const& uiEventToast) +{ + data << int32(uiEventToast.UiEventToastID); + data << int32(uiEventToast.Asset); + + return data; } } diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.h b/src/server/game/Server/Packets/ItemPacketsCommon.h index 2131d8ae7a5..b70cb8b1491 100644 --- a/src/server/game/Server/Packets/ItemPacketsCommon.h +++ b/src/server/game/Server/Packets/ItemPacketsCommon.h @@ -82,6 +82,16 @@ namespace WorldPackets bool operator!=(ItemInstance const& r) const { return !(*this == r); } }; + struct ItemBonusKey + { + int32 ItemID = 0; + std::vector<int32> BonusListIDs; + std::vector<ItemMod> Modifications; + + bool operator==(ItemBonusKey const& right) const; + bool operator!=(ItemBonusKey const& r) const { return !(*this == r); } + }; + struct ItemEnchantData { ItemEnchantData(int32 id, uint32 expiration, int32 charges, uint8 slot) : ID(id), Expiration(expiration), Charges(charges), Slot(slot) { } @@ -107,23 +117,27 @@ namespace WorldPackets std::vector<InvItem> Items; }; - } -} -namespace WorldPackets -{ -namespace Item -{ -ByteBuffer& operator<<(ByteBuffer& data, ItemInstance const& itemInstance); -ByteBuffer& operator>>(ByteBuffer& data, ItemInstance& itemInstance); + struct UiEventToast + { + int32 UiEventToastID = 0; + int32 Asset = 0; + }; -ByteBuffer& operator<<(ByteBuffer& data, ItemEnchantData const& itemEnchantData); + ByteBuffer& operator<<(ByteBuffer& data, ItemEnchantData const& itemEnchantData); -ByteBuffer& operator<<(ByteBuffer& data, ItemGemData const& itemGemInstanceData); -ByteBuffer& operator>>(ByteBuffer& data, ItemGemData& itemGemInstanceData); + ByteBuffer& operator<<(ByteBuffer& data, ItemGemData const& itemGemInstanceData); + ByteBuffer& operator>>(ByteBuffer& data, ItemGemData& itemGemInstanceData); -ByteBuffer& operator>>(ByteBuffer& data, InvUpdate& invUpdate); -} + ByteBuffer& operator<<(ByteBuffer& data, ItemInstance const& itemInstance); + ByteBuffer& operator>>(ByteBuffer& data, ItemInstance& itemInstance); + + ByteBuffer& operator<<(ByteBuffer& data, ItemBonusKey const& itemBonusKey); + + ByteBuffer& operator>>(ByteBuffer& data, InvUpdate& invUpdate); + + ByteBuffer& operator<<(ByteBuffer& data, UiEventToast const& uiEventToast); + } } #endif // ItemPacketsCommon_h__ diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp index 5c06b7bd41f..ee205ab1908 100644 --- a/src/server/game/Server/Packets/LootPackets.cpp +++ b/src/server/game/Server/Packets/LootPackets.cpp @@ -33,6 +33,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Loot::LootItemData const& void WorldPackets::Loot::LootUnit::Read() { _worldPacket >> Unit; + IsSoftInteract = _worldPacket.ReadBit(); } WorldPacket const* WorldPackets::Loot::LootResponse::Write() @@ -168,6 +169,7 @@ WorldPacket const* WorldPackets::Loot::StartLootRoll::Write() _worldPacket << int32(MapID); _worldPacket << RollTime; _worldPacket << uint8(ValidRolls); + _worldPacket.append(LootRollIneligibleReason.data(), LootRollIneligibleReason.size()); _worldPacket << uint8(Method); _worldPacket << Item; diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h index 794e5ca3212..a69b36586c9 100644 --- a/src/server/game/Server/Packets/LootPackets.h +++ b/src/server/game/Server/Packets/LootPackets.h @@ -22,6 +22,8 @@ #include "ObjectGuid.h" #include "ItemPacketsCommon.h" +enum class LootRollIneligibilityReason : uint32; + namespace WorldPackets { namespace Loot @@ -34,6 +36,7 @@ namespace WorldPackets void Read() override; ObjectGuid Unit; + bool IsSoftInteract = false; }; struct LootItemData @@ -221,6 +224,7 @@ namespace WorldPackets Duration<Milliseconds, uint32> RollTime; uint8 Method = 0; uint8 ValidRolls = 0; + std::array<LootRollIneligibilityReason, 4> LootRollIneligibleReason = { }; LootItemData Item; }; diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp index e916410f78b..712f174bd39 100644 --- a/src/server/game/Server/Packets/MailPackets.cpp +++ b/src/server/game/Server/Packets/MailPackets.cpp @@ -277,10 +277,3 @@ WorldPacket const* WorldPackets::Mail::NotifyReceivedMail::Write() return &_worldPacket; } - -WorldPacket const* WorldPackets::Mail::ShowMailbox::Write() -{ - _worldPacket << PostmasterGUID; - - return &_worldPacket; -} diff --git a/src/server/game/Server/Packets/MailPackets.h b/src/server/game/Server/Packets/MailPackets.h index c7cb29bf4c0..5c65dce692e 100644 --- a/src/server/game/Server/Packets/MailPackets.h +++ b/src/server/game/Server/Packets/MailPackets.h @@ -235,16 +235,6 @@ namespace WorldPackets float Delay = 0.0f; }; - - class ShowMailbox final : public ServerPacket - { - public: - ShowMailbox() : ServerPacket(SMSG_SHOW_MAILBOX, 16) { } - - WorldPacket const* Write() override; - - ObjectGuid PostmasterGUID; - }; } } diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index bfbe9f748a4..dc07825fdf5 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -53,11 +53,13 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write() _worldPacket.WriteBit(WeeklyQuantity.has_value()); _worldPacket.WriteBit(TrackedQuantity.has_value()); _worldPacket.WriteBit(MaxQuantity.has_value()); - _worldPacket.WriteBit(Unused901.has_value()); + _worldPacket.WriteBit(TotalEarned.has_value()); _worldPacket.WriteBit(SuppressChatLog); _worldPacket.WriteBit(QuantityChange.has_value()); - _worldPacket.WriteBit(QuantityGainSource.has_value()); _worldPacket.WriteBit(QuantityLostSource.has_value()); + _worldPacket.WriteBit(QuantityGainSource.has_value()); + _worldPacket.WriteBit(FirstCraftOperationID.has_value()); + _worldPacket.WriteBit(LastSpendTime.has_value()); _worldPacket.FlushBits(); if (WeeklyQuantity) @@ -69,17 +71,23 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write() if (MaxQuantity) _worldPacket << int32(*MaxQuantity); - if (Unused901) - _worldPacket << int32(*Unused901); + if (TotalEarned) + _worldPacket << int32(*TotalEarned); if (QuantityChange) _worldPacket << int32(*QuantityChange); + if (QuantityLostSource) + _worldPacket << int32(*QuantityLostSource); + if (QuantityGainSource) _worldPacket << int32(*QuantityGainSource); - if (QuantityLostSource) - _worldPacket << int32(*QuantityLostSource); + if (FirstCraftOperationID) + _worldPacket << uint32(*FirstCraftOperationID); + + if (LastSpendTime) + _worldPacket << *LastSpendTime; return &_worldPacket; } @@ -102,7 +110,8 @@ WorldPacket const* WorldPackets::Misc::SetupCurrency::Write() _worldPacket.WriteBit(data.MaxWeeklyQuantity.has_value()); _worldPacket.WriteBit(data.TrackedQuantity.has_value()); _worldPacket.WriteBit(data.MaxQuantity.has_value()); - _worldPacket.WriteBit(data.Unused901.has_value()); + _worldPacket.WriteBit(data.TotalEarned.has_value()); + _worldPacket.WriteBit(data.LastSpendTime.has_value()); _worldPacket.WriteBits(data.Flags, 5); _worldPacket.FlushBits(); @@ -114,8 +123,10 @@ WorldPacket const* WorldPackets::Misc::SetupCurrency::Write() _worldPacket << uint32(*data.TrackedQuantity); if (data.MaxQuantity) _worldPacket << int32(*data.MaxQuantity); - if (data.Unused901) - _worldPacket << int32(*data.Unused901); + if (data.TotalEarned) + _worldPacket << int32(*data.TotalEarned); + if (data.LastSpendTime) + _worldPacket << *data.LastSpendTime; } return &_worldPacket; @@ -321,13 +332,6 @@ WorldPacket const* WorldPackets::Misc::PlayerBound::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Misc::BinderConfirm::Write() -{ - _worldPacket << Unit; - - return &_worldPacket; -} - WorldPacket const* WorldPackets::Misc::StartMirrorTimer::Write() { _worldPacket << int32(Timer); diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index ead73143901..f4b089371b7 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -63,17 +63,6 @@ namespace WorldPackets uint32 AreaID = 0; }; - class BinderConfirm final : public ServerPacket - { - public: - BinderConfirm() : ServerPacket(SMSG_BINDER_CONFIRM, 16) { } - BinderConfirm(ObjectGuid unit) : ServerPacket(SMSG_BINDER_CONFIRM, 16), Unit(unit) { } - - WorldPacket const* Write() override; - - ObjectGuid Unit; - }; - class InvalidatePlayer final : public ServerPacket { public: @@ -116,13 +105,16 @@ namespace WorldPackets int32 Type = 0; int32 Quantity = 0; uint32 Flags = 0; + std::vector<Item::UiEventToast> Toasts; Optional<int32> WeeklyQuantity; Optional<int32> TrackedQuantity; Optional<int32> MaxQuantity; - Optional<int32> Unused901; + Optional<int32> TotalEarned; Optional<int32> QuantityChange; Optional<int32> QuantityGainSource; Optional<int32> QuantityLostSource; + Optional<uint32> FirstCraftOperationID; + Optional<Timestamp<>> LastSpendTime; bool SuppressChatLog = false; }; @@ -147,7 +139,8 @@ namespace WorldPackets Optional<int32> MaxWeeklyQuantity; // Weekly Currency cap. Optional<int32> TrackedQuantity; Optional<int32> MaxQuantity; - Optional<int32> Unused901; + Optional<int32> TotalEarned; + Optional<Timestamp<>> LastSpendTime; uint8 Flags = 0; // 0 = none, }; diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index c631249f01a..391be953ee7 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -29,6 +29,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) bool hasFallData = hasFallDirection || movementInfo.jump.fallTime != 0; bool hasSpline = false; // todo 6.x send this infos bool hasInertia = movementInfo.inertia.has_value(); + bool hasAdvFlying = movementInfo.advFlying.has_value(); data << movementInfo.guid; data << uint32(movementInfo.flags); @@ -57,6 +58,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) data.WriteBit(false); // HeightChangeFailed data.WriteBit(false); // RemoteTimeValid data.WriteBit(hasInertia); + data.WriteBit(hasAdvFlying); data.FlushBits(); @@ -65,11 +67,17 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) if (hasInertia) { - data << movementInfo.inertia->guid; + data << uint32(movementInfo.inertia->id); data << movementInfo.inertia->force.PositionXYZStream(); data << uint32(movementInfo.inertia->lifetime); } + if (hasAdvFlying) + { + data << float(movementInfo.advFlying->forwardVelocity); + data << float(movementInfo.advFlying->upVelocity); + } + if (hasFallData) { data << uint32(movementInfo.jump.fallTime); @@ -120,6 +128,7 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo) data.ReadBit(); // HeightChangeFailed data.ReadBit(); // RemoteTimeValid bool hasInertia = data.ReadBit(); + bool hasAdvFlying = data.ReadBit(); if (hasTransport) data >> movementInfo.transport; @@ -128,11 +137,19 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo) { movementInfo.inertia.emplace(); - data >> movementInfo.inertia->guid; + data >> movementInfo.inertia->id; data >> movementInfo.inertia->force.PositionXYZStream(); data >> movementInfo.inertia->lifetime; } + if (hasAdvFlying) + { + movementInfo.advFlying.emplace(); + + data >> movementInfo.advFlying->forwardVelocity; + data >> movementInfo.advFlying->upVelocity; + } + if (hasFall) { data >> movementInfo.jump.fallTime; @@ -1008,12 +1025,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound data << uint16(stateChange.MessageID); data << uint32(stateChange.SequenceIndex); data.WriteBit(stateChange.Speed.has_value()); + data.WriteBit(stateChange.SpeedRange.has_value()); data.WriteBit(stateChange.KnockBack.has_value()); data.WriteBit(stateChange.VehicleRecID.has_value()); data.WriteBit(stateChange.CollisionHeight.has_value()); data.WriteBit(stateChange.MovementForce_.has_value()); data.WriteBit(stateChange.MovementForceGUID.has_value()); - data.WriteBit(stateChange.MovementInertiaGUID.has_value()); + data.WriteBit(stateChange.MovementInertiaID.has_value()); data.WriteBit(stateChange.MovementInertiaLifetimeMs.has_value()); data.FlushBits(); @@ -1023,6 +1041,12 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound if (stateChange.Speed) data << float(*stateChange.Speed); + if (stateChange.SpeedRange) + { + data << float(stateChange.SpeedRange->Min); + data << float(stateChange.SpeedRange->Max); + } + if (stateChange.KnockBack) { data << float(stateChange.KnockBack->HorzSpeed); @@ -1043,8 +1067,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound if (stateChange.MovementForceGUID) data << *stateChange.MovementForceGUID; - if (stateChange.MovementInertiaGUID) - data << *stateChange.MovementInertiaGUID; + if (stateChange.MovementInertiaID) + data << int32(*stateChange.MovementInertiaID); if (stateChange.MovementInertiaLifetimeMs) data << uint32(*stateChange.MovementInertiaLifetimeMs); diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index 8b114cb0e1f..e9421952c33 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -670,6 +670,12 @@ namespace WorldPackets float InitVertSpeed = 0.0f; }; + struct SpeedRange + { + float Min = 0.0f; + float Max = 0.0f; + }; + struct MoveStateChange { MoveStateChange(OpcodeServer messageId, uint32 sequenceIndex) : MessageID(messageId), SequenceIndex(sequenceIndex) { } @@ -677,12 +683,13 @@ namespace WorldPackets uint16 MessageID = 0; uint32 SequenceIndex = 0; Optional<float> Speed; + Optional<SpeedRange> SpeedRange; Optional<KnockBackInfo> KnockBack; Optional<int32> VehicleRecID; Optional<CollisionHeightInfo> CollisionHeight; Optional<MovementForce> MovementForce_; Optional<ObjectGuid> MovementForceGUID; - Optional<ObjectGuid> MovementInertiaGUID; + Optional<int32> MovementInertiaID; Optional<uint32> MovementInertiaLifetimeMs; }; diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.h b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h index eaf56d5344d..c9f921a21ec 100644 --- a/src/server/game/Server/Packets/MythicPlusPacketsCommon.h +++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h @@ -82,7 +82,6 @@ namespace WorldPackets int32 MapChallengeModeID = 0; std::vector<DungeonScoreBestRunForAffix> BestRuns; float OverAllScore = 0.0f; - }; struct DungeonScoreSeasonData diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index 74551b6380b..7a6d003e4a3 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -18,10 +18,56 @@ #include "NPCPackets.h" #include "Util.h" -namespace WorldPackets +namespace WorldPackets::NPC { -namespace NPC +ByteBuffer& operator<<(ByteBuffer& data, TreasureItem const& treasureItem) +{ + data.WriteBits(AsUnderlyingType(treasureItem.Type), 1); + data << int32(treasureItem.ID); + data << int32(treasureItem.Quantity); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, TreasureLootList const& treasureLootList) { + data << uint32(treasureLootList.Items.size()); + for (TreasureItem const& treasureItem : treasureLootList.Items) + data << treasureItem; + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption) +{ + data << int32(gossipOption.GossipOptionID); + data << uint8(gossipOption.OptionNPC); + data << int8(gossipOption.OptionFlags); + data << int32(gossipOption.OptionCost); + data << uint32(gossipOption.OptionLanguage); + data << int32(gossipOption.Flags); + data << int32(gossipOption.OrderIndex); + data.WriteBits(gossipOption.Text.size(), 12); + data.WriteBits(gossipOption.Confirm.size(), 12); + data.WriteBits(AsUnderlyingType(gossipOption.Status), 2); + data.WriteBit(gossipOption.SpellID.has_value()); + data.WriteBit(gossipOption.OverrideIconID.has_value()); + data.FlushBits(); + + data << gossipOption.Treasure; + + data.WriteString(gossipOption.Text); + data.WriteString(gossipOption.Confirm); + + if (gossipOption.SpellID) + data << int32(*gossipOption.SpellID); + + if (*gossipOption.OverrideIconID) + data << int32(*gossipOption.OverrideIconID); + + return data; +} + ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText) { data << int32(gossipText.QuestID); @@ -44,22 +90,14 @@ void Hello::Read() _worldPacket >> Unit; } -ByteBuffer& operator<<(ByteBuffer& data, TreasureItem const& treasureItem) -{ - data.WriteBits(AsUnderlyingType(treasureItem.Type), 1); - data << int32(treasureItem.ID); - data << int32(treasureItem.Quantity); - - return data; -} - -ByteBuffer& operator<<(ByteBuffer& data, TreasureLootList const& treasureLootList) +WorldPacket const* NPCInteractionOpenResult::Write() { - data << uint32(treasureLootList.Items.size()); - for (TreasureItem const& treasureItem : treasureLootList.Items) - data << treasureItem; + _worldPacket << Npc; + _worldPacket << int32(InteractionType); + _worldPacket.WriteBit(Success); + _worldPacket.FlushBits(); - return data; + return &_worldPacket; } WorldPacket const* GossipMessage::Write() @@ -67,31 +105,20 @@ WorldPacket const* GossipMessage::Write() _worldPacket << GossipGUID; _worldPacket << int32(GossipID); _worldPacket << int32(FriendshipFactionID); - _worldPacket << int32(TextID); _worldPacket << uint32(GossipOptions.size()); _worldPacket << uint32(GossipText.size()); + _worldPacket.WriteBit(TextID.has_value()); + _worldPacket.WriteBit(TextID2.has_value()); + _worldPacket.FlushBits(); for (ClientGossipOptions const& options : GossipOptions) - { - _worldPacket << int32(options.ClientOption); - _worldPacket << uint8(options.OptionNPC); - _worldPacket << int8(options.OptionFlags); - _worldPacket << int32(options.OptionCost); - _worldPacket << uint32(options.OptionLanguage); - _worldPacket.WriteBits(options.Text.size(), 12); - _worldPacket.WriteBits(options.Confirm.size(), 12); - _worldPacket.WriteBits(AsUnderlyingType(options.Status), 2); - _worldPacket.WriteBit(options.SpellID.has_value()); - _worldPacket.FlushBits(); - - _worldPacket << options.Treasure; - - _worldPacket.WriteString(options.Text); - _worldPacket.WriteString(options.Confirm); - - if (options.SpellID) - _worldPacket << int32(*options.SpellID); - } + _worldPacket << options; + + if (TextID) + _worldPacket << int32(*TextID); + + if (TextID2) + _worldPacket << int32(*TextID2); for (ClientGossipText const& text : GossipText) _worldPacket << text; @@ -101,20 +128,21 @@ WorldPacket const* GossipMessage::Write() ByteBuffer& operator<<(ByteBuffer& data, VendorItem const& item) { - data << uint32(item.MuID); - data << int32(item.Type); - data << int32(item.Quantity); data << uint64(item.Price); + data << uint32(item.MuID); data << int32(item.Durability); data << int32(item.StackCount); + data << int32(item.Quantity); data << int32(item.ExtendedCostID); data << int32(item.PlayerConditionFailed); - data << item.Item; + data.WriteBits(item.Type, 3); data.WriteBit(item.Locked); data.WriteBit(item.DoNotFilterOnVendor); data.WriteBit(item.Refundable); data.FlushBits(); + data << item.Item; + return data; } @@ -154,34 +182,33 @@ WorldPacket const* TrainerList::Write() return &_worldPacket; } -WorldPacket const* ShowBank::Write() -{ - _worldPacket << Guid; - - return &_worldPacket; -} - void GossipSelectOption::Read() { _worldPacket >> GossipUnit; _worldPacket >> GossipID; - _worldPacket >> GossipIndex; + _worldPacket >> GossipOptionID; uint32 length = _worldPacket.ReadBits(8); PromotionCode = _worldPacket.ReadString(length); } -WorldPacket const* GossipComplete::Write() +WorldPacket const* GossipOptionNPCInteraction::Write() { - _worldPacket.WriteBit(SuppressSound); + _worldPacket << GossipGUID; + _worldPacket << int32(GossipNpcOptionID); + _worldPacket.WriteBit(FriendshipFactionID.has_value()); _worldPacket.FlushBits(); + if (FriendshipFactionID) + _worldPacket << int32(*FriendshipFactionID); + return &_worldPacket; } -WorldPacket const* PlayerTabardVendorActivate::Write() +WorldPacket const* GossipComplete::Write() { - _worldPacket << Vendor; + _worldPacket.WriteBit(SuppressSound); + _worldPacket.FlushBits(); return &_worldPacket; } @@ -206,13 +233,6 @@ void SpiritHealerActivate::Read() _worldPacket >> Healer; } -WorldPacket const* SpiritHealerConfirm::Write() -{ - _worldPacket << Unit; - - return &_worldPacket; -} - void TrainerBuySpell::Read() { _worldPacket >> TrainerGUID; @@ -241,4 +261,3 @@ void SetPetSlot::Read() _worldPacket >> StableMaster; } } -} diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index ab6f04fd4af..cb6666cfa71 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -24,9 +24,11 @@ #include "Position.h" #include <array> +enum class GossipOptionFlags : int32; enum class GossipOptionNpc : uint8; enum class GossipOptionStatus : uint8; enum class GossipOptionRewardType : uint8; +enum class PlayerInteractionType : int32; namespace WorldPackets { @@ -49,6 +51,18 @@ namespace WorldPackets ObjectGuid Unit; }; + class TC_GAME_API NPCInteractionOpenResult final : public ServerPacket + { + public: + NPCInteractionOpenResult() : ServerPacket(SMSG_NPC_INTERACTION_OPEN_RESULT, 16 + 4 + 1) { } + + WorldPacket const* Write() override; + + ObjectGuid Npc; + PlayerInteractionType InteractionType = {}; + bool Success = true; + }; + struct TreasureItem { GossipOptionRewardType Type = GossipOptionRewardType(0); @@ -63,16 +77,19 @@ namespace WorldPackets struct ClientGossipOptions { - int32 ClientOption = 0; - GossipOptionNpc OptionNPC = GossipOptionNpc(0); + int32 GossipOptionID = 0; + GossipOptionNpc OptionNPC = {}; uint8 OptionFlags = 0; int32 OptionCost = 0; uint32 OptionLanguage = 0; - GossipOptionStatus Status = GossipOptionStatus(0); - std::string Text; - std::string Confirm; + GossipOptionFlags Flags = {}; + int32 OrderIndex = 0; + GossipOptionStatus Status = {}; + std::string_view Text; + std::string_view Confirm; TreasureLootList Treasure; Optional<int32> SpellID; + Optional<int32> OverrideIconID; }; struct ClientGossipText @@ -98,7 +115,8 @@ namespace WorldPackets int32 FriendshipFactionID = 0; ObjectGuid GossipGUID; std::vector<ClientGossipText> GossipText; - int32 TextID = 0; + Optional<int32> TextID; + Optional<int32> TextID2; int32 GossipID = 0; }; @@ -110,11 +128,23 @@ namespace WorldPackets void Read() override; ObjectGuid GossipUnit; - int32 GossipIndex = 0; + int32 GossipOptionID = 0; int32 GossipID = 0; std::string PromotionCode; }; + class GossipOptionNPCInteraction final : public ServerPacket + { + public: + GossipOptionNPCInteraction() : ServerPacket(SMSG_GOSSIP_OPTION_NPC_INTERACTION, 16 + 4 + 4 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid GossipGUID; + int32 GossipNpcOptionID = 0; + Optional<int32> FriendshipFactionID; + }; + class GossipComplete final : public ServerPacket { public: @@ -178,26 +208,6 @@ namespace WorldPackets std::string Greeting; }; - class ShowBank final : public ServerPacket - { - public: - ShowBank() : ServerPacket(SMSG_SHOW_BANK, 16) { } - - WorldPacket const* Write() override; - - ObjectGuid Guid; - }; - - class PlayerTabardVendorActivate final : public ServerPacket - { - public: - PlayerTabardVendorActivate() : ServerPacket(SMSG_PLAYER_TABARD_VENDOR_ACTIVATE, 16) { } - - WorldPacket const* Write() override; - - ObjectGuid Vendor; - }; - class GossipPOI final : public ServerPacket { public: @@ -224,16 +234,6 @@ namespace WorldPackets ObjectGuid Healer; }; - class TC_GAME_API SpiritHealerConfirm final : public ServerPacket - { - public: - SpiritHealerConfirm() : ServerPacket(SMSG_SPIRIT_HEALER_CONFIRM, 16) { } - - WorldPacket const* Write() override; - - ObjectGuid Unit; - }; - class TrainerBuySpell final : public ClientPacket { public: diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h index a4ecc96c08c..f445169784c 100644 --- a/src/server/game/Server/Packets/PacketUtilities.h +++ b/src/server/game/Server/Packets/PacketUtilities.h @@ -78,6 +78,7 @@ namespace WorldPackets public: bool empty() const { return _storage.empty(); } + std::size_t length() const { return _storage.length(); } char const* c_str() const { return _storage.c_str(); } operator std::string_view() const { return _storage; } @@ -132,11 +133,11 @@ namespace WorldPackets /** * Utility class for automated prevention of loop counter spoofing in client packets */ - template<typename T, std::size_t N> + template<typename T, std::size_t N, typename Container = boost::container::static_vector<T, N>> class Array { public: - typedef boost::container::static_vector<T, N> storage_type; + typedef Container storage_type; typedef std::integral_constant<std::size_t, N> max_capacity; diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 76d803dbf17..43fd278239f 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -18,9 +18,7 @@ #include "QuestPackets.h" #include "Util.h" -namespace WorldPackets -{ -namespace Quest +namespace WorldPackets::Quest { ByteBuffer& operator<<(ByteBuffer& data, QuestCompleteDisplaySpell const& questDisplaySpell) { @@ -30,6 +28,18 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestCompleteDisplaySpell const& questD return data; } +ByteBuffer& operator<<(ByteBuffer& data, ConditionalQuestText const& conditionalQuestText) +{ + data << int32(conditionalQuestText.PlayerConditionID); + data << int32(conditionalQuestText.QuestGiverCreatureID); + data.WriteBits(conditionalQuestText.Text.length(), 12); + data.FlushBits(); + + data.WriteString(conditionalQuestText.Text); + + return data; +} + void QuestGiverStatusQuery::Read() { _worldPacket >> QuestGiverGUID; @@ -159,6 +169,10 @@ WorldPacket const* QueryQuestInfoResponse::Write() _worldPacket << int32(Info.Expansion); _worldPacket << int32(Info.ManagedWorldStateID); _worldPacket << int32(Info.QuestSessionBonus); + _worldPacket << int32(Info.QuestGiverCreatureID); + + _worldPacket << uint32(Info.ConditionalQuestDescription.size()); + _worldPacket << uint32(Info.ConditionalQuestCompletionLog.size()); for (QuestCompleteDisplaySpell const& rewardDisplaySpell : Info.RewardDisplaySpell) _worldPacket << rewardDisplaySpell; @@ -205,6 +219,12 @@ WorldPacket const* QueryQuestInfoResponse::Write() _worldPacket.WriteString(Info.PortraitTurnInText); _worldPacket.WriteString(Info.PortraitTurnInName); _worldPacket.WriteString(Info.QuestCompletionLog); + + for (ConditionalQuestText const& conditionalQuestText : Info.ConditionalQuestDescription) + _worldPacket << conditionalQuestText; + + for (ConditionalQuestText const& conditionalQuestText : Info.ConditionalQuestCompletionLog) + _worldPacket << conditionalQuestText; } return &_worldPacket; @@ -315,6 +335,7 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestGiverOfferReward const& offer) data << int32(offer.QuestID); data << int32(offer.QuestFlags[0]); // Flags data << int32(offer.QuestFlags[1]); // FlagsEx + data << int32(offer.QuestFlags[2]); // FlagsEx2 data << int32(offer.SuggestedPartyMembers); data << int32(offer.Emotes.size()); for (QuestDescEmote const& emote : offer.Emotes) @@ -340,6 +361,8 @@ WorldPacket const* QuestGiverOfferRewardMessage::Write() _worldPacket << int32(PortraitGiverMount); _worldPacket << int32(PortraitGiverModelSceneID); _worldPacket << int32(PortraitTurnIn); + _worldPacket << int32(QuestGiverCreatureID); + _worldPacket << uint32(ConditionalRewardText.size()); _worldPacket.WriteBits(QuestTitle.size(), 9); _worldPacket.WriteBits(RewardText.size(), 12); @@ -349,6 +372,9 @@ WorldPacket const* QuestGiverOfferRewardMessage::Write() _worldPacket.WriteBits(PortraitTurnInName.size(), 8); _worldPacket.FlushBits(); + for (ConditionalQuestText const& conditionalQuestText : ConditionalRewardText) + _worldPacket << conditionalQuestText; + _worldPacket.WriteString(QuestTitle); _worldPacket.WriteString(RewardText); _worldPacket.WriteString(PortraitGiverText); @@ -407,12 +433,15 @@ WorldPacket const* QuestGiverQuestDetails::Write() _worldPacket << int32(PortraitTurnIn); _worldPacket << uint32(QuestFlags[0]); // Flags _worldPacket << uint32(QuestFlags[1]); // FlagsEx + _worldPacket << uint32(QuestFlags[2]); // FlagsEx _worldPacket << int32(SuggestedPartyMembers); _worldPacket << uint32(LearnSpells.size()); _worldPacket << uint32(DescEmotes.size()); _worldPacket << uint32(Objectives.size()); _worldPacket << int32(QuestStartItemID); _worldPacket << int32(QuestSessionBonus); + _worldPacket << int32(QuestGiverCreatureID); + _worldPacket << uint32(ConditionalDescriptionText.size()); for (int32 spell : LearnSpells) _worldPacket << int32(spell); @@ -453,6 +482,9 @@ WorldPacket const* QuestGiverQuestDetails::Write() _worldPacket.WriteString(PortraitTurnInText); _worldPacket.WriteString(PortraitTurnInName); + for (ConditionalQuestText const& conditionalQuestText : ConditionalDescriptionText) + _worldPacket << conditionalQuestText; + return &_worldPacket; } @@ -465,6 +497,7 @@ WorldPacket const* QuestGiverRequestItems::Write() _worldPacket << int32(CompEmoteType); _worldPacket << uint32(QuestFlags[0]); _worldPacket << uint32(QuestFlags[1]); + _worldPacket << uint32(QuestFlags[2]); _worldPacket << int32(SuggestPartyMembers); _worldPacket << int32(MoneyToGet); _worldPacket << int32(Collect.size()); @@ -487,10 +520,16 @@ WorldPacket const* QuestGiverRequestItems::Write() _worldPacket.WriteBit(AutoLaunched); _worldPacket.FlushBits(); + _worldPacket << int32(QuestGiverCreatureID); + _worldPacket << uint32(ConditionalCompletionText.size()); + _worldPacket.WriteBits(QuestTitle.size(), 9); _worldPacket.WriteBits(CompletionText.size(), 12); _worldPacket.FlushBits(); + for (ConditionalQuestText const& conditionalQuestText : ConditionalCompletionText) + _worldPacket << conditionalQuestText; + _worldPacket.WriteString(QuestTitle); _worldPacket.WriteString(CompletionText); @@ -773,4 +812,3 @@ void ChoiceResponse::Read() IsReroll = _worldPacket.ReadBit(); } } -} diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 630cb3880cc..14c9f25e981 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -113,6 +113,13 @@ namespace WorldPackets int32 PlayerConditionID = 0; }; + struct ConditionalQuestText + { + int32 PlayerConditionID = 0; + int32 QuestGiverCreatureID = 0; + std::string_view Text; + }; + struct QuestInfo { int32 QuestID = 0; @@ -171,7 +178,10 @@ namespace WorldPackets int32 Expansion = 0; int32 ManagedWorldStateID = 0; int32 QuestSessionBonus = 0; + int32 QuestGiverCreatureID = 0; // used to select ConditionalQuestText std::vector<QuestObjective> Objectives; + std::vector<ConditionalQuestText> ConditionalQuestDescription; + std::vector<ConditionalQuestText> ConditionalQuestCompletionLog; int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { }; int32 RewardAmount[QUEST_REWARD_ITEM_COUNT] = { }; int32 ItemDrop[QUEST_ITEM_DROP_COUNT] = { }; @@ -287,7 +297,7 @@ namespace WorldPackets int32 SuggestedPartyMembers = 0; QuestRewards Rewards; std::vector<QuestDescEmote> Emotes; - int32 QuestFlags[2] = { }; // Flags and FlagsEx + int32 QuestFlags[3] = { }; // Flags and FlagsEx }; class QuestGiverOfferRewardMessage final : public ServerPacket @@ -301,12 +311,14 @@ namespace WorldPackets int32 PortraitGiver = 0; int32 PortraitGiverMount = 0; int32 PortraitGiverModelSceneID = 0; + int32 QuestGiverCreatureID = 0; std::string QuestTitle; std::string RewardText; std::string PortraitGiverText; std::string PortraitGiverName; std::string PortraitTurnInText; std::string PortraitTurnInName; + std::vector<ConditionalQuestText> ConditionalRewardText; QuestGiverOfferReward QuestData; int32 QuestPackageID = 0; }; @@ -383,7 +395,7 @@ namespace WorldPackets ObjectGuid InformUnit; int32 QuestID = 0; int32 QuestPackageID = 0; - uint32 QuestFlags[2] = { }; + uint32 QuestFlags[3] = { }; int32 SuggestedPartyMembers = 0; QuestRewards Rewards; std::vector<QuestObjectiveSimple> Objectives; @@ -395,6 +407,7 @@ namespace WorldPackets int32 PortraitGiverModelSceneID = 0; int32 QuestStartItemID = 0; int32 QuestSessionBonus = 0; + int32 QuestGiverCreatureID = 0; std::string PortraitGiverText; std::string PortraitGiverName; std::string PortraitTurnInText; @@ -402,6 +415,7 @@ namespace WorldPackets std::string QuestTitle; std::string LogDescription; std::string DescriptionText; + std::vector<ConditionalQuestText> ConditionalDescriptionText; bool DisplayPopup = false; bool StartCheat = false; bool AutoLaunched = false; @@ -440,9 +454,10 @@ namespace WorldPackets std::vector<QuestObjectiveCollect> Collect; std::vector<QuestCurrency> Currency; int32 StatusFlags = 0; - uint32 QuestFlags[2] = { }; + uint32 QuestFlags[3] = { }; std::string QuestTitle; std::string CompletionText; + std::vector<ConditionalQuestText> ConditionalCompletionText; }; class QuestGiverRequestReward final : public ClientPacket diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp index 5029e785cc6..8896c2071c0 100644 --- a/src/server/game/Server/Packets/ReputationPackets.cpp +++ b/src/server/game/Server/Packets/ReputationPackets.cpp @@ -21,7 +21,7 @@ WorldPacket const* WorldPackets::Reputation::InitializeFactions::Write() { for (uint16 i = 0; i < FactionCount; ++i) { - _worldPacket << uint8(FactionFlags[i]); + _worldPacket << uint16(FactionFlags[i]); _worldPacket << int32(FactionStandings[i]); } @@ -58,7 +58,6 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Reputation::FactionStandi WorldPacket const* WorldPackets::Reputation::SetFactionStanding::Write() { - _worldPacket << float(ReferAFriendBonus); _worldPacket << float(BonusFromAchievementSystem); _worldPacket << uint32(Faction.size()); for (FactionStandingData const& factionStanding : Faction) diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h index b3eecced951..84fe8f001e8 100644 --- a/src/server/game/Server/Packets/ReputationPackets.h +++ b/src/server/game/Server/Packets/ReputationPackets.h @@ -25,23 +25,18 @@ namespace WorldPackets { namespace Reputation { - static uint16 const FactionCount = 400; + static constexpr uint16 FactionCount = 443; class InitializeFactions final : public ServerPacket { public: - InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, FactionCount * (4 + 1) + FactionCount / 8) - { - FactionStandings.fill(0); - FactionHasBonus.fill(false); - FactionFlags.fill(0); - } + InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, FactionCount * (4 + 2) + FactionCount / 8) { } WorldPacket const* Write() override; - std::array<int32, FactionCount> FactionStandings; - std::array<bool, FactionCount> FactionHasBonus; ///< @todo: implement faction bonus - std::array<uint8, FactionCount> FactionFlags; ///< @see enum FactionFlags + std::array<int32, FactionCount> FactionStandings = { }; + std::array<bool, FactionCount> FactionHasBonus = { }; ///< @todo: implement faction bonus + std::array<uint16, FactionCount> FactionFlags = { }; ///< @see enum FactionFlags }; class RequestForcedReactions final : public ClientPacket @@ -84,7 +79,6 @@ namespace WorldPackets WorldPacket const* Write() override; - float ReferAFriendBonus = 0.0f; float BonusFromAchievementSystem = 0.0f; std::vector<FactionStandingData> Faction; bool ShowVisual = false; diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index ebf38bba3ad..84b5066863f 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -19,30 +19,32 @@ #include "CharacterPackets.h" #include "SpellPackets.h" -void WorldPackets::Spells::CancelAura::Read() +namespace WorldPackets::Spells +{ +void CancelAura::Read() { _worldPacket >> SpellID; _worldPacket >> CasterGUID; } -void WorldPackets::Spells::CancelChannelling::Read() +void CancelChannelling::Read() { _worldPacket >> ChannelSpell; _worldPacket >> Reason; } -void WorldPackets::Spells::CancelModSpeedNoControlAuras::Read() +void CancelModSpeedNoControlAuras::Read() { _worldPacket >> TargetGUID; } -void WorldPackets::Spells::PetCancelAura::Read() +void PetCancelAura::Read() { _worldPacket >> PetGUID; _worldPacket >> SpellID; } -WorldPacket const* WorldPackets::Spells::CategoryCooldown::Write() +WorldPacket const* CategoryCooldown::Write() { _worldPacket.reserve(4 + 8 * CategoryCooldowns.size()); @@ -57,7 +59,7 @@ WorldPacket const* WorldPackets::Spells::CategoryCooldown::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::SendKnownSpells::Write() +WorldPacket const* SendKnownSpells::Write() { _worldPacket.reserve(1 + 4 * KnownSpells.size() + 4 * FavoriteSpells.size()); @@ -74,7 +76,7 @@ WorldPacket const* WorldPackets::Spells::SendKnownSpells::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::UpdateActionButtons::Write() +WorldPacket const* UpdateActionButtons::Write() { _worldPacket.append(ActionButtons.data(), ActionButtons.size()); _worldPacket << Reason; @@ -82,13 +84,13 @@ WorldPacket const* WorldPackets::Spells::UpdateActionButtons::Write() return &_worldPacket; } -void WorldPackets::Spells::SetActionButton::Read() +void SetActionButton::Read() { _worldPacket >> Action; _worldPacket >> Index; } -WorldPacket const* WorldPackets::Spells::SendUnlearnSpells::Write() +WorldPacket const* SendUnlearnSpells::Write() { _worldPacket << uint32(Spells.size()); for (uint32 spellId : Spells) @@ -97,7 +99,7 @@ WorldPacket const* WorldPackets::Spells::SendUnlearnSpells::Write() return &_worldPacket; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraDataInfo const& auraData) +ByteBuffer& operator<<(ByteBuffer& data, AuraDataInfo const& auraData) { data << auraData.CastID; data << int32(auraData.SpellID); @@ -139,7 +141,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraDataInfo cons return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraInfo const& aura) +ByteBuffer& operator<<(ByteBuffer& data, AuraInfo const& aura) { data << aura.Slot; data.WriteBit(aura.AuraData.has_value()); @@ -151,7 +153,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraInfo const& a return data; } -WorldPacket const* WorldPackets::Spells::AuraUpdate::Write() +WorldPacket const* AuraUpdate::Write() { _worldPacket.WriteBit(UpdateAll); _worldPacket.WriteBits(Auras.size(), 9); @@ -163,7 +165,7 @@ WorldPacket const* WorldPackets::Spells::AuraUpdate::Write() return &_worldPacket; } -ByteBuffer& operator>>(ByteBuffer& buffer, Optional<WorldPackets::Spells::TargetLocation>& location) +ByteBuffer& operator>>(ByteBuffer& buffer, Optional<TargetLocation>& location) { location.emplace(); buffer >> location->Transport; @@ -173,11 +175,11 @@ ByteBuffer& operator>>(ByteBuffer& buffer, Optional<WorldPackets::Spells::Target return buffer; } -ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellTargetData& targetData) +ByteBuffer& operator>>(ByteBuffer& buffer, SpellTargetData& targetData) { buffer.ResetBitPos(); - targetData.Flags = buffer.ReadBits(26); + targetData.Flags = buffer.ReadBits(28); bool hasSrcLocation = buffer.ReadBit(); bool hasDstLocation = buffer.ReadBit(); bool hasOrientation = buffer.ReadBit(); @@ -204,28 +206,32 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellTargetData return buffer; } -ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::MissileTrajectoryRequest& trajectory) +ByteBuffer& operator>>(ByteBuffer& buffer, MissileTrajectoryRequest& trajectory) { buffer >> trajectory.Pitch; buffer >> trajectory.Speed; return buffer; } -ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Spells::SpellOptionalReagent& optionalReagent) +ByteBuffer& operator>>(ByteBuffer& data, SpellCraftingReagent& optionalReagent) { data >> optionalReagent.ItemID; - data >> optionalReagent.Slot; + data >> optionalReagent.DataSlotIndex; + data >> optionalReagent.Quantity; + if (data.ReadBit()) + optionalReagent.Unknown_1000 = data.read<uint8>(); + return data; } -ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Spells::SpellExtraCurrencyCost& extraCurrencyCost) +ByteBuffer& operator>>(ByteBuffer& data, SpellExtraCurrencyCost& extraCurrencyCost) { data >> extraCurrencyCost.CurrencyID; data >> extraCurrencyCost.Count; return data; } -ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellCastRequest& request) +ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request) { buffer >> request.CastID; buffer >> request.Misc[0]; @@ -234,27 +240,31 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellCastReques buffer >> request.Visual; buffer >> request.MissileTrajectory; buffer >> request.CraftingNPC; - request.OptionalReagents.resize(buffer.read<uint32>()); request.OptionalCurrencies.resize(buffer.read<uint32>()); + request.OptionalReagents.resize(buffer.read<uint32>()); - for (WorldPackets::Spells::SpellOptionalReagent& optionalReagent : request.OptionalReagents) - buffer >> optionalReagent; - - for (WorldPackets::Spells::SpellExtraCurrencyCost& optionalCurrency : request.OptionalCurrencies) + for (SpellExtraCurrencyCost& optionalCurrency : request.OptionalCurrencies) buffer >> optionalCurrency; request.SendCastFlags = buffer.ReadBits(5); bool hasMoveUpdate = buffer.ReadBit(); request.Weight.resize(buffer.ReadBits(2)); + bool hasCraftingOrderID = buffer.ReadBit(); buffer >> request.Target; + if (hasCraftingOrderID) + request.CraftingOrderID = buffer.read<uint64>(); + + for (SpellCraftingReagent& optionalReagent : request.OptionalReagents) + buffer >> optionalReagent; + if (hasMoveUpdate) { request.MoveUpdate.emplace(); buffer >> *request.MoveUpdate; } - for (WorldPackets::Spells::SpellWeight& weight : request.Weight) + for (SpellWeight& weight : request.Weight) { buffer.ResetBitPos(); weight.Type = buffer.ReadBits(2); @@ -265,18 +275,18 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellCastReques return buffer; } -void WorldPackets::Spells::CastSpell::Read() +void CastSpell::Read() { _worldPacket >> Cast; } -void WorldPackets::Spells::PetCastSpell::Read() +void PetCastSpell::Read() { _worldPacket >> PetGUID; _worldPacket >> Cast; } -void WorldPackets::Spells::UseItem::Read() +void UseItem::Read() { _worldPacket >> PackSlot; _worldPacket >> Slot; @@ -284,7 +294,7 @@ void WorldPackets::Spells::UseItem::Read() _worldPacket >> Cast; } -WorldPacket const* WorldPackets::Spells::SpellPrepare::Write() +WorldPacket const* SpellPrepare::Write() { _worldPacket << ClientCastID; _worldPacket << ServerCastID; @@ -292,7 +302,7 @@ WorldPacket const* WorldPackets::Spells::SpellPrepare::Write() return &_worldPacket; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::TargetLocation const& targetLocation) +ByteBuffer& operator<<(ByteBuffer& data, TargetLocation const& targetLocation) { data << targetLocation.Transport; data << float(targetLocation.Location.m_positionX); @@ -301,9 +311,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::TargetLocation co return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellTargetData const& spellTargetData) +ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData) { - data.WriteBits(spellTargetData.Flags, 26); + data.WriteBits(spellTargetData.Flags, 28); data.WriteBit(spellTargetData.SrcLocation.has_value()); data.WriteBit(spellTargetData.DstLocation.has_value()); data.WriteBit(spellTargetData.Orientation.has_value()); @@ -331,7 +341,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellTargetData c return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellMissStatus const& spellMissStatus) +ByteBuffer& operator<<(ByteBuffer& data, SpellMissStatus const& spellMissStatus) { data.WriteBits(spellMissStatus.Reason, 4); if (spellMissStatus.Reason == SPELL_MISS_REFLECT) @@ -341,20 +351,20 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellMissStatus c return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellHitStatus const& spellHitStatus) +ByteBuffer& operator<<(ByteBuffer& data, SpellHitStatus const& spellHitStatus) { data << uint8(spellHitStatus.Reason); return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellPowerData const& spellPowerData) +ByteBuffer& operator<<(ByteBuffer& data, SpellPowerData const& spellPowerData) { data << int32(spellPowerData.Cost); data << int8(spellPowerData.Type); return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::RuneData const& runeData) +ByteBuffer& operator<<(ByteBuffer& data, RuneData const& runeData) { data << uint8(runeData.Start); data << uint8(runeData.Count); @@ -365,28 +375,28 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::RuneData const& r return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::MissileTrajectoryResult const& missileTrajectory) +ByteBuffer& operator<<(ByteBuffer& data, MissileTrajectoryResult const& missileTrajectory) { data << uint32(missileTrajectory.TravelTime); data << float(missileTrajectory.Pitch); return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellAmmo const& spellAmmo) +ByteBuffer& operator<<(ByteBuffer& data, SpellAmmo const& spellAmmo) { data << int32(spellAmmo.DisplayID); data << int8(spellAmmo.InventoryType); return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::CreatureImmunities const& immunities) +ByteBuffer& operator<<(ByteBuffer& data, CreatureImmunities const& immunities) { data << int32(immunities.School); data << int32(immunities.Value); return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellHealPrediction const& spellPred) +ByteBuffer& operator<<(ByteBuffer& data, SpellHealPrediction const& spellPred) { data << int32(spellPred.Points); data << uint8(spellPred.Type); @@ -394,7 +404,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellHealPredicti return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastData const& spellCastData) +ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData) { data << spellCastData.CasterGUID; data << spellCastData.CasterUnit; @@ -419,7 +429,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastData con data.WriteBits(spellCastData.TargetPoints.size(), 16); data.FlushBits(); - for (WorldPackets::Spells::SpellMissStatus const& missStatus : spellCastData.MissStatus) + for (SpellMissStatus const& missStatus : spellCastData.MissStatus) data << missStatus; data << spellCastData.Target; @@ -430,29 +440,29 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastData con for (ObjectGuid const& missTarget : spellCastData.MissTargets) data << missTarget; - for (WorldPackets::Spells::SpellHitStatus const& hitStatus : spellCastData.HitStatus) + for (SpellHitStatus const& hitStatus : spellCastData.HitStatus) data << hitStatus; - for (WorldPackets::Spells::SpellPowerData const& power : spellCastData.RemainingPower) + for (SpellPowerData const& power : spellCastData.RemainingPower) data << power; if (spellCastData.RemainingRunes) data << *spellCastData.RemainingRunes; - for (WorldPackets::Spells::TargetLocation const& targetLoc : spellCastData.TargetPoints) + for (TargetLocation const& targetLoc : spellCastData.TargetPoints) data << targetLoc; return data; } -WorldPacket const* WorldPackets::Spells::SpellStart::Write() +WorldPacket const* SpellStart::Write() { _worldPacket << Cast; return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::SpellGo::Write() +WorldPacket const* SpellGo::Write() { *this << Cast; @@ -464,42 +474,51 @@ WorldPacket const* WorldPackets::Spells::SpellGo::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::LearnedSpells::Write() +ByteBuffer& operator<<(ByteBuffer& data, LearnedSpellInfo const& learnedSpellInfo) { - _worldPacket << uint32(SpellID.size()); - _worldPacket << uint32(FavoriteSpellID.size()); - _worldPacket << uint32(SpecializationID); - for (int32 spell : SpellID) - _worldPacket << spell; + data << int32(learnedSpellInfo.SpellID); + data.WriteBit(learnedSpellInfo.IsFavorite); + data.WriteBit(learnedSpellInfo.field_8.has_value()); + data.WriteBit(learnedSpellInfo.Superceded.has_value()); + data.WriteBit(learnedSpellInfo.TraitDefinitionID.has_value()); + data.FlushBits(); - for (int32 spell : FavoriteSpellID) - _worldPacket << spell; + if (learnedSpellInfo.field_8) + data << int32(*learnedSpellInfo.field_8); + + if (learnedSpellInfo.Superceded) + data << int32(*learnedSpellInfo.Superceded); + if (learnedSpellInfo.TraitDefinitionID) + data << int32(*learnedSpellInfo.TraitDefinitionID); + + return data; +} + +WorldPacket const* LearnedSpells::Write() +{ + _worldPacket << uint32(ClientLearnedSpellData.size()); + _worldPacket << uint32(SpecializationID); _worldPacket.WriteBit(SuppressMessaging); _worldPacket.FlushBits(); + for (LearnedSpellInfo const& spell : ClientLearnedSpellData) + _worldPacket << spell; + return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::SupercededSpells::Write() +WorldPacket const* SupercededSpells::Write() { - _worldPacket << uint32(SpellID.size()); - _worldPacket << uint32(Superceded.size()); - _worldPacket << uint32(FavoriteSpellID.size()); - - if (!SpellID.empty()) - _worldPacket.append(SpellID.data(), SpellID.size()); + _worldPacket << uint32(ClientLearnedSpellData.size()); - if (!Superceded.empty()) - _worldPacket.append(Superceded.data(), Superceded.size()); - - if (!FavoriteSpellID.empty()) - _worldPacket.append(FavoriteSpellID.data(), FavoriteSpellID.size()); + for (LearnedSpellInfo const& spell : ClientLearnedSpellData) + _worldPacket << spell; return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::SpellFailure::Write() +WorldPacket const* SpellFailure::Write() { _worldPacket << CasterUnit; _worldPacket << CastID; @@ -510,7 +529,7 @@ WorldPacket const* WorldPackets::Spells::SpellFailure::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::SpellFailedOther::Write() +WorldPacket const* SpellFailedOther::Write() { _worldPacket << CasterUnit; _worldPacket << CastID; @@ -521,7 +540,7 @@ WorldPacket const* WorldPackets::Spells::SpellFailedOther::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::CastFailed::Write() +WorldPacket const* CastFailed::Write() { _worldPacket << CastID; _worldPacket << int32(SpellID); @@ -533,7 +552,7 @@ WorldPacket const* WorldPackets::Spells::CastFailed::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::PetCastFailed::Write() +WorldPacket const* PetCastFailed::Write() { _worldPacket << CastID; _worldPacket << int32(SpellID); @@ -544,7 +563,7 @@ WorldPacket const* WorldPackets::Spells::PetCastFailed::Write() return &_worldPacket; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellModifierData const& spellModifierData) +ByteBuffer& operator<<(ByteBuffer& data, SpellModifierData const& spellModifierData) { data << float(spellModifierData.ModifierValue); data << uint8(spellModifierData.ClassIndex); @@ -552,26 +571,26 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellModifierData return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellModifier const& spellModifier) +ByteBuffer& operator<<(ByteBuffer& data, SpellModifier const& spellModifier) { data << uint8(spellModifier.ModIndex); data << uint32(spellModifier.ModifierData.size()); - for (WorldPackets::Spells::SpellModifierData const& modData : spellModifier.ModifierData) + for (SpellModifierData const& modData : spellModifier.ModifierData) data << modData; return data; } -WorldPacket const* WorldPackets::Spells::SetSpellModifier::Write() +WorldPacket const* SetSpellModifier::Write() { _worldPacket << uint32(Modifiers.size()); - for (WorldPackets::Spells::SpellModifier const& spellMod : Modifiers) + for (SpellModifier const& spellMod : Modifiers) _worldPacket << spellMod; return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::UnlearnedSpells::Write() +WorldPacket const* UnlearnedSpells::Write() { _worldPacket << uint32(SpellID.size()); for (uint32 spellId : SpellID) @@ -583,7 +602,7 @@ WorldPacket const* WorldPackets::Spells::UnlearnedSpells::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::CooldownEvent::Write() +WorldPacket const* CooldownEvent::Write() { _worldPacket << int32(SpellID); _worldPacket.WriteBit(IsPet); @@ -592,7 +611,7 @@ WorldPacket const* WorldPackets::Spells::CooldownEvent::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::ClearCooldowns::Write() +WorldPacket const* ClearCooldowns::Write() { _worldPacket << uint32(SpellID.size()); if (!SpellID.empty()) @@ -604,7 +623,7 @@ WorldPacket const* WorldPackets::Spells::ClearCooldowns::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::ClearCooldown::Write() +WorldPacket const* ClearCooldown::Write() { _worldPacket << uint32(SpellID); _worldPacket.WriteBit(ClearOnHold); @@ -614,7 +633,7 @@ WorldPacket const* WorldPackets::Spells::ClearCooldown::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::ModifyCooldown::Write() +WorldPacket const* ModifyCooldown::Write() { _worldPacket << int32(SpellID); _worldPacket << int32(DeltaTime); @@ -625,7 +644,7 @@ WorldPacket const* WorldPackets::Spells::ModifyCooldown::Write() return &_worldPacket; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCooldownStruct const& cooldown) +ByteBuffer& operator<<(ByteBuffer& data, SpellCooldownStruct const& cooldown) { data << uint32(cooldown.SrecID); data << uint32(cooldown.ForcedCooldown); @@ -633,7 +652,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCooldownStru return data; } -WorldPacket const* WorldPackets::Spells::SpellCooldown::Write() +WorldPacket const* SpellCooldown::Write() { _worldPacket << Caster; _worldPacket << uint8(Flags); @@ -644,7 +663,7 @@ WorldPacket const* WorldPackets::Spells::SpellCooldown::Write() return &_worldPacket; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellHistoryEntry const& historyEntry) +ByteBuffer& operator<<(ByteBuffer& data, SpellHistoryEntry const& historyEntry) { data << uint32(historyEntry.SpellID); data << uint32(historyEntry.ItemID); @@ -664,7 +683,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellHistoryEntry return data; } -WorldPacket const* WorldPackets::Spells::SendSpellHistory::Write() +WorldPacket const* SendSpellHistory::Write() { _worldPacket << uint32(Entries.size()); for (SpellHistoryEntry const& historyEntry : Entries) @@ -673,7 +692,7 @@ WorldPacket const* WorldPackets::Spells::SendSpellHistory::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::ClearAllSpellCharges::Write() +WorldPacket const* ClearAllSpellCharges::Write() { _worldPacket.WriteBit(IsPet); _worldPacket.FlushBits(); @@ -681,7 +700,7 @@ WorldPacket const* WorldPackets::Spells::ClearAllSpellCharges::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::ClearSpellCharges::Write() +WorldPacket const* ClearSpellCharges::Write() { _worldPacket << int32(Category); _worldPacket.WriteBit(IsPet); @@ -690,7 +709,7 @@ WorldPacket const* WorldPackets::Spells::ClearSpellCharges::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::SetSpellCharges::Write() +WorldPacket const* SetSpellCharges::Write() { _worldPacket << int32(Category); _worldPacket << uint32(NextRecoveryTime); @@ -702,7 +721,7 @@ WorldPacket const* WorldPackets::Spells::SetSpellCharges::Write() return &_worldPacket; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellChargeEntry const& chargeEntry) +ByteBuffer& operator<<(ByteBuffer& data, SpellChargeEntry const& chargeEntry) { data << uint32(chargeEntry.Category); data << uint32(chargeEntry.NextRecoveryTime); @@ -711,7 +730,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellChargeEntry return data; } -WorldPacket const* WorldPackets::Spells::SendSpellCharges::Write() +WorldPacket const* SendSpellCharges::Write() { _worldPacket << uint32(Entries.size()); for (SpellChargeEntry const& chargeEntry : Entries) @@ -720,21 +739,21 @@ WorldPacket const* WorldPackets::Spells::SendSpellCharges::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::ClearTarget::Write() +WorldPacket const* ClearTarget::Write() { _worldPacket << Guid; return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::CancelOrphanSpellVisual::Write() +WorldPacket const* CancelOrphanSpellVisual::Write() { _worldPacket << int32(SpellVisualID); return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::CancelSpellVisual::Write() +WorldPacket const* CancelSpellVisual::Write() { _worldPacket << Source; _worldPacket << int32(SpellVisualID); @@ -742,7 +761,7 @@ WorldPacket const* WorldPackets::Spells::CancelSpellVisual::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::CancelSpellVisualKit::Write() +WorldPacket const* CancelSpellVisualKit::Write() { _worldPacket << Source; _worldPacket << int32(SpellVisualKitID); @@ -752,7 +771,7 @@ WorldPacket const* WorldPackets::Spells::CancelSpellVisualKit::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::PlayOrphanSpellVisual::Write() +WorldPacket const* PlayOrphanSpellVisual::Write() { _worldPacket << SourceLocation; _worldPacket << SourceRotation; @@ -768,7 +787,7 @@ WorldPacket const* WorldPackets::Spells::PlayOrphanSpellVisual::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::PlaySpellVisual::Write() +WorldPacket const* PlaySpellVisual::Write() { _worldPacket << Source; _worldPacket << Target; @@ -787,7 +806,7 @@ WorldPacket const* WorldPackets::Spells::PlaySpellVisual::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::PlaySpellVisualKit::Write() +WorldPacket const* PlaySpellVisualKit::Write() { _worldPacket << Unit; _worldPacket << int32(KitRecID); @@ -799,7 +818,7 @@ WorldPacket const* WorldPackets::Spells::PlaySpellVisualKit::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::SpellVisualLoadScreen::Write() +WorldPacket const* SpellVisualLoadScreen::Write() { _worldPacket << int32(SpellVisualKitID); _worldPacket << int32(Delay); @@ -807,33 +826,33 @@ WorldPacket const* WorldPackets::Spells::SpellVisualLoadScreen::Write() return &_worldPacket; } -void WorldPackets::Spells::CancelCast::Read() +void CancelCast::Read() { _worldPacket >> CastID; _worldPacket >> SpellID; } -void WorldPackets::Spells::OpenItem::Read() +void OpenItem::Read() { _worldPacket >> Slot >> PackSlot; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellChannelStartInterruptImmunities const& interruptImmunities) +ByteBuffer& operator<<(ByteBuffer& data, SpellChannelStartInterruptImmunities const& interruptImmunities) { data << int32(interruptImmunities.SchoolImmunities); data << int32(interruptImmunities.Immunities); return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellTargetedHealPrediction const& targetedHealPrediction) +ByteBuffer& operator<<(ByteBuffer& data, SpellTargetedHealPrediction const& targetedHealPrediction) { data << targetedHealPrediction.TargetGUID; data << targetedHealPrediction.Predict; return data; } -WorldPacket const* WorldPackets::Spells::SpellChannelStart::Write() +WorldPacket const* SpellChannelStart::Write() { _worldPacket << CasterGUID; _worldPacket << int32(SpellID); @@ -852,14 +871,14 @@ WorldPacket const* WorldPackets::Spells::SpellChannelStart::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::SpellChannelUpdate::Write() +WorldPacket const* SpellChannelUpdate::Write() { _worldPacket << CasterGUID; _worldPacket << int32(TimeRemaining); return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::ResurrectRequest::Write() +WorldPacket const* ResurrectRequest::Write() { _worldPacket << ResurrectOffererGUID; _worldPacket << uint32(ResurrectOffererVirtualRealmAddress); @@ -875,30 +894,30 @@ WorldPacket const* WorldPackets::Spells::ResurrectRequest::Write() return &_worldPacket; } -void WorldPackets::Spells::UnlearnSkill::Read() +void UnlearnSkill::Read() { _worldPacket >> SkillLine; } -void WorldPackets::Spells::SelfRes::Read() +void SelfRes::Read() { _worldPacket >> SpellID; } -void WorldPackets::Spells::GetMirrorImageData::Read() +void GetMirrorImageData::Read() { _worldPacket >> UnitGUID; _worldPacket >> DisplayID; } -WorldPackets::Spells::MirrorImageComponentedData::MirrorImageComponentedData() +MirrorImageComponentedData::MirrorImageComponentedData() : ServerPacket(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, 8 + 4 + 8 * 1 + 8 + 11 * 4) { } -WorldPackets::Spells::MirrorImageComponentedData::~MirrorImageComponentedData() = default; +MirrorImageComponentedData::~MirrorImageComponentedData() = default; -WorldPacket const* WorldPackets::Spells::MirrorImageComponentedData::Write() +WorldPacket const* MirrorImageComponentedData::Write() { _worldPacket << UnitGUID; _worldPacket << int32(DisplayID); @@ -919,7 +938,7 @@ WorldPacket const* WorldPackets::Spells::MirrorImageComponentedData::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::MirrorImageCreatureData::Write() +WorldPacket const* MirrorImageCreatureData::Write() { _worldPacket << UnitGUID; _worldPacket << int32(DisplayID); @@ -928,27 +947,28 @@ WorldPacket const* WorldPackets::Spells::MirrorImageCreatureData::Write() return &_worldPacket; } -void WorldPackets::Spells::SpellClick::Read() +void SpellClick::Read() { _worldPacket >> SpellClickUnitGuid; TryAutoDismount = _worldPacket.ReadBit(); + IsSoftInteract = _worldPacket.ReadBit(); } -WorldPacket const* WorldPackets::Spells::ResyncRunes::Write() +WorldPacket const* ResyncRunes::Write() { _worldPacket << Runes; return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::AddRunePower::Write() +WorldPacket const* AddRunePower::Write() { _worldPacket << uint32(AddedRunesMask); return &_worldPacket; } -void WorldPackets::Spells::MissileTrajectoryCollision::Read() +void MissileTrajectoryCollision::Read() { _worldPacket >> Target; _worldPacket >> SpellID; @@ -956,7 +976,7 @@ void WorldPackets::Spells::MissileTrajectoryCollision::Read() _worldPacket >> CollisionPos; } -WorldPacket const* WorldPackets::Spells::NotifyMissileTrajectoryCollision::Write() +WorldPacket const* NotifyMissileTrajectoryCollision::Write() { _worldPacket << Caster; _worldPacket << CastID; @@ -965,7 +985,7 @@ WorldPacket const* WorldPackets::Spells::NotifyMissileTrajectoryCollision::Write return &_worldPacket; } -void WorldPackets::Spells::UpdateMissileTrajectory::Read() +void UpdateMissileTrajectory::Read() { _worldPacket >> Guid; _worldPacket >> CastID; @@ -985,7 +1005,7 @@ void WorldPackets::Spells::UpdateMissileTrajectory::Read() } } -WorldPacket const* WorldPackets::Spells::SpellDelayed::Write() +WorldPacket const* SpellDelayed::Write() { _worldPacket << Caster; _worldPacket << uint32(ActualDelay); @@ -993,7 +1013,7 @@ WorldPacket const* WorldPackets::Spells::SpellDelayed::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::DispelFailed::Write() +WorldPacket const* DispelFailed::Write() { _worldPacket << CasterGUID; _worldPacket << VictimGUID; @@ -1005,21 +1025,21 @@ WorldPacket const* WorldPackets::Spells::DispelFailed::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::CustomLoadScreen::Write() +WorldPacket const* CustomLoadScreen::Write() { _worldPacket << uint32(TeleportSpellID); _worldPacket << uint32(LoadingScreenID); return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::MountResult::Write() +WorldPacket const* MountResult::Write() { _worldPacket << int32(Result); return &_worldPacket; } -WorldPacket const* WorldPackets::Spells::MissileCancel::Write() +WorldPacket const* MissileCancel::Write() { _worldPacket << OwnerGUID; _worldPacket << int32(SpellID); @@ -1028,3 +1048,4 @@ WorldPacket const* WorldPackets::Spells::MissileCancel::Write() return &_worldPacket; } +} diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index b5c1bc3edbd..4d2380a964f 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -62,8 +62,8 @@ namespace WorldPackets void Read() override; int32 ChannelSpell = 0; - int32 Reason = 0; // 40 = /run SpellStopCasting(), 16 = movement/SpellAuraInterruptFlags::Moving, 41 = turning/SpellAuraInterruptFlags::Turning - // does not match SpellCastResult enum + int32 Reason = 0; // 40 = /run SpellStopCasting(), 16 = movement/SpellAuraInterruptFlags::Moving, 41 = turning/SpellAuraInterruptFlags::Turning + // does not match SpellCastResult enum }; class CancelGrowthAura final : public ClientPacket @@ -139,22 +139,19 @@ namespace WorldPackets bool InitialLogin = false; std::vector<uint32> KnownSpells; - std::vector<uint32> FavoriteSpells; // tradeskill recipes + std::vector<uint32> FavoriteSpells; // tradeskill recipes }; class UpdateActionButtons final : public ServerPacket { public: - static std::size_t constexpr NumActionButtons = 132; + static std::size_t constexpr NumActionButtons = 180; - UpdateActionButtons() : ServerPacket(SMSG_UPDATE_ACTION_BUTTONS, NumActionButtons * 8 + 1) - { - ActionButtons.fill(0); - } + UpdateActionButtons() : ServerPacket(SMSG_UPDATE_ACTION_BUTTONS, NumActionButtons * 8 + 1) { } WorldPacket const* Write() override; - std::array<uint64, NumActionButtons> ActionButtons; + std::array<uint64, NumActionButtons> ActionButtons = { }; uint8 Reason = 0; /* Reason can be 0, 1, 2 @@ -253,10 +250,12 @@ namespace WorldPackets uint32 Quantity = 0; }; - struct SpellOptionalReagent + struct SpellCraftingReagent { int32 ItemID = 0; - int32 Slot = 0; + int32 DataSlotIndex = 0; + int32 Quantity = 0; + Optional<uint8> Unknown_1000; }; struct SpellExtraCurrencyCost @@ -275,8 +274,9 @@ namespace WorldPackets MissileTrajectoryRequest MissileTrajectory; Optional<MovementInfo> MoveUpdate; std::vector<SpellWeight> Weight; - Array<SpellOptionalReagent, 3> OptionalReagents; + Array<SpellCraftingReagent, 3> OptionalReagents; Array<SpellExtraCurrencyCost, 5 /*MAX_ITEM_EXT_COST_CURRENCIES*/> OptionalCurrencies; + Optional<uint64> CraftingOrderID; ObjectGuid CraftingNPC; int32 Misc[2] = { }; }; @@ -331,7 +331,7 @@ namespace WorldPackets SpellHitStatus() { } SpellHitStatus(uint8 reason) : Reason(reason) { } - uint8 Reason; + uint8 Reason = 0; }; struct SpellMissStatus @@ -427,6 +427,15 @@ namespace WorldPackets SpellCastData Cast; }; + struct LearnedSpellInfo + { + int32 SpellID = 0; + bool IsFavorite = false; + Optional<int32> field_8; + Optional<int32> Superceded; + Optional<int32> TraitDefinitionID; + }; + class LearnedSpells final : public ServerPacket { public: @@ -434,8 +443,7 @@ namespace WorldPackets WorldPacket const* Write() override; - std::vector<int32> SpellID; - std::vector<int32> FavoriteSpellID; + std::vector<LearnedSpellInfo> ClientLearnedSpellData; uint32 SpecializationID = 0; bool SuppressMessaging = false; }; @@ -447,9 +455,7 @@ namespace WorldPackets WorldPacket const* Write() override; - std::vector<int32> SpellID; - std::vector<int32> Superceded; - std::vector<int32> FavoriteSpellID; + std::vector<LearnedSpellInfo> ClientLearnedSpellData; }; class SpellFailure final : public ServerPacket @@ -551,7 +557,7 @@ namespace WorldPackets WorldPacket const* Write() override; bool IsPet = false; - int32 SpellID; + int32 SpellID = 0; }; class ClearCooldowns final : public ServerPacket @@ -621,8 +627,8 @@ namespace WorldPackets int32 CategoryRecoveryTime = 0; float ModRate = 1.0f; bool OnHold = false; - Optional<uint32> unused622_1; ///< This field is not used for anything in the client in 6.2.2.20444 - Optional<uint32> unused622_2; ///< This field is not used for anything in the client in 6.2.2.20444 + Optional<uint32> unused622_1; ///< This field is not used for anything in the client in 6.2.2.20444 + Optional<uint32> unused622_2; ///< This field is not used for anything in the client in 6.2.2.20444 }; class SendSpellHistory final : public ServerPacket @@ -758,7 +764,7 @@ namespace WorldPackets ObjectGuid Source; ObjectGuid Target; - ObjectGuid Transport; // Used when Target = Empty && (SpellVisual::Flags & 0x400) == 0 + ObjectGuid Transport; // Used when Target = Empty && (SpellVisual::Flags & 0x400) == 0 TaggedPosition<Position::XYZ> TargetPosition; // Overrides missile destination for SpellVisual::SpellVisualMissileSetID uint32 SpellVisualID = 0; float TravelSpeed = 0.0f; @@ -944,6 +950,7 @@ namespace WorldPackets ObjectGuid SpellClickUnitGuid; bool TryAutoDismount = false; + bool IsSoftInteract = false; }; class ResyncRunes final : public ServerPacket @@ -1065,9 +1072,9 @@ namespace WorldPackets bool Reverse = false; int32 SpellID = 0; }; + + ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request); } } -ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellCastRequest& request); - #endif // SpellPackets_h__ diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index 5f6304d4bee..18ad36f7cbb 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -18,9 +18,7 @@ #include "SystemPackets.h" #include "Errors.h" -namespace WorldPackets -{ -namespace System +namespace WorldPackets::System { ByteBuffer& operator<<(ByteBuffer& data, SavedThrottleObjectState const& throttleState) { @@ -82,6 +80,7 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << int16(MaxPlayerNameQueriesPerPacket); _worldPacket << int16(PlayerNameQueryTelemetryInterval); + _worldPacket << PlayerNameQueryInterval; for (GameRuleValuePair const& gameRuleValue : GameRuleValues) _worldPacket << gameRuleValue; @@ -94,6 +93,7 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket.WriteBit(BpayStoreDisabledByParentalControls); _worldPacket.WriteBit(ItemRestorationButtonEnabled); _worldPacket.WriteBit(BrowserEnabled); + _worldPacket.WriteBit(SessionAlert.has_value()); _worldPacket.WriteBit(RAFSystem.Enabled); _worldPacket.WriteBit(RAFSystem.RecruitingEnabled); @@ -102,6 +102,7 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket.WriteBit(CommerceSystemEnabled); _worldPacket.WriteBit(TutorialsEnabled); _worldPacket.WriteBit(TwitterEnabled); + _worldPacket.WriteBit(Unk67); _worldPacket.WriteBit(WillKickFromWorld); _worldPacket.WriteBit(KioskModeEnabled); @@ -110,6 +111,7 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket.WriteBit(WarModeFeatureEnabled); _worldPacket.WriteBit(ClubsEnabled); _worldPacket.WriteBit(ClubsBattleNetClubTypeAllowed); + _worldPacket.WriteBit(ClubsCharacterClubTypeAllowed); _worldPacket.WriteBit(ClubsPresenceUpdateEnabled); _worldPacket.WriteBit(VoiceChatDisabledByParentalControl); @@ -118,10 +120,13 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket.WriteBit(IsMuted); _worldPacket.WriteBit(ClubFinderEnabled); _worldPacket.WriteBit(Unknown901CheckoutRelated); + _worldPacket.WriteBit(TextToSpeechFeatureEnabled); _worldPacket.WriteBit(ChatDisabledByDefault); _worldPacket.WriteBit(ChatDisabledByPlayer); _worldPacket.WriteBit(LFGListCustomRequiresAuthenticator); + _worldPacket.WriteBit(AddonsDisabled); + _worldPacket.WriteBit(Unused1000); _worldPacket.FlushBits(); @@ -180,6 +185,7 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket.WriteBit(Unk14); _worldPacket.WriteBit(WillKickFromWorld); _worldPacket.WriteBit(IsExpansionPreorderInStore); + _worldPacket.WriteBit(KioskModeEnabled); _worldPacket.WriteBit(CompetitiveModeEnabled); _worldPacket.WriteBit(TrialBoostEnabled); @@ -188,9 +194,12 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket.WriteBit(LiveRegionCharacterCopyEnabled); _worldPacket.WriteBit(LiveRegionAccountCopyEnabled); _worldPacket.WriteBit(LiveRegionKeyBindingsCopyEnabled); + _worldPacket.WriteBit(Unknown901CheckoutRelated); _worldPacket.WriteBit(EuropaTicketSystemStatus.has_value()); _worldPacket.WriteBit(LaunchETA.has_value()); + _worldPacket.WriteBit(AddonsDisabled); + _worldPacket.WriteBit(Unused1000); _worldPacket.FlushBits(); if (EuropaTicketSystemStatus) @@ -210,6 +219,7 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket << uint32(GameRuleValues.size()); _worldPacket << int16(MaxPlayerNameQueriesPerPacket); _worldPacket << int16(PlayerNameQueryTelemetryInterval); + _worldPacket << PlayerNameQueryInterval; if (LaunchETA) _worldPacket << int32(*LaunchETA); @@ -243,12 +253,13 @@ WorldPacket const* SetTimeZoneInformation::Write() { _worldPacket.WriteBits(ServerTimeTZ.length(), 7); _worldPacket.WriteBits(GameTimeTZ.length(), 7); + _worldPacket.WriteBits(ServerRegionalTZ.length(), 7); _worldPacket.FlushBits(); _worldPacket.WriteString(ServerTimeTZ); _worldPacket.WriteString(GameTimeTZ); + _worldPacket.WriteString(ServerRegionalTZ); return &_worldPacket; } } -} diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index f6a3d37c133..2091940632f 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -21,6 +21,7 @@ #include "Packet.h" #include "ObjectGuid.h" #include "Optional.h" +#include "PacketUtilities.h" namespace WorldPackets { @@ -131,6 +132,7 @@ namespace WorldPackets int32 ActiveSeason = 0; ///< Currently active Classic season int16 MaxPlayerNameQueriesPerPacket = 50; int16 PlayerNameQueryTelemetryInterval = 600; + Duration<Seconds, uint32> PlayerNameQueryInterval = 10s; bool ItemRestorationButtonEnabled = false; bool CharUndeleteEnabled = false; ///< Implemented bool BpayStoreDisabledByParentalControls = false; @@ -159,6 +161,8 @@ namespace WorldPackets bool ChatDisabledByDefault = false; bool ChatDisabledByPlayer = false; bool LFGListCustomRequiresAuthenticator = false; + bool AddonsDisabled = false; + bool Unused1000 = false; SocialQueueConfig QuickJoinConfig; SquelchInfo Squelch; @@ -190,6 +194,8 @@ namespace WorldPackets bool LiveRegionAccountCopyEnabled = false; // NYI bool LiveRegionKeyBindingsCopyEnabled = false; bool Unknown901CheckoutRelated = false; // NYI + bool AddonsDisabled = false; + bool Unused1000 = false; Optional<EuropaTicketConfig> EuropaTicketSystemStatus; std::vector<int32> LiveRegionCharacterCopySourceRegions; uint32 TokenPollTimeSeconds = 0; // NYI @@ -205,6 +211,7 @@ namespace WorldPackets std::vector<GameRuleValuePair> GameRuleValues; int16 MaxPlayerNameQueriesPerPacket = 50; int16 PlayerNameQueryTelemetryInterval = 600; + Duration<Seconds, uint32> PlayerNameQueryInterval = 10s; Optional<int32> LaunchETA; }; @@ -227,6 +234,7 @@ namespace WorldPackets std::string ServerTimeTZ; std::string GameTimeTZ; + std::string ServerRegionalTZ; }; } } diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.cpp b/src/server/game/Server/Packets/TraitPacketsCommon.cpp new file mode 100644 index 00000000000..482f3b5e91d --- /dev/null +++ b/src/server/game/Server/Packets/TraitPacketsCommon.cpp @@ -0,0 +1,65 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "TraitPacketsCommon.h" +#include "DBCEnums.h" + +namespace WorldPackets::Traits +{ +ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry) +{ + data << int32(traitEntry.TraitNodeID); + data << int32(traitEntry.TraitNodeEntryID); + data << int32(traitEntry.Rank); + data << int32(traitEntry.GrantedRanks); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig) +{ + data << int32(traitConfig.ID); + data << int32(traitConfig.Type); + data << uint32(traitConfig.Entries.size()); + switch (traitConfig.Type) + { + case TraitConfigType::Combat: + data << int32(traitConfig.ChrSpecializationID); + data << int32(traitConfig.CombatConfigFlags); + data << int32(traitConfig.LocalIdentifier); + break; + case TraitConfigType::Profession: + data << int32(traitConfig.SkillLineID); + break; + case TraitConfigType::Generic: + data << int32(traitConfig.TraitSystemID); + break; + default: + break; + } + + for (TraitEntry const& traitEntry : traitConfig.Entries) + data << traitEntry; + + data.WriteBits(traitConfig.Name.length(), 9); + data.FlushBits(); + + data.WriteString(static_cast<std::string const&>(traitConfig.Name)); + + return data; +} +} diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.h b/src/server/game/Server/Packets/TraitPacketsCommon.h new file mode 100644 index 00000000000..d61e16ed49b --- /dev/null +++ b/src/server/game/Server/Packets/TraitPacketsCommon.h @@ -0,0 +1,53 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef TRINITYCORE_TRAIT_PACKETS_COMMON_H +#define TRINITYCORE_TRAIT_PACKETS_COMMON_H + +#include "PacketUtilities.h" + +enum class TraitCombatConfigFlags : int32; +enum class TraitConfigType : int32; + +namespace WorldPackets::Traits +{ +struct TraitEntry +{ + int32 TraitNodeID = 0; + int32 TraitNodeEntryID = 0; + int32 Rank = 0; + int32 GrantedRanks = 0; +}; + +struct TraitConfig +{ + int32 ID = 0; + TraitConfigType Type = {}; + int32 ChrSpecializationID = 0; + TraitCombatConfigFlags CombatConfigFlags = {}; + int32 LocalIdentifier = 0; // Local to specialization + int32 SkillLineID = 0; + int32 TraitSystemID = 0; + Array<TraitEntry, 100, std::vector<TraitEntry>> Entries; + String<259> Name; +}; + +ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry); +ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig); +} + +#endif // TRINITYCORE_TRAIT_PACKETS_COMMON_H diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.cpp b/src/server/game/Server/Packets/TransmogrificationPackets.cpp index 3ea86ae6106..5a856fc4805 100644 --- a/src/server/game/Server/Packets/TransmogrificationPackets.cpp +++ b/src/server/game/Server/Packets/TransmogrificationPackets.cpp @@ -51,10 +51,3 @@ WorldPacket const* WorldPackets::Transmogrification::AccountTransmogUpdate::Writ return &_worldPacket; } - -WorldPacket const* WorldPackets::Transmogrification::TransmogrifyNPC::Write() -{ - _worldPacket << Guid; - - return &_worldPacket; -} diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.h b/src/server/game/Server/Packets/TransmogrificationPackets.h index 2f1e22063fa..4ad6b3adbff 100644 --- a/src/server/game/Server/Packets/TransmogrificationPackets.h +++ b/src/server/game/Server/Packets/TransmogrificationPackets.h @@ -63,16 +63,6 @@ namespace WorldPackets std::vector<uint32> FavoriteAppearances; std::vector<uint32> NewAppearances; }; - - class TransmogrifyNPC final : public ServerPacket - { - public: - TransmogrifyNPC(ObjectGuid const& guid) : ServerPacket(SMSG_TRANSMOGRIFY_NPC, 16), Guid(guid) { } - - WorldPacket const* Write() override; - - ObjectGuid Guid; - }; } } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 75c8222b069..8e197c8b98b 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -30,7 +30,7 @@ public: void Call(WorldSession* session, WorldPacket& packet) const override { - PacketClass nicePacket(std::move(packet)); + std::remove_cv_t<PacketClass> nicePacket(std::move(packet)); nicePacket.Read(); (session->*HandlerFunction)(nicePacket); session->LogUnprocessedTail(nicePacket.GetRawPacket()); @@ -65,27 +65,35 @@ OpcodeTable::~OpcodeTable() } } -template<typename Handler, Handler HandlerFunction> -void OpcodeTable::ValidateAndSetClientOpcode(OpcodeClient opcode, char const* name, SessionStatus status, PacketProcessing processing) +bool OpcodeTable::ValidateClientOpcode(OpcodeClient opcode, char const* name) const { if (uint32(opcode) == NULL_OPCODE) { TC_LOG_ERROR("network", "Opcode %s does not have a value", name); - return; + return false; } if (uint32(opcode) >= NUM_OPCODE_HANDLERS) { TC_LOG_ERROR("network", "Tried to set handler for an invalid opcode %d", opcode); - return; + return false; } if (_internalTableClient[opcode] != nullptr) { - TC_LOG_ERROR("network", "Tried to override client handler of %s with %s (opcode %u)", opcodeTable[opcode]->Name, name, opcode); - return; + TC_LOG_ERROR("network", "Tried to override client handler of %s with %s (opcode %u)", _internalTableClient[opcode]->Name, name, opcode); + return false; } + return true; +} + +template<typename Handler, Handler HandlerFunction> +void OpcodeTable::ValidateAndSetClientOpcode(OpcodeClient opcode, char const* name, SessionStatus status, PacketProcessing processing) +{ + if (!ValidateClientOpcode(opcode, name)) + return; + _internalTableClient[opcode] = new PacketHandler<typename get_packet_class<Handler>::type, HandlerFunction>(name, status, processing); } @@ -132,6 +140,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_ABANDON_NPE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACCEPT_GUILD_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAcceptInvite); + DEFINE_HANDLER(CMSG_ACCEPT_RETURNING_PLAYER_PROMPT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACCEPT_SOCIAL_CONTRACT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptTradeOpcode); DEFINE_HANDLER(CMSG_ACCEPT_WARGAME_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -198,6 +207,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinOpcode); DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_ARENA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinArena); DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_BRAWL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_SKIRMISH, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLENET_CHALLENGE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLENET_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetRequest); @@ -319,6 +329,13 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CHOICE_RESPONSE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandlePlayerChoiceResponse); DEFINE_HANDLER(CMSG_CHROMIE_TIME_SELECT_EXPANSION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLAIM_WEEKLY_REWARD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLASS_TALENTS_DELETE_CONFIG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLASS_TALENTS_RENAME_CONFIG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLEAR_NEW_APPEARANCE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLEAR_RAID_MARKER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleClearRaidMarker); DEFINE_HANDLER(CMSG_CLEAR_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleClearTradeItemOpcode); @@ -326,6 +343,7 @@ void OpcodeTable::Initialize() 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_CLOSE_RUNEFORGE_INTERACTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLUB_FINDER_APPLICATION_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLUB_FINDER_GET_APPLICANTS_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLUB_FINDER_POST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -366,6 +384,15 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CONVERSATION_LINE_STARTED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConversationLineStarted); DEFINE_HANDLER(CMSG_CONVERT_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConvertRaidOpcode); DEFINE_HANDLER(CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_CANCEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_CLAIM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_CREATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_FULFILL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_LIST_MY_ORDERS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_REJECT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_RELEASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CREATE_CHARACTER, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharCreateOpcode); DEFINE_HANDLER(CMSG_CREATE_SHIPMENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_DB_QUERY_BULK, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleDBQueryBulk); @@ -560,6 +587,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MOUNT_CLEAR_FANFARE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOUNT_SET_FAVORITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMountSetFavorite); DEFINE_HANDLER(CMSG_MOUNT_SPECIAL_ANIM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMountSpecialAnimOpcode); + DEFINE_HANDLER(CMSG_MOVE_ADD_IMPULSE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_APPLY_INERTIA_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveApplyMovementForceAck); DEFINE_HANDLER(CMSG_MOVE_CHANGE_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); @@ -598,6 +626,21 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCES, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRemoveMovementForceAck); DEFINE_HANDLER(CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLY, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_MOVE_SET_CAN_ADV_FLY_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleSetCollisionHeightAck); @@ -695,6 +738,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_QUEST_COMPLETION_NPCS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryQuestCompletionNPCs); DEFINE_HANDLER(CMSG_QUERY_QUEST_INFO, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQuestQueryOpcode); + DEFINE_HANDLER(CMSG_QUERY_QUEST_ITEM_USABILITY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_REALM_NAME, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryRealmName); DEFINE_HANDLER(CMSG_QUERY_SCENARIO_POI, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryScenarioPOI); DEFINE_HANDLER(CMSG_QUERY_TIME, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryTimeOpcode); @@ -738,6 +782,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_REPOP_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepopRequest); DEFINE_HANDLER(CMSG_REPORT_CLIENT_VARIABLES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPORT_ENABLED_ADDONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_REPORT_FROZEN_WHILE_LOADING_MAP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPORT_PVP_PLAYER_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportPvPAFK); DEFINE_HANDLER(CMSG_REPORT_SERVER_LAG, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -803,11 +848,11 @@ 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_CHAT_DISABLED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &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_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_DUNGEON_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetDungeonDifficultyOpcode); + DEFINE_HANDLER(CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_EVERYONE_IS_ASSISTANT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetEveryoneIsAssistant); 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); @@ -845,6 +890,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SORT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortBankBags); DEFINE_HANDLER(CMSG_SORT_REAGENT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortReagentBankBags); DEFINE_HANDLER(CMSG_SPELL_CLICK, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSpellClick); + DEFINE_HANDLER(CMSG_SPELL_EMPOWER_RELEASE, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_SPELL_EMPOWER_RESTART, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SPIRIT_HEALER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSpiritHealerActivate); DEFINE_HANDLER(CMSG_SPLIT_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSplitGuildBankItem); DEFINE_HANDLER(CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSplitGuildBankItemToInventory); @@ -884,6 +931,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_TRADE_SKILL_SET_FAVORITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_TRAINER_BUY_SPELL, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTrainerBuySpellOpcode); DEFINE_HANDLER(CMSG_TRAINER_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTrainerListOpcode); + DEFINE_HANDLER(CMSG_TRAITS_COMMIT_CONFIG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTransmogrifyItems); DEFINE_HANDLER(CMSG_TURN_IN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTurnInPetition); DEFINE_HANDLER(CMSG_TUTORIAL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialFlag); @@ -896,9 +945,11 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_UNLEARN_SKILL, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUnlearnSkillOpcode); DEFINE_HANDLER(CMSG_UNLEARN_SPECIALIZATION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UNLOCK_VOID_STORAGE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleVoidStorageUnlock); + DEFINE_HANDLER(CMSG_UPDATE_AADC_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateAccountData); DEFINE_HANDLER(CMSG_UPDATE_AREA_TRIGGER_VISUAL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UPDATE_CLIENT_SETTINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_UPDATE_CRAFTING_NPC_RECIPES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UPDATE_MISSILE_TRAJECTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateMissileTrajectory); DEFINE_HANDLER(CMSG_UPDATE_RAID_TARGET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateRaidTargetOpcode); DEFINE_HANDLER(CMSG_UPDATE_SPELL_VISUAL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -958,7 +1009,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADJUST_SPLINE_DURATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADVANCED_COMBAT_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADVENTURE_MAP_OPEN_NPC, 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); @@ -994,7 +1044,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_CLOSED_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_DISABLE_POSTING_BEFORE_MAINTENANCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_DISABLE_NEW_POSTINGS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_FAVORITE_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUCTION_HELLO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1012,7 +1062,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_FAILED, STATUS_UNHANDLED, 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_RESPEC_NPC, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BAG_CLEANUP_FINISHED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BARBER_SHOP_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATCH_PRESENCE_SUBSCRIPTION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1066,10 +1115,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_REVOKED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_TRAP_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_UPDATES, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDER_CONFIRM, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BIND_POINT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_OPEN_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_OUTBID, STATUS_NEVER, CONNECTION_TYPE_REALM); 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); @@ -1107,6 +1154,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_AUTO_REPEAT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_COMBAT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_ORPHAN_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_PRELOAD_WORLD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SCENE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SPELL_VISUAL_KIT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1154,7 +1202,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_ABANDON_NPE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT,STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHECK_WARGAME_ENTRY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_OPEN_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLAIM_RAF_REWARD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_ALL_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1166,8 +1213,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TARGET, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TREASURE_PICKER_CACHE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLOSE_ARTIFACT_FORGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLOSE_HEART_FORGE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLOSE_ITEM_FORGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_ERROR_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1206,8 +1251,18 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CORPSE_TRANSPORT_QUERY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COVENANT_PREVIEW_OPEN_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_COVENANT_RENOWN_OPEN_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_HOUSE_HELLO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_CANCEL_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_CLAIM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_CRAFT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_CREATE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_FULFILL_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_REJECT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_RELEASE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_UPDATE_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFT_ENCHANT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CREATE_CHAR, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CREATE_SHIPMENT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRITERIA_DELETED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1251,6 +1306,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_END_LIGHTNING_STORM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENSURE_WORLD_LOADED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENTER_ENCRYPTED_MODE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENUM_CHARACTERS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1276,13 +1332,14 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAIN_MAW_POWER, 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_BASE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_CLOSE_INTERACTION, STATUS_NEVER, CONNECTION_TYPE_REALM); 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_INTERACTION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL, STATUS_NEVER, 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); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_SET_STATE_LOCAL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_UI_LINK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_SPEED_SET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_TIME_SET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_TIME_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1326,11 +1383,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_MISSION_START_CONDITION_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_OPEN_ARCHITECT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_OPEN_CRAFTER, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_OPEN_MISSION_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_OPEN_RECRUITMENT_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_OPEN_TALENT_NPC, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_PLACE_BUILDING_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_PLOT_PLACED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_PLOT_REMOVED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1378,6 +1432,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOD_MODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); 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_OPTION_NPC_INTERACTION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_POI, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_QUEST_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_REFRESH_OPTIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1386,6 +1441,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DECLINE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DESTROYED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_NEW_LEADER, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_REQUEST_DECLINE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_UNINVITE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_EARNED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1474,7 +1530,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_CHANGE_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_FIXUP_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_FULL_OVERFLOW, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLANDS_MISSION_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLAND_AZERITE_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLAND_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_IS_QUEST_COMPLETE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1527,6 +1582,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_EQUIPMENT_SET, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOBBY_MATCHMAKER_PARTY_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SET_TIME_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_VERIFY_WORLD, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_CANCEL_ACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1560,6 +1616,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOTD, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVEMENT_ENFORCEMENT_ALERT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ADD_IMPULSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_APPLY_INERTIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_APPLY_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1577,6 +1634,20 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_REMOVE_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ROOT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ACTIVE_MOVER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_MAX_VEL, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_ADV_FLY, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_COLLISION_HEIGHT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1628,11 +1699,13 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SPLINE_UNSET_HOVER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_TELEPORT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNROOT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_ADV_FLY, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVERING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_ADD_IMPULSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_APPLY_INERTIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_COLLISION_HEIGHT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1663,16 +1736,13 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_MONEY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NOTIFY_RECEIVED_MAIL, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_NPC_INTERACTION_OPEN_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OFFER_PETITION_ERROR, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_MONSTER_MOVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_ANIMA_DIVERSION_UI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_ARTIFACT_FORGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_CONTAINER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_HEART_FORGE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_ITEM_FORGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_LFG_DUNGEON_FINDER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_SHIPMENT_NPC_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OVERRIDE_LIGHT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAGE_TEXT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1736,9 +1806,9 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_GUILD_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SHOW_UI_EVENT_TOAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SKINNED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_TABARD_VENDOR_ACTIVATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_MUSIC, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1754,10 +1824,12 @@ void OpcodeTable::Initialize() 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_PRELOAD_CHILD_MAP, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRELOAD_WORLD, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PREPOPULATE_NAME_CACHE, 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); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROFESSION_GOSSIP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PUSH_SPELL_TO_ACTION_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_CREDIT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_MATCH_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1794,6 +1866,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_REQUEST_ITEMS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_STATUS_MULTIPLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_ITEM_USABILITY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_LOG_FULL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_NON_LOG_UPDATE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_POI_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1826,6 +1899,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_LOOKUP_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REATTACH_RESURRECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRAFT_ITEM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_COMPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_SPELL_HISTORY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1852,6 +1926,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_TOKEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_REQUEST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESYNC_RUNES, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RETURNING_PLAYER_PROMPT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RETURN_APPLICANT_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RETURN_RECRUITING_CLUBS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_CHANGED_INFORM, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1919,8 +1994,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_VEHICLE_REC_ID, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHADOWLANDS_CAPACITANCE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHIPMENT_FACTION_UPDATE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_BANK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_MAILBOX, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_QUEST_COMPLETION_TEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_TAXI_NODES, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1938,6 +2011,9 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DAMAGE_SHIELD, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DELAYED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_DISPELL_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_SET_STAGE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_START, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EMPOWER_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_ENERGIZE_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_EXECUTE_LOG, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_FAILED_OTHER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1956,7 +2032,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_VISUAL_LOAD_SCREEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLASH_SCREEN_SHOW_LATEST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPIRIT_HEALER_CONFIRM, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STAND_STATE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_ELAPSED_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_ELAPSED_TIMERS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); @@ -1964,10 +2039,13 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_LOOT_ROLL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_STARTER_BUILD_ACTIVATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STOP_ELAPSED_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STOP_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STOP_SPEAKERBOT_SOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_STOP_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STREAMING_MOVIES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUGGEST_INVITE_INFORM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_CANCEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_REQUEST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1992,9 +2070,9 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRADE_UPDATED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_BUY_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_LIST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAIT_CONFIG_COMMIT_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_ABORTED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSFER_PENDING, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRANSMOGRIFY_NPC, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TREASURE_PICKER_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_CINEMATIC, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_MOVIE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2002,7 +2080,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_TUTORIAL_FLAGS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TWITTER_STATUS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_HEALING_RANGE_MODIFIED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_ITEM_INTERACTION_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_MAP_QUEST_LINES_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_CHARACTER_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2017,6 +2094,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CHARACTER_FLAGS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_COOLDOWN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_CRAFTING_NPC_RECIPES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_DAILY_MISSION_COUNTER, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_EXPANSION_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_GAME_TIME_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -2063,10 +2141,10 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHO, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHO_IS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_MAP_OPEN_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_QUEST_UPDATE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WORLD_SERVER_INFO, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WOW_ENTITLEMENT_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_AWARDED_FROM_CURRENCY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_GAIN_ABORTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_GAIN_ENABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ZONE_UNDER_ATTACK, STATUS_NEVER, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 02507572377..f819789325b 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -44,34 +44,35 @@ enum OpcodeMisc : uint16 enum OpcodeClient : uint16 { - CMSG_ABANDON_NPE_RESPONSE = 0x33E1, + CMSG_ABANDON_NPE_RESPONSE = 0x33EB, CMSG_ACCEPT_GUILD_INVITE = 0x35FC, - CMSG_ACCEPT_SOCIAL_CONTRACT = 0x373B, + CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x3395, + CMSG_ACCEPT_SOCIAL_CONTRACT = 0x373E, CMSG_ACCEPT_TRADE = 0x315A, CMSG_ACCEPT_WARGAME_INVITE = 0x35E0, - CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3731, - CMSG_ACTIVATE_SOULBIND = 0x33D0, + CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3733, + CMSG_ACTIVATE_SOULBIND = 0x33DA, CMSG_ACTIVATE_TAXI = 0x34B1, CMSG_ADDON_LIST = 0x35D8, - CMSG_ADD_ACCOUNT_COSMETIC = 0x32A9, - CMSG_ADD_BATTLENET_FRIEND = 0x3659, - CMSG_ADD_FRIEND = 0x36CC, - CMSG_ADD_IGNORE = 0x36D0, - CMSG_ADD_TOY = 0x32A8, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3205, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33D3, - CMSG_ADVENTURE_MAP_START_QUEST = 0x3360, + CMSG_ADD_ACCOUNT_COSMETIC = 0x32B1, + CMSG_ADD_BATTLENET_FRIEND = 0x365A, + CMSG_ADD_FRIEND = 0x36CE, + CMSG_ADD_IGNORE = 0x36D2, + CMSG_ADD_TOY = 0x32B0, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3204, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33DD, + CMSG_ADVENTURE_MAP_START_QUEST = 0x3369, CMSG_ALTER_APPEARANCE = 0x3503, CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B6, CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B7, CMSG_AREA_TRIGGER = 0x31D8, CMSG_ARTIFACT_ADD_POWER = 0x31AB, CMSG_ARTIFACT_SET_APPEARANCE = 0x31AD, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3211, - CMSG_ATTACK_STOP = 0x3260, - CMSG_ATTACK_SWING = 0x325F, - CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E2, - CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E3, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3210, + CMSG_ATTACK_STOP = 0x3263, + CMSG_ATTACK_SWING = 0x3262, + CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E4, + CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E5, CMSG_AUCTION_BROWSE_QUERY = 0x34D6, CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x34DE, CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x34DD, @@ -85,10 +86,10 @@ enum OpcodeClient : uint16 CMSG_AUCTION_PLACE_BID = 0x34D5, CMSG_AUCTION_REMOVE_ITEM = 0x34D3, CMSG_AUCTION_REPLICATE_ITEMS = 0x34D4, - CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3733, + CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3735, CMSG_AUCTION_SELL_COMMODITY = 0x34DF, CMSG_AUCTION_SELL_ITEM = 0x34D2, - CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3732, + CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3734, CMSG_AUTH_CONTINUED_SESSION = 0x3766, CMSG_AUTH_SESSION = 0x3765, CMSG_AUTOBANK_ITEM = 0x3997, @@ -100,32 +101,33 @@ enum OpcodeClient : uint16 CMSG_AUTO_GUILD_BANK_ITEM = 0x34BD, CMSG_AUTO_STORE_BAG_ITEM = 0x399B, CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x34C6, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3388, - CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x336B, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x338A, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3389, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3391, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3374, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3393, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3392, CMSG_BANKER_ACTIVATE = 0x34B9, CMSG_BATTLEFIELD_LEAVE = 0x3173, CMSG_BATTLEFIELD_LIST = 0x317F, - CMSG_BATTLEFIELD_PORT = 0x3537, - CMSG_BATTLEMASTER_HELLO = 0x32C5, + CMSG_BATTLEFIELD_PORT = 0x3538, + CMSG_BATTLEMASTER_HELLO = 0x32CD, CMSG_BATTLEMASTER_JOIN = 0x3530, CMSG_BATTLEMASTER_JOIN_ARENA = 0x3531, - CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3535, - CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3532, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36CF, - CMSG_BATTLENET_REQUEST = 0x36F1, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36C9, - CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x370F, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C8, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36BF, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3736, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B7, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36B8, - CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x3708, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3704, - CMSG_BATTLE_PAY_START_PURCHASE = 0x36C7, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36EE, + CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3536, + CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3532, + CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3533, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D1, + CMSG_BATTLENET_REQUEST = 0x36F3, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CB, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3711, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CA, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C1, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3738, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B9, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BA, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370A, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3706, + CMSG_BATTLE_PAY_START_PURCHASE = 0x36C9, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F0, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x312C, CMSG_BATTLE_PET_DELETE_PET = 0x3625, CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3626, @@ -139,59 +141,59 @@ enum OpcodeClient : uint16 CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E1, CMSG_BEGIN_TRADE = 0x3157, CMSG_BINDER_ACTIVATE = 0x34B8, - CMSG_BLACK_MARKET_BID_ON_ITEM = 0x353F, - CMSG_BLACK_MARKET_OPEN = 0x353D, - CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x353E, - CMSG_BONUS_ROLL = 0x338B, - CMSG_BUG_REPORT = 0x3684, + CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3540, + CMSG_BLACK_MARKET_OPEN = 0x353E, + CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x353F, + CMSG_BONUS_ROLL = 0x3394, + CMSG_BUG_REPORT = 0x3685, CMSG_BUSY_TRADE = 0x3158, CMSG_BUY_BACK_ITEM = 0x34AA, CMSG_BUY_BANK_SLOT = 0x34BA, CMSG_BUY_ITEM = 0x34A9, CMSG_BUY_REAGENT_BANK = 0x34BB, CMSG_CAGE_BATTLE_PET = 0x31F4, - CMSG_CALENDAR_ADD_EVENT = 0x367C, - CMSG_CALENDAR_COMMUNITY_INVITE = 0x3670, - CMSG_CALENDAR_COMPLAIN = 0x3678, - CMSG_CALENDAR_COPY_EVENT = 0x3677, - CMSG_CALENDAR_EVENT_SIGN_UP = 0x367A, - CMSG_CALENDAR_GET = 0x366E, - CMSG_CALENDAR_GET_EVENT = 0x366F, - CMSG_CALENDAR_GET_NUM_PENDING = 0x3679, - CMSG_CALENDAR_INVITE = 0x3671, - CMSG_CALENDAR_MODERATOR_STATUS = 0x3675, - CMSG_CALENDAR_REMOVE_EVENT = 0x3676, - CMSG_CALENDAR_REMOVE_INVITE = 0x3672, - CMSG_CALENDAR_RSVP = 0x3673, - CMSG_CALENDAR_STATUS = 0x3674, - CMSG_CALENDAR_UPDATE_EVENT = 0x367D, + CMSG_CALENDAR_ADD_EVENT = 0x367D, + CMSG_CALENDAR_COMMUNITY_INVITE = 0x3671, + CMSG_CALENDAR_COMPLAIN = 0x3679, + CMSG_CALENDAR_COPY_EVENT = 0x3678, + CMSG_CALENDAR_EVENT_SIGN_UP = 0x367B, + CMSG_CALENDAR_GET = 0x366F, + CMSG_CALENDAR_GET_EVENT = 0x3670, + CMSG_CALENDAR_GET_NUM_PENDING = 0x367A, + CMSG_CALENDAR_INVITE = 0x3672, + CMSG_CALENDAR_MODERATOR_STATUS = 0x3676, + CMSG_CALENDAR_REMOVE_EVENT = 0x3677, + CMSG_CALENDAR_REMOVE_INVITE = 0x3673, + CMSG_CALENDAR_RSVP = 0x3674, + CMSG_CALENDAR_STATUS = 0x3675, + CMSG_CALENDAR_UPDATE_EVENT = 0x367E, CMSG_CANCEL_AURA = 0x31AF, CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F5, - CMSG_CANCEL_CAST = 0x32AF, - CMSG_CANCEL_CHANNELLING = 0x3278, - CMSG_CANCEL_GROWTH_AURA = 0x327D, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3219, + CMSG_CANCEL_CAST = 0x32B7, + CMSG_CANCEL_CHANNELLING = 0x327B, + CMSG_CANCEL_GROWTH_AURA = 0x3283, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x321C, CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AE, - CMSG_CANCEL_MOUNT_AURA = 0x3290, + CMSG_CANCEL_MOUNT_AURA = 0x3296, CMSG_CANCEL_QUEUED_SPELL = 0x3180, CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3500, CMSG_CANCEL_TRADE = 0x315C, - CMSG_CAN_DUEL = 0x3661, - CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3703, - CMSG_CAST_SPELL = 0x32AC, + CMSG_CAN_DUEL = 0x3662, + CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3705, + CMSG_CAST_SPELL = 0x32B4, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x3090, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x3345, - CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3346, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3326, - CMSG_CHANGE_REALM_TICKET = 0x36F6, - CMSG_CHANGE_SUB_GROUP = 0x364B, - CMSG_CHARACTER_CHECK_UPGRADE = 0x36C2, - CMSG_CHARACTER_RENAME_REQUEST = 0x36BD, - CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C0, - CMSG_CHARACTER_UPGRADE_START = 0x36C1, - CMSG_CHAR_CUSTOMIZE = 0x368B, - CMSG_CHAR_DELETE = 0x369A, - CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3691, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x334E, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x334F, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x332F, + CMSG_CHANGE_REALM_TICKET = 0x36F8, + CMSG_CHANGE_SUB_GROUP = 0x364C, + CMSG_CHARACTER_CHECK_UPGRADE = 0x36C4, + CMSG_CHARACTER_RENAME_REQUEST = 0x36BF, + CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C2, + CMSG_CHARACTER_UPGRADE_START = 0x36C3, + CMSG_CHAR_CUSTOMIZE = 0x368C, + CMSG_CHAR_DELETE = 0x369C, + CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3692, CMSG_CHAT_ADDON_MESSAGE = 0x37EE, CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x37EF, CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E3, @@ -228,29 +230,37 @@ enum OpcodeClient : uint16 CMSG_CHAT_REPORT_FILTERED = 0x37CC, CMSG_CHAT_REPORT_IGNORED = 0x37CB, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE, - CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3644, - CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3251, - CMSG_CHOICE_RESPONSE = 0x32B4, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33CF, - CMSG_CLAIM_WEEKLY_REWARD = 0x33AB, + CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3645, + CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3254, + CMSG_CHOICE_RESPONSE = 0x32BC, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33D9, + CMSG_CLAIM_WEEKLY_REWARD = 0x33B5, + CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3408, + CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3214, + CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x340A, + CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3407, + CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3406, + CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x340B, + CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3213, CMSG_CLEAR_NEW_APPEARANCE = 0x312F, CMSG_CLEAR_RAID_MARKER = 0x31A7, CMSG_CLEAR_TRADE_ITEM = 0x315E, - CMSG_CLIENT_PORT_GRAVEYARD = 0x3539, + CMSG_CLIENT_PORT_GRAVEYARD = 0x353A, CMSG_CLOSE_INTERACTION = 0x3499, - CMSG_CLOSE_QUEST_CHOICE = 0x32B5, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33D7, - CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371A, - CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x3718, - CMSG_CLUB_FINDER_POST = 0x3715, - CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371C, - CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3716, - CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3717, - CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371B, - CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x371D, - CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x3719, - CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x3739, - CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F3, + CMSG_CLOSE_QUEST_CHOICE = 0x32BD, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E1, + CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x340C, + CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371C, + CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371A, + CMSG_CLUB_FINDER_POST = 0x3717, + CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371E, + CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3718, + CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3719, + CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371D, + CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x371F, + CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x371B, + CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x373B, + CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F5, CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3633, CMSG_COMMENTATOR_ENABLE = 0x35F0, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4, @@ -258,38 +268,47 @@ enum OpcodeClient : uint16 CMSG_COMMENTATOR_GET_MAP_INFO = 0x35F1, CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F3, CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2, - CMSG_COMMENTATOR_SPECTATE = 0x3737, + CMSG_COMMENTATOR_SPECTATE = 0x3739, CMSG_COMMENTATOR_START_WARGAME = 0x35EF, - CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E0, - CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EA, - CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E1, - CMSG_COMPLAINT = 0x366B, - CMSG_COMPLETE_CINEMATIC = 0x3557, + CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E2, + CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EC, + CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E3, + CMSG_COMPLAINT = 0x366C, + CMSG_COMPLETE_CINEMATIC = 0x3558, CMSG_COMPLETE_MOVIE = 0x34EB, CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AC, - CMSG_CONFIRM_RESPEC_WIPE = 0x3213, + CMSG_CONFIRM_RESPEC_WIPE = 0x3216, CMSG_CONNECT_TO_FAILED = 0x35D4, - CMSG_CONSUMABLE_TOKEN_BUY = 0x36E5, - CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E6, - CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E4, - CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36E8, - CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36E9, - CMSG_CONTRIBUTION_CONTRIBUTE = 0x356B, - CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356C, - CMSG_CONVERSATION_CINEMATIC_READY = 0x3559, - CMSG_CONVERSATION_LINE_STARTED = 0x3558, - CMSG_CONVERT_RAID = 0x364D, - CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x357F, - CMSG_CREATE_CHARACTER = 0x3643, - CMSG_CREATE_SHIPMENT = 0x3312, + CMSG_CONSUMABLE_TOKEN_BUY = 0x36E7, + CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E8, + CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E6, + CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36EA, + CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36EB, + CMSG_CONTRIBUTION_CONTRIBUTE = 0x356C, + CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356D, + CMSG_CONVERSATION_CINEMATIC_READY = 0x355A, + CMSG_CONVERSATION_LINE_STARTED = 0x3559, + CMSG_CONVERT_RAID = 0x364E, + CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x3580, + CMSG_CRAFTING_ORDER_CANCEL = 0x358B, + CMSG_CRAFTING_ORDER_CLAIM = 0x3588, + CMSG_CRAFTING_ORDER_CREATE = 0x3585, + CMSG_CRAFTING_ORDER_FULFILL = 0x358A, + CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x3587, + CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x3586, + CMSG_CRAFTING_ORDER_REJECT = 0x358C, + CMSG_CRAFTING_ORDER_RELEASE = 0x3589, + CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x358D, + CMSG_CREATE_CHARACTER = 0x3644, + CMSG_CREATE_SHIPMENT = 0x331A, CMSG_DB_QUERY_BULK = 0x35E4, CMSG_DECLINE_GUILD_INVITES = 0x352D, - CMSG_DECLINE_PETITION = 0x3546, + CMSG_DECLINE_PETITION = 0x3547, CMSG_DELETE_EQUIPMENT_SET = 0x3519, - CMSG_DEL_FRIEND = 0x36CD, - CMSG_DEL_IGNORE = 0x36D1, - CMSG_DEPOSIT_REAGENT_BANK = 0x334E, - CMSG_DESTROY_ITEM = 0x32A2, + CMSG_DEL_FRIEND = 0x36CF, + CMSG_DEL_IGNORE = 0x36D3, + CMSG_DEPOSIT_REAGENT_BANK = 0x3357, + CMSG_DESTROY_ITEM = 0x32AA, CMSG_DF_BOOT_PLAYER_VOTE = 0x3616, CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3608, CMSG_DF_GET_JOIN_STATUS = 0x3614, @@ -300,70 +319,70 @@ enum OpcodeClient : uint16 CMSG_DF_READY_CHECK_RESPONSE = 0x3619, CMSG_DF_SET_ROLES = 0x3615, CMSG_DF_TELEPORT = 0x3617, - CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A42, + CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A41, CMSG_DISMISS_CRITTER = 0x3507, - CMSG_DO_COUNTDOWN = 0x3714, - CMSG_DO_MASTER_LOOT_ROLL = 0x3218, + CMSG_DO_COUNTDOWN = 0x3716, + CMSG_DO_MASTER_LOOT_ROLL = 0x321B, CMSG_DO_READY_CHECK = 0x3634, CMSG_DUEL_RESPONSE = 0x34F0, - CMSG_EJECT_PASSENGER = 0x3246, - CMSG_EMOTE = 0x3553, + CMSG_EJECT_PASSENGER = 0x3249, + CMSG_EMOTE = 0x3554, CMSG_ENABLE_NAGLE = 0x376B, CMSG_ENABLE_TAXI_NODE = 0x34AF, - CMSG_ENGINE_SURVEY = 0x36DF, + CMSG_ENGINE_SURVEY = 0x36E1, CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x3767, CMSG_ENUM_CHARACTERS = 0x35E8, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36D9, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DB, CMSG_FAR_SIGHT = 0x34F6, CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B3, CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B2, CMSG_GAME_OBJ_REPORT_USE = 0x34FD, CMSG_GAME_OBJ_USE = 0x34FC, - CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x330D, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32F3, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32E0, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x3341, - CMSG_GARRISON_COMPLETE_MISSION = 0x3333, - CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x330E, - CMSG_GARRISON_GENERATE_RECRUITS = 0x32F6, - CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3305, - CMSG_GARRISON_GET_MAP_DATA = 0x330C, - CMSG_GARRISON_GET_MISSION_REWARD = 0x3364, - CMSG_GARRISON_LEARN_TALENT = 0x3301, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3335, - CMSG_GARRISON_PURCHASE_BUILDING = 0x32DC, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32F8, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x332A, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32F4, - CMSG_GARRISON_RENAME_FOLLOWER = 0x32F5, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32DB, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3310, - CMSG_GARRISON_RESEARCH_TALENT = 0x32F9, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32DD, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32F1, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32E9, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32F7, - CMSG_GARRISON_SOCKET_TALENT = 0x33E4, - CMSG_GARRISON_START_MISSION = 0x3332, - CMSG_GARRISON_SWAP_BUILDINGS = 0x32E1, + CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3315, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32FB, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32E8, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x334A, + CMSG_GARRISON_COMPLETE_MISSION = 0x333C, + CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3316, + CMSG_GARRISON_GENERATE_RECRUITS = 0x32FE, + CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x330D, + CMSG_GARRISON_GET_MAP_DATA = 0x3314, + CMSG_GARRISON_GET_MISSION_REWARD = 0x336D, + CMSG_GARRISON_LEARN_TALENT = 0x3309, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x333E, + CMSG_GARRISON_PURCHASE_BUILDING = 0x32E4, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3300, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x3333, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32FC, + CMSG_GARRISON_RENAME_FOLLOWER = 0x32FD, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32E3, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3318, + CMSG_GARRISON_RESEARCH_TALENT = 0x3301, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32E5, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32F9, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32F1, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32FF, + CMSG_GARRISON_SOCKET_TALENT = 0x33EE, + CMSG_GARRISON_START_MISSION = 0x333B, + CMSG_GARRISON_SWAP_BUILDINGS = 0x32E9, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7, - CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B2, - CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3730, - CMSG_GET_GARRISON_INFO = 0x32D6, - CMSG_GET_ITEM_PURCHASE_DATA = 0x3541, - CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3311, - CMSG_GET_MIRROR_IMAGE_DATA = 0x32A6, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B4, + CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3732, + CMSG_GET_GARRISON_INFO = 0x32DE, + CMSG_GET_ITEM_PURCHASE_DATA = 0x3542, + CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3319, + CMSG_GET_MIRROR_IMAGE_DATA = 0x32AE, CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE, - CMSG_GET_RAF_ACCOUNT_INFO = 0x371E, - CMSG_GET_REMAINING_GAME_TIME = 0x36E7, - CMSG_GET_TROPHY_LIST = 0x3323, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DB, - CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36EC, - CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36ED, - CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x368F, - CMSG_GM_TICKET_GET_CASE_STATUS = 0x368E, - CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368D, - CMSG_GOSSIP_REFRESH_OPTIONS = 0x357E, + CMSG_GET_RAF_ACCOUNT_INFO = 0x3720, + CMSG_GET_REMAINING_GAME_TIME = 0x36E9, + CMSG_GET_TROPHY_LIST = 0x332C, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DD, + CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36EE, + CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36EF, + CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3690, + CMSG_GM_TICKET_GET_CASE_STATUS = 0x368F, + CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368E, + CMSG_GOSSIP_REFRESH_OPTIONS = 0x357F, CMSG_GOSSIP_SELECT_OPTION = 0x349A, CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308E, CMSG_GUILD_ADD_RANK = 0x3065, @@ -402,31 +421,31 @@ enum OpcodeClient : uint16 CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3089, CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x3070, CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3071, - CMSG_GUILD_SET_GUILD_MASTER = 0x36C4, + CMSG_GUILD_SET_GUILD_MASTER = 0x36C6, CMSG_GUILD_SET_MEMBER_NOTE = 0x3073, CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3068, CMSG_GUILD_SHIFT_RANK = 0x3067, CMSG_GUILD_UPDATE_INFO_TEXT = 0x3076, CMSG_GUILD_UPDATE_MOTD_TEXT = 0x3075, CMSG_HEARTH_AND_RESURRECT = 0x3515, - CMSG_HIDE_QUEST_CHOICE = 0x32B6, + CMSG_HIDE_QUEST_CHOICE = 0x32BE, CMSG_HOTFIX_REQUEST = 0x35E5, CMSG_IGNORE_TRADE = 0x3159, CMSG_INITIATE_ROLE_POLL = 0x35DA, CMSG_INITIATE_TRADE = 0x3156, - CMSG_INSPECT = 0x353B, + CMSG_INSPECT = 0x353C, CMSG_INSTANCE_LOCK_RESPONSE = 0x351A, - CMSG_ISLAND_QUEUE = 0x33A7, - CMSG_ITEM_PURCHASE_REFUND = 0x3542, - CMSG_ITEM_TEXT_QUERY = 0x3342, + CMSG_ISLAND_QUEUE = 0x33B1, + CMSG_ITEM_PURCHASE_REFUND = 0x3543, + CMSG_ITEM_TEXT_QUERY = 0x334B, CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DF, CMSG_JOIN_RATED_BATTLEGROUND = 0x3179, - CMSG_KEEP_ALIVE = 0x367E, - CMSG_KEYBOUND_OVERRIDE = 0x322B, + CMSG_KEEP_ALIVE = 0x367F, + CMSG_KEYBOUND_OVERRIDE = 0x322E, CMSG_LATENCY_REPORT = 0x3771, - CMSG_LEARN_PVP_TALENTS = 0x356A, - CMSG_LEARN_TALENTS = 0x3568, - CMSG_LEAVE_GROUP = 0x3648, + CMSG_LEARN_PVP_TALENTS = 0x356B, + CMSG_LEARN_TALENTS = 0x3569, + CMSG_LEAVE_GROUP = 0x3649, CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E0, CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360D, CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360E, @@ -434,101 +453,117 @@ enum OpcodeClient : uint16 CMSG_LFG_LIST_GET_STATUS = 0x360B, CMSG_LFG_LIST_INVITE_APPLICANT = 0x3610, CMSG_LFG_LIST_INVITE_RESPONSE = 0x3611, - CMSG_LFG_LIST_JOIN = 0x3386, + CMSG_LFG_LIST_JOIN = 0x338F, CMSG_LFG_LIST_LEAVE = 0x360A, CMSG_LFG_LIST_SEARCH = 0x360C, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x3387, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x3390, CMSG_LIST_INVENTORY = 0x34A7, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B5, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B4, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B3, - CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B6, + CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B7, + CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B6, + CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B5, + CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B8, CMSG_LOADING_SCREEN_NOTIFY = 0x35F8, - CMSG_LOAD_SELECTED_TROPHY = 0x3324, + CMSG_LOAD_SELECTED_TROPHY = 0x332D, CMSG_LOGOUT_CANCEL = 0x34E6, CMSG_LOGOUT_INSTANT = 0x34E7, CMSG_LOGOUT_REQUEST = 0x34E4, CMSG_LOG_DISCONNECT = 0x3769, CMSG_LOG_STREAMING_ERROR = 0x376D, - CMSG_LOOT_ITEM = 0x3216, - CMSG_LOOT_MONEY = 0x3215, - CMSG_LOOT_RELEASE = 0x321A, - CMSG_LOOT_ROLL = 0x321B, - CMSG_LOOT_UNIT = 0x3214, - CMSG_LOW_LEVEL_RAID1 = 0x369E, + CMSG_LOOT_ITEM = 0x3219, + CMSG_LOOT_MONEY = 0x3218, + CMSG_LOOT_RELEASE = 0x321D, + CMSG_LOOT_ROLL = 0x321E, + CMSG_LOOT_UNIT = 0x3217, + CMSG_LOW_LEVEL_RAID1 = 0x36A0, CMSG_LOW_LEVEL_RAID2 = 0x3521, - CMSG_MAIL_CREATE_TEXT_ITEM = 0x354D, - CMSG_MAIL_DELETE = 0x322D, - CMSG_MAIL_GET_LIST = 0x3548, - CMSG_MAIL_MARK_AS_READ = 0x354C, - CMSG_MAIL_RETURN_TO_SENDER = 0x3654, - CMSG_MAIL_TAKE_ITEM = 0x354A, - CMSG_MAIL_TAKE_MONEY = 0x3549, - CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x322F, - CMSG_MASTER_LOOT_ITEM = 0x3217, + CMSG_MAIL_CREATE_TEXT_ITEM = 0x354E, + CMSG_MAIL_DELETE = 0x3230, + CMSG_MAIL_GET_LIST = 0x3549, + CMSG_MAIL_MARK_AS_READ = 0x354D, + CMSG_MAIL_RETURN_TO_SENDER = 0x3655, + CMSG_MAIL_TAKE_ITEM = 0x354B, + CMSG_MAIL_TAKE_MONEY = 0x354A, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3232, + CMSG_MASTER_LOOT_ITEM = 0x321A, CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x34C7, CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x34C4, CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x34C2, - CMSG_MINIMAP_PING = 0x364A, + CMSG_MINIMAP_PING = 0x364B, CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318B, CMSG_MOUNT_CLEAR_FANFARE = 0x312D, CMSG_MOUNT_SET_FAVORITE = 0x3632, - CMSG_MOUNT_SPECIAL_ANIM = 0x3291, - CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4F, - CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A16, - CMSG_MOVE_CHANGE_TRANSPORT = 0x3A30, - CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A35, - CMSG_MOVE_COLLISION_DISABLE_ACK = 0x3A3A, - CMSG_MOVE_COLLISION_ENABLE_ACK = 0x3A3B, - CMSG_MOVE_DISMISS_VEHICLE = 0x3A34, + CMSG_MOUNT_SPECIAL_ANIM = 0x3297, + CMSG_MOVE_ADD_IMPULSE_ACK = 0x3A50, + CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4E, + CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A15, + CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2F, + CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A34, + CMSG_MOVE_COLLISION_DISABLE_ACK = 0x3A39, + CMSG_MOVE_COLLISION_ENABLE_ACK = 0x3A3A, + CMSG_MOVE_DISMISS_VEHICLE = 0x3A33, CMSG_MOVE_DOUBLE_JUMP = 0x39EB, - CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x3A1F, - CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x3A25, + CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x3A1E, + CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x3A24, CMSG_MOVE_FALL_LAND = 0x39FB, - CMSG_MOVE_FALL_RESET = 0x3A1A, - CMSG_MOVE_FEATHER_FALL_ACK = 0x3A1D, - CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2F, - CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2E, - CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A33, - CMSG_MOVE_FORCE_ROOT_ACK = 0x3A0F, - CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A0D, - CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x3A0C, - CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x3A23, - CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x3A0E, - CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x3A24, - CMSG_MOVE_FORCE_UNROOT_ACK = 0x3A10, - CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x3A22, - CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3A36, - CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3A37, + CMSG_MOVE_FALL_RESET = 0x3A19, + CMSG_MOVE_FEATHER_FALL_ACK = 0x3A1C, + CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2E, + CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2D, + CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A32, + CMSG_MOVE_FORCE_ROOT_ACK = 0x3A0E, + CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A0C, + CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x3A0B, + CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x3A22, + CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x3A0D, + CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x3A23, + CMSG_MOVE_FORCE_UNROOT_ACK = 0x3A0F, + CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x3A21, + CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3A35, + CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3A36, CMSG_MOVE_GUILD_BANK_ITEM = 0x34C1, - CMSG_MOVE_HEARTBEAT = 0x3A11, - CMSG_MOVE_HOVER_ACK = 0x3A14, - CMSG_MOVE_INERTIA_DISABLE_ACK = 0x3A38, - CMSG_MOVE_INERTIA_ENABLE_ACK = 0x3A39, - CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x3A47, + CMSG_MOVE_HEARTBEAT = 0x3A10, + CMSG_MOVE_HOVER_ACK = 0x3A13, + CMSG_MOVE_INERTIA_DISABLE_ACK = 0x3A37, + CMSG_MOVE_INERTIA_ENABLE_ACK = 0x3A38, + CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x3A46, CMSG_MOVE_JUMP = 0x39EA, - CMSG_MOVE_KNOCK_BACK_ACK = 0x3A13, - CMSG_MOVE_REMOVE_INERTIA_ACK = 0x3A50, - CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x3A18, - CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x3A17, - CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE = 0x3A45, - CMSG_MOVE_SET_CAN_FLY_ACK = 0x3A28, - CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x3A26, - CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A3C, - CMSG_MOVE_SET_FACING = 0x3A0A, - CMSG_MOVE_SET_FACING_HEARTBEAT = 0x3A09, - CMSG_MOVE_SET_FLY = 0x3A29, - CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x3A27, - CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A43, - CMSG_MOVE_SET_PITCH = 0x3A0B, + CMSG_MOVE_KNOCK_BACK_ACK = 0x3A12, + CMSG_MOVE_REMOVE_INERTIA_ACK = 0x3A4F, + CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x3A17, + CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x3A16, + CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE = 0x3A44, + CMSG_MOVE_SET_ADV_FLY = 0x3A52, + CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x3A58, + CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x3A53, + CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x3A59, + CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x3A56, + CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x3A57, + CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x3A60, + CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x3A55, + CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x3A54, + CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x3A5E, + CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x3A5A, + CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x3A5B, + CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x3A5D, + CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x3A5C, + CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x3A51, + CMSG_MOVE_SET_CAN_FLY_ACK = 0x3A27, + CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x3A25, + CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A3B, + CMSG_MOVE_SET_FACING = 0x3A09, + CMSG_MOVE_SET_FACING_HEARTBEAT = 0x3A5F, + CMSG_MOVE_SET_FLY = 0x3A28, + CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x3A26, + CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A42, + CMSG_MOVE_SET_PITCH = 0x3A0A, CMSG_MOVE_SET_RUN_MODE = 0x39F2, CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x3A06, - CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x3A15, + CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x3A14, CMSG_MOVE_SET_WALK_MODE = 0x39F3, - CMSG_MOVE_SPLINE_DONE = 0x3A19, - CMSG_MOVE_START_ASCEND = 0x3A2A, + CMSG_MOVE_SPLINE_DONE = 0x3A18, + CMSG_MOVE_START_ASCEND = 0x3A29, CMSG_MOVE_START_BACKWARD = 0x39E5, - CMSG_MOVE_START_DESCEND = 0x3A31, + CMSG_MOVE_START_DESCEND = 0x3A30, CMSG_MOVE_START_FORWARD = 0x39E4, CMSG_MOVE_START_PITCH_DOWN = 0x39F0, CMSG_MOVE_START_PITCH_UP = 0x39EF, @@ -538,51 +573,51 @@ enum OpcodeClient : uint16 CMSG_MOVE_START_TURN_LEFT = 0x39EC, CMSG_MOVE_START_TURN_RIGHT = 0x39ED, CMSG_MOVE_STOP = 0x39E6, - CMSG_MOVE_STOP_ASCEND = 0x3A2B, + CMSG_MOVE_STOP_ASCEND = 0x3A2A, CMSG_MOVE_STOP_PITCH = 0x39F1, CMSG_MOVE_STOP_STRAFE = 0x39E9, CMSG_MOVE_STOP_SWIM = 0x39FD, CMSG_MOVE_STOP_TURN = 0x39EE, CMSG_MOVE_TELEPORT_ACK = 0x39FA, - CMSG_MOVE_TIME_SKIPPED = 0x3A1C, - CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A1B, - CMSG_MOVE_WATER_WALK_ACK = 0x3A1E, + CMSG_MOVE_TIME_SKIPPED = 0x3A1B, + CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A1A, + CMSG_MOVE_WATER_WALK_ACK = 0x3A1D, CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x308F, CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D5, - CMSG_NEXT_CINEMATIC_CAMERA = 0x3556, + CMSG_NEXT_CINEMATIC_CAMERA = 0x3557, CMSG_OBJECT_UPDATE_FAILED = 0x3181, CMSG_OBJECT_UPDATE_RESCUED = 0x3182, - CMSG_OFFER_PETITION = 0x33CE, - CMSG_OPENING_CINEMATIC = 0x3555, - CMSG_OPEN_ITEM = 0x3343, - CMSG_OPEN_MISSION_NPC = 0x3307, - CMSG_OPEN_SHIPMENT_NPC = 0x330F, - CMSG_OPEN_TRADESKILL_NPC = 0x331A, + CMSG_OFFER_PETITION = 0x33D8, + CMSG_OPENING_CINEMATIC = 0x3556, + CMSG_OPEN_ITEM = 0x334C, + CMSG_OPEN_MISSION_NPC = 0x330F, + CMSG_OPEN_SHIPMENT_NPC = 0x3317, + CMSG_OPEN_TRADESKILL_NPC = 0x3322, CMSG_OPT_OUT_OF_LOOT = 0x3504, CMSG_OVERRIDE_SCREEN_FLASH = 0x352E, CMSG_PARTY_INVITE = 0x3602, CMSG_PARTY_INVITE_RESPONSE = 0x3604, - CMSG_PARTY_UNINVITE = 0x3646, - CMSG_PERFORM_ITEM_INTERACTION = 0x3237, + CMSG_PARTY_UNINVITE = 0x3647, + CMSG_PERFORM_ITEM_INTERACTION = 0x323A, CMSG_PETITION_BUY = 0x34CF, - CMSG_PETITION_RENAME_GUILD = 0x36C5, + CMSG_PETITION_RENAME_GUILD = 0x36C7, CMSG_PETITION_SHOW_LIST = 0x34CE, CMSG_PETITION_SHOW_SIGNATURES = 0x34D0, CMSG_PET_ABANDON = 0x3493, CMSG_PET_ACTION = 0x3491, CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E4, - CMSG_PET_BATTLE_INPUT = 0x3640, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x322C, + CMSG_PET_BATTLE_INPUT = 0x3641, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x322F, CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E3, - CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3641, + CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3642, CMSG_PET_BATTLE_REQUEST_PVP = 0x31DD, CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DE, CMSG_PET_BATTLE_REQUEST_WILD = 0x31DB, CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E5, CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DC, CMSG_PET_CANCEL_AURA = 0x3494, - CMSG_PET_CAST_SPELL = 0x32AB, - CMSG_PET_RENAME = 0x3683, + CMSG_PET_CAST_SPELL = 0x32B3, + CMSG_PET_RENAME = 0x3684, CMSG_PET_SET_ACTION = 0x3490, CMSG_PET_SPELL_AUTOCAST = 0x3495, CMSG_PET_STOP_ATTACK = 0x3492, @@ -590,189 +625,193 @@ enum OpcodeClient : uint16 CMSG_PLAYER_LOGIN = 0x35EA, CMSG_PUSH_QUEST_TO_PARTY = 0x34A5, CMSG_PVP_LOG_DATA = 0x317C, - CMSG_QUERY_BATTLE_PET_NAME = 0x3284, - CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365F, - CMSG_QUERY_CORPSE_TRANSPORT = 0x3660, + CMSG_QUERY_BATTLE_PET_NAME = 0x328A, + CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3660, + CMSG_QUERY_CORPSE_TRANSPORT = 0x3661, CMSG_QUERY_COUNTDOWN_TIMER = 0x31AA, - CMSG_QUERY_CREATURE = 0x327E, - CMSG_QUERY_GAME_OBJECT = 0x327F, - CMSG_QUERY_GARRISON_PET_NAME = 0x3285, - CMSG_QUERY_GUILD_INFO = 0x3689, + CMSG_QUERY_CREATURE = 0x3284, + CMSG_QUERY_GAME_OBJECT = 0x3285, + CMSG_QUERY_GARRISON_PET_NAME = 0x328B, + CMSG_QUERY_GUILD_INFO = 0x368A, CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x350E, - CMSG_QUERY_NEXT_MAIL_TIME = 0x354B, - CMSG_QUERY_NPC_TEXT = 0x3280, - CMSG_QUERY_PAGE_TEXT = 0x3282, - CMSG_QUERY_PETITION = 0x3286, - CMSG_QUERY_PET_NAME = 0x3283, + CMSG_QUERY_NEXT_MAIL_TIME = 0x354C, + CMSG_QUERY_NPC_TEXT = 0x3286, + CMSG_QUERY_PAGE_TEXT = 0x3288, + CMSG_QUERY_PETITION = 0x328C, + CMSG_QUERY_PET_NAME = 0x3289, CMSG_QUERY_PLAYER_NAMES = 0x3772, CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3770, CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x376F, CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3175, - CMSG_QUERY_QUEST_INFO = 0x3281, - CMSG_QUERY_REALM_NAME = 0x3688, - CMSG_QUERY_SCENARIO_POI = 0x3655, + CMSG_QUERY_QUEST_INFO = 0x3287, + CMSG_QUERY_QUEST_ITEM_USABILITY = 0x3176, + CMSG_QUERY_REALM_NAME = 0x3689, + CMSG_QUERY_SCENARIO_POI = 0x3656, CMSG_QUERY_TIME = 0x34E3, - CMSG_QUERY_TREASURE_PICKER = 0x3367, + CMSG_QUERY_TREASURE_PICKER = 0x3370, CMSG_QUERY_VOID_STORAGE = 0x31A3, CMSG_QUEST_CONFIRM_ACCEPT = 0x34A4, CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349E, CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x34A0, - CMSG_QUEST_GIVER_CLOSE_QUEST = 0x355C, + CMSG_QUEST_GIVER_CLOSE_QUEST = 0x355D, CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x349F, CMSG_QUEST_GIVER_HELLO = 0x349C, CMSG_QUEST_GIVER_QUERY_QUEST = 0x349D, CMSG_QUEST_GIVER_REQUEST_REWARD = 0x34A1, CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x34A3, CMSG_QUEST_GIVER_STATUS_QUERY = 0x34A2, - CMSG_QUEST_LOG_REMOVE_QUEST = 0x3540, - CMSG_QUEST_POI_QUERY = 0x36AC, + CMSG_QUEST_LOG_REMOVE_QUEST = 0x3541, + CMSG_QUEST_POI_QUERY = 0x36AE, CMSG_QUEST_PUSH_RESULT = 0x34A6, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33BF, - CMSG_QUEST_SESSION_REQUEST_START = 0x33BE, - CMSG_QUEST_SESSION_REQUEST_STOP = 0x3729, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33C9, + CMSG_QUEST_SESSION_REQUEST_START = 0x33C8, + CMSG_QUEST_SESSION_REQUEST_STOP = 0x372B, CMSG_QUEUED_MESSAGES_END = 0x376C, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3702, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3701, - CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x372E, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3700, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x36FF, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3704, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3703, + CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3730, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3702, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3701, CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3512, - CMSG_RAF_CLAIM_NEXT_REWARD = 0x371F, - CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3721, - CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3720, - CMSG_RANDOM_ROLL = 0x3653, + CMSG_RAF_CLAIM_NEXT_REWARD = 0x3721, + CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3723, + CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3722, + CMSG_RANDOM_ROLL = 0x3654, CMSG_READY_CHECK_RESPONSE = 0x3635, - CMSG_READ_ITEM = 0x3344, + CMSG_READ_ITEM = 0x334D, CMSG_RECLAIM_CORPSE = 0x34E9, - CMSG_REMOVE_NEW_ITEM = 0x336A, - CMSG_REMOVE_RAF_RECRUIT = 0x3722, + CMSG_REMOVE_NEW_ITEM = 0x3373, + CMSG_REMOVE_RAF_RECRUIT = 0x3724, CMSG_REORDER_CHARACTERS = 0x35E9, CMSG_REPAIR_ITEM = 0x34FA, - CMSG_REPLACE_TROPHY = 0x3325, - CMSG_REPOP_REQUEST = 0x3538, - CMSG_REPORT_CLIENT_VARIABLES = 0x36FC, - CMSG_REPORT_ENABLED_ADDONS = 0x36FB, - CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FD, + CMSG_REPLACE_TROPHY = 0x332E, + CMSG_REPOP_REQUEST = 0x3539, + CMSG_REPORT_CLIENT_VARIABLES = 0x36FE, + CMSG_REPORT_ENABLED_ADDONS = 0x36FD, + CMSG_REPORT_FROZEN_WHILE_LOADING_MAP = 0x36A6, + CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FF, CMSG_REPORT_PVP_PLAYER_AFK = 0x3502, - CMSG_REPORT_SERVER_LAG = 0x33B7, - CMSG_REPORT_STUCK_IN_COMBAT = 0x33B8, - CMSG_REQUEST_ACCOUNT_DATA = 0x3693, - CMSG_REQUEST_AREA_POI_UPDATE = 0x3369, + CMSG_REPORT_SERVER_LAG = 0x33C1, + CMSG_REPORT_STUCK_IN_COMBAT = 0x33C2, + CMSG_REQUEST_ACCOUNT_DATA = 0x3694, + CMSG_REQUEST_AREA_POI_UPDATE = 0x3372, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC, CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317E, CMSG_REQUEST_CEMETERY_LIST = 0x3177, - CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368A, - CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32C8, - CMSG_REQUEST_COVENANT_CALLINGS = 0x33A9, - CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353C, - CMSG_REQUEST_FORCED_REACTIONS = 0x320F, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33E3, + CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368B, + CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32D0, + CMSG_REQUEST_COVENANT_CALLINGS = 0x33B3, + CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353D, + CMSG_REQUEST_FORCED_REACTIONS = 0x320E, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33ED, CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A9, CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A8, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33B9, - CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32B7, - CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3209, - CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x320A, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C3, + CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32BF, + CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3208, + CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3209, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7, - CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3652, + CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3653, CMSG_REQUEST_PET_INFO = 0x3496, - CMSG_REQUEST_PLAYED_TIME = 0x3289, + CMSG_REQUEST_PLAYED_TIME = 0x328F, CMSG_REQUEST_PVP_REWARDS = 0x3196, - CMSG_REQUEST_RAID_INFO = 0x36C6, + CMSG_REQUEST_RAID_INFO = 0x36C8, CMSG_REQUEST_RATED_PVP_INFO = 0x35E3, CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x309B, CMSG_REQUEST_RESEARCH_HISTORY = 0x3167, CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3197, CMSG_REQUEST_STABLED_PETS = 0x3497, - CMSG_REQUEST_VEHICLE_EXIT = 0x3241, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3243, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3242, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3244, - CMSG_REQUEST_WEEKLY_REWARDS = 0x33AC, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3368, - CMSG_RESET_CHALLENGE_MODE = 0x3207, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3208, - CMSG_RESET_INSTANCES = 0x3667, - CMSG_RESURRECT_RESPONSE = 0x3682, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x3327, - CMSG_RIDE_VEHICLE_INTERACT = 0x3245, + CMSG_REQUEST_VEHICLE_EXIT = 0x3244, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3246, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3245, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3247, + CMSG_REQUEST_WEEKLY_REWARDS = 0x33B6, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3371, + CMSG_RESET_CHALLENGE_MODE = 0x3206, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3207, + CMSG_RESET_INSTANCES = 0x3668, + CMSG_RESURRECT_RESPONSE = 0x3683, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x3330, + CMSG_RIDE_VEHICLE_INTERACT = 0x3248, CMSG_SAVE_CUF_PROFILES = 0x318C, CMSG_SAVE_EQUIPMENT_SET = 0x3518, - CMSG_SAVE_GUILD_EMBLEM = 0x32BB, - CMSG_SCENE_PLAYBACK_CANCELED = 0x3228, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x3227, - CMSG_SCENE_TRIGGER_EVENT = 0x3229, - CMSG_SELF_RES = 0x3543, + CMSG_SAVE_GUILD_EMBLEM = 0x32C3, + CMSG_SCENE_PLAYBACK_CANCELED = 0x322B, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x322A, + CMSG_SCENE_TRIGGER_EVENT = 0x322C, + CMSG_SELF_RES = 0x3544, CMSG_SELL_ITEM = 0x34A8, - CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F5, - CMSG_SEND_CONTACT_LIST = 0x36CB, + CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F7, + CMSG_SEND_CONTACT_LIST = 0x36CD, CMSG_SEND_MAIL = 0x35FA, CMSG_SEND_TEXT_EMOTE = 0x348E, - CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3699, - CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x322E, - CMSG_SET_ACTION_BAR_TOGGLES = 0x3544, + CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369B, + CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3231, + CMSG_SET_ACTION_BAR_TOGGLES = 0x3545, CMSG_SET_ACTION_BUTTON = 0x3636, - CMSG_SET_ACTIVE_MOVER = 0x3A3D, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32C9, - CMSG_SET_ASSISTANT_LEADER = 0x364E, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3347, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3348, - CMSG_SET_CHAT_DISABLED = 0x3735, - CMSG_SET_CONTACT_NOTES = 0x36CE, + CMSG_SET_ACTIVE_MOVER = 0x3A3C, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32D1, + CMSG_SET_ASSISTANT_LEADER = 0x364F, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3350, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3351, + CMSG_SET_CONTACT_NOTES = 0x36D0, CMSG_SET_CURRENCY_FLAGS = 0x3169, - CMSG_SET_DIFFICULTY_ID = 0x322A, - CMSG_SET_DUNGEON_DIFFICULTY = 0x3681, + CMSG_SET_DIFFICULTY_ID = 0x322D, + CMSG_SET_DUNGEON_DIFFICULTY = 0x3682, + CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x327E, CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3618, CMSG_SET_FACTION_AT_WAR = 0x34EC, CMSG_SET_FACTION_INACTIVE = 0x34EE, CMSG_SET_FACTION_NOT_AT_WAR = 0x34ED, CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31BA, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x334A, - CMSG_SET_LOOT_METHOD = 0x3647, - CMSG_SET_LOOT_SPECIALIZATION = 0x3551, - CMSG_SET_PARTY_ASSIGNMENT = 0x3650, - CMSG_SET_PARTY_LEADER = 0x3649, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3353, + CMSG_SET_LOOT_METHOD = 0x3648, + CMSG_SET_LOOT_SPECIALIZATION = 0x3552, + CMSG_SET_PARTY_ASSIGNMENT = 0x3651, + CMSG_SET_PARTY_LEADER = 0x364A, CMSG_SET_PET_SLOT = 0x3168, - CMSG_SET_PLAYER_DECLINED_NAMES = 0x3687, + CMSG_SET_PLAYER_DECLINED_NAMES = 0x3688, CMSG_SET_PREFERRED_CEMETERY = 0x3178, - CMSG_SET_PVP = 0x32BF, - CMSG_SET_RAID_DIFFICULTY = 0x36D7, + CMSG_SET_PVP = 0x32C7, + CMSG_SET_RAID_DIFFICULTY = 0x36D9, CMSG_SET_ROLE = 0x35D9, - CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3685, - CMSG_SET_SELECTION = 0x353A, + CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3686, + CMSG_SET_SELECTION = 0x353B, CMSG_SET_SHEATHED = 0x348F, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3349, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3352, CMSG_SET_TAXI_BENCHMARK_MODE = 0x3501, - CMSG_SET_TITLE = 0x328F, + CMSG_SET_TITLE = 0x3295, CMSG_SET_TRADE_CURRENCY = 0x3160, CMSG_SET_TRADE_GOLD = 0x315F, CMSG_SET_TRADE_ITEM = 0x315D, - CMSG_SET_USING_PARTY_GARRISON = 0x3309, - CMSG_SET_WAR_MODE = 0x32C0, + CMSG_SET_USING_PARTY_GARRISON = 0x3311, + CMSG_SET_WAR_MODE = 0x32C8, CMSG_SET_WATCHED_FACTION = 0x34EF, - CMSG_SHOW_TRADE_SKILL = 0x36BE, - CMSG_SIGN_PETITION = 0x3545, - CMSG_SILENCE_PARTY_TALKER = 0x3651, - CMSG_SOCIAL_CONTRACT_REQUEST = 0x373A, + CMSG_SHOW_TRADE_SKILL = 0x36C0, + CMSG_SIGN_PETITION = 0x3546, + CMSG_SILENCE_PARTY_TALKER = 0x3652, + CMSG_SOCIAL_CONTRACT_REQUEST = 0x373D, CMSG_SOCKET_GEMS = 0x34F9, - CMSG_SORT_BAGS = 0x334B, - CMSG_SORT_BANK_BAGS = 0x334C, - CMSG_SORT_REAGENT_BANK_BAGS = 0x334D, + CMSG_SORT_BAGS = 0x3354, + CMSG_SORT_BANK_BAGS = 0x3355, + CMSG_SORT_REAGENT_BANK_BAGS = 0x3356, CMSG_SPELL_CLICK = 0x349B, + CMSG_SPELL_EMPOWER_RELEASE = 0x327C, + CMSG_SPELL_EMPOWER_RESTART = 0x327D, CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B5, CMSG_SPLIT_GUILD_BANK_ITEM = 0x34C8, CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x34C5, CMSG_SPLIT_ITEM = 0x399E, CMSG_SPLIT_ITEM_TO_GUILD_BANK = 0x34C3, CMSG_STAND_STATE_CHANGE = 0x318A, - CMSG_START_CHALLENGE_MODE = 0x355D, + CMSG_START_CHALLENGE_MODE = 0x355E, CMSG_START_SPECTATOR_WAR_GAME = 0x35DF, CMSG_START_WAR_GAME = 0x35DE, CMSG_STORE_GUILD_BANK_ITEM = 0x34BE, - CMSG_SUBMIT_USER_FEEDBACK = 0x3692, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33D8, - CMSG_SUMMON_RESPONSE = 0x3669, - CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3645, + CMSG_SUBMIT_USER_FEEDBACK = 0x3693, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E2, + CMSG_SUMMON_RESPONSE = 0x366A, + CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3646, CMSG_SURRENDER_ARENA = 0x3174, CMSG_SUSPEND_COMMS_ACK = 0x3764, CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A, @@ -780,148 +819,150 @@ enum OpcodeClient : uint16 CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x34BF, - CMSG_SWAP_SUB_GROUPS = 0x364C, + CMSG_SWAP_SUB_GROUPS = 0x364D, CMSG_SWAP_VOID_ITEM = 0x31A5, - CMSG_TABARD_VENDOR_ACTIVATE = 0x32BC, + CMSG_TABARD_VENDOR_ACTIVATE = 0x32C4, CMSG_TALK_TO_GOSSIP = 0x3498, CMSG_TAXI_NODE_STATUS_QUERY = 0x34AE, CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34B0, CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34B2, - CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A41, - CMSG_TIME_SYNC_RESPONSE = 0x3A3E, - CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A40, - CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3F, - CMSG_TOGGLE_DIFFICULTY = 0x3656, - CMSG_TOGGLE_PVP = 0x32BE, + CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A40, + CMSG_TIME_SYNC_RESPONSE = 0x3A3D, + CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3F, + CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3E, + CMSG_TOGGLE_DIFFICULTY = 0x3657, + CMSG_TOGGLE_PVP = 0x32C6, CMSG_TOTEM_DESTROYED = 0x3506, CMSG_TOY_CLEAR_FANFARE = 0x312E, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x3366, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x336F, CMSG_TRAINER_BUY_SPELL = 0x34B4, CMSG_TRAINER_LIST = 0x34B3, + CMSG_TRAITS_COMMIT_CONFIG = 0x3401, + CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x33FF, CMSG_TRANSMOGRIFY_ITEMS = 0x3198, - CMSG_TURN_IN_PETITION = 0x3547, - CMSG_TUTORIAL = 0x36D8, + CMSG_TURN_IN_PETITION = 0x3548, + CMSG_TUTORIAL = 0x36DA, CMSG_TWITTER_CHECK_STATUS = 0x312A, CMSG_TWITTER_CONNECT = 0x3127, CMSG_TWITTER_DISCONNECT = 0x312B, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33A8, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B2, CMSG_UNACCEPT_TRADE = 0x315B, - CMSG_UNDELETE_CHARACTER = 0x36DA, + CMSG_UNDELETE_CHARACTER = 0x36DC, CMSG_UNLEARN_SKILL = 0x34F3, CMSG_UNLEARN_SPECIALIZATION = 0x31A6, CMSG_UNLOCK_VOID_STORAGE = 0x31A2, - CMSG_UPDATE_ACCOUNT_DATA = 0x3694, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32AE, - CMSG_UPDATE_CLIENT_SETTINGS = 0x3663, - CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A44, - CMSG_UPDATE_RAID_TARGET = 0x364F, - CMSG_UPDATE_SPELL_VISUAL = 0x32AD, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36EF, - CMSG_UPGRADE_GARRISON = 0x32D1, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33D6, + CMSG_UPDATE_AADC_STATUS = 0x3737, + CMSG_UPDATE_ACCOUNT_DATA = 0x3695, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32B6, + CMSG_UPDATE_CLIENT_SETTINGS = 0x3664, + CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3323, + CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A43, + CMSG_UPDATE_RAID_TARGET = 0x3650, + CMSG_UPDATE_SPELL_VISUAL = 0x32B5, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F1, + CMSG_UPGRADE_GARRISON = 0x32D9, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E0, CMSG_USED_FOLLOW = 0x3187, - CMSG_USE_CRITTER_ITEM = 0x324B, + CMSG_USE_CRITTER_ITEM = 0x324E, CMSG_USE_EQUIPMENT_SET = 0x3995, - CMSG_USE_ITEM = 0x32A7, - CMSG_USE_TOY = 0x32AA, - CMSG_VAS_CHECK_TRANSFER_OK = 0x3707, - CMSG_VAS_GET_QUEUE_MINUTES = 0x3706, - CMSG_VAS_GET_SERVICE_STATUS = 0x3705, + CMSG_USE_ITEM = 0x32AF, + CMSG_USE_TOY = 0x32B2, + CMSG_VAS_CHECK_TRANSFER_OK = 0x3709, + CMSG_VAS_GET_QUEUE_MINUTES = 0x3708, + CMSG_VAS_GET_SERVICE_STATUS = 0x3707, CMSG_VIOLENCE_LEVEL = 0x3185, - CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370B, - CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370C, - CMSG_VOICE_CHAT_LOGIN = 0x370A, + CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370D, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370E, + CMSG_VOICE_CHAT_LOGIN = 0x370C, CMSG_VOID_STORAGE_TRANSFER = 0x31A4, CMSG_WARDEN3_DATA = 0x35EC, - CMSG_WHO = 0x3680, - CMSG_WHO_IS = 0x367F, + CMSG_WHO = 0x3681, + CMSG_WHO_IS = 0x3680, CMSG_WORLD_PORT_RESPONSE = 0x35F9, CMSG_WRAP_ITEM = 0x3994, }; enum OpcodeServer : uint16 { - SMSG_ABORT_NEW_WORLD = 0x259A, - SMSG_ACCOUNT_COSMETIC_ADDED = 0x2872, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2858, - SMSG_ACCOUNT_DATA_TIMES = 0x26FE, - SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AC, - SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2871, - SMSG_ACCOUNT_TOY_UPDATE = 0x25AD, - SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B0, - SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25AF, - SMSG_ACHIEVEMENT_DELETED = 0x26DD, - SMSG_ACHIEVEMENT_EARNED = 0x263B, + SMSG_ABORT_NEW_WORLD = 0x259C, + SMSG_ACCOUNT_COSMETIC_ADDED = 0x287B, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2861, + SMSG_ACCOUNT_DATA_TIMES = 0x2704, + SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AF, + SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x287A, + SMSG_ACCOUNT_TOY_UPDATE = 0x25B0, + SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B3, + SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B2, + SMSG_ACHIEVEMENT_DELETED = 0x26E2, + SMSG_ACHIEVEMENT_EARNED = 0x2640, SMSG_ACTIVATE_ESSENCE_FAILED = 0x3015, SMSG_ACTIVATE_SOULBIND_FAILED = 0x3017, - SMSG_ACTIVATE_TAXI_REPLY = 0x2675, - SMSG_ACTIVE_GLYPHS = 0x2C54, - SMSG_ADDON_LIST_REQUEST = 0x263A, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2635, - SMSG_ADD_ITEM_PASSIVE = 0x25A8, - SMSG_ADD_LOSS_OF_CONTROL = 0x2669, - SMSG_ADD_RUNE_POWER = 0x26AF, - SMSG_ADJUST_SPLINE_DURATION = 0x25CC, - SMSG_ADVANCED_COMBAT_LOG = 0x286E, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x2868, - SMSG_ADVENTURE_MAP_OPEN_NPC = 0x27E5, - SMSG_AE_LOOT_TARGETS = 0x2610, - SMSG_AE_LOOT_TARGET_ACK = 0x2611, - SMSG_AI_REACTION = 0x26AC, - SMSG_ALLIED_RACE_DETAILS = 0x27EB, + SMSG_ACTIVATE_TAXI_REPLY = 0x267A, + SMSG_ACTIVE_GLYPHS = 0x2C57, + SMSG_ADDON_LIST_REQUEST = 0x263F, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263A, + SMSG_ADD_ITEM_PASSIVE = 0x25AB, + SMSG_ADD_LOSS_OF_CONTROL = 0x266E, + SMSG_ADD_RUNE_POWER = 0x26B4, + SMSG_ADJUST_SPLINE_DURATION = 0x25CF, + SMSG_ADVANCED_COMBAT_LOG = 0x2877, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x2871, + SMSG_AE_LOOT_TARGETS = 0x2615, + SMSG_AE_LOOT_TARGET_ACK = 0x2616, + SMSG_AI_REACTION = 0x26B1, + SMSG_ALLIED_RACE_DETAILS = 0x27F4, SMSG_ALL_ACCOUNT_CRITERIA = 0x2571, SMSG_ALL_ACHIEVEMENT_DATA = 0x2570, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2845, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x284E, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2588, SMSG_AREA_POI_UPDATE_RESPONSE = 0x3010, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x2733, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x2739, SMSG_AREA_TRIGGER_DENIED = 0x2902, SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x28FF, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x270A, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x2710, SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FE, SMSG_AREA_TRIGGER_RE_PATH = 0x28FD, SMSG_AREA_TRIGGER_RE_SHAPE = 0x2901, SMSG_AREA_TRIGGER_UNATTACH = 0x2900, - SMSG_ARENA_CLEAR_OPPONENTS = 0x2641, - SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262A, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2640, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x2796, - SMSG_ARTIFACT_FORGE_ERROR = 0x2794, - SMSG_ARTIFACT_RESPEC_PROMPT = 0x2795, - SMSG_ARTIFACT_XP_GAIN = 0x27DE, + SMSG_ARENA_CLEAR_OPPONENTS = 0x2646, + SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262F, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2645, + SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279E, + SMSG_ARTIFACT_FORGE_ERROR = 0x279C, + SMSG_ARTIFACT_RESPEC_PROMPT = 0x279D, + SMSG_ARTIFACT_XP_GAIN = 0x27E7, SMSG_ATTACKER_STATE_UPDATE = 0x294D, SMSG_ATTACK_START = 0x2938, SMSG_ATTACK_STOP = 0x2939, SMSG_ATTACK_SWING_ERROR = 0x2947, SMSG_ATTACK_SWING_LANDED_LOG = 0x2948, - SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27C7, - SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27C6, - SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27C5, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26E7, - SMSG_AUCTION_COMMAND_RESULT = 0x26E4, - SMSG_AUCTION_DISABLE_POSTING_BEFORE_MAINTENANCE = 0x287F, - SMSG_AUCTION_FAVORITE_LIST = 0x285F, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x2856, - SMSG_AUCTION_HELLO_RESPONSE = 0x26E2, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2855, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2852, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2853, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2854, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26E6, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26E8, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x26E3, - SMSG_AUCTION_WON_NOTIFICATION = 0x26E5, + SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27D0, + SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27CF, + SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27CE, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26ED, + SMSG_AUCTION_COMMAND_RESULT = 0x26EA, + SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x288D, + SMSG_AUCTION_FAVORITE_LIST = 0x2868, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x285F, + SMSG_AUCTION_HELLO_RESPONSE = 0x26E8, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x285E, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x285B, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x285C, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x285D, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26EC, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26EE, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x26E9, + SMSG_AUCTION_WON_NOTIFICATION = 0x26EB, SMSG_AURA_POINTS_DEPLETED = 0x2C23, SMSG_AURA_UPDATE = 0x2C22, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_FAILED = 0x256C, SMSG_AUTH_RESPONSE = 0x256D, SMSG_AVAILABLE_HOTFIXES = 0x290F, - SMSG_AZERITE_RESPEC_NPC = 0x27E8, SMSG_BAG_CLEANUP_FINISHED = 0x2DA7, - SMSG_BARBER_SHOP_RESULT = 0x26B4, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x2836, + SMSG_BARBER_SHOP_RESULT = 0x26B9, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x283F, SMSG_BATTLEFIELD_LIST = 0x2927, SMSG_BATTLEFIELD_PORT_DENIED = 0x292D, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2923, @@ -937,113 +978,112 @@ enum OpcodeServer : uint16 SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928, SMSG_BATTLEGROUND_POINTS = 0x2949, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x277D, - SMSG_BATTLENET_CHALLENGE_START = 0x277C, - SMSG_BATTLENET_NOTIFICATION = 0x27F6, - SMSG_BATTLENET_RESPONSE = 0x27F5, - SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27F7, - SMSG_BATTLE_PAY_ACK_FAILED = 0x2777, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x276C, - SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x276D, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2776, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x276A, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2769, - SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x2877, - SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2767, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2768, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2766, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x2764, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2765, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x276B, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2775, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x2812, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2773, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2772, - SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2806, - SMSG_BATTLE_PETS_HEALED = 0x25EC, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2670, - SMSG_BATTLE_PET_DELETED = 0x25E9, - SMSG_BATTLE_PET_ERROR = 0x2630, - SMSG_BATTLE_PET_JOURNAL = 0x25E8, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25E6, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25E7, - SMSG_BATTLE_PET_LICENSE_CHANGED = 0x25ED, - SMSG_BATTLE_PET_RESTORED = 0x25EB, - SMSG_BATTLE_PET_REVOKED = 0x25EA, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E4, - SMSG_BATTLE_PET_UPDATES = 0x25E3, - SMSG_BINDER_CONFIRM = 0x26F1, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x2783, + SMSG_BATTLENET_CHALLENGE_START = 0x2782, + SMSG_BATTLENET_NOTIFICATION = 0x2800, + SMSG_BATTLENET_RESPONSE = 0x27FF, + SMSG_BATTLE_NET_CONNECTION_STATUS = 0x2801, + SMSG_BATTLE_PAY_ACK_FAILED = 0x277D, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2772, + SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2773, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x277C, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2770, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x276F, + SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x2880, + SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x276D, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x276E, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x276C, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276A, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x276B, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2771, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x277B, + SMSG_BATTLE_PAY_START_CHECKOUT = 0x281C, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2779, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2778, + SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2810, + SMSG_BATTLE_PETS_HEALED = 0x25F1, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2675, + SMSG_BATTLE_PET_DELETED = 0x25EE, + SMSG_BATTLE_PET_ERROR = 0x2635, + SMSG_BATTLE_PET_JOURNAL = 0x25ED, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25EB, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25EC, + SMSG_BATTLE_PET_LICENSE_CHANGED = 0x25F2, + SMSG_BATTLE_PET_RESTORED = 0x25F0, + SMSG_BATTLE_PET_REVOKED = 0x25EF, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E9, + SMSG_BATTLE_PET_UPDATES = 0x25E8, SMSG_BIND_POINT_UPDATE = 0x257D, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2620, - SMSG_BLACK_MARKET_OPEN_RESULT = 0x261E, - SMSG_BLACK_MARKET_OUTBID = 0x2621, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x261F, - SMSG_BLACK_MARKET_WON = 0x2622, - SMSG_BONUS_ROLL_EMPTY = 0x263D, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2625, + SMSG_BLACK_MARKET_OUTBID = 0x2626, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2624, + SMSG_BLACK_MARKET_WON = 0x2627, + SMSG_BONUS_ROLL_EMPTY = 0x2642, SMSG_BOSS_KILL = 0x294C, SMSG_BREAK_TARGET = 0x2937, SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, - SMSG_BROADCAST_SUMMON_CAST = 0x2838, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x2839, - SMSG_BUY_FAILED = 0x26BD, - SMSG_BUY_SUCCEEDED = 0x26BC, + SMSG_BROADCAST_SUMMON_CAST = 0x2841, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x2842, + SMSG_BUY_FAILED = 0x26C2, + SMSG_BUY_SUCCEEDED = 0x26C1, SMSG_CACHE_INFO = 0x291D, SMSG_CACHE_VERSION = 0x291C, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x2695, - SMSG_CALENDAR_COMMAND_RESULT = 0x2696, - SMSG_CALENDAR_COMMUNITY_INVITE = 0x2685, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x268D, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x268E, - SMSG_CALENDAR_INVITE_ADDED = 0x2686, - SMSG_CALENDAR_INVITE_ALERT = 0x268A, - SMSG_CALENDAR_INVITE_NOTES = 0x268F, - SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2690, - SMSG_CALENDAR_INVITE_REMOVED = 0x2687, - SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x268C, - SMSG_CALENDAR_INVITE_STATUS = 0x2688, - SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x268B, - SMSG_CALENDAR_MODERATOR_STATUS = 0x2689, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2691, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2692, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2693, - SMSG_CALENDAR_SEND_CALENDAR = 0x2683, - SMSG_CALENDAR_SEND_EVENT = 0x2684, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x2694, - SMSG_CAMERA_EFFECT = 0x2719, - SMSG_CANCEL_AUTO_REPEAT = 0x26D3, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x269A, + SMSG_CALENDAR_COMMAND_RESULT = 0x269B, + SMSG_CALENDAR_COMMUNITY_INVITE = 0x268A, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2692, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2693, + SMSG_CALENDAR_INVITE_ADDED = 0x268B, + SMSG_CALENDAR_INVITE_ALERT = 0x268F, + SMSG_CALENDAR_INVITE_NOTES = 0x2694, + SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2695, + SMSG_CALENDAR_INVITE_REMOVED = 0x268C, + SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2691, + SMSG_CALENDAR_INVITE_STATUS = 0x268D, + SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2690, + SMSG_CALENDAR_MODERATOR_STATUS = 0x268E, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2696, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2697, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2698, + SMSG_CALENDAR_SEND_CALENDAR = 0x2688, + SMSG_CALENDAR_SEND_EVENT = 0x2689, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x2699, + SMSG_CAMERA_EFFECT = 0x271F, + SMSG_CANCEL_AUTO_REPEAT = 0x26D8, SMSG_CANCEL_COMBAT = 0x2946, - SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46, - SMSG_CANCEL_SCENE = 0x262F, - SMSG_CANCEL_SPELL_VISUAL = 0x2C44, - SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48, + SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C49, + SMSG_CANCEL_PRELOAD_WORLD = 0x259A, + SMSG_CANCEL_SCENE = 0x2634, + SMSG_CANCEL_SPELL_VISUAL = 0x2C47, + SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C4B, SMSG_CAN_DUEL_RESULT = 0x2942, - SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2805, + SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x280F, SMSG_CAPTURE_POINT_REMOVED = 0x292A, - SMSG_CAST_FAILED = 0x2C57, + SMSG_CAST_FAILED = 0x2C5A, SMSG_CATEGORY_COOLDOWN = 0x2C16, - SMSG_CHAIN_MISSILE_BOUNCE = 0x25C4, - SMSG_CHALLENGE_MODE_COMPLETE = 0x2604, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2608, - SMSG_CHALLENGE_MODE_RESET = 0x2603, - SMSG_CHALLENGE_MODE_START = 0x2601, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2602, + SMSG_CHAIN_MISSILE_BOUNCE = 0x25C7, + SMSG_CHALLENGE_MODE_COMPLETE = 0x2609, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260D, + SMSG_CHALLENGE_MODE_RESET = 0x2608, + SMSG_CHALLENGE_MODE_START = 0x2606, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2607, SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3004, - SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x27F8, + SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x2802, SMSG_CHANNEL_LIST = 0x2BC3, SMSG_CHANNEL_NOTIFY = 0x2BC0, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2, - SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B0, - SMSG_CHARACTER_LOGIN_FAILED = 0x26F9, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x277B, - SMSG_CHARACTER_RENAME_RESULT = 0x2756, - SMSG_CHARACTER_UPGRADE_ABORTED = 0x27AF, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27AE, - SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27B1, - SMSG_CHARACTER_UPGRADE_STARTED = 0x27AD, - SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26D7, - SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26D8, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x279A, + SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B9, + SMSG_CHARACTER_LOGIN_FAILED = 0x26FF, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2781, + SMSG_CHARACTER_RENAME_RESULT = 0x275C, + SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B8, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B7, + SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27BA, + SMSG_CHARACTER_UPGRADE_STARTED = 0x27B6, + SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26DC, + SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26DD, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A3, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_DOWN = 0x2BBD, @@ -1060,88 +1100,95 @@ enum OpcodeServer : uint16 SMSG_CHECK_ABANDON_NPE = 0x3018, SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2584, SMSG_CHECK_WARGAME_ENTRY = 0x2592, - SMSG_CHROMIE_TIME_OPEN_NPC = 0x27ED, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2862, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x2849, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x286B, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x2852, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27, - SMSG_CLEAR_BOSS_EMOTES = 0x25B7, - SMSG_CLEAR_COOLDOWN = 0x26B1, + SMSG_CLEAR_BOSS_EMOTES = 0x25BA, + SMSG_CLEAR_COOLDOWN = 0x26B6, SMSG_CLEAR_COOLDOWNS = 0x2C26, SMSG_CLEAR_RESURRECT = 0x257F, SMSG_CLEAR_SPELL_CHARGES = 0x2C28, SMSG_CLEAR_TARGET = 0x2943, SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1, - SMSG_CLOSE_ARTIFACT_FORGE = 0x2793, - SMSG_CLOSE_HEART_FORGE = 0x2818, - SMSG_CLOSE_ITEM_FORGE = 0x2791, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2841, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2844, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2842, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x283F, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2843, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2840, - SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x287A, - SMSG_COIN_REMOVED = 0x260F, + SMSG_CLOSE_ARTIFACT_FORGE = 0x279B, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x284A, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x284D, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x284B, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2848, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x284C, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2849, + SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x2887, + SMSG_COIN_REMOVED = 0x2614, SMSG_COMBAT_EVENT_FAILED = 0x293A, - SMSG_COMMENTATOR_MAP_INFO = 0x26FB, - SMSG_COMMENTATOR_PLAYER_INFO = 0x26FC, - SMSG_COMMENTATOR_STATE_CHANGED = 0x26FA, - SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27C2, - SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27CE, - SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27C4, - SMSG_COMMERCE_TOKEN_UPDATE = 0x27C3, - SMSG_COMPLAINT_RESULT = 0x26A3, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x278C, - SMSG_CONFIRM_PARTY_INVITE = 0x2804, + SMSG_COMMENTATOR_MAP_INFO = 0x2701, + SMSG_COMMENTATOR_PLAYER_INFO = 0x2702, + SMSG_COMMENTATOR_STATE_CHANGED = 0x2700, + SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27CB, + SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D7, + SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27CD, + SMSG_COMMERCE_TOKEN_UPDATE = 0x27CC, + SMSG_COMPLAINT_RESULT = 0x26A8, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2794, + SMSG_CONFIRM_PARTY_INVITE = 0x280E, SMSG_CONNECT_TO = 0x304D, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x2778, - SMSG_CONSOLE_WRITE = 0x262D, - SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27CA, - SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27C9, - SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27C8, - SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27CC, - SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27CD, - SMSG_CONTACT_LIST = 0x2779, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x280B, - SMSG_CONTROL_UPDATE = 0x263F, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x286B, - SMSG_COOLDOWN_CHEAT = 0x272C, - SMSG_COOLDOWN_EVENT = 0x26B0, - SMSG_CORPSE_LOCATION = 0x2647, - SMSG_CORPSE_RECLAIM_DELAY = 0x273D, - SMSG_CORPSE_TRANSPORT_QUERY = 0x2706, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x277E, + SMSG_CONSOLE_WRITE = 0x2632, + SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27D3, + SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27D2, + SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27D1, + SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D5, + SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D6, + SMSG_CONTACT_LIST = 0x277F, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2815, + SMSG_CONTROL_UPDATE = 0x2644, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x2874, + SMSG_COOLDOWN_CHEAT = 0x2732, + SMSG_COOLDOWN_EVENT = 0x26B5, + SMSG_CORPSE_LOCATION = 0x264C, + SMSG_CORPSE_RECLAIM_DELAY = 0x2743, + SMSG_CORPSE_TRANSPORT_QUERY = 0x270C, SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3, - SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27EE, - SMSG_COVENANT_RENOWN_OPEN_NPC = 0x286A, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x286C, - SMSG_CREATE_CHAR = 0x26F5, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x278B, - SMSG_CRITERIA_DELETED = 0x26DC, - SMSG_CRITERIA_UPDATE = 0x26D6, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26B8, - SMSG_CUSTOM_LOAD_SCREEN = 0x25C7, + SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F7, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2875, + SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x289E, + SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x289A, + SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x2896, + SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x2898, + SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x2894, + SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x2899, + SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x2895, + SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x289C, + SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x2897, + SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x289F, + SMSG_CRAFT_ENCHANT_RESULT = 0x289D, + SMSG_CREATE_CHAR = 0x26FB, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x2793, + SMSG_CRITERIA_DELETED = 0x26E1, + SMSG_CRITERIA_UPDATE = 0x26DB, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BD, + SMSG_CUSTOM_LOAD_SCREEN = 0x25CA, SMSG_DAILY_QUESTS_RESET = 0x2A80, - SMSG_DAMAGE_CALC_LOG = 0x27B7, + SMSG_DAMAGE_CALC_LOG = 0x27C0, SMSG_DB_REPLY = 0x290E, - SMSG_DEATH_RELEASE_LOC = 0x26C9, - SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x264D, + SMSG_DEATH_RELEASE_LOC = 0x26CE, + SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2652, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x26F6, + SMSG_DELETE_CHAR = 0x26FC, SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980, - SMSG_DESTROY_ARENA_UNIT = 0x2735, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26ED, + SMSG_DESTROY_ARENA_UNIT = 0x273B, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F3, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258C, - SMSG_DISENCHANT_CREDIT = 0x25A5, + SMSG_DISENCHANT_CREDIT = 0x25A8, SMSG_DISMOUNT_RESULT = 0x257C, SMSG_DISPEL_FAILED = 0x2C30, - SMSG_DISPLAY_GAME_ERROR = 0x259F, + SMSG_DISPLAY_GAME_ERROR = 0x25A1, SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC, - SMSG_DISPLAY_PROMOTION = 0x2644, + SMSG_DISPLAY_PROMOTION = 0x2649, SMSG_DISPLAY_QUEST_POPUP = 0x2A9E, - SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2870, - SMSG_DISPLAY_TOAST = 0x261C, - SMSG_DISPLAY_WORLD_TEXT = 0x27DF, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25DA, + SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2879, + SMSG_DISPLAY_TOAST = 0x2621, + SMSG_DISPLAY_WORLD_TEXT = 0x27E8, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25DF, SMSG_DROP_NEW_CONNECTION = 0x304C, SMSG_DUEL_ARRANGED = 0x293C, SMSG_DUEL_COMPLETE = 0x2940, @@ -1150,66 +1197,68 @@ enum OpcodeServer : uint16 SMSG_DUEL_OUT_OF_BOUNDS = 0x293D, SMSG_DUEL_REQUESTED = 0x293B, SMSG_DUEL_WINNER = 0x2941, - SMSG_DURABILITY_DAMAGE_DEATH = 0x2739, - SMSG_EMOTE = 0x27B8, - SMSG_ENABLE_BARBER_SHOP = 0x26B3, - SMSG_ENCHANTMENT_LOG = 0x2707, - SMSG_ENCOUNTER_END = 0x2771, - SMSG_ENCOUNTER_START = 0x2770, - SMSG_END_LIGHTNING_STORM = 0x26A0, + SMSG_DURABILITY_DAMAGE_DEATH = 0x273F, + SMSG_EMOTE = 0x27C1, + SMSG_ENABLE_BARBER_SHOP = 0x26B8, + SMSG_ENCHANTMENT_LOG = 0x270D, + SMSG_ENCOUNTER_END = 0x2777, + SMSG_ENCOUNTER_START = 0x2776, + SMSG_END_LIGHTNING_STORM = 0x26A5, + SMSG_ENSURE_WORLD_LOADED = 0x2881, SMSG_ENTER_ENCRYPTED_MODE = 0x3049, SMSG_ENUM_CHARACTERS_RESULT = 0x2583, - SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27E4, + SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27ED, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21, - SMSG_EQUIPMENT_SET_ID = 0x26A9, + SMSG_EQUIPMENT_SET_ID = 0x26AE, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x2752, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x2869, - SMSG_FACTION_BONUS_INFO = 0x2718, + SMSG_EXPLORATION_EXPERIENCE = 0x2758, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x2872, + SMSG_FACTION_BONUS_INFO = 0x271E, SMSG_FAILED_PLAYER_CONDITION = 0x2FFA, - SMSG_FAILED_QUEST_TURN_IN = 0x2801, - SMSG_FEATURE_SYSTEM_STATUS = 0x25BB, - SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25BC, - SMSG_FEIGN_DEATH_RESISTED = 0x2738, - SMSG_FISH_ESCAPED = 0x26C6, - SMSG_FISH_NOT_HOOKED = 0x26C5, + SMSG_FAILED_QUEST_TURN_IN = 0x280B, + SMSG_FEATURE_SYSTEM_STATUS = 0x25BE, + SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25BF, + SMSG_FEIGN_DEATH_RESISTED = 0x273E, + SMSG_FISH_ESCAPED = 0x26CB, + SMSG_FISH_NOT_HOOKED = 0x26CA, SMSG_FLIGHT_SPLINE_SYNC = 0x2E2B, - SMSG_FORCED_DEATH_UPDATE = 0x26CA, - SMSG_FORCE_ANIM = 0x2744, - SMSG_FORCE_ANIMATIONS = 0x2745, - SMSG_FORCE_OBJECT_RELINK = 0x2643, - SMSG_FRIEND_STATUS = 0x277A, - SMSG_GAIN_MAW_POWER = 0x27D3, - SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25BF, - SMSG_GAME_OBJECT_BASE = 0x2819, - SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C0, - SMSG_GAME_OBJECT_DESPAWN = 0x25C1, - SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B, - SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A, - SMSG_GAME_OBJECT_RESET_STATE = 0x2712, - SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27F4, - SMSG_GAME_OBJECT_UI_LINK = 0x270E, - SMSG_GAME_SPEED_SET = 0x2679, - SMSG_GAME_TIME_SET = 0x2700, - SMSG_GAME_TIME_UPDATE = 0x26FF, + SMSG_FORCED_DEATH_UPDATE = 0x26CF, + SMSG_FORCE_ANIM = 0x274A, + SMSG_FORCE_ANIMATIONS = 0x274B, + SMSG_FORCE_OBJECT_RELINK = 0x2648, + SMSG_FRIEND_STATUS = 0x2780, + SMSG_GAIN_MAW_POWER = 0x27DC, + SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C2, + SMSG_GAME_OBJECT_BASE = 0x2822, + SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2885, + SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C3, + SMSG_GAME_OBJECT_DESPAWN = 0x25C4, + SMSG_GAME_OBJECT_INTERACTION = 0x2884, + SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4E, + SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4D, + SMSG_GAME_OBJECT_RESET_STATE = 0x2718, + SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27FE, + SMSG_GAME_SPEED_SET = 0x267E, + SMSG_GAME_TIME_SET = 0x2706, + SMSG_GAME_TIME_UPDATE = 0x2705, SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982, - SMSG_GARRISON_ADD_EVENT = 0x29A5, + SMSG_GARRISON_ADD_EVENT = 0x29A6, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974, SMSG_GARRISON_ADD_MISSION_RESULT = 0x2978, - SMSG_GARRISON_ADD_SPEC_GROUPS = 0x29A8, - SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES = 0x29AC, + SMSG_GARRISON_ADD_SPEC_GROUPS = 0x29A9, + SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES = 0x29AD, SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x298A, - SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT = 0x29AE, + SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT = 0x29AF, SMSG_GARRISON_BUILDING_ACTIVATED = 0x2969, SMSG_GARRISON_BUILDING_REMOVED = 0x2962, SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x2964, SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT = 0x297B, - SMSG_GARRISON_CLEAR_COLLECTION = 0x29A4, - SMSG_GARRISON_CLEAR_EVENT_LIST = 0x29A7, - SMSG_GARRISON_CLEAR_SPEC_GROUPS = 0x29A9, - SMSG_GARRISON_COLLECTION_REMOVE_ENTRY = 0x29A3, - SMSG_GARRISON_COLLECTION_UPDATE_ENTRY = 0x29A2, - SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT = 0x299A, + SMSG_GARRISON_CLEAR_COLLECTION = 0x29A5, + SMSG_GARRISON_CLEAR_EVENT_LIST = 0x29A8, + SMSG_GARRISON_CLEAR_SPEC_GROUPS = 0x29AA, + SMSG_GARRISON_COLLECTION_REMOVE_ENTRY = 0x29A4, + SMSG_GARRISON_COLLECTION_UPDATE_ENTRY = 0x29A3, + SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT = 0x299B, SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x297A, SMSG_GARRISON_CREATE_RESULT = 0x296A, SMSG_GARRISON_DELETE_MISSION_RESULT = 0x2981, @@ -1223,26 +1272,23 @@ enum OpcodeServer : uint16 SMSG_GARRISON_GENERATE_FOLLOWERS_RESULT = 0x2991, SMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO_RESULT = 0x2973, SMSG_GARRISON_GET_RECALL_PORTAL_LAST_USED_TIME_RESULT = 0x297C, - SMSG_GARRISON_IS_UPGRADEABLE_RESPONSE = 0x299C, + SMSG_GARRISON_IS_UPGRADEABLE_RESPONSE = 0x299D, SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x2965, SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x2963, - SMSG_GARRISON_LIST_COMPLETED_MISSIONS_CHEAT_RESULT = 0x299D, + SMSG_GARRISON_LIST_COMPLETED_MISSIONS_CHEAT_RESULT = 0x299E, SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x2977, - SMSG_GARRISON_MAP_DATA_RESPONSE = 0x299F, + SMSG_GARRISON_MAP_DATA_RESPONSE = 0x29A0, SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT = 0x297E, - SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE = 0x29A0, + SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE = 0x29A1, SMSG_GARRISON_MISSION_START_CONDITION_UPDATE = 0x2983, - SMSG_GARRISON_OPEN_ARCHITECT = 0x2994, SMSG_GARRISON_OPEN_CRAFTER = 0x2995, - SMSG_GARRISON_OPEN_MISSION_NPC = 0x2996, SMSG_GARRISON_OPEN_RECRUITMENT_NPC = 0x298E, - SMSG_GARRISON_OPEN_TALENT_NPC = 0x298F, SMSG_GARRISON_PLACE_BUILDING_RESULT = 0x2961, SMSG_GARRISON_PLOT_PLACED = 0x295F, SMSG_GARRISON_PLOT_REMOVED = 0x2960, SMSG_GARRISON_RECRUIT_FOLLOWER_RESULT = 0x2992, SMSG_GARRISON_REMOTE_INFO = 0x2968, - SMSG_GARRISON_REMOVE_EVENT = 0x29A6, + SMSG_GARRISON_REMOVE_EVENT = 0x29A7, SMSG_GARRISON_REMOVE_FOLLOWER_ABILITY_RESULT = 0x298D, SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT = 0x298B, SMSG_GARRISON_REMOVE_FOLLOWER_RESULT = 0x2975, @@ -1252,47 +1298,49 @@ enum OpcodeServer : uint16 SMSG_GARRISON_RESET_TALENT_TREE = 0x2971, SMSG_GARRISON_RESET_TALENT_TREE_SOCKET_DATA = 0x2972, SMSG_GARRISON_START_MISSION_RESULT = 0x2979, - SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE = 0x2999, - SMSG_GARRISON_SWITCH_TALENT_TREE_BRANCH = 0x29AA, + SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE = 0x299A, + SMSG_GARRISON_SWITCH_TALENT_TREE_BRANCH = 0x29AB, SMSG_GARRISON_TALENT_COMPLETED = 0x296D, SMSG_GARRISON_TALENT_REMOVED = 0x296E, SMSG_GARRISON_TALENT_REMOVE_SOCKET_DATA = 0x2970, SMSG_GARRISON_TALENT_UPDATE_SOCKET_DATA = 0x296F, - SMSG_GARRISON_TALENT_WORLD_QUEST_UNLOCKS_RESPONSE = 0x29AB, + SMSG_GARRISON_TALENT_WORLD_QUEST_UNLOCKS_RESPONSE = 0x29AC, SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x2966, SMSG_GARRISON_UPDATE_FOLLOWER = 0x2976, - SMSG_GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS = 0x299B, - SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x29AD, + SMSG_GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS = 0x299C, + SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x29AE, SMSG_GARRISON_UPGRADE_RESULT = 0x296B, SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2585, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x280C, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2754, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2816, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275A, SMSG_GET_GARRISON_INFO_RESULT = 0x295E, - SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x278E, - SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27CB, - SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27B5, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x278D, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2789, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x27B4, - SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E0, - SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E1, + SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2796, + SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D4, + SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BE, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2795, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2791, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BD, + SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E9, + SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27EA, SMSG_GM_PLAYER_INFO = 0x3005, SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB, - SMSG_GM_TICKET_CASE_STATUS = 0x269B, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x269A, - SMSG_GOD_MODE = 0x26F0, + SMSG_GM_TICKET_CASE_STATUS = 0x26A0, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x269F, + SMSG_GOD_MODE = 0x26F6, SMSG_GOSSIP_COMPLETE = 0x2A97, SMSG_GOSSIP_MESSAGE = 0x2A98, - SMSG_GOSSIP_POI = 0x2786, + SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA7, + SMSG_GOSSIP_POI = 0x278E, SMSG_GOSSIP_QUEST_UPDATE = 0x2A99, SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6, SMSG_GROUP_ACTION_THROTTLED = 0x2590, - SMSG_GROUP_AUTO_KICK = 0x2784, - SMSG_GROUP_DECLINE = 0x2781, - SMSG_GROUP_DESTROYED = 0x2783, - SMSG_GROUP_NEW_LEADER = 0x2625, - SMSG_GROUP_UNINVITE = 0x2782, + SMSG_GROUP_AUTO_KICK = 0x278B, + SMSG_GROUP_DECLINE = 0x2787, + SMSG_GROUP_DESTROYED = 0x278A, + SMSG_GROUP_NEW_LEADER = 0x262A, + SMSG_GROUP_REQUEST_DECLINE = 0x2788, + SMSG_GROUP_UNINVITE = 0x2789, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1346,60 +1394,59 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26C7, - SMSG_HIGHEST_THREAT_UPDATE = 0x26CF, + SMSG_HEALTH_UPDATE = 0x26CC, + SMSG_HIGHEST_THREAT_UPDATE = 0x26D4, SMSG_HOTFIX_CONNECT = 0x2911, SMSG_HOTFIX_MESSAGE = 0x2910, - SMSG_INITIALIZE_FACTIONS = 0x2717, + SMSG_INITIALIZE_FACTIONS = 0x271D, SMSG_INITIAL_SETUP = 0x2580, - SMSG_INIT_WORLD_STATES = 0x273A, - SMSG_INSPECT_RESULT = 0x2629, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A0, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x279F, - SMSG_INSTANCE_ENCOUNTER_END = 0x27A8, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x279E, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27AA, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27A9, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27A3, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27A2, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27A7, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27AB, - SMSG_INSTANCE_ENCOUNTER_START = 0x27A4, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27A1, - SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27A6, - SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27A5, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26EE, - SMSG_INSTANCE_INFO = 0x262C, - SMSG_INSTANCE_RESET = 0x267E, - SMSG_INSTANCE_RESET_FAILED = 0x267F, - SMSG_INSTANCE_SAVE_CREATED = 0x276F, - SMSG_INTERRUPT_POWER_REGEN = 0x2C59, + SMSG_INIT_WORLD_STATES = 0x2740, + SMSG_INSPECT_RESULT = 0x262E, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A9, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A8, + SMSG_INSTANCE_ENCOUNTER_END = 0x27B1, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A7, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B3, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B2, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27AC, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27AB, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B0, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B4, + SMSG_INSTANCE_ENCOUNTER_START = 0x27AD, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27AA, + SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27AF, + SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AE, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F4, + SMSG_INSTANCE_INFO = 0x2631, + SMSG_INSTANCE_RESET = 0x2683, + SMSG_INSTANCE_RESET_FAILED = 0x2684, + SMSG_INSTANCE_SAVE_CREATED = 0x2775, + SMSG_INTERRUPT_POWER_REGEN = 0x2C5C, SMSG_INVALIDATE_PAGE_TEXT = 0x2918, SMSG_INVALIDATE_PLAYER = 0x2FFF, - SMSG_INVALID_PROMOTION_CODE = 0x2746, + SMSG_INVALID_PROMOTION_CODE = 0x274C, SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5, - SMSG_INVENTORY_FIXUP_COMPLETE = 0x2803, - SMSG_INVENTORY_FULL_OVERFLOW = 0x2814, - SMSG_ISLANDS_MISSION_NPC = 0x27EA, - SMSG_ISLAND_AZERITE_GAIN = 0x274F, - SMSG_ISLAND_COMPLETE = 0x2750, + SMSG_INVENTORY_FIXUP_COMPLETE = 0x280D, + SMSG_INVENTORY_FULL_OVERFLOW = 0x281E, + SMSG_ISLAND_AZERITE_GAIN = 0x2755, + SMSG_ISLAND_COMPLETE = 0x2756, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84, - SMSG_ITEM_CHANGED = 0x26DF, - SMSG_ITEM_COOLDOWN = 0x27B6, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2748, - SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259E, - SMSG_ITEM_INTERACTION_COMPLETE = 0x2861, - SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259C, - SMSG_ITEM_PUSH_RESULT = 0x261B, - SMSG_ITEM_TIME_UPDATE = 0x2747, - SMSG_KICK_REASON = 0x2681, - SMSG_LATENCY_REPORT_PING = 0x2873, - SMSG_LEARNED_SPELLS = 0x2C4D, - SMSG_LEARN_PVP_TALENT_FAILED = 0x25CE, - SMSG_LEARN_TALENT_FAILED = 0x25CD, - SMSG_LEGACY_LOOT_RULES = 0x281A, - SMSG_LEVEL_LINKING_RESULT = 0x2847, - SMSG_LEVEL_UP_INFO = 0x26DE, + SMSG_ITEM_CHANGED = 0x26E5, + SMSG_ITEM_COOLDOWN = 0x27BF, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x274E, + SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25A0, + SMSG_ITEM_INTERACTION_COMPLETE = 0x286A, + SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259E, + SMSG_ITEM_PUSH_RESULT = 0x2620, + SMSG_ITEM_TIME_UPDATE = 0x274D, + SMSG_KICK_REASON = 0x2686, + SMSG_LATENCY_REPORT_PING = 0x287C, + SMSG_LEARNED_SPELLS = 0x2C50, + SMSG_LEARN_PVP_TALENT_FAILED = 0x25D3, + SMSG_LEARN_TALENT_FAILED = 0x25D2, + SMSG_LEGACY_LOOT_RULES = 0x2823, + SMSG_LEVEL_LINKING_RESULT = 0x2850, + SMSG_LEVEL_UP_INFO = 0x26E3, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B, @@ -1427,45 +1474,47 @@ enum OpcodeServer : uint16 SMSG_LFG_SLOT_INVALID = 0x2A30, SMSG_LFG_TELEPORT_DENIED = 0x2A32, SMSG_LFG_UPDATE_STATUS = 0x2A24, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2761, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2760, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2755, - SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2762, - SMSG_LOAD_CUF_PROFILES = 0x25B8, - SMSG_LOAD_EQUIPMENT_SET = 0x2702, - SMSG_LOGIN_SET_TIME_SPEED = 0x2701, - SMSG_LOGIN_VERIFY_WORLD = 0x2599, - SMSG_LOGOUT_CANCEL_ACK = 0x267D, - SMSG_LOGOUT_COMPLETE = 0x267C, - SMSG_LOGOUT_RESPONSE = 0x267B, - SMSG_LOG_XP_GAIN = 0x26DA, - SMSG_LOOT_ALL_PASSED = 0x2619, - SMSG_LOOT_LIST = 0x2734, - SMSG_LOOT_MONEY_NOTIFY = 0x2614, - SMSG_LOOT_RELEASE = 0x2613, - SMSG_LOOT_RELEASE_ALL = 0x2612, - SMSG_LOOT_REMOVED = 0x260E, - SMSG_LOOT_RESPONSE = 0x260D, - SMSG_LOOT_ROLL = 0x2616, - SMSG_LOOT_ROLLS_COMPLETE = 0x2618, - SMSG_LOOT_ROLL_WON = 0x261A, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2668, - SMSG_MAIL_COMMAND_RESULT = 0x2633, - SMSG_MAIL_LIST_RESULT = 0x2749, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x274A, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2767, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2766, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275B, + SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2768, + SMSG_LOAD_CUF_PROFILES = 0x25BB, + SMSG_LOAD_EQUIPMENT_SET = 0x2708, + SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x2889, + SMSG_LOGIN_SET_TIME_SPEED = 0x2707, + SMSG_LOGIN_VERIFY_WORLD = 0x259B, + SMSG_LOGOUT_CANCEL_ACK = 0x2682, + SMSG_LOGOUT_COMPLETE = 0x2681, + SMSG_LOGOUT_RESPONSE = 0x2680, + SMSG_LOG_XP_GAIN = 0x26DF, + SMSG_LOOT_ALL_PASSED = 0x261E, + SMSG_LOOT_LIST = 0x273A, + SMSG_LOOT_MONEY_NOTIFY = 0x2619, + SMSG_LOOT_RELEASE = 0x2618, + SMSG_LOOT_RELEASE_ALL = 0x2617, + SMSG_LOOT_REMOVED = 0x2613, + SMSG_LOOT_RESPONSE = 0x2612, + SMSG_LOOT_ROLL = 0x261B, + SMSG_LOOT_ROLLS_COMPLETE = 0x261D, + SMSG_LOOT_ROLL_WON = 0x261F, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x266D, + SMSG_MAIL_COMMAND_RESULT = 0x2638, + SMSG_MAIL_LIST_RESULT = 0x274F, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2750, SMSG_MAP_OBJECTIVES_INIT = 0x294B, - SMSG_MAP_OBJ_EVENTS = 0x25C2, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2617, - SMSG_MEETING_STONE_FAILED = 0x287C, + SMSG_MAP_OBJ_EVENTS = 0x25C5, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261C, + SMSG_MEETING_STONE_FAILED = 0x288A, SMSG_MESSAGE_BOX = 0x2576, - SMSG_MINIMAP_PING = 0x26C4, + SMSG_MINIMAP_PING = 0x26C9, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, - SMSG_MISSILE_CANCEL = 0x25C3, - SMSG_MODIFY_COOLDOWN = 0x2757, + SMSG_MISSILE_CANCEL = 0x25C6, + SMSG_MODIFY_COOLDOWN = 0x275D, SMSG_MOTD = 0x2BAF, SMSG_MOUNT_RESULT = 0x257B, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x2837, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x2840, + SMSG_MOVE_ADD_IMPULSE = 0x2E32, SMSG_MOVE_APPLY_INERTIA = 0x2E2E, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E15, SMSG_MOVE_DISABLE_COLLISION = 0x2E11, @@ -1483,6 +1532,20 @@ enum OpcodeServer : uint16 SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x2E16, SMSG_MOVE_ROOT = 0x2DF9, SMSG_MOVE_SET_ACTIVE_MOVER = 0x2DD5, + SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x2E3B, + SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x2E36, + SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x2E3C, + SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x2E39, + SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x2E3A, + SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x2E42, + SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x2E38, + SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x2E37, + SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x2E41, + SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x2E3D, + SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x2E3E, + SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x2E40, + SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x2E3F, + SMSG_MOVE_SET_CAN_ADV_FLY = 0x2E34, SMSG_MOVE_SET_CAN_FLY = 0x2E05, SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x2E07, SMSG_MOVE_SET_COLLISION_HEIGHT = 0x2E13, @@ -1534,11 +1597,13 @@ enum OpcodeServer : uint16 SMSG_MOVE_SPLINE_UNSET_HOVER = 0x2E22, SMSG_MOVE_TELEPORT = 0x2E04, SMSG_MOVE_UNROOT = 0x2DFA, + SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x2E35, SMSG_MOVE_UNSET_CAN_FLY = 0x2E06, SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x2E08, SMSG_MOVE_UNSET_HOVERING = 0x2E02, SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x2E0A, SMSG_MOVE_UPDATE = 0x2DE0, + SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x2E33, SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x2E30, SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE = 0x2DE4, SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x2DDF, @@ -1556,82 +1621,79 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_TELEPORT = 0x2DE1, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DDD, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DD8, - SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27D0, - SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27CF, - SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2605, - SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x2607, - SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260A, - SMSG_MYTHIC_PLUS_SEASON_DATA = 0x2606, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25D5, - SMSG_NEW_TAXI_PATH = 0x2676, + SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27D9, + SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D8, + SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x260A, + SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260C, + SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260F, + SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260B, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DA, + SMSG_NEW_TAXI_PATH = 0x267B, SMSG_NEW_WORLD = 0x2598, - SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A2, - SMSG_NOTIFY_MONEY = 0x259B, - SMSG_NOTIFY_RECEIVED_MAIL = 0x2634, - SMSG_OFFER_PETITION_ERROR = 0x26AD, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26DB, + SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C46, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A7, + SMSG_NOTIFY_MONEY = 0x259D, + SMSG_NOTIFY_RECEIVED_MAIL = 0x2639, + SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2883, + SMSG_OFFER_PETITION_ERROR = 0x26B2, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E0, SMSG_ON_MONSTER_MOVE = 0x2DD4, - SMSG_OPEN_ANIMA_DIVERSION_UI = 0x270F, - SMSG_OPEN_ARTIFACT_FORGE = 0x2792, + SMSG_OPEN_ARTIFACT_FORGE = 0x279A, SMSG_OPEN_CONTAINER = 0x2DA6, - SMSG_OPEN_HEART_FORGE = 0x2817, - SMSG_OPEN_ITEM_FORGE = 0x2790, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x2788, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x278A, - SMSG_OVERRIDE_LIGHT = 0x26B2, - SMSG_PAGE_TEXT = 0x270D, - SMSG_PARTY_COMMAND_RESULT = 0x2785, - SMSG_PARTY_INVITE = 0x25B9, - SMSG_PARTY_KILL_LOG = 0x274D, - SMSG_PARTY_MEMBER_FULL_STATE = 0x274C, - SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x274B, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x2867, - SMSG_PARTY_UPDATE = 0x25EE, - SMSG_PAST_TIME_EVENTS = 0x25BE, - SMSG_PAUSE_MIRROR_TIMER = 0x2704, - SMSG_PENDING_RAID_LOCK = 0x26EC, - SMSG_PETITION_ALREADY_SIGNED = 0x25A1, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2792, + SMSG_OVERRIDE_LIGHT = 0x26B7, + SMSG_PAGE_TEXT = 0x2713, + SMSG_PARTY_COMMAND_RESULT = 0x278C, + SMSG_PARTY_INVITE = 0x25BC, + SMSG_PARTY_KILL_LOG = 0x2753, + SMSG_PARTY_MEMBER_FULL_STATE = 0x2752, + SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2751, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x2870, + SMSG_PARTY_UPDATE = 0x25F3, + SMSG_PAST_TIME_EVENTS = 0x25C1, + SMSG_PAUSE_MIRROR_TIMER = 0x270A, + SMSG_PENDING_RAID_LOCK = 0x26F2, + SMSG_PETITION_ALREADY_SIGNED = 0x25A3, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA, - SMSG_PETITION_SHOW_LIST = 0x26B5, - SMSG_PETITION_SHOW_SIGNATURES = 0x26B6, - SMSG_PETITION_SIGN_RESULTS = 0x273F, - SMSG_PET_ACTION_FEEDBACK = 0x273C, - SMSG_PET_ACTION_SOUND = 0x2698, + SMSG_PETITION_SHOW_LIST = 0x26BA, + SMSG_PETITION_SHOW_SIGNATURES = 0x26BB, + SMSG_PETITION_SIGN_RESULTS = 0x2745, + SMSG_PET_ACTION_FEEDBACK = 0x2742, + SMSG_PET_ACTION_SOUND = 0x269D, SMSG_PET_ADDED = 0x2595, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x25FC, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x266D, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F5, - SMSG_PET_BATTLE_FINAL_ROUND = 0x25FA, - SMSG_PET_BATTLE_FINISHED = 0x25FB, - SMSG_PET_BATTLE_FIRST_ROUND = 0x25F7, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25F6, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x25FD, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F4, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2631, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2632, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25F9, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F3, - SMSG_PET_BATTLE_ROUND_RESULT = 0x25F8, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x25E5, - SMSG_PET_CAST_FAILED = 0x2C58, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2601, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2672, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25FA, + SMSG_PET_BATTLE_FINAL_ROUND = 0x25FF, + SMSG_PET_BATTLE_FINISHED = 0x2600, + SMSG_PET_BATTLE_FIRST_ROUND = 0x25FC, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25FB, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2602, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F9, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2636, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x2637, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FE, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F8, + SMSG_PET_BATTLE_ROUND_RESULT = 0x25FD, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EA, + SMSG_PET_CAST_FAILED = 0x2C5B, SMSG_PET_CLEAR_SPELLS = 0x2C24, - SMSG_PET_DISMISS_SOUND = 0x2699, - SMSG_PET_GOD_MODE = 0x2673, - SMSG_PET_GUIDS = 0x26F8, - SMSG_PET_LEARNED_SPELLS = 0x2C4F, + SMSG_PET_DISMISS_SOUND = 0x269E, + SMSG_PET_GOD_MODE = 0x2678, + SMSG_PET_GUIDS = 0x26FE, + SMSG_PET_LEARNED_SPELLS = 0x2C52, SMSG_PET_MODE = 0x258B, - SMSG_PET_NAME_INVALID = 0x26BA, + SMSG_PET_NAME_INVALID = 0x26BF, SMSG_PET_NEWLY_TAMED = 0x2589, SMSG_PET_SLOT_UPDATED = 0x258A, SMSG_PET_SPELLS_MESSAGE = 0x2C25, SMSG_PET_STABLE_LIST = 0x2596, SMSG_PET_STABLE_RESULT = 0x2597, - SMSG_PET_TAME_FAILURE = 0x26AA, - SMSG_PET_UNLEARNED_SPELLS = 0x2C50, + SMSG_PET_TAME_FAILURE = 0x26AF, + SMSG_PET_UNLEARNED_SPELLS = 0x2C53, SMSG_PHASE_SHIFT_CHANGE = 0x2578, - SMSG_PLAYED_TIME = 0x26CB, + SMSG_PLAYED_TIME = 0x26D0, SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3014, SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3013, SMSG_PLAYER_BONUS_ROLL_FAILED = 0x3016, @@ -1642,40 +1704,42 @@ enum OpcodeServer : uint16 SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x3009, SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x300E, SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F9, + SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x301E, SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x3019, SMSG_PLAYER_SKINNED = 0x3006, - SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x3007, SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300D, SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300C, - SMSG_PLAY_MUSIC = 0x275C, - SMSG_PLAY_OBJECT_SOUND = 0x275D, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2724, - SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47, - SMSG_PLAY_SCENE = 0x262E, - SMSG_PLAY_SOUND = 0x275B, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x275E, - SMSG_PLAY_SPELL_VISUAL = 0x2C45, - SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49, - SMSG_PLAY_TIME_WARNING = 0x26F2, + SMSG_PLAY_MUSIC = 0x2762, + SMSG_PLAY_OBJECT_SOUND = 0x2763, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272A, + SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C4A, + SMSG_PLAY_SCENE = 0x2633, + SMSG_PLAY_SOUND = 0x2761, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x2764, + SMSG_PLAY_SPELL_VISUAL = 0x2C48, + SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C4C, + SMSG_PLAY_TIME_WARNING = 0x26F8, SMSG_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26C8, + SMSG_POWER_UPDATE = 0x26CD, SMSG_PRELOAD_CHILD_MAP = 0x2579, - SMSG_PREPOPULATE_NAME_CACHE = 0x283A, - SMSG_PRE_RESSURECT = 0x275A, - SMSG_PRINT_NOTIFICATION = 0x25C6, - SMSG_PROC_RESIST = 0x274E, - SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51, + SMSG_PRELOAD_WORLD = 0x2599, + SMSG_PREPOPULATE_NAME_CACHE = 0x2843, + SMSG_PRE_RESSURECT = 0x2760, + SMSG_PRINT_NOTIFICATION = 0x25C9, + SMSG_PROC_RESIST = 0x2754, + SMSG_PROFESSION_GOSSIP = 0x27F9, + SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C54, SMSG_PVP_CREDIT = 0x2945, SMSG_PVP_MATCH_COMPLETE = 0x294F, SMSG_PVP_MATCH_INITIALIZE = 0x2950, SMSG_PVP_MATCH_START = 0x294E, SMSG_PVP_MATCH_STATISTICS = 0x2932, SMSG_PVP_OPTIONS_ENABLED = 0x2934, - SMSG_PVP_TIER_RECORD = 0x2874, + SMSG_PVP_TIER_RECORD = 0x287D, SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x291A, SMSG_QUERY_CREATURE_RESPONSE = 0x2914, SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2915, - SMSG_QUERY_GARRISON_PET_NAME_RESPONSE = 0x299E, + SMSG_QUERY_GARRISON_PET_NAME_RESPONSE = 0x299F, SMSG_QUERY_GUILD_FOLLOW_INFO_RESPONSE = 0x29E7, SMSG_QUERY_GUILD_INFO_RESPONSE = 0x29E5, SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x291E, @@ -1687,7 +1751,7 @@ enum OpcodeServer : uint16 SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3002, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A96, SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x29E6, - SMSG_QUERY_TIME_RESPONSE = 0x26D9, + SMSG_QUERY_TIME_RESPONSE = 0x26DE, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F, SMSG_QUEST_FORCE_REMOVED = 0x2A9C, @@ -1700,255 +1764,261 @@ enum OpcodeServer : uint16 SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x2A93, SMSG_QUEST_GIVER_STATUS = 0x2A9B, SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x2A91, + SMSG_QUEST_ITEM_USABILITY_RESPONSE = 0x2A82, SMSG_QUEST_LOG_FULL = 0x2A87, SMSG_QUEST_NON_LOG_UPDATE_COMPLETE = 0x2A88, SMSG_QUEST_POI_QUERY_RESPONSE = 0x2A9D, SMSG_QUEST_POI_UPDATE_RESPONSE = 0x2A9F, SMSG_QUEST_PUSH_RESULT = 0x2A90, - SMSG_QUEST_SESSION_INFO_RESPONSE = 0x285D, - SMSG_QUEST_SESSION_READY_CHECK = 0x284B, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x284C, - SMSG_QUEST_SESSION_RESULT = 0x284A, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2866, + SMSG_QUEST_SESSION_READY_CHECK = 0x2854, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2855, + SMSG_QUEST_SESSION_RESULT = 0x2853, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x2A8C, SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x2A8D, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x2A8E, SMSG_QUEST_UPDATE_COMPLETE = 0x2A89, SMSG_QUEST_UPDATE_FAILED = 0x2A8A, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8B, - SMSG_QUEUE_SUMMARY_UPDATE = 0x2802, - SMSG_RAF_ACCOUNT_INFO = 0x2848, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x2859, - SMSG_RAID_DIFFICULTY_SET = 0x279B, - SMSG_RAID_GROUP_ONLY = 0x279D, + SMSG_QUEUE_SUMMARY_UPDATE = 0x280C, + SMSG_RAF_ACCOUNT_INFO = 0x2851, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x2862, + SMSG_RAID_DIFFICULTY_SET = 0x27A4, + SMSG_RAID_GROUP_ONLY = 0x27A6, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, - SMSG_RAID_MARKERS_CHANGED = 0x25A2, - SMSG_RANDOM_ROLL = 0x2628, + SMSG_RAID_MARKERS_CHANGED = 0x25A4, + SMSG_RANDOM_ROLL = 0x262D, SMSG_RATED_PVP_INFO = 0x2931, - SMSG_READY_CHECK_COMPLETED = 0x25F2, - SMSG_READY_CHECK_RESPONSE = 0x25F1, - SMSG_READY_CHECK_STARTED = 0x25F0, - SMSG_READ_ITEM_RESULT_FAILED = 0x2797, - SMSG_READ_ITEM_RESULT_OK = 0x278F, - SMSG_REALM_LOOKUP_INFO = 0x27BB, + SMSG_READY_CHECK_COMPLETED = 0x25F7, + SMSG_READY_CHECK_RESPONSE = 0x25F6, + SMSG_READY_CHECK_STARTED = 0x25F5, + SMSG_READ_ITEM_RESULT_FAILED = 0x27A0, + SMSG_READ_ITEM_RESULT_OK = 0x2797, + SMSG_REALM_LOOKUP_INFO = 0x27C4, SMSG_REALM_QUERY_RESPONSE = 0x2913, - SMSG_REATTACH_RESURRECT = 0x273E, - SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26B7, - SMSG_REFRESH_COMPONENT = 0x2649, + SMSG_REATTACH_RESURRECT = 0x2744, + SMSG_RECRAFT_ITEM_RESULT = 0x289B, + SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BC, + SMSG_REFRESH_COMPONENT = 0x264E, SMSG_REFRESH_SPELL_HISTORY = 0x2C2C, - SMSG_REMOVE_ITEM_PASSIVE = 0x25A9, - SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C52, - SMSG_REPLACE_TROPHY_RESPONSE = 0x27B3, + SMSG_REMOVE_ITEM_PASSIVE = 0x25AC, + SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C55, + SMSG_REPLACE_TROPHY_RESPONSE = 0x27BC, SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x2591, SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2935, SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2936, SMSG_RESEARCH_COMPLETE = 0x2587, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26AE, + SMSG_RESET_FAILED_NOTIFY = 0x26B3, SMSG_RESET_QUEST_POI = 0x2AA0, SMSG_RESET_RANGED_COMBAT_TIMER = 0x2944, SMSG_RESET_WEEKLY_CURRENCY = 0x2575, - SMSG_RESPEC_WIPE_CONFIRM = 0x260B, + SMSG_RESPEC_WIPE_CONFIRM = 0x2610, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572, - SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C60, - SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B5, - SMSG_RESUME_CAST = 0x2C3B, - SMSG_RESUME_CAST_BAR = 0x2C3E, + SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C64, + SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B8, + SMSG_RESUME_CAST = 0x2C3E, + SMSG_RESUME_CAST_BAR = 0x2C41, SMSG_RESUME_COMMS = 0x304B, - SMSG_RESUME_TOKEN = 0x25A7, + SMSG_RESUME_TOKEN = 0x25AA, SMSG_RESURRECT_REQUEST = 0x257E, - SMSG_RESYNC_RUNES = 0x2C5F, - SMSG_RETURN_APPLICANT_LIST = 0x283E, - SMSG_RETURN_RECRUITING_CLUBS = 0x283D, + SMSG_RESYNC_RUNES = 0x2C62, + SMSG_RETURNING_PLAYER_PROMPT = 0x279F, + SMSG_RETURN_APPLICANT_LIST = 0x2847, + SMSG_RETURN_RECRUITING_CLUBS = 0x2846, SMSG_ROLE_CHANGED_INFORM = 0x258D, SMSG_ROLE_CHOSEN = 0x2A39, SMSG_ROLE_POLL_INFORM = 0x258E, - SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27EF, - SMSG_RUNE_REGEN_DEBUG = 0x25B2, - SMSG_SCENARIO_COMPLETED = 0x27DD, - SMSG_SCENARIO_POIS = 0x262B, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x2624, - SMSG_SCENARIO_SHOW_CRITERIA = 0x27F2, - SMSG_SCENARIO_STATE = 0x2623, - SMSG_SCENARIO_UI_UPDATE = 0x27F1, - SMSG_SCENARIO_VACATE = 0x2798, - SMSG_SCENE_OBJECT_EVENT = 0x25DB, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E0, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E1, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25DD, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25DC, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25DF, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25DE, - SMSG_SCRIPT_CAST = 0x2C56, - SMSG_SEASON_INFO = 0x25BD, - SMSG_SELL_RESPONSE = 0x26BB, - SMSG_SEND_ITEM_PASSIVES = 0x25AA, + SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F8, + SMSG_RUNE_REGEN_DEBUG = 0x25B5, + SMSG_SCENARIO_COMPLETED = 0x27E6, + SMSG_SCENARIO_POIS = 0x2630, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x2629, + SMSG_SCENARIO_SHOW_CRITERIA = 0x27FC, + SMSG_SCENARIO_STATE = 0x2628, + SMSG_SCENARIO_UI_UPDATE = 0x27FB, + SMSG_SCENARIO_VACATE = 0x27A1, + SMSG_SCENE_OBJECT_EVENT = 0x25E0, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E5, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E6, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25E2, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25E1, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E4, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E3, + SMSG_SCRIPT_CAST = 0x2C59, + SMSG_SEASON_INFO = 0x25C0, + SMSG_SELL_RESPONSE = 0x26C0, + SMSG_SEND_ITEM_PASSIVES = 0x25AD, SMSG_SEND_KNOWN_SPELLS = 0x2C2A, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x2626, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2627, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262B, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262C, SMSG_SEND_SPELL_CHARGES = 0x2C2D, SMSG_SEND_SPELL_HISTORY = 0x2C2B, SMSG_SEND_UNLEARN_SPELLS = 0x2C2E, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x2646, - SMSG_SERVER_TIME = 0x267A, - SMSG_SERVER_TIME_OFFSET = 0x2708, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264B, + SMSG_SERVER_TIME = 0x267F, + SMSG_SERVER_TIME_OFFSET = 0x270E, SMSG_SETUP_CURRENCY = 0x2573, SMSG_SETUP_RESEARCH_HISTORY = 0x2586, - SMSG_SET_AI_ANIM_KIT = 0x2723, - SMSG_SET_ALL_TASK_PROGRESS = 0x277F, - SMSG_SET_ANIM_TIER = 0x2727, - SMSG_SET_CHR_UPGRADE_TIER = 0x25D8, + SMSG_SET_AI_ANIM_KIT = 0x2729, + SMSG_SET_ALL_TASK_PROGRESS = 0x2785, + SMSG_SET_ANIM_TIER = 0x272D, + SMSG_SET_CHR_UPGRADE_TIER = 0x25DD, SMSG_SET_CURRENCY = 0x2574, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x269C, - SMSG_SET_FACTION_AT_WAR = 0x26F4, - SMSG_SET_FACTION_NOT_VISIBLE = 0x271E, - SMSG_SET_FACTION_STANDING = 0x271F, - SMSG_SET_FACTION_VISIBLE = 0x271D, - SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36, - SMSG_SET_FORCED_REACTIONS = 0x2711, - SMSG_SET_ITEM_PURCHASE_DATA = 0x259D, - SMSG_SET_LOOT_METHOD_FAILED = 0x27C1, - SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25A0, - SMSG_SET_MELEE_ANIM_KIT = 0x2726, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x2725, - SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37, - SMSG_SET_PET_SPECIALIZATION = 0x261D, + SMSG_SET_DUNGEON_DIFFICULTY = 0x26A1, + SMSG_SET_FACTION_AT_WAR = 0x26FA, + SMSG_SET_FACTION_NOT_VISIBLE = 0x2724, + SMSG_SET_FACTION_STANDING = 0x2725, + SMSG_SET_FACTION_VISIBLE = 0x2723, + SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C39, + SMSG_SET_FORCED_REACTIONS = 0x2717, + SMSG_SET_ITEM_PURCHASE_DATA = 0x259F, + SMSG_SET_LOOT_METHOD_FAILED = 0x27CA, + SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25A2, + SMSG_SET_MELEE_ANIM_KIT = 0x272C, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x272B, + SMSG_SET_PCT_SPELL_MODIFIER = 0x2C3A, + SMSG_SET_PET_SPECIALIZATION = 0x2622, SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3003, - SMSG_SET_PLAY_HOVER_ANIM = 0x25B6, - SMSG_SET_PROFICIENCY = 0x2728, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2851, - SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2997, + SMSG_SET_PLAY_HOVER_ANIM = 0x25B9, + SMSG_SET_PROFICIENCY = 0x272E, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x285A, + SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2998, SMSG_SET_SPELL_CHARGES = 0x2C29, - SMSG_SET_TASK_COMPLETE = 0x2780, - SMSG_SET_TIME_ZONE_INFORMATION = 0x266F, - SMSG_SET_VEHICLE_REC_ID = 0x26EB, - SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2878, - SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2998, - SMSG_SHOW_BANK = 0x2677, - SMSG_SHOW_MAILBOX = 0x2799, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D4, + SMSG_SET_TASK_COMPLETE = 0x2786, + SMSG_SET_TIME_ZONE_INFORMATION = 0x2674, + SMSG_SET_VEHICLE_REC_ID = 0x26F1, + SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2882, + SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2999, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D9, SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95, - SMSG_SHOW_TAXI_NODES = 0x26C3, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2763, - SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x287D, - SMSG_SOCKET_GEMS_FAILURE = 0x271B, - SMSG_SOCKET_GEMS_SUCCESS = 0x271A, - SMSG_SPECIAL_MOUNT_ANIM = 0x2697, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x270C, + SMSG_SHOW_TAXI_NODES = 0x26C8, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2769, + SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x288B, + SMSG_SOCKET_GEMS_FAILURE = 0x2721, + SMSG_SOCKET_GEMS_SUCCESS = 0x2720, + SMSG_SPECIAL_MOUNT_ANIM = 0x269C, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2712, SMSG_SPELL_ABSORB_LOG = 0x2C1F, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17, SMSG_SPELL_CHANNEL_START = 0x2C34, SMSG_SPELL_CHANNEL_UPDATE = 0x2C35, SMSG_SPELL_COOLDOWN = 0x2C15, SMSG_SPELL_DAMAGE_SHIELD = 0x2C31, - SMSG_SPELL_DELAYED = 0x2C3F, + SMSG_SPELL_DELAYED = 0x2C42, SMSG_SPELL_DISPELL_LOG = 0x2C1A, + SMSG_SPELL_EMPOWER_SET_STAGE = 0x2C38, + SMSG_SPELL_EMPOWER_START = 0x2C36, + SMSG_SPELL_EMPOWER_UPDATE = 0x2C37, SMSG_SPELL_ENERGIZE_LOG = 0x2C1C, - SMSG_SPELL_EXECUTE_LOG = 0x2C40, - SMSG_SPELL_FAILED_OTHER = 0x2C55, - SMSG_SPELL_FAILURE = 0x2C53, - SMSG_SPELL_FAILURE_MESSAGE = 0x2C5A, - SMSG_SPELL_GO = 0x2C39, + SMSG_SPELL_EXECUTE_LOG = 0x2C43, + SMSG_SPELL_FAILED_OTHER = 0x2C58, + SMSG_SPELL_FAILURE = 0x2C56, + SMSG_SPELL_FAILURE_MESSAGE = 0x2C5D, + SMSG_SPELL_GO = 0x2C3C, SMSG_SPELL_HEAL_ABSORB_LOG = 0x2C1E, SMSG_SPELL_HEAL_LOG = 0x2C1D, SMSG_SPELL_INSTAKILL_LOG = 0x2C33, SMSG_SPELL_INTERRUPT_LOG = 0x2C20, - SMSG_SPELL_MISS_LOG = 0x2C41, + SMSG_SPELL_MISS_LOG = 0x2C44, SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x2C32, SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x2C2F, SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C1B, - SMSG_SPELL_PREPARE = 0x2C38, - SMSG_SPELL_START = 0x2C3A, - SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25C8, - SMSG_SPIRIT_HEALER_CONFIRM = 0x2709, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2863, - SMSG_STAND_STATE_UPDATE = 0x2710, - SMSG_START_ELAPSED_TIMER = 0x25FE, - SMSG_START_ELAPSED_TIMERS = 0x2600, - SMSG_START_LIGHTNING_STORM = 0x269F, - SMSG_START_LOOT_ROLL = 0x2615, - SMSG_START_MIRROR_TIMER = 0x2703, - SMSG_START_TIMER = 0x25A4, - SMSG_STOP_ELAPSED_TIMER = 0x25FF, - SMSG_STOP_MIRROR_TIMER = 0x2705, - SMSG_STOP_SPEAKERBOT_SOUND = 0x275F, - SMSG_STREAMING_MOVIES = 0x25A3, - SMSG_SUMMON_CANCEL = 0x26A8, + SMSG_SPELL_PREPARE = 0x2C3B, + SMSG_SPELL_START = 0x2C3D, + SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CB, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x286C, + SMSG_STAND_STATE_UPDATE = 0x2716, + SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D1, + SMSG_START_ELAPSED_TIMER = 0x2603, + SMSG_START_ELAPSED_TIMERS = 0x2605, + SMSG_START_LIGHTNING_STORM = 0x26A4, + SMSG_START_LOOT_ROLL = 0x261A, + SMSG_START_MIRROR_TIMER = 0x2709, + SMSG_START_TIMER = 0x25A6, + SMSG_STOP_ELAPSED_TIMER = 0x2604, + SMSG_STOP_MIRROR_TIMER = 0x270B, + SMSG_STOP_SPEAKERBOT_SOUND = 0x2765, + SMSG_STOP_TIMER = 0x25A7, + SMSG_STREAMING_MOVIES = 0x25A5, + SMSG_SUGGEST_INVITE_INFORM = 0x278D, + SMSG_SUMMON_CANCEL = 0x26AD, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258F, - SMSG_SUMMON_REQUEST = 0x2715, - SMSG_SUPERCEDED_SPELLS = 0x2C4C, + SMSG_SUMMON_REQUEST = 0x271B, + SMSG_SUPERCEDED_SPELLS = 0x2C4F, SMSG_SUSPEND_COMMS = 0x304A, - SMSG_SUSPEND_TOKEN = 0x25A6, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x285B, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x270B, - SMSG_TAXI_NODE_STATUS = 0x2674, - SMSG_TEXT_EMOTE = 0x2672, - SMSG_THREAT_CLEAR = 0x26D2, - SMSG_THREAT_REMOVE = 0x26D1, - SMSG_THREAT_UPDATE = 0x26D0, + SMSG_SUSPEND_TOKEN = 0x25A9, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x2864, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2711, + SMSG_TAXI_NODE_STATUS = 0x2679, + SMSG_TEXT_EMOTE = 0x2677, + SMSG_THREAT_CLEAR = 0x26D7, + SMSG_THREAT_REMOVE = 0x26D6, + SMSG_THREAT_UPDATE = 0x26D5, SMSG_TIME_ADJUSTMENT = 0x2DD3, SMSG_TIME_SYNC_REQUEST = 0x2DD2, - SMSG_TITLE_EARNED = 0x26CD, - SMSG_TITLE_LOST = 0x26CE, - SMSG_TOTEM_CREATED = 0x26BE, - SMSG_TOTEM_DURATION_CHANGED = 0x26BF, - SMSG_TOTEM_MOVED = 0x26C0, + SMSG_TITLE_EARNED = 0x26D2, + SMSG_TITLE_LOST = 0x26D3, + SMSG_TOTEM_CREATED = 0x26C3, + SMSG_TOTEM_DURATION_CHANGED = 0x26C4, + SMSG_TOTEM_MOVED = 0x26C5, SMSG_TRADE_STATUS = 0x2582, SMSG_TRADE_UPDATED = 0x2581, - SMSG_TRAINER_BUY_FAILED = 0x26D5, - SMSG_TRAINER_LIST = 0x26D4, - SMSG_TRANSFER_ABORTED = 0x26F7, - SMSG_TRANSFER_PENDING = 0x25C9, - SMSG_TRANSMOGRIFY_NPC = 0x27E7, + SMSG_TRAINER_BUY_FAILED = 0x26DA, + SMSG_TRAINER_LIST = 0x26D9, + SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D0, + SMSG_TRANSFER_ABORTED = 0x26FD, + SMSG_TRANSFER_PENDING = 0x25CC, SMSG_TREASURE_PICKER_RESPONSE = 0x291F, - SMSG_TRIGGER_CINEMATIC = 0x27B9, - SMSG_TRIGGER_MOVIE = 0x26C1, - SMSG_TURN_IN_PETITION_RESULT = 0x2741, - SMSG_TUTORIAL_FLAGS = 0x27AC, + SMSG_TRIGGER_CINEMATIC = 0x27C2, + SMSG_TRIGGER_MOVIE = 0x26C6, + SMSG_TURN_IN_PETITION_RESULT = 0x2747, + SMSG_TUTORIAL_FLAGS = 0x27B5, SMSG_TWITTER_STATUS = 0x3043, - SMSG_UI_HEALING_RANGE_MODIFIED = 0x2737, - SMSG_UI_ITEM_INTERACTION_NPC = 0x27E9, + SMSG_UI_HEALING_RANGE_MODIFIED = 0x273D, SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27BC, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27BD, - SMSG_UNLEARNED_SPELLS = 0x2C4E, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C5, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C6, + SMSG_UNLEARNED_SPELLS = 0x2C51, SMSG_UNLOAD_CHILD_MAP = 0x257A, - SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2875, - SMSG_UPDATE_ACCOUNT_DATA = 0x26FD, - SMSG_UPDATE_ACTION_BUTTONS = 0x25D9, - SMSG_UPDATE_BNET_SESSION_KEY = 0x2813, + SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x287E, + SMSG_UPDATE_ACCOUNT_DATA = 0x2703, + SMSG_UPDATE_ACTION_BUTTONS = 0x25DE, + SMSG_UPDATE_BNET_SESSION_KEY = 0x281D, SMSG_UPDATE_CAPTURE_POINT = 0x2929, - SMSG_UPDATE_CELESTIAL_BODY = 0x280F, - SMSG_UPDATE_CHARACTER_FLAGS = 0x27B2, - SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2759, - SMSG_UPDATE_COOLDOWN = 0x2758, + SMSG_UPDATE_CELESTIAL_BODY = 0x2819, + SMSG_UPDATE_CHARACTER_FLAGS = 0x27BB, + SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x275F, + SMSG_UPDATE_COOLDOWN = 0x275E, + SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2996, SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F, - SMSG_UPDATE_EXPANSION_LEVEL = 0x263E, - SMSG_UPDATE_GAME_TIME_STATE = 0x2816, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A1, - SMSG_UPDATE_LAST_INSTANCE = 0x2680, - SMSG_UPDATE_OBJECT = 0x27BA, - SMSG_UPDATE_PRIMARY_SPEC = 0x25D1, - SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25EF, - SMSG_UPDATE_TALENT_DATA = 0x25D0, - SMSG_UPDATE_TASK_PROGRESS = 0x277E, + SMSG_UPDATE_EXPANSION_LEVEL = 0x2643, + SMSG_UPDATE_GAME_TIME_STATE = 0x2820, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A6, + SMSG_UPDATE_LAST_INSTANCE = 0x2685, + SMSG_UPDATE_OBJECT = 0x27C3, + SMSG_UPDATE_PRIMARY_SPEC = 0x25D6, + SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F4, + SMSG_UPDATE_TALENT_DATA = 0x25D5, + SMSG_UPDATE_TASK_PROGRESS = 0x2784, SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19, - SMSG_UPDATE_WORLD_STATE = 0x273B, + SMSG_UPDATE_WORLD_STATE = 0x2741, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x2742, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x280A, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2808, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2807, - SMSG_VAS_PURCHASE_COMPLETE = 0x27E3, - SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27E2, - SMSG_VENDOR_INVENTORY = 0x25B4, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x2748, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2814, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2812, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2811, + SMSG_VAS_PURCHASE_COMPLETE = 0x27EC, + SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27EB, + SMSG_VENDOR_INVENTORY = 0x25B7, SMSG_VIGNETTE_UPDATE = 0x3008, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x280E, - SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x286F, - SMSG_VOICE_LOGIN_RESPONSE = 0x280D, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2818, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2878, + SMSG_VOICE_LOGIN_RESPONSE = 0x2817, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x2DA4, SMSG_VOID_STORAGE_CONTENTS = 0x2DA1, SMSG_VOID_STORAGE_FAILED = 0x2DA0, @@ -1957,28 +2027,28 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256F, SMSG_WAIT_QUEUE_UPDATE = 0x256E, SMSG_WARDEN3_DATA = 0x2577, - SMSG_WARDEN3_DISABLED = 0x2811, - SMSG_WARDEN3_ENABLED = 0x2810, - SMSG_WARFRONT_COMPLETE = 0x2751, + SMSG_WARDEN3_DISABLED = 0x281B, + SMSG_WARDEN3_ENABLED = 0x281A, + SMSG_WARFRONT_COMPLETE = 0x2757, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2933, - SMSG_WEATHER = 0x269E, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x2866, - SMSG_WEEKLY_REWARDS_RESULT = 0x2864, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2865, + SMSG_WEATHER = 0x26A3, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x286F, + SMSG_WEEKLY_REWARDS_RESULT = 0x286D, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x286E, SMSG_WEEKLY_SPELL_USAGE = 0x2C18, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x269D, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2815, - SMSG_WORLD_MAP_OPEN_NPC = 0x27E6, + SMSG_WHO_IS = 0x26A2, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x281F, SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x300F, - SMSG_WORLD_SERVER_INFO = 0x25AB, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x285C, - SMSG_XP_GAIN_ABORTED = 0x25C5, - SMSG_XP_GAIN_ENABLED = 0x279C, + SMSG_WORLD_SERVER_INFO = 0x25AE, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2865, + SMSG_XP_AWARDED_FROM_CURRENCY = 0x28A0, + SMSG_XP_GAIN_ABORTED = 0x25C8, + SMSG_XP_GAIN_ENABLED = 0x27A5, SMSG_ZONE_UNDER_ATTACK = 0x2BB5, // Opcodes that are not generated automatically - SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0x25AE, // no client handler + SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0x25B1, // no client handler SMSG_COMPRESSED_PACKET = 0x3052, SMSG_MULTIPLE_PACKETS = 0x3051, @@ -2080,6 +2150,7 @@ class OpcodeTable } private: + bool ValidateClientOpcode(OpcodeClient opcode, char const* name) const; template<typename Handler, Handler HandlerFunction> void ValidateAndSetClientOpcode(OpcodeClient opcode, char const* name, SessionStatus status, PacketProcessing processing); |
