From bd2b12fa36830c6b12e124359f46ac974d554080 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 16 Dec 2025 00:09:26 +0100 Subject: Core: Updated to 11.2.7 --- .../Database/Implementation/HotfixDatabase.cpp | 34 +- src/server/game/Achievements/CriteriaHandler.cpp | 20 +- src/server/game/Conditions/ConditionMgr.cpp | 2 +- src/server/game/DataStores/DB2LoadInfo.h | 42 +- src/server/game/DataStores/DB2Metadata.h | 1187 +++++- src/server/game/DataStores/DB2Stores.cpp | 17 +- src/server/game/DataStores/DB2Stores.h | 4 +- src/server/game/DataStores/DB2Structure.h | 12 +- src/server/game/DataStores/DBCEnums.h | 211 +- src/server/game/DataStores/GameTables.h | 6 + src/server/game/DungeonFinding/LFGMgr.cpp | 2 +- src/server/game/DungeonFinding/LFGMgr.h | 3 +- src/server/game/Entities/Creature/Creature.cpp | 4 +- src/server/game/Entities/Creature/GossipDef.h | 132 +- src/server/game/Entities/GameObject/GameObject.cpp | 1 + .../game/Entities/GameObject/GameObjectData.h | 1 + src/server/game/Entities/Item/Item.cpp | 4 +- src/server/game/Entities/Item/ItemTemplate.h | 30 +- src/server/game/Entities/Object/Object.cpp | 18 + src/server/game/Entities/Object/Object.h | 3 + src/server/game/Entities/Object/ObjectGuid.cpp | 100 + src/server/game/Entities/Object/ObjectGuid.h | 27 +- .../game/Entities/Object/Updates/UpdateFields.cpp | 1960 +++++++-- .../game/Entities/Object/Updates/UpdateFields.h | 806 ++-- .../Object/Updates/WowCSEntityDefinitions.h | 98 +- src/server/game/Entities/Player/Player.cpp | 10 +- src/server/game/Entities/Player/Player.h | 17 +- src/server/game/Entities/Unit/StatSystem.cpp | 7 +- src/server/game/Entities/Unit/Unit.cpp | 22 +- src/server/game/Entities/Unit/Unit.h | 1 + src/server/game/Globals/ObjectMgr.cpp | 28 +- src/server/game/Handlers/AuthHandler.cpp | 9 + src/server/game/Handlers/CharacterHandler.cpp | 5 +- src/server/game/Handlers/HousingHandler.cpp | 28 + src/server/game/Handlers/LFGHandler.cpp | 2 +- src/server/game/Miscellaneous/SharedDefines.h | 37 +- .../game/Miscellaneous/enuminfo_SharedDefines.cpp | 5 +- src/server/game/Quests/QuestDef.cpp | 47 +- src/server/game/Quests/QuestDef.h | 9 + src/server/game/Server/Packets/AllPackets.h | 1 + .../game/Server/Packets/AuthenticationPackets.cpp | 6 +- .../game/Server/Packets/AuthenticationPackets.h | 4 + .../game/Server/Packets/CharacterPackets.cpp | 9 +- src/server/game/Server/Packets/CharacterPackets.h | 9 +- src/server/game/Server/Packets/ChatPackets.h | 3 +- src/server/game/Server/Packets/HousingPackets.cpp | 27 + src/server/game/Server/Packets/HousingPackets.h | 36 + src/server/game/Server/Packets/MiscPackets.cpp | 6 +- src/server/game/Server/Packets/MiscPackets.h | 5 + src/server/game/Server/Packets/PartyPackets.cpp | 5 +- src/server/game/Server/Packets/PartyPackets.h | 2 +- src/server/game/Server/Packets/QueryPackets.cpp | 16 + src/server/game/Server/Packets/QueryPackets.h | 10 +- src/server/game/Server/Packets/QuestPackets.cpp | 13 + src/server/game/Server/Packets/QuestPackets.h | 34 +- src/server/game/Server/Packets/SpellPackets.cpp | 4 + src/server/game/Server/Packets/SpellPackets.h | 2 + src/server/game/Server/Packets/SystemPackets.cpp | 38 + src/server/game/Server/Packets/SystemPackets.h | 21 + src/server/game/Server/Packets/TalentPackets.cpp | 2 +- src/server/game/Server/Packets/TicketPackets.cpp | 20 + src/server/game/Server/Packets/TicketPackets.h | 10 + src/server/game/Server/Protocol/Opcodes.cpp | 101 +- src/server/game/Server/Protocol/Opcodes.h | 4258 ++++++++++---------- src/server/game/Server/WorldSession.cpp | 1 + src/server/game/Server/WorldSession.h | 7 + src/server/game/Spells/SpellEffects.cpp | 7 + src/server/game/Spells/SpellInfo.cpp | 7 + .../map_extractor/loadlib/DBFilesClientList.h | 40 + 69 files changed, 6556 insertions(+), 3099 deletions(-) create mode 100644 src/server/game/Handlers/HousingHandler.cpp create mode 100644 src/server/game/Server/Packets/HousingPackets.cpp create mode 100644 src/server/game/Server/Packets/HousingPackets.h (limited to 'src') diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 201e9563379..816b3216ce2 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -459,8 +459,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONDITIONAL_CHR_MODEL, "SELECT MAX(ID) + 1 FROM conditional_chr_model", CONNECTION_SYNCH); // ConditionalContentTuning.db2 - PrepareStatement(HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING, "SELECT ID, OrderIndex, RedirectContentTuningID, RedirectFlag, ParentContentTuningID" - " FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING, "SELECT ID, OrderIndex, RedirectContentTuningID, RedirectFlag, RedirectEnum, " + "ParentContentTuningID FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING, "SELECT MAX(ID) + 1 FROM conditional_content_tuning", CONNECTION_SYNCH); // ContentTuning.db2 @@ -799,7 +799,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // GossipNpcOption.db2 PrepareStatement(HOTFIX_SEL_GOSSIP_NPC_OPTION, "SELECT ID, GossipNpcOption, LFGDungeonsID, TrainerID, GarrFollowerTypeID, CharShipmentID, " "GarrTalentTreeID, UiMapID, UiItemInteractionID, Unknown_1000_8, Unknown_1000_9, CovenantID, GossipOptionID, TraitTreeID, ProfessionID, " - "Unknown_1002_14, SkillLineID FROM gossip_npc_option WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "Unknown_1002_14, NeighborhoodMapID, SkillLineID FROM gossip_npc_option WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_GOSSIP_NPC_OPTION, "SELECT MAX(ID) + 1 FROM gossip_npc_option", CONNECTION_SYNCH); // GuildColorBackground.db2 @@ -854,7 +854,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // Item.db2 PrepareStatement(HOTFIX_SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, " - "ItemGroupSoundsID, ContentTuningID, ModifiedCraftingReagentItemID, CraftingQualityID FROM item WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "ItemGroupSoundsID, ContentTuningID, ModifiedCraftingReagentItemID, CraftingQualityID, Unknown1127 FROM item WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM, "SELECT MAX(ID) + 1 FROM item", CONNECTION_SYNCH); // ItemAppearance.db2 @@ -963,7 +963,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ItemEffect.db2 PrepareStatement(HOTFIX_SEL_ITEM_EFFECT, "SELECT ID, LegacySlotIndex, TriggerType, Charges, CoolDownMSec, CategoryCoolDownMSec, SpellCategoryID, " - "SpellID, ChrSpecializationID FROM item_effect WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "SpellID, ChrSpecializationID, PlayerConditionID FROM item_effect WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_EFFECT, "SELECT MAX(ID) + 1 FROM item_effect", CONNECTION_SYNCH); // ItemExtendedCost.db2 @@ -1024,8 +1024,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT MAX(ID) + 1 FROM item_price_base", CONNECTION_SYNCH); // ItemScalingConfig.db2 - PrepareStatement(HOTFIX_SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, Unknown1125 FROM item_scaling_config" - " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, Unknown1125, Flags" + " FROM item_scaling_config WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SCALING_CONFIG, "SELECT MAX(ID) + 1 FROM item_scaling_config", CONNECTION_SYNCH); // ItemSearchName.db2 @@ -1058,11 +1058,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() "StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, Stackable, " "MaxCount, MinReputation, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, " "Flags4, Flags5, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemLevelOffsetCurveID, " - "ItemLevelOffsetItemLevel, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, SocketMatchEnchantmentId, " - "TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, " - "ItemLevel, AllowableClass, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, " - "PageMaterialID, Bonding, DamageDamageType, ContainerSlots, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, " - "OverallQualityID FROM item_sparse WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "ItemLevelOffsetItemLevel, Unknown1127, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, " + "SocketMatchEnchantmentId, TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, PageID, ItemDelay, MinFactionID, " + "RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, " + "SocketType3, SheatheType, Material, PageMaterialID, Bonding, DamageDamageType, ContainerSlots, RequiredPVPMedal, RequiredPVPRank, " + "RequiredLevel, InventoryType, OverallQualityID FROM item_sparse WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT MAX(ID) + 1 FROM item_sparse", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Description_lang, Display3_lang, Display2_lang, Display1_lang, Display_lang" " FROM item_sparse_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); @@ -1183,10 +1183,10 @@ void HotfixDatabaseConnection::DoPrepareStatements() "PvpLongDescription_lang FROM map_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); // MapChallengeMode.db2 - PrepareStatement(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT Name, ID, MapID, Flags, ExpansionLevel, RequiredWorldStateID, CriteriaCount1, " - "CriteriaCount2, CriteriaCount3, FirstRewardQuestID1, FirstRewardQuestID2, FirstRewardQuestID3, FirstRewardQuestID4, FirstRewardQuestID5, " - "FirstRewardQuestID6, RewardQuestID1, RewardQuestID2, RewardQuestID3, RewardQuestID4, RewardQuestID5, RewardQuestID6 FROM map_challenge_mode" - " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT Name, ID, MapID, Flags, MaxMedals, ExpansionLevel, RequiredWorldStateID, CriteriaCount1, " + "CriteriaCount2, CriteriaCount3, CriteriaCount4, CriteriaCount5, FirstRewardQuestID1, FirstRewardQuestID2, FirstRewardQuestID3, " + "FirstRewardQuestID4, FirstRewardQuestID5, FirstRewardQuestID6, RewardQuestID1, RewardQuestID2, RewardQuestID3, RewardQuestID4, " + "RewardQuestID5, RewardQuestID6 FROM map_challenge_mode WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT MAX(ID) + 1 FROM map_challenge_mode", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT ID, Name_lang FROM map_challenge_mode_locale WHERE (`VerifiedBuild` > 0) = ?" " AND locale = ?", CONNECTION_SYNCH); @@ -1760,7 +1760,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // SpellVisual.db2 PrepareStatement(HOTFIX_SEL_SPELL_VISUAL, "SELECT ID, MissileCastOffset1, MissileCastOffset2, MissileCastOffset3, MissileImpactOffset1, " - "MissileImpactOffset2, MissileImpactOffset3, AnimEventSoundID, Flags, MissileAttachment, MissileDestinationAttachment, " + "MissileImpactOffset2, MissileImpactOffset3, StateKit, AnimEventSoundID, Flags, MissileAttachment, MissileDestinationAttachment, " "MissileCastPositionerID, MissileImpactPositionerID, MissileTargetingKit, HostileSpellVisualID, CasterSpellVisualID, SpellVisualMissileSetID, " "DamageNumberDelay, LowViolenceSpellVisualID, RaidSpellVisualMissileSetID, ReducedUnexpectedCameraMovementSpellVisualID FROM spell_visual" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 850f6f9f970..38b14d5e75a 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -3511,7 +3511,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 case ModifierTreeType::PlayerLevelWithinContentTuning: // 268 { uint8 level = referencePlayer->GetLevel(); - if (Optional levels = sDB2Manager.GetContentTuningData(reqValue, 0)) + if (Optional levels = sDB2Manager.GetContentTuningData(reqValue, {})) { if (secondaryAsset) return level >= levels->MinLevelWithDelta && level <= levels->MaxLevelWithDelta; @@ -3524,7 +3524,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 if (!ref || !ref->IsUnit()) return false; uint8 level = ref->ToUnit()->GetLevel(); - if (Optional levels = sDB2Manager.GetContentTuningData(reqValue, 0)) + if (Optional levels = sDB2Manager.GetContentTuningData(reqValue, {})) { if (secondaryAsset) return level >= levels->MinLevelWithDelta && level <= levels->MaxLevelWithDelta; @@ -3544,7 +3544,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 case ModifierTreeType::PlayerLevelWithinOrAboveContentTuning: // 272 { uint8 level = referencePlayer->GetLevel(); - if (Optional levels = sDB2Manager.GetContentTuningData(reqValue, 0)) + if (Optional levels = sDB2Manager.GetContentTuningData(reqValue, {})) return secondaryAsset ? level >= levels->MinLevelWithDelta : level >= levels->MinLevel; return false; } @@ -3553,7 +3553,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 if (!ref || !ref->IsUnit()) return false; uint8 level = ref->ToUnit()->GetLevel(); - if (Optional levels = sDB2Manager.GetContentTuningData(reqValue, 0)) + if (Optional levels = sDB2Manager.GetContentTuningData(reqValue, {})) return secondaryAsset ? level >= levels->MinLevelWithDelta : level >= levels->MinLevel; return false; } @@ -3700,7 +3700,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 return referencePlayer->m_activePlayerData->RuneforgePowers[block] & (1 << bit); } case ModifierTreeType::PlayerInChromieTimeForScaling: // 304 - if (!(referencePlayer->m_playerData->CtrOptions->ConditionalFlags & 1)) + if (referencePlayer->m_playerData->CtrOptions->ConditionalFlags.empty() || !(referencePlayer->m_playerData->CtrOptions->ConditionalFlags[0] & 1)) return false; break; case ModifierTreeType::IsRaFRecruit: // 305 @@ -4061,6 +4061,16 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 if (!referencePlayer->GetGuildId()) return false; break; + case ModifierTreeType::PlayerMoneyIsRelOp: // 417 + switch (reqValue) + { + case 1: if (referencePlayer->GetMoney() <= secondaryAsset) return false; break; + case 2: if (referencePlayer->GetMoney() >= secondaryAsset) return false; break; + case 3: if (referencePlayer->GetMoney() < secondaryAsset) return false; break; + case 4: if (referencePlayer->GetMoney() > secondaryAsset) return false; break; + default: if (referencePlayer->GetMoney() != secondaryAsset) return false; break; + } + break; default: return false; } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 61f44b98202..6745f9fa553 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -3977,7 +3977,7 @@ int32 GetUnitConditionVariable(Unit const* unit, Unit const* otherUnit, UnitCond case UnitConditionVariable::Sex: return unit->GetGender(); case UnitConditionVariable::LevelWithinContentTuning: - if (Optional levelRange = sDB2Manager.GetContentTuningData(value, 0)) + if (Optional levelRange = sDB2Manager.GetContentTuningData(value, {})) return unit->GetLevel() >= levelRange->MinLevel && unit->GetLevel() <= levelRange->MaxLevel ? value : 0; return 0; case UnitConditionVariable::IsFlying: diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index df2aa42cafd..5905f19203c 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -1305,16 +1305,17 @@ struct ConditionalChrModelLoadInfo struct ConditionalContentTuningLoadInfo { - static constexpr DB2FieldMeta Fields[5] = + static constexpr DB2FieldMeta Fields[6] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "OrderIndex" }, { .IsSigned = true, .Type = FT_INT, .Name = "RedirectContentTuningID" }, { .IsSigned = true, .Type = FT_INT, .Name = "RedirectFlag" }, + { .IsSigned = true, .Type = FT_INT, .Name = "RedirectEnum" }, { .IsSigned = false, .Type = FT_INT, .Name = "ParentContentTuningID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 5, &ConditionalContentTuningMeta::Instance, HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING }; + static constexpr DB2LoadInfo Instance{ Fields, 6, &ConditionalContentTuningMeta::Instance, HOTFIX_SEL_CONDITIONAL_CONTENT_TUNING }; }; struct ContentTuningLoadInfo @@ -2463,7 +2464,7 @@ struct GlyphRequiredSpecLoadInfo struct GossipNpcOptionLoadInfo { - static constexpr DB2FieldMeta Fields[17] = + static constexpr DB2FieldMeta Fields[18] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "GossipNpcOption" }, @@ -2481,10 +2482,11 @@ struct GossipNpcOptionLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "TraitTreeID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ProfessionID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Unknown_1002_14" }, + { .IsSigned = true, .Type = FT_INT, .Name = "NeighborhoodMapID" }, { .IsSigned = true, .Type = FT_INT, .Name = "SkillLineID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 17, &GossipNPCOptionMeta::Instance, HOTFIX_SEL_GOSSIP_NPC_OPTION }; + static constexpr DB2LoadInfo Instance{ Fields, 18, &GossipNPCOptionMeta::Instance, HOTFIX_SEL_GOSSIP_NPC_OPTION }; }; struct GuildColorBackgroundLoadInfo @@ -2681,7 +2683,7 @@ struct ImportPriceWeaponLoadInfo struct ItemLoadInfo { - static constexpr DB2FieldMeta Fields[12] = + static constexpr DB2FieldMeta Fields[13] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ClassID" }, @@ -2695,9 +2697,10 @@ struct ItemLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "ContentTuningID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ModifiedCraftingReagentItemID" }, { .IsSigned = true, .Type = FT_INT, .Name = "CraftingQualityID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1127" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 12, &ItemMeta::Instance, HOTFIX_SEL_ITEM }; + static constexpr DB2LoadInfo Instance{ Fields, 13, &ItemMeta::Instance, HOTFIX_SEL_ITEM }; }; struct ItemAppearanceLoadInfo @@ -3031,7 +3034,7 @@ struct ItemDisenchantLootLoadInfo struct ItemEffectLoadInfo { - static constexpr DB2FieldMeta Fields[9] = + static constexpr DB2FieldMeta Fields[10] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "LegacySlotIndex" }, @@ -3042,9 +3045,10 @@ struct ItemEffectLoadInfo { .IsSigned = false, .Type = FT_SHORT, .Name = "SpellCategoryID" }, { .IsSigned = true, .Type = FT_INT, .Name = "SpellID" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "ChrSpecializationID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "PlayerConditionID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 9, &ItemEffectMeta::Instance, HOTFIX_SEL_ITEM_EFFECT }; + static constexpr DB2LoadInfo Instance{ Fields, 10, &ItemEffectMeta::Instance, HOTFIX_SEL_ITEM_EFFECT }; }; struct ItemExtendedCostLoadInfo @@ -3217,16 +3221,17 @@ struct ItemPriceBaseLoadInfo struct ItemScalingConfigLoadInfo { - static constexpr DB2FieldMeta Fields[5] = + static constexpr DB2FieldMeta Fields[6] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ItemOffsetCurveID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ItemLevel" }, { .IsSigned = true, .Type = FT_INT, .Name = "RequiredLevel" }, { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1125" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 5, &ItemScalingConfigMeta::Instance, HOTFIX_SEL_ITEM_SCALING_CONFIG }; + static constexpr DB2LoadInfo Instance{ Fields, 6, &ItemScalingConfigMeta::Instance, HOTFIX_SEL_ITEM_SCALING_CONFIG }; }; struct ItemSearchNameLoadInfo @@ -3304,7 +3309,7 @@ struct ItemSetSpellLoadInfo struct ItemSparseLoadInfo { - static constexpr DB2FieldMeta Fields[101] = + static constexpr DB2FieldMeta Fields[102] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_LONG, .Name = "AllowableRace" }, @@ -3372,6 +3377,7 @@ struct ItemSparseLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "PlayerLevelToItemLevelCurveID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ItemLevelOffsetCurveID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ItemLevelOffsetItemLevel" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1127" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "ItemNameDescriptionID" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredTransmogHoliday" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredHoliday" }, @@ -3409,7 +3415,7 @@ struct ItemSparseLoadInfo { .IsSigned = true, .Type = FT_BYTE, .Name = "OverallQualityID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 101, &ItemSparseMeta::Instance, HOTFIX_SEL_ITEM_SPARSE }; + static constexpr DB2LoadInfo Instance{ Fields, 102, &ItemSparseMeta::Instance, HOTFIX_SEL_ITEM_SPARSE }; }; struct ItemSpecLoadInfo @@ -3869,17 +3875,20 @@ struct MapLoadInfo struct MapChallengeModeLoadInfo { - static constexpr DB2FieldMeta Fields[21] = + static constexpr DB2FieldMeta Fields[24] = { { .IsSigned = false, .Type = FT_STRING, .Name = "Name" }, { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "MapID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "MaxMedals" }, { .IsSigned = false, .Type = FT_INT, .Name = "ExpansionLevel" }, { .IsSigned = true, .Type = FT_INT, .Name = "RequiredWorldStateID" }, { .IsSigned = true, .Type = FT_SHORT, .Name = "CriteriaCount1" }, { .IsSigned = true, .Type = FT_SHORT, .Name = "CriteriaCount2" }, { .IsSigned = true, .Type = FT_SHORT, .Name = "CriteriaCount3" }, + { .IsSigned = true, .Type = FT_SHORT, .Name = "CriteriaCount4" }, + { .IsSigned = true, .Type = FT_SHORT, .Name = "CriteriaCount5" }, { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID1" }, { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID2" }, { .IsSigned = true, .Type = FT_INT, .Name = "FirstRewardQuestID3" }, @@ -3894,7 +3903,7 @@ struct MapChallengeModeLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "RewardQuestID6" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 21, &MapChallengeModeMeta::Instance, HOTFIX_SEL_MAP_CHALLENGE_MODE }; + static constexpr DB2LoadInfo Instance{ Fields, 24, &MapChallengeModeMeta::Instance, HOTFIX_SEL_MAP_CHALLENGE_MODE }; }; struct MapDifficultyLoadInfo @@ -5803,7 +5812,7 @@ struct SpellTotemsLoadInfo struct SpellVisualLoadInfo { - static constexpr DB2FieldMeta Fields[21] = + static constexpr DB2FieldMeta Fields[22] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "MissileCastOffset1" }, @@ -5812,6 +5821,7 @@ struct SpellVisualLoadInfo { .IsSigned = false, .Type = FT_FLOAT, .Name = "MissileImpactOffset1" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "MissileImpactOffset2" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "MissileImpactOffset3" }, + { .IsSigned = true, .Type = FT_INT, .Name = "StateKit" }, { .IsSigned = false, .Type = FT_INT, .Name = "AnimEventSoundID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "MissileAttachment" }, @@ -5828,7 +5838,7 @@ struct SpellVisualLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "ReducedUnexpectedCameraMovementSpellVisualID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 21, &SpellVisualMeta::Instance, HOTFIX_SEL_SPELL_VISUAL }; + static constexpr DB2LoadInfo Instance{ Fields, 22, &SpellVisualMeta::Instance, HOTFIX_SEL_SPELL_VISUAL }; }; struct SpellVisualEffectNameLoadInfo diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index d41a7c397e4..d78a9c69e46 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -46,7 +46,7 @@ struct AccountStoreCategoryMeta struct AccountStoreItemMeta { - static constexpr DB2MetaField Fields[17] = + static constexpr DB2MetaField Fields[20] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, @@ -65,6 +65,9 @@ struct AccountStoreItemMeta { .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 }, }; static constexpr DB2Meta Instance = @@ -72,9 +75,9 @@ struct AccountStoreItemMeta .FileDataId = 6197817, .IndexField = 2, .ParentIndexField = 3, - .FieldCount = 17, - .FileFieldCount = 17, - .LayoutHash = 0x818F4DA6, + .FieldCount = 20, + .FileFieldCount = 20, + .LayoutHash = 0x83E16957, .Fields = Fields }; }; @@ -4576,12 +4579,13 @@ struct CollectableSourceEncounterSparseMeta struct CollectableSourceInfoMeta { - static constexpr DB2MetaField Fields[4] = + static constexpr DB2MetaField Fields[5] = { { .Type = FT_STRING_NOT_LOCALIZED, .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 }, }; static constexpr DB2Meta Instance = @@ -4589,9 +4593,9 @@ struct CollectableSourceInfoMeta .FileDataId = 5152112, .IndexField = 1, .ParentIndexField = -1, - .FieldCount = 4, - .FileFieldCount = 4, - .LayoutHash = 0x2EFCC218, + .FieldCount = 5, + .FileFieldCount = 5, + .LayoutHash = 0x6509E3B5, .Fields = Fields }; }; @@ -4867,22 +4871,23 @@ struct ConditionalChrModelMeta struct ConditionalContentTuningMeta { - static constexpr DB2MetaField Fields[4] = + static constexpr DB2MetaField Fields[5] = { { .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 }, }; static constexpr DB2Meta Instance = { .FileDataId = 3501965, .IndexField = -1, - .ParentIndexField = 3, - .FieldCount = 4, - .FileFieldCount = 3, - .LayoutHash = 0x15616FBC, + .ParentIndexField = 4, + .FieldCount = 5, + .FileFieldCount = 4, + .LayoutHash = 0xB4A236C9, .Fields = Fields }; }; @@ -6462,6 +6467,88 @@ struct CurvePointMeta }; }; +struct DataTagGroupMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6653645, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 1, + .FileFieldCount = 1, + .LayoutHash = 0xEDA13DE2, + .Fields = Fields + }; +}; + +struct DataTagGroupXDataTagMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6653584, + .IndexField = -1, + .ParentIndexField = 0, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0x62484461, + .Fields = Fields + }; +}; + +struct DataTagInfoMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6652252, + .IndexField = 1, + .ParentIndexField = -1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0xDB46F772, + .Fields = Fields + }; +}; + +struct DataTagXRecordMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { .Type = FT_STRING_NOT_LOCALIZED, .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6860787, + .IndexField = 1, + .ParentIndexField = -1, + .FieldCount = 4, + .FileFieldCount = 4, + .LayoutHash = 0x60AF6490, + .Fields = Fields + }; +}; + struct DeathThudLookupsMeta { static constexpr DB2MetaField Fields[4] = @@ -6571,6 +6658,95 @@ struct DeclinedWordCasesMeta }; }; +struct DecorCategoryMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6247348, + .IndexField = 1, + .ParentIndexField = -1, + .FieldCount = 4, + .FileFieldCount = 4, + .LayoutHash = 0x3E2C50EB, + .Fields = Fields + }; +}; + +struct DecorDyeSlotMeta +{ + 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_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6254050, + .IndexField = 0, + .ParentIndexField = 2, + .FieldCount = 5, + .FileFieldCount = 5, + .LayoutHash = 0xB599D611, + .Fields = Fields + }; +}; + +struct DecorSubcategoryMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6247357, + .IndexField = 1, + .ParentIndexField = 3, + .FieldCount = 5, + .FileFieldCount = 5, + .LayoutHash = 0xA64237DF, + .Fields = Fields + }; +}; + +struct DecorXDecorSubcategoryMeta +{ + 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 = 6247358, + .IndexField = 0, + .ParentIndexField = 1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0xC0B2F336, + .Fields = Fields + }; +}; + struct DelvesSeasonMeta { static constexpr DB2MetaField Fields[1] = @@ -6917,6 +7093,52 @@ struct DurabilityQualityMeta }; }; +struct DyeColorMeta +{ + static constexpr DB2MetaField Fields[8] = + { + { .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 }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6254051, + .IndexField = 1, + .ParentIndexField = 2, + .FieldCount = 8, + .FileFieldCount = 8, + .LayoutHash = 0x184BC922, + .Fields = Fields + }; +}; + +struct DyeColorCategoryMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6254052, + .IndexField = 1, + .ParentIndexField = -1, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0xEBA8ED0E, + .Fields = Fields + }; +}; + struct EdgeGlowEffectMeta { static constexpr DB2MetaField Fields[13] = @@ -7141,57 +7363,217 @@ struct ExpectedStatModMeta }; }; -struct ExtraAbilityInfoMeta +struct ExteriorComponentMeta { - static constexpr DB2MetaField Fields[6] = + static constexpr DB2MetaField Fields[13] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .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 }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .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 }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = { - .FileDataId = 3527889, - .IndexField = -1, - .ParentIndexField = 1, - .FieldCount = 6, - .FileFieldCount = 6, - .LayoutHash = 0x54A151A3, + .FileDataId = 6931305, + .IndexField = 2, + .ParentIndexField = 12, + .FieldCount = 13, + .FileFieldCount = 12, + .LayoutHash = 0x027A2F44, .Fields = Fields }; }; -struct FactionMeta +struct ExteriorComponentExitPointMeta { - static constexpr DB2MetaField Fields[17] = + static constexpr DB2MetaField Fields[4] = { - { .Type = FT_LONG, .ArraySize = 4, .IsSigned = true }, - { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, { .Type = FT_INT, .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_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 4, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 4, .IsSigned = false }, - { .Type = FT_INT, .ArraySize = 4, .IsSigned = true }, - { .Type = FT_INT, .ArraySize = 4, .IsSigned = true }, - { .Type = FT_FLOAT, .ArraySize = 2, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 2, .IsSigned = false }, }; static constexpr DB2Meta Instance = { - .FileDataId = 1361972, - .IndexField = -1, + .FileDataId = 6931306, + .IndexField = 2, + .ParentIndexField = 3, + .FieldCount = 4, + .FileFieldCount = 3, + .LayoutHash = 0x567CA080, + .Fields = Fields + }; +}; + +struct ExteriorComponentGroupMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7280847, + .IndexField = 1, + .ParentIndexField = 2, + .FieldCount = 3, + .FileFieldCount = 2, + .LayoutHash = 0x2D47B58D, + .Fields = Fields + }; +}; + +struct ExteriorComponentGroupXHookMeta +{ + 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 = 7280848, + .IndexField = 0, + .ParentIndexField = 1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0x354DC9D0, + .Fields = Fields + }; +}; + +struct ExteriorComponentHookMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .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 = 6931307, + .IndexField = 2, + .ParentIndexField = 4, + .FieldCount = 5, + .FileFieldCount = 4, + .LayoutHash = 0xD5B5463C, + .Fields = Fields + }; +}; + +struct ExteriorComponentTypeMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6931308, + .IndexField = 1, + .ParentIndexField = -1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0x4A583842, + .Fields = Fields + }; +}; + +struct ExteriorComponentXGroupMeta +{ + 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 = 7412982, + .IndexField = 0, + .ParentIndexField = -1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0x2373F82F, + .Fields = Fields + }; +}; + +struct ExtraAbilityInfoMeta +{ + static constexpr DB2MetaField Fields[6] = + { + { .Type = FT_STRING, .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 3527889, + .IndexField = -1, + .ParentIndexField = 1, + .FieldCount = 6, + .FileFieldCount = 6, + .LayoutHash = 0x54A151A3, + .Fields = Fields + }; +}; + +struct FactionMeta +{ + static constexpr DB2MetaField Fields[17] = + { + { .Type = FT_LONG, .ArraySize = 4, .IsSigned = true }, + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .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_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_SHORT, .ArraySize = 4, .IsSigned = true }, + { .Type = FT_SHORT, .ArraySize = 4, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 4, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 4, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 2, .IsSigned = true }, + { .Type = FT_BYTE, .ArraySize = 2, .IsSigned = false }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 1361972, + .IndexField = -1, .ParentIndexField = -1, .FieldCount = 17, .FileFieldCount = 17, @@ -7559,7 +7941,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 }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -7569,7 +7951,7 @@ struct GameModeMeta .ParentIndexField = -1, .FieldCount = 12, .FileFieldCount = 12, - .LayoutHash = 0x3609B763, + .LayoutHash = 0xBB298117, .Fields = Fields }; }; @@ -9456,7 +9838,7 @@ struct GlyphRequiredSpecMeta struct GossipNPCOptionMeta { - static constexpr DB2MetaField Fields[16] = + static constexpr DB2MetaField Fields[17] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -9474,6 +9856,7 @@ struct GossipNPCOptionMeta { .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 = @@ -9481,9 +9864,9 @@ struct GossipNPCOptionMeta .FileDataId = 4278503, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 16, - .FileFieldCount = 16, - .LayoutHash = 0x29CC1EF1, + .FieldCount = 17, + .FileFieldCount = 17, + .LayoutHash = 0x5679719D, .Fields = Fields }; }; @@ -10200,23 +10583,216 @@ struct HotfixesMeta }; }; +struct HouseMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 5149690, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 4, + .FileFieldCount = 4, + .LayoutHash = 0x9E44E080, + .Fields = Fields + }; +}; + struct HouseDecorMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[18] = { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .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_BYTE, .ArraySize = 1, .IsSigned = false }, + { .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 }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_FLOAT, .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 }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = { .FileDataId = 5149691, + .IndexField = 2, + .ParentIndexField = -1, + .FieldCount = 18, + .FileFieldCount = 18, + .LayoutHash = 0xEAA015F9, + .Fields = Fields + }; +}; + +struct HouseDecorMaterialMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { .Type = FT_LONG, .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 = 6855863, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 5, + .FileFieldCount = 5, + .LayoutHash = 0x3C05FE9C, + .Fields = Fields + }; +}; + +struct HouseDecorThemeSetMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6860900, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0x19AF3EA0, + .Fields = Fields + }; +}; + +struct HouseExteriorWmoDataMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6931309, + .IndexField = 1, + .ParentIndexField = -1, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0xEBA8ED0E, + .Fields = Fields + }; +}; + +struct HouseLevelDataMeta +{ + 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 = 7149539, .IndexField = 0, .ParentIndexField = -1, .FieldCount = 3, .FileFieldCount = 3, - .LayoutHash = 0xA2E1530F, + .LayoutHash = 0xB9536B25, + .Fields = Fields + }; +}; + +struct HouseLevelRewardInfoMeta +{ + static constexpr DB2MetaField Fields[6] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7495433, + .IndexField = 2, + .ParentIndexField = -1, + .FieldCount = 6, + .FileFieldCount = 6, + .LayoutHash = 0x0B8D7D58, + .Fields = Fields + }; +}; + +struct HouseRoomMeta +{ + static constexpr DB2MetaField Fields[7] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_BYTE, .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 5163003, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 7, + .FileFieldCount = 7, + .LayoutHash = 0xDA77DDD3, + .Fields = Fields + }; +}; + +struct HouseThemeMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6998392, + .IndexField = 1, + .ParentIndexField = -1, + .FieldCount = 4, + .FileFieldCount = 4, + .LayoutHash = 0x7307C6E9, .Fields = Fields }; }; @@ -10330,7 +10906,7 @@ struct InvasionClientDataMeta struct ItemMeta { - static constexpr DB2MetaField Fields[11] = + static constexpr DB2MetaField Fields[12] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, @@ -10343,6 +10919,7 @@ struct ItemMeta { .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 = @@ -10350,9 +10927,9 @@ struct ItemMeta .FileDataId = 841626, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 11, - .FileFieldCount = 11, - .LayoutHash = 0xE39A209A, + .FieldCount = 12, + .FileFieldCount = 12, + .LayoutHash = 0x6D1DD0CE, .Fields = Fields }; }; @@ -11184,7 +11761,7 @@ struct ItemDisplayInfoModelMatResMeta struct ItemEffectMeta { - static constexpr DB2MetaField Fields[8] = + static constexpr DB2MetaField Fields[9] = { { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, @@ -11194,6 +11771,7 @@ struct ItemEffectMeta { .Type = FT_SHORT, .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 }, }; static constexpr DB2Meta Instance = @@ -11201,9 +11779,9 @@ struct ItemEffectMeta .FileDataId = 969941, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 8, - .FileFieldCount = 8, - .LayoutHash = 0x2CEB026E, + .FieldCount = 9, + .FileFieldCount = 9, + .LayoutHash = 0xDA85CB08, .Fields = Fields }; }; @@ -11746,12 +12324,13 @@ struct ItemSalvageLootMeta struct ItemScalingConfigMeta { - static constexpr DB2MetaField Fields[4] = + static constexpr DB2MetaField Fields[5] = { { .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 }, }; static constexpr DB2Meta Instance = @@ -11759,9 +12338,9 @@ struct ItemScalingConfigMeta .FileDataId = 7322705, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 4, - .FileFieldCount = 4, - .LayoutHash = 0x2A1E702E, + .FieldCount = 5, + .FileFieldCount = 5, + .LayoutHash = 0x7BEABE68, .Fields = Fields }; }; @@ -11845,7 +12424,7 @@ struct ItemSetSpellMeta struct ItemSparseMeta { - static constexpr DB2MetaField Fields[66] = + static constexpr DB2MetaField Fields[67] = { { .Type = FT_LONG, .ArraySize = 1, .IsSigned = true }, { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, @@ -11881,6 +12460,7 @@ struct ItemSparseMeta { .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 = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, @@ -11920,9 +12500,9 @@ struct ItemSparseMeta .FileDataId = 1572924, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 66, - .FileFieldCount = 66, - .LayoutHash = 0x2928311F, + .FieldCount = 67, + .FileFieldCount = 67, + .LayoutHash = 0xABF517CD, .Fields = Fields }; }; @@ -11973,8 +12553,9 @@ struct ItemSpecOverrideMeta struct ItemSquishEraMeta { - static constexpr DB2MetaField Fields[2] = + 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 }, }; @@ -11982,11 +12563,11 @@ struct ItemSquishEraMeta static constexpr DB2Meta Instance = { .FileDataId = 7322706, - .IndexField = -1, + .IndexField = 0, .ParentIndexField = -1, - .FieldCount = 2, - .FileFieldCount = 2, - .LayoutHash = 0x0E5EEFD3, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0x6764D247, .Fields = Fields }; }; @@ -13540,15 +14121,16 @@ struct MapCelestialBodyMeta struct MapChallengeModeMeta { - static constexpr DB2MetaField Fields[9] = + static constexpr DB2MetaField Fields[10] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_SHORT, .ArraySize = 5, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 6, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 6, .IsSigned = true }, }; @@ -13558,9 +14140,9 @@ struct MapChallengeModeMeta .FileDataId = 801709, .IndexField = 1, .ParentIndexField = 2, - .FieldCount = 9, - .FileFieldCount = 9, - .LayoutHash = 0x531A0D41, + .FieldCount = 10, + .FileFieldCount = 10, + .LayoutHash = 0xAAC13A73, .Fields = Fields }; }; @@ -14745,32 +15327,206 @@ struct NamesReservedMeta static constexpr DB2Meta Instance = { - .FileDataId = 1117085, + .FileDataId = 1117085, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 1, + .FileFieldCount = 1, + .LayoutHash = 0x2B2D5D97, + .Fields = Fields + }; +}; + +struct NamesReservedLocaleMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 1117087, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0x7B9823D4, + .Fields = Fields + }; +}; + +struct NeighborhoodInitiativeMeta +{ + static constexpr DB2MetaField Fields[9] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .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 }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6699736, + .IndexField = 2, + .ParentIndexField = -1, + .FieldCount = 9, + .FileFieldCount = 9, + .LayoutHash = 0x1C8B2515, + .Fields = Fields + }; +}; + +struct NeighborhoodInitiativeRewardMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6702594, + .IndexField = 0, + .ParentIndexField = 3, + .FieldCount = 4, + .FileFieldCount = 3, + .LayoutHash = 0x773AA9EA, + .Fields = Fields + }; +}; + +struct NeighborhoodInitiativeTaskMeta +{ + static constexpr DB2MetaField Fields[8] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .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_FLOAT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6702595, + .IndexField = 2, + .ParentIndexField = -1, + .FieldCount = 8, + .FileFieldCount = 8, + .LayoutHash = 0xF4A7B3C3, + .Fields = Fields + }; +}; + +struct NeighborhoodInitiativeXTaskMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6708736, + .IndexField = -1, + .ParentIndexField = 1, + .FieldCount = 2, + .FileFieldCount = 1, + .LayoutHash = 0x985EB2D9, + .Fields = Fields + }; +}; + +struct NeighborhoodMapMeta +{ + static constexpr DB2MetaField Fields[6] = + { + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 5550624, + .IndexField = 1, + .ParentIndexField = -1, + .FieldCount = 6, + .FileFieldCount = 6, + .LayoutHash = 0x4973BA38, + .Fields = Fields + }; +}; + +struct NeighborhoodNameGenMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6237720, .IndexField = -1, - .ParentIndexField = -1, - .FieldCount = 1, - .FileFieldCount = 1, - .LayoutHash = 0x2B2D5D97, + .ParentIndexField = 3, + .FieldCount = 4, + .FileFieldCount = 3, + .LayoutHash = 0xD8F6E78E, .Fields = Fields }; }; -struct NamesReservedLocaleMeta +struct NeighborhoodPlotMeta { - static constexpr DB2MetaField Fields[2] = + static constexpr DB2MetaField Fields[15] = { + { .Type = FT_LONG, .ArraySize = 1, .IsSigned = false }, { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .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 }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = { - .FileDataId = 1117087, - .IndexField = -1, - .ParentIndexField = -1, - .FieldCount = 2, - .FileFieldCount = 2, - .LayoutHash = 0x7B9823D4, + .FileDataId = 5550625, + .IndexField = 9, + .ParentIndexField = 10, + .FieldCount = 15, + .FileFieldCount = 15, + .LayoutHash = 0x4D8362A1, .Fields = Fields }; }; @@ -16939,7 +17695,7 @@ struct QuestMoneyRewardMeta struct QuestObjectiveMeta { - static constexpr DB2MetaField Fields[8] = + static constexpr DB2MetaField Fields[9] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -16949,16 +17705,17 @@ struct QuestObjectiveMeta { .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 }, }; static constexpr DB2Meta Instance = { .FileDataId = 1251960, .IndexField = -1, - .ParentIndexField = 7, - .FieldCount = 8, - .FileFieldCount = 7, - .LayoutHash = 0x0262E5DB, + .ParentIndexField = 8, + .FieldCount = 9, + .FileFieldCount = 8, + .LayoutHash = 0xB85A3F1F, .Fields = Fields }; }; @@ -17538,6 +18295,52 @@ struct ResistancesMeta }; }; +struct RetroactiveDecorRewardMeta +{ + static constexpr DB2MetaField Fields[6] = + { + { .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 }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7439104, + .IndexField = 0, + .ParentIndexField = -1, + .FieldCount = 6, + .FileFieldCount = 6, + .LayoutHash = 0x1B37F823, + .Fields = Fields + }; +}; + +struct RetroactiveDecorRewardCriteriaMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { .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 }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7507122, + .IndexField = 0, + .ParentIndexField = 3, + .FieldCount = 4, + .FileFieldCount = 3, + .LayoutHash = 0x383CA627, + .Fields = Fields + }; +}; + struct RewardPackMeta { static constexpr DB2MetaField Fields[6] = @@ -17647,6 +18450,147 @@ struct RolodexTypeMeta }; }; +struct RoomComponentMeta +{ + static constexpr DB2MetaField Fields[8] = + { + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 3, .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_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 5503432, + .IndexField = 2, + .ParentIndexField = 3, + .FieldCount = 8, + .FileFieldCount = 8, + .LayoutHash = 0x50697E20, + .Fields = Fields + }; +}; + +struct RoomComponentOptionMeta +{ + static constexpr DB2MetaField Fields[8] = + { + { .Type = FT_INT, .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 }, + { .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 = 5503433, + .IndexField = 0, + .ParentIndexField = -1, + .FieldCount = 8, + .FileFieldCount = 8, + .LayoutHash = 0x5F9E3AA3, + .Fields = Fields + }; +}; + +struct RoomComponentOptionTextureMeta +{ + 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 = 5503564, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0xC433634F, + .Fields = Fields + }; +}; + +struct RoomComponentTextureMeta +{ + static constexpr DB2MetaField Fields[7] = + { + { .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 }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 5503573, + .IndexField = 1, + .ParentIndexField = 6, + .FieldCount = 7, + .FileFieldCount = 6, + .LayoutHash = 0x2C72D684, + .Fields = Fields + }; +}; + +struct RoomGridLineMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6378467, + .IndexField = 1, + .ParentIndexField = 4, + .FieldCount = 5, + .FileFieldCount = 4, + .LayoutHash = 0xF36993C5, + .Fields = Fields + }; +}; + +struct RoomWmoDataMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_FLOAT, .ArraySize = 6, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 5503435, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0x5EEBE354, + .Fields = Fields + }; +}; + struct RopeEffectMeta { static constexpr DB2MetaField Fields[9] = @@ -17724,7 +18668,7 @@ struct SDReplacementModelMeta struct SSAOSettingsMeta { - static constexpr DB2MetaField Fields[7] = + static constexpr DB2MetaField Fields[8] = { { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, @@ -17733,6 +18677,7 @@ struct SSAOSettingsMeta { .Type = FT_FLOAT, .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 }, }; static constexpr DB2Meta Instance = @@ -17740,9 +18685,9 @@ struct SSAOSettingsMeta .FileDataId = 2056369, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 7, - .FileFieldCount = 7, - .LayoutHash = 0xAC8B8862, + .FieldCount = 8, + .FileFieldCount = 8, + .LayoutHash = 0x367173B6, .Fields = Fields }; }; @@ -18933,9 +19878,11 @@ struct SoundWaterfallEmitterMeta struct SourceInfoMeta { - static constexpr DB2MetaField Fields[4] = + 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_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -18944,11 +19891,11 @@ struct SourceInfoMeta static constexpr DB2Meta Instance = { .FileDataId = 1313612, - .IndexField = -1, - .ParentIndexField = 3, - .FieldCount = 4, - .FileFieldCount = 3, - .LayoutHash = 0xBE3A7BF3, + .IndexField = 1, + .ParentIndexField = 5, + .FieldCount = 6, + .FileFieldCount = 5, + .LayoutHash = 0xE718F422, .Fields = Fields }; }; @@ -20572,10 +21519,11 @@ struct SpellTotemsMeta struct SpellVisualMeta { - static constexpr DB2MetaField Fields[16] = + static constexpr DB2MetaField Fields[17] = { { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 3, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, @@ -20597,20 +21545,21 @@ struct SpellVisualMeta .FileDataId = 897952, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 16, - .FileFieldCount = 16, - .LayoutHash = 0xFB411669, + .FieldCount = 17, + .FileFieldCount = 17, + .LayoutHash = 0xE2F62C2F, .Fields = Fields }; }; struct SpellVisualAnimMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[4] = { { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -20618,9 +21567,9 @@ struct SpellVisualAnimMeta .FileDataId = 1140479, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 3, - .FileFieldCount = 3, - .LayoutHash = 0xEE416568, + .FieldCount = 4, + .FileFieldCount = 4, + .LayoutHash = 0xF233613A, .Fields = Fields }; }; @@ -22649,12 +23598,14 @@ struct UIEventToastMeta struct UIExpansionDisplayInfoMeta { - static constexpr DB2MetaField Fields[7] = + static constexpr DB2MetaField Fields[9] = { { .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 = false }, + { .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 }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -22665,9 +23616,9 @@ struct UIExpansionDisplayInfoMeta .FileDataId = 1729547, .IndexField = 0, .ParentIndexField = -1, - .FieldCount = 7, - .FileFieldCount = 7, - .LayoutHash = 0x788C5B88, + .FieldCount = 9, + .FileFieldCount = 9, + .LayoutHash = 0x62982E9A, .Fields = Fields }; }; @@ -22685,10 +23636,10 @@ struct UIExpansionDisplayInfoIconMeta { .FileDataId = 1729546, .IndexField = -1, - .ParentIndexField = -1, + .ParentIndexField = 2, .FieldCount = 3, - .FileFieldCount = 3, - .LayoutHash = 0x54B6542E, + .FileFieldCount = 2, + .LayoutHash = 0xD1865277, .Fields = Fields }; }; diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 2de052fcb84..a88e8ad419f 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -421,7 +421,7 @@ typedef std::unordered_map HeirloomItemsContainer; typedef std::unordered_map> GlyphBindableSpellsContainer; typedef std::unordered_map> GlyphRequiredSpecsContainer; typedef std::unordered_map ItemChildEquipmentContainer; -typedef std::array ItemClassByOldEnumContainer; +typedef std::array ItemClassByOldEnumContainer; typedef std::unordered_map> ItemLimitCategoryConditionContainer; typedef std::unordered_map ItemModifiedAppearanceByItemContainer; typedef std::unordered_map> ItemSetSpellContainer; @@ -2188,17 +2188,26 @@ ChrSpecializationEntry const* DB2Manager::GetDefaultChrSpecializationForClass(ui return GetChrSpecializationByIndex(class_, INITIAL_SPECIALIZATION_INDEX); } -uint32 DB2Manager::GetRedirectedContentTuningId(uint32 contentTuningId, uint32 redirectFlag) const +uint32 DB2Manager::GetRedirectedContentTuningId(uint32 contentTuningId, std::span redirectFlag) const { if (std::vector const* conditionalContentTunings = Trinity::Containers::MapGetValuePtr(_conditionalContentTuning, contentTuningId)) + { for (ConditionalContentTuningEntry const* conditionalContentTuning : *conditionalContentTunings) - if (conditionalContentTuning->RedirectFlag & redirectFlag) + { + uint32 block = conditionalContentTuning->RedirectEnum / 32; + uint32 flag = conditionalContentTuning->RedirectEnum % 32; + if (block >= redirectFlag.size()) + continue; + + if (flag & redirectFlag[block]) return conditionalContentTuning->RedirectContentTuningID; + } + } return contentTuningId; } -Optional DB2Manager::GetContentTuningData(uint32 contentTuningId, uint32 redirectFlag, bool forItem /*= false*/) const +Optional DB2Manager::GetContentTuningData(uint32 contentTuningId, std::span redirectFlag, bool forItem /*= false*/) const { ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(GetRedirectedContentTuningId(contentTuningId, redirectFlag)); if (!contentTuning) diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 0c49a3832ed..44c069bbce0 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -472,8 +472,8 @@ public: static char const* GetChrRaceName(uint8 race, LocaleConstant locale = DEFAULT_LOCALE); ChrSpecializationEntry const* GetChrSpecializationByIndex(uint32 class_, uint32 index) const; ChrSpecializationEntry const* GetDefaultChrSpecializationForClass(uint32 class_) const; - uint32 GetRedirectedContentTuningId(uint32 contentTuningId, uint32 redirectFlag) const; - Optional GetContentTuningData(uint32 contentTuningId, uint32 redirectFlag, bool forItem = false) const; + uint32 GetRedirectedContentTuningId(uint32 contentTuningId, std::span redirectFlag) const; + Optional GetContentTuningData(uint32 contentTuningId, std::span redirectFlag, bool forItem = false) const; bool HasContentTuningLabel(uint32 contentTuningId, int32 label) const; static char const* GetCreatureFamilyPetName(uint32 petfamily, LocaleConstant locale); std::span GetCreatureLabels(uint32 creatureDifficultyId) const; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 0a5b8e866a4..207f9221cdb 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -948,6 +948,7 @@ struct ConditionalContentTuningEntry int32 OrderIndex; int32 RedirectContentTuningID; int32 RedirectFlag; + int32 RedirectEnum; uint32 ParentContentTuningID; }; @@ -2085,6 +2086,7 @@ struct GossipNPCOptionEntry int32 TraitTreeID; int32 ProfessionID; int32 Unknown_1002_14; + int32 NeighborhoodMapID; int32 SkillLineID; }; @@ -2193,6 +2195,7 @@ struct ItemEntry int32 ContentTuningID; int32 ModifiedCraftingReagentItemID; int32 CraftingQualityID; + int32 Unknown1127; }; struct ItemAppearanceEntry @@ -2393,6 +2396,7 @@ struct ItemEffectEntry uint16 SpellCategoryID; int32 SpellID; uint16 ChrSpecializationID; + int32 PlayerConditionID; }; #define MAX_ITEM_EXT_COST_ITEMS 5 @@ -2502,6 +2506,7 @@ struct ItemScalingConfigEntry int32 ItemLevel; int32 RequiredLevel; int32 Unknown1125; + int32 Flags; }; struct ItemSearchNameEntry @@ -2581,6 +2586,7 @@ struct ItemSparseEntry int32 PlayerLevelToItemLevelCurveID; int32 ItemLevelOffsetCurveID; int32 ItemLevelOffsetItemLevel; + int32 Unknown1127; uint16 ItemNameDescriptionID; uint16 RequiredTransmogHoliday; uint16 RequiredHoliday; @@ -2938,9 +2944,10 @@ struct MapChallengeModeEntry uint32 ID; uint16 MapID; int32 Flags; + int32 MaxMedals; uint32 ExpansionLevel; - int32 RequiredWorldStateID; // maybe? - std::array CriteriaCount; + int32 RequiredWorldStateID; + std::array CriteriaCount; std::array FirstRewardQuestID; std::array RewardQuestID; }; @@ -4164,6 +4171,7 @@ struct SpellVisualEntry uint32 ID; std::array MissileCastOffset; std::array MissileImpactOffset; + int32 StateKit; uint32 AnimEventSoundID; int32 Flags; int8 MissileAttachment; diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index f6a5faca0a2..f668678b424 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -795,7 +795,11 @@ enum class CriteriaType : int16 ReachRenownLevel = 261, LearnTaxiNode = 262, - Count = 270 + PlaceDecor = 270, /*NYI*/ // Place any decor + RemoveDecor = 271, /*NYI*/ // Remove any decor + CollectUniqueDecor = 272, /*NYI*/ // Collect Unique Decor + + Count = 279 }; enum class CriteriaTreeFlags : uint16 @@ -1102,6 +1106,7 @@ enum class GameRule : int32 FullCharacterCreateDisabled = 84, TargetFrameBuffsDisabled = 85, UnitFramePvPContextualDisabled = 86, + ActionCombatTargetLockEnabled = 87, BlockWhileSheathedAllowed = 88, VanillaAccountMailInstant = 91, ClearMailOnRealmTransfer = 92, @@ -1111,10 +1116,50 @@ enum class GameRule : int32 WorldMapLegendDisabled = 99, WorldMapFrameStrata = 100, MerchantFilterDisabled = 101, + HousingDashboardDisabled = 102, + AutoAttacksDisabled = 103, + ObjectiveTrackerDisabled = 104, + PlayerCastBarDisabled = 105, + TargetCastBarDisabled = 106, + NameplateCastBarDisabled = 107, SummoningStones = 108, TransmogEnabled = 109, + DisableRealmSelection = 113, + DisableCampsites = 114, + UseSimpleCharacterSelectList = 115, + HideFaction = 116, + DisableVas = 119, + PersonalResourceDisplayDisabled = 129, + TargetFrameDisabled = 130, + PlayerFrameDisabled = 131, MailGameRule = 132, + ForcedMultiActionBarSetting = 133, + HideAllMultiActionBars = 135, + TimerunningAllowed = 137, + MaxCharactersPerContentSet = 139, + MinUndeleteLevelRequired = 140, + DoesNotCountTowardAccountCharacterMax = 142, + WorldMapDisabled = 145, + MinimapDisabled = 146, + RepairArmorDisabled = 147, + EjSuggestedContentDisabled = 148, + EjDungeonsDisabled = 149, + EjRaidsDisabled = 150, + EjItemSetsDisabled = 151, + GdapiCharacterProfileDisabled = 153, + HousingEnabled = 154, + RestrictedAchievementCategoryID = 155, LootMethodStyle = 157, + ExperienceBarDisabled = 159, + HideUnavailableTransmogSlots = 160, + HideTransmogZeroCost = 161, + DisableQuickJoin = 162, + DisableRaidGroups = 163, + UseGameTableVariation = 164, + ActionButtonTypeOverlayStrategy = 165, + RecommendLeastPopulatedRealm = 169, + BagSpaceOverride = 172, + UnflaggedPlayersCanAttackPvPFlaggedPlayers = 173, }; enum class GlobalCurve : int32 @@ -1988,9 +2033,15 @@ enum class ModifierTreeType : int32 PlayerWeeklyCurrencyIsRelOpFromMax = 397, /*NYI*/ // Player weekly {CurrencyTypes} is {RelOp} {#Amount} from currency weekly limit + PlayerNeighborhoodCharterSignatureCountEqualOrGreaterThan = 400, /*NYI*/ + PlayerIsInGuild = 404, // Player is in a guild PlayerAvgItemLevelRelOp = 415, /*NYI*/ // Player average item level {AvgItemLevelCategory} is {RelOp} {#Amount} + + PlayerMoneyIsRelOp = 417, // Player money is {RelOp} {#Amount} + + PlayerHousesCountEqualOrGreaterThan = 419, /*NYI*/ // Player has at least {#Amount} houses }; enum class ModifierTreeOperator : int8 @@ -2113,84 +2164,86 @@ enum class PlayerDataElementType : int32 enum class PlayerInteractionType : int32 { - None = 0, - TradePartner = 1, - Item = 2, - Gossip = 3, - QuestGiver = 4, - Merchant = 5, - TaxiNode = 6, - Trainer = 7, - Banker = 8, - AlliedRaceDetailsGiver = 9, - GuildBanker = 10, - Registrar = 11, - Vendor = 12, - PetitionVendor = 13, - GuildTabardVendor = 14, - TalentMaster = 15, - SpecializationMaster = 16, - MailInfo = 17, - SpiritHealer = 18, - AreaSpiritHealer = 19, - Binder = 20, - Auctioneer = 21, - StableMaster = 22, - BattleMaster = 23, - Transmogrifier = 24, - LFGDungeon = 25, - VoidStorageBanker = 26, - BlackMarketAuctioneer = 27, - AdventureMap = 28, - WorldMap = 29, - GarrArchitect = 30, - GarrTradeskill = 31, - GarrMission = 32, - ShipmentCrafter = 33, - GarrRecruitment = 34, - GarrTalent = 35, - Trophy = 36, - PlayerChoice = 37, - ArtifactForge = 38, - ObliterumForge = 39, - ScrappingMachine = 40, - ContributionCollector = 41, - AzeriteRespec = 42, - IslandQueue = 43, - ItemInteraction = 44, - ChromieTime = 45, - CovenantPreview = 46, - AnimaDiversion = 47, - LegendaryCrafting = 48, - WeeklyRewards = 49, - Soulbind = 50, - CovenantSanctum = 51, - NewPlayerGuide = 52, - ItemUpgrade = 53, - AdventureJournal = 54, - Renown = 55, - AzeriteForge = 56, - PerksProgramVendor = 57, - ProfessionsCraftingOrder = 58, - Professions = 59, - ProfessionsCustomerOrder = 60, - TraitSystem = 61, - BarbersChoice = 62, - JailersTowerBuffs = 63, - MajorFactionRenown = 64, - PersonalTabardVendor = 65, - ForgeMaster = 66, - CharacterBanker = 67, - AccountBanker = 68, - ProfessionRespec = 69, - PlaceholderType71 = 70, - PlaceholderType72 = 71, - PlaceholderType73 = 72, - PlaceholderType74 = 73, - PlaceholderType75 = 74, - PlaceholderType76 = 75, - GuildRename = 76, - PlaceholderType77 = 77, + None = 0, + TradePartner = 1, + Item = 2, + Gossip = 3, + QuestGiver = 4, + Merchant = 5, + TaxiNode = 6, + Trainer = 7, + Banker = 8, + AlliedRaceDetailsGiver = 9, + GuildBanker = 10, + Registrar = 11, + Vendor = 12, + PetitionVendor = 13, + GuildTabardVendor = 14, + TalentMaster = 15, + SpecializationMaster = 16, + MailInfo = 17, + SpiritHealer = 18, + AreaSpiritHealer = 19, + Binder = 20, + Auctioneer = 21, + StableMaster = 22, + BattleMaster = 23, + Transmogrifier = 24, + LFGDungeon = 25, + VoidStorageBanker = 26, + BlackMarketAuctioneer = 27, + AdventureMap = 28, + WorldMap = 29, + GarrArchitect = 30, + GarrTradeskill = 31, + GarrMission = 32, + ShipmentCrafter = 33, + GarrRecruitment = 34, + GarrTalent = 35, + Trophy = 36, + PlayerChoice = 37, + ArtifactForge = 38, + ObliterumForge = 39, + ScrappingMachine = 40, + ContributionCollector = 41, + AzeriteRespec = 42, + IslandQueue = 43, + ItemInteraction = 44, + ChromieTime = 45, + CovenantPreview = 46, + AnimaDiversion = 47, + LegendaryCrafting = 48, + WeeklyRewards = 49, + Soulbind = 50, + CovenantSanctum = 51, + NewPlayerGuide = 52, + ItemUpgrade = 53, + AdventureJournal = 54, + Renown = 55, + AzeriteForge = 56, + PerksProgramVendor = 57, + ProfessionsCraftingOrder = 58, + Professions = 59, + ProfessionsCustomerOrder = 60, + TraitSystem = 61, + BarbersChoice = 62, + JailersTowerBuffs = 63, + MajorFactionRenown = 64, + PersonalTabardVendor = 65, + ForgeMaster = 66, + CharacterBanker = 67, + AccountBanker = 68, + ProfessionRespec = 69, + CornerstoneInteraction = 70, + RenameNeighborhood = 71, + HousingBulletinBoard = 72, + HousingPedestal = 73, + CreateGuildNeighborhood = 74, + NeighborhoodCharter = 75, + GuildRename = 76, + OpenNeighborhoodCharterConfirmation = 77, + OpenHouseFinder = 78, + PlaceholderType79 = 79, }; enum class PowerTypeFlags : int16 diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h index d6ce6686555..a850d60871c 100644 --- a/src/server/game/DataStores/GameTables.h +++ b/src/server/game/DataStores/GameTables.h @@ -56,6 +56,7 @@ struct GtBaseMPEntry float DemonHunter = 0.0f; float Evoker = 0.0f; float Adventurer = 0.0f; + float Traveler = 0.0f; }; struct GtBattlePetXPEntry @@ -144,6 +145,7 @@ struct GtSpellScalingEntry float DemonHunter = 0.0f; float Evoker = 0.0f; float Adventurer = 0.0f; + float Traveler = 0.0f; float Item = 0.0f; float Consumable = 0.0f; float Gem1 = 0.0f; @@ -242,6 +244,8 @@ inline float GetGameTableColumnForClass(T const* row, int32 class_) return row->Evoker; case CLASS_ADVENTURER: return row->Adventurer; + case CLASS_TRAVELER: + return row->Traveler; default: break; } @@ -281,6 +285,8 @@ inline float GetSpellScalingColumnForClass(GtSpellScalingEntry const* row, int32 return row->Evoker; case CLASS_ADVENTURER: return row->Adventurer; + case CLASS_TRAVELER: + return row->Traveler; case -1: case -7: return row->Item; diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 6a3ee1df3ab..adbc5a07bea 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -2200,7 +2200,7 @@ uint32 LFGMgr::GetLFGDungeonEntry(uint32 id) return 0; } -LfgDungeonSet LFGMgr::GetRandomAndSeasonalDungeons(uint8 level, uint8 expansion, uint32 contentTuningReplacementConditionMask) +LfgDungeonSet LFGMgr::GetRandomAndSeasonalDungeons(uint8 level, uint8 expansion, std::span contentTuningReplacementConditionMask) { LfgDungeonSet randomDungeons; for (lfg::LFGDungeonContainer::const_iterator itr = LfgDungeonStore.begin(); itr != LfgDungeonStore.end(); ++itr) diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index b20a5fad3b9..cb6e9af6bb7 100644 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -24,6 +24,7 @@ #include "LFGQueue.h" #include "LFGGroupData.h" #include "LFGPlayerData.h" +#include #include class Group; @@ -409,7 +410,7 @@ class TC_GAME_API LFGMgr /// Gets the random dungeon reward corresponding to given dungeon and player level LfgReward const* GetRandomDungeonReward(uint32 dungeon, uint8 level); /// Returns all random and seasonal dungeons for given level and expansion - LfgDungeonSet GetRandomAndSeasonalDungeons(uint8 level, uint8 expansion, uint32 contentTuningReplacementConditionMask); + LfgDungeonSet GetRandomAndSeasonalDungeons(uint8 level, uint8 expansion, std::span contentTuningReplacementConditionMask); /// Teleport a player to/from selected dungeon void TeleportPlayer(Player* player, bool out, bool fromOpcode = false); /// Inits new proposal to boot a player diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 7f7e2f1a61f..739beed45c6 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -562,6 +562,8 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) SetCanDualWield(creatureInfo->flags_extra & CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK); + UpdateCreatureType(); + // checked at loading m_defaultMovementType = MovementGeneratorType(data ? data->movementType : creatureInfo->MovementType); if (!m_wanderDistance && m_defaultMovementType == RANDOM_MOTION_TYPE) @@ -3048,7 +3050,7 @@ void Creature::ApplyLevelScaling() { CreatureDifficulty const* creatureDifficulty = GetCreatureDifficulty(); - if (Optional levels = sDB2Manager.GetContentTuningData(creatureDifficulty->ContentTuningID, 0)) + if (Optional levels = sDB2Manager.GetContentTuningData(creatureDifficulty->ContentTuningID, {})) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMin), levels->MinLevel); SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMax), levels->MaxLevel); diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index 4a9c06f8e81..a84fcbb7d4d 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -36,71 +36,73 @@ enum class QuestGiverStatus : uint64; enum class GossipOptionNpc : uint8 { - None = 0, // White chat bubble. Default - Vendor = 1, // Brown bag - Taxinode = 2, // White wing - Trainer = 3, // Brown book - SpiritHealer = 4, // Golden interaction wheel (with red center) - Binder = 5, // Golden interaction wheel - Banker = 6, // Brown bag (with gold coin in lower corner) - PetitionVendor = 7, // White chat bubble (with "..." inside) - GuildTabardVendor = 8, // White tabard - Battlemaster = 9, // Two crossed swords - Auctioneer = 10, // Stack of gold coins - TalentMaster = 11, // White chat bubble - Stablemaster = 12, // White chat bubble - PetSpecializationMaster = 13, /*DEPRECATED*/ // White chat bubble - GuildBanker = 14, // White chat bubble - Spellclick = 15, // White chat bubble - DisableXPGain = 16, // White chat bubble - EnableXPGain = 17, // White chat bubble - Mailbox = 18, // White chat bubble - WorldPvPQueue = 19, /*NYI*/ // White chat bubble - LFGDungeon = 20, /*NYI*/ // White chat bubble - ArtifactRespec = 21, /*NYI*/ // White chat bubble - CemeterySelect = 22, /*DEPRECATED*/ // White chat bubble - SpecializationMaster = 23, /*DEPRECATED*/ // White chat bubble - GlyphMaster = 24, /*DEPRECATED*/ // White chat bubble - QueueScenario = 25, /*NYI*/ // White chat bubble - GarrisonArchitect = 26, /*NYI*/ // White chat bubble - GarrisonMissionNpc = 27, /*NYI*/ // White chat bubble - ShipmentCrafter = 28, /*NYI*/ // Brown document - GarrisonTradeskillNpc = 29, /*NYI*/ // White chat bubble - GarrisonRecruitment = 30, /*NYI*/ // White chat bubble - AdventureMap = 31, /*NYI*/ // White chat bubble - GarrisonTalent = 32, // White chat bubble - ContributionCollector = 33, /*NYI*/ // White chat bubble - Transmogrify = 34, // Purple helm - AzeriteRespec = 35, // White chat bubble - IslandsMissionNpc = 36, /*NYI*/ // White chat bubble - UIItemInteraction = 37, /*NYI*/ // White chat bubble - WorldMap = 38, /*NYI*/ // White chat bubble - Soulbind = 39, /*NYI*/ // White chat bubble - ChromieTimeNpc = 40, /*NYI*/ // White chat bubble - CovenantPreviewNpc = 41, /*NYI*/ // White chat bubble - RuneforgeLegendaryCrafting = 42, /*NYI*/ // White chat bubble - NewPlayerGuide = 43, /*NYI*/ // White chat bubble - RuneforgeLegendaryUpgrade = 44, /*NYI*/ // White chat bubble - CovenantRenownNpc = 45, /*NYI*/ // White chat bubble - BlackMarketAuctionHouse = 46, - PerksProgramVendor = 47, - ProfessionsCraftingOrder = 48, - ProfessionsOpen = 49, - ProfessionsCustomerOrder = 50, - TraitSystem = 51, - BarbersChoice = 52, - MajorFactionRenown = 53, - PersonalTabardVendor = 54, - ForgeMaster = 55, - CharacterBanker = 56, - AccountBanker = 57, - ProfessionRespec = 58, - Placeholder1 = 59, - Placeholder2 = 60, - Placeholder3 = 61, - GuildRename = 62, - Placeholder4 = 63, - ItemUpgrade = 64, + None = 0, // White chat bubble. Default + Vendor = 1, // Brown bag + Taxinode = 2, // White wing + Trainer = 3, // Brown book + SpiritHealer = 4, // Golden interaction wheel (with red center) + Binder = 5, // Golden interaction wheel + Banker = 6, // Brown bag (with gold coin in lower corner) + PetitionVendor = 7, // White chat bubble (with "..." inside) + GuildTabardVendor = 8, // White tabard + Battlemaster = 9, // Two crossed swords + Auctioneer = 10, // Stack of gold coins + TalentMaster = 11, // White chat bubble + Stablemaster = 12, // White chat bubble + PetSpecializationMaster = 13, /*DEPRECATED*/ // White chat bubble + GuildBanker = 14, // White chat bubble + Spellclick = 15, // White chat bubble + DisableXPGain = 16, // White chat bubble + EnableXPGain = 17, // White chat bubble + Mailbox = 18, // White chat bubble + WorldPvPQueue = 19, /*NYI*/ // White chat bubble + LFGDungeon = 20, /*NYI*/ // White chat bubble + ArtifactRespec = 21, /*NYI*/ // White chat bubble + CemeterySelect = 22, /*DEPRECATED*/ // White chat bubble + SpecializationMaster = 23, /*DEPRECATED*/ // White chat bubble + GlyphMaster = 24, /*DEPRECATED*/ // White chat bubble + QueueScenario = 25, /*NYI*/ // White chat bubble + GarrisonArchitect = 26, /*NYI*/ // White chat bubble + GarrisonMissionNpc = 27, /*NYI*/ // White chat bubble + ShipmentCrafter = 28, /*NYI*/ // Brown document + GarrisonTradeskillNpc = 29, /*NYI*/ // White chat bubble + GarrisonRecruitment = 30, /*NYI*/ // White chat bubble + AdventureMap = 31, /*NYI*/ // White chat bubble + GarrisonTalent = 32, // White chat bubble + ContributionCollector = 33, /*NYI*/ // White chat bubble + Transmogrify = 34, // Purple helm + AzeriteRespec = 35, // White chat bubble + IslandsMissionNpc = 36, /*NYI*/ // White chat bubble + UIItemInteraction = 37, /*NYI*/ // White chat bubble + WorldMap = 38, /*NYI*/ // White chat bubble + Soulbind = 39, /*NYI*/ // White chat bubble + ChromieTimeNpc = 40, /*NYI*/ // White chat bubble + CovenantPreviewNpc = 41, /*NYI*/ // White chat bubble + RuneforgeLegendaryCrafting = 42, /*NYI*/ // White chat bubble + NewPlayerGuide = 43, /*NYI*/ // White chat bubble + RuneforgeLegendaryUpgrade = 44, /*NYI*/ // White chat bubble + CovenantRenownNpc = 45, /*NYI*/ // White chat bubble + BlackMarketAuctionHouse = 46, + PerksProgramVendor = 47, + ProfessionsCraftingOrder = 48, + ProfessionsOpen = 49, + ProfessionsCustomerOrder = 50, + TraitSystem = 51, + BarbersChoice = 52, + MajorFactionRenown = 53, + PersonalTabardVendor = 54, + ForgeMaster = 55, + CharacterBanker = 56, + AccountBanker = 57, + ProfessionRespec = 58, + RenameNeighborhood = 59, + HousingCreateGuildNeighborhood = 60, + HousingGetNeighborhoodCharter = 61, + GuildRename = 62, + HousingOpenCharterConfirmation = 63, + ItemUpgrade = 64, + HouseFinder = 65, + Placeholder6 = 66, Count }; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 091769a4685..d0f8fb33695 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -105,6 +105,7 @@ WorldPacket GameObjectTemplate::BuildQueryData(LocaleConstant loc) const memcpy(stats.Data.data(), raw.data, MAX_GAMEOBJECT_DATA * sizeof(int32)); stats.ContentTuningId = ContentTuningId; + stats.RequiredLevel = RequiredLevel; queryTemp.Write(); queryTemp.ShrinkToFit(); diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index 1938d8d36d4..2bb91b60c08 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -48,6 +48,7 @@ struct GameObjectTemplate std::string unk1; float size; int32 ContentTuningId; + int32 RequiredLevel; union { // 0 GAMEOBJECT_TYPE_DOOR diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index a5ff70aa4ca..cb7bdad249b 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -2332,7 +2332,7 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon { if (fixedLevel) level = fixedLevel; - else if (Optional levels = sDB2Manager.GetContentTuningData(bonusData.ContentTuningId, 0, true)) + else if (Optional levels = sDB2Manager.GetContentTuningData(bonusData.ContentTuningId, {}, true)) level = std::min(std::max(int16(level), levels->MinLevel), levels->MaxLevel); itemLevel = uint32(sDB2Manager.GetCurveValueAt(bonusData.PlayerLevelToItemLevelCurveId, level)); @@ -2869,7 +2869,7 @@ void Item::SetFixedLevel(uint8 level) if (_bonusData.PlayerLevelToItemLevelCurveId) { - if (Optional levels = sDB2Manager.GetContentTuningData(_bonusData.ContentTuningId, 0, true)) + if (Optional levels = sDB2Manager.GetContentTuningData(_bonusData.ContentTuningId, {}, true)) level = std::min(std::max(int16(level), levels->MinLevel), levels->MaxLevel); SetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL, level); diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 79295348d45..6b112e9e157 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -96,7 +96,15 @@ enum ItemModType ITEM_MOD_AGI_STR_INT = 71, ITEM_MOD_AGI_STR = 72, ITEM_MOD_AGI_INT = 73, - ITEM_MOD_STR_INT = 74 + ITEM_MOD_STR_INT = 74, + ITEM_MOD_PROFESSION_INSPIRATION = 75, + ITEM_MOD_PROFESSION_RESOURCEFULNESS = 76, + ITEM_MOD_PROFESSION_FINESSE = 77, + ITEM_MOD_PROFESSION_DEFTNESS = 78, + ITEM_MOD_PROFESSION_PERCEPTION = 79, + ITEM_MOD_PROFESSION_CRAFTING_SPEED = 80, + ITEM_MOD_PROFESSION_MULTICRAFT = 81, + ITEM_MOD_PROFESSION_INGENUITY = 82, }; enum ItemSpelltriggerType @@ -462,10 +470,11 @@ enum ItemClass : uint8 ITEM_CLASS_GLYPH = 16, ITEM_CLASS_BATTLE_PETS = 17, ITEM_CLASS_WOW_TOKEN = 18, - ITEM_CLASS_PROFESSION = 19 + ITEM_CLASS_PROFESSION = 19, + ITEM_CLASS_HOUSING = 20 }; -#define MAX_ITEM_CLASS 20 +#define MAX_ITEM_CLASS 21 enum ItemSubclassConsumable { @@ -761,6 +770,18 @@ enum ItemSubclassProfession #define MAX_ITEM_SUBCLASS_PROFESSION 14 +enum ItemSubclassHousing +{ + ITEM_SUBCLASS_HOUSING_DECOR = 0, + ITEM_SUBCLASS_HOUSING_DYE = 1, + ITEM_SUBCLASS_HOUSING_ROOM = 2, + ITEM_SUBCLASS_HOUSING_ROOM_CUSTOMIZATION = 3, + ITEM_SUBCLASS_HOUSING_EXTERIOR_CUSTOMIZATION = 4, + ITEM_SUBCLASS_HOUSING_SERVICE_ITEM = 5 +}; + +#define MAX_ITEM_SUBCLASS_HOUSING 6 + const uint32 MaxItemSubclassValues[MAX_ITEM_CLASS] = { MAX_ITEM_SUBCLASS_CONSUMABLE, @@ -782,7 +803,8 @@ const uint32 MaxItemSubclassValues[MAX_ITEM_CLASS] = MAX_ITEM_SUBCLASS_GLYPH, MAX_ITEM_SUBCLASS_BATTLE_PET, MAX_ITEM_SUBCLASS_WOW_TOKEN, - MAX_ITEM_SUBCLASS_PROFESSION + MAX_ITEM_SUBCLASS_PROFESSION, + MAX_ITEM_SUBCLASS_HOUSING }; #define MAX_ITEM_SUBCLASS_TOTAL 21 diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 8375032413f..ac2219ed5cf 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -320,6 +320,9 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe data->WriteBit(flags.SceneObject); data->WriteBit(flags.ActivePlayer); data->WriteBit(flags.Conversation); + data->WriteBit(flags.Room); + data->WriteBit(flags.Decor); + data->WriteBit(flags.MeshObject); data->FlushBits(); if (flags.MovementUpdate) @@ -494,6 +497,21 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe *data << uint64(gameObject->GetPackedLocalRotation()); // Rotation } + //if (flags.Room) + // *data << ObjectGuid(HouseGUID); + + //if (flags.Decor) + // *data << ObjectGuid(RoomGUID); + + //if (flags.MeshObject) + //{ + // *data << ObjectGuid(AttachParentGUID); + // *data << TaggedPosition(PositionLocalSpace); + // *data << QuaternionData(RotationLocalSpace); + // *data << float(ScaleLocalSpace); + // *data << uint8(AttachmentFlags); + //} + if (PauseTimes && !PauseTimes->empty()) data->append(PauseTimes->data(), PauseTimes->size()); diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index d9f8e039392..72b3a5dd448 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -99,6 +99,9 @@ struct CreateObjectBits bool SceneObject : 1; bool ActivePlayer : 1; bool Conversation : 1; + bool Room : 1; + bool Decor : 1; + bool MeshObject : 1; void Clear() { diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp index 069c4658533..b5510dc9eb2 100644 --- a/src/server/game/Entities/Object/ObjectGuid.cpp +++ b/src/server/game/Entities/Object/ObjectGuid.cpp @@ -659,6 +659,74 @@ namespace return ObjectGuidFactory::CreateLMMLobby(realmId, arg2, arg3, arg4, arg5); } + static fmt::appender FormatHousing(fmt::format_context& ctx, std::string_view typeName, ObjectGuid const& guid) + { + ctx.advance_to(AppendTypeName(ctx, typeName)); + switch (uint32 subType = (guid.GetRawValue(1) >> 53) & 0x1F) + { + case 1: + case 4: + ctx.advance_to(AppendComponent(ctx, subType)); + ctx.advance_to(AppendComponent(ctx, uint32(guid.GetRawValue(1) >> 32) & 0xFFFF)); + ctx.advance_to(AppendComponent(ctx, uint32(guid.GetRawValue(1)) & 0xFFFFFFFF)); + ctx.advance_to(AppendComponent(ctx, guid.GetRawValue(0))); + break; + case 2: + ctx.advance_to(AppendComponent(ctx, subType)); + ctx.advance_to(AppendComponent(ctx, uint32(guid.GetRawValue(1)) & 0xFFFFFFFF)); + ctx.advance_to(AppendComponent(ctx, guid.GetRawValue(0))); + break; + case 3: + ctx.advance_to(AppendComponent(ctx, subType)); + ctx.advance_to(AppendComponent(ctx, uint32(guid.GetRawValue(1)) & 0x7FFF)); + ctx.advance_to(AppendComponent(ctx, guid.GetRawValue(0))); + ctx.advance_to(AppendComponent(ctx, uint32(guid.GetRawValue(1) >> 15) & 0x3F)); + break; + default: + break; + } + return ctx.out(); + } + + static ObjectGuid ParseHousing(HighGuid /*type*/, std::string_view guidString) + { + uint32 subType = 0; + + if (!ParseComponent(guidString, &subType)) + return ObjectGuid::FromStringFailed; + + uint32 arg1 = 0; + uint32 arg2 = 0; + uint64 arg3 = UI64LIT(0); + + switch (subType) + { + case 1: + case 4: + if (!ParseComponent(guidString, &arg1) + || !ParseComponent(guidString, &arg2) + || !ParseComponent(guidString, &arg3) + || !ParseDone(guidString)) + return ObjectGuid::FromStringFailed; + break; + case 2: + if (!ParseComponent(guidString, &arg2) + || !ParseComponent(guidString, &arg3) + || !ParseDone(guidString)) + return ObjectGuid::FromStringFailed; + break; + case 3: + if (!ParseComponent(guidString, &arg2) + || !ParseComponent(guidString, &arg3) + || !ParseComponent(guidString, &arg1) + || !ParseDone(guidString)) + return ObjectGuid::FromStringFailed; + break; + } + + return ObjectGuidFactory::CreateHousing(subType, arg1, arg2, arg3); + } + ObjectGuidInfo(); } Info; @@ -724,6 +792,9 @@ namespace SET_GUID_INFO(ArenaTeam, FormatGuild, ParseGuild); SET_GUID_INFO(LMMParty, FormatClient, ParseClient); SET_GUID_INFO(LMMLobby, FormatLMMLobby, ParseLMMLobby); + SET_GUID_INFO(Housing, FormatHousing, ParseHousing); + SET_GUID_INFO(MeshObject, FormatWorldObject, ParseWorldObject); + SET_GUID_INFO(Entity, FormatWorldObject, ParseWorldObject); #undef SET_GUID_INFO } @@ -952,6 +1023,35 @@ ObjectGuid ObjectGuidFactory::CreateLMMLobby(uint32 realmId, uint32 arg2, uint8 counter); } +ObjectGuid ObjectGuidFactory::CreateHousing(uint32 subType, uint32 arg1, uint32 arg2, uint64 arg3) +{ + switch (subType) + { + case 1: + case 4: + return ObjectGuid(uint64((uint64(HighGuid::Housing) << 58) + | (uint64(subType & 0x1F) << 53) + | (uint64(arg1 & 0xFFFF) << 32) + | (uint64(arg2 & 0xFFFFFFFF))), + arg3); + case 2: + return ObjectGuid(uint64((uint64(HighGuid::Housing) << 58) + | (uint64(subType & 0x1F) << 53) + | (uint64(arg2 & 0xFFFFFFFF))), + arg3); + case 3: + return ObjectGuid(uint64((uint64(HighGuid::Housing) << 58) + | (uint64(subType & 0x1F) << 53) + | (uint64(arg1 & 0x3F) << 15) + | (uint64(arg2 & 0x7FFF))), + arg3); + default: + break; + } + + return ObjectGuid::Empty; +} + ObjectGuid const ObjectGuid::Empty = ObjectGuid::Create(); ObjectGuid const ObjectGuid::ToStringFailed = ObjectGuid::Create(UI64LIT(3)); ObjectGuid const ObjectGuid::FromStringFailed = ObjectGuid::Create(UI64LIT(4)); diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 51744804ffa..98cf4c5632a 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -47,10 +47,14 @@ enum TypeID : uint8 TYPEID_CORPSE = 10, TYPEID_AREATRIGGER = 11, TYPEID_SCENEOBJECT = 12, - TYPEID_CONVERSATION = 13 + TYPEID_CONVERSATION = 13, + TYPEID_MESH_OBJECT = 14, + TYPEID_AI_GROUP = 15, + TYPEID_SCENARIO = 16, + TYPEID_LOOT_OBJECT = 17 }; -#define NUM_CLIENT_OBJECT_TYPES 14 +#define NUM_CLIENT_OBJECT_TYPES 18 enum TypeMask { @@ -68,6 +72,10 @@ enum TypeMask TYPEMASK_AREATRIGGER = 1 << TYPEID_AREATRIGGER, TYPEMASK_SCENEOBJECT = 1 << TYPEID_SCENEOBJECT, TYPEMASK_CONVERSATION = 1 << TYPEID_CONVERSATION, + TYPEMASK_MESH_OBJECT = 1 << TYPEID_MESH_OBJECT, + TYPEMASK_AI_GROUP = 1 << TYPEID_AI_GROUP, + TYPEMASK_SCENARIO = 1 << TYPEID_SCENARIO, + TYPEMASK_LOOT_OBJECT = 1 << TYPEID_LOOT_OBJECT, TYPEMASK_SEER = TYPEMASK_UNIT | TYPEMASK_PLAYER | TYPEMASK_DYNAMICOBJECT, TYPEMASK_WORLDOBJECT = TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT | TYPEMASK_DYNAMICOBJECT | TYPEMASK_CORPSE | TYPEMASK_AREATRIGGER | TYPEMASK_SCENEOBJECT | TYPEMASK_CONVERSATION @@ -88,7 +96,11 @@ inline constexpr std::array ObjectTypeMask = TYPEMASK_OBJECT | TYPEMASK_CORPSE, TYPEMASK_OBJECT | TYPEMASK_AREATRIGGER, TYPEMASK_OBJECT | TYPEMASK_SCENEOBJECT, - TYPEMASK_OBJECT | TYPEMASK_CONVERSATION + TYPEMASK_OBJECT | TYPEMASK_CONVERSATION, + TYPEMASK_OBJECT | TYPEMASK_MESH_OBJECT, + TYPEMASK_OBJECT | TYPEMASK_AI_GROUP, + TYPEMASK_OBJECT | TYPEMASK_SCENARIO, + TYPEMASK_OBJECT | TYPEMASK_LOOT_OBJECT, }; enum class HighGuid @@ -148,6 +160,9 @@ enum class HighGuid ArenaTeam = 52, LMMParty = 53, LMMLobby = 54, + Housing = 55, + MeshObject = 56, + Entity = 57, Count, }; @@ -183,6 +198,7 @@ enum class ObjectGuidFormatType ToolsClient, WorldLayer, LMMLobby, + Housing, }; template @@ -254,6 +270,9 @@ MAKE_GUID_TRAIT(HighGuid::WorldLayer, ObjectGuidSequenceSource::Global, ObjectGu MAKE_GUID_TRAIT(HighGuid::ArenaTeam, ObjectGuidSequenceSource::Realm, ObjectGuidFormatType::Guild); MAKE_GUID_TRAIT(HighGuid::LMMParty, ObjectGuidSequenceSource::Realm, ObjectGuidFormatType::Client); MAKE_GUID_TRAIT(HighGuid::LMMLobby, ObjectGuidSequenceSource::Realm, ObjectGuidFormatType::LMMLobby); +MAKE_GUID_TRAIT(HighGuid::Housing, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::Housing); +MAKE_GUID_TRAIT(HighGuid::MeshObject, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::WorldObject); +MAKE_GUID_TRAIT(HighGuid::Entity, ObjectGuidSequenceSource::Map, ObjectGuidFormatType::WorldObject); class ByteBuffer; class ObjectGuid; @@ -280,6 +299,7 @@ public: static ObjectGuid CreateToolsClient(uint16 mapId, uint32 serverId, uint64 counter); static ObjectGuid CreateWorldLayer(uint32 arg1, uint16 arg2, uint8 arg3, uint32 arg4); static ObjectGuid CreateLMMLobby(uint32 realmId, uint32 arg2, uint8 arg3, uint8 arg4, uint64 counter); + static ObjectGuid CreateHousing(uint32 subType, uint32 arg1, uint32 arg2, uint64 arg3); }; class TC_GAME_API ObjectGuid @@ -397,6 +417,7 @@ class TC_GAME_API ObjectGuid template ::Format::value == ObjectGuidFormatType::ToolsClient, int32> = 0> static ObjectGuid Create(uint16 mapId, uint32 serverId, LowType counter) { return ObjectGuidFactory::CreateToolsClient(mapId, serverId, counter); } template ::Format::value == ObjectGuidFormatType::WorldLayer, int32> = 0> static ObjectGuid Create(uint32 arg1, uint16 arg2, uint8 arg3, uint32 arg4) { return ObjectGuidFactory::CreateWorldLayer(arg1, arg2, arg3, arg4); } template ::Format::value == ObjectGuidFormatType::LMMLobby, int32> = 0> static ObjectGuid Create(uint32 arg2, uint8 arg3, uint8 arg4, LowType counter) { return ObjectGuidFactory::CreateLMMLobby(0, arg2, arg3, arg4, counter); } + template ::Format::value == ObjectGuidFormatType::Housing, int32> = 0> static ObjectGuid Create(uint32 subType, uint32 arg1, uint32 arg2, uint64 arg3) { return ObjectGuidFactory::CreateHousing(subType, arg1, arg2, arg3); } protected: constexpr ObjectGuid(uint64 high, uint64 low) : _data({{ low, high }}) diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 7df3bcb97a5..1f80091cb59 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -1029,6 +1029,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << uint8(ClassId); data << uint8(PlayerClassId); data << uint8(Sex); + data << uint8(CreatureType); data << uint8(DisplayPower); data << uint32(OverrideDisplayPowerID); data << int64(Health); @@ -1075,7 +1076,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << float(CombatReach); data << float(DisplayScale); data << int32(CreatureFamily); - data << uint8(CreatureType); + data << uint8(OverrideCreatureType); data << int32(NativeDisplayID); data << float(NativeXDisplayScale); data << int32(MountDisplayID); @@ -1214,11 +1215,11 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi static constexpr void UnitDataAppendAllowedFieldsMaskForFlag(UnitData::Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= std::array{ 0x00010000u, 0xF0040000u, 0xFF080000u, 0x000007FEu, 0xE0000100u, 0xFF01FFFFu, 0x7FFFFFFFu }; + allowedMaskForTarget |= std::array{ 0x00010000u, 0xE0080000u, 0xFE100002u, 0x00000FFEu, 0xC0000200u, 0xFE03FFFFu, 0xFFFFFFFFu }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) - allowedMaskForTarget |= std::array{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xE0000100u, 0x0001FFFFu, 0x00000000u }; + allowedMaskForTarget |= std::array{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000200u, 0x0003FFFFu, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= std::array{ 0x00000000u, 0xF0000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0001FE00u }; + allowedMaskForTarget |= std::array{ 0x00000000u, 0xE0000000u, 0x00000002u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003FC00u }; } void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags) @@ -1228,14 +1229,14 @@ void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFl void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x1FFFFFFFu, 0x00FE0000u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x1FF7FFFFu, 0x01EFFFFDu, 0xFFFFF001u, 0x3FFFFFFFu, 0x01FC0000u, 0x00000000u }); UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x0FFBFFFFu, 0x00F7FFFFu, 0xFFFFF801u, 0x1FFFFFFFu, 0x00FE0000u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x1FF7FFFFu, 0x01EFFFFDu, 0xFFFFF001u, 0x3FFFFFFFu, 0x01FC0000u, 0x00000000u }); UnitDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1432,412 +1433,416 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor { if (changesMask[33]) { - data << uint8(DisplayPower); + data << uint8(CreatureType); } if (changesMask[34]) { - data << uint32(OverrideDisplayPowerID); + data << uint8(DisplayPower); } if (changesMask[35]) { - data << int64(Health); + data << uint32(OverrideDisplayPowerID); } if (changesMask[36]) { - data << int64(MaxHealth); + data << int64(Health); } if (changesMask[37]) { - data << int32(Level); + data << int64(MaxHealth); } if (changesMask[38]) { - data << int32(EffectiveLevel); + data << int32(Level); } if (changesMask[39]) { - data << int32(ContentTuningID); + data << int32(EffectiveLevel); } if (changesMask[40]) { - data << int32(ScalingLevelMin); + data << int32(ContentTuningID); } if (changesMask[41]) { - data << int32(ScalingLevelMax); + data << int32(ScalingLevelMin); } if (changesMask[42]) { - data << int32(ScalingLevelDelta); + data << int32(ScalingLevelMax); } if (changesMask[43]) { - data << uint8(ScalingFactionGroup); + data << int32(ScalingLevelDelta); } if (changesMask[44]) { - data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint8(ScalingFactionGroup); } if (changesMask[45]) { - data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[46]) { - data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[47]) { - data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[48]) { - data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[49]) { - data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[50]) { - data << uint32(RangedAttackRoundBaseTime); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[51]) { - data << float(BoundingRadius); + data << uint32(RangedAttackRoundBaseTime); } if (changesMask[52]) { - data << float(CombatReach); + data << float(BoundingRadius); } if (changesMask[53]) { - data << float(DisplayScale); + data << float(CombatReach); } if (changesMask[54]) { - data << int32(CreatureFamily); + data << float(DisplayScale); } if (changesMask[55]) { - data << uint8(CreatureType); + data << int32(CreatureFamily); } if (changesMask[56]) { - data << int32(NativeDisplayID); + data << uint8(OverrideCreatureType); } if (changesMask[57]) { - data << float(NativeXDisplayScale); + data << int32(NativeDisplayID); } if (changesMask[58]) { - data << int32(MountDisplayID); + data << float(NativeXDisplayScale); } if (changesMask[59]) { - data << int32(CosmeticMountDisplayID); + data << int32(MountDisplayID); } if (changesMask[60]) { - data << float(MinDamage); + data << int32(CosmeticMountDisplayID); } if (changesMask[61]) { - data << float(MaxDamage); + data << float(MinDamage); } if (changesMask[62]) { - data << float(MinOffHandDamage); + data << float(MaxDamage); } if (changesMask[63]) { - data << float(MaxOffHandDamage); + data << float(MinOffHandDamage); } } if (changesMask[64]) { if (changesMask[65]) { - data << uint8(StandState); + data << float(MaxOffHandDamage); } if (changesMask[66]) { - data << uint8(PetTalentPoints); + data << uint8(StandState); } if (changesMask[67]) { - data << uint8(VisFlags); + data << uint8(PetTalentPoints); } if (changesMask[68]) { - data << uint8(AnimTier); + data << uint8(VisFlags); } if (changesMask[69]) { - data << uint32(PetNumber); + data << uint8(AnimTier); } if (changesMask[70]) { - data << uint32(PetNameTimestamp); + data << uint32(PetNumber); } if (changesMask[71]) { - data << uint32(PetExperience); + data << uint32(PetNameTimestamp); } if (changesMask[72]) { - data << uint32(PetNextLevelExperience); + data << uint32(PetExperience); } if (changesMask[73]) { - data << float(ModCastingSpeed); + data << uint32(PetNextLevelExperience); } if (changesMask[74]) { - data << float(ModCastingSpeedNeg); + data << float(ModCastingSpeed); } if (changesMask[75]) { - data << float(ModSpellHaste); + data << float(ModCastingSpeedNeg); } if (changesMask[76]) { - data << float(ModHaste); + data << float(ModSpellHaste); } if (changesMask[77]) { - data << float(ModRangedHaste); + data << float(ModHaste); } if (changesMask[78]) { - data << float(ModHasteRegen); + data << float(ModRangedHaste); } if (changesMask[79]) { - data << float(ModTimeRate); + data << float(ModHasteRegen); } if (changesMask[80]) { - data << int32(CreatedBySpell); + data << float(ModTimeRate); } if (changesMask[81]) { - data << int32(EmoteState); + data << int32(CreatedBySpell); } if (changesMask[82]) { - data << int32(BaseMana); + data << int32(EmoteState); } if (changesMask[83]) { - data << int32(BaseHealth); + data << int32(BaseMana); } if (changesMask[84]) { - data << uint8(SheatheState); + data << int32(BaseHealth); } if (changesMask[85]) { - data << uint8(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint8(SheatheState); } if (changesMask[86]) { - data << uint8(PetFlags); + data << uint8(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[87]) { - data << uint8(ShapeshiftForm); + data << uint8(PetFlags); } if (changesMask[88]) { - data << int32(AttackPower); + data << uint8(ShapeshiftForm); } if (changesMask[89]) { - data << int32(AttackPowerModPos); + data << int32(AttackPower); } if (changesMask[90]) { - data << int32(AttackPowerModNeg); + data << int32(AttackPowerModPos); } if (changesMask[91]) { - data << float(AttackPowerMultiplier); + data << int32(AttackPowerModNeg); } if (changesMask[92]) { - data << int32(AttackPowerModSupport); + data << float(AttackPowerMultiplier); } if (changesMask[93]) { - data << int32(RangedAttackPower); + data << int32(AttackPowerModSupport); } if (changesMask[94]) { - data << int32(RangedAttackPowerModPos); + data << int32(RangedAttackPower); } if (changesMask[95]) { - data << int32(RangedAttackPowerModNeg); + data << int32(RangedAttackPowerModPos); } } if (changesMask[96]) { if (changesMask[97]) { - data << float(RangedAttackPowerMultiplier); + data << int32(RangedAttackPowerModNeg); } if (changesMask[98]) { - data << int32(RangedAttackPowerModSupport); + data << float(RangedAttackPowerMultiplier); } if (changesMask[99]) { - data << int32(MainHandWeaponAttackPower); + data << int32(RangedAttackPowerModSupport); } if (changesMask[100]) { - data << int32(OffHandWeaponAttackPower); + data << int32(MainHandWeaponAttackPower); } if (changesMask[101]) { - data << int32(RangedWeaponAttackPower); + data << int32(OffHandWeaponAttackPower); } if (changesMask[102]) { - data << int32(SetAttackSpeedAura); + data << int32(RangedWeaponAttackPower); } if (changesMask[103]) { - data << float(Lifesteal); + data << int32(SetAttackSpeedAura); } if (changesMask[104]) { - data << float(MinRangedDamage); + data << float(Lifesteal); } if (changesMask[105]) { - data << float(MaxRangedDamage); + data << float(MinRangedDamage); } if (changesMask[106]) { - data << float(ManaCostMultiplier); + data << float(MaxRangedDamage); } if (changesMask[107]) { - data << float(MaxHealthModifier); + data << float(ManaCostMultiplier); } if (changesMask[108]) { - data << float(HoverHeight); + data << float(MaxHealthModifier); } if (changesMask[109]) { - data << int32(MinItemLevelCutoff); + data << float(HoverHeight); } if (changesMask[110]) { - data << int32(MinItemLevel); + data << int32(MinItemLevelCutoff); } if (changesMask[111]) { - data << int32(MaxItemLevel); + data << int32(MinItemLevel); } if (changesMask[112]) { - data << int32(AzeriteItemLevel); + data << int32(MaxItemLevel); } if (changesMask[113]) { - data << int32(WildBattlePetLevel); + data << int32(AzeriteItemLevel); } if (changesMask[114]) { - data << int32(BattlePetCompanionExperience); + data << int32(WildBattlePetLevel); } if (changesMask[115]) { - data << uint32(BattlePetCompanionNameTimestamp); + data << int32(BattlePetCompanionExperience); } if (changesMask[116]) { - data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint32(BattlePetCompanionNameTimestamp); } if (changesMask[117]) { - data << int32(ScaleDuration); + data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[118]) { - data << int32(LooksLikeMountID); + data << int32(ScaleDuration); } if (changesMask[119]) { - data << int32(LooksLikeCreatureID); + data << int32(LooksLikeMountID); } if (changesMask[120]) { - data << int32(LookAtControllerID); + data << int32(LooksLikeCreatureID); } if (changesMask[121]) { - data << int32(PerksVendorItemID); + data << int32(LookAtControllerID); } if (changesMask[122]) { - data << int32(TaxiNodesID); + data << int32(PerksVendorItemID); } if (changesMask[123]) { - data << *GuildGUID; + data << int32(TaxiNodesID); } if (changesMask[124]) { - data << int32(FlightCapabilityID); + data << *GuildGUID; } if (changesMask[125]) { - data << float(GlideEventSpeedDivisor); + data << int32(FlightCapabilityID); } if (changesMask[126]) { - data << int32(DriveCapabilityID); + data << float(GlideEventSpeedDivisor); } if (changesMask[127]) { - data << int32(MaxHealthModifierFlatNeg); + data << int32(DriveCapabilityID); } } if (changesMask[128]) { if (changesMask[129]) { - data << int32(MaxHealthModifierFlatPos); + data << int32(MaxHealthModifierFlatNeg); } if (changesMask[130]) { - data << uint32(SilencedSchoolMask); + data << int32(MaxHealthModifierFlatPos); } if (changesMask[131]) { - data << uint32(CurrentAreaID); + data << uint32(SilencedSchoolMask); } if (changesMask[132]) { - data << float(Field_31C); + data << uint32(CurrentAreaID); } if (changesMask[133]) { - data << float(Field_320); + data << float(Field_31C); } if (changesMask[134]) + { + data << float(Field_320); + } + if (changesMask[135]) { data << *NameplateAttachToGUID; } data.WriteBits(AssistActionData.has_value(), 1); data.FlushBits(); - if (changesMask[135]) + if (changesMask[136]) { if (AssistActionData.has_value()) { @@ -1845,83 +1850,83 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } } } - if (changesMask[136]) + if (changesMask[137]) { for (uint32 i = 0; i < 10; ++i) { - if (changesMask[137 + i]) + if (changesMask[138 + i]) { data << int32(Power[i]); } - if (changesMask[147 + i]) + if (changesMask[148 + i]) { data << int32(MaxPower[i]); } - if (changesMask[157 + i]) + if (changesMask[158 + i]) { data << float(PowerRegenFlatModifier[i]); } - if (changesMask[167 + i]) + if (changesMask[168 + i]) { data << float(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[177]) + if (changesMask[178]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[178 + i]) + if (changesMask[179 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[181]) + if (changesMask[182]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[182 + i]) + if (changesMask[183 + i]) { data << uint32(AttackRoundBaseTime[i]); } } } - if (changesMask[184]) + if (changesMask[185]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[185 + i]) + if (changesMask[186 + i]) { data << int32(Stats[i]); } - if (changesMask[189 + i]) + if (changesMask[190 + i]) { data << int32(StatPosBuff[i]); } - if (changesMask[193 + i]) + if (changesMask[194 + i]) { data << int32(StatNegBuff[i]); } - if (changesMask[197 + i]) + if (changesMask[198 + i]) { data << int32(StatSupportBuff[i]); } } } - if (changesMask[201]) + if (changesMask[202]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[202 + i]) + if (changesMask[203 + i]) { data << int32(Resistances[i]); } - if (changesMask[209 + i]) + if (changesMask[210 + i]) { data << int32(BonusResistanceMods[i]); } - if (changesMask[216 + i]) + if (changesMask[217 + i]) { data << int32(ManaCostModifier[i]); } @@ -1963,6 +1968,7 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(ClassId); Base::ClearChangesMask(PlayerClassId); Base::ClearChangesMask(Sex); + Base::ClearChangesMask(CreatureType); Base::ClearChangesMask(DisplayPower); Base::ClearChangesMask(OverrideDisplayPowerID); Base::ClearChangesMask(Health); @@ -1985,7 +1991,7 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(CombatReach); Base::ClearChangesMask(DisplayScale); Base::ClearChangesMask(CreatureFamily); - Base::ClearChangesMask(CreatureType); + Base::ClearChangesMask(OverrideCreatureType); Base::ClearChangesMask(NativeDisplayID); Base::ClearChangesMask(NativeXDisplayScale); Base::ClearChangesMask(MountDisplayID); @@ -2107,6 +2113,7 @@ void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* } data << int64(EndTime); data << uint32(ObjectiveFlags); + data << uint32(EnabledObjectivesMask); } void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const @@ -2138,12 +2145,16 @@ void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player cons { data << uint32(ObjectiveFlags); } + if (changesMask[5]) + { + data << uint32(EnabledObjectivesMask); + } } - if (changesMask[5]) + if (changesMask[6]) { for (uint32 i = 0; i < 24; ++i) { - if (changesMask[6 + i]) + if (changesMask[7 + i]) { data << int16(ObjectiveProgress[i]); } @@ -2157,6 +2168,7 @@ void QuestLog::ClearChangesMask() Base::ClearChangesMask(StateFlags); Base::ClearChangesMask(EndTime); Base::ClearChangesMask(ObjectiveFlags); + Base::ClearChangesMask(EnabledObjectivesMask); Base::ClearChangesMask(ObjectiveProgress); _changesMask.ResetAll(); } @@ -2302,16 +2314,25 @@ void PetCreatureName::ClearChangesMask() void CTROptions::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - data << uint32(ConditionalFlags); + data << uint32(ConditionalFlags.size()); data << uint8(FactionGroup); data << uint32(ChromieTimeExpansionMask); + for (uint32 i = 0; i < ConditionalFlags.size(); ++i) + { + data << uint32(ConditionalFlags[i]); + } } void CTROptions::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const { - data << uint32(ConditionalFlags); + data << uint32(ConditionalFlags.size()); + data.FlushBits(); data << uint8(FactionGroup); data << uint32(ChromieTimeExpansionMask); + for (uint32 i = 0; i < ConditionalFlags.size(); ++i) + { + data << uint32(ConditionalFlags[i]); + } } bool CTROptions::operator==(CTROptions const& right) const @@ -3167,7 +3188,7 @@ void BitVector::ClearChangesMask() void BitVectors::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - for (uint32 i = 0; i < 13; ++i) + for (uint32 i = 0; i < 14; ++i) { Values[i].WriteCreate(data, owner, receiver); } @@ -3186,7 +3207,7 @@ void BitVectors::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player co data.FlushBits(); if (changesMask[0]) { - for (uint32 i = 0; i < 13; ++i) + for (uint32 i = 0; i < 14; ++i) { if (changesMask[1 + i]) { @@ -5037,6 +5058,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f data << uint32(RuneforgePowers.size()); data << uint32(TransmogIllusions.size()); data << uint32(WarbandScenes.size()); + data << uint32(HouseRooms.size()); + data << uint32(HouseExteriorComponents.size()); + data << uint32(HouseThemes.size()); + data << uint32(HouseRoomComponentTextures.size()); data << uint32(CharacterRestrictions.size()); data << uint32(SpellPctModByLabel.size()); data << uint32(SpellFlatModByLabel.size()); @@ -5133,6 +5158,22 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f { data << uint32(WarbandScenes[i]); } + for (uint32 i = 0; i < HouseRooms.size(); ++i) + { + data << uint32(HouseRooms[i]); + } + for (uint32 i = 0; i < HouseExteriorComponents.size(); ++i) + { + data << uint32(HouseExteriorComponents[i]); + } + for (uint32 i = 0; i < HouseThemes.size(); ++i) + { + data << uint32(HouseThemes[i]); + } + for (uint32 i = 0; i < HouseRoomComponentTextures.size(); ++i) + { + data << uint32(HouseRoomComponentTextures[i]); + } for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { SpellPctModByLabel[i].WriteCreate(data, owner, receiver); @@ -5315,11 +5356,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data); } } - if (changesMask[42]) + if (changesMask[46]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[43]) + if (changesMask[47]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -5328,11 +5369,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[44]) + if (changesMask[48]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[45]) + if (changesMask[49]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -5341,11 +5382,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[46]) + if (changesMask[50]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[47]) + if (changesMask[51]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -5354,11 +5395,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[42]) + if (changesMask[46]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[43]) + if (changesMask[47]) { for (uint32 j = 0; j < ResearchSites[i].size(); ++j) { @@ -5370,11 +5411,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[44]) + if (changesMask[48]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[45]) + if (changesMask[49]) { for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j) { @@ -5386,11 +5427,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[46]) + if (changesMask[50]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[47]) + if (changesMask[51]) { for (uint32 j = 0; j < Research[i].size(); ++j) { @@ -5499,105 +5540,133 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo if (changesMask[24]) { if (!ignoreNestedChangesMask) - CharacterRestrictions.WriteUpdateMask(data); + HouseRooms.WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data); + WriteCompleteDynamicFieldUpdateMask(HouseRooms.size(), data); } if (changesMask[25]) { if (!ignoreNestedChangesMask) - SpellPctModByLabel.WriteUpdateMask(data); + HouseExteriorComponents.WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data); + WriteCompleteDynamicFieldUpdateMask(HouseExteriorComponents.size(), data); } if (changesMask[26]) { if (!ignoreNestedChangesMask) - SpellFlatModByLabel.WriteUpdateMask(data); + HouseThemes.WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data); + WriteCompleteDynamicFieldUpdateMask(HouseThemes.size(), data); } if (changesMask[27]) { if (!ignoreNestedChangesMask) - MawPowers.WriteUpdateMask(data); + HouseRoomComponentTextures.WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data); + WriteCompleteDynamicFieldUpdateMask(HouseRoomComponentTextures.size(), data); } if (changesMask[28]) { if (!ignoreNestedChangesMask) - MultiFloorExploration.WriteUpdateMask(data); + CharacterRestrictions.WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data); + WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data); } if (changesMask[29]) { if (!ignoreNestedChangesMask) - RecipeProgression.WriteUpdateMask(data); + SpellPctModByLabel.WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data); + WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data); } if (changesMask[30]) { if (!ignoreNestedChangesMask) - ReplayedQuests.WriteUpdateMask(data); + SpellFlatModByLabel.WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data); + WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data); } if (changesMask[31]) { if (!ignoreNestedChangesMask) - TaskQuests.WriteUpdateMask(data); + MawPowers.WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data); + WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data); } } if (changesMask[32]) { if (changesMask[33]) + { + if (!ignoreNestedChangesMask) + MultiFloorExploration.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data); + } + if (changesMask[34]) + { + if (!ignoreNestedChangesMask) + RecipeProgression.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data); + } + if (changesMask[35]) + { + if (!ignoreNestedChangesMask) + ReplayedQuests.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data); + } + if (changesMask[36]) + { + if (!ignoreNestedChangesMask) + TaskQuests.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data); + } + if (changesMask[37]) { if (!ignoreNestedChangesMask) DisabledSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data); } - if (changesMask[34]) + if (changesMask[38]) { if (!ignoreNestedChangesMask) CraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data); } - if (changesMask[35]) + if (changesMask[39]) { if (!ignoreNestedChangesMask) PersonalCraftingOrderCounts.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data); } - if (changesMask[36]) + if (changesMask[40]) { if (!ignoreNestedChangesMask) NpcCraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(NpcCraftingOrders.size(), data); } - if (changesMask[37]) + if (changesMask[41]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data); } - if (changesMask[38]) + if (changesMask[42]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data); } - if (changesMask[39]) + if (changesMask[43]) { if (!ignoreNestedChangesMask) TrackedCollectableSources.WriteUpdateMask(data); @@ -5768,7 +5837,47 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } + if (changesMask[24]) + { + for (uint32 i = 0; i < HouseRooms.size(); ++i) + { + if (HouseRooms.HasChanged(i) || ignoreNestedChangesMask) + { + data << uint32(HouseRooms[i]); + } + } + } if (changesMask[25]) + { + for (uint32 i = 0; i < HouseExteriorComponents.size(); ++i) + { + if (HouseExteriorComponents.HasChanged(i) || ignoreNestedChangesMask) + { + data << uint32(HouseExteriorComponents[i]); + } + } + } + if (changesMask[26]) + { + for (uint32 i = 0; i < HouseThemes.size(); ++i) + { + if (HouseThemes.HasChanged(i) || ignoreNestedChangesMask) + { + data << uint32(HouseThemes[i]); + } + } + } + if (changesMask[27]) + { + for (uint32 i = 0; i < HouseRoomComponentTextures.size(); ++i) + { + if (HouseRoomComponentTextures.HasChanged(i) || ignoreNestedChangesMask) + { + data << uint32(HouseRoomComponentTextures[i]); + } + } + } + if (changesMask[29]) { for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { @@ -5778,7 +5887,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[26]) + if (changesMask[30]) { for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i) { @@ -5788,7 +5897,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[27]) + if (changesMask[31]) { for (uint32 i = 0; i < MawPowers.size(); ++i) { @@ -5798,7 +5907,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[28]) + } + if (changesMask[32]) + { + if (changesMask[33]) { for (uint32 i = 0; i < MultiFloorExploration.size(); ++i) { @@ -5808,7 +5920,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[29]) + if (changesMask[34]) { for (uint32 i = 0; i < RecipeProgression.size(); ++i) { @@ -5818,7 +5930,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[30]) + if (changesMask[35]) { for (uint32 i = 0; i < ReplayedQuests.size(); ++i) { @@ -5828,7 +5940,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[31]) + if (changesMask[36]) { for (uint32 i = 0; i < TaskQuests.size(); ++i) { @@ -5838,10 +5950,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[37]) { for (uint32 i = 0; i < DisabledSpells.size(); ++i) { @@ -5851,7 +5960,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[35]) + if (changesMask[39]) { for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) { @@ -5861,7 +5970,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[36]) + if (changesMask[40]) { for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i) { @@ -5871,7 +5980,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[37]) + if (changesMask[41]) { for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { @@ -5881,7 +5990,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[38]) + if (changesMask[42]) { for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) { @@ -5891,7 +6000,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[39]) + if (changesMask[43]) { for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) { @@ -5905,14 +6014,14 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[32]) { - if (changesMask[40]) + if (changesMask[44]) { if (!ignoreNestedChangesMask) CharacterBankTabSettings.WriteUpdateMask(data, 3); else WriteCompleteDynamicFieldUpdateMask(CharacterBankTabSettings.size(), data, 3); } - if (changesMask[41]) + if (changesMask[45]) { if (!ignoreNestedChangesMask) AccountBankTabSettings.WriteUpdateMask(data, 3); @@ -5933,7 +6042,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[24]) + if (changesMask[28]) { for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) { @@ -5946,7 +6055,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[32]) { - if (changesMask[34]) + if (changesMask[38]) { for (uint32 i = 0; i < CraftingOrders.size(); ++i) { @@ -5956,7 +6065,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[40]) + if (changesMask[44]) { for (uint32 i = 0; i < CharacterBankTabSettings.size(); ++i) { @@ -5966,7 +6075,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[41]) + if (changesMask[45]) { for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i) { @@ -5976,368 +6085,368 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[48]) - { - data << *FarsightObject; - } - if (changesMask[49]) - { - data << *SummonedBattlePetGUID; - } - if (changesMask[50]) - { - data << uint64(Coinage); - } - if (changesMask[51]) - { - data << uint64(AccountBankCoinage); - } if (changesMask[52]) { - data << int32(XP); + data << *FarsightObject; } if (changesMask[53]) { - data << int32(NextLevelXP); + data << *SummonedBattlePetGUID; } if (changesMask[54]) { - data << int32(TrialXP); + data << uint64(Coinage); } if (changesMask[55]) { - Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << uint64(AccountBankCoinage); } if (changesMask[56]) { - data << int32(CharacterPoints); + data << int32(XP); } if (changesMask[57]) { - data << int32(MaxTalentTiers); + data << int32(NextLevelXP); } if (changesMask[58]) { - data << uint32(TrackCreatureMask); + data << int32(TrialXP); } if (changesMask[59]) { - data << float(MainhandExpertise); + Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[60]) { - data << float(OffhandExpertise); + data << int32(CharacterPoints); } if (changesMask[61]) { - data << float(RangedExpertise); + data << int32(MaxTalentTiers); } if (changesMask[62]) { - data << float(CombatRatingExpertise); + data << uint32(TrackCreatureMask); } if (changesMask[63]) { - data << float(BlockPercentage); + data << float(MainhandExpertise); } if (changesMask[64]) { - data << float(DodgePercentage); + data << float(OffhandExpertise); } if (changesMask[65]) { - data << float(DodgePercentageFromAttribute); + data << float(RangedExpertise); } if (changesMask[66]) { - data << float(ParryPercentage); + data << float(CombatRatingExpertise); } if (changesMask[67]) { - data << float(ParryPercentageFromAttribute); + data << float(BlockPercentage); } if (changesMask[68]) { - data << float(CritPercentage); + data << float(DodgePercentage); } if (changesMask[69]) { - data << float(RangedCritPercentage); + data << float(DodgePercentageFromAttribute); } } if (changesMask[70]) { if (changesMask[71]) { - data << float(OffhandCritPercentage); + data << float(ParryPercentage); } if (changesMask[72]) { - data << float(SpellCritPercentage); + data << float(ParryPercentageFromAttribute); } if (changesMask[73]) { - data << int32(ShieldBlock); + data << float(CritPercentage); } if (changesMask[74]) { - data << float(ShieldBlockCritPercentage); + data << float(RangedCritPercentage); } if (changesMask[75]) { - data << float(Mastery); + data << float(OffhandCritPercentage); } if (changesMask[76]) { - data << float(Speed); + data << float(SpellCritPercentage); } if (changesMask[77]) { - data << float(Avoidance); + data << int32(ShieldBlock); } if (changesMask[78]) { - data << float(Sturdiness); + data << float(ShieldBlockCritPercentage); } if (changesMask[79]) { - data << int32(Versatility); + data << float(Mastery); } if (changesMask[80]) { - data << float(VersatilityBonus); + data << float(Speed); } if (changesMask[81]) { - data << float(PvpPowerDamage); + data << float(Avoidance); } if (changesMask[82]) { - data << float(PvpPowerHealing); + data << float(Sturdiness); } if (changesMask[83]) { - BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(Versatility); } if (changesMask[84]) { - data << int32(ModHealingDonePos); + data << float(VersatilityBonus); } if (changesMask[85]) { - data << float(ModHealingPercent); + data << float(PvpPowerDamage); } if (changesMask[86]) { - data << float(ModPeriodicHealingDonePercent); + data << float(PvpPowerHealing); } if (changesMask[87]) { - data << float(ModSpellPowerPercent); + BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[88]) { - data << float(ModResiliencePercent); + data << int32(ModHealingDonePos); } if (changesMask[89]) { - data << float(OverrideSpellPowerByAPPercent); + data << float(ModHealingPercent); } if (changesMask[90]) { - data << float(OverrideAPBySpellPowerPercent); + data << float(ModPeriodicHealingDonePercent); } if (changesMask[91]) { - data << int32(ModTargetResistance); + data << float(ModSpellPowerPercent); } if (changesMask[92]) { - data << int32(ModTargetPhysicalResistance); + data << float(ModResiliencePercent); } if (changesMask[93]) { - data << uint32(LocalFlags); + data << float(OverrideSpellPowerByAPPercent); } if (changesMask[94]) { - data << uint8(GrantableLevels); + data << float(OverrideAPBySpellPowerPercent); } if (changesMask[95]) { - data << uint8(MultiActionBars); + data << int32(ModTargetResistance); } if (changesMask[96]) { - data << uint8(LifetimeMaxRank); + data << int32(ModTargetPhysicalResistance); } if (changesMask[97]) { - data << uint8(NumRespecs); + data << uint32(LocalFlags); } if (changesMask[98]) { - data << uint32(PvpMedals); + data << uint8(GrantableLevels); } if (changesMask[99]) { - data << uint16(TodayHonorableKills); + data << uint8(MultiActionBars); } if (changesMask[100]) { - data << uint16(YesterdayHonorableKills); + data << uint8(LifetimeMaxRank); } if (changesMask[101]) { - data << uint32(LifetimeHonorableKills); + data << uint8(NumRespecs); } } if (changesMask[102]) { if (changesMask[103]) { - data << int32(WatchedFactionIndex); + data << uint32(PvpMedals); } if (changesMask[104]) { - data << int32(MaxLevel); + data << uint16(TodayHonorableKills); } if (changesMask[105]) { - data << int32(ScalingPlayerLevelDelta); + data << uint16(YesterdayHonorableKills); } if (changesMask[106]) { - data << int32(MaxCreatureScalingLevel); + data << uint32(LifetimeHonorableKills); } if (changesMask[107]) { - data << int32(PetSpellPower); + data << int32(WatchedFactionIndex); } if (changesMask[108]) { - data << float(UiHitModifier); + data << int32(MaxLevel); } if (changesMask[109]) { - data << float(UiSpellHitModifier); + data << int32(ScalingPlayerLevelDelta); } if (changesMask[110]) { - data << int32(HomeRealmTimeOffset); + data << int32(MaxCreatureScalingLevel); } if (changesMask[111]) { - data << float(ModPetHaste); + data << int32(PetSpellPower); } if (changesMask[112]) { - data << int8(JailersTowerLevelMax); + data << float(UiHitModifier); } if (changesMask[113]) { - data << int8(JailersTowerLevel); + data << float(UiSpellHitModifier); } if (changesMask[114]) { - data << uint8(LocalRegenFlags); + data << int32(HomeRealmTimeOffset); } if (changesMask[115]) { - data << uint8(AuraVision); + data << float(ModPetHaste); } if (changesMask[116]) { - data << uint8(NumBackpackSlots); + data << int8(JailersTowerLevelMax); } if (changesMask[117]) { - data << int32(OverrideSpellsID); + data << int8(JailersTowerLevel); } if (changesMask[118]) { - data << uint16(LootSpecID); + data << uint8(LocalRegenFlags); } if (changesMask[119]) { - data << uint32(OverrideZonePVPType); + data << uint8(AuraVision); } if (changesMask[120]) { - data << int32(Honor); + data << uint8(NumBackpackSlots); } if (changesMask[121]) { - data << int32(HonorNextLevel); + data << int32(OverrideSpellsID); } if (changesMask[122]) { - data << int32(PerksProgramCurrency); + data << uint16(LootSpecID); } if (changesMask[123]) { - data << uint8(NumBankSlots); + data << uint32(OverrideZonePVPType); } if (changesMask[124]) { - data << uint8(NumCharacterBankTabs); + data << int32(Honor); } if (changesMask[125]) + { + data << int32(HonorNextLevel); + } + if (changesMask[126]) + { + data << int32(PerksProgramCurrency); + } + if (changesMask[127]) + { + data << uint8(NumBankSlots); + } + if (changesMask[128]) + { + data << uint8(NumCharacterBankTabs); + } + if (changesMask[129]) { data << uint8(NumAccountBankTabs); } - if (changesMask[130]) + } + if (changesMask[134]) + { + if (changesMask[135]) { data << int32(UiChromieTimeExpansionID); } - if (changesMask[131]) + if (changesMask[136]) { data << int32(TimerunningSeasonID); } - if (changesMask[132]) + if (changesMask[137]) { data << int32(TransportServerTime); } - if (changesMask[133]) + if (changesMask[138]) { data << uint32(WeeklyRewardsPeriodSinceOrigin); } - } - if (changesMask[134]) - { - if (changesMask[135]) + if (changesMask[139]) { data << int16(DEBUGSoulbindConduitRank); } - if (changesMask[138]) + if (changesMask[142]) { data << uint32(ActiveCombatTraitConfigID); } - if (changesMask[139]) + if (changesMask[143]) { data << int32(ItemUpgradeHighOnehandWeaponItemID); } - if (changesMask[140]) + if (changesMask[144]) { data << int32(ItemUpgradeHighFingerItemID); } - if (changesMask[141]) + if (changesMask[145]) { data << float(ItemUpgradeHighFingerWatermark); } - if (changesMask[142]) + if (changesMask[146]) { data << int32(ItemUpgradeHighTrinketItemID); } - if (changesMask[143]) + if (changesMask[147]) { data << float(ItemUpgradeHighTrinketWatermark); } - if (changesMask[144]) + if (changesMask[148]) { data << uint64(LootHistoryInstanceID); } - if (changesMask[146]) + if (changesMask[150]) { data << uint8(RequiredMountCapabilityFlags); } @@ -6356,58 +6465,58 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[102]) { - if (changesMask[126]) + if (changesMask[130]) { ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[128]) + if (changesMask[132]) { if (QuestSession.has_value()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[127]) + if (changesMask[131]) { data << *FrozenPerksVendorItem; } - if (changesMask[129]) + if (changesMask[133]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } if (changesMask[134]) { - if (changesMask[136]) + if (changesMask[140]) { data << *DungeonScore; } - if (changesMask[137]) + if (changesMask[141]) { WriteMapFieldUpdate(TraitConfigs, data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[145]) + if (changesMask[149]) { if (PetStable.has_value()) { PetStable->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[147]) + if (changesMask[151]) { if (WalkInData.has_value()) { WalkInData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[148]) + if (changesMask[152]) { if (DelveData.has_value()) { DelveData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[149]) + if (changesMask[153]) { if (ChallengeModeData.has_value()) { @@ -6415,121 +6524,121 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[150]) + if (changesMask[154]) { for (uint32 i = 0; i < 105; ++i) { - if (changesMask[151 + i]) + if (changesMask[155 + i]) { data << InvSlots[i]; } } } - if (changesMask[256]) + if (changesMask[260]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[257 + i]) + if (changesMask[261 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[259]) + if (changesMask[263]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[260 + i]) + if (changesMask[264 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[267 + i]) + if (changesMask[271 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[274 + i]) + if (changesMask[278 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[281 + i]) + if (changesMask[285 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[288]) + if (changesMask[292]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[289 + i]) + if (changesMask[293 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[292 + i]) + if (changesMask[296 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[295]) + if (changesMask[299]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[296 + i]) + if (changesMask[300 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[308 + i]) + if (changesMask[312 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[320]) + if (changesMask[324]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[321 + i]) + if (changesMask[325 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[353]) + if (changesMask[357]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[354 + i]) + if (changesMask[358 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[358]) + if (changesMask[362]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[359 + i]) + if (changesMask[363 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[361]) + if (changesMask[365]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[362 + i]) + if (changesMask[366 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[367]) + if (changesMask[371]) { for (uint32 i = 0; i < 17; ++i) { - if (changesMask[368 + i]) + if (changesMask[372 + i]) { data << float(ItemUpgradeHighWatermark[i]); } @@ -6565,6 +6674,10 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(RuneforgePowers); Base::ClearChangesMask(TransmogIllusions); Base::ClearChangesMask(WarbandScenes); + Base::ClearChangesMask(HouseRooms); + Base::ClearChangesMask(HouseExteriorComponents); + Base::ClearChangesMask(HouseThemes); + Base::ClearChangesMask(HouseRoomComponentTextures); Base::ClearChangesMask(SpellPctModByLabel); Base::ClearChangesMask(SpellFlatModByLabel); Base::ClearChangesMask(MawPowers); @@ -8365,6 +8478,86 @@ void ConversationData::ClearChangesMask() _changesMask.ResetAll(); } +void AaBox::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const +{ + data << Low; + data << High; +} + +void AaBox::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const +{ + data << Low; + data << High; +} + +bool AaBox::operator==(AaBox const& right) const +{ + return Low == right.Low + && High == right.High; +} + +void MeshObjectData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data.WriteBit(IsWMO); + data.WriteBit(IsRoom); + data.WriteBits(Geobox.has_value(), 1); + data << int32(FileDataID); + if (Geobox.has_value()) + { + Geobox->WriteCreate(data, owner, receiver); + } + data.FlushBits(); + data.FlushBits(); +} + +void MeshObjectData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void MeshObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 5); + + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteBit(IsWMO); + } + if (changesMask[2]) + { + data.WriteBit(IsRoom); + } + data.WriteBits(Geobox.has_value(), 1); + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[3]) + { + data << int32(FileDataID); + } + if (changesMask[4]) + { + if (Geobox.has_value()) + { + Geobox->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + data.FlushBits(); +} + +void MeshObjectData::ClearChangesMask() +{ + Base::ClearChangesMask(IsWMO); + Base::ClearChangesMask(IsRoom); + Base::ClearChangesMask(FileDataID); + Base::ClearChangesMask(Geobox); + _changesMask.ResetAll(); +} + void VendorData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Creature const* owner, Player const* receiver) const { data << int32(Flags); @@ -8395,6 +8588,1127 @@ void VendorData::ClearChangesMask() _changesMask.ResetAll(); } +void DecorStoragePersistedDataDyes::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const +{ + for (uint32 i = 0; i < 3; ++i) + { + data << int32(DyeColorID[i]); + } +} + +void DecorStoragePersistedDataDyes::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const +{ + for (uint32 i = 0; i < 3; ++i) + { + data << int32(DyeColorID[i]); + } +} + +bool DecorStoragePersistedDataDyes::operator==(DecorStoragePersistedDataDyes const& right) const +{ + return std::ranges::equal(DyeColorID, right.DyeColorID); +} + +void DecorStoragePersistedData::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const +{ + data << *HouseGUID; + data << uint8(Field_20); + data.WriteBits(Dyes.has_value(), 1); + if (Dyes.has_value()) + { + Dyes->WriteCreate(data, owner, receiver); + } +} + +void DecorStoragePersistedData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << *HouseGUID; + } + if (changesMask[3]) + { + data << uint8(Field_20); + } + data.WriteBits(Dyes.has_value(), 1); + if (changesMask[2]) + { + if (Dyes.has_value()) + { + Dyes->WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + } +} + +void DecorStoragePersistedData::ClearChangesMask() +{ + Base::ClearChangesMask(HouseGUID); + Base::ClearChangesMask(Dyes); + Base::ClearChangesMask(Field_20); + _changesMask.ResetAll(); +} + +void HousingDecorData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data << *DecorGUID; + data << *AttachParentGUID; + data << uint8(Flags); + data << *Field_68; + data.WriteBits(PersistedData.has_value(), 1); + if (PersistedData.has_value()) + { + PersistedData->WriteCreate(data, owner, receiver); + } +} + +void HousingDecorData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void HousingDecorData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 6); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << *DecorGUID; + } + if (changesMask[2]) + { + data << *AttachParentGUID; + } + if (changesMask[3]) + { + data << uint8(Flags); + } + if (changesMask[5]) + { + data << *Field_68; + } + data.WriteBits(PersistedData.has_value(), 1); + if (changesMask[4]) + { + if (PersistedData.has_value()) + { + PersistedData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } +} + +void HousingDecorData::ClearChangesMask() +{ + Base::ClearChangesMask(DecorGUID); + Base::ClearChangesMask(AttachParentGUID); + Base::ClearChangesMask(Flags); + Base::ClearChangesMask(PersistedData); + Base::ClearChangesMask(Field_68); + _changesMask.ResetAll(); +} + +void HousingDoorData::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const +{ + data << int32(RoomComponentID); + data << *RoomComponentOffset; + data << uint8(RoomComponentType); + data << *AttachedRoomGUID; +} + +void HousingDoorData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 5); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(RoomComponentID); + } + if (changesMask[2]) + { + data << *RoomComponentOffset; + } + if (changesMask[3]) + { + data << uint8(RoomComponentType); + } + if (changesMask[4]) + { + data << *AttachedRoomGUID; + } + } +} + +void HousingDoorData::ClearChangesMask() +{ + Base::ClearChangesMask(RoomComponentID); + Base::ClearChangesMask(RoomComponentOffset); + Base::ClearChangesMask(RoomComponentType); + Base::ClearChangesMask(AttachedRoomGUID); + _changesMask.ResetAll(); +} + +void HousingRoomData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data << *HouseGUID; + data << int32(HouseRoomID); + data << int32(Flags); + data << uint32(MeshObjects.size()); + data << uint32(Doors.size()); + data << int32(FloorIndex); + for (uint32 i = 0; i < MeshObjects.size(); ++i) + { + data << MeshObjects[i]; + } + for (uint32 i = 0; i < Doors.size(); ++i) + { + Doors[i].WriteCreate(data, owner, receiver); + } +} + +void HousingRoomData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void HousingRoomData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 7); + + if (changesMask[0]) + { + if (changesMask[1]) + { + if (!ignoreNestedChangesMask) + MeshObjects.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(MeshObjects.size(), data); + } + if (changesMask[2]) + { + if (!ignoreNestedChangesMask) + Doors.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Doors.size(), data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (uint32 i = 0; i < MeshObjects.size(); ++i) + { + if (MeshObjects.HasChanged(i) || ignoreNestedChangesMask) + { + data << MeshObjects[i]; + } + } + } + if (changesMask[2]) + { + for (uint32 i = 0; i < Doors.size(); ++i) + { + if (Doors.HasChanged(i) || ignoreNestedChangesMask) + { + Doors[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[3]) + { + data << *HouseGUID; + } + if (changesMask[4]) + { + data << int32(HouseRoomID); + } + if (changesMask[5]) + { + data << int32(Flags); + } + if (changesMask[6]) + { + data << int32(FloorIndex); + } + } +} + +void HousingRoomData::ClearChangesMask() +{ + Base::ClearChangesMask(MeshObjects); + Base::ClearChangesMask(Doors); + Base::ClearChangesMask(HouseGUID); + Base::ClearChangesMask(HouseRoomID); + Base::ClearChangesMask(Flags); + Base::ClearChangesMask(FloorIndex); + _changesMask.ResetAll(); +} + +void HousingRoomComponentMeshData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data << *RoomGUID; + data << int32(RoomComponentOptionID); + data << int32(RoomComponentID); + data << uint8(Field_20); + data << uint8(RoomComponentType); + data << int32(Field_24); + data << int32(HouseThemeID); + data << int32(RoomComponentTextureID); + data << int32(RoomComponentTypeParam); +} + +void HousingRoomComponentMeshData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void HousingRoomComponentMeshData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 10); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << *RoomGUID; + } + if (changesMask[2]) + { + data << int32(RoomComponentOptionID); + } + if (changesMask[3]) + { + data << int32(RoomComponentID); + } + if (changesMask[4]) + { + data << uint8(Field_20); + } + if (changesMask[5]) + { + data << uint8(RoomComponentType); + } + if (changesMask[6]) + { + data << int32(Field_24); + } + if (changesMask[7]) + { + data << int32(HouseThemeID); + } + if (changesMask[8]) + { + data << int32(RoomComponentTextureID); + } + if (changesMask[9]) + { + data << int32(RoomComponentTypeParam); + } + } +} + +void HousingRoomComponentMeshData::ClearChangesMask() +{ + Base::ClearChangesMask(RoomGUID); + Base::ClearChangesMask(RoomComponentOptionID); + Base::ClearChangesMask(RoomComponentID); + Base::ClearChangesMask(Field_20); + Base::ClearChangesMask(RoomComponentType); + Base::ClearChangesMask(Field_24); + Base::ClearChangesMask(HouseThemeID); + Base::ClearChangesMask(RoomComponentTextureID); + Base::ClearChangesMask(RoomComponentTypeParam); + _changesMask.ResetAll(); +} + +void HousingPlayerHouseData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data << *BnetAccount; + data << int32(PlotIndex); + data << uint32(Level); + data << uint64(Field_20); + data << uint32(InteriorDecorPlacementBudget); + data << uint32(ExteriorDecorPlacementBudget); + data << uint32(ExteriorFixtureBudget); + data << uint32(RoomPlacementBudget); + data << *EntityGUID; +} + +void HousingPlayerHouseData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void HousingPlayerHouseData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 10); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << *BnetAccount; + } + if (changesMask[2]) + { + data << int32(PlotIndex); + } + if (changesMask[3]) + { + data << uint32(Level); + } + if (changesMask[4]) + { + data << uint64(Field_20); + } + if (changesMask[5]) + { + data << uint32(InteriorDecorPlacementBudget); + } + if (changesMask[6]) + { + data << uint32(ExteriorDecorPlacementBudget); + } + if (changesMask[7]) + { + data << uint32(ExteriorFixtureBudget); + } + if (changesMask[8]) + { + data << uint32(RoomPlacementBudget); + } + if (changesMask[9]) + { + data << *EntityGUID; + } + } +} + +void HousingPlayerHouseData::ClearChangesMask() +{ + Base::ClearChangesMask(BnetAccount); + Base::ClearChangesMask(PlotIndex); + Base::ClearChangesMask(Level); + Base::ClearChangesMask(Field_20); + Base::ClearChangesMask(InteriorDecorPlacementBudget); + Base::ClearChangesMask(ExteriorDecorPlacementBudget); + Base::ClearChangesMask(ExteriorFixtureBudget); + Base::ClearChangesMask(RoomPlacementBudget); + Base::ClearChangesMask(EntityGUID); + _changesMask.ResetAll(); +} + +void HousingCornerstoneData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const +{ + data << uint64(Cost); + data << int32(PlotIndex); +} + +void HousingCornerstoneData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void HousingCornerstoneData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, GameObject const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << uint64(Cost); + } + if (changesMask[2]) + { + data << int32(PlotIndex); + } + } +} + +void HousingCornerstoneData::ClearChangesMask() +{ + Base::ClearChangesMask(Cost); + Base::ClearChangesMask(PlotIndex); + _changesMask.ResetAll(); +} + +void HousingPlotAreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +{ + data << uint32(Field_0); + data << *HouseOwnerGUID; + data << *HouseGUID; + data << *HouseOwnerBnetAccountGUID; +} + +void HousingPlotAreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void HousingPlotAreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 5); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << uint32(Field_0); + } + if (changesMask[2]) + { + data << *HouseOwnerGUID; + } + if (changesMask[3]) + { + data << *HouseGUID; + } + if (changesMask[4]) + { + data << *HouseOwnerBnetAccountGUID; + } + } +} + +void HousingPlotAreaTriggerData::ClearChangesMask() +{ + Base::ClearChangesMask(Field_0); + Base::ClearChangesMask(HouseOwnerGUID); + Base::ClearChangesMask(HouseGUID); + Base::ClearChangesMask(HouseOwnerBnetAccountGUID); + _changesMask.ResetAll(); +} + +void PlayerHouseInfo::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const +{ + data << HouseGUID; + data << OwnerGUID; +} + +void PlayerHouseInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const +{ + data << HouseGUID; + data << OwnerGUID; +} + +bool PlayerHouseInfo::operator==(PlayerHouseInfo const& right) const +{ + return HouseGUID == right.HouseGUID + && OwnerGUID == right.OwnerGUID; +} + +void HousingOwner::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const +{ + data << BnetAccountGUID; + data << PlayerGUID; +} + +void HousingOwner::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const +{ + data << BnetAccountGUID; + data << PlayerGUID; +} + +bool HousingOwner::operator==(HousingOwner const& right) const +{ + return BnetAccountGUID == right.BnetAccountGUID + && PlayerGUID == right.PlayerGUID; +} + +void NeighborhoodMirrorData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data.WriteBits(Name->size() + 1, 8); + data << *OwnerGUID; + data << uint32(Houses.size()); + data << uint32(Managers.size()); + data << WorldPackets::SizedCString::Data(*Name); + for (uint32 i = 0; i < Houses.size(); ++i) + { + Houses[i].WriteCreate(data, owner, receiver); + } + for (uint32 i = 0; i < Managers.size(); ++i) + { + Managers[i].WriteCreate(data, owner, receiver); + } +} + +void NeighborhoodMirrorData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void NeighborhoodMirrorData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 5); + + if (changesMask[0]) + { + if (changesMask[1]) + { + if (!ignoreNestedChangesMask) + Houses.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Houses.size(), data); + } + if (changesMask[2]) + { + if (!ignoreNestedChangesMask) + Managers.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Managers.size(), data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (uint32 i = 0; i < Houses.size(); ++i) + { + if (Houses.HasChanged(i) || ignoreNestedChangesMask) + { + Houses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[2]) + { + for (uint32 i = 0; i < Managers.size(); ++i) + { + if (Managers.HasChanged(i) || ignoreNestedChangesMask) + { + Managers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[3]) + { + data.WriteBits(Name->size() + 1, 8); + } + if (changesMask[4]) + { + data << *OwnerGUID; + } + if (changesMask[3]) + { + data << WorldPackets::SizedCString::Data(*Name); + } + } +} + +void NeighborhoodMirrorData::ClearChangesMask() +{ + Base::ClearChangesMask(Houses); + Base::ClearChangesMask(Managers); + Base::ClearChangesMask(OwnerGUID); + Base::ClearChangesMask(Name); + _changesMask.ResetAll(); +} + +void MirroredMeshObjectData::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const +{ + data << *AttachParentGUID; + data << *PositionLocalSpace; + data << float(RotationLocalSpace->x); + data << float(RotationLocalSpace->y); + data << float(RotationLocalSpace->z); + data << float(RotationLocalSpace->w); + data << float(ScaleLocalSpace); + data << uint8(AttachmentFlags); +} + +void MirroredMeshObjectData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 6); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << *AttachParentGUID; + } + if (changesMask[2]) + { + data << *PositionLocalSpace; + } + if (changesMask[3]) + { + data << float(RotationLocalSpace->x); + data << float(RotationLocalSpace->y); + data << float(RotationLocalSpace->z); + data << float(RotationLocalSpace->w); + } + if (changesMask[4]) + { + data << float(ScaleLocalSpace); + } + if (changesMask[5]) + { + data << uint8(AttachmentFlags); + } + } +} + +void MirroredMeshObjectData::ClearChangesMask() +{ + Base::ClearChangesMask(AttachParentGUID); + Base::ClearChangesMask(PositionLocalSpace); + Base::ClearChangesMask(RotationLocalSpace); + Base::ClearChangesMask(ScaleLocalSpace); + Base::ClearChangesMask(AttachmentFlags); + _changesMask.ResetAll(); +} + +void MirroredPositionData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + PositionData->WriteCreate(data, owner, receiver); +} + +void MirroredPositionData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void MirroredPositionData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 2); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + PositionData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } +} + +void MirroredPositionData::ClearChangesMask() +{ + Base::ClearChangesMask(PositionData); + _changesMask.ResetAll(); +} + +void PlayerMirrorHouse::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << Guid; + data << NeighborhoodGUID; + data << uint32(Level); + data << uint32(Favor); + data << int32(Field_28); +} + +void PlayerMirrorHouse::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data << Guid; + data << NeighborhoodGUID; + data << uint32(Level); + data << uint32(Favor); + data << int32(Field_28); +} + +bool PlayerMirrorHouse::operator==(PlayerMirrorHouse const& right) const +{ + return Guid == right.Guid + && NeighborhoodGUID == right.NeighborhoodGUID + && Level == right.Level + && Favor == right.Favor + && Field_28 == right.Field_28; +} + +void NeighborhoodCharterSignature::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << Guid; +} + +void NeighborhoodCharterSignature::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data << Guid; +} + +bool NeighborhoodCharterSignature::operator==(NeighborhoodCharterSignature const& right) const +{ + return Guid == right.Guid; +} + +void NeighborhoodCharter::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(Field_0); + data << int32(Field_4); + data << uint32(Signatures.size()); + for (uint32 i = 0; i < Signatures.size(); ++i) + { + Signatures[i].WriteCreate(data, owner, receiver); + } + data.WriteBits(Name.size() + 1, 8); + data << WorldPackets::SizedCString::Data(Name); +} + +void NeighborhoodCharter::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data << int32(Field_0); + data << int32(Field_4); + data << uint32(Signatures.size()); + for (uint32 i = 0; i < Signatures.size(); ++i) + { + Signatures[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + data.FlushBits(); + data.WriteBits(Name.size() + 1, 8); + data << WorldPackets::SizedCString::Data(Name); +} + +bool NeighborhoodCharter::operator==(NeighborhoodCharter const& right) const +{ + return Signatures == right.Signatures + && Field_0 == right.Field_0 + && Field_4 == right.Field_4 + && Name == right.Name; +} + +void PlayerHouseInfoComponentData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint32(Field_8.size()); + data << *Field_40; + } + data << uint32(Houses.size()); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint32(Field_88.size()); + data << uint32(Field_C0.size()); + data << uint32(Field_F8.size()); + data << uint8(Field_178); + for (uint32 i = 0; i < Field_8.size(); ++i) + { + data << Field_8[i]; + } + } + for (uint32 i = 0; i < Houses.size(); ++i) + { + Houses[i].WriteCreate(data, owner, receiver); + } + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + for (uint32 i = 0; i < Field_88.size(); ++i) + { + data << Field_88[i]; + } + for (uint32 i = 0; i < Field_C0.size(); ++i) + { + data << Field_C0[i]; + } + for (uint32 i = 0; i < Field_F8.size(); ++i) + { + data << Field_F8[i]; + } + Charter->WriteCreate(data, owner, receiver); + } +} + +static constexpr void PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(PlayerHouseInfoComponentData::Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags) +{ + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + allowedMaskForTarget |= std::array{ 0x000001FAu }; +} + +void PlayerHouseInfoComponentData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags) +{ + PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); +} + +void PlayerHouseInfoComponentData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag fieldVisibilityFlags) +{ + Mask allowedMaskForTarget({ 0x00000005u }); + PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); + changesMask &= allowedMaskForTarget; +} + +void PlayerHouseInfoComponentData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + Mask allowedMaskForTarget({ 0x00000005u }); + PlayerHouseInfoComponentDataAppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); + WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); +} + +void PlayerHouseInfoComponentData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 9); + + if (changesMask[0]) + { + if (changesMask[1]) + { + if (!ignoreNestedChangesMask) + Field_8.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_8.size(), data); + } + if (changesMask[2]) + { + if (!ignoreNestedChangesMask) + Houses.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Houses.size(), data); + } + if (changesMask[3]) + { + if (!ignoreNestedChangesMask) + Field_88.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_88.size(), data); + } + if (changesMask[4]) + { + if (!ignoreNestedChangesMask) + Field_C0.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_C0.size(), data); + } + if (changesMask[5]) + { + if (!ignoreNestedChangesMask) + Field_F8.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_F8.size(), data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (uint32 i = 0; i < Field_8.size(); ++i) + { + if (Field_8.HasChanged(i) || ignoreNestedChangesMask) + { + data << Field_8[i]; + } + } + } + if (changesMask[2]) + { + for (uint32 i = 0; i < Houses.size(); ++i) + { + if (Houses.HasChanged(i) || ignoreNestedChangesMask) + { + Houses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[3]) + { + for (uint32 i = 0; i < Field_88.size(); ++i) + { + if (Field_88.HasChanged(i) || ignoreNestedChangesMask) + { + data << Field_88[i]; + } + } + } + if (changesMask[4]) + { + for (uint32 i = 0; i < Field_C0.size(); ++i) + { + if (Field_C0.HasChanged(i) || ignoreNestedChangesMask) + { + data << Field_C0[i]; + } + } + } + if (changesMask[5]) + { + for (uint32 i = 0; i < Field_F8.size(); ++i) + { + if (Field_F8.HasChanged(i) || ignoreNestedChangesMask) + { + data << Field_F8[i]; + } + } + } + if (changesMask[6]) + { + data << *Field_40; + } + if (changesMask[8]) + { + data << uint8(Field_178); + } + if (changesMask[7]) + { + Charter->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } +} + +void PlayerHouseInfoComponentData::ClearChangesMask() +{ + Base::ClearChangesMask(Field_8); + Base::ClearChangesMask(Houses); + Base::ClearChangesMask(Field_88); + Base::ClearChangesMask(Field_C0); + Base::ClearChangesMask(Field_F8); + Base::ClearChangesMask(Field_40); + Base::ClearChangesMask(Charter); + Base::ClearChangesMask(Field_178); + _changesMask.ResetAll(); +} + +void HousingStorageData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteMapFieldCreate(Decor, data, owner, receiver); + data << uint32(DecorMaxOwnedCount); +} + +void HousingStorageData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void HousingStorageData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + WriteMapFieldUpdate(Decor, data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[2]) + { + data << uint32(DecorMaxOwnedCount); + } + } +} + +void HousingStorageData::ClearChangesMask() +{ + Base::ClearChangesMask(Decor); + Base::ClearChangesMask(DecorMaxOwnedCount); + _changesMask.ResetAll(); +} + +void HousingFixtureData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data << int32(ExteriorComponentID); + data << int32(HouseExteriorWmoDataID); + data << int32(ExteriorComponentHookID); + data << *HouseGUID; + data << *AttachParentGUID; + data << *Guid; + data << *GameObjectGUID; + data << uint8(ExteriorComponentType); + data << uint8(Field_59); + data << uint8(Size); +} + +void HousingFixtureData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + WriteUpdate(data, _changesMask, false, owner, receiver); +} + +void HousingFixtureData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 11); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(ExteriorComponentID); + } + if (changesMask[2]) + { + data << int32(HouseExteriorWmoDataID); + } + if (changesMask[3]) + { + data << int32(ExteriorComponentHookID); + } + if (changesMask[4]) + { + data << *HouseGUID; + } + if (changesMask[5]) + { + data << *AttachParentGUID; + } + if (changesMask[6]) + { + data << *Guid; + } + if (changesMask[7]) + { + data << *GameObjectGUID; + } + if (changesMask[8]) + { + data << uint8(ExteriorComponentType); + } + if (changesMask[9]) + { + data << uint8(Field_59); + } + if (changesMask[10]) + { + data << uint8(Size); + } + } +} + +void HousingFixtureData::ClearChangesMask() +{ + Base::ClearChangesMask(ExteriorComponentID); + Base::ClearChangesMask(HouseExteriorWmoDataID); + Base::ClearChangesMask(ExteriorComponentHookID); + Base::ClearChangesMask(HouseGUID); + Base::ClearChangesMask(AttachParentGUID); + Base::ClearChangesMask(Guid); + Base::ClearChangesMask(GameObjectGUID); + Base::ClearChangesMask(ExteriorComponentType); + Base::ClearChangesMask(Field_59); + Base::ClearChangesMask(Size); + _changesMask.ResetAll(); +} + } #if TRINITY_COMPILER == TRINITY_COMPILER_GNU diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index aad04046fb0..1ccb5e0fdd7 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -271,7 +271,7 @@ struct UnitAssistActionData : public IsUpdateFieldStructureTag, public HasChange void ClearChangesMask(); }; -struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<223> +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<224> { UpdateField Field_314; UpdateField, 0, 2> StateWorldEffectIDs; @@ -312,127 +312,128 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<223> UpdateField ClassId; UpdateField PlayerClassId; UpdateField Sex; - UpdateField DisplayPower; - UpdateField OverrideDisplayPowerID; - UpdateField Health; - UpdateField MaxHealth; - UpdateField Level; - UpdateField EffectiveLevel; - UpdateField ContentTuningID; - UpdateField ScalingLevelMin; - UpdateField ScalingLevelMax; - UpdateField ScalingLevelDelta; - UpdateField ScalingFactionGroup; - UpdateField FactionTemplate; + UpdateField CreatureType; + UpdateField DisplayPower; + UpdateField OverrideDisplayPowerID; + UpdateField Health; + UpdateField MaxHealth; + UpdateField Level; + UpdateField EffectiveLevel; + UpdateField ContentTuningID; + UpdateField ScalingLevelMin; + UpdateField ScalingLevelMax; + UpdateField ScalingLevelDelta; + UpdateField ScalingFactionGroup; + UpdateField FactionTemplate; struct FactionTemplateTag : ViewerDependentValueTag {}; - UpdateField Flags; + UpdateField Flags; struct FlagsTag : ViewerDependentValueTag {}; - UpdateField Flags2; + UpdateField Flags2; struct Flags2Tag : ViewerDependentValueTag {}; - UpdateField Flags3; + UpdateField Flags3; struct Flags3Tag : ViewerDependentValueTag {}; - UpdateField Flags4; + UpdateField Flags4; struct Flags4Tag : ViewerDependentValueTag {}; - UpdateField AuraState; + UpdateField AuraState; struct AuraStateTag : ViewerDependentValueTag {}; - UpdateField RangedAttackRoundBaseTime; - UpdateField BoundingRadius; - UpdateField CombatReach; - UpdateField DisplayScale; - UpdateField CreatureFamily; - UpdateField CreatureType; - UpdateField NativeDisplayID; - UpdateField NativeXDisplayScale; - UpdateField MountDisplayID; - UpdateField CosmeticMountDisplayID; - UpdateField MinDamage; - UpdateField MaxDamage; - UpdateField MinOffHandDamage; - UpdateField MaxOffHandDamage; - UpdateField StandState; - UpdateField PetTalentPoints; - UpdateField VisFlags; - UpdateField AnimTier; - UpdateField PetNumber; - UpdateField PetNameTimestamp; - UpdateField PetExperience; - UpdateField PetNextLevelExperience; - UpdateField ModCastingSpeed; - UpdateField ModCastingSpeedNeg; - UpdateField ModSpellHaste; - UpdateField ModHaste; - UpdateField ModRangedHaste; - UpdateField ModHasteRegen; - UpdateField ModTimeRate; - UpdateField CreatedBySpell; - UpdateField EmoteState; - UpdateField BaseMana; - UpdateField BaseHealth; - UpdateField SheatheState; - UpdateField PvpFlags; + UpdateField RangedAttackRoundBaseTime; + UpdateField BoundingRadius; + UpdateField CombatReach; + UpdateField DisplayScale; + UpdateField CreatureFamily; + UpdateField OverrideCreatureType; + UpdateField NativeDisplayID; + UpdateField NativeXDisplayScale; + UpdateField MountDisplayID; + UpdateField CosmeticMountDisplayID; + UpdateField MinDamage; + UpdateField MaxDamage; + UpdateField MinOffHandDamage; + UpdateField MaxOffHandDamage; + UpdateField StandState; + UpdateField PetTalentPoints; + UpdateField VisFlags; + UpdateField AnimTier; + UpdateField PetNumber; + UpdateField PetNameTimestamp; + UpdateField PetExperience; + UpdateField PetNextLevelExperience; + UpdateField ModCastingSpeed; + UpdateField ModCastingSpeedNeg; + UpdateField ModSpellHaste; + UpdateField ModHaste; + UpdateField ModRangedHaste; + UpdateField ModHasteRegen; + UpdateField ModTimeRate; + UpdateField CreatedBySpell; + UpdateField EmoteState; + UpdateField BaseMana; + UpdateField BaseHealth; + UpdateField SheatheState; + UpdateField PvpFlags; struct PvpFlagsTag : ViewerDependentValueTag {}; - UpdateField PetFlags; - UpdateField ShapeshiftForm; - UpdateField AttackPower; - UpdateField AttackPowerModPos; - UpdateField AttackPowerModNeg; - UpdateField AttackPowerMultiplier; - UpdateField AttackPowerModSupport; - UpdateField RangedAttackPower; - UpdateField RangedAttackPowerModPos; - UpdateField RangedAttackPowerModNeg; - UpdateField RangedAttackPowerMultiplier; - UpdateField RangedAttackPowerModSupport; - UpdateField MainHandWeaponAttackPower; - UpdateField OffHandWeaponAttackPower; - UpdateField RangedWeaponAttackPower; - UpdateField SetAttackSpeedAura; - UpdateField Lifesteal; - UpdateField MinRangedDamage; - UpdateField MaxRangedDamage; - UpdateField ManaCostMultiplier; - UpdateField MaxHealthModifier; - UpdateField HoverHeight; - UpdateField MinItemLevelCutoff; - UpdateField MinItemLevel; - UpdateField MaxItemLevel; - UpdateField AzeriteItemLevel; - UpdateField WildBattlePetLevel; - UpdateField BattlePetCompanionExperience; - UpdateField BattlePetCompanionNameTimestamp; - UpdateField InteractSpellID; + UpdateField PetFlags; + UpdateField ShapeshiftForm; + UpdateField AttackPower; + UpdateField AttackPowerModPos; + UpdateField AttackPowerModNeg; + UpdateField AttackPowerMultiplier; + UpdateField AttackPowerModSupport; + UpdateField RangedAttackPower; + UpdateField RangedAttackPowerModPos; + UpdateField RangedAttackPowerModNeg; + UpdateField RangedAttackPowerMultiplier; + UpdateField RangedAttackPowerModSupport; + UpdateField MainHandWeaponAttackPower; + UpdateField OffHandWeaponAttackPower; + UpdateField RangedWeaponAttackPower; + UpdateField SetAttackSpeedAura; + UpdateField Lifesteal; + UpdateField MinRangedDamage; + UpdateField MaxRangedDamage; + UpdateField ManaCostMultiplier; + UpdateField MaxHealthModifier; + UpdateField HoverHeight; + UpdateField MinItemLevelCutoff; + UpdateField MinItemLevel; + UpdateField MaxItemLevel; + UpdateField AzeriteItemLevel; + UpdateField WildBattlePetLevel; + UpdateField BattlePetCompanionExperience; + UpdateField BattlePetCompanionNameTimestamp; + UpdateField InteractSpellID; struct InteractSpellIDTag : ViewerDependentValueTag {}; - UpdateField ScaleDuration; - UpdateField LooksLikeMountID; - UpdateField LooksLikeCreatureID; - UpdateField LookAtControllerID; - UpdateField PerksVendorItemID; - UpdateField TaxiNodesID; - UpdateField GuildGUID; - UpdateField FlightCapabilityID; - UpdateField GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use - UpdateField DriveCapabilityID; - UpdateField MaxHealthModifierFlatNeg; - UpdateField MaxHealthModifierFlatPos; - UpdateField SilencedSchoolMask; - UpdateField CurrentAreaID; - UpdateField Field_31C; - UpdateField Field_320; // Soft targeting related? When UnitFlags3 & 0x40000000 is set, increases some range check using CombatReach by this amount - UpdateField NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object - OptionalUpdateField AssistActionData; - UpdateFieldArray Power; - UpdateFieldArray MaxPower; - UpdateFieldArray PowerRegenFlatModifier; - UpdateFieldArray PowerRegenInterruptedFlatModifier; - UpdateFieldArray VirtualItems; - UpdateFieldArray AttackRoundBaseTime; - UpdateFieldArray Stats; - UpdateFieldArray StatPosBuff; - UpdateFieldArray StatNegBuff; - UpdateFieldArray StatSupportBuff; - UpdateFieldArray Resistances; - UpdateFieldArray BonusResistanceMods; - UpdateFieldArray ManaCostModifier; + UpdateField ScaleDuration; + UpdateField LooksLikeMountID; + UpdateField LooksLikeCreatureID; + UpdateField LookAtControllerID; + UpdateField PerksVendorItemID; + UpdateField TaxiNodesID; + UpdateField GuildGUID; + UpdateField FlightCapabilityID; + UpdateField GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use + UpdateField DriveCapabilityID; + UpdateField MaxHealthModifierFlatNeg; + UpdateField MaxHealthModifierFlatPos; + UpdateField SilencedSchoolMask; + UpdateField CurrentAreaID; + UpdateField Field_31C; + UpdateField Field_320; // Soft targeting related? When UnitFlags3 & 0x40000000 is set, increases some range check using CombatReach by this amount + UpdateField NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object + OptionalUpdateField AssistActionData; + UpdateFieldArray Power; + UpdateFieldArray MaxPower; + UpdateFieldArray PowerRegenFlatModifier; + UpdateFieldArray PowerRegenInterruptedFlatModifier; + UpdateFieldArray VirtualItems; + UpdateFieldArray AttackRoundBaseTime; + UpdateFieldArray Stats; + UpdateFieldArray StatPosBuff; + UpdateFieldArray StatNegBuff; + UpdateFieldArray StatSupportBuff; + UpdateFieldArray Resistances; + UpdateFieldArray BonusResistanceMods; + UpdateFieldArray ManaCostModifier; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; @@ -453,13 +454,14 @@ struct ChrCustomizationChoice : public IsUpdateFieldStructureTag bool operator!=(ChrCustomizationChoice const& right) const { return !(*this == right); } }; -struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30> +struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<31> { UpdateField QuestID; UpdateField StateFlags; UpdateField EndTime; UpdateField ObjectiveFlags; - UpdateFieldArray ObjectiveProgress; + UpdateField EnabledObjectivesMask; + UpdateFieldArray ObjectiveProgress; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -503,7 +505,7 @@ struct PetCreatureName : public IsUpdateFieldStructureTag, public HasChangesMask struct CTROptions : public IsUpdateFieldStructureTag { - uint32 ConditionalFlags; + std::vector ConditionalFlags; uint8 FactionGroup; uint32 ChromieTimeExpansionMask; @@ -643,9 +645,9 @@ struct BitVector : public IsUpdateFieldStructureTag, public HasChangesMask<2> void ClearChangesMask(); }; -struct BitVectors : public IsUpdateFieldStructureTag, public HasChangesMask<14> +struct BitVectors : public IsUpdateFieldStructureTag, public HasChangesMask<15> { - UpdateFieldArray Values; + UpdateFieldArray Values; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -1091,7 +1093,7 @@ struct Research : public IsUpdateFieldStructureTag bool operator!=(Research const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<385> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<389> { UpdateField BackpackAutoSortDisabled; UpdateField BackpackSellJunkDisabled; @@ -1099,9 +1101,9 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField SortBagsRightToLeft; UpdateField InsertItemsLeftToRight; UpdateField HasPerksProgramPendingReward; - UpdateFieldArray, 1, 42, 43> ResearchSites; - UpdateFieldArray, 1, 44, 45> ResearchSiteProgress; - UpdateFieldArray, 1, 46, 47> Research; + UpdateFieldArray, 1, 46, 47> ResearchSites; + UpdateFieldArray, 1, 48, 49> ResearchSiteProgress; + UpdateFieldArray, 1, 50, 51> Research; DynamicUpdateField KnownTitles; DynamicUpdateField CharacterDataElements; DynamicUpdateField AccountDataElements; @@ -1118,138 +1120,142 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas DynamicUpdateField RuneforgePowers; DynamicUpdateField TransmogIllusions; DynamicUpdateField WarbandScenes; - DynamicUpdateField SpellPctModByLabel; - DynamicUpdateField SpellFlatModByLabel; - DynamicUpdateField MawPowers; - DynamicUpdateField MultiFloorExploration; - DynamicUpdateField RecipeProgression; - DynamicUpdateField ReplayedQuests; - DynamicUpdateField TaskQuests; - DynamicUpdateField DisabledSpells; - DynamicUpdateField PersonalCraftingOrderCounts; - DynamicUpdateField NpcCraftingOrders; - DynamicUpdateField CategoryCooldownMods; - DynamicUpdateField WeeklySpellUses; - DynamicUpdateField TrackedCollectableSources; + DynamicUpdateField HouseRooms; + DynamicUpdateField HouseExteriorComponents; + DynamicUpdateField HouseThemes; + DynamicUpdateField HouseRoomComponentTextures; + DynamicUpdateField SpellPctModByLabel; + DynamicUpdateField SpellFlatModByLabel; + DynamicUpdateField MawPowers; + DynamicUpdateField MultiFloorExploration; + DynamicUpdateField RecipeProgression; + DynamicUpdateField ReplayedQuests; + DynamicUpdateField TaskQuests; + DynamicUpdateField DisabledSpells; + DynamicUpdateField PersonalCraftingOrderCounts; + DynamicUpdateField NpcCraftingOrders; + DynamicUpdateField CategoryCooldownMods; + DynamicUpdateField WeeklySpellUses; + DynamicUpdateField TrackedCollectableSources; DynamicUpdateField PvpInfo; - DynamicUpdateField CharacterRestrictions; - DynamicUpdateField CraftingOrders; - DynamicUpdateField CharacterBankTabSettings; - DynamicUpdateField AccountBankTabSettings; - UpdateField FarsightObject; - UpdateField SummonedBattlePetGUID; - UpdateField Coinage; - UpdateField AccountBankCoinage; - UpdateField XP; - UpdateField NextLevelXP; - UpdateField TrialXP; - UpdateField Skill; - UpdateField CharacterPoints; - UpdateField MaxTalentTiers; - UpdateField TrackCreatureMask; - UpdateField MainhandExpertise; - UpdateField OffhandExpertise; - UpdateField RangedExpertise; - UpdateField CombatRatingExpertise; - UpdateField BlockPercentage; - UpdateField DodgePercentage; - UpdateField DodgePercentageFromAttribute; - UpdateField ParryPercentage; - UpdateField ParryPercentageFromAttribute; - UpdateField CritPercentage; - UpdateField RangedCritPercentage; - UpdateField OffhandCritPercentage; - UpdateField SpellCritPercentage; - UpdateField ShieldBlock; - UpdateField ShieldBlockCritPercentage; - UpdateField Mastery; - UpdateField Speed; - UpdateField Avoidance; - UpdateField Sturdiness; - UpdateField Versatility; - UpdateField VersatilityBonus; - UpdateField PvpPowerDamage; - UpdateField PvpPowerHealing; - UpdateField BitVectors; - UpdateField ModHealingDonePos; - UpdateField ModHealingPercent; - UpdateField ModPeriodicHealingDonePercent; - UpdateField ModSpellPowerPercent; - UpdateField ModResiliencePercent; - UpdateField OverrideSpellPowerByAPPercent; - UpdateField OverrideAPBySpellPowerPercent; - UpdateField ModTargetResistance; - UpdateField ModTargetPhysicalResistance; - UpdateField LocalFlags; - UpdateField GrantableLevels; - UpdateField MultiActionBars; - UpdateField LifetimeMaxRank; - UpdateField NumRespecs; - UpdateField PvpMedals; - UpdateField TodayHonorableKills; - UpdateField YesterdayHonorableKills; - UpdateField LifetimeHonorableKills; - UpdateField WatchedFactionIndex; - UpdateField MaxLevel; - UpdateField ScalingPlayerLevelDelta; - UpdateField MaxCreatureScalingLevel; - UpdateField PetSpellPower; - UpdateField UiHitModifier; - UpdateField UiSpellHitModifier; - UpdateField HomeRealmTimeOffset; - UpdateField ModPetHaste; - UpdateField JailersTowerLevelMax; - UpdateField JailersTowerLevel; - UpdateField LocalRegenFlags; - UpdateField AuraVision; - UpdateField NumBackpackSlots; - UpdateField OverrideSpellsID; - UpdateField LootSpecID; - UpdateField OverrideZonePVPType; - UpdateField Honor; - UpdateField HonorNextLevel; - UpdateField PerksProgramCurrency; - UpdateField NumBankSlots; - UpdateField NumCharacterBankTabs; - UpdateField NumAccountBankTabs; - UpdateField ResearchHistory; - UpdateField FrozenPerksVendorItem; - UpdateField Field_1410; - OptionalUpdateField QuestSession; - UpdateField UiChromieTimeExpansionID; - UpdateField TimerunningSeasonID; - UpdateField TransportServerTime; - UpdateField WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField DEBUGSoulbindConduitRank; - UpdateField DungeonScore; - MapUpdateField TraitConfigs; - UpdateField ActiveCombatTraitConfigID; - UpdateField ItemUpgradeHighOnehandWeaponItemID; - UpdateField ItemUpgradeHighFingerItemID; - UpdateField ItemUpgradeHighFingerWatermark; - UpdateField ItemUpgradeHighTrinketItemID; - UpdateField ItemUpgradeHighTrinketWatermark; - UpdateField LootHistoryInstanceID; - OptionalUpdateField PetStable; - UpdateField RequiredMountCapabilityFlags; - OptionalUpdateField WalkInData; - OptionalUpdateField DelveData; - OptionalUpdateField ChallengeModeData; - UpdateFieldArray InvSlots; - UpdateFieldArray RestInfo; - UpdateFieldArray ModDamageDonePos; - UpdateFieldArray ModDamageDoneNeg; - UpdateFieldArray ModDamageDonePercent; - UpdateFieldArray ModHealingDonePercent; - UpdateFieldArray WeaponDmgMultipliers; - UpdateFieldArray WeaponAtkSpeedMultipliers; - UpdateFieldArray BuybackPrice; - UpdateFieldArray BuybackTimestamp; - UpdateFieldArray CombatRatings; - UpdateFieldArray NoReagentCostMask; - UpdateFieldArray ProfessionSkillLine; - UpdateFieldArray BagSlotFlags; - UpdateFieldArray ItemUpgradeHighWatermark; + DynamicUpdateField CharacterRestrictions; + DynamicUpdateField CraftingOrders; + DynamicUpdateField CharacterBankTabSettings; + DynamicUpdateField AccountBankTabSettings; + UpdateField FarsightObject; + UpdateField SummonedBattlePetGUID; + UpdateField Coinage; + UpdateField AccountBankCoinage; + UpdateField XP; + UpdateField NextLevelXP; + UpdateField TrialXP; + UpdateField Skill; + UpdateField CharacterPoints; + UpdateField MaxTalentTiers; + UpdateField TrackCreatureMask; + UpdateField MainhandExpertise; + UpdateField OffhandExpertise; + UpdateField RangedExpertise; + UpdateField CombatRatingExpertise; + UpdateField BlockPercentage; + UpdateField DodgePercentage; + UpdateField DodgePercentageFromAttribute; + UpdateField ParryPercentage; + UpdateField ParryPercentageFromAttribute; + UpdateField CritPercentage; + UpdateField RangedCritPercentage; + UpdateField OffhandCritPercentage; + UpdateField SpellCritPercentage; + UpdateField ShieldBlock; + UpdateField ShieldBlockCritPercentage; + UpdateField Mastery; + UpdateField Speed; + UpdateField Avoidance; + UpdateField Sturdiness; + UpdateField Versatility; + UpdateField VersatilityBonus; + UpdateField PvpPowerDamage; + UpdateField PvpPowerHealing; + UpdateField BitVectors; + UpdateField ModHealingDonePos; + UpdateField ModHealingPercent; + UpdateField ModPeriodicHealingDonePercent; + UpdateField ModSpellPowerPercent; + UpdateField ModResiliencePercent; + UpdateField OverrideSpellPowerByAPPercent; + UpdateField OverrideAPBySpellPowerPercent; + UpdateField ModTargetResistance; + UpdateField ModTargetPhysicalResistance; + UpdateField LocalFlags; + UpdateField GrantableLevels; + UpdateField MultiActionBars; + UpdateField LifetimeMaxRank; + UpdateField NumRespecs; + UpdateField PvpMedals; + UpdateField TodayHonorableKills; + UpdateField YesterdayHonorableKills; + UpdateField LifetimeHonorableKills; + UpdateField WatchedFactionIndex; + UpdateField MaxLevel; + UpdateField ScalingPlayerLevelDelta; + UpdateField MaxCreatureScalingLevel; + UpdateField PetSpellPower; + UpdateField UiHitModifier; + UpdateField UiSpellHitModifier; + UpdateField HomeRealmTimeOffset; + UpdateField ModPetHaste; + UpdateField JailersTowerLevelMax; + UpdateField JailersTowerLevel; + UpdateField LocalRegenFlags; + UpdateField AuraVision; + UpdateField NumBackpackSlots; + UpdateField OverrideSpellsID; + UpdateField LootSpecID; + UpdateField OverrideZonePVPType; + UpdateField Honor; + UpdateField HonorNextLevel; + UpdateField PerksProgramCurrency; + UpdateField NumBankSlots; + UpdateField NumCharacterBankTabs; + UpdateField NumAccountBankTabs; + UpdateField ResearchHistory; + UpdateField FrozenPerksVendorItem; + UpdateField Field_1410; + OptionalUpdateField QuestSession; + UpdateField UiChromieTimeExpansionID; + UpdateField TimerunningSeasonID; + UpdateField TransportServerTime; + UpdateField WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField DEBUGSoulbindConduitRank; + UpdateField DungeonScore; + MapUpdateField TraitConfigs; + UpdateField ActiveCombatTraitConfigID; + UpdateField ItemUpgradeHighOnehandWeaponItemID; + UpdateField ItemUpgradeHighFingerItemID; + UpdateField ItemUpgradeHighFingerWatermark; + UpdateField ItemUpgradeHighTrinketItemID; + UpdateField ItemUpgradeHighTrinketWatermark; + UpdateField LootHistoryInstanceID; + OptionalUpdateField PetStable; + UpdateField RequiredMountCapabilityFlags; + OptionalUpdateField WalkInData; + OptionalUpdateField DelveData; + OptionalUpdateField ChallengeModeData; + UpdateFieldArray InvSlots; + UpdateFieldArray RestInfo; + UpdateFieldArray ModDamageDonePos; + UpdateFieldArray ModDamageDoneNeg; + UpdateFieldArray ModDamageDonePercent; + UpdateFieldArray ModHealingDonePercent; + UpdateFieldArray WeaponDmgMultipliers; + UpdateFieldArray WeaponAtkSpeedMultipliers; + UpdateFieldArray BuybackPrice; + UpdateFieldArray BuybackTimestamp; + UpdateFieldArray CombatRatings; + UpdateFieldArray NoReagentCostMask; + UpdateFieldArray ProfessionSkillLine; + UpdateFieldArray BagSlotFlags; + UpdateFieldArray ItemUpgradeHighWatermark; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -1377,7 +1383,7 @@ struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5> struct ForceSetAreaTriggerPositionAndRotation : public IsUpdateFieldStructureTag { ObjectGuid TriggerGUID; - TaggedPosition<::Position::XYZ> Position; + TaggedPosition Position; QuaternionData Rotation; void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const; @@ -1599,6 +1605,30 @@ struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMas void ClearChangesMask(); }; +struct AaBox : public IsUpdateFieldStructureTag +{ + TaggedPosition Low; + TaggedPosition High; + + void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; + bool operator==(AaBox const& right) const; + bool operator!=(AaBox const& right) const { return !(*this == right); } +}; + +struct MeshObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<5> +{ + UpdateField IsWMO; + UpdateField IsRoom; + UpdateField FileDataID; + OptionalUpdateField Geobox; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + struct VendorData : public IsUpdateFieldStructureTag, public HasChangesMask<2> { UpdateField Flags; @@ -1609,6 +1639,272 @@ struct VendorData : public IsUpdateFieldStructureTag, public HasChangesMask<2> void ClearChangesMask(); }; +struct DecorStoragePersistedDataDyes : public IsUpdateFieldStructureTag +{ + int32 DyeColorID[3]; + + void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; + bool operator==(DecorStoragePersistedDataDyes const& right) const; + bool operator!=(DecorStoragePersistedDataDyes const& right) const { return !(*this == right); } +}; + +struct DecorStoragePersistedData : public IsUpdateFieldStructureTag, public HasChangesMask<4> +{ + UpdateField HouseGUID; + OptionalUpdateField Dyes; + UpdateField Field_20; + + void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct HousingDecorData : public IsUpdateFieldStructureTag, public HasChangesMask<6> +{ + UpdateField DecorGUID; + UpdateField AttachParentGUID; + UpdateField Flags; + OptionalUpdateField PersistedData; + UpdateField Field_68; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct HousingDoorData : public IsUpdateFieldStructureTag, public HasChangesMask<5> +{ + UpdateField RoomComponentID; + UpdateField, 0, 2> RoomComponentOffset; + UpdateField RoomComponentType; + UpdateField AttachedRoomGUID; + + void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct HousingRoomData : public IsUpdateFieldStructureTag, public HasChangesMask<7> +{ + DynamicUpdateField MeshObjects; + DynamicUpdateField Doors; + UpdateField HouseGUID; + UpdateField HouseRoomID; + UpdateField Flags; + UpdateField FloorIndex; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct HousingRoomComponentMeshData : public IsUpdateFieldStructureTag, public HasChangesMask<10> +{ + UpdateField RoomGUID; + UpdateField RoomComponentOptionID; + UpdateField RoomComponentID; + UpdateField Field_20; + UpdateField RoomComponentType; + UpdateField Field_24; + UpdateField HouseThemeID; + UpdateField RoomComponentTextureID; + UpdateField RoomComponentTypeParam; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct HousingPlayerHouseData : public IsUpdateFieldStructureTag, public HasChangesMask<10> +{ + UpdateField BnetAccount; + UpdateField PlotIndex; + UpdateField Level; + UpdateField Field_20; + UpdateField InteriorDecorPlacementBudget; + UpdateField ExteriorDecorPlacementBudget; + UpdateField ExteriorFixtureBudget; + UpdateField RoomPlacementBudget; + UpdateField EntityGUID; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct HousingCornerstoneData : public IsUpdateFieldStructureTag, public HasChangesMask<3> +{ + UpdateField Cost; + UpdateField PlotIndex; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, GameObject const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct HousingPlotAreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<5> +{ + UpdateField Field_0; + UpdateField HouseOwnerGUID; + UpdateField HouseGUID; + UpdateField HouseOwnerBnetAccountGUID; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct PlayerHouseInfo : public IsUpdateFieldStructureTag +{ + ObjectGuid HouseGUID; + ObjectGuid OwnerGUID; + + void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; + bool operator==(PlayerHouseInfo const& right) const; + bool operator!=(PlayerHouseInfo const& right) const { return !(*this == right); } +}; + +struct HousingOwner : public IsUpdateFieldStructureTag +{ + ObjectGuid BnetAccountGUID; + ObjectGuid PlayerGUID; + + void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; + bool operator==(HousingOwner const& right) const; + bool operator!=(HousingOwner const& right) const { return !(*this == right); } +}; + +struct NeighborhoodMirrorData : public IsUpdateFieldStructureTag, public HasChangesMask<5> +{ + DynamicUpdateField Houses; + DynamicUpdateField Managers; + UpdateField OwnerGUID; + UpdateField Name; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct MirroredMeshObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<6> +{ + UpdateField AttachParentGUID; + UpdateField, 0, 2> PositionLocalSpace; + UpdateField RotationLocalSpace; + UpdateField ScaleLocalSpace; + UpdateField AttachmentFlags; + + void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct MirroredPositionData : public IsUpdateFieldStructureTag, public HasChangesMask<2> +{ + UpdateField PositionData; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct PlayerMirrorHouse : public IsUpdateFieldStructureTag +{ + ObjectGuid Guid; + ObjectGuid NeighborhoodGUID; + uint32 Level; + uint32 Favor; + int32 Field_28; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + bool operator==(PlayerMirrorHouse const& right) const; + bool operator!=(PlayerMirrorHouse const& right) const { return !(*this == right); } +}; + +struct NeighborhoodCharterSignature : public IsUpdateFieldStructureTag +{ + ObjectGuid Guid; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + bool operator==(NeighborhoodCharterSignature const& right) const; + bool operator!=(NeighborhoodCharterSignature const& right) const { return !(*this == right); } +}; + +struct NeighborhoodCharter : public IsUpdateFieldStructureTag +{ + std::vector Signatures; + int32 Field_0; + int32 Field_4; + std::string Name; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + bool operator==(NeighborhoodCharter const& right) const; + bool operator!=(NeighborhoodCharter const& right) const { return !(*this == right); } +}; + +struct PlayerHouseInfoComponentData : public IsUpdateFieldStructureTag, public HasChangesMask<9> +{ + DynamicUpdateField Field_8; + DynamicUpdateField Houses; + DynamicUpdateField Field_88; + DynamicUpdateField Field_C0; + DynamicUpdateField Field_F8; + UpdateField Field_40; + UpdateField Charter; + UpdateField Field_178; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const; + static void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags); + static void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag fieldVisibilityFlags); + void ClearChangesMask(); +}; + +struct HousingStorageData : public IsUpdateFieldStructureTag, public HasChangesMask<3> +{ + MapUpdateField Decor; + UpdateField DecorMaxOwnedCount; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct HousingFixtureData : public IsUpdateFieldStructureTag, public HasChangesMask<11> +{ + UpdateField ExteriorComponentID; + UpdateField HouseExteriorWmoDataID; + UpdateField ExteriorComponentHookID; + UpdateField HouseGUID; + UpdateField AttachParentGUID; + UpdateField Guid; + UpdateField GameObjectGUID; + UpdateField ExteriorComponentType; + UpdateField Field_59; + UpdateField Size; + + void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + } #endif // UpdateFields_h__ diff --git a/src/server/game/Entities/Object/Updates/WowCSEntityDefinitions.h b/src/server/game/Entities/Object/Updates/WowCSEntityDefinitions.h index a65ca60978a..f3d8182ff83 100644 --- a/src/server/game/Entities/Object/Updates/WowCSEntityDefinitions.h +++ b/src/server/game/Entities/Object/Updates/WowCSEntityDefinitions.h @@ -26,44 +26,77 @@ namespace WowCS { enum class EntityFragment : uint8 { - CGObject = 0, // UPDATEABLE, INDIRECT, - Tag_Item = 1, // TAG, - Tag_Container = 2, // TAG, - Tag_AzeriteEmpoweredItem = 3, // TAG, - Tag_AzeriteItem = 4, // TAG, - Tag_Unit = 5, // TAG, - Tag_Player = 6, // TAG, - Tag_GameObject = 7, // TAG, - Tag_DynamicObject = 8, // TAG, - Tag_Corpse = 9, // TAG, - Tag_AreaTrigger = 10, // TAG, - Tag_SceneObject = 11, // TAG, - Tag_Conversation = 12, // TAG, - Tag_AIGroup = 13, // TAG, - Tag_Scenario = 14, // TAG, - Tag_LootObject = 15, // TAG, - Tag_ActivePlayer = 16, // TAG, - Tag_ActiveClient_S = 17, // TAG, - Tag_ActiveObject_C = 18, // TAG, - Tag_VisibleObject_C = 19, // TAG, - Tag_UnitVehicle = 20, // TAG, - FEntityPosition = 112, - FEntityLocalMatrix = 113, - FEntityWorldMatrix = 114, - CActor = 115, // INDIRECT, - FVendor_C = 117, // UPDATEABLE, INDIRECT, - FMirroredObject_C = 119, + FEntityPosition = 1, + CGObject = 2, // UPDATEABLE, INDIRECT, + FTransportLink = 5, + FPlayerOwnershipLink = 13, // INDIRECT, + CActor = 15, // INDIRECT, + FVendor_C = 17, // UPDATEABLE, + FMirroredObject_C = 18, + FMeshObjectData_C = 19, // UPDATEABLE, + FHousingDecor_C = 20, // UPDATEABLE, + FHousingRoom_C = 21, // UPDATEABLE, + FHousingRoomComponentMesh_C = 22, // UPDATEABLE, + FHousingPlayerHouse_C = 23, // UPDATEABLE, + FJamHousingCornerstone_C = 27, // UPDATEABLE, + FHousingDecorActor_C = 28, + FHousingPlotAreaTrigger_C = 29, // UPDATEABLE, + FNeighborhoodMirrorData_C = 30, // UPDATEABLE, + FMirroredPositionData_C = 31, // UPDATEABLE, + PlayerHouseInfoComponent_C = 32, // UPDATEABLE, INDIRECT, + FHousingStorage_C = 33, // UPDATEABLE, + FHousingFixture_C = 34, // UPDATEABLE, + Tag_Item = 200, // TAG, + Tag_Container = 201, // TAG, + Tag_AzeriteEmpoweredItem = 202, // TAG, + Tag_AzeriteItem = 203, // TAG, + Tag_Unit = 204, // TAG, + Tag_Player = 205, // TAG, + Tag_GameObject = 206, // TAG, + Tag_DynamicObject = 207, // TAG, + Tag_Corpse = 208, // TAG, + Tag_AreaTrigger = 209, // TAG, + Tag_SceneObject = 210, // TAG, + Tag_Conversation = 211, // TAG, + Tag_AIGroup = 212, // TAG, + Tag_Scenario = 213, // TAG, + Tag_LootObject = 214, // TAG, + Tag_ActivePlayer = 215, // TAG, + Tag_ActiveClient_S = 216, // TAG, + Tag_ActiveObject_C = 217, // TAG, + Tag_VisibleObject_C = 218, // TAG, + Tag_UnitVehicle = 219, // TAG, + Tag_HousingRoom = 220, // TAG, + Tag_MeshObject = 221, // TAG, + Tag_HouseExteriorPiece = 224, // TAG, + Tag_HouseExteriorRoot = 225, // TAG, End = 255, }; inline constexpr bool IsUpdateableFragment(EntityFragment frag) { - return frag == EntityFragment::CGObject || frag == EntityFragment::FVendor_C; + return frag == EntityFragment::CGObject + || frag == EntityFragment::FVendor_C + || frag == EntityFragment::FMeshObjectData_C + || frag == EntityFragment::FHousingDecor_C + || frag == EntityFragment::FHousingRoom_C + || frag == EntityFragment::FHousingRoomComponentMesh_C + || frag == EntityFragment::FHousingPlayerHouse_C + || frag == EntityFragment::FJamHousingCornerstone_C + || frag == EntityFragment::FHousingPlotAreaTrigger_C + || frag == EntityFragment::FNeighborhoodMirrorData_C + || frag == EntityFragment::FMirroredPositionData_C + || frag == EntityFragment::PlayerHouseInfoComponent_C + || frag == EntityFragment::FHousingStorage_C + || frag == EntityFragment::FHousingFixture_C; } inline constexpr bool IsIndirectFragment(EntityFragment frag) { - return frag == EntityFragment::CGObject || frag == EntityFragment::CActor || frag == EntityFragment::FVendor_C; + return frag == EntityFragment::CGObject + || frag == EntityFragment::FPlayerOwnershipLink + || frag == EntityFragment::CActor + || frag == EntityFragment::PlayerHouseInfoComponent_C; } // common case optimization, make use of the fact that fragment arrays are sorted @@ -81,8 +114,11 @@ struct EntityFragmentsHolder uint8 Count = 0; bool IdsChanged = false; - std::array UpdateableIds = { EntityFragment::End, EntityFragment::End }; - std::array UpdateableMasks = { }; + std::array UpdateableIds = + { + EntityFragment::End, EntityFragment::End, EntityFragment::End, EntityFragment::End + }; + std::array UpdateableMasks = { }; uint8 UpdateableCount = 0; uint8 ContentsChangedMask = 0; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3948dd8f73e..ecddafd9c28 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -10816,7 +10816,7 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool Optional requiredLevels; // check allowed level (extend range to upper values if MaxLevel more or equal max player level, this let GM set high level with 1...max range items) if (pItem->GetQuality() == ITEM_QUALITY_HEIRLOOM) - requiredLevels = sDB2Manager.GetContentTuningData(pItem->GetScalingContentTuningId(), 0, true); + requiredLevels = sDB2Manager.GetContentTuningData(pItem->GetScalingContentTuningId(), {}, true); if (requiredLevels && requiredLevels->MaxLevel < DEFAULT_MAX_LEVEL && requiredLevels->MaxLevel < GetLevel() && !sDB2Manager.GetHeirloomByItemId(pProto->GetId())) return EQUIP_ERR_NOT_EQUIPPABLE; @@ -14084,9 +14084,10 @@ 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::PlaceholderType72, - PlayerInteractionType::PlaceholderType75, PlayerInteractionType::PlaceholderType76, PlayerInteractionType::GuildRename, - PlayerInteractionType::PlaceholderType77, PlayerInteractionType::ItemUpgrade + PlayerInteractionType::AccountBanker, PlayerInteractionType::ProfessionRespec, PlayerInteractionType::CornerstoneInteraction, + PlayerInteractionType::CreateGuildNeighborhood, PlayerInteractionType::NeighborhoodCharter, PlayerInteractionType::GuildRename, + PlayerInteractionType::OpenNeighborhoodCharterConfirmation, PlayerInteractionType::ItemUpgrade, PlayerInteractionType::OpenHouseFinder, + PlayerInteractionType::PlaceholderType79 }; PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[AsUnderlyingType(gossipOptionNpc)]; @@ -17885,6 +17886,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol SetRace(fields.race); SetClass(fields.class_); SetGender(fields.gender); + UpdateCreatureType(); // check if race/class combination is valid PlayerInfo const* info = sObjectMgr->GetPlayerInfo(GetRace(), GetClass()); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 28ba159b228..62b5e410559 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -515,14 +515,15 @@ DEFINE_ENUM_FLAG(PlayerFlags); enum PlayerFlagsEx { - PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED = 0x0001, - PLAYER_FLAGS_EX_MERCENARY_MODE = 0x0002, - PLAYER_FLAGS_EX_ARTIFACT_FORGE_CHEAT = 0x0004, - PLAYER_FLAGS_EX_ITEM_LEVEL_SQUISH = 0x0020, // Uses ItemLevelSquish gametable - PLAYER_FLAGS_EX_IN_PVP_COMBAT = 0x0040, // Forbids /follow - PLAYER_FLAGS_EX_MENTOR = 0x0080, - PLAYER_FLAGS_EX_NEWCOMER = 0x0100, - PLAYER_FLAGS_EX_UNLOCKED_AOE_LOOT = 0x0200 + PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED = 0x00000001, + PLAYER_FLAGS_EX_MERCENARY_MODE = 0x00000002, + PLAYER_FLAGS_EX_ARTIFACT_FORGE_CHEAT = 0x00000004, + PLAYER_FLAGS_EX_ITEM_LEVEL_SQUISH = 0x00000020, // Uses ItemLevelSquish gametable + PLAYER_FLAGS_EX_IN_PVP_COMBAT = 0x00000040, // Forbids /follow + PLAYER_FLAGS_EX_MENTOR = 0x00000080, + PLAYER_FLAGS_EX_NEWCOMER = 0x00000100, + PLAYER_FLAGS_EX_UNLOCKED_AOE_LOOT = 0x00000200, + PLAYER_FLAGS_EX_AUTO_DECLINE_NEIGHBORHOOD = 0x00008000 }; DEFINE_ENUM_FLAG(PlayerFlagsEx); diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 451d40f25b7..5f30a336853 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -597,6 +597,7 @@ float const m_diminishing_k[MAX_CLASSES] = 0.9830f, // Demon Hunter 0.9880f, // Evoker 1.0f, // Adventurer + 1.0f, // Traveler }; // helper function @@ -622,7 +623,7 @@ float CalculateDiminishingReturns(float const (&capArray)[MAX_CLASSES], uint8 pl return result; } -float const parry_cap[MAX_CLASSES] = +constexpr float parry_cap[MAX_CLASSES] = { 65.631440f, // Warrior 65.631440f, // Paladin @@ -638,6 +639,7 @@ float const parry_cap[MAX_CLASSES] = 65.631440f, // Demon Hunter 0.0f, // Evoker 0.0f, // Adventurer + 0.0f, // Traveler }; void Player::UpdateParryPercentage() @@ -663,7 +665,7 @@ void Player::UpdateParryPercentage() SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ParryPercentage), value); } -float const dodge_cap[MAX_CLASSES] = +constexpr float dodge_cap[MAX_CLASSES] = { 65.631440f, // Warrior 65.631440f, // Paladin @@ -679,6 +681,7 @@ float const dodge_cap[MAX_CLASSES] = 145.560408f, // Demon Hunter 145.560408f, // Evoker 0.0f, // Adventurer + 0.0f, // Traveler }; void Player::UpdateDodgePercentage() diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 688a0618f9c..9c5c0a2c134 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9493,9 +9493,29 @@ uint32 Unit::GetCreatureTypeMask() const return (creatureType >= 1) ? (1 << (creatureType - 1)) : 0; } +void Unit::UpdateCreatureType() +{ + uint8 creatureType = [&]() -> uint8 + { + if (Creature const* creature = ToCreature()) + return creature->GetCreatureTemplate()->type; + + ShapeshiftForm form = GetShapeshiftForm(); + SpellShapeshiftFormEntry const* ssEntry = sSpellShapeshiftFormStore.LookupEntry(form); + if (ssEntry && ssEntry->CreatureType > 0) + return ssEntry->CreatureType; + + ChrRacesEntry const* raceEntry = sChrRacesStore.AssertEntry(GetRace()); + return raceEntry->CreatureType; + }(); + + SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CreatureType), creatureType); +} + void Unit::SetShapeshiftForm(ShapeshiftForm form) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ShapeshiftForm), form); + UpdateCreatureType(); } void Unit::CancelShapeshiftForm(bool onlyTravelShapeshiftForm /*= false*/, AuraRemoveMode removeMode /*= AURA_REMOVE_BY_DEFAULT*/, bool force /*= false*/) @@ -10771,7 +10791,7 @@ void Unit::RecalculateObjectScale() { int32 scaleAuras = GetTotalAuraModifier(SPELL_AURA_MOD_SCALE) + GetTotalAuraModifier(SPELL_AURA_MOD_SCALE_2); float scale = GetNativeObjectScale() + CalculatePct(1.0f, scaleAuras); - float scaleMin = GetTypeId() == TYPEID_PLAYER ? 0.1 : 0.01; + float scaleMin = GetTypeId() == TYPEID_PLAYER ? 0.1f : 0.01f; SetObjectScale(std::max(scale, scaleMin)); } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 9f6ac598a04..d6392f5b153 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -892,6 +892,7 @@ class TC_GAME_API Unit : public WorldObject uint32 GetCreatureType() const; uint32 GetCreatureTypeMask() const; + void UpdateCreatureType(); UnitStandStateType GetStandState() const { return UnitStandStateType(*m_unitData->StandState); } bool IsSitState() const; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index cba48f39958..d55e44b774c 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4673,9 +4673,9 @@ void ObjectMgr::LoadQuests() // 0 1 { "QuestId, RewardMailSenderEntry", "quest_mail_sender", "", "mail sender entries", &Quest::LoadQuestMailSender }, - // 0 1 2 3 4 5 6 7 8 9 - { "qo.QuestID, qo.ID, qo.Type, qo.StorageIndex, qo.ObjectID, qo.Amount, qo.Flags, qo.Flags2, qo.ProgressBarWeight, qo.Description, " - // 10 11 12 13 14 + // 0 1 2 3 4 5 6 7 8 9 10 11 12 + { "qo.QuestID, qo.ID, qo.Type, qo.StorageIndex, qo.ObjectID, qo.Amount, qo.SecondaryAmount, qo.Flags, qo.Flags2, qo.ProgressBarWeight, qo.ParentObjectiveID, qo.Visible, qo.Description, " + // 13 14 15 16 17 "qoce.GameEventID, qoce.SpellID, qoce.ConversationID, qoce.UpdatePhaseShift, qoce.UpdateZoneAuras", "quest_objectives qo", "LEFT JOIN quest_objectives_completion_effect qoce ON qo.ID = qoce.ObjectiveID ORDER BY `Order` ASC, StorageIndex ASC", "quest objectives", &Quest::LoadQuestObjective }, // 0 1 2 3 4 @@ -4691,7 +4691,13 @@ void ObjectMgr::LoadQuests() { "QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale", "quest_completion_log_conditional", "ORDER BY OrderIndex", "conditional completion log", &Quest::LoadConditionalConditionalQuestCompletionLog }, // 0 1 - { "QuestID, TreasurePickerID", "quest_treasure_pickers", "ORDER BY OrderIndex", "treasure pickers", &Quest::LoadTreasurePickers } + { "QuestID, TreasurePickerID", "quest_treasure_pickers", "ORDER BY OrderIndex", "treasure pickers", &Quest::LoadTreasurePickers }, + + // 0 1 + { "QuestID, HouseRoomID", "quest_reward_house_room", "ORDER BY OrderIndex", "house room rewards", &Quest::LoadRewardHouseRoom }, + + // 0 1 + { "QuestID, HouseDecorID", "quest_reward_house_decor", "ORDER BY OrderIndex", "house decor rewards", &Quest::LoadRewardHouseDecor } }; for (QuestLoaderHelper const& loader : QuestLoaderHelpers) @@ -7664,8 +7670,9 @@ void ObjectMgr::LoadGameObjectTemplate() go.name = db2go->Name[sWorld->GetDefaultDbcLocale()]; go.size = db2go->Scale; memset(go.raw.data, 0, sizeof(go.raw.data)); - std::copy(db2go->PropValue.begin(), db2go->PropValue.end(), std::begin(go.raw.data)); + std::ranges::copy(db2go->PropValue, std::begin(go.raw.data)); go.ContentTuningId = 0; + go.RequiredLevel = 0; go.ScriptId = 0; } @@ -7675,8 +7682,8 @@ void ObjectMgr::LoadGameObjectTemplate() "Data0, Data1, Data2, Data3, Data4, Data5, Data6, Data7, Data8, Data9, Data10, Data11, Data12, " // 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 "Data13, Data14, Data15, Data16, Data17, Data18, Data19, Data20, Data21, Data22, Data23, Data24, Data25, Data26, Data27, Data28, " - // 37 38 39 40 41 42 43 44 45 46 - "Data29, Data30, Data31, Data32, Data33, Data34, ContentTuningId, AIName, ScriptName, StringId " + // 37 38 39 40 41 42 43 44 45 46 47 + "Data29, Data30, Data31, Data32, Data33, Data34, ContentTuningId, RequiredLevel, AIName, ScriptName, StringId " "FROM gameobject_template"); if (!result) @@ -7706,9 +7713,10 @@ void ObjectMgr::LoadGameObjectTemplate() got.raw.data[i] = fields[8 + i].GetUInt32(); got.ContentTuningId = fields[43].GetInt32(); - got.AIName = fields[44].GetString(); - got.ScriptId = GetScriptId(fields[45].GetStringView()); - got.StringId = fields[46].GetString(); + got.RequiredLevel = fields[44].GetInt32(); + got.AIName = fields[45].GetString(); + got.ScriptId = GetScriptId(fields[46].GetStringView()); + got.StringId = fields[47].GetString(); // Checks if (!got.AIName.empty() && !sGameObjectAIRegistry->HasItem(got.AIName)) diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index d61ce409595..bd671c558a2 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -138,6 +138,8 @@ void WorldSession::SendFeatureSystemStatusGlueScreen() }, gameRule.Value); } + features.AvailableGameModeIDs.push_back(8); // GameMode.db2, standard + SendPacket(features.Write()); WorldPackets::System::MirrorVarSingle vars[] = @@ -148,6 +150,13 @@ void WorldSession::SendFeatureSystemStatusGlueScreen() { "bpayStoreEnable"sv, "0"sv }, { "recentAlliesEnabledClient"sv, "0"sv }, { "browserEnabled"sv, "0"sv }, + { "housingEnableCreateGuildNeighborhood"sv, "0"sv }, + { "housingEnableDeleteHouse"sv, "0"sv }, + { "housingServiceEnabled"sv, "0"sv }, + { "housingEnableMoveHouse"sv, "0"sv }, + { "housingEnableCreateCharterNeighborhood"sv, "0"sv }, + { "housingEnableBuyHouse"sv, "0"sv }, + { "housingMarketEnabled"sv, "0"sv }, }; WorldPackets::System::MirrorVars variables; diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index b1d644fb5a3..6c0505fca7e 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1192,8 +1192,9 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder) // Send MOTD { - for (std::string const& motdLine : sWorld->GetMotd()) - sWorld->SendServerMessage(SERVER_MSG_STRING, motdLine, pCurrChar); + WorldPackets::System::MOTD motd; + motd.Text = &sWorld->GetMotd(); + SendPacket(motd.Write()); } SendSetTimeZoneInformation(); diff --git a/src/server/game/Handlers/HousingHandler.cpp b/src/server/game/Handlers/HousingHandler.cpp new file mode 100644 index 00000000000..3c36b790f11 --- /dev/null +++ b/src/server/game/Handlers/HousingHandler.cpp @@ -0,0 +1,28 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "WorldSession.h" +#include "HousingPackets.h" +#include "Player.h" + +void WorldSession::HandleDeclineNeighborhoodInvites(WorldPackets::Housing::DeclineNeighborhoodInvites const& declineNeighborhoodInvites) +{ + if (declineNeighborhoodInvites.Allow) + GetPlayer()->SetPlayerFlagEx(PLAYER_FLAGS_EX_AUTO_DECLINE_NEIGHBORHOOD); + else + GetPlayer()->RemovePlayerFlagEx(PLAYER_FLAGS_EX_AUTO_DECLINE_NEIGHBORHOOD); +} diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index 3e4030a5691..523a3e6e03a 100644 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -143,7 +143,7 @@ void WorldSession::SendLfgPlayerLockInfo() // Get Random dungeons that can be done at a certain level and expansion uint8 level = GetPlayer()->GetLevel(); - uint32 contentTuningReplacementConditionMask = GetPlayer()->m_playerData->CtrOptions->ConditionalFlags; + std::span contentTuningReplacementConditionMask = GetPlayer()->m_playerData->CtrOptions->ConditionalFlags; lfg::LfgDungeonSet const& randomDungeons = sLFGMgr->GetRandomAndSeasonalDungeons(level, GetExpansion(), contentTuningReplacementConditionMask); WorldPackets::LFG::LfgPlayerInfo lfgPlayerInfo; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index a1971b9768f..15319307a15 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -163,11 +163,12 @@ enum Classes : uint8 CLASS_DRUID = 11, // TITLE Druid CLASS_DEMON_HUNTER = 12, // TITLE Demon Hunter CLASS_EVOKER = 13, // TITLE Evoker - CLASS_ADVENTURER = 14 // TITLE Adventurer + CLASS_ADVENTURER = 14, // TITLE Adventurer + CLASS_TRAVELER = 15 // TITLE Traveler }; // max+1 for player class -#define MAX_CLASSES 15 +#define MAX_CLASSES 16 #define CLASSMASK_ALL_PLAYABLE \ ((1<<(CLASS_WARRIOR-1)) | \ @@ -1643,6 +1644,15 @@ enum SpellEffectName SPELL_EFFECT_343 = 343, SPELL_EFFECT_344 = 344, // some kind of teleport SPELL_EFFECT_ASSIST_ACTION = 345, // MiscValue[0] = AssistActionType, MiscValue[1] = ID, depends on type + SPELL_EFFECT_346 = 346, + SPELL_EFFECT_EQUIP_TRANSMOG_OUTFIT = 347, // MiscValue[0] = TransmogOutfitEntry + SPELL_EFFECT_GIVE_HOUSE_LEVEL = 348, + SPELL_EFFECT_LEARN_HOUSE_ROOM = 349, // MiscValue[0] = HouseRoom + SPELL_EFFECT_LEARN_HOUSE_EXTERIOR_COMPONENT = 350, // MiscValue[0] = ExteriorComponent + SPELL_EFFECT_LEARN_HOUSE_THEME = 351, // MiscValue[0] = HouseTheme + SPELL_EFFECT_LEARN_HOUSE_ROOM_COMPONENT_TEXTURE = 352, // MiscValue[0] = RoomComponentTexture + + // = 354, // MiscValue[0] = NeighborhoodInitiative TOTAL_SPELL_EFFECTS }; @@ -8549,7 +8559,28 @@ enum class GameError : uint32 ERR_CURRENCY_TRANSFER_UNMET_REQUIREMENTS = 1199, ERR_CURRENCY_TRANSFER_TRANSACTION_IN_PROGRESS = 1200, ERR_CURRENCY_TRANSFER_DISABLED = 1201, - ERR_RECENT_ALLY_PIN_SERVER_ERROR = 1202, + ERR_NO_OWNED_HOUSE_IN_THIS_NEIGHBORHOOD_MAP = 1202, + ERR_HOUSING_RESULT_NEIGHBORHOOD_NOT_FOUND = 1203, + ERR_INVITED_TO_NEIGHBORHOOD = 1204, + ERR_NEIGHBORHOOD_OWNER_TRANSFERRED_S = 1205, + ERR_NOT_WHILE_HOUSE_EDIT = 1206, + ERR_NEW_PARTY_NEIGHBORHOOD_RESERVATION = 1207, + ERR_HOUSE_MOVED = 1208, + ERR_CHARTER_SIGNATURE_REQUEST_SENT = 1209, + ERR_CHARTER_SIGNATURE_RECEIVED = 1210, + ERR_CHARTER_SIGNATURE_REQUEST_FAILED_MISSING_EXPANSION = 1211, + ERR_CHARTER_SIGNATURE_REQUEST_FAILED_DUPLICATE_SIGNATURE = 1212, + ERR_CHARTER_SIGNATURE_REQUEST_FAILED_GENERIC = 1213, + ERR_CHARTER_SYSTEM_REQUEST_FAILED_GENERIC = 1214, + ERR_HOUSING_ACTION_UNAVAILABLE = 1215, + ERR_HOUSING_RESULT_MISSING_EXPANSION_ACCESS = 1216, + ERR_HOUSING_RESULT_PERMISSION_DENIED = 1217, + ERR_GUILD_NEIGHBORHOOD_BUILT_HOUSE_S = 1218, + ERR_GUILD_NEIGHBORHOOD_SOLD_HOUSE_S = 1219, + ERR_GUILD_NEIGHBORHOOD_NEW_SUBDIVISION = 1220, + ERR_GUILD_NEIGHBORHOOD_RENAME_S = 1221, + ERR_CHARTER_NEIGHBORHOOD_RENAME = 1222, + ERR_RECENT_ALLY_PIN_SERVER_ERROR = 1223, }; enum class MountResult : uint32 diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp index b67ffdc1d81..b613885956b 100644 --- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp +++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp @@ -45,12 +45,13 @@ TC_API_EXPORT EnumText EnumUtils::ToString(Classes value) case CLASS_DEMON_HUNTER: return { "CLASS_DEMON_HUNTER", "Demon Hunter", "" }; case CLASS_EVOKER: return { "CLASS_EVOKER", "Evoker", "" }; case CLASS_ADVENTURER: return { "CLASS_ADVENTURER", "Adventurer", "" }; + case CLASS_TRAVELER: return { "CLASS_TRAVELER", "Traveler", "" }; default: throw std::out_of_range("value"); } } template <> -TC_API_EXPORT size_t EnumUtils::Count() { return 14; } +TC_API_EXPORT size_t EnumUtils::Count() { return 15; } template <> TC_API_EXPORT Classes EnumUtils::FromIndex(size_t index) @@ -71,6 +72,7 @@ TC_API_EXPORT Classes EnumUtils::FromIndex(size_t index) case 11: return CLASS_DEMON_HUNTER; case 12: return CLASS_EVOKER; case 13: return CLASS_ADVENTURER; + case 14: return CLASS_TRAVELER; default: throw std::out_of_range("index"); } } @@ -94,6 +96,7 @@ TC_API_EXPORT size_t EnumUtils::ToIndex(Classes value) case CLASS_DEMON_HUNTER: return 11; case CLASS_EVOKER: return 12; case CLASS_ADVENTURER: return 13; + case CLASS_TRAVELER: return 14; default: throw std::out_of_range("value"); } } diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 2903c93823f..8a18705f92d 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -277,20 +277,23 @@ void Quest::LoadQuestObjective(Field* fields) obj.StorageIndex = fields[3].GetInt8(); obj.ObjectID = fields[4].GetInt32(); obj.Amount = fields[5].GetInt32(); - obj.Flags = fields[6].GetUInt32(); - obj.Flags2 = fields[7].GetUInt32(); - obj.ProgressBarWeight = fields[8].GetFloat(); - obj.Description = fields[9].GetStringView(); - - bool hasCompletionEffect = std::any_of(fields + 10, fields + 15, [](Field const& f) { return !f.IsNull(); }); + obj.SecondaryAmount = fields[6].GetInt32(); + obj.Flags = fields[7].GetUInt32(); + obj.Flags2 = fields[8].GetUInt32(); + obj.ProgressBarWeight = fields[9].GetFloat(); + obj.ParentObjectiveID = fields[10].GetInt32(); + obj.Visible = fields[11].GetBool(); + obj.Description = fields[12].GetStringView(); + + bool hasCompletionEffect = std::any_of(fields + 13, fields + 18, [](Field const& f) { return !f.IsNull(); }); if (hasCompletionEffect) { obj.CompletionEffect = new QuestObjectiveAction(); - obj.CompletionEffect->GameEventId = fields[10].GetUInt32OrNull(); - obj.CompletionEffect->SpellId = fields[11].GetUInt32OrNull(); - obj.CompletionEffect->ConversationId = fields[12].GetUInt32OrNull(); - obj.CompletionEffect->UpdatePhaseShift = fields[13].GetBool(); - obj.CompletionEffect->UpdateZoneAuras = fields[14].GetBool(); + obj.CompletionEffect->GameEventId = fields[13].GetUInt32OrNull(); + obj.CompletionEffect->SpellId = fields[14].GetUInt32OrNull(); + obj.CompletionEffect->ConversationId = fields[15].GetUInt32OrNull(); + obj.CompletionEffect->UpdatePhaseShift = fields[16].GetBool(); + obj.CompletionEffect->UpdateZoneAuras = fields[17].GetBool(); } _usedQuestObjectiveTypes[obj.Type] = true; @@ -411,6 +414,16 @@ void Quest::LoadTreasurePickers(Field* fields) _treasurePickerID.push_back(fields[1].GetInt32()); } +void Quest::LoadRewardHouseRoom(Field* fields) +{ + _rewardHouseRoomIDs.push_back(fields[1].GetInt32()); +} + +void Quest::LoadRewardHouseDecor(Field* fields) +{ + _rewardHouseDecorIDs.push_back(fields[1].GetInt32()); +} + uint32 Quest::XPValue(Player const* player) const { return XPValue(player, GetContentTuningId(), _rewardXPDifficulty, _rewardXPMultiplier, _expansion); @@ -472,7 +485,7 @@ uint32 Quest::MoneyValue(Player const* player) const uint32 Quest::MaxMoneyValue() const { uint32 value = 0; - if (Optional questLevels = sDB2Manager.GetContentTuningData(GetContentTuningId(), 0)) + if (Optional questLevels = sDB2Manager.GetContentTuningData(GetContentTuningId(), {})) if (QuestMoneyRewardEntry const* money = sQuestMoneyRewardStore.LookupEntry(questLevels->MaxLevel)) value = money->Difficulty[GetRewMoneyDifficulty()] * GetMoneyMultiplier(); @@ -661,18 +674,18 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const response.Info.PortraitGiverName = GetPortraitGiverName(); response.Info.PortraitTurnInText = GetPortraitTurnInText(); response.Info.PortraitTurnInName = GetPortraitTurnInName(); - std::transform(GetConditionalQuestDescription().begin(), GetConditionalQuestDescription().end(), std::back_inserter(response.Info.ConditionalQuestDescription), [loc](QuestConditionalText const& text) + std::ranges::transform(GetConditionalQuestDescription(), std::back_inserter(response.Info.ConditionalQuestDescription), [loc](QuestConditionalText const& text) -> WorldPackets::Quest::ConditionalQuestText { std::string_view content = text.Text[LOCALE_enUS]; ObjectMgr::GetLocaleString(text.Text, loc, content); - return WorldPackets::Quest::ConditionalQuestText { text.PlayerConditionId, text.QuestgiverCreatureId, content }; + return { .PlayerConditionID = text.PlayerConditionId, .QuestGiverCreatureID = text.QuestgiverCreatureId, .Text = content }; }); - std::transform(GetConditionalQuestCompletionLog().begin(), GetConditionalQuestCompletionLog().end(), std::back_inserter(response.Info.ConditionalQuestCompletionLog), [loc](QuestConditionalText const& text) + std::ranges::transform(GetConditionalQuestCompletionLog(), std::back_inserter(response.Info.ConditionalQuestCompletionLog), [loc](QuestConditionalText const& text) -> WorldPackets::Quest::ConditionalQuestText { std::string_view content = text.Text[LOCALE_enUS]; ObjectMgr::GetLocaleString(text.Text, loc, content); - return WorldPackets::Quest::ConditionalQuestText { text.PlayerConditionId, text.QuestgiverCreatureId, content }; + return { .PlayerConditionID = text.PlayerConditionId, .QuestGiverCreatureID = text.QuestgiverCreatureId, .Text = content }; }); if (loc != LOCALE_enUS) @@ -779,6 +792,8 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const response.Info.ManagedWorldStateID = GetManagedWorldStateId(); response.Info.QuestSessionBonus = 0; //GetQuestSessionBonus(); // this is only sent while quest session is active response.Info.QuestGiverCreatureID = 0; // only sent during npc interaction + response.Info.RewardHouseRoomIDs = GetRewardHouseRoomIds(); + response.Info.RewardHouseDecorIDs = GetRewardRewardHouseDecorIds(); for (QuestObjective const& questObjective : GetObjectives()) { diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 59f38eed53b..b798da637ad 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -484,9 +484,12 @@ struct QuestObjective int8 StorageIndex = 0; int32 ObjectID = 0; int32 Amount = 0; + int32 SecondaryAmount = 0; uint32 Flags = 0; uint32 Flags2 = 0; float ProgressBarWeight = 0.0f; + int32 ParentObjectiveID = 0; + bool Visible = false; std::string Description; std::vector VisualEffects; QuestObjectiveAction* CompletionEffect = nullptr; @@ -600,6 +603,8 @@ class TC_GAME_API Quest void LoadConditionalConditionalOfferRewardText(Field* fields); void LoadConditionalConditionalQuestCompletionLog(Field* fields); void LoadTreasurePickers(Field* fields); + void LoadRewardHouseRoom(Field* fields); + void LoadRewardHouseDecor(Field* fields); uint32 XPValue(Player const* player) const; static uint32 XPValue(Player const* player, uint32 contentTuningId, uint32 xpDifficulty, float xpMultiplier = 1.0f, int32 expansion = -1); @@ -716,6 +721,8 @@ class TC_GAME_API Quest int32 GetQuestGiverPortraitMount() const { return _questGiverPortraitMount; } int32 GetQuestGiverPortraitModelSceneId() const { return _questGiverPortraitModelSceneId; } uint32 GetQuestTurnInPortrait() const { return _questTurnInPortrait; } + std::vector const& GetRewardHouseRoomIds() const { return _rewardHouseRoomIDs; } + std::vector const& GetRewardRewardHouseDecorIds() const { return _rewardHouseDecorIDs; } bool IsDaily() const { return (_flags & QUEST_FLAGS_DAILY) != 0; } bool IsWeekly() const { return (_flags & QUEST_FLAGS_WEEKLY) != 0; } bool IsMonthly() const { return (_specialFlags & QUEST_SPECIAL_FLAGS_MONTHLY) != 0; } @@ -823,6 +830,8 @@ class TC_GAME_API Quest int32 _expansion = 0; int32 _managedWorldStateID = 0; int32 _questSessionBonus = 0; + std::vector _rewardHouseRoomIDs; + std::vector _rewardHouseDecorIDs; std::string _logTitle; std::string _logDescription; std::string _questDescription; diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h index ad31706a627..1cf71c8efc4 100644 --- a/src/server/game/Server/Packets/AllPackets.h +++ b/src/server/game/Server/Packets/AllPackets.h @@ -46,6 +46,7 @@ #include "GarrisonPackets.h" #include "GuildPackets.h" #include "HotfixPackets.h" +#include "HousingPackets.h" #include "InspectPackets.h" #include "InstancePackets.h" #include "ItemPackets.h" diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index 3c22fd4084d..64e69e90134 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -312,6 +312,8 @@ WorldPacket const* ConnectTo::Write() _worldPacket << uint32(Serial); _worldPacket << uint8(Con); _worldPacket << uint64(Key); + _worldPacket << uint32(NativeRealmAddress); + _worldPacket << uint32(Key3); return &_worldPacket; } @@ -319,9 +321,11 @@ WorldPacket const* ConnectTo::Write() void AuthContinuedSession::Read() { _worldPacket >> DosResponse; - _worldPacket >> Key; _worldPacket.read(LocalChallenge.data(), LocalChallenge.size()); _worldPacket.read(Digest.data(), Digest.size()); + _worldPacket >> Key; + _worldPacket >> NativeRealmAddress; + _worldPacket >> Key3; } void ConnectToFailed::Read() diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index 405593e150c..8055110f1c4 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -257,6 +257,8 @@ namespace WorldPackets WorldPacket const* Write() override; uint64 Key = 0; + uint32 NativeRealmAddress = 0; + uint32 Key3 = 0; ConnectToSerial Serial = ConnectToSerial::None; ConnectPayload Payload; uint8 Con = 0; @@ -271,6 +273,8 @@ namespace WorldPackets uint64 DosResponse = 0; uint64 Key = 0; + uint32 NativeRealmAddress = 0; + uint32 Key3 = 0; std::array LocalChallenge = { }; std::array Digest = { }; diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index dafa4fbe1d6..6f2d667ef69 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -273,8 +273,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterRestrict ASSERT(restrictionsAndMails.MailSenders.size() == restrictionsAndMails.MailSenderTypes.size()); data << Bits<1>(restrictionsAndMails.BoostInProgress); - data << Bits<1>(restrictionsAndMails.RpeResetAvailable); - data << Bits<1>(restrictionsAndMails.RpeResetQuestClearAvailable); + data << Bits<1>(restrictionsAndMails.RpeAvailable); data.FlushBits(); data << uint32(restrictionsAndMails.RestrictionFlags); @@ -340,7 +339,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::UnlockedCondition ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceLimitDisableInfo const& raceLimitDisableInfo) { data << int8(raceLimitDisableInfo.RaceID); - data << int32(raceLimitDisableInfo.Reason); + data << int8(raceLimitDisableInfo.Reason); return data; } @@ -349,6 +348,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WarbandGroupMember const& warbandGroupM { data << uint32(warbandGroupMember.WarbandScenePlacementID); data << int32(warbandGroupMember.Type); + data << int32(warbandGroupMember.ContentSetID); if (warbandGroupMember.Type == 0) data << warbandGroupMember.Guid; @@ -361,6 +361,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WarbandGroup const& warbandGroup) data << uint8(warbandGroup.OrderIndex); data << uint32(warbandGroup.WarbandSceneID); data << uint32(warbandGroup.Flags); + data << int32(warbandGroup.ContentSetID); data << Size(warbandGroup.Members); for (WarbandGroupMember const& member : warbandGroup.Members) @@ -393,6 +394,7 @@ WorldPacket const* EnumCharactersResult::Write() _worldPacket << Bits<1>(IsRestrictedNewPlayer); _worldPacket << Bits<1>(IsNewcomerChatCompleted); _worldPacket << Bits<1>(IsRestrictedTrial); + _worldPacket << Bits<1>(Unused1127); _worldPacket << OptionalInit(ClassDisableMask); _worldPacket << Bits<1>(DontCreateCharacterDisplays); _worldPacket << Size(Characters); @@ -631,6 +633,7 @@ void PlayerLogin::Read() { _worldPacket >> Guid; _worldPacket >> FarClip; + _worldPacket >> Bits<1>(RPE); } WorldPacket const* LoginVerifyWorld::Write() diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index ba3092fd655..a7f94d8df91 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -120,6 +120,7 @@ namespace WorldPackets { uint32 WarbandScenePlacementID = 0; int32 Type = 0; + int32 ContentSetID = 0; ObjectGuid Guid; }; @@ -129,6 +130,7 @@ namespace WorldPackets uint8 OrderIndex = 0; uint32 WarbandSceneID = 0; uint32 Flags = 0; ///< enum WarbandGroupFlags { Collapsed = 1 } + int32 ContentSetID = 0; std::vector Members; std::string_view Name; }; @@ -205,8 +207,7 @@ namespace WorldPackets uint32 RestrictionFlags = 0; std::vector MailSenders; std::vector MailSenderTypes; - bool RpeResetAvailable = false; - bool RpeResetQuestClearAvailable = false; + bool RpeAvailable = false; }; struct CharacterInfo @@ -255,7 +256,7 @@ namespace WorldPackets }; int8 RaceID = 0; - int32 Reason = 0; + int8 Reason = 0; }; explicit EnumCharactersResult() : ServerPacket(SMSG_ENUM_CHARACTERS_RESULT) { } @@ -269,6 +270,7 @@ namespace WorldPackets bool IsRestrictedNewPlayer = false; ///< forbids using level boost and class trials bool IsNewcomerChatCompleted = false; ///< forbids hero classes and allied races bool IsRestrictedTrial = false; + bool Unused1127 = false; bool DontCreateCharacterDisplays = false; int32 MaxCharacterLevel = 1; @@ -547,6 +549,7 @@ namespace WorldPackets ObjectGuid Guid; ///< Guid of the player that is logging in float FarClip = 0.0f; ///< Visibility distance (for terrain) + bool RPE = false; }; class LoginVerifyWorld final : public ServerPacket diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index 81d12cdd2b0..14348646395 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -53,10 +53,11 @@ namespace WorldPackets }; // CMSG_CHAT_MESSAGE_WHISPER + // CMSG_MESSAGE_WHISPER class ChatMessageWhisper final : public ClientPacket { public: - explicit ChatMessageWhisper(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_MESSAGE_WHISPER, std::move(packet)) { } + explicit ChatMessageWhisper(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } void Read() override; diff --git a/src/server/game/Server/Packets/HousingPackets.cpp b/src/server/game/Server/Packets/HousingPackets.cpp new file mode 100644 index 00000000000..d1337786d62 --- /dev/null +++ b/src/server/game/Server/Packets/HousingPackets.cpp @@ -0,0 +1,27 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "HousingPackets.h" +#include "PacketOperators.h" + +namespace WorldPackets::Housing +{ +void DeclineNeighborhoodInvites::Read() +{ + _worldPacket >> Bits<1>(Allow); +} +} diff --git a/src/server/game/Server/Packets/HousingPackets.h b/src/server/game/Server/Packets/HousingPackets.h new file mode 100644 index 00000000000..74b7121a824 --- /dev/null +++ b/src/server/game/Server/Packets/HousingPackets.h @@ -0,0 +1,36 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef TRINITYCORE_HOUSING_PACKETS_H +#define TRINITYCORE_HOUSING_PACKETS_H + +#include "Packet.h" + +namespace WorldPackets::Housing +{ + class DeclineNeighborhoodInvites final : public ClientPacket + { + public: + explicit DeclineNeighborhoodInvites(WorldPacket&& packet) : ClientPacket(CMSG_DECLINE_NEIGHBORHOOD_INVITES, std::move(packet)) { } + + void Read() override; + + bool Allow = false; + }; +} + +#endif // TRINITYCORE_HOUSING_PACKETS_H diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index b3a3ea8487d..df1d9def336 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -209,6 +209,10 @@ void TutorialSetFlag::Read() WorldPacket const* WorldServerInfo::Write() { _worldPacket << uint32(DifficultyID); + _worldPacket << HouseGuid; + _worldPacket << HouseOwnerBnetAccount; + _worldPacket << HouseOwnerPlayer; + _worldPacket << NeighborhoodGuid; _worldPacket << Bits<1>(IsTournamentRealm); _worldPacket << Bits<1>(XRealmPvpAlert); _worldPacket << Bits<1>(BlockExitingLoadingScreen); @@ -656,7 +660,7 @@ WorldPacket const* AccountHeirloomUpdate::Write() _worldPacket << Bits<1>(IsFullUpdate); _worldPacket.FlushBits(); - _worldPacket << int32(ItemCollectionType); + _worldPacket << int8(ItemCollectionType); // both lists have to have the same size _worldPacket << Size(*Heirlooms); diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index fef57a88b1b..7946e6eea5b 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -265,6 +265,11 @@ namespace WorldPackets Optional RestrictedAccountMaxLevel; Optional RestrictedAccountMaxMoney; Optional InstanceGroupSize; + + ObjectGuid HouseGuid; + ObjectGuid HouseOwnerBnetAccount; + ObjectGuid HouseOwnerPlayer; + ObjectGuid NeighborhoodGuid; }; class SetDungeonDifficulty final : public ClientPacket diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 3dd0acbd9e5..c36faf06206 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -183,10 +183,13 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyMemberAuraStates const& aura) ByteBuffer& operator<<(ByteBuffer& data, CTROptions const& ctrOptions) { - data << uint32(ctrOptions.ConditionalFlags); + data << Size(ctrOptions.ConditionalFlags); data << int8(ctrOptions.FactionGroup); data << uint32(ctrOptions.ChromieTimeExpansionMask); + if (!ctrOptions.ConditionalFlags.empty()) + data.append(ctrOptions.ConditionalFlags.data(), ctrOptions.ConditionalFlags.size()); + return data; } diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index 2e005b7832a..f793adce5df 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -185,7 +185,7 @@ namespace WorldPackets struct CTROptions { - uint32 ConditionalFlags = 0; + std::span ConditionalFlags; int8 FactionGroup = 0; uint32 ChromieTimeExpansionMask = 0; }; diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 3d300e7fabc..7e6fd6446c8 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -226,12 +226,24 @@ ByteBuffer& operator<<(ByteBuffer& data, GuildGuidLookupData const& lookupData) return data; } +ByteBuffer& operator<<(ByteBuffer& data, HouseLookupData const& lookupData) +{ + data << lookupData.Guid; + data << SizedString::BitsSize<8>(lookupData.Name); + data.FlushBits(); + + data << SizedString::Data(lookupData.Name); + + return data; +} + ByteBuffer& operator<<(ByteBuffer& data, NameCacheLookupResult const& result) { data << uint8(result.Result); data << result.Player; data << OptionalInit(result.Data); data << OptionalInit(result.GuildData); + data << OptionalInit(result.HouseData); data.FlushBits(); if (result.Data) @@ -240,6 +252,9 @@ ByteBuffer& operator<<(ByteBuffer& data, NameCacheLookupResult const& result) if (result.GuildData) data << *result.GuildData; + if (result.HouseData) + data << *result.HouseData; + return data; } @@ -345,6 +360,7 @@ WorldPacket const* QueryGameObjectResponse::Write() statsData.append(Stats.QuestItems.data(), Stats.QuestItems.size()); statsData << int32(Stats.ContentTuningId); + statsData << int32(Stats.RequiredLevel); } _worldPacket << Size(statsData); diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 4d30b3b6fdc..939447fb3f4 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -138,12 +138,19 @@ namespace WorldPackets std::string_view Name; }; + struct HouseLookupData + { + ObjectGuid Guid; + std::string_view Name; + }; + struct NameCacheLookupResult { ObjectGuid Player; uint8 Result = 0; // 0 - full packet, != 0 - only guid Optional Data; Optional GuildData; + Optional HouseData; }; class QueryPlayerNamesResponse final : public ServerPacket @@ -234,7 +241,8 @@ namespace WorldPackets std::array Data = { }; float Size = 0.0f; std::vector QuestItems; - uint32 ContentTuningId = 0; + int32 ContentTuningId = 0; + int32 RequiredLevel = 0; }; class QueryGameObjectResponse final : public ServerPacket diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 31e8ddb84ea..2a860499c3a 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -177,6 +177,9 @@ WorldPacket const* QueryQuestInfoResponse::Write() _worldPacket << Size(Info.ConditionalQuestDescription); _worldPacket << Size(Info.ConditionalQuestCompletionLog); + _worldPacket << Size(Info.RewardHouseRoomIDs); + _worldPacket << Size(Info.RewardHouseDecorIDs); + for (QuestCompleteDisplaySpell const& rewardDisplaySpell : Info.RewardDisplaySpell) _worldPacket << rewardDisplaySpell; @@ -186,6 +189,12 @@ WorldPacket const* QueryQuestInfoResponse::Write() if (!Info.TreasurePickerID2.empty()) _worldPacket.append(Info.TreasurePickerID2.data(), Info.TreasurePickerID2.size()); + if (!Info.RewardHouseRoomIDs.empty()) + _worldPacket.append(Info.RewardHouseRoomIDs.data(), Info.RewardHouseRoomIDs.size()); + + if (!Info.RewardHouseDecorIDs.empty()) + _worldPacket.append(Info.RewardHouseDecorIDs.data(), Info.RewardHouseDecorIDs.size()); + _worldPacket << SizedString::BitsSize<9>(Info.LogTitle); _worldPacket << SizedString::BitsSize<12>(Info.LogDescription); _worldPacket << SizedString::BitsSize<12>(Info.QuestDescription); @@ -206,15 +215,19 @@ WorldPacket const* QueryQuestInfoResponse::Write() _worldPacket << int8(questObjective.StorageIndex); _worldPacket << int32(questObjective.ObjectID); _worldPacket << int32(questObjective.Amount); + _worldPacket << int32(questObjective.SecondaryAmount); // only objective type 22 _worldPacket << uint32(questObjective.Flags); _worldPacket << uint32(questObjective.Flags2); _worldPacket << float(questObjective.ProgressBarWeight); _worldPacket << Size(questObjective.VisualEffects); + _worldPacket << int32(questObjective.ParentObjectiveID); // related to new UF flags + for (int32 visualEffect : questObjective.VisualEffects) _worldPacket << int32(visualEffect); _worldPacket << SizedString::BitsSize<8>(questObjective.Description); + _worldPacket << Bits<1>(questObjective.Visible); _worldPacket.FlushBits(); _worldPacket << SizedString::Data(questObjective.Description); diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 1e29c381409..66cf8d43a1b 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -186,6 +186,8 @@ namespace WorldPackets std::vector Objectives; std::vector ConditionalQuestDescription; std::vector ConditionalQuestCompletionLog; + std::span RewardHouseRoomIDs; + std::span RewardHouseDecorIDs; int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { }; int32 RewardAmount[QUEST_REWARD_ITEM_COUNT] = { }; int32 ItemDrop[QUEST_ITEM_DROP_COUNT] = { }; @@ -333,12 +335,12 @@ namespace WorldPackets int32 PortraitGiverMount = 0; int32 PortraitGiverModelSceneID = 0; int32 QuestGiverCreatureID = 0; - std::string QuestTitle; - std::string RewardText; - std::string PortraitGiverText; - std::string PortraitGiverName; - std::string PortraitTurnInText; - std::string PortraitTurnInName; + std::string_view QuestTitle; + std::string_view RewardText; + std::string_view PortraitGiverText; + std::string_view PortraitGiverName; + std::string_view PortraitTurnInText; + std::string_view PortraitTurnInName; std::vector ConditionalRewardText; QuestGiverOfferReward QuestData; int32 QuestPackageID = 0; @@ -430,13 +432,13 @@ namespace WorldPackets int32 QuestInfoID = 0; int32 QuestSessionBonus = 0; int32 QuestGiverCreatureID = 0; - std::string PortraitGiverText; - std::string PortraitGiverName; - std::string PortraitTurnInText; - std::string PortraitTurnInName; - std::string QuestTitle; - std::string LogDescription; - std::string DescriptionText; + std::string_view PortraitGiverText; + std::string_view PortraitGiverName; + std::string_view PortraitTurnInText; + std::string_view PortraitTurnInName; + std::string_view QuestTitle; + std::string_view LogDescription; + std::string_view DescriptionText; std::vector ConditionalDescriptionText; bool DisplayPopup = false; bool StartCheat = false; @@ -481,8 +483,8 @@ namespace WorldPackets int32 StatusFlags = 0; int32 QuestInfoID = 0; std::array QuestFlags = { }; - std::string QuestTitle; - std::string CompletionText; + std::string_view QuestTitle; + std::string_view CompletionText; std::vector ConditionalCompletionText; }; @@ -542,7 +544,7 @@ namespace WorldPackets uint32 GreetEmoteDelay = 0; uint32 GreetEmoteType = 0; std::vector QuestDataText; - std::string Greeting; + std::string_view Greeting; }; class QuestUpdateComplete final : public ServerPacket diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index 20cbed5bf91..f98326d56e7 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -169,7 +169,9 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellTargetData& targetData) buffer >> targetData.Flags; buffer >> targetData.Unit; buffer >> targetData.Item; + buffer >> targetData.Unknown1127_1; + buffer >> Bits<1>(targetData.Unknown1127_2); buffer >> OptionalInit(targetData.SrcLocation); buffer >> OptionalInit(targetData.DstLocation); buffer >> OptionalInit(targetData.Orientation); @@ -309,7 +311,9 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData) data << uint32(spellTargetData.Flags); data << spellTargetData.Unit; data << spellTargetData.Item; + data << spellTargetData.Unknown1127_1; + data << Bits<1>(spellTargetData.Unknown1127_2); data << OptionalInit(spellTargetData.SrcLocation); data << OptionalInit(spellTargetData.DstLocation); data << OptionalInit(spellTargetData.Orientation); diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index a4b30b3d2d4..cf9808e431c 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -203,8 +203,10 @@ namespace WorldPackets struct SpellTargetData { uint32 Flags = 0; + bool Unknown1127_2 = false; ObjectGuid Unit; ObjectGuid Item; + ObjectGuid Unknown1127_1; Optional SrcLocation; Optional DstLocation; Optional Orientation; diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index 804a3b7229a..c819429a303 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -77,6 +77,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EuropaTicketConfig const& europaTicketS data << Bits<1>(europaTicketSystemStatus.SuggestionsEnabled); data << europaTicketSystemStatus.ThrottleState; + data << europaTicketSystemStatus.Unused1127; return data; } @@ -90,6 +91,15 @@ ByteBuffer& operator<<(ByteBuffer& data, SquelchInfo const& squelch) return data; } +ByteBuffer& operator<<(ByteBuffer& data, GameModeData const& gameMode) +{ + data << uint8(gameMode.GameMode); + data << int32(gameMode.Unused1127); + data << int32(gameMode.GameModeRecordID); + + return data; +} + ByteBuffer& operator<<(ByteBuffer& data, GameRuleValuePair const& gameRuleValue) { data << int32(gameRuleValue.Rule); @@ -131,6 +141,7 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << uint32(ClubPresenceUnsubscribeDelay); _worldPacket << int32(ContentSetID); + _worldPacket << Size(DisabledGameModes); _worldPacket << Size(GameRules); _worldPacket << int32(ActiveTimerunningSeasonID); _worldPacket << int32(RemainingTimerunningSeasonSeconds); @@ -153,6 +164,9 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << float(AddonPerformanceMsgError); _worldPacket << float(AddonPerformanceMsgOverall); + for (GameModeData const& disabledGameMode : DisabledGameModes) + _worldPacket << disabledGameMode; + for (GameRuleValuePair const& gameRuleValue : GameRules) _worldPacket << gameRuleValue; @@ -292,7 +306,9 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket << int32(MinimumExpansionLevel); _worldPacket << int32(MaximumExpansionLevel); _worldPacket << int32(ContentSetID); + _worldPacket << Size(DisabledGameModes); _worldPacket << Size(GameRules); + _worldPacket << Size(AvailableGameModeIDs); _worldPacket << int32(ActiveTimerunningSeasonID); _worldPacket << int32(RemainingTimerunningSeasonSeconds); _worldPacket << TimerunningConversionMinCharacterAge; @@ -312,9 +328,15 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() if (!LiveRegionCharacterCopySourceRegions.empty()) _worldPacket.append(LiveRegionCharacterCopySourceRegions.data(), LiveRegionCharacterCopySourceRegions.size()); + for (GameModeData const& disabledGameMode : DisabledGameModes) + _worldPacket << disabledGameMode; + for (GameRuleValuePair const& gameRuleValue : GameRules) _worldPacket << gameRuleValue; + if (!AvailableGameModeIDs.empty()) + _worldPacket.append(AvailableGameModeIDs.data(), AvailableGameModeIDs.size()); + for (DebugTimeEventInfo const& debugTimeEventInfo : DebugTimeEvents) _worldPacket << debugTimeEventInfo; @@ -343,6 +365,22 @@ WorldPacket const* MirrorVars::Write() return &_worldPacket; } +WorldPacket const* MOTD::Write() +{ + _worldPacket << BitsSize<4>(*Text); + _worldPacket.FlushBits(); + + for (std::string const& line : *Text) + { + _worldPacket << SizedString::BitsSize<7>(line); + _worldPacket.FlushBits(); + + _worldPacket << SizedString::Data(line); + } + + return &_worldPacket; +} + WorldPacket const* SetTimeZoneInformation::Write() { _worldPacket << SizedString::BitsSize<7>(ServerTimeTZ); diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index ff723b7412e..a0210f4fbf0 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -77,6 +77,7 @@ namespace WorldPackets bool SuggestionsEnabled = false; SavedThrottleObjectState ThrottleState; + SavedThrottleObjectState Unused1127; }; struct SquelchInfo @@ -86,6 +87,13 @@ namespace WorldPackets ObjectGuid GuildGuid; }; + struct GameModeData + { + uint8 GameMode = 0; + int32 Unused1127 = 0; + int32 GameModeRecordID = 0; + }; + struct GameRuleValuePair { int32 Rule = 0; @@ -182,6 +190,7 @@ namespace WorldPackets SocialQueueConfig QuickJoinConfig; SquelchInfo Squelch; RafSystemFeatureInfo RAFSystem; + std::vector DisabledGameModes; std::vector GameRules; int32 ActiveTimerunningSeasonID = 0; int32 RemainingTimerunningSeasonSeconds = 0; @@ -249,7 +258,9 @@ namespace WorldPackets int32 MaximumExpansionLevel = 0; uint32 KioskSessionDurationMinutes = 0; int32 ContentSetID = 0; // Currently active Classic season + std::vector DisabledGameModes; std::vector GameRules; + std::vector AvailableGameModeIDs; int32 ActiveTimerunningSeasonID = 0; int32 RemainingTimerunningSeasonSeconds = 0; Duration TimerunningConversionMinCharacterAge { 1_days }; @@ -284,6 +295,16 @@ namespace WorldPackets std::span Variables; }; + class MOTD final : public ServerPacket + { + public: + MOTD() : ServerPacket(SMSG_MOTD) { } + + WorldPacket const* Write() override; + + std::vector const* Text = nullptr; + }; + class SetTimeZoneInformation final : public ServerPacket { public: diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp index 1a9d373bf8b..4fd5cf7d4ed 100644 --- a/src/server/game/Server/Packets/TalentPackets.cpp +++ b/src/server/game/Server/Packets/TalentPackets.cpp @@ -102,7 +102,7 @@ WorldPacket const* UpdateTalentData::Write() _worldPacket << talent; for (uint32 talent : talentGroupInfo.GlyphIDs) - _worldPacket << uint16(talent); + _worldPacket << uint32(talent); } return &_worldPacket; diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp index 259141c5848..d928ed1e9f9 100644 --- a/src/server/game/Server/Packets/TicketPackets.cpp +++ b/src/server/game/Server/Packets/TicketPackets.cpp @@ -250,6 +250,22 @@ ByteBuffer& operator>>(ByteBuffer& data, SupportTicketArenaTeamInfo& arenaTeam) return data; } +ByteBuffer& operator>>(ByteBuffer& data, SupportTicketHouseInfo& houseInfo) +{ + data.ResetBitPos(); + + data >> SizedString::BitsSize<8>(houseInfo.NeighborhoodName); + + data >> houseInfo.Unknown_1127_1; + data >> houseInfo.Unknown_1127_2; + data >> houseInfo.Unknown_1127_3; + data >> houseInfo.Unknown_1127_4; + + data >> SizedString::Data(houseInfo.NeighborhoodName); + + return data; +} + void SupportTicketSubmitComplaint::Read() { _worldPacket >> Header; @@ -269,6 +285,7 @@ void SupportTicketSubmitComplaint::Read() _worldPacket >> OptionalInit(VoiceChatInfo); _worldPacket >> OptionalInit(ClubFinderInfo); _worldPacket >> OptionalInit(ArenaTeamInfo); + _worldPacket >> OptionalInit(HouseInfo); if (VoiceChatInfo) { @@ -303,6 +320,9 @@ void SupportTicketSubmitComplaint::Read() if (ArenaTeamInfo) _worldPacket >> *ArenaTeamInfo; + + if (HouseInfo) + _worldPacket >> *HouseInfo; } ByteBuffer& operator>>(ByteBuffer& data, Complaint::ComplaintOffender& complaintOffender) diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h index d00dcb8e13b..7cebe040d0b 100644 --- a/src/server/game/Server/Packets/TicketPackets.h +++ b/src/server/game/Server/Packets/TicketPackets.h @@ -211,6 +211,15 @@ namespace WorldPackets ObjectGuid ArenaTeamID; }; + struct SupportTicketHouseInfo + { + std::string NeighborhoodName; + ObjectGuid Unknown_1127_1; + ObjectGuid Unknown_1127_2; + ObjectGuid Unknown_1127_3; + uint8 Unknown_1127_4 = 0; + }; + class SupportTicketSubmitComplaint final : public ClientPacket { public: @@ -235,6 +244,7 @@ namespace WorldPackets Optional VoiceChatInfo; Optional ClubFinderInfo; Optional ArenaTeamInfo; + Optional HouseInfo; }; class Complaint final : public ClientPacket diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 015acba00e7..7f037c3ab7e 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -146,7 +146,6 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_ABANDON_NPE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACCEPT_GUILD_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAcceptInvite); - DEFINE_HANDLER(CMSG_ACCEPT_RETURNING_PLAYER_PROMPT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACCEPT_SOCIAL_CONTRACT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptTradeOpcode); DEFINE_HANDLER(CMSG_ACCEPT_WARGAME_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -419,6 +418,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_CREATE_SHIPMENT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_DB_QUERY_BULK, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleDBQueryBulk); DEFINE_HANDLER(CMSG_DECLINE_GUILD_INVITES, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleDeclineGuildInvites); + DEFINE_HANDLER(CMSG_DECLINE_NEIGHBORHOOD_INVITES, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleDeclineNeighborhoodInvites); DEFINE_HANDLER(CMSG_DECLINE_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDeclinePetition); DEFINE_HANDLER(CMSG_DELETE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDeleteEquipmentSet); DEFINE_HANDLER(CMSG_DELVE_TELEPORT_OUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -445,6 +445,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_EMOTE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleEmoteOpcode); DEFINE_HANDLER(CMSG_ENABLE_NAGLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_ENABLE_TAXI_NODE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleEnableTaxiNodeOpcode); + DEFINE_HANDLER(CMSG_ENCOUNTER_JOURNAL_START_ARATHI_RPE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ENGINE_SURVEY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ENTER_ENCRYPTED_MODE_ACK, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_ENUM_CHARACTERS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharEnumOpcode); @@ -522,6 +523,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_GUILD_DEMOTE_MEMBER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildDemoteMember); DEFINE_HANDLER(CMSG_GUILD_EVENT_LOG_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildEventLogQuery); DEFINE_HANDLER(CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildGetAchievementMembers); + DEFINE_HANDLER(CMSG_GUILD_GET_OTHERS_OWNED_HOUSES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GUILD_GET_RANKS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildGetRanks); DEFINE_HANDLER(CMSG_GUILD_GET_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildGetRoster); DEFINE_HANDLER(CMSG_GUILD_INVITE_BY_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildInviteByName); @@ -550,12 +552,56 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_HEARTH_AND_RESURRECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleHearthAndResurrect); DEFINE_HANDLER(CMSG_HIDE_QUEST_CHOICE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_HOTFIX_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleHotfixRequest); + DEFINE_HANDLER(CMSG_HOUSE_EXTERIOR_COMMIT_POSITION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSE_INTERIOR_LEAVE_HOUSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_CATALOG_CREATE_SEARCHER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_CATALOG_DESTROY_ALL_ENTRY_COPIES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_CATALOG_DESTROY_ENTRY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_COMMIT_DYES_FOR_SELECTED_DECOR, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_MOVE_DECOR, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_PLACE_NEW_DECOR, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_REMOVE_PLACED_DECOR_ENTRY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_SELECT_DECOR, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_SET_EDITOR_MODE_ACTIVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_DECOR_START_PLACING_NEW_DECOR, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_FIXTURE_REMOVE_FIXTURE_FROM_SELECTED_POINT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_FIXTURE_SELECT_CORE_FIXTURE_OPTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_FIXTURE_SELECT_FIXTURE_OPTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_FIXTURE_SET_EDITOR_MODE_ACTIVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_KIOSK_REQUEST_HOUSING_RESET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_REQUEST_CURRENT_HOUSE_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_APPLY_THEME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_APPLY_WALLPAPER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_MOVE_DRAGGED_ROOM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_PLACE_ROOM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_REMOVE_ROOM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_ROTATE_ROOM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_SET_EDITOR_MODE_ACTIVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_SET_ROOM_COMPONENT_CEILING_TYPE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_ROOM_SET_ROOM_COMPONENT_DOOR_TYPE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_ACCEPT_NEIGHBORHOOD_OWNERSHIP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_CREATE_GUILD_NEIGHBORHOOD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_DECLINE_NEIGHBORHOOD_OWNERSHIP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_ENTER_HOUSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_GET_OTHERS_BNET_ACCOUNT_OWNED_HOUSES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_GET_OTHERS_PLAYER_OWNED_HOUSES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_GET_PLAYER_OWNED_HOUSES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_HOUSE_FINDER_DECLINE_NEIGHBORHOOD_INVITATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_HOUSE_FINDER_REQUEST_NEIGHBORHOODS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_HOUSE_FINDER_REQUEST_RESERVATION_AND_PORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_RELINQUISH_HOUSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_REQUEST_HOUSE_FINDER_NEIGHBORHOOD_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_REQUEST_PLAYER_CHARACTER_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_SAVE_HOUSE_SETTINGS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_SEARCH_BNET_FRIEND_NEIGHBORHOODS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_HOUSING_SERVICES_START_TUTORIAL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_IGNORE_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleIgnoreTradeOpcode); DEFINE_HANDLER(CMSG_INITIATE_ROLE_POLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInitiateRolePoll); DEFINE_HANDLER(CMSG_INITIATE_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInitiateTradeOpcode); DEFINE_HANDLER(CMSG_INSPECT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleInspectOpcode); DEFINE_HANDLER(CMSG_INSTANCE_ABANDON_VOTE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_INSTANCE_LOCK_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInstanceLockResponse); + DEFINE_HANDLER(CMSG_INVITE_PLAYER_TO_NEIGHBORHOOD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ISLAND_QUEUE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ITEM_PURCHASE_REFUND, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleItemRefund); DEFINE_HANDLER(CMSG_ITEM_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleItemTextQuery); @@ -563,6 +609,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_JOIN_RATED_BATTLEGROUND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_KEEP_ALIVE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_KEYBOUND_OVERRIDE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleKeyboundOverride); + DEFINE_HANDLER(CMSG_KIOSK_ENABLE_GOD_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_LATENCY_REPORT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_LEARN_PVP_TALENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLearnPvpTalentsOpcode); DEFINE_HANDLER(CMSG_LEARN_TALENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleLearnTalentsOpcode); @@ -621,6 +668,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMergeGuildBankItemWithGuildBankItem); DEFINE_HANDLER(CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMergeGuildBankItemWithItem); DEFINE_HANDLER(CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMergeItemWithGuildBankItem); + DEFINE_HANDLER(CMSG_MESSAGE_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatMessageWhisperOpcode); DEFINE_HANDLER(CMSG_MINIMAP_PING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMinimapPingOpcode); DEFINE_HANDLER(CMSG_MISSILE_TRAJECTORY_COLLISION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMissileTrajectoryCollision); DEFINE_HANDLER(CMSG_MOUNT_CLEAR_FANFARE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -718,6 +766,27 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_MOVE_UPDATE_FALL_SPEED, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes); DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_ADD_MANAGER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_CANCEL_RESIDENT_INVITATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_CHARTER_CONFIRMATION_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_CHARTER_CREATE_NEIGHBORHOOD_CHARTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_CHARTER_EDIT_NEIGHBORHOOD_CHARTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_CHARTER_OPEN_CHARTER_CONFIRMATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_CHARTER_REQUEST_SIGNATURE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_CHARTER_SIGN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_DECLINE_NEIGHBORHOOD_INVITATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_EVICT_PLAYER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_GET_HOUSING_INVITATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_GET_INVITES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_INTERACT_WITH_CORNERSTONE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_INVITE_RESIDENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_MOVE_HOUSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_OFFER_NEIGHBORHOOD_OWNERSHIP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_PURCHASE_PLOT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_REMOVE_MANAGER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_REQUEST_NEIGHBORHOOD_ROSTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_SET_NAME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_NEIGHBORHOOD_SET_PUBLIC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_NEUTRAL_PLAYER_SELECT_FACTION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_NEXT_CINEMATIC_CAMERA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNextCinematicCamera); DEFINE_HANDLER(CMSG_OBJECT_UPDATE_FAILED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleObjectUpdateFailedOpcode); @@ -777,6 +846,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_QUERY_GARRISON_PET_NAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_GUILD_INFO, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildQueryOpcode); DEFINE_HANDLER(CMSG_QUERY_INSPECT_ACHIEVEMENTS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryInspectAchievements); + DEFINE_HANDLER(CMSG_QUERY_NEIGHBORHOOD_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_NEXT_MAIL_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryNextMailTime); DEFINE_HANDLER(CMSG_QUERY_NPC_TEXT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleNpcTextQueryOpcode); DEFINE_HANDLER(CMSG_QUERY_PAGE_TEXT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleQueryPageText); @@ -876,7 +946,6 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_RESURRECT_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleResurrectResponse); DEFINE_HANDLER(CMSG_REVERT_MONUMENT_APPEARANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_RIDE_VEHICLE_INTERACT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRideVehicleInteract); - DEFINE_HANDLER(CMSG_RPE_RESET_CHARACTER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SAVE_CUF_PROFILES, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSaveCUFProfiles); DEFINE_HANDLER(CMSG_SAVE_ACCOUNT_DATA_EXPORT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SAVE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEquipmentSetSave); @@ -1011,7 +1080,6 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateBankTabSettings); DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateAccountData); DEFINE_HANDLER(CMSG_UPDATE_AREA_TRIGGER_VISUAL, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUpdateAreaTriggerVisual); - DEFINE_HANDLER(CMSG_UPDATE_CLIENT_SETTINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UPDATE_CRAFTING_NPC_RECIPES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UPDATE_MISSILE_TRAJECTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateMissileTrajectory); DEFINE_HANDLER(CMSG_UPDATE_RAID_TARGET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateRaidTargetOpcode); @@ -1054,8 +1122,12 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_DATA_TIMES, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_EXPORT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_ITEM_COLLECTION_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HEIRLOOM_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_ITEM_COLLECTION_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HOUSING_FIXTURE_ADDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HOUSING_ROOM_ADDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HOUSING_ROOM_COMPONENT_TEXTURE_ADDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HOUSING_THEME_ADDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_MOUNT_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_MOUNT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1241,6 +1313,8 @@ void OpcodeTable::InitializeServerOpcodes() 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_NEW_PLAYER_RECORD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REQUEST_LEADERBOARD_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_SET_LEAVER_PENALTY_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1311,6 +1385,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMMERCE_TOKEN_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMPLAINT_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMPLETE_SHIPMENT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMPRESSED_PACKET, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONFIRM_PARTY_INVITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONNECT_TO, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONSOLE_WRITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1561,6 +1636,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_MODIFIED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_TAB_TEXT_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_FLAGGED_FOR_RENAME, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_HARDCORE_MEMBER_DEATH, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_INVITE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_INVITE_DECLINED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_INVITE_EXPIRED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1575,6 +1651,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NAME_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_NEWS_DELETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_OTHERS_OWNED_HOUSES_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PARTY_STATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_PERMISSIONS_QUERY_RESULTS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_RANKS, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1620,6 +1697,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_RESET_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_SAVE_CREATED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INTERRUPT_POWER_REGEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_NEIGHBORHOOD_NAME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PAGE_TEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALID_PROMOTION_CODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1671,6 +1749,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_READY_CHECK_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_ROLE_CHECK_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_SLOT_INVALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_SUSPEND_LOREWALKING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_TELEPORT_DENIED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_UPDATE_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1716,6 +1795,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_VARS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MISSILE_CANCEL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MODIFY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOTD, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVEMENT_ENFORCEMENT_ALERT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ADD_IMPULSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); @@ -1831,6 +1911,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TELEPORT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_TURN_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_WALK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTIPLE_PACKETS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTI_FLOOR_LEAVE_FLOOR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTI_FLOOR_NEW_FLOOR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MYTHIC_PLUS_ALL_MAP_STATS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1908,7 +1989,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_UNLEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PHASE_SHIFT_CHANGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYED_TIME, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_ACKNOWLEDGE_ARROW_CALLOUT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_AZERITE_ITEM_GAINS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_BONUS_ROLL_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1964,6 +2045,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GUILD_FOLLOW_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GUILD_INFO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_ITEM_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_NEIGHBORHOOD_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_NPC_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PAGE_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PETITION_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2052,7 +2134,6 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESUME_TOKEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESURRECT_REQUEST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESYNC_RUNES, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_RETURNING_PLAYER_PROMPT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RETURN_APPLICANT_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RETURN_RECRUITING_CLUBS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ROLE_CHANGED_INFORM, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2093,6 +2174,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ANIM_TIER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CHR_UPGRADE_TIER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CTR_OPTIONS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DF_FAST_LAUNCH_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DUNGEON_DIFFICULTY, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2162,13 +2244,13 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPELL_VISUAL_LOAD_SCREEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPLASH_SCREEN_SHOW_LATEST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STAND_STATE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_STARTER_BUILD_ACTIVATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_ELAPSED_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_ELAPSED_TIMERS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_LIGHTNING_STORM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_LOOT_ROLL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_START_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_STARTER_BUILD_ACTIVATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STOP_ELAPSED_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STOP_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_STOP_SPEAKERBOT_SOUND, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2183,6 +2265,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_COMMS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_TOKEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SYNC_WOW_ENTITLEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_TAKE_SCREENSHOT_FOR_COMPLAINT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TALENTS_INVOLUNTARILY_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TAXI_NODE_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TEXT_EMOTE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -2259,6 +2342,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_TRANSFER_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_FINISH, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WALK_IN_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN3_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN3_DISABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN3_ENABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -2287,9 +2371,6 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_XP_GAIN_ENABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ZONE_UNDER_ATTACK, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMPRESSED_PACKET, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MULTIPLE_PACKETS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - #undef DEFINE_SERVER_OPCODE_HANDLER } diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index a385c379ab1..4a45eeeb6a1 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -36,158 +36,157 @@ constexpr uint32 UNKNOWN_OPCODE = 0xBADD; // special marker value for uninitia enum OpcodeClient : uint32 { - CMSG_ABANDON_NPE_RESPONSE = 0x2F029A, - CMSG_ACCEPT_GUILD_INVITE = 0x340029, - CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x2F025B, - CMSG_ACCEPT_SOCIAL_CONTRACT = 0x340176, - CMSG_ACCEPT_TRADE = 0x2F0004, - CMSG_ACCEPT_WARGAME_INVITE = 0x34000C, - CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x2F02DD, - CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x2F02DE, - CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x340162, - CMSG_ACCOUNT_STORE_BEGIN_PURCHASE_OR_REFUND = 0x3400C0, - CMSG_ACTIVATE_SOULBIND = 0x2F0289, - CMSG_ACTIVATE_TAXI = 0x30003E, - CMSG_ADDON_LIST = 0x340004, - CMSG_ADD_ACCOUNT_COSMETIC = 0x2F0172, - CMSG_ADD_BATTLENET_FRIEND = 0x340086, - CMSG_ADD_FRIEND = 0x3400FF, - CMSG_ADD_IGNORE = 0x340103, - CMSG_ADD_TOY = 0x2F0171, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x2F00B4, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x2F028C, - CMSG_ADVENTURE_MAP_START_QUEST = 0x2F022C, - CMSG_ALTER_APPEARANCE = 0x30008D, - CMSG_AREA_SPIRIT_HEALER_QUERY = 0x300043, - CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x300044, - CMSG_AREA_TRIGGER = 0x2F0087, - CMSG_ARTIFACT_ADD_POWER = 0x2F0056, - CMSG_ARTIFACT_SET_APPEARANCE = 0x2F0058, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x2F00C0, - CMSG_ATTACK_STOP = 0x2F011E, - CMSG_ATTACK_SWING = 0x2F011D, - CMSG_AUCTIONABLE_TOKEN_SELL = 0x340115, - CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x340116, - CMSG_AUCTION_BROWSE_QUERY = 0x300061, - CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x300069, - CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x300068, - CMSG_AUCTION_GET_COMMODITY_QUOTE = 0x300067, - CMSG_AUCTION_HELLO_REQUEST = 0x30005C, - CMSG_AUCTION_LIST_BIDDED_ITEMS = 0x300065, - CMSG_AUCTION_LIST_BUCKETS_BY_BUCKET_KEYS = 0x300066, - CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY = 0x300062, - CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID = 0x300063, - CMSG_AUCTION_LIST_OWNED_ITEMS = 0x300064, - CMSG_AUCTION_PLACE_BID = 0x300060, - CMSG_AUCTION_REMOVE_ITEM = 0x30005E, - CMSG_AUCTION_REPLICATE_ITEMS = 0x30005F, - CMSG_AUCTION_SELL_COMMODITY = 0x30006A, - CMSG_AUCTION_SELL_ITEM = 0x30005D, - CMSG_AUCTION_SET_FAVORITE_ITEM = 0x340163, - CMSG_AUTH_CONTINUED_SESSION = 0x350002, - CMSG_AUTH_SESSION = 0x350001, - CMSG_AUTOBANK_ITEM = 0x310003, - CMSG_AUTOSTORE_BANK_ITEM = 0x310002, - CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x2F02E7, - CMSG_AUTO_DEPOSIT_CHARACTER_BANK = 0x2F02EF, - CMSG_AUTO_EQUIP_ITEM = 0x310004, - CMSG_AUTO_EQUIP_ITEM_SLOT = 0x310009, - CMSG_AUTO_GUILD_BANK_ITEM = 0x300048, - CMSG_AUTO_STORE_BAG_ITEM = 0x310005, - CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x300051, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x2F0257, - CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x2F0238, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x2F0259, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x2F0258, - CMSG_BANKER_ACTIVATE = 0x300046, - CMSG_BATTLEFIELD_LEAVE = 0x2F001F, - CMSG_BATTLEFIELD_LIST = 0x2F002A, - CMSG_BATTLEFIELD_PORT = 0x3000C3, - CMSG_BATTLEMASTER_HELLO = 0x2F0190, - CMSG_BATTLEMASTER_JOIN = 0x3000BA, - CMSG_BATTLEMASTER_JOIN_ARENA = 0x3000BB, - CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3000C1, - CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ = 0x3000BD, - CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3000BC, - CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3000BE, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x340102, - CMSG_BATTLENET_REQUEST = 0x340123, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x3400FB, - CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x340140, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x3400FA, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x3400F1, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x340166, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x3400E8, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x3400E9, - CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x340139, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x340134, - CMSG_BATTLE_PAY_START_PURCHASE = 0x3400F9, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x340121, + CMSG_ABANDON_NPE_RESPONSE = 0x39029A, + CMSG_ACCEPT_GUILD_INVITE = 0x3E0029, + CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3E0177, + CMSG_ACCEPT_TRADE = 0x390004, + CMSG_ACCEPT_WARGAME_INVITE = 0x3E000C, + CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x3902DC, + CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x3902DD, + CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3E0163, + CMSG_ACCOUNT_STORE_BEGIN_PURCHASE_OR_REFUND = 0x3E00C1, + CMSG_ACTIVATE_SOULBIND = 0x390289, + CMSG_ACTIVATE_TAXI = 0x3A003E, + CMSG_ADDON_LIST = 0x3E0004, + CMSG_ADD_ACCOUNT_COSMETIC = 0x390172, + CMSG_ADD_BATTLENET_FRIEND = 0x3E0086, + CMSG_ADD_FRIEND = 0x3E0100, + CMSG_ADD_IGNORE = 0x3E0104, + CMSG_ADD_TOY = 0x390171, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3900B4, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x39028C, + CMSG_ADVENTURE_MAP_START_QUEST = 0x39022C, + CMSG_ALTER_APPEARANCE = 0x3A008D, + CMSG_AREA_SPIRIT_HEALER_QUERY = 0x3A0043, + CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x3A0044, + CMSG_AREA_TRIGGER = 0x390087, + CMSG_ARTIFACT_ADD_POWER = 0x390056, + CMSG_ARTIFACT_SET_APPEARANCE = 0x390058, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3900C0, + CMSG_ATTACK_STOP = 0x39011E, + CMSG_ATTACK_SWING = 0x39011D, + CMSG_AUCTIONABLE_TOKEN_SELL = 0x3E0116, + CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x3E0117, + CMSG_AUCTION_BROWSE_QUERY = 0x3A0061, + CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x3A0069, + CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x3A0068, + CMSG_AUCTION_GET_COMMODITY_QUOTE = 0x3A0067, + CMSG_AUCTION_HELLO_REQUEST = 0x3A005C, + CMSG_AUCTION_LIST_BIDDED_ITEMS = 0x3A0065, + CMSG_AUCTION_LIST_BUCKETS_BY_BUCKET_KEYS = 0x3A0066, + CMSG_AUCTION_LIST_ITEMS_BY_BUCKET_KEY = 0x3A0062, + CMSG_AUCTION_LIST_ITEMS_BY_ITEM_ID = 0x3A0063, + CMSG_AUCTION_LIST_OWNED_ITEMS = 0x3A0064, + CMSG_AUCTION_PLACE_BID = 0x3A0060, + CMSG_AUCTION_REMOVE_ITEM = 0x3A005E, + CMSG_AUCTION_REPLICATE_ITEMS = 0x3A005F, + CMSG_AUCTION_SELL_COMMODITY = 0x3A006A, + CMSG_AUCTION_SELL_ITEM = 0x3A005D, + CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3E0164, + CMSG_AUTH_CONTINUED_SESSION = 0x3F0003, + CMSG_AUTH_SESSION = 0x3F0001, + CMSG_AUTOBANK_ITEM = 0x3B0003, + CMSG_AUTOSTORE_BANK_ITEM = 0x3B0002, + CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x3902E6, + CMSG_AUTO_DEPOSIT_CHARACTER_BANK = 0x3902EE, + CMSG_AUTO_EQUIP_ITEM = 0x3B0004, + CMSG_AUTO_EQUIP_ITEM_SLOT = 0x3B0009, + CMSG_AUTO_GUILD_BANK_ITEM = 0x3A0048, + CMSG_AUTO_STORE_BAG_ITEM = 0x3B0005, + CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x3A0051, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x390258, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x390238, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x39025A, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x390259, + CMSG_BANKER_ACTIVATE = 0x3A0046, + CMSG_BATTLEFIELD_LEAVE = 0x39001F, + CMSG_BATTLEFIELD_LIST = 0x39002A, + CMSG_BATTLEFIELD_PORT = 0x3A00C3, + CMSG_BATTLEMASTER_HELLO = 0x390190, + CMSG_BATTLEMASTER_JOIN = 0x3A00BA, + CMSG_BATTLEMASTER_JOIN_ARENA = 0x3A00BB, + CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3A00C1, + CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ = 0x3A00BD, + CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3A00BC, + CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3A00BE, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x3E0103, + CMSG_BATTLENET_REQUEST = 0x3E0124, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x3E00FC, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3E0141, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x3E00FB, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x3E00F2, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3E0167, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x3E00E9, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x3E00EA, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x3E013A, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3E0135, + CMSG_BATTLE_PAY_START_PURCHASE = 0x3E00FA, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x3E0122, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x290002, - CMSG_BATTLE_PET_DELETE_PET = 0x34004F, - CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x340050, - CMSG_BATTLE_PET_MODIFY_NAME = 0x340052, - CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x34004E, - CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x34004D, - CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x340057, - CMSG_BATTLE_PET_SET_FLAGS = 0x34005A, - CMSG_BATTLE_PET_SUMMON = 0x340053, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x2F0091, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x2F0090, - CMSG_BEGIN_TRADE = 0x2F0001, - CMSG_BINDER_ACTIVATE = 0x300045, - CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3000CB, - CMSG_BLACK_MARKET_OPEN = 0x3000C9, - CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3000CA, - CMSG_BONUS_ROLL = 0x2F025A, - CMSG_BUG_REPORT = 0x3400B1, - CMSG_BUSY_TRADE = 0x2F0002, - CMSG_BUY_ACCOUNT_BANK_TAB = 0x300123, - CMSG_BUY_BACK_ITEM = 0x300037, - CMSG_BUY_ITEM = 0x300036, - CMSG_CAGE_BATTLE_PET = 0x2F00A4, - CMSG_CALENDAR_ADD_EVENT = 0x3400A9, - CMSG_CALENDAR_COMMUNITY_INVITE = 0x34009D, - CMSG_CALENDAR_COMPLAIN = 0x3400A5, - CMSG_CALENDAR_COPY_EVENT = 0x3400A4, - CMSG_CALENDAR_EVENT_SIGN_UP = 0x3400A7, - CMSG_CALENDAR_GET = 0x34009B, - CMSG_CALENDAR_GET_EVENT = 0x34009C, - CMSG_CALENDAR_GET_NUM_PENDING = 0x3400A6, - CMSG_CALENDAR_INVITE = 0x34009E, - CMSG_CALENDAR_MODERATOR_STATUS = 0x3400A2, - CMSG_CALENDAR_REMOVE_EVENT = 0x3400A3, - CMSG_CALENDAR_REMOVE_INVITE = 0x34009F, - CMSG_CALENDAR_RSVP = 0x3400A0, - CMSG_CALENDAR_STATUS = 0x3400A1, - CMSG_CALENDAR_UPDATE_EVENT = 0x3400AA, - CMSG_CANCEL_AURA = 0x2F005A, - CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x30007F, - CMSG_CANCEL_CAST = 0x2F0178, - CMSG_CANCEL_CHANNELLING = 0x2F0139, - CMSG_CANCEL_GROWTH_AURA = 0x2F0141, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x2F00CD, - CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x2F0059, - CMSG_CANCEL_MOUNT_AURA = 0x2F0154, - CMSG_CANCEL_QUEUED_SPELL = 0x2F002B, - CMSG_CANCEL_TEMP_ENCHANTMENT = 0x30008A, - CMSG_CANCEL_TRADE = 0x2F0006, - CMSG_CAN_DUEL = 0x34008E, - CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x340133, - CMSG_CAST_SPELL = 0x2F0175, + CMSG_BATTLE_PET_DELETE_PET = 0x3E004F, + CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3E0050, + CMSG_BATTLE_PET_MODIFY_NAME = 0x3E0052, + CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3E004E, + CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3E004D, + CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x3E0057, + CMSG_BATTLE_PET_SET_FLAGS = 0x3E005A, + CMSG_BATTLE_PET_SUMMON = 0x3E0053, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x390091, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x390090, + CMSG_BEGIN_TRADE = 0x390001, + CMSG_BINDER_ACTIVATE = 0x3A0045, + CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3A00CB, + CMSG_BLACK_MARKET_OPEN = 0x3A00C9, + CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3A00CA, + CMSG_BONUS_ROLL = 0x39025B, + CMSG_BUG_REPORT = 0x3E00B1, + CMSG_BUSY_TRADE = 0x390002, + CMSG_BUY_ACCOUNT_BANK_TAB = 0x3A0123, + CMSG_BUY_BACK_ITEM = 0x3A0037, + CMSG_BUY_ITEM = 0x3A0036, + CMSG_CAGE_BATTLE_PET = 0x3900A4, + CMSG_CALENDAR_ADD_EVENT = 0x3E00A9, + CMSG_CALENDAR_COMMUNITY_INVITE = 0x3E009D, + CMSG_CALENDAR_COMPLAIN = 0x3E00A5, + CMSG_CALENDAR_COPY_EVENT = 0x3E00A4, + CMSG_CALENDAR_EVENT_SIGN_UP = 0x3E00A7, + CMSG_CALENDAR_GET = 0x3E009B, + CMSG_CALENDAR_GET_EVENT = 0x3E009C, + CMSG_CALENDAR_GET_NUM_PENDING = 0x3E00A6, + CMSG_CALENDAR_INVITE = 0x3E009E, + CMSG_CALENDAR_MODERATOR_STATUS = 0x3E00A2, + CMSG_CALENDAR_REMOVE_EVENT = 0x3E00A3, + CMSG_CALENDAR_REMOVE_INVITE = 0x3E009F, + CMSG_CALENDAR_RSVP = 0x3E00A0, + CMSG_CALENDAR_STATUS = 0x3E00A1, + CMSG_CALENDAR_UPDATE_EVENT = 0x3E00AA, + CMSG_CANCEL_AURA = 0x39005A, + CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x3A007F, + CMSG_CANCEL_CAST = 0x390178, + CMSG_CANCEL_CHANNELLING = 0x390139, + CMSG_CANCEL_GROWTH_AURA = 0x390141, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3900CD, + CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x390059, + CMSG_CANCEL_MOUNT_AURA = 0x390154, + CMSG_CANCEL_QUEUED_SPELL = 0x39002B, + CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3A008A, + CMSG_CANCEL_TRADE = 0x390006, + CMSG_CAN_DUEL = 0x3E008E, + CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3E0134, + CMSG_CAST_SPELL = 0x390175, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x2C0002, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x2F0212, - CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x2F0213, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x2F01F3, - CMSG_CHANGE_REALM_TICKET = 0x340128, - CMSG_CHANGE_SUB_GROUP = 0x340078, - CMSG_CHARACTER_CHECK_UPGRADE = 0x3400F4, - CMSG_CHARACTER_RENAME_REQUEST = 0x3400EF, - CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x3400F2, - CMSG_CHARACTER_UPGRADE_START = 0x3400F3, - CMSG_CHAR_CUSTOMIZE = 0x3400B8, - CMSG_CHAR_DELETE = 0x3400CA, - CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3400BE, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x390212, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x390213, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3901F3, + CMSG_CHANGE_REALM_TICKET = 0x3E0129, + CMSG_CHANGE_SUB_GROUP = 0x3E0078, + CMSG_CHARACTER_CHECK_UPGRADE = 0x3E00F5, + CMSG_CHARACTER_RENAME_REQUEST = 0x3E00F0, + CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x3E00F3, + CMSG_CHARACTER_UPGRADE_START = 0x3E00F4, + CMSG_CHAR_CUSTOMIZE = 0x3E00B9, + CMSG_CHAR_DELETE = 0x3E00CB, + CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3E00BF, CMSG_CHAT_ADDON_MESSAGE = 0x2B002A, CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x2B002B, CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x2B0032, @@ -231,192 +230,195 @@ enum OpcodeClient : uint32 CMSG_CHAT_SEND_CAUTIONARY_CHANNEL_MESSAGE = 0x2B000B, CMSG_CHAT_SEND_CAUTIONARY_CHAT_MESSAGE = 0x2B0009, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x2B0006, - CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x340071, - CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x2F010F, - CMSG_CHOICE_RESPONSE = 0x2F017D, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x2F0288, - CMSG_CLAIM_WEEKLY_REWARD = 0x2F0265, - CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x2F02C2, - CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x2F00C4, - CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x2F02C4, - CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x2F02C1, - CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x2F02C0, - CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x2F02C5, - CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x2F00C3, + CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3E0071, + CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x39010F, + CMSG_CHOICE_RESPONSE = 0x39017D, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x390288, + CMSG_CLAIM_WEEKLY_REWARD = 0x390265, + CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3902C2, + CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3900C4, + CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3902C4, + CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3902C1, + CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3902C0, + CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x3902C5, + CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3900C3, CMSG_CLEAR_NEW_APPEARANCE = 0x290005, - CMSG_CLEAR_RAID_MARKER = 0x2F0052, - CMSG_CLEAR_TRADE_ITEM = 0x2F0008, - CMSG_CLIENT_PORT_GRAVEYARD = 0x3000C5, - CMSG_CLOSE_INTERACTION = 0x300025, - CMSG_CLOSE_QUEST_CHOICE = 0x2F017E, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x2F0290, - CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x2F02C6, - CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x34014B, - CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x340149, - CMSG_CLUB_FINDER_POST = 0x340146, - CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x34014D, - CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x340147, - CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x340148, - CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x34014C, - CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x34014E, - CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x34014A, - CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x340169, - CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x340125, - CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x34005D, - CMSG_COMMENTATOR_ENABLE = 0x34001C, - CMSG_COMMENTATOR_ENTER_INSTANCE = 0x340020, - CMSG_COMMENTATOR_EXIT_INSTANCE = 0x340021, - CMSG_COMMENTATOR_GET_MAP_INFO = 0x34001D, - CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x34001F, - CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x34001E, - CMSG_COMMENTATOR_SPECTATE = 0x340167, - CMSG_COMMENTATOR_START_WARGAME = 0x34001B, - CMSG_COMMERCE_TOKEN_GET_COUNT = 0x340113, - CMSG_COMMERCE_TOKEN_GET_LOG = 0x34011D, - CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x340114, - CMSG_COMPLAINT = 0x340098, - CMSG_COMPLETE_CINEMATIC = 0x3000E3, - CMSG_COMPLETE_MOVIE = 0x300075, - CMSG_CONFIRM_ARTIFACT_RESPEC = 0x2F0057, - CMSG_CONFIRM_PROFESSION_RESPEC = 0x2F00C7, - CMSG_CONFIRM_RESPEC_WIPE = 0x2F00C6, - CMSG_CONNECT_TO_FAILED = 0x340000, - CMSG_CONSUMABLE_TOKEN_BUY = 0x340118, - CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x340119, - CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x340117, - CMSG_CONSUMABLE_TOKEN_REDEEM = 0x34011B, - CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x34011C, - CMSG_CONTENT_TRACKING_START_TRACKING = 0x2F02D6, - CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x2F02D7, - CMSG_CONTRIBUTION_CONTRIBUTE = 0x3000FB, - CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x3000FC, - CMSG_CONVERSATION_CINEMATIC_READY = 0x3000E5, - CMSG_CONVERSATION_LINE_STARTED = 0x3000E4, - CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x2F02E6, - CMSG_CONVERT_RAID = 0x34007A, - CMSG_CONVERT_TIMERUNNING_CHARACTER = 0x34018C, - CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x30010F, - CMSG_CRAFTING_ORDER_CANCEL = 0x30011B, - CMSG_CRAFTING_ORDER_CLAIM = 0x300118, - CMSG_CRAFTING_ORDER_CREATE = 0x300114, - CMSG_CRAFTING_ORDER_FULFILL = 0x30011A, - CMSG_CRAFTING_ORDER_GET_NPC_REWARD_INFO = 0x300117, - CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x300116, - CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x300115, - CMSG_CRAFTING_ORDER_REJECT = 0x30011C, - CMSG_CRAFTING_ORDER_RELEASE = 0x300119, - CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x30011D, - CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x30011E, - CMSG_CREATE_CHARACTER = 0x340070, - CMSG_CREATE_SHIPMENT = 0x2F01DC, - CMSG_DB_QUERY_BULK = 0x340010, - CMSG_DECLINE_GUILD_INVITES = 0x3000B7, - CMSG_DECLINE_PETITION = 0x3000D2, - CMSG_DELETE_EQUIPMENT_SET = 0x3000A3, - CMSG_DELVE_TELEPORT_OUT = 0x30012B, - CMSG_DEL_FRIEND = 0x340100, - CMSG_DEL_IGNORE = 0x340104, - CMSG_DESTROY_ITEM = 0x2F016B, - CMSG_DF_BOOT_PLAYER_VOTE = 0x340044, - CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x340036, - CMSG_DF_GET_JOIN_STATUS = 0x340042, - CMSG_DF_GET_SYSTEM_INFO = 0x340041, - CMSG_DF_JOIN = 0x340037, - CMSG_DF_LEAVE = 0x340040, - CMSG_DF_PROPOSAL_RESPONSE = 0x340035, - CMSG_DF_READY_CHECK_RESPONSE = 0x340048, - CMSG_DF_SET_ROLES = 0x340043, - CMSG_DF_TELEPORT = 0x340045, - CMSG_DISCARDED_TIME_SYNC_ACKS = 0x32005E, - CMSG_DISMISS_CRITTER = 0x300091, - CMSG_DO_COUNTDOWN = 0x340145, - CMSG_DO_MASTER_LOOT_ROLL = 0x2F00CC, - CMSG_DO_READY_CHECK = 0x34005E, - CMSG_DUEL_RESPONSE = 0x30007A, - CMSG_EJECT_PASSENGER = 0x2F0104, - CMSG_EMOTE = 0x3000DF, - CMSG_ENABLE_NAGLE = 0x350007, - CMSG_ENABLE_TAXI_NODE = 0x30003C, - CMSG_ENGINE_SURVEY = 0x340112, - CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x350003, - CMSG_ENUM_CHARACTERS = 0x340014, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x34010C, - CMSG_FAR_SIGHT = 0x300080, - CMSG_GAME_EVENT_DEBUG_DISABLE = 0x2F005E, - CMSG_GAME_EVENT_DEBUG_ENABLE = 0x2F005D, - CMSG_GAME_OBJ_REPORT_USE = 0x300087, - CMSG_GAME_OBJ_USE = 0x300086, - CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x2F01D7, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x2F01BD, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x2F01AA, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x2F020E, - CMSG_GARRISON_COMPLETE_MISSION = 0x2F0200, - CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x2F01D8, - CMSG_GARRISON_GENERATE_RECRUITS = 0x2F01C0, - CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x2F01CF, - CMSG_GARRISON_GET_MAP_DATA = 0x2F01D6, - CMSG_GARRISON_GET_MISSION_REWARD = 0x2F0230, - CMSG_GARRISON_LEARN_TALENT = 0x2F01CB, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x2F0202, - CMSG_GARRISON_PURCHASE_BUILDING = 0x2F01A6, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x2F01C2, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x2F01F7, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x2F01BE, - CMSG_GARRISON_RENAME_FOLLOWER = 0x2F01BF, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x2F01A5, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x2F01DA, - CMSG_GARRISON_RESEARCH_TALENT = 0x2F01C3, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x2F01A7, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x2F01BB, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x2F01B3, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x2F01C1, - CMSG_GARRISON_SOCKET_TALENT = 0x2F029D, - CMSG_GARRISON_START_MISSION = 0x2F01FF, - CMSG_GARRISON_SWAP_BUILDINGS = 0x2F01AB, - CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x340013, - CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x3400E3, - CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x340161, - CMSG_GET_GARRISON_INFO = 0x2F01A0, - CMSG_GET_ITEM_PURCHASE_DATA = 0x3000CD, - CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x2F01DB, - CMSG_GET_MIRROR_IMAGE_DATA = 0x2F016F, - CMSG_GET_PVP_OPTIONS_ENABLED = 0x34001A, - CMSG_GET_RAF_ACCOUNT_INFO = 0x34014F, - CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x340192, - CMSG_GET_REMAINING_GAME_TIME = 0x34011A, - CMSG_GET_TROPHY_LIST = 0x2F01F0, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x34010E, - CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x34011F, - CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x340120, - CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3400BC, - CMSG_GM_TICKET_GET_CASE_STATUS = 0x3400BB, - CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3400BA, - CMSG_GOSSIP_REFRESH_OPTIONS = 0x30010E, - CMSG_GOSSIP_SELECT_OPTION = 0x300026, + CMSG_CLEAR_RAID_MARKER = 0x390052, + CMSG_CLEAR_TRADE_ITEM = 0x390008, + CMSG_CLIENT_PORT_GRAVEYARD = 0x3A00C5, + CMSG_CLOSE_INTERACTION = 0x3A0025, + CMSG_CLOSE_QUEST_CHOICE = 0x39017E, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x390290, + CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x3902C6, + CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x3E014C, + CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x3E014A, + CMSG_CLUB_FINDER_POST = 0x3E0147, + CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x3E014E, + CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3E0148, + CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3E0149, + CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x3E014D, + CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x3E014F, + CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x3E014B, + CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x3E016A, + CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x3E0126, + CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3E005D, + CMSG_COMMENTATOR_ENABLE = 0x3E001C, + CMSG_COMMENTATOR_ENTER_INSTANCE = 0x3E0020, + CMSG_COMMENTATOR_EXIT_INSTANCE = 0x3E0021, + CMSG_COMMENTATOR_GET_MAP_INFO = 0x3E001D, + CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x3E001F, + CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x3E001E, + CMSG_COMMENTATOR_SPECTATE = 0x3E0168, + CMSG_COMMENTATOR_START_WARGAME = 0x3E001B, + CMSG_COMMERCE_TOKEN_GET_COUNT = 0x3E0114, + CMSG_COMMERCE_TOKEN_GET_LOG = 0x3E011E, + CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x3E0115, + CMSG_COMPLAINT = 0x3E0098, + CMSG_COMPLETE_CINEMATIC = 0x3A00E3, + CMSG_COMPLETE_MOVIE = 0x3A0075, + CMSG_CONFIRM_ARTIFACT_RESPEC = 0x390057, + CMSG_CONFIRM_PROFESSION_RESPEC = 0x3900C7, + CMSG_CONFIRM_RESPEC_WIPE = 0x3900C6, + CMSG_CONNECT_TO_FAILED = 0x3E0000, + CMSG_CONSUMABLE_TOKEN_BUY = 0x3E0119, + CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x3E011A, + CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x3E0118, + CMSG_CONSUMABLE_TOKEN_REDEEM = 0x3E011C, + CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x3E011D, + CMSG_CONTENT_TRACKING_START_TRACKING = 0x3902D5, + CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x3902D6, + CMSG_CONTRIBUTION_CONTRIBUTE = 0x3A00FB, + CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x3A00FC, + CMSG_CONVERSATION_CINEMATIC_READY = 0x3A00E5, + CMSG_CONVERSATION_LINE_STARTED = 0x3A00E4, + CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x3902E5, + CMSG_CONVERT_RAID = 0x3E007A, + CMSG_CONVERT_TIMERUNNING_CHARACTER = 0x3E018D, + CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x3A010F, + CMSG_CRAFTING_ORDER_CANCEL = 0x3A011B, + CMSG_CRAFTING_ORDER_CLAIM = 0x3A0118, + CMSG_CRAFTING_ORDER_CREATE = 0x3A0114, + CMSG_CRAFTING_ORDER_FULFILL = 0x3A011A, + CMSG_CRAFTING_ORDER_GET_NPC_REWARD_INFO = 0x3A0117, + CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x3A0116, + CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x3A0115, + CMSG_CRAFTING_ORDER_REJECT = 0x3A011C, + CMSG_CRAFTING_ORDER_RELEASE = 0x3A0119, + CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x3A011D, + CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x3A011E, + CMSG_CREATE_CHARACTER = 0x3E0070, + CMSG_CREATE_SHIPMENT = 0x3901DC, + CMSG_DB_QUERY_BULK = 0x3E0010, + CMSG_DECLINE_GUILD_INVITES = 0x3A00B7, + CMSG_DECLINE_NEIGHBORHOOD_INVITES = 0x3A012F, + CMSG_DECLINE_PETITION = 0x3A00D2, + CMSG_DELETE_EQUIPMENT_SET = 0x3A00A3, + CMSG_DELVE_TELEPORT_OUT = 0x3A012B, + CMSG_DEL_FRIEND = 0x3E0101, + CMSG_DEL_IGNORE = 0x3E0105, + CMSG_DESTROY_ITEM = 0x39016B, + CMSG_DF_BOOT_PLAYER_VOTE = 0x3E0044, + CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3E0036, + CMSG_DF_GET_JOIN_STATUS = 0x3E0042, + CMSG_DF_GET_SYSTEM_INFO = 0x3E0041, + CMSG_DF_JOIN = 0x3E0037, + CMSG_DF_LEAVE = 0x3E0040, + CMSG_DF_PROPOSAL_RESPONSE = 0x3E0035, + CMSG_DF_READY_CHECK_RESPONSE = 0x3E0048, + CMSG_DF_SET_ROLES = 0x3E0043, + CMSG_DF_TELEPORT = 0x3E0045, + CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3C005E, + CMSG_DISMISS_CRITTER = 0x3A0091, + CMSG_DO_COUNTDOWN = 0x3E0146, + CMSG_DO_MASTER_LOOT_ROLL = 0x3900CC, + CMSG_DO_READY_CHECK = 0x3E005E, + CMSG_DUEL_RESPONSE = 0x3A007A, + CMSG_EJECT_PASSENGER = 0x390104, + CMSG_EMOTE = 0x3A00DF, + CMSG_ENABLE_NAGLE = 0x3F0009, + CMSG_ENABLE_TAXI_NODE = 0x3A003C, + CMSG_ENCOUNTER_JOURNAL_START_ARATHI_RPE = 0x3902FE, + CMSG_ENGINE_SURVEY = 0x3E0113, + CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x3F0005, + CMSG_ENUM_CHARACTERS = 0x3E0014, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x3E010D, + CMSG_FAR_SIGHT = 0x3A0080, + CMSG_GAME_EVENT_DEBUG_DISABLE = 0x39005E, + CMSG_GAME_EVENT_DEBUG_ENABLE = 0x39005D, + CMSG_GAME_OBJ_REPORT_USE = 0x3A0087, + CMSG_GAME_OBJ_USE = 0x3A0086, + CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3901D7, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x3901BD, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x3901AA, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x39020E, + CMSG_GARRISON_COMPLETE_MISSION = 0x390200, + CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3901D8, + CMSG_GARRISON_GENERATE_RECRUITS = 0x3901C0, + CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3901CF, + CMSG_GARRISON_GET_MAP_DATA = 0x3901D6, + CMSG_GARRISON_GET_MISSION_REWARD = 0x390230, + CMSG_GARRISON_LEARN_TALENT = 0x3901CB, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x390202, + CMSG_GARRISON_PURCHASE_BUILDING = 0x3901A6, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3901C2, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x3901F7, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x3901BE, + CMSG_GARRISON_RENAME_FOLLOWER = 0x3901BF, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x3901A5, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3901DA, + CMSG_GARRISON_RESEARCH_TALENT = 0x3901C3, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x3901A7, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x3901BB, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x3901B3, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3901C1, + CMSG_GARRISON_SOCKET_TALENT = 0x39029D, + CMSG_GARRISON_START_MISSION = 0x3901FF, + CMSG_GARRISON_SWAP_BUILDINGS = 0x3901AB, + CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x3E0013, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x3E00E4, + CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3E0162, + CMSG_GET_GARRISON_INFO = 0x3901A0, + CMSG_GET_ITEM_PURCHASE_DATA = 0x3A00CD, + CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3901DB, + CMSG_GET_MIRROR_IMAGE_DATA = 0x39016F, + CMSG_GET_PVP_OPTIONS_ENABLED = 0x3E001A, + CMSG_GET_RAF_ACCOUNT_INFO = 0x3E0150, + CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x3E0193, + CMSG_GET_REMAINING_GAME_TIME = 0x3E011B, + CMSG_GET_TROPHY_LIST = 0x3901F0, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x3E010F, + CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x3E0120, + CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x3E0121, + CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3E00BD, + CMSG_GM_TICKET_GET_CASE_STATUS = 0x3E00BC, + CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3E00BB, + CMSG_GOSSIP_REFRESH_OPTIONS = 0x3A010E, + CMSG_GOSSIP_SELECT_OPTION = 0x3A0026, CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x2D0020, CMSG_GUILD_ADD_RANK = 0x2D0005, CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x2D0002, - CMSG_GUILD_BANK_ACTIVATE = 0x300047, - CMSG_GUILD_BANK_BUY_TAB = 0x300055, - CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x300057, + CMSG_GUILD_BANK_ACTIVATE = 0x3A0047, + CMSG_GUILD_BANK_BUY_TAB = 0x3A0055, + CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x3A0057, CMSG_GUILD_BANK_LOG_QUERY = 0x2D0019, - CMSG_GUILD_BANK_QUERY_TAB = 0x300054, + CMSG_GUILD_BANK_QUERY_TAB = 0x3A0054, CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x2D001A, CMSG_GUILD_BANK_SET_TAB_TEXT = 0x2D001D, CMSG_GUILD_BANK_TEXT_QUERY = 0x2D001E, - CMSG_GUILD_BANK_UPDATE_TAB = 0x300056, - CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x300058, + CMSG_GUILD_BANK_UPDATE_TAB = 0x3A0056, + CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x3A0058, CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x2D0017, CMSG_GUILD_CHANGE_NAME_REQUEST = 0x2D0018, - CMSG_GUILD_DECLINE_INVITATION = 0x34002A, + CMSG_GUILD_DECLINE_INVITATION = 0x3E002A, CMSG_GUILD_DELETE = 0x2D0009, CMSG_GUILD_DELETE_RANK = 0x2D0006, CMSG_GUILD_DEMOTE_MEMBER = 0x2D0001, CMSG_GUILD_EVENT_LOG_QUERY = 0x2D001C, CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x2D0012, + CMSG_GUILD_GET_OTHERS_OWNED_HOUSES = 0x2D0026, CMSG_GUILD_GET_RANKS = 0x2D000E, CMSG_GUILD_GET_ROSTER = 0x2D0014, - CMSG_GUILD_INVITE_BY_NAME = 0x340034, + CMSG_GUILD_INVITE_BY_NAME = 0x3E0034, CMSG_GUILD_LEAVE = 0x2D0003, CMSG_GUILD_NEWS_UPDATE_STICKY = 0x2D000F, CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x2D0004, @@ -433,1802 +435,1894 @@ enum OpcodeClient : uint32 CMSG_GUILD_REQUEST_RENAME_STATUS = 0x2D0021, CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x2D0010, CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x2D0011, - CMSG_GUILD_SET_GUILD_MASTER = 0x3400F6, + CMSG_GUILD_SET_GUILD_MASTER = 0x3E00F7, CMSG_GUILD_SET_MEMBER_NOTE = 0x2D0013, CMSG_GUILD_SET_RANK_PERMISSIONS = 0x2D0008, CMSG_GUILD_SHIFT_RANK = 0x2D0007, CMSG_GUILD_UPDATE_INFO_TEXT = 0x2D0016, CMSG_GUILD_UPDATE_MOTD_TEXT = 0x2D0015, - CMSG_HEARTH_AND_RESURRECT = 0x30009F, - CMSG_HIDE_QUEST_CHOICE = 0x2F017F, - CMSG_HOTFIX_REQUEST = 0x340011, - CMSG_IGNORE_TRADE = 0x2F0003, - CMSG_INITIATE_ROLE_POLL = 0x340006, - CMSG_INITIATE_TRADE = 0x2F0000, - CMSG_INSPECT = 0x3000C7, - CMSG_INSTANCE_ABANDON_VOTE_RESPONSE = 0x340061, - CMSG_INSTANCE_LOCK_RESPONSE = 0x3000A4, - CMSG_ISLAND_QUEUE = 0x2F0261, - CMSG_ITEM_PURCHASE_REFUND = 0x3000CE, - CMSG_ITEM_TEXT_QUERY = 0x2F020F, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x2F008E, - CMSG_JOIN_RATED_BATTLEGROUND = 0x2F0025, - CMSG_KEEP_ALIVE = 0x3400AB, - CMSG_KEYBOUND_OVERRIDE = 0x2F00E2, - CMSG_LATENCY_REPORT = 0x35000D, - CMSG_LEARN_PVP_TALENTS = 0x3000FA, - CMSG_LEARN_TALENTS = 0x3000F8, - CMSG_LEAVE_GROUP = 0x340075, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x2F008F, - CMSG_LFG_LIST_APPLY_TO_GROUP = 0x34003B, - CMSG_LFG_LIST_CANCEL_APPLICATION = 0x34003C, - CMSG_LFG_LIST_DECLINE_APPLICANT = 0x34003D, - CMSG_LFG_LIST_GET_STATUS = 0x340039, - CMSG_LFG_LIST_INVITE_APPLICANT = 0x34003E, - CMSG_LFG_LIST_INVITE_RESPONSE = 0x34003F, - CMSG_LFG_LIST_JOIN = 0x2F0255, - CMSG_LFG_LIST_LEAVE = 0x340038, - CMSG_LFG_LIST_SEARCH = 0x34003A, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x2F0256, - CMSG_LIST_INVENTORY = 0x300033, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x3400E6, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x3400E5, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x3400E4, - CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x3400E7, - CMSG_LOADING_SCREEN_NOTIFY = 0x340024, - CMSG_LOAD_SELECTED_TROPHY = 0x2F01F1, - CMSG_LOBBY_MATCHMAKER_ABANDON_QUEUE = 0x340174, - CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x34016B, - CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x34017D, - CMSG_LOBBY_MATCHMAKER_ENTER_QUEUE = 0x340172, - CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x34016E, - CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x34016A, - CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x34016D, - CMSG_LOBBY_MATCHMAKER_QUEUE_PROPSAL_RESPONSE = 0x340173, - CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x34016C, - CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x34016F, - CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x340170, - CMSG_LOGOUT_CANCEL = 0x300070, - CMSG_LOGOUT_INSTANT = 0x300071, - CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x300122, - CMSG_LOGOUT_REQUEST = 0x30006F, - CMSG_LOG_DISCONNECT = 0x350005, - CMSG_LOG_STREAMING_ERROR = 0x350009, - CMSG_LOOT_ITEM = 0x2F00CA, - CMSG_LOOT_MONEY = 0x2F00C9, - CMSG_LOOT_RELEASE = 0x2F00CE, - CMSG_LOOT_ROLL = 0x2F00CF, - CMSG_LOOT_UNIT = 0x2F00C8, - CMSG_LOW_LEVEL_RAID1 = 0x3400CE, - CMSG_LOW_LEVEL_RAID2 = 0x3000AB, - CMSG_MAIL_CREATE_TEXT_ITEM = 0x3000D9, - CMSG_MAIL_DELETE = 0x2F00E4, - CMSG_MAIL_GET_LIST = 0x3000D4, - CMSG_MAIL_MARK_AS_READ = 0x3000D8, - CMSG_MAIL_RETURN_TO_SENDER = 0x340081, - CMSG_MAIL_TAKE_ITEM = 0x3000D6, - CMSG_MAIL_TAKE_MONEY = 0x3000D5, - CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x2F00E5, - CMSG_MASTER_LOOT_ITEM = 0x2F00CB, - CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x300052, - CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x30004F, - CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x30004D, - CMSG_MINIMAP_PING = 0x340077, - CMSG_MISSILE_TRAJECTORY_COLLISION = 0x2F0036, + CMSG_HEARTH_AND_RESURRECT = 0x3A009F, + CMSG_HIDE_QUEST_CHOICE = 0x39017F, + CMSG_HOTFIX_REQUEST = 0x3E0011, + CMSG_HOUSE_EXTERIOR_COMMIT_POSITION = 0x2E0001, + CMSG_HOUSE_INTERIOR_LEAVE_HOUSE = 0x2F0001, + CMSG_HOUSING_DECOR_CATALOG_CREATE_SEARCHER = 0x30000E, + CMSG_HOUSING_DECOR_CATALOG_DESTROY_ALL_ENTRY_COPIES = 0x30000A, + CMSG_HOUSING_DECOR_CATALOG_DESTROY_ENTRY = 0x300009, + CMSG_HOUSING_DECOR_COMMIT_DYES_FOR_SELECTED_DECOR = 0x300006, + CMSG_HOUSING_DECOR_MOVE_DECOR = 0x300002, + CMSG_HOUSING_DECOR_PLACE_NEW_DECOR = 0x300001, + CMSG_HOUSING_DECOR_REMOVE_PLACED_DECOR_ENTRY = 0x300003, + CMSG_HOUSING_DECOR_SELECT_DECOR = 0x300004, + CMSG_HOUSING_DECOR_SET_EDITOR_MODE_ACTIVE = 0x300000, + CMSG_HOUSING_DECOR_START_PLACING_NEW_DECOR = 0x300010, + CMSG_HOUSING_FIXTURE_REMOVE_FIXTURE_FROM_SELECTED_POINT = 0x310007, + CMSG_HOUSING_FIXTURE_SELECT_CORE_FIXTURE_OPTION = 0x310005, + CMSG_HOUSING_FIXTURE_SELECT_FIXTURE_OPTION = 0x310006, + CMSG_HOUSING_FIXTURE_SET_EDITOR_MODE_ACTIVE = 0x310000, + CMSG_HOUSING_KIOSK_REQUEST_HOUSING_RESET = 0x350008, + CMSG_HOUSING_REQUEST_CURRENT_HOUSE_INFO = 0x350006, + CMSG_HOUSING_ROOM_APPLY_THEME = 0x320005, + CMSG_HOUSING_ROOM_APPLY_WALLPAPER = 0x320006, + CMSG_HOUSING_ROOM_MOVE_DRAGGED_ROOM = 0x320004, + CMSG_HOUSING_ROOM_PLACE_ROOM = 0x320001, + CMSG_HOUSING_ROOM_REMOVE_ROOM = 0x320002, + CMSG_HOUSING_ROOM_ROTATE_ROOM = 0x320003, + CMSG_HOUSING_ROOM_SET_EDITOR_MODE_ACTIVE = 0x320000, + CMSG_HOUSING_ROOM_SET_ROOM_COMPONENT_CEILING_TYPE = 0x320008, + CMSG_HOUSING_ROOM_SET_ROOM_COMPONENT_DOOR_TYPE = 0x320007, + CMSG_HOUSING_SERVICES_ACCEPT_NEIGHBORHOOD_OWNERSHIP = 0x33001C, + CMSG_HOUSING_SERVICES_CREATE_GUILD_NEIGHBORHOOD = 0x330001, + CMSG_HOUSING_SERVICES_DECLINE_NEIGHBORHOOD_OWNERSHIP = 0x33001D, + CMSG_HOUSING_SERVICES_ENTER_HOUSE = 0x330017, + CMSG_HOUSING_SERVICES_GET_OTHERS_BNET_ACCOUNT_OWNED_HOUSES = 0x33000F, + CMSG_HOUSING_SERVICES_GET_OTHERS_PLAYER_OWNED_HOUSES = 0x33000E, + CMSG_HOUSING_SERVICES_GET_PLAYER_OWNED_HOUSES = 0x330011, + CMSG_HOUSING_SERVICES_HOUSE_FINDER_DECLINE_NEIGHBORHOOD_INVITATION = 0x330024, + CMSG_HOUSING_SERVICES_HOUSE_FINDER_REQUEST_NEIGHBORHOODS = 0x330020, + CMSG_HOUSING_SERVICES_HOUSE_FINDER_REQUEST_RESERVATION_AND_PORT = 0x330006, + CMSG_HOUSING_SERVICES_RELINQUISH_HOUSE = 0x330009, + CMSG_HOUSING_SERVICES_REQUEST_HOUSE_FINDER_NEIGHBORHOOD_DATA = 0x330021, + CMSG_HOUSING_SERVICES_REQUEST_PLAYER_CHARACTER_LIST = 0x33001F, + CMSG_HOUSING_SERVICES_SAVE_HOUSE_SETTINGS = 0x33000A, + CMSG_HOUSING_SERVICES_SEARCH_BNET_FRIEND_NEIGHBORHOODS = 0x330022, + CMSG_HOUSING_SERVICES_START_TUTORIAL = 0x330018, + CMSG_IGNORE_TRADE = 0x390003, + CMSG_INITIATE_ROLE_POLL = 0x3E0006, + CMSG_INITIATE_TRADE = 0x390000, + CMSG_INSPECT = 0x3A00C7, + CMSG_INSTANCE_ABANDON_VOTE_RESPONSE = 0x3E0061, + CMSG_INSTANCE_LOCK_RESPONSE = 0x3A00A4, + CMSG_INVITE_PLAYER_TO_NEIGHBORHOOD = 0x3E019B, + CMSG_ISLAND_QUEUE = 0x390261, + CMSG_ITEM_PURCHASE_REFUND = 0x3A00CE, + CMSG_ITEM_TEXT_QUERY = 0x39020F, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x39008E, + CMSG_JOIN_RATED_BATTLEGROUND = 0x390025, + CMSG_KEEP_ALIVE = 0x3E00AB, + CMSG_KEYBOUND_OVERRIDE = 0x3900E2, + CMSG_KIOSK_ENABLE_GOD_MODE = 0x390098, + CMSG_LATENCY_REPORT = 0x3F000F, + CMSG_LEARN_PVP_TALENTS = 0x3A00FA, + CMSG_LEARN_TALENTS = 0x3A00F8, + CMSG_LEAVE_GROUP = 0x3E0075, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x39008F, + CMSG_LFG_LIST_APPLY_TO_GROUP = 0x3E003B, + CMSG_LFG_LIST_CANCEL_APPLICATION = 0x3E003C, + CMSG_LFG_LIST_DECLINE_APPLICANT = 0x3E003D, + CMSG_LFG_LIST_GET_STATUS = 0x3E0039, + CMSG_LFG_LIST_INVITE_APPLICANT = 0x3E003E, + CMSG_LFG_LIST_INVITE_RESPONSE = 0x3E003F, + CMSG_LFG_LIST_JOIN = 0x390255, + CMSG_LFG_LIST_LEAVE = 0x3E0038, + CMSG_LFG_LIST_SEARCH = 0x3E003A, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x390256, + CMSG_LIST_INVENTORY = 0x3A0033, + CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x3E00E7, + CMSG_LIVE_REGION_CHARACTER_COPY = 0x3E00E6, + CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x3E00E5, + CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x3E00E8, + CMSG_LOADING_SCREEN_NOTIFY = 0x3E0024, + CMSG_LOAD_SELECTED_TROPHY = 0x3901F1, + CMSG_LOBBY_MATCHMAKER_ABANDON_QUEUE = 0x3E0175, + CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x3E016C, + CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x3E017E, + CMSG_LOBBY_MATCHMAKER_ENTER_QUEUE = 0x3E0173, + CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x3E016F, + CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x3E016B, + CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x3E016E, + CMSG_LOBBY_MATCHMAKER_QUEUE_PROPSAL_RESPONSE = 0x3E0174, + CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x3E016D, + CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x3E0170, + CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x3E0171, + CMSG_LOGOUT_CANCEL = 0x3A0070, + CMSG_LOGOUT_INSTANT = 0x3A0071, + CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x3A0122, + CMSG_LOGOUT_REQUEST = 0x3A006F, + CMSG_LOG_DISCONNECT = 0x3F0007, + CMSG_LOG_STREAMING_ERROR = 0x3F000B, + CMSG_LOOT_ITEM = 0x3900CA, + CMSG_LOOT_MONEY = 0x3900C9, + CMSG_LOOT_RELEASE = 0x3900CE, + CMSG_LOOT_ROLL = 0x3900CF, + CMSG_LOOT_UNIT = 0x3900C8, + CMSG_LOW_LEVEL_RAID1 = 0x3E00CF, + CMSG_LOW_LEVEL_RAID2 = 0x3A00AB, + CMSG_MAIL_CREATE_TEXT_ITEM = 0x3A00D9, + CMSG_MAIL_DELETE = 0x3900E4, + CMSG_MAIL_GET_LIST = 0x3A00D4, + CMSG_MAIL_MARK_AS_READ = 0x3A00D8, + CMSG_MAIL_RETURN_TO_SENDER = 0x3E0081, + CMSG_MAIL_TAKE_ITEM = 0x3A00D6, + CMSG_MAIL_TAKE_MONEY = 0x3A00D5, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3900E5, + CMSG_MASTER_LOOT_ITEM = 0x3900CB, + CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x3A0052, + CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x3A004F, + CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x3A004D, + CMSG_MESSAGE_WHISPER = 0x3F0011, + CMSG_MINIMAP_PING = 0x3E0077, + CMSG_MISSILE_TRAJECTORY_COLLISION = 0x390036, CMSG_MOUNT_CLEAR_FANFARE = 0x290003, - CMSG_MOUNT_SET_FAVORITE = 0x34005C, - CMSG_MOUNT_SPECIAL_ANIM = 0x2F0155, - CMSG_MOVE_ADD_IMPULSE_ACK = 0x32006D, - CMSG_MOVE_APPLY_INERTIA_ACK = 0x32006B, - CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x320031, - CMSG_MOVE_CHANGE_TRANSPORT = 0x32004C, - CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x320051, - CMSG_MOVE_COLLISION_DISABLE_ACK = 0x320056, - CMSG_MOVE_COLLISION_ENABLE_ACK = 0x320057, - CMSG_MOVE_DISMISS_VEHICLE = 0x320050, - CMSG_MOVE_DOUBLE_JUMP = 0x320007, - CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x32003A, - CMSG_MOVE_ENABLE_FULL_SPEED_TURNING_ACK = 0x320083, - CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x320040, - CMSG_MOVE_FALL_LAND = 0x320017, - CMSG_MOVE_FALL_RESET = 0x320035, - CMSG_MOVE_FEATHER_FALL_ACK = 0x320038, - CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x32004B, - CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x32004A, - CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x32004F, - CMSG_MOVE_FORCE_ROOT_ACK = 0x32002A, - CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x320028, - CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x320027, - CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x32003E, - CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x320029, - CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x32003F, - CMSG_MOVE_FORCE_UNROOT_ACK = 0x32002B, - CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x32003D, - CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x320052, - CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x320053, - CMSG_MOVE_GUILD_BANK_ITEM = 0x30004C, - CMSG_MOVE_HEARTBEAT = 0x32002C, - CMSG_MOVE_HOVER_ACK = 0x32002F, - CMSG_MOVE_INERTIA_DISABLE_ACK = 0x320054, - CMSG_MOVE_INERTIA_ENABLE_ACK = 0x320055, - CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x320063, - CMSG_MOVE_JUMP = 0x320006, - CMSG_MOVE_KNOCK_BACK_ACK = 0x32002E, - CMSG_MOVE_REMOVE_INERTIA_ACK = 0x32006C, - CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x320033, - CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x320032, - CMSG_MOVE_SET_ADV_FLY = 0x32006F, - CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x320077, - CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x320072, - CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x320078, - CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x320075, - CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x320076, - CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x32007F, - CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x320074, - CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x320073, - CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x32007D, - CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x320079, - CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x32007A, - CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x32007C, - CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x32007B, - CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x32006E, - CMSG_MOVE_SET_CAN_DRIVE_ACK = 0x320070, - CMSG_MOVE_SET_CAN_FLY_ACK = 0x320043, - CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x320041, - CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x320058, - CMSG_MOVE_SET_FACING = 0x320025, - CMSG_MOVE_SET_FACING_HEARTBEAT = 0x32007E, - CMSG_MOVE_SET_FLY = 0x320045, - CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x320042, - CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x32005F, - CMSG_MOVE_SET_PITCH = 0x320026, - CMSG_MOVE_SET_RUN_MODE = 0x32000E, - CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x320022, - CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x320030, - CMSG_MOVE_SET_WALK_MODE = 0x32000F, - CMSG_MOVE_SPLINE_DONE = 0x320034, - CMSG_MOVE_START_ASCEND = 0x320046, - CMSG_MOVE_START_BACKWARD = 0x320001, - CMSG_MOVE_START_DESCEND = 0x32004D, - CMSG_MOVE_START_DRIVE_FORWARD = 0x320071, - CMSG_MOVE_START_FORWARD = 0x320000, - CMSG_MOVE_START_PITCH_DOWN = 0x32000C, - CMSG_MOVE_START_PITCH_UP = 0x32000B, - CMSG_MOVE_START_STRAFE_LEFT = 0x320003, - CMSG_MOVE_START_STRAFE_RIGHT = 0x320004, - CMSG_MOVE_START_SWIM = 0x320018, - CMSG_MOVE_START_TURN_LEFT = 0x320008, - CMSG_MOVE_START_TURN_RIGHT = 0x320009, - CMSG_MOVE_STOP = 0x320002, - CMSG_MOVE_STOP_ASCEND = 0x320047, - CMSG_MOVE_STOP_PITCH = 0x32000D, - CMSG_MOVE_STOP_STRAFE = 0x320005, - CMSG_MOVE_STOP_SWIM = 0x320019, - CMSG_MOVE_STOP_TURN = 0x32000A, - CMSG_MOVE_TELEPORT_ACK = 0x320016, - CMSG_MOVE_TIME_SKIPPED = 0x320037, - CMSG_MOVE_UPDATE_FALL_SPEED = 0x320036, - CMSG_MOVE_WATER_WALK_ACK = 0x320039, + CMSG_MOUNT_SET_FAVORITE = 0x3E005C, + CMSG_MOUNT_SPECIAL_ANIM = 0x390155, + CMSG_MOVE_ADD_IMPULSE_ACK = 0x3C006D, + CMSG_MOVE_APPLY_INERTIA_ACK = 0x3C006B, + CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3C0031, + CMSG_MOVE_CHANGE_TRANSPORT = 0x3C004C, + CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3C0051, + CMSG_MOVE_COLLISION_DISABLE_ACK = 0x3C0056, + CMSG_MOVE_COLLISION_ENABLE_ACK = 0x3C0057, + CMSG_MOVE_DISMISS_VEHICLE = 0x3C0050, + CMSG_MOVE_DOUBLE_JUMP = 0x3C0007, + CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x3C003A, + CMSG_MOVE_ENABLE_FULL_SPEED_TURNING_ACK = 0x3C0083, + CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x3C0040, + CMSG_MOVE_FALL_LAND = 0x3C0017, + CMSG_MOVE_FALL_RESET = 0x3C0035, + CMSG_MOVE_FEATHER_FALL_ACK = 0x3C0038, + CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3C004B, + CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3C004A, + CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3C004F, + CMSG_MOVE_FORCE_ROOT_ACK = 0x3C002A, + CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3C0028, + CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x3C0027, + CMSG_MOVE_FORCE_SWIM_BACK_SPEED_CHANGE_ACK = 0x3C003E, + CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK = 0x3C0029, + CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x3C003F, + CMSG_MOVE_FORCE_UNROOT_ACK = 0x3C002B, + CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x3C003D, + CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3C0052, + CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3C0053, + CMSG_MOVE_GUILD_BANK_ITEM = 0x3A004C, + CMSG_MOVE_HEARTBEAT = 0x3C002C, + CMSG_MOVE_HOVER_ACK = 0x3C002F, + CMSG_MOVE_INERTIA_DISABLE_ACK = 0x3C0054, + CMSG_MOVE_INERTIA_ENABLE_ACK = 0x3C0055, + CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x3C0063, + CMSG_MOVE_JUMP = 0x3C0006, + CMSG_MOVE_KNOCK_BACK_ACK = 0x3C002E, + CMSG_MOVE_REMOVE_INERTIA_ACK = 0x3C006C, + CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x3C0033, + CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x3C0032, + CMSG_MOVE_SET_ADV_FLY = 0x3C006F, + CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x3C0077, + CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x3C0072, + CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x3C0078, + CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x3C0075, + CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x3C0076, + CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x3C007F, + CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x3C0074, + CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x3C0073, + CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x3C007D, + CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x3C0079, + CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x3C007A, + CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x3C007C, + CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x3C007B, + CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x3C006E, + CMSG_MOVE_SET_CAN_DRIVE_ACK = 0x3C0070, + CMSG_MOVE_SET_CAN_FLY_ACK = 0x3C0043, + CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x3C0041, + CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3C0058, + CMSG_MOVE_SET_FACING = 0x3C0025, + CMSG_MOVE_SET_FACING_HEARTBEAT = 0x3C007E, + CMSG_MOVE_SET_FLY = 0x3C0045, + CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x3C0042, + CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3C005F, + CMSG_MOVE_SET_PITCH = 0x3C0026, + CMSG_MOVE_SET_RUN_MODE = 0x3C000E, + CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x3C0022, + CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x3C0030, + CMSG_MOVE_SET_WALK_MODE = 0x3C000F, + CMSG_MOVE_SPLINE_DONE = 0x3C0034, + CMSG_MOVE_START_ASCEND = 0x3C0046, + CMSG_MOVE_START_BACKWARD = 0x3C0001, + CMSG_MOVE_START_DESCEND = 0x3C004D, + CMSG_MOVE_START_DRIVE_FORWARD = 0x3C0071, + CMSG_MOVE_START_FORWARD = 0x3C0000, + CMSG_MOVE_START_PITCH_DOWN = 0x3C000C, + CMSG_MOVE_START_PITCH_UP = 0x3C000B, + CMSG_MOVE_START_STRAFE_LEFT = 0x3C0003, + CMSG_MOVE_START_STRAFE_RIGHT = 0x3C0004, + CMSG_MOVE_START_SWIM = 0x3C0018, + CMSG_MOVE_START_TURN_LEFT = 0x3C0008, + CMSG_MOVE_START_TURN_RIGHT = 0x3C0009, + CMSG_MOVE_STOP = 0x3C0002, + CMSG_MOVE_STOP_ASCEND = 0x3C0047, + CMSG_MOVE_STOP_PITCH = 0x3C000D, + CMSG_MOVE_STOP_STRAFE = 0x3C0005, + CMSG_MOVE_STOP_SWIM = 0x3C0019, + CMSG_MOVE_STOP_TURN = 0x3C000A, + CMSG_MOVE_TELEPORT_ACK = 0x3C0016, + CMSG_MOVE_TIME_SKIPPED = 0x3C0037, + CMSG_MOVE_UPDATE_FALL_SPEED = 0x3C0036, + CMSG_MOVE_WATER_WALK_ACK = 0x3C0039, CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x2C0001, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x2F0084, - CMSG_NEXT_CINEMATIC_CAMERA = 0x3000E2, - CMSG_OBJECT_UPDATE_FAILED = 0x2F002C, - CMSG_OBJECT_UPDATE_RESCUED = 0x2F002D, - CMSG_OFFER_PETITION = 0x2F0287, - CMSG_OPENING_CINEMATIC = 0x3000E1, - CMSG_OPEN_ITEM = 0x2F0210, - CMSG_OPEN_MISSION_NPC = 0x2F01D1, - CMSG_OPEN_SHIPMENT_NPC = 0x2F01D9, - CMSG_OPEN_TRADESKILL_NPC = 0x2F01E4, - CMSG_OPT_OUT_OF_LOOT = 0x30008E, - CMSG_OVERRIDE_SCREEN_FLASH = 0x3000B8, - CMSG_PARTY_INVITE = 0x340030, - CMSG_PARTY_INVITE_RESPONSE = 0x340032, - CMSG_PARTY_UNINVITE = 0x340073, - CMSG_PERFORM_ITEM_INTERACTION = 0x2F00ED, - CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x2F02AF, - CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT = 0x2F02B2, - CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x290012, - CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x2F02B1, - CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x2F02B3, - CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x2F02B4, - CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x2F02B0, - CMSG_PETITION_BUY = 0x30005A, - CMSG_PETITION_RENAME_GUILD = 0x3400F7, - CMSG_PETITION_SHOW_LIST = 0x300059, - CMSG_PETITION_SHOW_SIGNATURES = 0x30005B, - CMSG_PET_ABANDON = 0x30001E, - CMSG_PET_ABANDON_BY_NUMBER = 0x30001F, - CMSG_PET_ACTION = 0x30001C, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x2F0093, - CMSG_PET_BATTLE_INPUT = 0x34006D, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x2F00E3, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x2F0092, - CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x34006E, - CMSG_PET_BATTLE_REQUEST_PVP = 0x2F008C, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x2F008D, - CMSG_PET_BATTLE_REQUEST_WILD = 0x2F008A, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x2F0094, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x2F008B, - CMSG_PET_CANCEL_AURA = 0x300020, - CMSG_PET_CAST_SPELL = 0x2F0174, - CMSG_PET_RENAME = 0x3400B0, - CMSG_PET_SET_ACTION = 0x30001B, - CMSG_PET_SPELL_AUTOCAST = 0x300021, - CMSG_PET_STOP_ATTACK = 0x30001D, - CMSG_PING = 0x350004, - CMSG_PLAYER_LOGIN = 0x340016, - CMSG_PUSH_QUEST_TO_PARTY = 0x300031, - CMSG_PVP_LOG_DATA = 0x2F0028, - CMSG_QUERY_BATTLE_PET_NAME = 0x2F0148, - CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x34008C, - CMSG_QUERY_CORPSE_TRANSPORT = 0x34008D, - CMSG_QUERY_COUNTDOWN_TIMER = 0x2F0055, - CMSG_QUERY_CREATURE = 0x2F0142, - CMSG_QUERY_GAME_OBJECT = 0x2F0143, - CMSG_QUERY_GARRISON_PET_NAME = 0x2F0149, - CMSG_QUERY_GUILD_INFO = 0x3400B6, - CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x300098, - CMSG_QUERY_NEXT_MAIL_TIME = 0x3000D7, - CMSG_QUERY_NPC_TEXT = 0x2F0144, - CMSG_QUERY_PAGE_TEXT = 0x2F0146, - CMSG_QUERY_PETITION = 0x2F014A, - CMSG_QUERY_PET_NAME = 0x2F0147, - CMSG_QUERY_PLAYER_NAMES = 0x35000E, - CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x35000C, - CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x35000B, - CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x2F0021, - CMSG_QUERY_QUEST_INFO = 0x2F0145, - CMSG_QUERY_QUEST_ITEM_USABILITY = 0x2F0022, - CMSG_QUERY_REALM_NAME = 0x3400B5, - CMSG_QUERY_SCENARIO_POI = 0x340082, - CMSG_QUERY_SELECTED_WOW_LABS_AREA = 0x2F02EB, - CMSG_QUERY_TIME = 0x30006E, - CMSG_QUERY_TREASURE_PICKER = 0x2F0233, - CMSG_QUERY_WOW_LABS_AREA_INFO = 0x2F02EC, - CMSG_QUEST_CONFIRM_ACCEPT = 0x300030, - CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x30002A, - CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x30002C, - CMSG_QUEST_GIVER_CLOSE_QUEST = 0x3000E8, - CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x30002B, - CMSG_QUEST_GIVER_HELLO = 0x300028, - CMSG_QUEST_GIVER_QUERY_QUEST = 0x300029, - CMSG_QUEST_GIVER_REQUEST_REWARD = 0x30002D, - CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x30002F, - CMSG_QUEST_GIVER_STATUS_QUERY = 0x30002E, - CMSG_QUEST_LOG_REMOVE_QUEST = 0x3000CC, - CMSG_QUEST_POI_QUERY = 0x3400DD, - CMSG_QUEST_PUSH_RESULT = 0x300032, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x2F0279, - CMSG_QUEST_SESSION_REQUEST_START = 0x2F0278, - CMSG_QUEST_SESSION_REQUEST_STOP = 0x34015A, - CMSG_QUEUED_MESSAGES_END = 0x350008, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x340131, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x340130, - CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x34015F, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x34012F, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x34012E, - CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x30009C, - CMSG_RAF_CLAIM_NEXT_REWARD = 0x340150, - CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x340152, - CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x340151, - CMSG_RANDOM_ROLL = 0x340080, - CMSG_READY_CHECK_RESPONSE = 0x34005F, - CMSG_READ_ITEM = 0x2F0211, - CMSG_RECENT_ALLY_REQUEST_DATA = 0x340197, - CMSG_RECENT_ALLY_SET_NOTE = 0x340198, - CMSG_RECLAIM_CORPSE = 0x300073, - CMSG_REMOVE_NEW_ITEM = 0x2F0237, - CMSG_REMOVE_RAF_RECRUIT = 0x340153, - CMSG_REORDER_CHARACTERS = 0x340015, - CMSG_REPAIR_ITEM = 0x300084, - CMSG_REPLACE_TROPHY = 0x2F01F2, - CMSG_REPOP_REQUEST = 0x3000C4, - CMSG_REPORT_PVP_PLAYER_AFK = 0x30008C, - CMSG_REPORT_SERVER_LAG = 0x2F0271, - CMSG_REPORT_STUCK_IN_COMBAT = 0x2F0272, - CMSG_REQUEST_ACCOUNT_DATA = 0x3400C2, - CMSG_REQUEST_AREA_POI_UPDATE = 0x2F0235, - CMSG_REQUEST_BATTLEFIELD_STATUS = 0x340008, - CMSG_REQUEST_CEMETERY_LIST = 0x2F0023, - CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3400B7, - CMSG_REQUEST_COVENANT_CALLINGS = 0x2F0263, - CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x3000C8, - CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS = 0x290019, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x2F029C, - CMSG_REQUEST_GUILD_PARTY_STATE = 0x2F0054, - CMSG_REQUEST_GUILD_REWARDS_LIST = 0x2F0053, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x2F0273, - CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x2F0180, - CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x2F00B8, - CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x2F00B9, - CMSG_REQUEST_PARTY_ELIGIBILITY_FOR_DELVE_TIERS = 0x2F02EA, - CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x340023, - CMSG_REQUEST_PARTY_MEMBER_STATS = 0x34007F, - CMSG_REQUEST_PET_INFO = 0x300022, - CMSG_REQUEST_PLAYED_TIME = 0x2F014D, - CMSG_REQUEST_PVP_REWARDS = 0x2F0041, - CMSG_REQUEST_RAID_INFO = 0x3400F8, - CMSG_REQUEST_RATED_PVP_INFO = 0x34000F, - CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x340195, - CMSG_REQUEST_SCHEDULED_AREA_POI_UPDATE = 0x2F0236, - CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x2F0042, - CMSG_REQUEST_STABLED_PETS = 0x300023, - CMSG_REQUEST_STORE_FRONT_INFO_UPDATE = 0x29001E, - CMSG_REQUEST_SURVEY = 0x2F02FD, - CMSG_REQUEST_VEHICLE_EXIT = 0x2F00FF, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x2F0101, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x2F0100, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x2F0102, - CMSG_REQUEST_WEEKLY_REWARDS = 0x2F0266, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x2F0234, - CMSG_RESET_CHALLENGE_MODE = 0x2F00B6, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x2F00B7, - CMSG_RESET_INSTANCES = 0x340094, - CMSG_RESURRECT_RESPONSE = 0x3400AF, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x2F01F4, - CMSG_RIDE_VEHICLE_INTERACT = 0x2F0103, - CMSG_RPE_RESET_CHARACTER = 0x340180, - CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x34017A, - CMSG_SAVE_CUF_PROFILES = 0x2F0037, - CMSG_SAVE_EQUIPMENT_SET = 0x3000A2, - CMSG_SAVE_GUILD_EMBLEM = 0x2F0185, - CMSG_SAVE_PERSONAL_EMBLEM = 0x2F0186, - CMSG_SCENE_PLAYBACK_CANCELED = 0x2F00DF, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x2F00DE, - CMSG_SCENE_TRIGGER_EVENT = 0x2F00E0, - CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x2F02D9, - CMSG_SELECT_WOW_LABS_AREA = 0x2F02ED, - CMSG_SELF_RES = 0x3000CF, - CMSG_SELL_ALL_JUNK_ITEMS = 0x300035, - CMSG_SELL_ITEM = 0x300034, - CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x340127, - CMSG_SEND_CONTACT_LIST = 0x3400FE, - CMSG_SEND_MAIL = 0x340026, - CMSG_SEND_PING_UNIT = 0x2F02DB, - CMSG_SEND_PING_WORLD_POINT = 0x2F02DC, - CMSG_SEND_TEXT_EMOTE = 0x300019, - CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3400C9, - CMSG_SETUP_WARBAND_GROUPS = 0x34018E, - CMSG_SET_ACTION_BAR_TOGGLES = 0x3000D0, - CMSG_SET_ACTION_BUTTON = 0x340062, - CMSG_SET_ACTIVE_MOVER = 0x320059, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x2F0193, - CMSG_SET_ALLOW_RECENT_ALLIES_SEE_LOCATION = 0x2F02FE, - CMSG_SET_ASSISTANT_LEADER = 0x34007B, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x2F0214, - CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x2F0215, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x2F0216, - CMSG_SET_CONTACT_NOTES = 0x340101, - CMSG_SET_CURRENCY_FLAGS = 0x2F0015, - CMSG_SET_DIFFICULTY_ID = 0x2F00E1, - CMSG_SET_DUNGEON_DIFFICULTY = 0x3400AE, - CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x2F013C, - CMSG_SET_EVERYONE_IS_ASSISTANT = 0x340046, - CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x340132, - CMSG_SET_FACTION_AT_WAR = 0x300076, - CMSG_SET_FACTION_INACTIVE = 0x300078, - CMSG_SET_FACTION_NOT_AT_WAR = 0x300077, - CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x2F0065, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x2F0218, - CMSG_SET_LOOT_METHOD = 0x340074, - CMSG_SET_LOOT_SPECIALIZATION = 0x3000DD, - CMSG_SET_PARTY_ASSIGNMENT = 0x34007D, - CMSG_SET_PARTY_LEADER = 0x340076, - CMSG_SET_PET_FAVORITE = 0x2F0012, - CMSG_SET_PET_SLOT = 0x2F0011, - CMSG_SET_PET_SPECIALIZATION = 0x2F0013, - CMSG_SET_PLAYER_DECLINED_NAMES = 0x3400B4, - CMSG_SET_PREFERRED_CEMETERY = 0x2F0024, - CMSG_SET_PVP = 0x2F018A, - CMSG_SET_RAID_DIFFICULTY = 0x34010A, - CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x340047, - CMSG_SET_ROLE = 0x340005, - CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3400B2, - CMSG_SET_SELECTION = 0x3000C6, - CMSG_SET_SHEATHED = 0x30001A, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x2F0217, - CMSG_SET_TAXI_BENCHMARK_MODE = 0x30008B, - CMSG_SET_TITLE = 0x2F0153, - CMSG_SET_TRADE_CURRENCY = 0x2F000A, - CMSG_SET_TRADE_GOLD = 0x2F0009, - CMSG_SET_TRADE_ITEM = 0x2F0007, - CMSG_SET_USING_PARTY_GARRISON = 0x2F01D3, - CMSG_SET_WAR_MODE = 0x2F018B, - CMSG_SET_WATCHED_FACTION = 0x300079, - CMSG_SHOW_TRADE_SKILL = 0x3400F0, - CMSG_SIGN_PETITION = 0x3000D1, - CMSG_SILENCE_PARTY_TALKER = 0x34007E, - CMSG_SOCIAL_CONTRACT_REQUEST = 0x340175, - CMSG_SOCKET_GEMS = 0x300083, - CMSG_SORT_ACCOUNT_BANK_BAGS = 0x2F02DF, - CMSG_SORT_BAGS = 0x2F0219, - CMSG_SORT_BANK_BAGS = 0x2F021A, - CMSG_SPAWN_TRACKING_UPDATE = 0x2F0168, - CMSG_SPECTATE_CHANGE = 0x2F02D2, - CMSG_SPELL_CLICK = 0x300027, - CMSG_SPELL_EMPOWER_RELEASE = 0x2F013A, - CMSG_SPELL_EMPOWER_RESTART = 0x2F013B, - CMSG_SPIRIT_HEALER_ACTIVATE = 0x300042, - CMSG_SPLIT_GUILD_BANK_ITEM = 0x300053, - CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x300050, - CMSG_SPLIT_ITEM = 0x310008, - CMSG_SPLIT_ITEM_TO_GUILD_BANK = 0x30004E, - CMSG_STAND_STATE_CHANGE = 0x2F0035, - CMSG_START_CHALLENGE_MODE = 0x3000E9, - CMSG_START_INSTANCE_ABANDON_VOTE = 0x340060, - CMSG_START_SPECTATOR_WAR_GAME = 0x34000B, - CMSG_START_WAR_GAME = 0x34000A, - CMSG_STORE_GUILD_BANK_ITEM = 0x300049, - CMSG_SUBMIT_USER_FEEDBACK = 0x3400C1, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x2F0291, - CMSG_SUMMON_RESPONSE = 0x340096, - CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x340072, - CMSG_SURRENDER_ARENA = 0x2F0020, - CMSG_SUSPEND_COMMS_ACK = 0x350000, - CMSG_SUSPEND_TOKEN_RESPONSE = 0x350006, - CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x30004B, - CMSG_SWAP_INV_ITEM = 0x310007, - CMSG_SWAP_ITEM = 0x310006, - CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x30004A, - CMSG_SWAP_SUB_GROUPS = 0x340079, - CMSG_TABARD_VENDOR_ACTIVATE = 0x2F0187, - CMSG_TALK_TO_GOSSIP = 0x300024, - CMSG_TAXI_NODE_STATUS_QUERY = 0x30003B, - CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x30003D, - CMSG_TAXI_REQUEST_EARLY_LANDING = 0x30003F, - CMSG_TIME_ADJUSTMENT_RESPONSE = 0x32005D, - CMSG_TIME_SYNC_RESPONSE = 0x32005A, - CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x32005C, - CMSG_TIME_SYNC_RESPONSE_FAILED = 0x32005B, - CMSG_TOGGLE_DIFFICULTY = 0x340083, - CMSG_TOGGLE_PVP = 0x2F0189, - CMSG_TOTEM_DESTROYED = 0x300090, + CMSG_NEIGHBORHOOD_ADD_MANAGER = 0x380002, + CMSG_NEIGHBORHOOD_CANCEL_RESIDENT_INVITATION = 0x380005, + CMSG_NEIGHBORHOOD_CHARTER_CONFIRMATION_RESPONSE = 0x370004, + CMSG_NEIGHBORHOOD_CHARTER_CREATE_NEIGHBORHOOD_CHARTER = 0x370001, + CMSG_NEIGHBORHOOD_CHARTER_EDIT_NEIGHBORHOOD_CHARTER = 0x370003, + CMSG_NEIGHBORHOOD_CHARTER_OPEN_CHARTER_CONFIRMATION = 0x370000, + CMSG_NEIGHBORHOOD_CHARTER_REQUEST_SIGNATURE = 0x370007, + CMSG_NEIGHBORHOOD_CHARTER_SIGN = 0x370006, + CMSG_NEIGHBORHOOD_DECLINE_NEIGHBORHOOD_INVITATION = 0x380006, + CMSG_NEIGHBORHOOD_EVICT_PLAYER = 0x38000F, + CMSG_NEIGHBORHOOD_GET_HOUSING_INVITATION = 0x380007, + CMSG_NEIGHBORHOOD_GET_INVITES = 0x380008, + CMSG_NEIGHBORHOOD_INTERACT_WITH_CORNERSTONE = 0x38000B, + CMSG_NEIGHBORHOOD_INVITE_RESIDENT = 0x380004, + CMSG_NEIGHBORHOOD_MOVE_HOUSE = 0x38000A, + CMSG_NEIGHBORHOOD_OFFER_NEIGHBORHOOD_OWNERSHIP = 0x38000D, + CMSG_NEIGHBORHOOD_PURCHASE_PLOT = 0x380009, + CMSG_NEIGHBORHOOD_REMOVE_MANAGER = 0x380003, + CMSG_NEIGHBORHOOD_REQUEST_NEIGHBORHOOD_ROSTER = 0x38000E, + CMSG_NEIGHBORHOOD_SET_NAME = 0x380000, + CMSG_NEIGHBORHOOD_SET_PUBLIC = 0x380001, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x390084, + CMSG_NEXT_CINEMATIC_CAMERA = 0x3A00E2, + CMSG_OBJECT_UPDATE_FAILED = 0x39002C, + CMSG_OBJECT_UPDATE_RESCUED = 0x39002D, + CMSG_OFFER_PETITION = 0x390287, + CMSG_OPENING_CINEMATIC = 0x3A00E1, + CMSG_OPEN_ITEM = 0x390210, + CMSG_OPEN_MISSION_NPC = 0x3901D1, + CMSG_OPEN_SHIPMENT_NPC = 0x3901D9, + CMSG_OPEN_TRADESKILL_NPC = 0x3901E4, + CMSG_OPT_OUT_OF_LOOT = 0x3A008E, + CMSG_OVERRIDE_SCREEN_FLASH = 0x3A00B8, + CMSG_PARTY_INVITE = 0x3E0030, + CMSG_PARTY_INVITE_RESPONSE = 0x3E0032, + CMSG_PARTY_UNINVITE = 0x3E0073, + CMSG_PERFORM_ITEM_INTERACTION = 0x3900ED, + CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x3902AF, + CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT = 0x3902B2, + CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x290016, + CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3902B1, + CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3902B3, + CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3902B4, + CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3902B0, + CMSG_PETITION_BUY = 0x3A005A, + CMSG_PETITION_RENAME_GUILD = 0x3E00F8, + CMSG_PETITION_SHOW_LIST = 0x3A0059, + CMSG_PETITION_SHOW_SIGNATURES = 0x3A005B, + CMSG_PET_ABANDON = 0x3A001E, + CMSG_PET_ABANDON_BY_NUMBER = 0x3A001F, + CMSG_PET_ACTION = 0x3A001C, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x390093, + CMSG_PET_BATTLE_INPUT = 0x3E006D, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3900E3, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x390092, + CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3E006E, + CMSG_PET_BATTLE_REQUEST_PVP = 0x39008C, + CMSG_PET_BATTLE_REQUEST_UPDATE = 0x39008D, + CMSG_PET_BATTLE_REQUEST_WILD = 0x39008A, + CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x390094, + CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x39008B, + CMSG_PET_CANCEL_AURA = 0x3A0020, + CMSG_PET_CAST_SPELL = 0x390174, + CMSG_PET_RENAME = 0x3E00B0, + CMSG_PET_SET_ACTION = 0x3A001B, + CMSG_PET_SPELL_AUTOCAST = 0x3A0021, + CMSG_PET_STOP_ATTACK = 0x3A001D, + CMSG_PING = 0x3F0006, + CMSG_PLAYER_LOGIN = 0x3E0016, + CMSG_PUSH_QUEST_TO_PARTY = 0x3A0031, + CMSG_PVP_LOG_DATA = 0x390028, + CMSG_QUERY_BATTLE_PET_NAME = 0x390148, + CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3E008C, + CMSG_QUERY_CORPSE_TRANSPORT = 0x3E008D, + CMSG_QUERY_COUNTDOWN_TIMER = 0x390055, + CMSG_QUERY_CREATURE = 0x390142, + CMSG_QUERY_GAME_OBJECT = 0x390143, + CMSG_QUERY_GARRISON_PET_NAME = 0x390149, + CMSG_QUERY_GUILD_INFO = 0x3E00B6, + CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3A0098, + CMSG_QUERY_NEIGHBORHOOD_INFO = 0x3E00B7, + CMSG_QUERY_NEXT_MAIL_TIME = 0x3A00D7, + CMSG_QUERY_NPC_TEXT = 0x390144, + CMSG_QUERY_PAGE_TEXT = 0x390146, + CMSG_QUERY_PETITION = 0x39014A, + CMSG_QUERY_PET_NAME = 0x390147, + CMSG_QUERY_PLAYER_NAMES = 0x3F0010, + CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3F000E, + CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x3F000D, + CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x390021, + CMSG_QUERY_QUEST_INFO = 0x390145, + CMSG_QUERY_QUEST_ITEM_USABILITY = 0x390022, + CMSG_QUERY_REALM_NAME = 0x3E00B5, + CMSG_QUERY_SCENARIO_POI = 0x3E0082, + CMSG_QUERY_SELECTED_WOW_LABS_AREA = 0x3902EA, + CMSG_QUERY_TIME = 0x3A006E, + CMSG_QUERY_TREASURE_PICKER = 0x390233, + CMSG_QUERY_WOW_LABS_AREA_INFO = 0x3902EB, + CMSG_QUEST_CONFIRM_ACCEPT = 0x3A0030, + CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x3A002A, + CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x3A002C, + CMSG_QUEST_GIVER_CLOSE_QUEST = 0x3A00E8, + CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x3A002B, + CMSG_QUEST_GIVER_HELLO = 0x3A0028, + CMSG_QUEST_GIVER_QUERY_QUEST = 0x3A0029, + CMSG_QUEST_GIVER_REQUEST_REWARD = 0x3A002D, + CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x3A002F, + CMSG_QUEST_GIVER_STATUS_QUERY = 0x3A002E, + CMSG_QUEST_LOG_REMOVE_QUEST = 0x3A00CC, + CMSG_QUEST_POI_QUERY = 0x3E00DE, + CMSG_QUEST_PUSH_RESULT = 0x3A0032, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x390279, + CMSG_QUEST_SESSION_REQUEST_START = 0x390278, + CMSG_QUEST_SESSION_REQUEST_STOP = 0x3E015B, + CMSG_QUEUED_MESSAGES_END = 0x3F000A, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3E0132, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3E0131, + CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3E0160, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3E0130, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3E012F, + CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3A009C, + CMSG_RAF_CLAIM_NEXT_REWARD = 0x3E0151, + CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3E0153, + CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3E0152, + CMSG_RANDOM_ROLL = 0x3E0080, + CMSG_READY_CHECK_RESPONSE = 0x3E005F, + CMSG_READ_ITEM = 0x390211, + CMSG_RECENT_ALLY_REQUEST_DATA = 0x3E0198, + CMSG_RECENT_ALLY_SET_NOTE = 0x3E0199, + CMSG_RECLAIM_CORPSE = 0x3A0073, + CMSG_REMOVE_NEW_ITEM = 0x390237, + CMSG_REMOVE_RAF_RECRUIT = 0x3E0154, + CMSG_REORDER_CHARACTERS = 0x3E0015, + CMSG_REPAIR_ITEM = 0x3A0084, + CMSG_REPLACE_TROPHY = 0x3901F2, + CMSG_REPOP_REQUEST = 0x3A00C4, + CMSG_REPORT_PVP_PLAYER_AFK = 0x3A008C, + CMSG_REPORT_SERVER_LAG = 0x390271, + CMSG_REPORT_STUCK_IN_COMBAT = 0x390272, + CMSG_REQUEST_ACCOUNT_DATA = 0x3E00C3, + CMSG_REQUEST_AREA_POI_UPDATE = 0x390235, + CMSG_REQUEST_BATTLEFIELD_STATUS = 0x3E0008, + CMSG_REQUEST_CEMETERY_LIST = 0x390023, + CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3E00B8, + CMSG_REQUEST_COVENANT_CALLINGS = 0x390263, + CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x3A00C8, + CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS = 0x29001D, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x39029C, + CMSG_REQUEST_GUILD_PARTY_STATE = 0x390054, + CMSG_REQUEST_GUILD_REWARDS_LIST = 0x390053, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x390273, + CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x390180, + CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3900B8, + CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3900B9, + CMSG_REQUEST_PARTY_ELIGIBILITY_FOR_DELVE_TIERS = 0x3902E9, + CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x3E0023, + CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3E007F, + CMSG_REQUEST_PET_INFO = 0x3A0022, + CMSG_REQUEST_PLAYED_TIME = 0x39014D, + CMSG_REQUEST_PVP_REWARDS = 0x390041, + CMSG_REQUEST_RAID_INFO = 0x3E00F9, + CMSG_REQUEST_RATED_PVP_INFO = 0x3E000F, + CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x3E0196, + CMSG_REQUEST_SCHEDULED_AREA_POI_UPDATE = 0x390236, + CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x390042, + CMSG_REQUEST_STABLED_PETS = 0x3A0023, + CMSG_REQUEST_STORE_FRONT_INFO_UPDATE = 0x290022, + CMSG_REQUEST_SURVEY = 0x3902FD, + CMSG_REQUEST_VEHICLE_EXIT = 0x3900FF, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x390101, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x390100, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x390102, + CMSG_REQUEST_WEEKLY_REWARDS = 0x390266, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x390234, + CMSG_RESET_CHALLENGE_MODE = 0x3900B6, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3900B7, + CMSG_RESET_INSTANCES = 0x3E0094, + CMSG_RESURRECT_RESPONSE = 0x3E00AF, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x3901F4, + CMSG_RIDE_VEHICLE_INTERACT = 0x390103, + CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3E017B, + CMSG_SAVE_CUF_PROFILES = 0x390037, + CMSG_SAVE_EQUIPMENT_SET = 0x3A00A2, + CMSG_SAVE_GUILD_EMBLEM = 0x390185, + CMSG_SAVE_PERSONAL_EMBLEM = 0x390186, + CMSG_SCENE_PLAYBACK_CANCELED = 0x3900DF, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x3900DE, + CMSG_SCENE_TRIGGER_EVENT = 0x3900E0, + CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x3902D8, + CMSG_SELECT_WOW_LABS_AREA = 0x3902EC, + CMSG_SELF_RES = 0x3A00CF, + CMSG_SELL_ALL_JUNK_ITEMS = 0x3A0035, + CMSG_SELL_ITEM = 0x3A0034, + CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x3E0128, + CMSG_SEND_CONTACT_LIST = 0x3E00FF, + CMSG_SEND_MAIL = 0x3E0026, + CMSG_SEND_PING_UNIT = 0x3902DA, + CMSG_SEND_PING_WORLD_POINT = 0x3902DB, + CMSG_SEND_TEXT_EMOTE = 0x3A0019, + CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3E00CA, + CMSG_SETUP_WARBAND_GROUPS = 0x3E018F, + CMSG_SET_ACTION_BAR_TOGGLES = 0x3A00D0, + CMSG_SET_ACTION_BUTTON = 0x3E0062, + CMSG_SET_ACTIVE_MOVER = 0x3C0059, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x390193, + CMSG_SET_ALLOW_RECENT_ALLIES_SEE_LOCATION = 0x3902FF, + CMSG_SET_ASSISTANT_LEADER = 0x3E007B, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x390214, + CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x390215, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x390216, + CMSG_SET_CONTACT_NOTES = 0x3E0102, + CMSG_SET_CURRENCY_FLAGS = 0x390015, + CMSG_SET_DIFFICULTY_ID = 0x3900E1, + CMSG_SET_DUNGEON_DIFFICULTY = 0x3E00AE, + CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x39013C, + CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3E0046, + CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3E0133, + CMSG_SET_FACTION_AT_WAR = 0x3A0076, + CMSG_SET_FACTION_INACTIVE = 0x3A0078, + CMSG_SET_FACTION_NOT_AT_WAR = 0x3A0077, + CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x390065, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x390218, + CMSG_SET_LOOT_METHOD = 0x3E0074, + CMSG_SET_LOOT_SPECIALIZATION = 0x3A00DD, + CMSG_SET_PARTY_ASSIGNMENT = 0x3E007D, + CMSG_SET_PARTY_LEADER = 0x3E0076, + CMSG_SET_PET_FAVORITE = 0x390012, + CMSG_SET_PET_SLOT = 0x390011, + CMSG_SET_PET_SPECIALIZATION = 0x390013, + CMSG_SET_PLAYER_DECLINED_NAMES = 0x3E00B4, + CMSG_SET_PREFERRED_CEMETERY = 0x390024, + CMSG_SET_PVP = 0x39018A, + CMSG_SET_RAID_DIFFICULTY = 0x3E010B, + CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x3E0047, + CMSG_SET_ROLE = 0x3E0005, + CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3E00B2, + CMSG_SET_SELECTION = 0x3A00C6, + CMSG_SET_SHEATHED = 0x3A001A, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x390217, + CMSG_SET_TAXI_BENCHMARK_MODE = 0x3A008B, + CMSG_SET_TITLE = 0x390153, + CMSG_SET_TRADE_CURRENCY = 0x39000A, + CMSG_SET_TRADE_GOLD = 0x390009, + CMSG_SET_TRADE_ITEM = 0x390007, + CMSG_SET_USING_PARTY_GARRISON = 0x3901D3, + CMSG_SET_WAR_MODE = 0x39018B, + CMSG_SET_WATCHED_FACTION = 0x3A0079, + CMSG_SHOW_TRADE_SKILL = 0x3E00F1, + CMSG_SIGN_PETITION = 0x3A00D1, + CMSG_SILENCE_PARTY_TALKER = 0x3E007E, + CMSG_SOCIAL_CONTRACT_REQUEST = 0x3E0176, + CMSG_SOCKET_GEMS = 0x3A0083, + CMSG_SORT_ACCOUNT_BANK_BAGS = 0x3902DE, + CMSG_SORT_BAGS = 0x390219, + CMSG_SORT_BANK_BAGS = 0x39021A, + CMSG_SPAWN_TRACKING_UPDATE = 0x390168, + CMSG_SPECTATE_CHANGE = 0x3902D1, + CMSG_SPELL_CLICK = 0x3A0027, + CMSG_SPELL_EMPOWER_RELEASE = 0x39013A, + CMSG_SPELL_EMPOWER_RESTART = 0x39013B, + CMSG_SPIRIT_HEALER_ACTIVATE = 0x3A0042, + CMSG_SPLIT_GUILD_BANK_ITEM = 0x3A0053, + CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x3A0050, + CMSG_SPLIT_ITEM = 0x3B0008, + CMSG_SPLIT_ITEM_TO_GUILD_BANK = 0x3A004E, + CMSG_STAND_STATE_CHANGE = 0x390035, + CMSG_START_CHALLENGE_MODE = 0x3A00E9, + CMSG_START_INSTANCE_ABANDON_VOTE = 0x3E0060, + CMSG_START_SPECTATOR_WAR_GAME = 0x3E000B, + CMSG_START_WAR_GAME = 0x3E000A, + CMSG_STORE_GUILD_BANK_ITEM = 0x3A0049, + CMSG_SUBMIT_USER_FEEDBACK = 0x3E00C2, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x390291, + CMSG_SUMMON_RESPONSE = 0x3E0096, + CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3E0072, + CMSG_SURRENDER_ARENA = 0x390020, + CMSG_SUSPEND_COMMS_ACK = 0x3F0000, + CMSG_SUSPEND_TOKEN_RESPONSE = 0x3F0008, + CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x3A004B, + CMSG_SWAP_INV_ITEM = 0x3B0007, + CMSG_SWAP_ITEM = 0x3B0006, + CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x3A004A, + CMSG_SWAP_SUB_GROUPS = 0x3E0079, + CMSG_TABARD_VENDOR_ACTIVATE = 0x390187, + CMSG_TALK_TO_GOSSIP = 0x3A0024, + CMSG_TAXI_NODE_STATUS_QUERY = 0x3A003B, + CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x3A003D, + CMSG_TAXI_REQUEST_EARLY_LANDING = 0x3A003F, + CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3C005D, + CMSG_TIME_SYNC_RESPONSE = 0x3C005A, + CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3C005C, + CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3C005B, + CMSG_TOGGLE_DIFFICULTY = 0x3E0083, + CMSG_TOGGLE_PVP = 0x390189, + CMSG_TOTEM_DESTROYED = 0x3A0090, CMSG_TOY_CLEAR_FANFARE = 0x290004, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x2F0232, - CMSG_TRAINER_BUY_SPELL = 0x300041, - CMSG_TRAINER_LIST = 0x300040, - CMSG_TRAITS_COMMIT_CONFIG = 0x2F02BA, - CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x2F02B8, - CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x2F02E8, - CMSG_TRANSMOGRIFY_ITEMS = 0x2F0043, - CMSG_TURN_IN_PETITION = 0x3000D3, - CMSG_TUTORIAL = 0x34010B, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x2F0262, - CMSG_UNACCEPT_TRADE = 0x2F0005, - CMSG_UNDELETE_CHARACTER = 0x34010D, - CMSG_UNLEARN_SKILL = 0x30007D, - CMSG_UNLEARN_SPECIALIZATION = 0x2F0051, - CMSG_UPDATE_AADC_STATUS = 0x340165, - CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS = 0x30012A, - CMSG_UPDATE_ACCOUNT_DATA = 0x3400C3, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x2F0177, - CMSG_UPDATE_CLIENT_SETTINGS = 0x340090, - CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2F01E5, - CMSG_UPDATE_MISSILE_TRAJECTORY = 0x320060, - CMSG_UPDATE_RAID_TARGET = 0x34007C, - CMSG_UPDATE_SPELL_VISUAL = 0x2F0176, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x340122, - CMSG_UPGRADE_GARRISON = 0x2F019B, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x2F028F, - CMSG_USED_FOLLOW = 0x2F0032, - CMSG_USE_CRITTER_ITEM = 0x2F0109, - CMSG_USE_EQUIPMENT_SET = 0x310001, - CMSG_USE_ITEM = 0x2F0170, - CMSG_USE_TOY = 0x2F0173, - CMSG_VAS_CHECK_TRANSFER_OK = 0x340138, - CMSG_VAS_GET_QUEUE_MINUTES = 0x340137, - CMSG_VAS_GET_SERVICE_STATUS = 0x340136, - CMSG_VIOLENCE_LEVEL = 0x2F0030, - CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x34013C, - CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x34013D, - CMSG_VOICE_CHAT_LOGIN = 0x34013B, - CMSG_WARDEN3_DATA = 0x340018, - CMSG_WHO = 0x3400AD, - CMSG_WHO_IS = 0x3400AC, - CMSG_WORLD_LOOT_OBJECT_CLICK = 0x2F02D5, - CMSG_WORLD_PORT_RESPONSE = 0x340025, - CMSG_WRAP_ITEM = 0x310000, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x390232, + CMSG_TRAINER_BUY_SPELL = 0x3A0041, + CMSG_TRAINER_LIST = 0x3A0040, + CMSG_TRAITS_COMMIT_CONFIG = 0x3902BA, + CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3902B8, + CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x3902E7, + CMSG_TRANSMOGRIFY_ITEMS = 0x390043, + CMSG_TURN_IN_PETITION = 0x3A00D3, + CMSG_TUTORIAL = 0x3E010C, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x390262, + CMSG_UNACCEPT_TRADE = 0x390005, + CMSG_UNDELETE_CHARACTER = 0x3E010E, + CMSG_UNLEARN_SKILL = 0x3A007D, + CMSG_UNLEARN_SPECIALIZATION = 0x390051, + CMSG_UPDATE_AADC_STATUS = 0x3E0166, + CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS = 0x3A012A, + CMSG_UPDATE_ACCOUNT_DATA = 0x3E00C4, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x390177, + CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3901E5, + CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3C0060, + CMSG_UPDATE_RAID_TARGET = 0x3E007C, + CMSG_UPDATE_SPELL_VISUAL = 0x390176, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x3E0123, + CMSG_UPGRADE_GARRISON = 0x39019B, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x39028F, + CMSG_USED_FOLLOW = 0x390032, + CMSG_USE_CRITTER_ITEM = 0x390109, + CMSG_USE_EQUIPMENT_SET = 0x3B0001, + CMSG_USE_ITEM = 0x390170, + CMSG_USE_TOY = 0x390173, + CMSG_VAS_CHECK_TRANSFER_OK = 0x3E0139, + CMSG_VAS_GET_QUEUE_MINUTES = 0x3E0138, + CMSG_VAS_GET_SERVICE_STATUS = 0x3E0137, + CMSG_VIOLENCE_LEVEL = 0x390030, + CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x3E013D, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3E013E, + CMSG_VOICE_CHAT_LOGIN = 0x3E013C, + CMSG_WARDEN3_DATA = 0x3E0018, + CMSG_WHO = 0x3E00AD, + CMSG_WHO_IS = 0x3E00AC, + CMSG_WORLD_LOOT_OBJECT_CLICK = 0x3902D4, + CMSG_WORLD_PORT_RESPONSE = 0x3E0025, + CMSG_WRAP_ITEM = 0x3B0000, }; -inline constexpr std::size_t NUM_CMSG_OPCODES = 1758; +inline constexpr std::size_t NUM_CMSG_OPCODES = 1881; inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode) { uint32 idInGroup = opcode & 0xFFFF; switch (opcode >> 16) { - case 0x29: return idInGroup < 31 ? idInGroup + 0 : -1; - case 0x2B: return idInGroup < 51 ? idInGroup + 31 : -1; - case 0x2C: return idInGroup < 3 ? idInGroup + 82 : -1; - case 0x2D: return idInGroup < 37 ? idInGroup + 85 : -1; - case 0x2F: return idInGroup < 767 ? idInGroup + 122 : -1; - case 0x30: return idInGroup < 301 ? idInGroup + 889 : -1; - case 0x31: return idInGroup < 10 ? idInGroup + 1190 : -1; - case 0x32: return idInGroup < 132 ? idInGroup + 1200 : -1; - case 0x34: return idInGroup < 411 ? idInGroup + 1332 : -1; - case 0x35: return idInGroup < 15 ? idInGroup + 1743 : -1; + case 0x29: return idInGroup < 35 ? idInGroup + 0 : -1; + case 0x2B: return idInGroup < 51 ? idInGroup + 35 : -1; + case 0x2C: return idInGroup < 3 ? idInGroup + 86 : -1; + case 0x2D: return idInGroup < 39 ? idInGroup + 89 : -1; + case 0x2E: return idInGroup < 2 ? idInGroup + 128 : -1; + case 0x2F: return idInGroup < 2 ? idInGroup + 130 : -1; + case 0x30: return idInGroup < 17 ? idInGroup + 132 : -1; + case 0x31: return idInGroup < 8 ? idInGroup + 149 : -1; + case 0x32: return idInGroup < 9 ? idInGroup + 157 : -1; + case 0x33: return idInGroup < 37 ? idInGroup + 166 : -1; + case 0x35: return idInGroup < 9 ? idInGroup + 203 : -1; + case 0x37: return idInGroup < 8 ? idInGroup + 212 : -1; + case 0x38: return idInGroup < 16 ? idInGroup + 220 : -1; + case 0x39: return idInGroup < 768 ? idInGroup + 236 : -1; + case 0x3A: return idInGroup < 304 ? idInGroup + 1004 : -1; + case 0x3B: return idInGroup < 10 ? idInGroup + 1308 : -1; + case 0x3C: return idInGroup < 132 ? idInGroup + 1318 : -1; + case 0x3E: return idInGroup < 413 ? idInGroup + 1450 : -1; + case 0x3F: return idInGroup < 18 ? idInGroup + 1863 : -1; default: return -1; } } enum OpcodeServer : uint32 { - SMSG_ABORT_NEW_WORLD = 0x360030, - SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS = 0x360347, - SMSG_ACCOUNT_CONVERSION_STATE_UPDATE = 0x36034C, - SMSG_ACCOUNT_COSMETIC_ADDED = 0x360300, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x3602E8, - SMSG_ACCOUNT_DATA_TIMES = 0x3601A8, - SMSG_ACCOUNT_EXPORT_RESPONSE = 0x360338, - SMSG_ACCOUNT_ITEM_COLLECTION_DATA = 0x360352, - SMSG_ACCOUNT_MOUNT_REMOVED = 0x360047, - SMSG_ACCOUNT_MOUNT_UPDATE = 0x360046, - SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x3602FF, - SMSG_ACCOUNT_STORE_CURRENCY_UPDATE = 0x360321, - SMSG_ACCOUNT_STORE_FRONT_UPDATE = 0x360322, - SMSG_ACCOUNT_STORE_ITEM_STATE_CHANGED = 0x360323, - SMSG_ACCOUNT_STORE_RESULT = 0x360324, - SMSG_ACCOUNT_TOY_UPDATE = 0x360048, - SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x36004C, - SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x36004B, - SMSG_ACCOUNT_WARBAND_SCENE_UPDATE = 0x36004E, - SMSG_ACHIEVEMENT_DELETED = 0x360185, - SMSG_ACHIEVEMENT_EARNED = 0x3600E0, - SMSG_ACTIVATE_ESSENCE_FAILED = 0x4A0020, - SMSG_ACTIVATE_SOULBIND_FAILED = 0x4A0022, - SMSG_ACTIVATE_TAXI_REPLY = 0x36011C, - SMSG_ACTIVE_GLYPHS = 0x4D0045, - SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x3601E3, - SMSG_ADDON_LIST_REQUEST = 0x3600DF, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x3600DA, - SMSG_ADD_ITEM_PASSIVE = 0x360042, - SMSG_ADD_LOSS_OF_CONTROL = 0x36010F, - SMSG_ADD_RUNE_POWER = 0x360156, - SMSG_ADJUST_SPLINE_DURATION = 0x360069, - SMSG_ADVANCED_COMBAT_LOG = 0x3602FD, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x3602F8, - SMSG_AE_LOOT_TARGETS = 0x3600B5, - SMSG_AE_LOOT_TARGET_ACK = 0x3600B6, - SMSG_AI_REACTION = 0x360153, - SMSG_ALLIED_RACE_DETAILS = 0x360291, - SMSG_ALL_ACCOUNT_CRITERIA = 0x360005, - SMSG_ALL_ACHIEVEMENT_DATA = 0x360004, - SMSG_ALL_GUILD_ACHIEVEMENTS = 0x420000, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x3602D5, - SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x36001D, - SMSG_AREA_POI_UPDATE_RESPONSE = 0x4A0018, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x3601DC, - SMSG_AREA_TRIGGER_DENIED = 0x370004, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x3601B4, - SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x370002, - SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x370003, - SMSG_ARENA_CLEAR_OPPONENTS = 0x3600E6, - SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x3600CF, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x3600E5, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x36023E, - SMSG_ARTIFACT_FORGE_ERROR = 0x36023C, - SMSG_ARTIFACT_RESPEC_PROMPT = 0x36023D, - SMSG_ARTIFACT_XP_GAIN = 0x360284, - SMSG_ATTACKER_STATE_UPDATE = 0x3C002C, - SMSG_ATTACK_START = 0x3C0017, - SMSG_ATTACK_STOP = 0x3C0018, - SMSG_ATTACK_SWING_ERROR = 0x3C0026, - SMSG_ATTACK_SWING_LANDED_LOG = 0x3C0027, - SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x36026D, - SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x36026C, - SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x36026B, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x360190, - SMSG_AUCTION_COMMAND_RESULT = 0x36018D, - SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x360325, - SMSG_AUCTION_FAVORITE_LIST = 0x3602EF, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x3602E7, - SMSG_AUCTION_HELLO_RESPONSE = 0x36018B, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x3602E6, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x3602E2, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x3602E3, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x3602E5, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x36018F, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x360191, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x36018C, - SMSG_AUCTION_WON_NOTIFICATION = 0x36018E, - SMSG_AURA_POINTS_DEPLETED = 0x4D0012, - SMSG_AURA_UPDATE = 0x4D0011, - SMSG_AUTH_CHALLENGE = 0x3D0000, - SMSG_AUTH_FAILED = 0x360000, - SMSG_AUTH_RESPONSE = 0x360001, - SMSG_AVAILABLE_HOTFIXES = 0x3A0001, - SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x360326, - SMSG_BAG_CLEANUP_FINISHED = 0x4E0007, - SMSG_BARBER_SHOP_RESULT = 0x36015B, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x3602C6, - SMSG_BATTLEFIELD_LIST = 0x3C0005, - SMSG_BATTLEFIELD_PORT_DENIED = 0x3C000B, - SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x3C0001, - SMSG_BATTLEFIELD_STATUS_FAILED = 0x3C0004, - SMSG_BATTLEFIELD_STATUS_GROUP_PROPOSAL_FAILED = 0x3C000E, - SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x3C0000, - SMSG_BATTLEFIELD_STATUS_NONE = 0x3C0003, - SMSG_BATTLEFIELD_STATUS_QUEUED = 0x3C0002, - SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x3C000D, - SMSG_BATTLEGROUND_INFO_THROTTLED = 0x3C000C, - SMSG_BATTLEGROUND_INIT = 0x3C0029, - SMSG_BATTLEGROUND_PLAYER_JOINED = 0x3C0009, - SMSG_BATTLEGROUND_PLAYER_LEFT = 0x3C000A, - SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x3C0006, - SMSG_BATTLEGROUND_POINTS = 0x3C0028, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x360226, - SMSG_BATTLENET_CHALLENGE_START = 0x360225, - SMSG_BATTLENET_NOTIFICATION = 0x36029D, - SMSG_BATTLENET_RESPONSE = 0x36029C, - SMSG_BATTLE_NET_CONNECTION_STATUS = 0x36029E, - SMSG_BATTLE_PAY_ACK_FAILED = 0x360221, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x360216, - SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x360217, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x360220, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x360214, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x360213, - SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x360305, - SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x360211, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x360212, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x360210, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x36020E, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x36020F, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x360215, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x36021F, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x3602BA, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x36021D, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x36021C, - SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x3602AD, - SMSG_BATTLE_PETS_HEALED = 0x36008B, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x360117, - SMSG_BATTLE_PET_DELETED = 0x360088, - SMSG_BATTLE_PET_ERROR = 0x3600D5, - SMSG_BATTLE_PET_JOURNAL = 0x360087, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x360085, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x360086, - SMSG_BATTLE_PET_RESTORED = 0x36008A, - SMSG_BATTLE_PET_REVOKED = 0x360089, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x360083, - SMSG_BATTLE_PET_UPDATES = 0x360082, - SMSG_BIND_POINT_UPDATE = 0x360011, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x3600C5, - SMSG_BLACK_MARKET_OUTBID = 0x3600C6, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x3600C4, - SMSG_BLACK_MARKET_WON = 0x3600C7, - SMSG_BONUS_ROLL_EMPTY = 0x3600E2, - SMSG_BOSS_KILL = 0x3C002B, - SMSG_BREAK_TARGET = 0x3C0016, - SMSG_BROADCAST_ACHIEVEMENT = 0x3B0012, - SMSG_BROADCAST_SUMMON_CAST = 0x3602C8, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x3602C9, - SMSG_BUY_FAILED = 0x360164, - SMSG_BUY_SUCCEEDED = 0x360163, - SMSG_CACHE_INFO = 0x3A000F, - SMSG_CACHE_VERSION = 0x3A000E, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x36013C, - SMSG_CALENDAR_COMMAND_RESULT = 0x36013D, - SMSG_CALENDAR_COMMUNITY_INVITE = 0x36012C, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x360134, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x360135, - SMSG_CALENDAR_INVITE_ADDED = 0x36012D, - SMSG_CALENDAR_INVITE_ALERT = 0x360131, - SMSG_CALENDAR_INVITE_NOTES = 0x360136, - SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x360137, - SMSG_CALENDAR_INVITE_REMOVED = 0x36012E, - SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x360133, - SMSG_CALENDAR_INVITE_STATUS = 0x36012F, - SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x360132, - SMSG_CALENDAR_MODERATOR_STATUS = 0x360130, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x360138, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x360139, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x36013A, - SMSG_CALENDAR_SEND_CALENDAR = 0x36012A, - SMSG_CALENDAR_SEND_EVENT = 0x36012B, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x36013B, - SMSG_CAMERA_EFFECT = 0x3601C2, - SMSG_CANCEL_AUTO_REPEAT = 0x36017B, - SMSG_CANCEL_COMBAT = 0x3C0025, - SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x4D0037, - SMSG_CANCEL_PING_PIN = 0x36003B, - SMSG_CANCEL_PRELOAD_WORLD = 0x36002E, - SMSG_CANCEL_SCENE = 0x3600D4, - SMSG_CANCEL_SPELL_VISUAL = 0x4D0035, - SMSG_CANCEL_SPELL_VISUAL_KIT = 0x4D0039, - SMSG_CAN_DUEL_RESULT = 0x3C0021, - SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x3602AC, - SMSG_CAPTURE_POINT_REMOVED = 0x3C0008, - SMSG_CAST_FAILED = 0x4D0048, - SMSG_CAS_REFRESH_REMOTE_DATA = 0x360115, - SMSG_CATALOG_SHOP_LICENSE_DATA = 0x3602AE, - SMSG_CATALOG_SHOP_OBTAIN_LICENSE = 0x360358, - SMSG_CATALOG_SHOP_OPEN_CHECKOUT_RESULT = 0x360353, - SMSG_CAUTIONARY_CHANNEL_MESSAGE = 0x3B0009, - SMSG_CAUTIONARY_CHAT_MESSAGE = 0x3B0008, - SMSG_CHAIN_MISSILE_BOUNCE = 0x360061, - SMSG_CHALLENGE_MODE_COMPLETE = 0x3600A6, - SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x3600A7, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x3600AD, - SMSG_CHALLENGE_MODE_RESET = 0x3600A5, - SMSG_CHALLENGE_MODE_SET_LEAVER_PENALTY_TIMER = 0x4A0030, - SMSG_CHALLENGE_MODE_START = 0x3600A3, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x3600A4, - SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x4A000C, - SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x36029F, - SMSG_CHANNEL_LIST = 0x3B001B, - SMSG_CHANNEL_NOTIFY = 0x3B0017, - SMSG_CHANNEL_NOTIFY_JOINED = 0x3B0019, - SMSG_CHANNEL_NOTIFY_LEFT = 0x3B001A, - SMSG_CHANNEL_NOTIFY_NPE_JOINED_BATCH = 0x3B0018, - SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x360259, - SMSG_CHARACTER_LOGIN_FAILED = 0x3601A2, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x360224, - SMSG_CHARACTER_RENAME_RESULT = 0x3601FF, - SMSG_CHARACTER_UPGRADE_ABORTED = 0x360258, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x360257, - SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x36025A, - SMSG_CHARACTER_UPGRADE_STARTED = 0x360256, - SMSG_CHAR_CUSTOMIZE_FAILURE = 0x36017F, - SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x360180, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x360243, - SMSG_CHAT = 0x3B0001, - SMSG_CHAT_AUTO_RESPONDED = 0x3B000E, - SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x3B0022, - SMSG_CHAT_DOWN = 0x3B0014, - SMSG_CHAT_IGNORED_ACCOUNT_MUTED = 0x3B0000, - SMSG_CHAT_IS_DOWN = 0x3B0015, - SMSG_CHAT_NOT_IN_GUILD = 0x3B0023, - SMSG_CHAT_NOT_IN_PARTY = 0x3B0006, - SMSG_CHAT_PLAYER_AMBIGUOUS = 0x3B0004, - SMSG_CHAT_PLAYER_NOTFOUND = 0x3B000D, - SMSG_CHAT_RECONNECT = 0x3B0016, - SMSG_CHAT_REGIONAL_SERVICE_STATUS = 0x3B001D, - SMSG_CHAT_RESTRICTED = 0x3B0007, - SMSG_CHAT_SERVER_MESSAGE = 0x3B001C, - SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x4D0002, - SMSG_CHECK_ABANDON_NPE = 0x4A0023, - SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x36001B, - SMSG_CHECK_WARGAME_ENTRY = 0x360027, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x3602F2, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x3602D9, - SMSG_CLEAR_ALL_SPELL_CHARGES = 0x4D0016, - SMSG_CLEAR_BOSS_EMOTES = 0x360054, - SMSG_CLEAR_COOLDOWN = 0x360158, - SMSG_CLEAR_COOLDOWNS = 0x4D0015, - SMSG_CLEAR_RESURRECT = 0x360013, - SMSG_CLEAR_SPELL_CHARGES = 0x4D0017, - SMSG_CLEAR_TARGET = 0x3C0022, - SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x4B0022, - SMSG_CLOSE_ARTIFACT_FORGE = 0x36023B, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x3602D1, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x3602D4, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x3602D2, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x3602CF, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x3602D3, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x3602D0, - SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x360311, - SMSG_COIN_REMOVED = 0x3600B4, - SMSG_COMBAT_EVENT_FAILED = 0x3C0019, - SMSG_COMMENTATOR_MAP_INFO = 0x3601A4, - SMSG_COMMENTATOR_PLAYER_INFO = 0x3601A5, - SMSG_COMMENTATOR_STATE_CHANGED = 0x3601A3, - SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x360268, - SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x360274, - SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x36026A, - SMSG_COMMERCE_TOKEN_UPDATE = 0x360269, - SMSG_COMPLAINT_RESULT = 0x36014A, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x360234, - SMSG_CONFIRM_PARTY_INVITE = 0x3602AB, - SMSG_CONNECT_TO = 0x3D0005, - SMSG_CONSOLE_WRITE = 0x3600D2, - SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x360270, - SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x36026F, - SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x36026E, - SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x360272, - SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x360273, - SMSG_CONTACT_LIST = 0x360222, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x3602B3, - SMSG_CONTROL_UPDATE = 0x3600E4, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x3602FB, - SMSG_COOLDOWN_CHEAT = 0x3601D5, - SMSG_COOLDOWN_EVENT = 0x360157, - SMSG_CORPSE_LOCATION = 0x3600EB, - SMSG_CORPSE_RECLAIM_DELAY = 0x3601E6, - SMSG_CORPSE_TRANSPORT_QUERY = 0x3601B0, - SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x4B0024, - SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x360294, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x3602FC, - SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x360332, - SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x36032E, - SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x36032A, - SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x36032C, - SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x360328, - SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x36032D, - SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x360329, - SMSG_CRAFTING_ORDER_NPC_REWARD_INFO = 0x360334, - SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x360330, - SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x36032B, - SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x360333, - SMSG_CRAFT_ENCHANT_RESULT = 0x360331, - SMSG_CREATE_CHAR = 0x36019E, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x360233, - SMSG_CREATOR_VISUALS_OVERRIDE = 0x360337, - SMSG_CRITERIA_DELETED = 0x360184, - SMSG_CRITERIA_UPDATE = 0x36017E, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x36015F, - SMSG_CURRENCY_TRANSFER_LOG = 0x360349, - SMSG_CURRENCY_TRANSFER_RESULT = 0x360348, - SMSG_CUSTOM_LOAD_SCREEN = 0x360064, - SMSG_DAILY_QUESTS_RESET = 0x4B0000, - SMSG_DAMAGE_CALC_LOG = 0x4D0054, - SMSG_DB_REPLY = 0x3A0000, - SMSG_DEATH_RELEASE_LOC = 0x360171, - SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x3600F3, - SMSG_DEFENSE_MESSAGE = 0x3B000C, - SMSG_DELETE_CHAR = 0x36019F, - SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x400022, - SMSG_DELVES_ACCOUNT_DATA_ELEMENT_CHANGED = 0x36034E, - SMSG_DESTROY_ARENA_UNIT = 0x3601DE, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x360196, - SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x360020, - SMSG_DISENCHANT_CREDIT = 0x36003F, - SMSG_DISMOUNT_RESULT = 0x360010, - SMSG_DISPEL_FAILED = 0x4D001E, - SMSG_DISPLAY_GAME_ERROR = 0x360035, - SMSG_DISPLAY_PLAYER_CHOICE = 0x4A0004, - SMSG_DISPLAY_PROMOTION = 0x3600E8, - SMSG_DISPLAY_QUEST_POPUP = 0x4B001E, - SMSG_DISPLAY_TOAST = 0x3600C1, - SMSG_DISPLAY_WORLD_TEXT = 0x360285, - SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x4D0053, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x360079, - SMSG_DROP_NEW_CONNECTION = 0x3D0004, - SMSG_DUEL_ARRANGED = 0x3C001B, - SMSG_DUEL_COMPLETE = 0x3C001F, - SMSG_DUEL_COUNTDOWN = 0x3C001E, - SMSG_DUEL_IN_BOUNDS = 0x3C001D, - SMSG_DUEL_OUT_OF_BOUNDS = 0x3C001C, - SMSG_DUEL_REQUESTED = 0x3C001A, - SMSG_DUEL_WINNER = 0x3C0020, - SMSG_DURABILITY_DAMAGE_DEATH = 0x3601E1, - SMSG_EMOTE = 0x360260, - SMSG_ENABLE_BARBER_SHOP = 0x36015A, - SMSG_ENCHANTMENT_LOG = 0x3601B1, - SMSG_ENCOUNTER_END = 0x36021B, - SMSG_ENCOUNTER_START = 0x36021A, - SMSG_END_LIGHTNING_STORM = 0x360147, - SMSG_ENTER_ENCRYPTED_MODE = 0x3D0001, - SMSG_ENUM_CHARACTERS_RESULT = 0x360018, - SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x36028A, - SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x4D000E, - SMSG_EQUIPMENT_SET_ID = 0x360150, - SMSG_EXPECTED_SPAM_RECORDS = 0x3B0005, - SMSG_EXPLORATION_EXPERIENCE = 0x3601FB, - SMSG_EXPORT_ACCOUNT_PROFILE = 0x3600F0, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x3602F9, - SMSG_FACTION_BONUS_INFO = 0x3601C1, - SMSG_FAILED_PLAYER_CONDITION = 0x4A0002, - SMSG_FAILED_QUEST_TURN_IN = 0x3602A8, - SMSG_FEATURE_SYSTEM_STATUS = 0x360058, - SMSG_FEATURE_SYSTEM_STATUS2 = 0x360346, - SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x360059, - SMSG_FEIGN_DEATH_RESISTED = 0x3601E0, - SMSG_FISH_ESCAPED = 0x36016E, - SMSG_FISH_NOT_HOOKED = 0x36016D, - SMSG_FLIGHT_SPLINE_SYNC = 0x48005B, - SMSG_FLUSH_COMBAT_LOG_FILE = 0x4D0010, - SMSG_FORCED_DEATH_UPDATE = 0x360172, - SMSG_FORCE_ANIM = 0x3601ED, - SMSG_FORCE_ANIMATIONS = 0x3601EE, - SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x36004A, - SMSG_FORCE_SPAWN_TRACKING_UPDATE = 0x4B0021, - SMSG_FRIEND_STATUS = 0x360223, - SMSG_GAIN_MAW_POWER = 0x360279, - SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x36005C, - SMSG_GAME_OBJECT_BASE = 0x3602C0, - SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x360310, - SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x36005D, - SMSG_GAME_OBJECT_DESPAWN = 0x36005E, - SMSG_GAME_OBJECT_INTERACTION = 0x36030F, - SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x4D003C, - SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x4D003B, - SMSG_GAME_OBJECT_RESET_STATE = 0x3601BB, - SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x36029B, - SMSG_GAME_SPEED_SET = 0x360120, - SMSG_GAME_TIME_SET = 0x3601AA, - SMSG_GAME_TIME_UPDATE = 0x3601A9, - SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x400024, - SMSG_GARRISON_ADD_EVENT = 0x400048, - SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x400016, - SMSG_GARRISON_ADD_MISSION_RESULT = 0x40001A, - SMSG_GARRISON_ADD_SPEC_GROUPS = 0x40004B, - SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES = 0x40004F, - SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x40002C, - SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT = 0x400051, - SMSG_GARRISON_BUILDING_ACTIVATED = 0x40000B, - SMSG_GARRISON_BUILDING_REMOVED = 0x400004, - SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x400006, - SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT = 0x40001D, - SMSG_GARRISON_CLEAR_COLLECTION = 0x400047, - SMSG_GARRISON_CLEAR_EVENT_LIST = 0x40004A, - SMSG_GARRISON_CLEAR_SPEC_GROUPS = 0x40004C, - SMSG_GARRISON_COLLECTION_REMOVE_ENTRY = 0x400046, - SMSG_GARRISON_COLLECTION_UPDATE_ENTRY = 0x400045, - SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT = 0x40003D, - SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x40001C, - SMSG_GARRISON_CREATE_RESULT = 0x40000C, - SMSG_GARRISON_DELETE_MISSION_RESULT = 0x400023, - SMSG_GARRISON_DELETE_RESULT = 0x400035, - SMSG_GARRISON_FOLLOWER_ACTIVATIONS_SET = 0x40002B, - SMSG_GARRISON_FOLLOWER_CHANGED_FLAGS = 0x400029, - SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL = 0x400027, - SMSG_GARRISON_FOLLOWER_CHANGED_QUALITY = 0x400028, - SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x400026, - SMSG_GARRISON_FOLLOWER_FATIGUE_CLEARED = 0x40002A, - SMSG_GARRISON_GENERATE_FOLLOWERS_RESULT = 0x400033, - SMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO_RESULT = 0x400015, - SMSG_GARRISON_GET_RECALL_PORTAL_LAST_USED_TIME_RESULT = 0x40001E, - SMSG_GARRISON_IS_UPGRADEABLE_RESPONSE = 0x40003F, - SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x400007, - SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x400005, - SMSG_GARRISON_LIST_COMPLETED_MISSIONS_CHEAT_RESULT = 0x400040, - SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x400019, - SMSG_GARRISON_MAP_DATA_RESPONSE = 0x400042, - SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT = 0x400020, - SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE = 0x400043, - SMSG_GARRISON_MISSION_START_CONDITION_UPDATE = 0x400025, - SMSG_GARRISON_OPEN_CRAFTER = 0x400037, - SMSG_GARRISON_OPEN_RECRUITMENT_NPC = 0x400030, - SMSG_GARRISON_PLACE_BUILDING_RESULT = 0x400003, - SMSG_GARRISON_PLOT_PLACED = 0x400001, - SMSG_GARRISON_PLOT_REMOVED = 0x400002, - SMSG_GARRISON_RECRUIT_FOLLOWER_RESULT = 0x400034, - SMSG_GARRISON_REMOTE_INFO = 0x40000A, - SMSG_GARRISON_REMOVE_EVENT = 0x400049, - SMSG_GARRISON_REMOVE_FOLLOWER_ABILITY_RESULT = 0x40002F, - SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT = 0x40002D, - SMSG_GARRISON_REMOVE_FOLLOWER_RESULT = 0x400017, - SMSG_GARRISON_RENAME_FOLLOWER_RESULT = 0x40002E, - SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT = 0x400009, - SMSG_GARRISON_RESEARCH_TALENT_RESULT = 0x40000E, - SMSG_GARRISON_RESET_TALENT_TREE = 0x400013, - SMSG_GARRISON_RESET_TALENT_TREE_SOCKET_DATA = 0x400014, - SMSG_GARRISON_START_MISSION_RESULT = 0x40001B, - SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE = 0x40003C, - SMSG_GARRISON_SWITCH_TALENT_TREE_BRANCH = 0x40004D, - SMSG_GARRISON_TALENT_COMPLETED = 0x40000F, - SMSG_GARRISON_TALENT_REMOVED = 0x400010, - SMSG_GARRISON_TALENT_REMOVE_SOCKET_DATA = 0x400012, - SMSG_GARRISON_TALENT_UPDATE_SOCKET_DATA = 0x400011, - SMSG_GARRISON_TALENT_WORLD_QUEST_UNLOCKS_RESPONSE = 0x40004E, - SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x400008, - SMSG_GARRISON_UPDATE_FOLLOWER = 0x400018, - SMSG_GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS = 0x40003E, - SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x400050, - SMSG_GARRISON_UPGRADE_RESULT = 0x40000D, - SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x40001F, - SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x36001C, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x3602B4, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x3601FD, - SMSG_GET_GARRISON_INFO_RESULT = 0x400000, - SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x360236, - SMSG_GET_REALM_HIDDEN_RESULT = 0x36033D, - SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x360271, - SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x36025E, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x360235, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x360231, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x36025D, - SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x360286, - SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x360287, - SMSG_GM_PLAYER_INFO = 0x4A000D, - SMSG_GM_REQUEST_PLAYER_INFO = 0x4A0003, - SMSG_GM_TICKET_CASE_STATUS = 0x360142, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x360141, - SMSG_GOD_MODE = 0x360199, - SMSG_GOSSIP_COMPLETE = 0x4B0017, - SMSG_GOSSIP_MESSAGE = 0x4B0018, - SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x4B0028, - SMSG_GOSSIP_POI = 0x36022E, - SMSG_GOSSIP_QUEST_UPDATE = 0x4B0019, - SMSG_GOSSIP_REFRESH_OPTIONS = 0x4B0027, - SMSG_GROUP_ACTION_THROTTLED = 0x360024, - SMSG_GROUP_AUTO_KICK = 0x36022B, - SMSG_GROUP_DECLINE = 0x360227, - SMSG_GROUP_DESTROYED = 0x36022A, - SMSG_GROUP_NEW_LEADER = 0x3600CA, - SMSG_GROUP_REQUEST_DECLINE = 0x360228, - SMSG_GROUP_UNINVITE = 0x360229, - SMSG_GUILD_ACHIEVEMENT_DELETED = 0x42000D, - SMSG_GUILD_ACHIEVEMENT_EARNED = 0x42000C, - SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x42000F, - SMSG_GUILD_BANK_LOG_QUERY_RESULTS = 0x420027, - SMSG_GUILD_BANK_QUERY_RESULTS = 0x420026, - SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY = 0x420028, - SMSG_GUILD_BANK_TEXT_QUERY_RESULT = 0x42002B, - SMSG_GUILD_CHALLENGE_COMPLETED = 0x42001B, - SMSG_GUILD_CHALLENGE_UPDATE = 0x42001A, - SMSG_GUILD_CHANGE_NAME_RESULT = 0x420025, - SMSG_GUILD_COMMAND_RESULT = 0x420002, - SMSG_GUILD_CRITERIA_DELETED = 0x42000E, - SMSG_GUILD_CRITERIA_UPDATE = 0x42000B, - SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED = 0x420040, - SMSG_GUILD_EVENT_BANK_MONEY_CHANGED = 0x42003F, - SMSG_GUILD_EVENT_DISBANDED = 0x420035, - SMSG_GUILD_EVENT_LOG_QUERY_RESULTS = 0x42002A, - SMSG_GUILD_EVENT_MOTD = 0x420036, - SMSG_GUILD_EVENT_NEW_LEADER = 0x420034, - SMSG_GUILD_EVENT_PLAYER_JOINED = 0x420032, - SMSG_GUILD_EVENT_PLAYER_LEFT = 0x420033, - SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x420037, - SMSG_GUILD_EVENT_RANKS_UPDATED = 0x420039, - SMSG_GUILD_EVENT_RANK_CHANGED = 0x42003A, - SMSG_GUILD_EVENT_STATUS_CHANGE = 0x420038, - SMSG_GUILD_EVENT_TAB_ADDED = 0x42003B, - SMSG_GUILD_EVENT_TAB_DELETED = 0x42003C, - SMSG_GUILD_EVENT_TAB_MODIFIED = 0x42003D, - SMSG_GUILD_EVENT_TAB_TEXT_CHANGED = 0x42003E, - SMSG_GUILD_FLAGGED_FOR_RENAME = 0x420024, - SMSG_GUILD_HARDCORE_MEMBER_DEATH = 0x420004, - SMSG_GUILD_INVITE = 0x420012, - SMSG_GUILD_INVITE_DECLINED = 0x420030, - SMSG_GUILD_INVITE_EXPIRED = 0x420031, - SMSG_GUILD_ITEM_LOOTED_NOTIFY = 0x42001C, - SMSG_GUILD_KNOWN_RECIPES = 0x420006, - SMSG_GUILD_MEMBERS_WITH_RECIPE = 0x420007, - SMSG_GUILD_MEMBER_DAILY_RESET = 0x42002C, - SMSG_GUILD_MEMBER_RECIPES = 0x420005, - SMSG_GUILD_MEMBER_UPDATE_NOTE = 0x420011, - SMSG_GUILD_MOVED = 0x420022, - SMSG_GUILD_MOVE_STARTING = 0x420021, - SMSG_GUILD_NAME_CHANGED = 0x420023, - SMSG_GUILD_NEWS = 0x420009, - SMSG_GUILD_NEWS_DELETED = 0x42000A, - SMSG_GUILD_PARTY_STATE = 0x420013, - SMSG_GUILD_PERMISSIONS_QUERY_RESULTS = 0x420029, - SMSG_GUILD_RANKS = 0x420010, - SMSG_GUILD_RENAME_NAME_CHECK = 0x420044, - SMSG_GUILD_RENAME_REFUND_RESULT = 0x420046, - SMSG_GUILD_RENAME_REQUESTED_RESULT = 0x420045, - SMSG_GUILD_RENAME_STATUS_UPDATE = 0x420043, - SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0x420014, - SMSG_GUILD_RESET = 0x420020, - SMSG_GUILD_REWARD_LIST = 0x420008, - SMSG_GUILD_ROSTER = 0x420003, - SMSG_GUILD_SEND_RANK_CHANGE = 0x420001, - SMSG_HARDCORE_DEATH_ALERT = 0x360345, - SMSG_HEALTH_UPDATE = 0x36016F, - SMSG_HIGHEST_THREAT_UPDATE = 0x360177, - SMSG_HOTFIX_CONNECT = 0x3A0003, - SMSG_HOTFIX_MESSAGE = 0x3A0002, - SMSG_INITIALIZE_FACTIONS = 0x3601C0, - SMSG_INITIAL_SETUP = 0x360014, - SMSG_INIT_WORLD_STATES = 0x3601E2, - SMSG_INSPECT_RESULT = 0x3600CE, - SMSG_INSTANCE_ABANDON_VOTE_COMPLETED = 0x360093, - SMSG_INSTANCE_ABANDON_VOTE_PLAYER_LEFT = 0x360094, - SMSG_INSTANCE_ABANDON_VOTE_RESPONSE = 0x360092, - SMSG_INSTANCE_ABANDON_VOTE_STARTED = 0x360091, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x360249, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x360248, - SMSG_INSTANCE_ENCOUNTER_END = 0x360251, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x360247, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x360253, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x360252, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x36024C, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x36024B, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x360250, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x360254, - SMSG_INSTANCE_ENCOUNTER_START = 0x36024D, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x36024A, - SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x36024F, - SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x36024E, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x360197, - SMSG_INSTANCE_INFO = 0x3600D1, - SMSG_INSTANCE_RESET = 0x360125, - SMSG_INSTANCE_RESET_FAILED = 0x360126, - SMSG_INSTANCE_SAVE_CREATED = 0x360219, - SMSG_INTERRUPT_POWER_REGEN = 0x4D004A, - SMSG_INVALIDATE_PAGE_TEXT = 0x3A000A, - SMSG_INVALIDATE_PLAYER = 0x4A0007, - SMSG_INVALID_PROMOTION_CODE = 0x3601EF, - SMSG_INVENTORY_CHANGE_FAILURE = 0x4E0005, - SMSG_INVENTORY_FIXUP_COMPLETE = 0x3602AA, - SMSG_INVENTORY_FULL_OVERFLOW = 0x3602BC, - SMSG_ISLAND_AZERITE_GAIN = 0x3601F8, - SMSG_ISLAND_COMPLETE = 0x3601F9, - SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x4B0004, - SMSG_ITEM_CHANGED = 0x360188, - SMSG_ITEM_COOLDOWN = 0x36025F, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x3601F1, - SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x360034, - SMSG_ITEM_INTERACTION_COMPLETE = 0x3602F1, - SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x360032, - SMSG_ITEM_PUSH_RESULT = 0x3600C0, - SMSG_ITEM_TIME_UPDATE = 0x3601F0, - SMSG_KICK_REASON = 0x360128, - SMSG_LATENCY_REPORT_PING = 0x360301, - SMSG_LEARNED_SPELLS = 0x4D003E, - SMSG_LEARN_PVP_TALENT_FAILED = 0x36006D, - SMSG_LEARN_TALENT_FAILED = 0x36006C, - SMSG_LEGACY_LOOT_RULES = 0x3602C1, - SMSG_LEVEL_LINKING_RESULT = 0x3602D7, - SMSG_LEVEL_UP_INFO = 0x360186, - SMSG_LFG_BOOT_PLAYER = 0x440019, - SMSG_LFG_DISABLED = 0x440017, - SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x44001F, - SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x440009, - SMSG_LFG_JOIN_LOBBY_MATCHMAKER_QUEUE = 0x440020, - SMSG_LFG_JOIN_RESULT = 0x440000, - SMSG_LFG_LIST_APPLICANT_LIST_UPDATE = 0x44000F, - SMSG_LFG_LIST_APPLICATION_STATUS_UPDATE = 0x44000C, - SMSG_LFG_LIST_APPLY_TO_GROUP_RESULT = 0x44000D, - SMSG_LFG_LIST_JOIN_RESULT = 0x440001, - SMSG_LFG_LIST_SEARCH_RESULTS = 0x440002, - SMSG_LFG_LIST_SEARCH_RESULTS_UPDATE = 0x440010, - SMSG_LFG_LIST_SEARCH_STATUS = 0x440003, - SMSG_LFG_LIST_UPDATE_BLACKLIST = 0x44000E, - SMSG_LFG_LIST_UPDATE_EXPIRATION = 0x44000B, - SMSG_LFG_LIST_UPDATE_STATUS = 0x44000A, - SMSG_LFG_OFFER_CONTINUE = 0x440018, - SMSG_LFG_PARTY_INFO = 0x44001A, - SMSG_LFG_PLAYER_INFO = 0x44001B, - SMSG_LFG_PLAYER_REWARD = 0x44001C, - SMSG_LFG_PROPOSAL_UPDATE = 0x440011, - SMSG_LFG_QUEUE_STATUS = 0x440004, - SMSG_LFG_READY_CHECK_RESULT = 0x44001E, - SMSG_LFG_READY_CHECK_UPDATE = 0x440006, - SMSG_LFG_ROLE_CHECK_UPDATE = 0x440005, - SMSG_LFG_SLOT_INVALID = 0x440014, - SMSG_LFG_TELEPORT_DENIED = 0x440016, - SMSG_LFG_UPDATE_STATUS = 0x440008, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x36020B, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x36020A, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x3601FE, - SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x36020C, - SMSG_LOAD_CUF_PROFILES = 0x360055, - SMSG_LOAD_EQUIPMENT_SET = 0x3601AC, - SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x360312, - SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x360313, - SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x360314, - SMSG_LOBBY_MATCHMAKER_QUEUE_PROPOSED = 0x360316, - SMSG_LOBBY_MATCHMAKER_QUEUE_RESULT = 0x360317, - SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x360315, - SMSG_LOGIN_SET_TIME_SPEED = 0x3601AB, - SMSG_LOGIN_VERIFY_WORLD = 0x36002F, - SMSG_LOGOUT_CANCEL_ACK = 0x360124, - SMSG_LOGOUT_COMPLETE = 0x360123, - SMSG_LOGOUT_RESPONSE = 0x360122, - SMSG_LOG_XP_GAIN = 0x360182, - SMSG_LOOT_ALL_PASSED = 0x3600BE, - SMSG_LOOT_LIST = 0x3601DD, - SMSG_LOOT_MONEY_NOTIFY = 0x3600B9, - SMSG_LOOT_RELEASE = 0x3600B8, - SMSG_LOOT_RELEASE_ALL = 0x3600B7, - SMSG_LOOT_REMOVED = 0x3600B3, - SMSG_LOOT_RESPONSE = 0x3600B2, - SMSG_LOOT_ROLL = 0x3600BB, - SMSG_LOOT_ROLLS_COMPLETE = 0x3600BD, - SMSG_LOOT_ROLL_WON = 0x3600BF, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x36010E, - SMSG_MAIL_COMMAND_RESULT = 0x3600D8, - SMSG_MAIL_LIST_RESULT = 0x3601F2, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x3601F3, - SMSG_MAP_OBJECTIVES_INIT = 0x3C002A, - SMSG_MAP_OBJ_EVENTS = 0x36005F, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x3600BC, - SMSG_MEETING_STONE_FAILED = 0x360318, - SMSG_MESSAGE_BOX = 0x36000A, - SMSG_MINIMAP_PING = 0x36016C, - SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x4D0004, - SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x4D0003, - SMSG_MIRROR_VARS = 0x360359, - SMSG_MISSILE_CANCEL = 0x360060, - SMSG_MODIFY_COOLDOWN = 0x360200, - SMSG_MOTD = 0x3B0003, - SMSG_MOUNT_RESULT = 0x36000F, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x3602C7, - SMSG_MOVE_ADD_IMPULSE = 0x480062, - SMSG_MOVE_APPLY_INERTIA = 0x48005E, - SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x480045, - SMSG_MOVE_DISABLE_COLLISION = 0x480041, - SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x48002B, - SMSG_MOVE_DISABLE_FULL_SPEED_TURNING = 0x480075, - SMSG_MOVE_DISABLE_GRAVITY = 0x48003D, - SMSG_MOVE_DISABLE_INERTIA = 0x48003F, - SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x48003C, - SMSG_MOVE_ENABLE_COLLISION = 0x480042, - SMSG_MOVE_ENABLE_DOUBLE_JUMP = 0x48002A, - SMSG_MOVE_ENABLE_FULL_SPEED_TURNING = 0x480074, - SMSG_MOVE_ENABLE_GRAVITY = 0x48003E, - SMSG_MOVE_ENABLE_INERTIA = 0x480040, - SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x48003B, - SMSG_MOVE_KNOCK_BACK = 0x480031, - SMSG_MOVE_REMOVE_INERTIA = 0x48005F, - SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x480046, - SMSG_MOVE_ROOT = 0x480027, - SMSG_MOVE_SET_ACTIVE_MOVER = 0x480003, - SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x48006B, - SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x480066, - SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x48006C, - SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x480069, - SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x48006A, - SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x480072, - SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x480068, - SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x480067, - SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x480071, - SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x48006D, - SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x48006E, - SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x480070, - SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x48006F, - SMSG_MOVE_SET_CANT_SWIM = 0x480035, - SMSG_MOVE_SET_CAN_ADV_FLY = 0x480064, - SMSG_MOVE_SET_CAN_DRIVE = 0x480076, - SMSG_MOVE_SET_CAN_FLY = 0x480033, - SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x480037, - SMSG_MOVE_SET_COLLISION_HEIGHT = 0x480043, - SMSG_MOVE_SET_COMPOUND_STATE = 0x480047, - SMSG_MOVE_SET_FEATHER_FALL = 0x48002D, - SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x480023, - SMSG_MOVE_SET_FLIGHT_SPEED = 0x480022, - SMSG_MOVE_SET_HOVERING = 0x48002F, - SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x480039, - SMSG_MOVE_SET_LAND_WALK = 0x48002C, - SMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x480014, - SMSG_MOVE_SET_NORMAL_FALL = 0x48002E, - SMSG_MOVE_SET_PITCH_RATE = 0x480026, - SMSG_MOVE_SET_RUN_BACK_SPEED = 0x48001F, - SMSG_MOVE_SET_RUN_SPEED = 0x48001E, - SMSG_MOVE_SET_SWIM_BACK_SPEED = 0x480021, - SMSG_MOVE_SET_SWIM_SPEED = 0x480020, - SMSG_MOVE_SET_TURN_RATE = 0x480025, - SMSG_MOVE_SET_VEHICLE_REC_ID = 0x480044, - SMSG_MOVE_SET_WALK_SPEED = 0x480024, - SMSG_MOVE_SET_WATER_WALK = 0x480029, - SMSG_MOVE_SKIP_TIME = 0x480048, - SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x48004D, - SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x48004B, - SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x48004E, - SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x48004C, - SMSG_MOVE_SPLINE_ROOT = 0x480049, - SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x48004F, - SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED = 0x48001A, - SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED = 0x480019, - SMSG_MOVE_SPLINE_SET_FLYING = 0x480059, - SMSG_MOVE_SPLINE_SET_HOVER = 0x480051, - SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x480054, - SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x480050, - SMSG_MOVE_SPLINE_SET_PITCH_RATE = 0x48001D, - SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED = 0x480016, - SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x480057, - SMSG_MOVE_SPLINE_SET_RUN_SPEED = 0x480015, - SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED = 0x480018, - SMSG_MOVE_SPLINE_SET_SWIM_SPEED = 0x480017, - SMSG_MOVE_SPLINE_SET_TURN_RATE = 0x48001C, - SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x480058, - SMSG_MOVE_SPLINE_SET_WALK_SPEED = 0x48001B, - SMSG_MOVE_SPLINE_SET_WATER_WALK = 0x480053, - SMSG_MOVE_SPLINE_START_SWIM = 0x480055, - SMSG_MOVE_SPLINE_STOP_SWIM = 0x480056, - SMSG_MOVE_SPLINE_UNROOT = 0x48004A, - SMSG_MOVE_SPLINE_UNSET_FLYING = 0x48005A, - SMSG_MOVE_SPLINE_UNSET_HOVER = 0x480052, - SMSG_MOVE_TELEPORT = 0x480032, - SMSG_MOVE_UNROOT = 0x480028, - SMSG_MOVE_UNSET_CANT_SWIM = 0x480036, - SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x480065, - SMSG_MOVE_UNSET_CAN_DRIVE = 0x480077, - SMSG_MOVE_UNSET_CAN_FLY = 0x480034, - SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x480038, - SMSG_MOVE_UNSET_HOVERING = 0x480030, - SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x48003A, - SMSG_MOVE_UPDATE = 0x48000E, - SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x480063, - SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x480060, - SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE = 0x480012, - SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x48000D, - SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x48000A, - SMSG_MOVE_UPDATE_FLIGHT_SPEED = 0x480009, - SMSG_MOVE_UPDATE_KNOCK_BACK = 0x480010, - SMSG_MOVE_UPDATE_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x480011, - SMSG_MOVE_UPDATE_PITCH_RATE = 0x48000C, - SMSG_MOVE_UPDATE_REMOVE_INERTIA = 0x480061, - SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x480013, - SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x480005, - SMSG_MOVE_UPDATE_RUN_SPEED = 0x480004, - SMSG_MOVE_UPDATE_SWIM_BACK_SPEED = 0x480008, - SMSG_MOVE_UPDATE_SWIM_SPEED = 0x480007, - SMSG_MOVE_UPDATE_TELEPORT = 0x48000F, - SMSG_MOVE_UPDATE_TURN_RATE = 0x48000B, - SMSG_MOVE_UPDATE_WALK_SPEED = 0x480006, - SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x360276, - SMSG_MULTI_FLOOR_NEW_FLOOR = 0x360275, - SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x3600A8, - SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x3600AA, - SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x3600AF, - SMSG_MYTHIC_PLUS_SEASON_DATA = 0x3600A9, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x360074, - SMSG_NEW_DATA_BUILD = 0x36033C, - SMSG_NEW_TAXI_PATH = 0x36011D, - SMSG_NEW_WORLD = 0x36002B, - SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x4D0034, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x360149, - SMSG_NOTIFY_MONEY = 0x360031, - SMSG_NOTIFY_RECEIVED_MAIL = 0x3600D9, - SMSG_NPC_INTERACTION_OPEN_RESULT = 0x36030E, - SMSG_OFFER_PETITION_ERROR = 0x360154, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x360183, - SMSG_ON_MONSTER_MOVE = 0x480002, - SMSG_OPEN_ARTIFACT_FORGE = 0x36023A, - SMSG_OPEN_CONTAINER = 0x4E0006, - SMSG_OPEN_LFG_DUNGEON_FINDER = 0x440015, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x360232, - SMSG_OVERRIDE_LIGHT = 0x360159, - SMSG_PAGE_TEXT = 0x3601B7, - SMSG_PARTY_COMMAND_RESULT = 0x36022C, - SMSG_PARTY_ELIGIBILITY_FOR_DELVE_TIERS_RESPONSE = 0x360351, - SMSG_PARTY_INVITE = 0x360056, - SMSG_PARTY_KILL_LOG = 0x3601F6, - SMSG_PARTY_MEMBER_FULL_STATE = 0x3601F5, - SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x3601F4, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x3602F7, - SMSG_PARTY_UPDATE = 0x36008C, - SMSG_PAST_TIME_EVENTS = 0x36005B, - SMSG_PAUSE_MIRROR_TIMER = 0x3601AE, - SMSG_PENDING_RAID_LOCK = 0x360195, - SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x36030B, - SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x360307, - SMSG_PERKS_PROGRAM_DISABLED = 0x36030C, - SMSG_PERKS_PROGRAM_RESULT = 0x360308, - SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x360306, - SMSG_PETITION_ALREADY_SIGNED = 0x360037, - SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x420042, - SMSG_PETITION_SHOW_LIST = 0x36015C, - SMSG_PETITION_SHOW_SIGNATURES = 0x36015D, - SMSG_PETITION_SIGN_RESULTS = 0x3601E8, - SMSG_PET_ACTION_FEEDBACK = 0x3601E5, - SMSG_PET_ACTION_SOUND = 0x36013F, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x36009E, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x360113, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x360097, - SMSG_PET_BATTLE_FINAL_ROUND = 0x36009C, - SMSG_PET_BATTLE_FINISHED = 0x36009D, - SMSG_PET_BATTLE_FIRST_ROUND = 0x360099, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x360098, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x36009F, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x360096, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x3600D6, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x3600D7, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x36009B, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x360095, - SMSG_PET_BATTLE_ROUND_RESULT = 0x36009A, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x360084, - SMSG_PET_CAST_FAILED = 0x4D0049, - SMSG_PET_CLEAR_SPELLS = 0x4D0013, - SMSG_PET_DISMISS_SOUND = 0x360140, - SMSG_PET_GOD_MODE = 0x36011A, - SMSG_PET_GUIDS = 0x3601A1, - SMSG_PET_LEARNED_SPELLS = 0x4D0040, - SMSG_PET_MODE = 0x36001F, - SMSG_PET_NAME_INVALID = 0x360161, - SMSG_PET_NEWLY_TAMED = 0x36001E, - SMSG_PET_SPELLS_MESSAGE = 0x4D0014, - SMSG_PET_STABLE_RESULT = 0x36002A, - SMSG_PET_TAME_FAILURE = 0x360151, - SMSG_PET_UNLEARNED_SPELLS = 0x4D0041, - SMSG_PHASE_SHIFT_CHANGE = 0x36000C, - SMSG_PLAYED_TIME = 0x360173, - SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x4A002D, - SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x4A001F, - SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x4A001E, - SMSG_PLAYER_BONUS_ROLL_FAILED = 0x4A0021, - SMSG_PLAYER_BOUND = 0x4A0000, - SMSG_PLAYER_CHOICE_CLEAR = 0x4A0006, - SMSG_PLAYER_CHOICE_DISPLAY_ERROR = 0x4A0005, - SMSG_PLAYER_CONDITION_RESULT = 0x4A0012, - SMSG_PLAYER_END_OF_MATCH_DETAILS = 0x4A002F, - SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x4A002C, - SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x4A0011, - SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x4A0016, - SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x420041, - SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x4A002E, - SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x4A002B, - SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x4A0029, - SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x4A002A, - SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x4A0024, - SMSG_PLAYER_SKINNED = 0x4A000E, - SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x4A0015, - SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x4A0014, - SMSG_PLAY_MUSIC = 0x360205, - SMSG_PLAY_OBJECT_SOUND = 0x360207, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x3601CD, - SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x4D0038, - SMSG_PLAY_SCENE = 0x3600D3, - SMSG_PLAY_SOUND = 0x360204, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x360208, - SMSG_PLAY_SPELL_VISUAL = 0x4D0036, - SMSG_PLAY_SPELL_VISUAL_KIT = 0x4D003A, - SMSG_PLAY_TIME_WARNING = 0x36019B, - SMSG_PONG = 0x3D0006, - SMSG_POWER_UPDATE = 0x360170, - SMSG_PRELOAD_CHILD_MAP = 0x36000D, - SMSG_PRELOAD_WORLD = 0x36002C, - SMSG_PREPOPULATE_NAME_CACHE = 0x3602CA, - SMSG_PRE_RESSURECT = 0x360203, - SMSG_PRINT_NOTIFICATION = 0x360063, - SMSG_PROC_RESIST = 0x3601F7, - SMSG_PROFESSION_GOSSIP = 0x360296, - SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x4D0042, - SMSG_PVP_CREDIT = 0x3C0024, - SMSG_PVP_MATCH_COMPLETE = 0x3C002F, - SMSG_PVP_MATCH_INITIALIZE = 0x3C0030, - SMSG_PVP_MATCH_SET_STATE = 0x3C002E, - SMSG_PVP_MATCH_START = 0x3C002D, - SMSG_PVP_MATCH_STATISTICS = 0x3C0010, - SMSG_PVP_OPTIONS_ENABLED = 0x3C0013, - SMSG_PVP_TIER_RECORD = 0x360302, - SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x3A000C, - SMSG_QUERY_CREATURE_RESPONSE = 0x3A0006, - SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x3A0007, - SMSG_QUERY_GARRISON_PET_NAME_RESPONSE = 0x400041, - SMSG_QUERY_GUILD_FOLLOW_INFO_RESPONSE = 0x42002F, - SMSG_QUERY_GUILD_INFO_RESPONSE = 0x42002D, - SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x3A0010, - SMSG_QUERY_NPC_TEXT_RESPONSE = 0x3A0008, - SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x3A0009, - SMSG_QUERY_PETITION_RESPONSE = 0x3A000D, - SMSG_QUERY_PET_NAME_RESPONSE = 0x3A000B, - SMSG_QUERY_PLAYER_NAMES_RESPONSE = 0x4A0026, - SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x4A000A, - SMSG_QUERY_QUEST_INFO_RESPONSE = 0x4B0016, - SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x42002E, - SMSG_QUERY_TIME_RESPONSE = 0x360181, - SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x4B0001, - SMSG_QUEST_CONFIRM_ACCEPT = 0x4B000F, - SMSG_QUEST_FORCE_REMOVED = 0x4B001C, - SMSG_QUEST_GIVER_INVALID_QUEST = 0x4B0005, - SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE = 0x4B0014, - SMSG_QUEST_GIVER_QUEST_COMPLETE = 0x4B0003, - SMSG_QUEST_GIVER_QUEST_DETAILS = 0x4B0012, - SMSG_QUEST_GIVER_QUEST_FAILED = 0x4B0006, - SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x4B001A, - SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x4B0013, - SMSG_QUEST_GIVER_STATUS = 0x4B001B, - SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x4B0011, - SMSG_QUEST_ITEM_USABILITY_RESPONSE = 0x4B0002, - SMSG_QUEST_LOG_FULL = 0x4B0007, - SMSG_QUEST_NON_LOG_UPDATE_COMPLETE = 0x4B0008, - SMSG_QUEST_POI_QUERY_RESPONSE = 0x4B001D, - SMSG_QUEST_POI_UPDATE_RESPONSE = 0x4B001F, - SMSG_QUEST_PUSH_RESULT = 0x4B0010, - SMSG_QUEST_SESSION_INFO_RESPONSE = 0x3602ED, - SMSG_QUEST_SESSION_READY_CHECK = 0x3602DB, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x3602DC, - SMSG_QUEST_SESSION_RESULT = 0x3602DA, - SMSG_QUEST_UPDATE_ADD_CREDIT = 0x4B000C, - SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x4B000D, - SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x4B000E, - SMSG_QUEST_UPDATE_COMPLETE = 0x4B0009, - SMSG_QUEST_UPDATE_FAILED = 0x4B000A, - SMSG_QUEST_UPDATE_FAILED_TIMER = 0x4B000B, - SMSG_QUEUE_SUMMARY_UPDATE = 0x3602A9, - SMSG_RAF_ACCOUNT_INFO = 0x3602D8, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x3602E9, - SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x360339, - SMSG_RAID_DIFFICULTY_SET = 0x360244, - SMSG_RAID_GROUP_ONLY = 0x360246, - SMSG_RAID_INSTANCE_MESSAGE = 0x3B000A, - SMSG_RAID_MARKERS_CHANGED = 0x360038, - SMSG_RANDOM_ROLL = 0x3600CD, - SMSG_RATED_PVP_INFO = 0x3C000F, - SMSG_READY_CHECK_COMPLETED = 0x360090, - SMSG_READY_CHECK_RESPONSE = 0x36008F, - SMSG_READY_CHECK_STARTED = 0x36008E, - SMSG_READ_ITEM_RESULT_FAILED = 0x360240, - SMSG_READ_ITEM_RESULT_OK = 0x360237, - SMSG_REALM_QUERY_RESPONSE = 0x3A0005, - SMSG_REATTACH_RESURRECT = 0x3601E7, - SMSG_RECEIVE_PING_UNIT = 0x360039, - SMSG_RECEIVE_PING_WORLD_POINT = 0x36003A, - SMSG_RECENT_ALLY_DATA_RESPONSE = 0x360354, - SMSG_RECENT_ALLY_NOTE_UPDATED = 0x360355, - SMSG_RECRAFT_ITEM_RESULT = 0x36032F, - SMSG_RECRUIT_A_FRIEND_FAILURE = 0x36015E, - SMSG_REFRESH_COMPONENT = 0x3600ED, - SMSG_REGIONWIDE_CHARACTER_MAIL_DATA = 0x36001A, - SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA = 0x360019, - SMSG_REMOVE_ITEM_PASSIVE = 0x360043, - SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x4D0043, - SMSG_REPLACE_TROPHY_RESPONSE = 0x36025C, - SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x4A0009, - SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x360025, - SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x3C0014, - SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x3C0015, - SMSG_RESET_COMPRESSION_CONTEXT = 0x3D0007, - SMSG_RESET_FAILED_NOTIFY = 0x360155, - SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x360336, - SMSG_RESET_QUEST_POI = 0x4B0020, - SMSG_RESET_RANGED_COMBAT_TIMER = 0x3C0023, - SMSG_RESET_WEEKLY_CURRENCY = 0x360009, - SMSG_RESPEC_WIPE_CONFIRM = 0x3600B0, - SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x360006, - SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x360309, - SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x36030A, - SMSG_RESTART_GLOBAL_COOLDOWN = 0x4D0052, - SMSG_RESTRICTED_ACCOUNT_WARNING = 0x360052, - SMSG_RESUME_CAST = 0x4D002C, - SMSG_RESUME_CAST_BAR = 0x4D002F, - SMSG_RESUME_COMMS = 0x3D0003, - SMSG_RESUME_TOKEN = 0x360041, - SMSG_RESURRECT_REQUEST = 0x360012, - SMSG_RESYNC_RUNES = 0x4D0050, - SMSG_RETURNING_PLAYER_PROMPT = 0x36023F, - SMSG_RETURN_APPLICANT_LIST = 0x3602CE, - SMSG_RETURN_RECRUITING_CLUBS = 0x3602CD, - SMSG_ROLE_CHANGED_INFORM = 0x360021, - SMSG_ROLE_CHOSEN = 0x44001D, - SMSG_ROLE_POLL_INFORM = 0x360022, - SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x360295, - SMSG_RUNE_REGEN_DEBUG = 0x36004F, - SMSG_SCENARIO_COMPLETED = 0x360283, - SMSG_SCENARIO_POIS = 0x3600D0, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x3600C9, - SMSG_SCENARIO_SHOW_CRITERIA = 0x360299, - SMSG_SCENARIO_STATE = 0x3600C8, - SMSG_SCENARIO_UI_UPDATE = 0x360298, - SMSG_SCENARIO_VACATE = 0x360241, - SMSG_SCENE_OBJECT_EVENT = 0x36007A, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x36007F, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x360080, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x36007C, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x36007B, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x36007E, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x36007D, - SMSG_SCHEDULED_AREA_POI_UPDATE_RESPONSE = 0x4A0019, - SMSG_SCRIPT_CAST = 0x4D0047, - SMSG_SEASON_INFO = 0x36005A, - SMSG_SELL_RESPONSE = 0x360162, - SMSG_SEND_ITEM_PASSIVES = 0x360044, - SMSG_SEND_KNOWN_SPELLS = 0x4D0019, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x3600CB, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x3600CC, - SMSG_SEND_SPELL_CHARGES = 0x4D001B, - SMSG_SEND_SPELL_HISTORY = 0x4D001A, - SMSG_SEND_UNLEARN_SPELLS = 0x4D001C, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x3600EA, - SMSG_SERVER_TIME = 0x360121, - SMSG_SERVER_TIME_OFFSET = 0x3601B2, - SMSG_SETUP_COMBAT_LOG_FILE_FLUSH = 0x4D000F, - SMSG_SETUP_CURRENCY = 0x360007, - SMSG_SET_AI_ANIM_KIT = 0x3601CC, - SMSG_SET_ANIM_TIER = 0x3601D0, - SMSG_SET_CHR_UPGRADE_TIER = 0x360077, - SMSG_SET_CURRENCY = 0x360008, - SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x440012, - SMSG_SET_DUNGEON_DIFFICULTY = 0x360143, - SMSG_SET_FACTION_AT_WAR = 0x36019D, - SMSG_SET_FACTION_NOT_VISIBLE = 0x3601C7, - SMSG_SET_FACTION_STANDING = 0x3601C8, - SMSG_SET_FACTION_VISIBLE = 0x3601C6, - SMSG_SET_FLAT_SPELL_MODIFIER = 0x4D0027, - SMSG_SET_INSTANCE_LEAVER = 0x36035A, - SMSG_SET_ITEM_PURCHASE_DATA = 0x360033, - SMSG_SET_LOOT_METHOD_FAILED = 0x360267, - SMSG_SET_MAX_WEEKLY_QUANTITY = 0x360036, - SMSG_SET_MELEE_ANIM_KIT = 0x3601CF, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x3601CE, - SMSG_SET_PCT_SPELL_MODIFIER = 0x4D0028, - SMSG_SET_PET_SPECIALIZATION = 0x3600C2, - SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x4A000B, - SMSG_SET_PLAY_HOVER_ANIM = 0x360053, - SMSG_SET_PROFICIENCY = 0x3601D1, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x3602E1, - SMSG_SET_SHIPMENT_READY_RESPONSE = 0x40003A, - SMSG_SET_SPELL_CHARGES = 0x4D0018, - SMSG_SET_TIME_ZONE_INFORMATION = 0x360116, - SMSG_SET_VEHICLE_REC_ID = 0x360194, - SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x36030D, - SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x40003B, - SMSG_SHOW_DELVES_COMPANION_CONFIGURATION_UI = 0x36034F, - SMSG_SHOW_DELVES_DISPLAY_UI = 0x36034D, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x360073, - SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x4B0015, - SMSG_SHOW_TAXI_NODES = 0x36016B, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x36020D, - SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x360319, - SMSG_SOCKET_GEMS_FAILURE = 0x3601C4, - SMSG_SOCKET_GEMS_SUCCESS = 0x3601C3, - SMSG_SPECIAL_MOUNT_ANIM = 0x36013E, - SMSG_SPECTATE_END = 0x36033B, - SMSG_SPECTATE_PLAYER = 0x36033A, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x3601B6, - SMSG_SPELL_ABSORB_LOG = 0x4D000C, - SMSG_SPELL_CATEGORY_COOLDOWN = 0x4D0006, - SMSG_SPELL_CHANNEL_START = 0x4D0022, - SMSG_SPELL_CHANNEL_UPDATE = 0x4D0023, - SMSG_SPELL_COOLDOWN = 0x4D0005, - SMSG_SPELL_DAMAGE_SHIELD = 0x4D001F, - SMSG_SPELL_DELAYED = 0x4D0030, - SMSG_SPELL_DISPELL_LOG = 0x4D0007, - SMSG_SPELL_EMPOWER_SET_STAGE = 0x4D0026, - SMSG_SPELL_EMPOWER_START = 0x4D0024, - SMSG_SPELL_EMPOWER_UPDATE = 0x4D0025, - SMSG_SPELL_ENERGIZE_LOG = 0x4D0009, - SMSG_SPELL_EXECUTE_LOG = 0x4D0031, - SMSG_SPELL_FAILED_OTHER = 0x4D0046, - SMSG_SPELL_FAILURE = 0x4D0044, - SMSG_SPELL_FAILURE_MESSAGE = 0x4D004B, - SMSG_SPELL_GO = 0x4D002A, - SMSG_SPELL_HEAL_ABSORB_LOG = 0x4D000B, - SMSG_SPELL_HEAL_LOG = 0x4D000A, - SMSG_SPELL_INSTAKILL_LOG = 0x4D0021, - SMSG_SPELL_INTERRUPT_LOG = 0x4D000D, - SMSG_SPELL_MISS_LOG = 0x4D0032, - SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x4D0020, - SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x4D001D, - SMSG_SPELL_PERIODIC_AURA_LOG = 0x4D0008, - SMSG_SPELL_PREPARE = 0x4D0029, - SMSG_SPELL_START = 0x4D002B, - SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x360065, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x3602F3, - SMSG_STAND_STATE_UPDATE = 0x3601BA, - SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x36006B, - SMSG_START_ELAPSED_TIMER = 0x3600A0, - SMSG_START_ELAPSED_TIMERS = 0x3600A2, - SMSG_START_LIGHTNING_STORM = 0x360146, - SMSG_START_LOOT_ROLL = 0x3600BA, - SMSG_START_MIRROR_TIMER = 0x3601AD, - SMSG_START_TIMER = 0x36003D, - SMSG_STOP_ELAPSED_TIMER = 0x3600A1, - SMSG_STOP_MIRROR_TIMER = 0x3601AF, - SMSG_STOP_SPEAKERBOT_SOUND = 0x360209, - SMSG_STOP_TIMER = 0x36003E, - SMSG_STREAMING_MOVIES = 0x36003C, - SMSG_SUGGEST_INVITE_INFORM = 0x36022D, - SMSG_SUMMON_CANCEL = 0x36014F, - SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x360023, - SMSG_SUMMON_REQUEST = 0x3601BE, - SMSG_SUPERCEDED_SPELLS = 0x4D003D, - SMSG_SURVEY_DELIVERED = 0x360357, - SMSG_SUSPEND_COMMS = 0x3D0002, - SMSG_SUSPEND_TOKEN = 0x360040, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x3602EB, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x3601B5, - SMSG_TAXI_NODE_STATUS = 0x36011B, - SMSG_TEXT_EMOTE = 0x360119, - SMSG_THREAT_CLEAR = 0x36017A, - SMSG_THREAT_REMOVE = 0x360179, - SMSG_THREAT_UPDATE = 0x360178, - SMSG_TIMERUNNING_SEASON_ENDED = 0x360350, - SMSG_TIME_ADJUSTMENT = 0x480001, - SMSG_TIME_SYNC_REQUEST = 0x480000, - SMSG_TITLE_EARNED = 0x360175, - SMSG_TITLE_LOST = 0x360176, - SMSG_TOTEM_CREATED = 0x360165, - SMSG_TOTEM_DURATION_CHANGED = 0x360167, - SMSG_TOTEM_MOVED = 0x360168, - SMSG_TOTEM_REMOVED = 0x360166, - SMSG_TRADE_STATUS = 0x360017, - SMSG_TRADE_UPDATED = 0x360016, - SMSG_TRAINER_BUY_FAILED = 0x36017D, - SMSG_TRAINER_LIST = 0x36017C, - SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x36006A, - SMSG_TRANSFER_ABORTED = 0x3601A0, - SMSG_TRANSFER_PENDING = 0x360066, - SMSG_TREASURE_PICKER_RESPONSE = 0x3A0011, - SMSG_TRIGGER_CINEMATIC = 0x360261, - SMSG_TRIGGER_MOVIE = 0x360169, - SMSG_TURN_IN_PETITION_RESULT = 0x3601EA, - SMSG_TUTORIAL_FLAGS = 0x360255, - SMSG_UI_ACTION = 0x360206, - SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x4B0023, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x360262, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x360263, - SMSG_UNLEARNED_SPELLS = 0x4D003F, - SMSG_UNLOAD_CHILD_MAP = 0x36000E, - SMSG_UNSET_INSTANCE_LEAVER = 0x36035B, - SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x360303, - SMSG_UPDATE_ACCOUNT_DATA = 0x3601A6, - SMSG_UPDATE_ACCOUNT_DATA_COMPLETE = 0x3601A7, - SMSG_UPDATE_ACTION_BUTTONS = 0x360078, - SMSG_UPDATE_BNET_SESSION_KEY = 0x3602BB, - SMSG_UPDATE_CAPTURE_POINT = 0x3C0007, - SMSG_UPDATE_CELESTIAL_BODY = 0x3602B7, - SMSG_UPDATE_CHARACTER_FLAGS = 0x36025B, - SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x360202, - SMSG_UPDATE_COOLDOWN = 0x360201, - SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x400038, - SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x400021, - SMSG_UPDATE_EXPANSION_LEVEL = 0x3600E3, - SMSG_UPDATE_GAME_TIME_STATE = 0x3602BE, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x360148, - SMSG_UPDATE_LAST_INSTANCE = 0x360127, - SMSG_UPDATE_OBJECT = 0x460000, - SMSG_UPDATE_PRIMARY_SPEC = 0x360070, - SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x36008D, - SMSG_UPDATE_TALENT_DATA = 0x36006F, - SMSG_UPDATE_WORLD_STATE = 0x3601E4, - SMSG_USERLIST_ADD = 0x3B000F, - SMSG_USERLIST_REMOVE = 0x3B0010, - SMSG_USERLIST_UPDATE = 0x3B0011, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x3601EB, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x3602B2, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x3602B0, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x3602AF, - SMSG_VAS_PURCHASE_COMPLETE = 0x360289, - SMSG_VAS_PURCHASE_STATE_UPDATE = 0x360288, - SMSG_VENDOR_INVENTORY = 0x360051, - SMSG_VIGNETTE_UPDATE = 0x4A0010, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x3602B6, - SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x3602FE, - SMSG_VOICE_LOGIN_RESPONSE = 0x3602B5, - SMSG_VOID_ITEM_SWAP_RESPONSE = 0x4E0004, - SMSG_VOID_STORAGE_CONTENTS = 0x4E0001, - SMSG_VOID_STORAGE_FAILED = 0x4E0000, - SMSG_VOID_STORAGE_TRANSFER_CHANGES = 0x4E0002, - SMSG_VOID_TRANSFER_RESULT = 0x4E0003, - SMSG_WAIT_QUEUE_FINISH = 0x360003, - SMSG_WAIT_QUEUE_UPDATE = 0x360002, - SMSG_WARDEN3_DATA = 0x36000B, - SMSG_WARDEN3_DISABLED = 0x3602B9, - SMSG_WARDEN3_ENABLED = 0x3602B8, - SMSG_WARFRONT_COMPLETE = 0x3601FA, - SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x3C0012, - SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x3C0011, - SMSG_WEATHER = 0x360145, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x3602F6, - SMSG_WEEKLY_REWARDS_RESULT = 0x3602F4, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x3602F5, - SMSG_WHO = 0x3B0002, - SMSG_WHO_IS = 0x360144, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x3602BD, - SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x4A0017, - SMSG_WORLD_SERVER_INFO = 0x360045, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x3602EC, - SMSG_WOW_LABS_AREA_INFO = 0x36031E, - SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x36031A, - SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x36031B, - SMSG_WOW_LABS_PARTY_ERROR = 0x360327, - SMSG_WOW_LABS_SET_AREA_ID_RESULT = 0x36031C, - SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x360320, - SMSG_WOW_LABS_SET_SELECTED_AREA_ID = 0x36031D, - SMSG_XP_AWARDED_FROM_CURRENCY = 0x360335, - SMSG_XP_GAIN_ABORTED = 0x360062, - SMSG_XP_GAIN_ENABLED = 0x360245, - SMSG_ZONE_UNDER_ATTACK = 0x3B000B, - - // Opcodes that are not generated automatically - SMSG_ACCOUNT_HEIRLOOM_UPDATE = SMSG_ACCOUNT_TOY_UPDATE + 1, // no client handler - SMSG_COMPRESSED_PACKET = SMSG_AUTH_CHALLENGE + 0xA, - SMSG_MULTIPLE_PACKETS = SMSG_AUTH_CHALLENGE + 0x9, + SMSG_ABORT_NEW_WORLD = 0x400030, + SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS = 0x40034B, + SMSG_ACCOUNT_CONVERSION_STATE_UPDATE = 0x400350, + SMSG_ACCOUNT_COSMETIC_ADDED = 0x400304, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x4002EC, + SMSG_ACCOUNT_DATA_TIMES = 0x4001AD, + SMSG_ACCOUNT_EXPORT_RESPONSE = 0x40033C, + SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0x400049, + SMSG_ACCOUNT_HOUSING_FIXTURE_ADDED = 0x400050, + SMSG_ACCOUNT_HOUSING_ROOM_ADDED = 0x40004F, + SMSG_ACCOUNT_HOUSING_ROOM_COMPONENT_TEXTURE_ADDED = 0x400052, + SMSG_ACCOUNT_HOUSING_THEME_ADDED = 0x400051, + SMSG_ACCOUNT_ITEM_COLLECTION_DATA = 0x400356, + SMSG_ACCOUNT_MOUNT_REMOVED = 0x400047, + SMSG_ACCOUNT_MOUNT_UPDATE = 0x400046, + SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x400303, + SMSG_ACCOUNT_STORE_CURRENCY_UPDATE = 0x400325, + SMSG_ACCOUNT_STORE_FRONT_UPDATE = 0x400326, + SMSG_ACCOUNT_STORE_ITEM_STATE_CHANGED = 0x400327, + SMSG_ACCOUNT_STORE_RESULT = 0x400328, + SMSG_ACCOUNT_TOY_UPDATE = 0x400048, + SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x40004C, + SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x40004B, + SMSG_ACCOUNT_WARBAND_SCENE_UPDATE = 0x40004E, + SMSG_ACHIEVEMENT_DELETED = 0x40018A, + SMSG_ACHIEVEMENT_EARNED = 0x4000E5, + SMSG_ACTIVATE_ESSENCE_FAILED = 0x5C0021, + SMSG_ACTIVATE_SOULBIND_FAILED = 0x5C0023, + SMSG_ACTIVATE_TAXI_REPLY = 0x400121, + SMSG_ACTIVE_GLYPHS = 0x5F0045, + SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x4001E8, + SMSG_ADDON_LIST_REQUEST = 0x4000E4, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x4000DF, + SMSG_ADD_ITEM_PASSIVE = 0x400042, + SMSG_ADD_LOSS_OF_CONTROL = 0x400114, + SMSG_ADD_RUNE_POWER = 0x40015B, + SMSG_ADJUST_SPLINE_DURATION = 0x40006D, + SMSG_ADVANCED_COMBAT_LOG = 0x400301, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x4002FC, + SMSG_AE_LOOT_TARGETS = 0x4000BA, + SMSG_AE_LOOT_TARGET_ACK = 0x4000BB, + SMSG_AI_REACTION = 0x400158, + SMSG_ALLIED_RACE_DETAILS = 0x400295, + SMSG_ALL_ACCOUNT_CRITERIA = 0x400005, + SMSG_ALL_ACHIEVEMENT_DATA = 0x400004, + SMSG_ALL_GUILD_ACHIEVEMENTS = 0x4C0000, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x4002D9, + SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x40001D, + SMSG_AREA_POI_UPDATE_RESPONSE = 0x5C0019, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x4001E1, + SMSG_AREA_TRIGGER_DENIED = 0x410004, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x4001B9, + SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x410002, + SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x410003, + SMSG_ARENA_CLEAR_OPPONENTS = 0x4000EB, + SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x4000D4, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x4000EA, + SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x400243, + SMSG_ARTIFACT_FORGE_ERROR = 0x400241, + SMSG_ARTIFACT_RESPEC_PROMPT = 0x400242, + SMSG_ARTIFACT_XP_GAIN = 0x400288, + SMSG_ATTACKER_STATE_UPDATE = 0x46002C, + SMSG_ATTACK_START = 0x460017, + SMSG_ATTACK_STOP = 0x460018, + SMSG_ATTACK_SWING_ERROR = 0x460026, + SMSG_ATTACK_SWING_LANDED_LOG = 0x460027, + SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x400271, + SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x400270, + SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x40026F, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x400195, + SMSG_AUCTION_COMMAND_RESULT = 0x400192, + SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x400329, + SMSG_AUCTION_FAVORITE_LIST = 0x4002F3, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x4002EB, + SMSG_AUCTION_HELLO_RESPONSE = 0x400190, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x4002EA, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x4002E6, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x4002E7, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x4002E9, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x400194, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x400196, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x400191, + SMSG_AUCTION_WON_NOTIFICATION = 0x400193, + SMSG_AURA_POINTS_DEPLETED = 0x5F0012, + SMSG_AURA_UPDATE = 0x5F0011, + SMSG_AUTH_CHALLENGE = 0x470000, + SMSG_AUTH_FAILED = 0x400000, + SMSG_AUTH_RESPONSE = 0x400001, + SMSG_AVAILABLE_HOTFIXES = 0x440001, + SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x40032A, + SMSG_BAG_CLEANUP_FINISHED = 0x600007, + SMSG_BARBER_SHOP_RESULT = 0x400160, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x4002CA, + SMSG_BATTLEFIELD_LIST = 0x460005, + SMSG_BATTLEFIELD_PORT_DENIED = 0x46000B, + SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x460001, + SMSG_BATTLEFIELD_STATUS_FAILED = 0x460004, + SMSG_BATTLEFIELD_STATUS_GROUP_PROPOSAL_FAILED = 0x46000E, + SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x460000, + SMSG_BATTLEFIELD_STATUS_NONE = 0x460003, + SMSG_BATTLEFIELD_STATUS_QUEUED = 0x460002, + SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x46000D, + SMSG_BATTLEGROUND_INFO_THROTTLED = 0x46000C, + SMSG_BATTLEGROUND_INIT = 0x460029, + SMSG_BATTLEGROUND_PLAYER_JOINED = 0x460009, + SMSG_BATTLEGROUND_PLAYER_LEFT = 0x46000A, + SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x460006, + SMSG_BATTLEGROUND_POINTS = 0x460028, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x40022B, + SMSG_BATTLENET_CHALLENGE_START = 0x40022A, + SMSG_BATTLENET_NOTIFICATION = 0x4002A1, + SMSG_BATTLENET_RESPONSE = 0x4002A0, + SMSG_BATTLE_NET_CONNECTION_STATUS = 0x4002A2, + SMSG_BATTLE_PAY_ACK_FAILED = 0x400226, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x40021B, + SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x40021C, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x400225, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x400219, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x400218, + SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x400309, + SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x400216, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x400217, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x400215, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x400213, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x400214, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x40021A, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x400224, + SMSG_BATTLE_PAY_START_CHECKOUT = 0x4002BE, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x400222, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x400221, + SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x4002B1, + SMSG_BATTLE_PETS_HEALED = 0x40008F, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x40011C, + SMSG_BATTLE_PET_DELETED = 0x40008C, + SMSG_BATTLE_PET_ERROR = 0x4000DA, + SMSG_BATTLE_PET_JOURNAL = 0x40008B, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x400089, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x40008A, + SMSG_BATTLE_PET_RESTORED = 0x40008E, + SMSG_BATTLE_PET_REVOKED = 0x40008D, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x400087, + SMSG_BATTLE_PET_UPDATES = 0x400086, + SMSG_BIND_POINT_UPDATE = 0x400011, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x4000CA, + SMSG_BLACK_MARKET_OUTBID = 0x4000CB, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x4000C9, + SMSG_BLACK_MARKET_WON = 0x4000CC, + SMSG_BONUS_ROLL_EMPTY = 0x4000E7, + SMSG_BOSS_KILL = 0x46002B, + SMSG_BREAK_TARGET = 0x460016, + SMSG_BROADCAST_ACHIEVEMENT = 0x450012, + SMSG_BROADCAST_SUMMON_CAST = 0x4002CC, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x4002CD, + SMSG_BUY_FAILED = 0x400169, + SMSG_BUY_SUCCEEDED = 0x400168, + SMSG_CACHE_INFO = 0x44000F, + SMSG_CACHE_VERSION = 0x44000E, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x400141, + SMSG_CALENDAR_COMMAND_RESULT = 0x400142, + SMSG_CALENDAR_COMMUNITY_INVITE = 0x400131, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x400139, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x40013A, + SMSG_CALENDAR_INVITE_ADDED = 0x400132, + SMSG_CALENDAR_INVITE_ALERT = 0x400136, + SMSG_CALENDAR_INVITE_NOTES = 0x40013B, + SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x40013C, + SMSG_CALENDAR_INVITE_REMOVED = 0x400133, + SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x400138, + SMSG_CALENDAR_INVITE_STATUS = 0x400134, + SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x400137, + SMSG_CALENDAR_MODERATOR_STATUS = 0x400135, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x40013D, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x40013E, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x40013F, + SMSG_CALENDAR_SEND_CALENDAR = 0x40012F, + SMSG_CALENDAR_SEND_EVENT = 0x400130, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x400140, + SMSG_CAMERA_EFFECT = 0x4001C7, + SMSG_CANCEL_AUTO_REPEAT = 0x400180, + SMSG_CANCEL_COMBAT = 0x460025, + SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x5F0037, + SMSG_CANCEL_PING_PIN = 0x40003B, + SMSG_CANCEL_PRELOAD_WORLD = 0x40002E, + SMSG_CANCEL_SCENE = 0x4000D9, + SMSG_CANCEL_SPELL_VISUAL = 0x5F0035, + SMSG_CANCEL_SPELL_VISUAL_KIT = 0x5F0039, + SMSG_CAN_DUEL_RESULT = 0x460021, + SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x4002B0, + SMSG_CAPTURE_POINT_REMOVED = 0x460008, + SMSG_CAST_FAILED = 0x5F0048, + SMSG_CAS_REFRESH_REMOTE_DATA = 0x40011A, + SMSG_CATALOG_SHOP_LICENSE_DATA = 0x4002B2, + SMSG_CATALOG_SHOP_OBTAIN_LICENSE = 0x40035C, + SMSG_CATALOG_SHOP_OPEN_CHECKOUT_RESULT = 0x400357, + SMSG_CAUTIONARY_CHANNEL_MESSAGE = 0x450009, + SMSG_CAUTIONARY_CHAT_MESSAGE = 0x450008, + SMSG_CHAIN_MISSILE_BOUNCE = 0x400065, + SMSG_CHALLENGE_MODE_COMPLETE = 0x4000AA, + SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x4000AB, + SMSG_CHALLENGE_MODE_REQUEST_LEADERBOARD_RESULT = 0x4000B2, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x4000B1, + SMSG_CHALLENGE_MODE_RESET = 0x4000A9, + SMSG_CHALLENGE_MODE_SET_LEAVER_PENALTY_TIMER = 0x5C0031, + SMSG_CHALLENGE_MODE_START = 0x4000A7, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x4000A8, + SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x5C000D, + SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x4002A3, + SMSG_CHANNEL_LIST = 0x45001B, + SMSG_CHANNEL_NOTIFY = 0x450017, + SMSG_CHANNEL_NOTIFY_JOINED = 0x450019, + SMSG_CHANNEL_NOTIFY_LEFT = 0x45001A, + SMSG_CHANNEL_NOTIFY_NPE_JOINED_BATCH = 0x450018, + SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x40025D, + SMSG_CHARACTER_LOGIN_FAILED = 0x4001A7, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x400229, + SMSG_CHARACTER_RENAME_RESULT = 0x400204, + SMSG_CHARACTER_UPGRADE_ABORTED = 0x40025C, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x40025B, + SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x40025E, + SMSG_CHARACTER_UPGRADE_STARTED = 0x40025A, + SMSG_CHAR_CUSTOMIZE_FAILURE = 0x400184, + SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x400185, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x400247, + SMSG_CHAT = 0x450001, + SMSG_CHAT_AUTO_RESPONDED = 0x45000E, + SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x450022, + SMSG_CHAT_DOWN = 0x450014, + SMSG_CHAT_IGNORED_ACCOUNT_MUTED = 0x450000, + SMSG_CHAT_IS_DOWN = 0x450015, + SMSG_CHAT_NOT_IN_GUILD = 0x450023, + SMSG_CHAT_NOT_IN_PARTY = 0x450006, + SMSG_CHAT_PLAYER_AMBIGUOUS = 0x450004, + SMSG_CHAT_PLAYER_NOTFOUND = 0x45000D, + SMSG_CHAT_RECONNECT = 0x450016, + SMSG_CHAT_REGIONAL_SERVICE_STATUS = 0x45001D, + SMSG_CHAT_RESTRICTED = 0x450007, + SMSG_CHAT_SERVER_MESSAGE = 0x45001C, + SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x5F0002, + SMSG_CHECK_ABANDON_NPE = 0x5C0024, + SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x40001B, + SMSG_CHECK_WARGAME_ENTRY = 0x400027, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x4002F6, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x4002DD, + SMSG_CLEAR_ALL_SPELL_CHARGES = 0x5F0016, + SMSG_CLEAR_BOSS_EMOTES = 0x400058, + SMSG_CLEAR_COOLDOWN = 0x40015D, + SMSG_CLEAR_COOLDOWNS = 0x5F0015, + SMSG_CLEAR_RESURRECT = 0x400013, + SMSG_CLEAR_SPELL_CHARGES = 0x5F0017, + SMSG_CLEAR_TARGET = 0x460022, + SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x5D0022, + SMSG_CLOSE_ARTIFACT_FORGE = 0x400240, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x4002D5, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x4002D8, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x4002D6, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x4002D3, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x4002D7, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x4002D4, + SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x400315, + SMSG_COIN_REMOVED = 0x4000B9, + SMSG_COMBAT_EVENT_FAILED = 0x460019, + SMSG_COMMENTATOR_MAP_INFO = 0x4001A9, + SMSG_COMMENTATOR_PLAYER_INFO = 0x4001AA, + SMSG_COMMENTATOR_STATE_CHANGED = 0x4001A8, + SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x40026C, + SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x400278, + SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x40026E, + SMSG_COMMERCE_TOKEN_UPDATE = 0x40026D, + SMSG_COMPLAINT_RESULT = 0x40014F, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x400239, + SMSG_COMPRESSED_PACKET = 0x47000C, + SMSG_CONFIRM_PARTY_INVITE = 0x4002AF, + SMSG_CONNECT_TO = 0x470007, + SMSG_CONSOLE_WRITE = 0x4000D7, + SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x400274, + SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x400273, + SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x400272, + SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x400276, + SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x400277, + SMSG_CONTACT_LIST = 0x400227, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x4002B7, + SMSG_CONTROL_UPDATE = 0x4000E9, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x4002FF, + SMSG_COOLDOWN_CHEAT = 0x4001DA, + SMSG_COOLDOWN_EVENT = 0x40015C, + SMSG_CORPSE_LOCATION = 0x4000F0, + SMSG_CORPSE_RECLAIM_DELAY = 0x4001EB, + SMSG_CORPSE_TRANSPORT_QUERY = 0x4001B5, + SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x5D0024, + SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x400298, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x400300, + SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x400336, + SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x400332, + SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x40032E, + SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x400330, + SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x40032C, + SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x400331, + SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x40032D, + SMSG_CRAFTING_ORDER_NPC_REWARD_INFO = 0x400338, + SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x400334, + SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x40032F, + SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x400337, + SMSG_CRAFT_ENCHANT_RESULT = 0x400335, + SMSG_CREATE_CHAR = 0x4001A3, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x400238, + SMSG_CREATOR_VISUALS_OVERRIDE = 0x40033B, + SMSG_CRITERIA_DELETED = 0x400189, + SMSG_CRITERIA_UPDATE = 0x400183, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x400164, + SMSG_CURRENCY_TRANSFER_LOG = 0x40034D, + SMSG_CURRENCY_TRANSFER_RESULT = 0x40034C, + SMSG_CUSTOM_LOAD_SCREEN = 0x400068, + SMSG_DAILY_QUESTS_RESET = 0x5D0000, + SMSG_DAMAGE_CALC_LOG = 0x5F0054, + SMSG_DB_REPLY = 0x440000, + SMSG_DEATH_RELEASE_LOC = 0x400176, + SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x4000F8, + SMSG_DEFENSE_MESSAGE = 0x45000C, + SMSG_DELETE_CHAR = 0x4001A4, + SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x4A0022, + SMSG_DELVES_ACCOUNT_DATA_ELEMENT_CHANGED = 0x400352, + SMSG_DESTROY_ARENA_UNIT = 0x4001E3, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x40019B, + SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x400020, + SMSG_DISENCHANT_CREDIT = 0x40003F, + SMSG_DISMOUNT_RESULT = 0x400010, + SMSG_DISPEL_FAILED = 0x5F001E, + SMSG_DISPLAY_GAME_ERROR = 0x400035, + SMSG_DISPLAY_PLAYER_CHOICE = 0x5C0004, + SMSG_DISPLAY_PROMOTION = 0x4000ED, + SMSG_DISPLAY_QUEST_POPUP = 0x5D001E, + SMSG_DISPLAY_TOAST = 0x4000C6, + SMSG_DISPLAY_WORLD_TEXT = 0x400289, + SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x5F0053, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x40007D, + SMSG_DROP_NEW_CONNECTION = 0x470006, + SMSG_DUEL_ARRANGED = 0x46001B, + SMSG_DUEL_COMPLETE = 0x46001F, + SMSG_DUEL_COUNTDOWN = 0x46001E, + SMSG_DUEL_IN_BOUNDS = 0x46001D, + SMSG_DUEL_OUT_OF_BOUNDS = 0x46001C, + SMSG_DUEL_REQUESTED = 0x46001A, + SMSG_DUEL_WINNER = 0x460020, + SMSG_DURABILITY_DAMAGE_DEATH = 0x4001E6, + SMSG_EMOTE = 0x400264, + SMSG_ENABLE_BARBER_SHOP = 0x40015F, + SMSG_ENCHANTMENT_LOG = 0x4001B6, + SMSG_ENCOUNTER_END = 0x400220, + SMSG_ENCOUNTER_START = 0x40021F, + SMSG_END_LIGHTNING_STORM = 0x40014C, + SMSG_ENTER_ENCRYPTED_MODE = 0x470003, + SMSG_ENUM_CHARACTERS_RESULT = 0x400018, + SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x40028E, + SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x5F000E, + SMSG_EQUIPMENT_SET_ID = 0x400155, + SMSG_EXPECTED_SPAM_RECORDS = 0x450005, + SMSG_EXPLORATION_EXPERIENCE = 0x400200, + SMSG_EXPORT_ACCOUNT_PROFILE = 0x4000F5, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x4002FD, + SMSG_FACTION_BONUS_INFO = 0x4001C6, + SMSG_FAILED_PLAYER_CONDITION = 0x5C0002, + SMSG_FAILED_QUEST_TURN_IN = 0x4002AC, + SMSG_FEATURE_SYSTEM_STATUS = 0x40005C, + SMSG_FEATURE_SYSTEM_STATUS2 = 0x40034A, + SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x40005D, + SMSG_FEIGN_DEATH_RESISTED = 0x4001E5, + SMSG_FISH_ESCAPED = 0x400173, + SMSG_FISH_NOT_HOOKED = 0x400172, + SMSG_FLIGHT_SPLINE_SYNC = 0x58005B, + SMSG_FLUSH_COMBAT_LOG_FILE = 0x5F0010, + SMSG_FORCED_DEATH_UPDATE = 0x400177, + SMSG_FORCE_ANIM = 0x4001F2, + SMSG_FORCE_ANIMATIONS = 0x4001F3, + SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x40004A, + SMSG_FORCE_SPAWN_TRACKING_UPDATE = 0x5D0021, + SMSG_FRIEND_STATUS = 0x400228, + SMSG_GAIN_MAW_POWER = 0x40027D, + SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x400060, + SMSG_GAME_OBJECT_BASE = 0x4002C4, + SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x400314, + SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x400061, + SMSG_GAME_OBJECT_DESPAWN = 0x400062, + SMSG_GAME_OBJECT_INTERACTION = 0x400313, + SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x5F003C, + SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x5F003B, + SMSG_GAME_OBJECT_RESET_STATE = 0x4001C0, + SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x40029F, + SMSG_GAME_SPEED_SET = 0x400125, + SMSG_GAME_TIME_SET = 0x4001AF, + SMSG_GAME_TIME_UPDATE = 0x4001AE, + SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x4A0024, + SMSG_GARRISON_ADD_EVENT = 0x4A0048, + SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x4A0016, + SMSG_GARRISON_ADD_MISSION_RESULT = 0x4A001A, + SMSG_GARRISON_ADD_SPEC_GROUPS = 0x4A004B, + SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES = 0x4A004F, + SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x4A002C, + SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT = 0x4A0051, + SMSG_GARRISON_BUILDING_ACTIVATED = 0x4A000B, + SMSG_GARRISON_BUILDING_REMOVED = 0x4A0004, + SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x4A0006, + SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT = 0x4A001D, + SMSG_GARRISON_CLEAR_COLLECTION = 0x4A0047, + SMSG_GARRISON_CLEAR_EVENT_LIST = 0x4A004A, + SMSG_GARRISON_CLEAR_SPEC_GROUPS = 0x4A004C, + SMSG_GARRISON_COLLECTION_REMOVE_ENTRY = 0x4A0046, + SMSG_GARRISON_COLLECTION_UPDATE_ENTRY = 0x4A0045, + SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT = 0x4A003D, + SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x4A001C, + SMSG_GARRISON_CREATE_RESULT = 0x4A000C, + SMSG_GARRISON_DELETE_MISSION_RESULT = 0x4A0023, + SMSG_GARRISON_DELETE_RESULT = 0x4A0035, + SMSG_GARRISON_FOLLOWER_ACTIVATIONS_SET = 0x4A002B, + SMSG_GARRISON_FOLLOWER_CHANGED_FLAGS = 0x4A0029, + SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL = 0x4A0027, + SMSG_GARRISON_FOLLOWER_CHANGED_QUALITY = 0x4A0028, + SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x4A0026, + SMSG_GARRISON_FOLLOWER_FATIGUE_CLEARED = 0x4A002A, + SMSG_GARRISON_GENERATE_FOLLOWERS_RESULT = 0x4A0033, + SMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO_RESULT = 0x4A0015, + SMSG_GARRISON_GET_RECALL_PORTAL_LAST_USED_TIME_RESULT = 0x4A001E, + SMSG_GARRISON_IS_UPGRADEABLE_RESPONSE = 0x4A003F, + SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x4A0007, + SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x4A0005, + SMSG_GARRISON_LIST_COMPLETED_MISSIONS_CHEAT_RESULT = 0x4A0040, + SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x4A0019, + SMSG_GARRISON_MAP_DATA_RESPONSE = 0x4A0042, + SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT = 0x4A0020, + SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE = 0x4A0043, + SMSG_GARRISON_MISSION_START_CONDITION_UPDATE = 0x4A0025, + SMSG_GARRISON_OPEN_CRAFTER = 0x4A0037, + SMSG_GARRISON_OPEN_RECRUITMENT_NPC = 0x4A0030, + SMSG_GARRISON_PLACE_BUILDING_RESULT = 0x4A0003, + SMSG_GARRISON_PLOT_PLACED = 0x4A0001, + SMSG_GARRISON_PLOT_REMOVED = 0x4A0002, + SMSG_GARRISON_RECRUIT_FOLLOWER_RESULT = 0x4A0034, + SMSG_GARRISON_REMOTE_INFO = 0x4A000A, + SMSG_GARRISON_REMOVE_EVENT = 0x4A0049, + SMSG_GARRISON_REMOVE_FOLLOWER_ABILITY_RESULT = 0x4A002F, + SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT = 0x4A002D, + SMSG_GARRISON_REMOVE_FOLLOWER_RESULT = 0x4A0017, + SMSG_GARRISON_RENAME_FOLLOWER_RESULT = 0x4A002E, + SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT = 0x4A0009, + SMSG_GARRISON_RESEARCH_TALENT_RESULT = 0x4A000E, + SMSG_GARRISON_RESET_TALENT_TREE = 0x4A0013, + SMSG_GARRISON_RESET_TALENT_TREE_SOCKET_DATA = 0x4A0014, + SMSG_GARRISON_START_MISSION_RESULT = 0x4A001B, + SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE = 0x4A003C, + SMSG_GARRISON_SWITCH_TALENT_TREE_BRANCH = 0x4A004D, + SMSG_GARRISON_TALENT_COMPLETED = 0x4A000F, + SMSG_GARRISON_TALENT_REMOVED = 0x4A0010, + SMSG_GARRISON_TALENT_REMOVE_SOCKET_DATA = 0x4A0012, + SMSG_GARRISON_TALENT_UPDATE_SOCKET_DATA = 0x4A0011, + SMSG_GARRISON_TALENT_WORLD_QUEST_UNLOCKS_RESPONSE = 0x4A004E, + SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x4A0008, + SMSG_GARRISON_UPDATE_FOLLOWER = 0x4A0018, + SMSG_GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS = 0x4A003E, + SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x4A0050, + SMSG_GARRISON_UPGRADE_RESULT = 0x4A000D, + SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x4A001F, + SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x40001C, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x4002B8, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x400202, + SMSG_GET_GARRISON_INFO_RESULT = 0x4A0000, + SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x40023B, + SMSG_GET_REALM_HIDDEN_RESULT = 0x400341, + SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x400275, + SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x400262, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x40023A, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x400236, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x400261, + SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x40028A, + SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x40028B, + SMSG_GM_PLAYER_INFO = 0x5C000E, + SMSG_GM_REQUEST_PLAYER_INFO = 0x5C0003, + SMSG_GM_TICKET_CASE_STATUS = 0x400147, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x400146, + SMSG_GOD_MODE = 0x40019E, + SMSG_GOSSIP_COMPLETE = 0x5D0017, + SMSG_GOSSIP_MESSAGE = 0x5D0018, + SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x5D0028, + SMSG_GOSSIP_POI = 0x400233, + SMSG_GOSSIP_QUEST_UPDATE = 0x5D0019, + SMSG_GOSSIP_REFRESH_OPTIONS = 0x5D0027, + SMSG_GROUP_ACTION_THROTTLED = 0x400024, + SMSG_GROUP_AUTO_KICK = 0x400230, + SMSG_GROUP_DECLINE = 0x40022C, + SMSG_GROUP_DESTROYED = 0x40022F, + SMSG_GROUP_NEW_LEADER = 0x4000CF, + SMSG_GROUP_REQUEST_DECLINE = 0x40022D, + SMSG_GROUP_UNINVITE = 0x40022E, + SMSG_GUILD_ACHIEVEMENT_DELETED = 0x4C000D, + SMSG_GUILD_ACHIEVEMENT_EARNED = 0x4C000C, + SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x4C000F, + SMSG_GUILD_BANK_LOG_QUERY_RESULTS = 0x4C0027, + SMSG_GUILD_BANK_QUERY_RESULTS = 0x4C0026, + SMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY = 0x4C0028, + SMSG_GUILD_BANK_TEXT_QUERY_RESULT = 0x4C002B, + SMSG_GUILD_CHALLENGE_COMPLETED = 0x4C001B, + SMSG_GUILD_CHALLENGE_UPDATE = 0x4C001A, + SMSG_GUILD_CHANGE_NAME_RESULT = 0x4C0025, + SMSG_GUILD_COMMAND_RESULT = 0x4C0002, + SMSG_GUILD_CRITERIA_DELETED = 0x4C000E, + SMSG_GUILD_CRITERIA_UPDATE = 0x4C000B, + SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED = 0x4C0040, + SMSG_GUILD_EVENT_BANK_MONEY_CHANGED = 0x4C003F, + SMSG_GUILD_EVENT_DISBANDED = 0x4C0035, + SMSG_GUILD_EVENT_LOG_QUERY_RESULTS = 0x4C002A, + SMSG_GUILD_EVENT_MOTD = 0x4C0036, + SMSG_GUILD_EVENT_NEW_LEADER = 0x4C0034, + SMSG_GUILD_EVENT_PLAYER_JOINED = 0x4C0032, + SMSG_GUILD_EVENT_PLAYER_LEFT = 0x4C0033, + SMSG_GUILD_EVENT_PRESENCE_CHANGE = 0x4C0037, + SMSG_GUILD_EVENT_RANKS_UPDATED = 0x4C0039, + SMSG_GUILD_EVENT_RANK_CHANGED = 0x4C003A, + SMSG_GUILD_EVENT_STATUS_CHANGE = 0x4C0038, + SMSG_GUILD_EVENT_TAB_ADDED = 0x4C003B, + SMSG_GUILD_EVENT_TAB_DELETED = 0x4C003C, + SMSG_GUILD_EVENT_TAB_MODIFIED = 0x4C003D, + SMSG_GUILD_EVENT_TAB_TEXT_CHANGED = 0x4C003E, + SMSG_GUILD_FLAGGED_FOR_RENAME = 0x4C0024, + SMSG_GUILD_HARDCORE_MEMBER_DEATH = 0x4C0004, + SMSG_GUILD_INVITE = 0x4C0012, + SMSG_GUILD_INVITE_DECLINED = 0x4C0030, + SMSG_GUILD_INVITE_EXPIRED = 0x4C0031, + SMSG_GUILD_ITEM_LOOTED_NOTIFY = 0x4C001C, + SMSG_GUILD_KNOWN_RECIPES = 0x4C0006, + SMSG_GUILD_MEMBERS_WITH_RECIPE = 0x4C0007, + SMSG_GUILD_MEMBER_DAILY_RESET = 0x4C002C, + SMSG_GUILD_MEMBER_RECIPES = 0x4C0005, + SMSG_GUILD_MEMBER_UPDATE_NOTE = 0x4C0011, + SMSG_GUILD_MOVED = 0x4C0022, + SMSG_GUILD_MOVE_STARTING = 0x4C0021, + SMSG_GUILD_NAME_CHANGED = 0x4C0023, + SMSG_GUILD_NEWS = 0x4C0009, + SMSG_GUILD_NEWS_DELETED = 0x4C000A, + SMSG_GUILD_OTHERS_OWNED_HOUSES_RESULT = 0x4C0047, + SMSG_GUILD_PARTY_STATE = 0x4C0013, + SMSG_GUILD_PERMISSIONS_QUERY_RESULTS = 0x4C0029, + SMSG_GUILD_RANKS = 0x4C0010, + SMSG_GUILD_RENAME_NAME_CHECK = 0x4C0044, + SMSG_GUILD_RENAME_REFUND_RESULT = 0x4C0046, + SMSG_GUILD_RENAME_REQUESTED_RESULT = 0x4C0045, + SMSG_GUILD_RENAME_STATUS_UPDATE = 0x4C0043, + SMSG_GUILD_REPUTATION_REACTION_CHANGED = 0x4C0014, + SMSG_GUILD_RESET = 0x4C0020, + SMSG_GUILD_REWARD_LIST = 0x4C0008, + SMSG_GUILD_ROSTER = 0x4C0003, + SMSG_GUILD_SEND_RANK_CHANGE = 0x4C0001, + SMSG_HARDCORE_DEATH_ALERT = 0x400349, + SMSG_HEALTH_UPDATE = 0x400174, + SMSG_HIGHEST_THREAT_UPDATE = 0x40017C, + SMSG_HOTFIX_CONNECT = 0x440003, + SMSG_HOTFIX_MESSAGE = 0x440002, + SMSG_INITIALIZE_FACTIONS = 0x4001C5, + SMSG_INITIAL_SETUP = 0x400014, + SMSG_INIT_WORLD_STATES = 0x4001E7, + SMSG_INSPECT_RESULT = 0x4000D3, + SMSG_INSTANCE_ABANDON_VOTE_COMPLETED = 0x400097, + SMSG_INSTANCE_ABANDON_VOTE_PLAYER_LEFT = 0x400098, + SMSG_INSTANCE_ABANDON_VOTE_RESPONSE = 0x400096, + SMSG_INSTANCE_ABANDON_VOTE_STARTED = 0x400095, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x40024D, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x40024C, + SMSG_INSTANCE_ENCOUNTER_END = 0x400255, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x40024B, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x400257, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x400256, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x400250, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x40024F, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x400254, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x400258, + SMSG_INSTANCE_ENCOUNTER_START = 0x400251, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x40024E, + SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x400253, + SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x400252, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x40019C, + SMSG_INSTANCE_INFO = 0x4000D6, + SMSG_INSTANCE_RESET = 0x40012A, + SMSG_INSTANCE_RESET_FAILED = 0x40012B, + SMSG_INSTANCE_SAVE_CREATED = 0x40021E, + SMSG_INTERRUPT_POWER_REGEN = 0x5F004A, + SMSG_INVALIDATE_NEIGHBORHOOD_NAME = 0x440013, + SMSG_INVALIDATE_PAGE_TEXT = 0x44000A, + SMSG_INVALIDATE_PLAYER = 0x5C0007, + SMSG_INVALID_PROMOTION_CODE = 0x4001F4, + SMSG_INVENTORY_CHANGE_FAILURE = 0x600005, + SMSG_INVENTORY_FIXUP_COMPLETE = 0x4002AE, + SMSG_INVENTORY_FULL_OVERFLOW = 0x4002C0, + SMSG_ISLAND_AZERITE_GAIN = 0x4001FD, + SMSG_ISLAND_COMPLETE = 0x4001FE, + SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x5D0004, + SMSG_ITEM_CHANGED = 0x40018D, + SMSG_ITEM_COOLDOWN = 0x400263, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x4001F6, + SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x400034, + SMSG_ITEM_INTERACTION_COMPLETE = 0x4002F5, + SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x400032, + SMSG_ITEM_PUSH_RESULT = 0x4000C5, + SMSG_ITEM_TIME_UPDATE = 0x4001F5, + SMSG_KICK_REASON = 0x40012D, + SMSG_LATENCY_REPORT_PING = 0x400305, + SMSG_LEARNED_SPELLS = 0x5F003E, + SMSG_LEARN_PVP_TALENT_FAILED = 0x400071, + SMSG_LEARN_TALENT_FAILED = 0x400070, + SMSG_LEGACY_LOOT_RULES = 0x4002C5, + SMSG_LEVEL_LINKING_RESULT = 0x4002DB, + SMSG_LEVEL_UP_INFO = 0x40018B, + SMSG_LFG_BOOT_PLAYER = 0x540019, + SMSG_LFG_DISABLED = 0x540017, + SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x54001F, + SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x540009, + SMSG_LFG_JOIN_LOBBY_MATCHMAKER_QUEUE = 0x540020, + SMSG_LFG_JOIN_RESULT = 0x540000, + SMSG_LFG_LIST_APPLICANT_LIST_UPDATE = 0x54000F, + SMSG_LFG_LIST_APPLICATION_STATUS_UPDATE = 0x54000C, + SMSG_LFG_LIST_APPLY_TO_GROUP_RESULT = 0x54000D, + SMSG_LFG_LIST_JOIN_RESULT = 0x540001, + SMSG_LFG_LIST_SEARCH_RESULTS = 0x540002, + SMSG_LFG_LIST_SEARCH_RESULTS_UPDATE = 0x540010, + SMSG_LFG_LIST_SEARCH_STATUS = 0x540003, + SMSG_LFG_LIST_UPDATE_BLACKLIST = 0x54000E, + SMSG_LFG_LIST_UPDATE_EXPIRATION = 0x54000B, + SMSG_LFG_LIST_UPDATE_STATUS = 0x54000A, + SMSG_LFG_OFFER_CONTINUE = 0x540018, + SMSG_LFG_PARTY_INFO = 0x54001A, + SMSG_LFG_PLAYER_INFO = 0x54001B, + SMSG_LFG_PLAYER_REWARD = 0x54001C, + SMSG_LFG_PROPOSAL_UPDATE = 0x540011, + SMSG_LFG_QUEUE_STATUS = 0x540004, + SMSG_LFG_READY_CHECK_RESULT = 0x54001E, + SMSG_LFG_READY_CHECK_UPDATE = 0x540006, + SMSG_LFG_ROLE_CHECK_UPDATE = 0x540005, + SMSG_LFG_SLOT_INVALID = 0x540014, + SMSG_LFG_SUSPEND_LOREWALKING = 0x540021, + SMSG_LFG_TELEPORT_DENIED = 0x540016, + SMSG_LFG_UPDATE_STATUS = 0x540008, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x400210, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x40020F, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x400203, + SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x400211, + SMSG_LOAD_CUF_PROFILES = 0x400059, + SMSG_LOAD_EQUIPMENT_SET = 0x4001B1, + SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x400316, + SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x400317, + SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x400318, + SMSG_LOBBY_MATCHMAKER_QUEUE_PROPOSED = 0x40031A, + SMSG_LOBBY_MATCHMAKER_QUEUE_RESULT = 0x40031B, + SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x400319, + SMSG_LOGIN_SET_TIME_SPEED = 0x4001B0, + SMSG_LOGIN_VERIFY_WORLD = 0x40002F, + SMSG_LOGOUT_CANCEL_ACK = 0x400129, + SMSG_LOGOUT_COMPLETE = 0x400128, + SMSG_LOGOUT_RESPONSE = 0x400127, + SMSG_LOG_XP_GAIN = 0x400187, + SMSG_LOOT_ALL_PASSED = 0x4000C3, + SMSG_LOOT_LIST = 0x4001E2, + SMSG_LOOT_MONEY_NOTIFY = 0x4000BE, + SMSG_LOOT_RELEASE = 0x4000BD, + SMSG_LOOT_RELEASE_ALL = 0x4000BC, + SMSG_LOOT_REMOVED = 0x4000B8, + SMSG_LOOT_RESPONSE = 0x4000B7, + SMSG_LOOT_ROLL = 0x4000C0, + SMSG_LOOT_ROLLS_COMPLETE = 0x4000C2, + SMSG_LOOT_ROLL_WON = 0x4000C4, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x400113, + SMSG_MAIL_COMMAND_RESULT = 0x4000DD, + SMSG_MAIL_LIST_RESULT = 0x4001F7, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x4001F8, + SMSG_MAP_OBJECTIVES_INIT = 0x46002A, + SMSG_MAP_OBJ_EVENTS = 0x400063, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x4000C1, + SMSG_MEETING_STONE_FAILED = 0x40031C, + SMSG_MESSAGE_BOX = 0x40000A, + SMSG_MINIMAP_PING = 0x400171, + SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x5F0004, + SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x5F0003, + SMSG_MIRROR_VARS = 0x40035D, + SMSG_MISSILE_CANCEL = 0x400064, + SMSG_MODIFY_COOLDOWN = 0x400205, + SMSG_MOTD = 0x450003, + SMSG_MOUNT_RESULT = 0x40000F, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x4002CB, + SMSG_MOVE_ADD_IMPULSE = 0x580062, + SMSG_MOVE_APPLY_INERTIA = 0x58005E, + SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x580045, + SMSG_MOVE_DISABLE_COLLISION = 0x580041, + SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x58002B, + SMSG_MOVE_DISABLE_FULL_SPEED_TURNING = 0x580075, + SMSG_MOVE_DISABLE_GRAVITY = 0x58003D, + SMSG_MOVE_DISABLE_INERTIA = 0x58003F, + SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x58003C, + SMSG_MOVE_ENABLE_COLLISION = 0x580042, + SMSG_MOVE_ENABLE_DOUBLE_JUMP = 0x58002A, + SMSG_MOVE_ENABLE_FULL_SPEED_TURNING = 0x580074, + SMSG_MOVE_ENABLE_GRAVITY = 0x58003E, + SMSG_MOVE_ENABLE_INERTIA = 0x580040, + SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x58003B, + SMSG_MOVE_KNOCK_BACK = 0x580031, + SMSG_MOVE_REMOVE_INERTIA = 0x58005F, + SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x580046, + SMSG_MOVE_ROOT = 0x580027, + SMSG_MOVE_SET_ACTIVE_MOVER = 0x580003, + SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x58006B, + SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x580066, + SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x58006C, + SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x580069, + SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x58006A, + SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x580072, + SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x580068, + SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x580067, + SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x580071, + SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x58006D, + SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x58006E, + SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x580070, + SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x58006F, + SMSG_MOVE_SET_CANT_SWIM = 0x580035, + SMSG_MOVE_SET_CAN_ADV_FLY = 0x580064, + SMSG_MOVE_SET_CAN_DRIVE = 0x580076, + SMSG_MOVE_SET_CAN_FLY = 0x580033, + SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x580037, + SMSG_MOVE_SET_COLLISION_HEIGHT = 0x580043, + SMSG_MOVE_SET_COMPOUND_STATE = 0x580047, + SMSG_MOVE_SET_FEATHER_FALL = 0x58002D, + SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x580023, + SMSG_MOVE_SET_FLIGHT_SPEED = 0x580022, + SMSG_MOVE_SET_HOVERING = 0x58002F, + SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x580039, + SMSG_MOVE_SET_LAND_WALK = 0x58002C, + SMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x580014, + SMSG_MOVE_SET_NORMAL_FALL = 0x58002E, + SMSG_MOVE_SET_PITCH_RATE = 0x580026, + SMSG_MOVE_SET_RUN_BACK_SPEED = 0x58001F, + SMSG_MOVE_SET_RUN_SPEED = 0x58001E, + SMSG_MOVE_SET_SWIM_BACK_SPEED = 0x580021, + SMSG_MOVE_SET_SWIM_SPEED = 0x580020, + SMSG_MOVE_SET_TURN_RATE = 0x580025, + SMSG_MOVE_SET_VEHICLE_REC_ID = 0x580044, + SMSG_MOVE_SET_WALK_SPEED = 0x580024, + SMSG_MOVE_SET_WATER_WALK = 0x580029, + SMSG_MOVE_SKIP_TIME = 0x580048, + SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x58004D, + SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x58004B, + SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x58004E, + SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x58004C, + SMSG_MOVE_SPLINE_ROOT = 0x580049, + SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x58004F, + SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED = 0x58001A, + SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED = 0x580019, + SMSG_MOVE_SPLINE_SET_FLYING = 0x580059, + SMSG_MOVE_SPLINE_SET_HOVER = 0x580051, + SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x580054, + SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x580050, + SMSG_MOVE_SPLINE_SET_PITCH_RATE = 0x58001D, + SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED = 0x580016, + SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x580057, + SMSG_MOVE_SPLINE_SET_RUN_SPEED = 0x580015, + SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED = 0x580018, + SMSG_MOVE_SPLINE_SET_SWIM_SPEED = 0x580017, + SMSG_MOVE_SPLINE_SET_TURN_RATE = 0x58001C, + SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x580058, + SMSG_MOVE_SPLINE_SET_WALK_SPEED = 0x58001B, + SMSG_MOVE_SPLINE_SET_WATER_WALK = 0x580053, + SMSG_MOVE_SPLINE_START_SWIM = 0x580055, + SMSG_MOVE_SPLINE_STOP_SWIM = 0x580056, + SMSG_MOVE_SPLINE_UNROOT = 0x58004A, + SMSG_MOVE_SPLINE_UNSET_FLYING = 0x58005A, + SMSG_MOVE_SPLINE_UNSET_HOVER = 0x580052, + SMSG_MOVE_TELEPORT = 0x580032, + SMSG_MOVE_UNROOT = 0x580028, + SMSG_MOVE_UNSET_CANT_SWIM = 0x580036, + SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x580065, + SMSG_MOVE_UNSET_CAN_DRIVE = 0x580077, + SMSG_MOVE_UNSET_CAN_FLY = 0x580034, + SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x580038, + SMSG_MOVE_UNSET_HOVERING = 0x580030, + SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x58003A, + SMSG_MOVE_UPDATE = 0x58000E, + SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x580063, + SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x580060, + SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE = 0x580012, + SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x58000D, + SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x58000A, + SMSG_MOVE_UPDATE_FLIGHT_SPEED = 0x580009, + SMSG_MOVE_UPDATE_KNOCK_BACK = 0x580010, + SMSG_MOVE_UPDATE_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x580011, + SMSG_MOVE_UPDATE_PITCH_RATE = 0x58000C, + SMSG_MOVE_UPDATE_REMOVE_INERTIA = 0x580061, + SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x580013, + SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x580005, + SMSG_MOVE_UPDATE_RUN_SPEED = 0x580004, + SMSG_MOVE_UPDATE_SWIM_BACK_SPEED = 0x580008, + SMSG_MOVE_UPDATE_SWIM_SPEED = 0x580007, + SMSG_MOVE_UPDATE_TELEPORT = 0x58000F, + SMSG_MOVE_UPDATE_TURN_RATE = 0x58000B, + SMSG_MOVE_UPDATE_WALK_SPEED = 0x580006, + SMSG_MULTIPLE_PACKETS = 0x47000B, + SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x40027A, + SMSG_MULTI_FLOOR_NEW_FLOOR = 0x400279, + SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x4000AC, + SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x4000AE, + SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x4000B4, + SMSG_MYTHIC_PLUS_SEASON_DATA = 0x4000AD, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x400078, + SMSG_NEW_DATA_BUILD = 0x400340, + SMSG_NEW_TAXI_PATH = 0x400122, + SMSG_NEW_WORLD = 0x40002B, + SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x5F0034, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x40014E, + SMSG_NOTIFY_MONEY = 0x400031, + SMSG_NOTIFY_RECEIVED_MAIL = 0x4000DE, + SMSG_NPC_INTERACTION_OPEN_RESULT = 0x400312, + SMSG_OFFER_PETITION_ERROR = 0x400159, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x400188, + SMSG_ON_MONSTER_MOVE = 0x580002, + SMSG_OPEN_ARTIFACT_FORGE = 0x40023F, + SMSG_OPEN_CONTAINER = 0x600006, + SMSG_OPEN_LFG_DUNGEON_FINDER = 0x540015, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x400237, + SMSG_OVERRIDE_LIGHT = 0x40015E, + SMSG_PAGE_TEXT = 0x4001BC, + SMSG_PARTY_COMMAND_RESULT = 0x400231, + SMSG_PARTY_ELIGIBILITY_FOR_DELVE_TIERS_RESPONSE = 0x400355, + SMSG_PARTY_INVITE = 0x40005A, + SMSG_PARTY_KILL_LOG = 0x4001FB, + SMSG_PARTY_MEMBER_FULL_STATE = 0x4001FA, + SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x4001F9, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x4002FB, + SMSG_PARTY_UPDATE = 0x400090, + SMSG_PAST_TIME_EVENTS = 0x40005F, + SMSG_PAUSE_MIRROR_TIMER = 0x4001B3, + SMSG_PENDING_RAID_LOCK = 0x40019A, + SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x40030F, + SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x40030B, + SMSG_PERKS_PROGRAM_DISABLED = 0x400310, + SMSG_PERKS_PROGRAM_RESULT = 0x40030C, + SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x40030A, + SMSG_PETITION_ALREADY_SIGNED = 0x400037, + SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x4C0042, + SMSG_PETITION_SHOW_LIST = 0x400161, + SMSG_PETITION_SHOW_SIGNATURES = 0x400162, + SMSG_PETITION_SIGN_RESULTS = 0x4001ED, + SMSG_PET_ACTION_FEEDBACK = 0x4001EA, + SMSG_PET_ACTION_SOUND = 0x400144, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x4000A2, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x400118, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x40009B, + SMSG_PET_BATTLE_FINAL_ROUND = 0x4000A0, + SMSG_PET_BATTLE_FINISHED = 0x4000A1, + SMSG_PET_BATTLE_FIRST_ROUND = 0x40009D, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x40009C, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x4000A3, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x40009A, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x4000DB, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x4000DC, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x40009F, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x400099, + SMSG_PET_BATTLE_ROUND_RESULT = 0x40009E, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x400088, + SMSG_PET_CAST_FAILED = 0x5F0049, + SMSG_PET_CLEAR_SPELLS = 0x5F0013, + SMSG_PET_DISMISS_SOUND = 0x400145, + SMSG_PET_GOD_MODE = 0x40011F, + SMSG_PET_GUIDS = 0x4001A6, + SMSG_PET_LEARNED_SPELLS = 0x5F0040, + SMSG_PET_MODE = 0x40001F, + SMSG_PET_NAME_INVALID = 0x400166, + SMSG_PET_NEWLY_TAMED = 0x40001E, + SMSG_PET_SPELLS_MESSAGE = 0x5F0014, + SMSG_PET_STABLE_RESULT = 0x40002A, + SMSG_PET_TAME_FAILURE = 0x400156, + SMSG_PET_UNLEARNED_SPELLS = 0x5F0041, + SMSG_PHASE_SHIFT_CHANGE = 0x40000C, + SMSG_PLAYED_TIME = 0x400178, + SMSG_PLAYER_ACKNOWLEDGE_ARROW_CALLOUT = 0x5C002E, + SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x5C0020, + SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x5C001F, + SMSG_PLAYER_BONUS_ROLL_FAILED = 0x5C0022, + SMSG_PLAYER_BOUND = 0x5C0000, + SMSG_PLAYER_CHOICE_CLEAR = 0x5C0006, + SMSG_PLAYER_CHOICE_DISPLAY_ERROR = 0x5C0005, + SMSG_PLAYER_CONDITION_RESULT = 0x5C0013, + SMSG_PLAYER_END_OF_MATCH_DETAILS = 0x5C0030, + SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x5C002D, + SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x5C0012, + SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x5C0017, + SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x4C0041, + SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x5C002F, + SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x5C002C, + SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x5C002A, + SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x5C002B, + SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x5C0025, + SMSG_PLAYER_SKINNED = 0x5C000F, + SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x5C0016, + SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x5C0015, + SMSG_PLAY_MUSIC = 0x40020A, + SMSG_PLAY_OBJECT_SOUND = 0x40020C, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x4001D2, + SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x5F0038, + SMSG_PLAY_SCENE = 0x4000D8, + SMSG_PLAY_SOUND = 0x400209, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x40020D, + SMSG_PLAY_SPELL_VISUAL = 0x5F0036, + SMSG_PLAY_SPELL_VISUAL_KIT = 0x5F003A, + SMSG_PLAY_TIME_WARNING = 0x4001A0, + SMSG_PONG = 0x470008, + SMSG_POWER_UPDATE = 0x400175, + SMSG_PRELOAD_CHILD_MAP = 0x40000D, + SMSG_PRELOAD_WORLD = 0x40002C, + SMSG_PREPOPULATE_NAME_CACHE = 0x4002CE, + SMSG_PRE_RESSURECT = 0x400208, + SMSG_PRINT_NOTIFICATION = 0x400067, + SMSG_PROC_RESIST = 0x4001FC, + SMSG_PROFESSION_GOSSIP = 0x40029A, + SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x5F0042, + SMSG_PVP_CREDIT = 0x460024, + SMSG_PVP_MATCH_COMPLETE = 0x46002F, + SMSG_PVP_MATCH_INITIALIZE = 0x460030, + SMSG_PVP_MATCH_SET_STATE = 0x46002E, + SMSG_PVP_MATCH_START = 0x46002D, + SMSG_PVP_MATCH_STATISTICS = 0x460010, + SMSG_PVP_OPTIONS_ENABLED = 0x460013, + SMSG_PVP_TIER_RECORD = 0x400306, + SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x44000C, + SMSG_QUERY_CREATURE_RESPONSE = 0x440006, + SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x440007, + SMSG_QUERY_GARRISON_PET_NAME_RESPONSE = 0x4A0041, + SMSG_QUERY_GUILD_FOLLOW_INFO_RESPONSE = 0x4C002F, + SMSG_QUERY_GUILD_INFO_RESPONSE = 0x4C002D, + SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x440010, + SMSG_QUERY_NEIGHBORHOOD_NAME_RESPONSE = 0x440012, + SMSG_QUERY_NPC_TEXT_RESPONSE = 0x440008, + SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x440009, + SMSG_QUERY_PETITION_RESPONSE = 0x44000D, + SMSG_QUERY_PET_NAME_RESPONSE = 0x44000B, + SMSG_QUERY_PLAYER_NAMES_RESPONSE = 0x5C0027, + SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x5C000B, + SMSG_QUERY_QUEST_INFO_RESPONSE = 0x5D0016, + SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x4C002E, + SMSG_QUERY_TIME_RESPONSE = 0x400186, + SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x5D0001, + SMSG_QUEST_CONFIRM_ACCEPT = 0x5D000F, + SMSG_QUEST_FORCE_REMOVED = 0x5D001C, + SMSG_QUEST_GIVER_INVALID_QUEST = 0x5D0005, + SMSG_QUEST_GIVER_OFFER_REWARD_MESSAGE = 0x5D0014, + SMSG_QUEST_GIVER_QUEST_COMPLETE = 0x5D0003, + SMSG_QUEST_GIVER_QUEST_DETAILS = 0x5D0012, + SMSG_QUEST_GIVER_QUEST_FAILED = 0x5D0006, + SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x5D001A, + SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x5D0013, + SMSG_QUEST_GIVER_STATUS = 0x5D001B, + SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x5D0011, + SMSG_QUEST_ITEM_USABILITY_RESPONSE = 0x5D0002, + SMSG_QUEST_LOG_FULL = 0x5D0007, + SMSG_QUEST_NON_LOG_UPDATE_COMPLETE = 0x5D0008, + SMSG_QUEST_POI_QUERY_RESPONSE = 0x5D001D, + SMSG_QUEST_POI_UPDATE_RESPONSE = 0x5D001F, + SMSG_QUEST_PUSH_RESULT = 0x5D0010, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x4002F1, + SMSG_QUEST_SESSION_READY_CHECK = 0x4002DF, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x4002E0, + SMSG_QUEST_SESSION_RESULT = 0x4002DE, + SMSG_QUEST_UPDATE_ADD_CREDIT = 0x5D000C, + SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x5D000D, + SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x5D000E, + SMSG_QUEST_UPDATE_COMPLETE = 0x5D0009, + SMSG_QUEST_UPDATE_FAILED = 0x5D000A, + SMSG_QUEST_UPDATE_FAILED_TIMER = 0x5D000B, + SMSG_QUEUE_SUMMARY_UPDATE = 0x4002AD, + SMSG_RAF_ACCOUNT_INFO = 0x4002DC, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x4002ED, + SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x40033D, + SMSG_RAID_DIFFICULTY_SET = 0x400248, + SMSG_RAID_GROUP_ONLY = 0x40024A, + SMSG_RAID_INSTANCE_MESSAGE = 0x45000A, + SMSG_RAID_MARKERS_CHANGED = 0x400038, + SMSG_RANDOM_ROLL = 0x4000D2, + SMSG_RATED_PVP_INFO = 0x46000F, + SMSG_READY_CHECK_COMPLETED = 0x400094, + SMSG_READY_CHECK_RESPONSE = 0x400093, + SMSG_READY_CHECK_STARTED = 0x400092, + SMSG_READ_ITEM_RESULT_FAILED = 0x400244, + SMSG_READ_ITEM_RESULT_OK = 0x40023C, + SMSG_REALM_QUERY_RESPONSE = 0x440005, + SMSG_REATTACH_RESURRECT = 0x4001EC, + SMSG_RECEIVE_PING_UNIT = 0x400039, + SMSG_RECEIVE_PING_WORLD_POINT = 0x40003A, + SMSG_RECENT_ALLY_DATA_RESPONSE = 0x400358, + SMSG_RECENT_ALLY_NOTE_UPDATED = 0x400359, + SMSG_RECRAFT_ITEM_RESULT = 0x400333, + SMSG_RECRUIT_A_FRIEND_FAILURE = 0x400163, + SMSG_REFRESH_COMPONENT = 0x4000F2, + SMSG_REGIONWIDE_CHARACTER_MAIL_DATA = 0x40001A, + SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA = 0x400019, + SMSG_REMOVE_ITEM_PASSIVE = 0x400043, + SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x5F0043, + SMSG_REPLACE_TROPHY_RESPONSE = 0x400260, + SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x5C000A, + SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x400025, + SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x460014, + SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x460015, + SMSG_RESET_COMPRESSION_CONTEXT = 0x470009, + SMSG_RESET_FAILED_NOTIFY = 0x40015A, + SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x40033A, + SMSG_RESET_QUEST_POI = 0x5D0020, + SMSG_RESET_RANGED_COMBAT_TIMER = 0x460023, + SMSG_RESET_WEEKLY_CURRENCY = 0x400009, + SMSG_RESPEC_WIPE_CONFIRM = 0x4000B5, + SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x400006, + SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x40030D, + SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x40030E, + SMSG_RESTART_GLOBAL_COOLDOWN = 0x5F0052, + SMSG_RESTRICTED_ACCOUNT_WARNING = 0x400056, + SMSG_RESUME_CAST = 0x5F002C, + SMSG_RESUME_CAST_BAR = 0x5F002F, + SMSG_RESUME_COMMS = 0x470005, + SMSG_RESUME_TOKEN = 0x400041, + SMSG_RESURRECT_REQUEST = 0x400012, + SMSG_RESYNC_RUNES = 0x5F0050, + SMSG_RETURN_APPLICANT_LIST = 0x4002D2, + SMSG_RETURN_RECRUITING_CLUBS = 0x4002D1, + SMSG_ROLE_CHANGED_INFORM = 0x400021, + SMSG_ROLE_CHOSEN = 0x54001D, + SMSG_ROLE_POLL_INFORM = 0x400022, + SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x400299, + SMSG_RUNE_REGEN_DEBUG = 0x400053, + SMSG_SCENARIO_COMPLETED = 0x400287, + SMSG_SCENARIO_POIS = 0x4000D5, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x4000CE, + SMSG_SCENARIO_SHOW_CRITERIA = 0x40029D, + SMSG_SCENARIO_STATE = 0x4000CD, + SMSG_SCENARIO_UI_UPDATE = 0x40029C, + SMSG_SCENARIO_VACATE = 0x400245, + SMSG_SCENE_OBJECT_EVENT = 0x40007E, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x400083, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x400084, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x400080, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x40007F, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x400082, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x400081, + SMSG_SCHEDULED_AREA_POI_UPDATE_RESPONSE = 0x5C001A, + SMSG_SCRIPT_CAST = 0x5F0047, + SMSG_SEASON_INFO = 0x40005E, + SMSG_SELL_RESPONSE = 0x400167, + SMSG_SEND_ITEM_PASSIVES = 0x400044, + SMSG_SEND_KNOWN_SPELLS = 0x5F0019, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x4000D0, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x4000D1, + SMSG_SEND_SPELL_CHARGES = 0x5F001B, + SMSG_SEND_SPELL_HISTORY = 0x5F001A, + SMSG_SEND_UNLEARN_SPELLS = 0x5F001C, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x4000EF, + SMSG_SERVER_TIME = 0x400126, + SMSG_SERVER_TIME_OFFSET = 0x4001B7, + SMSG_SETUP_COMBAT_LOG_FILE_FLUSH = 0x5F000F, + SMSG_SETUP_CURRENCY = 0x400007, + SMSG_SET_AI_ANIM_KIT = 0x4001D1, + SMSG_SET_ANIM_TIER = 0x4001D5, + SMSG_SET_CHR_UPGRADE_TIER = 0x40007B, + SMSG_SET_CTR_OPTIONS = 0x400362, + SMSG_SET_CURRENCY = 0x400008, + SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x540012, + SMSG_SET_DUNGEON_DIFFICULTY = 0x400148, + SMSG_SET_FACTION_AT_WAR = 0x4001A2, + SMSG_SET_FACTION_NOT_VISIBLE = 0x4001CC, + SMSG_SET_FACTION_STANDING = 0x4001CD, + SMSG_SET_FACTION_VISIBLE = 0x4001CB, + SMSG_SET_FLAT_SPELL_MODIFIER = 0x5F0027, + SMSG_SET_INSTANCE_LEAVER = 0x40035E, + SMSG_SET_ITEM_PURCHASE_DATA = 0x400033, + SMSG_SET_LOOT_METHOD_FAILED = 0x40026B, + SMSG_SET_MAX_WEEKLY_QUANTITY = 0x400036, + SMSG_SET_MELEE_ANIM_KIT = 0x4001D4, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x4001D3, + SMSG_SET_PCT_SPELL_MODIFIER = 0x5F0028, + SMSG_SET_PET_SPECIALIZATION = 0x4000C7, + SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x5C000C, + SMSG_SET_PLAY_HOVER_ANIM = 0x400057, + SMSG_SET_PROFICIENCY = 0x4001D6, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x4002E5, + SMSG_SET_SHIPMENT_READY_RESPONSE = 0x4A003A, + SMSG_SET_SPELL_CHARGES = 0x5F0018, + SMSG_SET_TIME_ZONE_INFORMATION = 0x40011B, + SMSG_SET_VEHICLE_REC_ID = 0x400199, + SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x400311, + SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x4A003B, + SMSG_SHOW_DELVES_COMPANION_CONFIGURATION_UI = 0x400353, + SMSG_SHOW_DELVES_DISPLAY_UI = 0x400351, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x400077, + SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x5D0015, + SMSG_SHOW_TAXI_NODES = 0x400170, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x400212, + SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x40031D, + SMSG_SOCKET_GEMS_FAILURE = 0x4001C9, + SMSG_SOCKET_GEMS_SUCCESS = 0x4001C8, + SMSG_SPECIAL_MOUNT_ANIM = 0x400143, + SMSG_SPECTATE_END = 0x40033F, + SMSG_SPECTATE_PLAYER = 0x40033E, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x4001BB, + SMSG_SPELL_ABSORB_LOG = 0x5F000C, + SMSG_SPELL_CATEGORY_COOLDOWN = 0x5F0006, + SMSG_SPELL_CHANNEL_START = 0x5F0022, + SMSG_SPELL_CHANNEL_UPDATE = 0x5F0023, + SMSG_SPELL_COOLDOWN = 0x5F0005, + SMSG_SPELL_DAMAGE_SHIELD = 0x5F001F, + SMSG_SPELL_DELAYED = 0x5F0030, + SMSG_SPELL_DISPELL_LOG = 0x5F0007, + SMSG_SPELL_EMPOWER_SET_STAGE = 0x5F0026, + SMSG_SPELL_EMPOWER_START = 0x5F0024, + SMSG_SPELL_EMPOWER_UPDATE = 0x5F0025, + SMSG_SPELL_ENERGIZE_LOG = 0x5F0009, + SMSG_SPELL_EXECUTE_LOG = 0x5F0031, + SMSG_SPELL_FAILED_OTHER = 0x5F0046, + SMSG_SPELL_FAILURE = 0x5F0044, + SMSG_SPELL_FAILURE_MESSAGE = 0x5F004B, + SMSG_SPELL_GO = 0x5F002A, + SMSG_SPELL_HEAL_ABSORB_LOG = 0x5F000B, + SMSG_SPELL_HEAL_LOG = 0x5F000A, + SMSG_SPELL_INSTAKILL_LOG = 0x5F0021, + SMSG_SPELL_INTERRUPT_LOG = 0x5F000D, + SMSG_SPELL_MISS_LOG = 0x5F0032, + SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x5F0020, + SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x5F001D, + SMSG_SPELL_PERIODIC_AURA_LOG = 0x5F0008, + SMSG_SPELL_PREPARE = 0x5F0029, + SMSG_SPELL_START = 0x5F002B, + SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x400069, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x4002F7, + SMSG_STAND_STATE_UPDATE = 0x4001BF, + SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x40006F, + SMSG_START_ELAPSED_TIMER = 0x4000A4, + SMSG_START_ELAPSED_TIMERS = 0x4000A6, + SMSG_START_LIGHTNING_STORM = 0x40014B, + SMSG_START_LOOT_ROLL = 0x4000BF, + SMSG_START_MIRROR_TIMER = 0x4001B2, + SMSG_START_TIMER = 0x40003D, + SMSG_STOP_ELAPSED_TIMER = 0x4000A5, + SMSG_STOP_MIRROR_TIMER = 0x4001B4, + SMSG_STOP_SPEAKERBOT_SOUND = 0x40020E, + SMSG_STOP_TIMER = 0x40003E, + SMSG_STREAMING_MOVIES = 0x40003C, + SMSG_SUGGEST_INVITE_INFORM = 0x400232, + SMSG_SUMMON_CANCEL = 0x400154, + SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x400023, + SMSG_SUMMON_REQUEST = 0x4001C3, + SMSG_SUPERCEDED_SPELLS = 0x5F003D, + SMSG_SURVEY_DELIVERED = 0x40035B, + SMSG_SUSPEND_COMMS = 0x470004, + SMSG_SUSPEND_TOKEN = 0x400040, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x4002EF, + SMSG_TAKE_SCREENSHOT_FOR_COMPLAINT = 0x5C0032, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x4001BA, + SMSG_TAXI_NODE_STATUS = 0x400120, + SMSG_TEXT_EMOTE = 0x40011E, + SMSG_THREAT_CLEAR = 0x40017F, + SMSG_THREAT_REMOVE = 0x40017E, + SMSG_THREAT_UPDATE = 0x40017D, + SMSG_TIMERUNNING_SEASON_ENDED = 0x400354, + SMSG_TIME_ADJUSTMENT = 0x580001, + SMSG_TIME_SYNC_REQUEST = 0x580000, + SMSG_TITLE_EARNED = 0x40017A, + SMSG_TITLE_LOST = 0x40017B, + SMSG_TOTEM_CREATED = 0x40016A, + SMSG_TOTEM_DURATION_CHANGED = 0x40016C, + SMSG_TOTEM_MOVED = 0x40016D, + SMSG_TOTEM_REMOVED = 0x40016B, + SMSG_TRADE_STATUS = 0x400017, + SMSG_TRADE_UPDATED = 0x400016, + SMSG_TRAINER_BUY_FAILED = 0x400182, + SMSG_TRAINER_LIST = 0x400181, + SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x40006E, + SMSG_TRANSFER_ABORTED = 0x4001A5, + SMSG_TRANSFER_PENDING = 0x40006A, + SMSG_TREASURE_PICKER_RESPONSE = 0x440011, + SMSG_TRIGGER_CINEMATIC = 0x400265, + SMSG_TRIGGER_MOVIE = 0x40016E, + SMSG_TURN_IN_PETITION_RESULT = 0x4001EF, + SMSG_TUTORIAL_FLAGS = 0x400259, + SMSG_UI_ACTION = 0x40020B, + SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x5D0023, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x400266, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x400267, + SMSG_UNLEARNED_SPELLS = 0x5F003F, + SMSG_UNLOAD_CHILD_MAP = 0x40000E, + SMSG_UNSET_INSTANCE_LEAVER = 0x40035F, + SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x400307, + SMSG_UPDATE_ACCOUNT_DATA = 0x4001AB, + SMSG_UPDATE_ACCOUNT_DATA_COMPLETE = 0x4001AC, + SMSG_UPDATE_ACTION_BUTTONS = 0x40007C, + SMSG_UPDATE_BNET_SESSION_KEY = 0x4002BF, + SMSG_UPDATE_CAPTURE_POINT = 0x460007, + SMSG_UPDATE_CELESTIAL_BODY = 0x4002BB, + SMSG_UPDATE_CHARACTER_FLAGS = 0x40025F, + SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x400207, + SMSG_UPDATE_COOLDOWN = 0x400206, + SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x4A0038, + SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x4A0021, + SMSG_UPDATE_EXPANSION_LEVEL = 0x4000E8, + SMSG_UPDATE_GAME_TIME_STATE = 0x4002C2, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x40014D, + SMSG_UPDATE_LAST_INSTANCE = 0x40012C, + SMSG_UPDATE_OBJECT = 0x560000, + SMSG_UPDATE_PRIMARY_SPEC = 0x400074, + SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x400091, + SMSG_UPDATE_TALENT_DATA = 0x400073, + SMSG_UPDATE_WORLD_STATE = 0x4001E9, + SMSG_USERLIST_ADD = 0x45000F, + SMSG_USERLIST_REMOVE = 0x450010, + SMSG_USERLIST_UPDATE = 0x450011, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x4001F0, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x4002B6, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x4002B4, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x4002B3, + SMSG_VAS_PURCHASE_COMPLETE = 0x40028D, + SMSG_VAS_PURCHASE_STATE_UPDATE = 0x40028C, + SMSG_VENDOR_INVENTORY = 0x400055, + SMSG_VIGNETTE_UPDATE = 0x5C0011, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x4002BA, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x400302, + SMSG_VOICE_LOGIN_RESPONSE = 0x4002B9, + SMSG_VOID_ITEM_SWAP_RESPONSE = 0x600004, + SMSG_VOID_STORAGE_CONTENTS = 0x600001, + SMSG_VOID_STORAGE_FAILED = 0x600000, + SMSG_VOID_STORAGE_TRANSFER_CHANGES = 0x600002, + SMSG_VOID_TRANSFER_RESULT = 0x600003, + SMSG_WAIT_QUEUE_FINISH = 0x400003, + SMSG_WAIT_QUEUE_UPDATE = 0x400002, + SMSG_WALK_IN_RESULT = 0x620000, + SMSG_WARDEN3_DATA = 0x40000B, + SMSG_WARDEN3_DISABLED = 0x4002BD, + SMSG_WARDEN3_ENABLED = 0x4002BC, + SMSG_WARFRONT_COMPLETE = 0x4001FF, + SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x460012, + SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x460011, + SMSG_WEATHER = 0x40014A, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x4002FA, + SMSG_WEEKLY_REWARDS_RESULT = 0x4002F8, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x4002F9, + SMSG_WHO = 0x450002, + SMSG_WHO_IS = 0x400149, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x4002C1, + SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x5C0018, + SMSG_WORLD_SERVER_INFO = 0x400045, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x4002F0, + SMSG_WOW_LABS_AREA_INFO = 0x400322, + SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x40031E, + SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x40031F, + SMSG_WOW_LABS_PARTY_ERROR = 0x40032B, + SMSG_WOW_LABS_SET_AREA_ID_RESULT = 0x400320, + SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x400324, + SMSG_WOW_LABS_SET_SELECTED_AREA_ID = 0x400321, + SMSG_XP_AWARDED_FROM_CURRENCY = 0x400339, + SMSG_XP_GAIN_ABORTED = 0x400066, + SMSG_XP_GAIN_ENABLED = 0x400249, + SMSG_ZONE_UNDER_ATTACK = 0x45000B, // Deleted opcodes, here only to allow compile SMSG_ARENA_TEAM_STATS = UNKNOWN_OPCODE, }; -inline constexpr std::size_t NUM_SMSG_OPCODES = 1484; +inline constexpr std::size_t NUM_SMSG_OPCODES = 1600; inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeServer opcode) { uint32 idInGroup = opcode & 0xFFFF; switch (opcode >> 16) { - case 0x36: return idInGroup < 862 ? idInGroup + 0 : -1; - case 0x37: return idInGroup < 5 ? idInGroup + 862 : -1; - case 0x3A: return idInGroup < 18 ? idInGroup + 867 : -1; - case 0x3B: return idInGroup < 36 ? idInGroup + 885 : -1; - case 0x3C: return idInGroup < 49 ? idInGroup + 921 : -1; - case 0x3D: return idInGroup < 11 ? idInGroup + 970 : -1; - case 0x3E: return idInGroup < 12 ? idInGroup + 981 : -1; - case 0x40: return idInGroup < 82 ? idInGroup + 993 : -1; - case 0x42: return idInGroup < 71 ? idInGroup + 1075 : -1; - case 0x44: return idInGroup < 33 ? idInGroup + 1146 : -1; - case 0x46: return idInGroup < 1 ? idInGroup + 1179 : -1; - case 0x48: return idInGroup < 120 ? idInGroup + 1180 : -1; - case 0x4A: return idInGroup < 49 ? idInGroup + 1300 : -1; - case 0x4B: return idInGroup < 41 ? idInGroup + 1349 : -1; - case 0x4D: return idInGroup < 85 ? idInGroup + 1390 : -1; - case 0x4E: return idInGroup < 8 ? idInGroup + 1475 : -1; - case 0x50: return idInGroup < 1 ? idInGroup + 1483 : -1; + case 0x40: return idInGroup < 869 ? idInGroup + 0 : -1; + case 0x41: return idInGroup < 5 ? idInGroup + 869 : -1; + case 0x44: return idInGroup < 20 ? idInGroup + 874 : -1; + case 0x45: return idInGroup < 36 ? idInGroup + 894 : -1; + case 0x46: return idInGroup < 49 ? idInGroup + 930 : -1; + case 0x47: return idInGroup < 13 ? idInGroup + 979 : -1; + case 0x48: return idInGroup < 12 ? idInGroup + 992 : -1; + case 0x4A: return idInGroup < 82 ? idInGroup + 1004 : -1; + case 0x4C: return idInGroup < 72 ? idInGroup + 1086 : -1; + case 0x4E: return idInGroup < 2 ? idInGroup + 1158 : -1; + case 0x4F: return idInGroup < 11 ? idInGroup + 1160 : -1; + case 0x50: return idInGroup < 8 ? idInGroup + 1171 : -1; + case 0x51: return idInGroup < 8 ? idInGroup + 1179 : -1; + case 0x52: return idInGroup < 36 ? idInGroup + 1187 : -1; + case 0x53: return idInGroup < 8 ? idInGroup + 1223 : -1; + case 0x54: return idInGroup < 34 ? idInGroup + 1231 : -1; + case 0x56: return idInGroup < 1 ? idInGroup + 1265 : -1; + case 0x58: return idInGroup < 120 ? idInGroup + 1266 : -1; + case 0x59: return idInGroup < 5 ? idInGroup + 1386 : -1; + case 0x5A: return idInGroup < 22 ? idInGroup + 1391 : -1; + case 0x5C: return idInGroup < 52 ? idInGroup + 1413 : -1; + case 0x5D: return idInGroup < 41 ? idInGroup + 1465 : -1; + case 0x5F: return idInGroup < 85 ? idInGroup + 1506 : -1; + case 0x60: return idInGroup < 8 ? idInGroup + 1591 : -1; + case 0x62: return idInGroup < 1 ? idInGroup + 1599 : -1; default: return -1; } } diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 95a34c24adc..d2b2b96a69b 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -823,6 +823,7 @@ void WorldSession::SendConnectToInstance(WorldPackets::Auth::ConnectToSerial ser WorldPackets::Auth::ConnectTo connectTo; connectTo.Key = _instanceConnectKey.Raw; + connectTo.NativeRealmAddress = GetVirtualRealmAddress(); connectTo.Serial = serial; connectTo.Payload.Port = sWorld->getIntConfig(CONFIG_PORT_WORLD); if (instanceAddress.is_v4()) diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index a05d02e211c..2c55b457ce7 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -416,6 +416,11 @@ namespace WorldPackets class HotfixRequest; } + namespace Housing + { + class DeclineNeighborhoodInvites; + } + namespace Inspect { class Inspect; @@ -1441,6 +1446,8 @@ class TC_GAME_API WorldSession void HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildChallengeUpdateRequest& packet); void HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites& packet); + void HandleDeclineNeighborhoodInvites(WorldPackets::Housing::DeclineNeighborhoodInvites const& declineNeighborhoodInvites); + void HandleEnableTaxiNodeOpcode(WorldPackets::Taxi::EnableTaxiNode& enableTaxiNode); void HandleTaxiNodeStatusQueryOpcode(WorldPackets::Taxi::TaxiNodeStatusQuery& taxiNodeStatusQuery); void HandleTaxiQueryAvailableNodesOpcode(WorldPackets::Taxi::TaxiQueryAvailableNodes& taxiQueryAvailableNodes); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index c9b97dd2221..6d950f1570d 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -434,6 +434,13 @@ NonDefaultConstructible SpellEffectHandlers[TOTAL_SPELL_EF &Spell::EffectNULL, //343 SPELL_EFFECT_343 &Spell::EffectNULL, //344 SPELL_EFFECT_344 &Spell::EffectNULL, //345 SPELL_EFFECT_ASSIST_ACTION + &Spell::EffectNULL, //346 SPELL_EFFECT_346 + &Spell::EffectNULL, //347 SPELL_EFFECT_EQUIP_TRANSMOG_OUTFIT + &Spell::EffectNULL, //348 SPELL_EFFECT_GIVE_HOUSE_LEVEL + &Spell::EffectNULL, //349 SPELL_EFFECT_LEARN_HOUSE_ROOM + &Spell::EffectNULL, //350 SPELL_EFFECT_LEARN_HOUSE_EXTERIOR_COMPONENT + &Spell::EffectNULL, //351 SPELL_EFFECT_LEARN_HOUSE_THEME + &Spell::EffectNULL, //352 SPELL_EFFECT_LEARN_HOUSE_ROOM_COMPONENT_TEXTURE }; void Spell::EffectNULL() diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 968202593eb..700af4e4b90 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1260,6 +1260,13 @@ std::array SpellEffectInfo::_d {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 343 SPELL_EFFECT_343 {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 344 SPELL_EFFECT_344 {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 345 SPELL_EFFECT_ASSIST_ACTION + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 346 SPELL_EFFECT_346 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 347 SPELL_EFFECT_EQUIP_TRANSMOG_OUTFIT + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 348 SPELL_EFFECT_GIVE_HOUSE_LEVEL + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 349 SPELL_EFFECT_LEARN_HOUSE_ROOM + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 350 SPELL_EFFECT_LEARN_HOUSE_EXTERIOR_COMPONENT + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 351 SPELL_EFFECT_LEARN_HOUSE_THEME + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 352 SPELL_EFFECT_LEARN_HOUSE_ROOM_COMPONENT_TEXTURE } }; SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, SpellInfoLoadHelper const& data) diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h index 2b46538b42a..ef4e02be69a 100644 --- a/src/tools/map_extractor/loadlib/DBFilesClientList.h +++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h @@ -293,10 +293,18 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1095531, .Name = "CurrencyTypes.db2" }, { .FileDataId = 892585, .Name = "Curve.db2" }, { .FileDataId = 892586, .Name = "CurvePoint.db2" }, + { .FileDataId = 6653645, .Name = "DataTagGroup.db2" }, + { .FileDataId = 6653584, .Name = "DataTagGroupXDataTag.db2" }, + { .FileDataId = 6652252, .Name = "DataTagInfo.db2" }, + { .FileDataId = 6860787, .Name = "DataTagXRecord.db2" }, { .FileDataId = 1279415, .Name = "DeathThudLookups.db2" }, { .FileDataId = 1278176, .Name = "DecalProperties.db2" }, { .FileDataId = 1279100, .Name = "DeclinedWord.db2" }, { .FileDataId = 1279099, .Name = "DeclinedWordCases.db2" }, + { .FileDataId = 6247348, .Name = "DecorCategory.db2" }, + { .FileDataId = 6254050, .Name = "DecorDyeSlot.db2" }, + { .FileDataId = 6247357, .Name = "DecorSubcategory.db2" }, + { .FileDataId = 6247358, .Name = "DecorXDecorSubcategory.db2" }, { .FileDataId = 5920079, .Name = "DelvesSeason.db2" }, { .FileDataId = 5920080, .Name = "DelvesSeasonXSpell.db2" }, { .FileDataId = 1122116, .Name = "DestructibleModelData.db2" }, @@ -310,6 +318,8 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1347279, .Name = "DungeonEncounter.db2" }, { .FileDataId = 1283019, .Name = "DurabilityCosts.db2" }, { .FileDataId = 1130268, .Name = "DurabilityQuality.db2" }, + { .FileDataId = 6254051, .Name = "DyeColor.db2" }, + { .FileDataId = 6254052, .Name = "DyeColorCategory.db2" }, { .FileDataId = 1387381, .Name = "EdgeGlowEffect.db2" }, { .FileDataId = 1343602, .Name = "Emotes.db2" }, { .FileDataId = 1347273, .Name = "EmotesText.db2" }, @@ -319,6 +329,13 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1343313, .Name = "Exhaustion.db2" }, { .FileDataId = 1937326, .Name = "ExpectedStat.db2" }, { .FileDataId = 1969773, .Name = "ExpectedStatMod.db2" }, + { .FileDataId = 6931305, .Name = "ExteriorComponent.db2" }, + { .FileDataId = 6931306, .Name = "ExteriorComponentExitPoint.db2" }, + { .FileDataId = 7280847, .Name = "ExteriorComponentGroup.db2" }, + { .FileDataId = 7280848, .Name = "ExteriorComponentGroupXHook.db2" }, + { .FileDataId = 6931307, .Name = "ExteriorComponentHook.db2" }, + { .FileDataId = 6931308, .Name = "ExteriorComponentType.db2" }, + { .FileDataId = 7412982, .Name = "ExteriorComponentXGroup.db2" }, { .FileDataId = 3527889, .Name = "ExtraAbilityInfo.db2" }, { .FileDataId = 1361972, .Name = "Faction.db2" }, { .FileDataId = 1343595, .Name = "FactionGroup.db2" }, @@ -446,7 +463,15 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 6905813, .Name = "HolidayXTimeEvent.db2" }, { .FileDataId = 996357, .Name = "Holidays.db2" }, { .FileDataId = 1995523, .Name = "Hotfixes.db2" }, + { .FileDataId = 5149690, .Name = "House.db2" }, { .FileDataId = 5149691, .Name = "HouseDecor.db2" }, + { .FileDataId = 6855863, .Name = "HouseDecorMaterial.db2" }, + { .FileDataId = 6860900, .Name = "HouseDecorThemeSet.db2" }, + { .FileDataId = 6931309, .Name = "HouseExteriorWmoData.db2" }, + { .FileDataId = 7149539, .Name = "HouseLevelData.db2" }, + { .FileDataId = 7495433, .Name = "HouseLevelRewardInfo.db2" }, + { .FileDataId = 5163003, .Name = "HouseRoom.db2" }, + { .FileDataId = 6998392, .Name = "HouseTheme.db2" }, { .FileDataId = 1121229, .Name = "ImportPriceArmor.db2" }, { .FileDataId = 1121228, .Name = "ImportPriceQuality.db2" }, { .FileDataId = 1121227, .Name = "ImportPriceShield.db2" }, @@ -641,6 +666,13 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1117086, .Name = "NamesProfanity.db2" }, { .FileDataId = 1117085, .Name = "NamesReserved.db2" }, { .FileDataId = 1117087, .Name = "NamesReservedLocale.db2" }, + { .FileDataId = 6699736, .Name = "NeighborhoodInitiative.db2" }, + { .FileDataId = 6702594, .Name = "NeighborhoodInitiativeReward.db2" }, + { .FileDataId = 6702595, .Name = "NeighborhoodInitiativeTask.db2" }, + { .FileDataId = 6708736, .Name = "NeighborhoodInitiativeXTask.db2" }, + { .FileDataId = 5550624, .Name = "NeighborhoodMap.db2" }, + { .FileDataId = 6237720, .Name = "NeighborhoodNameGen.db2" }, + { .FileDataId = 5550625, .Name = "NeighborhoodPlot.db2" }, { .FileDataId = 1953326, .Name = "NumTalentsAtLevel.db2" }, { .FileDataId = 1090577, .Name = "ObjectEffect.db2" }, { .FileDataId = 1090575, .Name = "ObjectEffectModifier.db2" }, @@ -759,11 +791,19 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1134090, .Name = "ResearchProject.db2" }, { .FileDataId = 1134091, .Name = "ResearchSite.db2" }, { .FileDataId = 1135072, .Name = "Resistances.db2" }, + { .FileDataId = 7439104, .Name = "RetroactiveDecorReward.db2" }, + { .FileDataId = 7507122, .Name = "RetroactiveDecorRewardCriteria.db2" }, { .FileDataId = 1307156, .Name = "RewardPack.db2" }, { .FileDataId = 1307153, .Name = "RewardPackXCurrencyType.db2" }, { .FileDataId = 1307155, .Name = "RewardPackXItem.db2" }, { .FileDataId = 1398908, .Name = "RibbonQuality.db2" }, { .FileDataId = 5936950, .Name = "RolodexType.db2" }, + { .FileDataId = 5503432, .Name = "RoomComponent.db2" }, + { .FileDataId = 5503433, .Name = "RoomComponentOption.db2" }, + { .FileDataId = 5503564, .Name = "RoomComponentOptionTexture.db2" }, + { .FileDataId = 5503573, .Name = "RoomComponentTexture.db2" }, + { .FileDataId = 6378467, .Name = "RoomGridLine.db2" }, + { .FileDataId = 5503435, .Name = "RoomWmoData.db2" }, { .FileDataId = 3256786, .Name = "RopeEffect.db2" }, { .FileDataId = 3500241, .Name = "RuneforgeLegendaryAbility.db2" }, { .FileDataId = 1712172, .Name = "SDReplacementModel.db2" }, -- cgit v1.2.3