diff options
64 files changed, 1814 insertions, 1327 deletions
diff --git a/sql/updates/world/master/2021_07_27_00_world.sql b/sql/updates/world/master/2021_07_27_00_world.sql new file mode 100644 index 00000000000..7f8bd41344d --- /dev/null +++ b/sql/updates/world/master/2021_07_27_00_world.sql @@ -0,0 +1,6 @@ +ALTER TABLE `creature_template` ADD `CreatureDifficultyID` int(11) NOT NULL DEFAULT '0' AFTER `movementId`; +ALTER TABLE `creature_template_scaling` DROP `LevelScalingMin`, DROP `LevelScalingMax`; +ALTER TABLE `points_of_interest` ADD `PositionZ` float NOT NULL DEFAULT '0' AFTER `PositionY`; +ALTER TABLE `quest_template` ADD `PortraitGiverModelSceneID` int(11) NOT NULL DEFAULT '0' AFTER `PortraitGiverMount`; + +DELETE FROM `creature_template_scaling` WHERE `ContentTuningID`=0; diff --git a/src/server/database/Database/Implementation/WorldDatabase.cpp b/src/server/database/Database/Implementation/WorldDatabase.cpp index a5ff404397f..42795730899 100644 --- a/src/server/database/Database/Implementation/WorldDatabase.cpp +++ b/src/server/database/Database/Implementation/WorldDatabase.cpp @@ -78,7 +78,7 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_COMMANDS, "SELECT name, permission, help FROM command", CONNECTION_SYNCH); - PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, name, femaleName, subname, TitleAlt, IconName, gossip_menu_id, minlevel, maxlevel, HealthScalingExpansion, RequiredExpansion, VignetteID, faction, npcflag, speed_walk, speed_run, scale, `rank`, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, unit_flags3, dynamicflags, family, trainer_class, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, movementId, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ? OR 1 = ?", CONNECTION_SYNCH); + PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, name, femaleName, subname, TitleAlt, IconName, gossip_menu_id, minlevel, maxlevel, HealthScalingExpansion, RequiredExpansion, VignetteID, faction, npcflag, speed_walk, speed_run, scale, `rank`, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, unit_class, unit_flags, unit_flags2, unit_flags3, dynamicflags, family, trainer_class, type, type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, RacialLeader, movementId, CreatureDifficultyID, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ? OR 1 = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_GAMEOBJECT_NEAREST, "SELECT guid, id, position_x, position_y, position_z, map, (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) AS order_ FROM gameobject WHERE map = ? AND (POW(position_x - ?, 2) + POW(position_y - ?, 2) + POW(position_z - ?, 2)) <= ? ORDER BY order_", CONNECTION_SYNCH); diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 641c515ee98..24e5134d845 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -3673,6 +3673,57 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 case ModifierTreeType::PlayerMythicPlusRatingEqualOrGreaterThan: // 321 NYI case ModifierTreeType::PlayerMythicPlusRunCountInCurrentExpansionEqualOrGreaterThan: // 322 NYI return false; + case ModifierTreeType::PlayerHasCustomizationChoice: // 323 + { + int32 customizationChoiceIndex = referencePlayer->m_playerData->Customizations.FindIndexIf([reqValue](UF::ChrCustomizationChoice const& choice) + { + return choice.ChrCustomizationChoiceID == reqValue; + }); + if (customizationChoiceIndex < 0) + return false; + break; + } + case ModifierTreeType::PlayerBestWeeklyWinPvpTier: // 324 + { + PvpTierEntry const* pvpTier = sPvpTierStore.LookupEntry(reqValue); + if (!pvpTier) + return false; + if (std::size_t(pvpTier->BracketID) >= referencePlayer->m_activePlayerData->PvpInfo.size()) + return false; + UF::PVPInfo const& pvpInfo = referencePlayer->m_activePlayerData->PvpInfo[pvpTier->BracketID]; + if (pvpTier->ID != pvpInfo.WeeklyBestWinPvpTierID || *pvpInfo.Disqualified) + return false; + break; + } + case ModifierTreeType::PlayerBestWeeklyWinPvpTierInBracketEqualOrGreaterThan: // 325 + { + if (secondaryAsset >= referencePlayer->m_activePlayerData->PvpInfo.size()) + return false; + UF::PVPInfo const& pvpInfo = referencePlayer->m_activePlayerData->PvpInfo[secondaryAsset]; + PvpTierEntry const* pvpTier = sPvpTierStore.LookupEntry(pvpInfo.WeeklyBestWinPvpTierID); + if (!pvpTier) + return false; + if (pvpTier->Rank < int32(reqValue)) + return false; + break; + } + case ModifierTreeType::PlayerHasVanillaCollectorsEdition: // 326 + return false; + case ModifierTreeType::PlayerHasItemWithKeystoneLevelModifierEqualOrGreaterThan: // 327 + { + bool bagScanReachedEnd = referencePlayer->ForEachItem(ItemSearchLocation::Inventory, [reqValue, secondaryAsset](Item const* item) + { + if (item->GetEntry() != reqValue) + return ItemSearchCallbackResult::Continue; + + if (item->GetModifier(ITEM_MODIFIER_CHALLENGE_KEYSTONE_LEVEL) < secondaryAsset) + return ItemSearchCallbackResult::Continue; + + return ItemSearchCallbackResult::Stop; + }); + if (bagScanReachedEnd) + return false; + } default: return false; } diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 12df2c1193a..7c9fc644d13 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -244,6 +244,10 @@ void AuctionPosting::BuildAuctionItem(WorldPackets::AuctionHouse::AuctionItem* a // SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT, SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT, SMSG_AUCTION_REPLICATE_RESPONSE (if commodity) if (sendKey) auctionItem->AuctionBucketKey.emplace(AuctionsBucketKey::ForItem(Items[0])); + + // all + if (!Items[0]->m_itemData->Creator->IsEmpty()) + auctionItem->Creator = *Items[0]->m_itemData->Creator; } uint64 AuctionPosting::CalculateMinIncrement(uint64 bidAmount) diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index 0c2494305c4..f91b2aeca59 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -739,6 +739,7 @@ void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang) LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>* packet = new Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>(); + packet->Data.ChannelGUID = _channelGuid; if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) packet->Data.Initialize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, GetName(localeIdx)); else @@ -783,6 +784,7 @@ void Channel::AddonSay(ObjectGuid const& guid, std::string const& prefix, std::s LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>* packet = new Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>(); + packet->Data.ChannelGUID = _channelGuid; if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) packet->Data.Initialize(CHAT_MSG_CHANNEL, isLogged ? LANG_ADDON_LOGGED : LANG_ADDON, player, player, what, 0, GetName(localeIdx), DEFAULT_LOCALE, prefix); else diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h index dbeaf49c757..9d6eb906a50 100644 --- a/src/server/game/Chat/Channels/Channel.h +++ b/src/server/game/Chat/Channels/Channel.h @@ -180,6 +180,8 @@ class TC_GAME_API Channel uint32 GetChannelId() const { return _channelId; } bool IsConstant() const { return _channelId != 0; } + ObjectGuid GetGUID() const { return _channelGuid; } + bool IsLFG() const { return (GetFlags() & CHANNEL_FLAG_LFG) != 0; } bool IsAnnounce() const { return _announceEnabled; } diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp index 9fb4bb0c210..c572ee48704 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.cpp +++ b/src/server/game/Chat/Channels/ChannelMgr.cpp @@ -73,6 +73,15 @@ Channel* ChannelMgr::GetChannelForPlayerByNamePart(std::string const& namePart, return nullptr; } +Channel* ChannelMgr::GetChannelForPlayerByGuid(ObjectGuid channelGuid, Player* playerSearcher) +{ + for (Channel* channel : playerSearcher->GetJoinedChannels()) + if (channel->GetGUID() == channelGuid) + return channel; + + return nullptr; +} + Channel* ChannelMgr::GetJoinChannel(uint32 channelId, std::string const& name, AreaTableEntry const* zoneEntry /*= nullptr*/) { if (channelId) // builtin diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h index 23d268dc74c..796a1bd0d6e 100644 --- a/src/server/game/Chat/Channels/ChannelMgr.h +++ b/src/server/game/Chat/Channels/ChannelMgr.h @@ -38,6 +38,7 @@ class TC_GAME_API ChannelMgr public: static ChannelMgr* ForTeam(uint32 team); static Channel* GetChannelForPlayerByNamePart(std::string const& namePart, Player* playerSearcher); + static Channel* GetChannelForPlayerByGuid(ObjectGuid channelGuid, Player* playerSearcher); Channel* GetJoinChannel(uint32 channelId, std::string const& name, AreaTableEntry const* zoneEntry = nullptr); Channel* GetChannel(uint32 channelId, std::string const& name, Player* player, bool notify = true, AreaTableEntry const* zoneEntry = nullptr) const; diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp index d1cf52203a4..1641e216a95 100644 --- a/src/server/game/Chat/ChatLink.cpp +++ b/src/server/game/Chat/ChatLink.cpp @@ -106,7 +106,7 @@ bool ChatLink::ValidateName(char* buffer, char const* /*context*/) return true; } -// |color|Hitem:item_id:perm_ench_id:gem1:gem2:gem3:0:random_property:property_seed:reporter_level:reporter_spec:modifiers_mask:context:numBonusListIDs:bonusListIDs(%d):numModifiers:(modifierType(%d):modifierValue(%d)):gem1numBonusListIDs:gem1bonusListIDs(%d):gem2numBonusListIDs:gem2bonusListIDs(%d):gem3numBonusListIDs:gem3bonusListIDs(%d)|h[name]|h|r +// |color|Hitem:item_id:perm_ench_id:gem1:gem2:gem3:0:random_property:property_seed:reporter_level:reporter_spec:modifiers_mask:context:numBonusListIDs:bonusListIDs(%d):numModifiers:(modifierType(%d):modifierValue(%d)):gem1numBonusListIDs:gem1bonusListIDs(%d):gem2numBonusListIDs:gem2bonusListIDs(%d):gem3numBonusListIDs:gem3bonusListIDs(%d):creator:use_enchant_id|h[name]|h|r // |cffa335ee|Hitem:124382:0:0:0:0:0:0:0:0:0:0:0:4:42:562:565:567|h[Edict of Argus]|h|r"); bool ItemChatLink::Initialize(std::istringstream& iss) { @@ -365,6 +365,30 @@ bool ItemChatLink::Initialize(std::istringstream& iss) } } + if (!CheckDelimiter(iss, DELIMITER, "item")) + return false; + + // guid as string + if (HasValue(iss)) + { + std::array<char, 128> guidBuffer = { }; + if (!iss.getline(guidBuffer.data(), 128, DELIMITER)) + { + TC_LOG_TRACE("chat.system", "ChatHandler::isValidChatMessage('%s'): sequence finished unexpectedly while reading creator guid string", iss.str().c_str()); + return false; + } + iss.unget(); // put next : back into stream + } + + if (!CheckDelimiter(iss, DELIMITER, "item")) + return false; + + if (HasValue(iss) && !ReadInt32(iss, _useEnchantId)) + { + TC_LOG_TRACE("chat.system", "ChatHandler::isValidChatMessage('%s'): sequence finished unexpectedly while reading on use enchatment id", iss.str().c_str()); + return false; + } + return true; } diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h index 69d82678ddb..60be2a61f21 100644 --- a/src/server/game/Chat/ChatLink.h +++ b/src/server/game/Chat/ChatLink.h @@ -76,6 +76,7 @@ protected: int32 _reporterLevel; int32 _reporterSpec; int32 _context; + int32 _useEnchantId; std::vector<int32> _bonusListIDs; std::vector<std::pair<uint32, int32>> _modifiers; std::vector<int32> _gemBonusListIDs[3]; diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 58ed8877447..a8852784022 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1299,6 +1299,11 @@ enum class ModifierTreeType : int32 RapidRenownCatchupActive = 320, /*NYI*/ // Rapid Renown Catchup Active PlayerMythicPlusRatingEqualOrGreaterThan = 321, /*NYI*/ // Player has Mythic+ Rating of at least "{#DungeonScore}" PlayerMythicPlusRunCountInCurrentExpansionEqualOrGreaterThan = 322, /*NYI*/ // Player has completed at least "{#MythicKeystoneRuns}" Mythic+ runs in current expansion + PlayerHasCustomizationChoice = 323, // (Mainline) Player has Customization Choice "{ChrCustomizationChoice}" + PlayerBestWeeklyWinPvpTier = 324, // (Mainline) Player has best weekly win in PVP tier {PvpTier} + PlayerBestWeeklyWinPvpTierInBracketEqualOrGreaterThan = 325, // (Mainline) Player has best weekly win at or above "{@PVP_TIER_ENUM}" for "{@PVP_BRACKET}" + PlayerHasVanillaCollectorsEdition = 326, // Player has Vanilla Collector's Edition + PlayerHasItemWithKeystoneLevelModifierEqualOrGreaterThan = 327, }; enum class ModifierTreeOperator : int8 diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 3467bb93098..6f1e78e86d5 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -211,6 +211,7 @@ WorldPacket CreatureTemplate::BuildQueryData(LocaleConstant loc) const stats.HealthScalingExpansion = HealthScalingExpansion; stats.VignetteID = VignetteID; stats.Class = unit_class; + stats.CreatureDifficultyID = CreatureDifficultyID; stats.WidgetSetID = WidgetSetID; stats.WidgetSetUnitConditionID = WidgetSetUnitConditionID; @@ -243,8 +244,6 @@ CreatureLevelScaling const* CreatureTemplate::GetLevelScaling(Difficulty difficu { DefaultCreatureLevelScaling() { - MinLevel = 0; - MaxLevel = 0; DeltaLevelMin = 0; DeltaLevelMax = 0; ContentTuningID = 0; @@ -1535,8 +1534,11 @@ void Creature::SelectLevel() CreatureLevelScaling const* scaling = cInfo->GetLevelScaling(GetMap()->GetDifficultyID()); - SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMin), scaling->MinLevel); - SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMax), scaling->MaxLevel); + if (Optional<ContentTuningLevels> levels = sDB2Manager.GetContentTuningData(scaling->ContentTuningID, 0)) + { + 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); + } int32 mindelta = std::min(scaling->DeltaLevelMax, scaling->DeltaLevelMin); int32 maxdelta = std::max(scaling->DeltaLevelMax, scaling->DeltaLevelMin); @@ -2798,7 +2800,7 @@ bool Creature::HasScalableLevels() const CreatureTemplate const* cinfo = GetCreatureTemplate(); CreatureLevelScaling const* scaling = cinfo->GetLevelScaling(GetMap()->GetDifficultyID()); - return (scaling->MinLevel != 0 && scaling->MaxLevel != 0); + return scaling->ContentTuningID != 0; } uint64 Creature::GetMaxHealthByLevel(uint8 level) const diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 7a311bcbb31..4ce0e66670b 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -327,8 +327,6 @@ struct CreatureModel struct CreatureLevelScaling { - uint16 MinLevel; - uint16 MaxLevel; int16 DeltaLevelMin; int16 DeltaLevelMax; int32 ContentTuningID; @@ -395,6 +393,7 @@ struct TC_GAME_API CreatureTemplate float ModExperience; bool RacialLeader; uint32 movementId; + int32 CreatureDifficultyID; int32 WidgetSetID; int32 WidgetSetUnitConditionID; bool RegenHealth; diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 304fb9e273f..9df67435686 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -431,6 +431,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU packet.QuestID = quest->GetQuestId(); packet.PortraitGiver = quest->GetQuestGiverPortrait(); packet.PortraitGiverMount = quest->GetQuestGiverPortraitMount(); + packet.PortraitGiverModelSceneID = quest->GetQuestGiverPortraitModelSceneId(); packet.PortraitTurnIn = quest->GetQuestTurnInPortrait(); packet.QuestSessionBonus = 0; //quest->GetQuestSessionBonus(); // this is only sent while quest session is active packet.AutoLaunched = autoLaunched; @@ -531,6 +532,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI packet.PortraitTurnIn = quest->GetQuestTurnInPortrait(); packet.PortraitGiver = quest->GetQuestGiverPortrait(); packet.PortraitGiverMount = quest->GetQuestGiverPortraitMount(); + packet.PortraitGiverModelSceneID = quest->GetQuestGiverPortraitModelSceneId(); packet.QuestPackageID = quest->GetQuestPackageID(); _session->SendPacket(packet.Write()); diff --git a/src/server/game/Entities/Object/MovementInfo.h b/src/server/game/Entities/Object/MovementInfo.h index 63efcd18698..7dcc695721e 100644 --- a/src/server/game/Entities/Object/MovementInfo.h +++ b/src/server/game/Entities/Object/MovementInfo.h @@ -118,6 +118,7 @@ struct MovementForce uint32 TransportID = 0; float Magnitude = 0.0f; uint8 Type = 0; + int32 Unused910 = 0; }; class MovementForces diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 316927af52a..55ae7da41aa 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -1115,6 +1115,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << uint32(ChannelObjects.size()); data << SkinningOwnerGUID; data << uint32(SilencedSchoolMask); + data << NameplateAttachToGUID; for (std::size_t i = 0; i < PassiveSpells.size(); ++i) { PassiveSpells[i].WriteCreate(data, owner, receiver); @@ -1131,7 +1132,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x03F8007Fu, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x07F000FFu, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1139,16 +1140,16 @@ void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x0400007Eu, 0xFC07FF80u, 0x1FFFFFFFu }; + allowedMaskForTarget |= { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x0800007Eu, 0xF80FFF00u, 0x3FFFFFFFu }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) - allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x04000000u, 0x0007FF80u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x08000000u, 0x000FFF00u, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00007F80u }; + allowedMaskForTarget |= { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0000FF00u }; } void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x03F8007Fu, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x07F000FFu, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -1682,90 +1683,94 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor { data << uint32(SilencedSchoolMask); } + if (changesMask[119]) + { + data << NameplateAttachToGUID; + } } - if (changesMask[119]) + if (changesMask[120]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[120 + i]) + if (changesMask[121 + i]) { data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(NpcFlags[i], i, owner, receiver)); } } } - if (changesMask[122]) + if (changesMask[123]) { for (std::size_t i = 0; i < 6; ++i) { - if (changesMask[123 + i]) + if (changesMask[124 + i]) { data << int32(Power[i]); } - if (changesMask[129 + i]) + if (changesMask[130 + i]) { data << int32(MaxPower[i]); } - if (changesMask[135 + i]) + if (changesMask[136 + i]) { data << float(PowerRegenFlatModifier[i]); } - if (changesMask[141 + i]) + if (changesMask[142 + i]) { data << float(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[147]) + if (changesMask[148]) { for (std::size_t i = 0; i < 3; ++i) { - if (changesMask[148 + i]) + if (changesMask[149 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[151]) + if (changesMask[152]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[152 + i]) + if (changesMask[153 + i]) { data << uint32(AttackRoundBaseTime[i]); } } } - if (changesMask[154]) + if (changesMask[155]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[155 + i]) + if (changesMask[156 + i]) { data << int32(Stats[i]); } - if (changesMask[159 + i]) + if (changesMask[160 + i]) { data << int32(StatPosBuff[i]); } - if (changesMask[163 + i]) + if (changesMask[164 + i]) { data << int32(StatNegBuff[i]); } } } - if (changesMask[167]) + if (changesMask[168]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[168 + i]) + if (changesMask[169 + i]) { data << int32(Resistances[i]); } - if (changesMask[175 + i]) + if (changesMask[176 + i]) { data << int32(BonusResistanceMods[i]); } - if (changesMask[182 + i]) + if (changesMask[183 + i]) { data << int32(ManaCostModifier[i]); } @@ -1890,6 +1895,7 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(GuildGUID); Base::ClearChangesMask(SkinningOwnerGUID); Base::ClearChangesMask(SilencedSchoolMask); + Base::ClearChangesMask(NameplateAttachToGUID); Base::ClearChangesMask(NpcFlags); Base::ClearChangesMask(Power); Base::ClearChangesMask(MaxPower); @@ -2115,7 +2121,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << uint32(VirtualPlayerRealm); data << uint32(CurrentSpecID); data << int32(TaxiMountAnimKitID); - for (std::size_t i = 0; i < 4; ++i) + for (std::size_t i = 0; i < 6; ++i) { data << float(AvgItemLevel[i]); } @@ -2147,12 +2153,13 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data.WriteBit(HasQuestSession); } data.WriteBit(HasLevelLink); + data << DungeonScore; data.FlushBits(); } void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01FFFFFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000007u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0FFFFFFEu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2160,12 +2167,12 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFFCu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000000u }; + allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01FFFFFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000007u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0FFFFFFEu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -2357,12 +2364,16 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { data << int32(SoulbindID); } + if (changesMask[34]) + { + data << DungeonScore; + } } - if (changesMask[34]) + if (changesMask[35]) { for (std::size_t i = 0; i < 125; ++i) { - if (changesMask[35 + i]) + if (changesMask[36 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -2371,21 +2382,21 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[160]) + if (changesMask[161]) { for (std::size_t i = 0; i < 19; ++i) { - if (changesMask[161 + i]) + if (changesMask[162 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[180]) + if (changesMask[181]) { - for (std::size_t i = 0; i < 4; ++i) + for (std::size_t i = 0; i < 6; ++i) { - if (changesMask[181 + i]) + if (changesMask[182 + i]) { data << float(AvgItemLevel[i]); } @@ -2428,6 +2439,7 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(CtrOptions); Base::ClearChangesMask(CovenantID); Base::ClearChangesMask(SoulbindID); + Base::ClearChangesMask(DungeonScore); Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); Base::ClearChangesMask(AvgItemLevel); @@ -2555,6 +2567,7 @@ void PVPInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* r data << uint32(WeeklyBestRating); data << uint32(SeasonBestRating); data << uint32(PvpTierID); + data << uint32(WeeklyBestWinPvpTierID); data.WriteBit(Disqualified); data.FlushBits(); } @@ -2565,7 +2578,7 @@ void PVPInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 10); + data.WriteBits(changesMask.GetBlock(0), 11); if (changesMask[0]) { @@ -2609,6 +2622,10 @@ void PVPInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const { data << uint32(PvpTierID); } + if (changesMask[10]) + { + data << uint32(WeeklyBestWinPvpTierID); + } } data.FlushBits(); } @@ -2624,6 +2641,7 @@ void PVPInfo::ClearChangesMask() Base::ClearChangesMask(WeeklyBestRating); Base::ClearChangesMask(SeasonBestRating); Base::ClearChangesMask(PvpTierID); + Base::ClearChangesMask(WeeklyBestWinPvpTierID); _changesMask.ResetAll(); } @@ -2906,7 +2924,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f Skill->WriteCreate(data, owner, receiver); data << int32(CharacterPoints); data << int32(MaxTalentTiers); - data << int32(TrackCreatureMask); + data << uint32(TrackCreatureMask); for (std::size_t i = 0; i < 2; ++i) { data << uint32(TrackResourceMask[i]); @@ -2934,7 +2952,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << float(VersatilityBonus); data << float(PvpPowerDamage); data << float(PvpPowerHealing); - for (std::size_t i = 0; i < 192; ++i) + for (std::size_t i = 0; i < 240; ++i) { data << uint64(ExploredZones[i]); } @@ -3022,11 +3040,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f } data << int32(Honor); data << int32(HonorNextLevel); - data << int64(PvpRewardAchieved); - data << int32(PvpTierMaxFromWins); - data << int64(PvpLastWeeksRewardAchieved); - data << int32(PvpLastWeeksTierMaxFromWins); - data << int64(PvpLastWeeksRewardClaimed); data << uint8(NumBankSlots); data << uint32(ResearchSites.size()); data << uint32(ResearchSiteProgress.size()); @@ -3060,6 +3073,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << int32(UiChromieTimeExpansionID); data << int32(TransportServerTime); data << uint32(WeeklyRewardsPeriodSinceOrigin); + data << int16(DEBUGSoulbindConduitRank); for (std::size_t i = 0; i < KnownTitles.size(); ++i) { data << uint64(KnownTitles[i]); @@ -3159,6 +3173,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { QuestSession->WriteCreate(data, owner, receiver); } + data << DungeonScore; for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i) { CharacterRestrictions[i].WriteCreate(data, owner, receiver); @@ -3175,8 +3190,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { for (std::size_t i = 0; i < 1; ++i) data << uint32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 16); - for (std::size_t i = 0; i < 48; ++i) + data.WriteBits(changesMask.GetBlocksMask(1), 17); + for (std::size_t i = 0; i < 49; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -3641,7 +3656,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[39]) { - data << int32(TrackCreatureMask); + data << uint32(TrackCreatureMask); } if (changesMask[40]) { @@ -3899,211 +3914,199 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[104]) { - data << int64(PvpRewardAchieved); - } - if (changesMask[105]) - { - data << int32(PvpTierMaxFromWins); - } - if (changesMask[106]) - { - data << int64(PvpLastWeeksRewardAchieved); + data << uint8(NumBankSlots); } if (changesMask[107]) { - data << int32(PvpLastWeeksTierMaxFromWins); + data << int32(UiChromieTimeExpansionID); } if (changesMask[108]) { - data << int64(PvpLastWeeksRewardClaimed); + data << int32(TransportServerTime); } if (changesMask[109]) { - data << uint8(NumBankSlots); - } - if (changesMask[112]) - { - data << int32(UiChromieTimeExpansionID); - } - if (changesMask[113]) - { - data << int32(TransportServerTime); + data << uint32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[114]) + if (changesMask[110]) { - data << uint32(WeeklyRewardsPeriodSinceOrigin); + data << int16(DEBUGSoulbindConduitRank); } } if (changesMask[98]) { data.WriteBits(QuestSession.is_initialized(), 1); - if (changesMask[111]) + if (changesMask[106]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[110]) + if (changesMask[105]) { if (QuestSession.is_initialized()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } + if (changesMask[111]) + { + data << DungeonScore; + } } - if (changesMask[115]) + if (changesMask[112]) { for (std::size_t i = 0; i < 199; ++i) { - if (changesMask[116 + i]) + if (changesMask[113 + i]) { data << InvSlots[i]; } } } - if (changesMask[315]) + if (changesMask[312]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[316 + i]) + if (changesMask[313 + i]) { data << uint32(TrackResourceMask[i]); } } } - if (changesMask[318]) + if (changesMask[315]) { - for (std::size_t i = 0; i < 192; ++i) + for (std::size_t i = 0; i < 240; ++i) { - if (changesMask[319 + i]) + if (changesMask[316 + i]) { data << uint64(ExploredZones[i]); } } } - if (changesMask[511]) + if (changesMask[556]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[512 + i]) + if (changesMask[557 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[514]) + if (changesMask[559]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[515 + i]) + if (changesMask[560 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[522 + i]) + if (changesMask[567 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[529 + i]) + if (changesMask[574 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[536 + i]) + if (changesMask[581 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[543]) + if (changesMask[588]) { for (std::size_t i = 0; i < 3; ++i) { - if (changesMask[544 + i]) + if (changesMask[589 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[547 + i]) + if (changesMask[592 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[550]) + if (changesMask[595]) { for (std::size_t i = 0; i < 12; ++i) { - if (changesMask[551 + i]) + if (changesMask[596 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[563 + i]) + if (changesMask[608 + i]) { data << uint32(BuybackTimestamp[i]); } } } - if (changesMask[575]) + if (changesMask[620]) { for (std::size_t i = 0; i < 32; ++i) { - if (changesMask[576 + i]) + if (changesMask[621 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[615]) + if (changesMask[660]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[616 + i]) + if (changesMask[661 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[620]) + if (changesMask[665]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[621 + i]) + if (changesMask[666 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[623]) + if (changesMask[668]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[624 + i]) + if (changesMask[669 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[628]) + if (changesMask[673]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[629 + i]) + if (changesMask[674 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[636]) + if (changesMask[681]) { for (std::size_t i = 0; i < 875; ++i) { - if (changesMask[637 + i]) + if (changesMask[682 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[608]) + if (changesMask[653]) { for (std::size_t i = 0; i < 6; ++i) { - if (changesMask[609 + i]) + if (changesMask[654 + i]) { PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } @@ -4213,17 +4216,14 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(GuildClubMemberID); Base::ClearChangesMask(Honor); Base::ClearChangesMask(HonorNextLevel); - Base::ClearChangesMask(PvpRewardAchieved); - Base::ClearChangesMask(PvpTierMaxFromWins); - Base::ClearChangesMask(PvpLastWeeksRewardAchieved); - Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins); - Base::ClearChangesMask(PvpLastWeeksRewardClaimed); Base::ClearChangesMask(NumBankSlots); Base::ClearChangesMask(Field_1410); Base::ClearChangesMask(QuestSession); Base::ClearChangesMask(UiChromieTimeExpansionID); Base::ClearChangesMask(TransportServerTime); Base::ClearChangesMask(WeeklyRewardsPeriodSinceOrigin); + Base::ClearChangesMask(DEBUGSoulbindConduitRank); + Base::ClearChangesMask(DungeonScore); Base::ClearChangesMask(InvSlots); Base::ClearChangesMask(TrackResourceMask); Base::ClearChangesMask(ExploredZones); @@ -4904,11 +4904,13 @@ void ConversationData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { (*Lines)[i].WriteCreate(data, owner, receiver); } + data.WriteBit(DontPlayBroadcastTextSounds); data << uint32(Actors.size()); for (std::size_t i = 0; i < Actors.size(); ++i) { Actors[i].WriteCreate(data, owner, receiver); } + data.FlushBits(); } void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const @@ -4918,12 +4920,16 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Conversation const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlock(0), 5); + data.WriteBits(changesMask.GetBlock(0), 6); if (changesMask[0]) { if (changesMask[1]) { + data.WriteBit(DontPlayBroadcastTextSounds); + } + if (changesMask[2]) + { data.WriteBits(Lines->size(), 32); for (std::size_t i = 0; i < Lines->size(); ++i) { @@ -4934,7 +4940,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) + if (changesMask[3]) { if (!ignoreNestedChangesMask) Actors.WriteUpdateMask(data); @@ -4945,7 +4951,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) + if (changesMask[3]) { for (std::size_t i = 0; i < Actors.size(); ++i) { @@ -4955,19 +4961,21 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[3]) + if (changesMask[4]) { data << int32(LastLineEndTime); } - if (changesMask[4]) + if (changesMask[5]) { data << uint32(Progress); } } + data.FlushBits(); } void ConversationData::ClearChangesMask() { + Base::ClearChangesMask(DontPlayBroadcastTextSounds); Base::ClearChangesMask(Lines); Base::ClearChangesMask(Actors); Base::ClearChangesMask(LastLineEndTime); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index d65234a2286..5c3f61e5fae 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -19,6 +19,7 @@ #define UpdateFields_h__ #include "EnumFlag.h" +#include "MythicPlusPacketsCommon.h" #include "ObjectGuid.h" #include "Position.h" #include "QuaternionData.h" @@ -251,7 +252,7 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); } }; -struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<189> +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<190> { UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells; @@ -373,20 +374,21 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<189> UpdateField<ObjectGuid, 96, 116> GuildGUID; UpdateField<ObjectGuid, 96, 117> SkinningOwnerGUID; UpdateField<uint32, 96, 118> SilencedSchoolMask; - UpdateFieldArray<uint32, 2, 119, 120> NpcFlags; + UpdateField<ObjectGuid, 96, 119> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object + UpdateFieldArray<uint32, 2, 120, 121> NpcFlags; struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateFieldArray<int32, 6, 122, 123> Power; - UpdateFieldArray<int32, 6, 122, 129> MaxPower; - UpdateFieldArray<float, 6, 122, 135> PowerRegenFlatModifier; - UpdateFieldArray<float, 6, 122, 141> PowerRegenInterruptedFlatModifier; - UpdateFieldArray<UF::VisibleItem, 3, 147, 148> VirtualItems; - UpdateFieldArray<uint32, 2, 151, 152> AttackRoundBaseTime; - UpdateFieldArray<int32, 4, 154, 155> Stats; - UpdateFieldArray<int32, 4, 154, 159> StatPosBuff; - UpdateFieldArray<int32, 4, 154, 163> StatNegBuff; - UpdateFieldArray<int32, 7, 167, 168> Resistances; - UpdateFieldArray<int32, 7, 167, 175> BonusResistanceMods; - UpdateFieldArray<int32, 7, 167, 182> ManaCostModifier; + UpdateFieldArray<int32, 6, 123, 124> Power; + UpdateFieldArray<int32, 6, 123, 130> MaxPower; + UpdateFieldArray<float, 6, 123, 136> PowerRegenFlatModifier; + UpdateFieldArray<float, 6, 123, 142> PowerRegenInterruptedFlatModifier; + UpdateFieldArray<UF::VisibleItem, 3, 148, 149> VirtualItems; + UpdateFieldArray<uint32, 2, 152, 153> AttackRoundBaseTime; + UpdateFieldArray<int32, 4, 155, 156> Stats; + UpdateFieldArray<int32, 4, 155, 160> StatPosBuff; + UpdateFieldArray<int32, 4, 155, 164> StatNegBuff; + UpdateFieldArray<int32, 7, 168, 169> Resistances; + UpdateFieldArray<int32, 7, 168, 176> BonusResistanceMods; + UpdateFieldArray<int32, 7, 168, 183> ManaCostModifier; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; @@ -448,7 +450,7 @@ struct CTROptions : public IsUpdateFieldStructureTag bool operator!=(CTROptions const& right) const { return !(*this == right); } }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<185> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<188> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -482,9 +484,10 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<185> UpdateField<UF::CTROptions, 0, 30> CtrOptions; UpdateField<int32, 0, 31> CovenantID; UpdateField<int32, 32, 33> SoulbindID; - UpdateFieldArray<UF::QuestLog, 125, 34, 35> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 160, 161> VisibleItems; - UpdateFieldArray<float, 4, 180, 181> AvgItemLevel; + UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 34> DungeonScore; + UpdateFieldArray<UF::QuestLog, 125, 35, 36> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 161, 162> VisibleItems; + UpdateFieldArray<float, 6, 181, 182> AvgItemLevel; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -520,7 +523,7 @@ struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3> void ClearChangesMask(); }; -struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10> +struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<11> { UpdateField<bool, 0, 1> Disqualified; UpdateField<uint32, 0, 2> WeeklyPlayed; @@ -531,6 +534,7 @@ struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10> UpdateField<uint32, 0, 7> WeeklyBestRating; UpdateField<uint32, 0, 8> SeasonBestRating; UpdateField<uint32, 0, 9> PvpTierID; + UpdateField<uint32, 0, 10> WeeklyBestWinPvpTierID; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -647,7 +651,7 @@ struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3 void ClearChangesMask(); }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1512> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1557> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BankAutoSortDisabled; @@ -685,7 +689,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<UF::SkillInfo, 34, 36> Skill; UpdateField<int32, 34, 37> CharacterPoints; UpdateField<int32, 34, 38> MaxTalentTiers; - UpdateField<int32, 34, 39> TrackCreatureMask; + UpdateField<uint32, 34, 39> TrackCreatureMask; UpdateField<float, 34, 40> MainhandExpertise; UpdateField<float, 34, 41> OffhandExpertise; UpdateField<float, 34, 42> RangedExpertise; @@ -748,36 +752,33 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<uint64, 98, 101> GuildClubMemberID; UpdateField<int32, 98, 102> Honor; UpdateField<int32, 98, 103> HonorNextLevel; - UpdateField<int64, 98, 104> PvpRewardAchieved; - UpdateField<int32, 98, 105> PvpTierMaxFromWins; - UpdateField<int64, 98, 106> PvpLastWeeksRewardAchieved; - UpdateField<int32, 98, 107> PvpLastWeeksTierMaxFromWins; - UpdateField<int64, 98, 108> PvpLastWeeksRewardClaimed; - UpdateField<uint8, 98, 109> NumBankSlots; - UpdateField<UF::ActivePlayerUnk901, 98, 111> Field_1410; - OptionalUpdateField<UF::QuestSession, 98, 110> QuestSession; - UpdateField<int32, 98, 112> UiChromieTimeExpansionID; - UpdateField<int32, 98, 113> TransportServerTime; - UpdateField<uint32, 98, 114> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateFieldArray<ObjectGuid, 199, 115, 116> InvSlots; - UpdateFieldArray<uint32, 2, 315, 316> TrackResourceMask; - UpdateFieldArray<uint64, 192, 318, 319> ExploredZones; - UpdateFieldArray<UF::RestInfo, 2, 511, 512> RestInfo; - UpdateFieldArray<int32, 7, 514, 515> ModDamageDonePos; - UpdateFieldArray<int32, 7, 514, 522> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 514, 529> ModDamageDonePercent; - UpdateFieldArray<float, 7, 514, 536> ModHealingDonePercent; - UpdateFieldArray<float, 3, 543, 544> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 543, 547> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 550, 551> BuybackPrice; - UpdateFieldArray<uint32, 12, 550, 563> BuybackTimestamp; - UpdateFieldArray<int32, 32, 575, 576> CombatRatings; - UpdateFieldArray<UF::PVPInfo, 6, 608, 609> PvpInfo; - UpdateFieldArray<uint32, 4, 615, 616> NoReagentCostMask; - UpdateFieldArray<int32, 2, 620, 621> ProfessionSkillLine; - UpdateFieldArray<uint32, 4, 623, 624> BagSlotFlags; - UpdateFieldArray<uint32, 7, 628, 629> BankBagSlotFlags; - UpdateFieldArray<uint64, 875, 636, 637> QuestCompleted; + UpdateField<uint8, 98, 104> NumBankSlots; + UpdateField<UF::ActivePlayerUnk901, 98, 106> Field_1410; + OptionalUpdateField<UF::QuestSession, 98, 105> QuestSession; + UpdateField<int32, 98, 107> UiChromieTimeExpansionID; + UpdateField<int32, 98, 108> TransportServerTime; + UpdateField<uint32, 98, 109> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 98, 110> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 98, 111> DungeonScore; + UpdateFieldArray<ObjectGuid, 199, 112, 113> InvSlots; + UpdateFieldArray<uint32, 2, 312, 313> TrackResourceMask; + UpdateFieldArray<uint64, 240, 315, 316> ExploredZones; + UpdateFieldArray<UF::RestInfo, 2, 556, 557> RestInfo; + UpdateFieldArray<int32, 7, 559, 560> ModDamageDonePos; + UpdateFieldArray<int32, 7, 559, 567> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 559, 574> ModDamageDonePercent; + UpdateFieldArray<float, 7, 559, 581> ModHealingDonePercent; + UpdateFieldArray<float, 3, 588, 589> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 588, 592> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 595, 596> BuybackPrice; + UpdateFieldArray<uint32, 12, 595, 608> BuybackTimestamp; + UpdateFieldArray<int32, 32, 620, 621> CombatRatings; + UpdateFieldArray<UF::PVPInfo, 6, 653, 654> PvpInfo; + UpdateFieldArray<uint32, 4, 660, 661> NoReagentCostMask; + UpdateFieldArray<int32, 2, 665, 666> ProfessionSkillLine; + UpdateFieldArray<uint32, 4, 668, 669> BagSlotFlags; + UpdateFieldArray<uint32, 7, 673, 674> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 681, 682> QuestCompleted; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -931,12 +932,13 @@ struct ConversationActor : public IsUpdateFieldStructureTag bool operator!=(ConversationActor const& right) const { return !(*this == right); } }; -struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<5> +struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<6> { - UpdateField<std::vector<UF::ConversationLine>, 0, 1> Lines; - DynamicUpdateField<UF::ConversationActor, 0, 2> Actors; - UpdateField<int32, 0, 3> LastLineEndTime; - UpdateField<uint32, 0, 4> Progress; + UpdateField<bool, 0, 1> DontPlayBroadcastTextSounds; + UpdateField<std::vector<UF::ConversationLine>, 0, 2> Lines; + DynamicUpdateField<UF::ConversationActor, 0, 3> Actors; + UpdateField<int32, 0, 4> LastLineEndTime; + UpdateField<uint32, 0, 5> Progress; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Player/EquipmentSet.h b/src/server/game/Entities/Player/EquipmentSet.h index 7181b7d89ee..26d7a4dd6a3 100644 --- a/src/server/game/Entities/Player/EquipmentSet.h +++ b/src/server/game/Entities/Player/EquipmentSet.h @@ -54,8 +54,10 @@ struct EquipmentSetInfo std::array<ObjectGuid, EQUIPMENT_SET_SLOTS> Pieces; std::array<int32, EQUIPMENT_SET_SLOTS> Appearances; ///< ItemModifiedAppearanceID std::array<int32, 2> Enchants; ///< SpellItemEnchantmentID - int32 Unknown901_1 = 0; - int32 Unknown901_2 = 0; + int32 SecondaryShoulderApparanceID = 0; ///< Secondary shoulder appearance + int32 SecondaryShoulderSlot = 0; ///< Always 2 if secondary shoulder apperance is used + int32 SecondaryWeaponAppearanceID = 0; ///< For legion artifacts: linked child item appearance + int32 SecondaryWeaponSlot = 0; ///< For legion artifacts: which slot is used by child item } Data; /// Server-side data diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index ec58f379b9e..c223fd89b39 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -358,9 +358,11 @@ void ObjectMgr::LoadCreatureTemplates() // "spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, VehicleId, mingold, maxgold, AIName, MovementType, " // 60 61 62 63 64 65 66 67 68 // "InhabitType, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, " - // 69 70 71 72 73 74 75 76 - // "RacialLeader, movementId, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, " - // 77 + // 69 70 71 72 73 74 + // "RacialLeader, movementId, CreatureDifficultyID, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, " + // 75 76 77 + // "mechanic_immune_mask, spell_school_immune_mask, flags_extra, " + // 78 // "ScriptName FROM creature_template WHERE entry = ? OR 1 = ?"); WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_TEMPLATE); @@ -462,13 +464,14 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields) creatureTemplate.ModExperience = fields[68].GetFloat(); creatureTemplate.RacialLeader = fields[69].GetBool(); creatureTemplate.movementId = fields[70].GetUInt32(); - creatureTemplate.WidgetSetID = fields[71].GetInt32(); - creatureTemplate.WidgetSetUnitConditionID = fields[72].GetInt32(); - creatureTemplate.RegenHealth = fields[73].GetBool(); - creatureTemplate.MechanicImmuneMask = fields[74].GetUInt32(); - creatureTemplate.SpellSchoolImmuneMask = fields[75].GetUInt32(); - creatureTemplate.flags_extra = fields[76].GetUInt32(); - creatureTemplate.ScriptID = GetScriptId(fields[77].GetString()); + creatureTemplate.CreatureDifficultyID = fields[71].GetInt32(); + creatureTemplate.WidgetSetID = fields[72].GetInt32(); + creatureTemplate.WidgetSetUnitConditionID = fields[73].GetInt32(); + creatureTemplate.RegenHealth = fields[74].GetBool(); + creatureTemplate.MechanicImmuneMask = fields[75].GetUInt32(); + creatureTemplate.SpellSchoolImmuneMask = fields[76].GetUInt32(); + creatureTemplate.flags_extra = fields[77].GetUInt32(); + creatureTemplate.ScriptID = GetScriptId(fields[78].GetString()); } void ObjectMgr::LoadCreatureTemplateModels() @@ -638,8 +641,8 @@ void ObjectMgr::LoadCreatureScalingData() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 6 - QueryResult result = WorldDatabase.Query("SELECT Entry, DifficultyID, LevelScalingMin, LevelScalingMax, LevelScalingDeltaMin, LevelScalingDeltaMax, ContentTuningID FROM creature_template_scaling ORDER BY Entry"); + // 0 1 2 3 4 + QueryResult result = WorldDatabase.Query("SELECT Entry, DifficultyID, LevelScalingDeltaMin, LevelScalingDeltaMax, ContentTuningID FROM creature_template_scaling ORDER BY Entry"); if (!result) { @@ -663,11 +666,9 @@ void ObjectMgr::LoadCreatureScalingData() } CreatureLevelScaling creatureLevelScaling; - creatureLevelScaling.MinLevel = fields[2].GetUInt16(); - creatureLevelScaling.MaxLevel = fields[3].GetUInt16(); - creatureLevelScaling.DeltaLevelMin = fields[4].GetInt16(); - creatureLevelScaling.DeltaLevelMax = fields[5].GetInt16(); - creatureLevelScaling.ContentTuningID = fields[6].GetInt32(); + creatureLevelScaling.DeltaLevelMin = fields[2].GetInt16(); + creatureLevelScaling.DeltaLevelMax = fields[3].GetInt16(); + creatureLevelScaling.ContentTuningID = fields[4].GetInt32(); itr->second.scalingStore[difficulty] = creatureLevelScaling; @@ -4127,19 +4128,21 @@ void ObjectMgr::LoadQuests() "RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemDisplayID3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemDisplayID4, " //52 53 54 55 56 57 "RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemDisplayID5, RewardChoiceItemID6, RewardChoiceItemQuantity6, RewardChoiceItemDisplayID6, " - //58 59 60 61 62 63 64 65 66 67 68 - "POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, PortraitGiver, PortraitGiverMount, PortraitTurnIn, " - //69 70 71 72 73 74 75 76 + //58 59 60 61 62 63 64 65 + "POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, " + //66 67 68 69 + "PortraitGiver, PortraitGiverMount, PortraitGiverModelSceneID, PortraitTurnIn, " + //70 71 72 73 74 75 76 77 "RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionCapIn1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionCapIn2, " - //77 78 79 80 81 82 83 84 + //78 79 80 81 82 83 84 85 "RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionCapIn3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionCapIn4, " - //85 86 87 88 89 + //86 87 88 89 90 "RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, " - //90 91 92 93 94 95 96 97 + //91 92 93 94 95 96 97 98 "RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " - //98 99 100 101 102 103 104 105 106 + //99 100 101 102 103 104 105 106 107 "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, QuestSessionBonus, " - //107 108 109 110 111 112 113 114 115 + //108 109 110 111 112 113 114 115 116 "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog" " FROM quest_template"); if (!result) @@ -7844,8 +7847,8 @@ void ObjectMgr::LoadPointsOfInterest() uint32 count = 0; - // 0 1 2 3 4 5 6 7 - QueryResult result = WorldDatabase.Query("SELECT ID, PositionX, PositionY, Icon, Flags, Importance, Name, Unknown905 FROM points_of_interest"); + // 0 1 2 3 4 5 6 7 8 + QueryResult result = WorldDatabase.Query("SELECT ID, PositionX, PositionY, PositionZ, Icon, Flags, Importance, Name, Unknown905 FROM points_of_interest"); if (!result) { @@ -7861,16 +7864,17 @@ void ObjectMgr::LoadPointsOfInterest() PointOfInterest pointOfInterest; pointOfInterest.ID = id; - pointOfInterest.Pos.Relocate(fields[1].GetFloat(), fields[2].GetFloat()); - pointOfInterest.Icon = fields[3].GetUInt32(); - pointOfInterest.Flags = fields[4].GetUInt32(); - pointOfInterest.Importance = fields[5].GetUInt32(); - pointOfInterest.Name = fields[6].GetString(); - pointOfInterest.Unknown905 = fields[7].GetInt32(); + pointOfInterest.Pos.Relocate(fields[1].GetFloat(), fields[2].GetFloat(), fields[3].GetFloat()); + pointOfInterest.Icon = fields[4].GetUInt32(); + pointOfInterest.Flags = fields[5].GetUInt32(); + pointOfInterest.Importance = fields[6].GetUInt32(); + pointOfInterest.Name = fields[7].GetString(); + pointOfInterest.Unknown905 = fields[8].GetInt32(); - if (!Trinity::IsValidMapCoord(pointOfInterest.Pos.GetPositionX(), pointOfInterest.Pos.GetPositionY())) + if (!Trinity::IsValidMapCoord(pointOfInterest.Pos.GetPositionX(), pointOfInterest.Pos.GetPositionY(), pointOfInterest.Pos.GetPositionZ())) { - TC_LOG_ERROR("sql.sql", "Table `points_of_interest` (ID: %u) have invalid coordinates (PositionX: %f PositionY: %f), ignored.", id, pointOfInterest.Pos.GetPositionX(), pointOfInterest.Pos.GetPositionY()); + TC_LOG_ERROR("sql.sql", "Table `points_of_interest` (ID: %u) have invalid coordinates (PositionX: %f PositionY: %f, PositionZ: %f), ignored.", + id, pointOfInterest.Pos.GetPositionX(), pointOfInterest.Pos.GetPositionY(), pointOfInterest.Pos.GetPositionZ()); continue; } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 1446a5ad9f9..bce4ccd7049 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1415,6 +1415,10 @@ void WorldSession::SendFeatureSystemStatus() features.IsMuted = !CanSpeak(); SendPacket(features.Write()); + + WorldPackets::System::FeatureSystemStatus2 features2; + features2.TextToSpeechFeatureEnabled = false; + SendPacket(features2.Write()); } void WorldSession::HandleSetFactionAtWar(WorldPackets::Character::SetFactionAtWar& packet) diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 8f45920a5af..2b2ac0cbf06 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -87,7 +87,7 @@ void WorldSession::HandleChatMessageWhisperOpcode(WorldPackets::Chat::ChatMessag void WorldSession::HandleChatMessageChannelOpcode(WorldPackets::Chat::ChatMessageChannel& chatMessageChannel) { - HandleChatMessage(CHAT_MSG_CHANNEL, Language(chatMessageChannel.Language), chatMessageChannel.Text, chatMessageChannel.Target); + HandleChatMessage(CHAT_MSG_CHANNEL, Language(chatMessageChannel.Language), chatMessageChannel.Text, chatMessageChannel.Target, chatMessageChannel.ChannelGUID); } void WorldSession::HandleChatMessageEmoteOpcode(WorldPackets::Chat::ChatMessageEmote& chatMessageEmote) @@ -95,7 +95,7 @@ void WorldSession::HandleChatMessageEmoteOpcode(WorldPackets::Chat::ChatMessageE HandleChatMessage(CHAT_MSG_EMOTE, LANG_UNIVERSAL, chatMessageEmote.Text); } -void WorldSession::HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target /*= ""*/) +void WorldSession::HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target /*= ""*/, Optional<ObjectGuid> channelGuid /*= {}*/) { Player* sender = GetPlayer(); @@ -374,7 +374,10 @@ void WorldSession::HandleChatMessage(ChatMsg type, Language lang, std::string ms } } - if (Channel* chn = ChannelMgr::GetChannelForPlayerByNamePart(target, sender)) + Channel* chn = channelGuid + ? ChannelMgr::GetChannelForPlayerByGuid(*channelGuid, sender) + : ChannelMgr::GetChannelForPlayerByNamePart(target, sender); + if (chn) { sScriptMgr->OnPlayerChat(sender, type, lang, msg, chn); chn->Say(sender->GetGUID(), msg, lang); @@ -411,10 +414,10 @@ void WorldSession::HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMes void WorldSession::HandleChatAddonMessageTargetedOpcode(WorldPackets::Chat::ChatAddonMessageTargeted& chatAddonMessageTargeted) { HandleChatAddonMessage(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text, - chatAddonMessageTargeted.Params.IsLogged, chatAddonMessageTargeted.Target); + chatAddonMessageTargeted.Params.IsLogged, chatAddonMessageTargeted.Target, chatAddonMessageTargeted.ChannelGUID); } -void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, bool isLogged, std::string target /*= ""*/) +void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, bool isLogged, std::string target /*= ""*/, Optional<ObjectGuid> channelGuid /*= {}*/) { Player* sender = GetPlayer(); @@ -480,7 +483,10 @@ void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std: } case CHAT_MSG_CHANNEL: { - if (Channel* chn = ChannelMgr::GetChannelForPlayerByNamePart(target, sender)) + Channel* chn = channelGuid + ? ChannelMgr::GetChannelForPlayerByGuid(*channelGuid, sender) + : ChannelMgr::GetChannelForPlayerByNamePart(target, sender); + if (chn) chn->AddonSay(sender->GetGUID(), prefix, text.c_str(), isLogged); break; } diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 76097ffc300..07246cabeb6 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -88,46 +88,47 @@ Quest::Quest(Field* questRecord) _questGiverPortrait = questRecord[66].GetUInt32(); _questGiverPortraitMount = questRecord[67].GetUInt32(); - _questTurnInPortrait = questRecord[68].GetUInt32(); + _questGiverPortraitModelSceneId = questRecord[68].GetInt32(); + _questTurnInPortrait = questRecord[69].GetUInt32(); for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i) { - RewardFactionId[i] = questRecord[69 + i * 4].GetUInt32(); - RewardFactionValue[i] = questRecord[70 + i * 4].GetInt32(); - RewardFactionOverride[i] = questRecord[71 + i * 4].GetInt32(); - RewardFactionCapIn[i] = questRecord[72 + i * 4].GetInt32(); + RewardFactionId[i] = questRecord[70 + i * 4].GetUInt32(); + RewardFactionValue[i] = questRecord[71 + i * 4].GetInt32(); + RewardFactionOverride[i] = questRecord[72 + i * 4].GetInt32(); + RewardFactionCapIn[i] = questRecord[73 + i * 4].GetInt32(); } - _rewardReputationMask = questRecord[89].GetUInt32(); + _rewardReputationMask = questRecord[90].GetUInt32(); for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) { - RewardCurrencyId[i] = questRecord[90 + i * 2].GetUInt32(); - RewardCurrencyCount[i] = questRecord[91 + i * 2].GetUInt32(); + RewardCurrencyId[i] = questRecord[91 + i * 2].GetUInt32(); + RewardCurrencyCount[i] = questRecord[92 + i * 2].GetUInt32(); if (RewardCurrencyId[i]) ++_rewCurrencyCount; } - _soundAccept = questRecord[98].GetUInt32(); - _soundTurnIn = questRecord[99].GetUInt32(); - _areaGroupID = questRecord[100].GetUInt32(); - _limitTime = questRecord[101].GetUInt32(); - _allowableRaces.RawValue = questRecord[102].GetUInt64(); - _treasurePickerID = questRecord[103].GetInt32(); - _expansion = questRecord[104].GetInt32(); - _managedWorldStateID = questRecord[105].GetInt32(); - _questSessionBonus = questRecord[106].GetInt32(); - - _logTitle = questRecord[107].GetString(); - _logDescription = questRecord[108].GetString(); - _questDescription = questRecord[109].GetString(); - _areaDescription = questRecord[110].GetString(); - _portraitGiverText = questRecord[111].GetString(); - _portraitGiverName = questRecord[112].GetString(); - _portraitTurnInText = questRecord[113].GetString(); - _portraitTurnInName = questRecord[114].GetString(); - _questCompletionLog = questRecord[115].GetString(); + _soundAccept = questRecord[99].GetUInt32(); + _soundTurnIn = questRecord[100].GetUInt32(); + _areaGroupID = questRecord[101].GetUInt32(); + _limitTime = questRecord[102].GetUInt32(); + _allowableRaces.RawValue = questRecord[103].GetUInt64(); + _treasurePickerID = questRecord[104].GetInt32(); + _expansion = questRecord[105].GetInt32(); + _managedWorldStateID = questRecord[106].GetInt32(); + _questSessionBonus = questRecord[107].GetInt32(); + + _logTitle = questRecord[108].GetString(); + _logDescription = questRecord[109].GetString(); + _questDescription = questRecord[110].GetString(); + _areaDescription = questRecord[111].GetString(); + _portraitGiverText = questRecord[112].GetString(); + _portraitGiverName = questRecord[113].GetString(); + _portraitTurnInText = questRecord[114].GetString(); + _portraitTurnInName = questRecord[115].GetString(); + _questCompletionLog = questRecord[116].GetString(); } void Quest::LoadRewardDisplaySpell(Field* fields) @@ -532,6 +533,7 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc) const response.Info.RewardFactionFlags = GetRewardReputationMask(); response.Info.PortraitGiver = GetQuestGiverPortrait(); response.Info.PortraitGiverMount = GetQuestGiverPortraitMount(); + response.Info.PortraitGiverModelSceneID = GetQuestGiverPortraitModelSceneId(); response.Info.PortraitTurnIn = GetQuestTurnInPortrait(); for (uint8 i = 0; i < QUEST_ITEM_DROP_COUNT; ++i) diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 510e4e2e1df..9cf40a4da89 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -562,6 +562,7 @@ class TC_GAME_API Quest int32 GetQuestSessionBonus() const { return _questSessionBonus; } uint32 GetQuestGiverPortrait() const { return _questGiverPortrait; } int32 GetQuestGiverPortraitMount() const { return _questGiverPortraitMount; } + int32 GetQuestGiverPortraitModelSceneId() const { return _questGiverPortraitModelSceneId; } uint32 GetQuestTurnInPortrait() const { return _questTurnInPortrait; } bool IsDaily() const { return (_flags & QUEST_FLAGS_DAILY) != 0; } bool IsWeekly() const { return (_flags & QUEST_FLAGS_WEEKLY) != 0; } @@ -652,6 +653,7 @@ class TC_GAME_API Quest uint32 _rewardSkillPoints = 0; uint32 _questGiverPortrait = 0; int32 _questGiverPortraitMount = 0; + int32 _questGiverPortraitModelSceneId = 0; uint32 _questTurnInPortrait = 0; uint32 _rewardReputationMask; uint32 _soundAccept = 0; diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp index 0bf1acec836..a9d9ad0dafd 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.cpp +++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp @@ -195,6 +195,7 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem) data.WriteBit(auctionItem.CensorServerSideInfo); data.WriteBit(auctionItem.CensorBidInfo); data.WriteBit(auctionItem.AuctionBucketKey.is_initialized()); + data.WriteBit(auctionItem.Creator.is_initialized()); if (!auctionItem.CensorBidInfo) { data.WriteBit(auctionItem.Bidder.is_initialized()); @@ -236,6 +237,9 @@ ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem) data << int32(auctionItem.EndTime); } + if (auctionItem.Creator) + data << *auctionItem.Creator; + if (!auctionItem.CensorBidInfo) { if (auctionItem.Bidder) diff --git a/src/server/game/Server/Packets/AuctionHousePackets.h b/src/server/game/Server/Packets/AuctionHousePackets.h index 0e30f6f53f7..07b5e9b9260 100644 --- a/src/server/game/Server/Packets/AuctionHousePackets.h +++ b/src/server/game/Server/Packets/AuctionHousePackets.h @@ -130,6 +130,7 @@ namespace WorldPackets Optional<uint64> BidAmount; std::vector<Item::ItemGemData> Gems; Optional<WorldPackets::AuctionHouse::AuctionBucketKey> AuctionBucketKey; + Optional<ObjectGuid> Creator; }; struct AuctionBidderNotification diff --git a/src/server/game/Server/Packets/BattlePetPackets.cpp b/src/server/game/Server/Packets/BattlePetPackets.cpp index 4568103d7de..f664e92ea0f 100644 --- a/src/server/game/Server/Packets/BattlePetPackets.cpp +++ b/src/server/game/Server/Packets/BattlePetPackets.cpp @@ -65,7 +65,6 @@ WorldPacket const* WorldPackets::BattlePet::BattlePetJournal::Write() _worldPacket << uint16(Trap); _worldPacket << uint32(Slots.size()); _worldPacket << uint32(Pets.size()); - _worldPacket << int32(MaxPets); _worldPacket.WriteBit(HasJournalLock); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/BattlePetPackets.h b/src/server/game/Server/Packets/BattlePetPackets.h index cce3bd49675..2cc13908abc 100644 --- a/src/server/game/Server/Packets/BattlePetPackets.h +++ b/src/server/game/Server/Packets/BattlePetPackets.h @@ -72,7 +72,6 @@ namespace WorldPackets bool HasJournalLock = true; std::vector<std::reference_wrapper<BattlePetSlot>> Slots; std::vector<std::reference_wrapper<BattlePet>> Pets; - int32 MaxPets = 1000; }; class BattlePetJournalLockAcquired final : public ServerPacket diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 5ee8725465c..70a09262cdb 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -325,6 +325,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::RatedPvpInf data << int32(bracketInfo.BestSeasonRating); data << int32(bracketInfo.PvpTierID); data << int32(bracketInfo.Unused3); + data << int32(bracketInfo.WeeklyBestWinPvpTierID); data.WriteBit(bracketInfo.Disqualified); data.FlushBits(); diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index b145cfbe47c..65281fce20b 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -448,6 +448,7 @@ namespace WorldPackets int32 BestSeasonRating = 0; int32 PvpTierID = 0; int32 Unused3 = 0; + int32 WeeklyBestWinPvpTierID = 0; bool Disqualified = false; } Bracket[6]; }; diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index 752b6b144c4..41fd5249b11 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -41,6 +41,7 @@ void WorldPackets::Chat::ChatMessageWhisper::Read() void WorldPackets::Chat::ChatMessageChannel::Read() { _worldPacket >> Language; + _worldPacket >> ChannelGUID; uint32 targetLen = _worldPacket.ReadBits(9); uint32 textLen = _worldPacket.ReadBits(9); Target = _worldPacket.ReadString(targetLen); @@ -70,6 +71,7 @@ void WorldPackets::Chat::ChatAddonMessageTargeted::Read() _worldPacket.ResetBitPos(); _worldPacket >> Params; + _worldPacket >> *ChannelGUID; Target = _worldPacket.ReadString(targetLen); } @@ -180,6 +182,7 @@ WorldPacket const* WorldPackets::Chat::Chat::Write() _worldPacket.WriteBit(HideChatLog); _worldPacket.WriteBit(FakeSenderName); _worldPacket.WriteBit(Unused_801.is_initialized()); + _worldPacket.WriteBit(ChannelGUID.is_initialized()); _worldPacket.FlushBits(); _worldPacket.WriteString(SenderName); @@ -191,6 +194,9 @@ WorldPacket const* WorldPackets::Chat::Chat::Write() if (Unused_801) _worldPacket << uint32(*Unused_801); + if (ChannelGUID) + _worldPacket << *ChannelGUID; + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index ad6fc825bf7..cb161ef3169 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -72,6 +72,7 @@ namespace WorldPackets void Read() override; int32 Language = LANG_UNIVERSAL; + ObjectGuid ChannelGUID; std::string Text; std::string Target; }; @@ -99,12 +100,16 @@ namespace WorldPackets class ChatAddonMessageTargeted final : public ClientPacket { public: - ChatAddonMessageTargeted(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_TARGETED, std::move(packet)) { } + ChatAddonMessageTargeted(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_TARGETED, std::move(packet)) + { + ChannelGUID.emplace(); + } void Read() override; std::string Target; ChatAddonMessageParams Params; + Optional<ObjectGuid> ChannelGUID; // not optional in the packet. Optional for api reasons }; class ChatMessageDND final : public ClientPacket @@ -144,7 +149,8 @@ namespace WorldPackets Chat() : ServerPacket(SMSG_CHAT, 100) { } Chat(Chat const& chat); - void Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message, uint32 achievementId = 0, std::string channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string addonPrefix = ""); + void Initialize(ChatMsg chatType, Language language, WorldObject const* sender, WorldObject const* receiver, std::string message, uint32 achievementId = 0, + std::string channelName = "", LocaleConstant locale = DEFAULT_LOCALE, std::string addonPrefix = ""); void SetSender(WorldObject const* sender, LocaleConstant locale); void SetReceiver(WorldObject const* receiver, LocaleConstant locale); @@ -170,6 +176,7 @@ namespace WorldPackets Optional<uint32> Unused_801; bool HideChatLog = false; bool FakeSenderName = false; + Optional<ObjectGuid> ChannelGUID; }; class Emote final : public ServerPacket diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index e6a81be2bc1..7aafcfdd870 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -345,14 +345,14 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write() attackRoundInfo << uint8(ContentTuning.Type); attackRoundInfo << uint8(ContentTuning.TargetLevel); attackRoundInfo << uint8(ContentTuning.Expansion); - attackRoundInfo << uint8(ContentTuning.TargetMinScalingLevel); - attackRoundInfo << uint8(ContentTuning.TargetMaxScalingLevel); attackRoundInfo << int16(ContentTuning.PlayerLevelDelta); attackRoundInfo << int8(ContentTuning.TargetScalingLevelDelta); attackRoundInfo << float(ContentTuning.PlayerItemLevel); attackRoundInfo << float(ContentTuning.TargetItemLevel); attackRoundInfo << uint16(ContentTuning.ScalingHealthItemLevelCurveID); attackRoundInfo << uint32(ContentTuning.Flags); + attackRoundInfo << int32(ContentTuning.PlayerContentTuningID); + attackRoundInfo << int32(ContentTuning.TargetContentTuningID); WriteLogDataBit(); FlushBits(); diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp index 47d806aef30..c03f304a215 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp @@ -74,9 +74,8 @@ bool ContentTuningParams::GenerateDataForUnits<Creature, Player>(Creature* attac ScalingHealthItemLevelCurveID = target->m_unitData->ScalingHealthItemLevelCurveID; TargetLevel = target->getLevel(); Expansion = creatureTemplate->HealthScalingExpansion; - TargetMinScalingLevel = uint8(creatureScaling->MinLevel); - TargetMaxScalingLevel = uint8(creatureScaling->MaxLevel); TargetScalingLevelDelta = int8(attacker->m_unitData->ScalingLevelDelta); + TargetContentTuningID = creatureScaling->ContentTuningID; return true; } @@ -93,9 +92,8 @@ bool ContentTuningParams::GenerateDataForUnits<Player, Creature>(Player* attacke ScalingHealthItemLevelCurveID = target->m_unitData->ScalingHealthItemLevelCurveID; TargetLevel = target->getLevel(); Expansion = creatureTemplate->HealthScalingExpansion; - TargetMinScalingLevel = uint8(creatureScaling->MinLevel); - TargetMaxScalingLevel = uint8(creatureScaling->MaxLevel); TargetScalingLevelDelta = int8(target->m_unitData->ScalingLevelDelta); + TargetContentTuningID = creatureScaling->ContentTuningID; return true; } @@ -111,9 +109,8 @@ bool ContentTuningParams::GenerateDataForUnits<Creature, Creature>(Creature* att PlayerItemLevel = 0; TargetLevel = target->getLevel(); Expansion = creatureTemplate->HealthScalingExpansion; - TargetMinScalingLevel = uint8(creatureScaling->MinLevel); - TargetMaxScalingLevel = uint8(creatureScaling->MaxLevel); TargetScalingLevelDelta = int8(accessor->m_unitData->ScalingLevelDelta); + TargetContentTuningID = creatureScaling->ContentTuningID; return true; } @@ -174,10 +171,10 @@ ByteBuffer& operator<<(ByteBuffer& data, ContentTuningParams const& contentTunin data << uint16(contentTuningParams.ScalingHealthItemLevelCurveID); data << uint8(contentTuningParams.TargetLevel); data << uint8(contentTuningParams.Expansion); - data << uint8(contentTuningParams.TargetMinScalingLevel); - data << uint8(contentTuningParams.TargetMaxScalingLevel); data << int8(contentTuningParams.TargetScalingLevelDelta); data << uint32(contentTuningParams.Flags); + data << int32(contentTuningParams.PlayerContentTuningID); + data << int32(contentTuningParams.TargetContentTuningID); data.WriteBits(contentTuningParams.Type, 4); data.FlushBits(); return data; diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h index c08298b0f58..1a1413c58e1 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h @@ -72,10 +72,10 @@ namespace WorldPackets uint16 ScalingHealthItemLevelCurveID = 0; uint8 TargetLevel = 0; uint8 Expansion = 0; - uint8 TargetMinScalingLevel = 0; - uint8 TargetMaxScalingLevel = 0; int8 TargetScalingLevelDelta = 0; uint32 Flags = NO_LEVEL_SCALING | NO_ITEM_LEVEL_SCALING; + int32 PlayerContentTuningID = 0; + int32 TargetContentTuningID = 0; template<class T, class U> bool GenerateDataForUnits(T* attacker, U* target); diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.cpp b/src/server/game/Server/Packets/EquipmentSetPackets.cpp index ff47852e429..45442f9db31 100644 --- a/src/server/game/Server/Packets/EquipmentSetPackets.cpp +++ b/src/server/game/Server/Packets/EquipmentSetPackets.cpp @@ -45,8 +45,10 @@ WorldPacket const* WorldPackets::EquipmentSet::LoadEquipmentSet::Write() _worldPacket.append(equipSet->Enchants.data(), equipSet->Enchants.size()); - _worldPacket << int32(equipSet->Unknown901_1); - _worldPacket << int32(equipSet->Unknown901_2); + _worldPacket << int32(equipSet->SecondaryShoulderApparanceID); + _worldPacket << int32(equipSet->SecondaryShoulderSlot); + _worldPacket << int32(equipSet->SecondaryWeaponAppearanceID); + _worldPacket << int32(equipSet->SecondaryWeaponSlot); _worldPacket.WriteBit(equipSet->AssignedSpecIndex != -1); _worldPacket.WriteBits(equipSet->SetName.length(), 8); @@ -79,8 +81,10 @@ void WorldPackets::EquipmentSet::SaveEquipmentSet::Read() _worldPacket >> Set.Enchants[0]; _worldPacket >> Set.Enchants[1]; - _worldPacket >> Set.Unknown901_1; - _worldPacket >> Set.Unknown901_2; + _worldPacket >> Set.SecondaryShoulderApparanceID; + _worldPacket >> Set.SecondaryShoulderSlot; + _worldPacket >> Set.SecondaryWeaponAppearanceID; + _worldPacket >> Set.SecondaryWeaponSlot; bool hasSpecIndex = _worldPacket.ReadBit(); diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp index 87e4cf56fa3..d226b521a47 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.cpp +++ b/src/server/game/Server/Packets/GarrisonPackets.cpp @@ -190,6 +190,14 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonEventList const& eventList) return data; } +ByteBuffer& operator<<(ByteBuffer& data, GarrisonSpecGroup const& specGroup) +{ + data << int32(specGroup.ChrSpecializationID); + data << int32(specGroup.SoulbindID); + + return data; +} + ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison) { ASSERT(garrison.Missions.size() == garrison.MissionRewards.size()); @@ -210,6 +218,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison) data << uint32(garrison.Talents.size()); data << uint32(garrison.Collections.size()); data << uint32(garrison.EventLists.size()); + data << uint32(garrison.SpecGroups.size()); data << uint32(garrison.CanStartMission.size()); data << uint32(garrison.ArchivedMissions.size()); data << int32(garrison.NumFollowerActivationsRemaining); @@ -237,6 +246,9 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison) for (GarrisonEventList const& eventList : garrison.EventLists) data << eventList; + for (GarrisonSpecGroup const& specGroup : garrison.SpecGroups) + data << specGroup; + if (!garrison.ArchivedMissions.empty()) data.append(garrison.ArchivedMissions.data(), garrison.ArchivedMissions.size()); diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h index 27dc258aaf0..08e56820c10 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.h +++ b/src/server/game/Server/Packets/GarrisonPackets.h @@ -174,6 +174,12 @@ namespace WorldPackets std::vector<GarrisonEventEntry> Events; }; + struct GarrisonSpecGroup + { + int32 ChrSpecializationID = 0; + int32 SoulbindID = 0; + }; + struct GarrisonInfo { int32 GarrTypeID = 0; @@ -193,6 +199,7 @@ namespace WorldPackets std::vector<GarrisonTalent> Talents; std::vector<GarrisonCollection> Collections; std::vector<GarrisonEventList> EventLists; + std::vector<GarrisonSpecGroup> SpecGroups; std::vector<bool> CanStartMission; std::vector<int32> ArchivedMissions; }; diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 5ae849a0102..ca72da516d3 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -118,7 +118,13 @@ void WorldPackets::Guild::DeclineGuildInvites::Read() void WorldPackets::Guild::GuildInviteByName::Read() { uint32 nameLen = _worldPacket.ReadBits(9); + if (_worldPacket.ReadBit()) + Unused910.emplace(); + Name = _worldPacket.ReadString(nameLen); + + if (Unused910) + _worldPacket >> *Unused910; } WorldPacket const* WorldPackets::Guild::GuildInvite::Write() @@ -181,6 +187,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberD data.WriteBit(rosterMemberData.SorEligible); data.FlushBits(); + data << rosterMemberData.DungeonScore; + data.WriteString(rosterMemberData.Name); data.WriteString(rosterMemberData.Note); data.WriteString(rosterMemberData.OfficerNote); diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index 536e68fed75..6aadb7d4a0f 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -21,6 +21,7 @@ #include "Packet.h" #include "ItemPacketsCommon.h" #include "Guild.h" +#include "MythicPlusPacketsCommon.h" #include "ObjectGuid.h" #include "PacketUtilities.h" @@ -120,6 +121,7 @@ namespace WorldPackets bool Authenticated = false; bool SorEligible = false; GuildRosterProfessionData Profession[2]; + MythicPlus::DungeonScoreSummary DungeonScore; }; class GuildRoster final : public ServerPacket @@ -203,6 +205,7 @@ namespace WorldPackets void Read() override; std::string Name; + Optional<int32> Unused910; }; class GuildInvite final : public ServerPacket diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index 0a2746dc44d..35055ebe414 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -131,6 +131,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData c data << int32(bracket.WeeklyBestRating); data << int32(bracket.SeasonBestRating); data << int32(bracket.PvpTierID); + data << int32(bracket.WeeklyBestWinPvpTierID); data.WriteBit(bracket.Disqualified); data.FlushBits(); diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h index 78676959094..c472920ea14 100644 --- a/src/server/game/Server/Packets/InspectPackets.h +++ b/src/server/game/Server/Packets/InspectPackets.h @@ -104,6 +104,7 @@ namespace WorldPackets int32 WeeklyBestRating = 0; int32 SeasonBestRating = 0; int32 PvpTierID = 0; + int32 WeeklyBestWinPvpTierID = 0; uint8 Bracket = 0; bool Disqualified = false; }; diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp index b0bb17e64f0..bb8e6ac87d5 100644 --- a/src/server/game/Server/Packets/MailPackets.cpp +++ b/src/server/game/Server/Packets/MailPackets.cpp @@ -213,7 +213,6 @@ void WorldPackets::Mail::MailMarkAsRead::Read() { _worldPacket >> Mailbox; _worldPacket >> MailID; - BiReceipt = _worldPacket.ReadBit(); } void WorldPackets::Mail::MailDelete::Read() diff --git a/src/server/game/Server/Packets/MailPackets.h b/src/server/game/Server/Packets/MailPackets.h index 2218bd8367e..c7cb29bf4c0 100644 --- a/src/server/game/Server/Packets/MailPackets.h +++ b/src/server/game/Server/Packets/MailPackets.h @@ -159,7 +159,6 @@ namespace WorldPackets ObjectGuid Mailbox; int32 MailID = 0; - bool BiReceipt = false; }; class MailDelete final : public ClientPacket diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 2c44b01bb7c..52460632213 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -469,7 +469,11 @@ void WorldPackets::Movement::CommonMovement::WriteMovementForceWithDirection(Mov data << uint32(movementForce.TransportID); data << float(movementForce.Magnitude); data.WriteBits(movementForce.Type, 2); + data.WriteBit(movementForce.Unused910 != 0); data.FlushBits(); + + if (movementForce.Unused910) + data << int32(movementForce.Unused910); } void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveSpline const& moveSpline) @@ -693,6 +697,9 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementForce& movementForce) data >> movementForce.TransportID; data >> movementForce.Magnitude; movementForce.Type = data.ReadBits(2); + bool has910 = data.ReadBit(); + if (has910) + data >> movementForce.Unused910; return data; } diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp new file mode 100644 index 00000000000..91206bbb847 --- /dev/null +++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp @@ -0,0 +1,124 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "MythicPlusPacketsCommon.h" + +namespace WorldPackets +{ +namespace MythicPlus +{ +ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreMapSummary const& dungeonScoreMapSummary) +{ + data << int32(dungeonScoreMapSummary.ChallengeModeID); + data << int32(dungeonScoreMapSummary.MapScore); + data << int32(dungeonScoreMapSummary.BestRunLevel); + data << int32(dungeonScoreMapSummary.BestRunDurationMS); + data.WriteBit(dungeonScoreMapSummary.FinishedSuccess); + data.FlushBits(); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSummary const& dungeonScoreSummary) +{ + data << int32(dungeonScoreSummary.CurrentSeasonScore); + data << uint32(dungeonScoreSummary.Runs.size()); + for (DungeonScoreMapSummary const& dungeonScoreMapSummary : dungeonScoreSummary.Runs) + data << dungeonScoreMapSummary; + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, MythicPlusMember const& mythicPlusMember) +{ + data << mythicPlusMember.BnetAccountGUID; + data << uint64(mythicPlusMember.GuildClubMemberID); + data << mythicPlusMember.GUID; + data << mythicPlusMember.GuildGUID; + data << uint32(mythicPlusMember.NativeRealmAddress); + data << uint32(mythicPlusMember.VirtualRealmAddress); + data << int16(mythicPlusMember.ChrSpecializationID); + data << int16(mythicPlusMember.RaceID); + data << int32(mythicPlusMember.ItemLevel); + data << int32(mythicPlusMember.CovenantID); + data << int32(mythicPlusMember.SoulbindID); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, MythicPlusRun const& mythicPlusRun) +{ + data << int32(mythicPlusRun.MapChallengeModeID); + data << uint32(mythicPlusRun.Level); + data << int32(mythicPlusRun.DurationMs); + data << mythicPlusRun.StartDate; + data << mythicPlusRun.CompletionDate; + data << int32(mythicPlusRun.Season); + data.append(mythicPlusRun.KeystoneAffixIDs.data(), mythicPlusRun.KeystoneAffixIDs.size()); + data << uint32(mythicPlusRun.Members.size()); + data << int32(mythicPlusRun.RunScore); + for (MythicPlusMember const& member : mythicPlusRun.Members) + data << member; + + data.WriteBit(mythicPlusRun.Completed); + data.FlushBits(); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreBestRunForAffix const& dungeonScoreBestRunForAffix) +{ + data << int32(dungeonScoreBestRunForAffix.KeystoneAffixID); + data << int32(dungeonScoreBestRunForAffix.Score); + data << dungeonScoreBestRunForAffix.Run; + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreMapData const& dungeonScoreMapData) +{ + data << int32(dungeonScoreMapData.MapChallengeModeID); + data << uint32(dungeonScoreMapData.BestRuns.size()); + data << int32(dungeonScoreMapData.OverAllScore); + for (DungeonScoreBestRunForAffix const& bestRun : dungeonScoreMapData.BestRuns) + data << bestRun; + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSeasonData const& dungeonScoreSeasonData) +{ + data << int32(dungeonScoreSeasonData.Season); + data << uint32(dungeonScoreSeasonData.Maps.size()); + data << int32(dungeonScoreSeasonData.SeasonScore); + for (DungeonScoreMapData const& map : dungeonScoreSeasonData.Maps) + data << map; + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreData const& dungeonScoreData) +{ + data << uint32(dungeonScoreData.Seasons.size()); + data << int32(dungeonScoreData.TotalRuns); + for (DungeonScoreSeasonData const& season : dungeonScoreData.Seasons) + data << season; + + return data; +} +} +} diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.h b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h new file mode 100644 index 00000000000..dc48360aea7 --- /dev/null +++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h @@ -0,0 +1,106 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef MythicPlusPacketsCommon_h__ +#define MythicPlusPacketsCommon_h__ + +#include "Packet.h" +#include "ObjectGuid.h" +#include "PacketUtilities.h" + +namespace WorldPackets +{ + namespace MythicPlus + { + struct DungeonScoreMapSummary + { + int32 ChallengeModeID = 0; + int32 MapScore = 0; + int32 BestRunLevel = 0; + int32 BestRunDurationMS = 0; + bool FinishedSuccess = false; + }; + + struct DungeonScoreSummary + { + int32 CurrentSeasonScore = 0; + std::vector<DungeonScoreMapSummary> Runs; + }; + + struct MythicPlusMember + { + ObjectGuid BnetAccountGUID; + uint64 GuildClubMemberID = 0; + ObjectGuid GUID; + ObjectGuid GuildGUID; + uint32 NativeRealmAddress = 0; + uint32 VirtualRealmAddress = 0; + int16 ChrSpecializationID = 0; + int16 RaceID = 0; + int32 ItemLevel = 0; + int32 CovenantID = 0; + int32 SoulbindID = 0; + }; + + struct MythicPlusRun + { + int32 MapChallengeModeID = 0; + bool Completed = false; + uint32 Level = 0; + int32 DurationMs = 0; + Timestamp<> StartDate; + Timestamp<> CompletionDate; + int32 Season; + std::vector<MythicPlusMember> Members; + int32 RunScore; + std::array<int32, 4> KeystoneAffixIDs; + }; + + struct DungeonScoreBestRunForAffix + { + int32 KeystoneAffixID = 0; + MythicPlusRun Run; + int32 Score = 0; + }; + + struct DungeonScoreMapData + { + int32 MapChallengeModeID = 0; + std::vector<DungeonScoreBestRunForAffix> BestRuns; + int32 OverAllScore = 0; + + }; + + struct DungeonScoreSeasonData + { + int32 Season = 0; + std::vector<DungeonScoreMapData> Maps; + int32 SeasonScore = 0; + }; + + struct DungeonScoreData + { + std::vector<DungeonScoreSeasonData> Seasons; + int32 TotalRuns = 0; + }; + + ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSummary const& dungeonScoreSummary); + ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreData const& dungeonScoreData); + } +} + +#endif // MythicPlusPacketsCommon_h__ diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index 3bfa84438b3..a925b606cc3 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -203,7 +203,7 @@ namespace WorldPackets int32 ID = 0; uint32 Flags = 0; - TaggedPosition<Position::XY> Pos; + TaggedPosition<Position::XYZ> Pos; int32 Icon = 0; int32 Importance = 0; int32 Unknown905 = 0; diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 74a73352086..e4bda90f24c 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -223,6 +223,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyMemberStats c data.WriteBit(memberStats.PetStats.is_initialized()); data.FlushBits(); + data << memberStats.DungeonScore; + if (memberStats.PetStats.is_initialized()) data << *memberStats.PetStats; diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index 17d42c620a9..0e350e01c70 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -22,6 +22,7 @@ #include "AuthenticationPackets.h" #include "ObjectGuid.h" #include "Group.h" +#include "MythicPlusPacketsCommon.h" #include "Optional.h" namespace WorldPackets @@ -208,9 +209,11 @@ namespace WorldPackets uint16 SpecID = 0; uint16 WmoGroupID = 0; uint32 WmoDoodadPlacementID = 0; - int8 PartyType[2]; + int8 PartyType[2] = { }; CTROptions ChromieTime; + + MythicPlus::DungeonScoreSummary DungeonScore; }; class PartyMemberFullState final : public ServerPacket diff --git a/src/server/game/Server/Packets/PetitionPackets.cpp b/src/server/game/Server/Packets/PetitionPackets.cpp index c60f4822fe5..9f42c3807bb 100644 --- a/src/server/game/Server/Packets/PetitionPackets.cpp +++ b/src/server/game/Server/Packets/PetitionPackets.cpp @@ -88,6 +88,7 @@ void WorldPackets::Petition::PetitionBuy::Read() uint32 titleLen = _worldPacket.ReadBits(7); _worldPacket >> Unit; + _worldPacket >> Unused910; Title = _worldPacket.ReadString(titleLen); } diff --git a/src/server/game/Server/Packets/PetitionPackets.h b/src/server/game/Server/Packets/PetitionPackets.h index 0967be2a0fc..e5f0a2e80ce 100644 --- a/src/server/game/Server/Packets/PetitionPackets.h +++ b/src/server/game/Server/Packets/PetitionPackets.h @@ -101,6 +101,7 @@ namespace WorldPackets ObjectGuid Unit; std::string Title; + uint32 Unused910 = 0; }; class PetitionShowSignatures final : public ClientPacket diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 32544e7dab5..9a9f7233376 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -80,6 +80,7 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() _worldPacket << int32(Stats.RequiredExpansion); _worldPacket << int32(Stats.VignetteID); _worldPacket << int32(Stats.Class); + _worldPacket << int32(Stats.CreatureDifficultyID); _worldPacket << int32(Stats.WidgetSetID); _worldPacket << int32(Stats.WidgetSetUnitConditionID); diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index d4148eb6b38..693000219b3 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -83,6 +83,7 @@ namespace WorldPackets uint32 RequiredExpansion = 0; uint32 VignetteID = 0; int32 Class = 0; + int32 CreatureDifficultyID = 0; int32 WidgetSetID = 0; int32 WidgetSetUnitConditionID = 0; std::array<uint32, 2> Flags; diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 2672ab3ddf3..d15eed8dc0d 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -128,6 +128,7 @@ WorldPacket const* QueryQuestInfoResponse::Write() _worldPacket << int32(Info.PortraitGiver); _worldPacket << int32(Info.PortraitGiverMount); + _worldPacket << int32(Info.PortraitGiverModelSceneID); _worldPacket << int32(Info.PortraitTurnIn); for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i) @@ -337,6 +338,7 @@ WorldPacket const* QuestGiverOfferRewardMessage::Write() _worldPacket << int32(QuestPackageID); _worldPacket << int32(PortraitGiver); _worldPacket << int32(PortraitGiverMount); + _worldPacket << int32(PortraitGiverModelSceneID); _worldPacket << int32(PortraitTurnIn); _worldPacket.WriteBits(QuestTitle.size(), 9); @@ -401,6 +403,7 @@ WorldPacket const* QuestGiverQuestDetails::Write() _worldPacket << int32(QuestPackageID); _worldPacket << int32(PortraitGiver); _worldPacket << int32(PortraitGiverMount); + _worldPacket << int32(PortraitGiverModelSceneID); _worldPacket << int32(PortraitTurnIn); _worldPacket << uint32(QuestFlags[0]); // Flags _worldPacket << uint32(QuestFlags[1]); // FlagsEx @@ -733,6 +736,7 @@ WorldPacket const* DisplayPlayerChoice::Write() _worldPacket << SenderGUID; _worldPacket << int32(UiTextureKitID); _worldPacket << uint32(SoundKitID); + _worldPacket << uint8(NumRerolls); _worldPacket.WriteBits(Question.length(), 8); _worldPacket.WriteBit(CloseChoiceFrame); _worldPacket.WriteBit(HideWarboardHeader); @@ -750,6 +754,7 @@ void ChoiceResponse::Read() { _worldPacket >> ChoiceID; _worldPacket >> ResponseID; + IsReroll = _worldPacket.ReadBit(); } } } diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 5d0fd7d553c..1b049cc0703 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -155,6 +155,7 @@ namespace WorldPackets int32 RewardNumSkillUps = 0; // reward skill points int32 PortraitGiver = 0; // quest giver entry ? int32 PortraitGiverMount = 0; + int32 PortraitGiverModelSceneID = 0; int32 PortraitTurnIn = 0; // quest turn in entry ? std::string PortraitGiverText; std::string PortraitGiverName; @@ -299,6 +300,7 @@ namespace WorldPackets int32 PortraitTurnIn = 0; int32 PortraitGiver = 0; int32 PortraitGiverMount = 0; + int32 PortraitGiverModelSceneID = 0; std::string QuestTitle; std::string RewardText; std::string PortraitGiverText; @@ -390,6 +392,7 @@ namespace WorldPackets int32 PortraitTurnIn = 0; int32 PortraitGiver = 0; int32 PortraitGiverMount = 0; + int32 PortraitGiverModelSceneID = 0; int32 QuestStartItemID = 0; int32 QuestSessionBonus = 0; std::string PortraitGiverText; @@ -714,6 +717,7 @@ namespace WorldPackets int32 ChoiceID = 0; int32 UiTextureKitID = 0; uint32 SoundKitID = 0; + uint8 NumRerolls = 0; std::string Question; std::vector<PlayerChoiceResponse> Responses; bool CloseChoiceFrame = false; @@ -730,6 +734,7 @@ namespace WorldPackets int32 ChoiceID = 0; int32 ResponseID = 0; + bool IsReroll = false; }; } } diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index d31647bb122..52b5056310d 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -209,7 +209,6 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Spells::SpellOptionalReag { data >> optionalReagent.ItemID; data >> optionalReagent.Slot; - data >> optionalReagent.Count; return data; } diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 97775684a08..22b23c388da 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -244,7 +244,6 @@ namespace WorldPackets { int32 ItemID = 0; int32 Slot = 0; - int32 Count = 0; }; struct SpellExtraCurrencyCost diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index ca8be7045e7..b72a40c7da8 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -150,6 +150,15 @@ WorldPacket const* FeatureSystemStatus::Write() return &_worldPacket; } +WorldPacket const* FeatureSystemStatus2::Write() +{ + _worldPacket.WriteBit(TextToSpeechFeatureEnabled); + _worldPacket.FlushBits(); + + return &_worldPacket; +} + + WorldPacket const* FeatureSystemStatusGlueScreen::Write() { _worldPacket.WriteBit(BpayStoreEnabled); diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index 34d9aabfda0..dec27f1017c 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -98,7 +98,7 @@ namespace WorldPackets uint32 DaysInCycle = 0; }; - FeatureSystemStatus() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS, 48) { } + FeatureSystemStatus() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS, 200) { } WorldPacket const* Write() override; @@ -152,10 +152,20 @@ namespace WorldPackets RafSystemFeatureInfo RAFSystem; }; + class FeatureSystemStatus2 final : ServerPacket + { + public: + FeatureSystemStatus2() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS2, 1) { } + + WorldPacket const* Write() override; + + bool TextToSpeechFeatureEnabled = false; + }; + class FeatureSystemStatusGlueScreen final : public ServerPacket { public: - FeatureSystemStatusGlueScreen() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN, 1) { } + FeatureSystemStatusGlueScreen() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN, 64) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp index c453750f3fd..dd595eac2d7 100644 --- a/src/server/game/Server/Packets/TicketPackets.cpp +++ b/src/server/game/Server/Packets/TicketPackets.cpp @@ -250,6 +250,17 @@ ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Ticket::SupportT return data; } +ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketUnused910>& unused) +{ + unused = boost::in_place(); + + uint32 field_0Length = data.ReadBits(7); + data >> unused->field_104; + unused->field_0 = data.ReadString(field_0Length); + + return data; +} + void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read() { _worldPacket >> Header; @@ -266,6 +277,7 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read() bool hasLFGListApplicant = _worldPacket.ReadBit(); bool hasClubMessage = _worldPacket.ReadBit(); bool hasClubFinderResult = _worldPacket.ReadBit(); + bool hasUnk910 = _worldPacket.ReadBit(); _worldPacket.ResetBitPos(); @@ -300,6 +312,9 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read() if (hasClubFinderResult) _worldPacket >> ClubFinderResult; + + if (hasUnk910) + _worldPacket >> Unused910; } ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::Complaint::ComplaintOffender& complaintOffender) diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h index 5f281df684a..9982d60da6c 100644 --- a/src/server/game/Server/Packets/TicketPackets.h +++ b/src/server/game/Server/Packets/TicketPackets.h @@ -89,7 +89,7 @@ namespace WorldPackets void Read() override; - int32 CaseID; + int32 CaseID = 0; }; class SubmitUserFeedback final : public ClientPacket @@ -156,8 +156,8 @@ namespace WorldPackets struct SupportTicketCalendarEventInfo { - uint64 EventID; - uint64 InviteID; + uint64 EventID = 0; + uint64 InviteID = 0; std::string EventTitle; }; @@ -200,12 +200,18 @@ namespace WorldPackets struct SupportTicketClubFinderResult { - uint64 ClubFinderPostingID; - uint64 ClubID; + uint64 ClubFinderPostingID = 0; + uint64 ClubID = 0; ObjectGuid ClubFinderGUID; std::string ClubName; }; + struct SupportTicketUnused910 + { + std::string field_0; + ObjectGuid field_104; + }; + SupportTicketSubmitComplaint(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, std::move(packet)) { } void Read() override; @@ -224,6 +230,7 @@ namespace WorldPackets Optional<SupportTicketLFGListApplicant> LFGListApplicant; Optional<SupportTicketCommunityMessage> CommunityMessage; Optional<SupportTicketClubFinderResult> ClubFinderResult; + Optional<SupportTicketUnused910> Unused910; }; class Complaint final : public ClientPacket diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 0d726b221b2..21a7f023913 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -627,7 +627,6 @@ void OpcodeTable::Initialize() 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_MYTHIC_PLUS_WEEKLY_REWARD_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, &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); @@ -883,7 +882,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_TWITTER_CHECK_STATUS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_TWITTER_CONNECT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_TWITTER_DISCONNECT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_TWITTER_POST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UI_MAP_QUEST_LINES_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_UNACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUnacceptTradeOpcode); DEFINE_HANDLER(CMSG_UNDELETE_CHARACTER, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharUndeleteOpcode); @@ -908,6 +906,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_VAS_GET_QUEUE_MINUTES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VAS_GET_SERVICE_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VIOLENCE_LEVEL, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleViolenceLevel); + DEFINE_HANDLER(CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VOICE_CHAT_JOIN_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VOICE_CHAT_LOGIN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VOID_STORAGE_TRANSFER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleVoidStorageTransfer); @@ -1042,8 +1041,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_GUILD_FOLLOW_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_VAS_GUILD_MASTER_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PETS_HEALED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_CAGE_DATE_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1054,7 +1051,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_LICENSE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_RESTORED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_REVOKED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_SET_MAX_PETS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_TRAP_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_UPDATES, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BINDER_CONFIRM, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1223,6 +1219,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISPLAY_PLAYER_CHOICE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISPLAY_PROMOTION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISPLAY_QUEST_POPUP, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISPLAY_TOAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DISPLAY_WORLD_TEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1254,6 +1251,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_FAILED_QUEST_TURN_IN, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FEATURE_SYSTEM_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_FEATURE_SYSTEM_STATUS2, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FEIGN_DEATH_RESISTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FISH_ESCAPED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FISH_NOT_HOOKED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1280,6 +1278,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ADD_EVENT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ADD_FOLLOWER_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ADD_MISSION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ADD_SPEC_GROUPS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); @@ -1289,6 +1288,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT,STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CLEAR_COLLECTION, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CLEAR_EVENT_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CLEAR_SPEC_GROUPS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_COLLECTION_REMOVE_ENTRY, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_COLLECTION_UPDATE_ENTRY, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); @@ -1641,10 +1641,8 @@ void OpcodeTable::Initialize() 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); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MYTHIC_PLUS_CURRENT_AFFIXES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MYTHIC_PLUS_NEW_SEASON_RECORD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MYTHIC_PLUS_SEASON_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MYTHIC_PLUS_WEEKLY_REWARD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEW_TAXI_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_NEW_WORLD, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1724,6 +1722,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_GUILD_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SHOW_UI_EVENT_TOAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SKINNED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_TABARD_VENDOR_ACTIVATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1756,6 +1755,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_CREATURE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GAME_OBJECT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GARRISON_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + 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_NPC_TEXT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1765,6 +1765,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PLAYER_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUEST_INFO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_COMPLETION_NPC_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1779,6 +1780,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_STATUS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_GIVER_STATUS_MULTIPLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_LOG_FULL, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_NON_LOG_UPDATE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_POI_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_POI_UPDATE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_PUSH_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1790,7 +1792,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_PVP_CREDIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_COMPLETE_BY_SPELL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_FAILED_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEUE_SUMMARY_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -2021,6 +2022,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_VENDOR_INVENTORY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VIGNETTE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOICE_CHANNEL_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOICE_LOGIN_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_ITEM_SWAP_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_CONTENTS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 9e7250813df..74fccb661ae 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -44,31 +44,31 @@ enum OpcodeMisc : uint16 enum OpcodeClient : uint16 { - CMSG_ABANDON_NPE_RESPONSE = 0x33F1, + CMSG_ABANDON_NPE_RESPONSE = 0x33EC, CMSG_ACCEPT_GUILD_INVITE = 0x35FC, CMSG_ACCEPT_TRADE = 0x315A, CMSG_ACCEPT_WARGAME_INVITE = 0x35E0, - CMSG_ACTIVATE_SOULBIND = 0x33E1, + CMSG_ACTIVATE_SOULBIND = 0x33DB, CMSG_ACTIVATE_TAXI = 0x34B1, CMSG_ADDON_LIST = 0x35D8, - CMSG_ADD_BATTLENET_FRIEND = 0x365A, - CMSG_ADD_FRIEND = 0x36D0, - CMSG_ADD_IGNORE = 0x36D4, - CMSG_ADD_TOY = 0x32A7, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3207, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E4, - CMSG_ADVENTURE_MAP_START_QUEST = 0x335D, + CMSG_ADD_BATTLENET_FRIEND = 0x3659, + CMSG_ADD_FRIEND = 0x36CF, + CMSG_ADD_IGNORE = 0x36D3, + CMSG_ADD_TOY = 0x32A6, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3206, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33DE, + CMSG_ADVENTURE_MAP_START_QUEST = 0x335B, CMSG_ALTER_APPEARANCE = 0x3503, CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B6, CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B7, - CMSG_AREA_TRIGGER = 0x31DA, - CMSG_ARTIFACT_ADD_POWER = 0x31AC, - CMSG_ARTIFACT_SET_APPEARANCE = 0x31AE, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3210, - CMSG_ATTACK_STOP = 0x325F, - CMSG_ATTACK_SWING = 0x325E, - CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E8, - CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E9, + CMSG_AREA_TRIGGER = 0x31D9, + CMSG_ARTIFACT_ADD_POWER = 0x31AB, + CMSG_ARTIFACT_SET_APPEARANCE = 0x31AD, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x320F, + CMSG_ATTACK_STOP = 0x325E, + CMSG_ATTACK_SWING = 0x325D, + CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E6, + CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E7, CMSG_AUCTION_BROWSE_QUERY = 0x34D6, CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x34DE, CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x34DD, @@ -84,7 +84,7 @@ enum OpcodeClient : uint16 CMSG_AUCTION_REPLICATE_ITEMS = 0x34D4, CMSG_AUCTION_SELL_COMMODITY = 0x34DF, CMSG_AUCTION_SELL_ITEM = 0x34D2, - CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3735, + CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3734, CMSG_AUTH_CONTINUED_SESSION = 0x3766, CMSG_AUTH_SESSION = 0x3765, CMSG_AUTOBANK_ITEM = 0x3997, @@ -95,31 +95,31 @@ enum OpcodeClient : uint16 CMSG_AUTO_EQUIP_ITEM_SLOT = 0x399F, CMSG_AUTO_STORE_BAG_ITEM = 0x399B, CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x34C6, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3386, - CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3368, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3388, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3387, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3383, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3366, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3385, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3384, CMSG_BANKER_ACTIVATE = 0x34B9, CMSG_BATTLEFIELD_LEAVE = 0x3173, CMSG_BATTLEFIELD_LIST = 0x317F, CMSG_BATTLEFIELD_PORT = 0x3537, - CMSG_BATTLEMASTER_HELLO = 0x32C1, + CMSG_BATTLEMASTER_HELLO = 0x32C0, CMSG_BATTLEMASTER_JOIN = 0x3530, CMSG_BATTLEMASTER_JOIN_ARENA = 0x3531, CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3535, CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3532, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D3, - CMSG_BATTLENET_REQUEST = 0x36F7, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CD, - CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3714, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CC, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C3, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BB, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BC, - CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370E, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x370A, - CMSG_BATTLE_PAY_START_PURCHASE = 0x36CB, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F4, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D2, + CMSG_BATTLENET_REQUEST = 0x36F5, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CC, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3713, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CB, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C2, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BA, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BB, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370C, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3708, + CMSG_BATTLE_PAY_START_PURCHASE = 0x36CA, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F2, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x312C, CMSG_BATTLE_PET_DELETE_PET = 0x3624, CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3625, @@ -127,65 +127,65 @@ enum OpcodeClient : uint16 CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3623, CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3622, CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362C, - CMSG_BATTLE_PET_SET_FLAGS = 0x3630, + CMSG_BATTLE_PET_SET_FLAGS = 0x362F, CMSG_BATTLE_PET_SUMMON = 0x3628, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E4, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E3, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E3, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E2, CMSG_BEGIN_TRADE = 0x3157, CMSG_BINDER_ACTIVATE = 0x34B8, CMSG_BLACK_MARKET_BID_ON_ITEM = 0x353F, CMSG_BLACK_MARKET_OPEN = 0x353D, CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x353E, - CMSG_BONUS_ROLL = 0x3389, - CMSG_BUG_REPORT = 0x3686, + CMSG_BONUS_ROLL = 0x3386, + CMSG_BUG_REPORT = 0x3684, CMSG_BUSY_TRADE = 0x3158, CMSG_BUY_BACK_ITEM = 0x34AA, CMSG_BUY_BANK_SLOT = 0x34BA, CMSG_BUY_ITEM = 0x34A9, CMSG_BUY_REAGENT_BANK = 0x34BB, - CMSG_CAGE_BATTLE_PET = 0x31F6, - CMSG_CALENDAR_ADD_EVENT = 0x367D, - CMSG_CALENDAR_COMMUNITY_INVITE = 0x3671, - CMSG_CALENDAR_COMPLAIN = 0x3679, - CMSG_CALENDAR_COPY_EVENT = 0x3678, - CMSG_CALENDAR_EVENT_SIGN_UP = 0x367B, - CMSG_CALENDAR_GET = 0x366F, - CMSG_CALENDAR_GET_EVENT = 0x3670, - CMSG_CALENDAR_GET_NUM_PENDING = 0x367A, - CMSG_CALENDAR_INVITE = 0x3672, - CMSG_CALENDAR_MODERATOR_STATUS = 0x3676, - CMSG_CALENDAR_REMOVE_EVENT = 0x3677, - CMSG_CALENDAR_REMOVE_INVITE = 0x3673, - CMSG_CALENDAR_RSVP = 0x3674, - CMSG_CALENDAR_STATUS = 0x3675, - CMSG_CALENDAR_UPDATE_EVENT = 0x367E, - CMSG_CANCEL_AURA = 0x31B0, + CMSG_CAGE_BATTLE_PET = 0x31F5, + CMSG_CALENDAR_ADD_EVENT = 0x367C, + CMSG_CALENDAR_COMMUNITY_INVITE = 0x3670, + CMSG_CALENDAR_COMPLAIN = 0x3678, + CMSG_CALENDAR_COPY_EVENT = 0x3677, + CMSG_CALENDAR_EVENT_SIGN_UP = 0x367A, + CMSG_CALENDAR_GET = 0x366E, + CMSG_CALENDAR_GET_EVENT = 0x366F, + CMSG_CALENDAR_GET_NUM_PENDING = 0x3679, + CMSG_CALENDAR_INVITE = 0x3671, + CMSG_CALENDAR_MODERATOR_STATUS = 0x3675, + CMSG_CALENDAR_REMOVE_EVENT = 0x3676, + CMSG_CALENDAR_REMOVE_INVITE = 0x3672, + CMSG_CALENDAR_RSVP = 0x3673, + CMSG_CALENDAR_STATUS = 0x3674, + CMSG_CALENDAR_UPDATE_EVENT = 0x367D, + CMSG_CANCEL_AURA = 0x31AF, CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F5, - CMSG_CANCEL_CAST = 0x32AD, - CMSG_CANCEL_CHANNELLING = 0x3277, - CMSG_CANCEL_GROWTH_AURA = 0x327C, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3218, - CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AF, - CMSG_CANCEL_MOUNT_AURA = 0x328F, + CMSG_CANCEL_CAST = 0x32AC, + CMSG_CANCEL_CHANNELLING = 0x3276, + CMSG_CANCEL_GROWTH_AURA = 0x327B, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3217, + CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AE, + CMSG_CANCEL_MOUNT_AURA = 0x328E, CMSG_CANCEL_QUEUED_SPELL = 0x3180, CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3500, CMSG_CANCEL_TRADE = 0x315C, - CMSG_CAN_DUEL = 0x3662, - CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3709, - CMSG_CAST_SPELL = 0x32AA, + CMSG_CAN_DUEL = 0x3661, + CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3707, + CMSG_CAST_SPELL = 0x32A9, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x3090, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x3341, - CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3342, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3322, - CMSG_CHANGE_REALM_TICKET = 0x36FC, - CMSG_CHANGE_SUB_GROUP = 0x364C, - CMSG_CHARACTER_CHECK_UPGRADE = 0x36C6, - CMSG_CHARACTER_RENAME_REQUEST = 0x36C1, - CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C4, - CMSG_CHARACTER_UPGRADE_START = 0x36C5, - CMSG_CHAR_CUSTOMIZE = 0x3690, - CMSG_CHAR_DELETE = 0x369E, - CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3696, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x3340, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3341, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3321, + CMSG_CHANGE_REALM_TICKET = 0x36FA, + CMSG_CHANGE_SUB_GROUP = 0x364B, + CMSG_CHARACTER_CHECK_UPGRADE = 0x36C5, + CMSG_CHARACTER_RENAME_REQUEST = 0x36C0, + CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C3, + CMSG_CHARACTER_UPGRADE_START = 0x36C4, + CMSG_CHAR_CUSTOMIZE = 0x368E, + CMSG_CHAR_DELETE = 0x369D, + CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3694, CMSG_CHAT_ADDON_MESSAGE = 0x37EE, CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x37EF, CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E3, @@ -222,29 +222,29 @@ enum OpcodeClient : uint16 CMSG_CHAT_REPORT_FILTERED = 0x37CC, CMSG_CHAT_REPORT_IGNORED = 0x37CB, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE, - CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3645, - CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3250, - CMSG_CHOICE_RESPONSE = 0x32B1, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33E0, - CMSG_CLAIM_WEEKLY_REWARD = 0x33BB, + CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3644, + CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x324F, + CMSG_CHOICE_RESPONSE = 0x32B0, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33DA, + CMSG_CLAIM_WEEKLY_REWARD = 0x33B7, CMSG_CLEAR_NEW_APPEARANCE = 0x312F, - CMSG_CLEAR_RAID_MARKER = 0x31A8, + CMSG_CLEAR_RAID_MARKER = 0x31A7, CMSG_CLEAR_TRADE_ITEM = 0x315E, CMSG_CLIENT_PORT_GRAVEYARD = 0x3539, CMSG_CLOSE_INTERACTION = 0x3499, - CMSG_CLOSE_QUEST_CHOICE = 0x32B2, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E8, - CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371F, - CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371D, - CMSG_CLUB_FINDER_POST = 0x371A, - CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x3721, - CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x371B, - CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x371C, - CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x3720, - CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x3722, - CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x371E, - CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F9, - CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3633, + CMSG_CLOSE_QUEST_CHOICE = 0x32B1, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E2, + CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371E, + CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371C, + CMSG_CLUB_FINDER_POST = 0x3719, + CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x3720, + CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x371A, + CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x371B, + CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371F, + CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x3721, + CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x371D, + CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F7, + CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3632, CMSG_COMMENTATOR_ENABLE = 0x35F0, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4, CMSG_COMMENTATOR_EXIT_INSTANCE = 0x35F5, @@ -252,36 +252,36 @@ enum OpcodeClient : uint16 CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F3, CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2, CMSG_COMMENTATOR_START_WARGAME = 0x35EF, - CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E6, - CMSG_COMMERCE_TOKEN_GET_LOG = 0x36F0, - CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E7, - CMSG_COMPLAINT = 0x366C, + CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E4, + CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EE, + CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E5, + CMSG_COMPLAINT = 0x366B, CMSG_COMPLETE_CINEMATIC = 0x3557, CMSG_COMPLETE_MOVIE = 0x34EB, - CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AD, - CMSG_CONFIRM_RESPEC_WIPE = 0x3212, + CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AC, + CMSG_CONFIRM_RESPEC_WIPE = 0x3211, CMSG_CONNECT_TO_FAILED = 0x35D4, - CMSG_CONSUMABLE_TOKEN_BUY = 0x36EB, - CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36EC, - CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36EA, - CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36EE, - CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36EF, + CMSG_CONSUMABLE_TOKEN_BUY = 0x36E9, + CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36EA, + CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E8, + CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36EC, + CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36ED, CMSG_CONTRIBUTION_CONTRIBUTE = 0x3569, CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356A, CMSG_CONVERSATION_LINE_STARTED = 0x3558, - CMSG_CONVERT_RAID = 0x364E, + CMSG_CONVERT_RAID = 0x364D, CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x357D, - CMSG_CREATE_CHARACTER = 0x3644, - CMSG_CREATE_SHIPMENT = 0x330E, + CMSG_CREATE_CHARACTER = 0x3643, + CMSG_CREATE_SHIPMENT = 0x330D, CMSG_DB_QUERY_BULK = 0x35E4, CMSG_DECLINE_GUILD_INVITES = 0x352D, CMSG_DECLINE_PETITION = 0x3546, CMSG_DELETE_EQUIPMENT_SET = 0x3519, - CMSG_DEL_FRIEND = 0x36D1, - CMSG_DEL_IGNORE = 0x36D5, + CMSG_DEL_FRIEND = 0x36D0, + CMSG_DEL_IGNORE = 0x36D4, CMSG_DEPOSIT_GUILD_BANK_ITEM = 0x34BD, - CMSG_DEPOSIT_REAGENT_BANK = 0x334A, - CMSG_DESTROY_ITEM = 0x32A1, + CMSG_DEPOSIT_REAGENT_BANK = 0x3349, + CMSG_DESTROY_ITEM = 0x32A0, CMSG_DF_BOOT_PLAYER_VOTE = 0x3615, CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3607, CMSG_DF_GET_JOIN_STATUS = 0x3613, @@ -294,66 +294,66 @@ enum OpcodeClient : uint16 CMSG_DF_TELEPORT = 0x3616, CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A3E, CMSG_DISMISS_CRITTER = 0x3507, - CMSG_DO_COUNTDOWN = 0x3719, - CMSG_DO_MASTER_LOOT_ROLL = 0x3217, - CMSG_DO_READY_CHECK = 0x3634, + CMSG_DO_COUNTDOWN = 0x3718, + CMSG_DO_MASTER_LOOT_ROLL = 0x3216, + CMSG_DO_READY_CHECK = 0x3633, CMSG_DUEL_RESPONSE = 0x34F0, - CMSG_EJECT_PASSENGER = 0x3245, + CMSG_EJECT_PASSENGER = 0x3244, CMSG_EMOTE = 0x3553, CMSG_ENABLE_NAGLE = 0x376B, CMSG_ENABLE_TAXI_NODE = 0x34AF, - CMSG_ENGINE_SURVEY = 0x36E4, + CMSG_ENGINE_SURVEY = 0x36E2, CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x3767, CMSG_ENUM_CHARACTERS = 0x35E8, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DE, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DC, CMSG_FAR_SIGHT = 0x34F6, - CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B4, - CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B3, + CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B3, + CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B2, CMSG_GAME_OBJ_REPORT_USE = 0x34FD, CMSG_GAME_OBJ_USE = 0x34FC, - CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3309, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32EF, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32DC, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x333D, - CMSG_GARRISON_COMPLETE_MISSION = 0x332F, - CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x330A, - CMSG_GARRISON_GENERATE_RECRUITS = 0x32F2, - CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3301, - CMSG_GARRISON_GET_MAP_DATA = 0x3308, - CMSG_GARRISON_GET_MISSION_REWARD = 0x3361, - CMSG_GARRISON_LEARN_TALENT = 0x32FD, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3331, - CMSG_GARRISON_PURCHASE_BUILDING = 0x32D8, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32F4, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x3326, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32F0, - CMSG_GARRISON_RENAME_FOLLOWER = 0x32F1, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32D7, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x330C, - CMSG_GARRISON_RESEARCH_TALENT = 0x32F5, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32D9, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32ED, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32E5, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32F3, - CMSG_GARRISON_SOCKET_TALENT = 0x33F4, - CMSG_GARRISON_START_MISSION = 0x332E, - CMSG_GARRISON_SWAP_BUILDINGS = 0x32DD, + CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3308, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32EE, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32DB, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x333C, + CMSG_GARRISON_COMPLETE_MISSION = 0x332E, + CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3309, + CMSG_GARRISON_GENERATE_RECRUITS = 0x32F1, + CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3300, + CMSG_GARRISON_GET_MAP_DATA = 0x3307, + CMSG_GARRISON_GET_MISSION_REWARD = 0x335F, + CMSG_GARRISON_LEARN_TALENT = 0x32FC, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3330, + CMSG_GARRISON_PURCHASE_BUILDING = 0x32D7, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32F3, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x3325, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32EF, + CMSG_GARRISON_RENAME_FOLLOWER = 0x32F0, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32D6, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x330B, + CMSG_GARRISON_RESEARCH_TALENT = 0x32F4, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32D8, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32EC, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32E4, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32F2, + CMSG_GARRISON_SOCKET_TALENT = 0x33EF, + CMSG_GARRISON_START_MISSION = 0x332D, + CMSG_GARRISON_SWAP_BUILDINGS = 0x32DC, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7, - CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B6, - CMSG_GET_GARRISON_INFO = 0x32D2, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B5, + CMSG_GET_GARRISON_INFO = 0x32D1, CMSG_GET_ITEM_PURCHASE_DATA = 0x3541, - CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x330D, - CMSG_GET_MIRROR_IMAGE_DATA = 0x32A5, + CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x330C, + CMSG_GET_MIRROR_IMAGE_DATA = 0x32A4, CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE, - CMSG_GET_RAF_ACCOUNT_INFO = 0x3723, - CMSG_GET_REMAINING_GAME_TIME = 0x36ED, - CMSG_GET_TROPHY_LIST = 0x331F, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E0, - CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36F2, - CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36F3, - CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3694, - CMSG_GM_TICKET_GET_CASE_STATUS = 0x3693, - CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3692, + CMSG_GET_RAF_ACCOUNT_INFO = 0x3722, + CMSG_GET_REMAINING_GAME_TIME = 0x36EB, + CMSG_GET_TROPHY_LIST = 0x331E, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DE, + CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36F0, + CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36F1, + CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3692, + CMSG_GM_TICKET_GET_CASE_STATUS = 0x3691, + CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3690, CMSG_GOSSIP_REFRESH_OPTIONS = 0x357C, CMSG_GOSSIP_SELECT_OPTION = 0x349A, CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308E, @@ -393,41 +393,41 @@ enum OpcodeClient : uint16 CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3089, CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x3070, CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3071, - CMSG_GUILD_SET_GUILD_MASTER = 0x36C8, + CMSG_GUILD_SET_GUILD_MASTER = 0x36C7, CMSG_GUILD_SET_MEMBER_NOTE = 0x3073, CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3068, CMSG_GUILD_SHIFT_RANK = 0x3067, CMSG_GUILD_UPDATE_INFO_TEXT = 0x3076, CMSG_GUILD_UPDATE_MOTD_TEXT = 0x3075, CMSG_HEARTH_AND_RESURRECT = 0x3515, - CMSG_HIDE_QUEST_CHOICE = 0x32B3, + CMSG_HIDE_QUEST_CHOICE = 0x32B2, CMSG_HOTFIX_REQUEST = 0x35E5, CMSG_IGNORE_TRADE = 0x3159, CMSG_INITIATE_ROLE_POLL = 0x35DA, CMSG_INITIATE_TRADE = 0x3156, CMSG_INSPECT = 0x353B, CMSG_INSTANCE_LOCK_RESPONSE = 0x351A, - CMSG_ISLAND_QUEUE = 0x33B7, + CMSG_ISLAND_QUEUE = 0x33B3, CMSG_ITEM_PURCHASE_REFUND = 0x3542, - CMSG_ITEM_TEXT_QUERY = 0x333E, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x31E1, + CMSG_ITEM_TEXT_QUERY = 0x333D, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x31E0, CMSG_JOIN_RATED_BATTLEGROUND = 0x3179, - CMSG_KEEP_ALIVE = 0x367F, - CMSG_KEYBOUND_OVERRIDE = 0x322A, + CMSG_KEEP_ALIVE = 0x367E, + CMSG_KEYBOUND_OVERRIDE = 0x3229, CMSG_LEARN_PVP_TALENTS = 0x3568, CMSG_LEARN_TALENTS = 0x3566, - CMSG_LEAVE_GROUP = 0x3649, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E2, + CMSG_LEAVE_GROUP = 0x3648, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E1, CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360C, CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360D, CMSG_LFG_LIST_DECLINE_APPLICANT = 0x360E, CMSG_LFG_LIST_GET_STATUS = 0x360A, CMSG_LFG_LIST_INVITE_APPLICANT = 0x360F, CMSG_LFG_LIST_INVITE_RESPONSE = 0x3610, - CMSG_LFG_LIST_JOIN = 0x3384, + CMSG_LFG_LIST_JOIN = 0x3381, CMSG_LFG_LIST_LEAVE = 0x3609, CMSG_LFG_LIST_SEARCH = 0x360B, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x3385, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x3382, CMSG_LF_GUILD_ADD_RECRUIT = 0x361B, CMSG_LF_GUILD_BROWSE = 0x361D, CMSG_LF_GUILD_DECLINE_RECRUIT = 0x3079, @@ -437,41 +437,41 @@ enum OpcodeClient : uint16 CMSG_LF_GUILD_REMOVE_RECRUIT = 0x307B, CMSG_LF_GUILD_SET_GUILD_POST = 0x361C, CMSG_LIST_INVENTORY = 0x34A7, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B9, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B8, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B7, - CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36BA, + CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B8, + CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B7, + CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B6, + CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B9, CMSG_LOADING_SCREEN_NOTIFY = 0x35F8, - CMSG_LOAD_SELECTED_TROPHY = 0x3320, + CMSG_LOAD_SELECTED_TROPHY = 0x331F, CMSG_LOGOUT_CANCEL = 0x34E6, CMSG_LOGOUT_INSTANT = 0x34E7, CMSG_LOGOUT_REQUEST = 0x34E4, CMSG_LOG_DISCONNECT = 0x3769, CMSG_LOG_STREAMING_ERROR = 0x376D, - CMSG_LOOT_ITEM = 0x3215, - CMSG_LOOT_MONEY = 0x3214, - CMSG_LOOT_RELEASE = 0x3219, - CMSG_LOOT_ROLL = 0x321A, - CMSG_LOOT_UNIT = 0x3213, - CMSG_LOW_LEVEL_RAID1 = 0x36A2, + CMSG_LOOT_ITEM = 0x3214, + CMSG_LOOT_MONEY = 0x3213, + CMSG_LOOT_RELEASE = 0x3218, + CMSG_LOOT_ROLL = 0x3219, + CMSG_LOOT_UNIT = 0x3212, + CMSG_LOW_LEVEL_RAID1 = 0x36A1, CMSG_LOW_LEVEL_RAID2 = 0x3521, CMSG_MAIL_CREATE_TEXT_ITEM = 0x354D, - CMSG_MAIL_DELETE = 0x322C, + CMSG_MAIL_DELETE = 0x322B, CMSG_MAIL_GET_LIST = 0x3548, CMSG_MAIL_MARK_AS_READ = 0x354C, - CMSG_MAIL_RETURN_TO_SENDER = 0x3655, + CMSG_MAIL_RETURN_TO_SENDER = 0x3654, CMSG_MAIL_TAKE_ITEM = 0x354A, CMSG_MAIL_TAKE_MONEY = 0x3549, - CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x322E, - CMSG_MASTER_LOOT_ITEM = 0x3216, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x322D, + CMSG_MASTER_LOOT_ITEM = 0x3215, CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x34C7, CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x34C4, CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x34C2, - CMSG_MINIMAP_PING = 0x364B, + CMSG_MINIMAP_PING = 0x364A, CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318B, CMSG_MOUNT_CLEAR_FANFARE = 0x312D, - CMSG_MOUNT_SET_FAVORITE = 0x3632, - CMSG_MOUNT_SPECIAL_ANIM = 0x3290, + CMSG_MOUNT_SET_FAVORITE = 0x3631, + CMSG_MOUNT_SPECIAL_ANIM = 0x328F, CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A14, CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2E, CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A33, @@ -541,42 +541,41 @@ enum OpcodeClient : uint16 CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A19, CMSG_MOVE_WATER_WALK_ACK = 0x3A1C, CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x308F, - CMSG_MYTHIC_PLUS_WEEKLY_REWARD_REQUEST = 0x3683, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D7, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D6, CMSG_NEXT_CINEMATIC_CAMERA = 0x3556, CMSG_OBJECT_UPDATE_FAILED = 0x3181, CMSG_OBJECT_UPDATE_RESCUED = 0x3182, - CMSG_OFFER_PETITION = 0x33DF, + CMSG_OFFER_PETITION = 0x33D9, CMSG_OPENING_CINEMATIC = 0x3555, - CMSG_OPEN_ITEM = 0x333F, - CMSG_OPEN_MISSION_NPC = 0x3303, - CMSG_OPEN_SHIPMENT_NPC = 0x330B, - CMSG_OPEN_TRADESKILL_NPC = 0x3316, + CMSG_OPEN_ITEM = 0x333E, + CMSG_OPEN_MISSION_NPC = 0x3302, + CMSG_OPEN_SHIPMENT_NPC = 0x330A, + CMSG_OPEN_TRADESKILL_NPC = 0x3315, CMSG_OPT_OUT_OF_LOOT = 0x3504, CMSG_OVERRIDE_SCREEN_FLASH = 0x352E, CMSG_PARTY_INVITE = 0x3602, CMSG_PARTY_INVITE_RESPONSE = 0x3603, - CMSG_PARTY_UNINVITE = 0x3647, - CMSG_PERFORM_ITEM_INTERACTION = 0x3236, + CMSG_PARTY_UNINVITE = 0x3646, + CMSG_PERFORM_ITEM_INTERACTION = 0x3235, CMSG_PETITION_BUY = 0x34CF, - CMSG_PETITION_RENAME_GUILD = 0x36C9, + CMSG_PETITION_RENAME_GUILD = 0x36C8, CMSG_PETITION_SHOW_LIST = 0x34CE, CMSG_PETITION_SHOW_SIGNATURES = 0x34D0, CMSG_PET_ABANDON = 0x3493, CMSG_PET_ACTION = 0x3491, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E6, - CMSG_PET_BATTLE_INPUT = 0x3641, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x322B, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E5, - CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3642, - CMSG_PET_BATTLE_REQUEST_PVP = 0x31DF, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31E0, - CMSG_PET_BATTLE_REQUEST_WILD = 0x31DD, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E7, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DE, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E5, + CMSG_PET_BATTLE_INPUT = 0x3640, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x322A, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E4, + CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3641, + CMSG_PET_BATTLE_REQUEST_PVP = 0x31DE, + CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DF, + CMSG_PET_BATTLE_REQUEST_WILD = 0x31DC, + CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E6, + CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DD, CMSG_PET_CANCEL_AURA = 0x3494, - CMSG_PET_CAST_SPELL = 0x32A9, - CMSG_PET_RENAME = 0x3685, + CMSG_PET_CAST_SPELL = 0x32A8, + CMSG_PET_RENAME = 0x3683, CMSG_PET_SET_ACTION = 0x3490, CMSG_PET_SPELL_AUTOCAST = 0x3495, CMSG_PET_STOP_ATTACK = 0x3492, @@ -584,30 +583,30 @@ enum OpcodeClient : uint16 CMSG_PLAYER_LOGIN = 0x35EA, CMSG_PUSH_QUEST_TO_PARTY = 0x34A5, CMSG_PVP_LOG_DATA = 0x317C, - CMSG_QUERY_BATTLE_PET_NAME = 0x3283, - CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3660, - CMSG_QUERY_CORPSE_TRANSPORT = 0x3661, - CMSG_QUERY_COUNTDOWN_TIMER = 0x31AB, - CMSG_QUERY_CREATURE = 0x327D, - CMSG_QUERY_GAME_OBJECT = 0x327E, - CMSG_QUERY_GARRISON_PET_NAME = 0x3284, - CMSG_QUERY_GUILD_INFO = 0x368E, + CMSG_QUERY_BATTLE_PET_NAME = 0x3282, + CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365F, + CMSG_QUERY_CORPSE_TRANSPORT = 0x3660, + CMSG_QUERY_COUNTDOWN_TIMER = 0x31AA, + CMSG_QUERY_CREATURE = 0x327C, + CMSG_QUERY_GAME_OBJECT = 0x327D, + CMSG_QUERY_GARRISON_PET_NAME = 0x3283, + CMSG_QUERY_GUILD_INFO = 0x368C, CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x350E, CMSG_QUERY_NEXT_MAIL_TIME = 0x354B, - CMSG_QUERY_NPC_TEXT = 0x327F, - CMSG_QUERY_PAGE_TEXT = 0x3281, - CMSG_QUERY_PETITION = 0x3285, - CMSG_QUERY_PET_NAME = 0x3282, - CMSG_QUERY_PLAYER_NAME = 0x368A, - CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x368C, - CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x368B, + CMSG_QUERY_NPC_TEXT = 0x327E, + CMSG_QUERY_PAGE_TEXT = 0x3280, + CMSG_QUERY_PETITION = 0x3284, + CMSG_QUERY_PET_NAME = 0x3281, + CMSG_QUERY_PLAYER_NAME = 0x3688, + CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x368A, + CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x3689, CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3175, - CMSG_QUERY_QUEST_INFO = 0x3280, - CMSG_QUERY_REALM_NAME = 0x368D, - CMSG_QUERY_SCENARIO_POI = 0x3656, + CMSG_QUERY_QUEST_INFO = 0x327F, + CMSG_QUERY_REALM_NAME = 0x368B, + CMSG_QUERY_SCENARIO_POI = 0x3655, CMSG_QUERY_TIME = 0x34E3, - CMSG_QUERY_TREASURE_PICKER = 0x3364, - CMSG_QUERY_VOID_STORAGE = 0x31A4, + CMSG_QUERY_TREASURE_PICKER = 0x3362, + CMSG_QUERY_VOID_STORAGE = 0x31A3, CMSG_QUEST_CONFIRM_ACCEPT = 0x34A4, CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349E, CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x34A0, @@ -619,138 +618,138 @@ enum OpcodeClient : uint16 CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x34A3, CMSG_QUEST_GIVER_STATUS_QUERY = 0x34A2, CMSG_QUEST_LOG_REMOVE_QUEST = 0x3540, - CMSG_QUEST_POI_QUERY = 0x36B0, + CMSG_QUEST_POI_QUERY = 0x36AF, CMSG_QUEST_PUSH_RESULT = 0x34A6, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33D0, - CMSG_QUEST_SESSION_REQUEST_START = 0x33CF, - CMSG_QUEST_SESSION_REQUEST_STOP = 0x372E, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33CA, + CMSG_QUEST_SESSION_REQUEST_START = 0x33C9, + CMSG_QUEST_SESSION_REQUEST_STOP = 0x372D, CMSG_QUEUED_MESSAGES_END = 0x376C, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3708, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3707, - CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3733, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3706, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3705, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3706, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3705, + CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3732, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3704, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3703, CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3512, - CMSG_RAF_CLAIM_NEXT_REWARD = 0x3724, - CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3726, - CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3725, - CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E5, - CMSG_RANDOM_ROLL = 0x3654, - CMSG_READY_CHECK_RESPONSE = 0x3635, - CMSG_READ_ITEM = 0x3340, + CMSG_RAF_CLAIM_NEXT_REWARD = 0x3723, + CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3725, + CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3724, + CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E3, + CMSG_RANDOM_ROLL = 0x3653, + CMSG_READY_CHECK_RESPONSE = 0x3634, + CMSG_READ_ITEM = 0x333F, CMSG_RECLAIM_CORPSE = 0x34E9, - CMSG_REMOVE_NEW_ITEM = 0x3367, - CMSG_REMOVE_RAF_RECRUIT = 0x3727, + CMSG_REMOVE_NEW_ITEM = 0x3365, + CMSG_REMOVE_RAF_RECRUIT = 0x3726, CMSG_REORDER_CHARACTERS = 0x35E9, CMSG_REPAIR_ITEM = 0x34FA, - CMSG_REPLACE_TROPHY = 0x3321, + CMSG_REPLACE_TROPHY = 0x3320, CMSG_REPOP_REQUEST = 0x3538, - CMSG_REPORT_CLIENT_VARIABLES = 0x3702, - CMSG_REPORT_ENABLED_ADDONS = 0x3701, - CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3703, + CMSG_REPORT_CLIENT_VARIABLES = 0x3700, + CMSG_REPORT_ENABLED_ADDONS = 0x36FF, + CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3701, CMSG_REPORT_PVP_PLAYER_AFK = 0x3502, - CMSG_REPORT_SERVER_LAG = 0x33C6, - CMSG_REPORT_STUCK_IN_COMBAT = 0x33C7, - CMSG_REQUEST_ACCOUNT_DATA = 0x3698, - CMSG_REQUEST_AREA_POI_UPDATE = 0x3366, + CMSG_REPORT_SERVER_LAG = 0x33C2, + CMSG_REPORT_STUCK_IN_COMBAT = 0x33C3, + CMSG_REQUEST_ACCOUNT_DATA = 0x3696, + CMSG_REQUEST_AREA_POI_UPDATE = 0x3364, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC, CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317E, CMSG_REQUEST_CEMETERY_LIST = 0x3177, - CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368F, - CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32C4, - CMSG_REQUEST_COVENANT_CALLINGS = 0x33B9, + CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368D, + CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32C3, + CMSG_REQUEST_COVENANT_CALLINGS = 0x33B5, CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353C, - CMSG_REQUEST_FORCED_REACTIONS = 0x320E, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F3, - CMSG_REQUEST_GUILD_PARTY_STATE = 0x31AA, - CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A9, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C8, - CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32B4, - CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x320B, - CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x320C, + CMSG_REQUEST_FORCED_REACTIONS = 0x320D, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33EE, + CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A9, + CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A8, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C4, + CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32B3, + CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x320A, + CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x320B, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7, - CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3653, + CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3652, CMSG_REQUEST_PET_INFO = 0x3496, - CMSG_REQUEST_PLAYED_TIME = 0x3288, - CMSG_REQUEST_PVP_REWARDS = 0x3197, - CMSG_REQUEST_RAID_INFO = 0x36CA, + CMSG_REQUEST_PLAYED_TIME = 0x3287, + CMSG_REQUEST_PVP_REWARDS = 0x3196, + CMSG_REQUEST_RAID_INFO = 0x36C9, CMSG_REQUEST_RATED_PVP_INFO = 0x35E3, CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x309B, CMSG_REQUEST_RESEARCH_HISTORY = 0x3167, - CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3198, + CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3197, CMSG_REQUEST_STABLED_PETS = 0x3497, - CMSG_REQUEST_VEHICLE_EXIT = 0x3240, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3242, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3241, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3243, - CMSG_REQUEST_WEEKLY_REWARDS = 0x33BC, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3365, - CMSG_RESET_CHALLENGE_MODE = 0x3209, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x320A, - CMSG_RESET_INSTANCES = 0x3668, - CMSG_RESURRECT_RESPONSE = 0x3684, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x3323, - CMSG_RIDE_VEHICLE_INTERACT = 0x3244, + CMSG_REQUEST_VEHICLE_EXIT = 0x323F, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3241, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3240, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3242, + CMSG_REQUEST_WEEKLY_REWARDS = 0x33B8, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3363, + CMSG_RESET_CHALLENGE_MODE = 0x3208, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3209, + CMSG_RESET_INSTANCES = 0x3667, + CMSG_RESURRECT_RESPONSE = 0x3682, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x3322, + CMSG_RIDE_VEHICLE_INTERACT = 0x3243, CMSG_SAVE_CUF_PROFILES = 0x318C, CMSG_SAVE_EQUIPMENT_SET = 0x3518, - CMSG_SAVE_GUILD_EMBLEM = 0x32B8, - CMSG_SCENE_PLAYBACK_CANCELED = 0x3227, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x3226, - CMSG_SCENE_TRIGGER_EVENT = 0x3228, + CMSG_SAVE_GUILD_EMBLEM = 0x32B7, + CMSG_SCENE_PLAYBACK_CANCELED = 0x3226, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x3225, + CMSG_SCENE_TRIGGER_EVENT = 0x3227, CMSG_SELF_RES = 0x3543, CMSG_SELL_ITEM = 0x34A8, - CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36FB, - CMSG_SEND_CONTACT_LIST = 0x36CF, + CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F9, + CMSG_SEND_CONTACT_LIST = 0x36CE, CMSG_SEND_MAIL = 0x35FA, CMSG_SEND_TEXT_EMOTE = 0x348E, - CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369D, - CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x322D, + CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369C, + CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x322C, CMSG_SET_ACTION_BAR_TOGGLES = 0x3544, - CMSG_SET_ACTION_BUTTON = 0x3636, + CMSG_SET_ACTION_BUTTON = 0x3635, CMSG_SET_ACTIVE_MOVER = 0x3A39, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32C5, - CMSG_SET_ASSISTANT_LEADER = 0x364F, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3343, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3344, - CMSG_SET_CONTACT_NOTES = 0x36D2, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32C4, + CMSG_SET_ASSISTANT_LEADER = 0x364E, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3342, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3343, + CMSG_SET_CONTACT_NOTES = 0x36D1, CMSG_SET_CURRENCY_FLAGS = 0x3169, - CMSG_SET_DIFFICULTY_ID = 0x3229, - CMSG_SET_DUNGEON_DIFFICULTY = 0x3682, + CMSG_SET_DIFFICULTY_ID = 0x3228, + CMSG_SET_DUNGEON_DIFFICULTY = 0x3681, CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3617, CMSG_SET_FACTION_AT_WAR = 0x34EC, CMSG_SET_FACTION_INACTIVE = 0x34EE, CMSG_SET_FACTION_NOT_AT_WAR = 0x34ED, - CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31BB, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3346, - CMSG_SET_LOOT_METHOD = 0x3648, + CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31BA, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3345, + CMSG_SET_LOOT_METHOD = 0x3647, CMSG_SET_LOOT_SPECIALIZATION = 0x3551, - CMSG_SET_PARTY_ASSIGNMENT = 0x3651, - CMSG_SET_PARTY_LEADER = 0x364A, + CMSG_SET_PARTY_ASSIGNMENT = 0x3650, + CMSG_SET_PARTY_LEADER = 0x3649, CMSG_SET_PET_SLOT = 0x3168, - CMSG_SET_PLAYER_DECLINED_NAMES = 0x3689, + CMSG_SET_PLAYER_DECLINED_NAMES = 0x3687, CMSG_SET_PREFERRED_CEMETERY = 0x3178, - CMSG_SET_PVP = 0x32BC, - CMSG_SET_RAID_DIFFICULTY = 0x36DC, + CMSG_SET_PVP = 0x32BB, + CMSG_SET_RAID_DIFFICULTY = 0x36DA, CMSG_SET_ROLE = 0x35D9, - CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3687, + CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3685, CMSG_SET_SELECTION = 0x353A, CMSG_SET_SHEATHED = 0x348F, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3345, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3344, CMSG_SET_TAXI_BENCHMARK_MODE = 0x3501, - CMSG_SET_TITLE = 0x328E, + CMSG_SET_TITLE = 0x328D, CMSG_SET_TRADE_CURRENCY = 0x3160, CMSG_SET_TRADE_GOLD = 0x315F, CMSG_SET_TRADE_ITEM = 0x315D, - CMSG_SET_USING_PARTY_GARRISON = 0x3305, - CMSG_SET_WAR_MODE = 0x32BD, + CMSG_SET_USING_PARTY_GARRISON = 0x3304, + CMSG_SET_WAR_MODE = 0x32BC, CMSG_SET_WATCHED_FACTION = 0x34EF, - CMSG_SHOW_TRADE_SKILL = 0x36C2, + CMSG_SHOW_TRADE_SKILL = 0x36C1, CMSG_SIGN_PETITION = 0x3545, - CMSG_SILENCE_PARTY_TALKER = 0x3652, + CMSG_SILENCE_PARTY_TALKER = 0x3651, CMSG_SOCKET_GEMS = 0x34F9, - CMSG_SORT_BAGS = 0x3347, - CMSG_SORT_BANK_BAGS = 0x3348, - CMSG_SORT_REAGENT_BANK_BAGS = 0x3349, + CMSG_SORT_BAGS = 0x3346, + CMSG_SORT_BANK_BAGS = 0x3347, + CMSG_SORT_REAGENT_BANK_BAGS = 0x3348, CMSG_SPELL_CLICK = 0x349B, CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B5, CMSG_SPLIT_GUILD_BANK_ITEM = 0x34C8, @@ -762,10 +761,10 @@ enum OpcodeClient : uint16 CMSG_START_SPECTATOR_WAR_GAME = 0x35DF, CMSG_START_WAR_GAME = 0x35DE, CMSG_STORE_GUILD_BANK_ITEM = 0x34BE, - CMSG_SUBMIT_USER_FEEDBACK = 0x3697, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E9, - CMSG_SUMMON_RESPONSE = 0x366A, - CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3646, + CMSG_SUBMIT_USER_FEEDBACK = 0x3695, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E3, + CMSG_SUMMON_RESPONSE = 0x3669, + CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3645, CMSG_SURRENDER_ARENA = 0x3174, CMSG_SUSPEND_COMMS_ACK = 0x3764, CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A, @@ -773,9 +772,9 @@ enum OpcodeClient : uint16 CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x34BF, - CMSG_SWAP_SUB_GROUPS = 0x364D, - CMSG_SWAP_VOID_ITEM = 0x31A6, - CMSG_TABARD_VENDOR_ACTIVATE = 0x32B9, + CMSG_SWAP_SUB_GROUPS = 0x364C, + CMSG_SWAP_VOID_ITEM = 0x31A5, + CMSG_TABARD_VENDOR_ACTIVATE = 0x32B8, CMSG_TALK_TO_GOSSIP = 0x3498, CMSG_TAXI_NODE_STATUS_QUERY = 0x34AE, CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34B0, @@ -784,50 +783,50 @@ enum OpcodeClient : uint16 CMSG_TIME_SYNC_RESPONSE = 0x3A3A, CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3C, CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3B, - CMSG_TOGGLE_DIFFICULTY = 0x3657, - CMSG_TOGGLE_PVP = 0x32BB, + CMSG_TOGGLE_DIFFICULTY = 0x3656, + CMSG_TOGGLE_PVP = 0x32BA, CMSG_TOTEM_DESTROYED = 0x3506, CMSG_TOY_CLEAR_FANFARE = 0x312E, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x3363, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x3361, CMSG_TRAINER_BUY_SPELL = 0x34B4, CMSG_TRAINER_LIST = 0x34B3, - CMSG_TRANSMOGRIFY_ITEMS = 0x3199, + CMSG_TRANSMOGRIFY_ITEMS = 0x3198, CMSG_TURN_IN_PETITION = 0x3547, - CMSG_TUTORIAL = 0x36DD, + CMSG_TUTORIAL = 0x36DB, CMSG_TWITTER_CHECK_STATUS = 0x312A, CMSG_TWITTER_CONNECT = 0x3127, CMSG_TWITTER_DISCONNECT = 0x312B, - CMSG_TWITTER_POST = 0x334B, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B8, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B4, CMSG_UNACCEPT_TRADE = 0x315B, - CMSG_UNDELETE_CHARACTER = 0x36DF, + CMSG_UNDELETE_CHARACTER = 0x36DD, CMSG_UNLEARN_SKILL = 0x34F3, - CMSG_UNLEARN_SPECIALIZATION = 0x31A7, - CMSG_UNLOCK_VOID_STORAGE = 0x31A3, - CMSG_UPDATE_ACCOUNT_DATA = 0x3699, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32AC, - CMSG_UPDATE_CLIENT_SETTINGS = 0x3664, + CMSG_UNLEARN_SPECIALIZATION = 0x31A6, + CMSG_UNLOCK_VOID_STORAGE = 0x31A2, + CMSG_UPDATE_ACCOUNT_DATA = 0x3697, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32AB, + CMSG_UPDATE_CLIENT_SETTINGS = 0x3663, CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A40, - CMSG_UPDATE_RAID_TARGET = 0x3650, - CMSG_UPDATE_SPELL_VISUAL = 0x32AB, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F5, - CMSG_UPGRADE_GARRISON = 0x32CD, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E7, + CMSG_UPDATE_RAID_TARGET = 0x364F, + CMSG_UPDATE_SPELL_VISUAL = 0x32AA, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F3, + CMSG_UPGRADE_GARRISON = 0x32CC, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E1, CMSG_USED_FOLLOW = 0x3187, - CMSG_USE_CRITTER_ITEM = 0x324A, + CMSG_USE_CRITTER_ITEM = 0x3249, CMSG_USE_EQUIPMENT_SET = 0x3995, - CMSG_USE_ITEM = 0x32A6, - CMSG_USE_TOY = 0x32A8, - CMSG_VAS_CHECK_TRANSFER_OK = 0x370D, - CMSG_VAS_GET_QUEUE_MINUTES = 0x370C, - CMSG_VAS_GET_SERVICE_STATUS = 0x370B, + CMSG_USE_ITEM = 0x32A5, + CMSG_USE_TOY = 0x32A7, + CMSG_VAS_CHECK_TRANSFER_OK = 0x370B, + CMSG_VAS_GET_QUEUE_MINUTES = 0x370A, + CMSG_VAS_GET_SERVICE_STATUS = 0x3709, CMSG_VIOLENCE_LEVEL = 0x3185, - CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3711, - CMSG_VOICE_CHAT_LOGIN = 0x3710, - CMSG_VOID_STORAGE_TRANSFER = 0x31A5, + CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370F, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3710, + CMSG_VOICE_CHAT_LOGIN = 0x370E, + CMSG_VOID_STORAGE_TRANSFER = 0x31A4, CMSG_WARDEN3_DATA = 0x35EC, - CMSG_WHO = 0x3681, - CMSG_WHO_IS = 0x3680, + CMSG_WHO = 0x3680, + CMSG_WHO_IS = 0x367F, CMSG_WORLD_PORT_RESPONSE = 0x35F9, CMSG_WRAP_ITEM = 0x3994, @@ -838,84 +837,84 @@ enum OpcodeClient : uint16 enum OpcodeServer : uint16 { - SMSG_ABORT_NEW_WORLD = 0x259F, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x287D, - SMSG_ACCOUNT_DATA_TIMES = 0x270F, - SMSG_ACCOUNT_MOUNT_UPDATE = 0x25B1, - SMSG_ACCOUNT_TOY_UPDATE = 0x25B2, - SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B5, - SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B4, - SMSG_ACHIEVEMENT_DELETED = 0x26EC, - SMSG_ACHIEVEMENT_EARNED = 0x2640, + SMSG_ABORT_NEW_WORLD = 0x259A, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x286B, + SMSG_ACCOUNT_DATA_TIMES = 0x26FC, + SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AC, + SMSG_ACCOUNT_TOY_UPDATE = 0x25AD, + SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B0, + SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25AF, + SMSG_ACHIEVEMENT_DELETED = 0x26DB, + SMSG_ACHIEVEMENT_EARNED = 0x2638, SMSG_ACTIVATE_ESSENCE_FAILED = 0x3016, SMSG_ACTIVATE_SOULBIND_FAILED = 0x3018, - SMSG_ACTIVATE_TAXI_REPLY = 0x267B, + SMSG_ACTIVATE_TAXI_REPLY = 0x2673, SMSG_ACTIVE_GLYPHS = 0x2C54, - SMSG_ADDON_LIST_REQUEST = 0x263F, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263A, - SMSG_ADD_ITEM_PASSIVE = 0x25AD, - SMSG_ADD_LOSS_OF_CONTROL = 0x266D, - SMSG_ADD_RUNE_POWER = 0x26B5, - SMSG_ADJUST_SPLINE_DURATION = 0x25CF, - SMSG_ADVANCED_COMBAT_LOG = 0x2893, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x288D, - SMSG_ADVENTURE_MAP_OPEN_NPC = 0x27F7, - SMSG_AE_LOOT_TARGETS = 0x2615, - SMSG_AE_LOOT_TARGET_ACK = 0x2616, - SMSG_AI_REACTION = 0x26B2, - SMSG_ALLIED_RACE_DETAILS = 0x27FD, + SMSG_ADDON_LIST_REQUEST = 0x2637, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2632, + SMSG_ADD_ITEM_PASSIVE = 0x25A8, + SMSG_ADD_LOSS_OF_CONTROL = 0x2665, + SMSG_ADD_RUNE_POWER = 0x26AD, + SMSG_ADJUST_SPLINE_DURATION = 0x25CA, + SMSG_ADVANCED_COMBAT_LOG = 0x2881, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x287B, + SMSG_ADVENTURE_MAP_OPEN_NPC = 0x27E4, + SMSG_AE_LOOT_TARGETS = 0x260D, + SMSG_AE_LOOT_TARGET_ACK = 0x260E, + SMSG_AI_REACTION = 0x26AA, + SMSG_ALLIED_RACE_DETAILS = 0x27EA, SMSG_ALL_ACCOUNT_CRITERIA = 0x2571, SMSG_ALL_ACHIEVEMENT_DATA = 0x2570, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x286A, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2858, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2588, SMSG_AREA_POI_UPDATE_RESPONSE = 0x3011, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x2744, - SMSG_AREA_TRIGGER_DENIED = 0x2917, - SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x2914, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x271B, - SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x2913, - SMSG_AREA_TRIGGER_RE_PATH = 0x2911, - SMSG_AREA_TRIGGER_RE_SHAPE = 0x2916, - SMSG_AREA_TRIGGER_SET_VISUAL_ANIM = 0x2912, - SMSG_AREA_TRIGGER_UNATTACH = 0x2915, - SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262F, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2645, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x27A6, - SMSG_ARTIFACT_FORGE_ERROR = 0x27A4, - SMSG_ARTIFACT_RESPEC_PROMPT = 0x27A5, - SMSG_ARTIFACT_XP_GAIN = 0x27EF, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x2731, + SMSG_AREA_TRIGGER_DENIED = 0x2903, + SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x2900, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x2708, + SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FF, + SMSG_AREA_TRIGGER_RE_PATH = 0x28FD, + SMSG_AREA_TRIGGER_RE_SHAPE = 0x2902, + SMSG_AREA_TRIGGER_SET_VISUAL_ANIM = 0x28FE, + SMSG_AREA_TRIGGER_UNATTACH = 0x2901, + SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x2627, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x263D, + SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x2794, + SMSG_ARTIFACT_FORGE_ERROR = 0x2792, + SMSG_ARTIFACT_RESPEC_PROMPT = 0x2793, + SMSG_ARTIFACT_XP_GAIN = 0x27DC, SMSG_ATTACKER_STATE_UPDATE = 0x294C, SMSG_ATTACK_START = 0x2937, SMSG_ATTACK_STOP = 0x2938, SMSG_ATTACK_SWING_ERROR = 0x2946, SMSG_ATTACK_SWING_LANDED_LOG = 0x2947, - SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27D8, - SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27D7, - SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27D6, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26F6, - SMSG_AUCTION_COMMAND_RESULT = 0x26F3, - SMSG_AUCTION_FAVORITE_LIST = 0x2884, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x287B, - SMSG_AUCTION_HELLO_RESPONSE = 0x26F1, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x287A, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2877, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2878, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2879, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26F5, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26F7, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x26F2, - SMSG_AUCTION_WON_NOTIFICATION = 0x26F4, + SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27C5, + SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27C4, + SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27C3, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26E5, + SMSG_AUCTION_COMMAND_RESULT = 0x26E2, + SMSG_AUCTION_FAVORITE_LIST = 0x2872, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x2869, + SMSG_AUCTION_HELLO_RESPONSE = 0x26E0, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2868, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2865, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2866, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2867, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26E4, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26E6, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x26E1, + SMSG_AUCTION_WON_NOTIFICATION = 0x26E3, SMSG_AURA_POINTS_DEPLETED = 0x2C23, SMSG_AURA_UPDATE = 0x2C22, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_FAILED = 0x256C, SMSG_AUTH_RESPONSE = 0x256D, - SMSG_AVAILABLE_HOTFIXES = 0x2595, - SMSG_AZERITE_RESPEC_NPC = 0x27FA, + SMSG_AVAILABLE_HOTFIXES = 0x290F, + SMSG_AZERITE_RESPEC_NPC = 0x27E7, SMSG_BAG_CLEANUP_FINISHED = 0x2DA7, - SMSG_BARBER_SHOP_RESULT = 0x26BB, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x285B, + SMSG_BARBER_SHOP_RESULT = 0x26B2, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x2849, SMSG_BATTLEFIELD_LIST = 0x2927, SMSG_BATTLEFIELD_PORT_DENIED = 0x292D, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2923, @@ -930,114 +929,111 @@ enum OpcodeServer : uint16 SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928, SMSG_BATTLEGROUND_POINTS = 0x2948, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x278D, - SMSG_BATTLENET_CHALLENGE_START = 0x278C, - SMSG_BATTLENET_NOTIFICATION = 0x2808, - SMSG_BATTLENET_RESPONSE = 0x2807, - SMSG_BATTLE_NET_CONNECTION_STATUS = 0x2809, - SMSG_BATTLE_PAY_ACK_FAILED = 0x2787, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x277C, - SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x277D, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2786, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x277A, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2779, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2778, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2776, - SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2777, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x2774, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2775, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x277B, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2785, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x2825, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2783, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2782, - SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2819, - SMSG_BATTLE_PAY_VAS_GUILD_FOLLOW_INFO = 0x29E7, - SMSG_BATTLE_PAY_VAS_GUILD_MASTER_LIST = 0x29E6, - SMSG_BATTLE_PETS_HEALED = 0x25F0, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2676, - SMSG_BATTLE_PET_DELETED = 0x25ED, - SMSG_BATTLE_PET_ERROR = 0x2635, - SMSG_BATTLE_PET_JOURNAL = 0x25EC, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25EA, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25EB, - SMSG_BATTLE_PET_LICENSE_CHANGED = 0x25F1, - SMSG_BATTLE_PET_RESTORED = 0x25EF, - SMSG_BATTLE_PET_REVOKED = 0x25EE, - SMSG_BATTLE_PET_SET_MAX_PETS = 0x25E8, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E7, - SMSG_BATTLE_PET_UPDATES = 0x25E6, - SMSG_BINDER_CONFIRM = 0x2700, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x277B, + SMSG_BATTLENET_CHALLENGE_START = 0x277A, + SMSG_BATTLENET_NOTIFICATION = 0x27F5, + SMSG_BATTLENET_RESPONSE = 0x27F4, + SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27F6, + SMSG_BATTLE_PAY_ACK_FAILED = 0x2775, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x276A, + SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x276B, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2774, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2768, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2767, + SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2765, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2766, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2764, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x2762, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2763, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2769, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2773, + SMSG_BATTLE_PAY_START_CHECKOUT = 0x2811, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2771, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2770, + SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2805, + SMSG_BATTLE_PETS_HEALED = 0x25EA, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x266E, + SMSG_BATTLE_PET_DELETED = 0x25E7, + SMSG_BATTLE_PET_ERROR = 0x262D, + SMSG_BATTLE_PET_JOURNAL = 0x25E6, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25E4, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25E5, + SMSG_BATTLE_PET_LICENSE_CHANGED = 0x25EB, + SMSG_BATTLE_PET_RESTORED = 0x25E9, + SMSG_BATTLE_PET_REVOKED = 0x25E8, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E2, + SMSG_BATTLE_PET_UPDATES = 0x25E1, + SMSG_BINDER_CONFIRM = 0x26EF, SMSG_BIND_POINT_UPDATE = 0x257D, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2625, - SMSG_BLACK_MARKET_OPEN_RESULT = 0x2623, - SMSG_BLACK_MARKET_OUTBID = 0x2626, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2624, - SMSG_BLACK_MARKET_WON = 0x2627, - SMSG_BONUS_ROLL_EMPTY = 0x2642, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x261D, + SMSG_BLACK_MARKET_OPEN_RESULT = 0x261B, + SMSG_BLACK_MARKET_OUTBID = 0x261E, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x261C, + SMSG_BLACK_MARKET_WON = 0x261F, + SMSG_BONUS_ROLL_EMPTY = 0x263A, SMSG_BOSS_KILL = 0x294B, SMSG_BREAK_TARGET = 0x2936, SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, - SMSG_BROADCAST_SUMMON_CAST = 0x285D, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x285E, - SMSG_BUY_FAILED = 0x26C4, - SMSG_BUY_SUCCEEDED = 0x26C3, - SMSG_CACHE_INFO = 0x2709, - SMSG_CACHE_VERSION = 0x2708, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x269B, - SMSG_CALENDAR_COMMAND_RESULT = 0x269C, - SMSG_CALENDAR_COMMUNITY_INVITE = 0x268B, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2693, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2694, - SMSG_CALENDAR_INVITE_ADDED = 0x268C, - SMSG_CALENDAR_INVITE_ALERT = 0x2690, - SMSG_CALENDAR_INVITE_NOTES = 0x2695, - SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2696, - SMSG_CALENDAR_INVITE_REMOVED = 0x268D, - SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2692, - SMSG_CALENDAR_INVITE_STATUS = 0x268E, - SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2691, - SMSG_CALENDAR_MODERATOR_STATUS = 0x268F, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2697, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2698, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2699, - SMSG_CALENDAR_SEND_CALENDAR = 0x2689, - SMSG_CALENDAR_SEND_EVENT = 0x268A, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x269A, - SMSG_CAMERA_EFFECT = 0x272A, - SMSG_CANCEL_AUTO_REPEAT = 0x26E2, + SMSG_BROADCAST_SUMMON_CAST = 0x284B, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x284C, + SMSG_BUY_FAILED = 0x26BB, + SMSG_BUY_SUCCEEDED = 0x26BA, + SMSG_CACHE_INFO = 0x291D, + SMSG_CACHE_VERSION = 0x291C, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x2693, + SMSG_CALENDAR_COMMAND_RESULT = 0x2694, + SMSG_CALENDAR_COMMUNITY_INVITE = 0x2683, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x268B, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x268C, + SMSG_CALENDAR_INVITE_ADDED = 0x2684, + SMSG_CALENDAR_INVITE_ALERT = 0x2688, + SMSG_CALENDAR_INVITE_NOTES = 0x268D, + SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x268E, + SMSG_CALENDAR_INVITE_REMOVED = 0x2685, + SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x268A, + SMSG_CALENDAR_INVITE_STATUS = 0x2686, + SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2689, + SMSG_CALENDAR_MODERATOR_STATUS = 0x2687, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x268F, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2690, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2691, + SMSG_CALENDAR_SEND_CALENDAR = 0x2681, + SMSG_CALENDAR_SEND_EVENT = 0x2682, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x2692, + SMSG_CAMERA_EFFECT = 0x2717, + SMSG_CANCEL_AUTO_REPEAT = 0x26D1, SMSG_CANCEL_COMBAT = 0x2945, SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46, - SMSG_CANCEL_SCENE = 0x2634, + SMSG_CANCEL_SCENE = 0x262C, SMSG_CANCEL_SPELL_VISUAL = 0x2C44, SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48, SMSG_CAN_DUEL_RESULT = 0x2941, - SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2818, + SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2804, SMSG_CAPTURE_POINT_REMOVED = 0x292A, SMSG_CAST_FAILED = 0x2C57, SMSG_CATEGORY_COOLDOWN = 0x2C16, - SMSG_CHALLENGE_MODE_COMPLETE = 0x2607, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260C, - SMSG_CHALLENGE_MODE_RESET = 0x2606, - SMSG_CHALLENGE_MODE_START = 0x2604, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2605, + SMSG_CHALLENGE_MODE_COMPLETE = 0x2601, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2605, + SMSG_CHALLENGE_MODE_RESET = 0x2600, + SMSG_CHALLENGE_MODE_START = 0x25FE, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x25FF, SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3005, - SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x280A, + SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x27F7, SMSG_CHANNEL_LIST = 0x2BC3, SMSG_CHANNEL_NOTIFY = 0x2BC0, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2, - SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27C0, - SMSG_CHARACTER_LOGIN_FAILED = 0x270A, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x278B, - SMSG_CHARACTER_RENAME_RESULT = 0x2766, - SMSG_CHARACTER_UPGRADE_ABORTED = 0x27BF, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27BE, - SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27C1, - SMSG_CHARACTER_UPGRADE_STARTED = 0x27BD, - SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26E6, - SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26E7, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27AA, + SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27AE, + SMSG_CHARACTER_LOGIN_FAILED = 0x26F7, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2779, + SMSG_CHARACTER_RENAME_RESULT = 0x2754, + SMSG_CHARACTER_UPGRADE_ABORTED = 0x27AD, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27AC, + SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27AF, + SMSG_CHARACTER_UPGRADE_STARTED = 0x27AB, + SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26D5, + SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26D6, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x2798, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_DOWN = 0x2BBD, @@ -1054,88 +1050,89 @@ enum OpcodeServer : uint16 SMSG_CHECK_ABANDON_NPE = 0x3019, SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2584, SMSG_CHECK_WARGAME_ENTRY = 0x2592, - SMSG_CHROMIE_TIME_OPEN_NPC = 0x27FF, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2887, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x286E, + SMSG_CHROMIE_TIME_OPEN_NPC = 0x27EC, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2875, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x285C, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27, - SMSG_CLEAR_BOSS_EMOTES = 0x25BC, - SMSG_CLEAR_COOLDOWN = 0x26B7, + SMSG_CLEAR_BOSS_EMOTES = 0x25B7, + SMSG_CLEAR_COOLDOWN = 0x26AF, SMSG_CLEAR_COOLDOWNS = 0x2C26, - SMSG_CLEAR_LOSS_OF_CONTROL = 0x266F, + SMSG_CLEAR_LOSS_OF_CONTROL = 0x2667, SMSG_CLEAR_RESURRECT = 0x257F, SMSG_CLEAR_SPELL_CHARGES = 0x2C28, SMSG_CLEAR_TARGET = 0x2942, SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1, - SMSG_CLOSE_ARTIFACT_FORGE = 0x27A3, - SMSG_CLOSE_HEART_FORGE = 0x282B, - SMSG_CLOSE_ITEM_FORGE = 0x27A1, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2866, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2869, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2867, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2864, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2868, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2865, - SMSG_COIN_REMOVED = 0x2614, + SMSG_CLOSE_ARTIFACT_FORGE = 0x2791, + SMSG_CLOSE_HEART_FORGE = 0x2817, + SMSG_CLOSE_ITEM_FORGE = 0x278F, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2854, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2857, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2855, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2852, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2856, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2853, + SMSG_COIN_REMOVED = 0x260C, SMSG_COMBAT_EVENT_FAILED = 0x2939, - SMSG_COMMENTATOR_MAP_INFO = 0x270C, - SMSG_COMMENTATOR_PLAYER_INFO = 0x270D, - SMSG_COMMENTATOR_STATE_CHANGED = 0x270B, - SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27D3, - SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27DF, - SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27D5, - SMSG_COMMERCE_TOKEN_UPDATE = 0x27D4, - SMSG_COMPLAINT_RESULT = 0x26A9, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x279C, - SMSG_CONFIRM_PARTY_INVITE = 0x2817, + SMSG_COMMENTATOR_MAP_INFO = 0x26F9, + SMSG_COMMENTATOR_PLAYER_INFO = 0x26FA, + SMSG_COMMENTATOR_STATE_CHANGED = 0x26F8, + SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27C0, + SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27CC, + SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27C2, + SMSG_COMMERCE_TOKEN_UPDATE = 0x27C1, + SMSG_COMPLAINT_RESULT = 0x26A1, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x278A, + SMSG_CONFIRM_PARTY_INVITE = 0x2803, SMSG_CONNECT_TO = 0x304D, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x2788, - SMSG_CONSOLE_WRITE = 0x2632, - SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27DB, - SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27DA, - SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27D9, - SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27DD, - SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27DE, - SMSG_CONTACT_LIST = 0x2789, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x281E, - SMSG_CONTROL_UPDATE = 0x2644, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x2890, - SMSG_COOLDOWN_CHEAT = 0x273D, - SMSG_COOLDOWN_EVENT = 0x26B6, - SMSG_CORPSE_LOCATION = 0x264B, - SMSG_CORPSE_RECLAIM_DELAY = 0x274E, - SMSG_CORPSE_TRANSPORT_QUERY = 0x2717, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x2776, + SMSG_CONSOLE_WRITE = 0x262A, + SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27C8, + SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27C7, + SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27C6, + SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27CA, + SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27CB, + SMSG_CONTACT_LIST = 0x2777, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x280A, + SMSG_CONTROL_UPDATE = 0x263C, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x287E, + SMSG_COOLDOWN_CHEAT = 0x272A, + SMSG_COOLDOWN_EVENT = 0x26AE, + SMSG_CORPSE_LOCATION = 0x2643, + SMSG_CORPSE_RECLAIM_DELAY = 0x273B, + SMSG_CORPSE_TRANSPORT_QUERY = 0x2704, SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3, - SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x2800, - SMSG_COVENANT_RENOWN_OPEN_NPC = 0x288F, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2891, - SMSG_CREATE_CHAR = 0x2704, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x279B, - SMSG_CRITERIA_DELETED = 0x26EB, - SMSG_CRITERIA_UPDATE = 0x26E5, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BF, - SMSG_CUSTOM_LOAD_SCREEN = 0x25CA, + SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27ED, + SMSG_COVENANT_RENOWN_OPEN_NPC = 0x287D, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x287F, + SMSG_CREATE_CHAR = 0x26F3, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x2789, + SMSG_CRITERIA_DELETED = 0x26DA, + SMSG_CRITERIA_UPDATE = 0x26D4, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26B6, + SMSG_CUSTOM_LOAD_SCREEN = 0x25C5, SMSG_DAILY_QUESTS_RESET = 0x2A80, - SMSG_DAMAGE_CALC_LOG = 0x27C8, - SMSG_DB_REPLY = 0x2594, - SMSG_DEATH_RELEASE_LOC = 0x26D8, - SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2651, + SMSG_DAMAGE_CALC_LOG = 0x27B5, + SMSG_DB_REPLY = 0x290E, + SMSG_DEATH_RELEASE_LOC = 0x26C7, + SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2649, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x2705, - SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2976, - SMSG_DESTROY_ARENA_UNIT = 0x2746, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26FC, + SMSG_DELETE_CHAR = 0x26F4, + SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980, + SMSG_DESTROY_ARENA_UNIT = 0x2733, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26EB, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258C, - SMSG_DISCONNECT_REASON = 0x27F1, - SMSG_DISENCHANT_CREDIT = 0x25AA, + SMSG_DISCONNECT_REASON = 0x27DE, + SMSG_DISENCHANT_CREDIT = 0x25A5, SMSG_DISMOUNT_RESULT = 0x257C, SMSG_DISPEL_FAILED = 0x2C30, - SMSG_DISPLAY_GAME_ERROR = 0x25A4, + SMSG_DISPLAY_GAME_ERROR = 0x259F, SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC, - SMSG_DISPLAY_PROMOTION = 0x2648, + SMSG_DISPLAY_PROMOTION = 0x2640, SMSG_DISPLAY_QUEST_POPUP = 0x2A9E, - SMSG_DISPLAY_TOAST = 0x2621, - SMSG_DISPLAY_WORLD_TEXT = 0x27F0, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25DD, + SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2883, + SMSG_DISPLAY_TOAST = 0x2619, + SMSG_DISPLAY_WORLD_TEXT = 0x27DD, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25D8, SMSG_DROP_NEW_CONNECTION = 0x304C, SMSG_DUEL_ARRANGED = 0x293B, SMSG_DUEL_COMPLETE = 0x293F, @@ -1144,147 +1141,150 @@ enum OpcodeServer : uint16 SMSG_DUEL_OUT_OF_BOUNDS = 0x293C, SMSG_DUEL_REQUESTED = 0x293A, SMSG_DUEL_WINNER = 0x2940, - SMSG_DURABILITY_DAMAGE_DEATH = 0x274A, - SMSG_EMOTE = 0x27C9, - SMSG_ENABLE_BARBER_SHOP = 0x26BA, - SMSG_ENCHANTMENT_LOG = 0x2718, - SMSG_ENCOUNTER_END = 0x2781, - SMSG_ENCOUNTER_START = 0x2780, - SMSG_END_LIGHTNING_STORM = 0x26A6, + SMSG_DURABILITY_DAMAGE_DEATH = 0x2737, + SMSG_EMOTE = 0x27B6, + SMSG_ENABLE_BARBER_SHOP = 0x26B1, + SMSG_ENCHANTMENT_LOG = 0x2705, + SMSG_ENCOUNTER_END = 0x276F, + SMSG_ENCOUNTER_START = 0x276E, + SMSG_END_LIGHTNING_STORM = 0x269E, SMSG_ENTER_ENCRYPTED_MODE = 0x3049, SMSG_ENUM_CHARACTERS_RESULT = 0x2583, - SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27F6, + SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27E3, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21, - SMSG_EQUIPMENT_SET_ID = 0x26AF, + SMSG_EQUIPMENT_SET_ID = 0x26A7, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x2763, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x288E, - SMSG_FACTION_BONUS_INFO = 0x2729, + SMSG_EXPLORATION_EXPERIENCE = 0x2750, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x287C, + SMSG_FACTION_BONUS_INFO = 0x2716, SMSG_FAILED_PLAYER_CONDITION = 0x2FFA, - SMSG_FAILED_QUEST_TURN_IN = 0x2814, - SMSG_FEATURE_SYSTEM_STATUS = 0x25C0, - SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25C1, - SMSG_FEIGN_DEATH_RESISTED = 0x2749, - SMSG_FISH_ESCAPED = 0x26CD, - SMSG_FISH_NOT_HOOKED = 0x26CC, + SMSG_FAILED_QUEST_TURN_IN = 0x2800, + SMSG_FEATURE_SYSTEM_STATUS = 0x25BB, + SMSG_FEATURE_SYSTEM_STATUS2 = 0x2884, + SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25BC, + SMSG_FEIGN_DEATH_RESISTED = 0x2736, + SMSG_FISH_ESCAPED = 0x26C4, + SMSG_FISH_NOT_HOOKED = 0x26C3, SMSG_FLIGHT_SPLINE_SYNC = 0x2E29, - SMSG_FORCED_DEATH_UPDATE = 0x26D9, - SMSG_FORCE_ANIM = 0x2755, - SMSG_FORCE_ANIMATIONS = 0x2756, - SMSG_FORCE_OBJECT_RELINK = 0x2647, - SMSG_FRIEND_STATUS = 0x278A, - SMSG_GAIN_MAW_POWER = 0x27E4, - SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C3, - SMSG_GAME_OBJECT_BASE = 0x282C, - SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C4, - SMSG_GAME_OBJECT_DESPAWN = 0x25C5, + SMSG_FORCED_DEATH_UPDATE = 0x26C8, + SMSG_FORCE_ANIM = 0x2742, + SMSG_FORCE_ANIMATIONS = 0x2743, + SMSG_FORCE_OBJECT_RELINK = 0x263F, + SMSG_FRIEND_STATUS = 0x2778, + SMSG_GAIN_MAW_POWER = 0x27D1, + SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25BE, + SMSG_GAME_OBJECT_BASE = 0x2818, + SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25BF, + SMSG_GAME_OBJECT_DESPAWN = 0x25C0, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A, - SMSG_GAME_OBJECT_RESET_STATE = 0x2723, - SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x2806, - SMSG_GAME_OBJECT_UI_LINK = 0x271F, - SMSG_GAME_SPEED_SET = 0x267F, - SMSG_GAME_TIME_SET = 0x2711, - SMSG_GAME_TIME_UPDATE = 0x2710, - SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2978, - SMSG_GARRISON_ADD_EVENT = 0x299B, - SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x296A, - SMSG_GARRISON_ADD_MISSION_RESULT = 0x296E, - SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES = 0x29A0, - SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x2980, - SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT = 0x29A2, - SMSG_GARRISON_BUILDING_ACTIVATED = 0x295F, - SMSG_GARRISON_BUILDING_REMOVED = 0x2958, - SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x295A, - SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT = 0x2971, - SMSG_GARRISON_CLEAR_COLLECTION = 0x299A, - SMSG_GARRISON_CLEAR_EVENT_LIST = 0x299D, - SMSG_GARRISON_COLLECTION_REMOVE_ENTRY = 0x2999, - SMSG_GARRISON_COLLECTION_UPDATE_ENTRY = 0x2998, - SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT = 0x2990, - SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x2970, - SMSG_GARRISON_CREATE_RESULT = 0x2960, - SMSG_GARRISON_DELETE_MISSION_RESULT = 0x2977, - SMSG_GARRISON_DELETE_RESULT = 0x2989, - SMSG_GARRISON_FOLLOWER_ACTIVATIONS_SET = 0x297F, - SMSG_GARRISON_FOLLOWER_CHANGED_FLAGS = 0x297D, - SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL = 0x297B, - SMSG_GARRISON_FOLLOWER_CHANGED_QUALITY = 0x297C, - SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x297A, - SMSG_GARRISON_FOLLOWER_FATIGUE_CLEARED = 0x297E, - SMSG_GARRISON_GENERATE_FOLLOWERS_RESULT = 0x2987, - SMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO_RESULT = 0x2969, - SMSG_GARRISON_GET_RECALL_PORTAL_LAST_USED_TIME_RESULT = 0x2972, - SMSG_GARRISON_IS_UPGRADEABLE_RESPONSE = 0x2992, - SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x295B, - SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x2959, - SMSG_GARRISON_LIST_COMPLETED_MISSIONS_CHEAT_RESULT = 0x2993, - SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x296D, - SMSG_GARRISON_MAP_DATA_RESPONSE = 0x2995, - SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT = 0x2974, - SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE = 0x2996, - SMSG_GARRISON_MISSION_START_CONDITION_UPDATE = 0x2979, - SMSG_GARRISON_OPEN_ARCHITECT = 0x298A, - SMSG_GARRISON_OPEN_CRAFTER = 0x298B, - SMSG_GARRISON_OPEN_MISSION_NPC = 0x298C, - SMSG_GARRISON_OPEN_RECRUITMENT_NPC = 0x2984, - SMSG_GARRISON_OPEN_TALENT_NPC = 0x2985, - SMSG_GARRISON_PLACE_BUILDING_RESULT = 0x2957, - SMSG_GARRISON_PLOT_PLACED = 0x2955, - SMSG_GARRISON_PLOT_REMOVED = 0x2956, - SMSG_GARRISON_RECRUIT_FOLLOWER_RESULT = 0x2988, - SMSG_GARRISON_REMOTE_INFO = 0x295E, - SMSG_GARRISON_REMOVE_EVENT = 0x299C, - SMSG_GARRISON_REMOVE_FOLLOWER_ABILITY_RESULT = 0x2983, - SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT = 0x2981, - SMSG_GARRISON_REMOVE_FOLLOWER_RESULT = 0x296B, - SMSG_GARRISON_RENAME_FOLLOWER_RESULT = 0x2982, - SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT = 0x295D, - SMSG_GARRISON_RESEARCH_TALENT_RESULT = 0x2962, - SMSG_GARRISON_RESET_TALENT_TREE = 0x2967, - SMSG_GARRISON_RESET_TALENT_TREE_SOCKET_DATA = 0x2968, - SMSG_GARRISON_START_MISSION_RESULT = 0x296F, - SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE = 0x298F, - SMSG_GARRISON_SWITCH_TALENT_TREE_BRANCH = 0x299E, - SMSG_GARRISON_TALENT_COMPLETED = 0x2963, - SMSG_GARRISON_TALENT_REMOVED = 0x2964, - SMSG_GARRISON_TALENT_REMOVE_SOCKET_DATA = 0x2966, - SMSG_GARRISON_TALENT_UPDATE_SOCKET_DATA = 0x2965, - SMSG_GARRISON_TALENT_WORLD_QUEST_UNLOCKS_RESPONSE = 0x299F, - SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x295C, - SMSG_GARRISON_UPDATE_FOLLOWER = 0x296C, - SMSG_GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS = 0x2991, - SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x29A1, - SMSG_GARRISON_UPGRADE_RESULT = 0x2961, - SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x2973, + SMSG_GAME_OBJECT_RESET_STATE = 0x2710, + SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27F3, + SMSG_GAME_OBJECT_UI_LINK = 0x270C, + SMSG_GAME_SPEED_SET = 0x2677, + SMSG_GAME_TIME_SET = 0x26FE, + SMSG_GAME_TIME_UPDATE = 0x26FD, + SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982, + SMSG_GARRISON_ADD_EVENT = 0x29A5, + SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974, + SMSG_GARRISON_ADD_MISSION_RESULT = 0x2978, + SMSG_GARRISON_ADD_SPEC_GROUPS = 0x29A8, + SMSG_GARRISON_APPLY_TALENT_SOCKET_DATA_CHANGES = 0x29AC, + SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x298A, + SMSG_GARRISON_AUTO_TROOP_MIN_LEVEL_UPDATE_RESULT = 0x29AE, + SMSG_GARRISON_BUILDING_ACTIVATED = 0x2969, + SMSG_GARRISON_BUILDING_REMOVED = 0x2962, + SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x2964, + SMSG_GARRISON_CHANGE_MISSION_START_TIME_RESULT = 0x297B, + SMSG_GARRISON_CLEAR_COLLECTION = 0x29A4, + SMSG_GARRISON_CLEAR_EVENT_LIST = 0x29A7, + SMSG_GARRISON_CLEAR_SPEC_GROUPS = 0x29A9, + SMSG_GARRISON_COLLECTION_REMOVE_ENTRY = 0x29A3, + SMSG_GARRISON_COLLECTION_UPDATE_ENTRY = 0x29A2, + SMSG_GARRISON_COMPLETE_BUILDING_CONSTRUCTION_RESULT = 0x299A, + SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x297A, + SMSG_GARRISON_CREATE_RESULT = 0x296A, + SMSG_GARRISON_DELETE_MISSION_RESULT = 0x2981, + SMSG_GARRISON_DELETE_RESULT = 0x2993, + SMSG_GARRISON_FOLLOWER_ACTIVATIONS_SET = 0x2989, + SMSG_GARRISON_FOLLOWER_CHANGED_FLAGS = 0x2987, + SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL = 0x2985, + SMSG_GARRISON_FOLLOWER_CHANGED_QUALITY = 0x2986, + SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x2984, + SMSG_GARRISON_FOLLOWER_FATIGUE_CLEARED = 0x2988, + SMSG_GARRISON_GENERATE_FOLLOWERS_RESULT = 0x2991, + SMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO_RESULT = 0x2973, + SMSG_GARRISON_GET_RECALL_PORTAL_LAST_USED_TIME_RESULT = 0x297C, + SMSG_GARRISON_IS_UPGRADEABLE_RESPONSE = 0x299C, + SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x2965, + SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x2963, + SMSG_GARRISON_LIST_COMPLETED_MISSIONS_CHEAT_RESULT = 0x299D, + SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x2977, + SMSG_GARRISON_MAP_DATA_RESPONSE = 0x299F, + SMSG_GARRISON_MISSION_BONUS_ROLL_RESULT = 0x297E, + SMSG_GARRISON_MISSION_REQUEST_REWARD_INFO_RESPONSE = 0x29A0, + SMSG_GARRISON_MISSION_START_CONDITION_UPDATE = 0x2983, + SMSG_GARRISON_OPEN_ARCHITECT = 0x2994, + SMSG_GARRISON_OPEN_CRAFTER = 0x2995, + SMSG_GARRISON_OPEN_MISSION_NPC = 0x2996, + SMSG_GARRISON_OPEN_RECRUITMENT_NPC = 0x298E, + SMSG_GARRISON_OPEN_TALENT_NPC = 0x298F, + SMSG_GARRISON_PLACE_BUILDING_RESULT = 0x2961, + SMSG_GARRISON_PLOT_PLACED = 0x295F, + SMSG_GARRISON_PLOT_REMOVED = 0x2960, + SMSG_GARRISON_RECRUIT_FOLLOWER_RESULT = 0x2992, + SMSG_GARRISON_REMOTE_INFO = 0x2968, + SMSG_GARRISON_REMOVE_EVENT = 0x29A6, + SMSG_GARRISON_REMOVE_FOLLOWER_ABILITY_RESULT = 0x298D, + SMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING_RESULT = 0x298B, + SMSG_GARRISON_REMOVE_FOLLOWER_RESULT = 0x2975, + SMSG_GARRISON_RENAME_FOLLOWER_RESULT = 0x298C, + SMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA_RESULT = 0x2967, + SMSG_GARRISON_RESEARCH_TALENT_RESULT = 0x296C, + SMSG_GARRISON_RESET_TALENT_TREE = 0x2971, + SMSG_GARRISON_RESET_TALENT_TREE_SOCKET_DATA = 0x2972, + SMSG_GARRISON_START_MISSION_RESULT = 0x2979, + SMSG_GARRISON_SWAP_BUILDINGS_RESPONSE = 0x2999, + SMSG_GARRISON_SWITCH_TALENT_TREE_BRANCH = 0x29AA, + SMSG_GARRISON_TALENT_COMPLETED = 0x296D, + SMSG_GARRISON_TALENT_REMOVED = 0x296E, + SMSG_GARRISON_TALENT_REMOVE_SOCKET_DATA = 0x2970, + SMSG_GARRISON_TALENT_UPDATE_SOCKET_DATA = 0x296F, + SMSG_GARRISON_TALENT_WORLD_QUEST_UNLOCKS_RESPONSE = 0x29AB, + SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x2966, + SMSG_GARRISON_UPDATE_FOLLOWER = 0x2976, + SMSG_GARRISON_UPDATE_GARRISON_MONUMENT_SELECTIONS = 0x299B, + SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x29AD, + SMSG_GARRISON_UPGRADE_RESULT = 0x296B, + SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2585, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x281F, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2764, - SMSG_GET_GARRISON_INFO_RESULT = 0x2954, - SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x279E, - SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27DC, - SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27C5, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x279D, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2799, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x27C4, - SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27F2, - SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27F3, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x280B, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2752, + SMSG_GET_GARRISON_INFO_RESULT = 0x295E, + SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x278C, + SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27C9, + SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27B3, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x278B, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2787, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x27B2, + SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27DF, + SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E0, SMSG_GM_PLAYER_INFO = 0x3006, SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB, - SMSG_GM_TICKET_CASE_STATUS = 0x26A1, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x26A0, - SMSG_GOD_MODE = 0x26FF, + SMSG_GM_TICKET_CASE_STATUS = 0x2699, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x2698, + SMSG_GOD_MODE = 0x26EE, SMSG_GOSSIP_COMPLETE = 0x2A97, SMSG_GOSSIP_MESSAGE = 0x2A98, - SMSG_GOSSIP_POI = 0x2796, + SMSG_GOSSIP_POI = 0x2784, SMSG_GOSSIP_QUEST_UPDATE = 0x2A99, SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6, SMSG_GROUP_ACTION_THROTTLED = 0x2590, - SMSG_GROUP_AUTO_KICK = 0x2794, - SMSG_GROUP_DECLINE = 0x2791, - SMSG_GROUP_DESTROYED = 0x2793, - SMSG_GROUP_NEW_LEADER = 0x262A, - SMSG_GROUP_UNINVITE = 0x2792, + SMSG_GROUP_AUTO_KICK = 0x2782, + SMSG_GROUP_DECLINE = 0x277F, + SMSG_GROUP_DESTROYED = 0x2781, + SMSG_GROUP_NEW_LEADER = 0x2622, + SMSG_GROUP_UNINVITE = 0x2780, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1338,59 +1338,59 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26D0, - SMSG_HIGHEST_THREAT_UPDATE = 0x26DE, - SMSG_HOTFIX_CONNECT = 0x2597, - SMSG_HOTFIX_MESSAGE = 0x2596, - SMSG_INITIALIZE_FACTIONS = 0x2728, + SMSG_HEALTH_UPDATE = 0x26C5, + SMSG_HIGHEST_THREAT_UPDATE = 0x26CD, + SMSG_HOTFIX_CONNECT = 0x2911, + SMSG_HOTFIX_MESSAGE = 0x2910, + SMSG_INITIALIZE_FACTIONS = 0x2715, SMSG_INITIAL_SETUP = 0x2580, - SMSG_INIT_WORLD_STATES = 0x274B, - SMSG_INSPECT_RESULT = 0x262E, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27B0, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27AF, - SMSG_INSTANCE_ENCOUNTER_END = 0x27B8, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27AE, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27BA, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B9, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27B3, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27B2, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B7, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27BB, - SMSG_INSTANCE_ENCOUNTER_START = 0x27B4, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27B1, - SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27B6, - SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27B5, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26FD, - SMSG_INSTANCE_INFO = 0x2631, - SMSG_INSTANCE_RESET = 0x2684, - SMSG_INSTANCE_RESET_FAILED = 0x2685, - SMSG_INSTANCE_SAVE_CREATED = 0x277F, + SMSG_INIT_WORLD_STATES = 0x2738, + SMSG_INSPECT_RESULT = 0x2626, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x279E, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x279D, + SMSG_INSTANCE_ENCOUNTER_END = 0x27A6, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x279C, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27A8, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27A7, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27A1, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27A0, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27A5, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27A9, + SMSG_INSTANCE_ENCOUNTER_START = 0x27A2, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x279F, + SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27A4, + SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27A3, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26EC, + SMSG_INSTANCE_INFO = 0x2629, + SMSG_INSTANCE_RESET = 0x267C, + SMSG_INSTANCE_RESET_FAILED = 0x267D, + SMSG_INSTANCE_SAVE_CREATED = 0x276D, SMSG_INTERRUPT_POWER_REGEN = 0x2C59, - SMSG_INVALIDATE_PAGE_TEXT = 0x26D4, + SMSG_INVALIDATE_PAGE_TEXT = 0x2918, SMSG_INVALIDATE_PLAYER = 0x2FFF, - SMSG_INVALID_PROMOTION_CODE = 0x2757, + SMSG_INVALID_PROMOTION_CODE = 0x2744, SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5, - SMSG_INVENTORY_FIXUP_COMPLETE = 0x2816, - SMSG_INVENTORY_FULL_OVERFLOW = 0x2827, - SMSG_ISLANDS_MISSION_NPC = 0x27FC, - SMSG_ISLAND_AZERITE_GAIN = 0x2760, - SMSG_ISLAND_COMPLETE = 0x2761, + SMSG_INVENTORY_FIXUP_COMPLETE = 0x2802, + SMSG_INVENTORY_FULL_OVERFLOW = 0x2813, + SMSG_ISLANDS_MISSION_NPC = 0x27E9, + SMSG_ISLAND_AZERITE_GAIN = 0x274D, + SMSG_ISLAND_COMPLETE = 0x274E, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84, - SMSG_ITEM_CHANGED = 0x26EE, - SMSG_ITEM_COOLDOWN = 0x27C7, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2759, - SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25A3, - SMSG_ITEM_INTERACTION_COMPLETE = 0x2886, - SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25A1, - SMSG_ITEM_PUSH_RESULT = 0x2620, - SMSG_ITEM_TIME_UPDATE = 0x2758, - SMSG_KICK_REASON = 0x2687, + SMSG_ITEM_CHANGED = 0x26DD, + SMSG_ITEM_COOLDOWN = 0x27B4, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2746, + SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259E, + SMSG_ITEM_INTERACTION_COMPLETE = 0x2874, + SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259C, + SMSG_ITEM_PUSH_RESULT = 0x2618, + SMSG_ITEM_TIME_UPDATE = 0x2745, + SMSG_KICK_REASON = 0x267F, SMSG_LEARNED_SPELLS = 0x2C4D, - SMSG_LEARN_PVP_TALENT_FAILED = 0x25D1, - SMSG_LEARN_TALENT_FAILED = 0x25D0, - SMSG_LEGACY_LOOT_RULES = 0x282D, - SMSG_LEVEL_LINKING_RESULT = 0x286C, - SMSG_LEVEL_UP_INFO = 0x26ED, + SMSG_LEARN_PVP_TALENT_FAILED = 0x25CC, + SMSG_LEARN_TALENT_FAILED = 0x25CB, + SMSG_LEGACY_LOOT_RULES = 0x2819, + SMSG_LEVEL_LINKING_RESULT = 0x285A, + SMSG_LEVEL_UP_INFO = 0x26DC, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B, @@ -1425,44 +1425,44 @@ enum OpcodeServer : uint16 SMSG_LF_GUILD_COMMAND_RESULT = 0x29D0, SMSG_LF_GUILD_POST = 0x29CD, SMSG_LF_GUILD_RECRUITS = 0x29CF, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2771, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2770, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2765, - SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2772, - SMSG_LOAD_CUF_PROFILES = 0x25BD, - SMSG_LOAD_EQUIPMENT_SET = 0x2713, - SMSG_LOGIN_SET_TIME_SPEED = 0x2712, - SMSG_LOGIN_VERIFY_WORLD = 0x259E, - SMSG_LOGOUT_CANCEL_ACK = 0x2683, - SMSG_LOGOUT_COMPLETE = 0x2682, - SMSG_LOGOUT_RESPONSE = 0x2681, - SMSG_LOG_XP_GAIN = 0x26E9, - SMSG_LOOT_ALL_PASSED = 0x261E, - SMSG_LOOT_LIST = 0x2745, - SMSG_LOOT_MONEY_NOTIFY = 0x2619, - SMSG_LOOT_RELEASE = 0x2618, - SMSG_LOOT_RELEASE_ALL = 0x2617, - SMSG_LOOT_REMOVED = 0x2613, - SMSG_LOOT_RESPONSE = 0x2612, - SMSG_LOOT_ROLL = 0x261B, - SMSG_LOOT_ROLLS_COMPLETE = 0x261D, - SMSG_LOOT_ROLL_WON = 0x261F, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x266C, - SMSG_MAIL_COMMAND_RESULT = 0x2638, - SMSG_MAIL_LIST_RESULT = 0x275A, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x275B, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x275F, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x275E, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2753, + SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2760, + SMSG_LOAD_CUF_PROFILES = 0x25B8, + SMSG_LOAD_EQUIPMENT_SET = 0x2700, + SMSG_LOGIN_SET_TIME_SPEED = 0x26FF, + SMSG_LOGIN_VERIFY_WORLD = 0x2599, + SMSG_LOGOUT_CANCEL_ACK = 0x267B, + SMSG_LOGOUT_COMPLETE = 0x267A, + SMSG_LOGOUT_RESPONSE = 0x2679, + SMSG_LOG_XP_GAIN = 0x26D8, + SMSG_LOOT_ALL_PASSED = 0x2616, + SMSG_LOOT_LIST = 0x2732, + SMSG_LOOT_MONEY_NOTIFY = 0x2611, + SMSG_LOOT_RELEASE = 0x2610, + SMSG_LOOT_RELEASE_ALL = 0x260F, + SMSG_LOOT_REMOVED = 0x260B, + SMSG_LOOT_RESPONSE = 0x260A, + SMSG_LOOT_ROLL = 0x2613, + SMSG_LOOT_ROLLS_COMPLETE = 0x2615, + SMSG_LOOT_ROLL_WON = 0x2617, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2664, + SMSG_MAIL_COMMAND_RESULT = 0x2630, + SMSG_MAIL_LIST_RESULT = 0x2747, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2748, SMSG_MAP_OBJECTIVES_INIT = 0x294A, - SMSG_MAP_OBJ_EVENTS = 0x25C6, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261C, + SMSG_MAP_OBJ_EVENTS = 0x25C1, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2614, SMSG_MESSAGE_BOX = 0x2576, - SMSG_MINIMAP_PING = 0x26CB, + SMSG_MINIMAP_PING = 0x26C2, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, - SMSG_MISSILE_CANCEL = 0x25C7, - SMSG_MODIFY_COOLDOWN = 0x2767, + SMSG_MISSILE_CANCEL = 0x25C2, + SMSG_MODIFY_COOLDOWN = 0x2755, SMSG_MOTD = 0x2BAF, SMSG_MOUNT_RESULT = 0x257B, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x285C, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x284A, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E13, SMSG_MOVE_DISABLE_COLLISION = 0x2E0F, SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x2DFD, @@ -1547,83 +1547,81 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_TELEPORT = 0x2DE1, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DDD, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DD8, - SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27E1, - SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27E0, - SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2609, - SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260B, - SMSG_MYTHIC_PLUS_NEW_SEASON_RECORD = 0x260F, - SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260E, - SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260A, - SMSG_MYTHIC_PLUS_WEEKLY_REWARD_RESPONSE = 0x2608, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25D8, - SMSG_NEW_TAXI_PATH = 0x267C, - SMSG_NEW_WORLD = 0x259D, + SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27CE, + SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27CD, + SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2602, + SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x2604, + SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x2607, + SMSG_MYTHIC_PLUS_SEASON_DATA = 0x2603, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25D3, + SMSG_NEW_TAXI_PATH = 0x2674, + SMSG_NEW_WORLD = 0x2598, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A8, - SMSG_NOTIFY_MONEY = 0x25A0, - SMSG_NOTIFY_RECEIVED_MAIL = 0x2639, - SMSG_OFFER_PETITION_ERROR = 0x26B3, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26EA, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A0, + SMSG_NOTIFY_MONEY = 0x259B, + SMSG_NOTIFY_RECEIVED_MAIL = 0x2631, + SMSG_OFFER_PETITION_ERROR = 0x26AB, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26D9, SMSG_ON_MONSTER_MOVE = 0x2DD4, - SMSG_OPEN_ANIMA_DIVERSION_UI = 0x2720, - SMSG_OPEN_ARTIFACT_FORGE = 0x27A2, + SMSG_OPEN_ANIMA_DIVERSION_UI = 0x270D, + SMSG_OPEN_ARTIFACT_FORGE = 0x2790, SMSG_OPEN_CONTAINER = 0x2DA6, - SMSG_OPEN_HEART_FORGE = 0x282A, - SMSG_OPEN_ITEM_FORGE = 0x27A0, + SMSG_OPEN_HEART_FORGE = 0x2816, + SMSG_OPEN_ITEM_FORGE = 0x278E, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x2798, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x279A, - SMSG_OVERRIDE_LIGHT = 0x26B9, - SMSG_PAGE_TEXT = 0x271E, - SMSG_PARTY_COMMAND_RESULT = 0x2795, - SMSG_PARTY_INVITE = 0x25BE, - SMSG_PARTY_KILL_LOG = 0x275E, - SMSG_PARTY_MEMBER_FULL_STATE = 0x275D, - SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x275C, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x288C, - SMSG_PARTY_UPDATE = 0x25F2, - SMSG_PAUSE_MIRROR_TIMER = 0x2715, - SMSG_PENDING_RAID_LOCK = 0x26FB, - SMSG_PETITION_ALREADY_SIGNED = 0x25A6, + SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x2786, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2788, + SMSG_OVERRIDE_LIGHT = 0x26B0, + SMSG_PAGE_TEXT = 0x270B, + SMSG_PARTY_COMMAND_RESULT = 0x2783, + SMSG_PARTY_INVITE = 0x25B9, + SMSG_PARTY_KILL_LOG = 0x274B, + SMSG_PARTY_MEMBER_FULL_STATE = 0x274A, + SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2749, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x287A, + SMSG_PARTY_UPDATE = 0x25EC, + SMSG_PAUSE_MIRROR_TIMER = 0x2702, + SMSG_PENDING_RAID_LOCK = 0x26EA, + SMSG_PETITION_ALREADY_SIGNED = 0x25A1, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA, - SMSG_PETITION_SHOW_LIST = 0x26BC, - SMSG_PETITION_SHOW_SIGNATURES = 0x26BD, - SMSG_PETITION_SIGN_RESULTS = 0x2750, - SMSG_PET_ACTION_FEEDBACK = 0x274D, - SMSG_PET_ACTION_SOUND = 0x269E, - SMSG_PET_ADDED = 0x259A, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x25FF, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2673, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F8, - SMSG_PET_BATTLE_FINAL_ROUND = 0x25FD, - SMSG_PET_BATTLE_FINISHED = 0x25FE, - SMSG_PET_BATTLE_FIRST_ROUND = 0x25FA, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25F9, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2600, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F7, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2636, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2637, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FC, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F6, - SMSG_PET_BATTLE_ROUND_RESULT = 0x25FB, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x25E9, + SMSG_PETITION_SHOW_LIST = 0x26B3, + SMSG_PETITION_SHOW_SIGNATURES = 0x26B4, + SMSG_PETITION_SIGN_RESULTS = 0x273D, + SMSG_PET_ACTION_FEEDBACK = 0x273A, + SMSG_PET_ACTION_SOUND = 0x2696, + SMSG_PET_ADDED = 0x2595, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x25F9, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x266B, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F2, + SMSG_PET_BATTLE_FINAL_ROUND = 0x25F7, + SMSG_PET_BATTLE_FINISHED = 0x25F8, + SMSG_PET_BATTLE_FIRST_ROUND = 0x25F4, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25F3, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x25FA, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F1, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x262E, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x262F, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25F6, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F0, + SMSG_PET_BATTLE_ROUND_RESULT = 0x25F5, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x25E3, SMSG_PET_CAST_FAILED = 0x2C58, SMSG_PET_CLEAR_SPELLS = 0x2C24, - SMSG_PET_DISMISS_SOUND = 0x269F, - SMSG_PET_GOD_MODE = 0x2679, - SMSG_PET_GUIDS = 0x2707, + SMSG_PET_DISMISS_SOUND = 0x2697, + SMSG_PET_GOD_MODE = 0x2671, + SMSG_PET_GUIDS = 0x26F6, SMSG_PET_LEARNED_SPELLS = 0x2C4F, SMSG_PET_MODE = 0x258B, - SMSG_PET_NAME_INVALID = 0x26C1, + SMSG_PET_NAME_INVALID = 0x26B8, SMSG_PET_NEWLY_TAMED = 0x2589, SMSG_PET_SLOT_UPDATED = 0x258A, SMSG_PET_SPELLS_MESSAGE = 0x2C25, - SMSG_PET_STABLE_LIST = 0x259B, - SMSG_PET_STABLE_RESULT = 0x259C, - SMSG_PET_TAME_FAILURE = 0x26B0, + SMSG_PET_STABLE_LIST = 0x2596, + SMSG_PET_STABLE_RESULT = 0x2597, + SMSG_PET_TAME_FAILURE = 0x26A8, SMSG_PET_UNLEARNED_SPELLS = 0x2C50, SMSG_PHASE_SHIFT_CHANGE = 0x2578, - SMSG_PLAYED_TIME = 0x26DA, + SMSG_PLAYED_TIME = 0x26C9, SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3015, SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3014, SMSG_PLAYER_BONUS_ROLL_FAILED = 0x3017, @@ -1634,27 +1632,28 @@ enum OpcodeServer : uint16 SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x300A, SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x300F, SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F9, + SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x301A, SMSG_PLAYER_SKINNED = 0x3007, SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x3008, SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300E, SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300D, - SMSG_PLAY_MUSIC = 0x276C, - SMSG_PLAY_OBJECT_SOUND = 0x276D, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2735, + SMSG_PLAY_MUSIC = 0x275A, + SMSG_PLAY_OBJECT_SOUND = 0x275B, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2722, SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47, - SMSG_PLAY_SCENE = 0x2633, - SMSG_PLAY_SOUND = 0x276B, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x276E, + SMSG_PLAY_SCENE = 0x262B, + SMSG_PLAY_SOUND = 0x2759, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x275C, SMSG_PLAY_SPELL_VISUAL = 0x2C45, SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49, - SMSG_PLAY_TIME_WARNING = 0x2701, + SMSG_PLAY_TIME_WARNING = 0x26F0, SMSG_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26D1, + SMSG_POWER_UPDATE = 0x26C6, SMSG_PRELOAD_CHILD_MAP = 0x2579, - SMSG_PREPOPULATE_NAME_CACHE = 0x285F, - SMSG_PRE_RESSURECT = 0x276A, - SMSG_PRINT_NOTIFICATION = 0x25C9, - SMSG_PROC_RESIST = 0x275F, + SMSG_PREPOPULATE_NAME_CACHE = 0x284D, + SMSG_PRE_RESSURECT = 0x2758, + SMSG_PRINT_NOTIFICATION = 0x25C4, + SMSG_PROC_RESIST = 0x274C, SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51, SMSG_PVP_CREDIT = 0x2944, SMSG_PVP_MATCH_COMPLETE = 0x294E, @@ -1662,20 +1661,22 @@ enum OpcodeServer : uint16 SMSG_PVP_MATCH_START = 0x294D, SMSG_PVP_MATCH_STATISTICS = 0x2931, SMSG_PVP_OPTIONS_ENABLED = 0x2933, - SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x26D6, - SMSG_QUERY_CREATURE_RESPONSE = 0x26CE, - SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x26CF, - SMSG_QUERY_GARRISON_PET_NAME_RESPONSE = 0x2994, + SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x291A, + SMSG_QUERY_CREATURE_RESPONSE = 0x2914, + SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2915, + SMSG_QUERY_GARRISON_PET_NAME_RESPONSE = 0x299E, + SMSG_QUERY_GUILD_FOLLOW_INFO_RESPONSE = 0x29E7, SMSG_QUERY_GUILD_INFO_RESPONSE = 0x29E5, - SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x27C6, - SMSG_QUERY_NPC_TEXT_RESPONSE = 0x26D2, - SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x26D3, - SMSG_QUERY_PETITION_RESPONSE = 0x26D7, - SMSG_QUERY_PET_NAME_RESPONSE = 0x26D5, + SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x291E, + SMSG_QUERY_NPC_TEXT_RESPONSE = 0x2916, + SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2917, + SMSG_QUERY_PETITION_RESPONSE = 0x291B, + SMSG_QUERY_PET_NAME_RESPONSE = 0x2919, SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3003, SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x3002, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A96, - SMSG_QUERY_TIME_RESPONSE = 0x26E8, + SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x29E6, + SMSG_QUERY_TIME_RESPONSE = 0x26D7, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F, SMSG_QUEST_FORCE_REMOVED = 0x2A9C, @@ -1689,139 +1690,139 @@ enum OpcodeServer : uint16 SMSG_QUEST_GIVER_STATUS = 0x2A9B, SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x2A91, SMSG_QUEST_LOG_FULL = 0x2A87, + SMSG_QUEST_NON_LOG_UPDATE_COMPLETE = 0x2A88, SMSG_QUEST_POI_QUERY_RESPONSE = 0x2A9D, SMSG_QUEST_POI_UPDATE_RESPONSE = 0x2A9F, SMSG_QUEST_PUSH_RESULT = 0x2A90, - SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2882, - SMSG_QUEST_SESSION_READY_CHECK = 0x2870, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2871, - SMSG_QUEST_SESSION_RESULT = 0x286F, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2870, + SMSG_QUEST_SESSION_READY_CHECK = 0x285E, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x285F, + SMSG_QUEST_SESSION_RESULT = 0x285D, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x2A8C, SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x2A8D, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x2A8E, SMSG_QUEST_UPDATE_COMPLETE = 0x2A89, - SMSG_QUEST_UPDATE_COMPLETE_BY_SPELL = 0x2A88, SMSG_QUEST_UPDATE_FAILED = 0x2A8A, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8B, - SMSG_QUEUE_SUMMARY_UPDATE = 0x2815, - SMSG_RAF_ACCOUNT_INFO = 0x286D, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x287E, - SMSG_RAID_DIFFICULTY_SET = 0x27AB, - SMSG_RAID_GROUP_ONLY = 0x27AD, + SMSG_QUEUE_SUMMARY_UPDATE = 0x2801, + SMSG_RAF_ACCOUNT_INFO = 0x285B, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x286C, + SMSG_RAID_DIFFICULTY_SET = 0x2799, + SMSG_RAID_GROUP_ONLY = 0x279B, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, - SMSG_RAID_MARKERS_CHANGED = 0x25A7, - SMSG_RANDOM_ROLL = 0x262D, + SMSG_RAID_MARKERS_CHANGED = 0x25A2, + SMSG_RANDOM_ROLL = 0x2625, SMSG_RATED_PVP_INFO = 0x2930, - SMSG_READY_CHECK_COMPLETED = 0x25F5, - SMSG_READY_CHECK_RESPONSE = 0x25F4, - SMSG_READY_CHECK_STARTED = 0x25F3, - SMSG_READ_ITEM_RESULT_FAILED = 0x27A7, - SMSG_READ_ITEM_RESULT_OK = 0x279F, - SMSG_REALM_LOOKUP_INFO = 0x27CC, - SMSG_REALM_QUERY_RESPONSE = 0x26B8, - SMSG_REATTACH_RESURRECT = 0x274F, - SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BE, - SMSG_REFRESH_COMPONENT = 0x264D, + SMSG_READY_CHECK_COMPLETED = 0x25EF, + SMSG_READY_CHECK_RESPONSE = 0x25EE, + SMSG_READY_CHECK_STARTED = 0x25ED, + SMSG_READ_ITEM_RESULT_FAILED = 0x2795, + SMSG_READ_ITEM_RESULT_OK = 0x278D, + SMSG_REALM_LOOKUP_INFO = 0x27B9, + SMSG_REALM_QUERY_RESPONSE = 0x2913, + SMSG_REATTACH_RESURRECT = 0x273C, + SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26B5, + SMSG_REFRESH_COMPONENT = 0x2645, SMSG_REFRESH_SPELL_HISTORY = 0x2C2C, - SMSG_REMOVE_ITEM_PASSIVE = 0x25AE, - SMSG_REMOVE_LOSS_OF_CONTROL = 0x266E, + SMSG_REMOVE_ITEM_PASSIVE = 0x25A9, + SMSG_REMOVE_LOSS_OF_CONTROL = 0x2666, SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C52, - SMSG_REPLACE_TROPHY_RESPONSE = 0x27C3, + SMSG_REPLACE_TROPHY_RESPONSE = 0x27B1, SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x2591, SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2934, SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2935, SMSG_RESEARCH_COMPLETE = 0x2587, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26B4, + SMSG_RESET_FAILED_NOTIFY = 0x26AC, SMSG_RESET_QUEST_POI = 0x2AA0, SMSG_RESET_RANGED_COMBAT_TIMER = 0x2943, SMSG_RESET_WEEKLY_CURRENCY = 0x2575, - SMSG_RESPEC_WIPE_CONFIRM = 0x2610, + SMSG_RESPEC_WIPE_CONFIRM = 0x2608, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572, - SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25BA, + SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B5, SMSG_RESUME_CAST = 0x2C3B, SMSG_RESUME_CAST_BAR = 0x2C3E, SMSG_RESUME_COMMS = 0x304B, - SMSG_RESUME_TOKEN = 0x25AC, + SMSG_RESUME_TOKEN = 0x25A7, SMSG_RESURRECT_REQUEST = 0x257E, SMSG_RESYNC_RUNES = 0x2C5F, - SMSG_RETURN_APPLICANT_LIST = 0x2863, - SMSG_RETURN_RECRUITING_CLUBS = 0x2862, + SMSG_RETURN_APPLICANT_LIST = 0x2851, + SMSG_RETURN_RECRUITING_CLUBS = 0x2850, SMSG_ROLE_CHANGED_INFORM = 0x258D, SMSG_ROLE_CHOSEN = 0x2A39, SMSG_ROLE_POLL_INFORM = 0x258E, - SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x2801, - SMSG_RUNE_REGEN_DEBUG = 0x25B7, - SMSG_SCENARIO_COMPLETED = 0x27EE, - SMSG_SCENARIO_POIS = 0x2630, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x2629, - SMSG_SCENARIO_SHOW_CRITERIA = 0x2804, - SMSG_SCENARIO_STATE = 0x2628, - SMSG_SCENARIO_UI_UPDATE = 0x2803, - SMSG_SCENARIO_VACATE = 0x27A8, - SMSG_SCENE_OBJECT_EVENT = 0x25DE, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E3, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E4, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25E0, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25DF, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E2, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E1, + SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27EE, + SMSG_RUNE_REGEN_DEBUG = 0x25B2, + SMSG_SCENARIO_COMPLETED = 0x27DB, + SMSG_SCENARIO_POIS = 0x2628, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x2621, + SMSG_SCENARIO_SHOW_CRITERIA = 0x27F1, + SMSG_SCENARIO_STATE = 0x2620, + SMSG_SCENARIO_UI_UPDATE = 0x27F0, + SMSG_SCENARIO_VACATE = 0x2796, + SMSG_SCENE_OBJECT_EVENT = 0x25D9, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25DE, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25DF, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25DB, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25DA, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25DD, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25DC, SMSG_SCRIPT_CAST = 0x2C56, - SMSG_SEASON_INFO = 0x25C2, - SMSG_SELL_RESPONSE = 0x26C2, - SMSG_SEND_ITEM_PASSIVES = 0x25AF, + SMSG_SEASON_INFO = 0x25BD, + SMSG_SELL_RESPONSE = 0x26B9, + SMSG_SEND_ITEM_PASSIVES = 0x25AA, SMSG_SEND_KNOWN_SPELLS = 0x2C2A, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262B, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262C, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x2623, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2624, SMSG_SEND_SPELL_CHARGES = 0x2C2D, SMSG_SEND_SPELL_HISTORY = 0x2C2B, SMSG_SEND_UNLEARN_SPELLS = 0x2C2E, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264A, - SMSG_SERVER_TIME = 0x2680, - SMSG_SERVER_TIME_OFFSET = 0x2719, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x2642, + SMSG_SERVER_TIME = 0x2678, + SMSG_SERVER_TIME_OFFSET = 0x2706, SMSG_SETUP_CURRENCY = 0x2573, SMSG_SETUP_RESEARCH_HISTORY = 0x2586, - SMSG_SET_AI_ANIM_KIT = 0x2734, - SMSG_SET_ALL_TASK_PROGRESS = 0x278F, - SMSG_SET_ANIM_TIER = 0x2738, - SMSG_SET_CHR_UPGRADE_TIER = 0x25DB, + SMSG_SET_AI_ANIM_KIT = 0x2721, + SMSG_SET_ALL_TASK_PROGRESS = 0x277D, + SMSG_SET_ANIM_TIER = 0x2725, + SMSG_SET_CHR_UPGRADE_TIER = 0x25D6, SMSG_SET_CURRENCY = 0x2574, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x26A2, - SMSG_SET_FACTION_AT_WAR = 0x2703, - SMSG_SET_FACTION_NOT_VISIBLE = 0x272F, - SMSG_SET_FACTION_STANDING = 0x2730, - SMSG_SET_FACTION_VISIBLE = 0x272E, + SMSG_SET_DUNGEON_DIFFICULTY = 0x269A, + SMSG_SET_FACTION_AT_WAR = 0x26F2, + SMSG_SET_FACTION_NOT_VISIBLE = 0x271C, + SMSG_SET_FACTION_STANDING = 0x271D, + SMSG_SET_FACTION_VISIBLE = 0x271B, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36, - SMSG_SET_FORCED_REACTIONS = 0x2722, - SMSG_SET_ITEM_PURCHASE_DATA = 0x25A2, - SMSG_SET_LOOT_METHOD_FAILED = 0x27D2, - SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25A5, - SMSG_SET_MELEE_ANIM_KIT = 0x2737, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x2736, + SMSG_SET_FORCED_REACTIONS = 0x270F, + SMSG_SET_ITEM_PURCHASE_DATA = 0x259D, + SMSG_SET_LOOT_METHOD_FAILED = 0x27BF, + SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25A0, + SMSG_SET_MELEE_ANIM_KIT = 0x2724, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x2723, SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37, - SMSG_SET_PET_SPECIALIZATION = 0x2622, + SMSG_SET_PET_SPECIALIZATION = 0x261A, SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3004, - SMSG_SET_PLAY_HOVER_ANIM = 0x25BB, - SMSG_SET_PROFICIENCY = 0x2739, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2876, - SMSG_SET_SHIPMENT_READY_RESPONSE = 0x298D, + SMSG_SET_PLAY_HOVER_ANIM = 0x25B6, + SMSG_SET_PROFICIENCY = 0x2726, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2864, + SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2997, SMSG_SET_SPELL_CHARGES = 0x2C29, - SMSG_SET_TASK_COMPLETE = 0x2790, - SMSG_SET_TIME_ZONE_INFORMATION = 0x2675, - SMSG_SET_VEHICLE_REC_ID = 0x26FA, - SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x298E, - SMSG_SHOW_BANK = 0x267D, - SMSG_SHOW_MAILBOX = 0x27A9, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D7, + SMSG_SET_TASK_COMPLETE = 0x277E, + SMSG_SET_TIME_ZONE_INFORMATION = 0x266D, + SMSG_SET_VEHICLE_REC_ID = 0x26E9, + SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2998, + SMSG_SHOW_BANK = 0x2675, + SMSG_SHOW_MAILBOX = 0x2797, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D2, SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95, - SMSG_SHOW_TAXI_NODES = 0x26CA, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2773, - SMSG_SOCKET_GEMS_FAILURE = 0x272C, - SMSG_SOCKET_GEMS_SUCCESS = 0x272B, - SMSG_SPECIAL_MOUNT_ANIM = 0x269D, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x271D, + SMSG_SHOW_TAXI_NODES = 0x26C1, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2761, + SMSG_SOCKET_GEMS_FAILURE = 0x2719, + SMSG_SOCKET_GEMS_SUCCESS = 0x2718, + SMSG_SPECIAL_MOUNT_ANIM = 0x2695, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x270A, SMSG_SPELL_ABSORB_LOG = 0x2C1F, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17, SMSG_SPELL_CHANNEL_START = 0x2C34, @@ -1846,92 +1847,93 @@ enum OpcodeServer : uint16 SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C1B, SMSG_SPELL_PREPARE = 0x2C38, SMSG_SPELL_START = 0x2C3A, - SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CB, - SMSG_SPIRIT_HEALER_CONFIRM = 0x271A, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2888, - SMSG_STAND_STATE_UPDATE = 0x2721, - SMSG_START_ELAPSED_TIMER = 0x2601, - SMSG_START_ELAPSED_TIMERS = 0x2603, - SMSG_START_LIGHTNING_STORM = 0x26A5, - SMSG_START_LOOT_ROLL = 0x261A, - SMSG_START_MIRROR_TIMER = 0x2714, - SMSG_START_TIMER = 0x25A9, - SMSG_STOP_ELAPSED_TIMER = 0x2602, - SMSG_STOP_MIRROR_TIMER = 0x2716, - SMSG_STOP_SPEAKERBOT_SOUND = 0x276F, - SMSG_STREAMING_MOVIES = 0x25A8, - SMSG_SUMMON_CANCEL = 0x26AE, + SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25C6, + SMSG_SPIRIT_HEALER_CONFIRM = 0x2707, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2876, + SMSG_STAND_STATE_UPDATE = 0x270E, + SMSG_START_ELAPSED_TIMER = 0x25FB, + SMSG_START_ELAPSED_TIMERS = 0x25FD, + SMSG_START_LIGHTNING_STORM = 0x269D, + SMSG_START_LOOT_ROLL = 0x2612, + SMSG_START_MIRROR_TIMER = 0x2701, + SMSG_START_TIMER = 0x25A4, + SMSG_STOP_ELAPSED_TIMER = 0x25FC, + SMSG_STOP_MIRROR_TIMER = 0x2703, + SMSG_STOP_SPEAKERBOT_SOUND = 0x275D, + SMSG_STREAMING_MOVIES = 0x25A3, + SMSG_SUMMON_CANCEL = 0x26A6, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258F, - SMSG_SUMMON_REQUEST = 0x2726, + SMSG_SUMMON_REQUEST = 0x2713, SMSG_SUPERCEDED_SPELLS = 0x2C4C, SMSG_SUSPEND_COMMS = 0x304A, - SMSG_SUSPEND_TOKEN = 0x25AB, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x2880, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x271C, - SMSG_TAXI_NODE_STATUS = 0x267A, - SMSG_TEXT_EMOTE = 0x2678, - SMSG_THREAT_CLEAR = 0x26E1, - SMSG_THREAT_REMOVE = 0x26E0, - SMSG_THREAT_UPDATE = 0x26DF, + SMSG_SUSPEND_TOKEN = 0x25A6, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x286E, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2709, + SMSG_TAXI_NODE_STATUS = 0x2672, + SMSG_TEXT_EMOTE = 0x2670, + SMSG_THREAT_CLEAR = 0x26D0, + SMSG_THREAT_REMOVE = 0x26CF, + SMSG_THREAT_UPDATE = 0x26CE, SMSG_TIME_ADJUSTMENT = 0x2DD3, SMSG_TIME_SYNC_REQUEST = 0x2DD2, - SMSG_TITLE_EARNED = 0x26DC, - SMSG_TITLE_LOST = 0x26DD, - SMSG_TOTEM_CREATED = 0x26C5, - SMSG_TOTEM_DURATION_CHANGED = 0x26C6, - SMSG_TOTEM_MOVED = 0x26C7, + SMSG_TITLE_EARNED = 0x26CB, + SMSG_TITLE_LOST = 0x26CC, + SMSG_TOTEM_CREATED = 0x26BC, + SMSG_TOTEM_DURATION_CHANGED = 0x26BD, + SMSG_TOTEM_MOVED = 0x26BE, SMSG_TRADE_STATUS = 0x2582, SMSG_TRADE_UPDATED = 0x2581, - SMSG_TRAINER_BUY_FAILED = 0x26E4, - SMSG_TRAINER_LIST = 0x26E3, - SMSG_TRANSFER_ABORTED = 0x2706, - SMSG_TRANSFER_PENDING = 0x25CC, - SMSG_TRANSMOGRIFY_NPC = 0x27F9, - SMSG_TREASURE_PICKER_RESPONSE = 0x280B, - SMSG_TRIGGER_CINEMATIC = 0x27CA, - SMSG_TRIGGER_MOVIE = 0x26C8, - SMSG_TURN_IN_PETITION_RESULT = 0x2752, - SMSG_TUTORIAL_FLAGS = 0x27BC, + SMSG_TRAINER_BUY_FAILED = 0x26D3, + SMSG_TRAINER_LIST = 0x26D2, + SMSG_TRANSFER_ABORTED = 0x26F5, + SMSG_TRANSFER_PENDING = 0x25C7, + SMSG_TRANSMOGRIFY_NPC = 0x27E6, + SMSG_TREASURE_PICKER_RESPONSE = 0x291F, + SMSG_TRIGGER_CINEMATIC = 0x27B7, + SMSG_TRIGGER_MOVIE = 0x26BF, + SMSG_TURN_IN_PETITION_RESULT = 0x273F, + SMSG_TUTORIAL_FLAGS = 0x27AA, SMSG_TWITTER_STATUS = 0x3043, - SMSG_UI_HEALING_RANGE_MODIFIED = 0x2748, - SMSG_UI_ITEM_INTERACTION_NPC = 0x27FB, + SMSG_UI_HEALING_RANGE_MODIFIED = 0x2735, + SMSG_UI_ITEM_INTERACTION_NPC = 0x27E8, SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27CD, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27CE, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27BA, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27BB, SMSG_UNLEARNED_SPELLS = 0x2C4E, SMSG_UNLOAD_CHILD_MAP = 0x257A, - SMSG_UPDATE_ACCOUNT_DATA = 0x270E, - SMSG_UPDATE_ACTION_BUTTONS = 0x25DC, - SMSG_UPDATE_BNET_SESSION_KEY = 0x2826, + SMSG_UPDATE_ACCOUNT_DATA = 0x26FB, + SMSG_UPDATE_ACTION_BUTTONS = 0x25D7, + SMSG_UPDATE_BNET_SESSION_KEY = 0x2812, SMSG_UPDATE_CAPTURE_POINT = 0x2929, - SMSG_UPDATE_CELESTIAL_BODY = 0x2822, - SMSG_UPDATE_CHARACTER_FLAGS = 0x27C2, - SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2769, - SMSG_UPDATE_COOLDOWN = 0x2768, - SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x2975, - SMSG_UPDATE_EXPANSION_LEVEL = 0x2643, - SMSG_UPDATE_GAME_TIME_STATE = 0x2829, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A7, - SMSG_UPDATE_LAST_INSTANCE = 0x2686, - SMSG_UPDATE_OBJECT = 0x27CB, - SMSG_UPDATE_PRIMARY_SPEC = 0x25D4, - SMSG_UPDATE_TALENT_DATA = 0x25D3, - SMSG_UPDATE_TASK_PROGRESS = 0x278E, + SMSG_UPDATE_CELESTIAL_BODY = 0x280E, + SMSG_UPDATE_CHARACTER_FLAGS = 0x27B0, + SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2757, + SMSG_UPDATE_COOLDOWN = 0x2756, + SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F, + SMSG_UPDATE_EXPANSION_LEVEL = 0x263B, + SMSG_UPDATE_GAME_TIME_STATE = 0x2815, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x269F, + SMSG_UPDATE_LAST_INSTANCE = 0x267E, + SMSG_UPDATE_OBJECT = 0x27B8, + SMSG_UPDATE_PRIMARY_SPEC = 0x25CF, + SMSG_UPDATE_TALENT_DATA = 0x25CE, + SMSG_UPDATE_TASK_PROGRESS = 0x277C, SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19, - SMSG_UPDATE_WORLD_STATE = 0x274C, + SMSG_UPDATE_WORLD_STATE = 0x2739, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x2753, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x281D, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x281B, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x281A, - SMSG_VAS_PURCHASE_COMPLETE = 0x27F5, - SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27F4, - SMSG_VENDOR_INVENTORY = 0x25B9, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x2740, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2809, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2807, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2806, + SMSG_VAS_PURCHASE_COMPLETE = 0x27E2, + SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27E1, + SMSG_VENDOR_INVENTORY = 0x25B4, SMSG_VIGNETTE_UPDATE = 0x3009, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2821, - SMSG_VOICE_LOGIN_RESPONSE = 0x2820, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x280D, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2882, + SMSG_VOICE_LOGIN_RESPONSE = 0x280C, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x2DA4, SMSG_VOID_STORAGE_CONTENTS = 0x2DA1, SMSG_VOID_STORAGE_FAILED = 0x2DA0, @@ -1940,28 +1942,28 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256F, SMSG_WAIT_QUEUE_UPDATE = 0x256E, SMSG_WARDEN3_DATA = 0x2577, - SMSG_WARDEN3_DISABLED = 0x2824, - SMSG_WARDEN3_ENABLED = 0x2823, - SMSG_WARFRONT_COMPLETE = 0x2762, + SMSG_WARDEN3_DISABLED = 0x2810, + SMSG_WARDEN3_ENABLED = 0x280F, + SMSG_WARFRONT_COMPLETE = 0x274F, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2932, - SMSG_WEATHER = 0x26A4, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x288B, - SMSG_WEEKLY_REWARDS_RESULT = 0x2889, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x288A, + SMSG_WEATHER = 0x269C, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x2879, + SMSG_WEEKLY_REWARDS_RESULT = 0x2877, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2878, SMSG_WEEKLY_SPELL_USAGE = 0x2C18, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x26A3, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2828, - SMSG_WORLD_MAP_OPEN_NPC = 0x27F8, + SMSG_WHO_IS = 0x269B, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2814, + SMSG_WORLD_MAP_OPEN_NPC = 0x27E5, SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x3010, - SMSG_WORLD_SERVER_INFO = 0x25B0, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2881, - SMSG_XP_GAIN_ABORTED = 0x25C8, - SMSG_XP_GAIN_ENABLED = 0x27AC, + SMSG_WORLD_SERVER_INFO = 0x25AB, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x286F, + SMSG_XP_GAIN_ABORTED = 0x25C3, + SMSG_XP_GAIN_ENABLED = 0x279A, SMSG_ZONE_UNDER_ATTACK = 0x2BB5, // Opcodes that are not generated automatically - SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0x25B3, // no client handler + SMSG_ACCOUNT_HEIRLOOM_UPDATE = 0x25AE, // no client handler SMSG_COMPRESSED_PACKET = 0x3052, SMSG_MULTIPLE_PACKETS = 0x3051, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index ad8bba5a316..acf57a30be5 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1506,10 +1506,10 @@ class TC_GAME_API WorldSession void HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& chatMessage); void HandleChatMessageWhisperOpcode(WorldPackets::Chat::ChatMessageWhisper& chatMessageWhisper); void HandleChatMessageChannelOpcode(WorldPackets::Chat::ChatMessageChannel& chatMessageChannel); - void HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target = ""); + void HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target = "", Optional<ObjectGuid> channelGuid = {}); void HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMessage& chatAddonMessage); void HandleChatAddonMessageTargetedOpcode(WorldPackets::Chat::ChatAddonMessageTargeted& chatAddonMessageTargeted); - void HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, bool isLogged, std::string target = ""); + void HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, bool isLogged, std::string target = "", Optional<ObjectGuid> channelGuid = {}); void HandleChatMessageAFKOpcode(WorldPackets::Chat::ChatMessageAFK& chatMessageAFK); void HandleChatMessageDNDOpcode(WorldPackets::Chat::ChatMessageDND& chatMessageDND); void HandleChatMessageEmoteOpcode(WorldPackets::Chat::ChatMessageEmote& chatMessageEmote); |