aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/bnetserver/Server/Session.cpp18
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp12
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.cpp56
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.h12
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp48
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp10
-rw-r--r--src/server/game/DataStores/DB2LoadInfo.h137
-rw-r--r--src/server/game/DataStores/DB2Metadata.h427
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp10
-rw-r--r--src/server/game/DataStores/DB2Stores.h4
-rw-r--r--src/server/game/DataStores/DB2Structure.h73
-rw-r--r--src/server/game/DataStores/DBCEnums.h44
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp3
-rw-r--r--src/server/game/Entities/Item/Item.cpp69
-rw-r--r--src/server/game/Entities/Item/Item.h3
-rw-r--r--src/server/game/Entities/Item/ItemBonusMgr.cpp19
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h2
-rw-r--r--src/server/game/Entities/Object/Object.h13
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.cpp63
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.h224
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFieldImpl.h129
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp311
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h208
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateMask.h8
-rw-r--r--src/server/game/Entities/Player/Player.cpp245
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
-rw-r--r--src/server/game/Entities/Unit/Unit.h4
-rw-r--r--src/server/game/Guilds/Guild.cpp6
-rw-r--r--src/server/game/Guilds/Guild.h6
-rw-r--r--src/server/game/Handlers/AuthHandler.cpp14
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp10
-rw-r--r--src/server/game/Handlers/TraitHandler.cpp10
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h1164
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.h8
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp38
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h11
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h10
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h2
-rw-r--r--src/server/game/Server/Packets/LFGPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/LFGPackets.h2
-rw-r--r--src/server/game/Server/Packets/MailPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/MailPackets.h2
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp31
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h10
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h3
-rw-r--r--src/server/game/Server/Packets/PetPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/PetPackets.h6
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/PetitionPackets.h2
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h10
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp40
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h9
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp28
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h28
-rw-r--r--src/server/game/Server/Packets/TalentPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/TalentPackets.h1
-rw-r--r--src/server/game/Server/Packets/TokenPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/TokenPackets.h2
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.cpp4
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.h1
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp13
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h939
-rw-r--r--src/server/game/Server/WorldSession.h13
-rw-r--r--src/server/game/Services/ClubService.cpp3
-rw-r--r--src/server/game/Spells/Auras/SpellAuras.cpp3
-rw-r--r--src/server/game/Spells/SpellEffects.cpp25
-rw-r--r--src/server/game/Spells/TraitMgr.cpp6
-rw-r--r--src/server/game/Spells/TraitMgr.h3
-rw-r--r--src/server/game/Support/SupportMgr.h4
-rw-r--r--src/server/proto/Client/api/client/v2/presence_types.pb.cc505
-rw-r--r--src/server/proto/Client/api/client/v2/presence_types.pb.h1008
-rw-r--r--src/server/proto/Client/api/common/v1/message_types.pb.cc171
-rw-r--r--src/server/proto/Client/api/common/v1/message_types.pb.h529
-rw-r--r--src/server/proto/Client/presence_types.pb.cc489
-rw-r--r--src/server/proto/Client/presence_types.pb.h1008
-rw-r--r--src/tools/map_extractor/loadlib/DBFilesClientList.h10
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" },