diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-06-13 19:54:06 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-06-13 19:54:06 +0200 |
commit | 3903482eb810625fce64c616a4edca3f06975e94 (patch) | |
tree | 4de2f8e3cb79527d1737af5ea716ca12caa27b5d | |
parent | f9a411b3352c67d6544d7a99df7d1acd1ad0f666 (diff) |
Core: Updated to 7.0.3.21916
22 files changed, 676 insertions, 737 deletions
diff --git a/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_07.sql b/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_07.sql new file mode 100644 index 00000000000..4d76e75fbf3 --- /dev/null +++ b/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_07.sql @@ -0,0 +1,10 @@ +ALTER TABLE `char_sections` CHANGE `Id` `ID` int(10) unsigned NOT NULL DEFAULT 0 FIRST; + +ALTER TABLE `chr_races` + CHANGE `Unk` `Unk1` int(10) unsigned NOT NULL DEFAULT 0 AFTER `HighResFemaleDisplayID`, + ADD `Unk2` int(10) unsigned NOT NULL DEFAULT 0 AFTER `Unk1`, + ADD `Unk3` int(10) unsigned NOT NULL DEFAULT 0 AFTER `Unk2`; + +ALTER TABLE `spell_scaling` + CHANGE `MinScalingLevel` `MinScalingLevel` int(10) unsigned NOT NULL DEFAULT 0 AFTER `ScalingClass`, + CHANGE `MaxScalingLevel` `MaxScalingLevel` int(10) unsigned NOT NULL DEFAULT 0 AFTER `MinScalingLevel`; diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 344b3bd5004..cf5ab499a6a 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -96,7 +96,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, MaleText_lang, FemaleText_lang FROM broadcast_text_locale WHERE locale = ?", CONNECTION_SYNCH); // CharSections.db2 - PrepareStatement(HOTFIX_SEL_CHAR_SECTIONS, "SELECT Id, TextureFileDataID1, TextureFileDataID2, TextureFileDataID3, Flags, Race, Gender, GenType, " + PrepareStatement(HOTFIX_SEL_CHAR_SECTIONS, "SELECT ID, TextureFileDataID1, TextureFileDataID2, TextureFileDataID3, Flags, Race, Gender, GenType, " "Type, Color FROM char_sections ORDER BY ID DESC", CONNECTION_SYNCH); // CharStartOutfit.db2 @@ -126,9 +126,9 @@ void HotfixDatabaseConnection::DoPrepareStatements() "FacialHairCustomization2, HairCustomization, CreateScreenFileDataID, SelectScreenFileDataID, MaleCustomizeOffset1, MaleCustomizeOffset2, " "MaleCustomizeOffset3, FemaleCustomizeOffset1, FemaleCustomizeOffset2, FemaleCustomizeOffset3, LowResScreenFileDataID, FactionID, " "ExplorationSoundID, MaleDisplayID, FemaleDisplayID, ResSicknessSpellID, SplashSoundID, CinematicSequenceID, UAMaleCreatureSoundDataID, " - "UAFemaleCreatureSoundDataID, Unk, BaseLanguage, CreatureType, TeamID, RaceRelated, UnalteredVisualRaceID, CharComponentTextureLayoutID, " - "DefaultClassID, NeutralRaceID, ItemAppearanceFrameRaceID, CharComponentTexLayoutHiResID, HighResMaleDisplayID, HighResFemaleDisplayID" - " FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH); + "UAFemaleCreatureSoundDataID, BaseLanguage, CreatureType, TeamID, RaceRelated, UnalteredVisualRaceID, CharComponentTextureLayoutID, " + "DefaultClassID, NeutralRaceID, ItemAppearanceFrameRaceID, CharComponentTexLayoutHiResID, HighResMaleDisplayID, HighResFemaleDisplayID, Unk1, " + "Unk2, Unk3 FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_RACES, "SELECT ID, Name_lang, NameFemale_lang, NameMale_lang FROM chr_races_locale WHERE locale = ?", CONNECTION_SYNCH); // ChrSpecialization.db2 @@ -766,7 +766,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() " ORDER BY ID DESC", CONNECTION_SYNCH); // SpellScaling.db2 - PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, ScalesFromItemLevel, MinScalingLevel, MaxScalingLevel, ScalingClass" + PrepareStatement(HOTFIX_SEL_SPELL_SCALING, "SELECT ID, SpellID, ScalesFromItemLevel, ScalingClass, MinScalingLevel, MaxScalingLevel" " FROM spell_scaling ORDER BY ID DESC", CONNECTION_SYNCH); // SpellShapeshift.db2 diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index 7bc32ba286e..21dadfc3793 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -970,9 +970,9 @@ struct ChrRacesMeta { static DB2Meta const* Instance() { - static char const* types = "iSSsssSSiiffihhhhhhhhhhbbbbbbbbbbii"; - static uint8 const arraySizes[35] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 35, 0x26E7581C, types, arraySizes); + static char const* types = "iSSsssSSiiffihhhhhhhhhbbbbbbbbbbiii"; + static uint8 const arraySizes[35] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 }; + static DB2Meta instance(-1, 35, 0x6B0D0422, types, arraySizes); return &instance; } }; @@ -1047,9 +1047,9 @@ struct CloakDampeningMeta { static DB2Meta const* Instance() { - static char const* types = "fffff"; - static uint8 const arraySizes[5] = { 5, 5, 2, 2, 1 }; - static DB2Meta instance(-1, 5, 0x01CB22C0, types, arraySizes); + static char const* types = "fffffff"; + static uint8 const arraySizes[7] = { 5, 5, 2, 2, 1, 1, 1 }; + static DB2Meta instance(-1, 7, 0x4BEFEBC2, types, arraySizes); return &instance; } }; @@ -1960,9 +1960,9 @@ struct GarrFollowerUICreatureMeta { static DB2Meta const* Instance() { - static char const* types = "ifhbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x25A4DCAF, types, arraySizes); + static char const* types = "ifhbbb"; + static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(-1, 6, 0xE375F0A0, types, arraySizes); return &instance; } }; @@ -2510,9 +2510,9 @@ struct InvasionClientDataMeta { static DB2Meta const* Instance() { - static char const* types = "sfiiiiiii"; - static uint8 const arraySizes[9] = { 1, 2, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 9, 0x12F82601, types, arraySizes); + static char const* types = "sfiiiiiiii"; + static uint8 const arraySizes[10] = { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; + static DB2Meta instance(2, 10, 0x0C8EFD74, types, arraySizes); return &instance; } }; @@ -5282,9 +5282,9 @@ struct SpellScalingMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbi"; + static char const* types = "ihiii"; static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xB0DB56A9, types, arraySizes); + static DB2Meta instance(-1, 5, 0x47D87C91, types, arraySizes); return &instance; } }; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 9f2fbb55d64..e5359fb4907 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -326,7 +326,6 @@ struct ChrRacesEntry uint16 CinematicSequenceID; uint16 UAMaleCreatureSoundDataID; uint16 UAFemaleCreatureSoundDataID; - uint16 Unk; uint8 BaseLanguage; uint8 CreatureType; uint8 TeamID; @@ -339,6 +338,7 @@ struct ChrRacesEntry uint8 CharComponentTexLayoutHiResID; uint32 HighResMaleDisplayID; uint32 HighResFemaleDisplayID; + uint32 Unk[3]; }; #define MAX_MASTERY_SPELLS 2 @@ -2294,9 +2294,9 @@ struct SpellScalingEntry uint32 ID; uint32 SpellID; uint16 ScalesFromItemLevel; - uint8 MinScalingLevel; - uint8 MaxScalingLevel; int32 ScalingClass; + uint32 MinScalingLevel; + uint32 MaxScalingLevel; }; struct SpellShapeshiftEntry diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 0a1a0739616..47751548922 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -340,7 +340,6 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const bool NoBirthAnim = false; bool EnablePortals = false; bool PlayHoverAnim = false; - bool IsSuppressingGreetings = false; bool HasMovementUpdate = (flags & UPDATEFLAG_LIVING) != 0; bool HasMovementTransport = (flags & UPDATEFLAG_TRANSPORT_POSITION) != 0; bool Stationary = (flags & UPDATEFLAG_STATIONARY_POSITION) != 0; @@ -363,7 +362,6 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const data->WriteBit(NoBirthAnim); data->WriteBit(EnablePortals); data->WriteBit(PlayHoverAnim); - data->WriteBit(IsSuppressingGreetings); data->WriteBit(HasMovementUpdate); data->WriteBit(HasMovementTransport); data->WriteBit(Stationary); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5775441d781..e119c1d8199 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2548,6 +2548,7 @@ void Player::InitStatsForLevel(bool reapplyMods) SetFloatValue(UNIT_FIELD_MOD_HASTE, 1.0f); SetFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, 1.0f); SetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, 1.0f); + SetFloatValue(UNIT_FIELD_MOD_TIME_RATE, 1.0f); // reset size before reapply auras SetObjectScale(1.0f); diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 00c926acbb0..a1114c0e28c 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -935,6 +935,18 @@ enum CharacterCustomizeFlags CHAR_CUSTOMIZE_FLAG_RACE = 0x00100000 // name, gender, race, etc... }; +enum CharacterFlags3 : uint32 +{ + CHARACTER_FLAG_3_LOCKED_BY_REVOKED_VAS_TRANSACTION = 0x00100000, + CHARACTER_FLAG_3_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 0x80000000, +}; + +enum CharacterFlags4 : uint32 +{ + CHARACTER_FLAG_4_TRIAL_BOOST = 0x00000080, + CHARACTER_FLAG_4_TRIAL_BOOST_LOCKED = 0x00040000, +}; + enum CharacterSlot { SLOT_HEAD = 0, diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index 0912c85dcb4..f17e079f0fb 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -209,6 +209,14 @@ namespace WorldPackets ConnectToSerial Serial = ConnectToSerial::None; uint8 Con = 0; }; + + class EnableEncryption final : public ServerPacket + { + public: + EnableEncryption() : ServerPacket(SMSG_ENABLE_ENCRYPTION, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; } } diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 4907e42f808..5e7efd257f7 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -88,6 +88,7 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel CustomizationFlag = CHAR_CUSTOMIZE_FLAG_RACE; Flags3 = 0; + Flags4 = 0; FirstLogin = (atLoginFlags & AT_LOGIN_FIRST) != 0; // show pet at selection character in character list only for non-ghost character @@ -177,8 +178,9 @@ WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write() } _worldPacket << uint32(charInfo.LastPlayedTime); - _worldPacket << uint16(charInfo.UnkLegion); - _worldPacket << uint32(charInfo.ClassTrialFlags); + _worldPacket << uint16(charInfo.SpecID); + _worldPacket << uint32(charInfo.Unknown703); + _worldPacket << uint32(charInfo.Flags4); _worldPacket.WriteBits(charInfo.Name.length(), 6); _worldPacket.WriteBit(charInfo.FirstLogin); _worldPacket.WriteBit(charInfo.BoostInProgress); diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index e61b7535cca..ec3ac9dc172 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -135,10 +135,12 @@ namespace WorldPackets uint32 Flags = 0; ///< Character flag @see enum CharacterFlags uint32 CustomizationFlag = 0; ///< Character customization flags @see enum CharacterCustomizeFlags uint32 Flags3 = 0; ///< Character flags 3 @todo research + uint32 Flags4 = 0; bool FirstLogin = false; uint8 unkWod61x = 0; uint32 LastPlayedTime = 0; - uint16 UnkLegion = 0; // may be spec id + uint16 SpecID = 0; + uint32 Unknown703; struct PetInfo { @@ -149,7 +151,6 @@ namespace WorldPackets bool BoostInProgress = false; ///< @todo int32 ProfessionIds[2]; ///< @todo - uint32 ClassTrialFlags = 0; struct VisualItemInfo { diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 21626fd8640..8cc97ca2557 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -69,14 +69,13 @@ WorldPacket const* WorldPackets::Guild::GuildRoster::Write() _worldPacket.AppendPackedTime(CreateDate); _worldPacket << GuildFlags; _worldPacket << uint32(MemberData.size()); + _worldPacket.WriteBits(WelcomeText.length(), 10); + _worldPacket.WriteBits(InfoText.length(), 11); + _worldPacket.FlushBits(); for (GuildRosterMemberData const& member : MemberData) _worldPacket << member; - _worldPacket.WriteBits(WelcomeText.length(), 10); - _worldPacket.WriteBits(InfoText.length(), 10); - _worldPacket.FlushBits(); - _worldPacket.WriteString(WelcomeText); _worldPacket.WriteString(InfoText); diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index 9e8090b03b2..33721e23d5b 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -142,15 +142,6 @@ WorldPacket const* WorldPackets::NPC::PlayerTabardVendorActivate::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::NPC::SuppressNPCGreetings::Write() -{ - _worldPacket << UnitGUID; - _worldPacket.WriteBit(SuppressNPCGreeting); - _worldPacket.FlushBits(); - - return &_worldPacket; -} - WorldPacket const* WorldPackets::NPC::GossipPOI::Write() { _worldPacket.WriteBits(Flags, 14); diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index 98fa079afaa..b18ce340ae0 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -172,17 +172,6 @@ namespace WorldPackets ObjectGuid Vendor; }; - class SuppressNPCGreetings final : public ServerPacket - { - public: - SuppressNPCGreetings() : ServerPacket(SMSG_SUPPRESS_NPC_GREETINGS, 16 + 1) { } - - WorldPacket const* Write() override; - - ObjectGuid UnitGUID; - bool SuppressNPCGreeting = false; - }; - class GossipPOI final : public ServerPacket { public: diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp index b3d4572f550..524ab132c80 100644 --- a/src/server/game/Server/Packets/ReputationPackets.cpp +++ b/src/server/game/Server/Packets/ReputationPackets.cpp @@ -42,7 +42,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Reputation::ForcedReactio WorldPacket const* WorldPackets::Reputation::SetForcedReactions::Write() { - _worldPacket.WriteBits(Reactions.size(), 6); + _worldPacket << uint32(Reactions.size()); for (ForcedReaction const& reaction : Reactions) _worldPacket << reaction; diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index 395a7c66fe6..e39182b280f 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -49,6 +49,7 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write() _worldPacket.WriteBit(Unk67); _worldPacket.WriteBit(WillKickFromWorld); _worldPacket.WriteBit(KioskModeEnabled); + _worldPacket.WriteBit(RaceClassExpansionLevels.is_initialized()); _worldPacket.FlushBits(); @@ -72,6 +73,13 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write() _worldPacket << int32(SessionAlert->DisplayTime); } + if (RaceClassExpansionLevels) + { + _worldPacket << uint32(RaceClassExpansionLevels->size()); + if (!RaceClassExpansionLevels->empty()) + _worldPacket.append(RaceClassExpansionLevels->data(), RaceClassExpansionLevels->size()); + } + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index 1ae7d73d28e..7a420df6859 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -85,6 +85,8 @@ namespace WorldPackets bool TutorialsEnabled = false; bool NPETutorialsEnabled = false; bool KioskModeEnabled = false; + + Optional<std::vector<uint8>> RaceClassExpansionLevels; }; class FeatureSystemStatusGlueScreen final : public ServerPacket diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 1d6be511871..8efd98c19f9 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -282,7 +282,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CHAT_MESSAGE_SAY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode); DEFINE_HANDLER(CMSG_CHAT_MESSAGE_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessageWhisper, &WorldSession::HandleChatMessageWhisperOpcode); DEFINE_HANDLER(CMSG_CHAT_MESSAGE_YELL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatMessage, &WorldSession::HandleChatMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_REGISTER_ADDON_PREFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatRegisterAddonPrefixes, &WorldSession::HandleAddonRegisteredPrefixesOpcode); + DEFINE_HANDLER(CMSG_CHAT_REGISTER_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatRegisterAddonPrefixes, &WorldSession::HandleAddonRegisteredPrefixesOpcode); DEFINE_HANDLER(CMSG_CHAT_REPORT_FILTERED, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHAT_REPORT_IGNORED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatReportIgnored, &WorldSession::HandleChatIgnoredOpcode); DEFINE_HANDLER(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::ChatUnregisterAllAddonPrefixes, &WorldSession::HandleUnregisterAllAddonPrefixesOpcode); @@ -335,6 +335,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_DUEL_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Duel::DuelResponse, &WorldSession::HandleDuelResponseOpcode); DEFINE_HANDLER(CMSG_EJECT_PASSENGER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Vehicle::EjectPassenger, &WorldSession::HandleEjectPassenger); DEFINE_HANDLER(CMSG_EMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Chat::EmoteClient, &WorldSession::HandleEmoteOpcode); + DEFINE_HANDLER(CMSG_ENABLE_ENCRYPTION_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPacket, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_ENABLE_NAGLE, STATUS_NEVER, PROCESS_INPLACE, WorldPacket, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_ENABLE_TAXI_NODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, WorldPackets::Taxi::EnableTaxiNode, &WorldSession::HandleEnableTaxiNodeOpcode); DEFINE_HANDLER(CMSG_ENGINE_SURVEY, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL); @@ -627,6 +628,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_QUEST_GIVER_REQUEST_REWARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverRequestReward, &WorldSession::HandleQuestgiverRequestRewardOpcode); DEFINE_HANDLER(CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestGiverStatusMultipleQuery, &WorldSession::HandleQuestgiverStatusMultipleQuery); DEFINE_HANDLER(CMSG_QUEST_GIVER_STATUS_QUERY, STATUS_LOGGEDIN, PROCESS_INPLACE, WorldPackets::Quest::QuestGiverStatusQuery, &WorldSession::HandleQuestgiverStatusQueryOpcode); + DEFINE_HANDLER(CMSG_QUEST_GIVER_UNIGNORE_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Null, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUEST_LOG_REMOVE_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestLogRemoveQuest, &WorldSession::HandleQuestLogRemoveQuest); DEFINE_HANDLER(CMSG_QUEST_POI_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Query::QuestPOIQuery, &WorldSession::HandleQuestPOIQuery); DEFINE_HANDLER(CMSG_QUEST_PUSH_RESULT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Quest::QuestPushResult, &WorldSession::HandleQuestPushResult); @@ -824,7 +826,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_MOUNT_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_TOYS_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACHIEVEMENT_DELETED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACHIEVEMENT_EARNED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACHIEVEMENT_EARNED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACTIVATE_TAXI_REPLY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACTIVE_GLYPHS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_BATTLENET_FRIEND_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -837,7 +839,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AI_REACTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_ACCOUNT_CRITERIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_ACHIEVEMENT_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_GUILD_ACHIEVEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_GUILD_ACHIEVEMENTS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARCHAEOLOGY_SURVERY_CAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_SPIRIT_HEALER_TIME, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_DENIED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -985,6 +987,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_JOINED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHANNEL_NOTIFY_LEFT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_CLASS_TRIAL_CREATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_ITEM_FIXUP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_LOGIN_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_OBJECT_TEST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHARACTER_RENAME_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1068,6 +1071,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_DURABILITY_DAMAGE_DEATH, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_EMOTE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENABLE_BARBER_SHOP, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENABLE_ENCRYPTION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCHANTMENT_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1163,8 +1167,8 @@ void OpcodeTable::Initialize() 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_UNINVITE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_DELETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_EARNED, STATUS_UNHANDLED, 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); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ACHIEVEMENT_MEMBERS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_LOG_QUERY_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_BANK_QUERY_RESULTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1204,7 +1208,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MOVED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_MOVE_STARTING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NAME_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS_DELETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PARTY_STATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1212,7 +1216,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_REACTION_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REWARD_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_SEND_RANK_CHANGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_HEALTH_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1529,6 +1533,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_POI_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_POI_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_PUSH_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UNIGNORED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_CREDIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_PVP_CREDIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1681,7 +1686,6 @@ void OpcodeTable::Initialize() 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); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPERCEDED_SPELLS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPPRESS_NPC_GREETINGS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_COMMS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_TOKEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TALENTS_INVOLUNTARILY_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 40e469acea6..a3346f5e6cb 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -258,7 +258,8 @@ enum OpcodeClient : uint32 CMSG_DUEL_RESPONSE = 0x34D2, CMSG_EJECT_PASSENGER = 0x321E, CMSG_EMOTE = 0x352E, - CMSG_ENABLE_NAGLE = 0x376A, + CMSG_ENABLE_ENCRYPTION_ACK = 0x3767, + CMSG_ENABLE_NAGLE = 0x376B, CMSG_ENABLE_TAXI_NODE = 0x34A4, CMSG_ENGINE_SURVEY = 0x36E9, CMSG_ENUM_CHARACTERS = 0x35E6, @@ -392,8 +393,8 @@ enum OpcodeClient : uint32 CMSG_LOGOUT_CANCEL = 0x34C8, CMSG_LOGOUT_INSTANT = 0x34C9, CMSG_LOGOUT_REQUEST = 0x34C7, - CMSG_LOG_DISCONNECT = 0x3768, - CMSG_LOG_STREAMING_ERROR = 0x376C, + CMSG_LOG_DISCONNECT = 0x3769, + CMSG_LOG_STREAMING_ERROR = 0x376D, CMSG_LOOT_ITEM = 0x31F3, CMSG_LOOT_MONEY = 0x31F2, CMSG_LOOT_RELEASE = 0x31F7, @@ -512,9 +513,9 @@ enum OpcodeClient : uint32 CMSG_PET_SET_ACTION = 0x3481, CMSG_PET_SPELL_AUTOCAST = 0x3486, CMSG_PET_STOP_ATTACK = 0x3483, - CMSG_PING = 0x3767, + CMSG_PING = 0x3768, CMSG_PLAYER_LOGIN = 0x35E8, - CMSG_PROTOCOL_MISMATCH = 0x376D, + CMSG_PROTOCOL_MISMATCH = 0x376E, CMSG_PUSH_QUEST_TO_PARTY = 0x349A, CMSG_PVP_LOG_DATA = 0x3179, CMSG_PVP_PRESTIGE_RANK_UP = 0x331E, @@ -545,15 +546,16 @@ enum OpcodeClient : uint32 CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x3495, CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x3493, CMSG_QUEST_GIVER_HELLO = 0x348D, - CMSG_QUEST_GIVER_INGORE_QUEST = 0x3491, + CMSG_QUEST_GIVER_IGNORE_QUEST = 0x3491, CMSG_QUEST_GIVER_QUERY_QUEST = 0x348E, CMSG_QUEST_GIVER_REQUEST_REWARD = 0x3496, CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x3498, CMSG_QUEST_GIVER_STATUS_QUERY = 0x3497, + CMSG_QUEST_GIVER_UNIGNORE_QUEST = 0x3492, CMSG_QUEST_LOG_REMOVE_QUEST = 0x351B, CMSG_QUEST_POI_QUERY = 0x36B6, CMSG_QUEST_PUSH_RESULT = 0x349B, - CMSG_QUEUED_MESSAGES_END = 0x376B, + CMSG_QUEUED_MESSAGES_END = 0x376C, CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36EA, CMSG_RANDOM_ROLL = 0x3654, CMSG_READY_CHECK_RESPONSE = 0x3634, @@ -670,7 +672,7 @@ enum OpcodeClient : uint32 CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644, CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x3646, CMSG_SUSPEND_COMMS_ACK = 0x3764, - CMSG_SUSPEND_TOKEN_RESPONSE = 0x3769, + CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A, CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, CMSG_SWAP_SUB_GROUPS = 0x364D, @@ -730,7 +732,7 @@ enum OpcodeClient : uint32 CMSG_WHO = 0x3686, CMSG_WHO_IS = 0x3685, CMSG_WORLD_PORT_RESPONSE = 0x35F6, - CMSG_WORLD_TELEPORT = 0x3324, + CMSG_WORLD_TELEPORT = 0x3326, CMSG_WRAP_ITEM = 0x3994, CMSG_BF_MGR_ENTRY_INVITE_RESPONSE = 0xBADD, @@ -741,60 +743,60 @@ enum OpcodeClient : uint32 enum OpcodeServer : uint32 { SMSG_ABORT_NEW_WORLD = 0x25AB, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x264E, - SMSG_ACCOUNT_DATA_TIMES = 0x2745, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x264D, + SMSG_ACCOUNT_DATA_TIMES = 0x2744, SMSG_ACCOUNT_MOUNT_UPDATE = 0x25C1, SMSG_ACCOUNT_TOYS_UPDATE = 0x25C2, - SMSG_ACHIEVEMENT_DELETED = 0x271B, - SMSG_ACHIEVEMENT_EARNED = 0x265C, - SMSG_ACTIVATE_TAXI_REPLY = 0x26A2, + SMSG_ACHIEVEMENT_DELETED = 0x271A, + SMSG_ACHIEVEMENT_EARNED = 0x265B, + SMSG_ACTIVATE_TAXI_REPLY = 0x26A1, SMSG_ACTIVE_GLYPHS = 0x2C52, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2656, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2655, SMSG_ADD_ITEM_PASSIVE = 0x25BD, - SMSG_ADD_LOSS_OF_CONTROL = 0x2692, - SMSG_ADD_RUNE_POWER = 0x26DF, - SMSG_ADJUST_SPLINE_DURATION = 0x25E5, - SMSG_AE_LOOT_TARGETS = 0x2629, - SMSG_AE_LOOT_TARGET_ACK = 0x262A, - SMSG_AI_REACTION = 0x26DC, + SMSG_ADD_LOSS_OF_CONTROL = 0x2691, + SMSG_ADD_RUNE_POWER = 0x26DE, + SMSG_ADJUST_SPLINE_DURATION = 0x25E4, + SMSG_AE_LOOT_TARGETS = 0x2628, + SMSG_AE_LOOT_TARGET_ACK = 0x2629, + SMSG_AI_REACTION = 0x26DB, SMSG_ALL_ACCOUNT_CRITERIA = 0x2570, SMSG_ALL_ACHIEVEMENT_DATA = 0x256F, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2586, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x277F, - SMSG_AREA_TRIGGER_DENIED = 0x2699, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x2751, - SMSG_AREA_TRIGGER_RE_PATH = 0x263C, - SMSG_AREA_TRIGGER_RE_SHAPE = 0x263A, - SMSG_ARENA_ERROR = 0x270E, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2661, - SMSG_ARTIFACT_APPEARANCE_CHANGED = 0x27DF, - SMSG_ARTIFACT_FORGE_OPENED = 0x27DD, - SMSG_ARTIFACT_POWERS_UPDATED = 0x27DE, - SMSG_ARTIFACT_XP_GAIN = 0x281E, - SMSG_ATTACKER_STATE_UPDATE = 0x27CA, - SMSG_ATTACK_START = 0x2669, - SMSG_ATTACK_STOP = 0x266A, - SMSG_ATTACK_SWING_ERROR = 0x2730, - SMSG_ATTACK_SWING_LANDED_LOG = 0x2731, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2725, - SMSG_AUCTION_COMMAND_RESULT = 0x2722, - SMSG_AUCTION_HELLO_RESPONSE = 0x2720, - SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x2729, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2727, - SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x2728, - SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x272A, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2724, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2726, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x2721, - SMSG_AUCTION_WON_NOTIFICATION = 0x2723, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x277E, + SMSG_AREA_TRIGGER_DENIED = 0x2698, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x2750, + SMSG_AREA_TRIGGER_RE_PATH = 0x263B, + SMSG_AREA_TRIGGER_RE_SHAPE = 0x2639, + SMSG_ARENA_ERROR = 0x270D, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2660, + SMSG_ARTIFACT_APPEARANCE_CHANGED = 0x27DE, + SMSG_ARTIFACT_FORGE_OPENED = 0x27DC, + SMSG_ARTIFACT_POWERS_UPDATED = 0x27DD, + SMSG_ARTIFACT_XP_GAIN = 0x281D, + SMSG_ATTACKER_STATE_UPDATE = 0x27C9, + SMSG_ATTACK_START = 0x2668, + SMSG_ATTACK_STOP = 0x2669, + SMSG_ATTACK_SWING_ERROR = 0x272F, + SMSG_ATTACK_SWING_LANDED_LOG = 0x2730, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2724, + SMSG_AUCTION_COMMAND_RESULT = 0x2721, + SMSG_AUCTION_HELLO_RESPONSE = 0x271F, + SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x2728, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2726, + SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x2727, + SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x2729, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2723, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2725, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x2720, + SMSG_AUCTION_WON_NOTIFICATION = 0x2722, SMSG_AURA_POINTS_DEPLETED = 0x2C22, SMSG_AURA_UPDATE = 0x2C21, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_RESPONSE = 0x256C, SMSG_AVAILABLE_VOICE_CHANNEL = 0x2BB2, - SMSG_BAN_REASON = 0x26AE, - SMSG_BARBER_SHOP_RESULT = 0x26E5, + SMSG_BAN_REASON = 0x26AD, + SMSG_BARBER_SHOP_RESULT = 0x26E4, SMSG_BATTLEFIELD_LIST = 0x2594, SMSG_BATTLEFIELD_PORT_DENIED = 0x259A, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2590, @@ -804,114 +806,115 @@ enum OpcodeServer : uint32 SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2591, SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x25A3, SMSG_BATTLEGROUND_INFO_THROTTLED = 0x259B, - SMSG_BATTLEGROUND_INIT = 0x279D, + SMSG_BATTLEGROUND_INIT = 0x279C, SMSG_BATTLEGROUND_PLAYER_JOINED = 0x2598, SMSG_BATTLEGROUND_PLAYER_LEFT = 0x2599, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2595, - SMSG_BATTLEGROUND_POINTS = 0x279C, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x27C9, - SMSG_BATTLENET_CHALLENGE_START = 0x27C8, - SMSG_BATTLENET_NOTIFICATION = 0x2833, - SMSG_BATTLENET_REALM_LIST_TICKET = 0x2835, - SMSG_BATTLENET_RESPONSE = 0x2832, - SMSG_BATTLENET_SET_SESSION_STATE = 0x2834, - SMSG_BATTLE_PAY_ACK_FAILED = 0x27C1, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27C0, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27B7, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27B6, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27B5, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27B3, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27B1, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27B2, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27BF, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27BD, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27BC, - SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27B4, - SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2822, - SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x2825, - SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x2826, - SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x2824, - SMSG_BATTLE_PETS_HEALED = 0x2607, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x269C, - SMSG_BATTLE_PET_DELETED = 0x2604, - SMSG_BATTLE_PET_ERROR = 0x2651, - SMSG_BATTLE_PET_JOURNAL = 0x2603, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2601, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2602, - SMSG_BATTLE_PET_LICENSE_CHANGED = 0x2608, - SMSG_BATTLE_PET_MAX_COUNT_CHANGED = 0x25FF, - SMSG_BATTLE_PET_RESTORED = 0x2606, - SMSG_BATTLE_PET_REVOKED = 0x2605, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x25FE, - SMSG_BATTLE_PET_UPDATES = 0x25FD, - SMSG_BINDER_CONFIRM = 0x2736, + SMSG_BATTLEGROUND_POINTS = 0x279B, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x27C8, + SMSG_BATTLENET_CHALLENGE_START = 0x27C7, + SMSG_BATTLENET_NOTIFICATION = 0x2832, + SMSG_BATTLENET_REALM_LIST_TICKET = 0x2834, + SMSG_BATTLENET_RESPONSE = 0x2831, + SMSG_BATTLENET_SET_SESSION_STATE = 0x2833, + SMSG_BATTLE_PAY_ACK_FAILED = 0x27C0, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27BF, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27B6, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27B5, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27B4, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27B2, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27B0, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27B1, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27BE, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27BC, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27BB, + SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27B3, + SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2821, + SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x2824, + SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x2825, + SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x2823, + SMSG_BATTLE_PETS_HEALED = 0x2606, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x269B, + SMSG_BATTLE_PET_DELETED = 0x2603, + SMSG_BATTLE_PET_ERROR = 0x2650, + SMSG_BATTLE_PET_JOURNAL = 0x2602, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2600, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2601, + SMSG_BATTLE_PET_LICENSE_CHANGED = 0x2607, + SMSG_BATTLE_PET_MAX_COUNT_CHANGED = 0x25FE, + SMSG_BATTLE_PET_RESTORED = 0x2605, + SMSG_BATTLE_PET_REVOKED = 0x2604, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x25FD, + SMSG_BATTLE_PET_UPDATES = 0x25FC, + SMSG_BINDER_CONFIRM = 0x2735, SMSG_BIND_POINT_UPDATE = 0x257C, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2641, - SMSG_BLACK_MARKET_OPEN_RESULT = 0x263F, - SMSG_BLACK_MARKET_OUTBID = 0x2642, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2640, - SMSG_BLACK_MARKET_WON = 0x2643, - SMSG_BONUS_ROLL_EMPTY = 0x265E, - SMSG_BOSS_KILL_CREDIT = 0x27BB, - SMSG_BREAK_TARGET = 0x2668, - SMSG_BUY_FAILED = 0x26EE, - SMSG_BUY_SUCCEEDED = 0x26ED, - SMSG_CACHE_VERSION = 0x273F, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26C2, - SMSG_CALENDAR_COMMAND_RESULT = 0x26C3, - SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26B2, - SMSG_CALENDAR_EVENT_INVITE = 0x26B3, - SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26B4, - SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26B7, - SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26BC, - SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26BD, - SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26B8, - SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26B9, - SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26B5, - SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26B6, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26BA, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26BB, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26BE, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26BF, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26C0, - SMSG_CALENDAR_SEND_CALENDAR = 0x26B0, - SMSG_CALENDAR_SEND_EVENT = 0x26B1, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x26C1, - SMSG_CAMERA_EFFECT = 0x2763, - SMSG_CAMERA_SHAKE = 0x2764, - SMSG_CANCEL_AUTO_REPEAT = 0x270F, - SMSG_CANCEL_COMBAT = 0x272E, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2640, + SMSG_BLACK_MARKET_OPEN_RESULT = 0x263E, + SMSG_BLACK_MARKET_OUTBID = 0x2641, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x263F, + SMSG_BLACK_MARKET_WON = 0x2642, + SMSG_BONUS_ROLL_EMPTY = 0x265D, + SMSG_BOSS_KILL_CREDIT = 0x27BA, + SMSG_BREAK_TARGET = 0x2667, + SMSG_BUY_FAILED = 0x26ED, + SMSG_BUY_SUCCEEDED = 0x26EC, + SMSG_CACHE_VERSION = 0x273E, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26C1, + SMSG_CALENDAR_COMMAND_RESULT = 0x26C2, + SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26B1, + SMSG_CALENDAR_EVENT_INVITE = 0x26B2, + SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26B3, + SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26B6, + SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26BB, + SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26BC, + SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26B7, + SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26B8, + SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26B4, + SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26B5, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26B9, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26BA, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26BD, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26BE, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26BF, + SMSG_CALENDAR_SEND_CALENDAR = 0x26AF, + SMSG_CALENDAR_SEND_EVENT = 0x26B0, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x26C0, + SMSG_CAMERA_EFFECT = 0x2762, + SMSG_CAMERA_SHAKE = 0x2763, + SMSG_CANCEL_AUTO_REPEAT = 0x270E, + SMSG_CANCEL_COMBAT = 0x272D, SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C45, - SMSG_CANCEL_SCENE = 0x2650, + SMSG_CANCEL_SCENE = 0x264F, SMSG_CANCEL_SPELL_VISUAL = 0x2C43, SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C47, - SMSG_CAN_DUEL_RESULT = 0x2672, + SMSG_CAN_DUEL_RESULT = 0x2671, SMSG_CAST_FAILED = 0x2C55, SMSG_CATEGORY_COOLDOWN = 0x2C16, - SMSG_CHALLEGE_MODE_REWARDS = 0x261E, - SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x261F, - SMSG_CHALLENGE_MODE_COMPLETE = 0x261D, - SMSG_CHALLENGE_MODE_MAP_STATS_UPDATE = 0x2620, - SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2622, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2621, - SMSG_CHALLENGE_MODE_RESET = 0x261C, - SMSG_CHALLENGE_MODE_START = 0x261B, - SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x2732, + SMSG_CHALLEGE_MODE_REWARDS = 0x261D, + SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x261E, + SMSG_CHALLENGE_MODE_COMPLETE = 0x261C, + SMSG_CHALLENGE_MODE_MAP_STATS_UPDATE = 0x261F, + SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2621, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2620, + SMSG_CHALLENGE_MODE_RESET = 0x261B, + SMSG_CHALLENGE_MODE_START = 0x261A, + SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x2731, SMSG_CHANNEL_LIST = 0x2BC8, SMSG_CHANNEL_NOTIFY = 0x2BC5, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC6, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC7, - SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x27F8, - SMSG_CHARACTER_LOGIN_FAILED = 0x2740, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27C7, - SMSG_CHARACTER_RENAME_RESULT = 0x27A3, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27F7, - SMSG_CHARACTER_UPGRADE_QUEUED = 0x27F6, - SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F2, - SMSG_CHARACTER_UPGRADE_STARTED = 0x27F5, - SMSG_CHAR_CUSTOMIZE = 0x2716, - SMSG_CHAR_CUSTOMIZE_FAILED = 0x2715, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27E4, + SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x27F7, + SMSG_CHARACTER_ITEM_FIXUP = 0x283C, + SMSG_CHARACTER_LOGIN_FAILED = 0x273F, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27C6, + SMSG_CHARACTER_RENAME_RESULT = 0x27A2, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27F6, + SMSG_CHARACTER_UPGRADE_QUEUED = 0x27F5, + SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F1, + SMSG_CHARACTER_UPGRADE_STARTED = 0x27F4, + SMSG_CHAR_CUSTOMIZE = 0x2715, + SMSG_CHAR_CUSTOMIZE_FAILED = 0x2714, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27E3, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BBD, SMSG_CHAT_DOWN = 0x2BC2, @@ -927,95 +930,96 @@ enum OpcodeServer : uint32 SMSG_CHECK_WARGAME_ENTRY = 0x259E, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C26, SMSG_CLEAR_BOSS_EMOTES = 0x25CA, - SMSG_CLEAR_COOLDOWN = 0x26E1, + SMSG_CLEAR_COOLDOWN = 0x26E0, SMSG_CLEAR_COOLDOWNS = 0x2C25, - SMSG_CLEAR_LOSS_OF_CONTROL = 0x2694, + SMSG_CLEAR_LOSS_OF_CONTROL = 0x2693, SMSG_CLEAR_SPELL_CHARGES = 0x2C27, - SMSG_CLEAR_TARGET = 0x26D8, - SMSG_COIN_REMOVED = 0x2628, - SMSG_COMBAT_EVENT_FAILED = 0x266B, - SMSG_COMMENTATOR_MAP_INFO = 0x2742, - SMSG_COMMENTATOR_PLAYER_INFO = 0x2743, - SMSG_COMMENTATOR_STATE_CHANGED = 0x2741, - SMSG_COMPLAINT_RESULT = 0x26D0, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27D9, - SMSG_CONNECT_TO = 0x304C, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27C2, - SMSG_CONSOLE_WRITE = 0x264D, - SMSG_CONTACT_LIST = 0x27C5, - SMSG_CONTROL_UPDATE = 0x2660, - SMSG_COOLDOWN_CHEAT = 0x2778, - SMSG_COOLDOWN_EVENT = 0x26E0, - SMSG_CORPSE_LOCATION = 0x2667, - SMSG_CORPSE_RECLAIM_DELAY = 0x278B, - SMSG_CORPSE_TRANSPORT_QUERY = 0x274D, - SMSG_CREATE_CHAR = 0x273B, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x27D8, - SMSG_CRITERIA_DELETED = 0x271A, - SMSG_CRITERIA_UPDATE = 0x2714, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26E9, - SMSG_CUSTOM_LOAD_SCREEN = 0x25E0, + SMSG_CLEAR_TARGET = 0x26D7, + SMSG_COIN_REMOVED = 0x2627, + SMSG_COMBAT_EVENT_FAILED = 0x266A, + SMSG_COMMENTATOR_MAP_INFO = 0x2741, + SMSG_COMMENTATOR_PLAYER_INFO = 0x2742, + SMSG_COMMENTATOR_STATE_CHANGED = 0x2740, + SMSG_COMPLAINT_RESULT = 0x26CF, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27D8, + SMSG_CONNECT_TO = 0x304D, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27C1, + SMSG_CONSOLE_WRITE = 0x264C, + SMSG_CONTACT_LIST = 0x27C4, + SMSG_CONTROL_UPDATE = 0x265F, + SMSG_COOLDOWN_CHEAT = 0x2777, + SMSG_COOLDOWN_EVENT = 0x26DF, + SMSG_CORPSE_LOCATION = 0x2666, + SMSG_CORPSE_RECLAIM_DELAY = 0x278A, + SMSG_CORPSE_TRANSPORT_QUERY = 0x274C, + SMSG_CREATE_CHAR = 0x273A, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x27D7, + SMSG_CRITERIA_DELETED = 0x2719, + SMSG_CRITERIA_UPDATE = 0x2713, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26E8, + SMSG_CUSTOM_LOAD_SCREEN = 0x25DF, SMSG_DAILY_QUESTS_RESET = 0x2A80, - SMSG_DAMAGE_CALC_LOG = 0x27FF, - SMSG_DANCE_STUDIO_CREATE_RESULT = 0x27A0, + SMSG_DAMAGE_CALC_LOG = 0x27FE, + SMSG_DANCE_STUDIO_CREATE_RESULT = 0x279F, SMSG_DB_REPLY = 0x25A0, - SMSG_DEATH_RELEASE_LOC = 0x2702, + SMSG_DEATH_RELEASE_LOC = 0x2701, SMSG_DEFENSE_MESSAGE = 0x2BBB, - SMSG_DELETE_CHAR = 0x273C, - SMSG_DESTROY_ARENA_UNIT = 0x2781, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x272F, + SMSG_DELETE_CHAR = 0x273B, + SMSG_DESTROY_ARENA_UNIT = 0x2780, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x272E, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258A, SMSG_DISENCHANT_CREDIT = 0x25BA, - SMSG_DISMOUNT = 0x26D7, + SMSG_DISMOUNT = 0x26D6, SMSG_DISMOUNT_RESULT = 0x257B, SMSG_DISPEL_FAILED = 0x2C2F, SMSG_DISPLAY_GAME_ERROR = 0x25B3, - SMSG_DISPLAY_PLAYER_CHOICE = 0x269D, - SMSG_DISPLAY_PROMOTION = 0x2664, + SMSG_DISPLAY_PLAYER_CHOICE = 0x269C, + SMSG_DISPLAY_PROMOTION = 0x2663, SMSG_DISPLAY_QUEST_POPUP = 0x2A9C, - SMSG_DISPLAY_TOAST = 0x2636, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F4, - SMSG_DROP_NEW_CONNECTION = 0x304B, - SMSG_DUEL_COMPLETE = 0x2670, - SMSG_DUEL_COUNTDOWN = 0x266F, - SMSG_DUEL_IN_BOUNDS = 0x266E, - SMSG_DUEL_OUT_OF_BOUNDS = 0x266D, - SMSG_DUEL_REQUESTED = 0x266C, - SMSG_DUEL_WINNER = 0x2671, - SMSG_DURABILITY_DAMAGE_DEATH = 0x2787, - SMSG_EMOTE = 0x2800, - SMSG_ENABLE_BARBER_SHOP = 0x26E4, - SMSG_ENCHANTMENT_LOG = 0x274E, - SMSG_ENCOUNTER_END = 0x27BA, - SMSG_ENCOUNTER_START = 0x27B9, + SMSG_DISPLAY_TOAST = 0x2635, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F3, + SMSG_DROP_NEW_CONNECTION = 0x304C, + SMSG_DUEL_COMPLETE = 0x266F, + SMSG_DUEL_COUNTDOWN = 0x266E, + SMSG_DUEL_IN_BOUNDS = 0x266D, + SMSG_DUEL_OUT_OF_BOUNDS = 0x266C, + SMSG_DUEL_REQUESTED = 0x266B, + SMSG_DUEL_WINNER = 0x2670, + SMSG_DURABILITY_DAMAGE_DEATH = 0x2786, + SMSG_EMOTE = 0x27FF, + SMSG_ENABLE_BARBER_SHOP = 0x26E3, + SMSG_ENABLE_ENCRYPTION = 0x3049, + SMSG_ENCHANTMENT_LOG = 0x274D, + SMSG_ENCOUNTER_END = 0x27B9, + SMSG_ENCOUNTER_START = 0x27B8, SMSG_ENUM_CHARACTERS_RESULT = 0x2582, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C20, - SMSG_EQUIPMENT_SET_ID = 0x26D9, + SMSG_EQUIPMENT_SET_ID = 0x26D8, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x279F, - SMSG_FACTION_BONUS_INFO = 0x2762, - SMSG_FAILED_PLAYER_CONDITION = 0x25DF, - SMSG_FEATURE_SYSTEM_STATUS = 0x25CF, - SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25D0, - SMSG_FEIGN_DEATH_RESISTED = 0x2784, - SMSG_FISH_ESCAPED = 0x26F6, - SMSG_FISH_NOT_HOOKED = 0x26F5, + SMSG_EXPLORATION_EXPERIENCE = 0x279E, + SMSG_FACTION_BONUS_INFO = 0x2761, + SMSG_FAILED_PLAYER_CONDITION = 0x25DE, + SMSG_FEATURE_SYSTEM_STATUS = 0x25CE, + SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25CF, + SMSG_FEIGN_DEATH_RESISTED = 0x2783, + SMSG_FISH_ESCAPED = 0x26F5, + SMSG_FISH_NOT_HOOKED = 0x26F4, SMSG_FLIGHT_SPLINE_SYNC = 0x2DF7, - SMSG_FORCED_DEATH_UPDATE = 0x2703, - SMSG_FORCE_ANIM = 0x2791, - SMSG_FORCE_OBJECT_RELINK = 0x2663, - SMSG_FRIEND_STATUS = 0x27C6, - SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25D3, - SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25D4, - SMSG_GAME_OBJECT_DESPAWN = 0x25D5, + SMSG_FORCED_DEATH_UPDATE = 0x2702, + SMSG_FORCE_ANIM = 0x2790, + SMSG_FORCE_OBJECT_RELINK = 0x2662, + SMSG_FRIEND_STATUS = 0x27C5, + SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25D2, + SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25D3, + SMSG_GAME_OBJECT_DESPAWN = 0x25D4, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4A, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C49, - SMSG_GAME_OBJECT_RESET_STATE = 0x2759, - SMSG_GAME_OBJECT_SET_STATE = 0x2831, - SMSG_GAME_OBJECT_UI_ACTION = 0x2756, - SMSG_GAME_SPEED_SET = 0x26A6, - SMSG_GAME_TIME_SET = 0x2747, - SMSG_GAME_TIME_UPDATE = 0x2746, + SMSG_GAME_OBJECT_RESET_STATE = 0x2758, + SMSG_GAME_OBJECT_SET_STATE = 0x2830, + SMSG_GAME_OBJECT_UI_ACTION = 0x2755, + SMSG_GAME_SPEED_SET = 0x26A5, + SMSG_GAME_TIME_SET = 0x2746, + SMSG_GAME_TIME_UPDATE = 0x2745, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2902, SMSG_GARRISON_ADD_MISSION_RESULT = 0x2906, SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x2918, @@ -1033,7 +1037,7 @@ enum OpcodeServer : uint32 SMSG_GARRISON_FOLLOWER_CHANGED_STATUS = 0x2915, SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x2912, SMSG_GARRISON_IS_UPGRADEABLE_RESULT = 0x2929, - SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27DB, + SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27DA, SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x28F7, SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x28F5, SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x2905, @@ -1061,25 +1065,25 @@ enum OpcodeServer : uint32 SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x28F8, SMSG_GARRISON_UPGRADE_RESULT = 0x28FD, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2583, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A1, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A0, SMSG_GET_DISPLAYED_TROPHY_LIST_RESPONSE = 0x2928, SMSG_GET_GARRISON_INFO_RESULT = 0x28F0, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27DA, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27D6, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x27FB, - SMSG_GM_PLAYER_INFO = 0x2777, - SMSG_GM_REQUEST_PLAYER_INFO = 0x25EA, - SMSG_GM_TICKET_CASE_STATUS = 0x26C9, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x26C8, - SMSG_GOD_MODE = 0x2735, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27D9, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27D5, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x27FA, + SMSG_GM_PLAYER_INFO = 0x2776, + SMSG_GM_REQUEST_PLAYER_INFO = 0x25E9, + SMSG_GM_TICKET_CASE_STATUS = 0x26C8, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x26C7, + SMSG_GOD_MODE = 0x2734, SMSG_GOSSIP_COMPLETE = 0x2A96, SMSG_GOSSIP_MESSAGE = 0x2A97, - SMSG_GOSSIP_POI = 0x27D3, + SMSG_GOSSIP_POI = 0x27D2, SMSG_GROUP_ACTION_THROTTLED = 0x259C, - SMSG_GROUP_DECLINE = 0x27CE, - SMSG_GROUP_DESTROYED = 0x27D0, - SMSG_GROUP_NEW_LEADER = 0x2646, - SMSG_GROUP_UNINVITE = 0x27CF, + SMSG_GROUP_DECLINE = 0x27CD, + SMSG_GROUP_DESTROYED = 0x27CF, + SMSG_GROUP_NEW_LEADER = 0x2645, + SMSG_GROUP_UNINVITE = 0x27CE, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1132,51 +1136,51 @@ enum OpcodeServer : uint32 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26F9, - SMSG_HIGHEST_THREAT_UPDATE = 0x2709, + SMSG_HEALTH_UPDATE = 0x26F8, + SMSG_HIGHEST_THREAT_UPDATE = 0x2708, SMSG_HOTFIX_NOTIFY = 0x25A1, SMSG_HOTFIX_NOTIFY_BLOB = 0x25A2, - SMSG_INITIALIZE_FACTIONS = 0x2761, + SMSG_INITIALIZE_FACTIONS = 0x2760, SMSG_INITIAL_SETUP = 0x257F, - SMSG_INIT_WORLD_STATES = 0x2788, + SMSG_INIT_WORLD_STATES = 0x2787, SMSG_INSPECT_HONOR_STATS = 0x25B0, - SMSG_INSPECT_PVP = 0x275D, - SMSG_INSPECT_RESULT = 0x264A, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27EA, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27E9, - SMSG_INSTANCE_ENCOUNTER_END = 0x27F0, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27E8, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27F2, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27F1, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27ED, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27EC, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27EF, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27F3, - SMSG_INSTANCE_ENCOUNTER_START = 0x27EE, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27EB, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x2733, - SMSG_INSTANCE_INFO = 0x264C, - SMSG_INSTANCE_RESET = 0x26AB, - SMSG_INSTANCE_RESET_FAILED = 0x26AC, - SMSG_INSTANCE_SAVE_CREATED = 0x27B8, - SMSG_INVALIDATE_PAGE_TEXT = 0x26FE, - SMSG_INVALIDATE_PLAYER = 0x26CF, - SMSG_INVALID_PROMOTION_CODE = 0x2792, - SMSG_INVENTORY_CHANGE_FAILURE = 0x275F, + SMSG_INSPECT_PVP = 0x275C, + SMSG_INSPECT_RESULT = 0x2649, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27E9, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27E8, + SMSG_INSTANCE_ENCOUNTER_END = 0x27EF, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27E7, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27F1, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27F0, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27EC, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27EB, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27EE, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27F2, + SMSG_INSTANCE_ENCOUNTER_START = 0x27ED, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27EA, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x2732, + SMSG_INSTANCE_INFO = 0x264B, + SMSG_INSTANCE_RESET = 0x26AA, + SMSG_INSTANCE_RESET_FAILED = 0x26AB, + SMSG_INSTANCE_SAVE_CREATED = 0x27B7, + SMSG_INVALIDATE_PAGE_TEXT = 0x26FD, + SMSG_INVALIDATE_PLAYER = 0x26CE, + SMSG_INVALID_PROMOTION_CODE = 0x2791, + SMSG_INVENTORY_CHANGE_FAILURE = 0x275E, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A83, - SMSG_ITEM_CHANGED = 0x271D, - SMSG_ITEM_COOLDOWN = 0x27FE, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2794, + SMSG_ITEM_CHANGED = 0x271C, + SMSG_ITEM_COOLDOWN = 0x27FD, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2793, SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25AF, SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25AD, - SMSG_ITEM_PUSH_RESULT = 0x2635, - SMSG_ITEM_TIME_UPDATE = 0x2793, - SMSG_KICK_REASON = 0x2821, + SMSG_ITEM_PUSH_RESULT = 0x2634, + SMSG_ITEM_TIME_UPDATE = 0x2792, + SMSG_KICK_REASON = 0x2820, SMSG_LEARNED_SPELLS = 0x2C4C, - SMSG_LEARN_PVP_TALENTS_FAILED = 0x25E7, - SMSG_LEARN_TALENTS_FAILED = 0x25E6, + SMSG_LEARN_PVP_TALENTS_FAILED = 0x25E6, + SMSG_LEARN_TALENTS_FAILED = 0x25E5, SMSG_LEVEL_UPDATE = 0x2587, - SMSG_LEVEL_UP_INFO = 0x271C, + SMSG_LEVEL_UP_INFO = 0x271B, SMSG_LFG_BOOT_PLAYER = 0x2A36, SMSG_LFG_DISABLED = 0x2A34, SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x2A25, @@ -1205,45 +1209,45 @@ enum OpcodeServer : uint32 SMSG_LF_GUILD_COMMAND_RESULT = 0x29D0, SMSG_LF_GUILD_POST = 0x29CD, SMSG_LF_GUILD_RECRUITS = 0x29CF, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27AF, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27AD, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A2, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27AE, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27AC, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A1, SMSG_LOAD_CUF_PROFILES = 0x25CB, - SMSG_LOAD_EQUIPMENT_SET = 0x2749, - SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x27FC, - SMSG_LOGIN_SET_TIME_SPEED = 0x2748, + SMSG_LOAD_EQUIPMENT_SET = 0x2748, + SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x27FB, + SMSG_LOGIN_SET_TIME_SPEED = 0x2747, SMSG_LOGIN_VERIFY_WORLD = 0x25AA, - SMSG_LOGOUT_CANCEL_ACK = 0x26AA, - SMSG_LOGOUT_COMPLETE = 0x26A9, - SMSG_LOGOUT_RESPONSE = 0x26A8, - SMSG_LOG_XP_GAIN = 0x2718, - SMSG_LOOT_ALL_PASSED = 0x2633, - SMSG_LOOT_ITEM_LIST = 0x2631, - SMSG_LOOT_LIST = 0x2780, - SMSG_LOOT_MONEY_NOTIFY = 0x262D, - SMSG_LOOT_RELEASE = 0x262C, - SMSG_LOOT_RELEASE_ALL = 0x262B, - SMSG_LOOT_REMOVED = 0x2626, - SMSG_LOOT_RESPONSE = 0x2625, - SMSG_LOOT_ROLL = 0x262F, - SMSG_LOOT_ROLLS_COMPLETE = 0x2632, - SMSG_LOOT_ROLL_WON = 0x2634, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2691, - SMSG_MAIL_COMMAND_RESULT = 0x2654, - SMSG_MAIL_LIST_RESULT = 0x2795, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2796, - SMSG_MAP_OBJECTIVES_INIT = 0x279E, - SMSG_MAP_OBJ_EVENTS = 0x25D6, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2630, + SMSG_LOGOUT_CANCEL_ACK = 0x26A9, + SMSG_LOGOUT_COMPLETE = 0x26A8, + SMSG_LOGOUT_RESPONSE = 0x26A7, + SMSG_LOG_XP_GAIN = 0x2717, + SMSG_LOOT_ALL_PASSED = 0x2632, + SMSG_LOOT_ITEM_LIST = 0x2630, + SMSG_LOOT_LIST = 0x277F, + SMSG_LOOT_MONEY_NOTIFY = 0x262C, + SMSG_LOOT_RELEASE = 0x262B, + SMSG_LOOT_RELEASE_ALL = 0x262A, + SMSG_LOOT_REMOVED = 0x2625, + SMSG_LOOT_RESPONSE = 0x2624, + SMSG_LOOT_ROLL = 0x262E, + SMSG_LOOT_ROLLS_COMPLETE = 0x2631, + SMSG_LOOT_ROLL_WON = 0x2633, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2690, + SMSG_MAIL_COMMAND_RESULT = 0x2653, + SMSG_MAIL_LIST_RESULT = 0x2794, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2795, + SMSG_MAP_OBJECTIVES_INIT = 0x279D, + SMSG_MAP_OBJ_EVENTS = 0x25D5, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x262F, SMSG_MESSAGE_BOX = 0x2575, - SMSG_MINIMAP_PING = 0x26F4, + SMSG_MINIMAP_PING = 0x26F3, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, - SMSG_MISSILE_CANCEL = 0x25D7, - SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27A6, - SMSG_MODIFY_COOLDOWN = 0x27A4, - SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27A5, - SMSG_MODIFY_PARTY_RANGE = 0x2783, + SMSG_MISSILE_CANCEL = 0x25D6, + SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27A5, + SMSG_MODIFY_COOLDOWN = 0x27A3, + SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27A4, + SMSG_MODIFY_PARTY_RANGE = 0x2782, SMSG_MOTD = 0x2BAF, SMSG_MOUNT_RESULT = 0x257A, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2DE1, @@ -1326,108 +1330,108 @@ enum OpcodeServer : uint32 SMSG_MOVE_UPDATE_TELEPORT = 0x2DAF, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DAB, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DA6, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25EF, - SMSG_NEW_TAXI_PATH = 0x26A3, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25EE, + SMSG_NEW_TAXI_PATH = 0x26A2, SMSG_NEW_WORLD = 0x25A9, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C42, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26CE, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26CD, SMSG_NOTIFY_MONEY = 0x25AC, - SMSG_NOTIFY_RECEIVED_MAIL = 0x2655, - SMSG_OFFER_PETITION_ERROR = 0x26DD, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x2719, + SMSG_NOTIFY_RECEIVED_MAIL = 0x2654, + SMSG_OFFER_PETITION_ERROR = 0x26DC, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x2718, SMSG_ON_MONSTER_MOVE = 0x2DA2, - SMSG_OPEN_CONTAINER = 0x2760, + SMSG_OPEN_CONTAINER = 0x275F, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A32, - SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27D5, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27D7, - SMSG_OVERRIDE_LIGHT = 0x26E3, - SMSG_PAGE_TEXT = 0x2755, - SMSG_PARTY_COMMAND_RESULT = 0x27D2, - SMSG_PARTY_INVITE = 0x25CD, - SMSG_PARTY_KILL_LOG = 0x279A, - SMSG_PARTY_MEMBER_STATE = 0x2798, - SMSG_PARTY_UPDATE = 0x2609, - SMSG_PAUSE_MIRROR_TIMER = 0x274B, - SMSG_PENDING_RAID_LOCK = 0x272D, + SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27D4, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27D6, + SMSG_OVERRIDE_LIGHT = 0x26E2, + SMSG_PAGE_TEXT = 0x2754, + SMSG_PARTY_COMMAND_RESULT = 0x27D1, + SMSG_PARTY_INVITE = 0x25CC, + SMSG_PARTY_KILL_LOG = 0x2799, + SMSG_PARTY_MEMBER_STATE = 0x2797, + SMSG_PARTY_UPDATE = 0x2608, + SMSG_PAUSE_MIRROR_TIMER = 0x274A, + SMSG_PENDING_RAID_LOCK = 0x272C, SMSG_PETITION_ALREADY_SIGNED = 0x25B6, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29F7, - SMSG_PETITION_SHOW_LIST = 0x26E6, - SMSG_PETITION_SHOW_SIGNATURES = 0x26E7, - SMSG_PETITION_SIGN_RESULTS = 0x278C, - SMSG_PET_ACTION_FEEDBACK = 0x278A, - SMSG_PET_ACTION_SOUND = 0x26C5, + SMSG_PETITION_SHOW_LIST = 0x26E5, + SMSG_PETITION_SHOW_SIGNATURES = 0x26E6, + SMSG_PETITION_SIGN_RESULTS = 0x278B, + SMSG_PET_ACTION_FEEDBACK = 0x2789, + SMSG_PET_ACTION_SOUND = 0x26C4, SMSG_PET_ADDED = 0x25A6, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2616, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2698, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x260F, - SMSG_PET_BATTLE_FINAL_ROUND = 0x2614, - SMSG_PET_BATTLE_FINISHED = 0x2615, - SMSG_PET_BATTLE_FIRST_ROUND = 0x2611, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2610, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2617, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x260E, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2652, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2653, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2613, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x260D, - SMSG_PET_BATTLE_ROUND_RESULT = 0x2612, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x2600, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2615, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2697, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x260E, + SMSG_PET_BATTLE_FINAL_ROUND = 0x2613, + SMSG_PET_BATTLE_FINISHED = 0x2614, + SMSG_PET_BATTLE_FIRST_ROUND = 0x2610, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x260F, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2616, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x260D, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2651, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x2652, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2612, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x260C, + SMSG_PET_BATTLE_ROUND_RESULT = 0x2611, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x25FF, SMSG_PET_CAST_FAILED = 0x2C56, SMSG_PET_CLEAR_SPELLS = 0x2C23, - SMSG_PET_DISMISS_SOUND = 0x26C6, - SMSG_PET_GOD_MODE = 0x26A0, - SMSG_PET_GUIDS = 0x273E, + SMSG_PET_DISMISS_SOUND = 0x26C5, + SMSG_PET_GOD_MODE = 0x269F, + SMSG_PET_GUIDS = 0x273D, SMSG_PET_LEARNED_SPELLS = 0x2C4E, SMSG_PET_MODE = 0x2589, - SMSG_PET_NAME_INVALID = 0x26EB, + SMSG_PET_NAME_INVALID = 0x26EA, SMSG_PET_SLOT_UPDATED = 0x2588, SMSG_PET_SPELLS_MESSAGE = 0x2C24, SMSG_PET_STABLE_LIST = 0x25A7, SMSG_PET_STABLE_RESULT = 0x25A8, - SMSG_PET_TAME_FAILURE = 0x26DA, + SMSG_PET_TAME_FAILURE = 0x26D9, SMSG_PET_UNLEARNED_SPELLS = 0x2C4F, SMSG_PHASE_SHIFT_CHANGE = 0x2577, - SMSG_PLAYED_TIME = 0x2705, + SMSG_PLAYED_TIME = 0x2704, SMSG_PLAYER_BOUND = 0x257D, SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F6, - SMSG_PLAYER_SKINNED = 0x2785, - SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x2799, - SMSG_PLAY_MUSIC = 0x27A9, - SMSG_PLAY_OBJECT_SOUND = 0x27AA, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x276F, + SMSG_PLAYER_SKINNED = 0x2784, + SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x2798, + SMSG_PLAY_MUSIC = 0x27A8, + SMSG_PLAY_OBJECT_SOUND = 0x27A9, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x276E, SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C46, - SMSG_PLAY_SCENE = 0x264F, - SMSG_PLAY_SOUND = 0x27A8, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x27AB, + SMSG_PLAY_SCENE = 0x264E, + SMSG_PLAY_SOUND = 0x27A7, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x27AA, SMSG_PLAY_SPELL_VISUAL = 0x2C44, SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C48, - SMSG_PLAY_TIME_WARNING = 0x2737, - SMSG_PONG = 0x304D, - SMSG_POWER_UPDATE = 0x26FA, - SMSG_PRESTIGE_AND_HONOR_INVOLUNTARILY_CHANGED = 0x2754, - SMSG_PRE_RESSURECT = 0x27A7, - SMSG_PRINT_NOTIFICATION = 0x25DE, - SMSG_PROC_RESIST = 0x279B, - SMSG_PROPOSE_LEVEL_GRANT = 0x270D, + SMSG_PLAY_TIME_WARNING = 0x2736, + SMSG_PONG = 0x304E, + SMSG_POWER_UPDATE = 0x26F9, + SMSG_PRESTIGE_AND_HONOR_INVOLUNTARILY_CHANGED = 0x2753, + SMSG_PRE_RESSURECT = 0x27A6, + SMSG_PRINT_NOTIFICATION = 0x25DD, + SMSG_PROC_RESIST = 0x279A, + SMSG_PROPOSE_LEVEL_GRANT = 0x270C, SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C50, - SMSG_PVP_CREDIT = 0x2713, + SMSG_PVP_CREDIT = 0x2712, SMSG_PVP_LOG_DATA = 0x25B1, SMSG_PVP_OPTIONS_ENABLED = 0x25B4, - SMSG_PVP_SEASON = 0x25D1, - SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x2700, - SMSG_QUERY_CREATURE_RESPONSE = 0x26F7, - SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x26F8, + SMSG_PVP_SEASON = 0x25D0, + SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x26FF, + SMSG_QUERY_CREATURE_RESPONSE = 0x26F6, + SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x26F7, SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE = 0x292B, SMSG_QUERY_GUILD_INFO_RESPONSE = 0x29E5, - SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x27FD, - SMSG_QUERY_NPC_TEXT_RESPONSE = 0x26FB, - SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x26FD, - SMSG_QUERY_PETITION_RESPONSE = 0x2701, - SMSG_QUERY_PET_NAME_RESPONSE = 0x26FF, - SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x26FC, + SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x27FC, + SMSG_QUERY_NPC_TEXT_RESPONSE = 0x26FA, + SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x26FC, + SMSG_QUERY_PETITION_RESPONSE = 0x2700, + SMSG_QUERY_PET_NAME_RESPONSE = 0x26FE, + SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x26FB, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A95, - SMSG_QUERY_QUEST_REWARD_RESPONSE = 0x2836, - SMSG_QUERY_TIME_RESPONSE = 0x2717, + SMSG_QUERY_QUEST_REWARD_RESPONSE = 0x2835, + SMSG_QUERY_TIME_RESPONSE = 0x2716, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8E, SMSG_QUEST_FORCE_REMOVED = 0x2A9A, @@ -1445,6 +1449,7 @@ enum OpcodeServer : uint32 SMSG_QUEST_POI_CHANGED = 0x2A9E, SMSG_QUEST_POI_QUERY_RESPONSE = 0x2A9B, SMSG_QUEST_PUSH_RESULT = 0x2A8F, + SMSG_QUEST_UNIGNORED = 0x2AA0, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x2A8B, SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x2A8C, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x2A8D, @@ -1452,113 +1457,113 @@ enum OpcodeServer : uint32 SMSG_QUEST_UPDATE_COMPLETE_BY_SPELL = 0x2A87, SMSG_QUEST_UPDATE_FAILED = 0x2A89, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8A, - SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27C3, - SMSG_RAID_DIFFICULTY_SET = 0x27E5, - SMSG_RAID_GROUP_ONLY = 0x27E7, + SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27C2, + SMSG_RAID_DIFFICULTY_SET = 0x27E4, + SMSG_RAID_GROUP_ONLY = 0x27E6, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB9, SMSG_RAID_MARKERS_CHANGED = 0x25B7, - SMSG_RANDOM_ROLL = 0x2649, + SMSG_RANDOM_ROLL = 0x2648, SMSG_RATED_BATTLEFIELD_INFO = 0x25A4, - SMSG_READY_CHECK_COMPLETED = 0x260C, - SMSG_READY_CHECK_RESPONSE = 0x260B, - SMSG_READY_CHECK_STARTED = 0x260A, - SMSG_READ_ITEM_RESULT_FAILED = 0x27E1, - SMSG_READ_ITEM_RESULT_OK = 0x27DC, - SMSG_REALM_QUERY_RESPONSE = 0x26E2, - SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27C4, - SMSG_REFER_A_FRIEND_EXPIRED = 0x275E, - SMSG_REFER_A_FRIEND_FAILURE = 0x26E8, - SMSG_REFRESH_COMPONENT = 0x2674, + SMSG_READY_CHECK_COMPLETED = 0x260B, + SMSG_READY_CHECK_RESPONSE = 0x260A, + SMSG_READY_CHECK_STARTED = 0x2609, + SMSG_READ_ITEM_RESULT_FAILED = 0x27E0, + SMSG_READ_ITEM_RESULT_OK = 0x27DB, + SMSG_REALM_QUERY_RESPONSE = 0x26E1, + SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27C3, + SMSG_REFER_A_FRIEND_EXPIRED = 0x275D, + SMSG_REFER_A_FRIEND_FAILURE = 0x26E7, + SMSG_REFRESH_COMPONENT = 0x2673, SMSG_REFRESH_SPELL_HISTORY = 0x2C2B, SMSG_REMOVE_ITEM_PASSIVE = 0x25BE, - SMSG_REMOVE_LOSS_OF_CONTROL = 0x2693, - SMSG_REPLACE_TROPHY_RESPONSE = 0x27FA, - SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26D6, - SMSG_REQUEST_ADDON_LIST = 0x265B, + SMSG_REMOVE_LOSS_OF_CONTROL = 0x2692, + SMSG_REPLACE_TROPHY_RESPONSE = 0x27F9, + SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26D5, + SMSG_REQUEST_ADDON_LIST = 0x265A, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x259D, - SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x25D2, + SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x25D1, SMSG_RESEARCH_COMPLETE = 0x2585, - SMSG_RESET_AREA_TRIGGER = 0x263D, - SMSG_RESET_COMPRESSION_CONTEXT = 0x304E, - SMSG_RESET_FAILED_NOTIFY = 0x26DE, - SMSG_RESET_RANGED_COMBAT_TIMER = 0x2710, + SMSG_RESET_AREA_TRIGGER = 0x263C, + SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, + SMSG_RESET_FAILED_NOTIFY = 0x26DD, + SMSG_RESET_RANGED_COMBAT_TIMER = 0x270F, SMSG_RESET_WEEKLY_CURRENCY = 0x2574, - SMSG_RESPEC_WIPE_CONFIRM = 0x2623, + SMSG_RESPEC_WIPE_CONFIRM = 0x2622, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2571, SMSG_RESUME_CAST_BAR = 0x2C3D, - SMSG_RESUME_COMMS = 0x304A, + SMSG_RESUME_COMMS = 0x304B, SMSG_RESUME_TOKEN = 0x25BC, SMSG_RESURRECT_REQUEST = 0x257E, - SMSG_RESYNC_RUNES = 0x273A, + SMSG_RESYNC_RUNES = 0x2739, SMSG_ROLE_CHANGED_INFORM = 0x258C, SMSG_ROLE_CHOSEN = 0x2A3A, SMSG_ROLE_POLL_INFORM = 0x258D, SMSG_RUNE_REGEN_DEBUG = 0x25C5, - SMSG_SCENARIO_BOOT = 0x27E2, - SMSG_SCENARIO_COMPLETED = 0x281D, - SMSG_SCENARIO_POIS = 0x264B, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x2645, - SMSG_SCENARIO_SPELL_UPDATE = 0x2829, - SMSG_SCENARIO_STATE = 0x2644, - SMSG_SCENE_OBJECT_EVENT = 0x25F5, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FA, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FB, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25F7, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25F6, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25F9, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25F8, + SMSG_SCENARIO_BOOT = 0x27E1, + SMSG_SCENARIO_COMPLETED = 0x281C, + SMSG_SCENARIO_POIS = 0x264A, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x2644, + SMSG_SCENARIO_SPELL_UPDATE = 0x2828, + SMSG_SCENARIO_STATE = 0x2643, + SMSG_SCENE_OBJECT_EVENT = 0x25F4, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25F9, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FA, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25F6, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25F5, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25F8, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25F7, SMSG_SCRIPT_CAST = 0x2C54, - SMSG_SELL_RESPONSE = 0x26EC, + SMSG_SELL_RESPONSE = 0x26EB, SMSG_SEND_ITEM_PASSIVES = 0x25BF, SMSG_SEND_KNOWN_SPELLS = 0x2C29, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x2647, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2648, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x2646, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2647, SMSG_SEND_SPELL_CHARGES = 0x2C2C, SMSG_SEND_SPELL_HISTORY = 0x2C2A, SMSG_SEND_UNLEARN_SPELLS = 0x2C2D, SMSG_SERVER_FIRST_ACHIEVEMENT = 0x2BC1, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x2666, - SMSG_SERVER_TIME = 0x26A7, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x2665, + SMSG_SERVER_TIME = 0x26A6, SMSG_SETUP_CURRENCY = 0x2572, SMSG_SETUP_RESEARCH_HISTORY = 0x2584, - SMSG_SET_AI_ANIM_KIT = 0x276E, - SMSG_SET_ALL_TASK_PROGRESS = 0x27CC, - SMSG_SET_ANIM_TIER = 0x2772, + SMSG_SET_AI_ANIM_KIT = 0x276D, + SMSG_SET_ALL_TASK_PROGRESS = 0x27CB, + SMSG_SET_ANIM_TIER = 0x2771, SMSG_SET_CURRENCY = 0x2573, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x26CA, - SMSG_SET_FACTION_AT_WAR = 0x2739, - SMSG_SET_FACTION_NOT_VISIBLE = 0x2769, - SMSG_SET_FACTION_STANDING = 0x276A, - SMSG_SET_FACTION_VISIBLE = 0x2768, + SMSG_SET_DUNGEON_DIFFICULTY = 0x26C9, + SMSG_SET_FACTION_AT_WAR = 0x2738, + SMSG_SET_FACTION_NOT_VISIBLE = 0x2768, + SMSG_SET_FACTION_STANDING = 0x2769, + SMSG_SET_FACTION_VISIBLE = 0x2767, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36, - SMSG_SET_FORCED_REACTIONS = 0x2758, + SMSG_SET_FORCED_REACTIONS = 0x2757, SMSG_SET_ITEM_PURCHASE_DATA = 0x25AE, - SMSG_SET_LOOT_METHOD_FAILED = 0x2809, + SMSG_SET_LOOT_METHOD_FAILED = 0x2808, SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25B5, - SMSG_SET_MELEE_ANIM_KIT = 0x2771, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x2770, + SMSG_SET_MELEE_ANIM_KIT = 0x2770, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x276F, SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37, - SMSG_SET_PET_SPECIALIZATION = 0x263E, - SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2704, + SMSG_SET_PET_SPECIALIZATION = 0x263D, + SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2703, SMSG_SET_PLAY_HOVER_ANIM = 0x25C9, - SMSG_SET_PROFICIENCY = 0x2773, + SMSG_SET_PROFICIENCY = 0x2772, SMSG_SET_SPELL_CHARGES = 0x2C28, - SMSG_SET_TASK_COMPLETE = 0x27CD, - SMSG_SET_TIME_ZONE_INFORMATION = 0x269B, - SMSG_SET_VEHICLE_REC_ID = 0x272C, - SMSG_SHOW_ADVENTURE_MAP = 0x2827, - SMSG_SHOW_BANK = 0x26A4, - SMSG_SHOW_MAILBOX = 0x27E3, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25EE, - SMSG_SHOW_TAXI_NODES = 0x26F3, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27B0, - SMSG_SOCKET_GEMS = 0x2765, - SMSG_SOCKET_GEMS_FAILURE = 0x2766, - SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25F0, - SMSG_SPECIALIZATION_CHANGED = 0x25E9, - SMSG_SPECIAL_MOUNT_ANIM = 0x26C4, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2753, + SMSG_SET_TASK_COMPLETE = 0x27CC, + SMSG_SET_TIME_ZONE_INFORMATION = 0x269A, + SMSG_SET_VEHICLE_REC_ID = 0x272B, + SMSG_SHOW_ADVENTURE_MAP = 0x2826, + SMSG_SHOW_BANK = 0x26A3, + SMSG_SHOW_MAILBOX = 0x27E2, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25ED, + SMSG_SHOW_TAXI_NODES = 0x26F2, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27AF, + SMSG_SOCKET_GEMS = 0x2764, + SMSG_SOCKET_GEMS_FAILURE = 0x2765, + SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25EF, + SMSG_SPECIALIZATION_CHANGED = 0x25E8, + SMSG_SPECIAL_MOUNT_ANIM = 0x26C3, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2752, SMSG_SPELL_ABSORB_LOG = 0x2C1E, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17, SMSG_SPELL_CHANNEL_START = 0x2C34, @@ -1582,112 +1587,111 @@ enum OpcodeServer : uint32 SMSG_SPELL_PREPARE = 0x2C38, SMSG_SPELL_START = 0x2C3A, SMSG_SPELL_UPDATE_CHAIN_TARGETS = 0x2C33, - SMSG_SPIRIT_HEALER_CONFIRM = 0x2750, - SMSG_STAND_STATE_UPDATE = 0x2757, - SMSG_START_ELAPSED_TIMER = 0x2618, - SMSG_START_ELAPSED_TIMERS = 0x261A, - SMSG_START_LOOT_ROLL = 0x262E, - SMSG_START_MIRROR_TIMER = 0x274A, + SMSG_SPIRIT_HEALER_CONFIRM = 0x274F, + SMSG_STAND_STATE_UPDATE = 0x2756, + SMSG_START_ELAPSED_TIMER = 0x2617, + SMSG_START_ELAPSED_TIMERS = 0x2619, + SMSG_START_LOOT_ROLL = 0x262D, + SMSG_START_MIRROR_TIMER = 0x2749, SMSG_START_TIMER = 0x25B9, - SMSG_STOP_ELAPSED_TIMER = 0x2619, - SMSG_STOP_MIRROR_TIMER = 0x274C, - SMSG_STOP_SPEAKERBOT_SOUND = 0x27AC, + SMSG_STOP_ELAPSED_TIMER = 0x2618, + SMSG_STOP_MIRROR_TIMER = 0x274B, + SMSG_STOP_SPEAKERBOT_SOUND = 0x27AB, SMSG_STREAMING_MOVIES = 0x25B8, - SMSG_SUMMON_CANCEL = 0x26D5, + SMSG_SUMMON_CANCEL = 0x26D4, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258E, - SMSG_SUMMON_REQUEST = 0x275C, + SMSG_SUMMON_REQUEST = 0x275B, SMSG_SUPERCEDED_SPELLS = 0x2C4B, - SMSG_SUPPRESS_NPC_GREETINGS = 0x25CC, - SMSG_SUSPEND_COMMS = 0x3049, + SMSG_SUSPEND_COMMS = 0x304A, SMSG_SUSPEND_TOKEN = 0x25BB, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2752, - SMSG_TAXI_NODE_STATUS = 0x26A1, - SMSG_TEXT_EMOTE = 0x269F, - SMSG_THREAT_CLEAR = 0x270C, - SMSG_THREAT_REMOVE = 0x270B, - SMSG_THREAT_UPDATE = 0x270A, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2751, + SMSG_TAXI_NODE_STATUS = 0x26A0, + SMSG_TEXT_EMOTE = 0x269E, + SMSG_THREAT_CLEAR = 0x270B, + SMSG_THREAT_REMOVE = 0x270A, + SMSG_THREAT_UPDATE = 0x2709, SMSG_TIME_ADJUSTMENT = 0x2DA1, SMSG_TIME_SYNC_REQUEST = 0x2DA0, - SMSG_TITLE_EARNED = 0x2707, - SMSG_TITLE_LOST = 0x2708, - SMSG_TOTEM_CREATED = 0x26EF, - SMSG_TOTEM_MOVED = 0x26F0, + SMSG_TITLE_EARNED = 0x2706, + SMSG_TITLE_LOST = 0x2707, + SMSG_TOTEM_CREATED = 0x26EE, + SMSG_TOTEM_MOVED = 0x26EF, SMSG_TRADE_STATUS = 0x2581, SMSG_TRADE_UPDATED = 0x2580, - SMSG_TRAINER_BUY_FAILED = 0x2712, - SMSG_TRAINER_LIST = 0x2711, - SMSG_TRANSFER_ABORTED = 0x273D, - SMSG_TRANSFER_PENDING = 0x25E2, + SMSG_TRAINER_BUY_FAILED = 0x2711, + SMSG_TRAINER_LIST = 0x2710, + SMSG_TRANSFER_ABORTED = 0x273C, + SMSG_TRANSFER_PENDING = 0x25E1, SMSG_TRANSMOG_COLLECTION_UPDATE = 0x25C4, - SMSG_TRIGGER_CINEMATIC = 0x2801, - SMSG_TRIGGER_MOVIE = 0x26F1, - SMSG_TURN_IN_PETITION_RESULT = 0x278E, - SMSG_TUTORIAL_FLAGS = 0x27F4, - SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x2830, - SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x282F, + SMSG_TRIGGER_CINEMATIC = 0x2800, + SMSG_TRIGGER_MOVIE = 0x26F0, + SMSG_TURN_IN_PETITION_RESULT = 0x278D, + SMSG_TUTORIAL_FLAGS = 0x27F3, + SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x282F, + SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x282E, SMSG_TWITTER_STATUS = 0x2FFD, - SMSG_UI_TIME = 0x274F, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2804, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x2805, + SMSG_UI_TIME = 0x274E, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2803, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x2804, SMSG_UNLEARNED_SPELLS = 0x2C4D, - SMSG_UPDATE_ACCOUNT_DATA = 0x2744, - SMSG_UPDATE_ACTION_BUTTONS = 0x25F3, - SMSG_UPDATE_CHARACTER_FLAGS = 0x27F9, + SMSG_UPDATE_ACCOUNT_DATA = 0x2743, + SMSG_UPDATE_ACTION_BUTTONS = 0x25F2, + SMSG_UPDATE_CHARACTER_FLAGS = 0x27F8, SMSG_UPDATE_DUNGEON_ENCOUNTER_FOR_LOOT = 0x2A31, - SMSG_UPDATE_EXPANSION_LEVEL = 0x265F, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26CD, - SMSG_UPDATE_LAST_INSTANCE = 0x26AD, - SMSG_UPDATE_OBJECT = 0x2802, - SMSG_UPDATE_TALENT_DATA = 0x25E8, - SMSG_UPDATE_TASK_PROGRESS = 0x27CB, + SMSG_UPDATE_EXPANSION_LEVEL = 0x265E, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26CC, + SMSG_UPDATE_LAST_INSTANCE = 0x26AC, + SMSG_UPDATE_OBJECT = 0x2801, + SMSG_UPDATE_TALENT_DATA = 0x25E7, + SMSG_UPDATE_TASK_PROGRESS = 0x27CA, SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19, - SMSG_UPDATE_WORLD_STATE = 0x2789, + SMSG_UPDATE_WORLD_STATE = 0x2788, SMSG_USERLIST_ADD = 0x2BBE, SMSG_USERLIST_REMOVE = 0x2BBF, SMSG_USERLIST_UPDATE = 0x2BC0, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x278F, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x278E, SMSG_VENDOR_INVENTORY = 0x25C7, - SMSG_VIGNETTE_UPDATE = 0x27AE, + SMSG_VIGNETTE_UPDATE = 0x27AD, SMSG_VOICE_CHAT_STATUS = 0x2BB3, SMSG_VOICE_PARENTAL_CONTROLS = 0x2BB4, SMSG_VOICE_SESSION_LEAVE = 0x2BB6, SMSG_VOICE_SESSION_ROSTER_UPDATE = 0x2BB5, - SMSG_VOID_ITEM_SWAP_RESPONSE = 0x25DC, - SMSG_VOID_STORAGE_CONTENTS = 0x25D9, - SMSG_VOID_STORAGE_FAILED = 0x25D8, - SMSG_VOID_STORAGE_TRANSFER_CHANGES = 0x25DA, - SMSG_VOID_TRANSFER_RESULT = 0x25DB, + SMSG_VOID_ITEM_SWAP_RESPONSE = 0x25DB, + SMSG_VOID_STORAGE_CONTENTS = 0x25D8, + SMSG_VOID_STORAGE_FAILED = 0x25D7, + SMSG_VOID_STORAGE_TRANSFER_CHANGES = 0x25D9, + SMSG_VOID_TRANSFER_RESULT = 0x25DA, SMSG_WAIT_QUEUE_FINISH = 0x256E, SMSG_WAIT_QUEUE_UPDATE = 0x256D, SMSG_WARDEN_DATA = 0x2576, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x25B2, - SMSG_WEATHER = 0x26CC, + SMSG_WEATHER = 0x26CB, SMSG_WEEKLY_SPELL_USAGE = 0x2C18, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x26CB, + SMSG_WHO_IS = 0x26CA, SMSG_WORLD_SERVER_INFO = 0x25C0, - SMSG_WORLD_TEXT = 0x281F, - SMSG_WOW_TOKEN_AUCTION_SOLD = 0x280F, - SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x2811, - SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x2812, - SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x2810, - SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x280A, - SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x280B, - SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x280C, - SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2813, - SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2814, - SMSG_WOW_TOKEN_REDEEM_RESULT = 0x2815, - SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x280D, - SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x280E, - SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x2816, - SMSG_XP_GAIN_ABORTED = 0x25DD, - SMSG_XP_GAIN_ENABLED = 0x27E6, + SMSG_WORLD_TEXT = 0x281E, + SMSG_WOW_TOKEN_AUCTION_SOLD = 0x280E, + SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x2810, + SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x2811, + SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x280F, + SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x2809, + SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x280A, + SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x280B, + SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2812, + SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2813, + SMSG_WOW_TOKEN_REDEEM_RESULT = 0x2814, + SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x280C, + SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x280D, + SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x2815, + SMSG_XP_GAIN_ABORTED = 0x25DC, + SMSG_XP_GAIN_ENABLED = 0x27E5, SMSG_ZONE_UNDER_ATTACK = 0x2BBA, // Opcodes that are not generated automatically SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0xBADD, // no client handler - SMSG_COMPRESSED_PACKET = 0x3051, - SMSG_MULTIPLE_PACKETS = 0x3050, + SMSG_COMPRESSED_PACKET = 0x3052, + SMSG_MULTIPLE_PACKETS = 0x3051, // Deleted opcodes, here only to allow compile SMSG_ARENA_TEAM_STATS = 0xBADD, diff --git a/src/server/game/Server/Protocol/ServerPktHeader.h b/src/server/game/Server/Protocol/ServerPktHeader.h deleted file mode 100644 index d3fe37de94a..00000000000 --- a/src/server/game/Server/Protocol/ServerPktHeader.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> - * - * 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 __SERVERPKTHDR_H__ -#define __SERVERPKTHDR_H__ - -#pragma pack(push, 1) - -union ServerPktHeader -{ - struct - { - uint16 Size; - uint16 Command; - } Setup; - - struct - { - uint32 Size; - uint16 Command; - } Normal; -}; - -#pragma pack(pop) - -#endif diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 25b7116aa99..12a62619798 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -56,24 +56,23 @@ private: using boost::asio::ip::tcp; -uint32 const WorldSocket::ConnectionInitializeMagic = 0xF5EB1CE; std::string const WorldSocket::ServerConnectionInitialize("WORLD OF WARCRAFT CONNECTION - SERVER TO CLIENT"); -std::string const WorldSocket::ClientConnectionInitialize("WORLD OF WARCRAFT CONNECTION - CLIENT TO SERVER", 48); +std::string const WorldSocket::ClientConnectionInitialize("WORLD OF WARCRAFT CONNECTION - CLIENT TO SERVER"); uint32 const WorldSocket::MinSizeForCompression = 0x400; -uint32 const SizeOfClientHeader[2] = { sizeof(uint16) + sizeof(uint16), sizeof(uint32) + sizeof(uint16) }; -uint32 const SizeOfServerHeader[2] = { sizeof(uint16) + sizeof(uint16), sizeof(uint32) + sizeof(uint16) }; +uint32 const SizeOfClientHeader = sizeof(uint32) + sizeof(uint16); +uint32 const SizeOfServerHeader = sizeof(uint32) + sizeof(uint16); uint8 const WorldSocket::AuthCheckSeed[16] = { 0xC5, 0xC6, 0x98, 0x95, 0x76, 0x3F, 0x1D, 0xCD, 0xB6, 0xA1, 0x37, 0x28, 0xB3, 0x12, 0xFF, 0x8A }; uint8 const WorldSocket::SessionKeySeed[16] = { 0x58, 0xCB, 0xCF, 0x40, 0xFE, 0x2E, 0xCE, 0xA6, 0x5A, 0x90, 0xB8, 0x01, 0x68, 0x6C, 0x28, 0x0B }; uint8 const WorldSocket::ContinuedSessionSeed[16] = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F }; WorldSocket::WorldSocket(tcp::socket&& socket) : Socket(std::move(socket)), - _type(CONNECTION_TYPE_REALM), _OverSpeedPings(0), + _type(CONNECTION_TYPE_REALM), _key(0), _OverSpeedPings(0), _worldSession(nullptr), _authed(false), _compressionStream(nullptr) { _serverChallenge.SetRand(8 * 16); - _headerBuffer.Resize(SizeOfClientHeader[0]); + _headerBuffer.Resize(SizeOfClientHeader); } WorldSocket::~WorldSocket() @@ -120,16 +119,13 @@ void WorldSocket::CheckIpCallback(PreparedQueryResult result) } } - _packetBuffer.Resize(4 + 2 + ClientConnectionInitialize.length()); + _packetBuffer.Resize(ClientConnectionInitialize.length() + 1); AsyncReadWithCallback(&WorldSocket::InitializeHandler); MessageBuffer initializer; - ServerPktHeader header; - header.Setup.Size = ServerConnectionInitialize.size(); - initializer.Write(&ConnectionInitializeMagic, sizeof(ConnectionInitializeMagic)); - initializer.Write(&header, sizeof(header.Setup.Size)); initializer.Write(ServerConnectionInitialize.c_str(), ServerConnectionInitialize.length()); + initializer.Write("\n", 1); // - io_service.run thread, safe. QueuePacket(std::move(initializer)); @@ -163,26 +159,17 @@ void WorldSocket::InitializeHandler(boost::system::error_code error, std::size_t return; } - uint32 magic; - uint16 length; ByteBuffer buffer(std::move(_packetBuffer)); - - buffer >> magic; - if (magic != ConnectionInitializeMagic) - { - CloseSocket(); - return; - } - - buffer >> length; - if (length > ClientConnectionInitialize.length()) + std::string initializer = buffer.ReadString(ClientConnectionInitialize.length()); + if (initializer != ClientConnectionInitialize) { CloseSocket(); return; } - std::string initializer = buffer.ReadString(length); - if (initializer != ClientConnectionInitialize) + uint8 terminator; + buffer >> terminator; + if (terminator != '\n') { CloseSocket(); return; @@ -218,22 +205,21 @@ bool WorldSocket::Update() MessageBuffer buffer; while (_bufferQueue.Dequeue(queued)) { - uint32 sizeOfHeader = SizeOfServerHeader[queued->NeedsEncryption()]; uint32 packetSize = queued->size(); if (packetSize > MinSizeForCompression && queued->NeedsEncryption()) packetSize = compressBound(packetSize) + sizeof(CompressedWorldPacket); - if (buffer.GetRemainingSpace() < packetSize + sizeOfHeader) + if (buffer.GetRemainingSpace() < packetSize + SizeOfServerHeader) { QueuePacket(std::move(buffer)); buffer.Resize(4096); } - if (buffer.GetRemainingSpace() >= packetSize + sizeOfHeader) + if (buffer.GetRemainingSpace() >= packetSize + SizeOfServerHeader) WritePacketToBuffer(*queued, buffer); else // single packet larger than 4096 bytes { - MessageBuffer packetBuffer(packetSize + sizeOfHeader); + MessageBuffer packetBuffer(packetSize + SizeOfServerHeader); WritePacketToBuffer(*queued, packetBuffer); QueuePacket(std::move(packetBuffer)); } @@ -340,20 +326,6 @@ void WorldSocket::ReadHandler() AsyncRead(); } -void WorldSocket::ExtractOpcodeAndSize(ClientPktHeader const* header, uint32& opcode, uint32& size) const -{ - if (_authCrypt.IsInitialized()) - { - opcode = header->Normal.Command; - size = header->Normal.Size - 2; - } - else - { - opcode = header->Setup.Command; - size = header->Setup.Size - 2; - } -} - void WorldSocket::SetWorldSession(WorldSession* session) { std::lock_guard<std::mutex> sessionGuard(_worldSessionLock); @@ -363,36 +335,28 @@ void WorldSocket::SetWorldSession(WorldSession* session) bool WorldSocket::ReadHeaderHandler() { - ASSERT(_headerBuffer.GetActiveSize() == SizeOfClientHeader[_authCrypt.IsInitialized()], "Header size " SZFMTD " different than expected %u", _headerBuffer.GetActiveSize(), SizeOfClientHeader[_authCrypt.IsInitialized()]); + ASSERT(_headerBuffer.GetActiveSize() == SizeOfClientHeader, "Header size " SZFMTD " different than expected %u", _headerBuffer.GetActiveSize(), SizeOfClientHeader); _authCrypt.DecryptRecv(_headerBuffer.GetReadPointer(), 4); - ClientPktHeader* header = reinterpret_cast<ClientPktHeader*>(_headerBuffer.GetReadPointer()); - uint32 opcode; - uint32 size; - - ExtractOpcodeAndSize(header, opcode, size); + PacketHeader* header = reinterpret_cast<PacketHeader*>(_headerBuffer.GetReadPointer()); + header->Size -= 2; - if (!ClientPktHeader::IsValidSize(size) || !ClientPktHeader::IsValidOpcode(opcode)) + if (!header->IsValidSize() || !header->IsValidOpcode()) { TC_LOG_ERROR("network", "WorldSocket::ReadHeaderHandler(): client %s sent malformed packet (size: %u, cmd: %u)", - GetRemoteIpAddress().to_string().c_str(), size, opcode); + GetRemoteIpAddress().to_string().c_str(), header->Size, header->Command); return false; } - _packetBuffer.Resize(size); + _packetBuffer.Resize(header->Size); return true; } WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler() { - ClientPktHeader* header = reinterpret_cast<ClientPktHeader*>(_headerBuffer.GetReadPointer()); - uint32 cmd; - uint32 size; - - ExtractOpcodeAndSize(header, cmd, size); - - OpcodeClient opcode = static_cast<OpcodeClient>(cmd); + PacketHeader* header = reinterpret_cast<PacketHeader*>(_headerBuffer.GetReadPointer()); + OpcodeClient opcode = static_cast<OpcodeClient>(header->Command); WorldPacket packet(opcode, std::move(_packetBuffer), GetConnectionType()); @@ -459,6 +423,10 @@ WorldSocket::ReadDataHandlerResult WorldSocket::ReadDataHandler() HandleConnectToFailed(connectToFailed); break; } + case CMSG_ENABLE_ENCRYPTION_ACK: + LogOpcodeText(opcode, sessionGuard); + HandleEnableEncryptionAck(); + break; default: { sessionGuard.lock(); @@ -523,14 +491,12 @@ void WorldSocket::SendPacket(WorldPacket const& packet) void WorldSocket::WritePacketToBuffer(EncryptablePacket const& packet, MessageBuffer& buffer) { - ServerPktHeader header; - uint32 sizeOfHeader = SizeOfServerHeader[packet.NeedsEncryption()]; uint32 opcode = packet.GetOpcode(); uint32 packetSize = packet.size(); // Reserve space for buffer uint8* headerPos = buffer.GetWritePointer(); - buffer.WriteCompleted(sizeOfHeader); + buffer.WriteCompleted(SizeOfServerHeader); if (packetSize > MinSizeForCompression && packet.NeedsEncryption()) { @@ -557,19 +523,12 @@ void WorldSocket::WritePacketToBuffer(EncryptablePacket const& packet, MessageBu packetSize += 2 /*opcode*/; - if (packet.NeedsEncryption()) - { - header.Normal.Size = packetSize; - header.Normal.Command = opcode; - _authCrypt.EncryptSend((uint8*)&header, 4); - } - else - { - header.Setup.Size = packetSize; - header.Setup.Command = opcode; - } + PacketHeader header; + header.Size = packetSize; + header.Command = opcode; + _authCrypt.EncryptSend((uint8*)&header, 4); - memcpy(headerPos, &header, sizeOfHeader); + memcpy(headerPos, &header, SizeOfServerHeader); } uint32 WorldSocket::CompressPacket(uint8* buffer, WorldPacket const& packet) @@ -666,9 +625,6 @@ struct AccountInfo void WorldSocket::HandleAuthSession(std::shared_ptr<WorldPackets::Auth::AuthSession> authSession) { - // Client switches packet headers after sending CMSG_AUTH_SESSION - _headerBuffer.Resize(SizeOfClientHeader[1]); - // Get the account information from the auth database PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME); stmt->setInt32(0, int32(realm.Id.Realm)); @@ -718,10 +674,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth:: SessionKeyGenerator<SHA256Hash> sessionKeyGenerator(sessionKeyHmac.GetDigest(), sessionKeyHmac.GetLength()); sessionKeyGenerator.Generate(sessionKey, 40); - BigNumber K; - K.SetBinary(sessionKey, 40); - - _authCrypt.Init(&K); + _sessionKey.SetBinary(sessionKey, 40); // As we don't know if attempted login process by ip works, we update last_attempt_ip right away PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_LAST_ATTEMPT_IP); @@ -731,7 +684,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth:: // This also allows to check for possible "hack" attempts on account stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_ACCOUNT_INFO_CONTINUED_SESSION); - stmt->setString(0, K.AsHexStr()); + stmt->setString(0, _sessionKey.AsHexStr()); stmt->setUInt32(1, account.Game.Id); LoginDatabase.Execute(stmt); @@ -841,7 +794,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth:: // Initialize Warden system only if it is enabled by config if (wardenActive) - _worldSession->InitWarden(&account.Game.SessionKey); + _worldSession->InitWarden(&_sessionKey); _queryCallback = std::bind(&WorldSocket::LoadSessionPermissionsCallback, this, std::placeholders::_1); _queryFuture = _worldSession->LoadPermissionsAsync(); @@ -853,7 +806,7 @@ void WorldSocket::LoadSessionPermissionsCallback(PreparedQueryResult result) // RBAC must be loaded before adding session to check for skip queue permission _worldSession->GetRBACData()->LoadFromDBCallback(result); - sWorld->AddSession(_worldSession); + SendPacketAndLogOpcode(*WorldPackets::Auth::EnableEncryption().Write()); } void WorldSocket::HandleAuthContinuedSession(std::shared_ptr<WorldPackets::Auth::AuthContinuedSession> authSession) @@ -869,9 +822,6 @@ void WorldSocket::HandleAuthContinuedSession(std::shared_ptr<WorldPackets::Auth: return; } - // Client switches packet headers after sending CMSG_AUTH_CONTINUED_SESSION - _headerBuffer.Resize(SizeOfClientHeader[1]); - uint32 accountId = uint32(key.Fields.AccountId); PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_INFO_CONTINUED_SESSION); stmt->setUInt32(0, accountId); @@ -890,17 +840,14 @@ void WorldSocket::HandleAuthContinuedSessionCallback(std::shared_ptr<WorldPacket } WorldSession::ConnectToKey key; - key.Raw = authSession->Key; + _key = key.Raw = authSession->Key; uint32 accountId = uint32(key.Fields.AccountId); Field* fields = result->Fetch(); std::string login = fields[0].GetString(); - BigNumber k; - k.SetHexStr(fields[1].GetCString()); + _sessionKey.SetHexStr(fields[1].GetCString()); - _authCrypt.Init(&k, _encryptSeed.AsByteArray().get(), _decryptSeed.AsByteArray().get()); - - HmacSha256 hmac(40, k.AsByteArray(40).get()); + HmacSha256 hmac(40, _sessionKey.AsByteArray(40).get()); hmac.UpdateData(reinterpret_cast<uint8 const*>(&authSession->Key), sizeof(authSession->Key)); hmac.UpdateData(authSession->LocalChallenge.data(), authSession->LocalChallenge.size()); hmac.UpdateData(_serverChallenge.AsByteArray(16).get(), 16); @@ -914,7 +861,7 @@ void WorldSocket::HandleAuthContinuedSessionCallback(std::shared_ptr<WorldPacket return; } - sWorld->AddInstanceSocket(shared_from_this(), authSession->Key); + SendPacketAndLogOpcode(*WorldPackets::Auth::EnableEncryption().Write()); AsyncRead(); } @@ -956,6 +903,20 @@ void WorldSocket::HandleConnectToFailed(WorldPackets::Auth::ConnectToFailed& con } } +void WorldSocket::HandleEnableEncryptionAck() +{ + if (_type == CONNECTION_TYPE_REALM) + { + _authCrypt.Init(&_sessionKey); + sWorld->AddSession(_worldSession); + } + else + { + _authCrypt.Init(&_sessionKey, _encryptSeed.AsByteArray().get(), _decryptSeed.AsByteArray().get()); + sWorld->AddInstanceSocket(shared_from_this(), _key); + } +} + void WorldSocket::SendAuthResponseError(uint32 code) { WorldPackets::Auth::AuthResponse response; diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h index 5aed861e613..44f253d0864 100644 --- a/src/server/game/Server/WorldSocket.h +++ b/src/server/game/Server/WorldSocket.h @@ -21,7 +21,6 @@ #include "Common.h" #include "WorldPacketCrypt.h" -#include "ServerPktHeader.h" #include "Socket.h" #include "Util.h" #include "WorldPacket.h" @@ -47,29 +46,19 @@ namespace WorldPackets #pragma pack(push, 1) -union ClientPktHeader +struct PacketHeader { - struct - { - uint16 Size; - uint16 Command; - } Setup; - - struct - { - uint32 Size; - uint16 Command; - } Normal; + uint32 Size; + uint16 Command; - static bool IsValidSize(uint32 size) { return size < 10240; } - static bool IsValidOpcode(uint32 opcode) { return opcode < NUM_OPCODE_HANDLERS; } + bool IsValidSize() { return Size < 10240; } + bool IsValidOpcode() { return Command < NUM_OPCODE_HANDLERS; } }; #pragma pack(pop) class TC_GAME_API WorldSocket : public Socket<WorldSocket> { - static uint32 const ConnectionInitializeMagic; static std::string const ServerConnectionInitialize; static std::string const ClientConnectionInitialize; static uint32 const MinSizeForCompression; @@ -129,17 +118,18 @@ private: void HandleAuthContinuedSessionCallback(std::shared_ptr<WorldPackets::Auth::AuthContinuedSession> authSession, PreparedQueryResult result); void LoadSessionPermissionsCallback(PreparedQueryResult result); void HandleConnectToFailed(WorldPackets::Auth::ConnectToFailed& connectToFailed); + void HandleEnableEncryptionAck(); bool HandlePing(WorldPacket& recvPacket); - void ExtractOpcodeAndSize(ClientPktHeader const* header, uint32& opcode, uint32& size) const; - ConnectionType _type; + uint64 _key; BigNumber _serverChallenge; WorldPacketCrypt _authCrypt; BigNumber _encryptSeed; BigNumber _decryptSeed; + BigNumber _sessionKey; std::chrono::steady_clock::time_point _LastPingTime; uint32 _OverSpeedPings; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8aa8bfc404d..005d15d8291 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -7330,7 +7330,7 @@ void Spell::PrepareTriggersExecutedOnHit() // Global cooldowns management enum GCDLimits { - MIN_GCD = 1000, + MIN_GCD = 750, MAX_GCD = 1500 }; |