diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-04-25 22:50:11 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-04-25 22:50:11 +0200 |
| commit | f9bf082be962d45de79f936d625f644253e9b810 (patch) | |
| tree | a7c40c0b5baf522d04896721df5c5d91e25c834e /src/server/game | |
| parent | 05709a24976cc4cd378ee62bdfec52510892aa5b (diff) | |
Core: Updated to 11.1.5
Diffstat (limited to 'src/server/game')
37 files changed, 820 insertions, 679 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index f09cee5bd1b..c5406e0796f 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -4029,6 +4029,14 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 return false; break; } + case ModifierTreeType::PlayerTitle: // 393 + if (referencePlayer->m_playerData->PlayerTitle != int32(reqValue)) + return false; + break; + case ModifierTreeType::PlayerIsInGuild: // 404 + if (!referencePlayer->GetGuildId()) + return false; + break; default: return false; } diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index f3fc6fa7366..a9d7548b077 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -962,7 +962,7 @@ struct ChrClassesLoadInfo { .IsSigned = false, .Type = FT_SHORT, .Name = "CinematicSequenceID" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "DefaultSpec" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "ID" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "PrimaryStatPriority" }, + { .IsSigned = true, .Type = FT_BYTE, .Name = "PrimaryStatPriority" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "DisplayPower" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "RangedAttackPowerPerAgility" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "AttackPowerPerAgility" }, @@ -1499,7 +1499,7 @@ struct CreatureModelDataLoadInfo { .IsSigned = false, .Type = FT_INT, .Name = "FootstepCameraEffectID" }, { .IsSigned = false, .Type = FT_INT, .Name = "DeathThudCameraEffectID" }, { .IsSigned = false, .Type = FT_INT, .Name = "SoundID" }, - { .IsSigned = false, .Type = FT_INT, .Name = "SizeClass" }, + { .IsSigned = true, .Type = FT_BYTE, .Name = "SizeClass" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "CollisionWidth" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "CollisionHeight" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "WorldEffectScale" }, @@ -1709,7 +1709,7 @@ struct DifficultyLoadInfo struct DungeonEncounterLoadInfo { - static constexpr DB2FieldMeta Fields[10] = + static constexpr DB2FieldMeta Fields[11] = { { .IsSigned = false, .Type = FT_STRING, .Name = "Name" }, { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, @@ -1721,9 +1721,10 @@ struct DungeonEncounterLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = true, .Type = FT_INT, .Name = "SpellIconFileID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Faction" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1115" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 10, &DungeonEncounterMeta::Instance, HOTFIX_SEL_DUNGEON_ENCOUNTER }; + static constexpr DB2LoadInfo Instance{ Fields, 11, &DungeonEncounterMeta::Instance, HOTFIX_SEL_DUNGEON_ENCOUNTER }; }; struct DurabilityCostsLoadInfo @@ -2516,7 +2517,7 @@ struct HeirloomLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "LegacyUpgradedItemID" }, { .IsSigned = true, .Type = FT_INT, .Name = "StaticUpgradedItemID" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "SourceTypeEnum" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = true, .Type = FT_INT, .Name = "LegacyItemID" }, { .IsSigned = true, .Type = FT_INT, .Name = "UpgradeItemID1" }, { .IsSigned = true, .Type = FT_INT, .Name = "UpgradeItemID2" }, @@ -2843,7 +2844,7 @@ struct ItemClassLoadInfo { .IsSigned = false, .Type = FT_STRING, .Name = "ClassName" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "ClassID" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "PriceModifier" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, }; static constexpr DB2LoadInfo Instance{ Fields, 5, &ItemClassMeta::Instance, HOTFIX_SEL_ITEM_CLASS }; @@ -3009,7 +3010,7 @@ struct ItemExtendedCostLoadInfo { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredArenaRating" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "ArenaBracket" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "MinFactionID" }, { .IsSigned = true, .Type = FT_INT, .Name = "MinReputation" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "RequiredAchievement" }, @@ -4037,15 +4038,16 @@ struct NamesReservedLocaleLoadInfo struct NumTalentsAtLevelLoadInfo { - static constexpr DB2FieldMeta Fields[4] = + static constexpr DB2FieldMeta Fields[5] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "NumTalents" }, { .IsSigned = true, .Type = FT_INT, .Name = "NumTalentsDeathKnight" }, { .IsSigned = true, .Type = FT_INT, .Name = "NumTalentsDemonHunter" }, + { .IsSigned = false, .Type = FT_FLOAT, .Name = "Unknown1115" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 4, &NumTalentsAtLevelMeta::Instance, HOTFIX_SEL_NUM_TALENTS_AT_LEVEL }; + static constexpr DB2LoadInfo Instance{ Fields, 5, &NumTalentsAtLevelMeta::Instance, HOTFIX_SEL_NUM_TALENTS_AT_LEVEL }; }; struct OverrideSpellDataLoadInfo @@ -5003,7 +5005,7 @@ struct SpellCastingRequirementsLoadInfo { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "SpellID" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "FacingCasterFlags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "FacingCasterFlags" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "MinFactionID" }, { .IsSigned = true, .Type = FT_INT, .Name = "MinReputation" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredAreasID" }, @@ -5804,22 +5806,39 @@ struct TactKeyLoadInfo struct TalentLoadInfo { - static constexpr DB2FieldMeta Fields[11] = + static constexpr DB2FieldMeta Fields[28] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_STRING, .Name = "Description" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "TierID" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "ColumnIndex" }, + { .IsSigned = false, .Type = FT_SHORT, .Name = "TabID" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "ClassID" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "SpecID" }, { .IsSigned = false, .Type = FT_INT, .Name = "SpellID" }, { .IsSigned = false, .Type = FT_INT, .Name = "OverridesSpellID" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "CategoryMask1" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "CategoryMask2" }, - }; - - static constexpr DB2LoadInfo Instance{ Fields, 11, &TalentMeta::Instance, HOTFIX_SEL_TALENT }; + { .IsSigned = false, .Type = FT_INT, .Name = "RequiredSpellID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "CategoryMask1" }, + { .IsSigned = true, .Type = FT_INT, .Name = "CategoryMask2" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank1" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank2" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank3" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank4" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank5" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank6" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank7" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank8" }, + { .IsSigned = false, .Type = FT_INT, .Name = "SpellRank9" }, + { .IsSigned = false, .Type = FT_INT, .Name = "PrereqTalent1" }, + { .IsSigned = false, .Type = FT_INT, .Name = "PrereqTalent2" }, + { .IsSigned = false, .Type = FT_INT, .Name = "PrereqTalent3" }, + { .IsSigned = false, .Type = FT_BYTE, .Name = "PrereqRank1" }, + { .IsSigned = false, .Type = FT_BYTE, .Name = "PrereqRank2" }, + { .IsSigned = false, .Type = FT_BYTE, .Name = "PrereqRank3" }, + }; + + static constexpr DB2LoadInfo Instance{ Fields, 28, &TalentMeta::Instance, HOTFIX_SEL_TALENT }; }; struct TaxiNodesLoadInfo @@ -5904,7 +5923,7 @@ struct ToyLoadInfo { .IsSigned = false, .Type = FT_STRING, .Name = "SourceText" }, { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ItemID" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "SourceTypeEnum" }, }; @@ -6634,12 +6653,12 @@ struct VehicleSeatLoadInfo { .IsSigned = false, .Type = FT_FLOAT, .Name = "CameraEnteringZoom" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "CameraSeatZoomMin" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "CameraSeatZoomMax" }, - { .IsSigned = true, .Type = FT_SHORT, .Name = "EnterAnimKitID" }, - { .IsSigned = true, .Type = FT_SHORT, .Name = "RideAnimKitID" }, - { .IsSigned = true, .Type = FT_SHORT, .Name = "ExitAnimKitID" }, - { .IsSigned = true, .Type = FT_SHORT, .Name = "VehicleEnterAnimKitID" }, - { .IsSigned = true, .Type = FT_SHORT, .Name = "VehicleRideAnimKitID" }, - { .IsSigned = true, .Type = FT_SHORT, .Name = "VehicleExitAnimKitID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "EnterAnimKitID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "RideAnimKitID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "ExitAnimKitID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "VehicleEnterAnimKitID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "VehicleRideAnimKitID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "VehicleExitAnimKitID" }, { .IsSigned = true, .Type = FT_SHORT, .Name = "CameraModeID" }, }; diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index 08faf1eea37..c71bbabf68c 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -737,23 +737,24 @@ struct AnimationDataMeta struct AreaConditionalDataMeta { - static constexpr DB2MetaField Fields[5] = + static constexpr DB2MetaField Fields[6] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = { .FileDataId = 2123730, .IndexField = 1, - .ParentIndexField = 4, - .FieldCount = 5, - .FileFieldCount = 4, - .LayoutHash = 0xFFC38678, + .ParentIndexField = 5, + .FieldCount = 6, + .FileFieldCount = 5, + .LayoutHash = 0xAEE182C6, .Fields = Fields }; }; @@ -2687,6 +2688,26 @@ struct Cfg_ConfigsMeta }; }; +struct Cfg_GameRulesMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6841377, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0x41B88A54, + .Fields = Fields + }; +}; + struct Cfg_RegionsMeta { static constexpr DB2MetaField Fields[5] = @@ -3294,7 +3315,7 @@ struct ChrClassesMeta { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, @@ -3313,7 +3334,7 @@ struct ChrClassesMeta .ParentIndexField = -1, .FieldCount = 39, .FileFieldCount = 39, - .LayoutHash = 0x6D301B0D, + .LayoutHash = 0x03A0FD4D, .Fields = Fields }; }; @@ -5013,6 +5034,73 @@ struct ConversationLineMeta }; }; +struct CooldownSetMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6405756, + .IndexField = 0, + .ParentIndexField = 1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0x833402CE, + .Fields = Fields + }; +}; + +struct CooldownSetLinkedSpellMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6422327, + .IndexField = -1, + .ParentIndexField = 2, + .FieldCount = 3, + .FileFieldCount = 2, + .LayoutHash = 0x11E4972F, + .Fields = Fields + }; +}; + +struct CooldownSetSpellMeta +{ + static constexpr DB2MetaField Fields[7] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6405757, + .IndexField = 0, + .ParentIndexField = 1, + .FieldCount = 7, + .FileFieldCount = 7, + .LayoutHash = 0xB5A471F2, + .Fields = Fields + }; +}; + struct CorruptionEffectsMeta { static constexpr DB2MetaField Fields[4] = @@ -5469,7 +5557,7 @@ struct CreatureDisplayInfoMeta .ParentIndexField = -1, .FieldCount = 28, .FileFieldCount = 28, - .LayoutHash = 0x19189406, + .LayoutHash = 0x7275F5F6, .Fields = Fields }; }; @@ -5765,7 +5853,7 @@ struct CreatureModelDataMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, @@ -5794,7 +5882,7 @@ struct CreatureModelDataMeta .ParentIndexField = -1, .FieldCount = 34, .FileFieldCount = 34, - .LayoutHash = 0x6148D238, + .LayoutHash = 0x0F5449F8, .Fields = Fields }; }; @@ -6189,7 +6277,7 @@ struct DeathThudLookupsMeta { static constexpr DB2MetaField Fields[4] = { - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, @@ -6202,7 +6290,7 @@ struct DeathThudLookupsMeta .ParentIndexField = -1, .FieldCount = 4, .FileFieldCount = 4, - .LayoutHash = 0xDDC6DB32, + .LayoutHash = 0xB84E88F2, .Fields = Fields }; }; @@ -6571,7 +6659,7 @@ struct DriverBlacklistMeta struct DungeonEncounterMeta { - static constexpr DB2MetaField Fields[10] = + static constexpr DB2MetaField Fields[11] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, @@ -6583,6 +6671,7 @@ struct DungeonEncounterMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -6590,9 +6679,9 @@ struct DungeonEncounterMeta .FileDataId = 1347279, .IndexField = 1, .ParentIndexField = 2, - .FieldCount = 10, - .FileFieldCount = 10, - .LayoutHash = 0x7B6AC42A, + .FieldCount = 11, + .FileFieldCount = 11, + .LayoutHash = 0xE408B8D4, .Fields = Fields }; }; @@ -6719,7 +6808,7 @@ struct EmotesTextDataMeta static constexpr DB2MetaField Fields[3] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; @@ -6730,7 +6819,7 @@ struct EmotesTextDataMeta .ParentIndexField = 2, .FieldCount = 3, .FileFieldCount = 2, - .LayoutHash = 0x4BF58EA9, + .LayoutHash = 0x62B26C79, .Fields = Fields }; }; @@ -7264,9 +7353,11 @@ struct GameClockDebugMeta struct GameModeMeta { - static constexpr DB2MetaField Fields[9] = + static constexpr DB2MetaField Fields[12] = { { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -7275,6 +7366,7 @@ struct GameModeMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -7282,9 +7374,9 @@ struct GameModeMeta .FileDataId = 5008306, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 9, - .FileFieldCount = 9, - .LayoutHash = 0x60A1CBA9, + .FieldCount = 12, + .FileFieldCount = 12, + .LayoutHash = 0x3609B763, .Fields = Fields }; }; @@ -9719,7 +9811,7 @@ struct HeirloomMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 6, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 6, .IsSigned = false }, @@ -9732,7 +9824,7 @@ struct HeirloomMeta .ParentIndexField = -1, .FieldCount = 10, .FileFieldCount = 10, - .LayoutHash = 0x2F8299AE, + .LayoutHash = 0x9ECA649E, .Fields = Fields }; }; @@ -10468,7 +10560,7 @@ struct ItemClassMeta { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -10478,7 +10570,7 @@ struct ItemClassMeta .ParentIndexField = -1, .FieldCount = 4, .FileFieldCount = 4, - .LayoutHash = 0xA2EB4A48, + .LayoutHash = 0x35680EB8, .Fields = Fields }; }; @@ -10844,7 +10936,7 @@ struct ItemExtendedCostMeta { { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, @@ -10861,7 +10953,7 @@ struct ItemExtendedCostMeta .ParentIndexField = -1, .FieldCount = 10, .FileFieldCount = 10, - .LayoutHash = 0xD2894EC8, + .LayoutHash = 0x6F3FC018, .Fields = Fields }; }; @@ -13335,7 +13427,7 @@ struct MawPowerRarityMeta .ParentIndexField = -1, .FieldCount = 2, .FileFieldCount = 2, - .LayoutHash = 0x3DFF7866, + .LayoutHash = 0xA575912D, .Fields = Fields }; }; @@ -14337,21 +14429,23 @@ struct NamesReservedLocaleMeta struct NumTalentsAtLevelMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[5] = { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = { .FileDataId = 1953326, - .IndexField = -1, + .IndexField = 0, .ParentIndexField = -1, - .FieldCount = 3, - .FileFieldCount = 3, - .LayoutHash = 0x9E707863, + .FieldCount = 5, + .FileFieldCount = 5, + .LayoutHash = 0x1B85660E, .Fields = Fields }; }; @@ -15491,7 +15585,7 @@ struct PlayerDataElementAccountMeta .ParentIndexField = -1, .FieldCount = 3, .FileFieldCount = 3, - .LayoutHash = 0x7F54ED49, + .LayoutHash = 0x099A3DF9, .Fields = Fields }; }; @@ -15512,7 +15606,7 @@ struct PlayerDataElementCharacterMeta .ParentIndexField = -1, .FieldCount = 3, .FileFieldCount = 3, - .LayoutHash = 0x7F54ED49, + .LayoutHash = 0x099A3DF9, .Fields = Fields }; }; @@ -18782,7 +18876,7 @@ struct SpellCastingRequirementsMeta static constexpr DB2MetaField Fields[7] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, @@ -18797,7 +18891,7 @@ struct SpellCastingRequirementsMeta .ParentIndexField = -1, .FieldCount = 7, .FileFieldCount = 7, - .LayoutHash = 0xEB5F42A0, + .LayoutHash = 0x02074290, .Fields = Fields }; }; @@ -20571,26 +20665,6 @@ struct StartupFilesMeta }; }; -struct Startup_StringsMeta -{ - static constexpr DB2MetaField Fields[2] = - { - { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, - }; - - static constexpr DB2Meta Instance = - { - .FileDataId = 1375805, - .IndexField = -1, - .ParentIndexField = -1, - .FieldCount = 2, - .FileFieldCount = 2, - .LayoutHash = 0xD758674F, - .Fields = Fields - }; -}; - struct StationeryMeta { static constexpr DB2MetaField Fields[3] = @@ -20675,17 +20749,22 @@ struct TactKeyLookupMeta struct TalentMeta { - static constexpr DB2MetaField Fields[9] = + static constexpr DB2MetaField Fields[14] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_BYTE, .ArraySize = 2, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 2, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 9, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 3, .IsSigned = false }, + { .Type = FT_BYTE, .ArraySize = 3, .IsSigned = false }, }; static constexpr DB2Meta Instance = @@ -20693,9 +20772,9 @@ struct TalentMeta .FileDataId = 1369062, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 9, - .FileFieldCount = 9, - .LayoutHash = 0xFD0E9E24, + .FieldCount = 14, + .FileFieldCount = 14, + .LayoutHash = 0x4D999D55, .Fields = Fields }; }; @@ -20833,7 +20912,7 @@ struct TerrainTypeMeta { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -20843,7 +20922,7 @@ struct TerrainTypeMeta .ParentIndexField = -1, .FieldCount = 5, .FileFieldCount = 5, - .LayoutHash = 0xEC0D143D, + .LayoutHash = 0x7A6E1ECD, .Fields = Fields }; }; @@ -20967,7 +21046,7 @@ struct ToyMeta { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, }; @@ -20978,7 +21057,7 @@ struct ToyMeta .ParentIndexField = -1, .FieldCount = 5, .FileFieldCount = 5, - .LayoutHash = 0xC55DB9B0, + .LayoutHash = 0x821B5D20, .Fields = Fields }; }; @@ -23524,12 +23603,12 @@ struct VehicleSeatMeta { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, }; @@ -23540,7 +23619,7 @@ struct VehicleSeatMeta .ParentIndexField = -1, .FieldCount = 61, .FileFieldCount = 61, - .LayoutHash = 0x53C25193, + .LayoutHash = 0x973F2793, .Fields = Fields }; }; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 4af8e10f860..eff70fb4b9d 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -684,7 +684,7 @@ struct ChrClassesEntry uint16 CinematicSequenceID; uint16 DefaultSpec; uint8 ID; - uint8 PrimaryStatPriority; + int8 PrimaryStatPriority; int8 DisplayPower; uint8 RangedAttackPowerPerAgility; uint8 AttackPowerPerAgility; @@ -1101,7 +1101,7 @@ struct CreatureModelDataEntry uint32 FootstepCameraEffectID; uint32 DeathThudCameraEffectID; uint32 SoundID; - uint32 SizeClass; + int8 SizeClass; float CollisionWidth; float CollisionHeight; float WorldEffectScale; @@ -1530,6 +1530,7 @@ struct DungeonEncounterEntry int32 Flags; int32 SpellIconFileID; int32 Faction; + int32 Unknown1115; }; struct DurabilityCostsEntry @@ -2096,7 +2097,7 @@ struct HeirloomEntry int32 LegacyUpgradedItemID; int32 StaticUpgradedItemID; int8 SourceTypeEnum; - uint8 Flags; + int32 Flags; int32 LegacyItemID; std::array<int32, 6> UpgradeItemID; std::array<uint16, 6> UpgradeItemBonusListID; @@ -2275,7 +2276,7 @@ struct ItemClassEntry LocalizedString ClassName; int8 ClassID; float PriceModifier; - uint8 Flags; + int32 Flags; }; struct ItemContextPickerEntryEntry @@ -2364,7 +2365,7 @@ struct ItemExtendedCostEntry uint32 ID; uint16 RequiredArenaRating; int8 ArenaBracket; // arena slot restrictions (min slot value) - uint8 Flags; + int32 Flags; uint8 MinFactionID; int32 MinReputation; uint8 RequiredAchievement; // required personal arena rating @@ -3057,6 +3058,7 @@ struct NumTalentsAtLevelEntry int32 NumTalents; int32 NumTalentsDeathKnight; int32 NumTalentsDemonHunter; + float Unknown1115; }; #define MAX_OVERRIDE_SPELL 10 @@ -3655,7 +3657,7 @@ struct SpellCastingRequirementsEntry { uint32 ID; int32 SpellID; - uint8 FacingCasterFlags; + int32 FacingCasterFlags; uint16 MinFactionID; int32 MinReputation; uint16 RequiredAreasID; @@ -4158,11 +4160,16 @@ struct TalentEntry uint8 TierID; uint8 Flags; uint8 ColumnIndex; + uint16 TabID; int8 ClassID; uint16 SpecID; uint32 SpellID; uint32 OverridesSpellID; - std::array<uint8, 2> CategoryMask; + uint32 RequiredSpellID; + std::array<int32, 2> CategoryMask; + std::array<uint32, 9> SpellRank; + std::array<uint32, 3> PrereqTalent; + std::array<uint8, 3> PrereqRank; }; struct TaxiNodesEntry @@ -4235,7 +4242,7 @@ struct ToyEntry LocalizedString SourceText; uint32 ID; int32 ItemID; - uint8 Flags; + int32 Flags; int8 SourceTypeEnum; }; @@ -4730,12 +4737,12 @@ struct VehicleSeatEntry float CameraEnteringZoom; float CameraSeatZoomMin; float CameraSeatZoomMax; - int16 EnterAnimKitID; - int16 RideAnimKitID; - int16 ExitAnimKitID; - int16 VehicleEnterAnimKitID; - int16 VehicleRideAnimKitID; - int16 VehicleExitAnimKitID; + int32 EnterAnimKitID; + int32 RideAnimKitID; + int32 ExitAnimKitID; + int32 VehicleEnterAnimKitID; + int32 VehicleRideAnimKitID; + int32 VehicleExitAnimKitID; int16 CameraModeID; inline bool HasFlag(VehicleSeatFlags flag) const { return !!(Flags & flag); } diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 80f5389d5a4..dc7f13b4192 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -441,7 +441,7 @@ enum class ContentTuningCalcType : int32 enum class ContentTuningFlag : int32 { DisabledForItem = 0x04, - Horde = 0x8, + Horde = 0x08, Alliance = 0x10 }; @@ -885,14 +885,15 @@ DEFINE_ENUM_FLAG(CurrencyTypesFlags); enum class CurrencyTypesFlagsB : uint32 { - UseTotalEarnedForEarned = 0x01, - ShowQuestXPGainInTooltip = 0x02, // NYI - NoNotificationMailOnOfflineProgress = 0x04, // NYI - BattlenetVirtualCurrency = 0x08, // NYI - FutureCurrencyFlag = 0x10, // NYI - DontDisplayIfZero = 0x20, // NYI - ScaleMaxQuantityBySeasonWeeks = 0x40, // NYI - ScaleMaxQuantityByWeeksSinceStart = 0x80, // NYI + UseTotalEarnedForEarned = 0x0001, + ShowQuestXPGainInTooltip = 0x0002, // NYI + NoNotificationMailOnOfflineProgress = 0x0004, // NYI + BattlenetVirtualCurrency = 0x0008, // NYI + FutureCurrencyFlag = 0x0010, // NYI + DontDisplayIfZero = 0x0020, // NYI + ScaleMaxQuantityBySeasonWeeks = 0x0040, // NYI + ScaleMaxQuantityByWeeksSinceStart = 0x0080, // NYI + ForceMaxQuantityOnConversion = 0x0100, // NYI }; DEFINE_ENUM_FLAG(CurrencyTypesFlagsB); @@ -1027,6 +1028,14 @@ enum class GlobalCurve : int32 ContentTuningPvpItemLevelHealthScaling = 13, ContentTuningPvpLevelDamageScaling = 14, ContentTuningPvpItemLevelDamageScaling = 15, + + ArmorItemLevelDiminishing = 18, + + ChallengeModeHealth = 21, + ChallengeModeDamage = 22, + MythicPlusEndOfRunGearSequenceLevel = 23, + + SpellAreaEffectWarningRadius = 26, // ground spell effect warning circle radius (based on spell radius) }; #define MAX_ITEM_PROTO_FLAGS 5 @@ -1829,6 +1838,9 @@ enum class ModifierTreeType : int32 PlayerDataElementCharacterEqual = 390, /*NYI*/ // Player {PlayerDataElementCharacter} is greater than {#Amount} PlayerDataElementAccountEqual = 391, /*NYI*/ // Player {PlayerDataElementAccount} is greater than {#Amount} PlayerHasCompletedQuestOrIsReadyToTurnIn = 392, // Player has previously completed quest "{QuestV2}" or is ready to turn it in + PlayerTitle = 393, // Player is currently using "{ChrTitles}" title + + PlayerIsInGuild = 404, // Player is in a guild }; enum class ModifierTreeOperator : int8 @@ -1996,6 +2008,14 @@ enum class PlayerInteractionType : int32 CharacterBanker = 67, AccountBanker = 68, ProfessionRespec = 69, + PlaceholderType71 = 70, + PlaceholderType72 = 71, + PlaceholderType73 = 72, + PlaceholderType74 = 73, + PlaceholderType75 = 74, + PlaceholderType76 = 75, + GuildRename = 76, + PlaceholderType77 = 77, }; enum class PowerTypeFlags : int16 @@ -2301,7 +2321,7 @@ enum class SummonPropertiesFlags : uint32 DEFINE_ENUM_FLAG(SummonPropertiesFlags); #define MAX_TALENT_TIERS 7 -#define MAX_TALENT_COLUMNS 3 +#define MAX_TALENT_COLUMNS 4 #define MAX_PVP_TALENT_SLOTS 4 enum class TaxiNodeFlags : int32 diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index cadf42d3061..0d6337b170f 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -134,6 +134,8 @@ enum LfgJoinResult LFG_JOIN_ALREADY_USING_LFG_LIST = 0x3F, // You can't do that while using Premade Groups. LFG_JOIN_NOT_LEADER = 0x45, // You are not the party leader. LFG_JOIN_DEAD = 0x49, + LFG_FARM_LIMIT = 0x4D, // You or someone in your party has entered too many instances recently. Please wait awhile and try again. + LFG_NO_CROSS_FACTION_PARTIES = 0x4E, // Cross-faction groups can't queue for this instance LFG_JOIN_PARTY_NOT_MEET_REQS = 6, // One or more party members do not meet the requirements for the chosen dungeons (FIXME) }; diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index d5785084f88..85d6ecb7e3d 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -287,6 +287,7 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID) text.QuestFlags[0] = quest->GetFlags(); text.QuestFlags[1] = quest->GetFlagsEx(); text.QuestFlags[2] = quest->GetFlagsEx2(); + text.QuestFlags[3] = quest->GetFlagsEx3(); text.Repeatable = quest->IsTurnIn() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly(); text.ResetByScheduler = quest->IsResetByScheduler(); text.Important = quest->IsImportant(); @@ -418,6 +419,7 @@ void PlayerMenu::SendQuestGiverQuestListMessage(Object* questgiver) text.QuestFlags[0] = quest->GetFlags(); text.QuestFlags[1] = quest->GetFlagsEx(); text.QuestFlags[2] = quest->GetFlagsEx2(); + text.QuestFlags[3] = quest->GetFlagsEx3(); text.Repeatable = quest->IsTurnIn() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly(); text.ResetByScheduler = quest->IsResetByScheduler(); text.Important = quest->IsImportant(); @@ -495,6 +497,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU packet.QuestFlags[0] = quest->GetFlags() & (sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_ACCEPT) ? ~QUEST_FLAGS_AUTO_ACCEPT : ~0); packet.QuestFlags[1] = quest->GetFlagsEx(); packet.QuestFlags[2] = quest->GetFlagsEx2(); + packet.QuestFlags[3] = quest->GetFlagsEx3(); packet.SuggestedPartyMembers = quest->GetSuggestedPlayers(); // Is there a better way? what about game objects? @@ -602,6 +605,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI offer.QuestFlags[0] = quest->GetFlags(); offer.QuestFlags[1] = quest->GetFlagsEx(); offer.QuestFlags[2] = quest->GetFlagsEx2(); + offer.QuestFlags[3] = quest->GetFlagsEx3(); packet.PortraitTurnIn = quest->GetQuestTurnInPortrait(); packet.PortraitGiver = quest->GetQuestGiverPortrait(); @@ -668,6 +672,7 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU packet.QuestFlags[0] = quest->GetFlags(); packet.QuestFlags[1] = quest->GetFlagsEx(); packet.QuestFlags[2] = quest->GetFlagsEx2(); + packet.QuestFlags[3] = quest->GetFlagsEx3(); packet.SuggestPartyMembers = quest->GetSuggestedPlayers(); packet.QuestInfoID = quest->GetQuestInfoID(); diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index 524a98a687e..03ac95cb8f7 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -92,6 +92,12 @@ enum class GossipOptionNpc : uint8 CharacterBanker = 56, AccountBanker = 57, ProfessionRespec = 58, + Placeholder1 = 59, + Placeholder2 = 60, + Placeholder3 = 61, + GuildRename = 62, + Placeholder4 = 63, + ItemUpgrade = 64, Count }; diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 6dcdf08e85c..c7853ca5214 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -472,10 +472,12 @@ enum ItemSubclassConsumable ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6, ITEM_SUBCLASS_BANDAGE = 7, ITEM_SUBCLASS_CONSUMABLE_OTHER = 8, - ITEM_SUBCLASS_VANTUS_RUNE = 9 + ITEM_SUBCLASS_VANTUS_RUNE = 9, + ITEM_SUBCLASS_UTILITY_CURIO = 10, + ITEM_SUBCLASS_COMBAT_CURIO = 11, }; -#define MAX_ITEM_SUBCLASS_CONSUMABLE 10 +#define MAX_ITEM_SUBCLASS_CONSUMABLE 12 enum ItemSubclassContainer { diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index cc073ad6592..c575c61f10b 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -3061,7 +3061,7 @@ void BitVectors::ClearChangesMask() void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - data.WriteBits(Type, 1); + data << uint32(Type); if (Type == 1) { data << float(FloatValue); @@ -3070,12 +3070,11 @@ void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* owner, Playe { data << int64(Int64Value); } - data.FlushBits(); } void PlayerDataElement::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const { - data.WriteBits(Type, 1); + data << uint32(Type); if (Type == 1) { data << float(FloatValue); @@ -3084,7 +3083,6 @@ void PlayerDataElement::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl { data << int64(Int64Value); } - data.FlushBits(); } bool PlayerDataElement::operator==(PlayerDataElement const& right) const @@ -4760,7 +4758,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << uint8(MultiActionBars); data << uint8(LifetimeMaxRank); data << uint8(NumRespecs); - data << uint8(PvpMedals); + data << uint32(PvpMedals); for (uint32 i = 0; i < 12; ++i) { data << uint32(BuybackPrice[i]); @@ -4807,10 +4805,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { data << uint32(BankBagSlotFlags[i]); } - for (uint32 i = 0; i < 1000; ++i) - { - data << uint64(QuestCompleted[i]); - } data << int32(Honor); data << int32(HonorNextLevel); data << int32(PerksProgramCurrency); @@ -4883,6 +4877,14 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { data << uint64(KnownTitles[i]); } + for (uint32 i = 0; i < CharacterDataElements.size(); ++i) + { + CharacterDataElements[i].WriteCreate(data, owner, receiver); + } + for (uint32 i = 0; i < AccountDataElements.size(); ++i) + { + AccountDataElements[i].WriteCreate(data, owner, receiver); + } for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) { data << int32(DailyQuestsCompleted[i]); @@ -5004,14 +5006,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << FrozenPerksVendorItem; Field_1410->WriteCreate(data, owner, receiver); data << DungeonScore; - for (uint32 i = 0; i < CharacterDataElements.size(); ++i) - { - CharacterDataElements[i].WriteCreate(data, owner, receiver); - } - for (uint32 i = 0; i < AccountDataElements.size(); ++i) - { - AccountDataElements[i].WriteCreate(data, owner, receiver); - } for (uint32 i = 0; i < PvpInfo.size(); ++i) { PvpInfo[i].WriteCreate(data, owner, receiver); @@ -5054,10 +5048,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const { - for (uint32 i = 0; i < 1; ++i) - data << uint32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 16); - for (uint32 i = 0; i < 48; ++i) + data.WriteBits(changesMask.GetBlocksMask(0), 17); + for (uint32 i = 0; i < 17; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -5419,6 +5411,26 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } + if (changesMask[8]) + { + for (uint32 i = 0; i < CharacterDataElements.size(); ++i) + { + if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask) + { + CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[9]) + { + for (uint32 i = 0; i < AccountDataElements.size(); ++i) + { + if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask) + { + AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } if (changesMask[11]) { for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) @@ -5682,26 +5694,6 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[0]) { - if (changesMask[8]) - { - for (uint32 i = 0; i < CharacterDataElements.size(); ++i) - { - if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask) - { - CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[9]) - { - for (uint32 i = 0; i < AccountDataElements.size(); ++i) - { - if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask) - { - AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } if (changesMask[10]) { for (uint32 i = 0; i < PvpInfo.size(); ++i) @@ -5956,7 +5948,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[97]) { - data << uint8(PvpMedals); + data << uint32(PvpMedals); } if (changesMask[98]) { @@ -6300,19 +6292,9 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[498]) { - for (uint32 i = 0; i < 1000; ++i) - { - if (changesMask[499 + i]) - { - data << uint64(QuestCompleted[i]); - } - } - } - if (changesMask[1499]) - { for (uint32 i = 0; i < 17; ++i) { - if (changesMask[1500 + i]) + if (changesMask[499 + i]) { data << float(ItemUpgradeHighWatermark[i]); } @@ -6333,6 +6315,8 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(ResearchSiteProgress); Base::ClearChangesMask(Research); Base::ClearChangesMask(KnownTitles); + Base::ClearChangesMask(CharacterDataElements); + Base::ClearChangesMask(AccountDataElements); Base::ClearChangesMask(DailyQuestsCompleted); Base::ClearChangesMask(AvailableQuestLineXQuestIDs); Base::ClearChangesMask(Heirlooms); @@ -6358,8 +6342,6 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(CategoryCooldownMods); Base::ClearChangesMask(WeeklySpellUses); Base::ClearChangesMask(TrackedCollectableSources); - Base::ClearChangesMask(CharacterDataElements); - Base::ClearChangesMask(AccountDataElements); Base::ClearChangesMask(PvpInfo); Base::ClearChangesMask(CharacterRestrictions); Base::ClearChangesMask(TraitConfigs); @@ -6476,7 +6458,6 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(ProfessionSkillLine); Base::ClearChangesMask(BagSlotFlags); Base::ClearChangesMask(BankBagSlotFlags); - Base::ClearChangesMask(QuestCompleted); Base::ClearChangesMask(ItemUpgradeHighWatermark); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index bc02576f7f6..d394afda2d9 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -1034,7 +1034,7 @@ struct Research : public IsUpdateFieldStructureTag bool operator!=(Research const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1517> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<516> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BackpackSellJunkDisabled; @@ -1046,6 +1046,8 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 43, 44> ResearchSiteProgress; UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 45, 46> Research; DynamicUpdateField<uint64, 0, 7> KnownTitles; + DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements; + DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements; DynamicUpdateField<int32, 0, 11> DailyQuestsCompleted; DynamicUpdateField<int32, 0, 12> AvailableQuestLineXQuestIDs; DynamicUpdateField<int32, 0, 13> Heirlooms; @@ -1071,8 +1073,6 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas DynamicUpdateField<UF::CategoryCooldownMod, 32, 37> CategoryCooldownMods; DynamicUpdateField<UF::WeeklySpellUse, 32, 38> WeeklySpellUses; DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 39> TrackedCollectableSources; - DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements; - DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements; DynamicUpdateField<UF::PVPInfo, 0, 10> PvpInfo; DynamicUpdateField<UF::CharacterRestriction, 0, 23> CharacterRestrictions; DynamicUpdateField<UF::TraitConfig, 32, 33> TraitConfigs; @@ -1127,7 +1127,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<uint8, 70, 94> MultiActionBars; UpdateField<uint8, 70, 95> LifetimeMaxRank; UpdateField<uint8, 70, 96> NumRespecs; - UpdateField<uint8, 70, 97> PvpMedals; + UpdateField<uint32, 70, 97> PvpMedals; UpdateField<uint16, 70, 98> TodayHonorableKills; UpdateField<uint16, 70, 99> YesterdayHonorableKills; UpdateField<uint32, 70, 100> LifetimeHonorableKills; @@ -1189,8 +1189,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateFieldArray<int32, 2, 481, 482> ProfessionSkillLine; UpdateFieldArray<uint32, 5, 484, 485> BagSlotFlags; UpdateFieldArray<uint32, 7, 490, 491> BankBagSlotFlags; - UpdateFieldArray<uint64, 1000, 498, 499> QuestCompleted; - UpdateFieldArray<float, 17, 1499, 1500> ItemUpgradeHighWatermark; + UpdateFieldArray<float, 17, 498, 499> 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 48a0156ffce..c1e09611a53 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14277,7 +14277,9 @@ void Player::OnGossipSelect(WorldObject* source, int32 gossipOptionId, uint32 me PlayerInteractionType::ProfessionsCraftingOrder, PlayerInteractionType::Professions, PlayerInteractionType::ProfessionsCustomerOrder, PlayerInteractionType::TraitSystem, PlayerInteractionType::BarbersChoice, PlayerInteractionType::MajorFactionRenown, PlayerInteractionType::PersonalTabardVendor, PlayerInteractionType::ForgeMaster, PlayerInteractionType::CharacterBanker, - PlayerInteractionType::AccountBanker, PlayerInteractionType::ProfessionRespec + PlayerInteractionType::AccountBanker, PlayerInteractionType::ProfessionRespec, PlayerInteractionType::PlaceholderType72, + PlayerInteractionType::PlaceholderType75, PlayerInteractionType::PlaceholderType76, PlayerInteractionType::GuildRename, + PlayerInteractionType::PlaceholderType77, PlayerInteractionType::ItemUpgrade }; PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[AsUnderlyingType(gossipOptionNpc)]; @@ -16569,26 +16571,17 @@ void Player::SetQuestCompletedBit(uint32 questId, bool completed) uint32 fieldOffset = (questBit - 1) / QUESTS_COMPLETED_BITS_PER_BLOCK; uint64 flag = UI64LIT(1) << ((questBit - 1) % QUESTS_COMPLETED_BITS_PER_BLOCK); - if (fieldOffset < QUESTS_COMPLETED_BITS_SIZE) - { - if (completed) - SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::QuestCompleted, fieldOffset), flag); - else - RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::QuestCompleted, fieldOffset), flag); - } + + auto field = m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::BitVectors) + .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX) + .ModifyValue(&UF::BitVector::Values, fieldOffset); if (completed) - SetUpdateFieldFlagValue(m_values - .ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::BitVectors) - .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX) - .ModifyValue(&UF::BitVector::Values, fieldOffset), flag); + SetUpdateFieldFlagValue(field, flag); else - RemoveUpdateFieldFlagValue(m_values - .ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::BitVectors) - .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX) - .ModifyValue(&UF::BitVector::Values, fieldOffset), flag); + RemoveUpdateFieldFlagValue(field, flag); } void Player::AreaExploredOrEventHappens(uint32 questId) @@ -29851,7 +29844,7 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId) ObjectMgr::GetLocaleString(playerChoiceLocale->Question, locale, displayPlayerChoice.Question); displayPlayerChoice.Responses.resize(playerChoice->Responses.size()); - displayPlayerChoice.CloseChoiceFrame = false; + displayPlayerChoice.InfiniteRange = false; displayPlayerChoice.HideWarboardHeader = playerChoice->HideWarboardHeader; displayPlayerChoice.KeepOpenAfterChoice = playerChoice->KeepOpenAfterChoice; @@ -29945,7 +29938,6 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId) WorldPackets::Quest::PlayerChoiceResponseMawPower& mawPower = playerChoiceResponse.MawPower.emplace(); mawPower.TypeArtFileID = playerChoiceResponseTemplate.MawPower->TypeArtFileID; mawPower.Rarity = playerChoiceResponseTemplate.MawPower->Rarity; - mawPower.RarityColor = playerChoiceResponseTemplate.MawPower->RarityColor; mawPower.SpellID = playerChoiceResponseTemplate.MawPower->SpellID; mawPower.MaxStacks = playerChoiceResponseTemplate.MawPower->MaxStacks; } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index ae955a9b683..69329a69358 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -158,6 +158,8 @@ enum PlayerDataFlagConstants PLAYER_DATA_FLAG_ACCOUNT_COMBINED_QUEST_REWARDS_INDEX = 7, PLAYER_DATA_FLAG_CHARACTER_CONTENTPUSH_INDEX = 8, PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX = 9, + + // = 12 stores quests completed under ctrOptions & 0x2000 }; enum SpellModType : uint8 @@ -594,8 +596,7 @@ typedef std::map<uint32, QuestSaveType> QuestStatusSaveMap; // Size of client completed quests bit map enum PlayerQuestCompletedConstants { - QUESTS_COMPLETED_BITS_SIZE = UF::size<decltype(UF::ActivePlayerData::QuestCompleted)>(), - QUESTS_COMPLETED_BITS_PER_BLOCK = UF::size_of_value_type<decltype(UF::ActivePlayerData::QuestCompleted)>() * 8 + QUESTS_COMPLETED_BITS_PER_BLOCK = UF::size_of_value_type<decltype(UF::BitVector::Values)>() * 8 }; enum PlayerQuestLogConstants diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index ad13ffddca0..e3aca85d208 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4577,33 +4577,33 @@ void ObjectMgr::LoadQuests() "ID, QuestType, QuestPackageID, ContentTuningID, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, " //10 11 12 13 14 15 16 "RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardSpell, RewardHonor, RewardKillHonor, StartItem, " - //17 18 19 20 21 22 - "RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, FlagsEx2, " - //23 24 25 26 27 28 29 30 + //17 18 19 20 21 22 23 + "RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, FlagsEx2, FlagsEx3, " + //24 25 26 27 28 29 30 31 "RewardItem1, RewardAmount1, ItemDrop1, ItemDropQuantity1, RewardItem2, RewardAmount2, ItemDrop2, ItemDropQuantity2, " - //31 32 33 34 35 36 37 38 + //32 33 34 35 36 37 38 39 "RewardItem3, RewardAmount3, ItemDrop3, ItemDropQuantity3, RewardItem4, RewardAmount4, ItemDrop4, ItemDropQuantity4, " - //39 40 41 42 43 44 + //40 41 42 43 44 45 "RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemDisplayID1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemDisplayID2, " - //45 46 47 48 49 50 + //46 47 48 49 50 51 "RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemDisplayID3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemDisplayID4, " - //51 52 53 54 55 56 + //52 53 54 55 56 57 "RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemDisplayID5, RewardChoiceItemID6, RewardChoiceItemQuantity6, RewardChoiceItemDisplayID6, " - //57 58 59 60 61 62 63 64 + //58 59 60 61 62 63 64 65 "POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, " - //65 66 67 68 + //66 67 68 69 "PortraitGiver, PortraitGiverMount, PortraitGiverModelSceneID, PortraitTurnIn, " - //69 70 71 72 73 74 75 76 + //70 71 72 73 74 75 76 77 "RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionCapIn1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionCapIn2, " - //77 78 79 80 81 82 83 84 + //78 79 80 81 82 83 84 85 "RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionCapIn3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionCapIn4, " - //85 86 87 88 89 + //86 87 88 89 90 "RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, " - //90 91 92 93 94 95 96 97 + //91 92 93 94 95 96 97 98 "RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " - //98 99 100 101 102 103 104 105 106 + //99 100 101 102 103 104 105 106 107 "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, ResetByScheduler, Expansion, ManagedWorldStateID, QuestSessionBonus, " - //107 108 109 110 111 112 113 114 115 + //108 109 110 111 112 113 114 115 116 "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog " "FROM quest_template"); if (!result) @@ -11228,8 +11228,7 @@ void ObjectMgr::LoadPlayerChoices() continue; } - auto responseItr = std::find_if(choice->Responses.begin(), choice->Responses.end(), - [responseId](PlayerChoiceResponse const& playerChoiceResponse) { return playerChoiceResponse.ResponseId == responseId; }); + auto responseItr = std::ranges::find(choice->Responses, responseId, &PlayerChoiceResponse::ResponseId); if (responseItr == choice->Responses.end()) { TC_LOG_ERROR("sql.sql", "Table `playerchoice_response_reward` references non-existing ResponseId: {} for ChoiceId {}, skipped", responseId, choiceId); @@ -11294,8 +11293,7 @@ void ObjectMgr::LoadPlayerChoices() continue; } - auto responseItr = std::find_if(choice->Responses.begin(), choice->Responses.end(), - [responseId](PlayerChoiceResponse const& playerChoiceResponse) { return playerChoiceResponse.ResponseId == responseId; }); + auto responseItr = std::ranges::find(choice->Responses, responseId, &PlayerChoiceResponse::ResponseId); if (responseItr == choice->Responses.end()) { TC_LOG_ERROR("sql.sql", "Table `playerchoice_response_reward_item` references non-existing ResponseId: {} for ChoiceId {}, skipped", responseId, choiceId); @@ -11340,8 +11338,7 @@ void ObjectMgr::LoadPlayerChoices() continue; } - auto responseItr = std::find_if(choice->Responses.begin(), choice->Responses.end(), - [responseId](PlayerChoiceResponse const& playerChoiceResponse) { return playerChoiceResponse.ResponseId == responseId; }); + auto responseItr = std::ranges::find(choice->Responses, responseId, &PlayerChoiceResponse::ResponseId); if (responseItr == choice->Responses.end()) { TC_LOG_ERROR("sql.sql", "Table `playerchoice_response_reward_currency` references non-existing ResponseId: {} for ChoiceId {}, skipped", responseId, choiceId); @@ -11386,8 +11383,7 @@ void ObjectMgr::LoadPlayerChoices() continue; } - auto responseItr = std::find_if(choice->Responses.begin(), choice->Responses.end(), - [responseId](PlayerChoiceResponse const& playerChoiceResponse) { return playerChoiceResponse.ResponseId == responseId; }); + auto responseItr = std::ranges::find(choice->Responses, responseId, &PlayerChoiceResponse::ResponseId); if (responseItr == choice->Responses.end()) { TC_LOG_ERROR("sql.sql", "Table `playerchoice_response_reward_faction` references non-existing ResponseId: {} for ChoiceId {}, skipped", responseId, choiceId); @@ -11436,8 +11432,7 @@ void ObjectMgr::LoadPlayerChoices() continue; } - auto responseItr = std::find_if(choice->Responses.begin(), choice->Responses.end(), - [responseId](PlayerChoiceResponse const& playerChoiceResponse) { return playerChoiceResponse.ResponseId == responseId; }); + auto responseItr = std::ranges::find(choice->Responses, responseId, &PlayerChoiceResponse::ResponseId); if (responseItr == choice->Responses.end()) { TC_LOG_ERROR("sql.sql", "Table `playerchoice_response_reward_item_choice` references non-existing ResponseId: {} for ChoiceId {}, skipped", responseId, choiceId); @@ -11464,7 +11459,7 @@ void ObjectMgr::LoadPlayerChoices() } while (rewards->NextRow()); } - if (QueryResult mawPowersResult = WorldDatabase.Query("SELECT ChoiceId, ResponseId, TypeArtFileID, Rarity, RarityColor, SpellID, MaxStacks FROM playerchoice_response_maw_power")) + if (QueryResult mawPowersResult = WorldDatabase.Query("SELECT ChoiceId, ResponseId, TypeArtFileID, Rarity, SpellID, MaxStacks FROM playerchoice_response_maw_power")) { do { @@ -11479,11 +11474,7 @@ void ObjectMgr::LoadPlayerChoices() continue; } - auto responseItr = std::find_if(choice->Responses.begin(), choice->Responses.end(), - [responseId](PlayerChoiceResponse const& playerChoiceResponse) - { - return playerChoiceResponse.ResponseId == responseId; - }); + auto responseItr = std::ranges::find(choice->Responses, responseId, &PlayerChoiceResponse::ResponseId); if (responseItr == choice->Responses.end()) { TC_LOG_ERROR("sql.sql", "Table `playerchoice_response_maw_power` references non-existing ResponseId: {} for ChoiceId {}, skipped", responseId, choiceId); @@ -11494,10 +11485,8 @@ void ObjectMgr::LoadPlayerChoices() mawPower.TypeArtFileID = fields[2].GetInt32(); if (!fields[3].IsNull()) mawPower.Rarity = fields[3].GetInt32(); - if (!fields[4].IsNull()) - mawPower.RarityColor = fields[4].GetUInt32(); - mawPower.SpellID = fields[5].GetInt32(); - mawPower.MaxStacks = fields[6].GetInt32(); + mawPower.SpellID = fields[4].GetInt32(); + mawPower.MaxStacks = fields[5].GetInt32(); ++mawPowersCount; diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 8160ebd7404..f523e50a225 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -908,7 +908,6 @@ struct PlayerChoiceResponseMawPower { int32 TypeArtFileID = 0; Optional<int32> Rarity; - Optional<uint32> RarityColor; int32 SpellID = 0; int32 MaxStacks = 0; }; diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 2515320fc4b..ccbd6c88b0b 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -498,7 +498,8 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorI { WorldPackets::Spells::MirrorImageComponentedData mirrorImageComponentedData; mirrorImageComponentedData.UnitGUID = guid; - mirrorImageComponentedData.DisplayID = creator->GetDisplayId(); + if (ChrModelEntry const* chrModel = sDB2Manager.GetChrModel(creator->GetRace(), creator->GetGender())) + mirrorImageComponentedData.ChrModelID = chrModel->ID; mirrorImageComponentedData.RaceID = creator->GetRace(); mirrorImageComponentedData.Gender = creator->GetGender(); mirrorImageComponentedData.ClassID = creator->GetClass(); @@ -511,7 +512,7 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorI mirrorImageComponentedData.ItemDisplayID.reserve(11); - static EquipmentSlots const itemSlots[] = + static constexpr EquipmentSlots itemSlots[] = { EQUIPMENT_SLOT_HEAD, EQUIPMENT_SLOT_SHOULDERS, diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index aef47a0acac..023cc51d2f9 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -33,7 +33,7 @@ #define QUEST_TEMPLATE_FIELDS (ID)(QuestType)(QuestPackageID)(ContentTuningID)(QuestSortID)(QuestInfoID)(SuggestedGroupNum)(RewardNextQuest)(RewardXPDifficulty)\ (RewardXPMultiplier)(RewardMoneyDifficulty)(RewardMoneyMultiplier)(RewardBonusMoney)(RewardSpell)(RewardHonor)(RewardKillHonor)(StartItem)\ - (RewardArtifactXPDifficulty)(RewardArtifactXPMultiplier)(RewardArtifactCategoryID)(Flags)(FlagsEx)(FlagsEx2)\ + (RewardArtifactXPDifficulty)(RewardArtifactXPMultiplier)(RewardArtifactCategoryID)(Flags)(FlagsEx)(FlagsEx2)(FlagsEx3)\ (RewardItem1)(RewardAmount1)(ItemDrop1)(ItemDropQuantity1)(RewardItem2)(RewardAmount2)(ItemDrop2)(ItemDropQuantity2)\ (RewardItem3)(RewardAmount3)(ItemDrop3)(ItemDropQuantity3)(RewardItem4)(RewardAmount4)(ItemDrop4)(ItemDropQuantity4)\ (RewardChoiceItemID1)(RewardChoiceItemQuantity1)(RewardChoiceItemDisplayID1)(RewardChoiceItemID2)(RewardChoiceItemQuantity2)(RewardChoiceItemDisplayID2)\ @@ -109,6 +109,7 @@ Quest::Quest(QuestTemplateQueryResult const& questRecord) : _flags(questRecord.Flags().GetUInt32()), _flagsEx(questRecord.FlagsEx().GetUInt32()), _flagsEx2(questRecord.FlagsEx2().GetUInt32()), + _flagsEx3(questRecord.FlagsEx3().GetUInt32()), _poiContinent(questRecord.POIContinent().GetUInt32()), _poix(questRecord.POIx().GetFloat()), _poiy(questRecord.POIy().GetFloat()), @@ -733,6 +734,7 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const response.Info.Flags = GetFlags(); response.Info.FlagsEx = GetFlagsEx(); response.Info.FlagsEx2 = GetFlagsEx2(); + response.Info.FlagsEx3 = GetFlagsEx3(); response.Info.RewardTitle = GetRewTitle(); response.Info.RewardArenaPoints = GetRewArenaPoints(); response.Info.RewardSkillLineID = GetRewardSkillId(); diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 616cf5c2fe7..59f38eed53b 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -402,14 +402,17 @@ enum QuestObjectiveFlags2 enum class QuestCompleteSpellType : uint32 { - LegacyBehavior = 0, - Follower = 1, - Tradeskill = 2, - Ability = 3, - Aura = 4, - Spell = 5, - Unlock = 6, - Companion = 7, + LegacyBehavior = 0, + Follower = 1, + Tradeskill = 2, + Ability = 3, + Aura = 4, + Spell = 5, + Unlock = 6, + Companion = 7, + QuestlineUnlock = 8, + QuestlineReward = 9, + QuestlineUnlockPart = 10, Max }; @@ -698,6 +701,7 @@ class TC_GAME_API Quest uint32 GetFlags() const { return _flags; } uint32 GetFlagsEx() const { return _flagsEx; } uint32 GetFlagsEx2() const { return _flagsEx2; } + uint32 GetFlagsEx3() const { return _flagsEx3; } uint32 GetSpecialFlags() const { return _specialFlags; } uint32 GetScriptId() const { return _scriptId; } uint32 GetAreaGroupID() const { return _areaGroupID; } @@ -796,6 +800,7 @@ class TC_GAME_API Quest uint32 _flags = 0; uint32 _flagsEx = 0; uint32 _flagsEx2 = 0; + uint32 _flagsEx3 = 0; uint32 _poiContinent = 0; float _poix = 0.f; float _poiy = 0.f; diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 670347a44e8..b5501c18460 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -345,7 +345,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::RatedPvpInf data << int32(bracketInfo.PvpTierID); data << int32(bracketInfo.SeasonPvpTier); data << int32(bracketInfo.BestWeeklyPvpTier); - data << int32(bracketInfo.BestSeasonPvpTierEnum); + data << uint8(bracketInfo.BestSeasonPvpTierEnum); data.WriteBit(bracketInfo.Disqualified); data.FlushBits(); diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 4db509689f2..73c64c8ecc5 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -469,7 +469,7 @@ namespace WorldPackets int32 PvpTierID = 0; int32 SeasonPvpTier = 0; int32 BestWeeklyPvpTier = 0; - int32 BestSeasonPvpTierEnum = 0; + uint8 BestSeasonPvpTierEnum = 0; bool Disqualified = false; } Bracket[9]; }; diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 6cd54e78b87..7df758a319f 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -215,7 +215,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasi { data << charInfo.Guid; data << uint32(charInfo.VirtualRealmAddress); - data << uint8(charInfo.ListPosition); + data << uint16(charInfo.ListPosition); data << uint8(charInfo.RaceID); data << uint8(charInfo.SexID); data << uint8(charInfo.ClassID); diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 5d84cbb7478..f26a7b13524 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -151,7 +151,7 @@ namespace WorldPackets uint32 VirtualRealmAddress = 0; uint64 GuildClubMemberID = 0; ///< same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known) std::string Name; - uint8 ListPosition = 0; ///< Order of the characters in list + uint16 ListPosition = 0; ///< Order of the characters in list uint8 RaceID = 0; uint8 ClassID = 0; uint8 SexID = 0; diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index 9cf557116dd..278eaed2127 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -136,7 +136,7 @@ ByteBuffer& operator<<(ByteBuffer& data, PVPBracketData const& bracket) data << int32(bracket.Tier); data << int32(bracket.WeeklyBestTier); data << int32(bracket.SeasonBestRating); - data << int32(bracket.SeasonBestTierEnum); + data << uint8(bracket.SeasonBestTierEnum); data << int32(bracket.RoundsSeasonPlayed); data << int32(bracket.RoundsSeasonWon); data << int32(bracket.RoundsWeeklyPlayed); diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h index 9cd7dfe386d..f1dcdb7f310 100644 --- a/src/server/game/Server/Packets/InspectPackets.h +++ b/src/server/game/Server/Packets/InspectPackets.h @@ -108,7 +108,7 @@ namespace WorldPackets int32 Tier = 0; int32 WeeklyBestTier = 0; int32 SeasonBestRating = 0; - int32 SeasonBestTierEnum = 0; + uint8 SeasonBestTierEnum = 0; int32 RoundsSeasonPlayed = 0; int32 RoundsSeasonWon = 0; int32 RoundsWeeklyPlayed = 0; diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp index d3d715aec5e..461c01dc15e 100644 --- a/src/server/game/Server/Packets/LFGPackets.cpp +++ b/src/server/game/Server/Packets/LFGPackets.cpp @@ -273,7 +273,7 @@ WorldPacket const* LFGRoleCheckUpdate::Write() WorldPacket const* LFGJoinResult::Write() { _worldPacket << Ticket; - _worldPacket << uint8(Result); + _worldPacket << int32(Result); _worldPacket << uint8(ResultDetail); _worldPacket << uint32(BlackList.size()); _worldPacket << uint32(BlackListNames.size()); diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h index 8e51aa2378d..57b0e7fc1e5 100644 --- a/src/server/game/Server/Packets/LFGPackets.h +++ b/src/server/game/Server/Packets/LFGPackets.h @@ -286,7 +286,7 @@ namespace WorldPackets WorldPacket const* Write() override; RideTicket Ticket; - uint8 Result = 0; + int32 Result = 0; uint8 ResultDetail = 0; std::vector<LFGBlackList> BlackList; std::vector<std::string const*> BlackListNames; diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index 9afa34f5e06..12fd59e3d61 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -78,9 +78,7 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText) data << int32(gossipText.ContentTuningID); data << int32(gossipText.QuestType); data << int32(gossipText.Unused1102); - data << int32(gossipText.QuestFlags[0]); - data << int32(gossipText.QuestFlags[1]); - data << int32(gossipText.QuestFlags[2]); + data.append(gossipText.QuestFlags); data << Bits<1>(gossipText.Repeatable); data << Bits<1>(gossipText.ResetByScheduler); diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index 7bf8a0f148c..c3d4b4f926e 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -104,7 +104,7 @@ namespace WorldPackets bool Important = false; bool Meta = false; std::string QuestTitle; - std::array<int32, 3> QuestFlags = { }; + std::array<int32, 4> QuestFlags = { }; }; ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText); diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index be591c38109..e8bac0296ee 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -111,6 +111,7 @@ WorldPacket const* QueryQuestInfoResponse::Write() _worldPacket << uint32(Info.Flags); _worldPacket << uint32(Info.FlagsEx); _worldPacket << uint32(Info.FlagsEx2); + _worldPacket << uint32(Info.FlagsEx3); for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) { @@ -368,9 +369,7 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestGiverOfferReward const& offer) data << offer.Rewards; // QuestRewards data << int32(offer.Emotes.size()); data << offer.QuestGiverGUID; - data << int32(offer.QuestFlags[0]); // Flags - data << int32(offer.QuestFlags[1]); // FlagsEx - data << int32(offer.QuestFlags[2]); // FlagsEx2 + data.append(offer.QuestFlags); data << int32(offer.QuestGiverCreatureID); data << int32(offer.QuestID); data << int32(offer.SuggestedPartyMembers); @@ -467,9 +466,7 @@ WorldPacket const* QuestGiverQuestDetails::Write() _worldPacket << int32(PortraitGiverMount); _worldPacket << int32(PortraitGiverModelSceneID); _worldPacket << int32(PortraitTurnIn); - _worldPacket << uint32(QuestFlags[0]); // Flags - _worldPacket << uint32(QuestFlags[1]); // FlagsEx - _worldPacket << uint32(QuestFlags[2]); // FlagsEx + _worldPacket.append(QuestFlags); _worldPacket << int32(SuggestedPartyMembers); _worldPacket << uint32(LearnSpells.size()); _worldPacket << uint32(DescEmotes.size()); @@ -532,9 +529,7 @@ WorldPacket const* QuestGiverRequestItems::Write() _worldPacket << int32(Collect.size()); _worldPacket << int32(Currency.size()); _worldPacket << QuestGiverGUID; - _worldPacket << uint32(QuestFlags[0]); - _worldPacket << uint32(QuestFlags[1]); - _worldPacket << uint32(QuestFlags[2]); + _worldPacket.append(QuestFlags); _worldPacket << int32(StatusFlags); _worldPacket << int32(QuestGiverCreatureID); _worldPacket << int32(QuestID); @@ -774,15 +769,11 @@ ByteBuffer& operator<<(ByteBuffer& data, PlayerChoiceResponseMawPower const& pla data << int32(playerChoiceResponseMawPower.SpellID); data << int32(playerChoiceResponseMawPower.MaxStacks); data.WriteBit(playerChoiceResponseMawPower.Rarity.has_value()); - data.WriteBit(playerChoiceResponseMawPower.RarityColor.has_value()); data.FlushBits(); if (playerChoiceResponseMawPower.Rarity) data << int32(*playerChoiceResponseMawPower.Rarity); - if (playerChoiceResponseMawPower.RarityColor) - data << uint32(*playerChoiceResponseMawPower.RarityColor); - return data; } @@ -840,9 +831,11 @@ WorldPacket const* DisplayPlayerChoice::Write() _worldPacket << Duration; _worldPacket.WriteBits(Question.length(), 8); _worldPacket.WriteBits(PendingChoiceText.length(), 8); - _worldPacket.WriteBit(CloseChoiceFrame); + _worldPacket.WriteBit(InfiniteRange); _worldPacket.WriteBit(HideWarboardHeader); _worldPacket.WriteBit(KeepOpenAfterChoice); + _worldPacket.WriteBit(Unknown_1115_1); + _worldPacket.WriteBit(Unknown_1115_2); _worldPacket.FlushBits(); for (PlayerChoiceResponse const& response : Responses) diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 5a6e0e9be6f..b388f4ecc66 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -148,6 +148,7 @@ namespace WorldPackets uint32 Flags = 0; uint32 FlagsEx = 0; uint32 FlagsEx2 = 0; + uint32 FlagsEx3 = 0; int32 POIContinent = 0; float POIx = 0.0f; float POIy = 0.0f; @@ -315,7 +316,7 @@ namespace WorldPackets int32 SuggestedPartyMembers = 0; QuestRewards Rewards; std::vector<QuestDescEmote> Emotes; - std::array<int32, 3> QuestFlags = { }; + std::array<int32, 4> QuestFlags = { }; int32 QuestInfoID = 0; }; @@ -414,7 +415,7 @@ namespace WorldPackets ObjectGuid InformUnit; int32 QuestID = 0; int32 QuestPackageID = 0; - uint32 QuestFlags[3] = { }; + std::array<uint32, 4> QuestFlags = { }; int32 SuggestedPartyMembers = 0; QuestRewards Rewards; std::vector<QuestObjectiveSimple> Objectives; @@ -478,7 +479,7 @@ namespace WorldPackets std::vector<QuestCurrency> Currency; int32 StatusFlags = 0; int32 QuestInfoID = 0; - uint32 QuestFlags[3] = { }; + std::array<uint32, 4> QuestFlags = { }; std::string QuestTitle; std::string CompletionText; std::vector<ConditionalQuestText> ConditionalCompletionText; @@ -728,7 +729,6 @@ namespace WorldPackets int32 Unused901_1 = 0; int32 TypeArtFileID = 0; Optional<int32> Rarity; - Optional<uint32> RarityColor; int32 Unused901_2 = 0; int32 SpellID = 0; int32 MaxStacks = 0; @@ -773,9 +773,11 @@ namespace WorldPackets std::string_view Question; std::string_view PendingChoiceText; std::vector<PlayerChoiceResponse> Responses; - bool CloseChoiceFrame = false; + bool InfiniteRange = false; bool HideWarboardHeader = false; bool KeepOpenAfterChoice = false; + bool Unknown_1115_1 = false; + bool Unknown_1115_2 = false; }; class ChoiceResponse final : public ClientPacket diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index e7bb499d85b..63456d61402 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -388,6 +388,7 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData) data << spellCastData.Visual; data << uint32(spellCastData.CastFlags); data << uint32(spellCastData.CastFlagsEx); + data << uint32(spellCastData.CastFlagsEx2); data << uint32(spellCastData.CastTime); data << spellCastData.MissileTrajectory; data << int32(spellCastData.AmmoDisplayID); @@ -984,14 +985,15 @@ MirrorImageComponentedData::~MirrorImageComponentedData() = default; WorldPacket const* MirrorImageComponentedData::Write() { _worldPacket << UnitGUID; - _worldPacket << int32(DisplayID); - _worldPacket << int32(SpellVisualKitID); + _worldPacket << int32(ChrModelID); _worldPacket << uint8(RaceID); _worldPacket << uint8(Gender); _worldPacket << uint8(ClassID); _worldPacket << uint32(Customizations.size()); _worldPacket << GuildGUID; _worldPacket << uint32(ItemDisplayID.size()); + _worldPacket << int32(SpellVisualKitID); + _worldPacket << int32(Unused_1115); for (Character::ChrCustomizationChoice const& customization : Customizations) _worldPacket << customization; diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 5893496f13d..78af3cccc3b 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -361,6 +361,7 @@ namespace WorldPackets SpellCastVisual Visual; uint32 CastFlags = 0; uint32 CastFlagsEx = 0; + uint32 CastFlagsEx2 = 0; uint32 CastTime = 0; std::vector<ObjectGuid> HitTargets; std::vector<ObjectGuid> MissTargets; @@ -989,8 +990,9 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid UnitGUID; - int32 DisplayID = 0; + int32 ChrModelID = 0; int32 SpellVisualKitID = 0; + int32 Unused_1115 = 0; uint8 RaceID = 0; uint8 Gender = 0; uint8 ClassID = 0; diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index e8c2f899349..43631b60dcd 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -150,7 +150,6 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << Bits<1>(GroupFinderEnabled); _worldPacket << Bits<1>(IsPremadeGroupEnabled); - _worldPacket << Bits<1>(UseActivePlayerDataQuestCompleted); _worldPacket << Bits<1>(false); // unused 10.2.7 _worldPacket << Bits<1>(GuildEventsEditsEnabled); _worldPacket << Bits<1>(GuildTradeSkillsEnabled); @@ -158,8 +157,8 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << Bits<1>(BNSendWhisperUseV2Services); _worldPacket << Bits<1>(BNSendGameDataUseV2Services); _worldPacket << Bits<1>(IsAccountCurrencyTransferEnabled); - _worldPacket << Bits<1>(false); // unused 11.0.7 + _worldPacket << Bits<1>(LobbyMatchmakerQueueFromMainlineEnabled); _worldPacket << Bits<1>(CanSendLobbyMatchmakerPartyCustomizations); _worldPacket << Bits<1>(AddonProfilerEnabled); diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index 405f96bbd9a..d01babbb2a1 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -172,7 +172,6 @@ namespace WorldPackets bool SellAllJunkEnabled = false; bool GroupFinderEnabled = true; // classic only bool IsPremadeGroupEnabled = true; // classic only - bool UseActivePlayerDataQuestCompleted = false; ///< Uses ActivePlayerData::QuestCompleted (legacy) to store completed quest bits instead of ActivePlayerData::BitVectors[9] bool GuildEventsEditsEnabled = true; bool GuildTradeSkillsEnabled = true; bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 3db08889b41..9cabcfbfc53 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -307,6 +307,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_CHAT_CHANNEL_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_KICK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); + DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_PASSWORD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPassword); @@ -315,6 +316,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNBAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNSILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); + DEFINE_HANDLER(CMSG_CHAT_DROP_CAUTIONARY_CHAT_MESSAGE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHAT_JOIN_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleJoinChannel); DEFINE_HANDLER(CMSG_CHAT_LEAVE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveChannel); DEFINE_HANDLER(CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_INSTANCE_CHAT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -335,6 +337,8 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_CHAT_REGISTER_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddonRegisteredPrefixesOpcode); DEFINE_HANDLER(CMSG_CHAT_REPORT_FILTERED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHAT_REPORT_IGNORED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatIgnoredOpcode); + DEFINE_HANDLER(CMSG_CHAT_SEND_CAUTIONARY_CHANNEL_MESSAGE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CHAT_SEND_CAUTIONARY_CHAT_MESSAGE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUnregisterAllAddonPrefixesOpcode); DEFINE_HANDLER(CMSG_CHECK_CHARACTER_NAME_AVAILABILITY, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCheckCharacterNameAvailability); DEFINE_HANDLER(CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCheckIsAdventureMapPoiValid); @@ -532,6 +536,10 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_GUILD_QUERY_NEWS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryNews); DEFINE_HANDLER(CMSG_GUILD_QUERY_RECIPES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GUILD_REPLACE_GUILD_MASTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildReplaceGuildMaster); + DEFINE_HANDLER(CMSG_GUILD_REQUEST_RENAME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_GUILD_REQUEST_RENAME_NAME_CHECK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_GUILD_REQUEST_RENAME_REFUND, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_GUILD_REQUEST_RENAME_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GUILD_SET_ACHIEVEMENT_TRACKING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetAchievementTracking); DEFINE_HANDLER(CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetFocusedAchievement); DEFINE_HANDLER(CMSG_GUILD_SET_GUILD_MASTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetGuildMaster); @@ -727,6 +735,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_PARTY_UNINVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePartyUninviteOpcode); DEFINE_HANDLER(CMSG_PERFORM_ITEM_INTERACTION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_ITEMS_REFRESHED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_PURCHASE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PERKS_PROGRAM_REQUEST_REFUND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -822,9 +831,6 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_REPAIR_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRepairItemOpcode); DEFINE_HANDLER(CMSG_REPLACE_TROPHY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPOP_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepopRequest); - DEFINE_HANDLER(CMSG_REPORT_CLIENT_VARIABLES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_REPORT_ENABLED_ADDONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPORT_PVP_PLAYER_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportPvPAFK); DEFINE_HANDLER(CMSG_REPORT_SERVER_LAG, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REPORT_STUCK_IN_COMBAT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -1232,6 +1238,8 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAPTURE_POINT_REMOVED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAS_REFRESH_REMOTE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAUTIONARY_CHANNEL_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAUTIONARY_CHAT_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAIN_MISSILE_BOUNCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1389,6 +1397,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_EQUIPMENT_SET_ID, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_EXPECTED_SPAM_RECORDS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_EXPLORATION_EXPERIENCE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_EXPORT_ACCOUNT_PROFILE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_EXTERNAL_TRANSACTION_ID_GENERATED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FACTION_BONUS_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FAILED_PLAYER_CONDITION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1570,6 +1579,10 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PARTY_STATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RANKS, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RENAME_NAME_CHECK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RENAME_REFUND_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RENAME_REQUESTED_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RENAME_STATUS_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REPUTATION_REACTION_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_REWARD_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index c24e1633a20..fb6bab28936 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -40,38 +40,38 @@ constexpr uint16 UNKNOWN_OPCODE = 0xBADD; // special marker value for uninitia enum OpcodeClient : uint32 { - CMSG_ABANDON_NPE_RESPONSE = 0x310299, + CMSG_ABANDON_NPE_RESPONSE = 0x31029A, CMSG_ACCEPT_GUILD_INVITE = 0x360029, - CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x31025A, - CMSG_ACCEPT_SOCIAL_CONTRACT = 0x360174, + CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x31025B, + CMSG_ACCEPT_SOCIAL_CONTRACT = 0x360172, CMSG_ACCEPT_TRADE = 0x310004, CMSG_ACCEPT_WARGAME_INVITE = 0x36000C, - CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x3102DB, - CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x3102DC, - CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x360160, + CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x3102DD, + CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x3102DE, + CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x36015E, CMSG_ACCOUNT_STORE_BEGIN_PURCHASE_OR_REFUND = 0x3600BE, - CMSG_ACTIVATE_SOULBIND = 0x310288, + CMSG_ACTIVATE_SOULBIND = 0x310289, CMSG_ACTIVATE_TAXI = 0x32003E, CMSG_ADDON_LIST = 0x360004, CMSG_ADD_ACCOUNT_COSMETIC = 0x310170, CMSG_ADD_BATTLENET_FRIEND = 0x360084, - CMSG_ADD_FRIEND = 0x3600FB, - CMSG_ADD_IGNORE = 0x3600FF, + CMSG_ADD_FRIEND = 0x3600FC, + CMSG_ADD_IGNORE = 0x360100, CMSG_ADD_TOY = 0x31016F, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3100B4, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x31028B, - CMSG_ADVENTURE_MAP_START_QUEST = 0x31022B, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3100B3, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x31028C, + CMSG_ADVENTURE_MAP_START_QUEST = 0x31022C, CMSG_ALTER_APPEARANCE = 0x32008F, CMSG_AREA_SPIRIT_HEALER_QUERY = 0x320043, CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x320044, - CMSG_AREA_TRIGGER = 0x310087, + CMSG_AREA_TRIGGER = 0x310086, CMSG_ARTIFACT_ADD_POWER = 0x310056, CMSG_ARTIFACT_SET_APPEARANCE = 0x310058, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3100C0, - CMSG_ATTACK_STOP = 0x31011E, - CMSG_ATTACK_SWING = 0x31011D, - CMSG_AUCTIONABLE_TOKEN_SELL = 0x360111, - CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x360112, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3100BF, + CMSG_ATTACK_STOP = 0x31011D, + CMSG_ATTACK_SWING = 0x31011C, + CMSG_AUCTIONABLE_TOKEN_SELL = 0x360112, + CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x360113, CMSG_AUCTION_BROWSE_QUERY = 0x320063, CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x32006B, CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x32006A, @@ -87,47 +87,47 @@ enum OpcodeClient : uint32 CMSG_AUCTION_REPLICATE_ITEMS = 0x320061, CMSG_AUCTION_SELL_COMMODITY = 0x32006C, CMSG_AUCTION_SELL_ITEM = 0x32005F, - CMSG_AUCTION_SET_FAVORITE_ITEM = 0x360161, + CMSG_AUCTION_SET_FAVORITE_ITEM = 0x36015F, CMSG_AUTH_CONTINUED_SESSION = 0x370002, CMSG_AUTH_SESSION = 0x370001, CMSG_AUTOBANK_ITEM = 0x330003, CMSG_AUTOBANK_REAGENT = 0x330005, CMSG_AUTOSTORE_BANK_ITEM = 0x330002, CMSG_AUTOSTORE_BANK_REAGENT = 0x330004, - CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x3102E5, + CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x3102E7, CMSG_AUTO_EQUIP_ITEM = 0x330006, CMSG_AUTO_EQUIP_ITEM_SLOT = 0x33000B, CMSG_AUTO_GUILD_BANK_ITEM = 0x32004A, CMSG_AUTO_STORE_BAG_ITEM = 0x330007, CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x320053, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x310256, - CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x310237, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x310258, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x310257, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x310257, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x310238, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x310259, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x310258, CMSG_BANKER_ACTIVATE = 0x320046, CMSG_BATTLEFIELD_LEAVE = 0x31001F, CMSG_BATTLEFIELD_LIST = 0x31002A, CMSG_BATTLEFIELD_PORT = 0x3200C5, - CMSG_BATTLEMASTER_HELLO = 0x31018D, + CMSG_BATTLEMASTER_HELLO = 0x31018E, CMSG_BATTLEMASTER_JOIN = 0x3200BC, CMSG_BATTLEMASTER_JOIN_ARENA = 0x3200BD, CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3200C3, CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ = 0x3200BF, CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3200BE, CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3200C0, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x3600FE, - CMSG_BATTLENET_REQUEST = 0x36011F, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x3600F8, - CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x36013E, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x3600F7, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x3600EE, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x360164, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x3600E5, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x3600E6, - CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x360137, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x360133, - CMSG_BATTLE_PAY_START_PURCHASE = 0x3600F6, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36011D, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x3600FF, + CMSG_BATTLENET_REQUEST = 0x360120, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x3600F9, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x36013C, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x3600F8, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x3600EF, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x360162, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x3600E6, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x3600E7, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x360135, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x360131, + CMSG_BATTLE_PAY_START_PURCHASE = 0x3600F7, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36011E, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x2B0002, CMSG_BATTLE_PET_DELETE_PET = 0x36004F, CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x360050, @@ -137,14 +137,14 @@ enum OpcodeClient : uint32 CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x360057, CMSG_BATTLE_PET_SET_FLAGS = 0x36005A, CMSG_BATTLE_PET_SUMMON = 0x360053, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x310091, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x310090, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x310090, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31008F, CMSG_BEGIN_TRADE = 0x310001, CMSG_BINDER_ACTIVATE = 0x320045, CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3200CD, CMSG_BLACK_MARKET_OPEN = 0x3200CB, CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3200CC, - CMSG_BONUS_ROLL = 0x310259, + CMSG_BONUS_ROLL = 0x31025A, CMSG_BUG_REPORT = 0x3600AF, CMSG_BUSY_TRADE = 0x310002, CMSG_BUY_ACCOUNT_BANK_TAB = 0x320122, @@ -152,7 +152,7 @@ enum OpcodeClient : uint32 CMSG_BUY_BANK_SLOT = 0x320047, CMSG_BUY_ITEM = 0x320036, CMSG_BUY_REAGENT_BANK = 0x320048, - CMSG_CAGE_BATTLE_PET = 0x3100A4, + CMSG_CAGE_BATTLE_PET = 0x3100A3, CMSG_CALENDAR_ADD_EVENT = 0x3600A7, CMSG_CALENDAR_COMMUNITY_INVITE = 0x36009B, CMSG_CALENDAR_COMPLAIN = 0x3600A3, @@ -173,98 +173,102 @@ enum OpcodeClient : uint32 CMSG_CANCEL_CAST = 0x310176, CMSG_CANCEL_CHANNELLING = 0x310137, CMSG_CANCEL_GROWTH_AURA = 0x31013F, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3100CD, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3100CC, CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x310059, CMSG_CANCEL_MOUNT_AURA = 0x310152, CMSG_CANCEL_QUEUED_SPELL = 0x31002B, CMSG_CANCEL_TEMP_ENCHANTMENT = 0x32008C, CMSG_CANCEL_TRADE = 0x310006, CMSG_CAN_DUEL = 0x36008C, - CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x360132, + CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x360130, CMSG_CAST_SPELL = 0x310173, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x2E0002, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x31020F, - CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x310210, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3101F0, - CMSG_CHANGE_REALM_TICKET = 0x360124, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x310210, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x310211, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3101F1, + CMSG_CHANGE_REALM_TICKET = 0x360125, CMSG_CHANGE_SUB_GROUP = 0x360076, - CMSG_CHARACTER_CHECK_UPGRADE = 0x3600F1, - CMSG_CHARACTER_RENAME_REQUEST = 0x3600EC, - CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x3600EF, - CMSG_CHARACTER_UPGRADE_START = 0x3600F0, + CMSG_CHARACTER_CHECK_UPGRADE = 0x3600F2, + CMSG_CHARACTER_RENAME_REQUEST = 0x3600ED, + CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x3600F0, + CMSG_CHARACTER_UPGRADE_START = 0x3600F1, CMSG_CHAR_CUSTOMIZE = 0x3600B6, CMSG_CHAR_DELETE = 0x3600C8, CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3600BC, - CMSG_CHAT_ADDON_MESSAGE = 0x2D0026, - CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x2D0027, - CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x2D002E, - CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x2D001B, - CMSG_CHAT_CHANNEL_BAN = 0x2D0019, - CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x2D001E, - CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x2D000E, - CMSG_CHAT_CHANNEL_INVITE = 0x2D0017, - CMSG_CHAT_CHANNEL_KICK = 0x2D0018, - CMSG_CHAT_CHANNEL_LIST = 0x2D000D, - CMSG_CHAT_CHANNEL_MODERATOR = 0x2D0013, - CMSG_CHAT_CHANNEL_OWNER = 0x2D0011, - CMSG_CHAT_CHANNEL_PASSWORD = 0x2D000F, - CMSG_CHAT_CHANNEL_SET_OWNER = 0x2D0010, - CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x2D001C, - CMSG_CHAT_CHANNEL_UNBAN = 0x2D001A, - CMSG_CHAT_CHANNEL_UNMODERATOR = 0x2D0014, - CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x2D001D, + CMSG_CHAT_ADDON_MESSAGE = 0x2D002A, + CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x2D002B, + CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x2D0032, + CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x2D001F, + CMSG_CHAT_CHANNEL_BAN = 0x2D001D, + CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x2D0022, + CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x2D0012, + CMSG_CHAT_CHANNEL_INVITE = 0x2D001B, + CMSG_CHAT_CHANNEL_KICK = 0x2D001C, + CMSG_CHAT_CHANNEL_LIST = 0x2D0011, + CMSG_CHAT_CHANNEL_MODERATE = 0x2D0016, + CMSG_CHAT_CHANNEL_MODERATOR = 0x2D0017, + CMSG_CHAT_CHANNEL_OWNER = 0x2D0015, + CMSG_CHAT_CHANNEL_PASSWORD = 0x2D0013, + CMSG_CHAT_CHANNEL_SET_OWNER = 0x2D0014, + CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x2D0020, + CMSG_CHAT_CHANNEL_UNBAN = 0x2D001E, + CMSG_CHAT_CHANNEL_UNMODERATOR = 0x2D0018, + CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x2D0021, + CMSG_CHAT_DROP_CAUTIONARY_CHAT_MESSAGE = 0x2D000A, CMSG_CHAT_JOIN_CHANNEL = 0x2D0000, CMSG_CHAT_LEAVE_CHANNEL = 0x2D0001, - CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_INSTANCE_CHAT = 0x2D002D, - CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_PARTY = 0x2D002C, - CMSG_CHAT_MESSAGE_AFK = 0x2D000B, + CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_INSTANCE_CHAT = 0x2D0031, + CMSG_CHAT_LOBBY_MATCHMAKER_MESSAGE_PARTY = 0x2D0030, + CMSG_CHAT_MESSAGE_AFK = 0x2D000F, CMSG_CHAT_MESSAGE_CHANNEL = 0x2D0007, - CMSG_CHAT_MESSAGE_DND = 0x2D000C, - CMSG_CHAT_MESSAGE_EMOTE = 0x2D0020, - CMSG_CHAT_MESSAGE_GUILD = 0x2D0009, - CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x2D0024, - CMSG_CHAT_MESSAGE_OFFICER = 0x2D000A, - CMSG_CHAT_MESSAGE_PARTY = 0x2D0022, - CMSG_CHAT_MESSAGE_RAID = 0x2D0023, - CMSG_CHAT_MESSAGE_RAID_WARNING = 0x2D0025, - CMSG_CHAT_MESSAGE_SAY = 0x2D001F, + CMSG_CHAT_MESSAGE_DND = 0x2D0010, + CMSG_CHAT_MESSAGE_EMOTE = 0x2D0024, + CMSG_CHAT_MESSAGE_GUILD = 0x2D000D, + CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x2D0028, + CMSG_CHAT_MESSAGE_OFFICER = 0x2D000E, + CMSG_CHAT_MESSAGE_PARTY = 0x2D0026, + CMSG_CHAT_MESSAGE_RAID = 0x2D0027, + CMSG_CHAT_MESSAGE_RAID_WARNING = 0x2D0029, + CMSG_CHAT_MESSAGE_SAY = 0x2D0023, CMSG_CHAT_MESSAGE_WHISPER = 0x2D0008, - CMSG_CHAT_MESSAGE_YELL = 0x2D0021, + CMSG_CHAT_MESSAGE_YELL = 0x2D0025, CMSG_CHAT_REGISTER_ADDON_PREFIXES = 0x2D0005, CMSG_CHAT_REPORT_FILTERED = 0x2D0004, CMSG_CHAT_REPORT_IGNORED = 0x2D0003, + CMSG_CHAT_SEND_CAUTIONARY_CHANNEL_MESSAGE = 0x2D000B, + CMSG_CHAT_SEND_CAUTIONARY_CHAT_MESSAGE = 0x2D0009, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x2D0006, CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x36006F, - CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x31010F, + CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x31010E, CMSG_CHOICE_RESPONSE = 0x31017B, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x310287, - CMSG_CLAIM_WEEKLY_REWARD = 0x310264, - CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3102C0, - CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3100C4, - CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3102C2, - CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3102BF, - CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3102BE, - CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x3102C3, - CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3100C3, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x310288, + CMSG_CLAIM_WEEKLY_REWARD = 0x310265, + CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3102C2, + CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3100C3, + CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3102C4, + CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3102C1, + CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3102C0, + CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x3102C5, + CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3100C2, CMSG_CLEAR_NEW_APPEARANCE = 0x2B0005, CMSG_CLEAR_RAID_MARKER = 0x310052, CMSG_CLEAR_TRADE_ITEM = 0x310008, CMSG_CLIENT_PORT_GRAVEYARD = 0x3200C7, CMSG_CLOSE_INTERACTION = 0x320025, CMSG_CLOSE_QUEST_CHOICE = 0x31017C, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x31028F, - CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x3102C4, - CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x360149, - CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x360147, - CMSG_CLUB_FINDER_POST = 0x360144, - CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x36014B, - CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x360145, - CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x360146, - CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x36014A, - CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x36014C, - CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x360148, - CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x360167, - CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x360121, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x310290, + CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x3102C6, + CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x360147, + CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x360145, + CMSG_CLUB_FINDER_POST = 0x360142, + CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x360149, + CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x360143, + CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x360144, + CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x360148, + CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x36014A, + CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x360146, + CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x360165, + CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x360122, CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x36005D, CMSG_COMMENTATOR_ENABLE = 0x36001C, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x360020, @@ -272,30 +276,30 @@ enum OpcodeClient : uint32 CMSG_COMMENTATOR_GET_MAP_INFO = 0x36001D, CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x36001F, CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x36001E, - CMSG_COMMENTATOR_SPECTATE = 0x360165, + CMSG_COMMENTATOR_SPECTATE = 0x360163, CMSG_COMMENTATOR_START_WARGAME = 0x36001B, - CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36010F, - CMSG_COMMERCE_TOKEN_GET_LOG = 0x360119, - CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x360110, + CMSG_COMMERCE_TOKEN_GET_COUNT = 0x360110, + CMSG_COMMERCE_TOKEN_GET_LOG = 0x36011A, + CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x360111, CMSG_COMPLAINT = 0x360096, CMSG_COMPLETE_CINEMATIC = 0x3200E5, CMSG_COMPLETE_MOVIE = 0x320077, CMSG_CONFIRM_ARTIFACT_RESPEC = 0x310057, - CMSG_CONFIRM_PROFESSION_RESPEC = 0x3100C7, - CMSG_CONFIRM_RESPEC_WIPE = 0x3100C6, + CMSG_CONFIRM_PROFESSION_RESPEC = 0x3100C6, + CMSG_CONFIRM_RESPEC_WIPE = 0x3100C5, CMSG_CONNECT_TO_FAILED = 0x360000, - CMSG_CONSUMABLE_TOKEN_BUY = 0x360114, - CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x360115, - CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x360113, - CMSG_CONSUMABLE_TOKEN_REDEEM = 0x360117, - CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x360118, - CMSG_CONTENT_TRACKING_START_TRACKING = 0x3102D4, - CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x3102D5, + CMSG_CONSUMABLE_TOKEN_BUY = 0x360115, + CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x360116, + CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x360114, + CMSG_CONSUMABLE_TOKEN_REDEEM = 0x360118, + CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x360119, + CMSG_CONTENT_TRACKING_START_TRACKING = 0x3102D6, + CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x3102D7, CMSG_CONTRIBUTION_CONTRIBUTE = 0x3200FA, CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x3200FB, CMSG_CONVERSATION_CINEMATIC_READY = 0x3200E7, CMSG_CONVERSATION_LINE_STARTED = 0x3200E6, - CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x3102E4, + CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x3102E6, CMSG_CONVERT_RAID = 0x360078, CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x32010E, CMSG_CRAFTING_ORDER_CANCEL = 0x32011A, @@ -310,15 +314,15 @@ enum OpcodeClient : uint32 CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x32011C, CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x32011D, CMSG_CREATE_CHARACTER = 0x36006E, - CMSG_CREATE_SHIPMENT = 0x3101D9, + CMSG_CREATE_SHIPMENT = 0x3101DA, CMSG_DB_QUERY_BULK = 0x360010, CMSG_DECLINE_GUILD_INVITES = 0x3200B9, CMSG_DECLINE_PETITION = 0x3200D4, CMSG_DELETE_EQUIPMENT_SET = 0x3200A5, CMSG_DELVE_TELEPORT_OUT = 0x320129, - CMSG_DEL_FRIEND = 0x3600FC, - CMSG_DEL_IGNORE = 0x360100, - CMSG_DEPOSIT_REAGENT_BANK = 0x310219, + CMSG_DEL_FRIEND = 0x3600FD, + CMSG_DEL_IGNORE = 0x360101, + CMSG_DEPOSIT_REAGENT_BANK = 0x31021A, CMSG_DESTROY_ITEM = 0x310169, CMSG_DF_BOOT_PLAYER_VOTE = 0x360044, CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x360036, @@ -332,65 +336,65 @@ enum OpcodeClient : uint32 CMSG_DF_TELEPORT = 0x360045, CMSG_DISCARDED_TIME_SYNC_ACKS = 0x34005E, CMSG_DISMISS_CRITTER = 0x320093, - CMSG_DO_COUNTDOWN = 0x360143, - CMSG_DO_MASTER_LOOT_ROLL = 0x3100CC, + CMSG_DO_COUNTDOWN = 0x360141, + CMSG_DO_MASTER_LOOT_ROLL = 0x3100CB, CMSG_DO_READY_CHECK = 0x36005E, CMSG_DUEL_RESPONSE = 0x32007C, - CMSG_EJECT_PASSENGER = 0x310104, + CMSG_EJECT_PASSENGER = 0x310103, CMSG_EMOTE = 0x3200E1, CMSG_ENABLE_NAGLE = 0x370007, CMSG_ENABLE_TAXI_NODE = 0x32003C, - CMSG_ENGINE_SURVEY = 0x36010E, + CMSG_ENGINE_SURVEY = 0x36010F, CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x370003, CMSG_ENUM_CHARACTERS = 0x360014, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x360108, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x360109, CMSG_FAR_SIGHT = 0x320082, CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31005E, CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31005D, CMSG_GAME_OBJ_REPORT_USE = 0x320089, CMSG_GAME_OBJ_USE = 0x320088, - CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3101D4, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x3101BA, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x3101A7, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x31020B, - CMSG_GARRISON_COMPLETE_MISSION = 0x3101FD, - CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3101D5, - CMSG_GARRISON_GENERATE_RECRUITS = 0x3101BD, - CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3101CC, - CMSG_GARRISON_GET_MAP_DATA = 0x3101D3, - CMSG_GARRISON_GET_MISSION_REWARD = 0x31022F, - CMSG_GARRISON_LEARN_TALENT = 0x3101C8, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3101FF, - CMSG_GARRISON_PURCHASE_BUILDING = 0x3101A3, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3101BF, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x3101F4, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x3101BB, - CMSG_GARRISON_RENAME_FOLLOWER = 0x3101BC, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x3101A2, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3101D7, - CMSG_GARRISON_RESEARCH_TALENT = 0x3101C0, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x3101A4, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x3101B8, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x3101B0, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3101BE, - CMSG_GARRISON_SOCKET_TALENT = 0x31029C, - CMSG_GARRISON_START_MISSION = 0x3101FC, - CMSG_GARRISON_SWAP_BUILDINGS = 0x3101A8, + CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3101D5, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x3101BB, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x3101A8, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x31020C, + CMSG_GARRISON_COMPLETE_MISSION = 0x3101FE, + CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3101D6, + CMSG_GARRISON_GENERATE_RECRUITS = 0x3101BE, + CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3101CD, + CMSG_GARRISON_GET_MAP_DATA = 0x3101D4, + CMSG_GARRISON_GET_MISSION_REWARD = 0x310230, + CMSG_GARRISON_LEARN_TALENT = 0x3101C9, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x310200, + CMSG_GARRISON_PURCHASE_BUILDING = 0x3101A4, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3101C0, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x3101F5, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x3101BC, + CMSG_GARRISON_RENAME_FOLLOWER = 0x3101BD, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x3101A3, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3101D8, + CMSG_GARRISON_RESEARCH_TALENT = 0x3101C1, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x3101A5, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x3101B9, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x3101B1, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3101BF, + CMSG_GARRISON_SOCKET_TALENT = 0x31029D, + CMSG_GARRISON_START_MISSION = 0x3101FD, + CMSG_GARRISON_SWAP_BUILDINGS = 0x3101A9, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x360013, - CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x3600E0, - CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x36015F, - CMSG_GET_GARRISON_INFO = 0x31019D, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x3600E1, + CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x36015D, + CMSG_GET_GARRISON_INFO = 0x31019E, CMSG_GET_ITEM_PURCHASE_DATA = 0x3200CF, - CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3101D8, + CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3101D9, CMSG_GET_MIRROR_IMAGE_DATA = 0x31016D, CMSG_GET_PVP_OPTIONS_ENABLED = 0x36001A, - CMSG_GET_RAF_ACCOUNT_INFO = 0x36014D, - CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x360190, - CMSG_GET_REMAINING_GAME_TIME = 0x360116, - CMSG_GET_TROPHY_LIST = 0x3101ED, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36010A, - CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36011B, - CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36011C, + CMSG_GET_RAF_ACCOUNT_INFO = 0x36014B, + CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x36018E, + CMSG_GET_REMAINING_GAME_TIME = 0x360117, + CMSG_GET_TROPHY_LIST = 0x3101EE, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36010B, + CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36011C, + CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36011D, CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3600BA, CMSG_GM_TICKET_GET_CASE_STATUS = 0x3600B9, CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3600B8, @@ -430,9 +434,13 @@ enum OpcodeClient : uint32 CMSG_GUILD_QUERY_NEWS = 0x2F000D, CMSG_GUILD_QUERY_RECIPES = 0x2F000B, CMSG_GUILD_REPLACE_GUILD_MASTER = 0x2F001F, + CMSG_GUILD_REQUEST_RENAME = 0x2F0023, + CMSG_GUILD_REQUEST_RENAME_NAME_CHECK = 0x2F0022, + CMSG_GUILD_REQUEST_RENAME_REFUND = 0x2F0024, + CMSG_GUILD_REQUEST_RENAME_STATUS = 0x2F0021, CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x2F0010, CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x2F0011, - CMSG_GUILD_SET_GUILD_MASTER = 0x3600F3, + CMSG_GUILD_SET_GUILD_MASTER = 0x3600F4, CMSG_GUILD_SET_MEMBER_NOTE = 0x2F0013, CMSG_GUILD_SET_RANK_PERMISSIONS = 0x2F0008, CMSG_GUILD_SHIFT_RANK = 0x2F0007, @@ -446,68 +454,68 @@ enum OpcodeClient : uint32 CMSG_INITIATE_TRADE = 0x310000, CMSG_INSPECT = 0x3200C9, CMSG_INSTANCE_LOCK_RESPONSE = 0x3200A6, - CMSG_ISLAND_QUEUE = 0x310260, + CMSG_ISLAND_QUEUE = 0x310261, CMSG_ITEM_PURCHASE_REFUND = 0x3200D0, - CMSG_ITEM_TEXT_QUERY = 0x31020C, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x31008E, + CMSG_ITEM_TEXT_QUERY = 0x31020D, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x31008D, CMSG_JOIN_RATED_BATTLEGROUND = 0x310025, CMSG_KEEP_ALIVE = 0x3600A9, - CMSG_KEYBOUND_OVERRIDE = 0x3100E2, + CMSG_KEYBOUND_OVERRIDE = 0x3100E1, CMSG_LATENCY_REPORT = 0x37000D, CMSG_LEARN_PVP_TALENTS = 0x3200F9, CMSG_LEARN_TALENTS = 0x3200F7, CMSG_LEAVE_GROUP = 0x360073, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31008F, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31008E, CMSG_LFG_LIST_APPLY_TO_GROUP = 0x36003B, CMSG_LFG_LIST_CANCEL_APPLICATION = 0x36003C, CMSG_LFG_LIST_DECLINE_APPLICANT = 0x36003D, CMSG_LFG_LIST_GET_STATUS = 0x360039, CMSG_LFG_LIST_INVITE_APPLICANT = 0x36003E, CMSG_LFG_LIST_INVITE_RESPONSE = 0x36003F, - CMSG_LFG_LIST_JOIN = 0x310254, + CMSG_LFG_LIST_JOIN = 0x310255, CMSG_LFG_LIST_LEAVE = 0x360038, CMSG_LFG_LIST_SEARCH = 0x36003A, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x310255, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x310256, CMSG_LIST_INVENTORY = 0x320033, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x3600E3, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x3600E2, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x3600E1, - CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x3600E4, + CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x3600E4, + CMSG_LIVE_REGION_CHARACTER_COPY = 0x3600E3, + CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x3600E2, + CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x3600E5, CMSG_LOADING_SCREEN_NOTIFY = 0x360024, - CMSG_LOAD_SELECTED_TROPHY = 0x3101EE, - CMSG_LOBBY_MATCHMAKER_ABANDON_QUEUE = 0x360172, - CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x360169, - CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x36017B, - CMSG_LOBBY_MATCHMAKER_ENTER_QUEUE = 0x360170, - CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x36016C, - CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x360168, - CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x36016B, - CMSG_LOBBY_MATCHMAKER_QUEUE_PROPSAL_RESPONSE = 0x360171, - CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x36016A, - CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x36016D, - CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x36016E, + CMSG_LOAD_SELECTED_TROPHY = 0x3101EF, + CMSG_LOBBY_MATCHMAKER_ABANDON_QUEUE = 0x360170, + CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x360167, + CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x360179, + CMSG_LOBBY_MATCHMAKER_ENTER_QUEUE = 0x36016E, + CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x36016A, + CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x360166, + CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x360169, + CMSG_LOBBY_MATCHMAKER_QUEUE_PROPSAL_RESPONSE = 0x36016F, + CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x360168, + CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x36016B, + CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x36016C, CMSG_LOGOUT_CANCEL = 0x320072, CMSG_LOGOUT_INSTANT = 0x320073, CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x320121, CMSG_LOGOUT_REQUEST = 0x320071, CMSG_LOG_DISCONNECT = 0x370005, CMSG_LOG_STREAMING_ERROR = 0x370009, - CMSG_LOOT_ITEM = 0x3100CA, - CMSG_LOOT_MONEY = 0x3100C9, - CMSG_LOOT_RELEASE = 0x3100CE, - CMSG_LOOT_ROLL = 0x3100CF, - CMSG_LOOT_UNIT = 0x3100C8, + CMSG_LOOT_ITEM = 0x3100C9, + CMSG_LOOT_MONEY = 0x3100C8, + CMSG_LOOT_RELEASE = 0x3100CD, + CMSG_LOOT_ROLL = 0x3100CE, + CMSG_LOOT_UNIT = 0x3100C7, CMSG_LOW_LEVEL_RAID1 = 0x3600CC, CMSG_LOW_LEVEL_RAID2 = 0x3200AD, CMSG_MAIL_CREATE_TEXT_ITEM = 0x3200DB, - CMSG_MAIL_DELETE = 0x3100E4, + CMSG_MAIL_DELETE = 0x3100E3, CMSG_MAIL_GET_LIST = 0x3200D6, CMSG_MAIL_MARK_AS_READ = 0x3200DA, CMSG_MAIL_RETURN_TO_SENDER = 0x36007F, CMSG_MAIL_TAKE_ITEM = 0x3200D8, CMSG_MAIL_TAKE_MONEY = 0x3200D7, - CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3100E5, - CMSG_MASTER_LOOT_ITEM = 0x3100CB, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3100E4, + CMSG_MASTER_LOOT_ITEM = 0x3100CA, CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x320054, CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x320051, CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x32004F, @@ -608,45 +616,46 @@ enum OpcodeClient : uint32 CMSG_MOVE_UPDATE_FALL_SPEED = 0x340036, CMSG_MOVE_WATER_WALK_ACK = 0x340039, CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x2E0001, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x310084, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x310083, CMSG_NEXT_CINEMATIC_CAMERA = 0x3200E4, CMSG_OBJECT_UPDATE_FAILED = 0x31002C, CMSG_OBJECT_UPDATE_RESCUED = 0x31002D, - CMSG_OFFER_PETITION = 0x310286, + CMSG_OFFER_PETITION = 0x310287, CMSG_OPENING_CINEMATIC = 0x3200E3, - CMSG_OPEN_ITEM = 0x31020D, - CMSG_OPEN_MISSION_NPC = 0x3101CE, - CMSG_OPEN_SHIPMENT_NPC = 0x3101D6, - CMSG_OPEN_TRADESKILL_NPC = 0x3101E1, + CMSG_OPEN_ITEM = 0x31020E, + CMSG_OPEN_MISSION_NPC = 0x3101CF, + CMSG_OPEN_SHIPMENT_NPC = 0x3101D7, + CMSG_OPEN_TRADESKILL_NPC = 0x3101E2, CMSG_OPT_OUT_OF_LOOT = 0x320090, CMSG_OVERRIDE_SCREEN_FLASH = 0x3200BA, CMSG_PARTY_INVITE = 0x360030, CMSG_PARTY_INVITE_RESPONSE = 0x360032, CMSG_PARTY_UNINVITE = 0x360071, - CMSG_PERFORM_ITEM_INTERACTION = 0x3100ED, - CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x3102AE, + CMSG_PERFORM_ITEM_INTERACTION = 0x3100EC, + CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x3102AF, + CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT = 0x3102B2, CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x2B0012, - CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3102B0, - CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3102B1, - CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3102B2, - CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3102AF, + CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3102B1, + CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3102B3, + CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3102B4, + CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3102B0, CMSG_PETITION_BUY = 0x32005C, - CMSG_PETITION_RENAME_GUILD = 0x3600F4, + CMSG_PETITION_RENAME_GUILD = 0x3600F5, CMSG_PETITION_SHOW_LIST = 0x32005B, CMSG_PETITION_SHOW_SIGNATURES = 0x32005D, CMSG_PET_ABANDON = 0x32001E, CMSG_PET_ABANDON_BY_NUMBER = 0x32001F, CMSG_PET_ACTION = 0x32001C, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x310093, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x310092, CMSG_PET_BATTLE_INPUT = 0x36006B, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3100E3, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x310092, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3100E2, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x310091, CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x36006C, - CMSG_PET_BATTLE_REQUEST_PVP = 0x31008C, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31008D, - CMSG_PET_BATTLE_REQUEST_WILD = 0x31008A, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x310094, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31008B, + CMSG_PET_BATTLE_REQUEST_PVP = 0x31008B, + CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31008C, + CMSG_PET_BATTLE_REQUEST_WILD = 0x310089, + CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x310093, + CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31008A, CMSG_PET_CANCEL_AURA = 0x320020, CMSG_PET_CAST_SPELL = 0x310172, CMSG_PET_RENAME = 0x3600AE, @@ -679,11 +688,11 @@ enum OpcodeClient : uint32 CMSG_QUERY_QUEST_ITEM_USABILITY = 0x310022, CMSG_QUERY_REALM_NAME = 0x3600B3, CMSG_QUERY_SCENARIO_POI = 0x360080, - CMSG_QUERY_SELECTED_WOW_LABS_AREA = 0x3102E9, + CMSG_QUERY_SELECTED_WOW_LABS_AREA = 0x3102EB, CMSG_QUERY_TIME = 0x320070, - CMSG_QUERY_TREASURE_PICKER = 0x310232, + CMSG_QUERY_TREASURE_PICKER = 0x310233, CMSG_QUERY_VOID_STORAGE = 0x31004E, - CMSG_QUERY_WOW_LABS_AREA_INFO = 0x3102EA, + CMSG_QUERY_WOW_LABS_AREA_INFO = 0x3102EC, CMSG_QUEST_CONFIRM_ACCEPT = 0x320030, CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x32002A, CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x32002C, @@ -695,119 +704,116 @@ enum OpcodeClient : uint32 CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x32002F, CMSG_QUEST_GIVER_STATUS_QUERY = 0x32002E, CMSG_QUEST_LOG_REMOVE_QUEST = 0x3200CE, - CMSG_QUEST_POI_QUERY = 0x3600DA, + CMSG_QUEST_POI_QUERY = 0x3600DB, CMSG_QUEST_PUSH_RESULT = 0x320032, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x310278, - CMSG_QUEST_SESSION_REQUEST_START = 0x310277, - CMSG_QUEST_SESSION_REQUEST_STOP = 0x360158, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x310279, + CMSG_QUEST_SESSION_REQUEST_START = 0x310278, + CMSG_QUEST_SESSION_REQUEST_STOP = 0x360156, CMSG_QUEUED_MESSAGES_END = 0x370008, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x360130, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x36012F, - CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x36015D, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x36012E, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x36012D, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x36012E, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x36012D, + CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x36015B, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x36012C, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x36012B, CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x32009E, - CMSG_RAF_CLAIM_NEXT_REWARD = 0x36014E, - CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x360150, - CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x36014F, + CMSG_RAF_CLAIM_NEXT_REWARD = 0x36014C, + CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x36014E, + CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x36014D, CMSG_RANDOM_ROLL = 0x36007E, CMSG_READY_CHECK_RESPONSE = 0x36005F, - CMSG_READ_ITEM = 0x31020E, + CMSG_READ_ITEM = 0x31020F, CMSG_RECLAIM_CORPSE = 0x320075, - CMSG_REMOVE_NEW_ITEM = 0x310236, - CMSG_REMOVE_RAF_RECRUIT = 0x360151, + CMSG_REMOVE_NEW_ITEM = 0x310237, + CMSG_REMOVE_RAF_RECRUIT = 0x36014F, CMSG_REORDER_CHARACTERS = 0x360015, CMSG_REPAIR_ITEM = 0x320086, - CMSG_REPLACE_TROPHY = 0x3101EF, + CMSG_REPLACE_TROPHY = 0x3101F0, CMSG_REPOP_REQUEST = 0x3200C6, - CMSG_REPORT_CLIENT_VARIABLES = 0x36012A, - CMSG_REPORT_ENABLED_ADDONS = 0x360129, - CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36012B, CMSG_REPORT_PVP_PLAYER_AFK = 0x32008E, - CMSG_REPORT_SERVER_LAG = 0x310270, - CMSG_REPORT_STUCK_IN_COMBAT = 0x310271, + CMSG_REPORT_SERVER_LAG = 0x310271, + CMSG_REPORT_STUCK_IN_COMBAT = 0x310272, CMSG_REQUEST_ACCOUNT_DATA = 0x3600C0, - CMSG_REQUEST_AREA_POI_UPDATE = 0x310234, + CMSG_REQUEST_AREA_POI_UPDATE = 0x310235, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x360008, CMSG_REQUEST_CEMETERY_LIST = 0x310023, CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3600B5, - CMSG_REQUEST_COVENANT_CALLINGS = 0x310262, + CMSG_REQUEST_COVENANT_CALLINGS = 0x310263, CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x3200CA, CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS = 0x2B0019, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x31029B, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x31029C, CMSG_REQUEST_GUILD_PARTY_STATE = 0x310054, CMSG_REQUEST_GUILD_REWARDS_LIST = 0x310053, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x310272, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x310273, CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x31017E, - CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3100B8, - CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3100B9, - CMSG_REQUEST_PARTY_ELIGIBILITY_FOR_DELVE_TIERS = 0x3102E8, + CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3100B7, + CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3100B8, + CMSG_REQUEST_PARTY_ELIGIBILITY_FOR_DELVE_TIERS = 0x3102EA, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x360023, CMSG_REQUEST_PARTY_MEMBER_STATS = 0x36007D, CMSG_REQUEST_PET_INFO = 0x320022, CMSG_REQUEST_PLAYED_TIME = 0x31014B, CMSG_REQUEST_PVP_REWARDS = 0x310041, - CMSG_REQUEST_RAID_INFO = 0x3600F5, + CMSG_REQUEST_RAID_INFO = 0x3600F6, CMSG_REQUEST_RATED_PVP_INFO = 0x36000F, - CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x360193, - CMSG_REQUEST_SCHEDULED_AREA_POI_UPDATE = 0x310235, + CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x360191, + CMSG_REQUEST_SCHEDULED_AREA_POI_UPDATE = 0x310236, CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x310042, CMSG_REQUEST_STABLED_PETS = 0x320023, CMSG_REQUEST_STORE_FRONT_INFO_UPDATE = 0x2B001E, - CMSG_REQUEST_VEHICLE_EXIT = 0x3100FF, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x310101, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x310100, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x310102, - CMSG_REQUEST_WEEKLY_REWARDS = 0x310265, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x310233, - CMSG_RESET_CHALLENGE_MODE = 0x3100B6, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3100B7, + CMSG_REQUEST_VEHICLE_EXIT = 0x3100FE, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x310100, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3100FF, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x310101, + CMSG_REQUEST_WEEKLY_REWARDS = 0x310266, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x310234, + CMSG_RESET_CHALLENGE_MODE = 0x3100B5, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3100B6, CMSG_RESET_INSTANCES = 0x360092, CMSG_RESURRECT_RESPONSE = 0x3600AD, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x3101F1, - CMSG_RIDE_VEHICLE_INTERACT = 0x310103, - CMSG_RPE_RESET_CHARACTER = 0x36017E, - CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x360178, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x3101F2, + CMSG_RIDE_VEHICLE_INTERACT = 0x310102, + CMSG_RPE_RESET_CHARACTER = 0x36017C, + CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x360176, CMSG_SAVE_CUF_PROFILES = 0x310037, CMSG_SAVE_EQUIPMENT_SET = 0x3200A4, - CMSG_SAVE_GUILD_EMBLEM = 0x310182, - CMSG_SAVE_PERSONAL_EMBLEM = 0x310183, - CMSG_SCENE_PLAYBACK_CANCELED = 0x3100DF, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x3100DE, - CMSG_SCENE_TRIGGER_EVENT = 0x3100E0, - CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x3102D7, - CMSG_SELECT_WOW_LABS_AREA = 0x3102EB, + CMSG_SAVE_GUILD_EMBLEM = 0x310183, + CMSG_SAVE_PERSONAL_EMBLEM = 0x310184, + CMSG_SCENE_PLAYBACK_CANCELED = 0x3100DE, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x3100DD, + CMSG_SCENE_TRIGGER_EVENT = 0x3100DF, + CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x3102D9, + CMSG_SELECT_WOW_LABS_AREA = 0x3102ED, CMSG_SELF_RES = 0x3200D1, CMSG_SELL_ALL_JUNK_ITEMS = 0x320035, CMSG_SELL_ITEM = 0x320034, - CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x360123, - CMSG_SEND_CONTACT_LIST = 0x3600FA, + CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x360124, + CMSG_SEND_CONTACT_LIST = 0x3600FB, CMSG_SEND_MAIL = 0x360026, - CMSG_SEND_PING_UNIT = 0x3102D9, - CMSG_SEND_PING_WORLD_POINT = 0x3102DA, + CMSG_SEND_PING_UNIT = 0x3102DB, + CMSG_SEND_PING_WORLD_POINT = 0x3102DC, CMSG_SEND_TEXT_EMOTE = 0x320019, CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3600C7, - CMSG_SETUP_WARBAND_GROUPS = 0x36018C, + CMSG_SETUP_WARBAND_GROUPS = 0x36018A, CMSG_SET_ACTION_BAR_TOGGLES = 0x3200D2, CMSG_SET_ACTION_BUTTON = 0x360060, CMSG_SET_ACTIVE_MOVER = 0x340059, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x310190, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x310191, CMSG_SET_ASSISTANT_LEADER = 0x360079, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x310211, - CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x310212, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x310213, - CMSG_SET_CONTACT_NOTES = 0x3600FD, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x310212, + CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x310213, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x310214, + CMSG_SET_CONTACT_NOTES = 0x3600FE, CMSG_SET_CURRENCY_FLAGS = 0x310015, - CMSG_SET_DIFFICULTY_ID = 0x3100E1, + CMSG_SET_DIFFICULTY_ID = 0x3100E0, CMSG_SET_DUNGEON_DIFFICULTY = 0x3600AC, CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x31013A, CMSG_SET_EVERYONE_IS_ASSISTANT = 0x360046, - CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x360131, + CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x36012F, CMSG_SET_FACTION_AT_WAR = 0x320078, CMSG_SET_FACTION_INACTIVE = 0x32007A, CMSG_SET_FACTION_NOT_AT_WAR = 0x320079, CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x310065, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x310215, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x310216, CMSG_SET_LOOT_METHOD = 0x360072, CMSG_SET_LOOT_SPECIALIZATION = 0x3200DF, CMSG_SET_PARTY_ASSIGNMENT = 0x36007B, @@ -817,33 +823,33 @@ enum OpcodeClient : uint32 CMSG_SET_PET_SPECIALIZATION = 0x310013, CMSG_SET_PLAYER_DECLINED_NAMES = 0x3600B2, CMSG_SET_PREFERRED_CEMETERY = 0x310024, - CMSG_SET_PVP = 0x310187, - CMSG_SET_RAID_DIFFICULTY = 0x360106, + CMSG_SET_PVP = 0x310188, + CMSG_SET_RAID_DIFFICULTY = 0x360107, CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x360047, CMSG_SET_ROLE = 0x360005, CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3600B0, CMSG_SET_SELECTION = 0x3200C8, CMSG_SET_SHEATHED = 0x32001A, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x310214, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x310215, CMSG_SET_TAXI_BENCHMARK_MODE = 0x32008D, CMSG_SET_TITLE = 0x310151, CMSG_SET_TRADE_CURRENCY = 0x31000A, CMSG_SET_TRADE_GOLD = 0x310009, CMSG_SET_TRADE_ITEM = 0x310007, - CMSG_SET_USING_PARTY_GARRISON = 0x3101D0, - CMSG_SET_WAR_MODE = 0x310188, + CMSG_SET_USING_PARTY_GARRISON = 0x3101D1, + CMSG_SET_WAR_MODE = 0x310189, CMSG_SET_WATCHED_FACTION = 0x32007B, - CMSG_SHOW_TRADE_SKILL = 0x3600ED, + CMSG_SHOW_TRADE_SKILL = 0x3600EE, CMSG_SIGN_PETITION = 0x3200D3, CMSG_SILENCE_PARTY_TALKER = 0x36007C, - CMSG_SOCIAL_CONTRACT_REQUEST = 0x360173, + CMSG_SOCIAL_CONTRACT_REQUEST = 0x360171, CMSG_SOCKET_GEMS = 0x320085, - CMSG_SORT_ACCOUNT_BANK_BAGS = 0x3102DD, - CMSG_SORT_BAGS = 0x310216, - CMSG_SORT_BANK_BAGS = 0x310217, - CMSG_SORT_REAGENT_BANK_BAGS = 0x310218, + CMSG_SORT_ACCOUNT_BANK_BAGS = 0x3102DF, + CMSG_SORT_BAGS = 0x310217, + CMSG_SORT_BANK_BAGS = 0x310218, + CMSG_SORT_REAGENT_BANK_BAGS = 0x310219, CMSG_SPAWN_TRACKING_UPDATE = 0x310166, - CMSG_SPECTATE_CHANGE = 0x3102D0, + CMSG_SPECTATE_CHANGE = 0x3102D2, CMSG_SPELL_CLICK = 0x320027, CMSG_SPELL_EMPOWER_RELEASE = 0x310138, CMSG_SPELL_EMPOWER_RESTART = 0x310139, @@ -858,7 +864,7 @@ enum OpcodeClient : uint32 CMSG_START_WAR_GAME = 0x36000A, CMSG_STORE_GUILD_BANK_ITEM = 0x32004B, CMSG_SUBMIT_USER_FEEDBACK = 0x3600BF, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x310290, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x310291, CMSG_SUMMON_RESPONSE = 0x360094, CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x360070, CMSG_SURRENDER_ARENA = 0x310020, @@ -870,7 +876,7 @@ enum OpcodeClient : uint32 CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x32004C, CMSG_SWAP_SUB_GROUPS = 0x360077, CMSG_SWAP_VOID_ITEM = 0x310050, - CMSG_TABARD_VENDOR_ACTIVATE = 0x310184, + CMSG_TABARD_VENDOR_ACTIVATE = 0x310185, CMSG_TALK_TO_GOSSIP = 0x320024, CMSG_TAXI_NODE_STATUS_QUERY = 0x32003B, CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x32003D, @@ -880,58 +886,58 @@ enum OpcodeClient : uint32 CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x34005C, CMSG_TIME_SYNC_RESPONSE_FAILED = 0x34005B, CMSG_TOGGLE_DIFFICULTY = 0x360081, - CMSG_TOGGLE_PVP = 0x310186, + CMSG_TOGGLE_PVP = 0x310187, CMSG_TOTEM_DESTROYED = 0x320092, CMSG_TOY_CLEAR_FANFARE = 0x2B0004, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x310231, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x310232, CMSG_TRAINER_BUY_SPELL = 0x320041, CMSG_TRAINER_LIST = 0x320040, - CMSG_TRAITS_COMMIT_CONFIG = 0x3102B8, - CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3102B6, - CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x3102E6, + CMSG_TRAITS_COMMIT_CONFIG = 0x3102BA, + CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3102B8, + CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x3102E8, CMSG_TRANSMOGRIFY_ITEMS = 0x310043, CMSG_TURN_IN_PETITION = 0x3200D5, - CMSG_TUTORIAL = 0x360107, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x310261, + CMSG_TUTORIAL = 0x360108, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x310262, CMSG_UNACCEPT_TRADE = 0x310005, - CMSG_UNDELETE_CHARACTER = 0x360109, + CMSG_UNDELETE_CHARACTER = 0x36010A, CMSG_UNLEARN_SKILL = 0x32007F, CMSG_UNLEARN_SPECIALIZATION = 0x310051, CMSG_UNLOCK_VOID_STORAGE = 0x31004D, - CMSG_UPDATE_AADC_STATUS = 0x360163, + CMSG_UPDATE_AADC_STATUS = 0x360161, CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS = 0x320128, CMSG_UPDATE_ACCOUNT_DATA = 0x3600C1, CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x310175, CMSG_UPDATE_CLIENT_SETTINGS = 0x36008E, - CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3101E2, + CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3101E3, CMSG_UPDATE_MISSILE_TRAJECTORY = 0x340060, CMSG_UPDATE_RAID_TARGET = 0x36007A, CMSG_UPDATE_SPELL_VISUAL = 0x310174, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36011E, - CMSG_UPGRADE_GARRISON = 0x310198, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x31028E, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36011F, + CMSG_UPGRADE_GARRISON = 0x310199, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x31028F, CMSG_USED_FOLLOW = 0x310032, - CMSG_USE_CRITTER_ITEM = 0x310109, + CMSG_USE_CRITTER_ITEM = 0x310108, CMSG_USE_EQUIPMENT_SET = 0x330001, CMSG_USE_ITEM = 0x31016E, CMSG_USE_TOY = 0x310171, - CMSG_VAS_CHECK_TRANSFER_OK = 0x360136, - CMSG_VAS_GET_QUEUE_MINUTES = 0x360135, - CMSG_VAS_GET_SERVICE_STATUS = 0x360134, + CMSG_VAS_CHECK_TRANSFER_OK = 0x360134, + CMSG_VAS_GET_QUEUE_MINUTES = 0x360133, + CMSG_VAS_GET_SERVICE_STATUS = 0x360132, CMSG_VIOLENCE_LEVEL = 0x310030, - CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x36013A, - CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x36013B, - CMSG_VOICE_CHAT_LOGIN = 0x360139, + CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x360138, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x360139, + CMSG_VOICE_CHAT_LOGIN = 0x360137, CMSG_VOID_STORAGE_TRANSFER = 0x31004F, CMSG_WARDEN3_DATA = 0x360018, CMSG_WHO = 0x3600AB, CMSG_WHO_IS = 0x3600AA, - CMSG_WORLD_LOOT_OBJECT_CLICK = 0x3102D3, + CMSG_WORLD_LOOT_OBJECT_CLICK = 0x3102D5, CMSG_WORLD_PORT_RESPONSE = 0x360025, CMSG_WRAP_ITEM = 0x330000, }; -inline constexpr std::size_t NUM_CMSG_OPCODES = 1724; +inline constexpr std::size_t NUM_CMSG_OPCODES = 1732; inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode) { @@ -939,15 +945,15 @@ inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode) switch (opcode >> 16) { case 0x2B: return idInGroup < 31 ? idInGroup + 0 : -1; - case 0x2D: return idInGroup < 47 ? idInGroup + 31 : -1; - case 0x2E: return idInGroup < 3 ? idInGroup + 78 : -1; - case 0x2F: return idInGroup < 33 ? idInGroup + 81 : -1; - case 0x31: return idInGroup < 748 ? idInGroup + 114 : -1; - case 0x32: return idInGroup < 299 ? idInGroup + 862 : -1; - case 0x33: return idInGroup < 12 ? idInGroup + 1161 : -1; - case 0x34: return idInGroup < 132 ? idInGroup + 1173 : -1; - case 0x36: return idInGroup < 404 ? idInGroup + 1305 : -1; - case 0x37: return idInGroup < 15 ? idInGroup + 1709 : -1; + case 0x2D: return idInGroup < 51 ? idInGroup + 31 : -1; + case 0x2E: return idInGroup < 3 ? idInGroup + 82 : -1; + case 0x2F: return idInGroup < 37 ? idInGroup + 85 : -1; + case 0x31: return idInGroup < 750 ? idInGroup + 122 : -1; + case 0x32: return idInGroup < 299 ? idInGroup + 872 : -1; + case 0x33: return idInGroup < 12 ? idInGroup + 1171 : -1; + case 0x34: return idInGroup < 132 ? idInGroup + 1183 : -1; + case 0x36: return idInGroup < 402 ? idInGroup + 1315 : -1; + case 0x37: return idInGroup < 15 ? idInGroup + 1717 : -1; default: return -1; } } @@ -1103,7 +1109,7 @@ enum OpcodeServer : uint32 SMSG_BONUS_ROLL_EMPTY = 0x3800DD, SMSG_BOSS_KILL = 0x3E002B, SMSG_BREAK_TARGET = 0x3E0016, - SMSG_BROADCAST_ACHIEVEMENT = 0x3D0010, + SMSG_BROADCAST_ACHIEVEMENT = 0x3D0012, SMSG_BROADCAST_SUMMON_CAST = 0x3802C2, SMSG_BROADCAST_SUMMON_RESPONSE = 0x3802C3, SMSG_BUY_FAILED = 0x380160, @@ -1144,6 +1150,8 @@ enum OpcodeServer : uint32 SMSG_CAPTURE_POINT_REMOVED = 0x3E0008, SMSG_CAST_FAILED = 0x4E0048, SMSG_CAS_REFRESH_REMOTE_DATA = 0x380111, + SMSG_CAUTIONARY_CHANNEL_MESSAGE = 0x3D0009, + SMSG_CAUTIONARY_CHAT_MESSAGE = 0x3D0008, SMSG_CHAIN_MISSILE_BOUNCE = 0x380061, SMSG_CHALLENGE_MODE_COMPLETE = 0x3800A2, SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x3800A8, @@ -1152,11 +1160,11 @@ enum OpcodeServer : uint32 SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x3800A0, SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x4B000C, SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x38029A, - SMSG_CHANNEL_LIST = 0x3D0019, - SMSG_CHANNEL_NOTIFY = 0x3D0015, - SMSG_CHANNEL_NOTIFY_JOINED = 0x3D0017, - SMSG_CHANNEL_NOTIFY_LEFT = 0x3D0018, - SMSG_CHANNEL_NOTIFY_NPE_JOINED_BATCH = 0x3D0016, + SMSG_CHANNEL_LIST = 0x3D001B, + SMSG_CHANNEL_NOTIFY = 0x3D0017, + SMSG_CHANNEL_NOTIFY_JOINED = 0x3D0019, + SMSG_CHANNEL_NOTIFY_LEFT = 0x3D001A, + SMSG_CHANNEL_NOTIFY_NPE_JOINED_BATCH = 0x3D0018, SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x380254, SMSG_CHARACTER_LOGIN_FAILED = 0x38019E, SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x38021F, @@ -1169,19 +1177,19 @@ enum OpcodeServer : uint32 SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x38017C, SMSG_CHAR_FACTION_CHANGE_RESULT = 0x38023E, SMSG_CHAT = 0x3D0001, - SMSG_CHAT_AUTO_RESPONDED = 0x3D000C, - SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x3D0020, - SMSG_CHAT_DOWN = 0x3D0012, + SMSG_CHAT_AUTO_RESPONDED = 0x3D000E, + SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x3D0022, + SMSG_CHAT_DOWN = 0x3D0014, SMSG_CHAT_IGNORED_ACCOUNT_MUTED = 0x3D0000, - SMSG_CHAT_IS_DOWN = 0x3D0013, - SMSG_CHAT_NOT_IN_GUILD = 0x3D0021, + SMSG_CHAT_IS_DOWN = 0x3D0015, + SMSG_CHAT_NOT_IN_GUILD = 0x3D0023, SMSG_CHAT_NOT_IN_PARTY = 0x3D0006, SMSG_CHAT_PLAYER_AMBIGUOUS = 0x3D0004, - SMSG_CHAT_PLAYER_NOTFOUND = 0x3D000B, - SMSG_CHAT_RECONNECT = 0x3D0014, - SMSG_CHAT_REGIONAL_SERVICE_STATUS = 0x3D001B, + SMSG_CHAT_PLAYER_NOTFOUND = 0x3D000D, + SMSG_CHAT_RECONNECT = 0x3D0016, + SMSG_CHAT_REGIONAL_SERVICE_STATUS = 0x3D001D, SMSG_CHAT_RESTRICTED = 0x3D0007, - SMSG_CHAT_SERVER_MESSAGE = 0x3D001A, + SMSG_CHAT_SERVER_MESSAGE = 0x3D001C, SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x4E0002, SMSG_CHECK_ABANDON_NPE = 0x4B0023, SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x38001B, @@ -1261,7 +1269,7 @@ enum OpcodeServer : uint32 SMSG_DB_REPLY = 0x3C0000, SMSG_DEATH_RELEASE_LOC = 0x38016D, SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x3800EF, - SMSG_DEFENSE_MESSAGE = 0x3D000A, + SMSG_DEFENSE_MESSAGE = 0x3D000C, SMSG_DELETE_CHAR = 0x38019B, SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x420022, SMSG_DELVES_ACCOUNT_DATA_ELEMENT_CHANGED = 0x380348, @@ -1301,6 +1309,7 @@ enum OpcodeServer : uint32 SMSG_EQUIPMENT_SET_ID = 0x38014C, SMSG_EXPECTED_SPAM_RECORDS = 0x3D0005, SMSG_EXPLORATION_EXPERIENCE = 0x3801F6, + SMSG_EXPORT_ACCOUNT_PROFILE = 0x3800EC, SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x3802F3, SMSG_FACTION_BONUS_INFO = 0x3801BC, SMSG_FAILED_PLAYER_CONDITION = 0x4B0002, @@ -1483,6 +1492,10 @@ enum OpcodeServer : uint32 SMSG_GUILD_PARTY_STATE = 0x440013, SMSG_GUILD_PERMISSIONS_QUERY_RESULTS = 0x440029, SMSG_GUILD_RANKS = 0x440010, + SMSG_GUILD_RENAME_NAME_CHECK = 0x440044, + SMSG_GUILD_RENAME_REFUND_RESULT = 0x440046, + SMSG_GUILD_RENAME_REQUESTED_RESULT = 0x440045, + SMSG_GUILD_RENAME_STATUS_UPDATE = 0x440043, SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0x440014, SMSG_GUILD_RESET = 0x440020, SMSG_GUILD_REWARD_LIST = 0x440008, @@ -1612,6 +1625,7 @@ enum OpcodeServer : uint32 SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x4E0003, SMSG_MISSILE_CANCEL = 0x380060, SMSG_MODIFY_COOLDOWN = 0x3801FB, + SMSG_MOTD = 0x3D0003, SMSG_MOUNT_RESULT = 0x38000F, SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x3802C1, SMSG_MOVE_ADD_IMPULSE = 0x490062, @@ -1903,7 +1917,7 @@ enum OpcodeServer : uint32 SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x380333, SMSG_RAID_DIFFICULTY_SET = 0x38023F, SMSG_RAID_GROUP_ONLY = 0x380241, - SMSG_RAID_INSTANCE_MESSAGE = 0x3D0008, + SMSG_RAID_INSTANCE_MESSAGE = 0x3D000A, SMSG_RAID_MARKERS_CHANGED = 0x380038, SMSG_RANDOM_ROLL = 0x3800C8, SMSG_RATED_PVP_INFO = 0x3E000F, @@ -2128,9 +2142,9 @@ enum OpcodeServer : uint32 SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x38008D, SMSG_UPDATE_TALENT_DATA = 0x38006F, SMSG_UPDATE_WORLD_STATE = 0x3801DF, - SMSG_USERLIST_ADD = 0x3D000D, - SMSG_USERLIST_REMOVE = 0x3D000E, - SMSG_USERLIST_UPDATE = 0x3D000F, + SMSG_USERLIST_ADD = 0x3D000F, + SMSG_USERLIST_REMOVE = 0x3D0010, + SMSG_USERLIST_UPDATE = 0x3D0011, SMSG_USE_EQUIPMENT_SET_RESULT = 0x3801E6, SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x3802AC, SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x3802AA, @@ -2175,7 +2189,7 @@ enum OpcodeServer : uint32 SMSG_XP_AWARDED_FROM_CURRENCY = 0x38032F, SMSG_XP_GAIN_ABORTED = 0x380062, SMSG_XP_GAIN_ENABLED = 0x380240, - SMSG_ZONE_UNDER_ATTACK = 0x3D0009, + SMSG_ZONE_UNDER_ATTACK = 0x3D000B, // Opcodes that are not generated automatically SMSG_ACCOUNT_HEIRLOOM_UPDATE = SMSG_ACCOUNT_TOY_UPDATE + 1, // no client handler @@ -2186,30 +2200,30 @@ enum OpcodeServer : uint32 SMSG_ARENA_TEAM_STATS = UNKNOWN_OPCODE, }; -inline constexpr std::size_t NUM_SMSG_OPCODES = 1465; +inline constexpr std::size_t NUM_SMSG_OPCODES = 1473; inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeServer opcode) { uint32 idInGroup = opcode & 0xFFFF; switch (opcode >> 16) { - case 0x38: return idInGroup < 845 ? idInGroup + 0 : -1; - case 0x39: return idInGroup < 10 ? idInGroup + 845 : -1; - case 0x3C: return idInGroup < 18 ? idInGroup + 855 : -1; - case 0x3D: return idInGroup < 34 ? idInGroup + 873 : -1; - case 0x3E: return idInGroup < 49 ? idInGroup + 907 : -1; - case 0x3F: return idInGroup < 11 ? idInGroup + 956 : -1; - case 0x40: return idInGroup < 12 ? idInGroup + 967 : -1; - case 0x42: return idInGroup < 82 ? idInGroup + 979 : -1; - case 0x44: return idInGroup < 67 ? idInGroup + 1061 : -1; - case 0x46: return idInGroup < 33 ? idInGroup + 1128 : -1; - case 0x48: return idInGroup < 1 ? idInGroup + 1161 : -1; - case 0x49: return idInGroup < 120 ? idInGroup + 1162 : -1; - case 0x4B: return idInGroup < 48 ? idInGroup + 1282 : -1; - case 0x4C: return idInGroup < 41 ? idInGroup + 1330 : -1; - case 0x4E: return idInGroup < 85 ? idInGroup + 1371 : -1; - case 0x4F: return idInGroup < 8 ? idInGroup + 1456 : -1; - case 0x51: return idInGroup < 1 ? idInGroup + 1464 : -1; + case 0x38: return idInGroup < 847 ? idInGroup + 0 : -1; + case 0x39: return idInGroup < 10 ? idInGroup + 847 : -1; + case 0x3C: return idInGroup < 18 ? idInGroup + 857 : -1; + case 0x3D: return idInGroup < 36 ? idInGroup + 875 : -1; + case 0x3E: return idInGroup < 49 ? idInGroup + 911 : -1; + case 0x3F: return idInGroup < 11 ? idInGroup + 960 : -1; + case 0x40: return idInGroup < 12 ? idInGroup + 971 : -1; + case 0x42: return idInGroup < 82 ? idInGroup + 983 : -1; + case 0x44: return idInGroup < 71 ? idInGroup + 1065 : -1; + case 0x46: return idInGroup < 33 ? idInGroup + 1136 : -1; + case 0x48: return idInGroup < 1 ? idInGroup + 1169 : -1; + case 0x49: return idInGroup < 120 ? idInGroup + 1170 : -1; + case 0x4B: return idInGroup < 48 ? idInGroup + 1290 : -1; + case 0x4C: return idInGroup < 41 ? idInGroup + 1338 : -1; + case 0x4E: return idInGroup < 85 ? idInGroup + 1379 : -1; + case 0x4F: return idInGroup < 8 ? idInGroup + 1464 : -1; + case 0x51: return idInGroup < 1 ? idInGroup + 1472 : -1; default: return -1; } } diff --git a/src/server/game/Support/SupportMgr.h b/src/server/game/Support/SupportMgr.h index f8582ebb6d0..b21637a7991 100644 --- a/src/server/game/Support/SupportMgr.h +++ b/src/server/game/Support/SupportMgr.h @@ -53,21 +53,23 @@ enum class ReportMajorCategory : int32 enum class ReportMinorCategory : int32 { - TextChat = 0x0001, - Boosting = 0x0002, - Spam = 0x0004, - Afk = 0x0008, - IntentionallyFeeding = 0x0010, - BlockingProgress = 0x0020, - Hacking = 0x0040, - Botting = 0x0080, - Advertisement = 0x0100, - BTag = 0x0200, - GroupName = 0x0400, - CharacterName = 0x0800, - GuildName = 0x1000, - Description = 0x2000, - Name = 0x4000, + TextChat = 0x00000001, + Boosting = 0x00000002, + Spam = 0x00000004, + Afk = 0x00000008, + IntentionallyFeeding = 0x00000010, + BlockingProgress = 0x00000020, + Hacking = 0x00000040, + Botting = 0x00000080, + Advertisement = 0x00000100, + BTag = 0x00000200, + GroupName = 0x00000400, + CharacterName = 0x00000800, + GuildName = 0x00001000, + Description = 0x00002000, + Name = 0x00004000, + ChinaHarmfulMinors = 0x00008000, + Disruption = 0x00010000, }; // from blizzard lua |
