diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-10-10 16:21:55 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-10-10 16:21:55 +0200 |
| commit | 53068a94e88991ae7196fb247df4b7ca2e47e554 (patch) | |
| tree | 42afe6e6160b0317f72ddec25562988145d7a5ff /src | |
| parent | a7d825c6deb2711392956abac2d494a8731f58c3 (diff) | |
Core: Updated to 11.2.5.63704
Diffstat (limited to 'src')
84 files changed, 6432 insertions, 1963 deletions
diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp index 14839b90287..8541fc4650e 100644 --- a/src/server/bnetserver/Server/Session.cpp +++ b/src/server/bnetserver/Server/Session.cpp @@ -266,14 +266,20 @@ uint32 Battlenet::Session::HandleGenerateWebCredentials(authentication::v1::Gene if (!_authed) return ERROR_DENIED; - if (request->program() != 0x576F57) + switch (request->program()) { - auto asPrintable = [](char c) { return std::isprint(c) ? c : ' '; }; + case 0x417070: // App + case 0x576F57: // WoW + break; + default: + { + auto asPrintable = [](char c) { return std::isprint(c) ? c : ' '; }; - TC_LOG_DEBUG("session", "[Battlenet::HandleGenerateWebCredentials] {} attempted to generate web cretentials with game other than WoW (using {}{}{}{})!", - GetClientInfo(), asPrintable((request->program() >> 24) & 0xFF), asPrintable((request->program() >> 16) & 0xFF), - asPrintable((request->program() >> 8) & 0xFF), asPrintable(request->program() & 0xFF)); - return ERROR_BAD_PROGRAM; + TC_LOG_DEBUG("session", "[Battlenet::HandleGenerateWebCredentials] {} attempted to generate web cretentials with game other than WoW (using {}{}{}{})!", + GetClientInfo(), asPrintable((request->program() >> 24) & 0xFF), asPrintable((request->program() >> 16) & 0xFF), + asPrintable((request->program() >> 8) & 0xFF), asPrintable(request->program() & 0xFF)); + return ERROR_BAD_PROGRAM; + } } LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BNET_EXISTING_AUTHENTICATION_BY_ID); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index e04b164acf3..e1cddf23076 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -51,13 +51,13 @@ void CharacterDatabaseConnection::DoPrepareStatements() "subject, deliver_time, expire_time, money, has_items FROM mail WHERE receiver = ? ", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_MAIL_LIST_ITEMS, "SELECT itemEntry,count FROM item_instance WHERE guid = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " - "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level AS cpLevel, c.equipmentCache, cb.guid AS cbGuid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " + "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level AS cpLevel, c.equipmentCache, cb.guid AS cbGuid, c.slot, c.createTime, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " "c.personalTabardEmblemStyle, c.personalTabardEmblemColor, c.personalTabardBorderStyle, c.personalTabardBorderColor, c.personalTabardBackgroundColor " "FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 " "WHERE c.account = ? AND c.deleteInfos_Name IS NULL", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " - "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level AS cpLevel, c.equipmentCache, cb.guid AS cbGuid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " + "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level AS cpLevel, c.equipmentCache, cb.guid AS cbGuid, c.slot, c.createTime, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " "c.personalTabardEmblemStyle, c.personalTabardEmblemColor, c.personalTabardBorderStyle, c.personalTabardBorderColor, c.personalTabardBackgroundColor, " "cd.genitive " "FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " @@ -67,13 +67,13 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_ENUM_CUSTOMIZATIONS, "SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM character_customizations cc " "LEFT JOIN characters c ON cc.guid = c.guid WHERE c.account = ? AND c.deleteInfos_Name IS NULL ORDER BY cc.guid, cc.chrCustomizationOptionID", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_UNDELETE_ENUM, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " - "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level AS cpLevel, c.equipmentCache, cb.guid AS cbGuid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " + "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level AS cpLevel, c.equipmentCache, cb.guid AS cbGuid, c.slot, c.createTime, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " "c.personalTabardEmblemStyle, c.personalTabardEmblemColor, c.personalTabardBorderStyle, c.personalTabardBorderColor, c.personalTabardBackgroundColor " "FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 " "WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_UNDELETE_ENUM_DECLINED_NAME, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " - "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level as cpLevel, c.equipmentCache, cb.guid AS cbGuid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " + "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level as cpLevel, c.equipmentCache, cb.guid AS cbGuid, c.slot, c.createTime, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " "c.personalTabardEmblemStyle, c.personalTabardEmblemColor, c.personalTabardBorderStyle, c.personalTabardBorderColor, c.personalTabardBackgroundColor, " "cd.genitive " "FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " @@ -677,8 +677,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_INS_CHAR_TRAIT_ENTRIES, "INSERT INTO character_trait_entry (guid, traitConfigId, traitNodeId, traitNodeEntryId, `rank`) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_TRAIT_ENTRIES, "DELETE FROM character_trait_entry WHERE guid = ? AND traitConfigId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_TRAIT_ENTRIES_BY_CHAR, "DELETE FROM character_trait_entry WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_CHAR_TRAIT_CONFIGS, "SELECT traitConfigId, type, chrSpecializationId, combatConfigFlags, localIdentifier, skillLineId, traitSystemId, `name` FROM character_trait_config WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CHAR_TRAIT_CONFIGS, "INSERT INTO character_trait_config (guid, traitConfigId, type, chrSpecializationId, combatConfigFlags, localIdentifier, skillLineId, traitSystemId, `name`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CHAR_TRAIT_CONFIGS, "SELECT traitConfigId, type, chrSpecializationId, combatConfigFlags, localIdentifier, skillLineId, traitSystemId, variationId, `name` FROM character_trait_config WHERE guid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHAR_TRAIT_CONFIGS, "INSERT INTO character_trait_config (guid, traitConfigId, type, chrSpecializationId, combatConfigFlags, localIdentifier, skillLineId, traitSystemId, variationId, `name`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_TRAIT_CONFIGS, "DELETE FROM character_trait_config WHERE guid = ? AND traitConfigId = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_TRAIT_CONFIGS_BY_CHAR, "DELETE FROM character_trait_config WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index d1842b927be..330300d2105 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -465,8 +465,9 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ContentTuning.db2 PrepareStatement(HOTFIX_SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, HealthItemLevelCurveID, DamageItemLevelCurveID, " - "HealthPrimaryStatCurveID, DamagePrimaryStatCurveID, MinLevel, MaxLevel, MinLevelType, MaxLevelType, TargetLevelDelta, TargetLevelMaxDelta, " - "TargetLevelMin, TargetLevelMax, MinItemLevel, QuestXpMultiplier FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "HealthPrimaryStatCurveID, DamagePrimaryStatCurveID, PrimaryStatScalingModPlayerDataElementCharacterID, " + "PrimaryStatScalingModPlayerDataElementCharacterMultiplier, MinLevel, MaxLevel, MinLevelType, MaxLevelType, TargetLevelDelta, " + "TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel, QuestXpMultiplier FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONTENT_TUNING, "SELECT MAX(ID) + 1 FROM content_tuning", CONNECTION_SYNCH); // ContentTuningXExpected.db2 @@ -902,8 +903,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ItemBonusTreeNode.db2 PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, ItemContext, ChildItemBonusTreeID, ChildItemBonusListID, ChildItemLevelSelectorID, " - "ChildItemBonusListGroupID, IblGroupPointsModSetID, MinMythicPlusLevel, MaxMythicPlusLevel, ParentItemBonusTreeID FROM item_bonus_tree_node" - " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "ChildItemBonusListGroupID, IblGroupPointsModSetID, MinMythicPlusLevel, MaxMythicPlusLevel, ItemCreationContextGroupID, Flags, " + "ParentItemBonusTreeID FROM item_bonus_tree_node WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT MAX(ID) + 1 FROM item_bonus_tree_node", CONNECTION_SYNCH); // ItemChildEquipment.db2 @@ -921,6 +922,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() "ItemContextPickerID FROM item_context_picker_entry WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CONTEXT_PICKER_ENTRY, "SELECT MAX(ID) + 1 FROM item_context_picker_entry", CONNECTION_SYNCH); + // ItemCreationContext.db2 + PrepareStatement(HOTFIX_SEL_ITEM_CREATION_CONTEXT, "SELECT ID, ItemContext, ItemCreationContextGroupID FROM item_creation_context" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CREATION_CONTEXT, "SELECT MAX(ID) + 1 FROM item_creation_context", CONNECTION_SYNCH); + // ItemCurrencyCost.db2 PrepareStatement(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT ID, ItemID FROM item_currency_cost WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT MAX(ID) + 1 FROM item_currency_cost", CONNECTION_SYNCH); @@ -1009,10 +1015,19 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_NAME_DESCRIPTION, "SELECT ID, Description_lang FROM item_name_description_locale" " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); + // ItemOffsetCurve.db2 + PrepareStatement(HOTFIX_SEL_ITEM_OFFSET_CURVE, "SELECT ID, CurveID, Offset FROM item_offset_curve WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_OFFSET_CURVE, "SELECT MAX(ID) + 1 FROM item_offset_curve", CONNECTION_SYNCH); + // ItemPriceBase.db2 PrepareStatement(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT ID, ItemLevel, Armor, Weapon FROM item_price_base WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_PRICE_BASE, "SELECT MAX(ID) + 1 FROM item_price_base", CONNECTION_SYNCH); + // ItemScalingConfig.db2 + PrepareStatement(HOTFIX_SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, Unknown1125 FROM item_scaling_config" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SCALING_CONFIG, "SELECT MAX(ID) + 1 FROM item_scaling_config", CONNECTION_SYNCH); + // ItemSearchName.db2 PrepareStatement(HOTFIX_SEL_ITEM_SEARCH_NAME, "SELECT ID, AllowableRace, Display, OverallQualityID, ExpansionID, MinFactionID, MinReputation, " "AllowableClass, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredAbility, ItemLevel, Flags1, Flags2, Flags3, Flags4, Flags5" @@ -1042,12 +1057,12 @@ void HotfixDatabaseConnection::DoPrepareStatements() "StatPercentEditor10, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, " "StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, Stackable, " "MaxCount, MinReputation, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, " - "Flags4, Flags5, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemNameDescriptionID, " - "RequiredTransmogHoliday, RequiredHoliday, GemProperties, SocketMatchEnchantmentId, TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, " - "ItemSet, LockID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ArtifactID, SpellWeight, " - "SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, PageMaterialID, Bonding, DamageDamageType, " - "ContainerSlots, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, OverallQualityID FROM item_sparse" - " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "Flags4, Flags5, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemLevelOffsetCurveID, " + "ItemLevelOffsetItemLevel, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, SocketMatchEnchantmentId, " + "TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, " + "ItemLevel, AllowableClass, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, " + "PageMaterialID, Bonding, DamageDamageType, ContainerSlots, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, " + "OverallQualityID FROM item_sparse WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT MAX(ID) + 1 FROM item_sparse", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Description_lang, Display3_lang, Display2_lang, Display1_lang, Display_lang" " FROM item_sparse_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH); @@ -1324,22 +1339,22 @@ void HotfixDatabaseConnection::DoPrepareStatements() " AND locale = ?", CONNECTION_SYNCH); // PlayerDataElementAccount.db2 - PrepareStatement(HOTFIX_SEL_PLAYER_DATA_ELEMENT_ACCOUNT, "SELECT ID, StorageIndex, Type FROM player_data_element_account" + PrepareStatement(HOTFIX_SEL_PLAYER_DATA_ELEMENT_ACCOUNT, "SELECT ID, StorageIndex, Type, Unknown1125 FROM player_data_element_account" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_PLAYER_DATA_ELEMENT_ACCOUNT, "SELECT MAX(ID) + 1 FROM player_data_element_account", CONNECTION_SYNCH); // PlayerDataElementCharacter.db2 - PrepareStatement(HOTFIX_SEL_PLAYER_DATA_ELEMENT_CHARACTER, "SELECT ID, StorageIndex, Type FROM player_data_element_character" + PrepareStatement(HOTFIX_SEL_PLAYER_DATA_ELEMENT_CHARACTER, "SELECT ID, StorageIndex, Type, Unknown1125 FROM player_data_element_character" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_PLAYER_DATA_ELEMENT_CHARACTER, "SELECT MAX(ID) + 1 FROM player_data_element_character", CONNECTION_SYNCH); // PlayerDataFlagAccount.db2 - PrepareStatement(HOTFIX_SEL_PLAYER_DATA_FLAG_ACCOUNT, "SELECT ID, StorageIndex, Unknown1107 FROM player_data_flag_account" + PrepareStatement(HOTFIX_SEL_PLAYER_DATA_FLAG_ACCOUNT, "SELECT ID, StorageIndex, Unknown1107, Unknown1125 FROM player_data_flag_account" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_PLAYER_DATA_FLAG_ACCOUNT, "SELECT MAX(ID) + 1 FROM player_data_flag_account", CONNECTION_SYNCH); // PlayerDataFlagCharacter.db2 - PrepareStatement(HOTFIX_SEL_PLAYER_DATA_FLAG_CHARACTER, "SELECT ID, StorageIndex, Unknown1107 FROM player_data_flag_character" + PrepareStatement(HOTFIX_SEL_PLAYER_DATA_FLAG_CHARACTER, "SELECT ID, StorageIndex, Unknown1107, Unknown1125 FROM player_data_flag_character" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_PLAYER_DATA_FLAG_CHARACTER, "SELECT MAX(ID) + 1 FROM player_data_flag_character", CONNECTION_SYNCH); @@ -1832,11 +1847,12 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRAIT_COND, "SELECT MAX(ID) + 1 FROM trait_cond", CONNECTION_SYNCH); // TraitCost.db2 - PrepareStatement(HOTFIX_SEL_TRAIT_COST, "SELECT InternalName, ID, Amount, TraitCurrencyID FROM trait_cost WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRAIT_COST, "SELECT InternalName, ID, Amount, TraitCurrencyID, CurveID FROM trait_cost WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRAIT_COST, "SELECT MAX(ID) + 1 FROM trait_cost", CONNECTION_SYNCH); // TraitCurrency.db2 - PrepareStatement(HOTFIX_SEL_TRAIT_CURRENCY, "SELECT ID, Type, CurrencyTypesID, Flags, Icon FROM trait_currency WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_TRAIT_CURRENCY, "SELECT ID, Type, CurrencyTypesID, Flags, Icon, PlayerDataElementAccountID, " + "PlayerDataElementCharacterID FROM trait_currency WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRAIT_CURRENCY, "SELECT MAX(ID) + 1 FROM trait_currency", CONNECTION_SYNCH); // TraitCurrencySource.db2 @@ -1924,6 +1940,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_LOCALE_STMT(HOTFIX_SEL_TRAIT_SUB_TREE, "SELECT ID, Name_lang, Description_lang FROM trait_sub_tree_locale WHERE (`VerifiedBuild` > 0) = ?" " AND locale = ?", CONNECTION_SYNCH); + // TraitSystem.db2 + PrepareStatement(HOTFIX_SEL_TRAIT_SYSTEM, "SELECT ID, Flags, WidgetSetID, TraitChangeSpell, ItemID, VariationType FROM trait_system" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PREPARE_MAX_ID_STMT(HOTFIX_SEL_TRAIT_SYSTEM, "SELECT MAX(ID) + 1 FROM trait_system", CONNECTION_SYNCH); + // TraitTree.db2 PrepareStatement(HOTFIX_SEL_TRAIT_TREE, "SELECT ID, TraitSystemID, Unused1000_1, FirstTraitNodeID, PlayerConditionID, Flags, Unused1000_2, " "Unused1000_3 FROM trait_tree WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); @@ -1990,7 +2011,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() // UiMapAssignment.db2 PrepareStatement(HOTFIX_SEL_UI_MAP_ASSIGNMENT, "SELECT UiMinX, UiMinY, UiMaxX, UiMaxY, Region1X, Region1Y, Region1Z, Region2X, Region2Y, " - "Region2Z, ID, UiMapID, OrderIndex, MapID, AreaID, WmoDoodadPlacementID, WmoGroupID FROM ui_map_assignment WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "Region2Z, ID, UiMapID, OrderIndex, MapID, AreaID, WmoDoodadPlacementID, WmoGroupID, Unknown1125 FROM ui_map_assignment" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_UI_MAP_ASSIGNMENT, "SELECT MAX(ID) + 1 FROM ui_map_assignment", CONNECTION_SYNCH); // UiMapLink.db2 diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h index 3ac94d32d7a..54feaec54ae 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.h +++ b/src/server/database/Database/Implementation/HotfixDatabase.h @@ -532,6 +532,9 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_ITEM_CONTEXT_PICKER_ENTRY, HOTFIX_SEL_ITEM_CONTEXT_PICKER_ENTRY_MAX_ID, + HOTFIX_SEL_ITEM_CREATION_CONTEXT, + HOTFIX_SEL_ITEM_CREATION_CONTEXT_MAX_ID, + HOTFIX_SEL_ITEM_CURRENCY_COST, HOTFIX_SEL_ITEM_CURRENCY_COST_MAX_ID, @@ -585,9 +588,15 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_ITEM_NAME_DESCRIPTION_MAX_ID, HOTFIX_SEL_ITEM_NAME_DESCRIPTION_LOCALE, + HOTFIX_SEL_ITEM_OFFSET_CURVE, + HOTFIX_SEL_ITEM_OFFSET_CURVE_MAX_ID, + HOTFIX_SEL_ITEM_PRICE_BASE, HOTFIX_SEL_ITEM_PRICE_BASE_MAX_ID, + HOTFIX_SEL_ITEM_SCALING_CONFIG, + HOTFIX_SEL_ITEM_SCALING_CONFIG_MAX_ID, + HOTFIX_SEL_ITEM_SEARCH_NAME, HOTFIX_SEL_ITEM_SEARCH_NAME_MAX_ID, HOTFIX_SEL_ITEM_SEARCH_NAME_LOCALE, @@ -1114,6 +1123,9 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_TRAIT_SUB_TREE_MAX_ID, HOTFIX_SEL_TRAIT_SUB_TREE_LOCALE, + HOTFIX_SEL_TRAIT_SYSTEM, + HOTFIX_SEL_TRAIT_SYSTEM_MAX_ID, + HOTFIX_SEL_TRAIT_TREE, HOTFIX_SEL_TRAIT_TREE_MAX_ID, diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 3d444c2948c..99d91824557 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -3874,21 +3874,14 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 } case ModifierTreeType::PlayerHasTraitNodeEntryInActiveConfig: // 340 { - auto hasTraitNodeEntry = [referencePlayer, reqValue]() + auto hasTraitNodeEntry = [referencePlayer, reqValue] { - for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs) - { - if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat) - { - if (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID - || !EnumFlag(TraitCombatConfigFlags(*traitConfig.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)) - continue; - } - - for (UF::TraitEntry const& traitEntry : traitConfig.Entries) + UF::TraitConfig const* config = referencePlayer->GetTraitConfig(referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID); + if (config && EnumFlag(TraitCombatConfigFlags(*config->CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)) + for (UF::TraitEntry const& traitEntry : config->Entries) if (traitEntry.TraitNodeEntryID == int32(reqValue)) return true; - } + return false; }(); if (!hasTraitNodeEntry) @@ -3899,19 +3892,12 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 { auto traitNodeEntryRank = [referencePlayer, secondaryAsset]() -> Optional<uint16> { - for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs) - { - if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat) - { - if (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID - || !EnumFlag(TraitCombatConfigFlags(*traitConfig.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)) - continue; - } - - for (UF::TraitEntry const& traitEntry : traitConfig.Entries) + UF::TraitConfig const* config = referencePlayer->GetTraitConfig(referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID); + if (config && EnumFlag(TraitCombatConfigFlags(*config->CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)) + for (UF::TraitEntry const& traitEntry : config->Entries) if (traitEntry.TraitNodeEntryID == int32(secondaryAsset)) return traitEntry.Rank; - } + return {}; }(); if (!traitNodeEntryRank || traitNodeEntryRank < int32(reqValue)) @@ -3943,18 +3929,18 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 break; case ModifierTreeType::PlayerHasAtLeastProfPathRanks: // 355 { - auto traitNodeEntryRankCount = [referencePlayer, secondaryAsset]() + uint32 traitNodeEntryRankCount = [referencePlayer, secondaryAsset] { uint32 ranks = 0; - for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs) + for (auto const& [_, traitConfig] : referencePlayer->m_activePlayerData->TraitConfigs) { - if (TraitConfigType(*traitConfig.Type) != TraitConfigType::Profession) + if (TraitConfigType(*traitConfig.value.Type) != TraitConfigType::Profession) continue; - if (*traitConfig.SkillLineID != int32(secondaryAsset)) + if (*traitConfig.value.SkillLineID != int32(secondaryAsset)) continue; - for (UF::TraitEntry const& traitEntry : traitConfig.Entries) + for (UF::TraitEntry const& traitEntry : traitConfig.value.Entries) if (sTraitNodeEntryStore.AssertEntry(traitEntry.TraitNodeEntryID)->GetNodeEntryType() == TraitNodeEntryType::ProfPath) ranks += traitEntry.Rank + traitEntry.GrantedRanks; } @@ -4025,7 +4011,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 } case ModifierTreeType::PlayerHasActiveTraitSubTree: // 385 { - int32 traitConfigWithSubtree = referencePlayer->m_activePlayerData->TraitConfigs.FindIndexIf([referencePlayer, reqValue](UF::TraitConfig const& traitConfig) + int32 const* traitConfigWithSubtree = referencePlayer->m_activePlayerData->TraitConfigs.FindIf([referencePlayer, reqValue](UF::TraitConfig const& traitConfig) { if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat && (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID @@ -4036,8 +4022,8 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 { return traitSubTree.TraitSubTreeID == int32(reqValue) && traitSubTree.Active; }) >= 0; - }); - if (traitConfigWithSubtree < 0) + }).first; + if (!traitConfigWithSubtree) return false; break; } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 89012688d26..99d55c535e2 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -3309,16 +3309,16 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio { auto getTraitNodeEntryRank = [player](int32 traitNodeEntryId) -> Optional<uint16> { - for (UF::TraitConfig const& traitConfig : player->m_activePlayerData->TraitConfigs) + for (auto const& [_, traitConfig] : player->m_activePlayerData->TraitConfigs) { - if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat) + if (TraitConfigType(*traitConfig.value.Type) == TraitConfigType::Combat) { - if (int32(*player->m_activePlayerData->ActiveCombatTraitConfigID) != *traitConfig.ID - || !EnumFlag(TraitCombatConfigFlags(*traitConfig.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)) + if (int32(*player->m_activePlayerData->ActiveCombatTraitConfigID) != *traitConfig.value.ID + || !EnumFlag(TraitCombatConfigFlags(*traitConfig.value.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)) continue; } - for (UF::TraitEntry const& traitEntry : traitConfig.Entries) + for (UF::TraitEntry const& traitEntry : traitConfig.value.Entries) if (traitEntry.TraitNodeEntryID == traitNodeEntryId) return traitEntry.Rank; } diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 65244d6ddf8..df2aa42cafd 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -182,7 +182,7 @@ struct AreaTableLoadInfo { .IsSigned = false, .Type = FT_BYTE, .Name = "FactionGroupMask" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "AmbientMultiplier" }, { .IsSigned = true, .Type = FT_INT, .Name = "MountFlags" }, - { .IsSigned = true, .Type = FT_SHORT, .Name = "PvpCombatWorldStateID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "PvpCombatWorldStateID" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "WildBattlePetLevelMin" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "WildBattlePetLevelMax" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "WindSettingsID" }, @@ -780,7 +780,7 @@ struct BroadcastTextLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "LanguageID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ConditionID" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "EmotesID" }, - { .IsSigned = false, .Type = FT_SHORT, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = false, .Type = FT_INT, .Name = "ChatBubbleDurationMs" }, { .IsSigned = true, .Type = FT_INT, .Name = "VoiceOverPriorityID" }, { .IsSigned = false, .Type = FT_INT, .Name = "SoundKitID1" }, @@ -1241,7 +1241,7 @@ struct ChrSpecializationLoadInfo { .IsSigned = true, .Type = FT_BYTE, .Name = "OrderIndex" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "PetTalentType" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "Role" }, - { .IsSigned = false, .Type = FT_INT, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = true, .Type = FT_INT, .Name = "SpellIconFileID" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "PrimaryStatPriority" }, { .IsSigned = true, .Type = FT_INT, .Name = "AnimReplacements" }, @@ -1319,7 +1319,7 @@ struct ConditionalContentTuningLoadInfo struct ContentTuningLoadInfo { - static constexpr DB2FieldMeta Fields[17] = + static constexpr DB2FieldMeta Fields[19] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, @@ -1328,6 +1328,8 @@ struct ContentTuningLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "DamageItemLevelCurveID" }, { .IsSigned = true, .Type = FT_INT, .Name = "HealthPrimaryStatCurveID" }, { .IsSigned = true, .Type = FT_INT, .Name = "DamagePrimaryStatCurveID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "PrimaryStatScalingModPlayerDataElementCharacterID" }, + { .IsSigned = false, .Type = FT_FLOAT, .Name = "PrimaryStatScalingModPlayerDataElementCharacterMultiplier" }, { .IsSigned = true, .Type = FT_INT, .Name = "MinLevel" }, { .IsSigned = true, .Type = FT_INT, .Name = "MaxLevel" }, { .IsSigned = true, .Type = FT_INT, .Name = "MinLevelType" }, @@ -1340,7 +1342,7 @@ struct ContentTuningLoadInfo { .IsSigned = false, .Type = FT_FLOAT, .Name = "QuestXpMultiplier" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 17, &ContentTuningMeta::Instance, HOTFIX_SEL_CONTENT_TUNING }; + static constexpr DB2LoadInfo Instance{ Fields, 19, &ContentTuningMeta::Instance, HOTFIX_SEL_CONTENT_TUNING }; }; struct ContentTuningXExpectedLoadInfo @@ -1656,7 +1658,7 @@ struct CurveLoadInfo { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "Type" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, }; static constexpr DB2LoadInfo Instance{ Fields, 3, &CurveMeta::Instance, HOTFIX_SEL_CURVE }; @@ -1672,7 +1674,7 @@ struct CurvePointLoadInfo { .IsSigned = false, .Type = FT_FLOAT, .Name = "PreSLSquishPosY" }, { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_INT, .Name = "CurveID" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "OrderIndex" }, + { .IsSigned = false, .Type = FT_INT, .Name = "OrderIndex" }, }; static constexpr DB2LoadInfo Instance{ Fields, 7, &CurvePointMeta::Instance, HOTFIX_SEL_CURVE_POINT }; @@ -2689,7 +2691,7 @@ struct ItemLoadInfo { .IsSigned = false, .Type = FT_BYTE, .Name = "SheatheType" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "SoundOverrideSubclassID" }, { .IsSigned = true, .Type = FT_INT, .Name = "IconFileDataID" }, - { .IsSigned = false, .Type = FT_BYTE, .Name = "ItemGroupSoundsID" }, + { .IsSigned = false, .Type = FT_INT, .Name = "ItemGroupSoundsID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ContentTuningID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ModifiedCraftingReagentItemID" }, { .IsSigned = true, .Type = FT_INT, .Name = "CraftingQualityID" }, @@ -2834,7 +2836,7 @@ struct ItemBonusTreeLoadInfo struct ItemBonusTreeNodeLoadInfo { - static constexpr DB2FieldMeta Fields[10] = + static constexpr DB2FieldMeta Fields[12] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "ItemContext" }, @@ -2845,10 +2847,12 @@ struct ItemBonusTreeNodeLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "IblGroupPointsModSetID" }, { .IsSigned = true, .Type = FT_INT, .Name = "MinMythicPlusLevel" }, { .IsSigned = true, .Type = FT_INT, .Name = "MaxMythicPlusLevel" }, + { .IsSigned = true, .Type = FT_INT, .Name = "ItemCreationContextGroupID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = false, .Type = FT_INT, .Name = "ParentItemBonusTreeID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 10, &ItemBonusTreeNodeMeta::Instance, HOTFIX_SEL_ITEM_BONUS_TREE_NODE }; + static constexpr DB2LoadInfo Instance{ Fields, 12, &ItemBonusTreeNodeMeta::Instance, HOTFIX_SEL_ITEM_BONUS_TREE_NODE }; }; struct ItemChildEquipmentLoadInfo @@ -2895,6 +2899,18 @@ struct ItemContextPickerEntryLoadInfo static constexpr DB2LoadInfo Instance{ Fields, 8, &ItemContextPickerEntryMeta::Instance, HOTFIX_SEL_ITEM_CONTEXT_PICKER_ENTRY }; }; +struct ItemCreationContextLoadInfo +{ + static constexpr DB2FieldMeta Fields[3] = + { + { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, + { .IsSigned = false, .Type = FT_BYTE, .Name = "ItemContext" }, + { .IsSigned = false, .Type = FT_INT, .Name = "ItemCreationContextGroupID" }, + }; + + static constexpr DB2LoadInfo Instance{ Fields, 3, &ItemCreationContextMeta::Instance, HOTFIX_SEL_ITEM_CREATION_CONTEXT }; +}; + struct ItemCurrencyCostLoadInfo { static constexpr DB2FieldMeta Fields[2] = @@ -3174,6 +3190,18 @@ struct ItemNameDescriptionLoadInfo static constexpr DB2LoadInfo Instance{ Fields, 3, &ItemNameDescriptionMeta::Instance, HOTFIX_SEL_ITEM_NAME_DESCRIPTION }; }; +struct ItemOffsetCurveLoadInfo +{ + static constexpr DB2FieldMeta Fields[3] = + { + { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "CurveID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Offset" }, + }; + + static constexpr DB2LoadInfo Instance{ Fields, 3, &ItemOffsetCurveMeta::Instance, HOTFIX_SEL_ITEM_OFFSET_CURVE }; +}; + struct ItemPriceBaseLoadInfo { static constexpr DB2FieldMeta Fields[4] = @@ -3187,6 +3215,20 @@ struct ItemPriceBaseLoadInfo static constexpr DB2LoadInfo Instance{ Fields, 4, &ItemPriceBaseMeta::Instance, HOTFIX_SEL_ITEM_PRICE_BASE }; }; +struct ItemScalingConfigLoadInfo +{ + static constexpr DB2FieldMeta Fields[5] = + { + { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "ItemOffsetCurveID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "ItemLevel" }, + { .IsSigned = true, .Type = FT_INT, .Name = "RequiredLevel" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1125" }, + }; + + static constexpr DB2LoadInfo Instance{ Fields, 5, &ItemScalingConfigMeta::Instance, HOTFIX_SEL_ITEM_SCALING_CONFIG }; +}; + struct ItemSearchNameLoadInfo { static constexpr DB2FieldMeta Fields[18] = @@ -3262,7 +3304,7 @@ struct ItemSetSpellLoadInfo struct ItemSparseLoadInfo { - static constexpr DB2FieldMeta Fields[99] = + static constexpr DB2FieldMeta Fields[101] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_LONG, .Name = "AllowableRace" }, @@ -3328,6 +3370,8 @@ struct ItemSparseLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "ModifiedCraftingReagentItemID" }, { .IsSigned = true, .Type = FT_INT, .Name = "ContentTuningID" }, { .IsSigned = true, .Type = FT_INT, .Name = "PlayerLevelToItemLevelCurveID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "ItemLevelOffsetCurveID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "ItemLevelOffsetItemLevel" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "ItemNameDescriptionID" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredTransmogHoliday" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "RequiredHoliday" }, @@ -3365,7 +3409,7 @@ struct ItemSparseLoadInfo { .IsSigned = true, .Type = FT_BYTE, .Name = "OverallQualityID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 99, &ItemSparseMeta::Instance, HOTFIX_SEL_ITEM_SPARSE }; + static constexpr DB2LoadInfo Instance{ Fields, 101, &ItemSparseMeta::Instance, HOTFIX_SEL_ITEM_SPARSE }; }; struct ItemSpecLoadInfo @@ -4338,10 +4382,10 @@ struct PlayerConditionLoadInfo { .IsSigned = false, .Type = FT_BYTE, .Name = "AuraStacks2" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "AuraStacks3" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "AuraStacks4" }, - { .IsSigned = false, .Type = FT_SHORT, .Name = "Achievement1" }, - { .IsSigned = false, .Type = FT_SHORT, .Name = "Achievement2" }, - { .IsSigned = false, .Type = FT_SHORT, .Name = "Achievement3" }, - { .IsSigned = false, .Type = FT_SHORT, .Name = "Achievement4" }, + { .IsSigned = false, .Type = FT_INT, .Name = "Achievement1" }, + { .IsSigned = false, .Type = FT_INT, .Name = "Achievement2" }, + { .IsSigned = false, .Type = FT_INT, .Name = "Achievement3" }, + { .IsSigned = false, .Type = FT_INT, .Name = "Achievement4" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "AreaID1" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "AreaID2" }, { .IsSigned = false, .Type = FT_SHORT, .Name = "AreaID3" }, @@ -4393,50 +4437,54 @@ struct PlayerConditionLoadInfo struct PlayerDataElementAccountLoadInfo { - static constexpr DB2FieldMeta Fields[3] = + static constexpr DB2FieldMeta Fields[4] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "StorageIndex" }, { .IsSigned = true, .Type = FT_INT, .Name = "Type" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1125" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 3, &PlayerDataElementAccountMeta::Instance, HOTFIX_SEL_PLAYER_DATA_ELEMENT_ACCOUNT }; + static constexpr DB2LoadInfo Instance{ Fields, 4, &PlayerDataElementAccountMeta::Instance, HOTFIX_SEL_PLAYER_DATA_ELEMENT_ACCOUNT }; }; struct PlayerDataElementCharacterLoadInfo { - static constexpr DB2FieldMeta Fields[3] = + static constexpr DB2FieldMeta Fields[4] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "StorageIndex" }, { .IsSigned = true, .Type = FT_INT, .Name = "Type" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1125" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 3, &PlayerDataElementCharacterMeta::Instance, HOTFIX_SEL_PLAYER_DATA_ELEMENT_CHARACTER }; + static constexpr DB2LoadInfo Instance{ Fields, 4, &PlayerDataElementCharacterMeta::Instance, HOTFIX_SEL_PLAYER_DATA_ELEMENT_CHARACTER }; }; struct PlayerDataFlagAccountLoadInfo { - static constexpr DB2FieldMeta Fields[3] = + static constexpr DB2FieldMeta Fields[4] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "StorageIndex" }, { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1107" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1125" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 3, &PlayerDataFlagAccountMeta::Instance, HOTFIX_SEL_PLAYER_DATA_FLAG_ACCOUNT }; + static constexpr DB2LoadInfo Instance{ Fields, 4, &PlayerDataFlagAccountMeta::Instance, HOTFIX_SEL_PLAYER_DATA_FLAG_ACCOUNT }; }; struct PlayerDataFlagCharacterLoadInfo { - static constexpr DB2FieldMeta Fields[3] = + static constexpr DB2FieldMeta Fields[4] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "StorageIndex" }, { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1107" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1125" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 3, &PlayerDataFlagCharacterMeta::Instance, HOTFIX_SEL_PLAYER_DATA_FLAG_CHARACTER }; + static constexpr DB2LoadInfo Instance{ Fields, 4, &PlayerDataFlagCharacterMeta::Instance, HOTFIX_SEL_PLAYER_DATA_FLAG_CHARACTER }; }; struct PowerDisplayLoadInfo @@ -4859,8 +4907,8 @@ struct SceneScriptLoadInfo static constexpr DB2FieldMeta Fields[4] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, - { .IsSigned = false, .Type = FT_SHORT, .Name = "FirstSceneScriptID" }, - { .IsSigned = false, .Type = FT_SHORT, .Name = "NextSceneScriptID" }, + { .IsSigned = false, .Type = FT_INT, .Name = "FirstSceneScriptID" }, + { .IsSigned = false, .Type = FT_INT, .Name = "NextSceneScriptID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Unknown915" }, }; @@ -5140,10 +5188,10 @@ struct SpellCategoriesLoadInfo { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" }, { .IsSigned = true, .Type = FT_SHORT, .Name = "Category" }, - { .IsSigned = true, .Type = FT_BYTE, .Name = "DefenseType" }, + { .IsSigned = true, .Type = FT_INT, .Name = "DefenseType" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "DispelType" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "Mechanic" }, - { .IsSigned = true, .Type = FT_BYTE, .Name = "PreventionType" }, + { .IsSigned = true, .Type = FT_INT, .Name = "PreventionType" }, { .IsSigned = true, .Type = FT_SHORT, .Name = "StartRecoveryCategory" }, { .IsSigned = true, .Type = FT_SHORT, .Name = "ChargeCategory" }, { .IsSigned = false, .Type = FT_INT, .Name = "SpellID" }, @@ -5314,7 +5362,7 @@ struct SpellInterruptsLoadInfo { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "DifficultyID" }, - { .IsSigned = true, .Type = FT_SHORT, .Name = "InterruptFlags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "InterruptFlags" }, { .IsSigned = true, .Type = FT_INT, .Name = "AuraInterruptFlags1" }, { .IsSigned = true, .Type = FT_INT, .Name = "AuraInterruptFlags2" }, { .IsSigned = true, .Type = FT_INT, .Name = "ChannelInterruptFlags1" }, @@ -6090,29 +6138,32 @@ struct TraitCondLoadInfo struct TraitCostLoadInfo { - static constexpr DB2FieldMeta Fields[4] = + static constexpr DB2FieldMeta Fields[5] = { { .IsSigned = false, .Type = FT_STRING_NOT_LOCALIZED, .Name = "InternalName" }, { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Amount" }, { .IsSigned = true, .Type = FT_INT, .Name = "TraitCurrencyID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "CurveID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 4, &TraitCostMeta::Instance, HOTFIX_SEL_TRAIT_COST }; + static constexpr DB2LoadInfo Instance{ Fields, 5, &TraitCostMeta::Instance, HOTFIX_SEL_TRAIT_COST }; }; struct TraitCurrencyLoadInfo { - static constexpr DB2FieldMeta Fields[5] = + static constexpr DB2FieldMeta Fields[7] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Type" }, { .IsSigned = true, .Type = FT_INT, .Name = "CurrencyTypesID" }, { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, { .IsSigned = true, .Type = FT_INT, .Name = "Icon" }, + { .IsSigned = true, .Type = FT_INT, .Name = "PlayerDataElementAccountID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "PlayerDataElementCharacterID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 5, &TraitCurrencyMeta::Instance, HOTFIX_SEL_TRAIT_CURRENCY }; + static constexpr DB2LoadInfo Instance{ Fields, 7, &TraitCurrencyMeta::Instance, HOTFIX_SEL_TRAIT_CURRENCY }; }; struct TraitCurrencySourceLoadInfo @@ -6332,6 +6383,21 @@ struct TraitSubTreeLoadInfo static constexpr DB2LoadInfo Instance{ Fields, 5, &TraitSubTreeMeta::Instance, HOTFIX_SEL_TRAIT_SUB_TREE }; }; +struct TraitSystemLoadInfo +{ + static constexpr DB2FieldMeta Fields[6] = + { + { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Flags" }, + { .IsSigned = true, .Type = FT_INT, .Name = "WidgetSetID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "TraitChangeSpell" }, + { .IsSigned = true, .Type = FT_INT, .Name = "ItemID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "VariationType" }, + }; + + static constexpr DB2LoadInfo Instance{ Fields, 6, &TraitSystemMeta::Instance, HOTFIX_SEL_TRAIT_SYSTEM }; +}; + struct TraitTreeLoadInfo { static constexpr DB2FieldMeta Fields[8] = @@ -6520,7 +6586,7 @@ struct UiMapLoadInfo struct UiMapAssignmentLoadInfo { - static constexpr DB2FieldMeta Fields[17] = + static constexpr DB2FieldMeta Fields[18] = { { .IsSigned = false, .Type = FT_FLOAT, .Name = "UiMinX" }, { .IsSigned = false, .Type = FT_FLOAT, .Name = "UiMinY" }, @@ -6539,9 +6605,10 @@ struct UiMapAssignmentLoadInfo { .IsSigned = true, .Type = FT_INT, .Name = "AreaID" }, { .IsSigned = true, .Type = FT_INT, .Name = "WmoDoodadPlacementID" }, { .IsSigned = true, .Type = FT_INT, .Name = "WmoGroupID" }, + { .IsSigned = true, .Type = FT_INT, .Name = "Unknown1125" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 17, &UiMapAssignmentMeta::Instance, HOTFIX_SEL_UI_MAP_ASSIGNMENT }; + static constexpr DB2LoadInfo Instance{ Fields, 18, &UiMapAssignmentMeta::Instance, HOTFIX_SEL_UI_MAP_ASSIGNMENT }; }; struct UiMapLinkLoadInfo diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index aa6cf7289bb..23671862ee0 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -491,7 +491,7 @@ struct AnimKitReplacementMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; @@ -502,7 +502,7 @@ struct AnimKitReplacementMeta .ParentIndexField = 4, .FieldCount = 5, .FileFieldCount = 4, - .LayoutHash = 0xD9A65034, + .LayoutHash = 0x84858A44, .Fields = Fields }; }; @@ -551,7 +551,7 @@ struct AnimReplacementMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; @@ -562,7 +562,7 @@ struct AnimReplacementMeta .ParentIndexField = 4, .FieldCount = 5, .FileFieldCount = 4, - .LayoutHash = 0x61B149CC, + .LayoutHash = 0x6D1FB51C, .Fields = Fields }; }; @@ -776,7 +776,7 @@ struct AreaFarClipOverrideMeta .ParentIndexField = -1, .FieldCount = 4, .FileFieldCount = 4, - .LayoutHash = 0x56BEE3FC, + .LayoutHash = 0x5EF657BC, .Fields = Fields }; }; @@ -904,7 +904,7 @@ struct AreaTableMeta { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, @@ -920,7 +920,7 @@ struct AreaTableMeta .ParentIndexField = -1, .FieldCount = 23, .FileFieldCount = 23, - .LayoutHash = 0x3F51DE1F, + .LayoutHash = 0x5DB1A3FF, .Fields = Fields }; }; @@ -2464,7 +2464,7 @@ struct BroadcastTextMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 2, .IsSigned = false }, @@ -2479,7 +2479,7 @@ struct BroadcastTextMeta .ParentIndexField = -1, .FieldCount = 12, .FileFieldCount = 12, - .LayoutHash = 0x2EC89623, + .LayoutHash = 0x00EB45B3, .Fields = Fields }; }; @@ -2683,6 +2683,27 @@ struct CastableRaidBuffsMeta }; }; +struct CatalogShopGameTitleInfoMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7388251, + .IndexField = -1, + .ParentIndexField = 2, + .FieldCount = 3, + .FileFieldCount = 2, + .LayoutHash = 0x14DEA9DD, + .Fields = Fields + }; +}; + struct CelestialBodyMeta { static constexpr DB2MetaField Fields[14] = @@ -3928,7 +3949,7 @@ struct ChrCustomizationReqMeta .ParentIndexField = -1, .FieldCount = 9, .FileFieldCount = 9, - .LayoutHash = 0xEFC66872, + .LayoutHash = 0x6930BE3A, .Fields = Fields }; }; @@ -4294,7 +4315,7 @@ struct ChrSpecializationMeta { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -4308,7 +4329,7 @@ struct ChrSpecializationMeta .ParentIndexField = 4, .FieldCount = 13, .FileFieldCount = 13, - .LayoutHash = 0xBF17DE0B, + .LayoutHash = 0xDAB4CA4B, .Fields = Fields }; }; @@ -5009,7 +5030,7 @@ struct ContentRestrictionRuleSetMeta struct ContentTuningMeta { - static constexpr DB2MetaField Fields[17] = + static constexpr DB2MetaField Fields[19] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -5019,6 +5040,8 @@ struct ContentTuningMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -5035,9 +5058,9 @@ struct ContentTuningMeta .FileDataId = 1962930, .IndexField = 0, .ParentIndexField = -1, - .FieldCount = 17, - .FileFieldCount = 17, - .LayoutHash = 0xCD32761B, + .FieldCount = 19, + .FileFieldCount = 19, + .LayoutHash = 0xA3E13004, .Fields = Fields }; }; @@ -5779,7 +5802,7 @@ struct CreatureDisplayInfoEvtMeta { { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; @@ -5790,7 +5813,7 @@ struct CreatureDisplayInfoEvtMeta .ParentIndexField = 3, .FieldCount = 4, .FileFieldCount = 3, - .LayoutHash = 0xF2A5FCAA, + .LayoutHash = 0x014CFB2A, .Fields = Fields }; }; @@ -5965,7 +5988,7 @@ struct CreatureImmunitiesMeta { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 2, .IsSigned = true }, - { .Type = FT_INT, .ArraySize = 11, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 12, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 20, .IsSigned = false }, }; @@ -5976,7 +5999,7 @@ struct CreatureImmunitiesMeta .ParentIndexField = -1, .FieldCount = 9, .FileFieldCount = 9, - .LayoutHash = 0xA1D7B067, + .LayoutHash = 0xC8D8DB6E, .Fields = Fields }; }; @@ -6401,7 +6424,7 @@ struct CurveMeta { { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -6411,7 +6434,7 @@ struct CurveMeta .ParentIndexField = -1, .FieldCount = 3, .FileFieldCount = 3, - .LayoutHash = 0x48AE7F4A, + .LayoutHash = 0xD362535A, .Fields = Fields }; }; @@ -6424,7 +6447,7 @@ struct CurvePointMeta { .Type = FT_FLOAT, .ArraySize = 2, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, }; static constexpr DB2Meta Instance = @@ -6434,7 +6457,7 @@ struct CurvePointMeta .ParentIndexField = 3, .FieldCount = 5, .FileFieldCount = 5, - .LayoutHash = 0x8DB83C21, + .LayoutHash = 0x7D4954A1, .Fields = Fields }; }; @@ -7382,7 +7405,7 @@ struct FullScreenEffectMeta { static constexpr DB2MetaField Fields[28] = { - { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, @@ -7419,7 +7442,7 @@ struct FullScreenEffectMeta .ParentIndexField = -1, .FieldCount = 28, .FileFieldCount = 28, - .LayoutHash = 0xC0799EA5, + .LayoutHash = 0xD33A4A55, .Fields = Fields }; }; @@ -10051,7 +10074,7 @@ struct HighlightColorMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -10061,7 +10084,7 @@ struct HighlightColorMeta .ParentIndexField = -1, .FieldCount = 5, .FileFieldCount = 5, - .LayoutHash = 0x6A5296CF, + .LayoutHash = 0xF8B3A15F, .Fields = Fields }; }; @@ -10177,6 +10200,27 @@ struct HotfixesMeta }; }; +struct HouseDecorMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 5149691, + .IndexField = 0, + .ParentIndexField = -1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0xA2E1530F, + .Fields = Fields + }; +}; + struct ImportPriceArmorMeta { static constexpr DB2MetaField Fields[4] = @@ -10295,7 +10339,7 @@ struct ItemMeta { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -10308,7 +10352,7 @@ struct ItemMeta .ParentIndexField = -1, .FieldCount = 11, .FileFieldCount = 11, - .LayoutHash = 0x12C03F1A, + .LayoutHash = 0xE39A209A, .Fields = Fields }; }; @@ -10699,7 +10743,7 @@ struct ItemBonusTreeGroupEntryMeta struct ItemBonusTreeNodeMeta { - static constexpr DB2MetaField Fields[9] = + static constexpr DB2MetaField Fields[11] = { { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, @@ -10710,16 +10754,18 @@ struct ItemBonusTreeNodeMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = { .FileDataId = 987134, .IndexField = -1, - .ParentIndexField = 8, - .FieldCount = 9, - .FileFieldCount = 8, - .LayoutHash = 0x6304AE19, + .ParentIndexField = 10, + .FieldCount = 11, + .FileFieldCount = 10, + .LayoutHash = 0x4049606F, .Fields = Fields }; }; @@ -10854,6 +10900,46 @@ struct ItemConversionEntryMeta }; }; +struct ItemCreationContextMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7152830, + .IndexField = 0, + .ParentIndexField = 2, + .FieldCount = 3, + .FileFieldCount = 2, + .LayoutHash = 0xEB697751, + .Fields = Fields + }; +}; + +struct ItemCreationContextGroupMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7152831, + .IndexField = 0, + .ParentIndexField = -1, + .FieldCount = 1, + .FileFieldCount = 1, + .LayoutHash = 0xF2103A31, + .Fields = Fields + }; +}; + struct ItemCurrencyCostMeta { static constexpr DB2MetaField Fields[1] = @@ -11295,6 +11381,27 @@ struct ItemLevelSelectorQualitySetMeta }; }; +struct ItemLevelWatermarkMeta +{ + static constexpr DB2MetaField Fields[3] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 6914796, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0xEB2D703A, + .Fields = Fields + }; +}; + struct ItemLimitCategoryMeta { static constexpr DB2MetaField Fields[3] = @@ -11467,6 +11574,26 @@ struct ItemNameSlotOverrideMeta }; }; +struct ItemOffsetCurveMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7322704, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0x6F2157CA, + .Fields = Fields + }; +}; + struct ItemPetFoodMeta { static constexpr DB2MetaField Fields[1] = @@ -11617,6 +11744,28 @@ struct ItemSalvageLootMeta }; }; +struct ItemScalingConfigMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7322705, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 4, + .FileFieldCount = 4, + .LayoutHash = 0x2A1E702E, + .Fields = Fields + }; +}; + struct ItemSearchNameMeta { static constexpr DB2MetaField Fields[13] = @@ -11696,7 +11845,7 @@ struct ItemSetSpellMeta struct ItemSparseMeta { - static constexpr DB2MetaField Fields[64] = + static constexpr DB2MetaField Fields[66] = { { .Type = FT_LONG, .ArraySize = 1, .IsSigned = true }, { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, @@ -11730,6 +11879,8 @@ struct ItemSparseMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, @@ -11769,9 +11920,9 @@ struct ItemSparseMeta .FileDataId = 1572924, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 64, - .FileFieldCount = 64, - .LayoutHash = 0x93DE68EC, + .FieldCount = 66, + .FileFieldCount = 66, + .LayoutHash = 0x2928311F, .Fields = Fields }; }; @@ -11820,6 +11971,26 @@ struct ItemSpecOverrideMeta }; }; +struct ItemSquishEraMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7322706, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0x0E5EEFD3, + .Fields = Fields + }; +}; + struct ItemSubClassMeta { static constexpr DB2MetaField Fields[11] = @@ -11955,6 +12126,26 @@ struct ItemXItemEffectMeta }; }; +struct ItemXTraitSystemMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + }; + + static constexpr DB2Meta Instance = + { + .FileDataId = 7001629, + .IndexField = -1, + .ParentIndexField = -1, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0xC37D4CAB, + .Fields = Fields + }; +}; + struct JournalEncounterMeta { static constexpr DB2MetaField Fields[12] = @@ -13054,7 +13245,7 @@ struct LookAtControllerMeta { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -13064,7 +13255,7 @@ struct LookAtControllerMeta .ParentIndexField = -1, .FieldCount = 18, .FileFieldCount = 18, - .LayoutHash = 0x92FF222C, + .LayoutHash = 0x257BE69C, .Fields = Fields }; }; @@ -13723,26 +13914,6 @@ struct ModelRibbonQualityMeta }; }; -struct ModelSoundAnimEntryMeta -{ - static constexpr DB2MetaField Fields[2] = - { - { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - }; - - static constexpr DB2Meta Instance = - { - .FileDataId = 5393274, - .IndexField = -1, - .ParentIndexField = 0, - .FieldCount = 2, - .FileFieldCount = 2, - .LayoutHash = 0x324E0B06, - .Fields = Fields - }; -}; - struct ModelSoundSettingsMeta { static constexpr DB2MetaField Fields[2] = @@ -15435,7 +15606,7 @@ struct PerksVendorItemMeta static constexpr DB2MetaField Fields[9] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -15452,7 +15623,7 @@ struct PerksVendorItemMeta .ParentIndexField = -1, .FieldCount = 9, .FileFieldCount = 9, - .LayoutHash = 0x7709D03B, + .LayoutHash = 0x96A2B1EB, .Fields = Fields }; }; @@ -15720,7 +15891,7 @@ struct PlayerConditionMeta { .Type = FT_INT, .ArraySize = 2, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 4, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 4, .IsSigned = false }, - { .Type = FT_SHORT, .ArraySize = 4, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 4, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 4, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 4, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 4, .IsSigned = false }, @@ -15741,18 +15912,19 @@ struct PlayerConditionMeta .ParentIndexField = -1, .FieldCount = 86, .FileFieldCount = 86, - .LayoutHash = 0x7A27D6F8, + .LayoutHash = 0x52515F48, .Fields = Fields }; }; struct PlayerDataElementAccountMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[4] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -15760,20 +15932,21 @@ struct PlayerDataElementAccountMeta .FileDataId = 5715394, .IndexField = 0, .ParentIndexField = -1, - .FieldCount = 3, - .FileFieldCount = 3, - .LayoutHash = 0x099A3DF9, + .FieldCount = 4, + .FileFieldCount = 4, + .LayoutHash = 0xAEC1DEF3, .Fields = Fields }; }; struct PlayerDataElementCharacterMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[4] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -15781,19 +15954,20 @@ struct PlayerDataElementCharacterMeta .FileDataId = 5715395, .IndexField = 0, .ParentIndexField = -1, - .FieldCount = 3, - .FileFieldCount = 3, - .LayoutHash = 0x099A3DF9, + .FieldCount = 4, + .FileFieldCount = 4, + .LayoutHash = 0xAEC1DEF3, .Fields = Fields }; }; struct PlayerDataFlagAccountMeta { - static constexpr DB2MetaField Fields[2] = + static constexpr DB2MetaField Fields[3] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -15801,19 +15975,20 @@ struct PlayerDataFlagAccountMeta .FileDataId = 5426706, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 2, - .FileFieldCount = 2, - .LayoutHash = 0x23ECE2B1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0x4703000B, .Fields = Fields }; }; struct PlayerDataFlagCharacterMeta { - static constexpr DB2MetaField Fields[2] = + static constexpr DB2MetaField Fields[3] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -15821,9 +15996,9 @@ struct PlayerDataFlagCharacterMeta .FileDataId = 5426708, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 2, - .FileFieldCount = 2, - .LayoutHash = 0x23ECE2B1, + .FieldCount = 3, + .FileFieldCount = 3, + .LayoutHash = 0x4703000B, .Fields = Fields }; }; @@ -17315,7 +17490,7 @@ struct ResearchProjectMeta .ParentIndexField = -1, .FieldCount = 8, .FileFieldCount = 8, - .LayoutHash = 0x0D364DBB, + .LayoutHash = 0xB5751E1B, .Fields = Fields }; }; @@ -17454,9 +17629,10 @@ struct RibbonQualityMeta struct RolodexTypeMeta { - static constexpr DB2MetaField Fields[1] = + static constexpr DB2MetaField Fields[2] = { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -17464,9 +17640,9 @@ struct RolodexTypeMeta .FileDataId = 5936950, .IndexField = -1, .ParentIndexField = -1, - .FieldCount = 1, - .FileFieldCount = 1, - .LayoutHash = 0x782EE721, + .FieldCount = 2, + .FileFieldCount = 2, + .LayoutHash = 0x22D8CB1A, .Fields = Fields }; }; @@ -17648,8 +17824,8 @@ struct SceneScriptMeta { static constexpr DB2MetaField Fields[3] = { - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; @@ -17660,7 +17836,7 @@ struct SceneScriptMeta .ParentIndexField = -1, .FieldCount = 3, .FileFieldCount = 3, - .LayoutHash = 0x48BF6E91, + .LayoutHash = 0x693ECCD1, .Fields = Fields }; }; @@ -18950,7 +19126,7 @@ struct SpellAuraOptionsMeta .ParentIndexField = 7, .FieldCount = 8, .FileFieldCount = 7, - .LayoutHash = 0xEE8F35C1, + .LayoutHash = 0x72F0F501, .Fields = Fields }; }; @@ -19080,10 +19256,10 @@ struct SpellCategoriesMeta { { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -19096,7 +19272,7 @@ struct SpellCategoriesMeta .ParentIndexField = 8, .FieldCount = 9, .FileFieldCount = 8, - .LayoutHash = 0x56C7533E, + .LayoutHash = 0x45BA990E, .Fields = Fields }; }; @@ -19666,7 +19842,7 @@ struct SpellInterruptsMeta static constexpr DB2MetaField Fields[5] = { { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 2, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 2, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, @@ -19679,7 +19855,7 @@ struct SpellInterruptsMeta .ParentIndexField = 4, .FieldCount = 5, .FileFieldCount = 4, - .LayoutHash = 0x9C916E46, + .LayoutHash = 0x6CACDAE6, .Fields = Fields }; }; @@ -19895,7 +20071,7 @@ struct SpellMissileMeta static constexpr DB2MetaField Fields[15] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 1, .IsSigned = true }, @@ -19918,7 +20094,7 @@ struct SpellMissileMeta .ParentIndexField = -1, .FieldCount = 15, .FileFieldCount = 15, - .LayoutHash = 0xEA25F580, + .LayoutHash = 0x91E5E150, .Fields = Fields }; }; @@ -20368,7 +20544,7 @@ struct SpellTargetRestrictionsMeta .ParentIndexField = 7, .FieldCount = 8, .FileFieldCount = 7, - .LayoutHash = 0x6CBAAD1E, + .LayoutHash = 0x126E295E, .Fields = Fields }; }; @@ -21394,13 +21570,14 @@ struct TraitCondMeta struct TraitCondAccountElementMeta { - static constexpr DB2MetaField Fields[5] = + static constexpr DB2MetaField Fields[6] = { { .Type = FT_LONG, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -21408,21 +21585,22 @@ struct TraitCondAccountElementMeta .FileDataId = 5890759, .IndexField = 1, .ParentIndexField = 2, - .FieldCount = 5, - .FileFieldCount = 5, - .LayoutHash = 0xCC2EA83A, + .FieldCount = 6, + .FileFieldCount = 6, + .LayoutHash = 0x70915E24, .Fields = Fields }; }; struct TraitCostMeta { - static constexpr DB2MetaField Fields[4] = + static constexpr DB2MetaField Fields[5] = { { .Type = FT_STRING_NOT_LOCALIZED, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -21430,22 +21608,24 @@ struct TraitCostMeta .FileDataId = 4420295, .IndexField = 1, .ParentIndexField = -1, - .FieldCount = 4, - .FileFieldCount = 4, - .LayoutHash = 0x35853DF0, + .FieldCount = 5, + .FileFieldCount = 5, + .LayoutHash = 0x70C65F17, .Fields = Fields }; }; struct TraitCurrencyMeta { - static constexpr DB2MetaField Fields[5] = + static constexpr DB2MetaField Fields[7] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -21453,9 +21633,9 @@ struct TraitCurrencyMeta .FileDataId = 4524216, .IndexField = 0, .ParentIndexField = -1, - .FieldCount = 5, - .FileFieldCount = 5, - .LayoutHash = 0x59214AB9, + .FieldCount = 7, + .FileFieldCount = 7, + .LayoutHash = 0x4615483D, .Fields = Fields }; }; @@ -21823,12 +22003,14 @@ struct TraitSubTreeMeta struct TraitSystemMeta { - static constexpr DB2MetaField Fields[4] = + static constexpr DB2MetaField Fields[6] = { { .Type = FT_INT, .ArraySize = 1, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -21836,9 +22018,9 @@ struct TraitSystemMeta .FileDataId = 4635649, .IndexField = 0, .ParentIndexField = -1, - .FieldCount = 4, - .FileFieldCount = 4, - .LayoutHash = 0xB304261C, + .FieldCount = 6, + .FileFieldCount = 6, + .LayoutHash = 0x495EE552, .Fields = Fields }; }; @@ -22745,7 +22927,7 @@ struct UiCameraMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -22755,7 +22937,7 @@ struct UiCameraMeta .ParentIndexField = -1, .FieldCount = 9, .FileFieldCount = 9, - .LayoutHash = 0x2FD2C951, + .LayoutHash = 0x9D5604E1, .Fields = Fields }; }; @@ -22976,7 +23158,7 @@ struct UiMapArtTileMeta struct UiMapAssignmentMeta { - static constexpr DB2MetaField Fields[10] = + static constexpr DB2MetaField Fields[11] = { { .Type = FT_FLOAT, .ArraySize = 2, .IsSigned = true }, { .Type = FT_FLOAT, .ArraySize = 2, .IsSigned = true }, @@ -22988,6 +23170,7 @@ struct UiMapAssignmentMeta { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -22995,9 +23178,9 @@ struct UiMapAssignmentMeta .FileDataId = 1957219, .IndexField = 3, .ParentIndexField = 4, - .FieldCount = 10, - .FileFieldCount = 10, - .LayoutHash = 0xF9899D73, + .FieldCount = 11, + .FileFieldCount = 11, + .LayoutHash = 0xC9CC8DFB, .Fields = Fields }; }; @@ -24830,7 +25013,7 @@ struct WorldElapsedTimerMeta { { .Type = FT_STRING, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, - { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, }; static constexpr DB2Meta Instance = @@ -24840,7 +25023,7 @@ struct WorldElapsedTimerMeta .ParentIndexField = -1, .FieldCount = 3, .FileFieldCount = 3, - .LayoutHash = 0x057E7307, + .LayoutHash = 0xABC59157, .Fields = Fields }; }; diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 514cf7f9396..178ace62023 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -189,6 +189,7 @@ DB2Storage<ItemBonusTreeNodeEntry> sItemBonusTreeNodeStore("ItemBon DB2Storage<ItemChildEquipmentEntry> sItemChildEquipmentStore("ItemChildEquipment.db2", &ItemChildEquipmentLoadInfo::Instance); DB2Storage<ItemClassEntry> sItemClassStore("ItemClass.db2", &ItemClassLoadInfo::Instance); DB2Storage<ItemContextPickerEntryEntry> sItemContextPickerEntryStore("ItemContextPickerEntry.db2", &ItemContextPickerEntryLoadInfo::Instance); +DB2Storage<ItemCreationContextEntry> sItemCreationContextStore("ItemCreationContext.db2", &ItemCreationContextLoadInfo::Instance); DB2Storage<ItemCurrencyCostEntry> sItemCurrencyCostStore("ItemCurrencyCost.db2", &ItemCurrencyCostLoadInfo::Instance); DB2Storage<ItemDamageAmmoEntry> sItemDamageAmmoStore("ItemDamageAmmo.db2", &ItemDamageAmmoLoadInfo::Instance); DB2Storage<ItemDamageOneHandEntry> sItemDamageOneHandStore("ItemDamageOneHand.db2", &ItemDamageOneHandLoadInfo::Instance); @@ -207,7 +208,9 @@ DB2Storage<ItemLimitCategoryConditionEntry> sItemLimitCategoryConditionStore DB2Storage<ItemModifiedAppearanceEntry> sItemModifiedAppearanceStore("ItemModifiedAppearance.db2", &ItemModifiedAppearanceLoadInfo::Instance); DB2Storage<ItemModifiedAppearanceExtraEntry> sItemModifiedAppearanceExtraStore("ItemModifiedAppearanceExtra.db2", &ItemModifiedAppearanceExtraLoadInfo::Instance); DB2Storage<ItemNameDescriptionEntry> sItemNameDescriptionStore("ItemNameDescription.db2", &ItemNameDescriptionLoadInfo::Instance); +DB2Storage<ItemOffsetCurveEntry> sItemOffsetCurveStore("ItemOffsetCurve.db2", &ItemOffsetCurveLoadInfo::Instance); DB2Storage<ItemPriceBaseEntry> sItemPriceBaseStore("ItemPriceBase.db2", &ItemPriceBaseLoadInfo::Instance); +DB2Storage<ItemScalingConfigEntry> sItemScalingConfigStore("ItemScalingConfig.db2", &ItemScalingConfigLoadInfo::Instance); DB2Storage<ItemSearchNameEntry> sItemSearchNameStore("ItemSearchName.db2", &ItemSearchNameLoadInfo::Instance); DB2Storage<ItemSetEntry> sItemSetStore("ItemSet.db2", &ItemSetLoadInfo::Instance); DB2Storage<ItemSetSpellEntry> sItemSetSpellStore("ItemSetSpell.db2", &ItemSetSpellLoadInfo::Instance); @@ -368,6 +371,7 @@ DB2Storage<TraitNodeXTraitCondEntry> sTraitNodeXTraitCondStore("Trait DB2Storage<TraitNodeXTraitCostEntry> sTraitNodeXTraitCostStore("TraitNodeXTraitCost.db2", &TraitNodeXTraitCostLoadInfo::Instance); DB2Storage<TraitNodeXTraitNodeEntryEntry> sTraitNodeXTraitNodeEntryStore("TraitNodeXTraitNodeEntry.db2", &TraitNodeXTraitNodeEntryLoadInfo::Instance); DB2Storage<TraitSubTreeEntry> sTraitSubTreeStore("TraitSubTree.db2", &TraitSubTreeLoadInfo::Instance); +DB2Storage<TraitSystemEntry> sTraitSystemStore("TraitSystem.db2", &TraitSystemLoadInfo::Instance); DB2Storage<TraitTreeEntry> sTraitTreeStore("TraitTree.db2", &TraitTreeLoadInfo::Instance); DB2Storage<TraitTreeLoadoutEntry> sTraitTreeLoadoutStore("TraitTreeLoadout.db2", &TraitTreeLoadoutLoadInfo::Instance); DB2Storage<TraitTreeLoadoutEntryEntry> sTraitTreeLoadoutEntryStore("TraitTreeLoadoutEntry.db2", &TraitTreeLoadoutEntryLoadInfo::Instance); @@ -544,7 +548,7 @@ namespace std::unordered_map<uint32, std::unordered_set<uint32>> _pvpStatIdsByMap; } -void LoadDB2(std::bitset<TOTAL_LOCALES>& availableDb2Locales, std::vector<std::string>& errlist, StorageMap& stores, DB2StorageBase* storage, std::string const& db2Path, +static void LoadDB2(std::bitset<TOTAL_LOCALES>& availableDb2Locales, std::vector<std::string>& errlist, StorageMap& stores, DB2StorageBase* storage, std::string const& db2Path, LocaleConstant defaultLocale, std::size_t cppRecordSize) { // validate structure @@ -815,6 +819,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sItemChildEquipmentStore); LOAD_DB2(sItemClassStore); LOAD_DB2(sItemContextPickerEntryStore); + LOAD_DB2(sItemCreationContextStore); LOAD_DB2(sItemCurrencyCostStore); LOAD_DB2(sItemDamageAmmoStore); LOAD_DB2(sItemDamageOneHandStore); @@ -833,7 +838,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sItemModifiedAppearanceStore); LOAD_DB2(sItemModifiedAppearanceExtraStore); LOAD_DB2(sItemNameDescriptionStore); + LOAD_DB2(sItemOffsetCurveStore); LOAD_DB2(sItemPriceBaseStore); + LOAD_DB2(sItemScalingConfigStore); LOAD_DB2(sItemSearchNameStore); LOAD_DB2(sItemSetStore); LOAD_DB2(sItemSetSpellStore); @@ -994,6 +1001,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul LOAD_DB2(sTraitNodeXTraitCostStore); LOAD_DB2(sTraitNodeXTraitNodeEntryStore); LOAD_DB2(sTraitSubTreeStore); + LOAD_DB2(sTraitSystemStore); LOAD_DB2(sTraitTreeStore); LOAD_DB2(sTraitTreeLoadoutStore); LOAD_DB2(sTraitTreeLoadoutEntryStore); diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index c670211c7e0..0c49a3832ed 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -146,6 +146,7 @@ TC_GAME_API extern DB2Storage<ItemBonusListLevelDeltaEntry> sItemBonusLi TC_GAME_API extern DB2Storage<ItemBonusTreeEntry> sItemBonusTreeStore; TC_GAME_API extern DB2Storage<ItemBonusTreeNodeEntry> sItemBonusTreeNodeStore; TC_GAME_API extern DB2Storage<ItemContextPickerEntryEntry> sItemContextPickerEntryStore; +TC_GAME_API extern DB2Storage<ItemCreationContextEntry> sItemCreationContextStore; TC_GAME_API extern DB2Storage<ItemDamageAmmoEntry> sItemDamageAmmoStore; TC_GAME_API extern DB2Storage<ItemDamageOneHandEntry> sItemDamageOneHandStore; TC_GAME_API extern DB2Storage<ItemDamageOneHandCasterEntry> sItemDamageOneHandCasterStore; @@ -162,7 +163,9 @@ TC_GAME_API extern DB2Storage<ItemLimitCategoryEntry> sItemLimitCa TC_GAME_API extern DB2Storage<ItemModifiedAppearanceEntry> sItemModifiedAppearanceStore; TC_GAME_API extern DB2Storage<ItemModifiedAppearanceExtraEntry> sItemModifiedAppearanceExtraStore; TC_GAME_API extern DB2Storage<ItemNameDescriptionEntry> sItemNameDescriptionStore; +TC_GAME_API extern DB2Storage<ItemOffsetCurveEntry> sItemOffsetCurveStore; TC_GAME_API extern DB2Storage<ItemPriceBaseEntry> sItemPriceBaseStore; +TC_GAME_API extern DB2Storage<ItemScalingConfigEntry> sItemScalingConfigStore; TC_GAME_API extern DB2Storage<ItemSearchNameEntry> sItemSearchNameStore; TC_GAME_API extern DB2Storage<ItemSetEntry> sItemSetStore; TC_GAME_API extern DB2Storage<ItemSetSpellEntry> sItemSetSpellStore; @@ -290,6 +293,7 @@ TC_GAME_API extern DB2Storage<TraitNodeXTraitCondEntry> sTraitNodeXT TC_GAME_API extern DB2Storage<TraitNodeXTraitCostEntry> sTraitNodeXTraitCostStore; TC_GAME_API extern DB2Storage<TraitNodeXTraitNodeEntryEntry> sTraitNodeXTraitNodeEntryStore; TC_GAME_API extern DB2Storage<TraitSubTreeEntry> sTraitSubTreeStore; +TC_GAME_API extern DB2Storage<TraitSystemEntry> sTraitSystemStore; TC_GAME_API extern DB2Storage<TraitTreeEntry> sTraitTreeStore; TC_GAME_API extern DB2Storage<TraitTreeLoadoutEntry> sTraitTreeLoadoutStore; TC_GAME_API extern DB2Storage<TraitTreeLoadoutEntryEntry> sTraitTreeLoadoutEntryStore; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index c1f86a09c61..53dc4e45db5 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -141,7 +141,7 @@ struct AreaTableEntry uint8 FactionGroupMask; float AmbientMultiplier; int32 MountFlags; - int16 PvpCombatWorldStateID; + int32 PvpCombatWorldStateID; uint8 WildBattlePetLevelMin; uint8 WildBattlePetLevelMax; uint8 WindSettingsID; @@ -554,7 +554,7 @@ struct BroadcastTextEntry int32 LanguageID; int32 ConditionID; uint16 EmotesID; - uint16 Flags; + int32 Flags; uint32 ChatBubbleDurationMs; int32 VoiceOverPriorityID; std::array<uint32, 2> SoundKitID; @@ -900,7 +900,7 @@ struct ChrSpecializationEntry int8 OrderIndex; int8 PetTalentType; int8 Role; - uint32 Flags; + int32 Flags; int32 SpellIconFileID; int8 PrimaryStatPriority; int32 AnimReplacements; @@ -960,6 +960,8 @@ struct ContentTuningEntry int32 DamageItemLevelCurveID; int32 HealthPrimaryStatCurveID; int32 DamagePrimaryStatCurveID; + int32 PrimaryStatScalingModPlayerDataElementCharacterID; + float PrimaryStatScalingModPlayerDataElementCharacterMultiplier; int32 MinLevel; int32 MaxLevel; int32 MinLevelType; @@ -1486,7 +1488,7 @@ struct CurveEntry { uint32 ID; uint8 Type; - uint8 Flags; + int32 Flags; }; struct CurvePointEntry @@ -1495,7 +1497,7 @@ struct CurvePointEntry DBCPosition2D PreSLSquishPos; uint32 ID; uint32 CurveID; - uint8 OrderIndex; + uint32 OrderIndex; }; struct DestructibleModelDataEntry @@ -2187,7 +2189,7 @@ struct ItemEntry uint8 SheatheType; int8 SoundOverrideSubclassID; int32 IconFileDataID; - uint8 ItemGroupSoundsID; + uint32 ItemGroupSoundsID; int32 ContentTuningID; int32 ModifiedCraftingReagentItemID; int32 CraftingQualityID; @@ -2286,6 +2288,8 @@ struct ItemBonusTreeNodeEntry int32 IblGroupPointsModSetID; int32 MinMythicPlusLevel; int32 MaxMythicPlusLevel; + int32 ItemCreationContextGroupID; + int32 Flags; uint32 ParentItemBonusTreeID; }; @@ -2318,6 +2322,13 @@ struct ItemContextPickerEntryEntry uint32 ItemContextPickerID; }; +struct ItemCreationContextEntry +{ + uint32 ID; + uint8 ItemContext; + uint32 ItemCreationContextGroupID; +}; + struct ItemCurrencyCostEntry { uint32 ID; @@ -2469,6 +2480,13 @@ struct ItemNameDescriptionEntry int32 Color; }; +struct ItemOffsetCurveEntry +{ + uint32 ID; + int32 CurveID; + int32 Offset; +}; + struct ItemPriceBaseEntry { uint32 ID; @@ -2477,6 +2495,15 @@ struct ItemPriceBaseEntry float Weapon; }; +struct ItemScalingConfigEntry +{ + uint32 ID; + int32 ItemOffsetCurveID; + int32 ItemLevel; + int32 RequiredLevel; + int32 Unknown1125; +}; + struct ItemSearchNameEntry { uint32 ID; @@ -2552,6 +2579,8 @@ struct ItemSparseEntry int32 ModifiedCraftingReagentItemID; int32 ContentTuningID; int32 PlayerLevelToItemLevelCurveID; + int32 ItemLevelOffsetCurveID; + int32 ItemLevelOffsetItemLevel; uint16 ItemNameDescriptionID; uint16 RequiredTransmogHoliday; uint16 RequiredHoliday; @@ -3250,7 +3279,7 @@ struct PlayerConditionEntry std::array<uint32, 2> Time; std::array<int32, 4> AuraSpellID; std::array<uint8, 4> AuraStacks; - std::array<uint16, 4> Achievement; + std::array<uint32, 4> Achievement; std::array<uint16, 4> AreaID; std::array<uint8, 4> LfgStatus; std::array<uint8, 4> LfgCompare; @@ -3269,6 +3298,7 @@ struct PlayerDataElementAccountEntry uint32 ID; int32 StorageIndex; int32 Type; + int32 Unknown1125; PlayerDataElementType GetType() const { return static_cast<PlayerDataElementType>(Type); } }; @@ -3278,6 +3308,7 @@ struct PlayerDataElementCharacterEntry uint32 ID; int32 StorageIndex; int32 Type; + int32 Unknown1125; PlayerDataElementType GetType() const { return static_cast<PlayerDataElementType>(Type); } }; @@ -3287,6 +3318,7 @@ struct PlayerDataFlagAccountEntry uint32 ID; int32 StorageIndex; int32 Unknown1107; + int32 Unknown1125; }; struct PlayerDataFlagCharacterEntry @@ -3294,6 +3326,7 @@ struct PlayerDataFlagCharacterEntry uint32 ID; int32 StorageIndex; int32 Unknown1107; + int32 Unknown1125; }; struct PowerDisplayEntry @@ -3551,8 +3584,8 @@ struct ScenarioStepEntry struct SceneScriptEntry { uint32 ID; - uint16 FirstSceneScriptID; - uint16 NextSceneScriptID; + uint32 FirstSceneScriptID; + uint32 NextSceneScriptID; int32 Unknown915; }; @@ -3751,10 +3784,10 @@ struct SpellCategoriesEntry uint32 ID; uint8 DifficultyID; int16 Category; - int8 DefenseType; + int32 DefenseType; int8 DispelType; int8 Mechanic; - int8 PreventionType; + int32 PreventionType; int16 StartRecoveryCategory; int16 ChargeCategory; uint32 SpellID; @@ -3868,7 +3901,7 @@ struct SpellInterruptsEntry { uint32 ID; uint8 DifficultyID; - int16 InterruptFlags; + int32 InterruptFlags; std::array<int32, MAX_SPELL_AURA_INTERRUPT_FLAGS> AuraInterruptFlags; std::array<int32, MAX_SPELL_AURA_INTERRUPT_FLAGS> ChannelInterruptFlags; uint32 SpellID; @@ -4367,6 +4400,7 @@ struct TraitCostEntry uint32 ID; int32 Amount; int32 TraitCurrencyID; + int32 CurveID; }; struct TraitCurrencyEntry @@ -4376,6 +4410,8 @@ struct TraitCurrencyEntry int32 CurrencyTypesID; int32 Flags; int32 Icon; + int32 PlayerDataElementAccountID; + int32 PlayerDataElementCharacterID; TraitCurrencyType GetType() const { return static_cast<TraitCurrencyType>(Type); } }; @@ -4523,6 +4559,18 @@ struct TraitSubTreeEntry uint32 TraitTreeID; // Parent tree }; +struct TraitSystemEntry +{ + uint32 ID; + int32 Flags; + int32 WidgetSetID; + int32 TraitChangeSpell; + int32 ItemID; + int32 VariationType; + + TraitSystemVariationType GetVariationType() const { return static_cast<TraitSystemVariationType>(VariationType); } +}; + struct TraitTreeEntry { uint32 ID; @@ -4662,6 +4710,7 @@ struct UiMapAssignmentEntry int32 AreaID; int32 WmoDoodadPlacementID; int32 WmoGroupID; + int32 Unknown1125; }; struct UiMapLinkEntry diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 00ad0d2a5d2..7d185003a39 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -1229,6 +1229,9 @@ enum ItemBonusType ITEM_BONUS_OVERRIDE_DESCRIPTION_COLOR = 45, // Overrides color of item description and upgrade track if TimeEvent from value[1] has passed ITEM_BONUS_OVERRIDE_CANNOT_TRADE_BOP = 46, ITEM_BONUS_BONDING_WITH_PRIORITY = 47, + ITEM_BONUS_ITEM_OFFSET_CURVE = 48, + ITEM_BONUS_SCALING_CONFIG_AND_REQ_LEVEL = 49, + ITEM_BONUS_SCALING_CONFIG = 51, }; enum class ItemCollectionType : uint8 @@ -1241,6 +1244,10 @@ enum class ItemCollectionType : uint8 RuneforgeLegendaryAbility = 5, TransmogIllusion = 6, WarbandScene = 7, + Room = 8, + ExteriorFixture = 9, + RoomTheme = 10, + RoomMaterial = 11 }; enum class ItemContext : uint8 @@ -1410,6 +1417,27 @@ enum class ItemContext : uint8 Tournament_Realm_2 = 162, Tournament_Realm_3 = 163, Tournament_Realm_4 = 164, + Warbound_1 = 165, + Warbound_2 = 166, + Warbound_3 = 167, + Warbound_4 = 168, + Warbound_5 = 169, + Warbound_6 = 170, + Warbound_7 = 171, + Warbound_8 = 172, + Warbound_9 = 173, + Warbound_10 = 174, + Warbound_11 = 175, + Warbound_12 = 176, + Warbound_13 = 177, + Warbound_14 = 178, + Warbound_15 = 179, + Warbound_16 = 180, + Warbound_17 = 181, + Warbound_18 = 182, + Warbound_19 = 183, + Warbound_20 = 184, + Endeavors = 185, Max }; @@ -2515,9 +2543,10 @@ enum class TraitConfigType : int32 enum class TraitCurrencyType : int32 { - Gold = 0, - CurrencyTypesBased = 1, - TraitSourced = 2 + Gold = 0, + CurrencyTypesBased = 1, + TraitSourced = 2, + TraitSourcedPlayerDataElement = 3, }; enum class TraitEdgeType : int32 @@ -2541,7 +2570,8 @@ enum class TraitNodeEntryType : int32 SpendDiamond = 6, ProfPath = 7, ProfPerk = 8, - ProfPathUnlock = 9 + ProfPathUnlock = 9, + SpendInfinite = 10 }; enum class TraitNodeGroupFlag : int32 @@ -2567,6 +2597,12 @@ enum class TraitPointsOperationType : int32 Multiply = 1 }; +enum class TraitSystemVariationType : int32 +{ + None = 0, + Spec = 1 +}; + enum class TraitTreeFlag : int32 { None = 0x0, diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 1ed4b4d06ca..4dc90db22fe 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -194,7 +194,8 @@ bool AreaTrigger::Create(AreaTriggerCreatePropertiesId areaTriggerCreateProperti } } - SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::AnimationDataID), GetCreateProperties()->AnimId); + if (GetCreateProperties()->AnimId != -1) + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::AnimationDataID, 0), GetCreateProperties()->AnimId); SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::AnimKitID), GetCreateProperties()->AnimKitId); if (GetCreateProperties()->Flags.HasFlag(AreaTriggerCreatePropertiesFlag::VisualAnimIsDecay)) SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::IsDecay), true); diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 0dc621bd8ce..20705e3036e 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -2327,17 +2327,22 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon if (AzeriteLevelInfoEntry const* azeriteLevelInfo = sAzeriteLevelInfoStore.LookupEntry(azeriteLevel)) itemLevel = azeriteLevelInfo->ItemLevel; - if (bonusData.PlayerLevelToItemLevelCurveId) + if (!bonusData.ItemLevelOffsetCurveId) { - if (fixedLevel) - level = fixedLevel; - else if (Optional<ContentTuningLevels> levels = sDB2Manager.GetContentTuningData(bonusData.ContentTuningId, 0, true)) - level = std::min(std::max(int16(level), levels->MinLevel), levels->MaxLevel); + if (bonusData.PlayerLevelToItemLevelCurveId) + { + if (fixedLevel) + level = fixedLevel; + else if (Optional<ContentTuningLevels> levels = sDB2Manager.GetContentTuningData(bonusData.ContentTuningId, 0, true)) + level = std::min(std::max(int16(level), levels->MinLevel), levels->MaxLevel); - itemLevel = uint32(sDB2Manager.GetCurveValueAt(bonusData.PlayerLevelToItemLevelCurveId, level)); - } + itemLevel = uint32(sDB2Manager.GetCurveValueAt(bonusData.PlayerLevelToItemLevelCurveId, level)); + } - itemLevel += bonusData.ItemLevelBonus; + itemLevel += bonusData.ItemLevelBonus; + } + else + itemLevel = bonusData.ItemLevelOffset + uint32(sDB2Manager.GetCurveValueAt(bonusData.ItemLevelOffsetCurveId, bonusData.ItemLevelOffsetItemLevel)); for (uint32 i = 0; i < MAX_ITEM_PROTO_SOCKETS; ++i) itemLevel += bonusData.GemItemLevelBonus[i]; @@ -2935,6 +2940,10 @@ void BonusData::Initialize(ItemTemplate const* proto) PvpItemLevel = 0; PvpItemLevelBonus = 0; + ItemLevelOffsetCurveId = proto->GetItemLevelOffsetCurveId(); + ItemLevelOffsetItemLevel = proto->GetItemLevelOffsetItemLevel(); + ItemLevelOffset = 0; + EffectCount = 0; for (ItemEffectEntry const* itemEffect : proto->Effects) Effects[EffectCount++] = itemEffect; @@ -3137,5 +3146,49 @@ void BonusData::AddBonus(uint32 type, std::array<int32, 4> const& values) _state.BondingPriority = values[1]; } break; + case ITEM_BONUS_ITEM_OFFSET_CURVE: + if (values[3] < _state.ScalingStatDistributionPriority) + { + ItemLevelOffsetCurveId = values[0]; + ItemLevelOffsetItemLevel = values[1]; + _state.ScalingStatDistributionPriority = values[3]; + } + break; + case ITEM_BONUS_SCALING_CONFIG_AND_REQ_LEVEL: + if (values[1] < _state.ScalingStatDistributionPriority) + { + if (ItemScalingConfigEntry const* scalingConfig = sItemScalingConfigStore.LookupEntry(values[0])) + { + if (ItemOffsetCurveEntry const* itemOffsetCurve = sItemOffsetCurveStore.LookupEntry(scalingConfig->ItemOffsetCurveID)) + { + ItemLevelOffsetCurveId = itemOffsetCurve->CurveID; + ItemLevelOffset = itemOffsetCurve->Offset; + } + + ItemLevelOffsetItemLevel = scalingConfig->ItemLevel; + + if (values[1] < _state.RequiredLevelCurvePriority) + { + RequiredLevelOverride = scalingConfig->RequiredLevel; + RequiredLevelCurve = 0; + } + } + } + break; + case ITEM_BONUS_SCALING_CONFIG: + if (values[1] < _state.ScalingStatDistributionPriority) + { + if (ItemScalingConfigEntry const* scalingConfig = sItemScalingConfigStore.LookupEntry(values[0])) + { + if (ItemOffsetCurveEntry const* itemOffsetCurve = sItemOffsetCurveStore.LookupEntry(scalingConfig->ItemOffsetCurveID)) + { + ItemLevelOffsetCurveId = itemOffsetCurve->CurveID; + ItemLevelOffset = itemOffsetCurve->Offset; + } + + ItemLevelOffsetItemLevel = 0; + } + } + break; } } diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index f1815c0c337..bb3bc76436a 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -83,6 +83,9 @@ struct BonusData int32 RequiredLevelCurve; uint16 PvpItemLevel; int16 PvpItemLevelBonus; + uint32 ItemLevelOffsetCurveId; + uint32 ItemLevelOffsetItemLevel; + uint32 ItemLevelOffset; std::array<ItemEffectEntry const*, 13> Effects; std::size_t EffectCount; uint32 LimitCategory; diff --git a/src/server/game/Entities/Item/ItemBonusMgr.cpp b/src/server/game/Entities/Item/ItemBonusMgr.cpp index fd660c02188..7d2b955da9c 100644 --- a/src/server/game/Entities/Item/ItemBonusMgr.cpp +++ b/src/server/game/Entities/Item/ItemBonusMgr.cpp @@ -36,6 +36,7 @@ std::unordered_multimap<int32 /*azeriteUnlockMappingSetId*/, AzeriteUnlockMappin std::unordered_multimap<uint32 /*itemBonusTreeId*/, ChallengeModeItemBonusOverrideEntry const*> _challengeModeItemBonusOverrides; std::unordered_map<uint32 /*itemBonusListId*/, std::vector<ItemBonusEntry const*>> _itemBonusLists; std::unordered_multimap<uint32, ItemBonusListGroupEntryEntry const*> _itemBonusListGroupEntries; +std::unordered_map<uint32 /*itemCreationContextGroupId*/, std::vector<ItemContext>> _itemContextByGroup; std::unordered_map<int16 /*itemLevelDelta*/, uint32 /*itemBonusListId*/> _itemLevelDeltaToBonusListContainer; std::unordered_map<uint32 /*itemLevelSelectorQualitySetId*/, ItemLevelSelectorQualities> _itemLevelQualitySelectorQualities; std::unordered_map<uint32 /*itemBonusTreeId*/, std::set<ItemBonusTreeNodeEntry const*>> _itemBonusTrees; @@ -61,6 +62,9 @@ void Load() for (ItemBonusListLevelDeltaEntry const* itemBonusListLevelDelta : sItemBonusListLevelDeltaStore) _itemLevelDeltaToBonusListContainer[itemBonusListLevelDelta->ItemLevelDelta] = itemBonusListLevelDelta->ID; + for (ItemCreationContextEntry const* itemCreationContext : sItemCreationContextStore) + _itemContextByGroup[itemCreationContext->ItemCreationContextGroupID].push_back(ItemContext(itemCreationContext->ItemContext)); + for (ItemLevelSelectorQualityEntry const* itemLevelSelectorQuality : sItemLevelSelectorQualityStore) _itemLevelQualitySelectorQualities[itemLevelSelectorQuality->ParentILSQualitySetID].insert(itemLevelSelectorQuality); @@ -253,8 +257,23 @@ void ApplyBonusTreeHelper(ItemTemplate const* itemTemplate, uint32 itemBonusTree ItemContext nodeContext = ItemContext(bonusTreeNode->ItemContext); ItemContext requiredContext = nodeContext != ItemContext::Force_to_NONE ? nodeContext : ItemContext::NONE; if (nodeContext != ItemContext::NONE && params.Context != requiredContext) + { + if (!(bonusTreeNode->Flags & 0x1)) + continue; + } + else if (bonusTreeNode->Flags & 0x1 && nodeContext != ItemContext::NONE) continue; + if (bonusTreeNode->ItemCreationContextGroupID) + { + bool hasContextFromGroup = false; + if (std::vector<ItemContext> const* itemContexts = Trinity::Containers::MapGetValuePtr(_itemContextByGroup, bonusTreeNode->ItemCreationContextGroupID)) + hasContextFromGroup = advstd::ranges::contains(*itemContexts, params.Context); + + if (!!(bonusTreeNode->Flags & 0x1) == hasContextFromGroup) + continue; + } + if (params.MythicPlusKeystoneLevel) { if (bonusTreeNode->MinMythicPlusLevel && params.MythicPlusKeystoneLevel < bonusTreeNode->MinMythicPlusLevel) diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 2cf50162754..79295348d45 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -852,6 +852,8 @@ struct TC_GAME_API ItemTemplate float GetStatPercentageOfSocket(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatPercentageOfSocket[index]; } uint32 GetScalingStatContentTuning() const { return ExtendedData->ContentTuningID; } uint32 GetPlayerLevelToItemLevelCurveId() const { return ExtendedData->PlayerLevelToItemLevelCurveID; } + uint32 GetItemLevelOffsetCurveId() const { return ExtendedData->ItemLevelOffsetCurveID; } + uint32 GetItemLevelOffsetItemLevel() const { return ExtendedData->ItemLevelOffsetItemLevel; } uint32 GetDamageType() const { return ExtendedData->DamageDamageType; } uint32 GetDelay() const { return ExtendedData->ItemDelay; } float GetRangedModRange() const { return ExtendedData->ItemRange; } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 971b74494e0..e049ca95fae 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -171,6 +171,12 @@ namespace UF setter.Clear(); } + template<typename K, typename V> + inline void RemoveMapUpdateFieldValue(MapUpdateFieldSetter<K, V>& setter, std::type_identity_t<K> const& key) + { + setter.RemoveKey(key); + } + template<typename T> inline void RemoveOptionalUpdateFieldValue(OptionalUpdateFieldSetter<T>& setter) { @@ -363,6 +369,13 @@ class TC_GAME_API Object UF::RemoveDynamicUpdateFieldValue(setter, index); } + template<typename K, typename V> + void RemoveMapUpdateFieldValue(UF::MapUpdateFieldSetter<K, V> setter, std::type_identity_t<K> const& key) + { + AddToObjectUpdateIfNeeded(); + UF::RemoveMapUpdateFieldValue(setter, key); + } + template<typename T> void ClearDynamicUpdateFieldValues(UF::DynamicUpdateFieldSetter<T> setter) { diff --git a/src/server/game/Entities/Object/Updates/UpdateField.cpp b/src/server/game/Entities/Object/Updates/UpdateField.cpp deleted file mode 100644 index 2c0527190db..00000000000 --- a/src/server/game/Entities/Object/Updates/UpdateField.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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 "UpdateField.h" -#include "ByteBuffer.h" - -void UF::WriteDynamicFieldUpdateMask(std::size_t size, std::vector<uint32> const& updateMask, ByteBuffer& data, int32 bitsForSize /*= 32*/) -{ - data.WriteBits(size, bitsForSize); - if (size > 32) - { - if (data.HasUnfinishedBitPack()) - for (std::size_t block = 0; block < size / 32; ++block) - data.WriteBits(updateMask[block], 32); - else - for (std::size_t block = 0; block < size / 32; ++block) - data << uint32(updateMask[block]); - } - else if (size == 32) - { - data.WriteBits(updateMask.back(), 32); - return; - } - - if (size % 32) - data.WriteBits(updateMask.back(), size % 32); -} - -void UF::WriteCompleteDynamicFieldUpdateMask(std::size_t size, ByteBuffer& data, int32 bitsForSize /*= 32*/) -{ - data.WriteBits(size, bitsForSize); - if (size > 32) - { - if (data.HasUnfinishedBitPack()) - for (std::size_t block = 0; block < size / 32; ++block) - data.WriteBits(0xFFFFFFFFu, 32); - else - for (std::size_t block = 0; block < size / 32; ++block) - data << uint32(0xFFFFFFFFu); - } - else if (size == 32) - { - data.WriteBits(0xFFFFFFFFu, 32); - return; - } - - if (size % 32) - data.WriteBits(0xFFFFFFFFu, size % 32); -} diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h index 874b38d87d8..8f351f8a37f 100644 --- a/src/server/game/Entities/Object/Updates/UpdateField.h +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -18,11 +18,13 @@ #ifndef UpdateField_h__ #define UpdateField_h__ +#include "Concepts.h" #include "ObjectGuid.h" #include "Optional.h" #include "UpdateMask.h" #include <algorithm> #include <memory> +#include <unordered_map> #include <variant> #include <vector> @@ -63,6 +65,12 @@ namespace UF template<typename T, int32 BlockBit, uint32 Bit> class DynamicUpdateField; + template<typename K, typename V> + class MapUpdateFieldBase; + + template<typename K, typename V, int32 BlockBit, uint32 Bit> + class MapUpdateField; + template<typename T> class OptionalUpdateFieldBase; @@ -87,6 +95,13 @@ namespace UF template<typename T, bool PublicSet> struct MutableNestedFieldReference; + enum class MapUpdateFieldState : uint8 + { + Unchanged = 0, + Changed = 1, + Deleted = 2 + }; + struct IsUpdateFieldStructureTag { }; @@ -241,6 +256,25 @@ namespace UF std::vector<uint32>& _updateMask; }; + template<typename K, typename V> + struct MapUpdateFieldSetter + { + template<typename F, typename G> + friend void RemoveMapUpdateFieldValue(MapUpdateFieldSetter<F, G>& setter, std::type_identity_t<F> const& key); + + MapUpdateFieldSetter(std::unordered_map<K, V>& values) : _values(values) { } + + private: + void RemoveKey(K const& key) + { + auto itr = _values.find(key); + if (itr != _values.end()) + itr->second.state = MapUpdateFieldState::Deleted; + } + + std::unordered_map<K, V>& _values; + }; + template<typename T> struct OptionalUpdateFieldSetter { @@ -334,6 +368,35 @@ namespace UF return { (_value.*field)._values[index] }; } + template<typename K, typename V, int32 BlockBit, uint32 Bit> + MapUpdateFieldSetter<K, typename MapUpdateField<K, V, BlockBit, Bit>::mapped_type> + ModifyValue(MapUpdateField<K, V, BlockBit, Bit>(T::* field)) + { + if constexpr (BlockBit >= 0) + _value._changesMask.Set(BlockBit); + + _value._changesMask.Set(Bit); + return { (_value.*field)._values }; + } + + template<typename K, typename V, int32 BlockBit, uint32 Bit> + std::conditional_t<std::is_base_of_v<IsUpdateFieldStructureTag, V>, + MutableFieldReference<V, PublicSet>, + std::conditional_t<std::is_base_of_v<IsUpdateFieldHolderTag, V>, + MutableNestedFieldReference<V, PublicSet>, + UpdateFieldSetter<V, PublicSet>>> + ModifyValue(MapUpdateField<K, V, BlockBit, Bit>(T::* field), std::type_identity_t<K> const& key) + { + if constexpr (BlockBit >= 0) + _value._changesMask.Set(BlockBit); + + _value._changesMask.Set(Bit); + + auto itr = (_value.*field)._values.try_emplace(key).first; + itr->second.state = MapUpdateFieldState::Changed; + return { itr->second.value }; + } + template<typename V, int32 BlockBit, uint32 Bit> OptionalUpdateFieldSetter<V> ModifyValue(OptionalUpdateField<V, BlockBit, Bit>(T::* field)) { @@ -499,6 +562,9 @@ namespace UF template<typename T> friend struct DynamicUpdateFieldSetter; + template<typename K, typename V> + friend struct MapUpdateFieldSetter; + template<typename T, bool PublicSet> friend struct MutableFieldReferenceWithChangesMask; @@ -545,7 +611,21 @@ namespace UF } template<typename Derived, typename T, int32 BlockBit, uint32 Bit> - void MarkChanged(DynamicUpdateField<T, BlockBit, Bit>(Derived::*), uint32) + void MarkChanged(DynamicUpdateField<T, BlockBit, Bit>(Derived::* field), uint32 index) + { + static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask"); + + if constexpr (BlockBit >= 0) + _changesMask.Set(BlockBit); + + _changesMask.Set(Bit); + DynamicUpdateField<T, BlockBit, Bit>& uf = (static_cast<Derived*>(this)->*field); + if (index < uf.size()) + uf.MarkChanged(index); + } + + template<typename Derived, typename K, typename V, int32 BlockBit, uint32 Bit> + void MarkChanged(MapUpdateField<K, V, BlockBit, Bit>(Derived::* field), std::type_identity_t<K> const& key) { static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask"); @@ -553,6 +633,10 @@ namespace UF _changesMask.Set(BlockBit); _changesMask.Set(Bit); + MapUpdateField<K, V, BlockBit, Bit>& uf = (static_cast<Derived*>(this)->*field); + auto itr = uf._values.find(key); + if (itr != uf._values.end() && itr->second.state == MapUpdateFieldState::Unchanged) + itr->second.state = MapUpdateFieldState::Changed; } template<typename Derived, typename T, int32 BlockBit, uint32 Bit> @@ -602,13 +686,24 @@ namespace UF template<typename Derived, typename T, int32 BlockBit, uint32 Bit> void ClearChanged(DynamicUpdateField<T, BlockBit, Bit>(Derived::* field), uint32 index) { - _changesMask.Reset(Bit); + static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask"); DynamicUpdateField<T, BlockBit, Bit>& uf = (static_cast<Derived*>(this)->*field); if (index < uf.size()) uf.ClearChanged(index); } + template<typename Derived, typename K, typename V, int32 BlockBit, uint32 Bit> + void ClearChanged(MapUpdateField<K, V, BlockBit, Bit>(Derived::* field), std::type_identity_t<K> const& key) + { + static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask"); + + MapUpdateField<K, V, BlockBit, Bit>& uf = (static_cast<Derived*>(this)->*field); + auto itr = uf._values.find(key); + if (itr != uf._values.end() && itr->second.state == MapUpdateFieldState::Changed) + itr->second.state = MapUpdateFieldState::Unchanged; + } + template<typename Derived, typename T, int32 BlockBit, uint32 Bit> void ClearChanged(OptionalUpdateField<T, BlockBit, Bit>(Derived::*)) { @@ -628,23 +723,23 @@ namespace UF Mask const& GetChangesMask() const { return _changesMask; } protected: - template<typename T, int32 BlockBit, uint32 Bit> - static void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field) + template<typename T> + static inline void ClearChangesMask(UpdateFieldBase<T>& field) { if constexpr (std::is_base_of_v<HasChangesMaskTag, T>) field._value.ClearChangesMask(); } - template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit> - static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field) + template<typename T, std::size_t Size> + static inline void ClearChangesMask(UpdateFieldArrayBase<T, Size>& field) { if constexpr (std::disjunction_v<std::is_base_of<HasChangesMaskTag, T>, std::is_base_of<IsUpdateFieldHolderTag, T>>) for (T& value : field._values) value.ClearChangesMask(); } - template<typename T, int32 BlockBit, uint32 Bit> - static void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field) + template<typename T> + static inline void ClearChangesMask(DynamicUpdateFieldBase<T>& field) { if constexpr (std::is_base_of_v<HasChangesMaskTag, T>) for (T& value : field._values) @@ -653,16 +748,45 @@ namespace UF field.ClearChangesMask(); } - template<typename T, int32 BlockBit, uint32 Bit> - static void ClearChangesMask(OptionalUpdateField<T, BlockBit, Bit>& field) + template<typename K, typename V> + static inline void ClearChangesMask(MapUpdateFieldBase<K, V>& field) + { + for (auto itr = field._values.begin(); itr != field._values.end(); ) + { + switch (itr->second.state) + { + case MapUpdateFieldState::Unchanged: + break; + case MapUpdateFieldState::Changed: + if constexpr (std::is_base_of_v<HasChangesMaskTag, K>) + itr->first.ClearChangesMask(); + + if constexpr (std::is_base_of_v<HasChangesMaskTag, V>) + itr->second.value.ClearChangesMask(); + + itr->second.state = MapUpdateFieldState::Unchanged; + break; + case MapUpdateFieldState::Deleted: + itr = field._values.erase(itr++); + continue; + default: + break; + } + + ++itr; + } + } + + template<typename T> + static inline void ClearChangesMask(OptionalUpdateFieldBase<T>& field) { if constexpr (std::is_base_of_v<HasChangesMaskTag, T>) if (field.has_value()) field._value->ClearChangesMask(); } - template<int32 BlockBit, uint32 Bit, typename... Types> - static void ClearChangesMask(VariantUpdateField<BlockBit, Bit, Types...>& field) + template<typename... Types> + static inline void ClearChangesMask(VariantUpdateFieldBase<Types...>& field) { if constexpr ((std::is_base_of_v<HasChangesMaskTag, Types> || ...)) std::visit([]<typename T>(T& value) @@ -783,7 +907,6 @@ namespace UF }; void WriteDynamicFieldUpdateMask(std::size_t size, std::vector<uint32> const& updateMask, ByteBuffer& data, int32 bitsForSize = 32); - void WriteCompleteDynamicFieldUpdateMask(std::size_t size, ByteBuffer& data, int32 bitsForSize = 32); template<typename T> class DynamicUpdateFieldBase : public IsUpdateFieldHolderTag @@ -887,6 +1010,81 @@ namespace UF { }; + template<typename K, typename V> + class MapUpdateFieldBase : public IsUpdateFieldHolderTag + { + template<typename F, bool PublicSet> + friend struct MutableFieldReferenceWithChangesMask; + + template<typename F, bool PublicSet> + friend struct MutableFieldReferenceNoChangesMask; + + template<typename F, bool PublicSet> + friend struct MutableNestedFieldReference; + + template<std::size_t Bits> + friend class HasChangesMask; + + public: + struct Value + { + V value; + MapUpdateFieldState state; + }; + + using key_type = K; + using mapped_type = Value; + using value_type = std::pair<key_type const, mapped_type>; + + typename std::unordered_map<K, Value>::const_iterator begin() const + { + return _values.begin(); + } + + typename std::unordered_map<K, Value>::const_iterator end() const + { + return _values.end(); + } + + bool empty() const + { + return _values.empty(); + } + + std::size_t size() const + { + return _values.size(); + } + + V const* Get(K const& key) const + { + auto itr = _values.find(key); + if (itr != _values.end()) + return &itr->second.value; + + return nullptr; + } + + template <Trinity::invocable_r<bool, V const&> Pred> + std::pair<K const*, V const*> FindIf(Pred&& pred) const + { + auto itr = std::ranges::find_if(_values, std::forward<Pred>(pred), + [](value_type const& pair) -> V const& { return pair.second.value; }); + if (itr != _values.end()) + return std::make_pair(&itr->first, &itr->second.value); + + return { nullptr, nullptr }; + } + + private: + std::unordered_map<K, Value> _values; + }; + + template<typename K, typename V, int32 BlockBit, uint32 Bit> + class MapUpdateField : public MapUpdateFieldBase<K, V> + { + }; + template<typename T> class OptionalUpdateFieldBase : public IsUpdateFieldHolderTag { diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldImpl.h b/src/server/game/Entities/Object/Updates/UpdateFieldImpl.h new file mode 100644 index 00000000000..da0e68c3f3c --- /dev/null +++ b/src/server/game/Entities/Object/Updates/UpdateFieldImpl.h @@ -0,0 +1,129 @@ +/*
+ * 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 TRINITYCORE_UPDATE_FIELD_IMPL_H
+#define TRINITYCORE_UPDATE_FIELD_IMPL_H
+
+#include "UpdateField.h"
+#include "ByteBuffer.h"
+
+class Player;
+
+namespace UF
+{
+inline void WriteDynamicFieldUpdateMask(std::size_t size, std::vector<uint32> const& updateMask, ByteBuffer& data, int32 bitsForSize /*= 32*/)
+{
+ data.WriteBits(size, bitsForSize);
+ if (size > 32)
+ {
+ if (data.HasUnfinishedBitPack())
+ for (std::size_t block = 0; block < size / 32; ++block)
+ data.WriteBits(updateMask[block], 32);
+ else
+ for (std::size_t block = 0; block < size / 32; ++block)
+ data << uint32(updateMask[block]);
+ }
+ else if (size == 32)
+ {
+ data.WriteBits(updateMask.back(), 32);
+ return;
+ }
+
+ if (size % 32)
+ data.WriteBits(updateMask.back(), size % 32);
+}
+
+inline void WriteCompleteDynamicFieldUpdateMask(std::size_t size, ByteBuffer& data, int32 bitsForSize = 32)
+{
+ data.WriteBits(size, bitsForSize);
+ if (size > 32)
+ {
+ if (data.HasUnfinishedBitPack())
+ for (std::size_t block = 0; block < size / 32; ++block)
+ data.WriteBits(0xFFFFFFFFu, 32);
+ else
+ for (std::size_t block = 0; block < size / 32; ++block)
+ data << uint32(0xFFFFFFFFu);
+ }
+ else if (size == 32)
+ {
+ data.WriteBits(0xFFFFFFFFu, 32);
+ return;
+ }
+
+ if (size % 32)
+ data.WriteBits(0xFFFFFFFFu, size % 32);
+}
+
+template <typename K, typename V, typename T>
+inline void WriteMapFieldCreate(MapUpdateFieldBase<K, V> const& map, ByteBuffer& data, T const* owner, Player const* receiver)
+{
+ data << uint32(map.size());
+ for (auto const& [k, v] : map)
+ {
+ if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, K>)
+ k.WriteCreate(data, owner, receiver);
+ else
+ data << k;
+
+ if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, V>)
+ v.value.WriteCreate(data, owner, receiver);
+ else
+ data << v.value;
+ }
+}
+
+template <typename K, typename V, typename T>
+inline void WriteMapFieldUpdate(MapUpdateFieldBase<K, V> const& map, ByteBuffer& data, bool ignoreChangesMask, T const* owner, Player const* receiver)
+{
+ data << uint8(ignoreChangesMask ? 1 : 0);
+ if (ignoreChangesMask)
+ UF::WriteMapFieldCreate(map, data, owner, receiver);
+ else
+ {
+ uint16 changesCount = 0;
+ size_t changesCountPos = data.wpos();
+ data << uint16(changesCount);
+
+ for (auto const& [k, v] : map)
+ {
+ if (v.state == MapUpdateFieldState::Unchanged)
+ continue;
+
+ ++changesCount;
+
+ if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, K>)
+ k.WriteUpdate(data, true /*ignoreChangesMask*/, owner, receiver);
+ else
+ data << k;
+
+ data << uint8(v.state);
+ if (v.state == MapUpdateFieldState::Deleted)
+ continue;
+
+ if constexpr (std::is_base_of_v<IsUpdateFieldStructureTag, V>)
+ v.value.WriteUpdate(data, true /*ignoreChangesMask*/, owner, receiver); // client bug replaces unchanged values with 0/default so send everything as if it changed
+ else
+ data << v.value;
+ }
+
+ data.put<uint16>(changesCountPos, changesCount);
+ }
+}
+}
+
+#endif // TRINITYCORE_UPDATE_FIELD_IMPL_H
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 0db907a813a..7df3bcb97a5 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -22,6 +22,7 @@ #include "DynamicObject.h" #include "PacketOperators.h" #include "Player.h" +#include "UpdateFieldImpl.h" #include "ViewerDependentValues.h" // This file is automatically generated, DO NOT EDIT @@ -2098,14 +2099,14 @@ bool ChrCustomizationChoice::operator==(ChrCustomizationChoice const& right) con void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - data << int64(EndTime); data << int32(QuestID); - data << uint32(StateFlags); - data << uint32(ObjectiveFlags); + data << uint16(StateFlags); for (uint32 i = 0; i < 24; ++i) { data << int16(ObjectiveProgress[i]); } + data << int64(EndTime); + data << uint32(ObjectiveFlags); } void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const @@ -2123,15 +2124,15 @@ void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player cons { if (changesMask[1]) { - data << int64(EndTime); + data << int32(QuestID); } if (changesMask[2]) { - data << int32(QuestID); + data << uint16(StateFlags); } if (changesMask[3]) { - data << uint32(StateFlags); + data << int64(EndTime); } if (changesMask[4]) { @@ -2152,9 +2153,9 @@ void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player cons void QuestLog::ClearChangesMask() { - Base::ClearChangesMask(EndTime); Base::ClearChangesMask(QuestID); Base::ClearChangesMask(StateFlags); + Base::ClearChangesMask(EndTime); Base::ClearChangesMask(ObjectiveFlags); Base::ClearChangesMask(ObjectiveProgress); _changesMask.ResetAll(); @@ -3508,8 +3509,8 @@ void CompletedProject::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pla void CompletedProject::ClearChangesMask() { - Base::ClearChangesMask(ProjectID); Base::ClearChangesMask(FirstCompleted); + Base::ClearChangesMask(ProjectID); Base::ClearChangesMask(CompletionCount); _changesMask.ResetAll(); } @@ -3809,6 +3810,7 @@ void TraitConfig::WriteCreate(ByteBuffer& data, Player const* owner, Player cons if (Type == 3) { data << int32(TraitSystemID); + data << int32(VariationID); } for (uint32 i = 0; i < Entries.size(); ++i) { @@ -3829,7 +3831,7 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 14); + data.WriteBits(changesMask.GetBlock(0), 15); if (changesMask[0]) { @@ -3923,6 +3925,13 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c data << int32(TraitSystemID); } } + if (changesMask[14]) + { + if (Type == 3) + { + data << int32(VariationID); + } + } } if (changesMask[4]) { @@ -3947,6 +3956,7 @@ void TraitConfig::ClearChangesMask() Base::ClearChangesMask(CombatConfigFlags); Base::ClearChangesMask(LocalIdentifier); Base::ClearChangesMask(TraitSystemID); + Base::ClearChangesMask(VariationID); _changesMask.ResetAll(); } @@ -4822,6 +4832,7 @@ void ChallengeModeData::WriteCreate(ByteBuffer& data, Player const* owner, Playe data << int64(Unknown_1120_4); data << KeystoneOwnerGUID; data << LeaverGUID; + data << int64(InstanceAbandonVoteCooldown); data.WriteBits(IsActive, 1); data.WriteBits(HasRestrictions, 1); data.WriteBits(CanVoteAbandon, 1); @@ -4836,6 +4847,7 @@ void ChallengeModeData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl data << int64(Unknown_1120_4); data << KeystoneOwnerGUID; data << LeaverGUID; + data << int64(InstanceAbandonVoteCooldown); data.WriteBits(IsActive, 1); data.WriteBits(HasRestrictions, 1); data.WriteBits(CanVoteAbandon, 1); @@ -4850,6 +4862,7 @@ bool ChallengeModeData::operator==(ChallengeModeData const& right) const && Unknown_1120_4 == right.Unknown_1120_4 && KeystoneOwnerGUID == right.KeystoneOwnerGUID && LeaverGUID == right.LeaverGUID + && InstanceAbandonVoteCooldown == right.InstanceAbandonVoteCooldown && IsActive == right.IsActive && HasRestrictions == right.HasRestrictions && CanVoteAbandon == right.CanVoteAbandon; @@ -5038,7 +5051,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << int32(TransportServerTime); data << uint32(WeeklyRewardsPeriodSinceOrigin); data << int16(DEBUGSoulbindConduitRank); - data << uint32(TraitConfigs.size()); data << uint32(ActiveCombatTraitConfigID); data << uint32(CraftingOrders.size()); data << uint32(PersonalCraftingOrderCounts.size()); @@ -5196,6 +5208,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << *FrozenPerksVendorItem; Field_1410->WriteCreate(data, owner, receiver); data << *DungeonScore; + WriteMapFieldCreate(TraitConfigs, data, owner, receiver); for (uint32 i = 0; i < PvpInfo.size(); ++i) { PvpInfo[i].WriteCreate(data, owner, receiver); @@ -5204,10 +5217,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { CharacterRestrictions[i].WriteCreate(data, owner, receiver); } - for (uint32 i = 0; i < TraitConfigs.size(); ++i) - { - TraitConfigs[i].WriteCreate(data, owner, receiver); - } for (uint32 i = 0; i < CraftingOrders.size(); ++i) { CraftingOrders[i].WriteCreate(data, owner, receiver); @@ -5306,11 +5315,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data); } } - if (changesMask[43]) + if (changesMask[42]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[44]) + if (changesMask[43]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -5319,11 +5328,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[45]) + if (changesMask[44]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[46]) + if (changesMask[45]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -5332,11 +5341,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[47]) + if (changesMask[46]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[48]) + if (changesMask[47]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -5345,11 +5354,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[43]) + if (changesMask[42]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[44]) + if (changesMask[43]) { for (uint32 j = 0; j < ResearchSites[i].size(); ++j) { @@ -5361,11 +5370,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[45]) + if (changesMask[44]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[46]) + if (changesMask[45]) { for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j) { @@ -5377,11 +5386,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[47]) + if (changesMask[46]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[48]) + if (changesMask[47]) { for (uint32 j = 0; j < Research[i].size(); ++j) { @@ -5556,46 +5565,39 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo if (changesMask[34]) { if (!ignoreNestedChangesMask) - TraitConfigs.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data); - } - if (changesMask[35]) - { - if (!ignoreNestedChangesMask) CraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data); } - if (changesMask[36]) + if (changesMask[35]) { if (!ignoreNestedChangesMask) PersonalCraftingOrderCounts.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data); } - if (changesMask[37]) + if (changesMask[36]) { if (!ignoreNestedChangesMask) NpcCraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(NpcCraftingOrders.size(), data); } - if (changesMask[38]) + if (changesMask[37]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data); } - if (changesMask[39]) + if (changesMask[38]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data); } - if (changesMask[40]) + if (changesMask[39]) { if (!ignoreNestedChangesMask) TrackedCollectableSources.WriteUpdateMask(data); @@ -5849,7 +5851,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[36]) + if (changesMask[35]) { for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) { @@ -5859,7 +5861,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[37]) + if (changesMask[36]) { for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i) { @@ -5869,7 +5871,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[38]) + if (changesMask[37]) { for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { @@ -5879,7 +5881,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[39]) + if (changesMask[38]) { for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) { @@ -5889,7 +5891,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[40]) + if (changesMask[39]) { for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) { @@ -5903,14 +5905,14 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[32]) { - if (changesMask[41]) + if (changesMask[40]) { if (!ignoreNestedChangesMask) CharacterBankTabSettings.WriteUpdateMask(data, 3); else WriteCompleteDynamicFieldUpdateMask(CharacterBankTabSettings.size(), data, 3); } - if (changesMask[42]) + if (changesMask[41]) { if (!ignoreNestedChangesMask) AccountBankTabSettings.WriteUpdateMask(data, 3); @@ -5946,16 +5948,6 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { if (changesMask[34]) { - for (uint32 i = 0; i < TraitConfigs.size(); ++i) - { - if (TraitConfigs.HasChanged(i) || ignoreNestedChangesMask) - { - TraitConfigs[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[35]) - { for (uint32 i = 0; i < CraftingOrders.size(); ++i) { if (CraftingOrders.HasChanged(i) || ignoreNestedChangesMask) @@ -5964,7 +5956,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[41]) + if (changesMask[40]) { for (uint32 i = 0; i < CharacterBankTabSettings.size(); ++i) { @@ -5974,7 +5966,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[42]) + if (changesMask[41]) { for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i) { @@ -5984,337 +5976,337 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[49]) + if (changesMask[48]) { data << *FarsightObject; } - if (changesMask[50]) + if (changesMask[49]) { data << *SummonedBattlePetGUID; } - if (changesMask[51]) + if (changesMask[50]) { data << uint64(Coinage); } - if (changesMask[52]) + if (changesMask[51]) { data << uint64(AccountBankCoinage); } - if (changesMask[53]) + if (changesMask[52]) { data << int32(XP); } - if (changesMask[54]) + if (changesMask[53]) { data << int32(NextLevelXP); } - if (changesMask[55]) + if (changesMask[54]) { data << int32(TrialXP); } - if (changesMask[56]) + if (changesMask[55]) { Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[57]) + if (changesMask[56]) { data << int32(CharacterPoints); } - if (changesMask[58]) + if (changesMask[57]) { data << int32(MaxTalentTiers); } - if (changesMask[59]) + if (changesMask[58]) { data << uint32(TrackCreatureMask); } - if (changesMask[60]) + if (changesMask[59]) { data << float(MainhandExpertise); } - if (changesMask[61]) + if (changesMask[60]) { data << float(OffhandExpertise); } - if (changesMask[62]) + if (changesMask[61]) { data << float(RangedExpertise); } - if (changesMask[63]) + if (changesMask[62]) { data << float(CombatRatingExpertise); } - if (changesMask[64]) + if (changesMask[63]) { data << float(BlockPercentage); } - if (changesMask[65]) + if (changesMask[64]) { data << float(DodgePercentage); } - if (changesMask[66]) + if (changesMask[65]) { data << float(DodgePercentageFromAttribute); } - if (changesMask[67]) + if (changesMask[66]) { data << float(ParryPercentage); } - if (changesMask[68]) + if (changesMask[67]) { data << float(ParryPercentageFromAttribute); } - if (changesMask[69]) + if (changesMask[68]) { data << float(CritPercentage); } + if (changesMask[69]) + { + data << float(RangedCritPercentage); + } } if (changesMask[70]) { if (changesMask[71]) { - data << float(RangedCritPercentage); + data << float(OffhandCritPercentage); } if (changesMask[72]) { - data << float(OffhandCritPercentage); + data << float(SpellCritPercentage); } if (changesMask[73]) { - data << float(SpellCritPercentage); + data << int32(ShieldBlock); } if (changesMask[74]) { - data << int32(ShieldBlock); + data << float(ShieldBlockCritPercentage); } if (changesMask[75]) { - data << float(ShieldBlockCritPercentage); + data << float(Mastery); } if (changesMask[76]) { - data << float(Mastery); + data << float(Speed); } if (changesMask[77]) { - data << float(Speed); + data << float(Avoidance); } if (changesMask[78]) { - data << float(Avoidance); + data << float(Sturdiness); } if (changesMask[79]) { - data << float(Sturdiness); + data << int32(Versatility); } if (changesMask[80]) { - data << int32(Versatility); + data << float(VersatilityBonus); } if (changesMask[81]) { - data << float(VersatilityBonus); + data << float(PvpPowerDamage); } if (changesMask[82]) { - data << float(PvpPowerDamage); + data << float(PvpPowerHealing); } if (changesMask[83]) { - data << float(PvpPowerHealing); + BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[84]) { - BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(ModHealingDonePos); } if (changesMask[85]) { - data << int32(ModHealingDonePos); + data << float(ModHealingPercent); } if (changesMask[86]) { - data << float(ModHealingPercent); + data << float(ModPeriodicHealingDonePercent); } if (changesMask[87]) { - data << float(ModPeriodicHealingDonePercent); + data << float(ModSpellPowerPercent); } if (changesMask[88]) { - data << float(ModSpellPowerPercent); + data << float(ModResiliencePercent); } if (changesMask[89]) { - data << float(ModResiliencePercent); + data << float(OverrideSpellPowerByAPPercent); } if (changesMask[90]) { - data << float(OverrideSpellPowerByAPPercent); + data << float(OverrideAPBySpellPowerPercent); } if (changesMask[91]) { - data << float(OverrideAPBySpellPowerPercent); + data << int32(ModTargetResistance); } if (changesMask[92]) { - data << int32(ModTargetResistance); + data << int32(ModTargetPhysicalResistance); } if (changesMask[93]) { - data << int32(ModTargetPhysicalResistance); + data << uint32(LocalFlags); } if (changesMask[94]) { - data << uint32(LocalFlags); + data << uint8(GrantableLevels); } if (changesMask[95]) { - data << uint8(GrantableLevels); + data << uint8(MultiActionBars); } if (changesMask[96]) { - data << uint8(MultiActionBars); + data << uint8(LifetimeMaxRank); } if (changesMask[97]) { - data << uint8(LifetimeMaxRank); + data << uint8(NumRespecs); } if (changesMask[98]) { - data << uint8(NumRespecs); + data << uint32(PvpMedals); } if (changesMask[99]) { - data << uint32(PvpMedals); + data << uint16(TodayHonorableKills); } if (changesMask[100]) { - data << uint16(TodayHonorableKills); + data << uint16(YesterdayHonorableKills); } if (changesMask[101]) { - data << uint16(YesterdayHonorableKills); + data << uint32(LifetimeHonorableKills); } } if (changesMask[102]) { if (changesMask[103]) { - data << uint32(LifetimeHonorableKills); + data << int32(WatchedFactionIndex); } if (changesMask[104]) { - data << int32(WatchedFactionIndex); + data << int32(MaxLevel); } if (changesMask[105]) { - data << int32(MaxLevel); + data << int32(ScalingPlayerLevelDelta); } if (changesMask[106]) { - data << int32(ScalingPlayerLevelDelta); + data << int32(MaxCreatureScalingLevel); } if (changesMask[107]) { - data << int32(MaxCreatureScalingLevel); + data << int32(PetSpellPower); } if (changesMask[108]) { - data << int32(PetSpellPower); + data << float(UiHitModifier); } if (changesMask[109]) { - data << float(UiHitModifier); + data << float(UiSpellHitModifier); } if (changesMask[110]) { - data << float(UiSpellHitModifier); + data << int32(HomeRealmTimeOffset); } if (changesMask[111]) { - data << int32(HomeRealmTimeOffset); + data << float(ModPetHaste); } if (changesMask[112]) { - data << float(ModPetHaste); + data << int8(JailersTowerLevelMax); } if (changesMask[113]) { - data << int8(JailersTowerLevelMax); + data << int8(JailersTowerLevel); } if (changesMask[114]) { - data << int8(JailersTowerLevel); + data << uint8(LocalRegenFlags); } if (changesMask[115]) { - data << uint8(LocalRegenFlags); + data << uint8(AuraVision); } if (changesMask[116]) { - data << uint8(AuraVision); + data << uint8(NumBackpackSlots); } if (changesMask[117]) { - data << uint8(NumBackpackSlots); + data << int32(OverrideSpellsID); } if (changesMask[118]) { - data << int32(OverrideSpellsID); + data << uint16(LootSpecID); } if (changesMask[119]) { - data << uint16(LootSpecID); + data << uint32(OverrideZonePVPType); } if (changesMask[120]) { - data << uint32(OverrideZonePVPType); + data << int32(Honor); } if (changesMask[121]) { - data << int32(Honor); + data << int32(HonorNextLevel); } if (changesMask[122]) { - data << int32(HonorNextLevel); + data << int32(PerksProgramCurrency); } if (changesMask[123]) { - data << int32(PerksProgramCurrency); + data << uint8(NumBankSlots); } if (changesMask[124]) { - data << uint8(NumBankSlots); + data << uint8(NumCharacterBankTabs); } if (changesMask[125]) { - data << uint8(NumCharacterBankTabs); + data << uint8(NumAccountBankTabs); } - if (changesMask[126]) + if (changesMask[130]) { - data << uint8(NumAccountBankTabs); + data << int32(UiChromieTimeExpansionID); } if (changesMask[131]) { - data << int32(UiChromieTimeExpansionID); + data << int32(TimerunningSeasonID); } if (changesMask[132]) { - data << int32(TimerunningSeasonID); + data << int32(TransportServerTime); } if (changesMask[133]) { - data << int32(TransportServerTime); + data << uint32(WeeklyRewardsPeriodSinceOrigin); } } if (changesMask[134]) { if (changesMask[135]) { - data << uint32(WeeklyRewardsPeriodSinceOrigin); - } - if (changesMask[136]) - { data << int16(DEBUGSoulbindConduitRank); } if (changesMask[138]) @@ -6364,32 +6356,36 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[102]) { - if (changesMask[127]) + if (changesMask[126]) { ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[129]) + if (changesMask[128]) { if (QuestSession.has_value()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[128]) + if (changesMask[127]) { data << *FrozenPerksVendorItem; } - if (changesMask[130]) + if (changesMask[129]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } if (changesMask[134]) { - if (changesMask[137]) + if (changesMask[136]) { data << *DungeonScore; } + if (changesMask[137]) + { + WriteMapFieldUpdate(TraitConfigs, data, ignoreNestedChangesMask, owner, receiver); + } if (changesMask[145]) { if (PetStable.has_value()) @@ -6584,7 +6580,6 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(TrackedCollectableSources); Base::ClearChangesMask(PvpInfo); Base::ClearChangesMask(CharacterRestrictions); - Base::ClearChangesMask(TraitConfigs); Base::ClearChangesMask(CraftingOrders); Base::ClearChangesMask(CharacterBankTabSettings); Base::ClearChangesMask(AccountBankTabSettings); @@ -6674,6 +6669,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(WeeklyRewardsPeriodSinceOrigin); Base::ClearChangesMask(DEBUGSoulbindConduitRank); Base::ClearChangesMask(DungeonScore); + Base::ClearChangesMask(TraitConfigs); Base::ClearChangesMask(ActiveCombatTraitConfigID); Base::ClearChangesMask(ItemUpgradeHighOnehandWeaponItemID); Base::ClearChangesMask(ItemUpgradeHighFingerItemID); @@ -7240,10 +7236,15 @@ void ScaleCurve::ClearChangesMask() void VisualAnim::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const { - data << uint32(AnimationDataID); + data.WriteBits(AnimationDataID.has_value(), 1); + data.WriteBit(IsDecay); + data.FlushBits(); data << uint32(AnimKitID); data << uint32(AnimProgress); - data.WriteBit(IsDecay); + if (AnimationDataID.has_value()) + { + data << int16(AnimationDataID); + } data.FlushBits(); } @@ -7261,14 +7262,11 @@ void VisualAnim::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigg { data.WriteBit(IsDecay); } + data.WriteBits(AnimationDataID.has_value(), 1); } data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) - { - data << uint32(AnimationDataID); - } if (changesMask[3]) { data << uint32(AnimKitID); @@ -7277,6 +7275,13 @@ void VisualAnim::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigg { data << uint32(AnimProgress); } + if (changesMask[2]) + { + if (AnimationDataID.has_value()) + { + data << int16(AnimationDataID); + } + } } data.FlushBits(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index b4acb53e749..aad04046fb0 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -455,9 +455,9 @@ struct ChrCustomizationChoice : public IsUpdateFieldStructureTag struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30> { - UpdateField<int64, 0, 1> EndTime; - UpdateField<int32, 0, 2> QuestID; - UpdateField<uint32, 0, 3> StateFlags; + UpdateField<int32, 0, 1> QuestID; + UpdateField<uint16, 0, 2> StateFlags; + UpdateField<int64, 0, 3> EndTime; UpdateField<uint32, 0, 4> ObjectiveFlags; UpdateFieldArray<int16, 24, 5, 6> ObjectiveProgress; @@ -846,7 +846,7 @@ struct TraitSubTreeCache : public IsUpdateFieldStructureTag bool operator!=(TraitSubTreeCache const& right) const { return !(*this == right); } }; -struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<14> +struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<15> { DynamicUpdateField<UF::TraitEntry, 0, 1> Entries; DynamicUpdateField<UF::TraitSubTreeCache, 0, 2> SubTrees; @@ -858,6 +858,7 @@ struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<14> UpdateField<int32, 8, 10> CombatConfigFlags; UpdateField<int32, 8, 11> LocalIdentifier; UpdateField<int32, 12, 13> TraitSystemID; + UpdateField<int32, 12, 14> VariationID; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -1069,6 +1070,7 @@ struct ChallengeModeData : public IsUpdateFieldStructureTag int64 Unknown_1120_4; ObjectGuid KeystoneOwnerGUID; ObjectGuid LeaverGUID; + int64 InstanceAbandonVoteCooldown; uint32 IsActive; uint32 HasRestrictions; uint32 CanVoteAbandon; @@ -1097,9 +1099,9 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<bool, 0, 4> SortBagsRightToLeft; UpdateField<bool, 0, 5> InsertItemsLeftToRight; UpdateField<bool, 0, 6> HasPerksProgramPendingReward; - UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 43, 44> ResearchSites; - UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 45, 46> ResearchSiteProgress; - UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 47, 48> Research; + UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 42, 43> ResearchSites; + UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 44, 45> ResearchSiteProgress; + UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 46, 47> Research; DynamicUpdateField<uint64, 0, 7> KnownTitles; DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements; DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements; @@ -1124,103 +1126,103 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas DynamicUpdateField<UF::ReplayedQuest, 0, 30> ReplayedQuests; DynamicUpdateField<UF::QuestLog, 0, 31> TaskQuests; DynamicUpdateField<int32, 32, 33> DisabledSpells; - DynamicUpdateField<UF::PersonalCraftingOrderCount, 32, 36> PersonalCraftingOrderCounts; - DynamicUpdateField<UF::NPCCraftingOrderInfo, 32, 37> NpcCraftingOrders; - DynamicUpdateField<UF::CategoryCooldownMod, 32, 38> CategoryCooldownMods; - DynamicUpdateField<UF::WeeklySpellUse, 32, 39> WeeklySpellUses; - DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 40> TrackedCollectableSources; + DynamicUpdateField<UF::PersonalCraftingOrderCount, 32, 35> PersonalCraftingOrderCounts; + DynamicUpdateField<UF::NPCCraftingOrderInfo, 32, 36> NpcCraftingOrders; + DynamicUpdateField<UF::CategoryCooldownMod, 32, 37> CategoryCooldownMods; + DynamicUpdateField<UF::WeeklySpellUse, 32, 38> WeeklySpellUses; + DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 39> TrackedCollectableSources; DynamicUpdateField<UF::PVPInfo, 0, 10> PvpInfo; DynamicUpdateField<UF::CharacterRestriction, 0, 24> CharacterRestrictions; - DynamicUpdateField<UF::TraitConfig, 32, 34> TraitConfigs; - DynamicUpdateField<UF::CraftingOrder, 32, 35> CraftingOrders; - DynamicUpdateField<UF::BankTabSettings, 32, 41> CharacterBankTabSettings; - DynamicUpdateField<UF::BankTabSettings, 32, 42> AccountBankTabSettings; - UpdateField<ObjectGuid, 32, 49> FarsightObject; - UpdateField<ObjectGuid, 32, 50> SummonedBattlePetGUID; - UpdateField<uint64, 32, 51> Coinage; - UpdateField<uint64, 32, 52> AccountBankCoinage; - UpdateField<int32, 32, 53> XP; - UpdateField<int32, 32, 54> NextLevelXP; - UpdateField<int32, 32, 55> TrialXP; - UpdateField<UF::SkillInfo, 32, 56> Skill; - UpdateField<int32, 32, 57> CharacterPoints; - UpdateField<int32, 32, 58> MaxTalentTiers; - UpdateField<uint32, 32, 59> TrackCreatureMask; - UpdateField<float, 32, 60> MainhandExpertise; - UpdateField<float, 32, 61> OffhandExpertise; - UpdateField<float, 32, 62> RangedExpertise; - UpdateField<float, 32, 63> CombatRatingExpertise; - UpdateField<float, 32, 64> BlockPercentage; - UpdateField<float, 32, 65> DodgePercentage; - UpdateField<float, 32, 66> DodgePercentageFromAttribute; - UpdateField<float, 32, 67> ParryPercentage; - UpdateField<float, 32, 68> ParryPercentageFromAttribute; - UpdateField<float, 32, 69> CritPercentage; - UpdateField<float, 70, 71> RangedCritPercentage; - UpdateField<float, 70, 72> OffhandCritPercentage; - UpdateField<float, 70, 73> SpellCritPercentage; - UpdateField<int32, 70, 74> ShieldBlock; - UpdateField<float, 70, 75> ShieldBlockCritPercentage; - UpdateField<float, 70, 76> Mastery; - UpdateField<float, 70, 77> Speed; - UpdateField<float, 70, 78> Avoidance; - UpdateField<float, 70, 79> Sturdiness; - UpdateField<int32, 70, 80> Versatility; - UpdateField<float, 70, 81> VersatilityBonus; - UpdateField<float, 70, 82> PvpPowerDamage; - UpdateField<float, 70, 83> PvpPowerHealing; - UpdateField<UF::BitVectors, 70, 84> BitVectors; - UpdateField<int32, 70, 85> ModHealingDonePos; - UpdateField<float, 70, 86> ModHealingPercent; - UpdateField<float, 70, 87> ModPeriodicHealingDonePercent; - UpdateField<float, 70, 88> ModSpellPowerPercent; - UpdateField<float, 70, 89> ModResiliencePercent; - UpdateField<float, 70, 90> OverrideSpellPowerByAPPercent; - UpdateField<float, 70, 91> OverrideAPBySpellPowerPercent; - UpdateField<int32, 70, 92> ModTargetResistance; - UpdateField<int32, 70, 93> ModTargetPhysicalResistance; - UpdateField<uint32, 70, 94> LocalFlags; - UpdateField<uint8, 70, 95> GrantableLevels; - UpdateField<uint8, 70, 96> MultiActionBars; - UpdateField<uint8, 70, 97> LifetimeMaxRank; - UpdateField<uint8, 70, 98> NumRespecs; - UpdateField<uint32, 70, 99> PvpMedals; - UpdateField<uint16, 70, 100> TodayHonorableKills; - UpdateField<uint16, 70, 101> YesterdayHonorableKills; - UpdateField<uint32, 102, 103> LifetimeHonorableKills; - UpdateField<int32, 102, 104> WatchedFactionIndex; - UpdateField<int32, 102, 105> MaxLevel; - UpdateField<int32, 102, 106> ScalingPlayerLevelDelta; - UpdateField<int32, 102, 107> MaxCreatureScalingLevel; - UpdateField<int32, 102, 108> PetSpellPower; - UpdateField<float, 102, 109> UiHitModifier; - UpdateField<float, 102, 110> UiSpellHitModifier; - UpdateField<int32, 102, 111> HomeRealmTimeOffset; - UpdateField<float, 102, 112> ModPetHaste; - UpdateField<int8, 102, 113> JailersTowerLevelMax; - UpdateField<int8, 102, 114> JailersTowerLevel; - UpdateField<uint8, 102, 115> LocalRegenFlags; - UpdateField<uint8, 102, 116> AuraVision; - UpdateField<uint8, 102, 117> NumBackpackSlots; - UpdateField<int32, 102, 118> OverrideSpellsID; - UpdateField<uint16, 102, 119> LootSpecID; - UpdateField<uint32, 102, 120> OverrideZonePVPType; - UpdateField<int32, 102, 121> Honor; - UpdateField<int32, 102, 122> HonorNextLevel; - UpdateField<int32, 102, 123> PerksProgramCurrency; - UpdateField<uint8, 102, 124> NumBankSlots; - UpdateField<uint8, 102, 125> NumCharacterBankTabs; - UpdateField<uint8, 102, 126> NumAccountBankTabs; - UpdateField<UF::ResearchHistory, 102, 127> ResearchHistory; - UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 128> FrozenPerksVendorItem; - UpdateField<UF::ActivePlayerUnk901, 102, 130> Field_1410; - OptionalUpdateField<UF::QuestSession, 102, 129> QuestSession; - UpdateField<int32, 102, 131> UiChromieTimeExpansionID; - UpdateField<int32, 102, 132> TimerunningSeasonID; - UpdateField<int32, 102, 133> TransportServerTime; - UpdateField<uint32, 134, 135> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 134, 136> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 134, 137> DungeonScore; + DynamicUpdateField<UF::CraftingOrder, 32, 34> CraftingOrders; + DynamicUpdateField<UF::BankTabSettings, 32, 40> CharacterBankTabSettings; + DynamicUpdateField<UF::BankTabSettings, 32, 41> AccountBankTabSettings; + UpdateField<ObjectGuid, 32, 48> FarsightObject; + UpdateField<ObjectGuid, 32, 49> SummonedBattlePetGUID; + UpdateField<uint64, 32, 50> Coinage; + UpdateField<uint64, 32, 51> AccountBankCoinage; + UpdateField<int32, 32, 52> XP; + UpdateField<int32, 32, 53> NextLevelXP; + UpdateField<int32, 32, 54> TrialXP; + UpdateField<UF::SkillInfo, 32, 55> Skill; + UpdateField<int32, 32, 56> CharacterPoints; + UpdateField<int32, 32, 57> MaxTalentTiers; + UpdateField<uint32, 32, 58> TrackCreatureMask; + UpdateField<float, 32, 59> MainhandExpertise; + UpdateField<float, 32, 60> OffhandExpertise; + UpdateField<float, 32, 61> RangedExpertise; + UpdateField<float, 32, 62> CombatRatingExpertise; + UpdateField<float, 32, 63> BlockPercentage; + UpdateField<float, 32, 64> DodgePercentage; + UpdateField<float, 32, 65> DodgePercentageFromAttribute; + UpdateField<float, 32, 66> ParryPercentage; + UpdateField<float, 32, 67> ParryPercentageFromAttribute; + UpdateField<float, 32, 68> CritPercentage; + UpdateField<float, 32, 69> RangedCritPercentage; + UpdateField<float, 70, 71> OffhandCritPercentage; + UpdateField<float, 70, 72> SpellCritPercentage; + UpdateField<int32, 70, 73> ShieldBlock; + UpdateField<float, 70, 74> ShieldBlockCritPercentage; + UpdateField<float, 70, 75> Mastery; + UpdateField<float, 70, 76> Speed; + UpdateField<float, 70, 77> Avoidance; + UpdateField<float, 70, 78> Sturdiness; + UpdateField<int32, 70, 79> Versatility; + UpdateField<float, 70, 80> VersatilityBonus; + UpdateField<float, 70, 81> PvpPowerDamage; + UpdateField<float, 70, 82> PvpPowerHealing; + UpdateField<UF::BitVectors, 70, 83> BitVectors; + UpdateField<int32, 70, 84> ModHealingDonePos; + UpdateField<float, 70, 85> ModHealingPercent; + UpdateField<float, 70, 86> ModPeriodicHealingDonePercent; + UpdateField<float, 70, 87> ModSpellPowerPercent; + UpdateField<float, 70, 88> ModResiliencePercent; + UpdateField<float, 70, 89> OverrideSpellPowerByAPPercent; + UpdateField<float, 70, 90> OverrideAPBySpellPowerPercent; + UpdateField<int32, 70, 91> ModTargetResistance; + UpdateField<int32, 70, 92> ModTargetPhysicalResistance; + UpdateField<uint32, 70, 93> LocalFlags; + UpdateField<uint8, 70, 94> GrantableLevels; + UpdateField<uint8, 70, 95> MultiActionBars; + UpdateField<uint8, 70, 96> LifetimeMaxRank; + UpdateField<uint8, 70, 97> NumRespecs; + UpdateField<uint32, 70, 98> PvpMedals; + UpdateField<uint16, 70, 99> TodayHonorableKills; + UpdateField<uint16, 70, 100> YesterdayHonorableKills; + UpdateField<uint32, 70, 101> LifetimeHonorableKills; + UpdateField<int32, 102, 103> WatchedFactionIndex; + UpdateField<int32, 102, 104> MaxLevel; + UpdateField<int32, 102, 105> ScalingPlayerLevelDelta; + UpdateField<int32, 102, 106> MaxCreatureScalingLevel; + UpdateField<int32, 102, 107> PetSpellPower; + UpdateField<float, 102, 108> UiHitModifier; + UpdateField<float, 102, 109> UiSpellHitModifier; + UpdateField<int32, 102, 110> HomeRealmTimeOffset; + UpdateField<float, 102, 111> ModPetHaste; + UpdateField<int8, 102, 112> JailersTowerLevelMax; + UpdateField<int8, 102, 113> JailersTowerLevel; + UpdateField<uint8, 102, 114> LocalRegenFlags; + UpdateField<uint8, 102, 115> AuraVision; + UpdateField<uint8, 102, 116> NumBackpackSlots; + UpdateField<int32, 102, 117> OverrideSpellsID; + UpdateField<uint16, 102, 118> LootSpecID; + UpdateField<uint32, 102, 119> OverrideZonePVPType; + UpdateField<int32, 102, 120> Honor; + UpdateField<int32, 102, 121> HonorNextLevel; + UpdateField<int32, 102, 122> PerksProgramCurrency; + UpdateField<uint8, 102, 123> NumBankSlots; + UpdateField<uint8, 102, 124> NumCharacterBankTabs; + UpdateField<uint8, 102, 125> NumAccountBankTabs; + UpdateField<UF::ResearchHistory, 102, 126> ResearchHistory; + UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 127> FrozenPerksVendorItem; + UpdateField<UF::ActivePlayerUnk901, 102, 129> Field_1410; + OptionalUpdateField<UF::QuestSession, 102, 128> QuestSession; + UpdateField<int32, 102, 130> UiChromieTimeExpansionID; + UpdateField<int32, 102, 131> TimerunningSeasonID; + UpdateField<int32, 102, 132> TransportServerTime; + UpdateField<uint32, 102, 133> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 134, 135> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 134, 136> DungeonScore; + MapUpdateField<int32, UF::TraitConfig, 134, 137> TraitConfigs; UpdateField<uint32, 134, 138> ActiveCombatTraitConfigID; UpdateField<int32, 134, 139> ItemUpgradeHighOnehandWeaponItemID; UpdateField<int32, 134, 140> ItemUpgradeHighFingerItemID; @@ -1363,7 +1365,7 @@ struct ScaleCurve : public IsUpdateFieldStructureTag, public HasChangesMask<7> struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5> { UpdateField<bool, 0, 1> IsDecay; - UpdateField<uint32, 0, 2> AnimationDataID; + OptionalUpdateField<int16, 0, 2> AnimationDataID; UpdateField<uint32, 0, 3> AnimKitID; UpdateField<uint32, 0, 4> AnimProgress; diff --git a/src/server/game/Entities/Object/Updates/UpdateMask.h b/src/server/game/Entities/Object/Updates/UpdateMask.h index 4ccb7af8fbb..3071632d603 100644 --- a/src/server/game/Entities/Object/Updates/UpdateMask.h +++ b/src/server/game/Entities/Object/Updates/UpdateMask.h @@ -97,15 +97,15 @@ public: constexpr void SetAll() { std::memset(_blocksMask.data(), 0xFF, _blocksMask.size() * sizeof(typename decltype(_blocksMask)::value_type)); - if constexpr (BlocksMaskCount % 32) + if constexpr (BlockCount % 32) { - constexpr uint32 unused = 32 - (BlocksMaskCount % 32); + constexpr uint32 unused = 32 - (BlockCount % 32); _blocksMask.back() &= (0xFFFFFFFF >> unused); } std::memset(_blocks.data(), 0xFF, _blocks.size() * sizeof(typename decltype(_blocks)::value_type)); - if constexpr (BlockCount % 32) + if constexpr (Bits % 32) { - constexpr uint32 unused = 32 - (BlockCount % 32); + constexpr uint32 unused = 32 - (Bits % 32); _blocks.back() &= (0xFFFFFFFF >> unused); } } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index fbc391ceff6..f2b50b5c68e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -20610,16 +20610,16 @@ void Player::_SaveActions(CharacterDatabaseTransaction trans) if (!traitConfig) return 0; - int32 usedSavedTraitConfigIndex = m_activePlayerData->TraitConfigs.FindIndexIf([localIdent = *traitConfig->LocalIdentifier](UF::TraitConfig const& savedConfig) + int32 const* usedSavedTraitConfigId = m_activePlayerData->TraitConfigs.FindIf([localIdent = *traitConfig->LocalIdentifier](UF::TraitConfig const& savedConfig) { return static_cast<TraitConfigType>(*savedConfig.Type) == TraitConfigType::Combat && (static_cast<TraitCombatConfigFlags>(*savedConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) == TraitCombatConfigFlags::None && (static_cast<TraitCombatConfigFlags>(*savedConfig.CombatConfigFlags) & TraitCombatConfigFlags::SharedActionBars) == TraitCombatConfigFlags::None && savedConfig.LocalIdentifier == localIdent; - }); + }).first; - if (usedSavedTraitConfigIndex >= 0) - return m_activePlayerData->TraitConfigs[usedSavedTraitConfigIndex].ID; + if (usedSavedTraitConfigId) + return *usedSavedTraitConfigId; return 0; }(); @@ -28079,8 +28079,8 @@ void Player::_LoadTraits(PreparedQueryResult configsResult, PreparedQueryResult if (configsResult) { - // 0 1 2 3 4 5 6 7 - // SELECT traitConfigId, type, chrSpecializationId, combatConfigFlags, localIdentifier, skillLineId, traitSystemId, `name` FROM character_trait_config WHERE guid = ? + // 0 1 2 3 4 5 6 7 8 + // SELECT traitConfigId, type, chrSpecializationId, combatConfigFlags, localIdentifier, skillLineId, traitSystemId, variationId, `name` FROM character_trait_config WHERE guid = ? do { Field* fields = configsResult->Fetch(); @@ -28099,12 +28099,13 @@ void Player::_LoadTraits(PreparedQueryResult configsResult, PreparedQueryResult break; case TraitConfigType::Generic: traitConfig.TraitSystemID = fields[6].GetInt32(); + traitConfig.VariationID = fields[7].GetInt32(); break; default: break; } - traitConfig.Name = fields[7].GetString(); + traitConfig.Name = fields[8].GetStringView(); for (UF::TraitEntry const& grantedEntry : TraitMgr::GetGrantedTraitEntriesForConfig(traitConfig, this)) traitConfig.Entries.emplace_back(grantedEntry); @@ -28149,23 +28150,23 @@ void Player::_LoadTraits(PreparedQueryResult configsResult, PreparedQueryResult auto hasConfigForSpec = [&](int32 specId) { - return m_activePlayerData->TraitConfigs.FindIndexIf([=](UF::TraitConfig const& traitConfig) + return m_activePlayerData->TraitConfigs.FindIf([=](UF::TraitConfig const& traitConfig) { return traitConfig.Type == AsUnderlyingType(TraitConfigType::Combat) && traitConfig.ChrSpecializationID == specId && traitConfig.CombatConfigFlags & AsUnderlyingType(TraitCombatConfigFlags::ActiveForSpec); - }) >= 0; + }).first != nullptr; }; auto findFreeLocalIdentifier = [&](int32 specId) { int32 index = 1; - while (m_activePlayerData->TraitConfigs.FindIndexIf([specId, index](UF::TraitConfig const& traitConfig) + while (m_activePlayerData->TraitConfigs.FindIf([specId, index](UF::TraitConfig const& traitConfig) { return traitConfig.Type == AsUnderlyingType(TraitConfigType::Combat) && traitConfig.ChrSpecializationID == specId && traitConfig.LocalIdentifier == index; - }) >= 0) + }).first) ++index; return index; @@ -28189,39 +28190,38 @@ void Player::_LoadTraits(PreparedQueryResult configsResult, PreparedQueryResult } } - int32 activeConfig = m_activePlayerData->TraitConfigs.FindIndexIf([&](UF::TraitConfig const& traitConfig) + UF::TraitConfig const* activeTraitConfig = m_activePlayerData->TraitConfigs.FindIf([&](UF::TraitConfig const& traitConfig) { return traitConfig.Type == AsUnderlyingType(TraitConfigType::Combat) && traitConfig.ChrSpecializationID == int32(GetPrimarySpecialization()) && traitConfig.CombatConfigFlags & AsUnderlyingType(TraitCombatConfigFlags::ActiveForSpec); - }); + }).second; - if (activeConfig >= 0) + if (activeTraitConfig) { - UF::TraitConfig const& activeTraitConfig = m_activePlayerData->TraitConfigs[activeConfig]; - SetActiveCombatTraitConfigID(activeTraitConfig.ID); - int32 activeSubTree = activeTraitConfig.SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; }); + SetActiveCombatTraitConfigID(activeTraitConfig->ID); + int32 activeSubTree = activeTraitConfig->SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; }); if (activeSubTree >= 0) - SetCurrentCombatTraitConfigSubTreeID(activeTraitConfig.SubTrees[activeSubTree].TraitSubTreeID); + SetCurrentCombatTraitConfigSubTreeID(activeTraitConfig->SubTrees[activeSubTree].TraitSubTreeID); } - for (UF::TraitConfig const& traitConfig : m_activePlayerData->TraitConfigs) + for (auto const& [id, traitConfig] : m_activePlayerData->TraitConfigs) { - switch (static_cast<TraitConfigType>(*traitConfig.Type)) + switch (static_cast<TraitConfigType>(*traitConfig.value.Type)) { case TraitConfigType::Combat: - if (traitConfig.ID != int32(*m_activePlayerData->ActiveCombatTraitConfigID)) + if (traitConfig.value.ID != int32(*m_activePlayerData->ActiveCombatTraitConfigID)) continue; break; case TraitConfigType::Profession: - if (!HasSkill(traitConfig.SkillLineID)) + if (!HasSkill(traitConfig.value.SkillLineID)) continue; break; default: break; } - ApplyTraitConfig(traitConfig.ID, true); + ApplyTraitConfig(id, true); } } @@ -28301,6 +28301,7 @@ void Player::_SaveTraits(CharacterDatabaseTransaction trans) stmt->setInt32(5, traitConfig->LocalIdentifier); stmt->setNull(6); stmt->setNull(7); + stmt->setNull(8); break; case TraitConfigType::Profession: stmt->setNull(3); @@ -28308,6 +28309,7 @@ void Player::_SaveTraits(CharacterDatabaseTransaction trans) stmt->setNull(5); stmt->setInt32(6, traitConfig->SkillLineID); stmt->setNull(7); + stmt->setNull(8); break; case TraitConfigType::Generic: stmt->setNull(3); @@ -28315,12 +28317,13 @@ void Player::_SaveTraits(CharacterDatabaseTransaction trans) stmt->setNull(5); stmt->setNull(6); stmt->setInt32(7, traitConfig->TraitSystemID); + stmt->setInt32(8, traitConfig->VariationID); break; default: break; } - stmt->setString(8, *traitConfig->Name); + stmt->setString(9, *traitConfig->Name); trans->Append(stmt); for (UF::TraitEntry const& traitEntry : traitConfig->Entries) @@ -28466,19 +28469,18 @@ void Player::ActivateTalentGroup(ChrSpecializationEntry const* spec) SetActiveTalentGroup(spec->OrderIndex); SetPrimarySpecialization(spec->ID); - int32 specTraitConfigIndex = m_activePlayerData->TraitConfigs.FindIndexIf([spec](UF::TraitConfig const& traitConfig) + UF::TraitConfig const* specTraitConfig = m_activePlayerData->TraitConfigs.FindIf([spec](UF::TraitConfig const& traitConfig) { return static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat && traitConfig.ChrSpecializationID == int32(spec->ID) && (static_cast<TraitCombatConfigFlags>(*traitConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) != TraitCombatConfigFlags::None; - }); - if (specTraitConfigIndex >= 0) + }).second; + if (specTraitConfig) { - UF::TraitConfig const& activeTraitConfig = m_activePlayerData->TraitConfigs[specTraitConfigIndex]; - SetActiveCombatTraitConfigID(activeTraitConfig.ID); - int32 activeSubTree = activeTraitConfig.SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; }); + SetActiveCombatTraitConfigID(specTraitConfig->ID); + int32 activeSubTree = specTraitConfig->SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; }); if (activeSubTree >= 0) - SetCurrentCombatTraitConfigSubTreeID(activeTraitConfig.SubTrees[activeSubTree].TraitSubTreeID); + SetCurrentCombatTraitConfigSubTreeID(specTraitConfig->SubTrees[activeSubTree].TraitSubTreeID); else SetCurrentCombatTraitConfigSubTreeID(0); } @@ -28599,16 +28601,16 @@ void Player::StartLoadingActionButtons(std::function<void()>&& callback /*= null if (!traitConfig) return 0; - int32 usedSavedTraitConfigIndex = m_activePlayerData->TraitConfigs.FindIndexIf([localIdent = *traitConfig->LocalIdentifier](UF::TraitConfig const& savedConfig) + int32 const* usedSavedTraitConfigId = m_activePlayerData->TraitConfigs.FindIf([localIdent = *traitConfig->LocalIdentifier](UF::TraitConfig const& savedConfig) { return static_cast<TraitConfigType>(*savedConfig.Type) == TraitConfigType::Combat && (static_cast<TraitCombatConfigFlags>(*savedConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) == TraitCombatConfigFlags::None && (static_cast<TraitCombatConfigFlags>(*savedConfig.CombatConfigFlags) & TraitCombatConfigFlags::SharedActionBars) == TraitCombatConfigFlags::None && savedConfig.LocalIdentifier == localIdent; - }); + }).first; - if (usedSavedTraitConfigIndex >= 0) - return m_activePlayerData->TraitConfigs[usedSavedTraitConfigIndex].ID; + if (usedSavedTraitConfigId) + return *usedSavedTraitConfigId; return 0; }(); @@ -28647,7 +28649,7 @@ void Player::CreateTraitConfig(WorldPackets::Traits::TraitConfig& traitConfig) uint32 configId = TraitMgr::GenerateNewTraitConfigId(); auto hasConfigId = [&](int32 id) { - return m_activePlayerData->TraitConfigs.FindIndexIf([id](UF::TraitConfig const& config) { return config.ID == id; }) >= 0; + return m_activePlayerData->TraitConfigs.Get(id) != nullptr; }; while (hasConfigId(configId)) @@ -28655,18 +28657,18 @@ void Player::CreateTraitConfig(WorldPackets::Traits::TraitConfig& traitConfig) traitConfig.ID = configId; - int32 traitConfigIndex = m_activePlayerData->TraitConfigs.size(); AddTraitConfig(traitConfig); + auto entrySetter = m_values.ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs, configId) + .ModifyValue(&UF::TraitConfig::Entries); for (UF::TraitEntry const& grantedEntry : TraitMgr::GetGrantedTraitEntriesForConfig(traitConfig, this)) { - auto entryItr = std::find_if(traitConfig.Entries.begin(), traitConfig.Entries.end(), + auto entryItr = std::ranges::find_if(traitConfig.Entries, [&](WorldPackets::Traits::TraitEntry const& entry) { return entry.TraitNodeID == grantedEntry.TraitNodeID && entry.TraitNodeEntryID == grantedEntry.TraitNodeEntryID; }); if (entryItr == traitConfig.Entries.end()) - AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, traitConfigIndex) - .ModifyValue(&UF::TraitConfig::Entries)) = grantedEntry; + AddDynamicUpdateFieldValue(entrySetter) = grantedEntry; } m_traitConfigStates[configId] = PLAYERSPELL_CHANGED; @@ -28674,15 +28676,15 @@ void Player::CreateTraitConfig(WorldPackets::Traits::TraitConfig& traitConfig) void Player::AddTraitConfig(WorldPackets::Traits::TraitConfig const& traitConfig) { - auto setter = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TraitConfigs)); - setter.ModifyValue(&UF::TraitConfig::ID).SetValue(traitConfig.ID); - setter.ModifyValue(&UF::TraitConfig::Name).SetValue(traitConfig.Name); - setter.ModifyValue(&UF::TraitConfig::Type).SetValue(AsUnderlyingType(traitConfig.Type)); - setter.ModifyValue(&UF::TraitConfig::SkillLineID).SetValue(traitConfig.SkillLineID);; - setter.ModifyValue(&UF::TraitConfig::ChrSpecializationID).SetValue(traitConfig.ChrSpecializationID); - setter.ModifyValue(&UF::TraitConfig::CombatConfigFlags).SetValue(AsUnderlyingType(traitConfig.CombatConfigFlags)); - setter.ModifyValue(&UF::TraitConfig::LocalIdentifier).SetValue(traitConfig.LocalIdentifier); - setter.ModifyValue(&UF::TraitConfig::TraitSystemID).SetValue(traitConfig.TraitSystemID); + auto setter = m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TraitConfigs, traitConfig.ID); + SetUpdateFieldValue(setter.ModifyValue(&UF::TraitConfig::ID), traitConfig.ID); + SetUpdateFieldValue(setter.ModifyValue(&UF::TraitConfig::Name), traitConfig.Name); + SetUpdateFieldValue(setter.ModifyValue(&UF::TraitConfig::Type), AsUnderlyingType(traitConfig.Type)); + SetUpdateFieldValue(setter.ModifyValue(&UF::TraitConfig::SkillLineID), traitConfig.SkillLineID); + SetUpdateFieldValue(setter.ModifyValue(&UF::TraitConfig::ChrSpecializationID), traitConfig.ChrSpecializationID); + SetUpdateFieldValue(setter.ModifyValue(&UF::TraitConfig::CombatConfigFlags), AsUnderlyingType(traitConfig.CombatConfigFlags)); + SetUpdateFieldValue(setter.ModifyValue(&UF::TraitConfig::LocalIdentifier), traitConfig.LocalIdentifier); + SetUpdateFieldValue(setter.ModifyValue(&UF::TraitConfig::TraitSystemID), traitConfig.TraitSystemID); for (WorldPackets::Traits::TraitEntry const& traitEntry : traitConfig.Entries) { @@ -28712,17 +28714,13 @@ void Player::AddTraitConfig(WorldPackets::Traits::TraitConfig const& traitConfig UF::TraitConfig const* Player::GetTraitConfig(int32 configId) const { - int32 index = m_activePlayerData->TraitConfigs.FindIndexIf([configId](UF::TraitConfig const& config) { return config.ID == configId; }); - if (index < 0) - return nullptr; - - return &m_activePlayerData->TraitConfigs[index]; + return m_activePlayerData->TraitConfigs.Get(configId); } void Player::UpdateTraitConfig(WorldPackets::Traits::TraitConfig&& newConfig, int32 savedConfigId, bool withCastTime) { - int32 index = m_activePlayerData->TraitConfigs.FindIndexIf([&](UF::TraitConfig const& config) { return config.ID == newConfig.ID; }); - if (index < 0) + UF::TraitConfig const* oldConfig = m_activePlayerData->TraitConfigs.Get(newConfig.ID); + if (!oldConfig) return; if (withCastTime) @@ -28733,14 +28731,14 @@ void Player::UpdateTraitConfig(WorldPackets::Traits::TraitConfig&& newConfig, in bool isActiveConfig = true; bool loadActionButtons = false; - switch (TraitConfigType(*m_activePlayerData->TraitConfigs[index].Type)) + switch (TraitConfigType(*oldConfig->Type)) { case TraitConfigType::Combat: isActiveConfig = newConfig.ID == int32(*m_activePlayerData->ActiveCombatTraitConfigID); - loadActionButtons = m_activePlayerData->TraitConfigs[index].LocalIdentifier != newConfig.LocalIdentifier; + loadActionButtons = oldConfig->LocalIdentifier != newConfig.LocalIdentifier; break; case TraitConfigType::Profession: - isActiveConfig = HasSkill(m_activePlayerData->TraitConfigs[index].SkillLineID); + isActiveConfig = HasSkill(oldConfig->SkillLineID); break; default: break; @@ -28749,7 +28747,7 @@ void Player::UpdateTraitConfig(WorldPackets::Traits::TraitConfig&& newConfig, in std::function<void()> finalizeTraitConfigUpdate = [=, this, newConfig = std::move(newConfig)]() { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, index) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs, newConfig.ID) .ModifyValue(&UF::TraitConfig::LocalIdentifier), newConfig.LocalIdentifier); ApplyTraitEntryChanges(newConfig.ID, newConfig, isActiveConfig, true); @@ -28775,8 +28773,8 @@ void Player::UpdateTraitConfig(WorldPackets::Traits::TraitConfig&& newConfig, in void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits::TraitConfig const& newConfig, bool applyTraits, bool consumeCurrencies) { - int32 editedIndex = m_activePlayerData->TraitConfigs.FindIndexIf([editedConfigId](UF::TraitConfig const& config) { return config.ID == editedConfigId; }); - if (editedIndex < 0) + UF::TraitConfig const* editedConfig = m_activePlayerData->TraitConfigs.Get(editedConfigId); + if (!editedConfig) return; auto makeTraitEntryFinder = [](int32 traitNodeId, int32 traitNodeEntryId) @@ -28784,13 +28782,14 @@ void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits:: return [=](auto const& ufEntry) { return ufEntry.TraitNodeID == traitNodeId && ufEntry.TraitNodeEntryID == traitNodeEntryId; }; }; - UF::TraitConfig const& editedConfig = m_activePlayerData->TraitConfigs[editedIndex]; + auto configSetter = m_values.ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedConfigId); // remove traits not found in new config std::set<int32, std::greater<>> entryIndicesToRemove; - for (int32 i = 0; i < std::ssize(editedConfig.Entries); ++i) + for (int32 i = 0; i < std::ssize(editedConfig->Entries); ++i) { - UF::TraitEntry const& oldEntry = editedConfig.Entries[i]; + UF::TraitEntry const& oldEntry = editedConfig->Entries[i]; auto entryItr = std::ranges::find_if(newConfig.Entries, makeTraitEntryFinder(oldEntry.TraitNodeID, oldEntry.TraitNodeEntryID)); if (entryItr != newConfig.Entries.end()) continue; @@ -28802,26 +28801,20 @@ void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits:: } for (int32 indexToRemove : entryIndicesToRemove) - { - RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedIndex) - .ModifyValue(&UF::TraitConfig::Entries), indexToRemove); - } + RemoveDynamicUpdateFieldValue(configSetter.ModifyValue(&UF::TraitConfig::Entries), indexToRemove); std::vector<WorldPackets::Traits::TraitEntry> costEntries; // apply new traits for (WorldPackets::Traits::TraitEntry const& newEntry : newConfig.Entries) { - int32 oldEntryIndex = editedConfig.Entries.FindIndexIf(makeTraitEntryFinder(newEntry.TraitNodeID, newEntry.TraitNodeEntryID)); + int32 oldEntryIndex = editedConfig->Entries.FindIndexIf(makeTraitEntryFinder(newEntry.TraitNodeID, newEntry.TraitNodeEntryID)); if (oldEntryIndex < 0) { if (consumeCurrencies) costEntries.push_back(newEntry); - UF::TraitEntry& newUfEntry = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedIndex) - .ModifyValue(&UF::TraitConfig::Entries)); + UF::TraitEntry& newUfEntry = AddDynamicUpdateFieldValue(configSetter.ModifyValue(&UF::TraitConfig::Entries)); newUfEntry.TraitNodeID = newEntry.TraitNodeID; newUfEntry.TraitNodeEntryID = newEntry.TraitNodeEntryID; newUfEntry.Rank = newEntry.Rank; @@ -28830,21 +28823,19 @@ void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits:: if (applyTraits) ApplyTraitEntry(newUfEntry.TraitNodeEntryID, newUfEntry.Rank, 0, true); } - else if (newEntry.Rank != editedConfig.Entries[oldEntryIndex].Rank || newEntry.GrantedRanks != editedConfig.Entries[oldEntryIndex].GrantedRanks) + else if (newEntry.Rank != editedConfig->Entries[oldEntryIndex].Rank || newEntry.GrantedRanks != editedConfig->Entries[oldEntryIndex].GrantedRanks) { - if (consumeCurrencies && newEntry.Rank > editedConfig.Entries[oldEntryIndex].Rank) + if (consumeCurrencies && newEntry.Rank > editedConfig->Entries[oldEntryIndex].Rank) { WorldPackets::Traits::TraitEntry& costEntry = costEntries.emplace_back(newEntry); - costEntry.Rank -= editedConfig.Entries[oldEntryIndex].Rank; + costEntry.Rank -= editedConfig->Entries[oldEntryIndex].Rank; } - SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedIndex) + SetUpdateFieldValue(configSetter .ModifyValue(&UF::TraitConfig::Entries, oldEntryIndex) .ModifyValue(&UF::TraitEntry::Rank), newEntry.Rank); - SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedIndex) + SetUpdateFieldValue(configSetter .ModifyValue(&UF::TraitConfig::Entries, oldEntryIndex) .ModifyValue(&UF::TraitEntry::GrantedRanks), newEntry.GrantedRanks); @@ -28883,7 +28874,7 @@ void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits:: for (WorldPackets::Traits::TraitSubTreeCache const& newSubTree : newConfig.SubTrees) { - int32 oldSubTreeIndex = editedConfig.SubTrees.FindIndexIf([&](UF::TraitSubTreeCache const& ufSubTree) { return ufSubTree.TraitSubTreeID == newSubTree.TraitSubTreeID; }); + int32 oldSubTreeIndex = editedConfig->SubTrees.FindIndexIf([&](UF::TraitSubTreeCache const& ufSubTree) { return ufSubTree.TraitSubTreeID == newSubTree.TraitSubTreeID; }); std::vector<UF::TraitEntry> subTreeEntries; subTreeEntries.resize(newSubTree.Entries.size()); for (std::size_t j = 0; j < newSubTree.Entries.size(); ++j) @@ -28897,24 +28888,20 @@ void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits:: if (oldSubTreeIndex < 0) { - UF::TraitSubTreeCache& newUfSubTree = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedIndex) - .ModifyValue(&UF::TraitConfig::SubTrees)); + UF::TraitSubTreeCache& newUfSubTree = AddDynamicUpdateFieldValue(configSetter.ModifyValue(&UF::TraitConfig::SubTrees)); newUfSubTree.TraitSubTreeID = newSubTree.TraitSubTreeID; newUfSubTree.Active = newSubTree.Active; newUfSubTree.Entries = std::move(subTreeEntries); } else { - bool wasActive = m_activePlayerData->TraitConfigs[editedIndex].SubTrees[oldSubTreeIndex].Active != 0; + bool wasActive = editedConfig->SubTrees[oldSubTreeIndex].Active != 0; - SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedIndex) + SetUpdateFieldValue(configSetter .ModifyValue(&UF::TraitConfig::SubTrees, oldSubTreeIndex) .ModifyValue(&UF::TraitSubTreeCache::Active), newSubTree.Active); - SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedIndex) + SetUpdateFieldValue(configSetter .ModifyValue(&UF::TraitConfig::SubTrees, oldSubTreeIndex) .ModifyValue(&UF::TraitSubTreeCache::Entries), std::move(subTreeEntries)); @@ -28926,9 +28913,9 @@ void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits:: if (applyTraits) { - int32 activeSubTree = editedConfig.SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; }); + int32 activeSubTree = editedConfig->SubTrees.FindIndexIf([](UF::TraitSubTreeCache const& subTree) { return subTree.Active != 0; }); if (activeSubTree >= 0) - SetCurrentCombatTraitConfigSubTreeID(editedConfig.SubTrees[activeSubTree].TraitSubTreeID); + SetCurrentCombatTraitConfigSubTreeID(editedConfig->SubTrees[activeSubTree].TraitSubTreeID); else SetCurrentCombatTraitConfigSubTreeID(0); @@ -28940,17 +28927,14 @@ void Player::ApplyTraitEntryChanges(int32 editedConfigId, WorldPackets::Traits:: void Player::RenameTraitConfig(int32 editedConfigId, std::string&& newName) { - int32 editedIndex = m_activePlayerData->TraitConfigs.FindIndexIf([editedConfigId](UF::TraitConfig const& traitConfig) - { - return traitConfig.ID == editedConfigId - && static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat - && (static_cast<TraitCombatConfigFlags>(*traitConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) == TraitCombatConfigFlags::None; - }); - if (editedIndex < 0) + UF::TraitConfig const* editedConfig = m_activePlayerData->TraitConfigs.Get(editedConfigId); + if (!editedConfig + || static_cast<TraitConfigType>(*editedConfig->Type) != TraitConfigType::Combat + || (static_cast<TraitCombatConfigFlags>(*editedConfig->CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) != TraitCombatConfigFlags::None) return; SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedIndex) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs, editedConfigId) .ModifyValue(&UF::TraitConfig::Name), std::move(newName)); m_traitConfigStates[editedConfigId] = PLAYERSPELL_CHANGED; @@ -28958,17 +28942,14 @@ void Player::RenameTraitConfig(int32 editedConfigId, std::string&& newName) void Player::DeleteTraitConfig(int32 deletedConfigId) { - int32 deletedIndex = m_activePlayerData->TraitConfigs.FindIndexIf([deletedConfigId](UF::TraitConfig const& traitConfig) - { - return traitConfig.ID == deletedConfigId - && static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat - && (static_cast<TraitCombatConfigFlags>(*traitConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) == TraitCombatConfigFlags::None; - }); - if (deletedIndex < 0) + UF::TraitConfig const* deletedConfig = m_activePlayerData->TraitConfigs.Get(deletedConfigId); + if (!deletedConfig + || static_cast<TraitConfigType>(*deletedConfig->Type) != TraitConfigType::Combat + || (static_cast<TraitCombatConfigFlags>(*deletedConfig->CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) != TraitCombatConfigFlags::None) return; - RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs), deletedIndex); + RemoveMapUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs), deletedConfigId); m_traitConfigStates[deletedConfigId] = PLAYERSPELL_REMOVED; } @@ -29007,26 +28988,23 @@ void Player::ApplyTraitEntry(int32 traitNodeEntryId, int32 rank, int32 grantedRa void Player::SetTraitConfigUseStarterBuild(int32 traitConfigId, bool useStarterBuild) { - int32 configIndex = m_activePlayerData->TraitConfigs.FindIndexIf([traitConfigId](UF::TraitConfig const& traitConfig) - { - return traitConfig.ID == traitConfigId - && static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat - && (static_cast<TraitCombatConfigFlags>(*traitConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) != TraitCombatConfigFlags::None; - }); - if (configIndex < 0) + UF::TraitConfig const* config = m_activePlayerData->TraitConfigs.Get(traitConfigId); + if (!config + || static_cast<TraitConfigType>(*config->Type) != TraitConfigType::Combat + || (static_cast<TraitCombatConfigFlags>(*config->CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) == TraitCombatConfigFlags::None) return; - bool currentlyUsesStarterBuild = EnumFlag(static_cast<TraitCombatConfigFlags>(*m_activePlayerData->TraitConfigs[configIndex].CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::StarterBuild); + bool currentlyUsesStarterBuild = EnumFlag(static_cast<TraitCombatConfigFlags>(*config->CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::StarterBuild); if (currentlyUsesStarterBuild == useStarterBuild) return; if (useStarterBuild) SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, configIndex) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs, traitConfigId) .ModifyValue(&UF::TraitConfig::CombatConfigFlags), AsUnderlyingType(TraitCombatConfigFlags::StarterBuild)); else RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, configIndex) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs, traitConfigId) .ModifyValue(&UF::TraitConfig::CombatConfigFlags), AsUnderlyingType(TraitCombatConfigFlags::StarterBuild)); m_traitConfigStates[traitConfigId] = PLAYERSPELL_CHANGED; @@ -29034,23 +29012,20 @@ void Player::SetTraitConfigUseStarterBuild(int32 traitConfigId, bool useStarterB void Player::SetTraitConfigUseSharedActionBars(int32 traitConfigId, bool usesSharedActionBars, bool isLastSelectedSavedConfig) { - int32 configIndex = m_activePlayerData->TraitConfigs.FindIndexIf([traitConfigId](UF::TraitConfig const& traitConfig) - { - return traitConfig.ID == traitConfigId - && static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat - && (static_cast<TraitCombatConfigFlags>(*traitConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) == TraitCombatConfigFlags::None; - }); - if (configIndex < 0) + UF::TraitConfig const* config = m_activePlayerData->TraitConfigs.Get(traitConfigId); + if (!config + || static_cast<TraitConfigType>(*config->Type) != TraitConfigType::Combat + || (static_cast<TraitCombatConfigFlags>(*config->CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) != TraitCombatConfigFlags::None) return; - bool currentlyUsesSharedActionBars = EnumFlag(static_cast<TraitCombatConfigFlags>(*m_activePlayerData->TraitConfigs[configIndex].CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::SharedActionBars); + bool currentlyUsesSharedActionBars = EnumFlag(static_cast<TraitCombatConfigFlags>(*config->CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::SharedActionBars); if (currentlyUsesSharedActionBars == usesSharedActionBars) return; if (usesSharedActionBars) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, configIndex) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs, traitConfigId) .ModifyValue(&UF::TraitConfig::CombatConfigFlags), AsUnderlyingType(TraitCombatConfigFlags::SharedActionBars)); { @@ -29066,7 +29041,7 @@ void Player::SetTraitConfigUseSharedActionBars(int32 traitConfigId, bool usesSha else { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData) - .ModifyValue(&UF::ActivePlayerData::TraitConfigs, configIndex) + .ModifyValue(&UF::ActivePlayerData::TraitConfigs, traitConfigId) .ModifyValue(&UF::TraitConfig::CombatConfigFlags), AsUnderlyingType(TraitCombatConfigFlags::SharedActionBars)); // trigger a save with traitConfigId @@ -30890,6 +30865,16 @@ uint32 TraitMgr::PlayerDataAccessor::GetPrimarySpecialization() const return AsUnderlyingType(_player->GetPrimarySpecialization()); } +std::variant<int64, float> TraitMgr::PlayerDataAccessor::GetDataElementAccount(uint32 dataElementId) const +{ + return _player->GetDataElementAccount(dataElementId); +} + +std::variant<int64, float> TraitMgr::PlayerDataAccessor::GetDataElementCharacter(uint32 dataElementId) const +{ + return _player->GetDataElementCharacter(dataElementId); +} + void Player::RequestSpellCast(std::unique_ptr<SpellCastRequest> castRequest) { // We are overriding an already existing spell cast request so inform the client that the old cast is being replaced diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index c28df374b2c..a24c32d8d74 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12133,7 +12133,7 @@ void Unit::SetAuraStack(uint32 spellId, Unit* target, uint32 stack) aura->SetStackAmount(stack); } -void Unit::SendPlaySpellVisual(Unit* target, uint32 spellVisualId, uint16 missReason, uint16 reflectStatus, float travelSpeed, bool speedAsTime /*= false*/, float launchDelay /*= 0.0f*/) +void Unit::SendPlaySpellVisual(Unit* target, uint32 spellVisualId, uint8 missReason, uint8 reflectStatus, float travelSpeed, bool speedAsTime /*= false*/, float launchDelay /*= 0.0f*/) { WorldPackets::Spells::PlaySpellVisual playSpellVisual; playSpellVisual.Source = GetGUID(); @@ -12148,7 +12148,7 @@ void Unit::SendPlaySpellVisual(Unit* target, uint32 spellVisualId, uint16 missRe SendMessageToSet(playSpellVisual.Write(), true); } -void Unit::SendPlaySpellVisual(Position const& targetPosition, uint32 spellVisualId, uint16 missReason, uint16 reflectStatus, float travelSpeed, bool speedAsTime /*= false*/, float launchDelay /*= 0.0f*/) +void Unit::SendPlaySpellVisual(Position const& targetPosition, uint32 spellVisualId, uint8 missReason, uint8 reflectStatus, float travelSpeed, bool speedAsTime /*= false*/, float launchDelay /*= 0.0f*/) { WorldPackets::Spells::PlaySpellVisual playSpellVisual; playSpellVisual.Source = GetGUID(); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 35e2303e6e5..22a872a7020 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1104,8 +1104,8 @@ class TC_GAME_API Unit : public WorldObject Aura* AddAura(SpellInfo const* spellInfo, uint32 effMask, Unit* target); void SetAuraStack(uint32 spellId, Unit* target, uint32 stack); - void SendPlaySpellVisual(Unit* target, uint32 spellVisualId, uint16 missReason, uint16 reflectStatus, float travelSpeed, bool speedAsTime = false, float launchDelay = 0.0f); - void SendPlaySpellVisual(Position const& targetPosition, uint32 spellVisualId, uint16 missReason, uint16 reflectStatus, float travelSpeed, bool speedAsTime = false, float launchDelay = 0.0f); + void SendPlaySpellVisual(Unit* target, uint32 spellVisualId, uint8 missReason, uint8 reflectStatus, float travelSpeed, bool speedAsTime = false, float launchDelay = 0.0f); + void SendPlaySpellVisual(Position const& targetPosition, uint32 spellVisualId, uint8 missReason, uint8 reflectStatus, float travelSpeed, bool speedAsTime = false, float launchDelay = 0.0f); void SendCancelSpellVisual(uint32 id); void SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const; diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 28230a309b0..fdb30f26f58 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -1362,13 +1362,11 @@ void Guild::HandleRoster(WorldSession* session) memberData.GuildClubMemberID = Battlenet::Services::Clubs::CreateClubMemberId(member.GetGUID()); memberData.Authenticated = false; - memberData.SorEligible = false; memberData.Name = member.GetName(); memberData.Note = member.GetPublicNote(); if (sendOfficerNote) memberData.OfficerNote = member.GetOfficerNote(); - } roster.WelcomeText = m_motd; @@ -1803,7 +1801,7 @@ void Guild::HandleRemoveMember(WorldSession* session, ObjectGuid guid) SendCommandResult(session, GUILD_COMMAND_REMOVE_PLAYER, ERR_GUILD_PERMISSIONS); else if (Member* member = GetMember(guid)) { - std::string name = member->GetName(); + std::string_view name = member->GetName(); // Guild masters cannot be removed if (member->IsRank(GuildRankId::GuildMaster)) @@ -1842,7 +1840,7 @@ void Guild::HandleUpdateMemberRank(WorldSession* session, ObjectGuid guid, bool // Promoted player must be a member of guild else if (Member* member = GetMember(guid)) { - std::string name = member->GetName(); + std::string_view name = member->GetName(); // Player cannot promote himself if (member->IsSamePlayer(player->GetGUID())) { diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index aa7ad50ffe8..8cae81b3f33 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -352,13 +352,13 @@ class TC_GAME_API Guild void SaveToDB(CharacterDatabaseTransaction trans) const; ObjectGuid const& GetGUID() const { return m_guid; } - std::string const& GetName() const { return m_name; } + std::string_view GetName() const { return m_name; } uint32 GetAccountId() const { return m_accountId; } GuildRankId GetRankId() const { return m_rankId; } uint64 GetLogoutTime() const { return m_logoutTime; } float GetInactiveDays() const; - std::string GetPublicNote() const { return m_publicNote; } - std::string GetOfficerNote() const { return m_officerNote; } + std::string_view GetPublicNote() const { return m_publicNote; } + std::string_view GetOfficerNote() const { return m_officerNote; } uint8 GetRace() const { return m_race; } uint8 GetClass() const { return m_class; } uint8 GetGender() const { return m_gender; } diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index 78e786387cf..d61ce409595 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -139,4 +139,18 @@ void WorldSession::SendFeatureSystemStatusGlueScreen() } SendPacket(features.Write()); + + WorldPackets::System::MirrorVarSingle vars[] = + { + { "raidLockoutExtendEnabled"sv, "1"sv }, + { "bypassItemLevelScalingCode"sv, "0"sv }, + { "shop2Enabled"sv, "0"sv }, + { "bpayStoreEnable"sv, "0"sv }, + { "recentAlliesEnabledClient"sv, "0"sv }, + { "browserEnabled"sv, "0"sv }, + }; + + WorldPackets::System::MirrorVars variables; + variables.Variables = vars; + SendPacket(variables.Write()); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 7f6ca72c7ef..b1d644fb5a3 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1501,7 +1501,7 @@ void WorldSession::SendFeatureSystemStatus() /// START OF DUMMY VALUES features.ComplaintStatus = COMPLAINT_ENABLED_WITH_AUTO_IGNORE; features.CfgRealmID = 2; - features.CfgRealmRecID = 0; + features.CfgRealmRecID = sRealmList->GetCurrentRealmId().Realm; features.CommercePricePollTimeSeconds = 300; features.VoiceEnabled = false; @@ -1546,6 +1546,14 @@ void WorldSession::SendFeatureSystemStatus() }, gameRule.Value); } + features.AddonChatThrottle.MaxTries = 10; + features.AddonChatThrottle.TriesRestoredPerSecond = 1; + features.AddonChatThrottle.UsedTriesPerMessage = 1; + features.GuildChatThrottle.UsedTriesPerMessage = 1; + features.GuildChatThrottle.TriesRestoredPerSecond = 20; + features.GroupChatThrottle.UsedTriesPerMessage = 1; + features.GroupChatThrottle.TriesRestoredPerSecond = 20; + SendPacket(features.Write()); } diff --git a/src/server/game/Handlers/TraitHandler.cpp b/src/server/game/Handlers/TraitHandler.cpp index 086e25bc0b4..f26d04c75b6 100644 --- a/src/server/game/Handlers/TraitHandler.cpp +++ b/src/server/game/Handlers/TraitHandler.cpp @@ -156,19 +156,19 @@ void WorldSession::HandleClassTalentsRequestNewConfig(WorldPackets::Traits::Clas { return static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat && (static_cast<TraitCombatConfigFlags>(*traitConfig.CombatConfigFlags) & TraitCombatConfigFlags::ActiveForSpec) == TraitCombatConfigFlags::None; - }); + }, [](auto const& pair) -> UF::TraitConfig const& { return pair.second.value; }); if (configCount >= TraitMgr::MAX_COMBAT_TRAIT_CONFIGS) return; auto findFreeLocalIdentifier = [&]() { int32 index = 1; - while (_player->m_activePlayerData->TraitConfigs.FindIndexIf([&](UF::TraitConfig const& traitConfig) + while (_player->m_activePlayerData->TraitConfigs.FindIf([&](UF::TraitConfig const& traitConfig) { return static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat && traitConfig.ChrSpecializationID == int32(_player->GetPrimarySpecialization()) && traitConfig.LocalIdentifier == index; - }) >= 0) + }).first) ++index; return index; @@ -228,12 +228,12 @@ void WorldSession::HandleClassTalentsSetStarterBuildActive(WorldPackets::Traits: auto findFreeLocalIdentifier = [&]() { int32 index = 1; - while (_player->m_activePlayerData->TraitConfigs.FindIndexIf([&](UF::TraitConfig const& traitConfig) + while (_player->m_activePlayerData->TraitConfigs.FindIf([&](UF::TraitConfig const& traitConfig) { return static_cast<TraitConfigType>(*traitConfig.Type) == TraitConfigType::Combat && traitConfig.ChrSpecializationID == int32(_player->GetPrimarySpecialization()) && traitConfig.LocalIdentifier == index; - }) >= 0) + }).first) ++index; return index; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index ce48d72e5ed..26dcc9f7fdc 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7964,587 +7964,589 @@ enum class GameError : uint32 ERR_READY_CHECK_IN_PROGRESS = 617, ERR_READY_CHECK_THROTTLED = 618, ERR_VOTE_TO_ABANDON_NOT_YET = 619, - ERR_DUNGEON_DIFFICULTY_FAILED = 620, - ERR_DUNGEON_DIFFICULTY_CHANGED_S = 621, - ERR_TRADE_WRONG_REALM = 622, - ERR_TRADE_NOT_ON_TAPLIST = 623, - ERR_CHAT_PLAYER_AMBIGUOUS_S = 624, - ERR_LOOT_CANT_LOOT_THAT_NOW = 625, - ERR_LOOT_MASTER_INV_FULL = 626, - ERR_LOOT_MASTER_UNIQUE_ITEM = 627, - ERR_LOOT_MASTER_OTHER = 628, - ERR_FILTERING_YOU_S = 629, - ERR_USE_PREVENTED_BY_MECHANIC_S = 630, - ERR_ITEM_UNIQUE_EQUIPPABLE = 631, - ERR_LFG_LEADER_IS_LFM_S = 632, - ERR_LFG_PENDING = 633, - ERR_CANT_SPEAK_LANGAGE = 634, - ERR_VENDOR_MISSING_TURNINS = 635, - ERR_BATTLEGROUND_NOT_IN_TEAM = 636, - ERR_NOT_IN_BATTLEGROUND = 637, - ERR_NOT_ENOUGH_HONOR_POINTS = 638, - ERR_NOT_ENOUGH_ARENA_POINTS = 639, - ERR_SOCKETING_REQUIRES_META_GEM = 640, - ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 641, - ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 642, - ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 643, - ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 644, - ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 645, - ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 646, - ERR_ITEM_MAX_COUNT_SOCKETED = 647, - ERR_SYSTEM_DISABLED = 648, - ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 649, - ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 650, - ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 651, - ERR_USER_SQUELCHED = 652, - ERR_ACCOUNT_SILENCED = 653, - ERR_PARTY_MEMBER_SILENCED = 654, - ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 655, - ERR_TOO_MUCH_GOLD = 656, - ERR_NOT_BARBER_SITTING = 657, - ERR_QUEST_FAILED_CAIS = 658, - ERR_INVITE_RESTRICTED_TRIAL = 659, - ERR_VOICE_IGNORE_FULL = 660, - ERR_VOICE_IGNORE_SELF = 661, - ERR_VOICE_IGNORE_NOT_FOUND = 662, - ERR_VOICE_IGNORE_ALREADY_S = 663, - ERR_VOICE_IGNORE_ADDED_S = 664, - ERR_VOICE_IGNORE_REMOVED_S = 665, - ERR_VOICE_IGNORE_AMBIGUOUS = 666, - ERR_VOICE_IGNORE_DELETED = 667, - ERR_UNKNOWN_MACRO_OPTION_S = 668, - ERR_NOT_DURING_ARENA_MATCH = 669, - ERR_NOT_IN_RATED_BATTLEGROUND = 670, - ERR_PLAYER_SILENCED = 671, - ERR_PLAYER_UNSILENCED = 672, - ERR_COMSAT_DISCONNECT = 673, - ERR_COMSAT_RECONNECT_ATTEMPT = 674, - ERR_COMSAT_CONNECT_FAIL = 675, - ERR_MAIL_INVALID_ATTACHMENT_SLOT = 676, - ERR_MAIL_TOO_MANY_ATTACHMENTS = 677, - ERR_MAIL_INVALID_ATTACHMENT = 678, - ERR_MAIL_ATTACHMENT_EXPIRED = 679, - ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 680, - ERR_PROFANE_CHAT_NAME = 681, - ERR_PLAYER_SILENCED_ECHO = 682, - ERR_PLAYER_UNSILENCED_ECHO = 683, - ERR_LOOT_CANT_LOOT_THAT = 684, - ERR_ARENA_EXPIRED_CAIS = 685, - ERR_GROUP_ACTION_THROTTLED = 686, - ERR_ALREADY_PICKPOCKETED = 687, - ERR_NAME_INVALID = 688, - ERR_NAME_NO_NAME = 689, - ERR_NAME_TOO_SHORT = 690, - ERR_NAME_TOO_LONG = 691, - ERR_NAME_MIXED_LANGUAGES = 692, - ERR_NAME_PROFANE = 693, - ERR_NAME_RESERVED = 694, - ERR_NAME_THREE_CONSECUTIVE = 695, - ERR_NAME_INVALID_SPACE = 696, - ERR_NAME_CONSECUTIVE_SPACES = 697, - ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 698, - ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 699, - ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 700, - ERR_RECRUIT_A_FRIEND_NOT_LINKED = 701, - ERR_RECRUIT_A_FRIEND_NOT_NOW = 702, - ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 703, - ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 704, - ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 705, - ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 706, - ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 707, - ERR_NOT_SAME_ACCOUNT = 708, - ERR_BAD_ON_USE_ENCHANT = 709, - ERR_TRADE_SELF = 710, - ERR_TOO_MANY_SOCKETS = 711, - ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 712, - ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 713, - ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 714, - ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 715, - ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 716, - ERR_ITEM_INVENTORY_FULL_SATCHEL = 717, - ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 718, - ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 719, - ERR_PURCHASE_LEVEL_TOO_LOW = 720, - ERR_GROUP_SWAP_FAILED = 721, - ERR_INVITE_IN_COMBAT = 722, - ERR_INVALID_GLYPH_SLOT = 723, - ERR_GENERIC_NO_VALID_TARGETS = 724, - ERR_CALENDAR_EVENT_ALERT_S = 725, - ERR_PET_LEARN_SPELL_S = 726, - ERR_PET_LEARN_ABILITY_S = 727, - ERR_PET_SPELL_UNLEARNED_S = 728, - ERR_INVITE_UNKNOWN_REALM = 729, - ERR_INVITE_NO_PARTY_SERVER = 730, - ERR_INVITE_PARTY_BUSY = 731, - ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 732, - ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 733, - ERR_PARTY_TARGET_AMBIGUOUS = 734, - ERR_PARTY_LFG_INVITE_RAID_LOCKED = 735, - ERR_PARTY_LFG_BOOT_LIMIT = 736, - ERR_PARTY_LFG_BOOT_COOLDOWN_S = 737, - ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 738, - ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 739, - ERR_PARTY_LFG_BOOT_IN_PROGRESS = 740, - ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 741, - ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 742, - ERR_PARTY_LFG_BOOT_VOTE_FAILED = 743, - ERR_PARTY_LFG_BOOT_DISALLOWED_BY_MAP = 744, - ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 745, - ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 746, - ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 747, - ERR_PARTY_PRIVATE_GROUP_ONLY = 748, - ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 749, - ERR_PARTY_TIME_RUNNING_SEASON_ID_MUST_MATCH = 750, - ERR_RAID_DISALLOWED_BY_LEVEL = 751, - ERR_RAID_DISALLOWED_BY_CROSS_REALM = 752, - ERR_PARTY_ROLE_NOT_AVAILABLE = 753, - ERR_JOIN_LFG_OBJECT_FAILED = 754, - ERR_LFG_REMOVED_LEVELUP = 755, - ERR_LFG_REMOVED_XP_TOGGLE = 756, - ERR_LFG_REMOVED_FACTION_CHANGE = 757, - ERR_BATTLEGROUND_INFO_THROTTLED = 758, - ERR_BATTLEGROUND_ALREADY_IN = 759, - ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 760, - ERR_ARENA_TEAM_PERMISSIONS = 761, - ERR_NOT_WHILE_FALLING = 762, - ERR_NOT_WHILE_MOVING = 763, - ERR_NOT_WHILE_FATIGUED = 764, - ERR_MAX_SOCKETS = 765, - ERR_MULTI_CAST_ACTION_TOTEM_S = 766, - ERR_BATTLEGROUND_JOIN_LEVELUP = 767, - ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 768, - ERR_BATTLEGROUND_JOIN_XP_GAIN = 769, - ERR_BATTLEGROUND_JOIN_MERCENARY = 770, - ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 771, - ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 772, - ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 773, - ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 774, - ERR_RAID_DIFFICULTY_FAILED = 775, - ERR_RAID_DIFFICULTY_CHANGED_S = 776, - ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 777, - ERR_RAID_LOCKOUT_CHANGED_S = 778, - ERR_RAID_CONVERTED_TO_PARTY = 779, - ERR_PARTY_CONVERTED_TO_RAID = 780, - ERR_PLAYER_DIFFICULTY_CHANGED_S = 781, - ERR_GMRESPONSE_DB_ERROR = 782, - ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 783, - ERR_ARENA_JOIN_RANGE_INDEX = 784, - ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 785, - ERR_BATTLEGROUND_JOIN_FAILED = 786, - ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 787, - ERR_BATTLEGROUND_JOIN_RESPEC = 788, - ERR_BATTLEGROUND_INVITATION_DECLINED = 789, - ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 790, - ERR_BATTLEGROUND_JOIN_TIMED_OUT = 791, - ERR_BATTLEGROUND_DUPE_QUEUE = 792, - ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 793, - ERR_IN_BATTLEGROUND_RESPEC = 794, - ERR_MAIL_LIMITED_DURATION_ITEM = 795, - ERR_YELL_RESTRICTED_TRIAL = 796, - ERR_CHAT_RAID_RESTRICTED_TRIAL = 797, - ERR_LFG_ROLE_CHECK_FAILED = 798, - ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 799, - ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 800, - ERR_LFG_READY_CHECK_FAILED = 801, - ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 802, - ERR_LFG_GROUP_FULL = 803, - ERR_LFG_NO_LFG_OBJECT = 804, - ERR_LFG_NO_SLOTS_PLAYER = 805, - ERR_LFG_NO_SLOTS_PARTY = 806, - ERR_LFG_NO_SPEC = 807, - ERR_LFG_MISMATCHED_SLOTS = 808, - ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 809, - ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 810, - ERR_LFG_MEMBERS_NOT_PRESENT = 811, - ERR_LFG_GET_INFO_TIMEOUT = 812, - ERR_LFG_INVALID_SLOT = 813, - ERR_LFG_DESERTER_PLAYER = 814, - ERR_LFG_DESERTER_PARTY = 815, - ERR_LFG_DEAD = 816, - ERR_LFG_RANDOM_COOLDOWN_PLAYER = 817, - ERR_LFG_RANDOM_COOLDOWN_PARTY = 818, - ERR_LFG_TOO_MANY_MEMBERS = 819, - ERR_LFG_TOO_FEW_MEMBERS = 820, - ERR_LFG_PROPOSAL_FAILED = 821, - ERR_LFG_PROPOSAL_DECLINED_SELF = 822, - ERR_LFG_PROPOSAL_DECLINED_PARTY = 823, - ERR_LFG_NO_SLOTS_SELECTED = 824, - ERR_LFG_NO_ROLES_SELECTED = 825, - ERR_LFG_ROLE_CHECK_INITIATED = 826, - ERR_LFG_READY_CHECK_INITIATED = 827, - ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 828, - ERR_LFG_PLAYER_DECLINED_READY_CHECK = 829, - ERR_LFG_LOREWALKING = 830, - ERR_LFG_JOINED_QUEUE = 831, - ERR_LFG_JOINED_FLEX_QUEUE = 832, - ERR_LFG_JOINED_RF_QUEUE = 833, - ERR_LFG_JOINED_SCENARIO_QUEUE = 834, - ERR_LFG_JOINED_WORLD_PVP_QUEUE = 835, - ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 836, - ERR_LFG_JOINED_LIST = 837, - ERR_QUEUED_PLUNDERSTORM = 838, - ERR_LFG_LEFT_QUEUE = 839, - ERR_LFG_LEFT_LIST = 840, - ERR_LFG_ROLE_CHECK_ABORTED = 841, - ERR_LFG_READY_CHECK_ABORTED = 842, - ERR_LFG_CANT_USE_BATTLEGROUND = 843, - ERR_LFG_CANT_USE_DUNGEONS = 844, - ERR_LFG_REASON_TOO_MANY_LFG = 845, - ERR_LFG_FARM_LIMIT = 846, - ERR_LFG_NO_CROSS_FACTION_PARTIES = 847, - ERR_INVALID_TELEPORT_LOCATION = 848, - ERR_TOO_FAR_TO_INTERACT = 849, - ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 850, - ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 851, - ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 852, - ERR_DIFFICULTY_CHANGE_WORLDSTATE = 853, - ERR_DIFFICULTY_CHANGE_ENCOUNTER = 854, - ERR_DIFFICULTY_CHANGE_COMBAT = 855, - ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 856, - ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 857, - ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 858, - ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 859, - ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 860, - ERR_ARENA_TEAM_PARTY_SIZE = 861, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 862, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 863, - ERR_SOLO_RBG_WARGAME_GROUP_SIZE = 864, - ERR_SOLO_RBG_WARGAME_GROUP_COMP = 865, - ERR_SOLO_MIN_ITEM_LEVEL = 866, - ERR_PVP_PLAYER_ABANDONED = 867, - ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 868, - ERR_QUEST_FORCE_REMOVED_S = 869, - ERR_ATTACK_NO_ACTIONS = 870, - ERR_IN_RANDOM_BG = 871, - ERR_IN_NON_RANDOM_BG = 872, - ERR_BN_FRIEND_SELF = 873, - ERR_BN_FRIEND_ALREADY = 874, - ERR_BN_FRIEND_BLOCKED = 875, - ERR_BN_FRIEND_LIST_FULL = 876, - ERR_BN_FRIEND_REQUEST_SENT = 877, - ERR_BN_BROADCAST_THROTTLE = 878, - ERR_BG_DEVELOPER_ONLY = 879, - ERR_CURRENCY_SPELL_SLOT_MISMATCH = 880, - ERR_CURRENCY_NOT_TRADABLE = 881, - ERR_REQUIRES_EXPANSION_S = 882, - ERR_QUEST_FAILED_SPELL = 883, - ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 884, - ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 885, - ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 886, - ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 887, - ERR_TALENT_FAILED_UNKNOWN = 888, - ERR_TALENT_FAILED_IN_COMBAT = 889, - ERR_TALENT_FAILED_IN_PVP_MATCH = 890, - ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 891, - ERR_WARGAME_REQUEST_FAILURE = 892, - ERR_RANK_REQUIRES_AUTHENTICATOR = 893, - ERR_GUILD_BANK_VOUCHER_FAILED = 894, - ERR_WARGAME_REQUEST_SENT = 895, - ERR_REQUIRES_ACHIEVEMENT_I = 896, - ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 897, - ERR_CANT_BUY_QUANTITY = 898, - ERR_ITEM_IS_BATTLE_PAY_LOCKED = 899, - ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 900, - ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 901, - ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 902, - ERR_INSUFF_TRACKED_CURRENCY_IS = 903, - ERR_NOT_ON_TOURNAMENT_REALM = 904, - ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 905, - ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 906, - ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 907, - ERR_CANT_DO_THAT_IN_A_GROUP = 908, - ERR_GUILD_LEADER_REPLACED = 909, - ERR_TRANSMOGRIFY_CANT_EQUIP = 910, - ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 911, - ERR_TRANSMOGRIFY_NOT_SOULBOUND = 912, - ERR_TRANSMOGRIFY_INVALID_SOURCE = 913, - ERR_TRANSMOGRIFY_INVALID_DESTINATION = 914, - ERR_TRANSMOGRIFY_MISMATCH = 915, - ERR_TRANSMOGRIFY_LEGENDARY = 916, - ERR_TRANSMOGRIFY_SAME_ITEM = 917, - ERR_TRANSMOGRIFY_SAME_APPEARANCE = 918, - ERR_TRANSMOGRIFY_NOT_EQUIPPED = 919, - ERR_VOID_DEPOSIT_FULL = 920, - ERR_VOID_WITHDRAW_FULL = 921, - ERR_VOID_STORAGE_WRAPPED = 922, - ERR_VOID_STORAGE_STACKABLE = 923, - ERR_VOID_STORAGE_UNBOUND = 924, - ERR_VOID_STORAGE_REPAIR = 925, - ERR_VOID_STORAGE_CHARGES = 926, - ERR_VOID_STORAGE_QUEST = 927, - ERR_VOID_STORAGE_CONJURED = 928, - ERR_VOID_STORAGE_MAIL = 929, - ERR_VOID_STORAGE_BAG = 930, - ERR_VOID_TRANSFER_STORAGE_FULL = 931, - ERR_VOID_TRANSFER_INV_FULL = 932, - ERR_VOID_TRANSFER_INTERNAL_ERROR = 933, - ERR_VOID_TRANSFER_ITEM_INVALID = 934, - ERR_DIFFICULTY_DISABLED_IN_LFG = 935, - ERR_VOID_STORAGE_UNIQUE = 936, - ERR_VOID_STORAGE_LOOT = 937, - ERR_VOID_STORAGE_HOLIDAY = 938, - ERR_VOID_STORAGE_DURATION = 939, - ERR_VOID_STORAGE_LOAD_FAILED = 940, - ERR_VOID_STORAGE_INVALID_ITEM = 941, - ERR_VOID_STORAGE_ACCOUNT_ITEM = 942, - ERR_PARENTAL_CONTROLS_CHAT_MUTED = 943, - ERR_SOR_START_EXPERIENCE_INCOMPLETE = 944, - ERR_SOR_INVALID_EMAIL = 945, - ERR_SOR_INVALID_COMMENT = 946, - ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 947, - ERR_CHALLENGE_MODE_RESET_KEYSTONE = 948, - ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 949, - ERR_REPORT_SUBMITTED_SUCCESSFULLY = 950, - ERR_REPORT_SUBMISSION_FAILED = 951, - ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 952, - ERR_BUG_SUBMITTED_SUCCESSFULLY = 953, - ERR_CHALLENGE_MODE_ENABLED = 954, - ERR_CHALLENGE_MODE_DISABLED = 955, - ERR_PETBATTLE_CREATE_FAILED = 956, - ERR_PETBATTLE_NOT_HERE = 957, - ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 958, - ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 959, - ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 960, - ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 961, - ERR_PETBATTLE_NOT_WHILE_DEAD = 962, - ERR_PETBATTLE_NOT_WHILE_FLYING = 963, - ERR_PETBATTLE_TARGET_INVALID = 964, - ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 965, - ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 966, - ERR_PETBATTLE_NOT_A_TRAINER = 967, - ERR_PETBATTLE_DECLINED = 968, - ERR_PETBATTLE_IN_BATTLE = 969, - ERR_PETBATTLE_INVALID_LOADOUT = 970, - ERR_PETBATTLE_ALL_PETS_DEAD = 971, - ERR_PETBATTLE_NO_PETS_IN_SLOTS = 972, - ERR_PETBATTLE_NO_ACCOUNT_LOCK = 973, - ERR_PETBATTLE_WILD_PET_TAPPED = 974, - ERR_PETBATTLE_RESTRICTED_ACCOUNT = 975, - ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 976, - ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 977, - ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 978, - ERR_CANT_HAVE_MORE_PETS = 979, - ERR_PVP_MAP_NOT_FOUND = 980, - ERR_PVP_MAP_NOT_SET = 981, - ERR_PETBATTLE_QUEUE_QUEUED = 982, - ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 983, - ERR_PETBATTLE_QUEUE_JOIN_FAILED = 984, - ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 985, - ERR_PETBATTLE_QUEUE_REMOVED = 986, - ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 987, - ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 988, - ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 989, - ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 990, - ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 991, - ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 992, - ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 993, - ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 994, - ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 995, - ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 996, - ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 997, - ERR_PETBATTLE_QUEUE_SLOT_DEAD = 998, - ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 999, - ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 1000, - ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 1001, - ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 1002, - ERR_HAS_RESTRICTION = 1003, - ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 1004, - ERR_ITEM_UPGRADE_NO_PATH = 1005, - ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 1006, - ERR_BONUS_ROLL_EMPTY = 1007, - ERR_CHALLENGE_MODE_FULL = 1008, - ERR_CHALLENGE_MODE_IN_PROGRESS = 1009, - ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 1010, - ERR_START_RESTRICTED_CHALLENGE_MODE = 1011, - ERR_BATTLETAG_FRIEND_NOT_FOUND = 1012, - ERR_BATTLETAG_FRIEND_NOT_VALID = 1013, - ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 1014, - ERR_BATTLETAG_FRIEND_THROTTLED = 1015, - ERR_BATTLETAG_FRIEND_SUCCESS = 1016, - ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 1017, - ERR_PETBATTLE_INTERNAL = 1018, - ERR_CANT_CAGE_PET_YET = 1019, - ERR_NO_LOOT_IN_CHALLENGE_MODE = 1020, - ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 1021, - ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 1022, - ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 1023, - ERR_RECRUIT_A_FRIEND_FAILED = 1024, - ERR_SET_LOOT_PERSONAL = 1025, - ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1026, - ERR_REAGENT_BANK_FULL = 1027, - ERR_REAGENT_BANK_LOCKED = 1028, - ERR_GARRISON_BUILDING_EXISTS = 1029, - ERR_GARRISON_INVALID_PLOT = 1030, - ERR_GARRISON_INVALID_BUILDINGID = 1031, - ERR_GARRISON_INVALID_PLOT_BUILDING = 1032, - ERR_GARRISON_REQUIRES_BLUEPRINT = 1033, - ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1034, - ERR_GARRISON_NOT_ENOUGH_GOLD = 1035, - ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1036, - ERR_ALREADY_USING_LFG_LIST = 1037, - ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1038, - ERR_TOY_USE_LIMIT_REACHED = 1039, - ERR_TOY_ALREADY_KNOWN = 1040, - ERR_TRANSMOG_SET_ALREADY_KNOWN = 1041, - ERR_NOT_ENOUGH_CURRENCY = 1042, - ERR_SPEC_IS_DISABLED = 1043, - ERR_FEATURE_RESTRICTED_TRIAL = 1044, - ERR_CANT_BE_OBLITERATED = 1045, - ERR_CANT_BE_SCRAPPED = 1046, - ERR_CANT_BE_RECRAFTED = 1047, - ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1048, - ERR_MUST_EQUIP_ARTIFACT = 1049, - ERR_CANT_DO_THAT_RIGHT_NOW = 1050, - ERR_AFFECTING_COMBAT = 1051, - ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1052, - ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1053, - ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1054, - ERR_MOVIE_RECORDING_WARNING_PERF = 1055, - ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1056, - ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1057, - ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1058, - ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1059, - ERR_NO_CHALLENGE_MODE_REWARD = 1060, - ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1061, - ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1062, - ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1063, - ERR_TALENT_FAILED_REST_AREA = 1064, - ERR_CANNOT_ABANDON_LAST_PET = 1065, - ERR_TEST_CVAR_SET_SSS = 1066, - ERR_QUEST_TURN_IN_FAIL_REASON = 1067, - ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1068, - ERR_TALENT_GRANTED_BY_AURA = 1069, - ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1070, - ERR_GLYPH_TARGET_NOT_AVAILABLE = 1071, - ERR_PVP_WARMODE_TOGGLE_ON = 1072, - ERR_PVP_WARMODE_TOGGLE_OFF = 1073, - ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1074, - ERR_SPELL_FAILED_CANT_FLY_HERE = 1075, - ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1076, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1077, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1078, - ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1079, - ERR_VOICE_CHAT_SERVICE_LOST = 1080, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1081, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1082, - ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1083, - ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1084, - ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1085, - ERR_VOICE_CHAT_PLAYER_SILENCED = 1086, - ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1087, - ERR_VOICE_CHAT_DISABLED = 1088, - ERR_NO_PVP_REWARD = 1089, - ERR_CLAIMED_PVP_REWARD = 1090, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1091, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1092, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1093, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1094, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1095, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1096, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1097, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1098, - ERR_SOCKETING_GENERIC_FAILURE = 1099, - ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1100, - ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1101, - ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1102, - ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1103, - ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1104, - ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1105, - ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1106, - ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1107, - ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1108, - ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1109, - ERR_SOCKETING_REQUIRES_TINKER_GEM = 1110, - ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1111, - ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1112, - ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1113, - ERR_SOCKETING_REQUIRES_FRAGRANCE_GEM = 1114, - ERR_SOCKETING_FRAGRANCE_GEM_ONLY_IN_FRAGRANCESLOT = 1115, - ERR_SOCKETING_REQUIRES_SINGING_THUNDER_GEM = 1116, - ERR_SOCKETING_SINGINGTHUNDER_GEM_ONLY_IN_SINGINGTHUNDERSLOT = 1117, - ERR_SOCKETING_REQUIRES_SINGING_SEA_GEM = 1118, - ERR_SOCKETING_SINGINGSEA_GEM_ONLY_IN_SINGINGSEASLOT = 1119, - ERR_SOCKETING_REQUIRES_SINGING_WIND_GEM = 1120, - ERR_SOCKETING_SINGINGWIND_GEM_ONLY_IN_SINGINGWINDSLOT = 1121, - ERR_SOCKETING_REQUIRES_FIBER_GEM = 1122, - ERR_SOCKETING_FIBER_GEM_ONLY_IN_FIBERSLOT = 1123, - ERR_LEVEL_LINKING_RESULT_LINKED = 1124, - ERR_LEVEL_LINKING_RESULT_UNLINKED = 1125, - ERR_CLUB_FINDER_ERROR_POST_CLUB = 1126, - ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1127, - ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1128, - ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1129, - ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1130, - ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1131, - ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1132, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1133, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1134, - ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1135, - ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1136, - ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1137, - ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1138, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1139, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1140, - ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1141, - ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1142, - ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1143, - ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1144, - ERR_SOULBIND_INVALID_CONDUIT = 1145, - ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1146, - ERR_SOULBIND_INVALID_TALENT = 1147, - ERR_SOULBIND_DUPLICATE_CONDUIT = 1148, - ERR_ACTIVATE_SOULBIND_S = 1149, - ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1150, - ERR_CANT_USE_PROFANITY = 1151, - ERR_NOT_IN_PET_BATTLE = 1152, - ERR_NOT_IN_NPE = 1153, - ERR_NO_SPEC = 1154, - ERR_NO_DOMINATIONSHARD_OVERWRITE = 1155, - ERR_USE_WEEKLY_REWARDS_DISABLED = 1156, - ERR_CROSS_FACTION_GROUP_JOINED = 1157, - ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1158, - ERR_EQUIPABLESPELLS_SLOTS_FULL = 1159, - ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1160, - ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1161, - ERR_NO_SOULBOUND_ITEM_IN_ACCOUNT_BANK = 1162, - ERR_NO_REFUNDABLE_ITEM_IN_ACCOUNT_BANK = 1163, - ERR_CANT_DELETE_IN_ACCOUNT_BANK = 1164, - ERR_NO_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1165, - ERR_NO_OPEN_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1166, - ERR_CANT_TRADE_ACCOUNT_ITEM = 1167, - ERR_NO_ACCOUNT_INVENTORY_LOCK = 1168, - ERR_BANK_NOT_ACCESSIBLE = 1169, - ERR_TOO_MANY_ACCOUNT_BANK_TABS = 1170, - ERR_BANK_TAB_NOT_UNLOCKED = 1171, - ERR_ACCOUNT_MONEY_LOCKED = 1172, - ERR_BANK_TAB_INVALID_NAME = 1173, - ERR_BANK_TAB_INVALID_TEXT = 1174, - ERR_CHARACTER_BANK_NOT_CONVERTED = 1175, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1176, - ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1177, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1178, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1179, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1180, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1181, - ERR_WOW_LABS_SET_WOW_LABS_AREA_ID_FAILED = 1182, - ERR_PLUNDERSTORM_CANNOT_QUEUE = 1183, - ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1184, - ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1185, - ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1186, - ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1187, - ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1188, - ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1189, - ERR_REMIX_INVALID_TRANSFER_REQUEST = 1190, - ERR_CURRENCY_TRANSFER_INVALID_CHARACTER = 1191, - ERR_CURRENCY_TRANSFER_INVALID_CURRENCY = 1192, - ERR_CURRENCY_TRANSFER_INSUFFICIENT_CURRENCY = 1193, - ERR_CURRENCY_TRANSFER_MAX_QUANTITY = 1194, - ERR_CURRENCY_TRANSFER_NO_VALID_SOURCE = 1195, - ERR_CURRENCY_TRANSFER_CHARACTER_LOGGED_IN = 1196, - ERR_CURRENCY_TRANSFER_SERVER_ERROR = 1197, - ERR_CURRENCY_TRANSFER_UNMET_REQUIREMENTS = 1198, - ERR_CURRENCY_TRANSFER_TRANSACTION_IN_PROGRESS = 1199, - ERR_CURRENCY_TRANSFER_DISABLED = 1200, + ERR_VOTE_TO_ABANDON_ENCOUNTER = 620, + ERR_DUNGEON_DIFFICULTY_FAILED = 621, + ERR_DUNGEON_DIFFICULTY_CHANGED_S = 622, + ERR_TRADE_WRONG_REALM = 623, + ERR_TRADE_NOT_ON_TAPLIST = 624, + ERR_CHAT_PLAYER_AMBIGUOUS_S = 625, + ERR_LOOT_CANT_LOOT_THAT_NOW = 626, + ERR_LOOT_MASTER_INV_FULL = 627, + ERR_LOOT_MASTER_UNIQUE_ITEM = 628, + ERR_LOOT_MASTER_OTHER = 629, + ERR_FILTERING_YOU_S = 630, + ERR_USE_PREVENTED_BY_MECHANIC_S = 631, + ERR_ITEM_UNIQUE_EQUIPPABLE = 632, + ERR_LFG_LEADER_IS_LFM_S = 633, + ERR_LFG_PENDING = 634, + ERR_CANT_SPEAK_LANGAGE = 635, + ERR_VENDOR_MISSING_TURNINS = 636, + ERR_BATTLEGROUND_NOT_IN_TEAM = 637, + ERR_NOT_IN_BATTLEGROUND = 638, + ERR_NOT_ENOUGH_HONOR_POINTS = 639, + ERR_NOT_ENOUGH_ARENA_POINTS = 640, + ERR_SOCKETING_REQUIRES_META_GEM = 641, + ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 642, + ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 643, + ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 644, + ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 645, + ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 646, + ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 647, + ERR_ITEM_MAX_COUNT_SOCKETED = 648, + ERR_SYSTEM_DISABLED = 649, + ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 650, + ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 651, + ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 652, + ERR_USER_SQUELCHED = 653, + ERR_ACCOUNT_SILENCED = 654, + ERR_PARTY_MEMBER_SILENCED = 655, + ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 656, + ERR_TOO_MUCH_GOLD = 657, + ERR_NOT_BARBER_SITTING = 658, + ERR_QUEST_FAILED_CAIS = 659, + ERR_INVITE_RESTRICTED_TRIAL = 660, + ERR_VOICE_IGNORE_FULL = 661, + ERR_VOICE_IGNORE_SELF = 662, + ERR_VOICE_IGNORE_NOT_FOUND = 663, + ERR_VOICE_IGNORE_ALREADY_S = 664, + ERR_VOICE_IGNORE_ADDED_S = 665, + ERR_VOICE_IGNORE_REMOVED_S = 666, + ERR_VOICE_IGNORE_AMBIGUOUS = 667, + ERR_VOICE_IGNORE_DELETED = 668, + ERR_UNKNOWN_MACRO_OPTION_S = 669, + ERR_NOT_DURING_ARENA_MATCH = 670, + ERR_NOT_IN_RATED_BATTLEGROUND = 671, + ERR_PLAYER_SILENCED = 672, + ERR_PLAYER_UNSILENCED = 673, + ERR_COMSAT_DISCONNECT = 674, + ERR_COMSAT_RECONNECT_ATTEMPT = 675, + ERR_COMSAT_CONNECT_FAIL = 676, + ERR_MAIL_INVALID_ATTACHMENT_SLOT = 677, + ERR_MAIL_TOO_MANY_ATTACHMENTS = 678, + ERR_MAIL_INVALID_ATTACHMENT = 679, + ERR_MAIL_ATTACHMENT_EXPIRED = 680, + ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 681, + ERR_PROFANE_CHAT_NAME = 682, + ERR_PLAYER_SILENCED_ECHO = 683, + ERR_PLAYER_UNSILENCED_ECHO = 684, + ERR_LOOT_CANT_LOOT_THAT = 685, + ERR_ARENA_EXPIRED_CAIS = 686, + ERR_GROUP_ACTION_THROTTLED = 687, + ERR_ALREADY_PICKPOCKETED = 688, + ERR_NAME_INVALID = 689, + ERR_NAME_NO_NAME = 690, + ERR_NAME_TOO_SHORT = 691, + ERR_NAME_TOO_LONG = 692, + ERR_NAME_MIXED_LANGUAGES = 693, + ERR_NAME_PROFANE = 694, + ERR_NAME_RESERVED = 695, + ERR_NAME_THREE_CONSECUTIVE = 696, + ERR_NAME_INVALID_SPACE = 697, + ERR_NAME_CONSECUTIVE_SPACES = 698, + ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 699, + ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 700, + ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 701, + ERR_RECRUIT_A_FRIEND_NOT_LINKED = 702, + ERR_RECRUIT_A_FRIEND_NOT_NOW = 703, + ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 704, + ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 705, + ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 706, + ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 707, + ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 708, + ERR_NOT_SAME_ACCOUNT = 709, + ERR_BAD_ON_USE_ENCHANT = 710, + ERR_TRADE_SELF = 711, + ERR_TOO_MANY_SOCKETS = 712, + ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 713, + ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 714, + ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 715, + ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 716, + ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 717, + ERR_ITEM_INVENTORY_FULL_SATCHEL = 718, + ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 719, + ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 720, + ERR_PURCHASE_LEVEL_TOO_LOW = 721, + ERR_GROUP_SWAP_FAILED = 722, + ERR_INVITE_IN_COMBAT = 723, + ERR_INVALID_GLYPH_SLOT = 724, + ERR_GENERIC_NO_VALID_TARGETS = 725, + ERR_CALENDAR_EVENT_ALERT_S = 726, + ERR_PET_LEARN_SPELL_S = 727, + ERR_PET_LEARN_ABILITY_S = 728, + ERR_PET_SPELL_UNLEARNED_S = 729, + ERR_INVITE_UNKNOWN_REALM = 730, + ERR_INVITE_NO_PARTY_SERVER = 731, + ERR_INVITE_PARTY_BUSY = 732, + ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 733, + ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 734, + ERR_PARTY_TARGET_AMBIGUOUS = 735, + ERR_PARTY_LFG_INVITE_RAID_LOCKED = 736, + ERR_PARTY_LFG_BOOT_LIMIT = 737, + ERR_PARTY_LFG_BOOT_COOLDOWN_S = 738, + ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 739, + ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 740, + ERR_PARTY_LFG_BOOT_IN_PROGRESS = 741, + ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 742, + ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 743, + ERR_PARTY_LFG_BOOT_VOTE_FAILED = 744, + ERR_PARTY_LFG_BOOT_DISALLOWED_BY_MAP = 745, + ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 746, + ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 747, + ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 748, + ERR_PARTY_PRIVATE_GROUP_ONLY = 749, + ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 750, + ERR_PARTY_TIME_RUNNING_SEASON_ID_MUST_MATCH = 751, + ERR_RAID_DISALLOWED_BY_LEVEL = 752, + ERR_RAID_DISALLOWED_BY_CROSS_REALM = 753, + ERR_PARTY_ROLE_NOT_AVAILABLE = 754, + ERR_JOIN_LFG_OBJECT_FAILED = 755, + ERR_LFG_REMOVED_LEVELUP = 756, + ERR_LFG_REMOVED_XP_TOGGLE = 757, + ERR_LFG_REMOVED_FACTION_CHANGE = 758, + ERR_BATTLEGROUND_INFO_THROTTLED = 759, + ERR_BATTLEGROUND_ALREADY_IN = 760, + ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 761, + ERR_ARENA_TEAM_PERMISSIONS = 762, + ERR_NOT_WHILE_FALLING = 763, + ERR_NOT_WHILE_MOVING = 764, + ERR_NOT_WHILE_FATIGUED = 765, + ERR_MAX_SOCKETS = 766, + ERR_MULTI_CAST_ACTION_TOTEM_S = 767, + ERR_BATTLEGROUND_JOIN_LEVELUP = 768, + ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 769, + ERR_BATTLEGROUND_JOIN_XP_GAIN = 770, + ERR_BATTLEGROUND_JOIN_MERCENARY = 771, + ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 772, + ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 773, + ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 774, + ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 775, + ERR_RAID_DIFFICULTY_FAILED = 776, + ERR_RAID_DIFFICULTY_CHANGED_S = 777, + ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 778, + ERR_RAID_LOCKOUT_CHANGED_S = 779, + ERR_RAID_CONVERTED_TO_PARTY = 780, + ERR_PARTY_CONVERTED_TO_RAID = 781, + ERR_PLAYER_DIFFICULTY_CHANGED_S = 782, + ERR_GMRESPONSE_DB_ERROR = 783, + ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 784, + ERR_ARENA_JOIN_RANGE_INDEX = 785, + ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 786, + ERR_BATTLEGROUND_JOIN_FAILED = 787, + ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 788, + ERR_BATTLEGROUND_JOIN_RESPEC = 789, + ERR_BATTLEGROUND_INVITATION_DECLINED = 790, + ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 791, + ERR_BATTLEGROUND_JOIN_TIMED_OUT = 792, + ERR_BATTLEGROUND_DUPE_QUEUE = 793, + ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 794, + ERR_IN_BATTLEGROUND_RESPEC = 795, + ERR_MAIL_LIMITED_DURATION_ITEM = 796, + ERR_YELL_RESTRICTED_TRIAL = 797, + ERR_CHAT_RAID_RESTRICTED_TRIAL = 798, + ERR_LFG_ROLE_CHECK_FAILED = 799, + ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 800, + ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 801, + ERR_LFG_READY_CHECK_FAILED = 802, + ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 803, + ERR_LFG_GROUP_FULL = 804, + ERR_LFG_NO_LFG_OBJECT = 805, + ERR_LFG_NO_SLOTS_PLAYER = 806, + ERR_LFG_NO_SLOTS_PARTY = 807, + ERR_LFG_NO_SPEC = 808, + ERR_LFG_MISMATCHED_SLOTS = 809, + ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 810, + ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 811, + ERR_LFG_MEMBERS_NOT_PRESENT = 812, + ERR_LFG_GET_INFO_TIMEOUT = 813, + ERR_LFG_INVALID_SLOT = 814, + ERR_LFG_DESERTER_PLAYER = 815, + ERR_LFG_DESERTER_PARTY = 816, + ERR_LFG_DEAD = 817, + ERR_LFG_RANDOM_COOLDOWN_PLAYER = 818, + ERR_LFG_RANDOM_COOLDOWN_PARTY = 819, + ERR_LFG_TOO_MANY_MEMBERS = 820, + ERR_LFG_TOO_FEW_MEMBERS = 821, + ERR_LFG_PROPOSAL_FAILED = 822, + ERR_LFG_PROPOSAL_DECLINED_SELF = 823, + ERR_LFG_PROPOSAL_DECLINED_PARTY = 824, + ERR_LFG_NO_SLOTS_SELECTED = 825, + ERR_LFG_NO_ROLES_SELECTED = 826, + ERR_LFG_ROLE_CHECK_INITIATED = 827, + ERR_LFG_READY_CHECK_INITIATED = 828, + ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 829, + ERR_LFG_PLAYER_DECLINED_READY_CHECK = 830, + ERR_LFG_LOREWALKING = 831, + ERR_LFG_JOINED_QUEUE = 832, + ERR_LFG_JOINED_FLEX_QUEUE = 833, + ERR_LFG_JOINED_RF_QUEUE = 834, + ERR_LFG_JOINED_SCENARIO_QUEUE = 835, + ERR_LFG_JOINED_WORLD_PVP_QUEUE = 836, + ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 837, + ERR_LFG_JOINED_LIST = 838, + ERR_QUEUED_PLUNDERSTORM = 839, + ERR_LFG_LEFT_QUEUE = 840, + ERR_LFG_LEFT_LIST = 841, + ERR_LFG_ROLE_CHECK_ABORTED = 842, + ERR_LFG_READY_CHECK_ABORTED = 843, + ERR_LFG_CANT_USE_BATTLEGROUND = 844, + ERR_LFG_CANT_USE_DUNGEONS = 845, + ERR_LFG_REASON_TOO_MANY_LFG = 846, + ERR_LFG_FARM_LIMIT = 847, + ERR_LFG_NO_CROSS_FACTION_PARTIES = 848, + ERR_INVALID_TELEPORT_LOCATION = 849, + ERR_TOO_FAR_TO_INTERACT = 850, + ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 851, + ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 852, + ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 853, + ERR_DIFFICULTY_CHANGE_WORLDSTATE = 854, + ERR_DIFFICULTY_CHANGE_ENCOUNTER = 855, + ERR_DIFFICULTY_CHANGE_COMBAT = 856, + ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 857, + ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 858, + ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 859, + ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 860, + ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 861, + ERR_ARENA_TEAM_PARTY_SIZE = 862, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 863, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 864, + ERR_SOLO_RBG_WARGAME_GROUP_SIZE = 865, + ERR_SOLO_RBG_WARGAME_GROUP_COMP = 866, + ERR_SOLO_MIN_ITEM_LEVEL = 867, + ERR_PVP_PLAYER_ABANDONED = 868, + ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 869, + ERR_QUEST_FORCE_REMOVED_S = 870, + ERR_ATTACK_NO_ACTIONS = 871, + ERR_IN_RANDOM_BG = 872, + ERR_IN_NON_RANDOM_BG = 873, + ERR_BN_FRIEND_SELF = 874, + ERR_BN_FRIEND_ALREADY = 875, + ERR_BN_FRIEND_BLOCKED = 876, + ERR_BN_FRIEND_LIST_FULL = 877, + ERR_BN_FRIEND_REQUEST_SENT = 878, + ERR_BN_BROADCAST_THROTTLE = 879, + ERR_BG_DEVELOPER_ONLY = 880, + ERR_CURRENCY_SPELL_SLOT_MISMATCH = 881, + ERR_CURRENCY_NOT_TRADABLE = 882, + ERR_REQUIRES_EXPANSION_S = 883, + ERR_QUEST_FAILED_SPELL = 884, + ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 885, + ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 886, + ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 887, + ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 888, + ERR_TALENT_FAILED_UNKNOWN = 889, + ERR_TALENT_FAILED_IN_COMBAT = 890, + ERR_TALENT_FAILED_IN_PVP_MATCH = 891, + ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 892, + ERR_WARGAME_REQUEST_FAILURE = 893, + ERR_RANK_REQUIRES_AUTHENTICATOR = 894, + ERR_GUILD_BANK_VOUCHER_FAILED = 895, + ERR_WARGAME_REQUEST_SENT = 896, + ERR_REQUIRES_ACHIEVEMENT_I = 897, + ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 898, + ERR_CANT_BUY_QUANTITY = 899, + ERR_ITEM_IS_BATTLE_PAY_LOCKED = 900, + ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 901, + ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 902, + ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 903, + ERR_INSUFF_TRACKED_CURRENCY_IS = 904, + ERR_NOT_ON_TOURNAMENT_REALM = 905, + ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 906, + ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 907, + ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 908, + ERR_CANT_DO_THAT_IN_A_GROUP = 909, + ERR_GUILD_LEADER_REPLACED = 910, + ERR_TRANSMOGRIFY_CANT_EQUIP = 911, + ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 912, + ERR_TRANSMOGRIFY_NOT_SOULBOUND = 913, + ERR_TRANSMOGRIFY_INVALID_SOURCE = 914, + ERR_TRANSMOGRIFY_INVALID_DESTINATION = 915, + ERR_TRANSMOGRIFY_MISMATCH = 916, + ERR_TRANSMOGRIFY_LEGENDARY = 917, + ERR_TRANSMOGRIFY_SAME_ITEM = 918, + ERR_TRANSMOGRIFY_SAME_APPEARANCE = 919, + ERR_TRANSMOGRIFY_NOT_EQUIPPED = 920, + ERR_VOID_DEPOSIT_FULL = 921, + ERR_VOID_WITHDRAW_FULL = 922, + ERR_VOID_STORAGE_WRAPPED = 923, + ERR_VOID_STORAGE_STACKABLE = 924, + ERR_VOID_STORAGE_UNBOUND = 925, + ERR_VOID_STORAGE_REPAIR = 926, + ERR_VOID_STORAGE_CHARGES = 927, + ERR_VOID_STORAGE_QUEST = 928, + ERR_VOID_STORAGE_CONJURED = 929, + ERR_VOID_STORAGE_MAIL = 930, + ERR_VOID_STORAGE_BAG = 931, + ERR_VOID_TRANSFER_STORAGE_FULL = 932, + ERR_VOID_TRANSFER_INV_FULL = 933, + ERR_VOID_TRANSFER_INTERNAL_ERROR = 934, + ERR_VOID_TRANSFER_ITEM_INVALID = 935, + ERR_DIFFICULTY_DISABLED_IN_LFG = 936, + ERR_VOID_STORAGE_UNIQUE = 937, + ERR_VOID_STORAGE_LOOT = 938, + ERR_VOID_STORAGE_HOLIDAY = 939, + ERR_VOID_STORAGE_DURATION = 940, + ERR_VOID_STORAGE_LOAD_FAILED = 941, + ERR_VOID_STORAGE_INVALID_ITEM = 942, + ERR_VOID_STORAGE_ACCOUNT_ITEM = 943, + ERR_PARENTAL_CONTROLS_CHAT_MUTED = 944, + ERR_SOR_START_EXPERIENCE_INCOMPLETE = 945, + ERR_SOR_INVALID_EMAIL = 946, + ERR_SOR_INVALID_COMMENT = 947, + ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 948, + ERR_CHALLENGE_MODE_RESET_KEYSTONE = 949, + ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 950, + ERR_REPORT_SUBMITTED_SUCCESSFULLY = 951, + ERR_REPORT_SUBMISSION_FAILED = 952, + ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 953, + ERR_BUG_SUBMITTED_SUCCESSFULLY = 954, + ERR_CHALLENGE_MODE_ENABLED = 955, + ERR_CHALLENGE_MODE_DISABLED = 956, + ERR_PETBATTLE_CREATE_FAILED = 957, + ERR_PETBATTLE_NOT_HERE = 958, + ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 959, + ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 960, + ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 961, + ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 962, + ERR_PETBATTLE_NOT_WHILE_DEAD = 963, + ERR_PETBATTLE_NOT_WHILE_FLYING = 964, + ERR_PETBATTLE_TARGET_INVALID = 965, + ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 966, + ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 967, + ERR_PETBATTLE_NOT_A_TRAINER = 968, + ERR_PETBATTLE_DECLINED = 969, + ERR_PETBATTLE_IN_BATTLE = 970, + ERR_PETBATTLE_INVALID_LOADOUT = 971, + ERR_PETBATTLE_ALL_PETS_DEAD = 972, + ERR_PETBATTLE_NO_PETS_IN_SLOTS = 973, + ERR_PETBATTLE_NO_ACCOUNT_LOCK = 974, + ERR_PETBATTLE_WILD_PET_TAPPED = 975, + ERR_PETBATTLE_RESTRICTED_ACCOUNT = 976, + ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 977, + ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 978, + ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 979, + ERR_CANT_HAVE_MORE_PETS = 980, + ERR_PVP_MAP_NOT_FOUND = 981, + ERR_PVP_MAP_NOT_SET = 982, + ERR_PETBATTLE_QUEUE_QUEUED = 983, + ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 984, + ERR_PETBATTLE_QUEUE_JOIN_FAILED = 985, + ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 986, + ERR_PETBATTLE_QUEUE_REMOVED = 987, + ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 988, + ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 989, + ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 990, + ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 991, + ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 992, + ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 993, + ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 994, + ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 995, + ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 996, + ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 997, + ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 998, + ERR_PETBATTLE_QUEUE_SLOT_DEAD = 999, + ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 1000, + ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 1001, + ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 1002, + ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 1003, + ERR_HAS_RESTRICTION = 1004, + ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 1005, + ERR_ITEM_UPGRADE_NO_PATH = 1006, + ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 1007, + ERR_BONUS_ROLL_EMPTY = 1008, + ERR_CHALLENGE_MODE_FULL = 1009, + ERR_CHALLENGE_MODE_IN_PROGRESS = 1010, + ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 1011, + ERR_START_RESTRICTED_CHALLENGE_MODE = 1012, + ERR_BATTLETAG_FRIEND_NOT_FOUND = 1013, + ERR_BATTLETAG_FRIEND_NOT_VALID = 1014, + ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 1015, + ERR_BATTLETAG_FRIEND_THROTTLED = 1016, + ERR_BATTLETAG_FRIEND_SUCCESS = 1017, + ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 1018, + ERR_PETBATTLE_INTERNAL = 1019, + ERR_CANT_CAGE_PET_YET = 1020, + ERR_NO_LOOT_IN_CHALLENGE_MODE = 1021, + ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 1022, + ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 1023, + ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 1024, + ERR_RECRUIT_A_FRIEND_FAILED = 1025, + ERR_SET_LOOT_PERSONAL = 1026, + ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1027, + ERR_REAGENT_BANK_FULL = 1028, + ERR_REAGENT_BANK_LOCKED = 1029, + ERR_GARRISON_BUILDING_EXISTS = 1030, + ERR_GARRISON_INVALID_PLOT = 1031, + ERR_GARRISON_INVALID_BUILDINGID = 1032, + ERR_GARRISON_INVALID_PLOT_BUILDING = 1033, + ERR_GARRISON_REQUIRES_BLUEPRINT = 1034, + ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1035, + ERR_GARRISON_NOT_ENOUGH_GOLD = 1036, + ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1037, + ERR_ALREADY_USING_LFG_LIST = 1038, + ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1039, + ERR_TOY_USE_LIMIT_REACHED = 1040, + ERR_TOY_ALREADY_KNOWN = 1041, + ERR_TRANSMOG_SET_ALREADY_KNOWN = 1042, + ERR_NOT_ENOUGH_CURRENCY = 1043, + ERR_SPEC_IS_DISABLED = 1044, + ERR_FEATURE_RESTRICTED_TRIAL = 1045, + ERR_CANT_BE_OBLITERATED = 1046, + ERR_CANT_BE_SCRAPPED = 1047, + ERR_CANT_BE_RECRAFTED = 1048, + ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1049, + ERR_MUST_EQUIP_ARTIFACT = 1050, + ERR_CANT_DO_THAT_RIGHT_NOW = 1051, + ERR_AFFECTING_COMBAT = 1052, + ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1053, + ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1054, + ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1055, + ERR_MOVIE_RECORDING_WARNING_PERF = 1056, + ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1057, + ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1058, + ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1059, + ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1060, + ERR_NO_CHALLENGE_MODE_REWARD = 1061, + ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1062, + ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1063, + ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1064, + ERR_TALENT_FAILED_REST_AREA = 1065, + ERR_CANNOT_ABANDON_LAST_PET = 1066, + ERR_TEST_CVAR_SET_SSS = 1067, + ERR_QUEST_TURN_IN_FAIL_REASON = 1068, + ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1069, + ERR_TALENT_GRANTED_BY_AURA = 1070, + ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1071, + ERR_GLYPH_TARGET_NOT_AVAILABLE = 1072, + ERR_PVP_WARMODE_TOGGLE_ON = 1073, + ERR_PVP_WARMODE_TOGGLE_OFF = 1074, + ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1075, + ERR_SPELL_FAILED_CANT_FLY_HERE = 1076, + ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1077, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1078, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1079, + ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1080, + ERR_VOICE_CHAT_SERVICE_LOST = 1081, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1082, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1083, + ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1084, + ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1085, + ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1086, + ERR_VOICE_CHAT_PLAYER_SILENCED = 1087, + ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1088, + ERR_VOICE_CHAT_DISABLED = 1089, + ERR_NO_PVP_REWARD = 1090, + ERR_CLAIMED_PVP_REWARD = 1091, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1092, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1093, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1094, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1095, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1096, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1097, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1098, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1099, + ERR_SOCKETING_GENERIC_FAILURE = 1100, + ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1101, + ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1102, + ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1103, + ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1104, + ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1105, + ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1106, + ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1107, + ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1108, + ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1109, + ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1110, + ERR_SOCKETING_REQUIRES_TINKER_GEM = 1111, + ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1112, + ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1113, + ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1114, + ERR_SOCKETING_REQUIRES_FRAGRANCE_GEM = 1115, + ERR_SOCKETING_FRAGRANCE_GEM_ONLY_IN_FRAGRANCESLOT = 1116, + ERR_SOCKETING_REQUIRES_SINGING_THUNDER_GEM = 1117, + ERR_SOCKETING_SINGINGTHUNDER_GEM_ONLY_IN_SINGINGTHUNDERSLOT = 1118, + ERR_SOCKETING_REQUIRES_SINGING_SEA_GEM = 1119, + ERR_SOCKETING_SINGINGSEA_GEM_ONLY_IN_SINGINGSEASLOT = 1120, + ERR_SOCKETING_REQUIRES_SINGING_WIND_GEM = 1121, + ERR_SOCKETING_SINGINGWIND_GEM_ONLY_IN_SINGINGWINDSLOT = 1122, + ERR_SOCKETING_REQUIRES_FIBER_GEM = 1123, + ERR_SOCKETING_FIBER_GEM_ONLY_IN_FIBERSLOT = 1124, + ERR_LEVEL_LINKING_RESULT_LINKED = 1125, + ERR_LEVEL_LINKING_RESULT_UNLINKED = 1126, + ERR_CLUB_FINDER_ERROR_POST_CLUB = 1127, + ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1128, + ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1129, + ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1130, + ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1131, + ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1132, + ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1133, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1134, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1135, + ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1136, + ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1137, + ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1138, + ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1139, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1140, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1141, + ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1142, + ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1143, + ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1144, + ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1145, + ERR_SOULBIND_INVALID_CONDUIT = 1146, + ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1147, + ERR_SOULBIND_INVALID_TALENT = 1148, + ERR_SOULBIND_DUPLICATE_CONDUIT = 1149, + ERR_ACTIVATE_SOULBIND_S = 1150, + ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1151, + ERR_CANT_USE_PROFANITY = 1152, + ERR_NOT_IN_PET_BATTLE = 1153, + ERR_NOT_IN_NPE = 1154, + ERR_NO_SPEC = 1155, + ERR_NO_DOMINATIONSHARD_OVERWRITE = 1156, + ERR_USE_WEEKLY_REWARDS_DISABLED = 1157, + ERR_CROSS_FACTION_GROUP_JOINED = 1158, + ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1159, + ERR_EQUIPABLESPELLS_SLOTS_FULL = 1160, + ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1161, + ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1162, + ERR_NO_SOULBOUND_ITEM_IN_ACCOUNT_BANK = 1163, + ERR_NO_REFUNDABLE_ITEM_IN_ACCOUNT_BANK = 1164, + ERR_CANT_DELETE_IN_ACCOUNT_BANK = 1165, + ERR_NO_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1166, + ERR_NO_OPEN_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1167, + ERR_CANT_TRADE_ACCOUNT_ITEM = 1168, + ERR_NO_ACCOUNT_INVENTORY_LOCK = 1169, + ERR_BANK_NOT_ACCESSIBLE = 1170, + ERR_TOO_MANY_ACCOUNT_BANK_TABS = 1171, + ERR_BANK_TAB_NOT_UNLOCKED = 1172, + ERR_ACCOUNT_MONEY_LOCKED = 1173, + ERR_BANK_TAB_INVALID_NAME = 1174, + ERR_BANK_TAB_INVALID_TEXT = 1175, + ERR_CHARACTER_BANK_NOT_CONVERTED = 1176, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1177, + ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1178, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1179, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1180, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1181, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1182, + ERR_WOW_LABS_SET_WOW_LABS_AREA_ID_FAILED = 1183, + ERR_PLUNDERSTORM_CANNOT_QUEUE = 1184, + ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1185, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1186, + ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1187, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1188, + ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1189, + ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1190, + ERR_REMIX_INVALID_TRANSFER_REQUEST = 1191, + ERR_CURRENCY_TRANSFER_INVALID_CHARACTER = 1192, + ERR_CURRENCY_TRANSFER_INVALID_CURRENCY = 1193, + ERR_CURRENCY_TRANSFER_INSUFFICIENT_CURRENCY = 1194, + ERR_CURRENCY_TRANSFER_MAX_QUANTITY = 1195, + ERR_CURRENCY_TRANSFER_NO_VALID_SOURCE = 1196, + ERR_CURRENCY_TRANSFER_CHARACTER_LOGGED_IN = 1197, + ERR_CURRENCY_TRANSFER_SERVER_ERROR = 1198, + ERR_CURRENCY_TRANSFER_UNMET_REQUIREMENTS = 1199, + ERR_CURRENCY_TRANSFER_TRANSACTION_IN_PROGRESS = 1200, + ERR_CURRENCY_TRANSFER_DISABLED = 1201, + ERR_RECENT_ALLY_PIN_SERVER_ERROR = 1202, }; enum class MountResult : uint32 diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp index de56c390a6c..c5c0a71a413 100644 --- a/src/server/game/Server/Packets/CalendarPackets.cpp +++ b/src/server/game/Server/Packets/CalendarPackets.cpp @@ -332,7 +332,7 @@ WorldPacket const* CalendarInviteStatus::Write() _worldPacket << InviteGuid; _worldPacket << uint64(EventID); _worldPacket << Date; - _worldPacket << uint32(Flags); + _worldPacket << uint16(Flags); _worldPacket << uint8(Status); _worldPacket << ResponseTime; _worldPacket << Bits<1>(ClearPending); @@ -345,7 +345,7 @@ WorldPacket const* CalendarInviteRemoved::Write() { _worldPacket << InviteGuid; _worldPacket << uint64(EventID); - _worldPacket << uint32(Flags); + _worldPacket << uint16(Flags); _worldPacket << Bits<1>(ClearPending); _worldPacket.FlushBits(); @@ -367,7 +367,7 @@ WorldPacket const* CalendarInviteRemovedAlert::Write() { _worldPacket << uint64(EventID); _worldPacket << Date; - _worldPacket << uint32(Flags); + _worldPacket << uint16(Flags); _worldPacket << uint8(Status); return &_worldPacket; @@ -472,7 +472,7 @@ WorldPacket const* CalendarInviteStatusAlert::Write() { _worldPacket << uint64(EventID); _worldPacket << Date; - _worldPacket << uint32(Flags); + _worldPacket << uint16(Flags); _worldPacket << uint8(Status); return &_worldPacket; diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h index f2457e803eb..ba1f63f97b0 100644 --- a/src/server/game/Server/Packets/CalendarPackets.h +++ b/src/server/game/Server/Packets/CalendarPackets.h @@ -293,7 +293,7 @@ namespace WorldPackets WorldPacket const* Write() override; - uint32 Flags = 0; + uint16 Flags = 0; uint64 EventID = 0; uint8 Status = 0; bool ClearPending = false; @@ -311,7 +311,7 @@ namespace WorldPackets ObjectGuid InviteGuid; uint64 EventID = 0; - uint32 Flags = 0; + uint16 Flags = 0; bool ClearPending = false; }; @@ -337,7 +337,7 @@ namespace WorldPackets uint64 EventID = 0; WowTime Date; - uint32 Flags = 0; + uint16 Flags = 0; uint8 Status = 0; }; @@ -543,7 +543,7 @@ namespace WorldPackets WorldPacket const* Write() override; uint64 EventID = 0; - uint32 Flags = 0; + uint16 Flags = 0; WowTime Date; uint8 Status = 0; }; diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 88a897400aa..dafa4fbe1d6 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -86,11 +86,11 @@ EnumCharactersResult::CharacterInfoBasic::CharacterInfoBasic(Field const* fields // "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, " // 11 12 13 14 15 16 17 // "guild_member.guildid, characters.playerFlags, characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, " - // 18 19 20 21 22 - // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, " - // 23 24 25 26 27 + // 18 19 20 21 22 23 + // "character_banned.guid, characters.slot, characters.createTime, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, " + // 24 25 26 27 28 // "characters.personalTabardEmblemStyle, characters.personalTabardEmblemColor, characters.personalTabardBorderStyle, characters.personalTabardBorderColor, characters.personalTabardBackgroundColor " - // 28 + // 29 // "character_declinedname.genitive" Guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); @@ -129,7 +129,7 @@ EnumCharactersResult::CharacterInfoBasic::CharacterInfoBasic(Field const* fields if (fields[18].GetUInt64()) Flags |= CHARACTER_FLAG_LOCKED_BY_BILLING; - if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && !fields[28].GetStringView().empty()) + if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && !fields[29].GetStringView().empty()) Flags |= CHARACTER_FLAG_DECLINED; if (atLoginFlags & AT_LOGIN_CUSTOMIZE) @@ -172,17 +172,18 @@ EnumCharactersResult::CharacterInfoBasic::CharacterInfoBasic(Field const* fields std::vector<std::string_view> equipment = Trinity::Tokenize(fields[17].GetStringView(), ' ', false); ListPosition = fields[19].GetUInt8(); - LastActiveTime = fields[20].GetInt64(); - if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(ClassID, fields[21].GetUInt8())) + CreateTime = fields[20].GetInt64(); + LastActiveTime = fields[21].GetInt64(); + if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(ClassID, fields[22].GetUInt8())) SpecID = spec->ID; - LastLoginVersion = fields[22].GetUInt32(); + LastLoginVersion = fields[23].GetUInt32(); - PersonalTabard.EmblemStyle = fields[23].GetInt32(); - PersonalTabard.EmblemColor = fields[24].GetInt32(); - PersonalTabard.BorderStyle = fields[25].GetInt32(); - PersonalTabard.BorderColor = fields[26].GetInt32(); - PersonalTabard.BackgroundColor = fields[27].GetInt32(); + PersonalTabard.EmblemStyle = fields[24].GetInt32(); + PersonalTabard.EmblemColor = fields[25].GetInt32(); + PersonalTabard.BorderStyle = fields[26].GetInt32(); + PersonalTabard.BorderColor = fields[27].GetInt32(); + PersonalTabard.BackgroundColor = fields[28].GetInt32(); constexpr std::size_t equipmentFieldsPerSlot = 5; @@ -240,6 +241,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasi data << visualItem; data << int32(charInfo.SaveVersion); + data << charInfo.CreateTime; data << charInfo.LastActiveTime; data << int32(charInfo.LastLoginVersion); data << charInfo.PersonalTabard; @@ -467,7 +469,7 @@ void CreateCharacter::Read() WorldPacket const* CreateChar::Write() { - _worldPacket << uint8(Code); + _worldPacket << uint32(Code); _worldPacket << Guid; return &_worldPacket; @@ -480,7 +482,7 @@ void CharDelete::Read() WorldPacket const* DeleteChar::Write() { - _worldPacket << uint8(Code); + _worldPacket << uint32(Code); return &_worldPacket; } @@ -497,7 +499,7 @@ void CharacterRenameRequest::Read() WorldPacket const* CharacterRenameResult::Write() { - _worldPacket << uint8(Result); + _worldPacket << uint32(Result); _worldPacket << OptionalInit(Guid); _worldPacket << SizedString::BitsSize<6>(Name); _worldPacket.FlushBits(); @@ -546,7 +548,7 @@ void CharRaceOrFactionChange::Read() WorldPacket const* CharFactionChangeResult::Write() { - _worldPacket << uint8(Result); + _worldPacket << uint32(Result); _worldPacket << Guid; _worldPacket << OptionalInit(Display); _worldPacket.FlushBits(); @@ -833,7 +835,7 @@ WorldPacket const* CharCustomizeSuccess::Write() WorldPacket const* CharCustomizeFailure::Write() { - _worldPacket << uint8(Result); + _worldPacket << uint32(Result); _worldPacket << CharGUID; return &_worldPacket; diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 5a78c17d976..ba3092fd655 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -167,6 +167,7 @@ namespace WorldPackets uint32 Flags4 = 0; ///< Character flags 4 @todo research bool FirstLogin = false; uint8 CantLoginReason = 0; + Timestamp<> CreateTime; Timestamp<> LastActiveTime; uint16 SpecID = 0; uint32 SaveVersion = 0; @@ -336,7 +337,7 @@ namespace WorldPackets WorldPacket const* Write() override; - uint8 Code = 0; ///< Result code @see enum ResponseCodes + uint32 Code = 0; ///< Result code @see enum ResponseCodes ObjectGuid Guid; }; @@ -357,7 +358,7 @@ namespace WorldPackets WorldPacket const* Write() override; - uint8 Code = 0; ///< Result code @see enum ResponseCodes + uint32 Code = 0; ///< Result code @see enum ResponseCodes }; class CharacterRenameRequest final : public ClientPacket @@ -382,7 +383,7 @@ namespace WorldPackets WorldPacket const* Write() override; std::string Name; - uint8 Result = 0; + uint32 Result = 0; Optional<ObjectGuid> Guid; }; @@ -445,7 +446,7 @@ namespace WorldPackets WorldPacket const* Write() override; - uint8 Result = 0; ///< @see enum ResponseCodes + uint32 Result = 0; ///< @see enum ResponseCodes ObjectGuid Guid; Optional<CharFactionChangeDisplayInfo> Display; }; @@ -847,7 +848,7 @@ namespace WorldPackets WorldPacket const* Write() override; - uint8 Result = 0; + uint32 Result = 0; ObjectGuid CharGUID; }; diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index 8135eb6d5c1..ad2c672891e 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -52,6 +52,7 @@ WorldPacket const* SpellNonMeleeDamageLog::Write() *this << int32(Absorbed); *this << int32(Resisted); *this << int32(ShieldBlock); + *this << int32(Flags); *this << Size<uint32>(WorldTextViewers); *this << Size<uint32>(Supporters); @@ -59,7 +60,6 @@ WorldPacket const* SpellNonMeleeDamageLog::Write() *this << supportInfo; *this << Bits<1>(Periodic); - *this << Bits<7>(Flags); *this << Bits<1>(false); // Debug info WriteLogDataBit(); *this << OptionalInit(ContentTuning); diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index e3701a7d09e..881a4db5507 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -89,12 +89,12 @@ ByteBuffer& operator<<(ByteBuffer& data, GuildRosterMemberData const& rosterMemb data << uint8(rosterMemberData.Gender); data << uint64(rosterMemberData.GuildClubMemberID); data << uint8(rosterMemberData.RaceID); + data << int32(rosterMemberData.TimerunningSeasonID); data << SizedString::BitsSize<6>(rosterMemberData.Name); data << SizedString::BitsSize<8>(rosterMemberData.Note); data << SizedString::BitsSize<8>(rosterMemberData.OfficerNote); data << Bits<1>(rosterMemberData.Authenticated); - data << Bits<1>(rosterMemberData.SorEligible); data.FlushBits(); data << rosterMemberData.DungeonScore; @@ -861,7 +861,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GuildNewsEvent const& newsEvent) { data << int32(newsEvent.Id); data << newsEvent.CompletedDate; - data << int32(newsEvent.Type); + data << int8(newsEvent.Type); data << int32(newsEvent.Flags); for (std::size_t i = 0; i < newsEvent.Data.size(); ++i) @@ -870,7 +870,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GuildNewsEvent const& newsEvent) data << newsEvent.MemberGuid; data << Size<uint32>(newsEvent.MemberList); - for (ObjectGuid memberGuid : newsEvent.MemberList) + for (ObjectGuid const& memberGuid : newsEvent.MemberList) data << memberGuid; data << OptionalInit(newsEvent.Item); diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index 566830dfa7c..186a29805e8 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -105,18 +105,18 @@ namespace WorldPackets int32 GuildReputation = 0; int32 GuildRepToCap = 0; float LastSave = 0.0f; - std::string Name; + std::string_view Name; uint32 VirtualRealmAddress = 0; - std::string Note; - std::string OfficerNote; + std::string_view Note; + std::string_view OfficerNote; uint8 Status = 0; uint8 Level = 0; uint8 ClassID = 0; uint8 Gender = 0; uint64 GuildClubMemberID = 0; uint8 RaceID = 0; + int32 TimerunningSeasonID = 0; bool Authenticated = false; - bool SorEligible = false; GuildRosterProfessionData Profession[2]; MythicPlus::DungeonScoreSummary DungeonScore; }; @@ -1069,7 +1069,7 @@ namespace WorldPackets { int32 Id = 0; WowTime CompletedDate; - int32 Type = 0; + int8 Type = 0; int32 Flags = 0; std::array<int32, 2> Data = { }; ObjectGuid MemberGuid; diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index 0dcf8eacb17..26b2b6c2d04 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -107,7 +107,7 @@ void ItemPurchaseRefund::Read() WorldPacket const* ItemPurchaseRefundResult::Write() { _worldPacket << ItemGUID; - _worldPacket << uint8(Result); + _worldPacket << uint32(Result); _worldPacket << OptionalInit(Contents); _worldPacket.FlushBits(); if (Contents) diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index b783d6cc5a9..2375360cea7 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -145,7 +145,7 @@ namespace WorldPackets WorldPacket const* Write() override; - uint8 Result = 0; + uint32 Result = 0; ObjectGuid ItemGUID; Optional<ItemPurchaseContents> Contents; }; diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp index b26ae5e1a53..de1a0d3e2ce 100644 --- a/src/server/game/Server/Packets/LFGPackets.cpp +++ b/src/server/game/Server/Packets/LFGPackets.cpp @@ -204,7 +204,7 @@ WorldPacket const* LFGUpdateStatus::Write() { _worldPacket << Ticket; _worldPacket << uint8(SubType); - _worldPacket << uint8(Reason); + _worldPacket << uint32(Reason); _worldPacket << Size<uint32>(Slots); _worldPacket << uint8(RequestedRoles); _worldPacket << Size<uint32>(SuspendedPlayers); diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h index 438dcb32a9b..71ae7753269 100644 --- a/src/server/game/Server/Packets/LFGPackets.h +++ b/src/server/game/Server/Packets/LFGPackets.h @@ -224,7 +224,7 @@ namespace WorldPackets RideTicket Ticket; uint8 SubType = 0; - uint8 Reason = 0; + uint32 Reason = 0; std::vector<uint32> Slots; uint8 RequestedRoles = 0; std::vector<ObjectGuid> SuspendedPlayers; diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp index 4764e9e240a..12ce2572dc0 100644 --- a/src/server/game/Server/Packets/MailPackets.cpp +++ b/src/server/game/Server/Packets/MailPackets.cpp @@ -293,7 +293,7 @@ WorldPacket const* MailQueryNextTimeResult::Write() _worldPacket << entry.SenderGuid; _worldPacket << float(entry.TimeLeft); _worldPacket << int32(entry.AltSenderID); - _worldPacket << int8(entry.AltSenderType); + _worldPacket << int32(entry.AltSenderType); _worldPacket << int32(entry.StationeryID); } diff --git a/src/server/game/Server/Packets/MailPackets.h b/src/server/game/Server/Packets/MailPackets.h index 40ae9cd8224..fd25fcd2311 100644 --- a/src/server/game/Server/Packets/MailPackets.h +++ b/src/server/game/Server/Packets/MailPackets.h @@ -214,7 +214,7 @@ namespace WorldPackets ObjectGuid SenderGuid; float TimeLeft = 0.0f; int32 AltSenderID = 0; - int8 AltSenderType = 0; + int32 AltSenderType = 0; int32 StationeryID = 0; }; diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 99048b68644..b3a3ea8487d 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -121,6 +121,7 @@ WorldPacket const* SetupCurrency::Write() { _worldPacket << int32(data.Type); _worldPacket << int32(data.Quantity); + _worldPacket << uint8(data.Flags); _worldPacket << OptionalInit(data.WeeklyQuantity); _worldPacket << OptionalInit(data.MaxWeeklyQuantity); @@ -129,7 +130,6 @@ WorldPacket const* SetupCurrency::Write() _worldPacket << OptionalInit(data.TotalEarned); _worldPacket << OptionalInit(data.NextRechargeTime); _worldPacket << OptionalInit(data.RechargeCycleStartTime); - _worldPacket << Bits<5>(data.Flags); _worldPacket.FlushBits(); if (data.WeeklyQuantity) diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 629544a68de..07ff6f59274 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -340,27 +340,13 @@ ByteBuffer& operator<<(ByteBuffer& data, MonsterSplineUnknown901 const& unk) ByteBuffer& operator<<(ByteBuffer& data, MovementSpline const& movementSpline) { data << uint32(movementSpline.Flags); + data << uint8(movementSpline.Face); data << int32(movementSpline.Elapsed); data << uint32(movementSpline.MoveTime); data << uint32(movementSpline.FadeObjectTime); data << uint8(movementSpline.Mode); data << movementSpline.TransportGUID; data << int8(movementSpline.VehicleSeat); - data << Bits<2>(movementSpline.Face); - data << BitsSize<16>(movementSpline.Points); - data << Bits<1>(movementSpline.VehicleExitVoluntary); - data << Bits<1>(movementSpline.TaxiSmoothing); - data << BitsSize<16>(movementSpline.PackedDeltas); - data << OptionalInit(movementSpline.SplineFilter); - data << OptionalInit(movementSpline.SpellEffectExtraData); - data << OptionalInit(movementSpline.JumpExtraData); - data << OptionalInit(movementSpline.TurnData); - data << OptionalInit(movementSpline.AnimTierTransition); - data << OptionalInit(movementSpline.Unknown901); - data.FlushBits(); - - if (movementSpline.SplineFilter) - data << *movementSpline.SplineFilter; switch (movementSpline.Face) { @@ -376,6 +362,21 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementSpline const& movementSpline) break; } + data << BitsSize<16>(movementSpline.Points); + data << Bits<1>(movementSpline.VehicleExitVoluntary); + data << Bits<1>(movementSpline.TaxiSmoothing); + data << BitsSize<16>(movementSpline.PackedDeltas); + data << OptionalInit(movementSpline.SplineFilter); + data << OptionalInit(movementSpline.SpellEffectExtraData); + data << OptionalInit(movementSpline.JumpExtraData); + data << OptionalInit(movementSpline.TurnData); + data << OptionalInit(movementSpline.AnimTierTransition); + data << OptionalInit(movementSpline.Unknown901); + data.FlushBits(); + + if (movementSpline.SplineFilter) + data << *movementSpline.SplineFilter; + for (TaggedPosition<Position::XYZ> const& pos : movementSpline.Points) data << pos; diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index b05a44c5864..643048900b6 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -42,8 +42,8 @@ ByteBuffer& operator<<(ByteBuffer& data, TreasureLootList const& treasureLootLis ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption) { data << int32(gossipOption.GossipOptionID); + data << int32(gossipOption.OptionFlags); data << uint8(gossipOption.OptionNPC); - data << int8(gossipOption.OptionFlags); data << uint64(gossipOption.OptionCost); data << uint32(gossipOption.OptionLanguage); data << int32(gossipOption.Flags); @@ -167,7 +167,7 @@ WorldPacket const* VendorInventory::Write() WorldPacket const* TrainerList::Write() { _worldPacket << TrainerGUID; - _worldPacket << uint32(TrainerType); + _worldPacket << int8(TrainerType); _worldPacket << uint32(TrainerID); _worldPacket << Size<uint32>(Spells); diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index 9209613338b..ae2e8d9d440 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -79,7 +79,7 @@ namespace WorldPackets { int32 GossipOptionID = 0; GossipOptionNpc OptionNPC = {}; - uint8 OptionFlags = 0; + int32 OptionFlags = 0; uint64 OptionCost = 0; uint32 OptionLanguage = 0; GossipOptionFlags Flags = {}; @@ -90,7 +90,7 @@ namespace WorldPackets TreasureLootList Treasure; Optional<int32> SpellID; Optional<int32> OverrideIconID; - std::string FailureDescription; + std::string_view FailureDescription; }; struct ClientGossipText @@ -103,7 +103,7 @@ namespace WorldPackets bool ResetByScheduler = false; bool Important = false; bool Meta = false; - std::string QuestTitle; + std::string_view QuestTitle; std::array<int32, 4> QuestFlags = { }; }; @@ -207,7 +207,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid TrainerGUID; - int32 TrainerType = 0; + int8 TrainerType = 0; int32 TrainerID = 1; std::vector<TrainerListSpell> Spells; std::string Greeting; @@ -226,7 +226,7 @@ namespace WorldPackets int32 Icon = 0; int32 Importance = 0; int32 WMOGroupID = 0; - std::string Name; + std::string_view Name; }; class SpiritHealerActivate final : public ClientPacket diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 1c329d41239..42893d3e350 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -213,7 +213,7 @@ ByteBuffer& operator<<(ByteBuffer& data, PartyMemberStats const& memberStats) for (uint32 i = 0; i < 2; i++) data << uint8(memberStats.PartyType[i]); - data << uint16(memberStats.Status); + data << uint32(memberStats.Status); data << uint8(memberStats.PowerType); data << uint16(memberStats.PowerDisplayID); data << int32(memberStats.CurrentHealth); @@ -503,6 +503,7 @@ ByteBuffer& operator<<(ByteBuffer& data, ChallengeModeData const& challengeMode) data << int64(challengeMode.Unknown_1120_4); data << challengeMode.KeystoneOwnerGUID; data << challengeMode.LeaverGUID; + data << challengeMode.InstanceAbandonVoteCooldown; data << Bits<1>(challengeMode.IsActive); data << Bits<1>(challengeMode.HasRestrictions); data << Bits<1>(challengeMode.CanVoteAbandon); diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index 5b8e4c2ca1e..2e005b7832a 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -193,7 +193,7 @@ namespace WorldPackets struct PartyMemberStats { uint16 Level = 0; - uint16 Status = 0; + uint32 Status = 0; int32 CurrentHealth = 0; int32 MaxHealth = 0; @@ -574,6 +574,7 @@ namespace WorldPackets int64 Unknown_1120_4 = 0; ObjectGuid KeystoneOwnerGUID; ObjectGuid LeaverGUID; + Duration<Milliseconds> InstanceAbandonVoteCooldown; bool IsActive = false; bool HasRestrictions = false; bool CanVoteAbandon = false; diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp index 9aede562bdc..774c340d3d9 100644 --- a/src/server/game/Server/Packets/PetPackets.cpp +++ b/src/server/game/Server/Packets/PetPackets.cpp @@ -84,7 +84,7 @@ WorldPacket const* PetUnlearnedSpells::Write() WorldPacket const* PetNameInvalid::Write() { - _worldPacket << uint8(Result); + _worldPacket << uint32(Result); _worldPacket << RenameData.PetGUID; _worldPacket << int32(RenameData.PetNumber); @@ -189,8 +189,8 @@ WorldPacket const* SetPetSpecialization::Write() WorldPacket const* PetActionFeedback::Write() { + _worldPacket << int32(Response); _worldPacket << int32(SpellID); - _worldPacket << uint8(Response); return &_worldPacket; } @@ -205,7 +205,7 @@ WorldPacket const* PetActionSound::Write() WorldPacket const* PetTameFailure::Write() { - _worldPacket << uint8(Result); + _worldPacket << uint32(Result); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h index 9e60860039c..f59f111fb30 100644 --- a/src/server/game/Server/Packets/PetPackets.h +++ b/src/server/game/Server/Packets/PetPackets.h @@ -176,7 +176,7 @@ namespace WorldPackets PetRenameData RenameData; - uint8 Result = 0; + uint32 Result = 0; }; class PetRename final : public ClientPacket @@ -243,8 +243,8 @@ namespace WorldPackets WorldPacket const* Write() override; - int32 SpellID = 0; ::PetActionFeedback Response = ::PetActionFeedback::None; + int32 SpellID = 0; }; class PetActionSound final : public ServerPacket @@ -265,7 +265,7 @@ namespace WorldPackets WorldPacket const* Write() override; - uint8 Result = 0; + uint32 Result = 0; }; class PetMode final : public ServerPacket diff --git a/src/server/game/Server/Packets/PetitionPackets.cpp b/src/server/game/Server/Packets/PetitionPackets.cpp index 59f9596828f..442718b21ab 100644 --- a/src/server/game/Server/Packets/PetitionPackets.cpp +++ b/src/server/game/Server/Packets/PetitionPackets.cpp @@ -41,7 +41,7 @@ ByteBuffer& operator<<(ByteBuffer& data, PetitionInfo const& petitionInfo) data << int32(petitionInfo.AllowedMinLevel); data << int32(petitionInfo.AllowedMaxLevel); data << int32(petitionInfo.NumChoices); - data << int32(petitionInfo.StaticType); + data << int8(petitionInfo.StaticType); data << uint32(petitionInfo.Muid); data << SizedString::BitsSize<8>(petitionInfo.Title); diff --git a/src/server/game/Server/Packets/PetitionPackets.h b/src/server/game/Server/Packets/PetitionPackets.h index fc8b59e4e23..fb468c17593 100644 --- a/src/server/game/Server/Packets/PetitionPackets.h +++ b/src/server/game/Server/Packets/PetitionPackets.h @@ -53,7 +53,7 @@ namespace WorldPackets int32 AllowedMinLevel = 0; int32 AllowedMaxLevel = 0; int32 NumChoices = 0; - int32 StaticType = 0; + int8 StaticType = 0; uint32 Muid = 0; std::array<std::string, 10> Choicetext; }; diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index bef3ef35892..31e8ddb84ea 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -247,7 +247,7 @@ WorldPacket const* QuestUpdateAddCredit::Write() _worldPacket << int32(ObjectID); _worldPacket << uint16(Count); _worldPacket << uint16(Required); - _worldPacket << uint8(ObjectiveType); + _worldPacket << uint32(ObjectiveType); return &_worldPacket; }; @@ -256,7 +256,7 @@ WorldPacket const* QuestUpdateAddCreditSimple::Write() { _worldPacket << int32(QuestID); _worldPacket << int32(ObjectID); - _worldPacket << uint8(ObjectiveType); + _worldPacket << uint32(ObjectiveType); return &_worldPacket; } @@ -642,7 +642,7 @@ void QuestConfirmAccept::Read() WorldPacket const* QuestPushResultResponse::Write() { _worldPacket << SenderGUID; - _worldPacket << uint8(Result); + _worldPacket << uint32(Result); _worldPacket << SizedString::BitsSize<9>(QuestTitle); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 7c14b336127..1e29c381409 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -225,7 +225,7 @@ namespace WorldPackets int32 QuestID = 0; uint16 Count = 0; uint16 Required = 0; - uint8 ObjectiveType = 0; + uint32 ObjectiveType = 0; }; class QuestUpdateAddCreditSimple final : public ServerPacket @@ -237,7 +237,7 @@ namespace WorldPackets int32 QuestID = 0; int32 ObjectID = 0; - uint8 ObjectiveType = 0; + uint32 ObjectiveType = 0; }; class QuestUpdateAddPvPCredit final : public ServerPacket @@ -585,8 +585,8 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid SenderGUID; - uint8 Result = 0; - std::string QuestTitle; + uint32 Result = 0; + std::string_view QuestTitle; }; class QuestLogFull final : public ServerPacket @@ -606,7 +606,7 @@ namespace WorldPackets ObjectGuid SenderGUID; uint32 QuestID = 0; - uint8 Result = 0; + uint32 Result = 0; }; class QuestGiverInvalidQuest final : public ServerPacket diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index 4401695814e..20cbed5bf91 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -97,6 +97,7 @@ ByteBuffer& operator<<(ByteBuffer& data, AuraDataInfo const& auraData) data << int32(auraData.ContentTuningID); data << auraData.DstLocation; data << OptionalInit(auraData.CastUnit); + data << OptionalInit(auraData.CastItem); data << OptionalInit(auraData.Duration); data << OptionalInit(auraData.Remaining); data << OptionalInit(auraData.TimeMod); @@ -110,6 +111,9 @@ ByteBuffer& operator<<(ByteBuffer& data, AuraDataInfo const& auraData) if (auraData.CastUnit) data << *auraData.CastUnit; + if (auraData.CastItem) + data << *auraData.CastItem; + if (auraData.Duration) data << uint32(*auraData.Duration); @@ -162,18 +166,16 @@ ByteBuffer& operator>>(ByteBuffer& buffer, TargetLocation& location) ByteBuffer& operator>>(ByteBuffer& buffer, SpellTargetData& targetData) { - buffer.ResetBitPos(); + buffer >> targetData.Flags; + buffer >> targetData.Unit; + buffer >> targetData.Item; - buffer >> Bits<28>(targetData.Flags); buffer >> OptionalInit(targetData.SrcLocation); buffer >> OptionalInit(targetData.DstLocation); buffer >> OptionalInit(targetData.Orientation); buffer >> OptionalInit(targetData.MapID); buffer >> SizedString::BitsSize<7>(targetData.Name); - buffer >> targetData.Unit; - buffer >> targetData.Item; - if (targetData.SrcLocation) buffer >> *targetData.SrcLocation; @@ -222,6 +224,7 @@ ByteBuffer& operator>>(ByteBuffer& data, SpellExtraCurrencyCost& extraCurrencyCo ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request) { buffer >> request.CastID; + buffer >> request.SendCastFlags; buffer >> request.Misc[0]; buffer >> request.Misc[1]; buffer >> request.SpellID; @@ -236,18 +239,19 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request) for (SpellExtraCurrencyCost& optionalCurrency : request.OptionalCurrencies) buffer >> optionalCurrency; - buffer >> Bits<6>(request.SendCastFlags); + buffer >> request.Target; + + buffer.ResetBitPos(); buffer >> OptionalInit(request.MoveUpdate); buffer >> BitsSize<2>(request.Weight); buffer >> OptionalInit(request.CraftingOrderID); - buffer >> request.Target; - - if (request.CraftingOrderID) - buffer >> *request.CraftingOrderID; for (SpellCraftingReagent& optionalReagent : request.OptionalReagents) buffer >> optionalReagent; + if (request.CraftingOrderID) + buffer >> *request.CraftingOrderID; + for (SpellCraftingReagent& optionalReagent : request.RemovedModifications) buffer >> optionalReagent; @@ -302,7 +306,10 @@ ByteBuffer& operator<<(ByteBuffer& data, TargetLocation const& targetLocation) ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData) { - data << Bits<28>(spellTargetData.Flags); + data << uint32(spellTargetData.Flags); + data << spellTargetData.Unit; + data << spellTargetData.Item; + data << OptionalInit(spellTargetData.SrcLocation); data << OptionalInit(spellTargetData.DstLocation); data << OptionalInit(spellTargetData.Orientation); @@ -310,9 +317,6 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData) data << SizedString::BitsSize<7>(spellTargetData.Name); data.FlushBits(); - data << spellTargetData.Unit; - data << spellTargetData.Item; - if (spellTargetData.SrcLocation) data << *spellTargetData.SrcLocation; @@ -382,7 +386,7 @@ ByteBuffer& operator<<(ByteBuffer& data, CreatureImmunities const& immunities) ByteBuffer& operator<<(ByteBuffer& data, SpellHealPrediction const& spellPred) { data << int32(spellPred.Points); - data << uint8(spellPred.Type); + data << uint32(spellPred.Type); data << spellPred.BeaconGUID; return data; @@ -805,9 +809,9 @@ WorldPacket const* PlaySpellVisual::Write() _worldPacket << TargetPosition; _worldPacket << uint32(SpellVisualID); _worldPacket << float(TravelSpeed); - _worldPacket << uint16(HitReason); - _worldPacket << uint16(MissReason); - _worldPacket << uint16(ReflectStatus); + _worldPacket << uint8(HitReason); + _worldPacket << uint8(MissReason); + _worldPacket << uint8(ReflectStatus); _worldPacket << float(LaunchDelay); _worldPacket << float(MinDuration); _worldPacket << Bits<1>(SpeedAsTime); diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 25576be7588..a4b30b3d2d4 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -167,6 +167,7 @@ namespace WorldPackets int32 ContentTuningID = 0; Optional<ContentTuningParams> ContentTuning; Optional<ObjectGuid> CastUnit; + Optional<ObjectGuid> CastItem; Optional<int32> Duration; Optional<int32> Remaining; Optional<float> TimeMod; @@ -348,7 +349,7 @@ namespace WorldPackets { ObjectGuid BeaconGUID; uint32 Points = 0; - uint8 Type = 0; + uint32 Type = 0; }; struct SpellCastData @@ -765,9 +766,9 @@ namespace WorldPackets TaggedPosition<Position::XYZ> TargetPosition; // Overrides missile destination for SpellVisual::SpellVisualMissileSetID uint32 SpellVisualID = 0; float TravelSpeed = 0.0f; - uint16 HitReason = 0; - uint16 MissReason = 0; - uint16 ReflectStatus = 0; + uint8 HitReason = 0; + uint8 MissReason = 0; + uint8 ReflectStatus = 0; float LaunchDelay = 0.0f; float MinDuration = 0.0f; bool SpeedAsTime = false; diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index ee5c38e7b2f..804a3b7229a 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -144,6 +144,10 @@ WorldPacket const* FeatureSystemStatus::Write() _worldPacket << int32(AddonChatThrottle.MaxTries); _worldPacket << int32(AddonChatThrottle.TriesRestoredPerSecond); _worldPacket << int32(AddonChatThrottle.UsedTriesPerMessage); + _worldPacket << int32(GuildChatThrottle.UsedTriesPerMessage); + _worldPacket << int32(GuildChatThrottle.TriesRestoredPerSecond); + _worldPacket << int32(GroupChatThrottle.UsedTriesPerMessage); + _worldPacket << int32(GroupChatThrottle.TriesRestoredPerSecond); _worldPacket << float(AddonPerformanceMsgWarning); _worldPacket << float(AddonPerformanceMsgError); @@ -291,6 +295,8 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() _worldPacket << Size<uint32>(GameRules); _worldPacket << int32(ActiveTimerunningSeasonID); _worldPacket << int32(RemainingTimerunningSeasonSeconds); + _worldPacket << TimerunningConversionMinCharacterAge; + _worldPacket << int32(TimerunningConversionMaxSeasonID); _worldPacket << int16(MaxPlayerGuidLookupsPerRequest); _worldPacket << int16(NameLookupTelemetryInterval); _worldPacket << NotFoundCacheTimeSeconds; @@ -315,6 +321,28 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write() return &_worldPacket; } +ByteBuffer& operator<<(ByteBuffer& data, MirrorVarSingle const& variable) +{ + data << Bits<1>(variable.UpdateType); + data << SizedCString::BitsSize<24>(variable.Name); + data << SizedCString::BitsSize<24>(variable.Value); + data.FlushBits(); + + data << SizedCString::Data(variable.Name); + data << SizedCString::Data(variable.Value); + + return data; +} + +WorldPacket const* MirrorVars::Write() +{ + _worldPacket << Size<uint32>(Variables); + for (MirrorVarSingle const& variable : Variables) + _worldPacket << variable; + + return &_worldPacket; +} + WorldPacket const* SetTimeZoneInformation::Write() { _worldPacket << SizedString::BitsSize<7>(ServerTimeTZ); diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index b74adbc0fca..ff723b7412e 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -107,7 +107,7 @@ namespace WorldPackets uint32 RewardsVersion = 0; }; - struct AddonChatThrottleParams + struct ChatThrottleParams { int32 MaxTries = 0; int32 TriesRestoredPerSecond = 0; @@ -186,7 +186,9 @@ namespace WorldPackets int32 ActiveTimerunningSeasonID = 0; int32 RemainingTimerunningSeasonSeconds = 0; std::string Unknown1027; // related to movement lua functions used by keybinds - AddonChatThrottleParams AddonChatThrottle; + ChatThrottleParams AddonChatThrottle; + ChatThrottleParams GuildChatThrottle; + ChatThrottleParams GroupChatThrottle; uint32 RealmPvpTypeOverride = 0; ///< Use Cfg_Configs value = 0, ForceEnabled = 1, ForceDisabled = 2 float AddonPerformanceMsgWarning = 0.0f; float AddonPerformanceMsgError = 0.0f; @@ -250,6 +252,8 @@ namespace WorldPackets std::vector<GameRuleValuePair> GameRules; int32 ActiveTimerunningSeasonID = 0; int32 RemainingTimerunningSeasonSeconds = 0; + Duration<Seconds, int32> TimerunningConversionMinCharacterAge { 1_days }; + int32 TimerunningConversionMaxSeasonID = -1; int16 MaxPlayerGuidLookupsPerRequest = 50; int16 NameLookupTelemetryInterval = 600; Duration<Seconds, uint32> NotFoundCacheTimeSeconds = 10s; @@ -260,6 +264,26 @@ namespace WorldPackets std::string RealmHiddenAlert; }; + struct MirrorVarSingle + { + std::string_view Name; + std::string Value; + int32 UpdateType; + + MirrorVarSingle(std::string_view name, std::string_view value, int32 updateType = 0) + : Name(name), Value(value), UpdateType(updateType) { } + }; + + class MirrorVars final : public ServerPacket + { + public: + explicit MirrorVars() : ServerPacket(SMSG_MIRROR_VARS) { } + + WorldPacket const* Write() override; + + std::span<MirrorVarSingle> Variables; + }; + class SetTimeZoneInformation final : public ServerPacket { public: diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp index 63487076b02..1a9d373bf8b 100644 --- a/src/server/game/Server/Packets/TalentPackets.cpp +++ b/src/server/game/Server/Packets/TalentPackets.cpp @@ -61,6 +61,9 @@ ByteBuffer& operator<<(ByteBuffer& data, ClassicTalentGroupInfo const& talentGro if (!talentGroupInfo.GlyphIDs.empty()) data.append(talentGroupInfo.GlyphIDs.data(), talentGroupInfo.GlyphIDs.size()); + data.WriteBit(talentGroupInfo.Unused1125); + data.FlushBits(); + return data; } diff --git a/src/server/game/Server/Packets/TalentPackets.h b/src/server/game/Server/Packets/TalentPackets.h index 5b9566e83c2..a61e804c598 100644 --- a/src/server/game/Server/Packets/TalentPackets.h +++ b/src/server/game/Server/Packets/TalentPackets.h @@ -62,6 +62,7 @@ namespace WorldPackets std::vector<uint16> GlyphIDs; int8 Role = 0; int32 PrimarySpecialization = 0; + bool Unused1125 = false; }; struct ClassicTalentInfoUpdate diff --git a/src/server/game/Server/Packets/TokenPackets.cpp b/src/server/game/Server/Packets/TokenPackets.cpp index 374c6e0548e..db0b35c9ea6 100644 --- a/src/server/game/Server/Packets/TokenPackets.cpp +++ b/src/server/game/Server/Packets/TokenPackets.cpp @@ -34,8 +34,8 @@ WorldPacket const* CommerceTokenGetLogResponse::Write() { _worldPacket << auctionableTokenAuctionable.Id; _worldPacket << auctionableTokenAuctionable.LastUpdate; - _worldPacket << auctionableTokenAuctionable.Price; _worldPacket << auctionableTokenAuctionable.Status; + _worldPacket << auctionableTokenAuctionable.Price; _worldPacket << auctionableTokenAuctionable.DurationLeft; } @@ -49,9 +49,9 @@ void CommerceTokenGetMarketPrice::Read() WorldPacket const* CommerceTokenGetMarketPriceResponse::Write() { - _worldPacket << PriceGuarantee; _worldPacket << ClientToken; _worldPacket << ServerToken; + _worldPacket << PriceGuarantee; _worldPacket << PriceLockDurationSeconds; return &_worldPacket; diff --git a/src/server/game/Server/Packets/TokenPackets.h b/src/server/game/Server/Packets/TokenPackets.h index a31e4390094..d6844d37bb2 100644 --- a/src/server/game/Server/Packets/TokenPackets.h +++ b/src/server/game/Server/Packets/TokenPackets.h @@ -73,9 +73,9 @@ namespace WorldPackets WorldPacket const* Write() override; - uint64 PriceGuarantee = 0; uint32 ClientToken = 0; uint32 ServerToken = 0; + uint64 PriceGuarantee = 0; uint32 PriceLockDurationSeconds = 0; // preset auction duration enum }; } diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.cpp b/src/server/game/Server/Packets/TraitPacketsCommon.cpp index 692ed9cb330..66e3037661b 100644 --- a/src/server/game/Server/Packets/TraitPacketsCommon.cpp +++ b/src/server/game/Server/Packets/TraitPacketsCommon.cpp @@ -30,6 +30,7 @@ TraitEntry::TraitEntry(UF::TraitEntry const& ufEntry) TraitNodeEntryID = ufEntry.TraitNodeEntryID; Rank = ufEntry.Rank; GrantedRanks = ufEntry.GrantedRanks; + BonusRanks = ufEntry.BonusRanks; } TraitSubTreeCache::TraitSubTreeCache() = default; @@ -53,6 +54,7 @@ TraitConfig::TraitConfig(UF::TraitConfig const& ufConfig) LocalIdentifier = ufConfig.LocalIdentifier; SkillLineID = ufConfig.SkillLineID; TraitSystemID = ufConfig.TraitSystemID; + VariationID = ufConfig.VariationID; for (UF::TraitEntry const& ufEntry : ufConfig.Entries) Entries.emplace_back(ufEntry); for (UF::TraitSubTreeCache const& ufSubTree : ufConfig.SubTrees) @@ -140,6 +142,7 @@ ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig) break; case TraitConfigType::Generic: data >> traitConfig.TraitSystemID; + data >> traitConfig.VariationID; break; default: break; @@ -176,6 +179,7 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig) break; case TraitConfigType::Generic: data << int32(traitConfig.TraitSystemID); + data << int32(traitConfig.VariationID); break; default: break; diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.h b/src/server/game/Server/Packets/TraitPacketsCommon.h index 94b88e29746..4b97dd8d10e 100644 --- a/src/server/game/Server/Packets/TraitPacketsCommon.h +++ b/src/server/game/Server/Packets/TraitPacketsCommon.h @@ -66,6 +66,7 @@ struct TraitConfig int32 LocalIdentifier = 0; // Local to specialization int32 SkillLineID = 0; int32 TraitSystemID = 0; + int32 VariationID = 0; std::vector<TraitEntry> Entries; std::vector<TraitSubTreeCache> SubTrees; String<259> Name; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 23add3e1448..ba343184245 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -402,6 +402,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_CONVERSATION_LINE_STARTED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConversationLineStarted); DEFINE_HANDLER(CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CONVERT_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConvertRaidOpcode); + DEFINE_HANDLER(CMSG_CONVERT_TIMERUNNING_CHARACTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CRAFTING_ORDER_CANCEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CRAFTING_ORDER_CLAIM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -822,6 +823,8 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_RANDOM_ROLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomRollOpcode); DEFINE_HANDLER(CMSG_READY_CHECK_RESPONSE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleReadyCheckResponseOpcode); DEFINE_HANDLER(CMSG_READ_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleReadItem); + DEFINE_HANDLER(CMSG_RECENT_ALLY_REQUEST_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_RECENT_ALLY_SET_NOTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_RECLAIM_CORPSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReclaimCorpse); DEFINE_HANDLER(CMSG_REMOVE_NEW_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRemoveNewItem); DEFINE_HANDLER(CMSG_REMOVE_RAF_RECRUIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -860,6 +863,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_REQUEST_SCHEDULED_PVP_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_STABLED_PETS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestStabledPets); DEFINE_HANDLER(CMSG_REQUEST_STORE_FRONT_INFO_UPDATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_REQUEST_SURVEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_VEHICLE_EXIT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestVehicleExit); DEFINE_HANDLER(CMSG_REQUEST_VEHICLE_NEXT_SEAT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestVehicleNextSeat); DEFINE_HANDLER(CMSG_REQUEST_VEHICLE_PREV_SEAT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestVehiclePrevSeat); @@ -898,6 +902,7 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_SET_ACTION_BUTTON, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionButtonOpcode); DEFINE_HANDLER(CMSG_SET_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActiveMoverOpcode); DEFINE_HANDLER(CMSG_SET_ADVANCED_COMBAT_LOGGING, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetAdvancedCombatLogging); + DEFINE_HANDLER(CMSG_SET_ALLOW_RECENT_ALLIES_SEE_LOCATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetAssistantLeaderOpcode); DEFINE_HANDLER(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetBackpackAutosortDisabled); DEFINE_HANDLER(CMSG_SET_BACKPACK_SELL_JUNK_DISABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSetBackpackSellJunkDisabled); @@ -1229,6 +1234,9 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAPTURE_POINT_REMOVED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAS_REFRESH_REMOTE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CATALOG_SHOP_LICENSE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CATALOG_SHOP_OBTAIN_LICENSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CATALOG_SHOP_OPEN_CHECKOUT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAUTIONARY_CHANNEL_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAUTIONARY_CHAT_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAIN_MISSILE_BOUNCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1705,7 +1713,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MINIMAP_PING, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_COMPONENTED_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_CREATURE_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_VARS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_VARS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MISSILE_CANCEL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MODIFY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -2012,6 +2020,8 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_REATTACH_RESURRECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_UNIT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECEIVE_PING_WORLD_POINT, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECENT_ALLY_DATA_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECENT_ALLY_NOTE_UPDATED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRAFT_ITEM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_COMPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -2169,6 +2179,7 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUMMON_REQUEST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUPERCEDED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SURVEY_DELIVERED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_COMMS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SUSPEND_TOKEN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SYNC_WOW_ENTITLEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 65ea46c0c86..a4da8df05f8 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -36,38 +36,38 @@ constexpr uint32 UNKNOWN_OPCODE = 0xBADD; // special marker value for uninitia enum OpcodeClient : uint32 { - CMSG_ABANDON_NPE_RESPONSE = 0x2F0299, + CMSG_ABANDON_NPE_RESPONSE = 0x2F029A, CMSG_ACCEPT_GUILD_INVITE = 0x340029, - CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x2F025A, - CMSG_ACCEPT_SOCIAL_CONTRACT = 0x340174, + CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x2F025B, + CMSG_ACCEPT_SOCIAL_CONTRACT = 0x340176, CMSG_ACCEPT_TRADE = 0x2F0004, CMSG_ACCEPT_WARGAME_INVITE = 0x34000C, - CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x2F02DC, - CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x2F02DD, - CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x340160, + CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x2F02DD, + CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x2F02DE, + CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x340162, CMSG_ACCOUNT_STORE_BEGIN_PURCHASE_OR_REFUND = 0x3400C0, - CMSG_ACTIVATE_SOULBIND = 0x2F0288, + CMSG_ACTIVATE_SOULBIND = 0x2F0289, CMSG_ACTIVATE_TAXI = 0x30003E, CMSG_ADDON_LIST = 0x340004, - CMSG_ADD_ACCOUNT_COSMETIC = 0x2F0171, + CMSG_ADD_ACCOUNT_COSMETIC = 0x2F0172, CMSG_ADD_BATTLENET_FRIEND = 0x340086, - CMSG_ADD_FRIEND = 0x3400FE, - CMSG_ADD_IGNORE = 0x340102, - CMSG_ADD_TOY = 0x2F0170, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x2F00B3, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x2F028B, - CMSG_ADVENTURE_MAP_START_QUEST = 0x2F022B, + CMSG_ADD_FRIEND = 0x3400FF, + CMSG_ADD_IGNORE = 0x340103, + CMSG_ADD_TOY = 0x2F0171, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x2F00B4, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x2F028C, + CMSG_ADVENTURE_MAP_START_QUEST = 0x2F022C, CMSG_ALTER_APPEARANCE = 0x30008D, CMSG_AREA_SPIRIT_HEALER_QUERY = 0x300043, CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x300044, - CMSG_AREA_TRIGGER = 0x2F0086, + CMSG_AREA_TRIGGER = 0x2F0087, CMSG_ARTIFACT_ADD_POWER = 0x2F0056, CMSG_ARTIFACT_SET_APPEARANCE = 0x2F0058, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x2F00BF, - CMSG_ATTACK_STOP = 0x2F011D, - CMSG_ATTACK_SWING = 0x2F011C, - CMSG_AUCTIONABLE_TOKEN_SELL = 0x340114, - CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x340115, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x2F00C0, + CMSG_ATTACK_STOP = 0x2F011E, + CMSG_ATTACK_SWING = 0x2F011D, + CMSG_AUCTIONABLE_TOKEN_SELL = 0x340115, + CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x340116, CMSG_AUCTION_BROWSE_QUERY = 0x300061, CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x300069, CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x300068, @@ -83,46 +83,46 @@ enum OpcodeClient : uint32 CMSG_AUCTION_REPLICATE_ITEMS = 0x30005F, CMSG_AUCTION_SELL_COMMODITY = 0x30006A, CMSG_AUCTION_SELL_ITEM = 0x30005D, - CMSG_AUCTION_SET_FAVORITE_ITEM = 0x340161, + CMSG_AUCTION_SET_FAVORITE_ITEM = 0x340163, CMSG_AUTH_CONTINUED_SESSION = 0x350002, CMSG_AUTH_SESSION = 0x350001, CMSG_AUTOBANK_ITEM = 0x310003, CMSG_AUTOSTORE_BANK_ITEM = 0x310002, - CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x2F02E6, - CMSG_AUTO_DEPOSIT_CHARACTER_BANK = 0x2F02EE, + CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x2F02E7, + CMSG_AUTO_DEPOSIT_CHARACTER_BANK = 0x2F02EF, CMSG_AUTO_EQUIP_ITEM = 0x310004, CMSG_AUTO_EQUIP_ITEM_SLOT = 0x310009, CMSG_AUTO_GUILD_BANK_ITEM = 0x300048, CMSG_AUTO_STORE_BAG_ITEM = 0x310005, CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x300051, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x2F0256, - CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x2F0237, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x2F0258, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x2F0257, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x2F0257, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x2F0238, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x2F0259, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x2F0258, CMSG_BANKER_ACTIVATE = 0x300046, CMSG_BATTLEFIELD_LEAVE = 0x2F001F, CMSG_BATTLEFIELD_LIST = 0x2F002A, CMSG_BATTLEFIELD_PORT = 0x3000C3, - CMSG_BATTLEMASTER_HELLO = 0x2F018F, + CMSG_BATTLEMASTER_HELLO = 0x2F0190, CMSG_BATTLEMASTER_JOIN = 0x3000BA, CMSG_BATTLEMASTER_JOIN_ARENA = 0x3000BB, CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3000C1, CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ = 0x3000BD, CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3000BC, CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3000BE, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x340101, - CMSG_BATTLENET_REQUEST = 0x340122, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x340102, + CMSG_BATTLENET_REQUEST = 0x340123, CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x3400FB, - CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x34013E, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x340140, CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x3400FA, CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x3400F1, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x340164, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x340166, CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x3400E8, CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x3400E9, - CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x340137, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x340133, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x340139, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x340134, CMSG_BATTLE_PAY_START_PURCHASE = 0x3400F9, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x340120, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x340121, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x290002, CMSG_BATTLE_PET_DELETE_PET = 0x34004F, CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x340050, @@ -132,20 +132,20 @@ enum OpcodeClient : uint32 CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x340057, CMSG_BATTLE_PET_SET_FLAGS = 0x34005A, CMSG_BATTLE_PET_SUMMON = 0x340053, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x2F0090, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x2F008F, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x2F0091, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x2F0090, CMSG_BEGIN_TRADE = 0x2F0001, CMSG_BINDER_ACTIVATE = 0x300045, CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3000CB, CMSG_BLACK_MARKET_OPEN = 0x3000C9, CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3000CA, - CMSG_BONUS_ROLL = 0x2F0259, + CMSG_BONUS_ROLL = 0x2F025A, CMSG_BUG_REPORT = 0x3400B1, CMSG_BUSY_TRADE = 0x2F0002, CMSG_BUY_ACCOUNT_BANK_TAB = 0x300123, CMSG_BUY_BACK_ITEM = 0x300037, CMSG_BUY_ITEM = 0x300036, - CMSG_CAGE_BATTLE_PET = 0x2F00A3, + CMSG_CAGE_BATTLE_PET = 0x2F00A4, CMSG_CALENDAR_ADD_EVENT = 0x3400A9, CMSG_CALENDAR_COMMUNITY_INVITE = 0x34009D, CMSG_CALENDAR_COMPLAIN = 0x3400A5, @@ -163,23 +163,23 @@ enum OpcodeClient : uint32 CMSG_CALENDAR_UPDATE_EVENT = 0x3400AA, CMSG_CANCEL_AURA = 0x2F005A, CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x30007F, - CMSG_CANCEL_CAST = 0x2F0177, - CMSG_CANCEL_CHANNELLING = 0x2F0138, - CMSG_CANCEL_GROWTH_AURA = 0x2F0140, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x2F00CC, + CMSG_CANCEL_CAST = 0x2F0178, + CMSG_CANCEL_CHANNELLING = 0x2F0139, + CMSG_CANCEL_GROWTH_AURA = 0x2F0141, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x2F00CD, CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x2F0059, - CMSG_CANCEL_MOUNT_AURA = 0x2F0153, + CMSG_CANCEL_MOUNT_AURA = 0x2F0154, CMSG_CANCEL_QUEUED_SPELL = 0x2F002B, CMSG_CANCEL_TEMP_ENCHANTMENT = 0x30008A, CMSG_CANCEL_TRADE = 0x2F0006, CMSG_CAN_DUEL = 0x34008E, - CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x340132, - CMSG_CAST_SPELL = 0x2F0174, + CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x340133, + CMSG_CAST_SPELL = 0x2F0175, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x2C0002, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x2F0211, - CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x2F0212, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x2F01F2, - CMSG_CHANGE_REALM_TICKET = 0x340127, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x2F0212, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x2F0213, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x2F01F3, + CMSG_CHANGE_REALM_TICKET = 0x340128, CMSG_CHANGE_SUB_GROUP = 0x340078, CMSG_CHARACTER_CHECK_UPGRADE = 0x3400F4, CMSG_CHARACTER_RENAME_REQUEST = 0x3400EF, @@ -232,36 +232,36 @@ enum OpcodeClient : uint32 CMSG_CHAT_SEND_CAUTIONARY_CHAT_MESSAGE = 0x2B0009, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x2B0006, CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x340071, - CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x2F010E, - CMSG_CHOICE_RESPONSE = 0x2F017C, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x2F0287, - CMSG_CLAIM_WEEKLY_REWARD = 0x2F0264, - CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x2F02C1, - CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x2F00C3, - CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x2F02C3, - CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x2F02C0, - CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x2F02BF, - CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x2F02C4, - CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x2F00C2, + CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x2F010F, + CMSG_CHOICE_RESPONSE = 0x2F017D, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x2F0288, + CMSG_CLAIM_WEEKLY_REWARD = 0x2F0265, + CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x2F02C2, + CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x2F00C4, + CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x2F02C4, + CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x2F02C1, + CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x2F02C0, + CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x2F02C5, + CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x2F00C3, CMSG_CLEAR_NEW_APPEARANCE = 0x290005, CMSG_CLEAR_RAID_MARKER = 0x2F0052, CMSG_CLEAR_TRADE_ITEM = 0x2F0008, CMSG_CLIENT_PORT_GRAVEYARD = 0x3000C5, CMSG_CLOSE_INTERACTION = 0x300025, - CMSG_CLOSE_QUEST_CHOICE = 0x2F017D, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x2F028F, - CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x2F02C5, - CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x340149, - CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x340147, - CMSG_CLUB_FINDER_POST = 0x340144, - CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x34014B, - CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x340145, - CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x340146, - CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x34014A, - CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x34014C, - CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x340148, - CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x340167, - CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x340124, + CMSG_CLOSE_QUEST_CHOICE = 0x2F017E, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x2F0290, + CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x2F02C6, + CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x34014B, + CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x340149, + CMSG_CLUB_FINDER_POST = 0x340146, + CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x34014D, + CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x340147, + CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x340148, + CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x34014C, + CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x34014E, + CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x34014A, + CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x340169, + CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x340125, CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x34005D, CMSG_COMMENTATOR_ENABLE = 0x34001C, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x340020, @@ -269,31 +269,32 @@ enum OpcodeClient : uint32 CMSG_COMMENTATOR_GET_MAP_INFO = 0x34001D, CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x34001F, CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x34001E, - CMSG_COMMENTATOR_SPECTATE = 0x340165, + CMSG_COMMENTATOR_SPECTATE = 0x340167, CMSG_COMMENTATOR_START_WARGAME = 0x34001B, - CMSG_COMMERCE_TOKEN_GET_COUNT = 0x340112, - CMSG_COMMERCE_TOKEN_GET_LOG = 0x34011C, - CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x340113, + CMSG_COMMERCE_TOKEN_GET_COUNT = 0x340113, + CMSG_COMMERCE_TOKEN_GET_LOG = 0x34011D, + CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x340114, CMSG_COMPLAINT = 0x340098, CMSG_COMPLETE_CINEMATIC = 0x3000E3, CMSG_COMPLETE_MOVIE = 0x300075, CMSG_CONFIRM_ARTIFACT_RESPEC = 0x2F0057, - CMSG_CONFIRM_PROFESSION_RESPEC = 0x2F00C6, - CMSG_CONFIRM_RESPEC_WIPE = 0x2F00C5, + CMSG_CONFIRM_PROFESSION_RESPEC = 0x2F00C7, + CMSG_CONFIRM_RESPEC_WIPE = 0x2F00C6, CMSG_CONNECT_TO_FAILED = 0x340000, - CMSG_CONSUMABLE_TOKEN_BUY = 0x340117, - CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x340118, - CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x340116, - CMSG_CONSUMABLE_TOKEN_REDEEM = 0x34011A, - CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x34011B, - CMSG_CONTENT_TRACKING_START_TRACKING = 0x2F02D5, - CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x2F02D6, + CMSG_CONSUMABLE_TOKEN_BUY = 0x340118, + CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x340119, + CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x340117, + CMSG_CONSUMABLE_TOKEN_REDEEM = 0x34011B, + CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x34011C, + CMSG_CONTENT_TRACKING_START_TRACKING = 0x2F02D6, + CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x2F02D7, CMSG_CONTRIBUTION_CONTRIBUTE = 0x3000FB, CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x3000FC, CMSG_CONVERSATION_CINEMATIC_READY = 0x3000E5, CMSG_CONVERSATION_LINE_STARTED = 0x3000E4, - CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x2F02E5, + CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x2F02E6, CMSG_CONVERT_RAID = 0x34007A, + CMSG_CONVERT_TIMERUNNING_CHARACTER = 0x34018C, CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x30010F, CMSG_CRAFTING_ORDER_CANCEL = 0x30011B, CMSG_CRAFTING_ORDER_CLAIM = 0x300118, @@ -307,15 +308,15 @@ enum OpcodeClient : uint32 CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x30011D, CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x30011E, CMSG_CREATE_CHARACTER = 0x340070, - CMSG_CREATE_SHIPMENT = 0x2F01DB, + CMSG_CREATE_SHIPMENT = 0x2F01DC, CMSG_DB_QUERY_BULK = 0x340010, CMSG_DECLINE_GUILD_INVITES = 0x3000B7, CMSG_DECLINE_PETITION = 0x3000D2, CMSG_DELETE_EQUIPMENT_SET = 0x3000A3, CMSG_DELVE_TELEPORT_OUT = 0x30012B, - CMSG_DEL_FRIEND = 0x3400FF, - CMSG_DEL_IGNORE = 0x340103, - CMSG_DESTROY_ITEM = 0x2F016A, + CMSG_DEL_FRIEND = 0x340100, + CMSG_DEL_IGNORE = 0x340104, + CMSG_DESTROY_ITEM = 0x2F016B, CMSG_DF_BOOT_PLAYER_VOTE = 0x340044, CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x340036, CMSG_DF_GET_JOIN_STATUS = 0x340042, @@ -328,65 +329,65 @@ enum OpcodeClient : uint32 CMSG_DF_TELEPORT = 0x340045, CMSG_DISCARDED_TIME_SYNC_ACKS = 0x32005E, CMSG_DISMISS_CRITTER = 0x300091, - CMSG_DO_COUNTDOWN = 0x340143, - CMSG_DO_MASTER_LOOT_ROLL = 0x2F00CB, + CMSG_DO_COUNTDOWN = 0x340145, + CMSG_DO_MASTER_LOOT_ROLL = 0x2F00CC, CMSG_DO_READY_CHECK = 0x34005E, CMSG_DUEL_RESPONSE = 0x30007A, - CMSG_EJECT_PASSENGER = 0x2F0103, + CMSG_EJECT_PASSENGER = 0x2F0104, CMSG_EMOTE = 0x3000DF, CMSG_ENABLE_NAGLE = 0x350007, CMSG_ENABLE_TAXI_NODE = 0x30003C, - CMSG_ENGINE_SURVEY = 0x340111, + CMSG_ENGINE_SURVEY = 0x340112, CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x350003, CMSG_ENUM_CHARACTERS = 0x340014, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x34010B, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x34010C, CMSG_FAR_SIGHT = 0x300080, CMSG_GAME_EVENT_DEBUG_DISABLE = 0x2F005E, CMSG_GAME_EVENT_DEBUG_ENABLE = 0x2F005D, CMSG_GAME_OBJ_REPORT_USE = 0x300087, CMSG_GAME_OBJ_USE = 0x300086, - CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x2F01D6, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x2F01BC, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x2F01A9, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x2F020D, - CMSG_GARRISON_COMPLETE_MISSION = 0x2F01FF, - CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x2F01D7, - CMSG_GARRISON_GENERATE_RECRUITS = 0x2F01BF, - CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x2F01CE, - CMSG_GARRISON_GET_MAP_DATA = 0x2F01D5, - CMSG_GARRISON_GET_MISSION_REWARD = 0x2F022F, - CMSG_GARRISON_LEARN_TALENT = 0x2F01CA, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x2F0201, - CMSG_GARRISON_PURCHASE_BUILDING = 0x2F01A5, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x2F01C1, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x2F01F6, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x2F01BD, - CMSG_GARRISON_RENAME_FOLLOWER = 0x2F01BE, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x2F01A4, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x2F01D9, - CMSG_GARRISON_RESEARCH_TALENT = 0x2F01C2, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x2F01A6, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x2F01BA, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x2F01B2, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x2F01C0, - CMSG_GARRISON_SOCKET_TALENT = 0x2F029C, - CMSG_GARRISON_START_MISSION = 0x2F01FE, - CMSG_GARRISON_SWAP_BUILDINGS = 0x2F01AA, + CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x2F01D7, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x2F01BD, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x2F01AA, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x2F020E, + CMSG_GARRISON_COMPLETE_MISSION = 0x2F0200, + CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x2F01D8, + CMSG_GARRISON_GENERATE_RECRUITS = 0x2F01C0, + CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x2F01CF, + CMSG_GARRISON_GET_MAP_DATA = 0x2F01D6, + CMSG_GARRISON_GET_MISSION_REWARD = 0x2F0230, + CMSG_GARRISON_LEARN_TALENT = 0x2F01CB, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x2F0202, + CMSG_GARRISON_PURCHASE_BUILDING = 0x2F01A6, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x2F01C2, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x2F01F7, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x2F01BE, + CMSG_GARRISON_RENAME_FOLLOWER = 0x2F01BF, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x2F01A5, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x2F01DA, + CMSG_GARRISON_RESEARCH_TALENT = 0x2F01C3, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x2F01A7, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x2F01BB, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x2F01B3, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x2F01C1, + CMSG_GARRISON_SOCKET_TALENT = 0x2F029D, + CMSG_GARRISON_START_MISSION = 0x2F01FF, + CMSG_GARRISON_SWAP_BUILDINGS = 0x2F01AB, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x340013, CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x3400E3, - CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x34015F, - CMSG_GET_GARRISON_INFO = 0x2F019F, + CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x340161, + CMSG_GET_GARRISON_INFO = 0x2F01A0, CMSG_GET_ITEM_PURCHASE_DATA = 0x3000CD, - CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x2F01DA, - CMSG_GET_MIRROR_IMAGE_DATA = 0x2F016E, + CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x2F01DB, + CMSG_GET_MIRROR_IMAGE_DATA = 0x2F016F, CMSG_GET_PVP_OPTIONS_ENABLED = 0x34001A, - CMSG_GET_RAF_ACCOUNT_INFO = 0x34014D, - CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x340190, - CMSG_GET_REMAINING_GAME_TIME = 0x340119, - CMSG_GET_TROPHY_LIST = 0x2F01EF, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x34010D, - CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x34011E, - CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x34011F, + CMSG_GET_RAF_ACCOUNT_INFO = 0x34014F, + CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x340192, + CMSG_GET_REMAINING_GAME_TIME = 0x34011A, + CMSG_GET_TROPHY_LIST = 0x2F01F0, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x34010E, + CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x34011F, + CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x340120, CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3400BC, CMSG_GM_TICKET_GET_CASE_STATUS = 0x3400BB, CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3400BA, @@ -439,7 +440,7 @@ enum OpcodeClient : uint32 CMSG_GUILD_UPDATE_INFO_TEXT = 0x2D0016, CMSG_GUILD_UPDATE_MOTD_TEXT = 0x2D0015, CMSG_HEARTH_AND_RESURRECT = 0x30009F, - CMSG_HIDE_QUEST_CHOICE = 0x2F017E, + CMSG_HIDE_QUEST_CHOICE = 0x2F017F, CMSG_HOTFIX_REQUEST = 0x340011, CMSG_IGNORE_TRADE = 0x2F0003, CMSG_INITIATE_ROLE_POLL = 0x340006, @@ -447,68 +448,68 @@ enum OpcodeClient : uint32 CMSG_INSPECT = 0x3000C7, CMSG_INSTANCE_ABANDON_VOTE_RESPONSE = 0x340061, CMSG_INSTANCE_LOCK_RESPONSE = 0x3000A4, - CMSG_ISLAND_QUEUE = 0x2F0260, + CMSG_ISLAND_QUEUE = 0x2F0261, CMSG_ITEM_PURCHASE_REFUND = 0x3000CE, - CMSG_ITEM_TEXT_QUERY = 0x2F020E, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x2F008D, + CMSG_ITEM_TEXT_QUERY = 0x2F020F, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x2F008E, CMSG_JOIN_RATED_BATTLEGROUND = 0x2F0025, CMSG_KEEP_ALIVE = 0x3400AB, - CMSG_KEYBOUND_OVERRIDE = 0x2F00E1, + CMSG_KEYBOUND_OVERRIDE = 0x2F00E2, CMSG_LATENCY_REPORT = 0x35000D, CMSG_LEARN_PVP_TALENTS = 0x3000FA, CMSG_LEARN_TALENTS = 0x3000F8, CMSG_LEAVE_GROUP = 0x340075, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x2F008E, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x2F008F, CMSG_LFG_LIST_APPLY_TO_GROUP = 0x34003B, CMSG_LFG_LIST_CANCEL_APPLICATION = 0x34003C, CMSG_LFG_LIST_DECLINE_APPLICANT = 0x34003D, CMSG_LFG_LIST_GET_STATUS = 0x340039, CMSG_LFG_LIST_INVITE_APPLICANT = 0x34003E, CMSG_LFG_LIST_INVITE_RESPONSE = 0x34003F, - CMSG_LFG_LIST_JOIN = 0x2F0254, + CMSG_LFG_LIST_JOIN = 0x2F0255, CMSG_LFG_LIST_LEAVE = 0x340038, CMSG_LFG_LIST_SEARCH = 0x34003A, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x2F0255, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x2F0256, CMSG_LIST_INVENTORY = 0x300033, CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x3400E6, CMSG_LIVE_REGION_CHARACTER_COPY = 0x3400E5, CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x3400E4, CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x3400E7, CMSG_LOADING_SCREEN_NOTIFY = 0x340024, - CMSG_LOAD_SELECTED_TROPHY = 0x2F01F0, - CMSG_LOBBY_MATCHMAKER_ABANDON_QUEUE = 0x340172, - CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x340169, - CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x34017B, - CMSG_LOBBY_MATCHMAKER_ENTER_QUEUE = 0x340170, - CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x34016C, - CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x340168, - CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x34016B, - CMSG_LOBBY_MATCHMAKER_QUEUE_PROPSAL_RESPONSE = 0x340171, - CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x34016A, - CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x34016D, - CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x34016E, + CMSG_LOAD_SELECTED_TROPHY = 0x2F01F1, + CMSG_LOBBY_MATCHMAKER_ABANDON_QUEUE = 0x340174, + CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x34016B, + CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x34017D, + CMSG_LOBBY_MATCHMAKER_ENTER_QUEUE = 0x340172, + CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x34016E, + CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x34016A, + CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x34016D, + CMSG_LOBBY_MATCHMAKER_QUEUE_PROPSAL_RESPONSE = 0x340173, + CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x34016C, + CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x34016F, + CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x340170, CMSG_LOGOUT_CANCEL = 0x300070, CMSG_LOGOUT_INSTANT = 0x300071, CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x300122, CMSG_LOGOUT_REQUEST = 0x30006F, CMSG_LOG_DISCONNECT = 0x350005, CMSG_LOG_STREAMING_ERROR = 0x350009, - CMSG_LOOT_ITEM = 0x2F00C9, - CMSG_LOOT_MONEY = 0x2F00C8, - CMSG_LOOT_RELEASE = 0x2F00CD, - CMSG_LOOT_ROLL = 0x2F00CE, - CMSG_LOOT_UNIT = 0x2F00C7, + CMSG_LOOT_ITEM = 0x2F00CA, + CMSG_LOOT_MONEY = 0x2F00C9, + CMSG_LOOT_RELEASE = 0x2F00CE, + CMSG_LOOT_ROLL = 0x2F00CF, + CMSG_LOOT_UNIT = 0x2F00C8, CMSG_LOW_LEVEL_RAID1 = 0x3400CE, CMSG_LOW_LEVEL_RAID2 = 0x3000AB, CMSG_MAIL_CREATE_TEXT_ITEM = 0x3000D9, - CMSG_MAIL_DELETE = 0x2F00E3, + CMSG_MAIL_DELETE = 0x2F00E4, CMSG_MAIL_GET_LIST = 0x3000D4, CMSG_MAIL_MARK_AS_READ = 0x3000D8, CMSG_MAIL_RETURN_TO_SENDER = 0x340081, CMSG_MAIL_TAKE_ITEM = 0x3000D6, CMSG_MAIL_TAKE_MONEY = 0x3000D5, - CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x2F00E4, - CMSG_MASTER_LOOT_ITEM = 0x2F00CA, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x2F00E5, + CMSG_MASTER_LOOT_ITEM = 0x2F00CB, CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x300052, CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x30004F, CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x30004D, @@ -516,7 +517,7 @@ enum OpcodeClient : uint32 CMSG_MISSILE_TRAJECTORY_COLLISION = 0x2F0036, CMSG_MOUNT_CLEAR_FANFARE = 0x290003, CMSG_MOUNT_SET_FAVORITE = 0x34005C, - CMSG_MOUNT_SPECIAL_ANIM = 0x2F0154, + CMSG_MOUNT_SPECIAL_ANIM = 0x2F0155, CMSG_MOVE_ADD_IMPULSE_ACK = 0x32006D, CMSG_MOVE_APPLY_INERTIA_ACK = 0x32006B, CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x320031, @@ -609,29 +610,29 @@ enum OpcodeClient : uint32 CMSG_MOVE_UPDATE_FALL_SPEED = 0x320036, CMSG_MOVE_WATER_WALK_ACK = 0x320039, CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x2C0001, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x2F0083, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x2F0084, CMSG_NEXT_CINEMATIC_CAMERA = 0x3000E2, CMSG_OBJECT_UPDATE_FAILED = 0x2F002C, CMSG_OBJECT_UPDATE_RESCUED = 0x2F002D, - CMSG_OFFER_PETITION = 0x2F0286, + CMSG_OFFER_PETITION = 0x2F0287, CMSG_OPENING_CINEMATIC = 0x3000E1, - CMSG_OPEN_ITEM = 0x2F020F, - CMSG_OPEN_MISSION_NPC = 0x2F01D0, - CMSG_OPEN_SHIPMENT_NPC = 0x2F01D8, - CMSG_OPEN_TRADESKILL_NPC = 0x2F01E3, + CMSG_OPEN_ITEM = 0x2F0210, + CMSG_OPEN_MISSION_NPC = 0x2F01D1, + CMSG_OPEN_SHIPMENT_NPC = 0x2F01D9, + CMSG_OPEN_TRADESKILL_NPC = 0x2F01E4, CMSG_OPT_OUT_OF_LOOT = 0x30008E, CMSG_OVERRIDE_SCREEN_FLASH = 0x3000B8, CMSG_PARTY_INVITE = 0x340030, CMSG_PARTY_INVITE_RESPONSE = 0x340032, CMSG_PARTY_UNINVITE = 0x340073, - CMSG_PERFORM_ITEM_INTERACTION = 0x2F00EC, - CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x2F02AE, - CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT = 0x2F02B1, + CMSG_PERFORM_ITEM_INTERACTION = 0x2F00ED, + CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x2F02AF, + CMSG_PERKS_PROGRAM_REQUEST_CART_CHECKOUT = 0x2F02B2, CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x290012, - CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x2F02B0, - CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x2F02B2, - CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x2F02B3, - CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x2F02AF, + CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x2F02B1, + CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x2F02B3, + CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x2F02B4, + CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x2F02B0, CMSG_PETITION_BUY = 0x30005A, CMSG_PETITION_RENAME_GUILD = 0x3400F7, CMSG_PETITION_SHOW_LIST = 0x300059, @@ -639,18 +640,18 @@ enum OpcodeClient : uint32 CMSG_PET_ABANDON = 0x30001E, CMSG_PET_ABANDON_BY_NUMBER = 0x30001F, CMSG_PET_ACTION = 0x30001C, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x2F0092, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x2F0093, CMSG_PET_BATTLE_INPUT = 0x34006D, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x2F00E2, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x2F0091, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x2F00E3, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x2F0092, CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x34006E, - CMSG_PET_BATTLE_REQUEST_PVP = 0x2F008B, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x2F008C, - CMSG_PET_BATTLE_REQUEST_WILD = 0x2F0089, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x2F0093, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x3D008A, + CMSG_PET_BATTLE_REQUEST_PVP = 0x2F008C, + CMSG_PET_BATTLE_REQUEST_UPDATE = 0x2F008D, + CMSG_PET_BATTLE_REQUEST_WILD = 0x2F008A, + CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x2F0094, + CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x2F008B, CMSG_PET_CANCEL_AURA = 0x300020, - CMSG_PET_CAST_SPELL = 0x2F0173, + CMSG_PET_CAST_SPELL = 0x2F0174, CMSG_PET_RENAME = 0x3400B0, CMSG_PET_SET_ACTION = 0x30001B, CMSG_PET_SPELL_AUTOCAST = 0x300021, @@ -659,32 +660,32 @@ enum OpcodeClient : uint32 CMSG_PLAYER_LOGIN = 0x340016, CMSG_PUSH_QUEST_TO_PARTY = 0x300031, CMSG_PVP_LOG_DATA = 0x2F0028, - CMSG_QUERY_BATTLE_PET_NAME = 0x2F0147, + CMSG_QUERY_BATTLE_PET_NAME = 0x2F0148, CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x34008C, CMSG_QUERY_CORPSE_TRANSPORT = 0x34008D, CMSG_QUERY_COUNTDOWN_TIMER = 0x2F0055, - CMSG_QUERY_CREATURE = 0x2F0141, - CMSG_QUERY_GAME_OBJECT = 0x2F0142, - CMSG_QUERY_GARRISON_PET_NAME = 0x2F0148, + CMSG_QUERY_CREATURE = 0x2F0142, + CMSG_QUERY_GAME_OBJECT = 0x2F0143, + CMSG_QUERY_GARRISON_PET_NAME = 0x2F0149, CMSG_QUERY_GUILD_INFO = 0x3400B6, CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x300098, CMSG_QUERY_NEXT_MAIL_TIME = 0x3000D7, - CMSG_QUERY_NPC_TEXT = 0x2F0143, - CMSG_QUERY_PAGE_TEXT = 0x2F0145, - CMSG_QUERY_PETITION = 0x2F0149, - CMSG_QUERY_PET_NAME = 0x2F0146, + CMSG_QUERY_NPC_TEXT = 0x2F0144, + CMSG_QUERY_PAGE_TEXT = 0x2F0146, + CMSG_QUERY_PETITION = 0x2F014A, + CMSG_QUERY_PET_NAME = 0x2F0147, CMSG_QUERY_PLAYER_NAMES = 0x35000E, CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x35000C, CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x35000B, CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x2F0021, - CMSG_QUERY_QUEST_INFO = 0x2F0144, + CMSG_QUERY_QUEST_INFO = 0x2F0145, CMSG_QUERY_QUEST_ITEM_USABILITY = 0x2F0022, CMSG_QUERY_REALM_NAME = 0x3400B5, CMSG_QUERY_SCENARIO_POI = 0x340082, - CMSG_QUERY_SELECTED_WOW_LABS_AREA = 0x2F02EA, + CMSG_QUERY_SELECTED_WOW_LABS_AREA = 0x2F02EB, CMSG_QUERY_TIME = 0x30006E, - CMSG_QUERY_TREASURE_PICKER = 0x2F0232, - CMSG_QUERY_WOW_LABS_AREA_INFO = 0x2F02EB, + CMSG_QUERY_TREASURE_PICKER = 0x2F0233, + CMSG_QUERY_WOW_LABS_AREA_INFO = 0x2F02EC, CMSG_QUEST_CONFIRM_ACCEPT = 0x300030, CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x30002A, CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x30002C, @@ -698,114 +699,118 @@ enum OpcodeClient : uint32 CMSG_QUEST_LOG_REMOVE_QUEST = 0x3000CC, CMSG_QUEST_POI_QUERY = 0x3400DD, CMSG_QUEST_PUSH_RESULT = 0x300032, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x2F0278, - CMSG_QUEST_SESSION_REQUEST_START = 0x2F0277, - CMSG_QUEST_SESSION_REQUEST_STOP = 0x340158, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x2F0279, + CMSG_QUEST_SESSION_REQUEST_START = 0x2F0278, + CMSG_QUEST_SESSION_REQUEST_STOP = 0x34015A, CMSG_QUEUED_MESSAGES_END = 0x350008, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x340130, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x34012F, - CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x34015D, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x34012E, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x34012D, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x340131, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x340130, + CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x34015F, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x34012F, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x34012E, CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x30009C, - CMSG_RAF_CLAIM_NEXT_REWARD = 0x34014E, - CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x340150, - CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x34014F, + CMSG_RAF_CLAIM_NEXT_REWARD = 0x340150, + CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x340152, + CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x340151, CMSG_RANDOM_ROLL = 0x340080, CMSG_READY_CHECK_RESPONSE = 0x34005F, - CMSG_READ_ITEM = 0x2F0210, + CMSG_READ_ITEM = 0x2F0211, + CMSG_RECENT_ALLY_REQUEST_DATA = 0x340197, + CMSG_RECENT_ALLY_SET_NOTE = 0x340198, CMSG_RECLAIM_CORPSE = 0x300073, - CMSG_REMOVE_NEW_ITEM = 0x2F0236, - CMSG_REMOVE_RAF_RECRUIT = 0x340151, + CMSG_REMOVE_NEW_ITEM = 0x2F0237, + CMSG_REMOVE_RAF_RECRUIT = 0x340153, CMSG_REORDER_CHARACTERS = 0x340015, CMSG_REPAIR_ITEM = 0x300084, - CMSG_REPLACE_TROPHY = 0x2F01F1, + CMSG_REPLACE_TROPHY = 0x2F01F2, CMSG_REPOP_REQUEST = 0x3000C4, CMSG_REPORT_PVP_PLAYER_AFK = 0x30008C, - CMSG_REPORT_SERVER_LAG = 0x2F0270, - CMSG_REPORT_STUCK_IN_COMBAT = 0x2F0271, + CMSG_REPORT_SERVER_LAG = 0x2F0271, + CMSG_REPORT_STUCK_IN_COMBAT = 0x2F0272, CMSG_REQUEST_ACCOUNT_DATA = 0x3400C2, - CMSG_REQUEST_AREA_POI_UPDATE = 0x2F0234, + CMSG_REQUEST_AREA_POI_UPDATE = 0x2F0235, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x340008, CMSG_REQUEST_CEMETERY_LIST = 0x2F0023, CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3400B7, - CMSG_REQUEST_COVENANT_CALLINGS = 0x2F0262, + CMSG_REQUEST_COVENANT_CALLINGS = 0x2F0263, CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x3000C8, CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS = 0x290019, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x2F029B, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x2F029C, CMSG_REQUEST_GUILD_PARTY_STATE = 0x2F0054, CMSG_REQUEST_GUILD_REWARDS_LIST = 0x2F0053, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x2F0272, - CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x2F017F, - CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x2F00B7, - CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x2F00B8, - CMSG_REQUEST_PARTY_ELIGIBILITY_FOR_DELVE_TIERS = 0x2F02E9, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x2F0273, + CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x2F0180, + CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x2F00B8, + CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x2F00B9, + CMSG_REQUEST_PARTY_ELIGIBILITY_FOR_DELVE_TIERS = 0x2F02EA, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x340023, CMSG_REQUEST_PARTY_MEMBER_STATS = 0x34007F, CMSG_REQUEST_PET_INFO = 0x300022, - CMSG_REQUEST_PLAYED_TIME = 0x2F014C, + CMSG_REQUEST_PLAYED_TIME = 0x2F014D, CMSG_REQUEST_PVP_REWARDS = 0x2F0041, CMSG_REQUEST_RAID_INFO = 0x3400F8, CMSG_REQUEST_RATED_PVP_INFO = 0x34000F, - CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x340193, - CMSG_REQUEST_SCHEDULED_AREA_POI_UPDATE = 0x2F0235, + CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x340195, + CMSG_REQUEST_SCHEDULED_AREA_POI_UPDATE = 0x2F0236, CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x2F0042, CMSG_REQUEST_STABLED_PETS = 0x300023, CMSG_REQUEST_STORE_FRONT_INFO_UPDATE = 0x29001E, - CMSG_REQUEST_VEHICLE_EXIT = 0x2F00FE, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x2F0100, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x2F00FF, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x2F0101, - CMSG_REQUEST_WEEKLY_REWARDS = 0x2F0265, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x2F0233, - CMSG_RESET_CHALLENGE_MODE = 0x2F00B5, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x2F00B6, + CMSG_REQUEST_SURVEY = 0x2F02FD, + CMSG_REQUEST_VEHICLE_EXIT = 0x2F00FF, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x2F0101, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x2F0100, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x2F0102, + CMSG_REQUEST_WEEKLY_REWARDS = 0x2F0266, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x2F0234, + CMSG_RESET_CHALLENGE_MODE = 0x2F00B6, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x2F00B7, CMSG_RESET_INSTANCES = 0x340094, CMSG_RESURRECT_RESPONSE = 0x3400AF, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x2F01F3, - CMSG_RIDE_VEHICLE_INTERACT = 0x2F0102, - CMSG_RPE_RESET_CHARACTER = 0x34017E, - CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x340178, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x2F01F4, + CMSG_RIDE_VEHICLE_INTERACT = 0x2F0103, + CMSG_RPE_RESET_CHARACTER = 0x340180, + CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x34017A, CMSG_SAVE_CUF_PROFILES = 0x2F0037, CMSG_SAVE_EQUIPMENT_SET = 0x3000A2, - CMSG_SAVE_GUILD_EMBLEM = 0x2F0184, - CMSG_SAVE_PERSONAL_EMBLEM = 0x2F0185, - CMSG_SCENE_PLAYBACK_CANCELED = 0x2F00DE, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x2F00DD, - CMSG_SCENE_TRIGGER_EVENT = 0x2F00DF, - CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x2F02D8, - CMSG_SELECT_WOW_LABS_AREA = 0x2F02EC, + CMSG_SAVE_GUILD_EMBLEM = 0x2F0185, + CMSG_SAVE_PERSONAL_EMBLEM = 0x2F0186, + CMSG_SCENE_PLAYBACK_CANCELED = 0x2F00DF, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x2F00DE, + CMSG_SCENE_TRIGGER_EVENT = 0x2F00E0, + CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x2F02D9, + CMSG_SELECT_WOW_LABS_AREA = 0x2F02ED, CMSG_SELF_RES = 0x3000CF, CMSG_SELL_ALL_JUNK_ITEMS = 0x300035, CMSG_SELL_ITEM = 0x300034, - CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x340126, - CMSG_SEND_CONTACT_LIST = 0x3400FD, + CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x340127, + CMSG_SEND_CONTACT_LIST = 0x3400FE, CMSG_SEND_MAIL = 0x340026, - CMSG_SEND_PING_UNIT = 0x2F02DA, - CMSG_SEND_PING_WORLD_POINT = 0x2F02DB, + CMSG_SEND_PING_UNIT = 0x2F02DB, + CMSG_SEND_PING_WORLD_POINT = 0x2F02DC, CMSG_SEND_TEXT_EMOTE = 0x300019, CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3400C9, - CMSG_SETUP_WARBAND_GROUPS = 0x34018C, + CMSG_SETUP_WARBAND_GROUPS = 0x34018E, CMSG_SET_ACTION_BAR_TOGGLES = 0x3000D0, CMSG_SET_ACTION_BUTTON = 0x340062, CMSG_SET_ACTIVE_MOVER = 0x320059, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x2F0192, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x2F0193, + CMSG_SET_ALLOW_RECENT_ALLIES_SEE_LOCATION = 0x2F02FE, CMSG_SET_ASSISTANT_LEADER = 0x34007B, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x2F0213, - CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x2F0214, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x2F0215, - CMSG_SET_CONTACT_NOTES = 0x340100, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x2F0214, + CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x2F0215, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x2F0216, + CMSG_SET_CONTACT_NOTES = 0x340101, CMSG_SET_CURRENCY_FLAGS = 0x2F0015, - CMSG_SET_DIFFICULTY_ID = 0x2F00E0, + CMSG_SET_DIFFICULTY_ID = 0x2F00E1, CMSG_SET_DUNGEON_DIFFICULTY = 0x3400AE, - CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x2F013B, + CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x2F013C, CMSG_SET_EVERYONE_IS_ASSISTANT = 0x340046, - CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x340131, + CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x340132, CMSG_SET_FACTION_AT_WAR = 0x300076, CMSG_SET_FACTION_INACTIVE = 0x300078, CMSG_SET_FACTION_NOT_AT_WAR = 0x300077, CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x2F0065, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x2F0217, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x2F0218, CMSG_SET_LOOT_METHOD = 0x340074, CMSG_SET_LOOT_SPECIALIZATION = 0x3000DD, CMSG_SET_PARTY_ASSIGNMENT = 0x34007D, @@ -815,35 +820,35 @@ enum OpcodeClient : uint32 CMSG_SET_PET_SPECIALIZATION = 0x2F0013, CMSG_SET_PLAYER_DECLINED_NAMES = 0x3400B4, CMSG_SET_PREFERRED_CEMETERY = 0x2F0024, - CMSG_SET_PVP = 0x2F0189, - CMSG_SET_RAID_DIFFICULTY = 0x340109, + CMSG_SET_PVP = 0x2F018A, + CMSG_SET_RAID_DIFFICULTY = 0x34010A, CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x340047, CMSG_SET_ROLE = 0x340005, CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3400B2, CMSG_SET_SELECTION = 0x3000C6, CMSG_SET_SHEATHED = 0x30001A, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x2F0216, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x2F0217, CMSG_SET_TAXI_BENCHMARK_MODE = 0x30008B, - CMSG_SET_TITLE = 0x2F0152, + CMSG_SET_TITLE = 0x2F0153, CMSG_SET_TRADE_CURRENCY = 0x2F000A, CMSG_SET_TRADE_GOLD = 0x2F0009, CMSG_SET_TRADE_ITEM = 0x2F0007, - CMSG_SET_USING_PARTY_GARRISON = 0x2F01D2, - CMSG_SET_WAR_MODE = 0x2F018A, + CMSG_SET_USING_PARTY_GARRISON = 0x2F01D3, + CMSG_SET_WAR_MODE = 0x2F018B, CMSG_SET_WATCHED_FACTION = 0x300079, CMSG_SHOW_TRADE_SKILL = 0x3400F0, CMSG_SIGN_PETITION = 0x3000D1, CMSG_SILENCE_PARTY_TALKER = 0x34007E, - CMSG_SOCIAL_CONTRACT_REQUEST = 0x340173, + CMSG_SOCIAL_CONTRACT_REQUEST = 0x340175, CMSG_SOCKET_GEMS = 0x300083, - CMSG_SORT_ACCOUNT_BANK_BAGS = 0x2F02DE, - CMSG_SORT_BAGS = 0x2F0218, - CMSG_SORT_BANK_BAGS = 0x2F0219, - CMSG_SPAWN_TRACKING_UPDATE = 0x2F0167, - CMSG_SPECTATE_CHANGE = 0x2F02D1, + CMSG_SORT_ACCOUNT_BANK_BAGS = 0x2F02DF, + CMSG_SORT_BAGS = 0x2F0219, + CMSG_SORT_BANK_BAGS = 0x2F021A, + CMSG_SPAWN_TRACKING_UPDATE = 0x2F0168, + CMSG_SPECTATE_CHANGE = 0x2F02D2, CMSG_SPELL_CLICK = 0x300027, - CMSG_SPELL_EMPOWER_RELEASE = 0x2F0139, - CMSG_SPELL_EMPOWER_RESTART = 0x2F013A, + CMSG_SPELL_EMPOWER_RELEASE = 0x2F013A, + CMSG_SPELL_EMPOWER_RESTART = 0x2F013B, CMSG_SPIRIT_HEALER_ACTIVATE = 0x300042, CMSG_SPLIT_GUILD_BANK_ITEM = 0x300053, CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x300050, @@ -856,7 +861,7 @@ enum OpcodeClient : uint32 CMSG_START_WAR_GAME = 0x34000A, CMSG_STORE_GUILD_BANK_ITEM = 0x300049, CMSG_SUBMIT_USER_FEEDBACK = 0x3400C1, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x2F0290, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x2F0291, CMSG_SUMMON_RESPONSE = 0x340096, CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x340072, CMSG_SURRENDER_ARENA = 0x2F0020, @@ -867,7 +872,7 @@ enum OpcodeClient : uint32 CMSG_SWAP_ITEM = 0x310006, CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x30004A, CMSG_SWAP_SUB_GROUPS = 0x340079, - CMSG_TABARD_VENDOR_ACTIVATE = 0x2F0186, + CMSG_TABARD_VENDOR_ACTIVATE = 0x2F0187, CMSG_TALK_TO_GOSSIP = 0x300024, CMSG_TAXI_NODE_STATUS_QUERY = 0x30003B, CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x30003D, @@ -877,56 +882,56 @@ enum OpcodeClient : uint32 CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x32005C, CMSG_TIME_SYNC_RESPONSE_FAILED = 0x32005B, CMSG_TOGGLE_DIFFICULTY = 0x340083, - CMSG_TOGGLE_PVP = 0x2F0188, + CMSG_TOGGLE_PVP = 0x2F0189, CMSG_TOTEM_DESTROYED = 0x300090, CMSG_TOY_CLEAR_FANFARE = 0x290004, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x2F0231, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x2F0232, CMSG_TRAINER_BUY_SPELL = 0x300041, CMSG_TRAINER_LIST = 0x300040, - CMSG_TRAITS_COMMIT_CONFIG = 0x2F02B9, - CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x2F02B7, - CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x2F02E7, + CMSG_TRAITS_COMMIT_CONFIG = 0x2F02BA, + CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x2F02B8, + CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x2F02E8, CMSG_TRANSMOGRIFY_ITEMS = 0x2F0043, CMSG_TURN_IN_PETITION = 0x3000D3, - CMSG_TUTORIAL = 0x34010A, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x2F0261, + CMSG_TUTORIAL = 0x34010B, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x2F0262, CMSG_UNACCEPT_TRADE = 0x2F0005, - CMSG_UNDELETE_CHARACTER = 0x34010C, + CMSG_UNDELETE_CHARACTER = 0x34010D, CMSG_UNLEARN_SKILL = 0x30007D, CMSG_UNLEARN_SPECIALIZATION = 0x2F0051, - CMSG_UPDATE_AADC_STATUS = 0x340163, + CMSG_UPDATE_AADC_STATUS = 0x340165, CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS = 0x30012A, CMSG_UPDATE_ACCOUNT_DATA = 0x3400C3, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x2F0176, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x2F0177, CMSG_UPDATE_CLIENT_SETTINGS = 0x340090, - CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2F01E4, + CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2F01E5, CMSG_UPDATE_MISSILE_TRAJECTORY = 0x320060, CMSG_UPDATE_RAID_TARGET = 0x34007C, - CMSG_UPDATE_SPELL_VISUAL = 0x2F0175, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x340121, - CMSG_UPGRADE_GARRISON = 0x2F019A, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x2F028E, + CMSG_UPDATE_SPELL_VISUAL = 0x2F0176, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x340122, + CMSG_UPGRADE_GARRISON = 0x2F019B, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x2F028F, CMSG_USED_FOLLOW = 0x2F0032, - CMSG_USE_CRITTER_ITEM = 0x2F0108, + CMSG_USE_CRITTER_ITEM = 0x2F0109, CMSG_USE_EQUIPMENT_SET = 0x310001, - CMSG_USE_ITEM = 0x2F016F, - CMSG_USE_TOY = 0x2F0172, - CMSG_VAS_CHECK_TRANSFER_OK = 0x340136, - CMSG_VAS_GET_QUEUE_MINUTES = 0x340135, - CMSG_VAS_GET_SERVICE_STATUS = 0x340134, + CMSG_USE_ITEM = 0x2F0170, + CMSG_USE_TOY = 0x2F0173, + CMSG_VAS_CHECK_TRANSFER_OK = 0x340138, + CMSG_VAS_GET_QUEUE_MINUTES = 0x340137, + CMSG_VAS_GET_SERVICE_STATUS = 0x340136, CMSG_VIOLENCE_LEVEL = 0x2F0030, - CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x34013A, - CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x34013B, - CMSG_VOICE_CHAT_LOGIN = 0x340139, + CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x34013C, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x34013D, + CMSG_VOICE_CHAT_LOGIN = 0x34013B, CMSG_WARDEN3_DATA = 0x340018, CMSG_WHO = 0x3400AD, CMSG_WHO_IS = 0x3400AC, - CMSG_WORLD_LOOT_OBJECT_CLICK = 0x2F02D4, + CMSG_WORLD_LOOT_OBJECT_CLICK = 0x2F02D5, CMSG_WORLD_PORT_RESPONSE = 0x340025, CMSG_WRAP_ITEM = 0x310000, }; -inline constexpr std::size_t NUM_CMSG_OPCODES = 1735; +inline constexpr std::size_t NUM_CMSG_OPCODES = 1758; inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode) { @@ -937,12 +942,12 @@ inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode) case 0x2B: return idInGroup < 51 ? idInGroup + 31 : -1; case 0x2C: return idInGroup < 3 ? idInGroup + 82 : -1; case 0x2D: return idInGroup < 37 ? idInGroup + 85 : -1; - case 0x2F: return idInGroup < 751 ? idInGroup + 122 : -1; - case 0x30: return idInGroup < 301 ? idInGroup + 873 : -1; - case 0x31: return idInGroup < 10 ? idInGroup + 1174 : -1; - case 0x32: return idInGroup < 132 ? idInGroup + 1184 : -1; - case 0x34: return idInGroup < 404 ? idInGroup + 1316 : -1; - case 0x35: return idInGroup < 15 ? idInGroup + 1720 : -1; + case 0x2F: return idInGroup < 767 ? idInGroup + 122 : -1; + case 0x30: return idInGroup < 301 ? idInGroup + 889 : -1; + case 0x31: return idInGroup < 10 ? idInGroup + 1190 : -1; + case 0x32: return idInGroup < 132 ? idInGroup + 1200 : -1; + case 0x34: return idInGroup < 411 ? idInGroup + 1332 : -1; + case 0x35: return idInGroup < 15 ? idInGroup + 1743 : -1; default: return -1; } } @@ -950,20 +955,20 @@ inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeClient opcode) enum OpcodeServer : uint32 { SMSG_ABORT_NEW_WORLD = 0x360030, - SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS = 0x360346, - SMSG_ACCOUNT_CONVERSION_STATE_UPDATE = 0x36034B, - SMSG_ACCOUNT_COSMETIC_ADDED = 0x3602FF, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x3602E7, + SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS = 0x360347, + SMSG_ACCOUNT_CONVERSION_STATE_UPDATE = 0x36034C, + SMSG_ACCOUNT_COSMETIC_ADDED = 0x360300, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x3602E8, SMSG_ACCOUNT_DATA_TIMES = 0x3601A8, - SMSG_ACCOUNT_EXPORT_RESPONSE = 0x360337, - SMSG_ACCOUNT_ITEM_COLLECTION_DATA = 0x360351, + SMSG_ACCOUNT_EXPORT_RESPONSE = 0x360338, + SMSG_ACCOUNT_ITEM_COLLECTION_DATA = 0x360352, SMSG_ACCOUNT_MOUNT_REMOVED = 0x360047, SMSG_ACCOUNT_MOUNT_UPDATE = 0x360046, - SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x3602FE, - SMSG_ACCOUNT_STORE_CURRENCY_UPDATE = 0x360320, - SMSG_ACCOUNT_STORE_FRONT_UPDATE = 0x360321, - SMSG_ACCOUNT_STORE_ITEM_STATE_CHANGED = 0x360322, - SMSG_ACCOUNT_STORE_RESULT = 0x360323, + SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x3602FF, + SMSG_ACCOUNT_STORE_CURRENCY_UPDATE = 0x360321, + SMSG_ACCOUNT_STORE_FRONT_UPDATE = 0x360322, + SMSG_ACCOUNT_STORE_ITEM_STATE_CHANGED = 0x360323, + SMSG_ACCOUNT_STORE_RESULT = 0x360324, SMSG_ACCOUNT_TOY_UPDATE = 0x360048, SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x36004C, SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x36004B, @@ -981,8 +986,8 @@ enum OpcodeServer : uint32 SMSG_ADD_LOSS_OF_CONTROL = 0x36010F, SMSG_ADD_RUNE_POWER = 0x360156, SMSG_ADJUST_SPLINE_DURATION = 0x360069, - SMSG_ADVANCED_COMBAT_LOG = 0x3602FC, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x3602F7, + SMSG_ADVANCED_COMBAT_LOG = 0x3602FD, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x3602F8, SMSG_AE_LOOT_TARGETS = 0x3600B5, SMSG_AE_LOOT_TARGET_ACK = 0x3600B6, SMSG_AI_REACTION = 0x360153, @@ -990,7 +995,7 @@ enum OpcodeServer : uint32 SMSG_ALL_ACCOUNT_CRITERIA = 0x360005, SMSG_ALL_ACHIEVEMENT_DATA = 0x360004, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x420000, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x3602D4, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x3602D5, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x36001D, SMSG_AREA_POI_UPDATE_RESPONSE = 0x4A0018, SMSG_AREA_SPIRIT_HEALER_TIME = 0x3601DC, @@ -1015,14 +1020,14 @@ enum OpcodeServer : uint32 SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x36026B, SMSG_AUCTION_CLOSED_NOTIFICATION = 0x360190, SMSG_AUCTION_COMMAND_RESULT = 0x36018D, - SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x360324, - SMSG_AUCTION_FAVORITE_LIST = 0x3602EE, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x3602E6, + SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x360325, + SMSG_AUCTION_FAVORITE_LIST = 0x3602EF, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x3602E7, SMSG_AUCTION_HELLO_RESPONSE = 0x36018B, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x3602E5, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x3602E1, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x3602E2, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x3602E4, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x3602E6, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x3602E2, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x3602E3, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x3602E5, SMSG_AUCTION_OUTBID_NOTIFICATION = 0x36018F, SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x360191, SMSG_AUCTION_REPLICATE_RESPONSE = 0x36018C, @@ -1033,10 +1038,10 @@ enum OpcodeServer : uint32 SMSG_AUTH_FAILED = 0x360000, SMSG_AUTH_RESPONSE = 0x360001, SMSG_AVAILABLE_HOTFIXES = 0x3A0001, - SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x360325, + SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x360326, SMSG_BAG_CLEANUP_FINISHED = 0x4E0007, SMSG_BARBER_SHOP_RESULT = 0x36015B, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x3602C5, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x3602C6, SMSG_BATTLEFIELD_LIST = 0x3C0005, SMSG_BATTLEFIELD_PORT_DENIED = 0x3C000B, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x3C0001, @@ -1063,7 +1068,7 @@ enum OpcodeServer : uint32 SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x360220, SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x360214, SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x360213, - SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x360304, + SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x360305, SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x360211, SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x360212, SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x360210, @@ -1071,7 +1076,7 @@ enum OpcodeServer : uint32 SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x36020F, SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x360215, SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x36021F, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x3602B9, + SMSG_BATTLE_PAY_START_CHECKOUT = 0x3602BA, SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x36021D, SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x36021C, SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x3602AD, @@ -1095,8 +1100,8 @@ enum OpcodeServer : uint32 SMSG_BOSS_KILL = 0x3C002B, SMSG_BREAK_TARGET = 0x3C0016, SMSG_BROADCAST_ACHIEVEMENT = 0x3B0012, - SMSG_BROADCAST_SUMMON_CAST = 0x3602C7, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x3602C8, + SMSG_BROADCAST_SUMMON_CAST = 0x3602C8, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x3602C9, SMSG_BUY_FAILED = 0x360164, SMSG_BUY_SUCCEEDED = 0x360163, SMSG_CACHE_INFO = 0x3A000F, @@ -1135,6 +1140,9 @@ enum OpcodeServer : uint32 SMSG_CAPTURE_POINT_REMOVED = 0x3C0008, SMSG_CAST_FAILED = 0x4D0048, SMSG_CAS_REFRESH_REMOTE_DATA = 0x360115, + SMSG_CATALOG_SHOP_LICENSE_DATA = 0x3602AE, + SMSG_CATALOG_SHOP_OBTAIN_LICENSE = 0x360358, + SMSG_CATALOG_SHOP_OPEN_CHECKOUT_RESULT = 0x360353, SMSG_CAUTIONARY_CHANNEL_MESSAGE = 0x3B0009, SMSG_CAUTIONARY_CHAT_MESSAGE = 0x3B0008, SMSG_CHAIN_MISSILE_BOUNCE = 0x360061, @@ -1181,8 +1189,8 @@ enum OpcodeServer : uint32 SMSG_CHECK_ABANDON_NPE = 0x4A0023, SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x36001B, SMSG_CHECK_WARGAME_ENTRY = 0x360027, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x3602F1, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x3602D8, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x3602F2, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x3602D9, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x4D0016, SMSG_CLEAR_BOSS_EMOTES = 0x360054, SMSG_CLEAR_COOLDOWN = 0x360158, @@ -1192,13 +1200,13 @@ enum OpcodeServer : uint32 SMSG_CLEAR_TARGET = 0x3C0022, SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x4B0022, SMSG_CLOSE_ARTIFACT_FORGE = 0x36023B, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x3602D0, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x3602D3, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x3602D1, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x3602CE, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x3602D2, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x3602CF, - SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x360310, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x3602D1, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x3602D4, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x3602D2, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x3602CF, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x3602D3, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x3602D0, + SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x360311, SMSG_COIN_REMOVED = 0x3600B4, SMSG_COMBAT_EVENT_FAILED = 0x3C0019, SMSG_COMMENTATOR_MAP_INFO = 0x3601A4, @@ -1219,9 +1227,9 @@ enum OpcodeServer : uint32 SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x360272, SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x360273, SMSG_CONTACT_LIST = 0x360222, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x3602B2, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x3602B3, SMSG_CONTROL_UPDATE = 0x3600E4, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x3602FA, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x3602FB, SMSG_COOLDOWN_CHEAT = 0x3601D5, SMSG_COOLDOWN_EVENT = 0x360157, SMSG_CORPSE_LOCATION = 0x3600EB, @@ -1229,27 +1237,27 @@ enum OpcodeServer : uint32 SMSG_CORPSE_TRANSPORT_QUERY = 0x3601B0, SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x4B0024, SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x360294, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x3602FB, - SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x360331, - SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x36032D, - SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x360329, - SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x36032B, - SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x360327, - SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x36032C, - SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x360328, - SMSG_CRAFTING_ORDER_NPC_REWARD_INFO = 0x360333, - SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x36032F, - SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x36032A, - SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x360332, - SMSG_CRAFT_ENCHANT_RESULT = 0x360330, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x3602FC, + SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x360332, + SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x36032E, + SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x36032A, + SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x36032C, + SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x360328, + SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x36032D, + SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x360329, + SMSG_CRAFTING_ORDER_NPC_REWARD_INFO = 0x360334, + SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x360330, + SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x36032B, + SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x360333, + SMSG_CRAFT_ENCHANT_RESULT = 0x360331, SMSG_CREATE_CHAR = 0x36019E, SMSG_CREATE_SHIPMENT_RESPONSE = 0x360233, - SMSG_CREATOR_VISUALS_OVERRIDE = 0x360336, + SMSG_CREATOR_VISUALS_OVERRIDE = 0x360337, SMSG_CRITERIA_DELETED = 0x360184, SMSG_CRITERIA_UPDATE = 0x36017E, SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x36015F, - SMSG_CURRENCY_TRANSFER_LOG = 0x360348, - SMSG_CURRENCY_TRANSFER_RESULT = 0x360347, + SMSG_CURRENCY_TRANSFER_LOG = 0x360349, + SMSG_CURRENCY_TRANSFER_RESULT = 0x360348, SMSG_CUSTOM_LOAD_SCREEN = 0x360064, SMSG_DAILY_QUESTS_RESET = 0x4B0000, SMSG_DAMAGE_CALC_LOG = 0x4D0054, @@ -1259,7 +1267,7 @@ enum OpcodeServer : uint32 SMSG_DEFENSE_MESSAGE = 0x3B000C, SMSG_DELETE_CHAR = 0x36019F, SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x400022, - SMSG_DELVES_ACCOUNT_DATA_ELEMENT_CHANGED = 0x36034D, + SMSG_DELVES_ACCOUNT_DATA_ELEMENT_CHANGED = 0x36034E, SMSG_DESTROY_ARENA_UNIT = 0x3601DE, SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x360196, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x360020, @@ -1297,12 +1305,12 @@ enum OpcodeServer : uint32 SMSG_EXPECTED_SPAM_RECORDS = 0x3B0005, SMSG_EXPLORATION_EXPERIENCE = 0x3601FB, SMSG_EXPORT_ACCOUNT_PROFILE = 0x3600F0, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x3602F8, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x3602F9, SMSG_FACTION_BONUS_INFO = 0x3601C1, SMSG_FAILED_PLAYER_CONDITION = 0x4A0002, SMSG_FAILED_QUEST_TURN_IN = 0x3602A8, SMSG_FEATURE_SYSTEM_STATUS = 0x360058, - SMSG_FEATURE_SYSTEM_STATUS2 = 0x360345, + SMSG_FEATURE_SYSTEM_STATUS2 = 0x360346, SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x360059, SMSG_FEIGN_DEATH_RESISTED = 0x3601E0, SMSG_FISH_ESCAPED = 0x36016E, @@ -1317,11 +1325,11 @@ enum OpcodeServer : uint32 SMSG_FRIEND_STATUS = 0x360223, SMSG_GAIN_MAW_POWER = 0x360279, SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x36005C, - SMSG_GAME_OBJECT_BASE = 0x3602BF, - SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x36030F, + SMSG_GAME_OBJECT_BASE = 0x3602C0, + SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x360310, SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x36005D, SMSG_GAME_OBJECT_DESPAWN = 0x36005E, - SMSG_GAME_OBJECT_INTERACTION = 0x36030E, + SMSG_GAME_OBJECT_INTERACTION = 0x36030F, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x4D003C, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x4D003B, SMSG_GAME_OBJECT_RESET_STATE = 0x3601BB, @@ -1400,11 +1408,11 @@ enum OpcodeServer : uint32 SMSG_GARRISON_UPGRADE_RESULT = 0x40000D, SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x40001F, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x36001C, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x3602B3, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x3602B4, SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x3601FD, SMSG_GET_GARRISON_INFO_RESULT = 0x400000, SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x360236, - SMSG_GET_REALM_HIDDEN_RESULT = 0x36033C, + SMSG_GET_REALM_HIDDEN_RESULT = 0x36033D, SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x360271, SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x36025E, SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x360235, @@ -1487,7 +1495,7 @@ enum OpcodeServer : uint32 SMSG_GUILD_REWARD_LIST = 0x420008, SMSG_GUILD_ROSTER = 0x420003, SMSG_GUILD_SEND_RANK_CHANGE = 0x420001, - SMSG_HARDCORE_DEATH_ALERT = 0x360344, + SMSG_HARDCORE_DEATH_ALERT = 0x360345, SMSG_HEALTH_UPDATE = 0x36016F, SMSG_HIGHEST_THREAT_UPDATE = 0x360177, SMSG_HOTFIX_CONNECT = 0x3A0003, @@ -1525,7 +1533,7 @@ enum OpcodeServer : uint32 SMSG_INVALID_PROMOTION_CODE = 0x3601EF, SMSG_INVENTORY_CHANGE_FAILURE = 0x4E0005, SMSG_INVENTORY_FIXUP_COMPLETE = 0x3602AA, - SMSG_INVENTORY_FULL_OVERFLOW = 0x3602BB, + SMSG_INVENTORY_FULL_OVERFLOW = 0x3602BC, SMSG_ISLAND_AZERITE_GAIN = 0x3601F8, SMSG_ISLAND_COMPLETE = 0x3601F9, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x4B0004, @@ -1533,17 +1541,17 @@ enum OpcodeServer : uint32 SMSG_ITEM_COOLDOWN = 0x36025F, SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x3601F1, SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x360034, - SMSG_ITEM_INTERACTION_COMPLETE = 0x3602F0, + SMSG_ITEM_INTERACTION_COMPLETE = 0x3602F1, SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x360032, SMSG_ITEM_PUSH_RESULT = 0x3600C0, SMSG_ITEM_TIME_UPDATE = 0x3601F0, SMSG_KICK_REASON = 0x360128, - SMSG_LATENCY_REPORT_PING = 0x360300, + SMSG_LATENCY_REPORT_PING = 0x360301, SMSG_LEARNED_SPELLS = 0x4D003E, SMSG_LEARN_PVP_TALENT_FAILED = 0x36006D, SMSG_LEARN_TALENT_FAILED = 0x36006C, - SMSG_LEGACY_LOOT_RULES = 0x3602C0, - SMSG_LEVEL_LINKING_RESULT = 0x3602D6, + SMSG_LEGACY_LOOT_RULES = 0x3602C1, + SMSG_LEVEL_LINKING_RESULT = 0x3602D7, SMSG_LEVEL_UP_INFO = 0x360186, SMSG_LFG_BOOT_PLAYER = 0x440019, SMSG_LFG_DISABLED = 0x440017, @@ -1579,12 +1587,12 @@ enum OpcodeServer : uint32 SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x36020C, SMSG_LOAD_CUF_PROFILES = 0x360055, SMSG_LOAD_EQUIPMENT_SET = 0x3601AC, - SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x360311, - SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x360312, - SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x360313, - SMSG_LOBBY_MATCHMAKER_QUEUE_PROPOSED = 0x360315, - SMSG_LOBBY_MATCHMAKER_QUEUE_RESULT = 0x360316, - SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x360314, + SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x360312, + SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x360313, + SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x360314, + SMSG_LOBBY_MATCHMAKER_QUEUE_PROPOSED = 0x360316, + SMSG_LOBBY_MATCHMAKER_QUEUE_RESULT = 0x360317, + SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x360315, SMSG_LOGIN_SET_TIME_SPEED = 0x3601AB, SMSG_LOGIN_VERIFY_WORLD = 0x36002F, SMSG_LOGOUT_CANCEL_ACK = 0x360124, @@ -1608,17 +1616,17 @@ enum OpcodeServer : uint32 SMSG_MAP_OBJECTIVES_INIT = 0x3C002A, SMSG_MAP_OBJ_EVENTS = 0x36005F, SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x3600BC, - SMSG_MEETING_STONE_FAILED = 0x360317, + SMSG_MEETING_STONE_FAILED = 0x360318, SMSG_MESSAGE_BOX = 0x36000A, SMSG_MINIMAP_PING = 0x36016C, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x4D0004, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x4D0003, - SMSG_MIRROR_VARS = 0x360355, + SMSG_MIRROR_VARS = 0x360359, SMSG_MISSILE_CANCEL = 0x360060, SMSG_MODIFY_COOLDOWN = 0x360200, SMSG_MOTD = 0x3B0003, SMSG_MOUNT_RESULT = 0x36000F, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x3602C6, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x3602C7, SMSG_MOVE_ADD_IMPULSE = 0x480062, SMSG_MOVE_APPLY_INERTIA = 0x48005E, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x480045, @@ -1739,14 +1747,14 @@ enum OpcodeServer : uint32 SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x3600AF, SMSG_MYTHIC_PLUS_SEASON_DATA = 0x3600A9, SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x360074, - SMSG_NEW_DATA_BUILD = 0x36033B, + SMSG_NEW_DATA_BUILD = 0x36033C, SMSG_NEW_TAXI_PATH = 0x36011D, SMSG_NEW_WORLD = 0x36002B, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x4D0034, SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x360149, SMSG_NOTIFY_MONEY = 0x360031, SMSG_NOTIFY_RECEIVED_MAIL = 0x3600D9, - SMSG_NPC_INTERACTION_OPEN_RESULT = 0x36030D, + SMSG_NPC_INTERACTION_OPEN_RESULT = 0x36030E, SMSG_OFFER_PETITION_ERROR = 0x360154, SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x360183, SMSG_ON_MONSTER_MOVE = 0x480002, @@ -1757,21 +1765,21 @@ enum OpcodeServer : uint32 SMSG_OVERRIDE_LIGHT = 0x360159, SMSG_PAGE_TEXT = 0x3601B7, SMSG_PARTY_COMMAND_RESULT = 0x36022C, - SMSG_PARTY_ELIGIBILITY_FOR_DELVE_TIERS_RESPONSE = 0x360350, + SMSG_PARTY_ELIGIBILITY_FOR_DELVE_TIERS_RESPONSE = 0x360351, SMSG_PARTY_INVITE = 0x360056, SMSG_PARTY_KILL_LOG = 0x3601F6, SMSG_PARTY_MEMBER_FULL_STATE = 0x3601F5, SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x3601F4, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x3602F6, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x3602F7, SMSG_PARTY_UPDATE = 0x36008C, SMSG_PAST_TIME_EVENTS = 0x36005B, SMSG_PAUSE_MIRROR_TIMER = 0x3601AE, SMSG_PENDING_RAID_LOCK = 0x360195, - SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x36030A, - SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x360306, - SMSG_PERKS_PROGRAM_DISABLED = 0x36030B, - SMSG_PERKS_PROGRAM_RESULT = 0x360307, - SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x360305, + SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x36030B, + SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x360307, + SMSG_PERKS_PROGRAM_DISABLED = 0x36030C, + SMSG_PERKS_PROGRAM_RESULT = 0x360308, + SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x360306, SMSG_PETITION_ALREADY_SIGNED = 0x360037, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x420042, SMSG_PETITION_SHOW_LIST = 0x36015C, @@ -1844,7 +1852,7 @@ enum OpcodeServer : uint32 SMSG_POWER_UPDATE = 0x360170, SMSG_PRELOAD_CHILD_MAP = 0x36000D, SMSG_PRELOAD_WORLD = 0x36002C, - SMSG_PREPOPULATE_NAME_CACHE = 0x3602C9, + SMSG_PREPOPULATE_NAME_CACHE = 0x3602CA, SMSG_PRE_RESSURECT = 0x360203, SMSG_PRINT_NOTIFICATION = 0x360063, SMSG_PROC_RESIST = 0x3601F7, @@ -1857,7 +1865,7 @@ enum OpcodeServer : uint32 SMSG_PVP_MATCH_START = 0x3C002D, SMSG_PVP_MATCH_STATISTICS = 0x3C0010, SMSG_PVP_OPTIONS_ENABLED = 0x3C0013, - SMSG_PVP_TIER_RECORD = 0x360301, + SMSG_PVP_TIER_RECORD = 0x360302, SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x3A000C, SMSG_QUERY_CREATURE_RESPONSE = 0x3A0006, SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x3A0007, @@ -1892,10 +1900,10 @@ enum OpcodeServer : uint32 SMSG_QUEST_POI_QUERY_RESPONSE = 0x4B001D, SMSG_QUEST_POI_UPDATE_RESPONSE = 0x4B001F, SMSG_QUEST_PUSH_RESULT = 0x4B0010, - SMSG_QUEST_SESSION_INFO_RESPONSE = 0x3602EC, - SMSG_QUEST_SESSION_READY_CHECK = 0x3602DA, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x3602DB, - SMSG_QUEST_SESSION_RESULT = 0x3602D9, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x3602ED, + SMSG_QUEST_SESSION_READY_CHECK = 0x3602DB, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x3602DC, + SMSG_QUEST_SESSION_RESULT = 0x3602DA, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x4B000C, SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x4B000D, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x4B000E, @@ -1903,9 +1911,9 @@ enum OpcodeServer : uint32 SMSG_QUEST_UPDATE_FAILED = 0x4B000A, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x4B000B, SMSG_QUEUE_SUMMARY_UPDATE = 0x3602A9, - SMSG_RAF_ACCOUNT_INFO = 0x3602D7, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x3602E8, - SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x360338, + SMSG_RAF_ACCOUNT_INFO = 0x3602D8, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x3602E9, + SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x360339, SMSG_RAID_DIFFICULTY_SET = 0x360244, SMSG_RAID_GROUP_ONLY = 0x360246, SMSG_RAID_INSTANCE_MESSAGE = 0x3B000A, @@ -1921,7 +1929,9 @@ enum OpcodeServer : uint32 SMSG_REATTACH_RESURRECT = 0x3601E7, SMSG_RECEIVE_PING_UNIT = 0x360039, SMSG_RECEIVE_PING_WORLD_POINT = 0x36003A, - SMSG_RECRAFT_ITEM_RESULT = 0x36032E, + SMSG_RECENT_ALLY_DATA_RESPONSE = 0x360354, + SMSG_RECENT_ALLY_NOTE_UPDATED = 0x360355, + SMSG_RECRAFT_ITEM_RESULT = 0x36032F, SMSG_RECRUIT_A_FRIEND_FAILURE = 0x36015E, SMSG_REFRESH_COMPONENT = 0x3600ED, SMSG_REGIONWIDE_CHARACTER_MAIL_DATA = 0x36001A, @@ -1935,14 +1945,14 @@ enum OpcodeServer : uint32 SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x3C0015, SMSG_RESET_COMPRESSION_CONTEXT = 0x3D0007, SMSG_RESET_FAILED_NOTIFY = 0x360155, - SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x360335, + SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x360336, SMSG_RESET_QUEST_POI = 0x4B0020, SMSG_RESET_RANGED_COMBAT_TIMER = 0x3C0023, SMSG_RESET_WEEKLY_CURRENCY = 0x360009, SMSG_RESPEC_WIPE_CONFIRM = 0x3600B0, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x360006, - SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x360308, - SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x360309, + SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x360309, + SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x36030A, SMSG_RESTART_GLOBAL_COOLDOWN = 0x4D0052, SMSG_RESTRICTED_ACCOUNT_WARNING = 0x360052, SMSG_RESUME_CAST = 0x4D002C, @@ -1952,8 +1962,8 @@ enum OpcodeServer : uint32 SMSG_RESURRECT_REQUEST = 0x360012, SMSG_RESYNC_RUNES = 0x4D0050, SMSG_RETURNING_PLAYER_PROMPT = 0x36023F, - SMSG_RETURN_APPLICANT_LIST = 0x3602CD, - SMSG_RETURN_RECRUITING_CLUBS = 0x3602CC, + SMSG_RETURN_APPLICANT_LIST = 0x3602CE, + SMSG_RETURN_RECRUITING_CLUBS = 0x3602CD, SMSG_ROLE_CHANGED_INFORM = 0x360021, SMSG_ROLE_CHOSEN = 0x44001D, SMSG_ROLE_POLL_INFORM = 0x360022, @@ -2000,7 +2010,7 @@ enum OpcodeServer : uint32 SMSG_SET_FACTION_STANDING = 0x3601C8, SMSG_SET_FACTION_VISIBLE = 0x3601C6, SMSG_SET_FLAT_SPELL_MODIFIER = 0x4D0027, - SMSG_SET_INSTANCE_LEAVER = 0x360356, + SMSG_SET_INSTANCE_LEAVER = 0x36035A, SMSG_SET_ITEM_PURCHASE_DATA = 0x360033, SMSG_SET_LOOT_METHOD_FAILED = 0x360267, SMSG_SET_MAX_WEEKLY_QUANTITY = 0x360036, @@ -2011,25 +2021,25 @@ enum OpcodeServer : uint32 SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x4A000B, SMSG_SET_PLAY_HOVER_ANIM = 0x360053, SMSG_SET_PROFICIENCY = 0x3601D1, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x3602E0, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x3602E1, SMSG_SET_SHIPMENT_READY_RESPONSE = 0x40003A, SMSG_SET_SPELL_CHARGES = 0x4D0018, SMSG_SET_TIME_ZONE_INFORMATION = 0x360116, SMSG_SET_VEHICLE_REC_ID = 0x360194, - SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x36030C, + SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x36030D, SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x40003B, - SMSG_SHOW_DELVES_COMPANION_CONFIGURATION_UI = 0x36034E, - SMSG_SHOW_DELVES_DISPLAY_UI = 0x36034C, + SMSG_SHOW_DELVES_COMPANION_CONFIGURATION_UI = 0x36034F, + SMSG_SHOW_DELVES_DISPLAY_UI = 0x36034D, SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x360073, SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x4B0015, SMSG_SHOW_TAXI_NODES = 0x36016B, SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x36020D, - SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x360318, + SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x360319, SMSG_SOCKET_GEMS_FAILURE = 0x3601C4, SMSG_SOCKET_GEMS_SUCCESS = 0x3601C3, SMSG_SPECIAL_MOUNT_ANIM = 0x36013E, - SMSG_SPECTATE_END = 0x36033A, - SMSG_SPECTATE_PLAYER = 0x360339, + SMSG_SPECTATE_END = 0x36033B, + SMSG_SPECTATE_PLAYER = 0x36033A, SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x3601B6, SMSG_SPELL_ABSORB_LOG = 0x4D000C, SMSG_SPELL_CATEGORY_COOLDOWN = 0x4D0006, @@ -2059,7 +2069,7 @@ enum OpcodeServer : uint32 SMSG_SPELL_PREPARE = 0x4D0029, SMSG_SPELL_START = 0x4D002B, SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x360065, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x3602F2, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x3602F3, SMSG_STAND_STATE_UPDATE = 0x3601BA, SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x36006B, SMSG_START_ELAPSED_TIMER = 0x3600A0, @@ -2078,16 +2088,17 @@ enum OpcodeServer : uint32 SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x360023, SMSG_SUMMON_REQUEST = 0x3601BE, SMSG_SUPERCEDED_SPELLS = 0x4D003D, + SMSG_SURVEY_DELIVERED = 0x360357, SMSG_SUSPEND_COMMS = 0x3D0002, SMSG_SUSPEND_TOKEN = 0x360040, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x3602EA, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x3602EB, SMSG_TALENTS_INVOLUNTARILY_RESET = 0x3601B5, SMSG_TAXI_NODE_STATUS = 0x36011B, SMSG_TEXT_EMOTE = 0x360119, SMSG_THREAT_CLEAR = 0x36017A, SMSG_THREAT_REMOVE = 0x360179, SMSG_THREAT_UPDATE = 0x360178, - SMSG_TIMERUNNING_SEASON_ENDED = 0x36034F, + SMSG_TIMERUNNING_SEASON_ENDED = 0x360350, SMSG_TIME_ADJUSTMENT = 0x480001, SMSG_TIME_SYNC_REQUEST = 0x480000, SMSG_TITLE_EARNED = 0x360175, @@ -2114,21 +2125,21 @@ enum OpcodeServer : uint32 SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x360263, SMSG_UNLEARNED_SPELLS = 0x4D003F, SMSG_UNLOAD_CHILD_MAP = 0x36000E, - SMSG_UNSET_INSTANCE_LEAVER = 0x360357, - SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x360302, + SMSG_UNSET_INSTANCE_LEAVER = 0x36035B, + SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x360303, SMSG_UPDATE_ACCOUNT_DATA = 0x3601A6, SMSG_UPDATE_ACCOUNT_DATA_COMPLETE = 0x3601A7, SMSG_UPDATE_ACTION_BUTTONS = 0x360078, - SMSG_UPDATE_BNET_SESSION_KEY = 0x3602BA, + SMSG_UPDATE_BNET_SESSION_KEY = 0x3602BB, SMSG_UPDATE_CAPTURE_POINT = 0x3C0007, - SMSG_UPDATE_CELESTIAL_BODY = 0x3602B6, + SMSG_UPDATE_CELESTIAL_BODY = 0x3602B7, SMSG_UPDATE_CHARACTER_FLAGS = 0x36025B, SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x360202, SMSG_UPDATE_COOLDOWN = 0x360201, SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x400038, SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x400021, SMSG_UPDATE_EXPANSION_LEVEL = 0x3600E3, - SMSG_UPDATE_GAME_TIME_STATE = 0x3602BD, + SMSG_UPDATE_GAME_TIME_STATE = 0x3602BE, SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x360148, SMSG_UPDATE_LAST_INSTANCE = 0x360127, SMSG_UPDATE_OBJECT = 0x460000, @@ -2140,16 +2151,16 @@ enum OpcodeServer : uint32 SMSG_USERLIST_REMOVE = 0x3B0010, SMSG_USERLIST_UPDATE = 0x3B0011, SMSG_USE_EQUIPMENT_SET_RESULT = 0x3601EB, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x3602B1, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x3602AF, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x3602AE, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x3602B2, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x3602B0, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x3602AF, SMSG_VAS_PURCHASE_COMPLETE = 0x360289, SMSG_VAS_PURCHASE_STATE_UPDATE = 0x360288, SMSG_VENDOR_INVENTORY = 0x360051, SMSG_VIGNETTE_UPDATE = 0x4A0010, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x3602B5, - SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x3602FD, - SMSG_VOICE_LOGIN_RESPONSE = 0x3602B4, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x3602B6, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x3602FE, + SMSG_VOICE_LOGIN_RESPONSE = 0x3602B5, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x4E0004, SMSG_VOID_STORAGE_CONTENTS = 0x4E0001, SMSG_VOID_STORAGE_FAILED = 0x4E0000, @@ -2158,29 +2169,29 @@ enum OpcodeServer : uint32 SMSG_WAIT_QUEUE_FINISH = 0x360003, SMSG_WAIT_QUEUE_UPDATE = 0x360002, SMSG_WARDEN3_DATA = 0x36000B, - SMSG_WARDEN3_DISABLED = 0x3602B8, - SMSG_WARDEN3_ENABLED = 0x3602B7, + SMSG_WARDEN3_DISABLED = 0x3602B9, + SMSG_WARDEN3_ENABLED = 0x3602B8, SMSG_WARFRONT_COMPLETE = 0x3601FA, SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x3C0012, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x3C0011, SMSG_WEATHER = 0x360145, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x3602F5, - SMSG_WEEKLY_REWARDS_RESULT = 0x3602F3, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x3602F4, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x3602F6, + SMSG_WEEKLY_REWARDS_RESULT = 0x3602F4, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x3602F5, SMSG_WHO = 0x3B0002, SMSG_WHO_IS = 0x360144, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x3602BC, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x3602BD, SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x4A0017, SMSG_WORLD_SERVER_INFO = 0x360045, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x3602EB, - SMSG_WOW_LABS_AREA_INFO = 0x36031D, - SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x360319, - SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x36031A, - SMSG_WOW_LABS_PARTY_ERROR = 0x360326, - SMSG_WOW_LABS_SET_AREA_ID_RESULT = 0x36031B, - SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x36031F, - SMSG_WOW_LABS_SET_SELECTED_AREA_ID = 0x36031C, - SMSG_XP_AWARDED_FROM_CURRENCY = 0x360334, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x3602EC, + SMSG_WOW_LABS_AREA_INFO = 0x36031E, + SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x36031A, + SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x36031B, + SMSG_WOW_LABS_PARTY_ERROR = 0x360327, + SMSG_WOW_LABS_SET_AREA_ID_RESULT = 0x36031C, + SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x360320, + SMSG_WOW_LABS_SET_SELECTED_AREA_ID = 0x36031D, + SMSG_XP_AWARDED_FROM_CURRENCY = 0x360335, SMSG_XP_GAIN_ABORTED = 0x360062, SMSG_XP_GAIN_ENABLED = 0x360245, SMSG_ZONE_UNDER_ATTACK = 0x3B000B, @@ -2194,30 +2205,30 @@ enum OpcodeServer : uint32 SMSG_ARENA_TEAM_STATS = UNKNOWN_OPCODE, }; -inline constexpr std::size_t NUM_SMSG_OPCODES = 1479; +inline constexpr std::size_t NUM_SMSG_OPCODES = 1484; inline constexpr std::ptrdiff_t GetOpcodeArrayIndex(OpcodeServer opcode) { uint32 idInGroup = opcode & 0xFFFF; switch (opcode >> 16) { - case 0x36: return idInGroup < 857 ? idInGroup + 0 : -1; - case 0x37: return idInGroup < 5 ? idInGroup + 857 : -1; - case 0x3A: return idInGroup < 18 ? idInGroup + 862 : -1; - case 0x3B: return idInGroup < 36 ? idInGroup + 880 : -1; - case 0x3C: return idInGroup < 49 ? idInGroup + 916 : -1; - case 0x3D: return idInGroup < 11 ? idInGroup + 965 : -1; - case 0x3E: return idInGroup < 12 ? idInGroup + 976 : -1; - case 0x40: return idInGroup < 82 ? idInGroup + 988 : -1; - case 0x42: return idInGroup < 71 ? idInGroup + 1070 : -1; - case 0x44: return idInGroup < 33 ? idInGroup + 1141 : -1; - case 0x46: return idInGroup < 1 ? idInGroup + 1174 : -1; - case 0x48: return idInGroup < 120 ? idInGroup + 1175 : -1; - case 0x4A: return idInGroup < 49 ? idInGroup + 1295 : -1; - case 0x4B: return idInGroup < 41 ? idInGroup + 1344 : -1; - case 0x4D: return idInGroup < 85 ? idInGroup + 1385 : -1; - case 0x4E: return idInGroup < 8 ? idInGroup + 1470 : -1; - case 0x50: return idInGroup < 1 ? idInGroup + 1478 : -1; + case 0x36: return idInGroup < 862 ? idInGroup + 0 : -1; + case 0x37: return idInGroup < 5 ? idInGroup + 862 : -1; + case 0x3A: return idInGroup < 18 ? idInGroup + 867 : -1; + case 0x3B: return idInGroup < 36 ? idInGroup + 885 : -1; + case 0x3C: return idInGroup < 49 ? idInGroup + 921 : -1; + case 0x3D: return idInGroup < 11 ? idInGroup + 970 : -1; + case 0x3E: return idInGroup < 12 ? idInGroup + 981 : -1; + case 0x40: return idInGroup < 82 ? idInGroup + 993 : -1; + case 0x42: return idInGroup < 71 ? idInGroup + 1075 : -1; + case 0x44: return idInGroup < 33 ? idInGroup + 1146 : -1; + case 0x46: return idInGroup < 1 ? idInGroup + 1179 : -1; + case 0x48: return idInGroup < 120 ? idInGroup + 1180 : -1; + case 0x4A: return idInGroup < 49 ? idInGroup + 1300 : -1; + case 0x4B: return idInGroup < 41 ? idInGroup + 1349 : -1; + case 0x4D: return idInGroup < 85 ? idInGroup + 1390 : -1; + case 0x4E: return idInGroup < 8 ? idInGroup + 1475 : -1; + case 0x50: return idInGroup < 1 ? idInGroup + 1483 : -1; default: return -1; } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 442e1495da3..409696dafe4 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -869,14 +869,17 @@ enum AccountDataType GLOBAL_EDIT_MODE_CACHE = 13, PER_CHARACTER_EDIT_MODE_CACHE = 14, GLOBAL_FRONTEND_CHAT_SETTINGS = 15, - GLOBAL_CHARACTER_LIST_ORDER = 16 + GLOBAL_CHARACTER_LIST_ORDER = 16, + GLOBAL_COOLDOWN_MANAGER = 17, + PER_CHARACTER_COOLDOWN_MANAGER2 = 18, + GLOBAL_SHOP2_PENDING_ORDERS = 19 }; -#define NUM_ACCOUNT_DATA_TYPES 17 +#define NUM_ACCOUNT_DATA_TYPES 20 -#define ALL_ACCOUNT_DATA_CACHE_MASK 0x0001FFFFu -#define GLOBAL_CACHE_MASK 0x0001A515u -#define PER_CHARACTER_CACHE_MASK 0x00005AEAu +#define ALL_ACCOUNT_DATA_CACHE_MASK 0x000FFFFFu +#define GLOBAL_CACHE_MASK 0x000BA515u +#define PER_CHARACTER_CACHE_MASK 0x00045AEAu struct AccountData { diff --git a/src/server/game/Services/ClubService.cpp b/src/server/game/Services/ClubService.cpp index 0beb13ed6ba..d4689863605 100644 --- a/src/server/game/Services/ClubService.cpp +++ b/src/server/game/Services/ClubService.cpp @@ -160,7 +160,8 @@ uint32 ClubService::HandleGetMembers(club::v1::client::GetMembersRequest const* clubMember->set_presence_level(club::v1::client::PresenceLevel::PRESENCE_LEVEL_RICH); clubMember->set_whisper_level(club::v1::client::WhisperLevel::WHISPER_LEVEL_OPEN); - clubMember->set_note(member.GetPublicNote()); + std::string_view publicNote = member.GetPublicNote(); + clubMember->set_note(publicNote.data(), publicNote.size()); clubMember->set_active(member.IsOnline()); } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 248fd007871..7a4722f9cef 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -264,6 +264,9 @@ void AuraApplication::BuildUpdatePacket(WorldPackets::Spells::AuraInfo& auraInfo else if (!(auraData.Flags & AFLAG_NOCASTER)) auraData.CastUnit = aura->GetCasterGUID(); + if (!aura->GetCastItemGUID().IsEmpty()) + auraData.CastItem = aura->GetCastItemGUID(); + if (auraData.Flags & AFLAG_DURATION) { auraData.Duration = aura->GetMaxDuration(); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 01cf68b89c2..8ab3c15d1a1 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -6150,13 +6150,30 @@ void Spell::EffectCreateTraitTreeConfig() return; newConfig.TraitSystemID = sTraitTreeStore.AssertEntry(effectInfo->MiscValue)->TraitSystemID; - int32 existingConfigForSystem = target->m_activePlayerData->TraitConfigs.FindIndexIf([&](UF::TraitConfig const& config) + TraitSystemEntry const* traitSystem = sTraitSystemStore.LookupEntry(newConfig.TraitSystemID); + if (!traitSystem) + return; + + switch (traitSystem->GetVariationType()) + { + case TraitSystemVariationType::None: + newConfig.VariationID = 0; + break; + case TraitSystemVariationType::Spec: + newConfig.VariationID = AsUnderlyingType(target->GetPrimarySpecialization()); + break; + default: + return; + } + + int32 const* existingConfigIdForSystem = target->m_activePlayerData->TraitConfigs.FindIf([&](UF::TraitConfig const& config) { return static_cast<TraitConfigType>(*config.Type) == TraitConfigType::Generic - && config.TraitSystemID == newConfig.TraitSystemID; - }); + && config.TraitSystemID == newConfig.TraitSystemID + && config.VariationID == newConfig.VariationID; + }).first; - if (existingConfigForSystem < 0) + if (!existingConfigIdForSystem) target->CreateTraitConfig(newConfig); } diff --git a/src/server/game/Spells/TraitMgr.cpp b/src/server/game/Spells/TraitMgr.cpp index 207b44e5d8a..825206942d5 100644 --- a/src/server/game/Spells/TraitMgr.cpp +++ b/src/server/game/Spells/TraitMgr.cpp @@ -459,6 +459,12 @@ void FillOwnedCurrenciesMap(WorldPackets::Traits::TraitConfig const& traitConfig } } break; + case TraitCurrencyType::TraitSourcedPlayerDataElement: + if (currency->PlayerDataElementAccountID) + currencies[currency->ID] += std::visit([](auto value) { return static_cast<int32>(value); }, player.GetDataElementAccount(currency->CurrencyTypesID)); + else if (currency->PlayerDataElementCharacterID) + currencies[currency->ID] += std::visit([](auto value) { return static_cast<int32>(value); }, player.GetDataElementCharacter(currency->CurrencyTypesID)); + break; default: break; } diff --git a/src/server/game/Spells/TraitMgr.h b/src/server/game/Spells/TraitMgr.h index 212abdf0351..f2f9634de8e 100644 --- a/src/server/game/Spells/TraitMgr.h +++ b/src/server/game/Spells/TraitMgr.h @@ -20,6 +20,7 @@ #include "Define.h" #include <map> +#include <variant> #include <vector> class Player; @@ -69,6 +70,8 @@ struct PlayerDataAccessor bool IsQuestRewarded(int32 questId) const; bool HasAchieved(int32 achievementId) const; uint32 GetPrimarySpecialization() const; + std::variant<int64, float> GetDataElementAccount(uint32 dataElementId) const; + std::variant<int64, float> GetDataElementCharacter(uint32 dataElementId) const; private: Player const* _player; diff --git a/src/server/game/Support/SupportMgr.h b/src/server/game/Support/SupportMgr.h index fc748d0a840..f224d70abe1 100644 --- a/src/server/game/Support/SupportMgr.h +++ b/src/server/game/Support/SupportMgr.h @@ -41,6 +41,10 @@ enum class ReportType : int32 Calendar = 11, Mail = 12, PvP = 13, + PvPScoreboard = 14, + PvPGroupMember = 15, + CraftingOrder = 16, + RecentAlly = 17 }; enum class ReportMajorCategory : int32 diff --git a/src/server/proto/Client/api/client/v2/presence_types.pb.cc b/src/server/proto/Client/api/client/v2/presence_types.pb.cc index 5cae430dc00..a319a2ca35b 100644 --- a/src/server/proto/Client/api/client/v2/presence_types.pb.cc +++ b/src/server/proto/Client/api/client/v2/presence_types.pb.cc @@ -47,6 +47,18 @@ const ::google::protobuf::internal::GeneratedMessageReflection* const ::google::protobuf::Descriptor* PresenceExternalIdentityFieldValue_descriptor_ = NULL; const ::google::protobuf::internal::GeneratedMessageReflection* PresenceExternalIdentityFieldValue_reflection_ = NULL; +const ::google::protobuf::Descriptor* LocalizedStringMapEntry_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + LocalizedStringMapEntry_reflection_ = NULL; +const ::google::protobuf::Descriptor* LocalizedStringMap_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + LocalizedStringMap_reflection_ = NULL; +const ::google::protobuf::Descriptor* RichPresenceParty_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + RichPresenceParty_reflection_ = NULL; +const ::google::protobuf::Descriptor* RichPresenceDetails_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + RichPresenceDetails_reflection_ = NULL; const ::google::protobuf::EnumDescriptor* PresenceQueryBehavior_descriptor_ = NULL; const ::google::protobuf::EnumDescriptor* PresenceAccountStatus_descriptor_ = NULL; @@ -193,6 +205,73 @@ void protobuf_AssignDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto() { ::google::protobuf::DescriptorPool::generated_pool(), ::google::protobuf::MessageFactory::generated_factory(), sizeof(PresenceExternalIdentityFieldValue)); + LocalizedStringMapEntry_descriptor_ = file->message_type(8); + static const int LocalizedStringMapEntry_offsets_[2] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMapEntry, locale_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMapEntry, value_), + }; + LocalizedStringMapEntry_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + LocalizedStringMapEntry_descriptor_, + LocalizedStringMapEntry::default_instance_, + LocalizedStringMapEntry_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMapEntry, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMapEntry, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(LocalizedStringMapEntry)); + LocalizedStringMap_descriptor_ = file->message_type(9); + static const int LocalizedStringMap_offsets_[2] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMap, default_string_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMap, localized_entry_), + }; + LocalizedStringMap_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + LocalizedStringMap_descriptor_, + LocalizedStringMap::default_instance_, + LocalizedStringMap_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMap, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMap, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(LocalizedStringMap)); + RichPresenceParty_descriptor_ = file->message_type(10); + static const int RichPresenceParty_offsets_[3] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, current_size_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, max_size_), + }; + RichPresenceParty_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + RichPresenceParty_descriptor_, + RichPresenceParty::default_instance_, + RichPresenceParty_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(RichPresenceParty)); + RichPresenceDetails_descriptor_ = file->message_type(11); + static const int RichPresenceDetails_offsets_[4] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, state_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, party_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, large_image_url_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, small_image_url_), + }; + RichPresenceDetails_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + RichPresenceDetails_descriptor_, + RichPresenceDetails::default_instance_, + RichPresenceDetails_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(RichPresenceDetails)); PresenceQueryBehavior_descriptor_ = file->enum_type(0); PresenceAccountStatus_descriptor_ = file->enum_type(1); } @@ -223,6 +302,14 @@ void protobuf_RegisterTypes(const ::std::string&) { PresenceOnlineGameAccountFieldValue_descriptor_, &PresenceOnlineGameAccountFieldValue::default_instance()); ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( PresenceExternalIdentityFieldValue_descriptor_, &PresenceExternalIdentityFieldValue::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + LocalizedStringMapEntry_descriptor_, &LocalizedStringMapEntry::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + LocalizedStringMap_descriptor_, &LocalizedStringMap::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + RichPresenceParty_descriptor_, &RichPresenceParty::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + RichPresenceDetails_descriptor_, &RichPresenceDetails::default_instance()); } } // namespace @@ -244,6 +331,14 @@ void protobuf_ShutdownFile_api_2fclient_2fv2_2fpresence_5ftypes_2eproto() { delete PresenceOnlineGameAccountFieldValue_reflection_; delete PresenceExternalIdentityFieldValue::default_instance_; delete PresenceExternalIdentityFieldValue_reflection_; + delete LocalizedStringMapEntry::default_instance_; + delete LocalizedStringMapEntry_reflection_; + delete LocalizedStringMap::default_instance_; + delete LocalizedStringMap_reflection_; + delete RichPresenceParty::default_instance_; + delete RichPresenceParty_reflection_; + delete RichPresenceDetails::default_instance_; + delete RichPresenceDetails_reflection_; } void protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto() { @@ -254,40 +349,55 @@ void protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto() { ::bgs::protocol::v2::protobuf_AddDesc_api_2fcommon_2fv2_2fattribute_5ftypes_2eproto(); ::bgs::protocol::account::v2::protobuf_AddDesc_api_2fcommon_2fv2_2fgame_5faccount_5fhandle_2eproto(); + ::bgs::protocol::protobuf_AddDesc_global_5fextensions_2ffield_5foptions_2eproto(); ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( "\n\"api/client/v2/presence_types.proto\022\030bg" "s.protocol.presence.v2\032#api/common/v2/at" "tribute_types.proto\032\'api/common/v2/game_" - "account_handle.proto\"L\n\017RichPresenceKey\022" - "\020\n\010title_id\030\001 \001(\r\022\016\n\006stream\030\002 \001(\007\022\027\n\017loc" - "alization_id\030\003 \001(\r\"U\n\020PresenceFieldKey\022\020" - "\n\010title_id\030\001 \001(\r\022\r\n\005group\030\002 \001(\r\022\r\n\005field" - "\030\003 \001(\r\022\021\n\tunique_id\030\004 \001(\004\"\233\001\n\rPresenceFi" - "eld\0227\n\003key\030\001 \001(\0132*.bgs.protocol.presence" - ".v2.PresenceFieldKey\022\'\n\005value\030\002 \001(\0132\030.bg" - "s.protocol.v2.Variant\022\017\n\007deleted\030\003 \001(\010\022\027" - "\n\017updated_time_us\030\004 \001(\004\"\273\001\n\022PresenceFiel" - "dState\022\022\n\naccount_id\030\001 \001(\004\022@\n\014game_accou" - "nt\030\002 \001(\0132*.bgs.protocol.account.v2.GameA" - "ccountHandle\0227\n\006fields\030\003 \003(\0132\'.bgs.proto" - "col.presence.v2.PresenceField\022\026\n\016oldest_" - "time_us\030\004 \001(\004\"\207\001\n\023PresenceFieldUpdate\0227\n" - "\003key\030\001 \001(\0132*.bgs.protocol.presence.v2.Pr" - "esenceFieldKey\022\'\n\005value\030\002 \001(\0132\030.bgs.prot" - "ocol.v2.Variant\022\016\n\006delete\030\003 \001(\010\"u\n\031Prese" - "nceOnlineGameAccount\022@\n\014game_account\030\001 \001" - "(\0132*.bgs.protocol.account.v2.GameAccount" - "Handle\022\026\n\016online_time_us\030\002 \001(\004\"x\n#Presen" - "ceOnlineGameAccountFieldValue\022Q\n\024online_" - "game_accounts\030\001 \003(\01323.bgs.protocol.prese" - "nce.v2.PresenceOnlineGameAccount\"K\n\"Pres" - "enceExternalIdentityFieldValue\022\021\n\tunique" - "_id\030\001 \001(\t\022\022\n\ndisplay_id\030\002 \001(\t*r\n\025Presenc" - "eQueryBehavior\022\033\n\027BATTLE_NET_ACCOUNT_ONL" - "Y\020\000\022\035\n\031INCLUDE_SAME_GAME_ACCOUNT\020\001\022\035\n\031IN" - "CLUDE_ALL_GAME_ACCOUNTS\020\002*C\n\025PresenceAcc" - "ountStatus\022\013\n\007OFFLINE\020\000\022\n\n\006ONLINE\020\001\022\010\n\004A" - "WAY\020\002\022\007\n\003DND\020\003B\002H\002", 1298); + "account_handle.proto\032%global_extensions/" + "field_options.proto\"L\n\017RichPresenceKey\022\020" + "\n\010title_id\030\001 \001(\r\022\016\n\006stream\030\002 \001(\007\022\027\n\017loca" + "lization_id\030\003 \001(\r\"U\n\020PresenceFieldKey\022\020\n" + "\010title_id\030\001 \001(\r\022\r\n\005group\030\002 \001(\r\022\r\n\005field\030" + "\003 \001(\r\022\021\n\tunique_id\030\004 \001(\004\"\233\001\n\rPresenceFie" + "ld\0227\n\003key\030\001 \001(\0132*.bgs.protocol.presence." + "v2.PresenceFieldKey\022\'\n\005value\030\002 \001(\0132\030.bgs" + ".protocol.v2.Variant\022\017\n\007deleted\030\003 \001(\010\022\027\n" + "\017updated_time_us\030\004 \001(\004\"\273\001\n\022PresenceField" + "State\022\022\n\naccount_id\030\001 \001(\004\022@\n\014game_accoun" + "t\030\002 \001(\0132*.bgs.protocol.account.v2.GameAc" + "countHandle\0227\n\006fields\030\003 \003(\0132\'.bgs.protoc" + "ol.presence.v2.PresenceField\022\026\n\016oldest_t" + "ime_us\030\004 \001(\004\"\207\001\n\023PresenceFieldUpdate\0227\n\003" + "key\030\001 \001(\0132*.bgs.protocol.presence.v2.Pre" + "senceFieldKey\022\'\n\005value\030\002 \001(\0132\030.bgs.proto" + "col.v2.Variant\022\016\n\006delete\030\003 \001(\010\"u\n\031Presen" + "ceOnlineGameAccount\022@\n\014game_account\030\001 \001(" + "\0132*.bgs.protocol.account.v2.GameAccountH" + "andle\022\026\n\016online_time_us\030\002 \001(\004\"x\n#Presenc" + "eOnlineGameAccountFieldValue\022Q\n\024online_g" + "ame_accounts\030\001 \003(\01323.bgs.protocol.presen" + "ce.v2.PresenceOnlineGameAccount\"K\n\"Prese" + "nceExternalIdentityFieldValue\022\021\n\tunique_" + "id\030\001 \001(\t\022\022\n\ndisplay_id\030\002 \001(\t\"F\n\027Localize" + "dStringMapEntry\022\016\n\006locale\030\001 \001(\t\022\033\n\005value" + "\030\002 \001(\tB\014\212\371+\010\"\006\n\004\010\001\020@\"\224\001\n\022LocalizedString" + "Map\022$\n\016default_string\030\001 \001(\tB\014\212\371+\010\"\006\n\004\010\001\020" + "@\022X\n\017localized_entry\030\002 \003(\01321.bgs.protoco" + "l.presence.v2.LocalizedStringMapEntryB\014\212" + "\371+\010*\006\n\004\010\000\020 \"U\n\021RichPresenceParty\022\030\n\002id\030\001" + " \001(\tB\014\212\371+\010\"\006\n\004\010\001\020(\022\024\n\014current_size\030\002 \001(\r" + "\022\020\n\010max_size\030\003 \001(\r\"\336\001\n\023RichPresenceDetai" + "ls\022;\n\005state\030\001 \001(\0132,.bgs.protocol.presenc" + "e.v2.LocalizedStringMap\022:\n\005party\030\002 \001(\0132+" + ".bgs.protocol.presence.v2.RichPresencePa" + "rty\022&\n\017large_image_url\030\003 \001(\tB\r\212\371+\t\"\007\n\005\010\000" + "\020\200\001\022&\n\017small_image_url\030\004 \001(\tB\r\212\371+\t\"\007\n\005\010\000" + "\020\200\001*r\n\025PresenceQueryBehavior\022\033\n\027BATTLE_N" + "ET_ACCOUNT_ONLY\020\000\022\035\n\031INCLUDE_SAME_GAME_A" + "CCOUNT\020\001\022\035\n\031INCLUDE_ALL_GAME_ACCOUNTS\020\002*" + "C\n\025PresenceAccountStatus\022\013\n\007OFFLINE\020\000\022\n\n" + "\006ONLINE\020\001\022\010\n\004AWAY\020\002\022\007\n\003DND\020\003B\002H\002", 1872); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "api/client/v2/presence_types.proto", &protobuf_RegisterTypes); RichPresenceKey::default_instance_ = new RichPresenceKey(); @@ -298,6 +408,10 @@ void protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto() { PresenceOnlineGameAccount::default_instance_ = new PresenceOnlineGameAccount(); PresenceOnlineGameAccountFieldValue::default_instance_ = new PresenceOnlineGameAccountFieldValue(); PresenceExternalIdentityFieldValue::default_instance_ = new PresenceExternalIdentityFieldValue(); + LocalizedStringMapEntry::default_instance_ = new LocalizedStringMapEntry(); + LocalizedStringMap::default_instance_ = new LocalizedStringMap(); + RichPresenceParty::default_instance_ = new RichPresenceParty(); + RichPresenceDetails::default_instance_ = new RichPresenceDetails(); RichPresenceKey::default_instance_->InitAsDefaultInstance(); PresenceFieldKey::default_instance_->InitAsDefaultInstance(); PresenceField::default_instance_->InitAsDefaultInstance(); @@ -306,6 +420,10 @@ void protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto() { PresenceOnlineGameAccount::default_instance_->InitAsDefaultInstance(); PresenceOnlineGameAccountFieldValue::default_instance_->InitAsDefaultInstance(); PresenceExternalIdentityFieldValue::default_instance_->InitAsDefaultInstance(); + LocalizedStringMapEntry::default_instance_->InitAsDefaultInstance(); + LocalizedStringMap::default_instance_->InitAsDefaultInstance(); + RichPresenceParty::default_instance_->InitAsDefaultInstance(); + RichPresenceDetails::default_instance_->InitAsDefaultInstance(); ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_api_2fclient_2fv2_2fpresence_5ftypes_2eproto); } @@ -969,6 +1087,333 @@ void PresenceExternalIdentityFieldValue::Swap(PresenceExternalIdentityFieldValue return metadata; } +// =================================================================== + +#ifndef _MSC_VER +const int LocalizedStringMapEntry::kLocaleFieldNumber; +const int LocalizedStringMapEntry::kValueFieldNumber; +#endif // !_MSC_VER + +LocalizedStringMapEntry::LocalizedStringMapEntry() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.presence.v2.LocalizedStringMapEntry) +} + +void LocalizedStringMapEntry::InitAsDefaultInstance() { +} + +LocalizedStringMapEntry::LocalizedStringMapEntry(const LocalizedStringMapEntry& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.presence.v2.LocalizedStringMapEntry) +} + +void LocalizedStringMapEntry::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + locale_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +LocalizedStringMapEntry::~LocalizedStringMapEntry() { + // @@protoc_insertion_point(destructor:bgs.protocol.presence.v2.LocalizedStringMapEntry) + SharedDtor(); +} + +void LocalizedStringMapEntry::SharedDtor() { + if (locale_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete locale_; + } + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete value_; + } + if (this != default_instance_) { + } +} + +void LocalizedStringMapEntry::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* LocalizedStringMapEntry::descriptor() { + protobuf_AssignDescriptorsOnce(); + return LocalizedStringMapEntry_descriptor_; +} + +const LocalizedStringMapEntry& LocalizedStringMapEntry::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + return *default_instance_; +} + +LocalizedStringMapEntry* LocalizedStringMapEntry::default_instance_ = NULL; + +LocalizedStringMapEntry* LocalizedStringMapEntry::New() const { + return new LocalizedStringMapEntry; +} + +void LocalizedStringMapEntry::Swap(LocalizedStringMapEntry* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata LocalizedStringMapEntry::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = LocalizedStringMapEntry_descriptor_; + metadata.reflection = LocalizedStringMapEntry_reflection_; + return metadata; +} + +// =================================================================== + +#ifndef _MSC_VER +const int LocalizedStringMap::kDefaultStringFieldNumber; +const int LocalizedStringMap::kLocalizedEntryFieldNumber; +#endif // !_MSC_VER + +LocalizedStringMap::LocalizedStringMap() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.presence.v2.LocalizedStringMap) +} + +void LocalizedStringMap::InitAsDefaultInstance() { +} + +LocalizedStringMap::LocalizedStringMap(const LocalizedStringMap& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.presence.v2.LocalizedStringMap) +} + +void LocalizedStringMap::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + default_string_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +LocalizedStringMap::~LocalizedStringMap() { + // @@protoc_insertion_point(destructor:bgs.protocol.presence.v2.LocalizedStringMap) + SharedDtor(); +} + +void LocalizedStringMap::SharedDtor() { + if (default_string_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete default_string_; + } + if (this != default_instance_) { + } +} + +void LocalizedStringMap::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* LocalizedStringMap::descriptor() { + protobuf_AssignDescriptorsOnce(); + return LocalizedStringMap_descriptor_; +} + +const LocalizedStringMap& LocalizedStringMap::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + return *default_instance_; +} + +LocalizedStringMap* LocalizedStringMap::default_instance_ = NULL; + +LocalizedStringMap* LocalizedStringMap::New() const { + return new LocalizedStringMap; +} + +void LocalizedStringMap::Swap(LocalizedStringMap* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata LocalizedStringMap::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = LocalizedStringMap_descriptor_; + metadata.reflection = LocalizedStringMap_reflection_; + return metadata; +} + +// =================================================================== + +#ifndef _MSC_VER +const int RichPresenceParty::kIdFieldNumber; +const int RichPresenceParty::kCurrentSizeFieldNumber; +const int RichPresenceParty::kMaxSizeFieldNumber; +#endif // !_MSC_VER + +RichPresenceParty::RichPresenceParty() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.presence.v2.RichPresenceParty) +} + +void RichPresenceParty::InitAsDefaultInstance() { +} + +RichPresenceParty::RichPresenceParty(const RichPresenceParty& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.presence.v2.RichPresenceParty) +} + +void RichPresenceParty::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + current_size_ = 0u; + max_size_ = 0u; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +RichPresenceParty::~RichPresenceParty() { + // @@protoc_insertion_point(destructor:bgs.protocol.presence.v2.RichPresenceParty) + SharedDtor(); +} + +void RichPresenceParty::SharedDtor() { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete id_; + } + if (this != default_instance_) { + } +} + +void RichPresenceParty::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* RichPresenceParty::descriptor() { + protobuf_AssignDescriptorsOnce(); + return RichPresenceParty_descriptor_; +} + +const RichPresenceParty& RichPresenceParty::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + return *default_instance_; +} + +RichPresenceParty* RichPresenceParty::default_instance_ = NULL; + +RichPresenceParty* RichPresenceParty::New() const { + return new RichPresenceParty; +} + +void RichPresenceParty::Swap(RichPresenceParty* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata RichPresenceParty::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = RichPresenceParty_descriptor_; + metadata.reflection = RichPresenceParty_reflection_; + return metadata; +} + +// =================================================================== + +#ifndef _MSC_VER +const int RichPresenceDetails::kStateFieldNumber; +const int RichPresenceDetails::kPartyFieldNumber; +const int RichPresenceDetails::kLargeImageUrlFieldNumber; +const int RichPresenceDetails::kSmallImageUrlFieldNumber; +#endif // !_MSC_VER + +RichPresenceDetails::RichPresenceDetails() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.presence.v2.RichPresenceDetails) +} + +void RichPresenceDetails::InitAsDefaultInstance() { + state_ = const_cast< ::bgs::protocol::presence::v2::LocalizedStringMap*>(&::bgs::protocol::presence::v2::LocalizedStringMap::default_instance()); + party_ = const_cast< ::bgs::protocol::presence::v2::RichPresenceParty*>(&::bgs::protocol::presence::v2::RichPresenceParty::default_instance()); +} + +RichPresenceDetails::RichPresenceDetails(const RichPresenceDetails& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.presence.v2.RichPresenceDetails) +} + +void RichPresenceDetails::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + state_ = NULL; + party_ = NULL; + large_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + small_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +RichPresenceDetails::~RichPresenceDetails() { + // @@protoc_insertion_point(destructor:bgs.protocol.presence.v2.RichPresenceDetails) + SharedDtor(); +} + +void RichPresenceDetails::SharedDtor() { + if (large_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete large_image_url_; + } + if (small_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete small_image_url_; + } + if (this != default_instance_) { + delete state_; + delete party_; + } +} + +void RichPresenceDetails::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* RichPresenceDetails::descriptor() { + protobuf_AssignDescriptorsOnce(); + return RichPresenceDetails_descriptor_; +} + +const RichPresenceDetails& RichPresenceDetails::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + return *default_instance_; +} + +RichPresenceDetails* RichPresenceDetails::default_instance_ = NULL; + +RichPresenceDetails* RichPresenceDetails::New() const { + return new RichPresenceDetails; +} + +void RichPresenceDetails::Swap(RichPresenceDetails* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata RichPresenceDetails::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = RichPresenceDetails_descriptor_; + metadata.reflection = RichPresenceDetails_reflection_; + return metadata; +} + // @@protoc_insertion_point(namespace_scope) } // namespace v2 diff --git a/src/server/proto/Client/api/client/v2/presence_types.pb.h b/src/server/proto/Client/api/client/v2/presence_types.pb.h index d1b3259fd35..75c21494b8e 100644 --- a/src/server/proto/Client/api/client/v2/presence_types.pb.h +++ b/src/server/proto/Client/api/client/v2/presence_types.pb.h @@ -27,6 +27,7 @@ #include <google/protobuf/unknown_field_set.h> #include "api/common/v2/attribute_types.pb.h" #include "api/common/v2/game_account_handle.pb.h" +#include "global_extensions/field_options.pb.h" #include "Define.h" // for TC_PROTO_API // @@protoc_insertion_point(includes) @@ -48,6 +49,10 @@ class PresenceFieldUpdate; class PresenceOnlineGameAccount; class PresenceOnlineGameAccountFieldValue; class PresenceExternalIdentityFieldValue; +class LocalizedStringMapEntry; +class LocalizedStringMap; +class RichPresenceParty; +class RichPresenceDetails; enum PresenceQueryBehavior { BATTLE_NET_ACCOUNT_ONLY = 0, @@ -796,6 +801,377 @@ class TC_PROTO_API PresenceExternalIdentityFieldValue : public ::google::protobu void InitAsDefaultInstance(); static PresenceExternalIdentityFieldValue* default_instance_; }; +// ------------------------------------------------------------------- + +class TC_PROTO_API LocalizedStringMapEntry : public ::google::protobuf::Message { + public: + LocalizedStringMapEntry(); + virtual ~LocalizedStringMapEntry(); + + LocalizedStringMapEntry(const LocalizedStringMapEntry& from); + + inline LocalizedStringMapEntry& operator=(const LocalizedStringMapEntry& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const LocalizedStringMapEntry& default_instance(); + + void Swap(LocalizedStringMapEntry* other); + + // implements Message ---------------------------------------------- + + LocalizedStringMapEntry* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string locale = 1; + inline bool has_locale() const; + inline void clear_locale(); + static const int kLocaleFieldNumber = 1; + inline const ::std::string& locale() const; + inline void set_locale(const ::std::string& value); + inline void set_locale(const char* value); + inline void set_locale(const char* value, size_t size); + inline ::std::string* mutable_locale(); + inline ::std::string* release_locale(); + inline void set_allocated_locale(::std::string* locale); + + // optional string value = 2; + inline bool has_value() const; + inline void clear_value(); + static const int kValueFieldNumber = 2; + inline const ::std::string& value() const; + inline void set_value(const ::std::string& value); + inline void set_value(const char* value); + inline void set_value(const char* value, size_t size); + inline ::std::string* mutable_value(); + inline ::std::string* release_value(); + inline void set_allocated_value(::std::string* value); + + // @@protoc_insertion_point(class_scope:bgs.protocol.presence.v2.LocalizedStringMapEntry) + private: + inline void set_has_locale(); + inline void clear_has_locale(); + inline void set_has_value(); + inline void clear_has_value(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* locale_; + ::std::string* value_; + friend void TC_PROTO_API protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + friend void protobuf_AssignDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static LocalizedStringMapEntry* default_instance_; +}; +// ------------------------------------------------------------------- + +class TC_PROTO_API LocalizedStringMap : public ::google::protobuf::Message { + public: + LocalizedStringMap(); + virtual ~LocalizedStringMap(); + + LocalizedStringMap(const LocalizedStringMap& from); + + inline LocalizedStringMap& operator=(const LocalizedStringMap& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const LocalizedStringMap& default_instance(); + + void Swap(LocalizedStringMap* other); + + // implements Message ---------------------------------------------- + + LocalizedStringMap* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string default_string = 1; + inline bool has_default_string() const; + inline void clear_default_string(); + static const int kDefaultStringFieldNumber = 1; + inline const ::std::string& default_string() const; + inline void set_default_string(const ::std::string& value); + inline void set_default_string(const char* value); + inline void set_default_string(const char* value, size_t size); + inline ::std::string* mutable_default_string(); + inline ::std::string* release_default_string(); + inline void set_allocated_default_string(::std::string* default_string); + + // repeated .bgs.protocol.presence.v2.LocalizedStringMapEntry localized_entry = 2; + inline int localized_entry_size() const; + inline void clear_localized_entry(); + static const int kLocalizedEntryFieldNumber = 2; + inline const ::bgs::protocol::presence::v2::LocalizedStringMapEntry& localized_entry(int index) const; + inline ::bgs::protocol::presence::v2::LocalizedStringMapEntry* mutable_localized_entry(int index); + inline ::bgs::protocol::presence::v2::LocalizedStringMapEntry* add_localized_entry(); + inline const ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v2::LocalizedStringMapEntry >& + localized_entry() const; + inline ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v2::LocalizedStringMapEntry >* + mutable_localized_entry(); + + // @@protoc_insertion_point(class_scope:bgs.protocol.presence.v2.LocalizedStringMap) + private: + inline void set_has_default_string(); + inline void clear_has_default_string(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* default_string_; + ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v2::LocalizedStringMapEntry > localized_entry_; + friend void TC_PROTO_API protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + friend void protobuf_AssignDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static LocalizedStringMap* default_instance_; +}; +// ------------------------------------------------------------------- + +class TC_PROTO_API RichPresenceParty : public ::google::protobuf::Message { + public: + RichPresenceParty(); + virtual ~RichPresenceParty(); + + RichPresenceParty(const RichPresenceParty& from); + + inline RichPresenceParty& operator=(const RichPresenceParty& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const RichPresenceParty& default_instance(); + + void Swap(RichPresenceParty* other); + + // implements Message ---------------------------------------------- + + RichPresenceParty* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string id = 1; + inline bool has_id() const; + inline void clear_id(); + static const int kIdFieldNumber = 1; + inline const ::std::string& id() const; + inline void set_id(const ::std::string& value); + inline void set_id(const char* value); + inline void set_id(const char* value, size_t size); + inline ::std::string* mutable_id(); + inline ::std::string* release_id(); + inline void set_allocated_id(::std::string* id); + + // optional uint32 current_size = 2; + inline bool has_current_size() const; + inline void clear_current_size(); + static const int kCurrentSizeFieldNumber = 2; + inline ::google::protobuf::uint32 current_size() const; + inline void set_current_size(::google::protobuf::uint32 value); + + // optional uint32 max_size = 3; + inline bool has_max_size() const; + inline void clear_max_size(); + static const int kMaxSizeFieldNumber = 3; + inline ::google::protobuf::uint32 max_size() const; + inline void set_max_size(::google::protobuf::uint32 value); + + // @@protoc_insertion_point(class_scope:bgs.protocol.presence.v2.RichPresenceParty) + private: + inline void set_has_id(); + inline void clear_has_id(); + inline void set_has_current_size(); + inline void clear_has_current_size(); + inline void set_has_max_size(); + inline void clear_has_max_size(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* id_; + ::google::protobuf::uint32 current_size_; + ::google::protobuf::uint32 max_size_; + friend void TC_PROTO_API protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + friend void protobuf_AssignDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static RichPresenceParty* default_instance_; +}; +// ------------------------------------------------------------------- + +class TC_PROTO_API RichPresenceDetails : public ::google::protobuf::Message { + public: + RichPresenceDetails(); + virtual ~RichPresenceDetails(); + + RichPresenceDetails(const RichPresenceDetails& from); + + inline RichPresenceDetails& operator=(const RichPresenceDetails& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const RichPresenceDetails& default_instance(); + + void Swap(RichPresenceDetails* other); + + // implements Message ---------------------------------------------- + + RichPresenceDetails* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional .bgs.protocol.presence.v2.LocalizedStringMap state = 1; + inline bool has_state() const; + inline void clear_state(); + static const int kStateFieldNumber = 1; + inline const ::bgs::protocol::presence::v2::LocalizedStringMap& state() const; + inline ::bgs::protocol::presence::v2::LocalizedStringMap* mutable_state(); + inline ::bgs::protocol::presence::v2::LocalizedStringMap* release_state(); + inline void set_allocated_state(::bgs::protocol::presence::v2::LocalizedStringMap* state); + + // optional .bgs.protocol.presence.v2.RichPresenceParty party = 2; + inline bool has_party() const; + inline void clear_party(); + static const int kPartyFieldNumber = 2; + inline const ::bgs::protocol::presence::v2::RichPresenceParty& party() const; + inline ::bgs::protocol::presence::v2::RichPresenceParty* mutable_party(); + inline ::bgs::protocol::presence::v2::RichPresenceParty* release_party(); + inline void set_allocated_party(::bgs::protocol::presence::v2::RichPresenceParty* party); + + // optional string large_image_url = 3; + inline bool has_large_image_url() const; + inline void clear_large_image_url(); + static const int kLargeImageUrlFieldNumber = 3; + inline const ::std::string& large_image_url() const; + inline void set_large_image_url(const ::std::string& value); + inline void set_large_image_url(const char* value); + inline void set_large_image_url(const char* value, size_t size); + inline ::std::string* mutable_large_image_url(); + inline ::std::string* release_large_image_url(); + inline void set_allocated_large_image_url(::std::string* large_image_url); + + // optional string small_image_url = 4; + inline bool has_small_image_url() const; + inline void clear_small_image_url(); + static const int kSmallImageUrlFieldNumber = 4; + inline const ::std::string& small_image_url() const; + inline void set_small_image_url(const ::std::string& value); + inline void set_small_image_url(const char* value); + inline void set_small_image_url(const char* value, size_t size); + inline ::std::string* mutable_small_image_url(); + inline ::std::string* release_small_image_url(); + inline void set_allocated_small_image_url(::std::string* small_image_url); + + // @@protoc_insertion_point(class_scope:bgs.protocol.presence.v2.RichPresenceDetails) + private: + inline void set_has_state(); + inline void clear_has_state(); + inline void set_has_party(); + inline void clear_has_party(); + inline void set_has_large_image_url(); + inline void clear_has_large_image_url(); + inline void set_has_small_image_url(); + inline void clear_has_small_image_url(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::bgs::protocol::presence::v2::LocalizedStringMap* state_; + ::bgs::protocol::presence::v2::RichPresenceParty* party_; + ::std::string* large_image_url_; + ::std::string* small_image_url_; + friend void TC_PROTO_API protobuf_AddDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + friend void protobuf_AssignDesc_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_api_2fclient_2fv2_2fpresence_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static RichPresenceDetails* default_instance_; +}; // =================================================================== // =================================================================== @@ -1602,6 +1978,638 @@ inline void PresenceExternalIdentityFieldValue::set_allocated_display_id(::std:: // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.PresenceExternalIdentityFieldValue.display_id) } +// ------------------------------------------------------------------- + +// LocalizedStringMapEntry + +// optional string locale = 1; +inline bool LocalizedStringMapEntry::has_locale() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void LocalizedStringMapEntry::set_has_locale() { + _has_bits_[0] |= 0x00000001u; +} +inline void LocalizedStringMapEntry::clear_has_locale() { + _has_bits_[0] &= ~0x00000001u; +} +inline void LocalizedStringMapEntry::clear_locale() { + if (locale_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_->clear(); + } + clear_has_locale(); +} +inline const ::std::string& LocalizedStringMapEntry::locale() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.LocalizedStringMapEntry.locale) + return *locale_; +} +inline void LocalizedStringMapEntry::set_locale(const ::std::string& value) { + set_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_ = new ::std::string; + } + locale_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v2.LocalizedStringMapEntry.locale) +} +inline void LocalizedStringMapEntry::set_locale(const char* value) { + set_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_ = new ::std::string; + } + locale_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v2.LocalizedStringMapEntry.locale) +} +inline void LocalizedStringMapEntry::set_locale(const char* value, size_t size) { + set_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_ = new ::std::string; + } + locale_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v2.LocalizedStringMapEntry.locale) +} +inline ::std::string* LocalizedStringMapEntry::mutable_locale() { + set_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.LocalizedStringMapEntry.locale) + return locale_; +} +inline ::std::string* LocalizedStringMapEntry::release_locale() { + clear_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = locale_; + locale_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void LocalizedStringMapEntry::set_allocated_locale(::std::string* locale) { + if (locale_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete locale_; + } + if (locale) { + set_has_locale(); + locale_ = locale; + } else { + clear_has_locale(); + locale_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.LocalizedStringMapEntry.locale) +} + +// optional string value = 2; +inline bool LocalizedStringMapEntry::has_value() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void LocalizedStringMapEntry::set_has_value() { + _has_bits_[0] |= 0x00000002u; +} +inline void LocalizedStringMapEntry::clear_has_value() { + _has_bits_[0] &= ~0x00000002u; +} +inline void LocalizedStringMapEntry::clear_value() { + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_->clear(); + } + clear_has_value(); +} +inline const ::std::string& LocalizedStringMapEntry::value() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.LocalizedStringMapEntry.value) + return *value_; +} +inline void LocalizedStringMapEntry::set_value(const ::std::string& value) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v2.LocalizedStringMapEntry.value) +} +inline void LocalizedStringMapEntry::set_value(const char* value) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v2.LocalizedStringMapEntry.value) +} +inline void LocalizedStringMapEntry::set_value(const char* value, size_t size) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v2.LocalizedStringMapEntry.value) +} +inline ::std::string* LocalizedStringMapEntry::mutable_value() { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.LocalizedStringMapEntry.value) + return value_; +} +inline ::std::string* LocalizedStringMapEntry::release_value() { + clear_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = value_; + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void LocalizedStringMapEntry::set_allocated_value(::std::string* value) { + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete value_; + } + if (value) { + set_has_value(); + value_ = value; + } else { + clear_has_value(); + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.LocalizedStringMapEntry.value) +} + +// ------------------------------------------------------------------- + +// LocalizedStringMap + +// optional string default_string = 1; +inline bool LocalizedStringMap::has_default_string() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void LocalizedStringMap::set_has_default_string() { + _has_bits_[0] |= 0x00000001u; +} +inline void LocalizedStringMap::clear_has_default_string() { + _has_bits_[0] &= ~0x00000001u; +} +inline void LocalizedStringMap::clear_default_string() { + if (default_string_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_->clear(); + } + clear_has_default_string(); +} +inline const ::std::string& LocalizedStringMap::default_string() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.LocalizedStringMap.default_string) + return *default_string_; +} +inline void LocalizedStringMap::set_default_string(const ::std::string& value) { + set_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_ = new ::std::string; + } + default_string_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v2.LocalizedStringMap.default_string) +} +inline void LocalizedStringMap::set_default_string(const char* value) { + set_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_ = new ::std::string; + } + default_string_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v2.LocalizedStringMap.default_string) +} +inline void LocalizedStringMap::set_default_string(const char* value, size_t size) { + set_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_ = new ::std::string; + } + default_string_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v2.LocalizedStringMap.default_string) +} +inline ::std::string* LocalizedStringMap::mutable_default_string() { + set_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.LocalizedStringMap.default_string) + return default_string_; +} +inline ::std::string* LocalizedStringMap::release_default_string() { + clear_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = default_string_; + default_string_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void LocalizedStringMap::set_allocated_default_string(::std::string* default_string) { + if (default_string_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete default_string_; + } + if (default_string) { + set_has_default_string(); + default_string_ = default_string; + } else { + clear_has_default_string(); + default_string_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.LocalizedStringMap.default_string) +} + +// repeated .bgs.protocol.presence.v2.LocalizedStringMapEntry localized_entry = 2; +inline int LocalizedStringMap::localized_entry_size() const { + return localized_entry_.size(); +} +inline void LocalizedStringMap::clear_localized_entry() { + localized_entry_.Clear(); +} +inline const ::bgs::protocol::presence::v2::LocalizedStringMapEntry& LocalizedStringMap::localized_entry(int index) const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.LocalizedStringMap.localized_entry) + return localized_entry_.Get(index); +} +inline ::bgs::protocol::presence::v2::LocalizedStringMapEntry* LocalizedStringMap::mutable_localized_entry(int index) { + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.LocalizedStringMap.localized_entry) + return localized_entry_.Mutable(index); +} +inline ::bgs::protocol::presence::v2::LocalizedStringMapEntry* LocalizedStringMap::add_localized_entry() { + // @@protoc_insertion_point(field_add:bgs.protocol.presence.v2.LocalizedStringMap.localized_entry) + return localized_entry_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v2::LocalizedStringMapEntry >& +LocalizedStringMap::localized_entry() const { + // @@protoc_insertion_point(field_list:bgs.protocol.presence.v2.LocalizedStringMap.localized_entry) + return localized_entry_; +} +inline ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v2::LocalizedStringMapEntry >* +LocalizedStringMap::mutable_localized_entry() { + // @@protoc_insertion_point(field_mutable_list:bgs.protocol.presence.v2.LocalizedStringMap.localized_entry) + return &localized_entry_; +} + +// ------------------------------------------------------------------- + +// RichPresenceParty + +// optional string id = 1; +inline bool RichPresenceParty::has_id() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void RichPresenceParty::set_has_id() { + _has_bits_[0] |= 0x00000001u; +} +inline void RichPresenceParty::clear_has_id() { + _has_bits_[0] &= ~0x00000001u; +} +inline void RichPresenceParty::clear_id() { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_->clear(); + } + clear_has_id(); +} +inline const ::std::string& RichPresenceParty::id() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.RichPresenceParty.id) + return *id_; +} +inline void RichPresenceParty::set_id(const ::std::string& value) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v2.RichPresenceParty.id) +} +inline void RichPresenceParty::set_id(const char* value) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v2.RichPresenceParty.id) +} +inline void RichPresenceParty::set_id(const char* value, size_t size) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v2.RichPresenceParty.id) +} +inline ::std::string* RichPresenceParty::mutable_id() { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.RichPresenceParty.id) + return id_; +} +inline ::std::string* RichPresenceParty::release_id() { + clear_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = id_; + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void RichPresenceParty::set_allocated_id(::std::string* id) { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete id_; + } + if (id) { + set_has_id(); + id_ = id; + } else { + clear_has_id(); + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.RichPresenceParty.id) +} + +// optional uint32 current_size = 2; +inline bool RichPresenceParty::has_current_size() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void RichPresenceParty::set_has_current_size() { + _has_bits_[0] |= 0x00000002u; +} +inline void RichPresenceParty::clear_has_current_size() { + _has_bits_[0] &= ~0x00000002u; +} +inline void RichPresenceParty::clear_current_size() { + current_size_ = 0u; + clear_has_current_size(); +} +inline ::google::protobuf::uint32 RichPresenceParty::current_size() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.RichPresenceParty.current_size) + return current_size_; +} +inline void RichPresenceParty::set_current_size(::google::protobuf::uint32 value) { + set_has_current_size(); + current_size_ = value; + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v2.RichPresenceParty.current_size) +} + +// optional uint32 max_size = 3; +inline bool RichPresenceParty::has_max_size() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void RichPresenceParty::set_has_max_size() { + _has_bits_[0] |= 0x00000004u; +} +inline void RichPresenceParty::clear_has_max_size() { + _has_bits_[0] &= ~0x00000004u; +} +inline void RichPresenceParty::clear_max_size() { + max_size_ = 0u; + clear_has_max_size(); +} +inline ::google::protobuf::uint32 RichPresenceParty::max_size() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.RichPresenceParty.max_size) + return max_size_; +} +inline void RichPresenceParty::set_max_size(::google::protobuf::uint32 value) { + set_has_max_size(); + max_size_ = value; + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v2.RichPresenceParty.max_size) +} + +// ------------------------------------------------------------------- + +// RichPresenceDetails + +// optional .bgs.protocol.presence.v2.LocalizedStringMap state = 1; +inline bool RichPresenceDetails::has_state() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void RichPresenceDetails::set_has_state() { + _has_bits_[0] |= 0x00000001u; +} +inline void RichPresenceDetails::clear_has_state() { + _has_bits_[0] &= ~0x00000001u; +} +inline void RichPresenceDetails::clear_state() { + if (state_ != NULL) state_->::bgs::protocol::presence::v2::LocalizedStringMap::Clear(); + clear_has_state(); +} +inline const ::bgs::protocol::presence::v2::LocalizedStringMap& RichPresenceDetails::state() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.RichPresenceDetails.state) + return state_ != NULL ? *state_ : *default_instance_->state_; +} +inline ::bgs::protocol::presence::v2::LocalizedStringMap* RichPresenceDetails::mutable_state() { + set_has_state(); + if (state_ == NULL) state_ = new ::bgs::protocol::presence::v2::LocalizedStringMap; + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.RichPresenceDetails.state) + return state_; +} +inline ::bgs::protocol::presence::v2::LocalizedStringMap* RichPresenceDetails::release_state() { + clear_has_state(); + ::bgs::protocol::presence::v2::LocalizedStringMap* temp = state_; + state_ = NULL; + return temp; +} +inline void RichPresenceDetails::set_allocated_state(::bgs::protocol::presence::v2::LocalizedStringMap* state) { + delete state_; + state_ = state; + if (state) { + set_has_state(); + } else { + clear_has_state(); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.RichPresenceDetails.state) +} + +// optional .bgs.protocol.presence.v2.RichPresenceParty party = 2; +inline bool RichPresenceDetails::has_party() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void RichPresenceDetails::set_has_party() { + _has_bits_[0] |= 0x00000002u; +} +inline void RichPresenceDetails::clear_has_party() { + _has_bits_[0] &= ~0x00000002u; +} +inline void RichPresenceDetails::clear_party() { + if (party_ != NULL) party_->::bgs::protocol::presence::v2::RichPresenceParty::Clear(); + clear_has_party(); +} +inline const ::bgs::protocol::presence::v2::RichPresenceParty& RichPresenceDetails::party() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.RichPresenceDetails.party) + return party_ != NULL ? *party_ : *default_instance_->party_; +} +inline ::bgs::protocol::presence::v2::RichPresenceParty* RichPresenceDetails::mutable_party() { + set_has_party(); + if (party_ == NULL) party_ = new ::bgs::protocol::presence::v2::RichPresenceParty; + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.RichPresenceDetails.party) + return party_; +} +inline ::bgs::protocol::presence::v2::RichPresenceParty* RichPresenceDetails::release_party() { + clear_has_party(); + ::bgs::protocol::presence::v2::RichPresenceParty* temp = party_; + party_ = NULL; + return temp; +} +inline void RichPresenceDetails::set_allocated_party(::bgs::protocol::presence::v2::RichPresenceParty* party) { + delete party_; + party_ = party; + if (party) { + set_has_party(); + } else { + clear_has_party(); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.RichPresenceDetails.party) +} + +// optional string large_image_url = 3; +inline bool RichPresenceDetails::has_large_image_url() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void RichPresenceDetails::set_has_large_image_url() { + _has_bits_[0] |= 0x00000004u; +} +inline void RichPresenceDetails::clear_has_large_image_url() { + _has_bits_[0] &= ~0x00000004u; +} +inline void RichPresenceDetails::clear_large_image_url() { + if (large_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_->clear(); + } + clear_has_large_image_url(); +} +inline const ::std::string& RichPresenceDetails::large_image_url() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.RichPresenceDetails.large_image_url) + return *large_image_url_; +} +inline void RichPresenceDetails::set_large_image_url(const ::std::string& value) { + set_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_ = new ::std::string; + } + large_image_url_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v2.RichPresenceDetails.large_image_url) +} +inline void RichPresenceDetails::set_large_image_url(const char* value) { + set_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_ = new ::std::string; + } + large_image_url_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v2.RichPresenceDetails.large_image_url) +} +inline void RichPresenceDetails::set_large_image_url(const char* value, size_t size) { + set_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_ = new ::std::string; + } + large_image_url_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v2.RichPresenceDetails.large_image_url) +} +inline ::std::string* RichPresenceDetails::mutable_large_image_url() { + set_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.RichPresenceDetails.large_image_url) + return large_image_url_; +} +inline ::std::string* RichPresenceDetails::release_large_image_url() { + clear_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = large_image_url_; + large_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void RichPresenceDetails::set_allocated_large_image_url(::std::string* large_image_url) { + if (large_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete large_image_url_; + } + if (large_image_url) { + set_has_large_image_url(); + large_image_url_ = large_image_url; + } else { + clear_has_large_image_url(); + large_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.RichPresenceDetails.large_image_url) +} + +// optional string small_image_url = 4; +inline bool RichPresenceDetails::has_small_image_url() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void RichPresenceDetails::set_has_small_image_url() { + _has_bits_[0] |= 0x00000008u; +} +inline void RichPresenceDetails::clear_has_small_image_url() { + _has_bits_[0] &= ~0x00000008u; +} +inline void RichPresenceDetails::clear_small_image_url() { + if (small_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_->clear(); + } + clear_has_small_image_url(); +} +inline const ::std::string& RichPresenceDetails::small_image_url() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v2.RichPresenceDetails.small_image_url) + return *small_image_url_; +} +inline void RichPresenceDetails::set_small_image_url(const ::std::string& value) { + set_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_ = new ::std::string; + } + small_image_url_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v2.RichPresenceDetails.small_image_url) +} +inline void RichPresenceDetails::set_small_image_url(const char* value) { + set_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_ = new ::std::string; + } + small_image_url_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v2.RichPresenceDetails.small_image_url) +} +inline void RichPresenceDetails::set_small_image_url(const char* value, size_t size) { + set_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_ = new ::std::string; + } + small_image_url_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v2.RichPresenceDetails.small_image_url) +} +inline ::std::string* RichPresenceDetails::mutable_small_image_url() { + set_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v2.RichPresenceDetails.small_image_url) + return small_image_url_; +} +inline ::std::string* RichPresenceDetails::release_small_image_url() { + clear_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = small_image_url_; + small_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void RichPresenceDetails::set_allocated_small_image_url(::std::string* small_image_url) { + if (small_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete small_image_url_; + } + if (small_image_url) { + set_has_small_image_url(); + small_image_url_ = small_image_url; + } else { + clear_has_small_image_url(); + small_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v2.RichPresenceDetails.small_image_url) +} + // @@protoc_insertion_point(namespace_scope) } // namespace v2 diff --git a/src/server/proto/Client/api/common/v1/message_types.pb.cc b/src/server/proto/Client/api/common/v1/message_types.pb.cc index 9acca966ec1..ea994f03aaf 100644 --- a/src/server/proto/Client/api/common/v1/message_types.pb.cc +++ b/src/server/proto/Client/api/common/v1/message_types.pb.cc @@ -24,7 +24,11 @@ namespace { const ::google::protobuf::Descriptor* MessageId_descriptor_ = NULL; const ::google::protobuf::internal::GeneratedMessageReflection* MessageId_reflection_ = NULL; +const ::google::protobuf::Descriptor* ExternalMessageId_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + ExternalMessageId_reflection_ = NULL; const ::google::protobuf::EnumDescriptor* TypingIndicator_descriptor_ = NULL; +const ::google::protobuf::EnumDescriptor* ExternalMessagePlatform_descriptor_ = NULL; const ::google::protobuf::EnumDescriptor* MessageOrigin_descriptor_ = NULL; } // namespace @@ -36,9 +40,11 @@ void protobuf_AssignDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto() { "api/common/v1/message_types.proto"); GOOGLE_CHECK(file != NULL); MessageId_descriptor_ = file->message_type(0); - static const int MessageId_offsets_[2] = { + static const int MessageId_offsets_[4] = { GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageId, epoch_), GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageId, position_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageId, origin_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MessageId, external_message_id_), }; MessageId_reflection_ = new ::google::protobuf::internal::GeneratedMessageReflection( @@ -51,8 +57,28 @@ void protobuf_AssignDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto() { ::google::protobuf::DescriptorPool::generated_pool(), ::google::protobuf::MessageFactory::generated_factory(), sizeof(MessageId)); + ExternalMessageId_descriptor_ = file->message_type(1); + static const int ExternalMessageId_offsets_[5] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExternalMessageId, platform_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExternalMessageId, id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExternalMessageId, creator_id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExternalMessageId, creator_display_name_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExternalMessageId, platform_data_), + }; + ExternalMessageId_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + ExternalMessageId_descriptor_, + ExternalMessageId::default_instance_, + ExternalMessageId_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExternalMessageId, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(ExternalMessageId, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(ExternalMessageId)); TypingIndicator_descriptor_ = file->enum_type(0); - MessageOrigin_descriptor_ = file->enum_type(1); + ExternalMessagePlatform_descriptor_ = file->enum_type(1); + MessageOrigin_descriptor_ = file->enum_type(2); } namespace { @@ -67,6 +93,8 @@ void protobuf_RegisterTypes(const ::std::string&) { protobuf_AssignDescriptorsOnce(); ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( MessageId_descriptor_, &MessageId::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + ExternalMessageId_descriptor_, &ExternalMessageId::default_instance()); } } // namespace @@ -74,6 +102,8 @@ void protobuf_RegisterTypes(const ::std::string&) { void protobuf_ShutdownFile_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto() { delete MessageId::default_instance_; delete MessageId_reflection_; + delete ExternalMessageId::default_instance_; + delete ExternalMessageId_reflection_; } void protobuf_AddDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto() { @@ -82,17 +112,34 @@ void protobuf_AddDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto() { already_here = true; GOOGLE_PROTOBUF_VERIFY_VERSION; + ::bgs::protocol::v2::protobuf_AddDesc_api_2fcommon_2fv2_2fattribute_5ftypes_2eproto(); + ::bgs::protocol::protobuf_AddDesc_global_5fextensions_2ffield_5foptions_2eproto(); ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( "\n!api/common/v1/message_types.proto\022\014bgs" - ".protocol\",\n\tMessageId\022\r\n\005epoch\030\001 \001(\004\022\020\n" - "\010position\030\002 \001(\004*4\n\017TypingIndicator\022\020\n\014TY" - "PING_START\020\000\022\017\n\013TYPING_STOP\020\001*E\n\rMessage" - "Origin\022\031\n\025MESSAGE_ORIGIN_PLAYER\020\000\022\031\n\025MES" - "SAGE_ORIGIN_SYSTEM\020\001B\002H\002", 224); + ".protocol\032#api/common/v2/attribute_types" + ".proto\032%global_extensions/field_options." + "proto\"\217\001\n\tMessageId\022\r\n\005epoch\030\001 \001(\004\022\020\n\010po" + "sition\030\002 \001(\004\022#\n\006origin\030\003 \001(\rB\023\202\371+\017*\rMess" + "ageOrigin\022<\n\023external_message_id\030\004 \001(\0132\037" + ".bgs.protocol.ExternalMessageId\"\342\001\n\021Exte" + "rnalMessageId\022/\n\010platform\030\001 \001(\rB\035\202\371+\031*\027E" + "xternalMessagePlatform\022\031\n\002id\030\002 \001(\tB\r\212\371+\t" + "\"\007\n\005\010\001\020\200\002\022!\n\ncreator_id\030\003 \001(\tB\r\212\371+\t\"\007\n\005\010" + "\001\020\200\002\022+\n\024creator_display_name\030\004 \001(\tB\r\212\371+\t" + "\"\007\n\005\010\001\020\200\002\0221\n\rplatform_data\030\005 \003(\0132\032.bgs.p" + "rotocol.v2.Attribute*4\n\017TypingIndicator\022" + "\020\n\014TYPING_START\020\000\022\017\n\013TYPING_STOP\020\001*d\n\027Ex" + "ternalMessagePlatform\022\"\n\036EXTERNAL_MESSAG" + "E_PLATFORM_NONE\020\000\022%\n!EXTERNAL_MESSAGE_PL" + "ATFORM_DISCORD\020\001*a\n\rMessageOrigin\022\031\n\025MES" + "SAGE_ORIGIN_PLAYER\020\000\022\031\n\025MESSAGE_ORIGIN_S" + "YSTEM\020\001\022\032\n\026MESSAGE_ORIGIN_DISCORD\020\002B\002H\002", 759); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "api/common/v1/message_types.proto", &protobuf_RegisterTypes); MessageId::default_instance_ = new MessageId(); + ExternalMessageId::default_instance_ = new ExternalMessageId(); MessageId::default_instance_->InitAsDefaultInstance(); + ExternalMessageId::default_instance_->InitAsDefaultInstance(); ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto); } @@ -116,6 +163,20 @@ bool TypingIndicator_IsValid(int value) { } } +const ::google::protobuf::EnumDescriptor* ExternalMessagePlatform_descriptor() { + protobuf_AssignDescriptorsOnce(); + return ExternalMessagePlatform_descriptor_; +} +bool ExternalMessagePlatform_IsValid(int value) { + switch(value) { + case 0: + case 1: + return true; + default: + return false; + } +} + const ::google::protobuf::EnumDescriptor* MessageOrigin_descriptor() { protobuf_AssignDescriptorsOnce(); return MessageOrigin_descriptor_; @@ -124,6 +185,7 @@ bool MessageOrigin_IsValid(int value) { switch(value) { case 0: case 1: + case 2: return true; default: return false; @@ -135,6 +197,8 @@ bool MessageOrigin_IsValid(int value) { #ifndef _MSC_VER const int MessageId::kEpochFieldNumber; const int MessageId::kPositionFieldNumber; +const int MessageId::kOriginFieldNumber; +const int MessageId::kExternalMessageIdFieldNumber; #endif // !_MSC_VER MessageId::MessageId() @@ -144,6 +208,7 @@ MessageId::MessageId() } void MessageId::InitAsDefaultInstance() { + external_message_id_ = const_cast< ::bgs::protocol::ExternalMessageId*>(&::bgs::protocol::ExternalMessageId::default_instance()); } MessageId::MessageId(const MessageId& from) @@ -157,6 +222,8 @@ void MessageId::SharedCtor() { _cached_size_ = 0; epoch_ = GOOGLE_ULONGLONG(0); position_ = GOOGLE_ULONGLONG(0); + origin_ = 0u; + external_message_id_ = NULL; ::memset(_has_bits_, 0, sizeof(_has_bits_)); } @@ -167,6 +234,7 @@ MessageId::~MessageId() { void MessageId::SharedDtor() { if (this != default_instance_) { + delete external_message_id_; } } @@ -204,6 +272,95 @@ void MessageId::Swap(MessageId* other) { return metadata; } +// =================================================================== + +#ifndef _MSC_VER +const int ExternalMessageId::kPlatformFieldNumber; +const int ExternalMessageId::kIdFieldNumber; +const int ExternalMessageId::kCreatorIdFieldNumber; +const int ExternalMessageId::kCreatorDisplayNameFieldNumber; +const int ExternalMessageId::kPlatformDataFieldNumber; +#endif // !_MSC_VER + +ExternalMessageId::ExternalMessageId() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.ExternalMessageId) +} + +void ExternalMessageId::InitAsDefaultInstance() { +} + +ExternalMessageId::ExternalMessageId(const ExternalMessageId& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.ExternalMessageId) +} + +void ExternalMessageId::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + platform_ = 0u; + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + creator_id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + creator_display_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +ExternalMessageId::~ExternalMessageId() { + // @@protoc_insertion_point(destructor:bgs.protocol.ExternalMessageId) + SharedDtor(); +} + +void ExternalMessageId::SharedDtor() { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete id_; + } + if (creator_id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete creator_id_; + } + if (creator_display_name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete creator_display_name_; + } + if (this != default_instance_) { + } +} + +void ExternalMessageId::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* ExternalMessageId::descriptor() { + protobuf_AssignDescriptorsOnce(); + return ExternalMessageId_descriptor_; +} + +const ExternalMessageId& ExternalMessageId::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); + return *default_instance_; +} + +ExternalMessageId* ExternalMessageId::default_instance_ = NULL; + +ExternalMessageId* ExternalMessageId::New() const { + return new ExternalMessageId; +} + +void ExternalMessageId::Swap(ExternalMessageId* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata ExternalMessageId::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = ExternalMessageId_descriptor_; + metadata.reflection = ExternalMessageId_reflection_; + return metadata; +} + // @@protoc_insertion_point(namespace_scope) } // namespace protocol diff --git a/src/server/proto/Client/api/common/v1/message_types.pb.h b/src/server/proto/Client/api/common/v1/message_types.pb.h index ad1be18e5fe..a87984bcc44 100644 --- a/src/server/proto/Client/api/common/v1/message_types.pb.h +++ b/src/server/proto/Client/api/common/v1/message_types.pb.h @@ -25,6 +25,8 @@ #include <google/protobuf/extension_set.h> #include <google/protobuf/generated_enum_reflection.h> #include <google/protobuf/unknown_field_set.h> +#include "api/common/v2/attribute_types.pb.h" +#include "global_extensions/field_options.pb.h" #include "Define.h" // for TC_PROTO_API // @@protoc_insertion_point(includes) @@ -37,6 +39,7 @@ void protobuf_AssignDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); void protobuf_ShutdownFile_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); class MessageId; +class ExternalMessageId; enum TypingIndicator { TYPING_START = 0, @@ -57,13 +60,33 @@ inline bool TypingIndicator_Parse( return ::google::protobuf::internal::ParseNamedEnum<TypingIndicator>( TypingIndicator_descriptor(), name, value); } +enum ExternalMessagePlatform { + EXTERNAL_MESSAGE_PLATFORM_NONE = 0, + EXTERNAL_MESSAGE_PLATFORM_DISCORD = 1 +}; +TC_PROTO_API bool ExternalMessagePlatform_IsValid(int value); +const ExternalMessagePlatform ExternalMessagePlatform_MIN = EXTERNAL_MESSAGE_PLATFORM_NONE; +const ExternalMessagePlatform ExternalMessagePlatform_MAX = EXTERNAL_MESSAGE_PLATFORM_DISCORD; +const int ExternalMessagePlatform_ARRAYSIZE = ExternalMessagePlatform_MAX + 1; + +TC_PROTO_API const ::google::protobuf::EnumDescriptor* ExternalMessagePlatform_descriptor(); +inline const ::std::string& ExternalMessagePlatform_Name(ExternalMessagePlatform value) { + return ::google::protobuf::internal::NameOfEnum( + ExternalMessagePlatform_descriptor(), value); +} +inline bool ExternalMessagePlatform_Parse( + const ::std::string& name, ExternalMessagePlatform* value) { + return ::google::protobuf::internal::ParseNamedEnum<ExternalMessagePlatform>( + ExternalMessagePlatform_descriptor(), name, value); +} enum MessageOrigin { MESSAGE_ORIGIN_PLAYER = 0, - MESSAGE_ORIGIN_SYSTEM = 1 + MESSAGE_ORIGIN_SYSTEM = 1, + MESSAGE_ORIGIN_DISCORD = 2 }; TC_PROTO_API bool MessageOrigin_IsValid(int value); const MessageOrigin MessageOrigin_MIN = MESSAGE_ORIGIN_PLAYER; -const MessageOrigin MessageOrigin_MAX = MESSAGE_ORIGIN_SYSTEM; +const MessageOrigin MessageOrigin_MAX = MESSAGE_ORIGIN_DISCORD; const int MessageOrigin_ARRAYSIZE = MessageOrigin_MAX + 1; TC_PROTO_API const ::google::protobuf::EnumDescriptor* MessageOrigin_descriptor(); @@ -132,12 +155,32 @@ class TC_PROTO_API MessageId : public ::google::protobuf::Message { inline ::google::protobuf::uint64 position() const; inline void set_position(::google::protobuf::uint64 value); + // optional uint32 origin = 3; + inline bool has_origin() const; + inline void clear_origin(); + static const int kOriginFieldNumber = 3; + inline ::google::protobuf::uint32 origin() const; + inline void set_origin(::google::protobuf::uint32 value); + + // optional .bgs.protocol.ExternalMessageId external_message_id = 4; + inline bool has_external_message_id() const; + inline void clear_external_message_id(); + static const int kExternalMessageIdFieldNumber = 4; + inline const ::bgs::protocol::ExternalMessageId& external_message_id() const; + inline ::bgs::protocol::ExternalMessageId* mutable_external_message_id(); + inline ::bgs::protocol::ExternalMessageId* release_external_message_id(); + inline void set_allocated_external_message_id(::bgs::protocol::ExternalMessageId* external_message_id); + // @@protoc_insertion_point(class_scope:bgs.protocol.MessageId) private: inline void set_has_epoch(); inline void clear_has_epoch(); inline void set_has_position(); inline void clear_has_position(); + inline void set_has_origin(); + inline void clear_has_origin(); + inline void set_has_external_message_id(); + inline void clear_has_external_message_id(); ::google::protobuf::UnknownFieldSet _unknown_fields_; @@ -145,6 +188,8 @@ class TC_PROTO_API MessageId : public ::google::protobuf::Message { mutable int _cached_size_; ::google::protobuf::uint64 epoch_; ::google::protobuf::uint64 position_; + ::bgs::protocol::ExternalMessageId* external_message_id_; + ::google::protobuf::uint32 origin_; friend void TC_PROTO_API protobuf_AddDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); friend void protobuf_AssignDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); friend void protobuf_ShutdownFile_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); @@ -152,6 +197,130 @@ class TC_PROTO_API MessageId : public ::google::protobuf::Message { void InitAsDefaultInstance(); static MessageId* default_instance_; }; +// ------------------------------------------------------------------- + +class TC_PROTO_API ExternalMessageId : public ::google::protobuf::Message { + public: + ExternalMessageId(); + virtual ~ExternalMessageId(); + + ExternalMessageId(const ExternalMessageId& from); + + inline ExternalMessageId& operator=(const ExternalMessageId& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const ExternalMessageId& default_instance(); + + void Swap(ExternalMessageId* other); + + // implements Message ---------------------------------------------- + + ExternalMessageId* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional uint32 platform = 1; + inline bool has_platform() const; + inline void clear_platform(); + static const int kPlatformFieldNumber = 1; + inline ::google::protobuf::uint32 platform() const; + inline void set_platform(::google::protobuf::uint32 value); + + // optional string id = 2; + inline bool has_id() const; + inline void clear_id(); + static const int kIdFieldNumber = 2; + inline const ::std::string& id() const; + inline void set_id(const ::std::string& value); + inline void set_id(const char* value); + inline void set_id(const char* value, size_t size); + inline ::std::string* mutable_id(); + inline ::std::string* release_id(); + inline void set_allocated_id(::std::string* id); + + // optional string creator_id = 3; + inline bool has_creator_id() const; + inline void clear_creator_id(); + static const int kCreatorIdFieldNumber = 3; + inline const ::std::string& creator_id() const; + inline void set_creator_id(const ::std::string& value); + inline void set_creator_id(const char* value); + inline void set_creator_id(const char* value, size_t size); + inline ::std::string* mutable_creator_id(); + inline ::std::string* release_creator_id(); + inline void set_allocated_creator_id(::std::string* creator_id); + + // optional string creator_display_name = 4; + inline bool has_creator_display_name() const; + inline void clear_creator_display_name(); + static const int kCreatorDisplayNameFieldNumber = 4; + inline const ::std::string& creator_display_name() const; + inline void set_creator_display_name(const ::std::string& value); + inline void set_creator_display_name(const char* value); + inline void set_creator_display_name(const char* value, size_t size); + inline ::std::string* mutable_creator_display_name(); + inline ::std::string* release_creator_display_name(); + inline void set_allocated_creator_display_name(::std::string* creator_display_name); + + // repeated .bgs.protocol.v2.Attribute platform_data = 5; + inline int platform_data_size() const; + inline void clear_platform_data(); + static const int kPlatformDataFieldNumber = 5; + inline const ::bgs::protocol::v2::Attribute& platform_data(int index) const; + inline ::bgs::protocol::v2::Attribute* mutable_platform_data(int index); + inline ::bgs::protocol::v2::Attribute* add_platform_data(); + inline const ::google::protobuf::RepeatedPtrField< ::bgs::protocol::v2::Attribute >& + platform_data() const; + inline ::google::protobuf::RepeatedPtrField< ::bgs::protocol::v2::Attribute >* + mutable_platform_data(); + + // @@protoc_insertion_point(class_scope:bgs.protocol.ExternalMessageId) + private: + inline void set_has_platform(); + inline void clear_has_platform(); + inline void set_has_id(); + inline void clear_has_id(); + inline void set_has_creator_id(); + inline void clear_has_creator_id(); + inline void set_has_creator_display_name(); + inline void clear_has_creator_display_name(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* id_; + ::std::string* creator_id_; + ::std::string* creator_display_name_; + ::google::protobuf::RepeatedPtrField< ::bgs::protocol::v2::Attribute > platform_data_; + ::google::protobuf::uint32 platform_; + friend void TC_PROTO_API protobuf_AddDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); + friend void protobuf_AssignDesc_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_api_2fcommon_2fv1_2fmessage_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static ExternalMessageId* default_instance_; +}; // =================================================================== // =================================================================== @@ -208,6 +377,357 @@ inline void MessageId::set_position(::google::protobuf::uint64 value) { // @@protoc_insertion_point(field_set:bgs.protocol.MessageId.position) } +// optional uint32 origin = 3; +inline bool MessageId::has_origin() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void MessageId::set_has_origin() { + _has_bits_[0] |= 0x00000004u; +} +inline void MessageId::clear_has_origin() { + _has_bits_[0] &= ~0x00000004u; +} +inline void MessageId::clear_origin() { + origin_ = 0u; + clear_has_origin(); +} +inline ::google::protobuf::uint32 MessageId::origin() const { + // @@protoc_insertion_point(field_get:bgs.protocol.MessageId.origin) + return origin_; +} +inline void MessageId::set_origin(::google::protobuf::uint32 value) { + set_has_origin(); + origin_ = value; + // @@protoc_insertion_point(field_set:bgs.protocol.MessageId.origin) +} + +// optional .bgs.protocol.ExternalMessageId external_message_id = 4; +inline bool MessageId::has_external_message_id() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void MessageId::set_has_external_message_id() { + _has_bits_[0] |= 0x00000008u; +} +inline void MessageId::clear_has_external_message_id() { + _has_bits_[0] &= ~0x00000008u; +} +inline void MessageId::clear_external_message_id() { + if (external_message_id_ != NULL) external_message_id_->::bgs::protocol::ExternalMessageId::Clear(); + clear_has_external_message_id(); +} +inline const ::bgs::protocol::ExternalMessageId& MessageId::external_message_id() const { + // @@protoc_insertion_point(field_get:bgs.protocol.MessageId.external_message_id) + return external_message_id_ != NULL ? *external_message_id_ : *default_instance_->external_message_id_; +} +inline ::bgs::protocol::ExternalMessageId* MessageId::mutable_external_message_id() { + set_has_external_message_id(); + if (external_message_id_ == NULL) external_message_id_ = new ::bgs::protocol::ExternalMessageId; + // @@protoc_insertion_point(field_mutable:bgs.protocol.MessageId.external_message_id) + return external_message_id_; +} +inline ::bgs::protocol::ExternalMessageId* MessageId::release_external_message_id() { + clear_has_external_message_id(); + ::bgs::protocol::ExternalMessageId* temp = external_message_id_; + external_message_id_ = NULL; + return temp; +} +inline void MessageId::set_allocated_external_message_id(::bgs::protocol::ExternalMessageId* external_message_id) { + delete external_message_id_; + external_message_id_ = external_message_id; + if (external_message_id) { + set_has_external_message_id(); + } else { + clear_has_external_message_id(); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.MessageId.external_message_id) +} + +// ------------------------------------------------------------------- + +// ExternalMessageId + +// optional uint32 platform = 1; +inline bool ExternalMessageId::has_platform() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void ExternalMessageId::set_has_platform() { + _has_bits_[0] |= 0x00000001u; +} +inline void ExternalMessageId::clear_has_platform() { + _has_bits_[0] &= ~0x00000001u; +} +inline void ExternalMessageId::clear_platform() { + platform_ = 0u; + clear_has_platform(); +} +inline ::google::protobuf::uint32 ExternalMessageId::platform() const { + // @@protoc_insertion_point(field_get:bgs.protocol.ExternalMessageId.platform) + return platform_; +} +inline void ExternalMessageId::set_platform(::google::protobuf::uint32 value) { + set_has_platform(); + platform_ = value; + // @@protoc_insertion_point(field_set:bgs.protocol.ExternalMessageId.platform) +} + +// optional string id = 2; +inline bool ExternalMessageId::has_id() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void ExternalMessageId::set_has_id() { + _has_bits_[0] |= 0x00000002u; +} +inline void ExternalMessageId::clear_has_id() { + _has_bits_[0] &= ~0x00000002u; +} +inline void ExternalMessageId::clear_id() { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_->clear(); + } + clear_has_id(); +} +inline const ::std::string& ExternalMessageId::id() const { + // @@protoc_insertion_point(field_get:bgs.protocol.ExternalMessageId.id) + return *id_; +} +inline void ExternalMessageId::set_id(const ::std::string& value) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.ExternalMessageId.id) +} +inline void ExternalMessageId::set_id(const char* value) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.ExternalMessageId.id) +} +inline void ExternalMessageId::set_id(const char* value, size_t size) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.ExternalMessageId.id) +} +inline ::std::string* ExternalMessageId::mutable_id() { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.ExternalMessageId.id) + return id_; +} +inline ::std::string* ExternalMessageId::release_id() { + clear_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = id_; + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void ExternalMessageId::set_allocated_id(::std::string* id) { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete id_; + } + if (id) { + set_has_id(); + id_ = id; + } else { + clear_has_id(); + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.ExternalMessageId.id) +} + +// optional string creator_id = 3; +inline bool ExternalMessageId::has_creator_id() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void ExternalMessageId::set_has_creator_id() { + _has_bits_[0] |= 0x00000004u; +} +inline void ExternalMessageId::clear_has_creator_id() { + _has_bits_[0] &= ~0x00000004u; +} +inline void ExternalMessageId::clear_creator_id() { + if (creator_id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_id_->clear(); + } + clear_has_creator_id(); +} +inline const ::std::string& ExternalMessageId::creator_id() const { + // @@protoc_insertion_point(field_get:bgs.protocol.ExternalMessageId.creator_id) + return *creator_id_; +} +inline void ExternalMessageId::set_creator_id(const ::std::string& value) { + set_has_creator_id(); + if (creator_id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_id_ = new ::std::string; + } + creator_id_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.ExternalMessageId.creator_id) +} +inline void ExternalMessageId::set_creator_id(const char* value) { + set_has_creator_id(); + if (creator_id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_id_ = new ::std::string; + } + creator_id_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.ExternalMessageId.creator_id) +} +inline void ExternalMessageId::set_creator_id(const char* value, size_t size) { + set_has_creator_id(); + if (creator_id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_id_ = new ::std::string; + } + creator_id_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.ExternalMessageId.creator_id) +} +inline ::std::string* ExternalMessageId::mutable_creator_id() { + set_has_creator_id(); + if (creator_id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_id_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.ExternalMessageId.creator_id) + return creator_id_; +} +inline ::std::string* ExternalMessageId::release_creator_id() { + clear_has_creator_id(); + if (creator_id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = creator_id_; + creator_id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void ExternalMessageId::set_allocated_creator_id(::std::string* creator_id) { + if (creator_id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete creator_id_; + } + if (creator_id) { + set_has_creator_id(); + creator_id_ = creator_id; + } else { + clear_has_creator_id(); + creator_id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.ExternalMessageId.creator_id) +} + +// optional string creator_display_name = 4; +inline bool ExternalMessageId::has_creator_display_name() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void ExternalMessageId::set_has_creator_display_name() { + _has_bits_[0] |= 0x00000008u; +} +inline void ExternalMessageId::clear_has_creator_display_name() { + _has_bits_[0] &= ~0x00000008u; +} +inline void ExternalMessageId::clear_creator_display_name() { + if (creator_display_name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_display_name_->clear(); + } + clear_has_creator_display_name(); +} +inline const ::std::string& ExternalMessageId::creator_display_name() const { + // @@protoc_insertion_point(field_get:bgs.protocol.ExternalMessageId.creator_display_name) + return *creator_display_name_; +} +inline void ExternalMessageId::set_creator_display_name(const ::std::string& value) { + set_has_creator_display_name(); + if (creator_display_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_display_name_ = new ::std::string; + } + creator_display_name_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.ExternalMessageId.creator_display_name) +} +inline void ExternalMessageId::set_creator_display_name(const char* value) { + set_has_creator_display_name(); + if (creator_display_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_display_name_ = new ::std::string; + } + creator_display_name_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.ExternalMessageId.creator_display_name) +} +inline void ExternalMessageId::set_creator_display_name(const char* value, size_t size) { + set_has_creator_display_name(); + if (creator_display_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_display_name_ = new ::std::string; + } + creator_display_name_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.ExternalMessageId.creator_display_name) +} +inline ::std::string* ExternalMessageId::mutable_creator_display_name() { + set_has_creator_display_name(); + if (creator_display_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + creator_display_name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.ExternalMessageId.creator_display_name) + return creator_display_name_; +} +inline ::std::string* ExternalMessageId::release_creator_display_name() { + clear_has_creator_display_name(); + if (creator_display_name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = creator_display_name_; + creator_display_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void ExternalMessageId::set_allocated_creator_display_name(::std::string* creator_display_name) { + if (creator_display_name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete creator_display_name_; + } + if (creator_display_name) { + set_has_creator_display_name(); + creator_display_name_ = creator_display_name; + } else { + clear_has_creator_display_name(); + creator_display_name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.ExternalMessageId.creator_display_name) +} + +// repeated .bgs.protocol.v2.Attribute platform_data = 5; +inline int ExternalMessageId::platform_data_size() const { + return platform_data_.size(); +} +inline void ExternalMessageId::clear_platform_data() { + platform_data_.Clear(); +} +inline const ::bgs::protocol::v2::Attribute& ExternalMessageId::platform_data(int index) const { + // @@protoc_insertion_point(field_get:bgs.protocol.ExternalMessageId.platform_data) + return platform_data_.Get(index); +} +inline ::bgs::protocol::v2::Attribute* ExternalMessageId::mutable_platform_data(int index) { + // @@protoc_insertion_point(field_mutable:bgs.protocol.ExternalMessageId.platform_data) + return platform_data_.Mutable(index); +} +inline ::bgs::protocol::v2::Attribute* ExternalMessageId::add_platform_data() { + // @@protoc_insertion_point(field_add:bgs.protocol.ExternalMessageId.platform_data) + return platform_data_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::bgs::protocol::v2::Attribute >& +ExternalMessageId::platform_data() const { + // @@protoc_insertion_point(field_list:bgs.protocol.ExternalMessageId.platform_data) + return platform_data_; +} +inline ::google::protobuf::RepeatedPtrField< ::bgs::protocol::v2::Attribute >* +ExternalMessageId::mutable_platform_data() { + // @@protoc_insertion_point(field_mutable_list:bgs.protocol.ExternalMessageId.platform_data) + return &platform_data_; +} + // @@protoc_insertion_point(namespace_scope) } // namespace protocol @@ -221,6 +741,11 @@ template <> inline const EnumDescriptor* GetEnumDescriptor< ::bgs::protocol::TypingIndicator>() { return ::bgs::protocol::TypingIndicator_descriptor(); } +template <> struct is_proto_enum< ::bgs::protocol::ExternalMessagePlatform> : ::google::protobuf::internal::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::bgs::protocol::ExternalMessagePlatform>() { + return ::bgs::protocol::ExternalMessagePlatform_descriptor(); +} template <> struct is_proto_enum< ::bgs::protocol::MessageOrigin> : ::google::protobuf::internal::true_type {}; template <> inline const EnumDescriptor* GetEnumDescriptor< ::bgs::protocol::MessageOrigin>() { diff --git a/src/server/proto/Client/presence_types.pb.cc b/src/server/proto/Client/presence_types.pb.cc index 3316f5b3952..31ba589d166 100644 --- a/src/server/proto/Client/presence_types.pb.cc +++ b/src/server/proto/Client/presence_types.pb.cc @@ -42,6 +42,18 @@ const ::google::protobuf::internal::GeneratedMessageReflection* const ::google::protobuf::Descriptor* ChannelState_descriptor_ = NULL; const ::google::protobuf::internal::GeneratedMessageReflection* ChannelState_reflection_ = NULL; +const ::google::protobuf::Descriptor* LocalizedStringMapEntry_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + LocalizedStringMapEntry_reflection_ = NULL; +const ::google::protobuf::Descriptor* LocalizedStringMap_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + LocalizedStringMap_reflection_ = NULL; +const ::google::protobuf::Descriptor* RichPresenceParty_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + RichPresenceParty_reflection_ = NULL; +const ::google::protobuf::Descriptor* RichPresenceDetails_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + RichPresenceDetails_reflection_ = NULL; } // namespace @@ -152,6 +164,73 @@ void protobuf_AssignDesc_presence_5ftypes_2eproto() { ::google::protobuf::DescriptorPool::generated_pool(), ::google::protobuf::MessageFactory::generated_factory(), sizeof(ChannelState)); + LocalizedStringMapEntry_descriptor_ = file->message_type(6); + static const int LocalizedStringMapEntry_offsets_[2] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMapEntry, locale_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMapEntry, value_), + }; + LocalizedStringMapEntry_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + LocalizedStringMapEntry_descriptor_, + LocalizedStringMapEntry::default_instance_, + LocalizedStringMapEntry_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMapEntry, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMapEntry, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(LocalizedStringMapEntry)); + LocalizedStringMap_descriptor_ = file->message_type(7); + static const int LocalizedStringMap_offsets_[2] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMap, default_string_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMap, localized_entry_), + }; + LocalizedStringMap_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + LocalizedStringMap_descriptor_, + LocalizedStringMap::default_instance_, + LocalizedStringMap_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMap, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LocalizedStringMap, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(LocalizedStringMap)); + RichPresenceParty_descriptor_ = file->message_type(8); + static const int RichPresenceParty_offsets_[3] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, id_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, current_size_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, max_size_), + }; + RichPresenceParty_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + RichPresenceParty_descriptor_, + RichPresenceParty::default_instance_, + RichPresenceParty_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceParty, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(RichPresenceParty)); + RichPresenceDetails_descriptor_ = file->message_type(9); + static const int RichPresenceDetails_offsets_[4] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, state_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, party_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, large_image_url_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, small_image_url_), + }; + RichPresenceDetails_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + RichPresenceDetails_descriptor_, + RichPresenceDetails::default_instance_, + RichPresenceDetails_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(RichPresenceDetails, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(RichPresenceDetails)); } namespace { @@ -176,6 +255,14 @@ void protobuf_RegisterTypes(const ::std::string&) { PresenceState_descriptor_, &PresenceState::default_instance()); ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( ChannelState_descriptor_, &ChannelState::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + LocalizedStringMapEntry_descriptor_, &LocalizedStringMapEntry::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + LocalizedStringMap_descriptor_, &LocalizedStringMap::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + RichPresenceParty_descriptor_, &RichPresenceParty::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + RichPresenceDetails_descriptor_, &RichPresenceDetails::default_instance()); } } // namespace @@ -193,6 +280,14 @@ void protobuf_ShutdownFile_presence_5ftypes_2eproto() { delete PresenceState_reflection_; delete ChannelState::default_instance_; delete ChannelState_reflection_; + delete LocalizedStringMapEntry::default_instance_; + delete LocalizedStringMapEntry_reflection_; + delete LocalizedStringMap::default_instance_; + delete LocalizedStringMap_reflection_; + delete RichPresenceParty::default_instance_; + delete RichPresenceParty_reflection_; + delete RichPresenceDetails::default_instance_; + delete RichPresenceDetails_reflection_; } void protobuf_AddDesc_presence_5ftypes_2eproto() { @@ -203,32 +298,47 @@ void protobuf_AddDesc_presence_5ftypes_2eproto() { ::bgs::protocol::protobuf_AddDesc_attribute_5ftypes_2eproto(); ::bgs::protocol::protobuf_AddDesc_entity_5ftypes_2eproto(); + ::bgs::protocol::protobuf_AddDesc_global_5fextensions_2ffield_5foptions_2eproto(); ::bgs::protocol::channel::v1::protobuf_AddDesc_api_2fclient_2fv1_2fchannel_5ftypes_2eproto(); ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( "\n\024presence_types.proto\022\030bgs.protocol.pre" "sence.v1\032\025attribute_types.proto\032\022entity_" - "types.proto\032!api/client/v1/channel_types" - ".proto\"W\n\033RichPresenceLocalizationKey\022\017\n" - "\007program\030\001 \002(\007\022\016\n\006stream\030\002 \002(\007\022\027\n\017locali" - "zation_id\030\003 \002(\r\"L\n\010FieldKey\022\017\n\007program\030\001" - " \002(\r\022\r\n\005group\030\002 \002(\r\022\r\n\005field\030\003 \002(\r\022\021\n\tun" - "ique_id\030\004 \001(\004\"^\n\005Field\022/\n\003key\030\001 \002(\0132\".bg" - "s.protocol.presence.v1.FieldKey\022$\n\005value" - "\030\002 \002(\0132\025.bgs.protocol.Variant\"\265\001\n\016FieldO" - "peration\022.\n\005field\030\001 \002(\0132\037.bgs.protocol.p" - "resence.v1.Field\022N\n\toperation\030\002 \001(\01626.bg" - "s.protocol.presence.v1.FieldOperation.Op" - "erationType:\003SET\"#\n\rOperationType\022\007\n\003SET" - "\020\000\022\t\n\005CLEAR\020\001\"}\n\rPresenceState\022)\n\tentity" - "_id\030\001 \001(\0132\026.bgs.protocol.EntityId\022A\n\017fie" - "ld_operation\030\002 \003(\0132(.bgs.protocol.presen" - "ce.v1.FieldOperation\"\356\001\n\014ChannelState\022)\n" - "\tentity_id\030\001 \001(\0132\026.bgs.protocol.EntityId" - "\022A\n\017field_operation\030\002 \003(\0132(.bgs.protocol" - ".presence.v1.FieldOperation\022\017\n\007healing\030\003" - " \001(\0102_\n\010presence\022%.bgs.protocol.channel." - "v1.ChannelState\030e \001(\0132&.bgs.protocol.pre" - "sence.v1.ChannelStateB\002H\002", 945); + "types.proto\032%global_extensions/field_opt" + "ions.proto\032!api/client/v1/channel_types." + "proto\"W\n\033RichPresenceLocalizationKey\022\017\n\007" + "program\030\001 \002(\007\022\016\n\006stream\030\002 \002(\007\022\027\n\017localiz" + "ation_id\030\003 \002(\r\"L\n\010FieldKey\022\017\n\007program\030\001 " + "\002(\r\022\r\n\005group\030\002 \002(\r\022\r\n\005field\030\003 \002(\r\022\021\n\tuni" + "que_id\030\004 \001(\004\"^\n\005Field\022/\n\003key\030\001 \002(\0132\".bgs" + ".protocol.presence.v1.FieldKey\022$\n\005value\030" + "\002 \002(\0132\025.bgs.protocol.Variant\"\265\001\n\016FieldOp" + "eration\022.\n\005field\030\001 \002(\0132\037.bgs.protocol.pr" + "esence.v1.Field\022N\n\toperation\030\002 \001(\01626.bgs" + ".protocol.presence.v1.FieldOperation.Ope" + "rationType:\003SET\"#\n\rOperationType\022\007\n\003SET\020" + "\000\022\t\n\005CLEAR\020\001\"}\n\rPresenceState\022)\n\tentity_" + "id\030\001 \001(\0132\026.bgs.protocol.EntityId\022A\n\017fiel" + "d_operation\030\002 \003(\0132(.bgs.protocol.presenc" + "e.v1.FieldOperation\"\356\001\n\014ChannelState\022)\n\t" + "entity_id\030\001 \001(\0132\026.bgs.protocol.EntityId\022" + "A\n\017field_operation\030\002 \003(\0132(.bgs.protocol." + "presence.v1.FieldOperation\022\017\n\007healing\030\003 " + "\001(\0102_\n\010presence\022%.bgs.protocol.channel.v" + "1.ChannelState\030e \001(\0132&.bgs.protocol.pres" + "ence.v1.ChannelState\"F\n\027LocalizedStringM" + "apEntry\022\016\n\006locale\030\001 \001(\t\022\033\n\005value\030\002 \001(\tB\014" + "\212\371+\010\"\006\n\004\010\001\020@\"\224\001\n\022LocalizedStringMap\022$\n\016d" + "efault_string\030\001 \001(\tB\014\212\371+\010\"\006\n\004\010\001\020@\022X\n\017loc" + "alized_entry\030\002 \003(\01321.bgs.protocol.presen" + "ce.v1.LocalizedStringMapEntryB\014\212\371+\010*\006\n\004\010" + "\000\020 \"U\n\021RichPresenceParty\022\030\n\002id\030\001 \001(\tB\014\212\371" + "+\010\"\006\n\004\010\001\020(\022\024\n\014current_size\030\002 \001(\r\022\020\n\010max_" + "size\030\003 \001(\r\"\336\001\n\023RichPresenceDetails\022;\n\005st" + "ate\030\001 \001(\0132,.bgs.protocol.presence.v1.Loc" + "alizedStringMap\022:\n\005party\030\002 \001(\0132+.bgs.pro" + "tocol.presence.v1.RichPresenceParty\022&\n\017l" + "arge_image_url\030\003 \001(\tB\r\212\371+\t\"\007\n\005\010\000\020\200\001\022&\n\017s" + "mall_image_url\030\004 \001(\tB\r\212\371+\t\"\007\n\005\010\000\020\200\001B\002H\002", 1519); ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( "presence_types.proto", &protobuf_RegisterTypes); RichPresenceLocalizationKey::default_instance_ = new RichPresenceLocalizationKey(); @@ -237,6 +347,10 @@ void protobuf_AddDesc_presence_5ftypes_2eproto() { FieldOperation::default_instance_ = new FieldOperation(); PresenceState::default_instance_ = new PresenceState(); ChannelState::default_instance_ = new ChannelState(); + LocalizedStringMapEntry::default_instance_ = new LocalizedStringMapEntry(); + LocalizedStringMap::default_instance_ = new LocalizedStringMap(); + RichPresenceParty::default_instance_ = new RichPresenceParty(); + RichPresenceDetails::default_instance_ = new RichPresenceDetails(); RichPresenceLocalizationKey::default_instance_->InitAsDefaultInstance(); FieldKey::default_instance_->InitAsDefaultInstance(); Field::default_instance_->InitAsDefaultInstance(); @@ -247,6 +361,10 @@ void protobuf_AddDesc_presence_5ftypes_2eproto() { &::bgs::protocol::channel::v1::ChannelState::default_instance(), 101, 11, false, false, &::bgs::protocol::presence::v1::ChannelState::default_instance()); + LocalizedStringMapEntry::default_instance_->InitAsDefaultInstance(); + LocalizedStringMap::default_instance_->InitAsDefaultInstance(); + RichPresenceParty::default_instance_->InitAsDefaultInstance(); + RichPresenceDetails::default_instance_->InitAsDefaultInstance(); ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_presence_5ftypes_2eproto); } @@ -743,6 +861,333 @@ void ChannelState::Swap(ChannelState* other) { return metadata; } +// =================================================================== + +#ifndef _MSC_VER +const int LocalizedStringMapEntry::kLocaleFieldNumber; +const int LocalizedStringMapEntry::kValueFieldNumber; +#endif // !_MSC_VER + +LocalizedStringMapEntry::LocalizedStringMapEntry() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.presence.v1.LocalizedStringMapEntry) +} + +void LocalizedStringMapEntry::InitAsDefaultInstance() { +} + +LocalizedStringMapEntry::LocalizedStringMapEntry(const LocalizedStringMapEntry& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.presence.v1.LocalizedStringMapEntry) +} + +void LocalizedStringMapEntry::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + locale_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +LocalizedStringMapEntry::~LocalizedStringMapEntry() { + // @@protoc_insertion_point(destructor:bgs.protocol.presence.v1.LocalizedStringMapEntry) + SharedDtor(); +} + +void LocalizedStringMapEntry::SharedDtor() { + if (locale_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete locale_; + } + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete value_; + } + if (this != default_instance_) { + } +} + +void LocalizedStringMapEntry::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* LocalizedStringMapEntry::descriptor() { + protobuf_AssignDescriptorsOnce(); + return LocalizedStringMapEntry_descriptor_; +} + +const LocalizedStringMapEntry& LocalizedStringMapEntry::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_presence_5ftypes_2eproto(); + return *default_instance_; +} + +LocalizedStringMapEntry* LocalizedStringMapEntry::default_instance_ = NULL; + +LocalizedStringMapEntry* LocalizedStringMapEntry::New() const { + return new LocalizedStringMapEntry; +} + +void LocalizedStringMapEntry::Swap(LocalizedStringMapEntry* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata LocalizedStringMapEntry::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = LocalizedStringMapEntry_descriptor_; + metadata.reflection = LocalizedStringMapEntry_reflection_; + return metadata; +} + +// =================================================================== + +#ifndef _MSC_VER +const int LocalizedStringMap::kDefaultStringFieldNumber; +const int LocalizedStringMap::kLocalizedEntryFieldNumber; +#endif // !_MSC_VER + +LocalizedStringMap::LocalizedStringMap() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.presence.v1.LocalizedStringMap) +} + +void LocalizedStringMap::InitAsDefaultInstance() { +} + +LocalizedStringMap::LocalizedStringMap(const LocalizedStringMap& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.presence.v1.LocalizedStringMap) +} + +void LocalizedStringMap::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + default_string_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +LocalizedStringMap::~LocalizedStringMap() { + // @@protoc_insertion_point(destructor:bgs.protocol.presence.v1.LocalizedStringMap) + SharedDtor(); +} + +void LocalizedStringMap::SharedDtor() { + if (default_string_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete default_string_; + } + if (this != default_instance_) { + } +} + +void LocalizedStringMap::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* LocalizedStringMap::descriptor() { + protobuf_AssignDescriptorsOnce(); + return LocalizedStringMap_descriptor_; +} + +const LocalizedStringMap& LocalizedStringMap::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_presence_5ftypes_2eproto(); + return *default_instance_; +} + +LocalizedStringMap* LocalizedStringMap::default_instance_ = NULL; + +LocalizedStringMap* LocalizedStringMap::New() const { + return new LocalizedStringMap; +} + +void LocalizedStringMap::Swap(LocalizedStringMap* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata LocalizedStringMap::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = LocalizedStringMap_descriptor_; + metadata.reflection = LocalizedStringMap_reflection_; + return metadata; +} + +// =================================================================== + +#ifndef _MSC_VER +const int RichPresenceParty::kIdFieldNumber; +const int RichPresenceParty::kCurrentSizeFieldNumber; +const int RichPresenceParty::kMaxSizeFieldNumber; +#endif // !_MSC_VER + +RichPresenceParty::RichPresenceParty() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.presence.v1.RichPresenceParty) +} + +void RichPresenceParty::InitAsDefaultInstance() { +} + +RichPresenceParty::RichPresenceParty(const RichPresenceParty& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.presence.v1.RichPresenceParty) +} + +void RichPresenceParty::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + current_size_ = 0u; + max_size_ = 0u; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +RichPresenceParty::~RichPresenceParty() { + // @@protoc_insertion_point(destructor:bgs.protocol.presence.v1.RichPresenceParty) + SharedDtor(); +} + +void RichPresenceParty::SharedDtor() { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete id_; + } + if (this != default_instance_) { + } +} + +void RichPresenceParty::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* RichPresenceParty::descriptor() { + protobuf_AssignDescriptorsOnce(); + return RichPresenceParty_descriptor_; +} + +const RichPresenceParty& RichPresenceParty::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_presence_5ftypes_2eproto(); + return *default_instance_; +} + +RichPresenceParty* RichPresenceParty::default_instance_ = NULL; + +RichPresenceParty* RichPresenceParty::New() const { + return new RichPresenceParty; +} + +void RichPresenceParty::Swap(RichPresenceParty* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata RichPresenceParty::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = RichPresenceParty_descriptor_; + metadata.reflection = RichPresenceParty_reflection_; + return metadata; +} + +// =================================================================== + +#ifndef _MSC_VER +const int RichPresenceDetails::kStateFieldNumber; +const int RichPresenceDetails::kPartyFieldNumber; +const int RichPresenceDetails::kLargeImageUrlFieldNumber; +const int RichPresenceDetails::kSmallImageUrlFieldNumber; +#endif // !_MSC_VER + +RichPresenceDetails::RichPresenceDetails() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:bgs.protocol.presence.v1.RichPresenceDetails) +} + +void RichPresenceDetails::InitAsDefaultInstance() { + state_ = const_cast< ::bgs::protocol::presence::v1::LocalizedStringMap*>(&::bgs::protocol::presence::v1::LocalizedStringMap::default_instance()); + party_ = const_cast< ::bgs::protocol::presence::v1::RichPresenceParty*>(&::bgs::protocol::presence::v1::RichPresenceParty::default_instance()); +} + +RichPresenceDetails::RichPresenceDetails(const RichPresenceDetails& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:bgs.protocol.presence.v1.RichPresenceDetails) +} + +void RichPresenceDetails::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + state_ = NULL; + party_ = NULL; + large_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + small_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +RichPresenceDetails::~RichPresenceDetails() { + // @@protoc_insertion_point(destructor:bgs.protocol.presence.v1.RichPresenceDetails) + SharedDtor(); +} + +void RichPresenceDetails::SharedDtor() { + if (large_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete large_image_url_; + } + if (small_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete small_image_url_; + } + if (this != default_instance_) { + delete state_; + delete party_; + } +} + +void RichPresenceDetails::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* RichPresenceDetails::descriptor() { + protobuf_AssignDescriptorsOnce(); + return RichPresenceDetails_descriptor_; +} + +const RichPresenceDetails& RichPresenceDetails::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_presence_5ftypes_2eproto(); + return *default_instance_; +} + +RichPresenceDetails* RichPresenceDetails::default_instance_ = NULL; + +RichPresenceDetails* RichPresenceDetails::New() const { + return new RichPresenceDetails; +} + +void RichPresenceDetails::Swap(RichPresenceDetails* other) { + if (other != this) { + GetReflection()->Swap(this, other);} +} + +::google::protobuf::Metadata RichPresenceDetails::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = RichPresenceDetails_descriptor_; + metadata.reflection = RichPresenceDetails_reflection_; + return metadata; +} + // @@protoc_insertion_point(namespace_scope) } // namespace v1 diff --git a/src/server/proto/Client/presence_types.pb.h b/src/server/proto/Client/presence_types.pb.h index a75999f5a4b..dcd2510b86c 100644 --- a/src/server/proto/Client/presence_types.pb.h +++ b/src/server/proto/Client/presence_types.pb.h @@ -27,6 +27,7 @@ #include <google/protobuf/unknown_field_set.h> #include "attribute_types.pb.h" #include "entity_types.pb.h" +#include "global_extensions/field_options.pb.h" #include "api/client/v1/channel_types.pb.h" #include "Define.h" // for TC_PROTO_API // @@protoc_insertion_point(includes) @@ -47,6 +48,10 @@ class Field; class FieldOperation; class PresenceState; class ChannelState; +class LocalizedStringMapEntry; +class LocalizedStringMap; +class RichPresenceParty; +class RichPresenceDetails; enum FieldOperation_OperationType { FieldOperation_OperationType_SET = 0, @@ -607,6 +612,377 @@ class TC_PROTO_API ChannelState : public ::google::protobuf::Message { void InitAsDefaultInstance(); static ChannelState* default_instance_; }; +// ------------------------------------------------------------------- + +class TC_PROTO_API LocalizedStringMapEntry : public ::google::protobuf::Message { + public: + LocalizedStringMapEntry(); + virtual ~LocalizedStringMapEntry(); + + LocalizedStringMapEntry(const LocalizedStringMapEntry& from); + + inline LocalizedStringMapEntry& operator=(const LocalizedStringMapEntry& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const LocalizedStringMapEntry& default_instance(); + + void Swap(LocalizedStringMapEntry* other); + + // implements Message ---------------------------------------------- + + LocalizedStringMapEntry* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string locale = 1; + inline bool has_locale() const; + inline void clear_locale(); + static const int kLocaleFieldNumber = 1; + inline const ::std::string& locale() const; + inline void set_locale(const ::std::string& value); + inline void set_locale(const char* value); + inline void set_locale(const char* value, size_t size); + inline ::std::string* mutable_locale(); + inline ::std::string* release_locale(); + inline void set_allocated_locale(::std::string* locale); + + // optional string value = 2; + inline bool has_value() const; + inline void clear_value(); + static const int kValueFieldNumber = 2; + inline const ::std::string& value() const; + inline void set_value(const ::std::string& value); + inline void set_value(const char* value); + inline void set_value(const char* value, size_t size); + inline ::std::string* mutable_value(); + inline ::std::string* release_value(); + inline void set_allocated_value(::std::string* value); + + // @@protoc_insertion_point(class_scope:bgs.protocol.presence.v1.LocalizedStringMapEntry) + private: + inline void set_has_locale(); + inline void clear_has_locale(); + inline void set_has_value(); + inline void clear_has_value(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* locale_; + ::std::string* value_; + friend void TC_PROTO_API protobuf_AddDesc_presence_5ftypes_2eproto(); + friend void protobuf_AssignDesc_presence_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_presence_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static LocalizedStringMapEntry* default_instance_; +}; +// ------------------------------------------------------------------- + +class TC_PROTO_API LocalizedStringMap : public ::google::protobuf::Message { + public: + LocalizedStringMap(); + virtual ~LocalizedStringMap(); + + LocalizedStringMap(const LocalizedStringMap& from); + + inline LocalizedStringMap& operator=(const LocalizedStringMap& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const LocalizedStringMap& default_instance(); + + void Swap(LocalizedStringMap* other); + + // implements Message ---------------------------------------------- + + LocalizedStringMap* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string default_string = 1; + inline bool has_default_string() const; + inline void clear_default_string(); + static const int kDefaultStringFieldNumber = 1; + inline const ::std::string& default_string() const; + inline void set_default_string(const ::std::string& value); + inline void set_default_string(const char* value); + inline void set_default_string(const char* value, size_t size); + inline ::std::string* mutable_default_string(); + inline ::std::string* release_default_string(); + inline void set_allocated_default_string(::std::string* default_string); + + // repeated .bgs.protocol.presence.v1.LocalizedStringMapEntry localized_entry = 2; + inline int localized_entry_size() const; + inline void clear_localized_entry(); + static const int kLocalizedEntryFieldNumber = 2; + inline const ::bgs::protocol::presence::v1::LocalizedStringMapEntry& localized_entry(int index) const; + inline ::bgs::protocol::presence::v1::LocalizedStringMapEntry* mutable_localized_entry(int index); + inline ::bgs::protocol::presence::v1::LocalizedStringMapEntry* add_localized_entry(); + inline const ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v1::LocalizedStringMapEntry >& + localized_entry() const; + inline ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v1::LocalizedStringMapEntry >* + mutable_localized_entry(); + + // @@protoc_insertion_point(class_scope:bgs.protocol.presence.v1.LocalizedStringMap) + private: + inline void set_has_default_string(); + inline void clear_has_default_string(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* default_string_; + ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v1::LocalizedStringMapEntry > localized_entry_; + friend void TC_PROTO_API protobuf_AddDesc_presence_5ftypes_2eproto(); + friend void protobuf_AssignDesc_presence_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_presence_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static LocalizedStringMap* default_instance_; +}; +// ------------------------------------------------------------------- + +class TC_PROTO_API RichPresenceParty : public ::google::protobuf::Message { + public: + RichPresenceParty(); + virtual ~RichPresenceParty(); + + RichPresenceParty(const RichPresenceParty& from); + + inline RichPresenceParty& operator=(const RichPresenceParty& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const RichPresenceParty& default_instance(); + + void Swap(RichPresenceParty* other); + + // implements Message ---------------------------------------------- + + RichPresenceParty* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string id = 1; + inline bool has_id() const; + inline void clear_id(); + static const int kIdFieldNumber = 1; + inline const ::std::string& id() const; + inline void set_id(const ::std::string& value); + inline void set_id(const char* value); + inline void set_id(const char* value, size_t size); + inline ::std::string* mutable_id(); + inline ::std::string* release_id(); + inline void set_allocated_id(::std::string* id); + + // optional uint32 current_size = 2; + inline bool has_current_size() const; + inline void clear_current_size(); + static const int kCurrentSizeFieldNumber = 2; + inline ::google::protobuf::uint32 current_size() const; + inline void set_current_size(::google::protobuf::uint32 value); + + // optional uint32 max_size = 3; + inline bool has_max_size() const; + inline void clear_max_size(); + static const int kMaxSizeFieldNumber = 3; + inline ::google::protobuf::uint32 max_size() const; + inline void set_max_size(::google::protobuf::uint32 value); + + // @@protoc_insertion_point(class_scope:bgs.protocol.presence.v1.RichPresenceParty) + private: + inline void set_has_id(); + inline void clear_has_id(); + inline void set_has_current_size(); + inline void clear_has_current_size(); + inline void set_has_max_size(); + inline void clear_has_max_size(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* id_; + ::google::protobuf::uint32 current_size_; + ::google::protobuf::uint32 max_size_; + friend void TC_PROTO_API protobuf_AddDesc_presence_5ftypes_2eproto(); + friend void protobuf_AssignDesc_presence_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_presence_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static RichPresenceParty* default_instance_; +}; +// ------------------------------------------------------------------- + +class TC_PROTO_API RichPresenceDetails : public ::google::protobuf::Message { + public: + RichPresenceDetails(); + virtual ~RichPresenceDetails(); + + RichPresenceDetails(const RichPresenceDetails& from); + + inline RichPresenceDetails& operator=(const RichPresenceDetails& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const RichPresenceDetails& default_instance(); + + void Swap(RichPresenceDetails* other); + + // implements Message ---------------------------------------------- + + RichPresenceDetails* New() const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional .bgs.protocol.presence.v1.LocalizedStringMap state = 1; + inline bool has_state() const; + inline void clear_state(); + static const int kStateFieldNumber = 1; + inline const ::bgs::protocol::presence::v1::LocalizedStringMap& state() const; + inline ::bgs::protocol::presence::v1::LocalizedStringMap* mutable_state(); + inline ::bgs::protocol::presence::v1::LocalizedStringMap* release_state(); + inline void set_allocated_state(::bgs::protocol::presence::v1::LocalizedStringMap* state); + + // optional .bgs.protocol.presence.v1.RichPresenceParty party = 2; + inline bool has_party() const; + inline void clear_party(); + static const int kPartyFieldNumber = 2; + inline const ::bgs::protocol::presence::v1::RichPresenceParty& party() const; + inline ::bgs::protocol::presence::v1::RichPresenceParty* mutable_party(); + inline ::bgs::protocol::presence::v1::RichPresenceParty* release_party(); + inline void set_allocated_party(::bgs::protocol::presence::v1::RichPresenceParty* party); + + // optional string large_image_url = 3; + inline bool has_large_image_url() const; + inline void clear_large_image_url(); + static const int kLargeImageUrlFieldNumber = 3; + inline const ::std::string& large_image_url() const; + inline void set_large_image_url(const ::std::string& value); + inline void set_large_image_url(const char* value); + inline void set_large_image_url(const char* value, size_t size); + inline ::std::string* mutable_large_image_url(); + inline ::std::string* release_large_image_url(); + inline void set_allocated_large_image_url(::std::string* large_image_url); + + // optional string small_image_url = 4; + inline bool has_small_image_url() const; + inline void clear_small_image_url(); + static const int kSmallImageUrlFieldNumber = 4; + inline const ::std::string& small_image_url() const; + inline void set_small_image_url(const ::std::string& value); + inline void set_small_image_url(const char* value); + inline void set_small_image_url(const char* value, size_t size); + inline ::std::string* mutable_small_image_url(); + inline ::std::string* release_small_image_url(); + inline void set_allocated_small_image_url(::std::string* small_image_url); + + // @@protoc_insertion_point(class_scope:bgs.protocol.presence.v1.RichPresenceDetails) + private: + inline void set_has_state(); + inline void clear_has_state(); + inline void set_has_party(); + inline void clear_has_party(); + inline void set_has_large_image_url(); + inline void clear_has_large_image_url(); + inline void set_has_small_image_url(); + inline void clear_has_small_image_url(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::bgs::protocol::presence::v1::LocalizedStringMap* state_; + ::bgs::protocol::presence::v1::RichPresenceParty* party_; + ::std::string* large_image_url_; + ::std::string* small_image_url_; + friend void TC_PROTO_API protobuf_AddDesc_presence_5ftypes_2eproto(); + friend void protobuf_AssignDesc_presence_5ftypes_2eproto(); + friend void protobuf_ShutdownFile_presence_5ftypes_2eproto(); + + void InitAsDefaultInstance(); + static RichPresenceDetails* default_instance_; +}; // =================================================================== // =================================================================== @@ -1117,6 +1493,638 @@ inline void ChannelState::set_healing(bool value) { // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.ChannelState.healing) } +// ------------------------------------------------------------------- + +// LocalizedStringMapEntry + +// optional string locale = 1; +inline bool LocalizedStringMapEntry::has_locale() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void LocalizedStringMapEntry::set_has_locale() { + _has_bits_[0] |= 0x00000001u; +} +inline void LocalizedStringMapEntry::clear_has_locale() { + _has_bits_[0] &= ~0x00000001u; +} +inline void LocalizedStringMapEntry::clear_locale() { + if (locale_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_->clear(); + } + clear_has_locale(); +} +inline const ::std::string& LocalizedStringMapEntry::locale() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.LocalizedStringMapEntry.locale) + return *locale_; +} +inline void LocalizedStringMapEntry::set_locale(const ::std::string& value) { + set_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_ = new ::std::string; + } + locale_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.LocalizedStringMapEntry.locale) +} +inline void LocalizedStringMapEntry::set_locale(const char* value) { + set_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_ = new ::std::string; + } + locale_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v1.LocalizedStringMapEntry.locale) +} +inline void LocalizedStringMapEntry::set_locale(const char* value, size_t size) { + set_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_ = new ::std::string; + } + locale_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v1.LocalizedStringMapEntry.locale) +} +inline ::std::string* LocalizedStringMapEntry::mutable_locale() { + set_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + locale_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.LocalizedStringMapEntry.locale) + return locale_; +} +inline ::std::string* LocalizedStringMapEntry::release_locale() { + clear_has_locale(); + if (locale_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = locale_; + locale_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void LocalizedStringMapEntry::set_allocated_locale(::std::string* locale) { + if (locale_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete locale_; + } + if (locale) { + set_has_locale(); + locale_ = locale; + } else { + clear_has_locale(); + locale_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v1.LocalizedStringMapEntry.locale) +} + +// optional string value = 2; +inline bool LocalizedStringMapEntry::has_value() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void LocalizedStringMapEntry::set_has_value() { + _has_bits_[0] |= 0x00000002u; +} +inline void LocalizedStringMapEntry::clear_has_value() { + _has_bits_[0] &= ~0x00000002u; +} +inline void LocalizedStringMapEntry::clear_value() { + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_->clear(); + } + clear_has_value(); +} +inline const ::std::string& LocalizedStringMapEntry::value() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.LocalizedStringMapEntry.value) + return *value_; +} +inline void LocalizedStringMapEntry::set_value(const ::std::string& value) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.LocalizedStringMapEntry.value) +} +inline void LocalizedStringMapEntry::set_value(const char* value) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v1.LocalizedStringMapEntry.value) +} +inline void LocalizedStringMapEntry::set_value(const char* value, size_t size) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v1.LocalizedStringMapEntry.value) +} +inline ::std::string* LocalizedStringMapEntry::mutable_value() { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.LocalizedStringMapEntry.value) + return value_; +} +inline ::std::string* LocalizedStringMapEntry::release_value() { + clear_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = value_; + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void LocalizedStringMapEntry::set_allocated_value(::std::string* value) { + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete value_; + } + if (value) { + set_has_value(); + value_ = value; + } else { + clear_has_value(); + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v1.LocalizedStringMapEntry.value) +} + +// ------------------------------------------------------------------- + +// LocalizedStringMap + +// optional string default_string = 1; +inline bool LocalizedStringMap::has_default_string() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void LocalizedStringMap::set_has_default_string() { + _has_bits_[0] |= 0x00000001u; +} +inline void LocalizedStringMap::clear_has_default_string() { + _has_bits_[0] &= ~0x00000001u; +} +inline void LocalizedStringMap::clear_default_string() { + if (default_string_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_->clear(); + } + clear_has_default_string(); +} +inline const ::std::string& LocalizedStringMap::default_string() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.LocalizedStringMap.default_string) + return *default_string_; +} +inline void LocalizedStringMap::set_default_string(const ::std::string& value) { + set_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_ = new ::std::string; + } + default_string_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.LocalizedStringMap.default_string) +} +inline void LocalizedStringMap::set_default_string(const char* value) { + set_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_ = new ::std::string; + } + default_string_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v1.LocalizedStringMap.default_string) +} +inline void LocalizedStringMap::set_default_string(const char* value, size_t size) { + set_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_ = new ::std::string; + } + default_string_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v1.LocalizedStringMap.default_string) +} +inline ::std::string* LocalizedStringMap::mutable_default_string() { + set_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + default_string_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.LocalizedStringMap.default_string) + return default_string_; +} +inline ::std::string* LocalizedStringMap::release_default_string() { + clear_has_default_string(); + if (default_string_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = default_string_; + default_string_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void LocalizedStringMap::set_allocated_default_string(::std::string* default_string) { + if (default_string_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete default_string_; + } + if (default_string) { + set_has_default_string(); + default_string_ = default_string; + } else { + clear_has_default_string(); + default_string_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v1.LocalizedStringMap.default_string) +} + +// repeated .bgs.protocol.presence.v1.LocalizedStringMapEntry localized_entry = 2; +inline int LocalizedStringMap::localized_entry_size() const { + return localized_entry_.size(); +} +inline void LocalizedStringMap::clear_localized_entry() { + localized_entry_.Clear(); +} +inline const ::bgs::protocol::presence::v1::LocalizedStringMapEntry& LocalizedStringMap::localized_entry(int index) const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.LocalizedStringMap.localized_entry) + return localized_entry_.Get(index); +} +inline ::bgs::protocol::presence::v1::LocalizedStringMapEntry* LocalizedStringMap::mutable_localized_entry(int index) { + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.LocalizedStringMap.localized_entry) + return localized_entry_.Mutable(index); +} +inline ::bgs::protocol::presence::v1::LocalizedStringMapEntry* LocalizedStringMap::add_localized_entry() { + // @@protoc_insertion_point(field_add:bgs.protocol.presence.v1.LocalizedStringMap.localized_entry) + return localized_entry_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v1::LocalizedStringMapEntry >& +LocalizedStringMap::localized_entry() const { + // @@protoc_insertion_point(field_list:bgs.protocol.presence.v1.LocalizedStringMap.localized_entry) + return localized_entry_; +} +inline ::google::protobuf::RepeatedPtrField< ::bgs::protocol::presence::v1::LocalizedStringMapEntry >* +LocalizedStringMap::mutable_localized_entry() { + // @@protoc_insertion_point(field_mutable_list:bgs.protocol.presence.v1.LocalizedStringMap.localized_entry) + return &localized_entry_; +} + +// ------------------------------------------------------------------- + +// RichPresenceParty + +// optional string id = 1; +inline bool RichPresenceParty::has_id() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void RichPresenceParty::set_has_id() { + _has_bits_[0] |= 0x00000001u; +} +inline void RichPresenceParty::clear_has_id() { + _has_bits_[0] &= ~0x00000001u; +} +inline void RichPresenceParty::clear_id() { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_->clear(); + } + clear_has_id(); +} +inline const ::std::string& RichPresenceParty::id() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.RichPresenceParty.id) + return *id_; +} +inline void RichPresenceParty::set_id(const ::std::string& value) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.RichPresenceParty.id) +} +inline void RichPresenceParty::set_id(const char* value) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v1.RichPresenceParty.id) +} +inline void RichPresenceParty::set_id(const char* value, size_t size) { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + id_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v1.RichPresenceParty.id) +} +inline ::std::string* RichPresenceParty::mutable_id() { + set_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + id_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.RichPresenceParty.id) + return id_; +} +inline ::std::string* RichPresenceParty::release_id() { + clear_has_id(); + if (id_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = id_; + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void RichPresenceParty::set_allocated_id(::std::string* id) { + if (id_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete id_; + } + if (id) { + set_has_id(); + id_ = id; + } else { + clear_has_id(); + id_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v1.RichPresenceParty.id) +} + +// optional uint32 current_size = 2; +inline bool RichPresenceParty::has_current_size() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void RichPresenceParty::set_has_current_size() { + _has_bits_[0] |= 0x00000002u; +} +inline void RichPresenceParty::clear_has_current_size() { + _has_bits_[0] &= ~0x00000002u; +} +inline void RichPresenceParty::clear_current_size() { + current_size_ = 0u; + clear_has_current_size(); +} +inline ::google::protobuf::uint32 RichPresenceParty::current_size() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.RichPresenceParty.current_size) + return current_size_; +} +inline void RichPresenceParty::set_current_size(::google::protobuf::uint32 value) { + set_has_current_size(); + current_size_ = value; + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.RichPresenceParty.current_size) +} + +// optional uint32 max_size = 3; +inline bool RichPresenceParty::has_max_size() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void RichPresenceParty::set_has_max_size() { + _has_bits_[0] |= 0x00000004u; +} +inline void RichPresenceParty::clear_has_max_size() { + _has_bits_[0] &= ~0x00000004u; +} +inline void RichPresenceParty::clear_max_size() { + max_size_ = 0u; + clear_has_max_size(); +} +inline ::google::protobuf::uint32 RichPresenceParty::max_size() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.RichPresenceParty.max_size) + return max_size_; +} +inline void RichPresenceParty::set_max_size(::google::protobuf::uint32 value) { + set_has_max_size(); + max_size_ = value; + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.RichPresenceParty.max_size) +} + +// ------------------------------------------------------------------- + +// RichPresenceDetails + +// optional .bgs.protocol.presence.v1.LocalizedStringMap state = 1; +inline bool RichPresenceDetails::has_state() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void RichPresenceDetails::set_has_state() { + _has_bits_[0] |= 0x00000001u; +} +inline void RichPresenceDetails::clear_has_state() { + _has_bits_[0] &= ~0x00000001u; +} +inline void RichPresenceDetails::clear_state() { + if (state_ != NULL) state_->::bgs::protocol::presence::v1::LocalizedStringMap::Clear(); + clear_has_state(); +} +inline const ::bgs::protocol::presence::v1::LocalizedStringMap& RichPresenceDetails::state() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.RichPresenceDetails.state) + return state_ != NULL ? *state_ : *default_instance_->state_; +} +inline ::bgs::protocol::presence::v1::LocalizedStringMap* RichPresenceDetails::mutable_state() { + set_has_state(); + if (state_ == NULL) state_ = new ::bgs::protocol::presence::v1::LocalizedStringMap; + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.RichPresenceDetails.state) + return state_; +} +inline ::bgs::protocol::presence::v1::LocalizedStringMap* RichPresenceDetails::release_state() { + clear_has_state(); + ::bgs::protocol::presence::v1::LocalizedStringMap* temp = state_; + state_ = NULL; + return temp; +} +inline void RichPresenceDetails::set_allocated_state(::bgs::protocol::presence::v1::LocalizedStringMap* state) { + delete state_; + state_ = state; + if (state) { + set_has_state(); + } else { + clear_has_state(); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v1.RichPresenceDetails.state) +} + +// optional .bgs.protocol.presence.v1.RichPresenceParty party = 2; +inline bool RichPresenceDetails::has_party() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void RichPresenceDetails::set_has_party() { + _has_bits_[0] |= 0x00000002u; +} +inline void RichPresenceDetails::clear_has_party() { + _has_bits_[0] &= ~0x00000002u; +} +inline void RichPresenceDetails::clear_party() { + if (party_ != NULL) party_->::bgs::protocol::presence::v1::RichPresenceParty::Clear(); + clear_has_party(); +} +inline const ::bgs::protocol::presence::v1::RichPresenceParty& RichPresenceDetails::party() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.RichPresenceDetails.party) + return party_ != NULL ? *party_ : *default_instance_->party_; +} +inline ::bgs::protocol::presence::v1::RichPresenceParty* RichPresenceDetails::mutable_party() { + set_has_party(); + if (party_ == NULL) party_ = new ::bgs::protocol::presence::v1::RichPresenceParty; + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.RichPresenceDetails.party) + return party_; +} +inline ::bgs::protocol::presence::v1::RichPresenceParty* RichPresenceDetails::release_party() { + clear_has_party(); + ::bgs::protocol::presence::v1::RichPresenceParty* temp = party_; + party_ = NULL; + return temp; +} +inline void RichPresenceDetails::set_allocated_party(::bgs::protocol::presence::v1::RichPresenceParty* party) { + delete party_; + party_ = party; + if (party) { + set_has_party(); + } else { + clear_has_party(); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v1.RichPresenceDetails.party) +} + +// optional string large_image_url = 3; +inline bool RichPresenceDetails::has_large_image_url() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void RichPresenceDetails::set_has_large_image_url() { + _has_bits_[0] |= 0x00000004u; +} +inline void RichPresenceDetails::clear_has_large_image_url() { + _has_bits_[0] &= ~0x00000004u; +} +inline void RichPresenceDetails::clear_large_image_url() { + if (large_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_->clear(); + } + clear_has_large_image_url(); +} +inline const ::std::string& RichPresenceDetails::large_image_url() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.RichPresenceDetails.large_image_url) + return *large_image_url_; +} +inline void RichPresenceDetails::set_large_image_url(const ::std::string& value) { + set_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_ = new ::std::string; + } + large_image_url_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.RichPresenceDetails.large_image_url) +} +inline void RichPresenceDetails::set_large_image_url(const char* value) { + set_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_ = new ::std::string; + } + large_image_url_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v1.RichPresenceDetails.large_image_url) +} +inline void RichPresenceDetails::set_large_image_url(const char* value, size_t size) { + set_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_ = new ::std::string; + } + large_image_url_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v1.RichPresenceDetails.large_image_url) +} +inline ::std::string* RichPresenceDetails::mutable_large_image_url() { + set_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + large_image_url_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.RichPresenceDetails.large_image_url) + return large_image_url_; +} +inline ::std::string* RichPresenceDetails::release_large_image_url() { + clear_has_large_image_url(); + if (large_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = large_image_url_; + large_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void RichPresenceDetails::set_allocated_large_image_url(::std::string* large_image_url) { + if (large_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete large_image_url_; + } + if (large_image_url) { + set_has_large_image_url(); + large_image_url_ = large_image_url; + } else { + clear_has_large_image_url(); + large_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v1.RichPresenceDetails.large_image_url) +} + +// optional string small_image_url = 4; +inline bool RichPresenceDetails::has_small_image_url() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void RichPresenceDetails::set_has_small_image_url() { + _has_bits_[0] |= 0x00000008u; +} +inline void RichPresenceDetails::clear_has_small_image_url() { + _has_bits_[0] &= ~0x00000008u; +} +inline void RichPresenceDetails::clear_small_image_url() { + if (small_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_->clear(); + } + clear_has_small_image_url(); +} +inline const ::std::string& RichPresenceDetails::small_image_url() const { + // @@protoc_insertion_point(field_get:bgs.protocol.presence.v1.RichPresenceDetails.small_image_url) + return *small_image_url_; +} +inline void RichPresenceDetails::set_small_image_url(const ::std::string& value) { + set_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_ = new ::std::string; + } + small_image_url_->assign(value); + // @@protoc_insertion_point(field_set:bgs.protocol.presence.v1.RichPresenceDetails.small_image_url) +} +inline void RichPresenceDetails::set_small_image_url(const char* value) { + set_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_ = new ::std::string; + } + small_image_url_->assign(value); + // @@protoc_insertion_point(field_set_char:bgs.protocol.presence.v1.RichPresenceDetails.small_image_url) +} +inline void RichPresenceDetails::set_small_image_url(const char* value, size_t size) { + set_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_ = new ::std::string; + } + small_image_url_->assign(reinterpret_cast<const char*>(value), size); + // @@protoc_insertion_point(field_set_pointer:bgs.protocol.presence.v1.RichPresenceDetails.small_image_url) +} +inline ::std::string* RichPresenceDetails::mutable_small_image_url() { + set_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + small_image_url_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:bgs.protocol.presence.v1.RichPresenceDetails.small_image_url) + return small_image_url_; +} +inline ::std::string* RichPresenceDetails::release_small_image_url() { + clear_has_small_image_url(); + if (small_image_url_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = small_image_url_; + small_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void RichPresenceDetails::set_allocated_small_image_url(::std::string* small_image_url) { + if (small_image_url_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete small_image_url_; + } + if (small_image_url) { + set_has_small_image_url(); + small_image_url_ = small_image_url; + } else { + clear_has_small_image_url(); + small_image_url_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:bgs.protocol.presence.v1.RichPresenceDetails.small_image_url) +} + // @@protoc_insertion_point(namespace_scope) } // namespace v1 diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h index 5fdd42041f0..2b46538b42a 100644 --- a/src/tools/map_extractor/loadlib/DBFilesClientList.h +++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h @@ -138,6 +138,7 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 2031611, .Name = "CampaignXCondition.db2" }, { .FileDataId = 2036722, .Name = "CampaignXQuestLine.db2" }, { .FileDataId = 1283018, .Name = "CastableRaidBuffs.db2" }, + { .FileDataId = 7388251, .Name = "CatalogShopGameTitleInfo.db2" }, { .FileDataId = 1592470, .Name = "CelestialBody.db2" }, { .FileDataId = 1068162, .Name = "Cfg_Categories.db2" }, { .FileDataId = 1080949, .Name = "Cfg_Configs.db2" }, @@ -445,6 +446,7 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 6905813, .Name = "HolidayXTimeEvent.db2" }, { .FileDataId = 996357, .Name = "Holidays.db2" }, { .FileDataId = 1995523, .Name = "Hotfixes.db2" }, + { .FileDataId = 5149691, .Name = "HouseDecor.db2" }, { .FileDataId = 1121229, .Name = "ImportPriceArmor.db2" }, { .FileDataId = 1121228, .Name = "ImportPriceQuality.db2" }, { .FileDataId = 1121227, .Name = "ImportPriceShield.db2" }, @@ -476,6 +478,8 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1405665, .Name = "ItemContextPickerEntry.db2" }, { .FileDataId = 4337196, .Name = "ItemConversion.db2" }, { .FileDataId = 4337197, .Name = "ItemConversionEntry.db2" }, + { .FileDataId = 7152830, .Name = "ItemCreationContext.db2" }, + { .FileDataId = 7152831, .Name = "ItemCreationContextGroup.db2" }, { .FileDataId = 801670, .Name = "ItemCurrencyCost.db2" }, { .FileDataId = 3755770, .Name = "ItemCurrencyValue.db2" }, { .FileDataId = 1277740, .Name = "ItemDamageAmmo.db2" }, @@ -496,6 +500,7 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1588911, .Name = "ItemLevelSelector.db2" }, { .FileDataId = 1624937, .Name = "ItemLevelSelectorQuality.db2" }, { .FileDataId = 1624933, .Name = "ItemLevelSelectorQualitySet.db2" }, + { .FileDataId = 6914796, .Name = "ItemLevelWatermark.db2" }, { .FileDataId = 1237440, .Name = "ItemLimitCategory.db2" }, { .FileDataId = 1378590, .Name = "ItemLimitCategoryCondition.db2" }, { .FileDataId = 4677533, .Name = "ItemLogicalCost.db2" }, @@ -504,6 +509,7 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1278399, .Name = "ItemModifiedAppearanceExtra.db2" }, { .FileDataId = 1332559, .Name = "ItemNameDescription.db2" }, { .FileDataId = 3723474, .Name = "ItemNameSlotOverride.db2" }, + { .FileDataId = 7322704, .Name = "ItemOffsetCurve.db2" }, { .FileDataId = 1302240, .Name = "ItemPetFood.db2" }, { .FileDataId = 1121231, .Name = "ItemPriceBase.db2" }, { .FileDataId = 1270315, .Name = "ItemRangedDisplayInfo.db2" }, @@ -511,18 +517,21 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 5633983, .Name = "ItemReforge.db2" }, { .FileDataId = 4548446, .Name = "ItemSalvage.db2" }, { .FileDataId = 4549058, .Name = "ItemSalvageLoot.db2" }, + { .FileDataId = 7322705, .Name = "ItemScalingConfig.db2" }, { .FileDataId = 1273408, .Name = "ItemSearchName.db2" }, { .FileDataId = 1343609, .Name = "ItemSet.db2" }, { .FileDataId = 1314689, .Name = "ItemSetSpell.db2" }, { .FileDataId = 1572924, .Name = "ItemSparse.db2" }, { .FileDataId = 1135120, .Name = "ItemSpec.db2" }, { .FileDataId = 1134576, .Name = "ItemSpecOverride.db2" }, + { .FileDataId = 7322706, .Name = "ItemSquishEra.db2" }, { .FileDataId = 1261604, .Name = "ItemSubClass.db2" }, { .FileDataId = 1302852, .Name = "ItemSubClassMask.db2" }, { .FileDataId = 1343605, .Name = "ItemVisuals.db2" }, { .FileDataId = 3043873, .Name = "ItemVisualsXEffect.db2" }, { .FileDataId = 987133, .Name = "ItemXBonusTree.db2" }, { .FileDataId = 3177687, .Name = "ItemXItemEffect.db2" }, + { .FileDataId = 7001629, .Name = "ItemXTraitSystem.db2" }, { .FileDataId = 1240336, .Name = "JournalEncounter.db2" }, { .FileDataId = 1301155, .Name = "JournalEncounterCreature.db2" }, { .FileDataId = 1344467, .Name = "JournalEncounterItem.db2" }, @@ -594,7 +603,6 @@ constexpr DB2FileInfo DBFilesClientList[] = { .FileDataId = 1465904, .Name = "ModelAnimCloakDampening.db2" }, { .FileDataId = 1337833, .Name = "ModelFileData.db2" }, { .FileDataId = 1399953, .Name = "ModelRibbonQuality.db2" }, - { .FileDataId = 5393274, .Name = "ModelSoundAnimEntry.db2" }, { .FileDataId = 5682517, .Name = "ModelSoundSettings.db2" }, { .FileDataId = 5393277, .Name = "ModelSoundTagEntry.db2" }, { .FileDataId = 3386486, .Name = "ModifiedCraftingCategory.db2" }, |
