diff options
36 files changed, 2104 insertions, 1860 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index 5661ad48d86..f809ddc3333 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -728,7 +728,9 @@ INSERT INTO `build_info` VALUES (50622,10,1,5,NULL,NULL,'D23A26FD75FD9A6073EB7060AA28E6A7',NULL,NULL,NULL), (50747,10,1,5,NULL,NULL,'2D3C386A9C45C27304ED3A3C6EB3F7C8',NULL,NULL,NULL), (50791,10,1,5,NULL,NULL,'0BE7D0BB07EF37C25CBC682409091EA0',NULL,NULL,NULL), -(51130,10,1,5,NULL,NULL,'44CD2C91E4F0655DA387483726CE4035',NULL,NULL,NULL); +(51130,10,1,5,NULL,NULL,'44CD2C91E4F0655DA387483726CE4035',NULL,NULL,NULL), +(51187,10,1,7,NULL,NULL,'74E2055D3965269447B5CB1B31FC71C6',NULL,NULL,NULL), +(51237,10,1,7,NULL,NULL,'C8660A21B766646FBD67F481CFCF55C3',NULL,NULL,NULL); /*!40000 ALTER TABLE `build_info` ENABLE KEYS */; UNLOCK TABLES; @@ -2336,7 +2338,7 @@ CREATE TABLE `realmlist` ( `timezone` tinyint unsigned NOT NULL DEFAULT '0', `allowedSecurityLevel` tinyint unsigned NOT NULL DEFAULT '0', `population` float unsigned NOT NULL DEFAULT '0', - `gamebuild` int unsigned NOT NULL DEFAULT '51130', + `gamebuild` int unsigned NOT NULL DEFAULT '51237', `Region` tinyint unsigned NOT NULL DEFAULT '1', `Battlegroup` tinyint unsigned NOT NULL DEFAULT '1', PRIMARY KEY (`id`), @@ -2727,7 +2729,8 @@ INSERT INTO `updates` VALUES ('2023_07_28_00_auth.sql','1CC6C4E639ED9FD2EABFD0713C4D809C707E5E3F','RELEASED','2023-07-28 20:03:06',0), ('2023_08_03_00_auth.sql','57B92FF9D84AFE5F37A533F8F7187E26A708D8EE','RELEASED','2023-08-03 22:49:11',0), ('2023_08_09_00_auth.sql','3A0B9E91EB66D237785CD3F3CDFE5A6EAB33578E','RELEASED','2023-08-09 10:01:04',0), -('2023_08_31_00_auth.sql','3A2242F0755CCC7658F458847B12E308FE75A314','RELEASED','2023-08-31 19:06:27',0); +('2023_08_31_00_auth.sql','3A2242F0755CCC7658F458847B12E308FE75A314','RELEASED','2023-08-31 19:06:27',0), +('2023_09_07_00_auth.sql','9127F7B6723477DE25886D451FE174ABF2039B94','RELEASED','2023-09-07 00:30:01',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/auth/master/2023_09_07_00_auth.sql b/sql/updates/auth/master/2023_09_07_00_auth.sql new file mode 100644 index 00000000000..508be5a7ec7 --- /dev/null +++ b/sql/updates/auth/master/2023_09_07_00_auth.sql @@ -0,0 +1,8 @@ +DELETE FROM `build_info` WHERE `build` IN (51187,51237); +INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`,`winAuthSeed`,`win64AuthSeed`,`mac64AuthSeed`,`winChecksumSeed`,`macChecksumSeed`) VALUES +(51187,10,1,7,NULL,NULL,'74E2055D3965269447B5CB1B31FC71C6',NULL,NULL,NULL), +(51237,10,1,7,NULL,NULL,'C8660A21B766646FBD67F481CFCF55C3',NULL,NULL,NULL); + +UPDATE `realmlist` SET `gamebuild`=51237 WHERE `gamebuild`=51130; + +ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '51237'; diff --git a/sql/updates/hotfixes/master/2023_09_07_00_hotfixes.sql b/sql/updates/hotfixes/master/2023_09_07_00_hotfixes.sql new file mode 100644 index 00000000000..61dbd08eb22 --- /dev/null +++ b/sql/updates/hotfixes/master/2023_09_07_00_hotfixes.sql @@ -0,0 +1,10 @@ +ALTER TABLE `chr_classes` MODIFY `RolesMask` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `ClassColorB`; + +ALTER TABLE `chr_customization_element` ADD `ParticleColorID` int NOT NULL DEFAULT 0 AFTER `AnimKitID`; + +ALTER TABLE `creature_model_data` ADD `WalkSpeed` float NOT NULL DEFAULT 0 AFTER `FileDataID`; +ALTER TABLE `creature_model_data` ADD `RunSpeed` float NOT NULL DEFAULT 0 AFTER `WalkSpeed`; + +ALTER TABLE `taxi_nodes` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `CharacterBitNumber`; + +ALTER TABLE `taxi_path_node` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `ContinentID`; diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index b6478ab01b5..12f874de4f4 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -329,11 +329,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ChrClasses.db2 PrepareStatement(HOTFIX_SEL_CHR_CLASSES, "SELECT Name, Filename, NameMale, NameFemale, PetNameToken, Description, RoleInfoString, DisabledString, " "HyphenatedNameMale, HyphenatedNameFemale, ID, CreateScreenFileDataID, SelectScreenFileDataID, IconFileDataID, LowResScreenFileDataID, Flags, " - "SpellTextureBlobFileDataID, RolesMask, ArmorTypeMask, CharStartKitUnknown901, MaleCharacterCreationVisualFallback, " + "SpellTextureBlobFileDataID, ArmorTypeMask, CharStartKitUnknown901, MaleCharacterCreationVisualFallback, " "MaleCharacterCreationIdleVisualFallback, FemaleCharacterCreationVisualFallback, FemaleCharacterCreationIdleVisualFallback, " "CharacterCreationIdleGroundVisualFallback, CharacterCreationGroundVisualFallback, AlteredFormCharacterCreationIdleVisualFallback, " "CharacterCreationAnimLoopWaitTimeMsFallback, CinematicSequenceID, DefaultSpec, PrimaryStatPriority, DisplayPower, " - "RangedAttackPowerPerAgility, AttackPowerPerAgility, AttackPowerPerStrength, SpellClassSet, ClassColorR, ClassColorG, ClassColorB" + "RangedAttackPowerPerAgility, AttackPowerPerAgility, AttackPowerPerStrength, SpellClassSet, ClassColorR, ClassColorG, ClassColorB, RolesMask" " FROM chr_classes WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CLASSES, "SELECT MAX(ID) + 1 FROM chr_classes", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_CLASSES, "SELECT ID, Name_lang, NameMale_lang, NameFemale_lang, Description_lang, RoleInfoString_lang, " @@ -361,7 +361,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ChrCustomizationElement.db2 PrepareStatement(HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT ID, ChrCustomizationChoiceID, RelatedChrCustomizationChoiceID, " "ChrCustomizationGeosetID, ChrCustomizationSkinnedModelID, ChrCustomizationMaterialID, ChrCustomizationBoneSetID, " - "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID" + "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID, ParticleColorID" " FROM chr_customization_element WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT MAX(ID) + 1 FROM chr_customization_element", CONNECTION_SYNCH); @@ -487,12 +487,12 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, Name_lang FROM creature_family_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); // CreatureModelData.db2 - PrepareStatement(HOTFIX_SEL_CREATURE_MODEL_DATA, "SELECT ID, GeoBox1, GeoBox2, GeoBox3, GeoBox4, GeoBox5, GeoBox6, Flags, FileDataID, BloodID, " - "FootprintTextureID, FootprintTextureLength, FootprintTextureWidth, FootprintParticleScale, FoleyMaterialID, FootstepCameraEffectID, " - "DeathThudCameraEffectID, SoundID, SizeClass, CollisionWidth, CollisionHeight, WorldEffectScale, CreatureGeosetDataID, HoverHeight, " - "AttachedEffectScale, ModelScale, MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, MountHeight, OverrideLootEffectScale, " - "OverrideNameScale, OverrideSelectionRadius, TamedPetBaseScale, Unknown820_1, Unknown820_2, Unknown820_31, Unknown820_32" - " FROM creature_model_data WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CREATURE_MODEL_DATA, "SELECT ID, GeoBox1, GeoBox2, GeoBox3, GeoBox4, GeoBox5, GeoBox6, Flags, FileDataID, WalkSpeed, " + "RunSpeed, BloodID, FootprintTextureID, FootprintTextureLength, FootprintTextureWidth, FootprintParticleScale, FoleyMaterialID, " + "FootstepCameraEffectID, DeathThudCameraEffectID, SoundID, SizeClass, CollisionWidth, CollisionHeight, WorldEffectScale, " + "CreatureGeosetDataID, HoverHeight, AttachedEffectScale, ModelScale, MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, " + "MountHeight, OverrideLootEffectScale, OverrideNameScale, OverrideSelectionRadius, TamedPetBaseScale, Unknown820_1, Unknown820_2, " + "Unknown820_31, Unknown820_32 FROM creature_model_data WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_CREATURE_MODEL_DATA, "SELECT MAX(ID) + 1 FROM creature_model_data", CONNECTION_SYNCH); // CreatureType.db2 diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 685c6484e97..d6ab9499fcd 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -914,7 +914,6 @@ struct ChrClassesLoadInfo { false, FT_INT, "LowResScreenFileDataID" }, { true, FT_INT, "Flags" }, { false, FT_INT, "SpellTextureBlobFileDataID" }, - { false, FT_INT, "RolesMask" }, { false, FT_INT, "ArmorTypeMask" }, { true, FT_INT, "CharStartKitUnknown901" }, { true, FT_INT, "MaleCharacterCreationVisualFallback" }, @@ -936,6 +935,7 @@ struct ChrClassesLoadInfo { false, FT_BYTE, "ClassColorR" }, { false, FT_BYTE, "ClassColorG" }, { false, FT_BYTE, "ClassColorB" }, + { false, FT_BYTE, "RolesMask" }, }; static constexpr DB2LoadInfo Instance{ Fields, 39, &ChrClassesMeta::Instance, HOTFIX_SEL_CHR_CLASSES }; @@ -990,7 +990,7 @@ struct ChrCustomizationDisplayInfoLoadInfo struct ChrCustomizationElementLoadInfo { - static constexpr DB2FieldMeta Fields[12] = + static constexpr DB2FieldMeta Fields[13] = { { false, FT_INT, "ID" }, { true, FT_INT, "ChrCustomizationChoiceID" }, @@ -1004,9 +1004,10 @@ struct ChrCustomizationElementLoadInfo { true, FT_INT, "ChrCustItemGeoModifyID" }, { true, FT_INT, "ChrCustomizationVoiceID" }, { true, FT_INT, "AnimKitID" }, + { true, FT_INT, "ParticleColorID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 12, &ChrCustomizationElementMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT }; + static constexpr DB2LoadInfo Instance{ Fields, 13, &ChrCustomizationElementMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT }; }; struct ChrCustomizationOptionLoadInfo @@ -1420,7 +1421,7 @@ struct CreatureFamilyLoadInfo struct CreatureModelDataLoadInfo { - static constexpr DB2FieldMeta Fields[38] = + static constexpr DB2FieldMeta Fields[40] = { { false, FT_INT, "ID" }, { false, FT_FLOAT, "GeoBox1" }, @@ -1431,6 +1432,8 @@ struct CreatureModelDataLoadInfo { false, FT_FLOAT, "GeoBox6" }, { false, FT_INT, "Flags" }, { false, FT_INT, "FileDataID" }, + { false, FT_FLOAT, "WalkSpeed" }, + { false, FT_FLOAT, "RunSpeed" }, { false, FT_INT, "BloodID" }, { false, FT_INT, "FootprintTextureID" }, { false, FT_FLOAT, "FootprintTextureLength" }, @@ -1462,7 +1465,7 @@ struct CreatureModelDataLoadInfo { false, FT_FLOAT, "Unknown820_32" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 38, &CreatureModelDataMeta::Instance, HOTFIX_SEL_CREATURE_MODEL_DATA }; + static constexpr DB2LoadInfo Instance{ Fields, 40, &CreatureModelDataMeta::Instance, HOTFIX_SEL_CREATURE_MODEL_DATA }; }; struct CreatureTypeLoadInfo @@ -5585,7 +5588,7 @@ struct TaxiNodesLoadInfo { false, FT_SHORT, "ContinentID" }, { true, FT_INT, "ConditionID" }, { false, FT_SHORT, "CharacterBitNumber" }, - { false, FT_SHORT, "Flags" }, + { true, FT_INT, "Flags" }, { true, FT_INT, "UiTextureKitID" }, { true, FT_INT, "MinimapAtlasMemberID" }, { false, FT_FLOAT, "Facing" }, @@ -5622,7 +5625,7 @@ struct TaxiPathNodeLoadInfo { false, FT_SHORT, "PathID" }, { true, FT_INT, "NodeIndex" }, { false, FT_SHORT, "ContinentID" }, - { false, FT_BYTE, "Flags" }, + { true, FT_INT, "Flags" }, { false, FT_INT, "Delay" }, { true, FT_INT, "ArrivalEventID" }, { true, FT_INT, "DepartureEventID" }, diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index a9805140e98..28f43806b0a 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -230,10 +230,10 @@ struct AnimKitConfigMeta { static constexpr DB2MetaField Fields[1] = { - { FT_INT, 1, false }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1300872, -1, 1, 1, 0xA3858D19, Fields, -1 }; + static constexpr DB2Meta Instance{ 1300872, -1, 1, 1, 0x4BB04814, Fields, -1 }; }; struct AnimKitConfigBoneSetMeta @@ -288,7 +288,7 @@ struct AnimKitSegmentMeta { FT_INT, 1, false }, { FT_INT, 1, false }, { FT_FLOAT, 1, true }, - { FT_SHORT, 1, false }, + { FT_INT, 1, true }, { FT_BYTE, 1, false }, { FT_INT, 1, true }, { FT_BYTE, 1, true }, @@ -297,7 +297,7 @@ struct AnimKitSegmentMeta { FT_FLOAT, 1, true }, }; - static constexpr DB2Meta Instance{ 1304324, -1, 19, 19, 0xDCD09D5C, Fields, 0 }; + static constexpr DB2Meta Instance{ 1304324, -1, 19, 19, 0xC72DE963, Fields, 0 }; }; struct AnimReplacementMeta @@ -1490,7 +1490,7 @@ struct CameraEffectEntryMeta struct CameraModeMeta { - static constexpr DB2MetaField Fields[11] = + static constexpr DB2MetaField Fields[12] = { { FT_FLOAT, 3, true }, { FT_FLOAT, 3, true }, @@ -1503,9 +1503,10 @@ struct CameraModeMeta { FT_BYTE, 1, true }, { FT_BYTE, 1, true }, { FT_BYTE, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1343308, -1, 11, 11, 0xC26A74A9, Fields, -1 }; + static constexpr DB2Meta Instance{ 1343308, -1, 12, 12, 0x5F08423B, Fields, -1 }; }; struct CampaignMeta @@ -2027,7 +2028,6 @@ struct ChrClassesMeta { FT_INT, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, false }, - { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, @@ -2048,9 +2048,10 @@ struct ChrClassesMeta { FT_BYTE, 1, false }, { FT_BYTE, 1, false }, { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, }; - static constexpr DB2Meta Instance{ 1361031, 10, 39, 39, 0xCD8CBEDA, Fields, -1 }; + static constexpr DB2Meta Instance{ 1361031, 10, 39, 39, 0xA9224C3E, Fields, -1 }; }; struct ChrClassesXPowerTypesMeta @@ -2224,7 +2225,7 @@ struct ChrCustomizationDisplayInfoMeta struct ChrCustomizationElementMeta { - static constexpr DB2MetaField Fields[11] = + static constexpr DB2MetaField Fields[12] = { { FT_INT, 1, true }, { FT_INT, 1, true }, @@ -2237,9 +2238,10 @@ struct ChrCustomizationElementMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 3512765, -1, 11, 11, 0x978B6C48, Fields, -1 }; + static constexpr DB2Meta Instance{ 3512765, -1, 12, 12, 0xE040533A, Fields, -1 }; }; struct ChrCustomizationGeosetMeta @@ -2254,6 +2256,21 @@ struct ChrCustomizationGeosetMeta static constexpr DB2Meta Instance{ 3456171, -1, 3, 3, 0x9D95412A, Fields, -1 }; }; +struct ChrCustomizationGlyphPetMeta +{ + static constexpr DB2MetaField Fields[6] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5347591, -1, 6, 6, 0xD58B0F29, Fields, -1 }; +}; + struct ChrCustomizationMaterialMeta { static constexpr DB2MetaField Fields[2] = @@ -2512,6 +2529,19 @@ struct ChrRacesCreateScreenIconMeta static constexpr DB2Meta Instance{ 4566929, 0, 4, 4, 0x892075D2, Fields, 1 }; }; +struct ChrRacesPingMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5320971, -1, 4, 4, 0xEEFB570B, Fields, -1 }; +}; + struct ChrSelectBackgroundCDIMeta { static constexpr DB2MetaField Fields[3] = @@ -3420,11 +3450,13 @@ struct CreatureLabelMeta struct CreatureModelDataMeta { - static constexpr DB2MetaField Fields[31] = + static constexpr DB2MetaField Fields[33] = { { FT_FLOAT, 6, true }, { FT_INT, 1, false }, { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, false }, { FT_FLOAT, 1, true }, @@ -3455,7 +3487,7 @@ struct CreatureModelDataMeta { FT_FLOAT, 2, true }, }; - static constexpr DB2Meta Instance{ 1365368, -1, 31, 31, 0xEDDF3253, Fields, -1 }; + static constexpr DB2Meta Instance{ 1365368, -1, 33, 33, 0xCD28D54B, Fields, -1 }; }; struct CreatureMovementInfoMeta @@ -5372,7 +5404,7 @@ struct GemPropertiesMeta struct GlideEventMeta { - static constexpr DB2MetaField Fields[10] = + static constexpr DB2MetaField Fields[11] = { { FT_FLOAT, 1, true }, { FT_INT, 1, true }, @@ -5384,9 +5416,10 @@ struct GlideEventMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 4644012, -1, 10, 10, 0x63D375D1, Fields, -1 }; + static constexpr DB2Meta Instance{ 4644012, -1, 11, 11, 0xAF8D7840, Fields, -1 }; }; struct GlideEventBlendTimesMeta @@ -8864,6 +8897,17 @@ struct PerksActivityThresholdGroupMeta static constexpr DB2Meta Instance{ 4519768, 1, 3, 3, 0x780A31D9, Fields, -1 }; }; +struct PerksActivityXHolidaysMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5330797, -1, 2, 1, 0x9B7FB7C6, Fields, 1 }; +}; + struct PerksActivityXIntervalMeta { static constexpr DB2MetaField Fields[3] = @@ -8985,6 +9029,20 @@ struct PhaseXPhaseGroupMeta static constexpr DB2Meta Instance{ 987581, -1, 2, 1, 0xEC8D5E98, Fields, 1 }; }; +struct PingTypeMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5152358, -1, 5, 5, 0x0CE5C49B, Fields, -1 }; +}; + struct PlayerConditionMeta { static constexpr DB2MetaField Fields[84] = @@ -12196,7 +12254,7 @@ struct TaxiNodesMeta { FT_SHORT, 1, false }, { FT_INT, 1, true }, { FT_SHORT, 1, false }, - { FT_SHORT, 1, false }, + { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_FLOAT, 1, true }, @@ -12205,7 +12263,7 @@ struct TaxiNodesMeta { FT_INT, 2, true }, }; - static constexpr DB2Meta Instance{ 1068100, 4, 15, 15, 0x3F7CC8B2, Fields, 5 }; + static constexpr DB2Meta Instance{ 1068100, 4, 15, 15, 0x5EE95BA9, Fields, 5 }; }; struct TaxiPathMeta @@ -12230,13 +12288,13 @@ struct TaxiPathNodeMeta { FT_SHORT, 1, false }, { FT_INT, 1, true }, { FT_SHORT, 1, false }, - { FT_BYTE, 1, false }, + { FT_INT, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1000437, 1, 9, 9, 0xA20FF622, Fields, 2 }; + static constexpr DB2Meta Instance{ 1000437, 1, 9, 9, 0xF1BEC205, Fields, 2 }; }; struct TerrainColorGradingRampMeta @@ -13205,7 +13263,7 @@ struct UiCanvasMeta struct UiCovenantDisplayInfoMeta { - static constexpr DB2MetaField Fields[12] = + static constexpr DB2MetaField Fields[13] = { { FT_INT, 1, true }, { FT_INT, 1, true }, @@ -13219,9 +13277,10 @@ struct UiCovenantDisplayInfoMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 3509132, -1, 12, 12, 0x04B5154E, Fields, -1 }; + static constexpr DB2Meta Instance{ 3509132, -1, 13, 13, 0xFB57169A, Fields, -1 }; }; struct UiItemInteractionMeta diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 5163e53c669..d58df6f6a80 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -631,7 +631,6 @@ struct ChrClassesEntry uint32 LowResScreenFileDataID; int32 Flags; uint32 SpellTextureBlobFileDataID; - uint32 RolesMask; uint32 ArmorTypeMask; int32 CharStartKitUnknown901; int32 MaleCharacterCreationVisualFallback; @@ -653,6 +652,7 @@ struct ChrClassesEntry uint8 ClassColorR; uint8 ClassColorG; uint8 ClassColorB; + uint8 RolesMask; }; struct ChrClassesXPowerTypesEntry @@ -700,6 +700,7 @@ struct ChrCustomizationElementEntry int32 ChrCustItemGeoModifyID; int32 ChrCustomizationVoiceID; int32 AnimKitID; + int32 ParticleColorID; }; struct ChrCustomizationOptionEntry @@ -1033,6 +1034,8 @@ struct CreatureModelDataEntry std::array<float, 6> GeoBox; uint32 Flags; uint32 FileDataID; + float WalkSpeed; + float RunSpeed; uint32 BloodID; uint32 FootprintTextureID; float FootprintTextureLength; @@ -3973,7 +3976,7 @@ struct TaxiNodesEntry uint16 ContinentID; int32 ConditionID; uint16 CharacterBitNumber; - uint16 Flags; + int32 Flags; int32 UiTextureKitID; int32 MinimapAtlasMemberID; float Facing; @@ -3997,7 +4000,7 @@ struct TaxiPathNodeEntry uint16 PathID; int32 NodeIndex; uint16 ContinentID; - uint8 Flags; + int32 Flags; uint32 Delay; int32 ArrivalEventID; int32 DepartureEventID; diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h index 8a0aa7d2fd9..7df3f83b9f7 100644 --- a/src/server/game/Entities/Item/ItemDefines.h +++ b/src/server/game/Entities/Item/ItemDefines.h @@ -141,6 +141,7 @@ enum InventoryResult : uint8 EQUIP_ERR_REAGENTBAG_WRONG_SLOT = 115,// Reagent Bags can only be placed in the reagent bag slot. EQUIP_ERR_SLOT_ONLY_REAGENTBAG = 116,// Only Reagent Bags can be placed in the reagent bag slot. EQUIP_ERR_REAGENTBAG_ITEM_TYPE = 117,// Only Reagents can be placed in Reagent Bags. + EQUIP_ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 118,// Items that can be refunded can't be bulk sold. }; // EnumUtils: DESCRIBE THIS @@ -166,7 +167,10 @@ enum SellResult SELL_ERR_YOU_DONT_OWN_THAT_ITEM = 4, // DESCRIPTION You don't own that item. SELL_ERR_UNK = 5, // DESCRIPTION nothing appears... SELL_ERR_ONLY_EMPTY_BAG = 6, // DESCRIPTION You can only do that with empty bags. - SELL_ERR_CANT_SELL_TO_THIS_MERCHANT = 7 // DESCRIPTION You cannot sell items to this merchant. + SELL_ERR_CANT_SELL_TO_THIS_MERCHANT = 7, // DESCRIPTION You cannot sell items to this merchant. + SELL_ERR_MUST_REPAIR_DURABILITY = 8, // DESCRIPTION You must repair that item's durability to use it. + SELL_ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE = 9, // DESCRIPTION The merchant doesn't want that item. Bring it to the Scrapper to extract Titan Residuum. + SELL_ERR_INTERNAL_BAG_ERROR = 10, // DESCRIPTION Internal Bag Error }; // -1 from client enchantment slot number diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 93ac9f8c967..dd13e001442 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -2130,7 +2130,10 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << uint32(GuildDeleteDate); data << int32(GuildLevel); data << uint32(Customizations.size()); - data << uint8(PartyType); + for (uint32 i = 0; i < 2; ++i) + { + data << uint8(PartyType[i]); + } data << uint8(NativeSex); data << uint8(Inebriation); data << uint8(PvpTitle); @@ -2165,6 +2168,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << int32(Field_B0); data << int32(Field_B4); data << int32(CurrentBattlePetSpeciesID); + data << field_138; CtrOptions->WriteCreate(data, owner, receiver); data << int32(CovenantID); data << int32(SoulbindID); @@ -2203,7 +2207,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000003Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFC00000u, 0xFFFFFFFFu, 0x0000001Fu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFE000000u, 0xFFFFFFFFu, 0x000000FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2211,12 +2215,12 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFC0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x003FFFFFu, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000012u, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x01FFFFFFu, 0x00000000u, 0x00000000u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000003Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFC00000u, 0xFFFFFFFFu, 0x0000001Fu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFE000000u, 0xFFFFFFFFu, 0x000000FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -2348,78 +2352,78 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } if (changesMask[15]) { - data << uint8(PartyType); + data << uint8(NativeSex); } if (changesMask[16]) { - data << uint8(NativeSex); + data << uint8(Inebriation); } if (changesMask[17]) { - data << uint8(Inebriation); + data << uint8(PvpTitle); } if (changesMask[18]) { - data << uint8(PvpTitle); + data << uint8(ArenaFaction); } if (changesMask[19]) { - data << uint8(ArenaFaction); + data << uint32(DuelTeam); } if (changesMask[20]) { - data << uint32(DuelTeam); + data << int32(GuildTimeStamp); } if (changesMask[21]) { - data << int32(GuildTimeStamp); + data << int32(PlayerTitle); } if (changesMask[22]) { - data << int32(PlayerTitle); + data << int32(FakeInebriation); } if (changesMask[23]) { - data << int32(FakeInebriation); + data << uint32(VirtualPlayerRealm); } if (changesMask[24]) { - data << uint32(VirtualPlayerRealm); + data << uint32(CurrentSpecID); } if (changesMask[25]) { - data << uint32(CurrentSpecID); + data << int32(TaxiMountAnimKitID); } if (changesMask[26]) { - data << int32(TaxiMountAnimKitID); + data << uint8(CurrentBattlePetBreedQuality); } if (changesMask[27]) { - data << uint8(CurrentBattlePetBreedQuality); + data << int32(HonorLevel); } if (changesMask[28]) { - data << int32(HonorLevel); + data << int64(LogoutTime); } if (changesMask[29]) { - data << int64(LogoutTime); + data << int32(Field_B0); } if (changesMask[30]) { - data << int32(Field_B0); + data << int32(Field_B4); } if (changesMask[31]) { - data << int32(Field_B4); + data << int32(CurrentBattlePetSpeciesID); } } if (changesMask[32]) { if (changesMask[33]) { - data << int32(CurrentBattlePetSpeciesID); + data << field_138; } if (changesMask[34]) { @@ -2440,10 +2444,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } if (changesMask[38]) { - for (uint32 i = 0; i < 175; ++i) + for (uint32 i = 0; i < 2; ++i) { if (changesMask[39 + i]) { + data << uint8(PartyType[i]); + } + } + } + if (changesMask[41]) + { + for (uint32 i = 0; i < 175; ++i) + { + if (changesMask[42 + i]) + { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); else @@ -2451,31 +2465,31 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[214]) + if (changesMask[217]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[215 + i]) + if (changesMask[218 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[234]) + if (changesMask[237]) { for (uint32 i = 0; i < 6; ++i) { - if (changesMask[235 + i]) + if (changesMask[238 + i]) { data << float(AvgItemLevel[i]); } } } - if (changesMask[241]) + if (changesMask[244]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[242 + i]) + if (changesMask[245 + i]) { data << uint32(Field_3120[i]); } @@ -2500,7 +2514,6 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(GuildRankID); Base::ClearChangesMask(GuildDeleteDate); Base::ClearChangesMask(GuildLevel); - Base::ClearChangesMask(PartyType); Base::ClearChangesMask(NativeSex); Base::ClearChangesMask(Inebriation); Base::ClearChangesMask(PvpTitle); @@ -2518,10 +2531,12 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(Field_B0); Base::ClearChangesMask(Field_B4); Base::ClearChangesMask(CurrentBattlePetSpeciesID); + Base::ClearChangesMask(field_138); Base::ClearChangesMask(CtrOptions); Base::ClearChangesMask(CovenantID); Base::ClearChangesMask(SoulbindID); Base::ClearChangesMask(DungeonScore); + Base::ClearChangesMask(PartyType); Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); Base::ClearChangesMask(AvgItemLevel); @@ -3803,6 +3818,47 @@ void StableInfo::ClearChangesMask() _changesMask.ResetAll(); } +void CollectableSourceTrackedData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(TargetType); + data << int32(TargetID); + data << int32(CollectableSourceInfoID); +} + +void CollectableSourceTrackedData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(TargetType); + } + if (changesMask[2]) + { + data << int32(TargetID); + } + if (changesMask[3]) + { + data << int32(CollectableSourceInfoID); + } + } +} + +void CollectableSourceTrackedData::ClearChangesMask() +{ + Base::ClearChangesMask(TargetType); + Base::ClearChangesMask(TargetID); + Base::ClearChangesMask(CollectableSourceInfoID); + _changesMask.ResetAll(); +} + void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int16(ResearchProjectID); @@ -4103,10 +4159,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f } for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) { - data << int64(TrackedCollectableSources[i]); + TrackedCollectableSources[i].WriteCreate(data, owner, receiver); } data.FlushBits(); data.WriteBit(BackpackAutoSortDisabled); + data.WriteBit(BackpackSellJunkDisabled); data.WriteBit(BankAutoSortDisabled); data.WriteBit(SortBagsRightToLeft); data.WriteBit(InsertItemsLeftToRight); @@ -4167,28 +4224,32 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[2]) { - data.WriteBit(BankAutoSortDisabled); + data.WriteBit(BackpackSellJunkDisabled); } if (changesMask[3]) { - data.WriteBit(SortBagsRightToLeft); + data.WriteBit(BankAutoSortDisabled); } if (changesMask[4]) { - data.WriteBit(InsertItemsLeftToRight); + data.WriteBit(SortBagsRightToLeft); } if (changesMask[5]) { - data.WriteBit(HasPerksProgramPendingReward); + data.WriteBit(InsertItemsLeftToRight); } if (changesMask[6]) { + data.WriteBit(HasPerksProgramPendingReward); + } + if (changesMask[7]) + { if (!ignoreNestedChangesMask) KnownTitles.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data); } - if (changesMask[7]) + if (changesMask[8]) { if (!ignoreNestedChangesMask) PvpInfo.WriteUpdateMask(data); @@ -4196,11 +4257,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data); } } - if (changesMask[35]) + if (changesMask[36]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[36 + i]) + if (changesMask[37 + i]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -4209,11 +4270,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[37]) + if (changesMask[38]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[38 + i]) + if (changesMask[39 + i]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -4222,11 +4283,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[39]) + if (changesMask[40]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[40 + i]) + if (changesMask[41 + i]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -4235,11 +4296,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[35]) + if (changesMask[36]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[36 + i]) + if (changesMask[37 + i]) { for (uint32 j = 0; j < ResearchSites[i].size(); ++j) { @@ -4251,11 +4312,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[37]) + if (changesMask[38]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[38 + i]) + if (changesMask[39 + i]) { for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j) { @@ -4267,11 +4328,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[39]) + if (changesMask[40]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[40 + i]) + if (changesMask[41 + i]) { for (uint32 j = 0; j < Research[i].size(); ++j) { @@ -4286,185 +4347,185 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[8]) + if (changesMask[9]) { if (!ignoreNestedChangesMask) DailyQuestsCompleted.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.size(), data); } - if (changesMask[9]) + if (changesMask[10]) { if (!ignoreNestedChangesMask) AvailableQuestLineXQuestIDs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data); } - if (changesMask[10]) + if (changesMask[11]) { if (!ignoreNestedChangesMask) Heirlooms.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data); } - if (changesMask[11]) + if (changesMask[12]) { if (!ignoreNestedChangesMask) HeirloomFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data); } - if (changesMask[12]) + if (changesMask[13]) { if (!ignoreNestedChangesMask) Toys.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Toys.size(), data); } - if (changesMask[13]) + if (changesMask[14]) { if (!ignoreNestedChangesMask) ToyFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data); } - if (changesMask[14]) + if (changesMask[15]) { if (!ignoreNestedChangesMask) Transmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data); } - if (changesMask[15]) + if (changesMask[16]) { if (!ignoreNestedChangesMask) ConditionalTransmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data); } - if (changesMask[16]) + if (changesMask[17]) { if (!ignoreNestedChangesMask) SelfResSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data); } - if (changesMask[17]) + if (changesMask[18]) { if (!ignoreNestedChangesMask) RuneforgePowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data); } - if (changesMask[18]) + if (changesMask[19]) { if (!ignoreNestedChangesMask) TransmogIllusions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data); } - if (changesMask[19]) + if (changesMask[20]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data); } - if (changesMask[20]) + if (changesMask[21]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data); } - if (changesMask[21]) + if (changesMask[22]) { if (!ignoreNestedChangesMask) SpellFlatModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data); } - if (changesMask[22]) + if (changesMask[23]) { if (!ignoreNestedChangesMask) MawPowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data); } - if (changesMask[23]) + if (changesMask[24]) { if (!ignoreNestedChangesMask) MultiFloorExploration.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data); } - if (changesMask[24]) + if (changesMask[25]) { if (!ignoreNestedChangesMask) RecipeProgression.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data); } - if (changesMask[25]) + if (changesMask[26]) { if (!ignoreNestedChangesMask) ReplayedQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data); } - if (changesMask[26]) + if (changesMask[27]) { if (!ignoreNestedChangesMask) TaskQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data); } - if (changesMask[27]) + if (changesMask[28]) { if (!ignoreNestedChangesMask) DisabledSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data); } - if (changesMask[28]) + if (changesMask[29]) { if (!ignoreNestedChangesMask) TraitConfigs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data); } - if (changesMask[29]) + if (changesMask[30]) { if (!ignoreNestedChangesMask) CraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data); } - if (changesMask[30]) + if (changesMask[31]) { if (!ignoreNestedChangesMask) PersonalCraftingOrderCounts.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data); } - if (changesMask[31]) + } + if (changesMask[32]) + { + if (changesMask[33]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data); } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[34]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data); } - if (changesMask[34]) + if (changesMask[35]) { if (!ignoreNestedChangesMask) TrackedCollectableSources.WriteUpdateMask(data); @@ -4475,7 +4536,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[6]) + if (changesMask[7]) { for (uint32 i = 0; i < KnownTitles.size(); ++i) { @@ -4485,7 +4546,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[8]) + if (changesMask[9]) { for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) { @@ -4495,7 +4556,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[9]) + if (changesMask[10]) { for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) { @@ -4505,7 +4566,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[10]) + if (changesMask[11]) { for (uint32 i = 0; i < Heirlooms.size(); ++i) { @@ -4515,7 +4576,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[11]) + if (changesMask[12]) { for (uint32 i = 0; i < HeirloomFlags.size(); ++i) { @@ -4525,7 +4586,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[12]) + if (changesMask[13]) { for (uint32 i = 0; i < Toys.size(); ++i) { @@ -4535,7 +4596,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[13]) + if (changesMask[14]) { for (uint32 i = 0; i < ToyFlags.size(); ++i) { @@ -4545,7 +4606,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[14]) + if (changesMask[15]) { for (uint32 i = 0; i < Transmog.size(); ++i) { @@ -4555,7 +4616,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[15]) + if (changesMask[16]) { for (uint32 i = 0; i < ConditionalTransmog.size(); ++i) { @@ -4565,7 +4626,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[16]) + if (changesMask[17]) { for (uint32 i = 0; i < SelfResSpells.size(); ++i) { @@ -4575,7 +4636,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[17]) + if (changesMask[18]) { for (uint32 i = 0; i < RuneforgePowers.size(); ++i) { @@ -4585,7 +4646,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[18]) + if (changesMask[19]) { for (uint32 i = 0; i < TransmogIllusions.size(); ++i) { @@ -4595,7 +4656,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[20]) + if (changesMask[21]) { for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { @@ -4605,7 +4666,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[21]) + if (changesMask[22]) { for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i) { @@ -4615,7 +4676,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[22]) + if (changesMask[23]) { for (uint32 i = 0; i < MawPowers.size(); ++i) { @@ -4625,7 +4686,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[23]) + if (changesMask[24]) { for (uint32 i = 0; i < MultiFloorExploration.size(); ++i) { @@ -4635,7 +4696,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[24]) + if (changesMask[25]) { for (uint32 i = 0; i < RecipeProgression.size(); ++i) { @@ -4645,7 +4706,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[25]) + if (changesMask[26]) { for (uint32 i = 0; i < ReplayedQuests.size(); ++i) { @@ -4655,7 +4716,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[26]) + if (changesMask[27]) { for (uint32 i = 0; i < TaskQuests.size(); ++i) { @@ -4665,7 +4726,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[27]) + if (changesMask[28]) { for (uint32 i = 0; i < DisabledSpells.size(); ++i) { @@ -4675,7 +4736,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[30]) + if (changesMask[31]) { for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) { @@ -4685,7 +4746,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[31]) + } + if (changesMask[32]) + { + if (changesMask[33]) { for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { @@ -4695,10 +4759,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[34]) { for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) { @@ -4708,20 +4769,20 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[34]) + if (changesMask[35]) { for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) { if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask) { - data << int64(TrackedCollectableSources[i]); + TrackedCollectableSources[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } } if (changesMask[0]) { - if (changesMask[7]) + if (changesMask[8]) { for (uint32 i = 0; i < PvpInfo.size(); ++i) { @@ -4731,7 +4792,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[19]) + if (changesMask[20]) { for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) { @@ -4741,7 +4802,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[28]) + if (changesMask[29]) { for (uint32 i = 0; i < TraitConfigs.size(); ++i) { @@ -4751,7 +4812,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[29]) + if (changesMask[30]) { for (uint32 i = 0; i < CraftingOrders.size(); ++i) { @@ -4764,356 +4825,356 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[32]) { - if (changesMask[41]) - { - data << FarsightObject; - } if (changesMask[42]) { - data << SummonedBattlePetGUID; + data << FarsightObject; } if (changesMask[43]) { - data << uint64(Coinage); + data << SummonedBattlePetGUID; } if (changesMask[44]) { - data << int32(XP); + data << uint64(Coinage); } if (changesMask[45]) { - data << int32(NextLevelXP); + data << int32(XP); } if (changesMask[46]) { - data << int32(TrialXP); + data << int32(NextLevelXP); } if (changesMask[47]) { - Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(TrialXP); } if (changesMask[48]) { - data << int32(CharacterPoints); + Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[49]) { - data << int32(MaxTalentTiers); + data << int32(CharacterPoints); } if (changesMask[50]) { - data << uint32(TrackCreatureMask); + data << int32(MaxTalentTiers); } if (changesMask[51]) { - data << float(MainhandExpertise); + data << uint32(TrackCreatureMask); } if (changesMask[52]) { - data << float(OffhandExpertise); + data << float(MainhandExpertise); } if (changesMask[53]) { - data << float(RangedExpertise); + data << float(OffhandExpertise); } if (changesMask[54]) { - data << float(CombatRatingExpertise); + data << float(RangedExpertise); } if (changesMask[55]) { - data << float(BlockPercentage); + data << float(CombatRatingExpertise); } if (changesMask[56]) { - data << float(DodgePercentage); + data << float(BlockPercentage); } if (changesMask[57]) { - data << float(DodgePercentageFromAttribute); + data << float(DodgePercentage); } if (changesMask[58]) { - data << float(ParryPercentage); + data << float(DodgePercentageFromAttribute); } if (changesMask[59]) { - data << float(ParryPercentageFromAttribute); + data << float(ParryPercentage); } if (changesMask[60]) { - data << float(CritPercentage); + data << float(ParryPercentageFromAttribute); } if (changesMask[61]) { - data << float(RangedCritPercentage); + data << float(CritPercentage); } if (changesMask[62]) { - data << float(OffhandCritPercentage); + data << float(RangedCritPercentage); } if (changesMask[63]) { - data << float(SpellCritPercentage); + data << float(OffhandCritPercentage); } if (changesMask[64]) { - data << int32(ShieldBlock); + data << float(SpellCritPercentage); } if (changesMask[65]) { - data << float(ShieldBlockCritPercentage); + data << int32(ShieldBlock); } if (changesMask[66]) { - data << float(Mastery); + data << float(ShieldBlockCritPercentage); } if (changesMask[67]) { - data << float(Speed); + data << float(Mastery); } if (changesMask[68]) { - data << float(Avoidance); + data << float(Speed); } if (changesMask[69]) { - data << float(Sturdiness); + data << float(Avoidance); } } if (changesMask[70]) { if (changesMask[71]) { - data << int32(Versatility); + data << float(Sturdiness); } if (changesMask[72]) { - data << float(VersatilityBonus); + data << int32(Versatility); } if (changesMask[73]) { - data << float(PvpPowerDamage); + data << float(VersatilityBonus); } if (changesMask[74]) { - data << float(PvpPowerHealing); + data << float(PvpPowerDamage); } if (changesMask[75]) { - data << int32(ModHealingDonePos); + data << float(PvpPowerHealing); } if (changesMask[76]) { - data << float(ModHealingPercent); + data << int32(ModHealingDonePos); } if (changesMask[77]) { - data << float(ModPeriodicHealingDonePercent); + data << float(ModHealingPercent); } if (changesMask[78]) { - data << float(ModSpellPowerPercent); + data << float(ModPeriodicHealingDonePercent); } if (changesMask[79]) { - data << float(ModResiliencePercent); + data << float(ModSpellPowerPercent); } if (changesMask[80]) { - data << float(OverrideSpellPowerByAPPercent); + data << float(ModResiliencePercent); } if (changesMask[81]) { - data << float(OverrideAPBySpellPowerPercent); + data << float(OverrideSpellPowerByAPPercent); } if (changesMask[82]) { - data << int32(ModTargetResistance); + data << float(OverrideAPBySpellPowerPercent); } if (changesMask[83]) { - data << int32(ModTargetPhysicalResistance); + data << int32(ModTargetResistance); } if (changesMask[84]) { - data << uint32(LocalFlags); + data << int32(ModTargetPhysicalResistance); } if (changesMask[85]) { - data << uint8(GrantableLevels); + data << uint32(LocalFlags); } if (changesMask[86]) { - data << uint8(MultiActionBars); + data << uint8(GrantableLevels); } if (changesMask[87]) { - data << uint8(LifetimeMaxRank); + data << uint8(MultiActionBars); } if (changesMask[88]) { - data << uint8(NumRespecs); + data << uint8(LifetimeMaxRank); } if (changesMask[89]) { - data << uint32(PvpMedals); + data << uint8(NumRespecs); } if (changesMask[90]) { - data << uint16(TodayHonorableKills); + data << uint32(PvpMedals); } if (changesMask[91]) { - data << uint16(YesterdayHonorableKills); + data << uint16(TodayHonorableKills); } if (changesMask[92]) { - data << uint32(LifetimeHonorableKills); + data << uint16(YesterdayHonorableKills); } if (changesMask[93]) { - data << int32(WatchedFactionIndex); + data << uint32(LifetimeHonorableKills); } if (changesMask[94]) { - data << int32(MaxLevel); + data << int32(WatchedFactionIndex); } if (changesMask[95]) { - data << int32(ScalingPlayerLevelDelta); + data << int32(MaxLevel); } if (changesMask[96]) { - data << int32(MaxCreatureScalingLevel); + data << int32(ScalingPlayerLevelDelta); } if (changesMask[97]) { - data << int32(PetSpellPower); + data << int32(MaxCreatureScalingLevel); } if (changesMask[98]) { - data << float(UiHitModifier); + data << int32(PetSpellPower); } if (changesMask[99]) { - data << float(UiSpellHitModifier); + data << float(UiHitModifier); } if (changesMask[100]) { - data << int32(HomeRealmTimeOffset); + data << float(UiSpellHitModifier); } if (changesMask[101]) { - data << float(ModPetHaste); + data << int32(HomeRealmTimeOffset); } } if (changesMask[102]) { if (changesMask[103]) { - data << int8(JailersTowerLevelMax); + data << float(ModPetHaste); } if (changesMask[104]) { - data << int8(JailersTowerLevel); + data << int8(JailersTowerLevelMax); } if (changesMask[105]) { - data << uint8(LocalRegenFlags); + data << int8(JailersTowerLevel); } if (changesMask[106]) { - data << uint8(AuraVision); + data << uint8(LocalRegenFlags); } if (changesMask[107]) { - data << uint8(NumBackpackSlots); + data << uint8(AuraVision); } if (changesMask[108]) { - data << int32(OverrideSpellsID); + data << uint8(NumBackpackSlots); } if (changesMask[109]) { - data << uint16(LootSpecID); + data << int32(OverrideSpellsID); } if (changesMask[110]) { - data << uint32(OverrideZonePVPType); + data << uint16(LootSpecID); } if (changesMask[111]) { - data << BnetAccount; + data << uint32(OverrideZonePVPType); } if (changesMask[112]) { - data << uint64(GuildClubMemberID); + data << BnetAccount; } if (changesMask[113]) { - data << int32(Honor); + data << uint64(GuildClubMemberID); } if (changesMask[114]) { - data << int32(HonorNextLevel); + data << int32(Honor); } if (changesMask[115]) { - data << int32(PerksProgramCurrency); + data << int32(HonorNextLevel); } if (changesMask[116]) { + data << int32(PerksProgramCurrency); + } + if (changesMask[117]) + { data << uint8(NumBankSlots); } - if (changesMask[121]) + if (changesMask[122]) { data << int32(UiChromieTimeExpansionID); } - if (changesMask[122]) + if (changesMask[123]) { data << int32(TransportServerTime); } - if (changesMask[123]) + if (changesMask[124]) { data << uint32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[124]) + if (changesMask[125]) { data << int16(DEBUGSoulbindConduitRank); } - if (changesMask[126]) + if (changesMask[127]) { data << uint32(ActiveCombatTraitConfigID); } - if (changesMask[127]) + if (changesMask[128]) { data << int32(ItemUpgradeHighOnehandWeaponItemID); } - if (changesMask[128]) + if (changesMask[129]) { data << int32(ItemUpgradeHighFingerItemID); } - if (changesMask[129]) + if (changesMask[130]) { data << float(ItemUpgradeHighFingerWatermark); } - if (changesMask[130]) + if (changesMask[131]) { data << int32(ItemUpgradeHighTrinketItemID); } - if (changesMask[131]) + if (changesMask[132]) { data << float(ItemUpgradeHighTrinketWatermark); } - if (changesMask[132]) + if (changesMask[133]) { data << uint64(LootHistoryInstanceID); } } if (changesMask[134]) { - if (changesMask[135]) + if (changesMask[136]) { data << uint8(RequiredMountCapabilityFlags); } @@ -5121,32 +5182,41 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo if (changesMask[102]) { data.WriteBits(QuestSession.has_value(), 1); + } + if (changesMask[134]) + { data.WriteBits(PetStable.has_value(), 1); - data.FlushBits(); - if (changesMask[117]) + } + data.FlushBits(); + if (changesMask[102]) + { + if (changesMask[118]) { ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[119]) + if (changesMask[120]) { if (QuestSession.has_value()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[118]) + if (changesMask[119]) { data << FrozenPerksVendorItem; } - if (changesMask[120]) + if (changesMask[121]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[125]) + if (changesMask[126]) { data << DungeonScore; } - if (changesMask[133]) + } + if (changesMask[134]) + { + if (changesMask[135]) { if (PetStable.has_value()) { @@ -5154,151 +5224,151 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[136]) + if (changesMask[137]) { for (uint32 i = 0; i < 227; ++i) { - if (changesMask[137 + i]) + if (changesMask[138 + i]) { data << InvSlots[i]; } } } - if (changesMask[364]) + if (changesMask[365]) { for (uint32 i = 0; i < 240; ++i) { - if (changesMask[365 + i]) + if (changesMask[366 + i]) { data << uint64(ExploredZones[i]); } } } - if (changesMask[605]) + if (changesMask[606]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[606 + i]) + if (changesMask[607 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[608]) + if (changesMask[609]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[609 + i]) + if (changesMask[610 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[616 + i]) + if (changesMask[617 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[623 + i]) + if (changesMask[624 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[630 + i]) + if (changesMask[631 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[637]) + if (changesMask[638]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[638 + i]) + if (changesMask[639 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[641 + i]) + if (changesMask[642 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[644]) + if (changesMask[645]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[645 + i]) + if (changesMask[646 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[657 + i]) + if (changesMask[658 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[669]) + if (changesMask[670]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[670 + i]) + if (changesMask[671 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[702]) + if (changesMask[703]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[703 + i]) + if (changesMask[704 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[707]) + if (changesMask[708]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[708 + i]) + if (changesMask[709 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[710]) + if (changesMask[711]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[711 + i]) + if (changesMask[712 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[716]) + if (changesMask[717]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[717 + i]) + if (changesMask[718 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[724]) + if (changesMask[725]) { for (uint32 i = 0; i < 875; ++i) { - if (changesMask[725 + i]) + if (changesMask[726 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[1600]) + if (changesMask[1601]) { for (uint32 i = 0; i < 17; ++i) { - if (changesMask[1601 + i]) + if (changesMask[1602 + i]) { data << float(ItemUpgradeHighWatermark[i]); } @@ -5310,6 +5380,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo void ActivePlayerData::ClearChangesMask() { Base::ClearChangesMask(BackpackAutoSortDisabled); + Base::ClearChangesMask(BackpackSellJunkDisabled); Base::ClearChangesMask(BankAutoSortDisabled); Base::ClearChangesMask(SortBagsRightToLeft); Base::ClearChangesMask(InsertItemsLeftToRight); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 9d9c3df590f..1b5fe5782ce 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -462,7 +462,7 @@ struct CTROptions : public IsUpdateFieldStructureTag bool operator!=(CTROptions const& right) const { return !(*this == right); } }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<261> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<264> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -478,32 +478,33 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<261> UpdateField<uint32, 0, 12> GuildRankID; UpdateField<uint32, 0, 13> GuildDeleteDate; UpdateField<int32, 0, 14> GuildLevel; - UpdateField<uint8, 0, 15> PartyType; - UpdateField<uint8, 0, 16> NativeSex; - UpdateField<uint8, 0, 17> Inebriation; - UpdateField<uint8, 0, 18> PvpTitle; - UpdateField<uint8, 0, 19> ArenaFaction; - UpdateField<uint32, 0, 20> DuelTeam; - UpdateField<int32, 0, 21> GuildTimeStamp; - UpdateField<int32, 0, 22> PlayerTitle; - UpdateField<int32, 0, 23> FakeInebriation; - UpdateField<uint32, 0, 24> VirtualPlayerRealm; - UpdateField<uint32, 0, 25> CurrentSpecID; - UpdateField<int32, 0, 26> TaxiMountAnimKitID; - UpdateField<uint8, 0, 27> CurrentBattlePetBreedQuality; - UpdateField<int32, 0, 28> HonorLevel; - UpdateField<int64, 0, 29> LogoutTime; - UpdateField<int32, 0, 30> Field_B0; - UpdateField<int32, 0, 31> Field_B4; - UpdateField<int32, 32, 33> CurrentBattlePetSpeciesID; + UpdateField<uint8, 0, 15> NativeSex; + UpdateField<uint8, 0, 16> Inebriation; + UpdateField<uint8, 0, 17> PvpTitle; + UpdateField<uint8, 0, 18> ArenaFaction; + UpdateField<uint32, 0, 19> DuelTeam; + UpdateField<int32, 0, 20> GuildTimeStamp; + UpdateField<int32, 0, 21> PlayerTitle; + UpdateField<int32, 0, 22> FakeInebriation; + UpdateField<uint32, 0, 23> VirtualPlayerRealm; + UpdateField<uint32, 0, 24> CurrentSpecID; + UpdateField<int32, 0, 25> TaxiMountAnimKitID; + UpdateField<uint8, 0, 26> CurrentBattlePetBreedQuality; + UpdateField<int32, 0, 27> HonorLevel; + UpdateField<int64, 0, 28> LogoutTime; + UpdateField<int32, 0, 29> Field_B0; + UpdateField<int32, 0, 30> Field_B4; + UpdateField<int32, 0, 31> CurrentBattlePetSpeciesID; + UpdateField<ObjectGuid, 32, 33> field_138; UpdateField<UF::CTROptions, 32, 34> CtrOptions; UpdateField<int32, 32, 35> CovenantID; UpdateField<int32, 32, 36> SoulbindID; UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 37> DungeonScore; - UpdateFieldArray<UF::QuestLog, 175, 38, 39> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 214, 215> VisibleItems; - UpdateFieldArray<float, 6, 234, 235> AvgItemLevel; - UpdateFieldArray<uint32, 19, 241, 242> Field_3120; + UpdateFieldArray<uint8, 2, 38, 39> PartyType; + UpdateFieldArray<UF::QuestLog, 175, 41, 42> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 217, 218> VisibleItems; + UpdateFieldArray<float, 6, 237, 238> AvgItemLevel; + UpdateFieldArray<uint32, 19, 244, 245> Field_3120; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -827,6 +828,17 @@ struct StableInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3> void ClearChangesMask(); }; +struct CollectableSourceTrackedData : public IsUpdateFieldStructureTag, public HasChangesMask<4> +{ + UpdateField<int32, 0, 1> TargetType; + UpdateField<int32, 0, 2> TargetID; + UpdateField<int32, 0, 3> CollectableSourceInfoID; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + struct Research : public IsUpdateFieldStructureTag { int16 ResearchProjectID; @@ -837,154 +849,155 @@ struct Research : public IsUpdateFieldStructureTag bool operator!=(Research const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1618> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1619> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; - UpdateField<bool, 0, 2> BankAutoSortDisabled; - UpdateField<bool, 0, 3> SortBagsRightToLeft; - UpdateField<bool, 0, 4> InsertItemsLeftToRight; - UpdateField<bool, 0, 5> HasPerksProgramPendingReward; - UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 35, 36> ResearchSites; - UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 37, 38> ResearchSiteProgress; - UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 39, 40> Research; - DynamicUpdateField<uint64, 0, 6> KnownTitles; - DynamicUpdateField<int32, 0, 8> DailyQuestsCompleted; - DynamicUpdateField<int32, 0, 9> AvailableQuestLineXQuestIDs; - DynamicUpdateField<int32, 0, 10> Heirlooms; - DynamicUpdateField<uint32, 0, 11> HeirloomFlags; - DynamicUpdateField<int32, 0, 12> Toys; - DynamicUpdateField<uint32, 0, 13> ToyFlags; - DynamicUpdateField<uint32, 0, 14> Transmog; - DynamicUpdateField<int32, 0, 15> ConditionalTransmog; - DynamicUpdateField<int32, 0, 16> SelfResSpells; - DynamicUpdateField<uint32, 0, 17> RuneforgePowers; - DynamicUpdateField<uint32, 0, 18> TransmogIllusions; - DynamicUpdateField<UF::SpellPctModByLabel, 0, 20> SpellPctModByLabel; - DynamicUpdateField<UF::SpellFlatModByLabel, 0, 21> SpellFlatModByLabel; - DynamicUpdateField<UF::MawPower, 0, 22> MawPowers; - DynamicUpdateField<UF::MultiFloorExplore, 0, 23> MultiFloorExploration; - DynamicUpdateField<UF::RecipeProgressionInfo, 0, 24> RecipeProgression; - DynamicUpdateField<UF::ReplayedQuest, 0, 25> ReplayedQuests; - DynamicUpdateField<UF::QuestLog, 0, 26> TaskQuests; - DynamicUpdateField<int32, 0, 27> DisabledSpells; - DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 30> PersonalCraftingOrderCounts; - DynamicUpdateField<UF::CategoryCooldownMod, 0, 31> CategoryCooldownMods; - DynamicUpdateField<UF::WeeklySpellUse, 32, 33> WeeklySpellUses; - DynamicUpdateField<int64, 32, 34> TrackedCollectableSources; - DynamicUpdateField<UF::PVPInfo, 0, 7> PvpInfo; - DynamicUpdateField<UF::CharacterRestriction, 0, 19> CharacterRestrictions; - DynamicUpdateField<UF::TraitConfig, 0, 28> TraitConfigs; - DynamicUpdateField<UF::CraftingOrder, 0, 29> CraftingOrders; - UpdateField<ObjectGuid, 32, 41> FarsightObject; - UpdateField<ObjectGuid, 32, 42> SummonedBattlePetGUID; - UpdateField<uint64, 32, 43> Coinage; - UpdateField<int32, 32, 44> XP; - UpdateField<int32, 32, 45> NextLevelXP; - UpdateField<int32, 32, 46> TrialXP; - UpdateField<UF::SkillInfo, 32, 47> Skill; - UpdateField<int32, 32, 48> CharacterPoints; - UpdateField<int32, 32, 49> MaxTalentTiers; - UpdateField<uint32, 32, 50> TrackCreatureMask; - UpdateField<float, 32, 51> MainhandExpertise; - UpdateField<float, 32, 52> OffhandExpertise; - UpdateField<float, 32, 53> RangedExpertise; - UpdateField<float, 32, 54> CombatRatingExpertise; - UpdateField<float, 32, 55> BlockPercentage; - UpdateField<float, 32, 56> DodgePercentage; - UpdateField<float, 32, 57> DodgePercentageFromAttribute; - UpdateField<float, 32, 58> ParryPercentage; - UpdateField<float, 32, 59> ParryPercentageFromAttribute; - UpdateField<float, 32, 60> CritPercentage; - UpdateField<float, 32, 61> RangedCritPercentage; - UpdateField<float, 32, 62> OffhandCritPercentage; - UpdateField<float, 32, 63> SpellCritPercentage; - UpdateField<int32, 32, 64> ShieldBlock; - UpdateField<float, 32, 65> ShieldBlockCritPercentage; - UpdateField<float, 32, 66> Mastery; - UpdateField<float, 32, 67> Speed; - UpdateField<float, 32, 68> Avoidance; - UpdateField<float, 32, 69> Sturdiness; - UpdateField<int32, 70, 71> Versatility; - UpdateField<float, 70, 72> VersatilityBonus; - UpdateField<float, 70, 73> PvpPowerDamage; - UpdateField<float, 70, 74> PvpPowerHealing; - UpdateField<int32, 70, 75> ModHealingDonePos; - UpdateField<float, 70, 76> ModHealingPercent; - UpdateField<float, 70, 77> ModPeriodicHealingDonePercent; - UpdateField<float, 70, 78> ModSpellPowerPercent; - UpdateField<float, 70, 79> ModResiliencePercent; - UpdateField<float, 70, 80> OverrideSpellPowerByAPPercent; - UpdateField<float, 70, 81> OverrideAPBySpellPowerPercent; - UpdateField<int32, 70, 82> ModTargetResistance; - UpdateField<int32, 70, 83> ModTargetPhysicalResistance; - UpdateField<uint32, 70, 84> LocalFlags; - UpdateField<uint8, 70, 85> GrantableLevels; - UpdateField<uint8, 70, 86> MultiActionBars; - UpdateField<uint8, 70, 87> LifetimeMaxRank; - UpdateField<uint8, 70, 88> NumRespecs; - UpdateField<uint32, 70, 89> PvpMedals; - UpdateField<uint16, 70, 90> TodayHonorableKills; - UpdateField<uint16, 70, 91> YesterdayHonorableKills; - UpdateField<uint32, 70, 92> LifetimeHonorableKills; - UpdateField<int32, 70, 93> WatchedFactionIndex; - UpdateField<int32, 70, 94> MaxLevel; - UpdateField<int32, 70, 95> ScalingPlayerLevelDelta; - UpdateField<int32, 70, 96> MaxCreatureScalingLevel; - UpdateField<int32, 70, 97> PetSpellPower; - UpdateField<float, 70, 98> UiHitModifier; - UpdateField<float, 70, 99> UiSpellHitModifier; - UpdateField<int32, 70, 100> HomeRealmTimeOffset; - UpdateField<float, 70, 101> ModPetHaste; - UpdateField<int8, 102, 103> JailersTowerLevelMax; - UpdateField<int8, 102, 104> JailersTowerLevel; - UpdateField<uint8, 102, 105> LocalRegenFlags; - UpdateField<uint8, 102, 106> AuraVision; - UpdateField<uint8, 102, 107> NumBackpackSlots; - UpdateField<int32, 102, 108> OverrideSpellsID; - UpdateField<uint16, 102, 109> LootSpecID; - UpdateField<uint32, 102, 110> OverrideZonePVPType; - UpdateField<ObjectGuid, 102, 111> BnetAccount; - UpdateField<uint64, 102, 112> GuildClubMemberID; - UpdateField<int32, 102, 113> Honor; - UpdateField<int32, 102, 114> HonorNextLevel; - UpdateField<int32, 102, 115> PerksProgramCurrency; - UpdateField<uint8, 102, 116> NumBankSlots; - UpdateField<UF::ResearchHistory, 102, 117> ResearchHistory; - UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 118> FrozenPerksVendorItem; - UpdateField<UF::ActivePlayerUnk901, 102, 120> Field_1410; - OptionalUpdateField<UF::QuestSession, 102, 119> QuestSession; - UpdateField<int32, 102, 121> UiChromieTimeExpansionID; - UpdateField<int32, 102, 122> TransportServerTime; - UpdateField<uint32, 102, 123> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 102, 124> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 125> DungeonScore; - UpdateField<uint32, 102, 126> ActiveCombatTraitConfigID; - UpdateField<int32, 102, 127> ItemUpgradeHighOnehandWeaponItemID; - UpdateField<int32, 102, 128> ItemUpgradeHighFingerItemID; - UpdateField<float, 102, 129> ItemUpgradeHighFingerWatermark; - UpdateField<int32, 102, 130> ItemUpgradeHighTrinketItemID; - UpdateField<float, 102, 131> ItemUpgradeHighTrinketWatermark; - UpdateField<uint64, 102, 132> LootHistoryInstanceID; - OptionalUpdateField<UF::StableInfo, 102, 133> PetStable; - UpdateField<uint8, 134, 135> RequiredMountCapabilityFlags; - UpdateFieldArray<ObjectGuid, 227, 136, 137> InvSlots; - UpdateFieldArray<uint64, 240, 364, 365> ExploredZones; - UpdateFieldArray<UF::RestInfo, 2, 605, 606> RestInfo; - UpdateFieldArray<int32, 7, 608, 609> ModDamageDonePos; - UpdateFieldArray<int32, 7, 608, 616> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 608, 623> ModDamageDonePercent; - UpdateFieldArray<float, 7, 608, 630> ModHealingDonePercent; - UpdateFieldArray<float, 3, 637, 638> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 637, 641> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 644, 645> BuybackPrice; - UpdateFieldArray<int64, 12, 644, 657> BuybackTimestamp; - UpdateFieldArray<int32, 32, 669, 670> CombatRatings; - UpdateFieldArray<uint32, 4, 702, 703> NoReagentCostMask; - UpdateFieldArray<int32, 2, 707, 708> ProfessionSkillLine; - UpdateFieldArray<uint32, 5, 710, 711> BagSlotFlags; - UpdateFieldArray<uint32, 7, 716, 717> BankBagSlotFlags; - UpdateFieldArray<uint64, 875, 724, 725> QuestCompleted; - UpdateFieldArray<float, 17, 1600, 1601> ItemUpgradeHighWatermark; + UpdateField<bool, 0, 2> BackpackSellJunkDisabled; + UpdateField<bool, 0, 3> BankAutoSortDisabled; + UpdateField<bool, 0, 4> SortBagsRightToLeft; + UpdateField<bool, 0, 5> InsertItemsLeftToRight; + UpdateField<bool, 0, 6> HasPerksProgramPendingReward; + UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 36, 37> ResearchSites; + UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 38, 39> ResearchSiteProgress; + UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 40, 41> Research; + DynamicUpdateField<uint64, 0, 7> KnownTitles; + DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted; + DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs; + DynamicUpdateField<int32, 0, 11> Heirlooms; + DynamicUpdateField<uint32, 0, 12> HeirloomFlags; + DynamicUpdateField<int32, 0, 13> Toys; + DynamicUpdateField<uint32, 0, 14> ToyFlags; + DynamicUpdateField<uint32, 0, 15> Transmog; + DynamicUpdateField<int32, 0, 16> ConditionalTransmog; + DynamicUpdateField<int32, 0, 17> SelfResSpells; + DynamicUpdateField<uint32, 0, 18> RuneforgePowers; + DynamicUpdateField<uint32, 0, 19> TransmogIllusions; + DynamicUpdateField<UF::SpellPctModByLabel, 0, 21> SpellPctModByLabel; + DynamicUpdateField<UF::SpellFlatModByLabel, 0, 22> SpellFlatModByLabel; + DynamicUpdateField<UF::MawPower, 0, 23> MawPowers; + DynamicUpdateField<UF::MultiFloorExplore, 0, 24> MultiFloorExploration; + DynamicUpdateField<UF::RecipeProgressionInfo, 0, 25> RecipeProgression; + DynamicUpdateField<UF::ReplayedQuest, 0, 26> ReplayedQuests; + DynamicUpdateField<UF::QuestLog, 0, 27> TaskQuests; + DynamicUpdateField<int32, 0, 28> DisabledSpells; + DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 31> PersonalCraftingOrderCounts; + DynamicUpdateField<UF::CategoryCooldownMod, 32, 33> CategoryCooldownMods; + DynamicUpdateField<UF::WeeklySpellUse, 32, 34> WeeklySpellUses; + DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 35> TrackedCollectableSources; + DynamicUpdateField<UF::PVPInfo, 0, 8> PvpInfo; + DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions; + DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs; + DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders; + UpdateField<ObjectGuid, 32, 42> FarsightObject; + UpdateField<ObjectGuid, 32, 43> SummonedBattlePetGUID; + UpdateField<uint64, 32, 44> Coinage; + UpdateField<int32, 32, 45> XP; + UpdateField<int32, 32, 46> NextLevelXP; + UpdateField<int32, 32, 47> TrialXP; + UpdateField<UF::SkillInfo, 32, 48> Skill; + UpdateField<int32, 32, 49> CharacterPoints; + UpdateField<int32, 32, 50> MaxTalentTiers; + UpdateField<uint32, 32, 51> TrackCreatureMask; + UpdateField<float, 32, 52> MainhandExpertise; + UpdateField<float, 32, 53> OffhandExpertise; + UpdateField<float, 32, 54> RangedExpertise; + UpdateField<float, 32, 55> CombatRatingExpertise; + UpdateField<float, 32, 56> BlockPercentage; + UpdateField<float, 32, 57> DodgePercentage; + UpdateField<float, 32, 58> DodgePercentageFromAttribute; + UpdateField<float, 32, 59> ParryPercentage; + UpdateField<float, 32, 60> ParryPercentageFromAttribute; + UpdateField<float, 32, 61> CritPercentage; + UpdateField<float, 32, 62> RangedCritPercentage; + UpdateField<float, 32, 63> OffhandCritPercentage; + UpdateField<float, 32, 64> SpellCritPercentage; + UpdateField<int32, 32, 65> ShieldBlock; + UpdateField<float, 32, 66> ShieldBlockCritPercentage; + UpdateField<float, 32, 67> Mastery; + UpdateField<float, 32, 68> Speed; + UpdateField<float, 32, 69> Avoidance; + UpdateField<float, 70, 71> Sturdiness; + UpdateField<int32, 70, 72> Versatility; + UpdateField<float, 70, 73> VersatilityBonus; + UpdateField<float, 70, 74> PvpPowerDamage; + UpdateField<float, 70, 75> PvpPowerHealing; + UpdateField<int32, 70, 76> ModHealingDonePos; + UpdateField<float, 70, 77> ModHealingPercent; + UpdateField<float, 70, 78> ModPeriodicHealingDonePercent; + UpdateField<float, 70, 79> ModSpellPowerPercent; + UpdateField<float, 70, 80> ModResiliencePercent; + UpdateField<float, 70, 81> OverrideSpellPowerByAPPercent; + UpdateField<float, 70, 82> OverrideAPBySpellPowerPercent; + UpdateField<int32, 70, 83> ModTargetResistance; + UpdateField<int32, 70, 84> ModTargetPhysicalResistance; + UpdateField<uint32, 70, 85> LocalFlags; + UpdateField<uint8, 70, 86> GrantableLevels; + UpdateField<uint8, 70, 87> MultiActionBars; + UpdateField<uint8, 70, 88> LifetimeMaxRank; + UpdateField<uint8, 70, 89> NumRespecs; + UpdateField<uint32, 70, 90> PvpMedals; + UpdateField<uint16, 70, 91> TodayHonorableKills; + UpdateField<uint16, 70, 92> YesterdayHonorableKills; + UpdateField<uint32, 70, 93> LifetimeHonorableKills; + UpdateField<int32, 70, 94> WatchedFactionIndex; + UpdateField<int32, 70, 95> MaxLevel; + UpdateField<int32, 70, 96> ScalingPlayerLevelDelta; + UpdateField<int32, 70, 97> MaxCreatureScalingLevel; + UpdateField<int32, 70, 98> PetSpellPower; + UpdateField<float, 70, 99> UiHitModifier; + UpdateField<float, 70, 100> UiSpellHitModifier; + UpdateField<int32, 70, 101> HomeRealmTimeOffset; + UpdateField<float, 102, 103> ModPetHaste; + UpdateField<int8, 102, 104> JailersTowerLevelMax; + UpdateField<int8, 102, 105> JailersTowerLevel; + UpdateField<uint8, 102, 106> LocalRegenFlags; + UpdateField<uint8, 102, 107> AuraVision; + UpdateField<uint8, 102, 108> NumBackpackSlots; + UpdateField<int32, 102, 109> OverrideSpellsID; + UpdateField<uint16, 102, 110> LootSpecID; + UpdateField<uint32, 102, 111> OverrideZonePVPType; + UpdateField<ObjectGuid, 102, 112> BnetAccount; + UpdateField<uint64, 102, 113> GuildClubMemberID; + UpdateField<int32, 102, 114> Honor; + UpdateField<int32, 102, 115> HonorNextLevel; + UpdateField<int32, 102, 116> PerksProgramCurrency; + UpdateField<uint8, 102, 117> NumBankSlots; + UpdateField<UF::ResearchHistory, 102, 118> ResearchHistory; + UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 119> FrozenPerksVendorItem; + UpdateField<UF::ActivePlayerUnk901, 102, 121> Field_1410; + OptionalUpdateField<UF::QuestSession, 102, 120> QuestSession; + UpdateField<int32, 102, 122> UiChromieTimeExpansionID; + UpdateField<int32, 102, 123> TransportServerTime; + UpdateField<uint32, 102, 124> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 102, 125> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 126> DungeonScore; + UpdateField<uint32, 102, 127> ActiveCombatTraitConfigID; + UpdateField<int32, 102, 128> ItemUpgradeHighOnehandWeaponItemID; + UpdateField<int32, 102, 129> ItemUpgradeHighFingerItemID; + UpdateField<float, 102, 130> ItemUpgradeHighFingerWatermark; + UpdateField<int32, 102, 131> ItemUpgradeHighTrinketItemID; + UpdateField<float, 102, 132> ItemUpgradeHighTrinketWatermark; + UpdateField<uint64, 102, 133> LootHistoryInstanceID; + OptionalUpdateField<UF::StableInfo, 134, 135> PetStable; + UpdateField<uint8, 134, 136> RequiredMountCapabilityFlags; + UpdateFieldArray<ObjectGuid, 227, 137, 138> InvSlots; + UpdateFieldArray<uint64, 240, 365, 366> ExploredZones; + UpdateFieldArray<UF::RestInfo, 2, 606, 607> RestInfo; + UpdateFieldArray<int32, 7, 609, 610> ModDamageDonePos; + UpdateFieldArray<int32, 7, 609, 617> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 609, 624> ModDamageDonePercent; + UpdateFieldArray<float, 7, 609, 631> ModHealingDonePercent; + UpdateFieldArray<float, 3, 638, 639> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 638, 642> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 645, 646> BuybackPrice; + UpdateFieldArray<int64, 12, 645, 658> BuybackTimestamp; + UpdateFieldArray<int32, 32, 670, 671> CombatRatings; + UpdateFieldArray<uint32, 4, 703, 704> NoReagentCostMask; + UpdateFieldArray<int32, 2, 708, 709> ProfessionSkillLine; + UpdateFieldArray<uint32, 5, 711, 712> BagSlotFlags; + UpdateFieldArray<uint32, 7, 717, 718> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 725, 726> QuestCompleted; + UpdateFieldArray<float, 17, 1601, 1602> ItemUpgradeHighWatermark; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5126853d96d..a52afe95a6d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -13200,8 +13200,8 @@ void Player::SendBuyError(BuyResult msg, Creature* creature, uint32 item, uint32 void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid) const { WorldPackets::Item::SellResponse sellResponse; - sellResponse.VendorGUID = (creature ? creature->GetGUID() : ObjectGuid::Empty); - sellResponse.ItemGUID = guid; + sellResponse.VendorGUID = creature ? creature->GetGUID() : ObjectGuid::Empty; + sellResponse.ItemGUIDs.push_back(guid); sellResponse.Reason = msg; SendDirectMessage(sellResponse.Write()); } @@ -23796,6 +23796,23 @@ bool Player::IsInGroup(ObjectGuid groupGuid) const return false; } +Group const* Player::GetGroup(Optional<uint8> partyIndex) const +{ + Group const* group = GetGroup(); + if (!partyIndex) + return group; + + GroupCategory category = GroupCategory(*partyIndex); + if (group && group->GetGroupCategory() == category) + return group; + + Group const* originalGroup = GetOriginalGroup(); + if (originalGroup && originalGroup->GetGroupCategory() == category) + return originalGroup; + + return nullptr; +} + void Player::SetGroup(Group* group, int8 subgroup) { if (group == nullptr) @@ -25469,9 +25486,9 @@ Player* Player::GetNextRandomRaidMember(float radius) return nearMembers[randTarget]; } -PartyResult Player::CanUninviteFromGroup(ObjectGuid guidMember) const +PartyResult Player::CanUninviteFromGroup(ObjectGuid guidMember, Optional<uint8> partyIndex) const { - Group const* grp = GetGroup(); + Group const* grp = GetGroup(partyIndex); if (!grp) return ERR_NOT_IN_GROUP; @@ -25492,7 +25509,7 @@ PartyResult Player::CanUninviteFromGroup(ObjectGuid guidMember) const return ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE; Player* player = ObjectAccessor::FindConnectedPlayer(guidMember); - if (!player->m_lootRolls.empty()) + if (player && !player->m_lootRolls.empty()) return ERR_PARTY_LFG_BOOT_LOOT_ROLLS; /// @todo Should also be sent when anyone has recently left combat, with an aprox ~5 seconds timer. @@ -25574,10 +25591,7 @@ void Player::SetOriginalGroup(Group* group, int8 subgroup) void Player::SetPartyType(GroupCategory category, uint8 type) { ASSERT(category < MAX_GROUP_CATEGORY); - uint8 value = m_playerData->PartyType; - value &= ~uint8(uint8(0xFF) << (category * 4)); - value |= uint8(uint8(type) << (category * 4)); - SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PartyType), value); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PartyType, category), type); } void Player::ResetGroupUpdateSequenceIfNeeded(Group const* group) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c328092ac41..adf692b7507 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2587,6 +2587,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool IsInGroup(ObjectGuid groupGuid) const; Group* GetGroupInvite() const { return m_groupInvite; } void SetGroupInvite(Group* group) { m_groupInvite = group; } + Group* GetGroup(Optional<uint8> partyIndex) { return const_cast<Group*>(const_cast<Player const*>(this)->GetGroup(partyIndex)); } + Group const* GetGroup(Optional<uint8> partyIndex) const; Group* GetGroup() { return m_group.getTarget(); } Group const* GetGroup() const { return const_cast<Group const*>(m_group.getTarget()); } GroupReference& GetGroupRef() { return m_group; } @@ -2599,7 +2601,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void ResetGroupUpdateSequenceIfNeeded(Group const* group); int32 NextGroupUpdateSequenceNumber(GroupCategory category); Player* GetNextRandomRaidMember(float radius); - PartyResult CanUninviteFromGroup(ObjectGuid guidMember = ObjectGuid::Empty) const; + PartyResult CanUninviteFromGroup(ObjectGuid guidMember, Optional<uint8> partyIndex) const; // Battleground / Battlefield Group System void SetBattlegroundOrBattlefieldRaid(Group* group, int8 subgroup = -1); diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 821ee3c7dd8..55a481c8fc7 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -657,7 +657,7 @@ bool Group::RemoveMember(ObjectGuid guid, RemoveMethod method /*= GROUP_REMOVEME } } -void Group::ChangeLeader(ObjectGuid newLeaderGuid, int8 partyIndex) +void Group::ChangeLeader(ObjectGuid newLeaderGuid) { member_witerator slot = _getMemberWSlot(newLeaderGuid); @@ -698,7 +698,7 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid, int8 partyIndex) WorldPackets::Party::GroupNewLeader groupNewLeader; groupNewLeader.Name = m_leaderName; - groupNewLeader.PartyIndex = partyIndex; + groupNewLeader.PartyIndex = GetGroupCategory(); BroadcastPacket(groupNewLeader.Write(), true); } @@ -769,7 +769,7 @@ void Group::Disband(bool hideDestroy /* = false */) delete this; } -void Group::SetTargetIcon(uint8 symbol, ObjectGuid target, ObjectGuid changedBy, uint8 partyIndex) +void Group::SetTargetIcon(uint8 symbol, ObjectGuid target, ObjectGuid changedBy) { if (symbol >= TARGET_ICONS_COUNT) return; @@ -778,27 +778,27 @@ void Group::SetTargetIcon(uint8 symbol, ObjectGuid target, ObjectGuid changedBy, if (!target.IsEmpty()) for (uint8 i = 0; i < TARGET_ICONS_COUNT; ++i) if (m_targetIcons[i] == target) - SetTargetIcon(i, ObjectGuid::Empty, changedBy, partyIndex); + SetTargetIcon(i, ObjectGuid::Empty, changedBy); m_targetIcons[symbol] = target; WorldPackets::Party::SendRaidTargetUpdateSingle updateSingle; - updateSingle.PartyIndex = partyIndex; + updateSingle.PartyIndex = GetGroupCategory(); updateSingle.Target = target; updateSingle.ChangedBy = changedBy; updateSingle.Symbol = symbol; BroadcastPacket(updateSingle.Write(), true); } -void Group::SendTargetIconList(WorldSession* session, int8 partyIndex) +void Group::SendTargetIconList(WorldSession* session) { if (!session) return; WorldPackets::Party::SendRaidTargetUpdateAll updateAll; - updateAll.PartyIndex = partyIndex; + updateAll.PartyIndex = GetGroupCategory(); for (uint8 i = 0; i < TARGET_ICONS_COUNT; i++) - updateAll.TargetIcons.insert(std::pair<uint8, ObjectGuid>(i, m_targetIcons[i])); + updateAll.TargetIcons.try_emplace(i, m_targetIcons[i]); session->SendPacket(updateAll.Write()); } @@ -1444,7 +1444,7 @@ void Group::UpdateReadyCheck(uint32 diff) EndReadyCheck(); } -void Group::StartReadyCheck(ObjectGuid starterGuid, int8 partyIndex, Milliseconds duration) +void Group::StartReadyCheck(ObjectGuid starterGuid, Milliseconds duration) { if (m_readyCheckStarted) return; @@ -1462,7 +1462,7 @@ void Group::StartReadyCheck(ObjectGuid starterGuid, int8 partyIndex, Millisecond WorldPackets::Party::ReadyCheckStarted readyCheckStarted; readyCheckStarted.PartyGUID = m_guid; - readyCheckStarted.PartyIndex = partyIndex; + readyCheckStarted.PartyIndex = GetGroupCategory(); readyCheckStarted.InitiatorGUID = starterGuid; readyCheckStarted.Duration = duration; BroadcastPacket(readyCheckStarted.Write(), false); @@ -1561,11 +1561,11 @@ void Group::DeleteRaidMarker(uint8 markerId) SendRaidMarkersChanged(); } -void Group::SendRaidMarkersChanged(WorldSession* session, int8 partyIndex) +void Group::SendRaidMarkersChanged(WorldSession* session) { WorldPackets::Party::RaidMarkersChanged packet; - packet.PartyIndex = partyIndex; + packet.PartyIndex = GetGroupCategory(); packet.ActiveMarkers = m_activeMarkers; for (uint8 i = 0; i < RAID_MARKERS_COUNT; i++) diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 825c8732724..397755c6deb 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -209,7 +209,7 @@ class TC_GAME_API Group bool AddLeaderInvite(Player* player); bool AddMember(Player* player); bool RemoveMember(ObjectGuid guid, RemoveMethod method = GROUP_REMOVEMETHOD_DEFAULT, ObjectGuid kicker = ObjectGuid::Empty, const char* reason = nullptr); - void ChangeLeader(ObjectGuid guid, int8 partyIndex = 0); + void ChangeLeader(ObjectGuid guid); void SetLootMethod(LootMethod method); void SetLooterGuid(ObjectGuid guid); void SetMasterLooterGuid(ObjectGuid guid); @@ -224,7 +224,7 @@ class TC_GAME_API Group void UpdateReadyCheck(uint32 diff); // Ready check - void StartReadyCheck(ObjectGuid starterGuid, int8 partyIndex, Milliseconds duration = Milliseconds(READYCHECK_DURATION)); + void StartReadyCheck(ObjectGuid starterGuid, Milliseconds duration = Milliseconds(READYCHECK_DURATION)); void EndReadyCheck(); bool IsReadyCheckStarted(void) const { return m_readyCheckStarted; } @@ -240,7 +240,7 @@ class TC_GAME_API Group // Raid Markers void AddRaidMarker(uint8 markerId, uint32 mapId, float positionX, float positionY, float positionZ, ObjectGuid transportGuid = ObjectGuid::Empty); void DeleteRaidMarker(uint8 markerId); - void SendRaidMarkersChanged(WorldSession* session = nullptr, int8 partyIndex = 0); + void SendRaidMarkersChanged(WorldSession* session = nullptr); // properties accessories bool IsFull() const; @@ -297,7 +297,7 @@ class TC_GAME_API Group void ChangeMembersGroup(ObjectGuid guid, uint8 group); void SwapMembersGroups(ObjectGuid firstGuid, ObjectGuid secondGuid); - void SetTargetIcon(uint8 symbol, ObjectGuid target, ObjectGuid changedBy, uint8 partyIndex); + void SetTargetIcon(uint8 symbol, ObjectGuid target, ObjectGuid changedBy); void SetGroupMemberFlag(ObjectGuid guid, bool apply, GroupMemberFlags flag); void RemoveUniqueGroupMemberFlag(GroupMemberFlags flag); @@ -312,7 +312,7 @@ class TC_GAME_API Group // -no description- //void SendInit(WorldSession* session); - void SendTargetIconList(WorldSession* session, int8 partyIndex = 0); + void SendTargetIconList(WorldSession* session); void SendUpdate(); void SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot* slot = nullptr); void SendUpdateDestroyGroupToPlayer(Player* player) const; diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp index e12c5dec2e7..cf06a8c754f 100644 --- a/src/server/game/Handlers/GroupHandler.cpp +++ b/src/server/game/Handlers/GroupHandler.cpp @@ -111,15 +111,11 @@ void WorldSession::HandlePartyInviteOpcode(WorldPackets::Party::PartyInviteClien return; } - Group* group = invitingPlayer->GetGroup(); - if (group && group->isBGGroup()) - group = invitingPlayer->GetOriginalGroup(); + Group* group = invitingPlayer->GetGroup(packet.PartyIndex); if (!group) group = invitingPlayer->GetGroupInvite(); - Group* group2 = invitedPlayer->GetGroup(); - if (group2 && group2->isBGGroup()) - group2 = invitedPlayer->GetOriginalGroup(); + Group* group2 = invitedPlayer->GetGroup(packet.PartyIndex); // player already in another group or invited if (group2 || invitedPlayer->GetGroupInvite()) { @@ -195,6 +191,9 @@ void WorldSession::HandlePartyInviteResponseOpcode(WorldPackets::Party::PartyInv if (!group) return; + if (packet.PartyIndex && group->GetGroupCategory() != GroupCategory(*packet.PartyIndex)) + return; + if (packet.Accept) { // Remove player from invitees in any case @@ -265,14 +264,14 @@ void WorldSession::HandlePartyUninviteOpcode(WorldPackets::Party::PartyUninvite& return; } - PartyResult res = GetPlayer()->CanUninviteFromGroup(packet.TargetGUID); + PartyResult res = GetPlayer()->CanUninviteFromGroup(packet.TargetGUID, packet.PartyIndex); if (res != ERR_PARTY_RESULT_OK) { SendPartyResult(PARTY_OP_UNINVITE, "", res); return; } - Group* grp = GetPlayer()->GetGroup(); + Group* grp = GetPlayer()->GetGroup(packet.PartyIndex); // grp is checked already above in CanUninviteFromGroup() ASSERT(grp); @@ -294,7 +293,7 @@ void WorldSession::HandlePartyUninviteOpcode(WorldPackets::Party::PartyUninvite& void WorldSession::HandleSetPartyLeaderOpcode(WorldPackets::Party::SetPartyLeader& packet) { Player* player = ObjectAccessor::FindConnectedPlayer(packet.TargetGUID); - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group || !player) return; @@ -303,7 +302,7 @@ void WorldSession::HandleSetPartyLeaderOpcode(WorldPackets::Party::SetPartyLeade return; // Everything's fine, accepted. - group->ChangeLeader(packet.TargetGUID, packet.PartyIndex); + group->ChangeLeader(packet.TargetGUID); group->SendUpdate(); } @@ -311,12 +310,12 @@ void WorldSession::HandleSetRoleOpcode(WorldPackets::Party::SetRole& packet) { WorldPackets::Party::RoleChangedInform roleChangedInform; - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); uint8 oldRole = group ? group->GetLfgRoles(packet.TargetGUID) : 0; if (oldRole == packet.Role) return; - roleChangedInform.PartyIndex = packet.PartyIndex; + roleChangedInform.PartyIndex = group->GetGroupCategory(); roleChangedInform.From = GetPlayer()->GetGUID(); roleChangedInform.ChangedUnit = packet.TargetGUID; roleChangedInform.OldRole = oldRole; @@ -331,9 +330,9 @@ void WorldSession::HandleSetRoleOpcode(WorldPackets::Party::SetRole& packet) SendPacket(roleChangedInform.Write()); } -void WorldSession::HandleLeaveGroupOpcode(WorldPackets::Party::LeaveGroup& /*packet*/) +void WorldSession::HandleLeaveGroupOpcode(WorldPackets::Party::LeaveGroup& packet) { - Group* grp = GetPlayer()->GetGroup(); + Group* grp = GetPlayer()->GetGroup(packet.PartyIndex); Group* grpInvite = GetPlayer()->GetGroupInvite(); if (!grp && !grpInvite) return; @@ -364,7 +363,7 @@ void WorldSession::HandleSetLootMethodOpcode(WorldPackets::Party::SetLootMethod& { // not allowed to change /* - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; @@ -401,14 +400,15 @@ void WorldSession::HandleSetLootMethodOpcode(WorldPackets::Party::SetLootMethod& void WorldSession::HandleMinimapPingOpcode(WorldPackets::Party::MinimapPingClient& packet) { - if (!GetPlayer()->GetGroup()) + Group const* group = GetPlayer()->GetGroup(packet.PartyIndex); + if (!group) return; WorldPackets::Party::MinimapPing minimapPing; minimapPing.Sender = GetPlayer()->GetGUID(); minimapPing.PositionX = packet.PositionX; minimapPing.PositionY = packet.PositionY; - GetPlayer()->GetGroup()->BroadcastPacket(minimapPing.Write(), true, -1, GetPlayer()->GetGUID()); + group->BroadcastPacket(minimapPing.Write(), true, -1, GetPlayer()->GetGUID()); } void WorldSession::HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& packet) @@ -423,12 +423,12 @@ void WorldSession::HandleRandomRollOpcode(WorldPackets::Misc::RandomRollClient& void WorldSession::HandleUpdateRaidTargetOpcode(WorldPackets::Party::UpdateRaidTarget& packet) { - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; if (packet.Symbol == -1) // target icon request - group->SendTargetIconList(this, packet.PartyIndex); + group->SendTargetIconList(this); else // target icon update { if (group->isRaidGroup() && !group->IsLeader(GetPlayer()->GetGUID()) && !group->IsAssistant(GetPlayer()->GetGUID())) @@ -441,7 +441,7 @@ void WorldSession::HandleUpdateRaidTargetOpcode(WorldPackets::Party::UpdateRaidT return; } - group->SetTargetIcon(packet.Symbol, packet.Target, GetPlayer()->GetGUID(), packet.PartyIndex); + group->SetTargetIcon(packet.Symbol, packet.Target, GetPlayer()->GetGUID()); } } @@ -470,18 +470,18 @@ void WorldSession::HandleConvertRaidOpcode(WorldPackets::Party::ConvertRaid& pac void WorldSession::HandleRequestPartyJoinUpdates(WorldPackets::Party::RequestPartyJoinUpdates& packet) { - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; - group->SendTargetIconList(this, packet.PartyIndex); - group->SendRaidMarkersChanged(this, packet.PartyIndex); + group->SendTargetIconList(this); + group->SendRaidMarkersChanged(this); } void WorldSession::HandleChangeSubGroupOpcode(WorldPackets::Party::ChangeSubGroup& packet) { // we will get correct pointer for group here, so we don't have to check if group is BG raid - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; @@ -500,7 +500,7 @@ void WorldSession::HandleChangeSubGroupOpcode(WorldPackets::Party::ChangeSubGrou void WorldSession::HandleSwapSubGroupsOpcode(WorldPackets::Party::SwapSubGroups& packet) { - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; @@ -513,7 +513,7 @@ void WorldSession::HandleSwapSubGroupsOpcode(WorldPackets::Party::SwapSubGroups& void WorldSession::HandleSetAssistantLeaderOpcode(WorldPackets::Party::SetAssistantLeader& packet) { - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; @@ -525,7 +525,7 @@ void WorldSession::HandleSetAssistantLeaderOpcode(WorldPackets::Party::SetAssist void WorldSession::HandleSetPartyAssignment(WorldPackets::Party::SetPartyAssignment& packet) { - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; @@ -552,7 +552,7 @@ void WorldSession::HandleSetPartyAssignment(WorldPackets::Party::SetPartyAssignm void WorldSession::HandleDoReadyCheckOpcode(WorldPackets::Party::DoReadyCheck& packet) { - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; @@ -562,12 +562,12 @@ void WorldSession::HandleDoReadyCheckOpcode(WorldPackets::Party::DoReadyCheck& p /********************/ // everything's fine, do it - group->StartReadyCheck(GetPlayer()->GetGUID(), packet.PartyIndex); + group->StartReadyCheck(GetPlayer()->GetGUID()); } void WorldSession::HandleReadyCheckResponseOpcode(WorldPackets::Party::ReadyCheckResponseClient& packet) { - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; @@ -612,7 +612,7 @@ void WorldSession::HandleOptOutOfLootOpcode(WorldPackets::Party::OptOutOfLoot& p void WorldSession::HandleInitiateRolePoll(WorldPackets::Party::InitiateRolePoll& packet) { - Group* group = GetPlayer()->GetGroup(); + Group const* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; @@ -622,13 +622,13 @@ void WorldSession::HandleInitiateRolePoll(WorldPackets::Party::InitiateRolePoll& WorldPackets::Party::RolePollInform rolePollInform; rolePollInform.From = GetPlayer()->GetGUID(); - rolePollInform.PartyIndex = packet.PartyIndex; + rolePollInform.PartyIndex = group->GetGroupCategory(); group->BroadcastPacket(rolePollInform.Write(), true); } void WorldSession::HandleSetEveryoneIsAssistant(WorldPackets::Party::SetEveryoneIsAssistant& packet) { - Group* group = GetPlayer()->GetGroup(); + Group* group = GetPlayer()->GetGroup(packet.PartyIndex); if (!group) return; diff --git a/src/server/game/Handlers/InspectHandler.cpp b/src/server/game/Handlers/InspectHandler.cpp index e4416383994..5bfd00dc1fa 100644 --- a/src/server/game/Handlers/InspectHandler.cpp +++ b/src/server/game/Handlers/InspectHandler.cpp @@ -56,6 +56,11 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect) PlayerPvpTalentMap const& pvpTalents = player->GetPvpTalentMap(player->GetActiveTalentGroup()); for (std::size_t i = 0; i < pvpTalents.size(); ++i) inspectResult.PvpTalents[i] = pvpTalents[i]; + + inspectResult.TalentTraits.Level = player->GetLevel(); + inspectResult.TalentTraits.ChrSpecializationID = AsUnderlyingType(player->GetPrimarySpecialization()); + if (UF::TraitConfig const* traitConfig = player->GetTraitConfig(player->m_activePlayerData->ActiveCombatTraitConfigID)) + inspectResult.TalentTraits.Config = WorldPackets::Traits::TraitConfig(*traitConfig); } if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId())) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index c7d443f78d0..7b50a922715 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7685,363 +7685,365 @@ enum class GameError : uint32 ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 764, ERR_BATTLEGROUND_JOIN_RESPEC = 765, ERR_BATTLEGROUND_INVITATION_DECLINED = 766, - ERR_BATTLEGROUND_JOIN_TIMED_OUT = 767, - ERR_BATTLEGROUND_DUPE_QUEUE = 768, - ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 769, - ERR_IN_BATTLEGROUND_RESPEC = 770, - ERR_MAIL_LIMITED_DURATION_ITEM = 771, - ERR_YELL_RESTRICTED_TRIAL = 772, - ERR_CHAT_RAID_RESTRICTED_TRIAL = 773, - ERR_LFG_ROLE_CHECK_FAILED = 774, - ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 775, - ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 776, - ERR_LFG_READY_CHECK_FAILED = 777, - ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 778, - ERR_LFG_GROUP_FULL = 779, - ERR_LFG_NO_LFG_OBJECT = 780, - ERR_LFG_NO_SLOTS_PLAYER = 781, - ERR_LFG_NO_SLOTS_PARTY = 782, - ERR_LFG_NO_SPEC = 783, - ERR_LFG_MISMATCHED_SLOTS = 784, - ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 785, - ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 786, - ERR_LFG_MEMBERS_NOT_PRESENT = 787, - ERR_LFG_GET_INFO_TIMEOUT = 788, - ERR_LFG_INVALID_SLOT = 789, - ERR_LFG_DESERTER_PLAYER = 790, - ERR_LFG_DESERTER_PARTY = 791, - ERR_LFG_DEAD = 792, - ERR_LFG_RANDOM_COOLDOWN_PLAYER = 793, - ERR_LFG_RANDOM_COOLDOWN_PARTY = 794, - ERR_LFG_TOO_MANY_MEMBERS = 795, - ERR_LFG_TOO_FEW_MEMBERS = 796, - ERR_LFG_PROPOSAL_FAILED = 797, - ERR_LFG_PROPOSAL_DECLINED_SELF = 798, - ERR_LFG_PROPOSAL_DECLINED_PARTY = 799, - ERR_LFG_NO_SLOTS_SELECTED = 800, - ERR_LFG_NO_ROLES_SELECTED = 801, - ERR_LFG_ROLE_CHECK_INITIATED = 802, - ERR_LFG_READY_CHECK_INITIATED = 803, - ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 804, - ERR_LFG_PLAYER_DECLINED_READY_CHECK = 805, - ERR_LFG_JOINED_QUEUE = 806, - ERR_LFG_JOINED_FLEX_QUEUE = 807, - ERR_LFG_JOINED_RF_QUEUE = 808, - ERR_LFG_JOINED_SCENARIO_QUEUE = 809, - ERR_LFG_JOINED_WORLD_PVP_QUEUE = 810, - ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 811, - ERR_LFG_JOINED_LIST = 812, - ERR_LFG_LEFT_QUEUE = 813, - ERR_LFG_LEFT_LIST = 814, - ERR_LFG_ROLE_CHECK_ABORTED = 815, - ERR_LFG_READY_CHECK_ABORTED = 816, - ERR_LFG_CANT_USE_BATTLEGROUND = 817, - ERR_LFG_CANT_USE_DUNGEONS = 818, - ERR_LFG_REASON_TOO_MANY_LFG = 819, - ERR_LFG_FARM_LIMIT = 820, - ERR_LFG_NO_CROSS_FACTION_PARTIES = 821, - ERR_INVALID_TELEPORT_LOCATION = 822, - ERR_TOO_FAR_TO_INTERACT = 823, - ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 824, - ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 825, - ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 826, - ERR_DIFFICULTY_CHANGE_WORLDSTATE = 827, - ERR_DIFFICULTY_CHANGE_ENCOUNTER = 828, - ERR_DIFFICULTY_CHANGE_COMBAT = 829, - ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 830, - ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 831, - ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 832, - ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 833, - ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 834, - ERR_ARENA_TEAM_PARTY_SIZE = 835, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 836, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 837, - ERR_SOLO_SHUFFLE_MIN_ITEM_LEVEL = 838, - ERR_PVP_PLAYER_ABANDONED = 839, - ERR_QUEST_FORCE_REMOVED_S = 840, - ERR_ATTACK_NO_ACTIONS = 841, - ERR_IN_RANDOM_BG = 842, - ERR_IN_NON_RANDOM_BG = 843, - ERR_BN_FRIEND_SELF = 844, - ERR_BN_FRIEND_ALREADY = 845, - ERR_BN_FRIEND_BLOCKED = 846, - ERR_BN_FRIEND_LIST_FULL = 847, - ERR_BN_FRIEND_REQUEST_SENT = 848, - ERR_BN_BROADCAST_THROTTLE = 849, - ERR_BG_DEVELOPER_ONLY = 850, - ERR_CURRENCY_SPELL_SLOT_MISMATCH = 851, - ERR_CURRENCY_NOT_TRADABLE = 852, - ERR_REQUIRES_EXPANSION_S = 853, - ERR_QUEST_FAILED_SPELL = 854, - ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 855, - ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 856, - ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 857, - ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 858, - ERR_TALENT_FAILED_UNKNOWN = 859, - ERR_TALENT_FAILED_IN_COMBAT = 860, - ERR_TALENT_FAILED_IN_PVP_MATCH = 861, - ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 862, - ERR_WARGAME_REQUEST_FAILURE = 863, - ERR_RANK_REQUIRES_AUTHENTICATOR = 864, - ERR_GUILD_BANK_VOUCHER_FAILED = 865, - ERR_WARGAME_REQUEST_SENT = 866, - ERR_REQUIRES_ACHIEVEMENT_I = 867, - ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 868, - ERR_CANT_BUY_QUANTITY = 869, - ERR_ITEM_IS_BATTLE_PAY_LOCKED = 870, - ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 871, - ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 872, - ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 873, - ERR_INSUFF_TRACKED_CURRENCY_IS = 874, - ERR_NOT_ON_TOURNAMENT_REALM = 875, - ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 876, - ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 877, - ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 878, - ERR_CANT_DO_THAT_IN_A_GROUP = 879, - ERR_GUILD_LEADER_REPLACED = 880, - ERR_TRANSMOGRIFY_CANT_EQUIP = 881, - ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 882, - ERR_TRANSMOGRIFY_NOT_SOULBOUND = 883, - ERR_TRANSMOGRIFY_INVALID_SOURCE = 884, - ERR_TRANSMOGRIFY_INVALID_DESTINATION = 885, - ERR_TRANSMOGRIFY_MISMATCH = 886, - ERR_TRANSMOGRIFY_LEGENDARY = 887, - ERR_TRANSMOGRIFY_SAME_ITEM = 888, - ERR_TRANSMOGRIFY_SAME_APPEARANCE = 889, - ERR_TRANSMOGRIFY_NOT_EQUIPPED = 890, - ERR_VOID_DEPOSIT_FULL = 891, - ERR_VOID_WITHDRAW_FULL = 892, - ERR_VOID_STORAGE_WRAPPED = 893, - ERR_VOID_STORAGE_STACKABLE = 894, - ERR_VOID_STORAGE_UNBOUND = 895, - ERR_VOID_STORAGE_REPAIR = 896, - ERR_VOID_STORAGE_CHARGES = 897, - ERR_VOID_STORAGE_QUEST = 898, - ERR_VOID_STORAGE_CONJURED = 899, - ERR_VOID_STORAGE_MAIL = 900, - ERR_VOID_STORAGE_BAG = 901, - ERR_VOID_TRANSFER_STORAGE_FULL = 902, - ERR_VOID_TRANSFER_INV_FULL = 903, - ERR_VOID_TRANSFER_INTERNAL_ERROR = 904, - ERR_VOID_TRANSFER_ITEM_INVALID = 905, - ERR_DIFFICULTY_DISABLED_IN_LFG = 906, - ERR_VOID_STORAGE_UNIQUE = 907, - ERR_VOID_STORAGE_LOOT = 908, - ERR_VOID_STORAGE_HOLIDAY = 909, - ERR_VOID_STORAGE_DURATION = 910, - ERR_VOID_STORAGE_LOAD_FAILED = 911, - ERR_VOID_STORAGE_INVALID_ITEM = 912, - ERR_PARENTAL_CONTROLS_CHAT_MUTED = 913, - ERR_SOR_START_EXPERIENCE_INCOMPLETE = 914, - ERR_SOR_INVALID_EMAIL = 915, - ERR_SOR_INVALID_COMMENT = 916, - ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 917, - ERR_CHALLENGE_MODE_RESET_KEYSTONE = 918, - ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 919, - ERR_REPORT_SUBMITTED_SUCCESSFULLY = 920, - ERR_REPORT_SUBMISSION_FAILED = 921, - ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 922, - ERR_BUG_SUBMITTED_SUCCESSFULLY = 923, - ERR_CHALLENGE_MODE_ENABLED = 924, - ERR_CHALLENGE_MODE_DISABLED = 925, - ERR_PETBATTLE_CREATE_FAILED = 926, - ERR_PETBATTLE_NOT_HERE = 927, - ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 928, - ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 929, - ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 930, - ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 931, - ERR_PETBATTLE_NOT_WHILE_DEAD = 932, - ERR_PETBATTLE_NOT_WHILE_FLYING = 933, - ERR_PETBATTLE_TARGET_INVALID = 934, - ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 935, - ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 936, - ERR_PETBATTLE_NOT_A_TRAINER = 937, - ERR_PETBATTLE_DECLINED = 938, - ERR_PETBATTLE_IN_BATTLE = 939, - ERR_PETBATTLE_INVALID_LOADOUT = 940, - ERR_PETBATTLE_ALL_PETS_DEAD = 941, - ERR_PETBATTLE_NO_PETS_IN_SLOTS = 942, - ERR_PETBATTLE_NO_ACCOUNT_LOCK = 943, - ERR_PETBATTLE_WILD_PET_TAPPED = 944, - ERR_PETBATTLE_RESTRICTED_ACCOUNT = 945, - ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 946, - ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 947, - ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 948, - ERR_CANT_HAVE_MORE_PETS = 949, - ERR_PVP_MAP_NOT_FOUND = 950, - ERR_PVP_MAP_NOT_SET = 951, - ERR_PETBATTLE_QUEUE_QUEUED = 952, - ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 953, - ERR_PETBATTLE_QUEUE_JOIN_FAILED = 954, - ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 955, - ERR_PETBATTLE_QUEUE_REMOVED = 956, - ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 957, - ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 958, - ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 959, - ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 960, - ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 961, - ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 962, - ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 963, - ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 964, - ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 965, - ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 966, - ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 967, - ERR_PETBATTLE_QUEUE_SLOT_DEAD = 968, - ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 969, - ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 970, - ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 971, - ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 972, - ERR_HAS_RESTRICTION = 973, - ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 974, - ERR_ITEM_UPGRADE_NO_PATH = 975, - ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 976, - ERR_BONUS_ROLL_EMPTY = 977, - ERR_CHALLENGE_MODE_FULL = 978, - ERR_CHALLENGE_MODE_IN_PROGRESS = 979, - ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 980, - ERR_BATTLETAG_FRIEND_NOT_FOUND = 981, - ERR_BATTLETAG_FRIEND_NOT_VALID = 982, - ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 983, - ERR_BATTLETAG_FRIEND_THROTTLED = 984, - ERR_BATTLETAG_FRIEND_SUCCESS = 985, - ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 986, - ERR_PETBATTLE_INTERNAL = 987, - ERR_CANT_CAGE_PET_YET = 988, - ERR_NO_LOOT_IN_CHALLENGE_MODE = 989, - ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 990, - ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 991, - ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 992, - ERR_RECRUIT_A_FRIEND_FAILED = 993, - ERR_SET_LOOT_PERSONAL = 994, - ERR_SET_LOOT_METHOD_FAILED_COMBAT = 995, - ERR_REAGENT_BANK_FULL = 996, - ERR_REAGENT_BANK_LOCKED = 997, - ERR_GARRISON_BUILDING_EXISTS = 998, - ERR_GARRISON_INVALID_PLOT = 999, - ERR_GARRISON_INVALID_BUILDINGID = 1000, - ERR_GARRISON_INVALID_PLOT_BUILDING = 1001, - ERR_GARRISON_REQUIRES_BLUEPRINT = 1002, - ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1003, - ERR_GARRISON_NOT_ENOUGH_GOLD = 1004, - ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1005, - ERR_ALREADY_USING_LFG_LIST = 1006, - ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1007, - ERR_TOY_USE_LIMIT_REACHED = 1008, - ERR_TOY_ALREADY_KNOWN = 1009, - ERR_TRANSMOG_SET_ALREADY_KNOWN = 1010, - ERR_NOT_ENOUGH_CURRENCY = 1011, - ERR_SPEC_IS_DISABLED = 1012, - ERR_FEATURE_RESTRICTED_TRIAL = 1013, - ERR_CANT_BE_OBLITERATED = 1014, - ERR_CANT_BE_SCRAPPED = 1015, - ERR_CANT_BE_RECRAFTED = 1016, - ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1017, - ERR_MUST_EQUIP_ARTIFACT = 1018, - ERR_CANT_DO_THAT_RIGHT_NOW = 1019, - ERR_AFFECTING_COMBAT = 1020, - ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1021, - ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1022, - ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1023, - ERR_MOVIE_RECORDING_WARNING_PERF = 1024, - ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1025, - ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1026, - ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1027, - ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1028, - ERR_NO_CHALLENGE_MODE_REWARD = 1029, - ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1030, - ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1031, - ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1032, - ERR_TALENT_FAILED_REST_AREA = 1033, - ERR_CANNOT_ABANDON_LAST_PET = 1034, - ERR_TEST_CVAR_SET_SSS = 1035, - ERR_QUEST_TURN_IN_FAIL_REASON = 1036, - ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1037, - ERR_TALENT_GRANTED_BY_AURA = 1038, - ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1039, - ERR_GLYPH_TARGET_NOT_AVAILABLE = 1040, - ERR_PVP_WARMODE_TOGGLE_ON = 1041, - ERR_PVP_WARMODE_TOGGLE_OFF = 1042, - ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1043, - ERR_SPELL_FAILED_CANT_FLY_HERE = 1044, - ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1045, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1046, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1047, - ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1048, - ERR_VOICE_CHAT_SERVICE_LOST = 1049, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1050, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1051, - ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1052, - ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1053, - ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1054, - ERR_VOICE_CHAT_PLAYER_SILENCED = 1055, - ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1056, - ERR_VOICE_CHAT_DISABLED = 1057, - ERR_NO_PVP_REWARD = 1058, - ERR_CLAIMED_PVP_REWARD = 1059, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1060, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1061, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1062, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1063, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1064, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1065, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1066, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1067, - ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1068, - ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1069, - ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1070, - ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1071, - ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1072, - ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1073, - ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1074, - ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1075, - ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1076, - ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1077, - ERR_SOCKETING_REQUIRES_TINKER_GEM = 1078, - ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1079, - ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1080, - ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1081, - ERR_LEVEL_LINKING_RESULT_LINKED = 1082, - ERR_LEVEL_LINKING_RESULT_UNLINKED = 1083, - ERR_CLUB_FINDER_ERROR_POST_CLUB = 1084, - ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1085, - ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1086, - ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1087, - ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1088, - ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1089, - ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1090, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1091, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1092, - ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1093, - ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1094, - ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1095, - ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1096, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1097, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1098, - ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1099, - ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1100, - ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1101, - ERR_SOULBIND_INVALID_CONDUIT = 1102, - ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1103, - ERR_SOULBIND_INVALID_TALENT = 1104, - ERR_SOULBIND_DUPLICATE_CONDUIT = 1105, - ERR_ACTIVATE_SOULBIND_S = 1106, - ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1107, - ERR_CANT_USE_PROFANITY = 1108, - ERR_NOT_IN_PET_BATTLE = 1109, - ERR_NOT_IN_NPE = 1110, - ERR_NO_SPEC = 1111, - ERR_NO_DOMINATIONSHARD_OVERWRITE = 1112, - ERR_USE_WEEKLY_REWARDS_DISABLED = 1113, - ERR_CROSS_FACTION_GROUP_JOINED = 1114, - ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1115, - ERR_EQUIPABLESPELLS_SLOTS_FULL = 1116, - ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1117, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1118, - ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1119, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1120, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1121, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1122, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1123, + ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 767, + ERR_BATTLEGROUND_JOIN_TIMED_OUT = 768, + ERR_BATTLEGROUND_DUPE_QUEUE = 769, + ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 770, + ERR_IN_BATTLEGROUND_RESPEC = 771, + ERR_MAIL_LIMITED_DURATION_ITEM = 772, + ERR_YELL_RESTRICTED_TRIAL = 773, + ERR_CHAT_RAID_RESTRICTED_TRIAL = 774, + ERR_LFG_ROLE_CHECK_FAILED = 775, + ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 776, + ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 777, + ERR_LFG_READY_CHECK_FAILED = 778, + ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 779, + ERR_LFG_GROUP_FULL = 780, + ERR_LFG_NO_LFG_OBJECT = 781, + ERR_LFG_NO_SLOTS_PLAYER = 782, + ERR_LFG_NO_SLOTS_PARTY = 783, + ERR_LFG_NO_SPEC = 784, + ERR_LFG_MISMATCHED_SLOTS = 785, + ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 786, + ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 787, + ERR_LFG_MEMBERS_NOT_PRESENT = 788, + ERR_LFG_GET_INFO_TIMEOUT = 789, + ERR_LFG_INVALID_SLOT = 790, + ERR_LFG_DESERTER_PLAYER = 791, + ERR_LFG_DESERTER_PARTY = 792, + ERR_LFG_DEAD = 793, + ERR_LFG_RANDOM_COOLDOWN_PLAYER = 794, + ERR_LFG_RANDOM_COOLDOWN_PARTY = 795, + ERR_LFG_TOO_MANY_MEMBERS = 796, + ERR_LFG_TOO_FEW_MEMBERS = 797, + ERR_LFG_PROPOSAL_FAILED = 798, + ERR_LFG_PROPOSAL_DECLINED_SELF = 799, + ERR_LFG_PROPOSAL_DECLINED_PARTY = 800, + ERR_LFG_NO_SLOTS_SELECTED = 801, + ERR_LFG_NO_ROLES_SELECTED = 802, + ERR_LFG_ROLE_CHECK_INITIATED = 803, + ERR_LFG_READY_CHECK_INITIATED = 804, + ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 805, + ERR_LFG_PLAYER_DECLINED_READY_CHECK = 806, + ERR_LFG_JOINED_QUEUE = 807, + ERR_LFG_JOINED_FLEX_QUEUE = 808, + ERR_LFG_JOINED_RF_QUEUE = 809, + ERR_LFG_JOINED_SCENARIO_QUEUE = 810, + ERR_LFG_JOINED_WORLD_PVP_QUEUE = 811, + ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 812, + ERR_LFG_JOINED_LIST = 813, + ERR_LFG_LEFT_QUEUE = 814, + ERR_LFG_LEFT_LIST = 815, + ERR_LFG_ROLE_CHECK_ABORTED = 816, + ERR_LFG_READY_CHECK_ABORTED = 817, + ERR_LFG_CANT_USE_BATTLEGROUND = 818, + ERR_LFG_CANT_USE_DUNGEONS = 819, + ERR_LFG_REASON_TOO_MANY_LFG = 820, + ERR_LFG_FARM_LIMIT = 821, + ERR_LFG_NO_CROSS_FACTION_PARTIES = 822, + ERR_INVALID_TELEPORT_LOCATION = 823, + ERR_TOO_FAR_TO_INTERACT = 824, + ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 825, + ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 826, + ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 827, + ERR_DIFFICULTY_CHANGE_WORLDSTATE = 828, + ERR_DIFFICULTY_CHANGE_ENCOUNTER = 829, + ERR_DIFFICULTY_CHANGE_COMBAT = 830, + ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 831, + ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 832, + ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 833, + ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 834, + ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 835, + ERR_ARENA_TEAM_PARTY_SIZE = 836, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 837, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 838, + ERR_SOLO_SHUFFLE_MIN_ITEM_LEVEL = 839, + ERR_PVP_PLAYER_ABANDONED = 840, + ERR_QUEST_FORCE_REMOVED_S = 841, + ERR_ATTACK_NO_ACTIONS = 842, + ERR_IN_RANDOM_BG = 843, + ERR_IN_NON_RANDOM_BG = 844, + ERR_BN_FRIEND_SELF = 845, + ERR_BN_FRIEND_ALREADY = 846, + ERR_BN_FRIEND_BLOCKED = 847, + ERR_BN_FRIEND_LIST_FULL = 848, + ERR_BN_FRIEND_REQUEST_SENT = 849, + ERR_BN_BROADCAST_THROTTLE = 850, + ERR_BG_DEVELOPER_ONLY = 851, + ERR_CURRENCY_SPELL_SLOT_MISMATCH = 852, + ERR_CURRENCY_NOT_TRADABLE = 853, + ERR_REQUIRES_EXPANSION_S = 854, + ERR_QUEST_FAILED_SPELL = 855, + ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 856, + ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 857, + ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 858, + ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 859, + ERR_TALENT_FAILED_UNKNOWN = 860, + ERR_TALENT_FAILED_IN_COMBAT = 861, + ERR_TALENT_FAILED_IN_PVP_MATCH = 862, + ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 863, + ERR_WARGAME_REQUEST_FAILURE = 864, + ERR_RANK_REQUIRES_AUTHENTICATOR = 865, + ERR_GUILD_BANK_VOUCHER_FAILED = 866, + ERR_WARGAME_REQUEST_SENT = 867, + ERR_REQUIRES_ACHIEVEMENT_I = 868, + ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 869, + ERR_CANT_BUY_QUANTITY = 870, + ERR_ITEM_IS_BATTLE_PAY_LOCKED = 871, + ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 872, + ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 873, + ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 874, + ERR_INSUFF_TRACKED_CURRENCY_IS = 875, + ERR_NOT_ON_TOURNAMENT_REALM = 876, + ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 877, + ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 878, + ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 879, + ERR_CANT_DO_THAT_IN_A_GROUP = 880, + ERR_GUILD_LEADER_REPLACED = 881, + ERR_TRANSMOGRIFY_CANT_EQUIP = 882, + ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 883, + ERR_TRANSMOGRIFY_NOT_SOULBOUND = 884, + ERR_TRANSMOGRIFY_INVALID_SOURCE = 885, + ERR_TRANSMOGRIFY_INVALID_DESTINATION = 886, + ERR_TRANSMOGRIFY_MISMATCH = 887, + ERR_TRANSMOGRIFY_LEGENDARY = 888, + ERR_TRANSMOGRIFY_SAME_ITEM = 889, + ERR_TRANSMOGRIFY_SAME_APPEARANCE = 890, + ERR_TRANSMOGRIFY_NOT_EQUIPPED = 891, + ERR_VOID_DEPOSIT_FULL = 892, + ERR_VOID_WITHDRAW_FULL = 893, + ERR_VOID_STORAGE_WRAPPED = 894, + ERR_VOID_STORAGE_STACKABLE = 895, + ERR_VOID_STORAGE_UNBOUND = 896, + ERR_VOID_STORAGE_REPAIR = 897, + ERR_VOID_STORAGE_CHARGES = 898, + ERR_VOID_STORAGE_QUEST = 899, + ERR_VOID_STORAGE_CONJURED = 900, + ERR_VOID_STORAGE_MAIL = 901, + ERR_VOID_STORAGE_BAG = 902, + ERR_VOID_TRANSFER_STORAGE_FULL = 903, + ERR_VOID_TRANSFER_INV_FULL = 904, + ERR_VOID_TRANSFER_INTERNAL_ERROR = 905, + ERR_VOID_TRANSFER_ITEM_INVALID = 906, + ERR_DIFFICULTY_DISABLED_IN_LFG = 907, + ERR_VOID_STORAGE_UNIQUE = 908, + ERR_VOID_STORAGE_LOOT = 909, + ERR_VOID_STORAGE_HOLIDAY = 910, + ERR_VOID_STORAGE_DURATION = 911, + ERR_VOID_STORAGE_LOAD_FAILED = 912, + ERR_VOID_STORAGE_INVALID_ITEM = 913, + ERR_PARENTAL_CONTROLS_CHAT_MUTED = 914, + ERR_SOR_START_EXPERIENCE_INCOMPLETE = 915, + ERR_SOR_INVALID_EMAIL = 916, + ERR_SOR_INVALID_COMMENT = 917, + ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 918, + ERR_CHALLENGE_MODE_RESET_KEYSTONE = 919, + ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 920, + ERR_REPORT_SUBMITTED_SUCCESSFULLY = 921, + ERR_REPORT_SUBMISSION_FAILED = 922, + ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 923, + ERR_BUG_SUBMITTED_SUCCESSFULLY = 924, + ERR_CHALLENGE_MODE_ENABLED = 925, + ERR_CHALLENGE_MODE_DISABLED = 926, + ERR_PETBATTLE_CREATE_FAILED = 927, + ERR_PETBATTLE_NOT_HERE = 928, + ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 929, + ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 930, + ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 931, + ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 932, + ERR_PETBATTLE_NOT_WHILE_DEAD = 933, + ERR_PETBATTLE_NOT_WHILE_FLYING = 934, + ERR_PETBATTLE_TARGET_INVALID = 935, + ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 936, + ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 937, + ERR_PETBATTLE_NOT_A_TRAINER = 938, + ERR_PETBATTLE_DECLINED = 939, + ERR_PETBATTLE_IN_BATTLE = 940, + ERR_PETBATTLE_INVALID_LOADOUT = 941, + ERR_PETBATTLE_ALL_PETS_DEAD = 942, + ERR_PETBATTLE_NO_PETS_IN_SLOTS = 943, + ERR_PETBATTLE_NO_ACCOUNT_LOCK = 944, + ERR_PETBATTLE_WILD_PET_TAPPED = 945, + ERR_PETBATTLE_RESTRICTED_ACCOUNT = 946, + ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 947, + ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 948, + ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 949, + ERR_CANT_HAVE_MORE_PETS = 950, + ERR_PVP_MAP_NOT_FOUND = 951, + ERR_PVP_MAP_NOT_SET = 952, + ERR_PETBATTLE_QUEUE_QUEUED = 953, + ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 954, + ERR_PETBATTLE_QUEUE_JOIN_FAILED = 955, + ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 956, + ERR_PETBATTLE_QUEUE_REMOVED = 957, + ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 958, + ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 959, + ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 960, + ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 961, + ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 962, + ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 963, + ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 964, + ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 965, + ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 966, + ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 967, + ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 968, + ERR_PETBATTLE_QUEUE_SLOT_DEAD = 969, + ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 970, + ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 971, + ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 972, + ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 973, + ERR_HAS_RESTRICTION = 974, + ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 975, + ERR_ITEM_UPGRADE_NO_PATH = 976, + ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 977, + ERR_BONUS_ROLL_EMPTY = 978, + ERR_CHALLENGE_MODE_FULL = 979, + ERR_CHALLENGE_MODE_IN_PROGRESS = 980, + ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 981, + ERR_BATTLETAG_FRIEND_NOT_FOUND = 982, + ERR_BATTLETAG_FRIEND_NOT_VALID = 983, + ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 984, + ERR_BATTLETAG_FRIEND_THROTTLED = 985, + ERR_BATTLETAG_FRIEND_SUCCESS = 986, + ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 987, + ERR_PETBATTLE_INTERNAL = 988, + ERR_CANT_CAGE_PET_YET = 989, + ERR_NO_LOOT_IN_CHALLENGE_MODE = 990, + ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 991, + ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 992, + ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 993, + ERR_RECRUIT_A_FRIEND_FAILED = 994, + ERR_SET_LOOT_PERSONAL = 995, + ERR_SET_LOOT_METHOD_FAILED_COMBAT = 996, + ERR_REAGENT_BANK_FULL = 997, + ERR_REAGENT_BANK_LOCKED = 998, + ERR_GARRISON_BUILDING_EXISTS = 999, + ERR_GARRISON_INVALID_PLOT = 1000, + ERR_GARRISON_INVALID_BUILDINGID = 1001, + ERR_GARRISON_INVALID_PLOT_BUILDING = 1002, + ERR_GARRISON_REQUIRES_BLUEPRINT = 1003, + ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1004, + ERR_GARRISON_NOT_ENOUGH_GOLD = 1005, + ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1006, + ERR_ALREADY_USING_LFG_LIST = 1007, + ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1008, + ERR_TOY_USE_LIMIT_REACHED = 1009, + ERR_TOY_ALREADY_KNOWN = 1010, + ERR_TRANSMOG_SET_ALREADY_KNOWN = 1011, + ERR_NOT_ENOUGH_CURRENCY = 1012, + ERR_SPEC_IS_DISABLED = 1013, + ERR_FEATURE_RESTRICTED_TRIAL = 1014, + ERR_CANT_BE_OBLITERATED = 1015, + ERR_CANT_BE_SCRAPPED = 1016, + ERR_CANT_BE_RECRAFTED = 1017, + ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1018, + ERR_MUST_EQUIP_ARTIFACT = 1019, + ERR_CANT_DO_THAT_RIGHT_NOW = 1020, + ERR_AFFECTING_COMBAT = 1021, + ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1022, + ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1023, + ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1024, + ERR_MOVIE_RECORDING_WARNING_PERF = 1025, + ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1026, + ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1027, + ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1028, + ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1029, + ERR_NO_CHALLENGE_MODE_REWARD = 1030, + ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1031, + ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1032, + ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1033, + ERR_TALENT_FAILED_REST_AREA = 1034, + ERR_CANNOT_ABANDON_LAST_PET = 1035, + ERR_TEST_CVAR_SET_SSS = 1036, + ERR_QUEST_TURN_IN_FAIL_REASON = 1037, + ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1038, + ERR_TALENT_GRANTED_BY_AURA = 1039, + ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1040, + ERR_GLYPH_TARGET_NOT_AVAILABLE = 1041, + ERR_PVP_WARMODE_TOGGLE_ON = 1042, + ERR_PVP_WARMODE_TOGGLE_OFF = 1043, + ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1044, + ERR_SPELL_FAILED_CANT_FLY_HERE = 1045, + ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1046, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1047, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1048, + ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1049, + ERR_VOICE_CHAT_SERVICE_LOST = 1050, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1051, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1052, + ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1053, + ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1054, + ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1055, + ERR_VOICE_CHAT_PLAYER_SILENCED = 1056, + ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1057, + ERR_VOICE_CHAT_DISABLED = 1058, + ERR_NO_PVP_REWARD = 1059, + ERR_CLAIMED_PVP_REWARD = 1060, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1061, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1062, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1063, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1064, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1065, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1066, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1067, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1068, + ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1069, + ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1070, + ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1071, + ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1072, + ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1073, + ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1074, + ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1075, + ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1076, + ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1077, + ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1078, + ERR_SOCKETING_REQUIRES_TINKER_GEM = 1079, + ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1080, + ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1081, + ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1082, + ERR_LEVEL_LINKING_RESULT_LINKED = 1083, + ERR_LEVEL_LINKING_RESULT_UNLINKED = 1084, + ERR_CLUB_FINDER_ERROR_POST_CLUB = 1085, + ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1086, + ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1087, + ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1088, + ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1089, + ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1090, + ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1091, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1092, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1093, + ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1094, + ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1095, + ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1096, + ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1097, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1098, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1099, + ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1100, + ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1101, + ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1102, + ERR_SOULBIND_INVALID_CONDUIT = 1103, + ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1104, + ERR_SOULBIND_INVALID_TALENT = 1105, + ERR_SOULBIND_DUPLICATE_CONDUIT = 1106, + ERR_ACTIVATE_SOULBIND_S = 1107, + ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1108, + ERR_CANT_USE_PROFANITY = 1109, + ERR_NOT_IN_PET_BATTLE = 1110, + ERR_NOT_IN_NPE = 1111, + ERR_NO_SPEC = 1112, + ERR_NO_DOMINATIONSHARD_OVERWRITE = 1113, + ERR_USE_WEEKLY_REWARDS_DISABLED = 1114, + ERR_CROSS_FACTION_GROUP_JOINED = 1115, + ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1116, + ERR_EQUIPABLESPELLS_SLOTS_FULL = 1117, + ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1118, + ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1119, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1120, + ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1121, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1122, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1123, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1124, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1125, }; enum class MountResult : uint32 diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index b85bee2752d..16dabff8f30 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -152,7 +152,7 @@ WorldPacket const* WorldPackets::Item::SetProficiency::Write() WorldPacket const* WorldPackets::Item::InventoryChangeFailure::Write() { - _worldPacket << int8(BagResult); + _worldPacket << int32(BagResult); _worldPacket << Item[0]; _worldPacket << Item[1]; _worldPacket << uint8(ContainerBSlot); // bag type subclass, used with EQUIP_ERR_EVENT_AUTOEQUIP_BIND_CONFIRM and EQUIP_ERR_WRONG_BAG_TYPE_2 @@ -238,8 +238,10 @@ void WorldPackets::Item::DestroyItem::Read() WorldPacket const* WorldPackets::Item::SellResponse::Write() { _worldPacket << VendorGUID; - _worldPacket << ItemGUID; - _worldPacket << uint8(Reason); + _worldPacket << uint32(ItemGUIDs.size()); + _worldPacket << int32(Reason); + for (ObjectGuid const& itemGuid : ItemGUIDs) + _worldPacket << itemGuid; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index 702ed6c8adf..d2cb9df3944 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -212,7 +212,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int8 BagResult = EQUIP_ERR_OK; /// @see enum InventoryResult + int32 BagResult = EQUIP_ERR_OK; /// @see enum InventoryResult uint8 ContainerBSlot = 0; ObjectGuid SrcContainer; ObjectGuid DstContainer; @@ -320,7 +320,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid VendorGUID; - ObjectGuid ItemGUID; + std::vector<ObjectGuid> ItemGUIDs; SellResult Reason = SELL_ERR_UNK; }; diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp index 8e966cd4c99..0e933141dcf 100644 --- a/src/server/game/Server/Packets/LFGPackets.cpp +++ b/src/server/game/Server/Packets/LFGPackets.cpp @@ -20,10 +20,12 @@ void WorldPackets::LFG::DFJoin::Read() { QueueAsGroup = _worldPacket.ReadBit(); + bool hasPartyIndex = _worldPacket.ReadBit(); Unknown = _worldPacket.ReadBit(); - _worldPacket >> PartyIndex; _worldPacket >> Roles; Slots.resize(_worldPacket.read<uint32>()); + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); for (uint32& slot : Slots) _worldPacket >> slot; } @@ -43,8 +45,10 @@ void WorldPackets::LFG::DFProposalResponse::Read() void WorldPackets::LFG::DFSetRoles::Read() { + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> RolesDesired; - _worldPacket >> PartyIndex; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::LFG::DFBootPlayerVote::Read() @@ -60,7 +64,8 @@ void WorldPackets::LFG::DFTeleport::Read() void WorldPackets::LFG::DFGetSystemInfo::Read() { Player = _worldPacket.ReadBit(); - _worldPacket >> PartyIndex; + if (_worldPacket.ReadBit()) + _worldPacket >> PartyIndex.emplace(); } ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LFGBlackListSlot const& lfgBlackListSlot) @@ -105,7 +110,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestReward ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LfgPlayerQuestReward const& playerQuestReward) { - data << uint32(playerQuestReward.Mask); + data << uint8(playerQuestReward.Mask); data << int32(playerQuestReward.RewardMoney); data << int32(playerQuestReward.RewardXP); data << uint32(playerQuestReward.Item.size()); @@ -196,7 +201,7 @@ WorldPacket const* WorldPackets::LFG::LFGUpdateStatus::Write() _worldPacket << uint8(SubType); _worldPacket << uint8(Reason); _worldPacket << uint32(Slots.size()); - _worldPacket << uint32(RequestedRoles); + _worldPacket << uint8(RequestedRoles); _worldPacket << uint32(SuspendedPlayers.size()); _worldPacket << uint32(QueueMapID); @@ -220,7 +225,7 @@ WorldPacket const* WorldPackets::LFG::LFGUpdateStatus::Write() WorldPacket const* WorldPackets::LFG::RoleChosen::Write() { _worldPacket << Player; - _worldPacket << uint32(RoleMask); + _worldPacket << uint8(RoleMask); _worldPacket.WriteBit(Accepted); _worldPacket.FlushBits(); @@ -230,7 +235,7 @@ WorldPacket const* WorldPackets::LFG::RoleChosen::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LFGRoleCheckUpdateMember const& lfgRoleCheckUpdateMember) { data << lfgRoleCheckUpdateMember.Guid; - data << uint32(lfgRoleCheckUpdateMember.RolesDesired); + data << uint8(lfgRoleCheckUpdateMember.RolesDesired); data << uint8(lfgRoleCheckUpdateMember.Level); data.WriteBit(lfgRoleCheckUpdateMember.RoleCheckComplete); data.FlushBits(); @@ -356,7 +361,7 @@ WorldPacket const* WorldPackets::LFG::LfgBootPlayer::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LFGProposalUpdatePlayer const& lfgProposalUpdatePlayer) { - data << uint32(lfgProposalUpdatePlayer.Roles); + data << uint8(lfgProposalUpdatePlayer.Roles); data.WriteBit(lfgProposalUpdatePlayer.Me); data.WriteBit(lfgProposalUpdatePlayer.SameParty); data.WriteBit(lfgProposalUpdatePlayer.MyParty); diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h index 133daa6a2bc..80f1f689c28 100644 --- a/src/server/game/Server/Packets/LFGPackets.h +++ b/src/server/game/Server/Packets/LFGPackets.h @@ -42,8 +42,8 @@ namespace WorldPackets bool QueueAsGroup = false; bool Unknown = false; // Always false in 7.2.5 - uint8 PartyIndex = 0; - uint32 Roles = 0; + Optional<uint8> PartyIndex; + uint8 Roles = 0; Array<uint32, 50> Slots; }; @@ -77,8 +77,8 @@ namespace WorldPackets void Read() override; - uint32 RolesDesired = 0; - uint8 PartyIndex = 0; + uint8 RolesDesired = 0; + Optional<uint8> PartyIndex; }; class DFBootPlayerVote final : public ClientPacket @@ -108,7 +108,7 @@ namespace WorldPackets void Read() override; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; bool Player = false; }; @@ -159,7 +159,7 @@ namespace WorldPackets struct LfgPlayerQuestReward { - uint32 Mask = 0; // Roles required for this reward, only used by ShortageReward in SMSG_LFG_PLAYER_INFO + uint8 Mask = 0; // Roles required for this reward, only used by ShortageReward in SMSG_LFG_PLAYER_INFO int32 RewardMoney = 0; // Only used by SMSG_LFG_PLAYER_INFO int32 RewardXP = 0; std::vector<LfgPlayerQuestRewardItem> Item; @@ -226,7 +226,7 @@ namespace WorldPackets uint8 SubType = 0; uint8 Reason = 0; std::vector<uint32> Slots; - uint32 RequestedRoles = 0; + uint8 RequestedRoles = 0; std::vector<ObjectGuid> SuspendedPlayers; uint32 QueueMapID = 0; bool NotifyUI = false; @@ -245,18 +245,18 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid Player; - uint32 RoleMask = 0; + uint8 RoleMask = 0; bool Accepted = false; }; struct LFGRoleCheckUpdateMember { LFGRoleCheckUpdateMember() = default; - LFGRoleCheckUpdateMember(ObjectGuid guid, uint32 rolesDesired, uint8 level, bool roleCheckComplete) + LFGRoleCheckUpdateMember(ObjectGuid guid, uint8 rolesDesired, uint8 level, bool roleCheckComplete) : Guid(guid), RolesDesired(rolesDesired), Level(level), RoleCheckComplete(roleCheckComplete) { } ObjectGuid Guid; - uint32 RolesDesired = 0; + uint8 RolesDesired = 0; uint8 Level = 0; bool RoleCheckComplete = false; }; @@ -371,7 +371,7 @@ namespace WorldPackets struct LFGProposalUpdatePlayer { - uint32 Roles = 0; + uint8 Roles = 0; bool Me = false; bool SameParty = false; bool MyParty = false; diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index ca8bec42391..5b5b4b19571 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -407,9 +407,11 @@ WorldPacket const* WorldPackets::Misc::PlayMusic::Write() void WorldPackets::Misc::RandomRollClient::Read() { + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> Min; _worldPacket >> Max; - _worldPacket >> PartyIndex; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } WorldPacket const* WorldPackets::Misc::RandomRoll::Write() diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index d39bcb26e0a..a064d06633b 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -529,7 +529,7 @@ namespace WorldPackets int32 Min = 0; int32 Max = 0; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; }; class RandomRoll final : public ServerPacket diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 0f18a0069ce..8b329508115 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -44,18 +44,18 @@ WorldPacket const* WorldPackets::Party::PartyCommandResult::Write() void WorldPackets::Party::PartyInviteClient::Read() { - uint32 targetNameLen, targetRealmLen; + bool hasPartyIndex = _worldPacket.ReadBit(); - _worldPacket >> PartyIndex; - - targetNameLen = _worldPacket.ReadBits(9); - targetRealmLen = _worldPacket.ReadBits(9); + uint32 targetNameLen = _worldPacket.ReadBits(9); + uint32 targetRealmLen = _worldPacket.ReadBits(9); _worldPacket >> ProposedRoles; _worldPacket >> TargetGUID; TargetName = _worldPacket.ReadString(targetNameLen); TargetRealm = _worldPacket.ReadString(targetRealmLen); + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } WorldPacket const* WorldPackets::Party::PartyInvite::Write() @@ -72,7 +72,7 @@ WorldPacket const* WorldPackets::Party::PartyInvite::Write() _worldPacket << InviterGUID; _worldPacket << InviterBNetAccountId; _worldPacket << uint16(Unk1); - _worldPacket << uint32(ProposedRoles); + _worldPacket << uint8(ProposedRoles); _worldPacket << uint32(LfgSlots.size()); _worldPacket << uint32(LfgCompletedMask); @@ -84,7 +84,7 @@ WorldPacket const* WorldPackets::Party::PartyInvite::Write() return &_worldPacket; } -void WorldPackets::Party::PartyInvite::Initialize(Player* const inviter, int32 proposedRoles, bool canAccept) +void WorldPackets::Party::PartyInvite::Initialize(Player const* inviter, int32 proposedRoles, bool canAccept) { CanAccept = canAccept; @@ -99,24 +99,26 @@ void WorldPackets::Party::PartyInvite::Initialize(Player* const inviter, int32 p void WorldPackets::Party::PartyInviteResponse::Read() { - _worldPacket >> PartyIndex; - + bool hasPartyIndex = _worldPacket.ReadBit(); Accept = _worldPacket.ReadBit(); - bool hasRolesDesired = _worldPacket.ReadBit(); + + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); + if (hasRolesDesired) - { - RolesDesired.emplace(); - _worldPacket >> *RolesDesired; - } + _worldPacket >> RolesDesired.emplace(); } void WorldPackets::Party::PartyUninvite::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); + uint32 reasonLen = _worldPacket.ReadBits(8); + _worldPacket >> TargetGUID; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); - uint8 reasonLen = _worldPacket.ReadBits(8); Reason = _worldPacket.ReadString(reasonLen); } @@ -131,8 +133,10 @@ WorldPacket const* WorldPackets::Party::GroupDecline::Write() void WorldPackets::Party::RequestPartyMemberStats::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> TargetGUID; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyMemberPhase const& phase) @@ -244,54 +248,65 @@ WorldPacket const* WorldPackets::Party::PartyMemberFullState::Write() void WorldPackets::Party::SetPartyLeader::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> TargetGUID; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::SetPartyAssignment::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); + Set = _worldPacket.ReadBit(); _worldPacket >> Assignment; _worldPacket >> Target; - Set = _worldPacket.ReadBit(); + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::SetRole::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> TargetGUID; _worldPacket >> Role; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } WorldPacket const* WorldPackets::Party::RoleChangedInform::Write() { - _worldPacket << PartyIndex; + _worldPacket << uint8(PartyIndex); _worldPacket << From; _worldPacket << ChangedUnit; - _worldPacket << OldRole; - _worldPacket << NewRole; + _worldPacket << uint8(OldRole); + _worldPacket << uint8(NewRole); return &_worldPacket; } void WorldPackets::Party::LeaveGroup::Read() { - _worldPacket >> PartyIndex; + if (_worldPacket.ReadBit()) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::SetLootMethod::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> LootMethod; _worldPacket >> LootMasterGUID; _worldPacket >> LootThreshold; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::MinimapPingClient::Read() { + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> PositionX; _worldPacket >> PositionY; - _worldPacket >> PartyIndex; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } WorldPacket const* WorldPackets::Party::MinimapPing::Write() @@ -305,9 +320,11 @@ WorldPacket const* WorldPackets::Party::MinimapPing::Write() void WorldPackets::Party::UpdateRaidTarget::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> Target; _worldPacket >> Symbol; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateSingle::Write() @@ -341,19 +358,23 @@ void WorldPackets::Party::ConvertRaid::Read() void WorldPackets::Party::RequestPartyJoinUpdates::Read() { - _worldPacket >> PartyIndex; + if (_worldPacket.ReadBit()) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::SetAssistantLeader::Read() { - _worldPacket >> PartyIndex; - _worldPacket >> Target; + bool hasPartyIndex = _worldPacket.ReadBit(); Apply = _worldPacket.ReadBit(); + _worldPacket >> Target; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::DoReadyCheck::Read() { - _worldPacket >> PartyIndex; + if (_worldPacket.ReadBit()) + _worldPacket >> PartyIndex.emplace(); } WorldPacket const* WorldPackets::Party::ReadyCheckStarted::Write() @@ -368,8 +389,9 @@ WorldPacket const* WorldPackets::Party::ReadyCheckStarted::Write() void WorldPackets::Party::ReadyCheckResponseClient::Read() { - _worldPacket >> PartyIndex; IsReady = _worldPacket.ReadBit(); + if (_worldPacket.ReadBit()) + _worldPacket >> PartyIndex.emplace(); } WorldPacket const* WorldPackets::Party::ReadyCheckResponse::Write() @@ -399,7 +421,8 @@ void WorldPackets::Party::OptOutOfLoot::Read() void WorldPackets::Party::InitiateRolePoll::Read() { - _worldPacket >> PartyIndex; + if (_worldPacket.ReadBit()) + _worldPacket >> PartyIndex.emplace(); } WorldPacket const* WorldPackets::Party::RolePollInform::Write() @@ -507,22 +530,27 @@ WorldPacket const* WorldPackets::Party::PartyUpdate::Write() void WorldPackets::Party::SetEveryoneIsAssistant::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); EveryoneIsAssistant = _worldPacket.ReadBit(); + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::ChangeSubGroup::Read() { _worldPacket >> TargetGUID; - _worldPacket >> PartyIndex; _worldPacket >> NewSubGroup; + if (_worldPacket.ReadBit()) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::SwapSubGroups::Read() { - _worldPacket >> PartyIndex; + bool hasPartyIndex = _worldPacket.ReadBit(); _worldPacket >> FirstTarget; _worldPacket >> SecondTarget; + if (hasPartyIndex) + _worldPacket >> PartyIndex.emplace(); } void WorldPackets::Party::ClearRaidMarker::Read() @@ -600,8 +628,8 @@ void WorldPackets::Party::PartyMemberFullState::Initialize(Player const* player) MemberStats.PositionZ = int16(player->GetPositionZ()); MemberStats.SpecID = AsUnderlyingType(player->GetPrimarySpecialization()); - MemberStats.PartyType[0] = player->m_playerData->PartyType & 0xF; - MemberStats.PartyType[1] = player->m_playerData->PartyType >> 4; + MemberStats.PartyType[0] = player->m_playerData->PartyType[0]; + MemberStats.PartyType[1] = player->m_playerData->PartyType[1]; MemberStats.WmoGroupID = 0; MemberStats.WmoDoodadPlacementID = 0; diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index 498967d1b74..179c881b3d9 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -50,7 +50,7 @@ namespace WorldPackets void Read() override; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; uint32 ProposedRoles = 0; std::string TargetName; std::string TargetRealm; @@ -64,7 +64,7 @@ namespace WorldPackets WorldPacket const* Write() override; - void Initialize(Player* const inviter, int32 proposedRoles, bool canAccept); + void Initialize(Player const* inviter, int32 proposedRoles, bool canAccept); bool MightCRZYou = false; bool MustBeBNetFriend = false; @@ -84,7 +84,7 @@ namespace WorldPackets bool IsXRealm = false; // Lfg - uint32 ProposedRoles = 0; + uint8 ProposedRoles = 0; uint32 LfgCompletedMask = 0; std::vector<uint32> LfgSlots; }; @@ -96,9 +96,9 @@ namespace WorldPackets void Read() override; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; bool Accept = false; - Optional<uint32> RolesDesired; + Optional<uint8> RolesDesired; }; class PartyUninvite final : public ClientPacket @@ -108,7 +108,7 @@ namespace WorldPackets void Read() override; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; ObjectGuid TargetGUID; std::string Reason; }; @@ -138,7 +138,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; ObjectGuid TargetGUID; }; @@ -236,7 +236,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; ObjectGuid TargetGUID; }; @@ -247,9 +247,9 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; ObjectGuid TargetGUID; - int32 Role = 0; + uint8 Role = 0; }; class RoleChangedInform final : public ServerPacket @@ -259,11 +259,11 @@ namespace WorldPackets WorldPacket const* Write() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; ObjectGuid From; ObjectGuid ChangedUnit; - int32 OldRole = 0; - int32 NewRole = 0; + uint8 OldRole = 0; + uint8 NewRole = 0; }; class LeaveGroup final : public ClientPacket @@ -273,7 +273,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; }; class SetLootMethod final : public ClientPacket @@ -283,7 +283,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; ObjectGuid LootMasterGUID; uint8 LootMethod = 0u; uint32 LootThreshold = 0u; @@ -296,7 +296,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; float PositionX = 0.f; float PositionY = 0.f; }; @@ -320,7 +320,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; ObjectGuid Target; int8 Symbol = 0; }; @@ -366,7 +366,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; }; class SetAssistantLeader final : public ClientPacket @@ -377,7 +377,7 @@ namespace WorldPackets void Read() override; ObjectGuid Target; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; bool Apply = false; }; @@ -388,7 +388,7 @@ namespace WorldPackets void Read() override; uint8 Assignment = 0; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; ObjectGuid Target; bool Set = false; }; @@ -400,7 +400,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; }; class ReadyCheckStarted final : public ServerPacket @@ -423,7 +423,7 @@ namespace WorldPackets void Read() override; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; bool IsReady = false; }; @@ -475,7 +475,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; }; class RolePollInform final : public ServerPacket @@ -575,7 +575,7 @@ namespace WorldPackets void Read() override; - uint8 PartyIndex = 0; + Optional<uint8> PartyIndex; bool EveryoneIsAssistant = false; }; @@ -587,7 +587,7 @@ namespace WorldPackets void Read() override; ObjectGuid TargetGUID; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; uint8 NewSubGroup = 0u; }; @@ -600,7 +600,7 @@ namespace WorldPackets ObjectGuid FirstTarget; ObjectGuid SecondTarget; - int8 PartyIndex = 0; + Optional<uint8> PartyIndex; }; class ClearRaidMarker final : public ClientPacket diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index ed8239331c8..83ff89ef569 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -153,9 +153,7 @@ WorldPacket const* AuraUpdate::Write() ByteBuffer& operator>>(ByteBuffer& buffer, TargetLocation& location) { buffer >> location.Transport; - buffer >> location.Location.m_positionX; - buffer >> location.Location.m_positionY; - buffer >> location.Location.m_positionZ; + buffer >> location.Location; return buffer; } @@ -290,9 +288,7 @@ WorldPacket const* SpellPrepare::Write() ByteBuffer& operator<<(ByteBuffer& data, TargetLocation const& targetLocation) { data << targetLocation.Transport; - data << float(targetLocation.Location.m_positionX); - data << float(targetLocation.Location.m_positionY); - data << float(targetLocation.Location.m_positionZ); + data << targetLocation.Location; return data; } @@ -328,11 +324,10 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData) ByteBuffer& operator<<(ByteBuffer& data, SpellMissStatus const& spellMissStatus) { - data.WriteBits(spellMissStatus.Reason, 4); + data << uint8(spellMissStatus.Reason); if (spellMissStatus.Reason == SPELL_MISS_REFLECT) - data.WriteBits(spellMissStatus.ReflectStatus, 4); + data << uint8(spellMissStatus.ReflectStatus); - data.FlushBits(); return data; } @@ -367,13 +362,6 @@ ByteBuffer& operator<<(ByteBuffer& data, MissileTrajectoryResult const& missileT return data; } -ByteBuffer& operator<<(ByteBuffer& data, SpellAmmo const& spellAmmo) -{ - data << int32(spellAmmo.DisplayID); - data << int8(spellAmmo.InventoryType); - return data; -} - ByteBuffer& operator<<(ByteBuffer& data, CreatureImmunities const& immunities) { data << int32(immunities.School); @@ -401,7 +389,7 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData) data << uint32(spellCastData.CastFlagsEx); data << uint32(spellCastData.CastTime); data << spellCastData.MissileTrajectory; - data << int32(spellCastData.Ammo.DisplayID); + data << int32(spellCastData.AmmoDisplayID); data << uint8(spellCastData.DestLocSpellCastIndex); data << spellCastData.Immunities; data << spellCastData.Predict; @@ -414,9 +402,6 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData) data.WriteBits(spellCastData.TargetPoints.size(), 16); data.FlushBits(); - for (SpellMissStatus const& missStatus : spellCastData.MissStatus) - data << missStatus; - data << spellCastData.Target; for (ObjectGuid const& hitTarget : spellCastData.HitTargets) @@ -428,6 +413,9 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData) for (SpellHitStatus const& hitStatus : spellCastData.HitStatus) data << hitStatus; + for (SpellMissStatus const& missStatus : spellCastData.MissStatus) + data << missStatus; + for (SpellPowerData const& power : spellCastData.RemainingPower) data << power; diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 6872687f1d1..bc0e8a6f24b 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -195,7 +195,7 @@ namespace WorldPackets struct TargetLocation { ObjectGuid Transport; - Position Location; + TaggedPosition<Position::XYZ> Location; }; struct SpellTargetData @@ -336,12 +336,6 @@ namespace WorldPackets float Pitch = 0.0f; }; - struct SpellAmmo - { - int32 DisplayID = 0; - int8 InventoryType = 0; - }; - struct CreatureImmunities { uint32 School = 0; @@ -374,7 +368,7 @@ namespace WorldPackets std::vector<SpellPowerData> RemainingPower; Optional<RuneData> RemainingRunes; MissileTrajectoryResult MissileTrajectory; - SpellAmmo Ammo; + int32 AmmoDisplayID; uint8 DestLocSpellCastIndex = 0; std::vector<TargetLocation> TargetPoints; CreatureImmunities Immunities; diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index 6a6c4b74ea0..3b1bb5c7175 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -211,6 +211,10 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket.WriteBit(AccountSaveDataExportEnabled); _worldPacket.WriteBit(AccountLockedByExport); + _worldPacket.WriteBit(RealmHiddenAlert.has_value()); + + if (RealmHiddenAlert) + _worldPacket.WriteBits(RealmHiddenAlert->length() + 1, 11); _worldPacket.FlushBits(); @@ -238,6 +242,9 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() if (LaunchETA) _worldPacket << int32(*LaunchETA); + if (RealmHiddenAlert && !RealmHiddenAlert->empty()) + _worldPacket.WriteString(*RealmHiddenAlert); + if (!LiveRegionCharacterCopySourceRegions.empty()) _worldPacket.append(LiveRegionCharacterCopySourceRegions.data(), LiveRegionCharacterCopySourceRegions.size()); diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index bdbb066d33d..d6ef99f2c81 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -219,6 +219,7 @@ namespace WorldPackets Optional<int32> LaunchETA; std::vector<DebugTimeEventInfo> DebugTimeEvents; int32 Unused1007 = 0; + Optional<std::string> RealmHiddenAlert; }; class MOTD final : public ServerPacket diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 9367064babf..9d017c8d871 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -19,8 +19,6 @@ #include "Log.h" #include "WorldSession.h" #include "Packets/AllPackets.h" -#include <iomanip> -#include <sstream> template<class PacketClass, void(WorldSession::*HandlerFunction)(PacketClass&)> class PacketHandler : public ClientOpcodeHandler @@ -849,6 +847,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SEND_CHARACTER_CLUB_INVITATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SEND_CONTACT_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleContactListOpcode); DEFINE_HANDLER(CMSG_SEND_MAIL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendMail); + DEFINE_HANDLER(CMSG_SEND_PING_UNIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_SEND_PING_WORLD_POINT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SEND_TEXT_EMOTE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTextEmoteOpcode); DEFINE_HANDLER(CMSG_SERVER_TIME_OFFSET_REQUEST, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleServerTimeOffsetRequest); DEFINE_HANDLER(CMSG_SET_ACHIEVEMENTS_HIDDEN, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -858,6 +858,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_ADVANCED_COMBAT_LOGGING, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetAdvancedCombatLogging); DEFINE_HANDLER(CMSG_SET_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetAssistantLeaderOpcode); DEFINE_HANDLER(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_SET_BACKPACK_SELL_JUNK_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_BANK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_CONTACT_NOTES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetContactNotesOpcode); DEFINE_HANDLER(CMSG_SET_CURRENCY_FLAGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -880,6 +881,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_PREFERRED_CEMETERY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetPvP); DEFINE_HANDLER(CMSG_SET_RAID_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetRaidDifficultyOpcode); + DEFINE_HANDLER(CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_ROLE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetRoleOpcode); DEFINE_HANDLER(CMSG_SET_SAVED_INSTANCE_EXTEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetSavedInstanceExtend); DEFINE_HANDLER(CMSG_SET_SELECTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetSelectionOpcode); @@ -1164,6 +1166,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_AUTO_REPEAT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_COMBAT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_ORPHAN_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_PING_PIN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_PRELOAD_WORLD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SCENE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CANCEL_SPELL_VISUAL, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1824,7 +1827,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_CHOICE_CLEAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_CHOICE_DISPLAY_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_CONDITION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_HIDE_ARROW_CALLOUT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_HIDE_ARROW_CALLOUT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_GUILD_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1925,6 +1928,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_LOOKUP_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REATTACH_RESURRECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_UNIT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_WORLD_POINT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRAFT_ITEM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_COMPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -2091,6 +2096,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_TOTEM_CREATED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TOTEM_DURATION_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TOTEM_MOVED, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_TOTEM_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRADE_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRADE_UPDATED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRAINER_BUY_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2153,6 +2159,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN3_DISABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN3_ENABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARFRONT_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEATHER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_REWARDS_PROGRESS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); @@ -2173,27 +2180,25 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTIPLE_PACKETS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); #undef DEFINE_SERVER_OPCODE_HANDLER -}; +} template<typename T> inline std::string GetOpcodeNameForLoggingImpl(T id) { uint32 opcode = uint32(id); - std::ostringstream ss; - ss << '['; + char const* name = nullptr; - if (static_cast<uint32>(id) < NUM_OPCODE_HANDLERS) + if (opcode < NUM_OPCODE_HANDLERS) { if (OpcodeHandler const* handler = opcodeTable[id]) - ss << handler->Name; + name = handler->Name; else - ss << "UNKNOWN OPCODE"; + name = "UNKNOWN OPCODE"; } else - ss << "INVALID OPCODE"; + name = "INVALID OPCODE"; - ss << " 0x" << std::hex << std::setw(4) << std::setfill('0') << std::uppercase << opcode << std::nouppercase << std::dec << " (" << opcode << ")]"; - return ss.str(); + return Trinity::StringFormat("[{0} 0x{1:04X} ({1})]", name, opcode); } std::string GetOpcodeNameForLogging(OpcodeClient opcode) diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 6d9b0080918..a79e261590d 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -44,24 +44,24 @@ enum OpcodeMisc : uint16 enum OpcodeClient : uint16 { - CMSG_ABANDON_NPE_RESPONSE = 0x33F0, + CMSG_ABANDON_NPE_RESPONSE = 0x33F1, CMSG_ACCEPT_GUILD_INVITE = 0x35FD, - CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x339B, - CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3744, + CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x339C, + CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3745, CMSG_ACCEPT_TRADE = 0x315A, CMSG_ACCEPT_WARGAME_INVITE = 0x35E0, - CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3733, - CMSG_ACTIVATE_SOULBIND = 0x33DF, + CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3734, + CMSG_ACTIVATE_SOULBIND = 0x33E0, CMSG_ACTIVATE_TAXI = 0x34B2, CMSG_ADDON_LIST = 0x35D8, CMSG_ADD_ACCOUNT_COSMETIC = 0x32B6, - CMSG_ADD_BATTLENET_FRIEND = 0x3659, - CMSG_ADD_FRIEND = 0x36CD, - CMSG_ADD_IGNORE = 0x36D1, + CMSG_ADD_BATTLENET_FRIEND = 0x365A, + CMSG_ADD_FRIEND = 0x36CE, + CMSG_ADD_IGNORE = 0x36D2, CMSG_ADD_TOY = 0x32B5, CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3202, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E2, - CMSG_ADVENTURE_MAP_START_QUEST = 0x336E, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E3, + CMSG_ADVENTURE_MAP_START_QUEST = 0x336F, CMSG_ALTER_APPEARANCE = 0x3504, CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B7, CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B8, @@ -71,8 +71,8 @@ enum OpcodeClient : uint16 CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x320E, CMSG_ATTACK_STOP = 0x3267, CMSG_ATTACK_SWING = 0x3266, - CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E3, - CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E4, + CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E4, + CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E5, CMSG_AUCTION_BROWSE_QUERY = 0x34D7, CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x34DF, CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x34DE, @@ -86,10 +86,10 @@ enum OpcodeClient : uint16 CMSG_AUCTION_PLACE_BID = 0x34D6, CMSG_AUCTION_REMOVE_ITEM = 0x34D4, CMSG_AUCTION_REPLICATE_ITEMS = 0x34D5, - CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3735, + CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3736, CMSG_AUCTION_SELL_COMMODITY = 0x34E0, CMSG_AUCTION_SELL_ITEM = 0x34D3, - CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3734, + CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3735, CMSG_AUTH_CONTINUED_SESSION = 0x3766, CMSG_AUTH_SESSION = 0x3765, CMSG_AUTOBANK_ITEM = 0x3997, @@ -101,10 +101,10 @@ enum OpcodeClient : uint16 CMSG_AUTO_GUILD_BANK_ITEM = 0x34BE, CMSG_AUTO_STORE_BAG_ITEM = 0x399B, CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x34C7, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3397, - CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3379, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3399, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3398, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3398, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x337A, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x339A, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3399, CMSG_BANKER_ACTIVATE = 0x34BA, CMSG_BATTLEFIELD_LEAVE = 0x3172, CMSG_BATTLEFIELD_LIST = 0x317D, @@ -115,28 +115,28 @@ enum OpcodeClient : uint16 CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3537, CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3533, CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3534, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D0, - CMSG_BATTLENET_REQUEST = 0x36F2, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CA, - CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3711, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C9, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C0, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3738, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B8, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36B9, - CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370A, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3706, - CMSG_BATTLE_PAY_START_PURCHASE = 0x36C8, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36EF, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D1, + CMSG_BATTLENET_REQUEST = 0x36F3, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CB, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3712, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CA, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C1, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3739, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B9, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BA, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370B, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3707, + CMSG_BATTLE_PAY_START_PURCHASE = 0x36C9, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F0, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x3126, - CMSG_BATTLE_PET_DELETE_PET = 0x3624, - CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3625, - CMSG_BATTLE_PET_MODIFY_NAME = 0x3627, - CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3623, - CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3622, - CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362C, - CMSG_BATTLE_PET_SET_FLAGS = 0x362F, - CMSG_BATTLE_PET_SUMMON = 0x3628, + CMSG_BATTLE_PET_DELETE_PET = 0x3625, + CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3626, + CMSG_BATTLE_PET_MODIFY_NAME = 0x3628, + CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3624, + CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3623, + CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362D, + CMSG_BATTLE_PET_SET_FLAGS = 0x3630, + CMSG_BATTLE_PET_SUMMON = 0x3629, CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E0, CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31DF, CMSG_BEGIN_TRADE = 0x3157, @@ -144,29 +144,29 @@ enum OpcodeClient : uint16 CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3541, CMSG_BLACK_MARKET_OPEN = 0x353F, CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3540, - CMSG_BONUS_ROLL = 0x339A, - CMSG_BUG_REPORT = 0x3684, + CMSG_BONUS_ROLL = 0x339B, + CMSG_BUG_REPORT = 0x3685, CMSG_BUSY_TRADE = 0x3158, CMSG_BUY_BACK_ITEM = 0x34AB, CMSG_BUY_BANK_SLOT = 0x34BB, CMSG_BUY_ITEM = 0x34AA, CMSG_BUY_REAGENT_BANK = 0x34BC, CMSG_CAGE_BATTLE_PET = 0x31F2, - CMSG_CALENDAR_ADD_EVENT = 0x367C, - CMSG_CALENDAR_COMMUNITY_INVITE = 0x3670, - CMSG_CALENDAR_COMPLAIN = 0x3678, - CMSG_CALENDAR_COPY_EVENT = 0x3677, - CMSG_CALENDAR_EVENT_SIGN_UP = 0x367A, - CMSG_CALENDAR_GET = 0x366E, - CMSG_CALENDAR_GET_EVENT = 0x366F, - CMSG_CALENDAR_GET_NUM_PENDING = 0x3679, - CMSG_CALENDAR_INVITE = 0x3671, - CMSG_CALENDAR_MODERATOR_STATUS = 0x3675, - CMSG_CALENDAR_REMOVE_EVENT = 0x3676, - CMSG_CALENDAR_REMOVE_INVITE = 0x3672, - CMSG_CALENDAR_RSVP = 0x3673, - CMSG_CALENDAR_STATUS = 0x3674, - CMSG_CALENDAR_UPDATE_EVENT = 0x367D, + CMSG_CALENDAR_ADD_EVENT = 0x367D, + CMSG_CALENDAR_COMMUNITY_INVITE = 0x3671, + CMSG_CALENDAR_COMPLAIN = 0x3679, + CMSG_CALENDAR_COPY_EVENT = 0x3678, + CMSG_CALENDAR_EVENT_SIGN_UP = 0x367B, + CMSG_CALENDAR_GET = 0x366F, + CMSG_CALENDAR_GET_EVENT = 0x3670, + CMSG_CALENDAR_GET_NUM_PENDING = 0x367A, + CMSG_CALENDAR_INVITE = 0x3672, + CMSG_CALENDAR_MODERATOR_STATUS = 0x3676, + CMSG_CALENDAR_REMOVE_EVENT = 0x3677, + CMSG_CALENDAR_REMOVE_INVITE = 0x3673, + CMSG_CALENDAR_RSVP = 0x3674, + CMSG_CALENDAR_STATUS = 0x3675, + CMSG_CALENDAR_UPDATE_EVENT = 0x367E, CMSG_CANCEL_AURA = 0x31AD, CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F6, CMSG_CANCEL_CAST = 0x32BC, @@ -178,22 +178,22 @@ enum OpcodeClient : uint16 CMSG_CANCEL_QUEUED_SPELL = 0x317E, CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3501, CMSG_CANCEL_TRADE = 0x315C, - CMSG_CAN_DUEL = 0x3661, - CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3705, + CMSG_CAN_DUEL = 0x3662, + CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3706, CMSG_CAST_SPELL = 0x32B9, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x308F, CMSG_CHANGE_BAG_SLOT_FLAG = 0x3353, CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3354, CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3334, - CMSG_CHANGE_REALM_TICKET = 0x36F7, - CMSG_CHANGE_SUB_GROUP = 0x364B, - CMSG_CHARACTER_CHECK_UPGRADE = 0x36C3, - CMSG_CHARACTER_RENAME_REQUEST = 0x36BE, - CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C1, - CMSG_CHARACTER_UPGRADE_START = 0x36C2, - CMSG_CHAR_CUSTOMIZE = 0x368B, - CMSG_CHAR_DELETE = 0x369B, - CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3691, + CMSG_CHANGE_REALM_TICKET = 0x36F8, + CMSG_CHANGE_SUB_GROUP = 0x364C, + CMSG_CHARACTER_CHECK_UPGRADE = 0x36C4, + CMSG_CHARACTER_RENAME_REQUEST = 0x36BF, + CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C2, + CMSG_CHARACTER_UPGRADE_START = 0x36C3, + CMSG_CHAR_CUSTOMIZE = 0x368C, + CMSG_CHAR_DELETE = 0x369C, + CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3692, CMSG_CHAT_ADDON_MESSAGE = 0x37EE, CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x37EF, CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x37F6, @@ -231,17 +231,17 @@ enum OpcodeClient : uint16 CMSG_CHAT_REPORT_FILTERED = 0x37CC, CMSG_CHAT_REPORT_IGNORED = 0x37CB, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE, - CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3644, + CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3645, CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3258, CMSG_CHOICE_RESPONSE = 0x32C1, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33DE, - CMSG_CLAIM_WEEKLY_REWARD = 0x33BA, - CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3417, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33DF, + CMSG_CLAIM_WEEKLY_REWARD = 0x33BB, + CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3418, CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3212, - CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3419, - CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3416, - CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3415, - CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x341A, + CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x341A, + CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3417, + CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3416, + CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x341B, CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3211, CMSG_CLEAR_NEW_APPEARANCE = 0x3129, CMSG_CLEAR_RAID_MARKER = 0x31A5, @@ -249,49 +249,49 @@ enum OpcodeClient : uint16 CMSG_CLIENT_PORT_GRAVEYARD = 0x353B, CMSG_CLOSE_INTERACTION = 0x3499, CMSG_CLOSE_QUEST_CHOICE = 0x32C2, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E6, - CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x341B, - CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371C, - CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371A, - CMSG_CLUB_FINDER_POST = 0x3717, - CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371E, - CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3718, - CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3719, - CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371D, - CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x371F, - CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x371B, - CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x373B, - CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F4, - CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3632, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E7, + CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x341C, + CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371D, + CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371B, + CMSG_CLUB_FINDER_POST = 0x3718, + CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371F, + CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3719, + CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x371A, + CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371E, + CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x3720, + CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x371C, + CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x373C, + CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F5, + CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3633, CMSG_COMMENTATOR_ENABLE = 0x35F0, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4, CMSG_COMMENTATOR_EXIT_INSTANCE = 0x35F5, CMSG_COMMENTATOR_GET_MAP_INFO = 0x35F1, CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F3, CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2, - CMSG_COMMENTATOR_SPECTATE = 0x3739, + CMSG_COMMENTATOR_SPECTATE = 0x373A, CMSG_COMMENTATOR_START_WARGAME = 0x35EF, - CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E1, - CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EB, - CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E2, - CMSG_COMPLAINT = 0x366B, + CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E2, + CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EC, + CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E3, + CMSG_COMPLAINT = 0x366C, CMSG_COMPLETE_CINEMATIC = 0x3559, CMSG_COMPLETE_MOVIE = 0x34EC, CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AA, CMSG_CONFIRM_RESPEC_WIPE = 0x3214, CMSG_CONNECT_TO_FAILED = 0x35D4, - CMSG_CONSUMABLE_TOKEN_BUY = 0x36E6, - CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E7, - CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E5, - CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36E9, - CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36EA, - CMSG_CONTENT_TRACKING_START_TRACKING = 0x342B, - CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x342C, + CMSG_CONSUMABLE_TOKEN_BUY = 0x36E7, + CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E8, + CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E6, + CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36EA, + CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36EB, + CMSG_CONTENT_TRACKING_START_TRACKING = 0x342C, + CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x342D, CMSG_CONTRIBUTION_CONTRIBUTE = 0x356D, CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356E, CMSG_CONVERSATION_CINEMATIC_READY = 0x355B, CMSG_CONVERSATION_LINE_STARTED = 0x355A, - CMSG_CONVERT_RAID = 0x364D, + CMSG_CONVERT_RAID = 0x364E, CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x3581, CMSG_CRAFTING_ORDER_CANCEL = 0x358C, CMSG_CRAFTING_ORDER_CLAIM = 0x3589, @@ -303,15 +303,15 @@ enum OpcodeClient : uint16 CMSG_CRAFTING_ORDER_RELEASE = 0x358A, CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x358E, CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x358F, - CMSG_CREATE_CHARACTER = 0x3643, + CMSG_CREATE_CHARACTER = 0x3644, CMSG_CREATE_SHIPMENT = 0x331F, CMSG_DB_QUERY_BULK = 0x35E4, CMSG_DECLINE_GUILD_INVITES = 0x352E, CMSG_DECLINE_PETITION = 0x3548, CMSG_DELETE_EQUIPMENT_SET = 0x351A, - CMSG_DEL_FRIEND = 0x36CE, - CMSG_DEL_IGNORE = 0x36D2, - CMSG_DEPOSIT_REAGENT_BANK = 0x335C, + CMSG_DEL_FRIEND = 0x36CF, + CMSG_DEL_IGNORE = 0x36D3, + CMSG_DEPOSIT_REAGENT_BANK = 0x335D, CMSG_DESTROY_ITEM = 0x32AF, CMSG_DF_BOOT_PLAYER_VOTE = 0x3617, CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3609, @@ -320,23 +320,23 @@ enum OpcodeClient : uint16 CMSG_DF_JOIN = 0x360A, CMSG_DF_LEAVE = 0x3613, CMSG_DF_PROPOSAL_RESPONSE = 0x3608, - CMSG_DF_READY_CHECK_RESPONSE = 0x361A, + CMSG_DF_READY_CHECK_RESPONSE = 0x361B, CMSG_DF_SET_ROLES = 0x3616, CMSG_DF_TELEPORT = 0x3618, CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A41, CMSG_DISMISS_CRITTER = 0x3508, - CMSG_DO_COUNTDOWN = 0x3716, + CMSG_DO_COUNTDOWN = 0x3717, CMSG_DO_MASTER_LOOT_ROLL = 0x3219, - CMSG_DO_READY_CHECK = 0x3633, + CMSG_DO_READY_CHECK = 0x3634, CMSG_DUEL_RESPONSE = 0x34F1, CMSG_EJECT_PASSENGER = 0x324D, CMSG_EMOTE = 0x3555, CMSG_ENABLE_NAGLE = 0x376B, CMSG_ENABLE_TAXI_NODE = 0x34B0, - CMSG_ENGINE_SURVEY = 0x36E0, + CMSG_ENGINE_SURVEY = 0x36E1, CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x3767, CMSG_ENUM_CHARACTERS = 0x35E8, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DA, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DB, CMSG_FAR_SIGHT = 0x34F7, CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B1, CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B0, @@ -351,7 +351,7 @@ enum OpcodeClient : uint16 CMSG_GARRISON_GENERATE_RECRUITS = 0x3303, CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3312, CMSG_GARRISON_GET_MAP_DATA = 0x3319, - CMSG_GARRISON_GET_MISSION_REWARD = 0x3372, + CMSG_GARRISON_GET_MISSION_REWARD = 0x3373, CMSG_GARRISON_LEARN_TALENT = 0x330E, CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3343, CMSG_GARRISON_PURCHASE_BUILDING = 0x32E9, @@ -366,26 +366,26 @@ enum OpcodeClient : uint16 CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32FE, CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32F6, CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3304, - CMSG_GARRISON_SOCKET_TALENT = 0x33F3, + CMSG_GARRISON_SOCKET_TALENT = 0x33F4, CMSG_GARRISON_START_MISSION = 0x3340, CMSG_GARRISON_SWAP_BUILDINGS = 0x32EE, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7, - CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B3, - CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3732, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B4, + CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3733, CMSG_GET_GARRISON_INFO = 0x32E3, CMSG_GET_ITEM_PURCHASE_DATA = 0x3543, CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x331E, CMSG_GET_MIRROR_IMAGE_DATA = 0x32B3, CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE, - CMSG_GET_RAF_ACCOUNT_INFO = 0x3720, - CMSG_GET_REMAINING_GAME_TIME = 0x36E8, + CMSG_GET_RAF_ACCOUNT_INFO = 0x3721, + CMSG_GET_REMAINING_GAME_TIME = 0x36E9, CMSG_GET_TROPHY_LIST = 0x3331, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DC, - CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36ED, - CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36EE, - CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x368F, - CMSG_GM_TICKET_GET_CASE_STATUS = 0x368E, - CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368D, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DD, + CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36EE, + CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36EF, + CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3690, + CMSG_GM_TICKET_GET_CASE_STATUS = 0x368F, + CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368E, CMSG_GOSSIP_REFRESH_OPTIONS = 0x3580, CMSG_GOSSIP_SELECT_OPTION = 0x349A, CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308D, @@ -425,7 +425,7 @@ enum OpcodeClient : uint16 CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3089, CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x3070, CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3071, - CMSG_GUILD_SET_GUILD_MASTER = 0x36C5, + CMSG_GUILD_SET_GUILD_MASTER = 0x36C6, CMSG_GUILD_SET_MEMBER_NOTE = 0x3073, CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3068, CMSG_GUILD_SHIFT_RANK = 0x3067, @@ -439,17 +439,17 @@ enum OpcodeClient : uint16 CMSG_INITIATE_TRADE = 0x3156, CMSG_INSPECT = 0x353D, CMSG_INSTANCE_LOCK_RESPONSE = 0x351B, - CMSG_ISLAND_QUEUE = 0x33B6, + CMSG_ISLAND_QUEUE = 0x33B7, CMSG_ITEM_PURCHASE_REFUND = 0x3544, CMSG_ITEM_TEXT_QUERY = 0x3350, CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DD, CMSG_JOIN_RATED_BATTLEGROUND = 0x3178, - CMSG_KEEP_ALIVE = 0x367E, + CMSG_KEEP_ALIVE = 0x367F, CMSG_KEYBOUND_OVERRIDE = 0x322F, CMSG_LATENCY_REPORT = 0x3771, CMSG_LEARN_PVP_TALENTS = 0x356C, CMSG_LEARN_TALENTS = 0x356A, - CMSG_LEAVE_GROUP = 0x3648, + CMSG_LEAVE_GROUP = 0x3649, CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31DE, CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360E, CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360F, @@ -457,15 +457,15 @@ enum OpcodeClient : uint16 CMSG_LFG_LIST_GET_STATUS = 0x360C, CMSG_LFG_LIST_INVITE_APPLICANT = 0x3611, CMSG_LFG_LIST_INVITE_RESPONSE = 0x3612, - CMSG_LFG_LIST_JOIN = 0x3395, + CMSG_LFG_LIST_JOIN = 0x3396, CMSG_LFG_LIST_LEAVE = 0x360B, CMSG_LFG_LIST_SEARCH = 0x360D, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x3396, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x3397, CMSG_LIST_INVENTORY = 0x34A7, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B6, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B5, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B4, - CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B7, + CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B7, + CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B6, + CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B5, + CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B8, CMSG_LOADING_SCREEN_NOTIFY = 0x35F8, CMSG_LOAD_SELECTED_TROPHY = 0x3332, CMSG_LOGOUT_CANCEL = 0x34E7, @@ -478,13 +478,13 @@ enum OpcodeClient : uint16 CMSG_LOOT_RELEASE = 0x321B, CMSG_LOOT_ROLL = 0x321C, CMSG_LOOT_UNIT = 0x3215, - CMSG_LOW_LEVEL_RAID1 = 0x369F, + CMSG_LOW_LEVEL_RAID1 = 0x36A0, CMSG_LOW_LEVEL_RAID2 = 0x3522, CMSG_MAIL_CREATE_TEXT_ITEM = 0x354F, CMSG_MAIL_DELETE = 0x3231, CMSG_MAIL_GET_LIST = 0x354A, CMSG_MAIL_MARK_AS_READ = 0x354E, - CMSG_MAIL_RETURN_TO_SENDER = 0x3654, + CMSG_MAIL_RETURN_TO_SENDER = 0x3655, CMSG_MAIL_TAKE_ITEM = 0x354C, CMSG_MAIL_TAKE_MONEY = 0x354B, CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3233, @@ -492,10 +492,10 @@ enum OpcodeClient : uint16 CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x34C8, CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x34C5, CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x34C3, - CMSG_MINIMAP_PING = 0x364A, + CMSG_MINIMAP_PING = 0x364B, CMSG_MISSILE_TRAJECTORY_COLLISION = 0x3189, CMSG_MOUNT_CLEAR_FANFARE = 0x3127, - CMSG_MOUNT_SET_FAVORITE = 0x3631, + CMSG_MOUNT_SET_FAVORITE = 0x3632, CMSG_MOUNT_SPECIAL_ANIM = 0x329B, CMSG_MOVE_ADD_IMPULSE_ACK = 0x3A50, CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4E, @@ -591,7 +591,7 @@ enum OpcodeClient : uint16 CMSG_NEXT_CINEMATIC_CAMERA = 0x3558, CMSG_OBJECT_UPDATE_FAILED = 0x317F, CMSG_OBJECT_UPDATE_RESCUED = 0x3180, - CMSG_OFFER_PETITION = 0x33DD, + CMSG_OFFER_PETITION = 0x33DE, CMSG_OPENING_CINEMATIC = 0x3557, CMSG_OPEN_ITEM = 0x3351, CMSG_OPEN_MISSION_NPC = 0x3314, @@ -601,24 +601,24 @@ enum OpcodeClient : uint16 CMSG_OVERRIDE_SCREEN_FLASH = 0x352F, CMSG_PARTY_INVITE = 0x3603, CMSG_PARTY_INVITE_RESPONSE = 0x3605, - CMSG_PARTY_UNINVITE = 0x3646, + CMSG_PARTY_UNINVITE = 0x3647, CMSG_PERFORM_ITEM_INTERACTION = 0x323B, CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x3135, - CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3406, - CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3407, - CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3408, - CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3405, + CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3407, + CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3408, + CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3409, + CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3406, CMSG_PETITION_BUY = 0x34D0, - CMSG_PETITION_RENAME_GUILD = 0x36C6, + CMSG_PETITION_RENAME_GUILD = 0x36C7, CMSG_PETITION_SHOW_LIST = 0x34CF, CMSG_PETITION_SHOW_SIGNATURES = 0x34D1, CMSG_PET_ABANDON = 0x3493, CMSG_PET_ACTION = 0x3491, CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E2, - CMSG_PET_BATTLE_INPUT = 0x3640, + CMSG_PET_BATTLE_INPUT = 0x3641, CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3230, CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E1, - CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3641, + CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3642, CMSG_PET_BATTLE_REQUEST_PVP = 0x31DB, CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DC, CMSG_PET_BATTLE_REQUEST_WILD = 0x31D9, @@ -626,7 +626,7 @@ enum OpcodeClient : uint16 CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DA, CMSG_PET_CANCEL_AURA = 0x3494, CMSG_PET_CAST_SPELL = 0x32B8, - CMSG_PET_RENAME = 0x3683, + CMSG_PET_RENAME = 0x3684, CMSG_PET_SET_ACTION = 0x3490, CMSG_PET_SPELL_AUTOCAST = 0x3495, CMSG_PET_STOP_ATTACK = 0x3492, @@ -635,13 +635,13 @@ enum OpcodeClient : uint16 CMSG_PUSH_QUEST_TO_PARTY = 0x34A5, CMSG_PVP_LOG_DATA = 0x317B, CMSG_QUERY_BATTLE_PET_NAME = 0x328E, - CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365F, - CMSG_QUERY_CORPSE_TRANSPORT = 0x3660, + CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3660, + CMSG_QUERY_CORPSE_TRANSPORT = 0x3661, CMSG_QUERY_COUNTDOWN_TIMER = 0x31A8, CMSG_QUERY_CREATURE = 0x3288, CMSG_QUERY_GAME_OBJECT = 0x3289, CMSG_QUERY_GARRISON_PET_NAME = 0x328F, - CMSG_QUERY_GUILD_INFO = 0x3689, + CMSG_QUERY_GUILD_INFO = 0x368A, CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x350F, CMSG_QUERY_NEXT_MAIL_TIME = 0x354D, CMSG_QUERY_NPC_TEXT = 0x328A, @@ -654,10 +654,10 @@ enum OpcodeClient : uint16 CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3174, CMSG_QUERY_QUEST_INFO = 0x328B, CMSG_QUERY_QUEST_ITEM_USABILITY = 0x3175, - CMSG_QUERY_REALM_NAME = 0x3688, - CMSG_QUERY_SCENARIO_POI = 0x3655, + CMSG_QUERY_REALM_NAME = 0x3689, + CMSG_QUERY_SCENARIO_POI = 0x3656, CMSG_QUERY_TIME = 0x34E4, - CMSG_QUERY_TREASURE_PICKER = 0x3375, + CMSG_QUERY_TREASURE_PICKER = 0x3376, CMSG_QUERY_VOID_STORAGE = 0x31A1, CMSG_QUEST_CONFIRM_ACCEPT = 0x34A4, CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349E, @@ -671,60 +671,60 @@ enum OpcodeClient : uint16 CMSG_QUEST_GIVER_STATUS_QUERY = 0x34A2, CMSG_QUEST_GIVER_STATUS_TRACKED_QUERY = 0x3591, CMSG_QUEST_LOG_REMOVE_QUEST = 0x3542, - CMSG_QUEST_POI_QUERY = 0x36AD, + CMSG_QUEST_POI_QUERY = 0x36AE, CMSG_QUEST_PUSH_RESULT = 0x34A6, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33CE, - CMSG_QUEST_SESSION_REQUEST_START = 0x33CD, - CMSG_QUEST_SESSION_REQUEST_STOP = 0x372B, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33CF, + CMSG_QUEST_SESSION_REQUEST_START = 0x33CE, + CMSG_QUEST_SESSION_REQUEST_STOP = 0x372C, CMSG_QUEUED_MESSAGES_END = 0x376C, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3703, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3702, - CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3730, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3701, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3700, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3704, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3703, + CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3731, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3702, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3701, CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3513, - CMSG_RAF_CLAIM_NEXT_REWARD = 0x3721, - CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3723, - CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3722, - CMSG_RANDOM_ROLL = 0x3653, - CMSG_READY_CHECK_RESPONSE = 0x3634, + CMSG_RAF_CLAIM_NEXT_REWARD = 0x3722, + CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3724, + CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3723, + CMSG_RANDOM_ROLL = 0x3654, + CMSG_READY_CHECK_RESPONSE = 0x3635, CMSG_READ_ITEM = 0x3352, CMSG_RECLAIM_CORPSE = 0x34EA, - CMSG_REMOVE_NEW_ITEM = 0x3378, - CMSG_REMOVE_RAF_RECRUIT = 0x3724, + CMSG_REMOVE_NEW_ITEM = 0x3379, + CMSG_REMOVE_RAF_RECRUIT = 0x3725, CMSG_REORDER_CHARACTERS = 0x35E9, CMSG_REPAIR_ITEM = 0x34FB, CMSG_REPLACE_TROPHY = 0x3333, CMSG_REPOP_REQUEST = 0x353A, - CMSG_REPORT_CLIENT_VARIABLES = 0x36FD, - CMSG_REPORT_ENABLED_ADDONS = 0x36FC, - CMSG_REPORT_FROZEN_WHILE_LOADING_MAP = 0x36A5, - CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FE, + CMSG_REPORT_CLIENT_VARIABLES = 0x36FE, + CMSG_REPORT_ENABLED_ADDONS = 0x36FD, + CMSG_REPORT_FROZEN_WHILE_LOADING_MAP = 0x36A6, + CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FF, CMSG_REPORT_PVP_PLAYER_AFK = 0x3503, - CMSG_REPORT_SERVER_LAG = 0x33C6, - CMSG_REPORT_STUCK_IN_COMBAT = 0x33C7, - CMSG_REQUEST_ACCOUNT_DATA = 0x3693, - CMSG_REQUEST_AREA_POI_UPDATE = 0x3377, + CMSG_REPORT_SERVER_LAG = 0x33C7, + CMSG_REPORT_STUCK_IN_COMBAT = 0x33C8, + CMSG_REQUEST_ACCOUNT_DATA = 0x3694, + CMSG_REQUEST_AREA_POI_UPDATE = 0x3378, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC, CMSG_REQUEST_CEMETERY_LIST = 0x3176, - CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368A, + CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368B, CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32D5, - CMSG_REQUEST_COVENANT_CALLINGS = 0x33B8, + CMSG_REQUEST_COVENANT_CALLINGS = 0x33B9, CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353E, CMSG_REQUEST_FORCED_REACTIONS = 0x320C, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F2, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F3, CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A7, CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A6, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C8, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C9, CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32C4, CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3206, CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3207, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7, - CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3652, + CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3653, CMSG_REQUEST_PET_INFO = 0x3496, CMSG_REQUEST_PLAYED_TIME = 0x3293, CMSG_REQUEST_PVP_REWARDS = 0x3194, - CMSG_REQUEST_RAID_INFO = 0x36C7, + CMSG_REQUEST_RAID_INFO = 0x36C8, CMSG_REQUEST_RATED_PVP_INFO = 0x35E3, CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x309A, CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3195, @@ -733,16 +733,16 @@ enum OpcodeClient : uint16 CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x324A, CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3249, CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x324B, - CMSG_REQUEST_WEEKLY_REWARDS = 0x33BB, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3376, + CMSG_REQUEST_WEEKLY_REWARDS = 0x33BC, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3377, CMSG_RESET_CHALLENGE_MODE = 0x3204, CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3205, - CMSG_RESET_INSTANCES = 0x3667, - CMSG_RESURRECT_RESPONSE = 0x3682, + CMSG_RESET_INSTANCES = 0x3668, + CMSG_RESURRECT_RESPONSE = 0x3683, CMSG_REVERT_MONUMENT_APPEARANCE = 0x3335, CMSG_RIDE_VEHICLE_INTERACT = 0x324C, - CMSG_RPE_RESET_CHARACTER = 0x374E, - CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3748, + CMSG_RPE_RESET_CHARACTER = 0x374F, + CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3749, CMSG_SAVE_CUF_PROFILES = 0x318A, CMSG_SAVE_EQUIPMENT_SET = 0x3519, CMSG_SAVE_GUILD_EMBLEM = 0x32C8, @@ -752,45 +752,49 @@ enum OpcodeClient : uint16 CMSG_SELF_RES = 0x3545, CMSG_SELL_ALL_JUNK_ITEMS = 0x34A9, CMSG_SELL_ITEM = 0x34A8, - CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F6, - CMSG_SEND_CONTACT_LIST = 0x36CC, + CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F7, + CMSG_SEND_CONTACT_LIST = 0x36CD, CMSG_SEND_MAIL = 0x35FA, + CMSG_SEND_PING_UNIT = 0x342F, + CMSG_SEND_PING_WORLD_POINT = 0x3430, CMSG_SEND_TEXT_EMOTE = 0x348E, - CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369A, + CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369B, CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3232, CMSG_SET_ACTION_BAR_TOGGLES = 0x3546, - CMSG_SET_ACTION_BUTTON = 0x3635, + CMSG_SET_ACTION_BUTTON = 0x3636, CMSG_SET_ACTIVE_MOVER = 0x3A3C, CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32D6, - CMSG_SET_ASSISTANT_LEADER = 0x364E, + CMSG_SET_ASSISTANT_LEADER = 0x364F, CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3355, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3356, - CMSG_SET_CONTACT_NOTES = 0x36CF, + CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x3356, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3357, + CMSG_SET_CONTACT_NOTES = 0x36D0, CMSG_SET_CURRENCY_FLAGS = 0x3168, CMSG_SET_DIFFICULTY_ID = 0x322E, - CMSG_SET_DUNGEON_DIFFICULTY = 0x3681, + CMSG_SET_DUNGEON_DIFFICULTY = 0x3682, CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x3282, CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3619, - CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3704, + CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3705, CMSG_SET_FACTION_AT_WAR = 0x34ED, CMSG_SET_FACTION_INACTIVE = 0x34EF, CMSG_SET_FACTION_NOT_AT_WAR = 0x34EE, CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B8, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3358, - CMSG_SET_LOOT_METHOD = 0x3647, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3359, + CMSG_SET_LOOT_METHOD = 0x3648, CMSG_SET_LOOT_SPECIALIZATION = 0x3553, - CMSG_SET_PARTY_ASSIGNMENT = 0x3650, - CMSG_SET_PARTY_LEADER = 0x3649, + CMSG_SET_PARTY_ASSIGNMENT = 0x3651, + CMSG_SET_PARTY_LEADER = 0x364A, CMSG_SET_PET_SLOT = 0x3167, - CMSG_SET_PLAYER_DECLINED_NAMES = 0x3687, + CMSG_SET_PLAYER_DECLINED_NAMES = 0x3688, CMSG_SET_PREFERRED_CEMETERY = 0x3177, CMSG_SET_PVP = 0x32CC, - CMSG_SET_RAID_DIFFICULTY = 0x36D8, + CMSG_SET_RAID_DIFFICULTY = 0x36D9, + CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x361A, CMSG_SET_ROLE = 0x35D9, - CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3685, + CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3686, CMSG_SET_SELECTION = 0x353C, CMSG_SET_SHEATHED = 0x348F, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3357, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3358, CMSG_SET_TAXI_BENCHMARK_MODE = 0x3502, CMSG_SET_TITLE = 0x3299, CMSG_SET_TRADE_CURRENCY = 0x3160, @@ -799,14 +803,14 @@ enum OpcodeClient : uint16 CMSG_SET_USING_PARTY_GARRISON = 0x3316, CMSG_SET_WAR_MODE = 0x32CD, CMSG_SET_WATCHED_FACTION = 0x34F0, - CMSG_SHOW_TRADE_SKILL = 0x36BF, + CMSG_SHOW_TRADE_SKILL = 0x36C0, CMSG_SIGN_PETITION = 0x3547, - CMSG_SILENCE_PARTY_TALKER = 0x3651, - CMSG_SOCIAL_CONTRACT_REQUEST = 0x3743, + CMSG_SILENCE_PARTY_TALKER = 0x3652, + CMSG_SOCIAL_CONTRACT_REQUEST = 0x3744, CMSG_SOCKET_GEMS = 0x34FA, - CMSG_SORT_BAGS = 0x3359, - CMSG_SORT_BANK_BAGS = 0x335A, - CMSG_SORT_REAGENT_BANK_BAGS = 0x335B, + CMSG_SORT_BAGS = 0x335A, + CMSG_SORT_BANK_BAGS = 0x335B, + CMSG_SORT_REAGENT_BANK_BAGS = 0x335C, CMSG_SPAWN_TRACKING_UPDATE = 0x32AE, CMSG_SPELL_CLICK = 0x349B, CMSG_SPELL_EMPOWER_RELEASE = 0x3280, @@ -821,10 +825,10 @@ enum OpcodeClient : uint16 CMSG_START_SPECTATOR_WAR_GAME = 0x35DF, CMSG_START_WAR_GAME = 0x35DE, CMSG_STORE_GUILD_BANK_ITEM = 0x34BF, - CMSG_SUBMIT_USER_FEEDBACK = 0x3692, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E7, - CMSG_SUMMON_RESPONSE = 0x3669, - CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3645, + CMSG_SUBMIT_USER_FEEDBACK = 0x3693, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E8, + CMSG_SUMMON_RESPONSE = 0x366A, + CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3646, CMSG_SURRENDER_ARENA = 0x3173, CMSG_SUSPEND_COMMS_ACK = 0x3764, CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A, @@ -832,7 +836,7 @@ enum OpcodeClient : uint16 CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x34C0, - CMSG_SWAP_SUB_GROUPS = 0x364C, + CMSG_SWAP_SUB_GROUPS = 0x364D, CMSG_SWAP_VOID_ITEM = 0x31A3, CMSG_TABARD_VENDOR_ACTIVATE = 0x32C9, CMSG_TALK_TO_GOSSIP = 0x3498, @@ -843,51 +847,51 @@ enum OpcodeClient : uint16 CMSG_TIME_SYNC_RESPONSE = 0x3A3D, CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3F, CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3E, - CMSG_TOGGLE_DIFFICULTY = 0x3656, + CMSG_TOGGLE_DIFFICULTY = 0x3657, CMSG_TOGGLE_PVP = 0x32CB, CMSG_TOTEM_DESTROYED = 0x3507, CMSG_TOY_CLEAR_FANFARE = 0x3128, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x3374, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x3375, CMSG_TRAINER_BUY_SPELL = 0x34B5, CMSG_TRAINER_LIST = 0x34B4, - CMSG_TRAITS_COMMIT_CONFIG = 0x340F, - CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x340D, + CMSG_TRAITS_COMMIT_CONFIG = 0x3410, + CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x340E, CMSG_TRANSMOGRIFY_ITEMS = 0x3196, CMSG_TURN_IN_PETITION = 0x3549, - CMSG_TUTORIAL = 0x36D9, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B7, + CMSG_TUTORIAL = 0x36DA, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B8, CMSG_UNACCEPT_TRADE = 0x315B, - CMSG_UNDELETE_CHARACTER = 0x36DB, + CMSG_UNDELETE_CHARACTER = 0x36DC, CMSG_UNLEARN_SKILL = 0x34F4, CMSG_UNLEARN_SPECIALIZATION = 0x31A4, CMSG_UNLOCK_VOID_STORAGE = 0x31A0, - CMSG_UPDATE_AADC_STATUS = 0x3737, - CMSG_UPDATE_ACCOUNT_DATA = 0x3694, + CMSG_UPDATE_AADC_STATUS = 0x3738, + CMSG_UPDATE_ACCOUNT_DATA = 0x3695, CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32BB, - CMSG_UPDATE_CLIENT_SETTINGS = 0x3663, + CMSG_UPDATE_CLIENT_SETTINGS = 0x3664, CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3328, CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A43, - CMSG_UPDATE_RAID_TARGET = 0x364F, + CMSG_UPDATE_RAID_TARGET = 0x3650, CMSG_UPDATE_SPELL_VISUAL = 0x32BA, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F0, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F1, CMSG_UPGRADE_GARRISON = 0x32DE, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E5, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E6, CMSG_USED_FOLLOW = 0x3185, CMSG_USE_CRITTER_ITEM = 0x3252, CMSG_USE_EQUIPMENT_SET = 0x3995, CMSG_USE_ITEM = 0x32B4, CMSG_USE_TOY = 0x32B7, - CMSG_VAS_CHECK_TRANSFER_OK = 0x3709, - CMSG_VAS_GET_QUEUE_MINUTES = 0x3708, - CMSG_VAS_GET_SERVICE_STATUS = 0x3707, + CMSG_VAS_CHECK_TRANSFER_OK = 0x370A, + CMSG_VAS_GET_QUEUE_MINUTES = 0x3709, + CMSG_VAS_GET_SERVICE_STATUS = 0x3708, CMSG_VIOLENCE_LEVEL = 0x3183, - CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370D, - CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370E, - CMSG_VOICE_CHAT_LOGIN = 0x370C, + CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370E, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370F, + CMSG_VOICE_CHAT_LOGIN = 0x370D, CMSG_VOID_STORAGE_TRANSFER = 0x31A2, CMSG_WARDEN3_DATA = 0x35EC, - CMSG_WHO = 0x3680, - CMSG_WHO_IS = 0x367F, + CMSG_WHO = 0x3681, + CMSG_WHO_IS = 0x3680, CMSG_WORLD_PORT_RESPONSE = 0x35F9, CMSG_WRAP_ITEM = 0x3994, }; @@ -895,89 +899,89 @@ enum OpcodeClient : uint16 enum OpcodeServer : uint16 { SMSG_ABORT_NEW_WORLD = 0x2597, - SMSG_ACCOUNT_COSMETIC_ADDED = 0x2872, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2858, - SMSG_ACCOUNT_DATA_TIMES = 0x2700, - SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28AF, - SMSG_ACCOUNT_MOUNT_REMOVED = 0x25AB, - SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AA, - SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2871, - SMSG_ACCOUNT_TOY_UPDATE = 0x25AC, - SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B0, - SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25AF, - SMSG_ACHIEVEMENT_DELETED = 0x26DE, - SMSG_ACHIEVEMENT_EARNED = 0x263C, + SMSG_ACCOUNT_COSMETIC_ADDED = 0x2876, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x285C, + SMSG_ACCOUNT_DATA_TIMES = 0x2704, + SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28B3, + SMSG_ACCOUNT_MOUNT_REMOVED = 0x25AE, + SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AD, + SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2875, + SMSG_ACCOUNT_TOY_UPDATE = 0x25AF, + SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B3, + SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B2, + SMSG_ACHIEVEMENT_DELETED = 0x26E2, + SMSG_ACHIEVEMENT_EARNED = 0x263F, SMSG_ACTIVATE_ESSENCE_FAILED = 0x3015, SMSG_ACTIVATE_SOULBIND_FAILED = 0x3017, - SMSG_ACTIVATE_TAXI_REPLY = 0x2676, + SMSG_ACTIVATE_TAXI_REPLY = 0x2679, SMSG_ACTIVE_GLYPHS = 0x2C54, - SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x273C, - SMSG_ADDON_LIST_REQUEST = 0x263B, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2636, - SMSG_ADD_ITEM_PASSIVE = 0x25A6, - SMSG_ADD_LOSS_OF_CONTROL = 0x266A, - SMSG_ADD_RUNE_POWER = 0x26B0, - SMSG_ADJUST_SPLINE_DURATION = 0x25CC, - SMSG_ADVANCED_COMBAT_LOG = 0x286E, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x2868, - SMSG_AE_LOOT_TARGETS = 0x2611, - SMSG_AE_LOOT_TARGET_ACK = 0x2612, - SMSG_AI_REACTION = 0x26AD, - SMSG_ALLIED_RACE_DETAILS = 0x27EC, + SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2740, + SMSG_ADDON_LIST_REQUEST = 0x263E, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2639, + SMSG_ADD_ITEM_PASSIVE = 0x25A9, + SMSG_ADD_LOSS_OF_CONTROL = 0x266D, + SMSG_ADD_RUNE_POWER = 0x26B3, + SMSG_ADJUST_SPLINE_DURATION = 0x25CF, + SMSG_ADVANCED_COMBAT_LOG = 0x2872, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x286C, + SMSG_AE_LOOT_TARGETS = 0x2614, + SMSG_AE_LOOT_TARGET_ACK = 0x2615, + SMSG_AI_REACTION = 0x26B0, + SMSG_ALLIED_RACE_DETAILS = 0x27F0, SMSG_ALL_ACCOUNT_CRITERIA = 0x2571, SMSG_ALL_ACHIEVEMENT_DATA = 0x2570, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2845, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2849, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2586, SMSG_AREA_POI_UPDATE_RESPONSE = 0x3010, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x2735, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x2739, SMSG_AREA_TRIGGER_DENIED = 0x2903, SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x2900, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x270C, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x2710, SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FE, SMSG_AREA_TRIGGER_RE_PATH = 0x28FD, SMSG_AREA_TRIGGER_RE_SHAPE = 0x2902, SMSG_AREA_TRIGGER_UNATTACH = 0x2901, SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x28FF, - SMSG_ARENA_CLEAR_OPPONENTS = 0x2642, - SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262B, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2641, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x2797, - SMSG_ARTIFACT_FORGE_ERROR = 0x2795, - SMSG_ARTIFACT_RESPEC_PROMPT = 0x2796, - SMSG_ARTIFACT_XP_GAIN = 0x27DF, - SMSG_ATTACKER_STATE_UPDATE = 0x294D, - SMSG_ATTACK_START = 0x2938, - SMSG_ATTACK_STOP = 0x2939, - SMSG_ATTACK_SWING_ERROR = 0x2947, - SMSG_ATTACK_SWING_LANDED_LOG = 0x2948, - SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27C8, - SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27C7, - SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27C6, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26E9, - SMSG_AUCTION_COMMAND_RESULT = 0x26E6, - SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x288F, - SMSG_AUCTION_FAVORITE_LIST = 0x285F, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x2856, - SMSG_AUCTION_HELLO_RESPONSE = 0x26E4, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2855, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2852, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2853, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2854, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26E8, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26EA, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x26E5, - SMSG_AUCTION_WON_NOTIFICATION = 0x26E7, + SMSG_ARENA_CLEAR_OPPONENTS = 0x2645, + SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262E, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2644, + SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279B, + SMSG_ARTIFACT_FORGE_ERROR = 0x2799, + SMSG_ARTIFACT_RESPEC_PROMPT = 0x279A, + SMSG_ARTIFACT_XP_GAIN = 0x27E3, + SMSG_ATTACKER_STATE_UPDATE = 0x294E, + SMSG_ATTACK_START = 0x2939, + SMSG_ATTACK_STOP = 0x293A, + SMSG_ATTACK_SWING_ERROR = 0x2948, + SMSG_ATTACK_SWING_LANDED_LOG = 0x2949, + SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27CC, + SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27CB, + SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27CA, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26ED, + SMSG_AUCTION_COMMAND_RESULT = 0x26EA, + SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2893, + SMSG_AUCTION_FAVORITE_LIST = 0x2863, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x285A, + SMSG_AUCTION_HELLO_RESPONSE = 0x26E8, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2859, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2856, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2857, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2858, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26EC, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26EE, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x26E9, + SMSG_AUCTION_WON_NOTIFICATION = 0x26EB, SMSG_AURA_POINTS_DEPLETED = 0x2C20, SMSG_AURA_UPDATE = 0x2C1F, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_FAILED = 0x256C, SMSG_AUTH_RESPONSE = 0x256D, SMSG_AVAILABLE_HOTFIXES = 0x290F, - SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x2894, + SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x2898, SMSG_BAG_CLEANUP_FINISHED = 0x2DA7, - SMSG_BARBER_SHOP_RESULT = 0x26B5, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x2836, + SMSG_BARBER_SHOP_RESULT = 0x26B8, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x283A, SMSG_BATTLEFIELD_LIST = 0x2927, SMSG_BATTLEFIELD_PORT_DENIED = 0x292D, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2923, @@ -988,115 +992,116 @@ enum OpcodeServer : uint16 SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2924, SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x292F, SMSG_BATTLEGROUND_INFO_THROTTLED = 0x292E, - SMSG_BATTLEGROUND_INIT = 0x294A, + SMSG_BATTLEGROUND_INIT = 0x294B, SMSG_BATTLEGROUND_PLAYER_JOINED = 0x292B, SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928, - SMSG_BATTLEGROUND_POINTS = 0x2949, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x277F, - SMSG_BATTLENET_CHALLENGE_START = 0x277E, - SMSG_BATTLENET_NOTIFICATION = 0x27F8, - SMSG_BATTLENET_RESPONSE = 0x27F7, - SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27F9, - SMSG_BATTLE_PAY_ACK_FAILED = 0x2779, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x276E, - SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x276F, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2778, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x276C, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x276B, - SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x2877, - SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2769, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x276A, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2768, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x2766, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2767, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x276D, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2777, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x2814, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2775, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2774, - SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2808, - SMSG_BATTLE_PETS_HEALED = 0x25EE, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2671, - SMSG_BATTLE_PET_DELETED = 0x25EB, - SMSG_BATTLE_PET_ERROR = 0x2631, - SMSG_BATTLE_PET_JOURNAL = 0x25EA, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25E8, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25E9, - SMSG_BATTLE_PET_RESTORED = 0x25ED, - SMSG_BATTLE_PET_REVOKED = 0x25EC, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E6, - SMSG_BATTLE_PET_UPDATES = 0x25E5, + SMSG_BATTLEGROUND_POINTS = 0x294A, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x2783, + SMSG_BATTLENET_CHALLENGE_START = 0x2782, + SMSG_BATTLENET_NOTIFICATION = 0x27FC, + SMSG_BATTLENET_RESPONSE = 0x27FB, + SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27FD, + SMSG_BATTLE_PAY_ACK_FAILED = 0x277D, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2772, + SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2773, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x277C, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2770, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x276F, + SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x287B, + SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x276D, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x276E, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x276C, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276A, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x276B, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2771, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x277B, + SMSG_BATTLE_PAY_START_CHECKOUT = 0x2818, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2779, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2778, + SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x280C, + SMSG_BATTLE_PETS_HEALED = 0x25F1, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2674, + SMSG_BATTLE_PET_DELETED = 0x25EE, + SMSG_BATTLE_PET_ERROR = 0x2634, + SMSG_BATTLE_PET_JOURNAL = 0x25ED, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25EB, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25EC, + SMSG_BATTLE_PET_RESTORED = 0x25F0, + SMSG_BATTLE_PET_REVOKED = 0x25EF, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E9, + SMSG_BATTLE_PET_UPDATES = 0x25E8, SMSG_BIND_POINT_UPDATE = 0x257D, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2621, - SMSG_BLACK_MARKET_OUTBID = 0x2622, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2620, - SMSG_BLACK_MARKET_WON = 0x2623, - SMSG_BONUS_ROLL_EMPTY = 0x263E, - SMSG_BOSS_KILL = 0x294C, - SMSG_BREAK_TARGET = 0x2937, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2624, + SMSG_BLACK_MARKET_OUTBID = 0x2625, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2623, + SMSG_BLACK_MARKET_WON = 0x2626, + SMSG_BONUS_ROLL_EMPTY = 0x2641, + SMSG_BOSS_KILL = 0x294D, + SMSG_BREAK_TARGET = 0x2938, SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, - SMSG_BROADCAST_SUMMON_CAST = 0x2838, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x2839, - SMSG_BUY_FAILED = 0x26BE, - SMSG_BUY_SUCCEEDED = 0x26BD, + SMSG_BROADCAST_SUMMON_CAST = 0x283C, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x283D, + SMSG_BUY_FAILED = 0x26C1, + SMSG_BUY_SUCCEEDED = 0x26C0, SMSG_CACHE_INFO = 0x291D, SMSG_CACHE_VERSION = 0x291C, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x2696, - SMSG_CALENDAR_COMMAND_RESULT = 0x2697, - SMSG_CALENDAR_COMMUNITY_INVITE = 0x2686, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x268E, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x268F, - SMSG_CALENDAR_INVITE_ADDED = 0x2687, - SMSG_CALENDAR_INVITE_ALERT = 0x268B, - SMSG_CALENDAR_INVITE_NOTES = 0x2690, - SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2691, - SMSG_CALENDAR_INVITE_REMOVED = 0x2688, - SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x268D, - SMSG_CALENDAR_INVITE_STATUS = 0x2689, - SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x268C, - SMSG_CALENDAR_MODERATOR_STATUS = 0x268A, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2692, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2693, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2694, - SMSG_CALENDAR_SEND_CALENDAR = 0x2684, - SMSG_CALENDAR_SEND_EVENT = 0x2685, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x2695, - SMSG_CAMERA_EFFECT = 0x271B, - SMSG_CANCEL_AUTO_REPEAT = 0x26D4, - SMSG_CANCEL_COMBAT = 0x2946, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x2699, + SMSG_CALENDAR_COMMAND_RESULT = 0x269A, + SMSG_CALENDAR_COMMUNITY_INVITE = 0x2689, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2691, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2692, + SMSG_CALENDAR_INVITE_ADDED = 0x268A, + SMSG_CALENDAR_INVITE_ALERT = 0x268E, + SMSG_CALENDAR_INVITE_NOTES = 0x2693, + SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2694, + SMSG_CALENDAR_INVITE_REMOVED = 0x268B, + SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2690, + SMSG_CALENDAR_INVITE_STATUS = 0x268C, + SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x268F, + SMSG_CALENDAR_MODERATOR_STATUS = 0x268D, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2695, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2696, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2697, + SMSG_CALENDAR_SEND_CALENDAR = 0x2687, + SMSG_CALENDAR_SEND_EVENT = 0x2688, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x2698, + SMSG_CAMERA_EFFECT = 0x271F, + SMSG_CANCEL_AUTO_REPEAT = 0x26D8, + SMSG_CANCEL_COMBAT = 0x2947, SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46, + SMSG_CANCEL_PING_PIN = 0x25A2, SMSG_CANCEL_PRELOAD_WORLD = 0x2595, - SMSG_CANCEL_SCENE = 0x2630, + SMSG_CANCEL_SCENE = 0x2633, SMSG_CANCEL_SPELL_VISUAL = 0x2C44, SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48, - SMSG_CAN_DUEL_RESULT = 0x2942, - SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2807, + SMSG_CAN_DUEL_RESULT = 0x2943, + SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x280B, SMSG_CAPTURE_POINT_REMOVED = 0x292A, SMSG_CAST_FAILED = 0x2C57, - SMSG_CHAIN_MISSILE_BOUNCE = 0x25C4, - SMSG_CHALLENGE_MODE_COMPLETE = 0x2605, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2609, - SMSG_CHALLENGE_MODE_RESET = 0x2604, - SMSG_CHALLENGE_MODE_START = 0x2602, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2603, + SMSG_CHAIN_MISSILE_BOUNCE = 0x25C7, + SMSG_CHALLENGE_MODE_COMPLETE = 0x2608, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260C, + SMSG_CHALLENGE_MODE_RESET = 0x2607, + SMSG_CHALLENGE_MODE_START = 0x2605, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2606, SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3004, - SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x27FA, + SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x27FE, SMSG_CHANNEL_LIST = 0x2BC4, SMSG_CHANNEL_NOTIFY = 0x2BC1, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC2, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC3, - SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B2, - SMSG_CHARACTER_LOGIN_FAILED = 0x26FB, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x277D, - SMSG_CHARACTER_RENAME_RESULT = 0x2758, - SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B1, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B0, - SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27B3, - SMSG_CHARACTER_UPGRADE_STARTED = 0x27AF, - SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26D8, - SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26D9, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x279C, + SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B6, + SMSG_CHARACTER_LOGIN_FAILED = 0x26FF, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2781, + SMSG_CHARACTER_RENAME_RESULT = 0x275C, + SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B5, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B4, + SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27B7, + SMSG_CHARACTER_UPGRADE_STARTED = 0x27B3, + SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26DC, + SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26DD, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A0, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x2BCB, @@ -1114,150 +1119,150 @@ enum OpcodeServer : uint16 SMSG_CHECK_ABANDON_NPE = 0x3018, SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2584, SMSG_CHECK_WARGAME_ENTRY = 0x258F, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2862, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x2849, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2866, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x284D, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C24, - SMSG_CLEAR_BOSS_EMOTES = 0x25B7, - SMSG_CLEAR_COOLDOWN = 0x26B2, + SMSG_CLEAR_BOSS_EMOTES = 0x25BA, + SMSG_CLEAR_COOLDOWN = 0x26B5, SMSG_CLEAR_COOLDOWNS = 0x2C23, SMSG_CLEAR_RESURRECT = 0x257F, SMSG_CLEAR_SPELL_CHARGES = 0x2C25, - SMSG_CLEAR_TARGET = 0x2943, + SMSG_CLEAR_TARGET = 0x2944, SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1, - SMSG_CLOSE_ARTIFACT_FORGE = 0x2794, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2841, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2844, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2842, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x283F, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2843, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2840, - SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x2886, - SMSG_COIN_REMOVED = 0x2610, - SMSG_COMBAT_EVENT_FAILED = 0x293A, - SMSG_COMMENTATOR_MAP_INFO = 0x26FD, - SMSG_COMMENTATOR_PLAYER_INFO = 0x26FE, - SMSG_COMMENTATOR_STATE_CHANGED = 0x26FC, - SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27C3, - SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27CF, - SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27C5, - SMSG_COMMERCE_TOKEN_UPDATE = 0x27C4, - SMSG_COMPLAINT_RESULT = 0x26A4, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x278D, - SMSG_CONFIRM_PARTY_INVITE = 0x2806, + SMSG_CLOSE_ARTIFACT_FORGE = 0x2798, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2845, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2848, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2846, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2843, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2847, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2844, + SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x288A, + SMSG_COIN_REMOVED = 0x2613, + SMSG_COMBAT_EVENT_FAILED = 0x293B, + SMSG_COMMENTATOR_MAP_INFO = 0x2701, + SMSG_COMMENTATOR_PLAYER_INFO = 0x2702, + SMSG_COMMENTATOR_STATE_CHANGED = 0x2700, + SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27C7, + SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D3, + SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27C9, + SMSG_COMMERCE_TOKEN_UPDATE = 0x27C8, + SMSG_COMPLAINT_RESULT = 0x26A7, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2791, + SMSG_CONFIRM_PARTY_INVITE = 0x280A, SMSG_CONNECT_TO = 0x304D, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x277A, - SMSG_CONSOLE_WRITE = 0x262E, - SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27CB, - SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27CA, - SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27C9, - SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27CD, - SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27CE, - SMSG_CONTACT_LIST = 0x277B, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x280D, - SMSG_CONTROL_UPDATE = 0x2640, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x286B, - SMSG_COOLDOWN_CHEAT = 0x272E, - SMSG_COOLDOWN_EVENT = 0x26B1, - SMSG_CORPSE_LOCATION = 0x2648, - SMSG_CORPSE_RECLAIM_DELAY = 0x273F, - SMSG_CORPSE_TRANSPORT_QUERY = 0x2708, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x277E, + SMSG_CONSOLE_WRITE = 0x2631, + SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27CF, + SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27CE, + SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27CD, + SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D1, + SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D2, + SMSG_CONTACT_LIST = 0x277F, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2811, + SMSG_CONTROL_UPDATE = 0x2643, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x286F, + SMSG_COOLDOWN_CHEAT = 0x2732, + SMSG_COOLDOWN_EVENT = 0x26B4, + SMSG_CORPSE_LOCATION = 0x264B, + SMSG_CORPSE_RECLAIM_DELAY = 0x2743, + SMSG_CORPSE_TRANSPORT_QUERY = 0x270C, SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3, - SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27EF, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x286C, - SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x28A2, - SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x289E, - SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x289A, - SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x289C, - SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x2898, - SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x289D, - SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x2899, - SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x28A0, - SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x289B, - SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x28A3, - SMSG_CRAFT_ENCHANT_RESULT = 0x28A1, - SMSG_CREATE_CHAR = 0x26F7, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x278C, - SMSG_CREATOR_VISUALS_OVERRIDE = 0x28A6, - SMSG_CRITERIA_DELETED = 0x26DD, - SMSG_CRITERIA_UPDATE = 0x26D7, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26B9, - SMSG_CUSTOM_LOAD_SCREEN = 0x25C7, + SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F3, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2870, + SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x28A6, + SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x28A2, + SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x289E, + SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x28A0, + SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x289C, + SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x28A1, + SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x289D, + SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x28A4, + SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x289F, + SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x28A7, + SMSG_CRAFT_ENCHANT_RESULT = 0x28A5, + SMSG_CREATE_CHAR = 0x26FB, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x2790, + SMSG_CREATOR_VISUALS_OVERRIDE = 0x28AA, + SMSG_CRITERIA_DELETED = 0x26E1, + SMSG_CRITERIA_UPDATE = 0x26DB, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BC, + SMSG_CUSTOM_LOAD_SCREEN = 0x25CA, SMSG_DAILY_QUESTS_RESET = 0x2A80, SMSG_DAMAGE_CALC_LOG = 0x2C63, SMSG_DB_REPLY = 0x290E, - SMSG_DEATH_RELEASE_LOC = 0x26CA, - SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x264E, + SMSG_DEATH_RELEASE_LOC = 0x26CE, + SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2651, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x26F8, + SMSG_DELETE_CHAR = 0x26FC, SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980, - SMSG_DESTROY_ARENA_UNIT = 0x2737, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26EF, + SMSG_DESTROY_ARENA_UNIT = 0x273B, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F3, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x2589, - SMSG_DISENCHANT_CREDIT = 0x25A3, + SMSG_DISENCHANT_CREDIT = 0x25A6, SMSG_DISMOUNT_RESULT = 0x257C, SMSG_DISPEL_FAILED = 0x2C2D, SMSG_DISPLAY_GAME_ERROR = 0x259C, SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC, - SMSG_DISPLAY_PROMOTION = 0x2645, + SMSG_DISPLAY_PROMOTION = 0x2648, SMSG_DISPLAY_QUEST_POPUP = 0x2A9E, - SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2870, - SMSG_DISPLAY_TOAST = 0x261D, - SMSG_DISPLAY_WORLD_TEXT = 0x27E0, + SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2874, + SMSG_DISPLAY_TOAST = 0x2620, + SMSG_DISPLAY_WORLD_TEXT = 0x27E4, SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x2C62, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25DC, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25DF, SMSG_DROP_NEW_CONNECTION = 0x304C, - SMSG_DUEL_ARRANGED = 0x293C, - SMSG_DUEL_COMPLETE = 0x2940, - SMSG_DUEL_COUNTDOWN = 0x293F, - SMSG_DUEL_IN_BOUNDS = 0x293E, - SMSG_DUEL_OUT_OF_BOUNDS = 0x293D, - SMSG_DUEL_REQUESTED = 0x293B, - SMSG_DUEL_WINNER = 0x2941, - SMSG_DURABILITY_DAMAGE_DEATH = 0x273A, - SMSG_EMOTE = 0x27B9, - SMSG_ENABLE_BARBER_SHOP = 0x26B4, - SMSG_ENCHANTMENT_LOG = 0x2709, - SMSG_ENCOUNTER_END = 0x2773, - SMSG_ENCOUNTER_START = 0x2772, - SMSG_END_LIGHTNING_STORM = 0x26A1, - SMSG_ENSURE_WORLD_LOADED = 0x2880, + SMSG_DUEL_ARRANGED = 0x293D, + SMSG_DUEL_COMPLETE = 0x2941, + SMSG_DUEL_COUNTDOWN = 0x2940, + SMSG_DUEL_IN_BOUNDS = 0x293F, + SMSG_DUEL_OUT_OF_BOUNDS = 0x293E, + SMSG_DUEL_REQUESTED = 0x293C, + SMSG_DUEL_WINNER = 0x2942, + SMSG_DURABILITY_DAMAGE_DEATH = 0x273E, + SMSG_EMOTE = 0x27BD, + SMSG_ENABLE_BARBER_SHOP = 0x26B7, + SMSG_ENCHANTMENT_LOG = 0x270D, + SMSG_ENCOUNTER_END = 0x2777, + SMSG_ENCOUNTER_START = 0x2776, + SMSG_END_LIGHTNING_STORM = 0x26A4, + SMSG_ENSURE_WORLD_LOADED = 0x2884, SMSG_ENTER_ENCRYPTED_MODE = 0x3049, SMSG_ENUM_CHARACTERS_RESULT = 0x2583, - SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27E5, + SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27E9, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C1E, - SMSG_EQUIPMENT_SET_ID = 0x26AA, + SMSG_EQUIPMENT_SET_ID = 0x26AD, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x2754, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x2869, - SMSG_FACTION_BONUS_INFO = 0x271A, + SMSG_EXPLORATION_EXPERIENCE = 0x2758, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x286D, + SMSG_FACTION_BONUS_INFO = 0x271E, SMSG_FAILED_PLAYER_CONDITION = 0x2FFA, - SMSG_FAILED_QUEST_TURN_IN = 0x2803, - SMSG_FEATURE_SYSTEM_STATUS = 0x25BB, - SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25BC, - SMSG_FEIGN_DEATH_RESISTED = 0x2739, - SMSG_FISH_ESCAPED = 0x26C7, - SMSG_FISH_NOT_HOOKED = 0x26C6, + SMSG_FAILED_QUEST_TURN_IN = 0x2807, + SMSG_FEATURE_SYSTEM_STATUS = 0x25BE, + SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25BF, + SMSG_FEIGN_DEATH_RESISTED = 0x273D, + SMSG_FISH_ESCAPED = 0x26CB, + SMSG_FISH_NOT_HOOKED = 0x26CA, SMSG_FLIGHT_SPLINE_SYNC = 0x2E2B, - SMSG_FORCED_DEATH_UPDATE = 0x26CB, - SMSG_FORCE_ANIM = 0x2746, - SMSG_FORCE_ANIMATIONS = 0x2747, - SMSG_FORCE_OBJECT_RELINK = 0x2644, - SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x25AE, - SMSG_FRIEND_STATUS = 0x277C, - SMSG_GAIN_MAW_POWER = 0x27D4, - SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25BF, - SMSG_GAME_OBJECT_BASE = 0x281A, - SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2884, - SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C0, - SMSG_GAME_OBJECT_DESPAWN = 0x25C1, - SMSG_GAME_OBJECT_INTERACTION = 0x2883, + SMSG_FORCED_DEATH_UPDATE = 0x26CF, + SMSG_FORCE_ANIM = 0x274A, + SMSG_FORCE_ANIMATIONS = 0x274B, + SMSG_FORCE_OBJECT_RELINK = 0x2647, + SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x25B1, + SMSG_FRIEND_STATUS = 0x2780, + SMSG_GAIN_MAW_POWER = 0x27D8, + SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C2, + SMSG_GAME_OBJECT_BASE = 0x281E, + SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2888, + SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C3, + SMSG_GAME_OBJECT_DESPAWN = 0x25C4, + SMSG_GAME_OBJECT_INTERACTION = 0x2887, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A, - SMSG_GAME_OBJECT_RESET_STATE = 0x2714, - SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27F6, - SMSG_GAME_SPEED_SET = 0x267A, - SMSG_GAME_TIME_SET = 0x2702, - SMSG_GAME_TIME_UPDATE = 0x2701, + SMSG_GAME_OBJECT_RESET_STATE = 0x2718, + SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27FA, + SMSG_GAME_SPEED_SET = 0x267D, + SMSG_GAME_TIME_SET = 0x2706, + SMSG_GAME_TIME_UPDATE = 0x2705, SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982, SMSG_GARRISON_ADD_EVENT = 0x29A6, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974, @@ -1329,36 +1334,36 @@ enum OpcodeServer : uint16 SMSG_GARRISON_UPGRADE_RESULT = 0x296B, SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2585, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x280E, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2756, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2812, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275A, SMSG_GET_GARRISON_INFO_RESULT = 0x295E, - SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x278F, - SMSG_GET_REALM_HIDDEN_RESULT = 0x28B4, - SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27CC, - SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27B7, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x278E, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x278A, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x27B6, - SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E1, - SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E2, + SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2793, + SMSG_GET_REALM_HIDDEN_RESULT = 0x28B8, + SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D0, + SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BB, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2792, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x278E, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BA, + SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E5, + SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E6, SMSG_GM_PLAYER_INFO = 0x3005, SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB, - SMSG_GM_TICKET_CASE_STATUS = 0x269C, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x269B, - SMSG_GOD_MODE = 0x26F2, + SMSG_GM_TICKET_CASE_STATUS = 0x269F, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x269E, + SMSG_GOD_MODE = 0x26F6, SMSG_GOSSIP_COMPLETE = 0x2A97, SMSG_GOSSIP_MESSAGE = 0x2A98, SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA7, - SMSG_GOSSIP_POI = 0x2787, + SMSG_GOSSIP_POI = 0x278B, SMSG_GOSSIP_QUEST_UPDATE = 0x2A99, SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6, SMSG_GROUP_ACTION_THROTTLED = 0x258D, - SMSG_GROUP_AUTO_KICK = 0x2784, - SMSG_GROUP_DECLINE = 0x2780, - SMSG_GROUP_DESTROYED = 0x2783, - SMSG_GROUP_NEW_LEADER = 0x2626, - SMSG_GROUP_REQUEST_DECLINE = 0x2781, - SMSG_GROUP_UNINVITE = 0x2782, + SMSG_GROUP_AUTO_KICK = 0x2788, + SMSG_GROUP_DECLINE = 0x2784, + SMSG_GROUP_DESTROYED = 0x2787, + SMSG_GROUP_NEW_LEADER = 0x2629, + SMSG_GROUP_REQUEST_DECLINE = 0x2785, + SMSG_GROUP_UNINVITE = 0x2786, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1412,59 +1417,59 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26C8, - SMSG_HIGHEST_THREAT_UPDATE = 0x26D0, + SMSG_HEALTH_UPDATE = 0x26CC, + SMSG_HIGHEST_THREAT_UPDATE = 0x26D4, SMSG_HOTFIX_CONNECT = 0x2911, SMSG_HOTFIX_MESSAGE = 0x2910, - SMSG_INITIALIZE_FACTIONS = 0x2719, + SMSG_INITIALIZE_FACTIONS = 0x271D, SMSG_INITIAL_SETUP = 0x2580, - SMSG_INIT_WORLD_STATES = 0x273B, - SMSG_INSPECT_RESULT = 0x262A, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A2, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A1, - SMSG_INSTANCE_ENCOUNTER_END = 0x27AA, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A0, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27AC, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27AB, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27A5, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27A4, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27A9, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27AD, - SMSG_INSTANCE_ENCOUNTER_START = 0x27A6, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27A3, - SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27A8, - SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27A7, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F0, - SMSG_INSTANCE_INFO = 0x262D, - SMSG_INSTANCE_RESET = 0x267F, - SMSG_INSTANCE_RESET_FAILED = 0x2680, - SMSG_INSTANCE_SAVE_CREATED = 0x2771, + SMSG_INIT_WORLD_STATES = 0x273F, + SMSG_INSPECT_RESULT = 0x262D, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A6, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A5, + SMSG_INSTANCE_ENCOUNTER_END = 0x27AE, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A4, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B0, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27AF, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27A9, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27A8, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27AD, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B1, + SMSG_INSTANCE_ENCOUNTER_START = 0x27AA, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27A7, + SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27AC, + SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AB, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F4, + SMSG_INSTANCE_INFO = 0x2630, + SMSG_INSTANCE_RESET = 0x2682, + SMSG_INSTANCE_RESET_FAILED = 0x2683, + SMSG_INSTANCE_SAVE_CREATED = 0x2775, SMSG_INTERRUPT_POWER_REGEN = 0x2C59, SMSG_INVALIDATE_PAGE_TEXT = 0x2918, SMSG_INVALIDATE_PLAYER = 0x2FFF, - SMSG_INVALID_PROMOTION_CODE = 0x2748, + SMSG_INVALID_PROMOTION_CODE = 0x274C, SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5, - SMSG_INVENTORY_FIXUP_COMPLETE = 0x2805, - SMSG_INVENTORY_FULL_OVERFLOW = 0x2816, - SMSG_ISLAND_AZERITE_GAIN = 0x2751, - SMSG_ISLAND_COMPLETE = 0x2752, + SMSG_INVENTORY_FIXUP_COMPLETE = 0x2809, + SMSG_INVENTORY_FULL_OVERFLOW = 0x281A, + SMSG_ISLAND_AZERITE_GAIN = 0x2755, + SMSG_ISLAND_COMPLETE = 0x2756, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84, - SMSG_ITEM_CHANGED = 0x26E1, - SMSG_ITEM_COOLDOWN = 0x27B8, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x274A, + SMSG_ITEM_CHANGED = 0x26E5, + SMSG_ITEM_COOLDOWN = 0x27BC, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x274E, SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259B, - SMSG_ITEM_INTERACTION_COMPLETE = 0x2861, + SMSG_ITEM_INTERACTION_COMPLETE = 0x2865, SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x2599, - SMSG_ITEM_PUSH_RESULT = 0x261C, - SMSG_ITEM_TIME_UPDATE = 0x2749, - SMSG_KICK_REASON = 0x2682, - SMSG_LATENCY_REPORT_PING = 0x2873, + SMSG_ITEM_PUSH_RESULT = 0x261F, + SMSG_ITEM_TIME_UPDATE = 0x274D, + SMSG_KICK_REASON = 0x2685, + SMSG_LATENCY_REPORT_PING = 0x2877, SMSG_LEARNED_SPELLS = 0x2C4D, - SMSG_LEARN_PVP_TALENT_FAILED = 0x25D0, - SMSG_LEARN_TALENT_FAILED = 0x25CF, - SMSG_LEGACY_LOOT_RULES = 0x281B, - SMSG_LEVEL_LINKING_RESULT = 0x2847, - SMSG_LEVEL_UP_INFO = 0x26DF, + SMSG_LEARN_PVP_TALENT_FAILED = 0x25D3, + SMSG_LEARN_TALENT_FAILED = 0x25D2, + SMSG_LEGACY_LOOT_RULES = 0x281F, + SMSG_LEVEL_LINKING_RESULT = 0x284B, + SMSG_LEVEL_UP_INFO = 0x26E3, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B, @@ -1492,48 +1497,48 @@ enum OpcodeServer : uint16 SMSG_LFG_SLOT_INVALID = 0x2A30, SMSG_LFG_TELEPORT_DENIED = 0x2A32, SMSG_LFG_UPDATE_STATUS = 0x2A24, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2763, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2762, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2757, - SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2764, - SMSG_LOAD_CUF_PROFILES = 0x25B8, - SMSG_LOAD_EQUIPMENT_SET = 0x2704, - SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x2888, - SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x2889, - SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x288A, - SMSG_LOGIN_SET_TIME_SPEED = 0x2703, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2767, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2766, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275B, + SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2768, + SMSG_LOAD_CUF_PROFILES = 0x25BB, + SMSG_LOAD_EQUIPMENT_SET = 0x2708, + SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x288C, + SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x288D, + SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x288E, + SMSG_LOGIN_SET_TIME_SPEED = 0x2707, SMSG_LOGIN_VERIFY_WORLD = 0x2596, - SMSG_LOGOUT_CANCEL_ACK = 0x267E, - SMSG_LOGOUT_COMPLETE = 0x267D, - SMSG_LOGOUT_RESPONSE = 0x267C, - SMSG_LOG_XP_GAIN = 0x26DB, - SMSG_LOOT_ALL_PASSED = 0x261A, - SMSG_LOOT_LIST = 0x2736, - SMSG_LOOT_MONEY_NOTIFY = 0x2615, - SMSG_LOOT_RELEASE = 0x2614, - SMSG_LOOT_RELEASE_ALL = 0x2613, - SMSG_LOOT_REMOVED = 0x260F, - SMSG_LOOT_RESPONSE = 0x260E, - SMSG_LOOT_ROLL = 0x2617, - SMSG_LOOT_ROLLS_COMPLETE = 0x2619, - SMSG_LOOT_ROLL_WON = 0x261B, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2669, - SMSG_MAIL_COMMAND_RESULT = 0x2634, - SMSG_MAIL_LIST_RESULT = 0x274B, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x274C, - SMSG_MAP_OBJECTIVES_INIT = 0x294B, - SMSG_MAP_OBJ_EVENTS = 0x25C2, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2618, - SMSG_MEETING_STONE_FAILED = 0x288B, + SMSG_LOGOUT_CANCEL_ACK = 0x2681, + SMSG_LOGOUT_COMPLETE = 0x2680, + SMSG_LOGOUT_RESPONSE = 0x267F, + SMSG_LOG_XP_GAIN = 0x26DF, + SMSG_LOOT_ALL_PASSED = 0x261D, + SMSG_LOOT_LIST = 0x273A, + SMSG_LOOT_MONEY_NOTIFY = 0x2618, + SMSG_LOOT_RELEASE = 0x2617, + SMSG_LOOT_RELEASE_ALL = 0x2616, + SMSG_LOOT_REMOVED = 0x2612, + SMSG_LOOT_RESPONSE = 0x2611, + SMSG_LOOT_ROLL = 0x261A, + SMSG_LOOT_ROLLS_COMPLETE = 0x261C, + SMSG_LOOT_ROLL_WON = 0x261E, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x266C, + SMSG_MAIL_COMMAND_RESULT = 0x2637, + SMSG_MAIL_LIST_RESULT = 0x274F, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2750, + SMSG_MAP_OBJECTIVES_INIT = 0x294C, + SMSG_MAP_OBJ_EVENTS = 0x25C5, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261B, + SMSG_MEETING_STONE_FAILED = 0x288F, SMSG_MESSAGE_BOX = 0x2576, - SMSG_MINIMAP_PING = 0x26C5, + SMSG_MINIMAP_PING = 0x26C9, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, - SMSG_MISSILE_CANCEL = 0x25C3, - SMSG_MODIFY_COOLDOWN = 0x2759, + SMSG_MISSILE_CANCEL = 0x25C6, + SMSG_MODIFY_COOLDOWN = 0x275D, SMSG_MOTD = 0x2BAF, SMSG_MOUNT_RESULT = 0x257B, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x2837, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x283B, SMSG_MOVE_ADD_IMPULSE = 0x2E32, SMSG_MOVE_APPLY_INERTIA = 0x2E2E, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E15, @@ -1641,83 +1646,83 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_TELEPORT = 0x2DE1, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DDD, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DD8, - SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27D1, - SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D0, - SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2606, - SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x2608, - SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260B, - SMSG_MYTHIC_PLUS_SEASON_DATA = 0x2607, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25D7, - SMSG_NEW_DATA_BUILD = 0x28B3, - SMSG_NEW_TAXI_PATH = 0x2677, + SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27D5, + SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D4, + SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2609, + SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260B, + SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260E, + SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260A, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DA, + SMSG_NEW_DATA_BUILD = 0x28B7, + SMSG_NEW_TAXI_PATH = 0x267A, SMSG_NEW_WORLD = 0x2593, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A3, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A6, SMSG_NOTIFY_MONEY = 0x2598, - SMSG_NOTIFY_RECEIVED_MAIL = 0x2635, - SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2882, - SMSG_OFFER_PETITION_ERROR = 0x26AE, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26DC, + SMSG_NOTIFY_RECEIVED_MAIL = 0x2638, + SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2886, + SMSG_OFFER_PETITION_ERROR = 0x26B1, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E0, SMSG_ON_MONSTER_MOVE = 0x2DD4, - SMSG_OPEN_ARTIFACT_FORGE = 0x2793, + SMSG_OPEN_ARTIFACT_FORGE = 0x2797, SMSG_OPEN_CONTAINER = 0x2DA6, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x278B, - SMSG_OVERRIDE_LIGHT = 0x26B3, - SMSG_PAGE_TEXT = 0x270F, - SMSG_PARTY_COMMAND_RESULT = 0x2785, - SMSG_PARTY_INVITE = 0x25B9, - SMSG_PARTY_KILL_LOG = 0x274F, - SMSG_PARTY_MEMBER_FULL_STATE = 0x274E, - SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x274D, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x2867, - SMSG_PARTY_UPDATE = 0x25EF, - SMSG_PAST_TIME_EVENTS = 0x25BE, - SMSG_PAUSE_MIRROR_TIMER = 0x2706, - SMSG_PENDING_RAID_LOCK = 0x26EE, - SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x287E, - SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x2879, - SMSG_PERKS_PROGRAM_DISABLED = 0x287F, - SMSG_PERKS_PROGRAM_RESULT = 0x287B, - SMSG_PERKS_PROGRAM_VENDOR_PENDING = 0x287A, - SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x2878, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x278F, + SMSG_OVERRIDE_LIGHT = 0x26B6, + SMSG_PAGE_TEXT = 0x2713, + SMSG_PARTY_COMMAND_RESULT = 0x2789, + SMSG_PARTY_INVITE = 0x25BC, + SMSG_PARTY_KILL_LOG = 0x2753, + SMSG_PARTY_MEMBER_FULL_STATE = 0x2752, + SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2751, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x286B, + SMSG_PARTY_UPDATE = 0x25F2, + SMSG_PAST_TIME_EVENTS = 0x25C1, + SMSG_PAUSE_MIRROR_TIMER = 0x270A, + SMSG_PENDING_RAID_LOCK = 0x26F2, + SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2882, + SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x287D, + SMSG_PERKS_PROGRAM_DISABLED = 0x2883, + SMSG_PERKS_PROGRAM_RESULT = 0x287F, + SMSG_PERKS_PROGRAM_VENDOR_PENDING = 0x287E, + SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x287C, SMSG_PETITION_ALREADY_SIGNED = 0x259E, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA, - SMSG_PETITION_SHOW_LIST = 0x26B6, - SMSG_PETITION_SHOW_SIGNATURES = 0x26B7, - SMSG_PETITION_SIGN_RESULTS = 0x2741, - SMSG_PET_ACTION_FEEDBACK = 0x273E, - SMSG_PET_ACTION_SOUND = 0x2699, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x25FD, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x266E, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F6, - SMSG_PET_BATTLE_FINAL_ROUND = 0x25FB, - SMSG_PET_BATTLE_FINISHED = 0x25FC, - SMSG_PET_BATTLE_FIRST_ROUND = 0x25F8, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25F7, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x25FE, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F5, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2632, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2633, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FA, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F4, - SMSG_PET_BATTLE_ROUND_RESULT = 0x25F9, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x25E7, + SMSG_PETITION_SHOW_LIST = 0x26B9, + SMSG_PETITION_SHOW_SIGNATURES = 0x26BA, + SMSG_PETITION_SIGN_RESULTS = 0x2745, + SMSG_PET_ACTION_FEEDBACK = 0x2742, + SMSG_PET_ACTION_SOUND = 0x269C, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2600, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2671, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F9, + SMSG_PET_BATTLE_FINAL_ROUND = 0x25FE, + SMSG_PET_BATTLE_FINISHED = 0x25FF, + SMSG_PET_BATTLE_FIRST_ROUND = 0x25FB, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25FA, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2601, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F8, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2635, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x2636, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FD, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F7, + SMSG_PET_BATTLE_ROUND_RESULT = 0x25FC, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EA, SMSG_PET_CAST_FAILED = 0x2C58, SMSG_PET_CLEAR_SPELLS = 0x2C21, - SMSG_PET_DISMISS_SOUND = 0x269A, - SMSG_PET_GOD_MODE = 0x2674, - SMSG_PET_GUIDS = 0x26FA, + SMSG_PET_DISMISS_SOUND = 0x269D, + SMSG_PET_GOD_MODE = 0x2677, + SMSG_PET_GUIDS = 0x26FE, SMSG_PET_LEARNED_SPELLS = 0x2C4F, SMSG_PET_MODE = 0x2588, - SMSG_PET_NAME_INVALID = 0x26BB, + SMSG_PET_NAME_INVALID = 0x26BE, SMSG_PET_NEWLY_TAMED = 0x2587, SMSG_PET_SPELLS_MESSAGE = 0x2C22, SMSG_PET_STABLE_RESULT = 0x2592, - SMSG_PET_TAME_FAILURE = 0x26AB, + SMSG_PET_TAME_FAILURE = 0x26AE, SMSG_PET_UNLEARNED_SPELLS = 0x2C50, SMSG_PHASE_SHIFT_CHANGE = 0x2578, - SMSG_PLAYED_TIME = 0x26CC, + SMSG_PLAYED_TIME = 0x26D0, SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x3022, SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3014, SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3013, @@ -1737,34 +1742,34 @@ enum OpcodeServer : uint16 SMSG_PLAYER_SKINNED = 0x3006, SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300D, SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300C, - SMSG_PLAY_MUSIC = 0x275E, - SMSG_PLAY_OBJECT_SOUND = 0x275F, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2726, + SMSG_PLAY_MUSIC = 0x2762, + SMSG_PLAY_OBJECT_SOUND = 0x2763, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272A, SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47, - SMSG_PLAY_SCENE = 0x262F, - SMSG_PLAY_SOUND = 0x275D, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x2760, + SMSG_PLAY_SCENE = 0x2632, + SMSG_PLAY_SOUND = 0x2761, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x2764, SMSG_PLAY_SPELL_VISUAL = 0x2C45, SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49, - SMSG_PLAY_TIME_WARNING = 0x26F4, + SMSG_PLAY_TIME_WARNING = 0x26F8, SMSG_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26C9, + SMSG_POWER_UPDATE = 0x26CD, SMSG_PRELOAD_CHILD_MAP = 0x2579, SMSG_PRELOAD_WORLD = 0x2594, - SMSG_PREPOPULATE_NAME_CACHE = 0x283A, - SMSG_PRE_RESSURECT = 0x275C, - SMSG_PRINT_NOTIFICATION = 0x25C6, - SMSG_PROC_RESIST = 0x2750, - SMSG_PROFESSION_GOSSIP = 0x27F1, + SMSG_PREPOPULATE_NAME_CACHE = 0x283E, + SMSG_PRE_RESSURECT = 0x2760, + SMSG_PRINT_NOTIFICATION = 0x25C9, + SMSG_PROC_RESIST = 0x2754, + SMSG_PROFESSION_GOSSIP = 0x27F5, SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51, - SMSG_PVP_CREDIT = 0x2945, - SMSG_PVP_MATCH_COMPLETE = 0x2950, - SMSG_PVP_MATCH_INITIALIZE = 0x2951, - SMSG_PVP_MATCH_SET_STATE = 0x294F, - SMSG_PVP_MATCH_START = 0x294E, + SMSG_PVP_CREDIT = 0x2946, + SMSG_PVP_MATCH_COMPLETE = 0x2951, + SMSG_PVP_MATCH_INITIALIZE = 0x2952, + SMSG_PVP_MATCH_SET_STATE = 0x2950, + SMSG_PVP_MATCH_START = 0x294F, SMSG_PVP_MATCH_STATISTICS = 0x2932, - SMSG_PVP_OPTIONS_ENABLED = 0x2934, - SMSG_PVP_TIER_RECORD = 0x2874, + SMSG_PVP_OPTIONS_ENABLED = 0x2935, + SMSG_PVP_TIER_RECORD = 0x2878, SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x291A, SMSG_QUERY_CREATURE_RESPONSE = 0x2914, SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2915, @@ -1780,7 +1785,7 @@ enum OpcodeServer : uint16 SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3002, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A96, SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x29E6, - SMSG_QUERY_TIME_RESPONSE = 0x26DA, + SMSG_QUERY_TIME_RESPONSE = 0x26DE, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F, SMSG_QUEST_FORCE_REMOVED = 0x2A9C, @@ -1799,137 +1804,139 @@ enum OpcodeServer : uint16 SMSG_QUEST_POI_QUERY_RESPONSE = 0x2A9D, SMSG_QUEST_POI_UPDATE_RESPONSE = 0x2A9F, SMSG_QUEST_PUSH_RESULT = 0x2A90, - SMSG_QUEST_SESSION_INFO_RESPONSE = 0x285D, - SMSG_QUEST_SESSION_READY_CHECK = 0x284B, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x284C, - SMSG_QUEST_SESSION_RESULT = 0x284A, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2861, + SMSG_QUEST_SESSION_READY_CHECK = 0x284F, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2850, + SMSG_QUEST_SESSION_RESULT = 0x284E, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x2A8C, SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x2A8D, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x2A8E, SMSG_QUEST_UPDATE_COMPLETE = 0x2A89, SMSG_QUEST_UPDATE_FAILED = 0x2A8A, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8B, - SMSG_QUEUE_SUMMARY_UPDATE = 0x2804, - SMSG_RAF_ACCOUNT_INFO = 0x2848, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x2859, - SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B0, - SMSG_RAID_DIFFICULTY_SET = 0x279D, - SMSG_RAID_GROUP_ONLY = 0x279F, + SMSG_QUEUE_SUMMARY_UPDATE = 0x2808, + SMSG_RAF_ACCOUNT_INFO = 0x284C, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x285D, + SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B4, + SMSG_RAID_DIFFICULTY_SET = 0x27A1, + SMSG_RAID_GROUP_ONLY = 0x27A3, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, SMSG_RAID_MARKERS_CHANGED = 0x259F, - SMSG_RANDOM_ROLL = 0x2629, + SMSG_RANDOM_ROLL = 0x262C, SMSG_RATED_PVP_INFO = 0x2931, - SMSG_READY_CHECK_COMPLETED = 0x25F3, - SMSG_READY_CHECK_RESPONSE = 0x25F2, - SMSG_READY_CHECK_STARTED = 0x25F1, - SMSG_READ_ITEM_RESULT_FAILED = 0x2799, - SMSG_READ_ITEM_RESULT_OK = 0x2790, - SMSG_REALM_LOOKUP_INFO = 0x27BC, + SMSG_READY_CHECK_COMPLETED = 0x25F6, + SMSG_READY_CHECK_RESPONSE = 0x25F5, + SMSG_READY_CHECK_STARTED = 0x25F4, + SMSG_READ_ITEM_RESULT_FAILED = 0x279D, + SMSG_READ_ITEM_RESULT_OK = 0x2794, + SMSG_REALM_LOOKUP_INFO = 0x27C0, SMSG_REALM_QUERY_RESPONSE = 0x2913, - SMSG_REATTACH_RESURRECT = 0x2740, - SMSG_RECRAFT_ITEM_RESULT = 0x289F, - SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26B8, - SMSG_REFRESH_COMPONENT = 0x264A, + SMSG_REATTACH_RESURRECT = 0x2744, + SMSG_RECEIVE_PING_UNIT = 0x25A0, + SMSG_RECEIVE_PING_WORLD_POINT = 0x25A1, + SMSG_RECRAFT_ITEM_RESULT = 0x28A3, + SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BB, + SMSG_REFRESH_COMPONENT = 0x264D, SMSG_REFRESH_SPELL_HISTORY = 0x2C29, - SMSG_REMOVE_ITEM_PASSIVE = 0x25A7, + SMSG_REMOVE_ITEM_PASSIVE = 0x25AA, SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C52, - SMSG_REPLACE_TROPHY_RESPONSE = 0x27B5, + SMSG_REPLACE_TROPHY_RESPONSE = 0x27B9, SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x258E, - SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2935, - SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2936, + SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2936, + SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2937, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26AF, - SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28A5, + SMSG_RESET_FAILED_NOTIFY = 0x26B2, + SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28A9, SMSG_RESET_QUEST_POI = 0x2AA0, - SMSG_RESET_RANGED_COMBAT_TIMER = 0x2944, + SMSG_RESET_RANGED_COMBAT_TIMER = 0x2945, SMSG_RESET_WEEKLY_CURRENCY = 0x2575, - SMSG_RESPEC_WIPE_CONFIRM = 0x260C, + SMSG_RESPEC_WIPE_CONFIRM = 0x260F, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572, - SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x287C, - SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x287D, + SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x2880, + SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2881, SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C61, - SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B5, + SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B8, SMSG_RESUME_CAST = 0x2C3B, SMSG_RESUME_CAST_BAR = 0x2C3E, SMSG_RESUME_COMMS = 0x304B, - SMSG_RESUME_TOKEN = 0x25A5, + SMSG_RESUME_TOKEN = 0x25A8, SMSG_RESURRECT_REQUEST = 0x257E, SMSG_RESYNC_RUNES = 0x2C5F, - SMSG_RETURNING_PLAYER_PROMPT = 0x2798, - SMSG_RETURN_APPLICANT_LIST = 0x283E, - SMSG_RETURN_RECRUITING_CLUBS = 0x283D, + SMSG_RETURNING_PLAYER_PROMPT = 0x279C, + SMSG_RETURN_APPLICANT_LIST = 0x2842, + SMSG_RETURN_RECRUITING_CLUBS = 0x2841, SMSG_ROLE_CHANGED_INFORM = 0x258A, SMSG_ROLE_CHOSEN = 0x2A39, SMSG_ROLE_POLL_INFORM = 0x258B, - SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F0, - SMSG_RUNE_REGEN_DEBUG = 0x25B2, - SMSG_SCENARIO_COMPLETED = 0x27DE, - SMSG_SCENARIO_POIS = 0x262C, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x2625, - SMSG_SCENARIO_SHOW_CRITERIA = 0x27F4, - SMSG_SCENARIO_STATE = 0x2624, - SMSG_SCENARIO_UI_UPDATE = 0x27F3, - SMSG_SCENARIO_VACATE = 0x279A, - SMSG_SCENE_OBJECT_EVENT = 0x25DD, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E2, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E3, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25DF, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25DE, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E1, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E0, + SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F4, + SMSG_RUNE_REGEN_DEBUG = 0x25B5, + SMSG_SCENARIO_COMPLETED = 0x27E2, + SMSG_SCENARIO_POIS = 0x262F, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x2628, + SMSG_SCENARIO_SHOW_CRITERIA = 0x27F8, + SMSG_SCENARIO_STATE = 0x2627, + SMSG_SCENARIO_UI_UPDATE = 0x27F7, + SMSG_SCENARIO_VACATE = 0x279E, + SMSG_SCENE_OBJECT_EVENT = 0x25E0, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E5, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E6, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25E2, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25E1, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E4, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E3, SMSG_SCRIPT_CAST = 0x2C56, - SMSG_SEASON_INFO = 0x25BD, - SMSG_SELL_RESPONSE = 0x26BC, - SMSG_SEND_ITEM_PASSIVES = 0x25A8, + SMSG_SEASON_INFO = 0x25C0, + SMSG_SELL_RESPONSE = 0x26BF, + SMSG_SEND_ITEM_PASSIVES = 0x25AB, SMSG_SEND_KNOWN_SPELLS = 0x2C27, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x2627, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2628, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262A, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262B, SMSG_SEND_SPELL_CHARGES = 0x2C2A, SMSG_SEND_SPELL_HISTORY = 0x2C28, SMSG_SEND_UNLEARN_SPELLS = 0x2C2B, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x2647, - SMSG_SERVER_TIME = 0x267B, - SMSG_SERVER_TIME_OFFSET = 0x270A, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264A, + SMSG_SERVER_TIME = 0x267E, + SMSG_SERVER_TIME_OFFSET = 0x270E, SMSG_SETUP_CURRENCY = 0x2573, - SMSG_SET_AI_ANIM_KIT = 0x2725, - SMSG_SET_ANIM_TIER = 0x2729, - SMSG_SET_CHR_UPGRADE_TIER = 0x25DA, + SMSG_SET_AI_ANIM_KIT = 0x2729, + SMSG_SET_ANIM_TIER = 0x272D, + SMSG_SET_CHR_UPGRADE_TIER = 0x25DD, SMSG_SET_CURRENCY = 0x2574, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x269D, - SMSG_SET_FACTION_AT_WAR = 0x26F6, - SMSG_SET_FACTION_NOT_VISIBLE = 0x2720, - SMSG_SET_FACTION_STANDING = 0x2721, - SMSG_SET_FACTION_VISIBLE = 0x271F, + SMSG_SET_DUNGEON_DIFFICULTY = 0x26A0, + SMSG_SET_FACTION_AT_WAR = 0x26FA, + SMSG_SET_FACTION_NOT_VISIBLE = 0x2724, + SMSG_SET_FACTION_STANDING = 0x2725, + SMSG_SET_FACTION_VISIBLE = 0x2723, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36, - SMSG_SET_FORCED_REACTIONS = 0x2713, + SMSG_SET_FORCED_REACTIONS = 0x2717, SMSG_SET_ITEM_PURCHASE_DATA = 0x259A, - SMSG_SET_LOOT_METHOD_FAILED = 0x27C2, + SMSG_SET_LOOT_METHOD_FAILED = 0x27C6, SMSG_SET_MAX_WEEKLY_QUANTITY = 0x259D, - SMSG_SET_MELEE_ANIM_KIT = 0x2728, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x2727, + SMSG_SET_MELEE_ANIM_KIT = 0x272C, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x272B, SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37, - SMSG_SET_PET_SPECIALIZATION = 0x261E, + SMSG_SET_PET_SPECIALIZATION = 0x2621, SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3003, - SMSG_SET_PLAY_HOVER_ANIM = 0x25B6, - SMSG_SET_PROFICIENCY = 0x272A, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2851, + SMSG_SET_PLAY_HOVER_ANIM = 0x25B9, + SMSG_SET_PROFICIENCY = 0x272E, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2855, SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2998, SMSG_SET_SPELL_CHARGES = 0x2C26, - SMSG_SET_TIME_ZONE_INFORMATION = 0x2670, - SMSG_SET_VEHICLE_REC_ID = 0x26ED, - SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2881, + SMSG_SET_TIME_ZONE_INFORMATION = 0x2673, + SMSG_SET_VEHICLE_REC_ID = 0x26F1, + SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2885, SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2999, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D6, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D9, SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95, - SMSG_SHOW_TAXI_NODES = 0x26C4, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2765, - SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x288C, - SMSG_SOCKET_GEMS_FAILURE = 0x271D, - SMSG_SOCKET_GEMS_SUCCESS = 0x271C, - SMSG_SPECIAL_MOUNT_ANIM = 0x2698, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x270E, + SMSG_SHOW_TAXI_NODES = 0x26C8, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2769, + SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x2890, + SMSG_SOCKET_GEMS_FAILURE = 0x2721, + SMSG_SOCKET_GEMS_SUCCESS = 0x2720, + SMSG_SPECIAL_MOUNT_ANIM = 0x269B, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2712, SMSG_SPELL_ABSORB_LOG = 0x2C1C, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C16, SMSG_SPELL_CHANNEL_START = 0x2C31, @@ -1957,93 +1964,94 @@ enum OpcodeServer : uint16 SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C18, SMSG_SPELL_PREPARE = 0x2C38, SMSG_SPELL_START = 0x2C3A, - SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25C8, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2863, - SMSG_STAND_STATE_UPDATE = 0x2712, - SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25CE, - SMSG_START_ELAPSED_TIMER = 0x25FF, - SMSG_START_ELAPSED_TIMERS = 0x2601, - SMSG_START_LIGHTNING_STORM = 0x26A0, - SMSG_START_LOOT_ROLL = 0x2616, - SMSG_START_MIRROR_TIMER = 0x2705, - SMSG_START_TIMER = 0x25A1, - SMSG_STOP_ELAPSED_TIMER = 0x2600, - SMSG_STOP_MIRROR_TIMER = 0x2707, - SMSG_STOP_SPEAKERBOT_SOUND = 0x2761, - SMSG_STOP_TIMER = 0x25A2, - SMSG_STREAMING_MOVIES = 0x25A0, - SMSG_SUGGEST_INVITE_INFORM = 0x2786, - SMSG_SUMMON_CANCEL = 0x26A9, + SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CB, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2867, + SMSG_STAND_STATE_UPDATE = 0x2716, + SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D1, + SMSG_START_ELAPSED_TIMER = 0x2602, + SMSG_START_ELAPSED_TIMERS = 0x2604, + SMSG_START_LIGHTNING_STORM = 0x26A3, + SMSG_START_LOOT_ROLL = 0x2619, + SMSG_START_MIRROR_TIMER = 0x2709, + SMSG_START_TIMER = 0x25A4, + SMSG_STOP_ELAPSED_TIMER = 0x2603, + SMSG_STOP_MIRROR_TIMER = 0x270B, + SMSG_STOP_SPEAKERBOT_SOUND = 0x2765, + SMSG_STOP_TIMER = 0x25A5, + SMSG_STREAMING_MOVIES = 0x25A3, + SMSG_SUGGEST_INVITE_INFORM = 0x278A, + SMSG_SUMMON_CANCEL = 0x26AC, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258C, - SMSG_SUMMON_REQUEST = 0x2717, + SMSG_SUMMON_REQUEST = 0x271B, SMSG_SUPERCEDED_SPELLS = 0x2C4C, SMSG_SUSPEND_COMMS = 0x304A, - SMSG_SUSPEND_TOKEN = 0x25A4, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x285B, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x270D, - SMSG_TAXI_NODE_STATUS = 0x2675, - SMSG_TEXT_EMOTE = 0x2673, - SMSG_THREAT_CLEAR = 0x26D3, - SMSG_THREAT_REMOVE = 0x26D2, - SMSG_THREAT_UPDATE = 0x26D1, + SMSG_SUSPEND_TOKEN = 0x25A7, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x285F, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2711, + SMSG_TAXI_NODE_STATUS = 0x2678, + SMSG_TEXT_EMOTE = 0x2676, + SMSG_THREAT_CLEAR = 0x26D7, + SMSG_THREAT_REMOVE = 0x26D6, + SMSG_THREAT_UPDATE = 0x26D5, SMSG_TIME_ADJUSTMENT = 0x2DD3, SMSG_TIME_SYNC_REQUEST = 0x2DD2, - SMSG_TITLE_EARNED = 0x26CE, - SMSG_TITLE_LOST = 0x26CF, - SMSG_TOTEM_CREATED = 0x26BF, - SMSG_TOTEM_DURATION_CHANGED = 0x26C0, - SMSG_TOTEM_MOVED = 0x26C1, + SMSG_TITLE_EARNED = 0x26D2, + SMSG_TITLE_LOST = 0x26D3, + SMSG_TOTEM_CREATED = 0x26C2, + SMSG_TOTEM_DURATION_CHANGED = 0x26C4, + SMSG_TOTEM_MOVED = 0x26C5, + SMSG_TOTEM_REMOVED = 0x26C3, SMSG_TRADE_STATUS = 0x2582, SMSG_TRADE_UPDATED = 0x2581, - SMSG_TRAINER_BUY_FAILED = 0x26D6, - SMSG_TRAINER_LIST = 0x26D5, - SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25CD, - SMSG_TRANSFER_ABORTED = 0x26F9, - SMSG_TRANSFER_PENDING = 0x25C9, + SMSG_TRAINER_BUY_FAILED = 0x26DA, + SMSG_TRAINER_LIST = 0x26D9, + SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D0, + SMSG_TRANSFER_ABORTED = 0x26FD, + SMSG_TRANSFER_PENDING = 0x25CC, SMSG_TREASURE_PICKER_RESPONSE = 0x291F, - SMSG_TRIGGER_CINEMATIC = 0x27BA, - SMSG_TRIGGER_MOVIE = 0x26C2, - SMSG_TURN_IN_PETITION_RESULT = 0x2743, - SMSG_TUTORIAL_FLAGS = 0x27AE, + SMSG_TRIGGER_CINEMATIC = 0x27BE, + SMSG_TRIGGER_MOVIE = 0x26C6, + SMSG_TURN_IN_PETITION_RESULT = 0x2747, + SMSG_TUTORIAL_FLAGS = 0x27B2, SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27BD, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27BE, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C1, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C2, SMSG_UNLEARNED_SPELLS = 0x2C4E, SMSG_UNLOAD_CHILD_MAP = 0x257A, - SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2875, - SMSG_UPDATE_ACCOUNT_DATA = 0x26FF, - SMSG_UPDATE_ACTION_BUTTONS = 0x25DB, - SMSG_UPDATE_BNET_SESSION_KEY = 0x2815, + SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2879, + SMSG_UPDATE_ACCOUNT_DATA = 0x2703, + SMSG_UPDATE_ACTION_BUTTONS = 0x25DE, + SMSG_UPDATE_BNET_SESSION_KEY = 0x2819, SMSG_UPDATE_CAPTURE_POINT = 0x2929, - SMSG_UPDATE_CELESTIAL_BODY = 0x2811, - SMSG_UPDATE_CHARACTER_FLAGS = 0x27B4, - SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x275B, - SMSG_UPDATE_COOLDOWN = 0x275A, + SMSG_UPDATE_CELESTIAL_BODY = 0x2815, + SMSG_UPDATE_CHARACTER_FLAGS = 0x27B8, + SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x275F, + SMSG_UPDATE_COOLDOWN = 0x275E, SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2996, SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F, - SMSG_UPDATE_EXPANSION_LEVEL = 0x263F, - SMSG_UPDATE_GAME_TIME_STATE = 0x2818, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A2, - SMSG_UPDATE_LAST_INSTANCE = 0x2681, - SMSG_UPDATE_OBJECT = 0x27BB, - SMSG_UPDATE_PRIMARY_SPEC = 0x25D3, - SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F0, - SMSG_UPDATE_TALENT_DATA = 0x25D2, - SMSG_UPDATE_WORLD_STATE = 0x273D, + SMSG_UPDATE_EXPANSION_LEVEL = 0x2642, + SMSG_UPDATE_GAME_TIME_STATE = 0x281C, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A5, + SMSG_UPDATE_LAST_INSTANCE = 0x2684, + SMSG_UPDATE_OBJECT = 0x27BF, + SMSG_UPDATE_PRIMARY_SPEC = 0x25D6, + SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F3, + SMSG_UPDATE_TALENT_DATA = 0x25D5, + SMSG_UPDATE_WORLD_STATE = 0x2741, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x2744, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x280C, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x280A, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2809, - SMSG_VAS_PURCHASE_COMPLETE = 0x27E4, - SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27E3, - SMSG_VENDOR_INVENTORY = 0x25B4, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x2748, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2810, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x280E, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x280D, + SMSG_VAS_PURCHASE_COMPLETE = 0x27E8, + SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27E7, + SMSG_VENDOR_INVENTORY = 0x25B7, SMSG_VIGNETTE_UPDATE = 0x3008, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2810, - SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x286F, - SMSG_VOICE_LOGIN_RESPONSE = 0x280F, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2814, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2873, + SMSG_VOICE_LOGIN_RESPONSE = 0x2813, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x2DA4, SMSG_VOID_STORAGE_CONTENTS = 0x2DA1, SMSG_VOID_STORAGE_FAILED = 0x2DA0, @@ -2052,27 +2060,28 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256F, SMSG_WAIT_QUEUE_UPDATE = 0x256E, SMSG_WARDEN3_DATA = 0x2577, - SMSG_WARDEN3_DISABLED = 0x2813, - SMSG_WARDEN3_ENABLED = 0x2812, - SMSG_WARFRONT_COMPLETE = 0x2753, + SMSG_WARDEN3_DISABLED = 0x2817, + SMSG_WARDEN3_ENABLED = 0x2816, + SMSG_WARFRONT_COMPLETE = 0x2757, + SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x2934, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2933, - SMSG_WEATHER = 0x269F, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x2866, - SMSG_WEEKLY_REWARDS_RESULT = 0x2864, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2865, + SMSG_WEATHER = 0x26A2, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x286A, + SMSG_WEEKLY_REWARDS_RESULT = 0x2868, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2869, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x269E, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2817, + SMSG_WHO_IS = 0x26A1, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x281B, SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x300F, - SMSG_WORLD_SERVER_INFO = 0x25A9, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x285C, - SMSG_XP_AWARDED_FROM_CURRENCY = 0x28A4, - SMSG_XP_GAIN_ABORTED = 0x25C5, - SMSG_XP_GAIN_ENABLED = 0x279E, + SMSG_WORLD_SERVER_INFO = 0x25AC, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2860, + SMSG_XP_AWARDED_FROM_CURRENCY = 0x28A8, + SMSG_XP_GAIN_ABORTED = 0x25C8, + SMSG_XP_GAIN_ENABLED = 0x27A2, SMSG_ZONE_UNDER_ATTACK = 0x2BB5, // Opcodes that are not generated automatically - SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0x25AD, // no client handler + SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0x25B0, // no client handler SMSG_COMPRESSED_PACKET = 0x3052, SMSG_MULTIPLE_PACKETS = 0x3051, diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index d1d552c368f..08a064b51eb 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -633,6 +633,8 @@ enum AuraType : uint32 SPELL_AURA_ALLOW_MOUNT_IN_COMBAT = 539, SPELL_AURA_MOD_SUPPORT_STAT = 540, // NYI SPELL_AURA_MOD_REQUIRED_MOUNT_CAPABILITY_FLAGS = 541, + SPELL_AURA_542 = 542, + SPELL_AURA_543 = 543, TOTAL_AURAS }; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 6b008d36f06..9ad9cc23074 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -609,6 +609,8 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, //539 SPELL_AURA_ALLOW_MOUNT_IN_COMBAT implemented in SpellInfo::CanBeUsedInCombat &AuraEffect::HandleNULL, //540 SPELL_AURA_MOD_SUPPORT_STAT &AuraEffect::HandleModRequiredMountCapabilityFlags, //541 SPELL_AURA_MOD_REQUIRED_MOUNT_CAPABILITY_FLAGS + &AuraEffect::HandleNULL, //542 + &AuraEffect::HandleNULL, //543 }; AuraEffect::AuraEffect(Aura* base, SpellEffectInfo const& spellEfffectInfo, int32 const* baseAmount, Unit* caster) : diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 6e5fc130645..19a68fa341d 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -144,7 +144,7 @@ SpellCastTargets::SpellCastTargets(Unit* caster, WorldPackets::Spells::SpellCast else pos = &m_src._position; - pos->Relocate(spellCastRequest.Target.SrcLocation->Location); + pos->Relocate(spellCastRequest.Target.SrcLocation->Location.Pos); if (spellCastRequest.Target.Orientation) pos->SetOrientation(*spellCastRequest.Target.Orientation); } @@ -158,7 +158,7 @@ SpellCastTargets::SpellCastTargets(Unit* caster, WorldPackets::Spells::SpellCast else pos = &m_dst._position; - pos->Relocate(spellCastRequest.Target.DstLocation->Location); + pos->Relocate(spellCastRequest.Target.DstLocation->Location.Pos); if (spellCastRequest.Target.Orientation) pos->SetOrientation(*spellCastRequest.Target.Orientation); } @@ -4734,7 +4734,7 @@ void Spell::SendSpellStart() } if (castFlags & CAST_FLAG_PROJECTILE) - UpdateSpellCastDataAmmo(castData.Ammo); + castData.AmmoDisplayID = GetSpellCastDataAmmo(); if (castFlags & CAST_FLAG_IMMUNITY) { @@ -4883,7 +4883,7 @@ void Spell::UpdateSpellCastDataTargets(WorldPackets::Spells::SpellCastData& data m_channelTargetEffectMask = 0; } -void Spell::UpdateSpellCastDataAmmo(WorldPackets::Spells::SpellAmmo& ammo) +int32 Spell::GetSpellCastDataAmmo() { uint32 ammoInventoryType = 0; uint32 ammoDisplayID = 0; @@ -4950,8 +4950,7 @@ void Spell::UpdateSpellCastDataAmmo(WorldPackets::Spells::SpellAmmo& ammo) } } - ammo.DisplayID = ammoDisplayID; - ammo.InventoryType = ammoInventoryType; + return ammoDisplayID; } void Spell::SendSpellExecuteLog() diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 29f7b61fb62..3b3c37f4a80 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -32,7 +32,6 @@ namespace WorldPackets { namespace Spells { - struct SpellAmmo; struct SpellCastData; } } @@ -887,7 +886,7 @@ class TC_GAME_API Spell void CalculateJumpSpeeds(SpellEffectInfo const* effInfo, float dist, float& speedXY, float& speedZ); void UpdateSpellCastDataTargets(WorldPackets::Spells::SpellCastData& data); - void UpdateSpellCastDataAmmo(WorldPackets::Spells::SpellAmmo& data); + int32 GetSpellCastDataAmmo(); SpellCastResult CanOpenLock(SpellEffectInfo const& effect, uint32 lockid, SkillType& skillid, int32& reqSkillValue, int32& skillValue); // ------------------------------------------- diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h index cc9565e8c3d..3cb50dea4c9 100644 --- a/src/tools/map_extractor/loadlib/DBFilesClientList.h +++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h @@ -172,6 +172,7 @@ DB2FileInfo const DBFilesClientList[] = { 3593032, "ChrCustomizationDisplayInfo.db2" }, { 3512765, "ChrCustomizationElement.db2" }, { 3456171, "ChrCustomizationGeoset.db2" }, + { 5347591, "ChrCustomizationGlyphPet.db2" }, { 3459652, "ChrCustomizationMaterial.db2" }, { 3384247, "ChrCustomizationOption.db2" }, { 3450453, "ChrCustomizationReq.db2" }, @@ -186,6 +187,7 @@ DB2FileInfo const DBFilesClientList[] = { 3490304, "ChrRaceXChrModel.db2" }, { 1305311, "ChrRaces.db2" }, { 4566929, "ChrRacesCreateScreenIcon.db2" }, + { 5320971, "ChrRacesPing.db2" }, { 4195187, "ChrSelectBackgroundCDI.db2" }, { 1343390, "ChrSpecialization.db2" }, { 984529, "ChrUpgradeBucket.db2" }, @@ -618,6 +620,7 @@ DB2FileInfo const DBFilesClientList[] = { 4694317, "PerksActivityTag.db2" }, { 4519767, "PerksActivityThreshold.db2" }, { 4519768, "PerksActivityThresholdGroup.db2" }, + { 5330797, "PerksActivityXHolidays.db2" }, { 4519781, "PerksActivityXInterval.db2" }, { 4694318, "PerksActivityXTag.db2" }, { 4281310, "PerksVendorCategory.db2" }, @@ -627,6 +630,7 @@ DB2FileInfo const DBFilesClientList[] = { 1348558, "Phase.db2" }, { 1267336, "PhaseShiftZoneSounds.db2" }, { 987581, "PhaseXPhaseGroup.db2" }, + { 5152358, "PingType.db2" }, { 1045411, "PlayerCondition.db2" }, { 1251523, "Positioner.db2" }, { 1251506, "PositionerState.db2" }, |