aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/auth_database.sql12
-rw-r--r--sql/base/characters_database.sql8
-rw-r--r--sql/updates/auth/master/2023_11_09_00_auth.sql9
-rw-r--r--sql/updates/characters/master/2023_11_09_00_characters.sql6
-rw-r--r--sql/updates/hotfixes/master/2023_11_09_00_hotfixes.sql57
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp41
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.cpp22
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.h4
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp45
-rw-r--r--src/server/game/DataStores/DB2LoadInfo.h51
-rw-r--r--src/server/game/DataStores/DB2Metadata.h220
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp2
-rw-r--r--src/server/game/DataStores/DB2Stores.h1
-rw-r--r--src/server/game/DataStores/DB2Structure.h27
-rw-r--r--src/server/game/DataStores/DBCEnums.h18
-rw-r--r--src/server/game/Entities/Conversation/Conversation.cpp7
-rw-r--r--src/server/game/Entities/Creature/GossipDef.h3
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp441
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h206
-rw-r--r--src/server/game/Entities/Player/Player.cpp46
-rw-r--r--src/server/game/Entities/Player/Player.h5
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp28
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h11
-rw-r--r--src/server/game/Guilds/Guild.cpp9
-rw-r--r--src/server/game/Guilds/Guild.h6
-rw-r--r--src/server/game/Handlers/BattleGroundHandler.cpp11
-rw-r--r--src/server/game/Handlers/CalendarHandler.cpp17
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp35
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp33
-rw-r--r--src/server/game/Instances/InstanceScript.h2
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h574
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.h10
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.cpp12
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.h1
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp58
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h51
-rw-r--r--src/server/game/Server/Packets/ChatPackets.h2
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h3
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h1
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h11
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h2
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.h2
-rw-r--r--src/server/game/Server/Packets/SocialPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp24
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h16
-rw-r--r--src/server/game/Server/Packets/WhoPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/WhoPackets.h2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp7
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h1143
-rw-r--r--src/server/game/Server/WorldSession.h8
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h1
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp1
-rw-r--r--src/server/game/World/World.cpp8
-rw-r--r--src/server/game/World/World.h2
-rw-r--r--src/tools/map_extractor/loadlib/DBFilesClientList.h9
61 files changed, 2014 insertions, 1342 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql
index 099b7ef9f2f..29a63dd858e 100644
--- a/sql/base/auth_database.sql
+++ b/sql/base/auth_database.sql
@@ -738,7 +738,10 @@ INSERT INTO `build_info` VALUES
(51536,10,1,7,NULL,NULL,'570EEA10A8EC169C3FF9621D1B635BB4',NULL,NULL,NULL),
(51754,10,1,7,NULL,NULL,'BED5A861C071AB41FEF6087E0C37BB1A',NULL,NULL,NULL),
(51886,10,1,7,NULL,NULL,'09CF8919FD2EABDEAEBC0C810F53B511',NULL,NULL,NULL),
-(51972,10,1,7,NULL,NULL,'444DC7EF3544B6670C18884DADA00428',NULL,NULL,NULL);
+(51972,10,1,7,NULL,NULL,'444DC7EF3544B6670C18884DADA00428',NULL,NULL,NULL),
+(52038,10,2,0,NULL,NULL,'A8EF004ADED8A3AFF5A67D2BB8D95795',NULL,NULL,NULL),
+(52068,10,2,0,NULL,NULL,'A44F842BACCC7EE8E2975FAF01F12474',NULL,NULL,NULL),
+(52095,10,2,0,NULL,NULL,'BA36382887D16D274EA9149695F0C9C8',NULL,NULL,NULL);
/*!40000 ALTER TABLE `build_info` ENABLE KEYS */;
UNLOCK TABLES;
@@ -2346,7 +2349,7 @@ CREATE TABLE `realmlist` (
`timezone` tinyint unsigned NOT NULL DEFAULT '0',
`allowedSecurityLevel` tinyint unsigned NOT NULL DEFAULT '0',
`population` float unsigned NOT NULL DEFAULT '0',
- `gamebuild` int unsigned NOT NULL DEFAULT '51972',
+ `gamebuild` int unsigned NOT NULL DEFAULT '52095',
`Region` tinyint unsigned NOT NULL DEFAULT '1',
`Battlegroup` tinyint unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
@@ -2361,7 +2364,7 @@ CREATE TABLE `realmlist` (
LOCK TABLES `realmlist` WRITE;
/*!40000 ALTER TABLE `realmlist` DISABLE KEYS */;
INSERT INTO `realmlist` VALUES
-(1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,51972,1,1);
+(1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,52095,1,1);
/*!40000 ALTER TABLE `realmlist` ENABLE KEYS */;
UNLOCK TABLES;
@@ -2747,7 +2750,8 @@ INSERT INTO `updates` VALUES
('2023_10_06_00_auth.sql','3480687DEEB3E12ECC9632809A518425F9FA0FCC','ARCHIVED','2023-10-06 00:40:46',0),
('2023_10_17_00_auth.sql','EE4C430E9535EC3466E4D2FABA7F009F87AF18BD','RELEASED','2023-10-17 21:07:51',0),
('2023_10_25_00_auth.sql','86B16D5D78A8ED31FDD8553D223CF56F013B00DB','RELEASED','2023-10-25 00:06:14',0),
-('2023_11_01_00_auth.sql','4EA6010E9035AFC80326FE56C642C7918254F2BE','RELEASED','2023-11-01 10:47:18',0);
+('2023_11_01_00_auth.sql','4EA6010E9035AFC80326FE56C642C7918254F2BE','RELEASED','2023-11-01 10:47:18',0),
+('2023_11_09_00_auth.sql','C8A9223E6868593904634193ACBD421F40078FE5','RELEASED','2023-11-09 00:53:45',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 648880371e3..4301dc48420 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -1961,6 +1961,11 @@ CREATE TABLE `characters` (
`honorRestState` tinyint unsigned NOT NULL DEFAULT '2',
`honorRestBonus` float NOT NULL DEFAULT '0',
`lastLoginBuild` int unsigned NOT NULL DEFAULT '0',
+ `personalTabardEmblemStyle` int NOT NULL DEFAULT '-1',
+ `personalTabardEmblemColor` int NOT NULL DEFAULT '-1',
+ `personalTabardBorderStyle` int NOT NULL DEFAULT '-1',
+ `personalTabardBorderColor` int NOT NULL DEFAULT '-1',
+ `personalTabardBackgroundColor` int NOT NULL DEFAULT '-1',
PRIMARY KEY (`guid`),
KEY `idx_account` (`account`),
KEY `idx_online` (`online`),
@@ -3716,7 +3721,8 @@ INSERT INTO `updates` VALUES
('2023_09_14_00_characters.sql','DAC56929C724C2971A4476400F2439CBDFAF3C5C','ARCHIVED','2023-09-13 22:20:22',0),
('2023_09_30_00_characters.sql','4326C642870633873F163085D278DB9B7449D9C3','ARCHIVED','2023-09-30 16:34:19',0),
('2023_10_06_00_characters.sql','FFAFF1F0916BB9DC58345466E0BB1A15A4611836','ARCHIVED','2023-10-06 00:40:46',0),
-('2023_11_02_00_characters.sql','1A76A843F204901C8598DA5682029E815477E427','RELEASED','2023-11-02 18:59:41',0);
+('2023_11_02_00_characters.sql','1A76A843F204901C8598DA5682029E815477E427','RELEASED','2023-11-02 18:59:41',0),
+('2023_11_09_00_characters.sql','1A3D7CA6890353DA55793FE8D925CC8C54965A69','RELEASED','2023-11-09 00:56:31',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/auth/master/2023_11_09_00_auth.sql b/sql/updates/auth/master/2023_11_09_00_auth.sql
new file mode 100644
index 00000000000..ca462a6d2e2
--- /dev/null
+++ b/sql/updates/auth/master/2023_11_09_00_auth.sql
@@ -0,0 +1,9 @@
+DELETE FROM `build_info` WHERE `build` IN (52038,52068,52095);
+INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`,`winAuthSeed`,`win64AuthSeed`,`mac64AuthSeed`,`winChecksumSeed`,`macChecksumSeed`) VALUES
+(52038,10,2,0,NULL,NULL,'A8EF004ADED8A3AFF5A67D2BB8D95795',NULL,NULL,NULL),
+(52068,10,2,0,NULL,NULL,'A44F842BACCC7EE8E2975FAF01F12474',NULL,NULL,NULL),
+(52095,10,2,0,NULL,NULL,'BA36382887D16D274EA9149695F0C9C8',NULL,NULL,NULL);
+
+UPDATE `realmlist` SET `gamebuild`=52095 WHERE `gamebuild`=51972;
+
+ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '52095';
diff --git a/sql/updates/characters/master/2023_11_09_00_characters.sql b/sql/updates/characters/master/2023_11_09_00_characters.sql
new file mode 100644
index 00000000000..dec6bfc0432
--- /dev/null
+++ b/sql/updates/characters/master/2023_11_09_00_characters.sql
@@ -0,0 +1,6 @@
+ALTER TABLE `characters`
+ ADD `personalTabardEmblemStyle` int NOT NULL DEFAULT -1 AFTER `lastLoginBuild`,
+ ADD `personalTabardEmblemColor` int NOT NULL DEFAULT -1 AFTER `personalTabardEmblemStyle`,
+ ADD `personalTabardBorderStyle` int NOT NULL DEFAULT -1 AFTER `personalTabardEmblemColor`,
+ ADD `personalTabardBorderColor` int NOT NULL DEFAULT -1 AFTER `personalTabardBorderStyle`,
+ ADD `personalTabardBackgroundColor` int NOT NULL DEFAULT -1 AFTER `personalTabardBorderColor`;
diff --git a/sql/updates/hotfixes/master/2023_11_09_00_hotfixes.sql b/sql/updates/hotfixes/master/2023_11_09_00_hotfixes.sql
new file mode 100644
index 00000000000..457783c0295
--- /dev/null
+++ b/sql/updates/hotfixes/master/2023_11_09_00_hotfixes.sql
@@ -0,0 +1,57 @@
+ALTER TABLE `area_trigger` MODIFY `PhaseUseFlags` int NOT NULL DEFAULT 0 AFTER `ContinentID`;
+
+ALTER TABLE `chr_customization_display_info` ADD `BarberShopCameraZoomOffset` float NOT NULL DEFAULT 0 AFTER `BarberShopHeightOffset`;
+
+ALTER TABLE `chr_customization_element` ADD `ChrCustGeoComponentLinkID` int NOT NULL DEFAULT 0 AFTER `ParticleColorID`;
+
+ALTER TABLE `conversation_line` ADD `Unused1020` int unsigned NOT NULL DEFAULT 0 AFTER `BroadcastTextID`;
+
+ALTER TABLE `curve_point` MODIFY `CurveID` int unsigned NOT NULL DEFAULT 0 AFTER `ID`;
+
+ALTER TABLE `mount` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `MountTypeID`;
+
+ALTER TABLE `mount_capability` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `ID`;
+
+ALTER TABLE `movie` MODIFY `SubtitleFileFormat` int unsigned NOT NULL DEFAULT 0 AFTER `SubtitleFileDataID`;
+
+ALTER TABLE `phase` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `ID`;
+
+ALTER TABLE `player_condition` MODIFY `PhaseUseFlags` int NOT NULL DEFAULT 0 AFTER `MaxAvgEquippedItemLevel`;
+
+--
+-- Table structure for table `server_messages`
+--
+DROP TABLE IF EXISTS `server_messages`;
+CREATE TABLE `server_messages` (
+ `ID` int unsigned NOT NULL DEFAULT '0',
+ `Text` text,
+ `VerifiedBuild` int NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+--
+-- Table structure for table `server_messages_locale`
+--
+DROP TABLE IF EXISTS `server_messages_locale`;
+CREATE TABLE `server_messages_locale` (
+ `ID` int unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Text_lang` text,
+ `VerifiedBuild` int NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+
+ALTER TABLE `spell_shapeshift_form` CHANGE `CreatureDisplayID1` `CreatureDisplayID` int unsigned NOT NULL DEFAULT 0 AFTER `Name`;
+
+ALTER TABLE `ui_map` MODIFY `System` tinyint NOT NULL DEFAULT 0 AFTER `Flags`;
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index 60bda9390de..07d69d37e4b 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -51,25 +51,35 @@ 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, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild "
+ "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, 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, c.equipmentCache, "
- "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id "
- "LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid 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);
+ "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, c.equipmentCache, cb.guid, c.slot, 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 "
+ "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 "
+ "LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid "
+ "WHERE c.account = ? AND c.deleteInfos_Name IS NULL", CONNECTION_ASYNC);
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, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild "
+ "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, 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, c.equipmentCache, cb.guid, c.slot, 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 "
- "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, c.equipmentCache, "
- "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id "
- "LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid 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);
+ "LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 "
+ "LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid "
+ "WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_UNDELETE_ENUM_CUSTOMIZATIONS, "SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM character_customizations cc "
"LEFT JOIN characters c ON cc.guid = c.guid WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL ORDER BY cc.guid, cc.chrCustomizationOptionID", CONNECTION_ASYNC);
@@ -87,7 +97,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
"resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, summonedPetNumber, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, "
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, "
"health, power1, power2, power3, power4, power5, power6, power7, power8, power9, power10, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, "
- "raidDifficulty, legacyRaidDifficulty, fishingSteps, honor, honorLevel, honorRestState, honorRestBonus, numRespecs "
+ "raidDifficulty, legacyRaidDifficulty, fishingSteps, honor, honorLevel, honorRestState, honorRestBonus, numRespecs, "
+ "personalTabardEmblemStyle, personalTabardEmblemColor, personalTabardBorderStyle, personalTabardBorderColor, personalTabardBackgroundColor "
"FROM characters c LEFT JOIN character_fishingsteps cfs ON c.guid = cfs.guid WHERE c.guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_SEL_CHARACTER_CUSTOMIZATIONS, "SELECT chrCustomizationOptionID, chrCustomizationChoiceID FROM character_customizations WHERE guid = ? ORDER BY chrCustomizationOptionID", CONNECTION_ASYNC);
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp
index ca2fd93d164..1ef4003d484 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.cpp
+++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp
@@ -361,14 +361,14 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// ChrCustomizationDisplayInfo.db2
PrepareStatement(HOTFIX_SEL_CHR_CUSTOMIZATION_DISPLAY_INFO, "SELECT ID, ShapeshiftFormID, DisplayID, BarberShopMinCameraDistance, "
- "BarberShopHeightOffset FROM chr_customization_display_info WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ "BarberShopHeightOffset, BarberShopCameraZoomOffset FROM chr_customization_display_info WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_DISPLAY_INFO, "SELECT MAX(ID) + 1 FROM chr_customization_display_info", CONNECTION_SYNCH);
// ChrCustomizationElement.db2
PrepareStatement(HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT ID, ChrCustomizationChoiceID, RelatedChrCustomizationChoiceID, "
"ChrCustomizationGeosetID, ChrCustomizationSkinnedModelID, ChrCustomizationMaterialID, ChrCustomizationBoneSetID, "
- "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID, ParticleColorID"
- " FROM chr_customization_element WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID, ParticleColorID, "
+ "ChrCustGeoComponentLinkID FROM chr_customization_element WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT MAX(ID) + 1 FROM chr_customization_element", CONNECTION_SYNCH);
// ChrCustomizationOption.db2
@@ -464,8 +464,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONTENT_TUNING_X_LABEL, "SELECT MAX(ID) + 1 FROM content_tuning_x_label", CONNECTION_SYNCH);
// ConversationLine.db2
- PrepareStatement(HOTFIX_SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, SpellVisualKitID, AdditionalDuration, NextConversationLineID, "
- "AnimKitID, SpeechType, StartAnimation, EndAnimation FROM conversation_line WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PrepareStatement(HOTFIX_SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, Unused1020, SpellVisualKitID, AdditionalDuration, "
+ "NextConversationLineID, AnimKitID, SpeechType, StartAnimation, EndAnimation FROM conversation_line WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONVERSATION_LINE, "SELECT MAX(ID) + 1 FROM conversation_line", CONNECTION_SYNCH);
// CorruptionEffects.db2
@@ -1390,6 +1390,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_TEXT, "SELECT ID, Name, Script FROM scene_script_text WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENE_SCRIPT_TEXT, "SELECT MAX(ID) + 1 FROM scene_script_text", CONNECTION_SYNCH);
+ // ServerMessages.db2
+ PrepareStatement(HOTFIX_SEL_SERVER_MESSAGES, "SELECT ID, `Text` FROM server_messages WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_SERVER_MESSAGES, "SELECT MAX(ID) + 1 FROM server_messages", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_SERVER_MESSAGES, "SELECT ID, Text_lang FROM server_messages_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+
// SkillLine.db2
PrepareStatement(HOTFIX_SEL_SKILL_LINE, "SELECT DisplayName, AlternateVerb, Description, HordeDisplayName, OverrideSourceInfoDisplayName, ID, "
"CategoryID, SpellIconFileID, CanLink, ParentSkillLineID, ParentTierIndex, Flags, SpellBookSpellID, ExpansionNameSharedStringID, "
@@ -1613,10 +1618,9 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT, "SELECT MAX(ID) + 1 FROM spell_shapeshift", CONNECTION_SYNCH);
// SpellShapeshiftForm.db2
- PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, CreatureType, Flags, AttackIconFileID, BonusActionBar, CombatRoundTime, "
- "DamageVariance, MountTypeID, CreatureDisplayID1, CreatureDisplayID2, CreatureDisplayID3, CreatureDisplayID4, PresetSpellID1, PresetSpellID2, "
- "PresetSpellID3, PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8 FROM spell_shapeshift_form"
- " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, CreatureDisplayID, CreatureType, Flags, AttackIconFileID, BonusActionBar, "
+ "CombatRoundTime, DamageVariance, MountTypeID, PresetSpellID1, PresetSpellID2, PresetSpellID3, PresetSpellID4, PresetSpellID5, "
+ "PresetSpellID6, PresetSpellID7, PresetSpellID8 FROM spell_shapeshift_form WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT MAX(ID) + 1 FROM spell_shapeshift_form", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name_lang FROM spell_shapeshift_form_locale WHERE (`VerifiedBuild` > 0) = ?"
" AND locale = ?", CONNECTION_SYNCH);
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h
index fcebf47817e..8eaa6e0a81d 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.h
+++ b/src/server/database/Database/Implementation/HotfixDatabase.h
@@ -804,6 +804,10 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_SCENE_SCRIPT_TEXT,
HOTFIX_SEL_SCENE_SCRIPT_TEXT_MAX_ID,
+ HOTFIX_SEL_SERVER_MESSAGES,
+ HOTFIX_SEL_SERVER_MESSAGES_MAX_ID,
+ HOTFIX_SEL_SERVER_MESSAGES_LOCALE,
+
HOTFIX_SEL_SKILL_LINE,
HOTFIX_SEL_SKILL_LINE_MAX_ID,
HOTFIX_SEL_SKILL_LINE_LOCALE,
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index b98b10992cb..2acfcba6691 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -571,6 +571,7 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
case CriteriaType::DamageDealt:
case CriteriaType::HealingDone:
case CriteriaType::EarnArtifactXPForAzeriteItem:
+ case CriteriaType::GainLevels:
SetCriteriaProgress(criteria, miscValue1, referencePlayer, PROGRESS_ACCUMULATE);
break;
case CriteriaType::KillCreature:
@@ -1213,6 +1214,7 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi
case CriteriaType::CompleteAnyReplayQuest:
case CriteriaType::BuyItemsFromVendors:
case CriteriaType::SellItemsToVendors:
+ case CriteriaType::GainLevels:
return progress->Counter >= requiredAmount;
case CriteriaType::EarnAchievement:
case CriteriaType::CompleteQuest:
@@ -1377,6 +1379,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
case CriteriaType::CompleteAnyReplayQuest:
case CriteriaType::BuyItemsFromVendors:
case CriteriaType::SellItemsToVendors:
+ case CriteriaType::GainLevels:
if (!miscValue1)
return false;
break;
@@ -3569,10 +3572,19 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
break;
case 123: // Shadowlands Season 1 End
// timestamp = unknown
- break;;
+ break;
case 149: // Shadowlands Season 2 End
// timestamp = unknown
break;
+ case 349: // Dragonflight Season 3 Start (pre-season)
+ eventTimestamp = time_t(1699340400); // November 7, 2023 8:00
+ break;
+ case 350: // Dragonflight Season 3 Start
+ eventTimestamp = time_t(1699945200); // November 14, 2023 8:00
+ break;
+ case 352: // Dragonflight Season 3 End
+ // eventTimestamp = time_t(); unknown
+ break;
default:
break;
}
@@ -3942,6 +3954,13 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
if (referencePlayer->GetPositionZ() >= reqValue)
return false;
break;
+ case ModifierTreeType::PlayerIsOnMapWithExpansion: // 380
+ {
+ MapEntry const* mapEntry = referencePlayer->GetMap()->GetEntry();
+ if (mapEntry->ExpansionID != reqValue)
+ return false;
+ break;
+ }
default:
return false;
}
@@ -4415,6 +4434,24 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaType type)
return "MythicPlusRatingAttained";
case CriteriaType::SpentTalentPoint:
return "SpentTalentPoint";
+ case CriteriaType::MythicPlusDisplaySeasonEnded:
+ return "MythicPlusDisplaySeasonEnded";
+ case CriteriaType::WinRatedSoloShuffleRound:
+ return "WinRatedSoloShuffleRound";
+ case CriteriaType::ParticipateInRatedSoloShuffleRound:
+ return "ParticipateInRatedSoloShuffleRound";
+ case CriteriaType::ReputationAmountGained:
+ return "ReputationAmountGained";
+ case CriteriaType::FulfillAnyCraftingOrder:
+ return "FulfillAnyCraftingOrder";
+ case CriteriaType::FulfillCraftingOrderType:
+ return "FulfillCraftingOrderType";
+ case CriteriaType::PerksProgramMonthComplete:
+ return "PerksProgramMonthComplete";
+ case CriteriaType::CompleteTrackingQuest:
+ return "CompleteTrackingQuest";
+ case CriteriaType::GainLevels:
+ return "GainLevels";
default:
return "MissingType";
}
@@ -4635,11 +4672,11 @@ void CriteriaMgr::LoadCriteriaList()
uint32 questObjectiveCriterias = 0;
for (CriteriaEntry const* criteriaEntry : sCriteriaStore)
{
- ASSERT(criteriaEntry->Type < uint8(CriteriaType::Count), "CRITERIA_TYPE_TOTAL must be greater than or equal to %u but is currently equal to %u",
+ ASSERT(criteriaEntry->Type < AsUnderlyingType(CriteriaType::Count), "CriteriaType::Count must be greater than or equal to %u but is currently equal to %u",
criteriaEntry->Type + 1, uint32(CriteriaType::Count));
- ASSERT(criteriaEntry->StartEvent < uint8(CriteriaStartEvent::Count), "CriteriaStartEvent::Count must be greater than or equal to %u but is currently equal to %u",
+ ASSERT(criteriaEntry->StartEvent < AsUnderlyingType(CriteriaStartEvent::Count), "CriteriaStartEvent::Count must be greater than or equal to %u but is currently equal to %u",
criteriaEntry->StartEvent + 1, uint32(CriteriaStartEvent::Count));
- ASSERT(criteriaEntry->FailEvent < uint8(CriteriaFailEvent::Count), "CriteriaFailEvent::Count must be greater than or equal to %u but is currently equal to %u",
+ ASSERT(criteriaEntry->FailEvent < AsUnderlyingType(CriteriaFailEvent::Count), "CriteriaFailEvent::Count must be greater than or equal to %u but is currently equal to %u",
criteriaEntry->FailEvent + 1, uint32(CriteriaFailEvent::Count));
auto treeItr = _criteriaTreeByCriteria.find(criteriaEntry->ID);
diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h
index 7a7648110fe..640963ae5af 100644
--- a/src/server/game/DataStores/DB2LoadInfo.h
+++ b/src/server/game/DataStores/DB2LoadInfo.h
@@ -206,7 +206,7 @@ struct AreaTriggerLoadInfo
{ false, FT_FLOAT, "PosZ" },
{ false, FT_INT, "ID" },
{ true, FT_SHORT, "ContinentID" },
- { true, FT_BYTE, "PhaseUseFlags" },
+ { true, FT_INT, "PhaseUseFlags" },
{ true, FT_SHORT, "PhaseID" },
{ true, FT_SHORT, "PhaseGroupID" },
{ false, FT_FLOAT, "Radius" },
@@ -992,21 +992,22 @@ struct ChrCustomizationChoiceLoadInfo
struct ChrCustomizationDisplayInfoLoadInfo
{
- static constexpr DB2FieldMeta Fields[5] =
+ static constexpr DB2FieldMeta Fields[6] =
{
{ false, FT_INT, "ID" },
{ true, FT_INT, "ShapeshiftFormID" },
{ true, FT_INT, "DisplayID" },
{ false, FT_FLOAT, "BarberShopMinCameraDistance" },
{ false, FT_FLOAT, "BarberShopHeightOffset" },
+ { false, FT_FLOAT, "BarberShopCameraZoomOffset" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 5, &ChrCustomizationDisplayInfoMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_DISPLAY_INFO };
+ static constexpr DB2LoadInfo Instance{ Fields, 6, &ChrCustomizationDisplayInfoMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_DISPLAY_INFO };
};
struct ChrCustomizationElementLoadInfo
{
- static constexpr DB2FieldMeta Fields[13] =
+ static constexpr DB2FieldMeta Fields[14] =
{
{ false, FT_INT, "ID" },
{ true, FT_INT, "ChrCustomizationChoiceID" },
@@ -1021,9 +1022,10 @@ struct ChrCustomizationElementLoadInfo
{ true, FT_INT, "ChrCustomizationVoiceID" },
{ true, FT_INT, "AnimKitID" },
{ true, FT_INT, "ParticleColorID" },
+ { true, FT_INT, "ChrCustGeoComponentLinkID" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 13, &ChrCustomizationElementMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT };
+ static constexpr DB2LoadInfo Instance{ Fields, 14, &ChrCustomizationElementMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT };
};
struct ChrCustomizationOptionLoadInfo
@@ -1332,10 +1334,11 @@ struct ContentTuningXLabelLoadInfo
struct ConversationLineLoadInfo
{
- static constexpr DB2FieldMeta Fields[9] =
+ static constexpr DB2FieldMeta Fields[10] =
{
{ false, FT_INT, "ID" },
{ false, FT_INT, "BroadcastTextID" },
+ { false, FT_INT, "Unused1020" },
{ false, FT_INT, "SpellVisualKitID" },
{ true, FT_INT, "AdditionalDuration" },
{ false, FT_SHORT, "NextConversationLineID" },
@@ -1345,7 +1348,7 @@ struct ConversationLineLoadInfo
{ false, FT_BYTE, "EndAnimation" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 9, &ConversationLineMeta::Instance, HOTFIX_SEL_CONVERSATION_LINE };
+ static constexpr DB2LoadInfo Instance{ Fields, 10, &ConversationLineMeta::Instance, HOTFIX_SEL_CONVERSATION_LINE };
};
struct CorruptionEffectsLoadInfo
@@ -1601,7 +1604,7 @@ struct CurvePointLoadInfo
{ false, FT_FLOAT, "PreSLSquishPosX" },
{ false, FT_FLOAT, "PreSLSquishPosY" },
{ false, FT_INT, "ID" },
- { true, FT_INT, "CurveID" },
+ { false, FT_INT, "CurveID" },
{ false, FT_BYTE, "OrderIndex" },
};
@@ -3763,7 +3766,7 @@ struct MountLoadInfo
{ false, FT_STRING, "Description" },
{ false, FT_INT, "ID" },
{ false, FT_SHORT, "MountTypeID" },
- { false, FT_SHORT, "Flags" },
+ { true, FT_INT, "Flags" },
{ true, FT_BYTE, "SourceTypeEnum" },
{ true, FT_INT, "SourceSpellID" },
{ false, FT_INT, "PlayerConditionID" },
@@ -3781,7 +3784,7 @@ struct MountCapabilityLoadInfo
static constexpr DB2FieldMeta Fields[10] =
{
{ false, FT_INT, "ID" },
- { false, FT_BYTE, "Flags" },
+ { true, FT_INT, "Flags" },
{ false, FT_SHORT, "ReqRidingSkill" },
{ false, FT_SHORT, "ReqAreaID" },
{ false, FT_INT, "ReqSpellAuraID" },
@@ -3830,7 +3833,7 @@ struct MovieLoadInfo
{ false, FT_BYTE, "KeyID" },
{ false, FT_INT, "AudioFileDataID" },
{ false, FT_INT, "SubtitleFileDataID" },
- { true, FT_INT, "SubtitleFileFormat" },
+ { false, FT_INT, "SubtitleFileFormat" },
};
static constexpr DB2LoadInfo Instance{ Fields, 6, &MovieMeta::Instance, HOTFIX_SEL_MOVIE };
@@ -3950,7 +3953,7 @@ struct PhaseLoadInfo
static constexpr DB2FieldMeta Fields[2] =
{
{ false, FT_INT, "ID" },
- { false, FT_SHORT, "Flags" },
+ { true, FT_INT, "Flags" },
};
static constexpr DB2LoadInfo Instance{ Fields, 2, &PhaseMeta::Instance, HOTFIX_SEL_PHASE };
@@ -4010,7 +4013,7 @@ struct PlayerConditionLoadInfo
{ true, FT_INT, "MaxAvgItemLevel" },
{ false, FT_SHORT, "MinAvgEquippedItemLevel" },
{ false, FT_SHORT, "MaxAvgEquippedItemLevel" },
- { false, FT_BYTE, "PhaseUseFlags" },
+ { true, FT_INT, "PhaseUseFlags" },
{ false, FT_SHORT, "PhaseID" },
{ false, FT_INT, "PhaseGroupID" },
{ true, FT_INT, "Flags" },
@@ -4587,6 +4590,17 @@ struct SceneScriptTextLoadInfo
static constexpr DB2LoadInfo Instance{ Fields, 3, &SceneScriptTextMeta::Instance, HOTFIX_SEL_SCENE_SCRIPT_TEXT };
};
+struct ServerMessagesLoadInfo
+{
+ static constexpr DB2FieldMeta Fields[2] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Text" },
+ };
+
+ static constexpr DB2LoadInfo Instance{ Fields, 2, &ServerMessagesMeta::Instance, HOTFIX_SEL_SERVER_MESSAGES };
+};
+
struct SkillLineLoadInfo
{
static constexpr DB2FieldMeta Fields[15] =
@@ -5341,10 +5355,11 @@ struct SpellShapeshiftLoadInfo
struct SpellShapeshiftFormLoadInfo
{
- static constexpr DB2FieldMeta Fields[21] =
+ static constexpr DB2FieldMeta Fields[18] =
{
{ false, FT_INT, "ID" },
{ false, FT_STRING, "Name" },
+ { false, FT_INT, "CreatureDisplayID" },
{ true, FT_BYTE, "CreatureType" },
{ true, FT_INT, "Flags" },
{ true, FT_INT, "AttackIconFileID" },
@@ -5352,10 +5367,6 @@ struct SpellShapeshiftFormLoadInfo
{ true, FT_SHORT, "CombatRoundTime" },
{ false, FT_FLOAT, "DamageVariance" },
{ false, FT_SHORT, "MountTypeID" },
- { false, FT_INT, "CreatureDisplayID1" },
- { false, FT_INT, "CreatureDisplayID2" },
- { false, FT_INT, "CreatureDisplayID3" },
- { false, FT_INT, "CreatureDisplayID4" },
{ false, FT_INT, "PresetSpellID1" },
{ false, FT_INT, "PresetSpellID2" },
{ false, FT_INT, "PresetSpellID3" },
@@ -5366,7 +5377,7 @@ struct SpellShapeshiftFormLoadInfo
{ false, FT_INT, "PresetSpellID8" },
};
- static constexpr DB2LoadInfo Instance{ Fields, 21, &SpellShapeshiftFormMeta::Instance, HOTFIX_SEL_SPELL_SHAPESHIFT_FORM };
+ static constexpr DB2LoadInfo Instance{ Fields, 18, &SpellShapeshiftFormMeta::Instance, HOTFIX_SEL_SPELL_SHAPESHIFT_FORM };
};
struct SpellTargetRestrictionsLoadInfo
@@ -6109,7 +6120,7 @@ struct UiMapLoadInfo
{ false, FT_INT, "ID" },
{ true, FT_INT, "ParentUiMapID" },
{ true, FT_INT, "Flags" },
- { false, FT_BYTE, "System" },
+ { true, FT_BYTE, "System" },
{ false, FT_BYTE, "Type" },
{ true, FT_INT, "BountySetID" },
{ false, FT_INT, "BountyDisplayLocation" },
diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h
index 28f43806b0a..6be4d8024cf 100644
--- a/src/server/game/DataStores/DB2Metadata.h
+++ b/src/server/game/DataStores/DB2Metadata.h
@@ -491,10 +491,10 @@ struct AreaPOIMeta
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, false },
- { FT_INT, 1, true },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, true },
{ FT_SHORT, 1, false },
+ { FT_SHORT, 1, true },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
@@ -502,7 +502,7 @@ struct AreaPOIMeta
{ FT_BYTE, 1, false },
};
- static constexpr DB2Meta Instance{ 1000630, 2, 21, 21, 0x701F6E76, Fields, 13 };
+ static constexpr DB2Meta Instance{ 1000630, 2, 21, 21, 0x605253EC, Fields, 12 };
};
struct AreaPOIStateMeta
@@ -558,7 +558,7 @@ struct AreaTriggerMeta
{ FT_FLOAT, 3, true },
{ FT_INT, 1, false },
{ FT_SHORT, 1, true },
- { FT_BYTE, 1, true },
+ { FT_INT, 1, true },
{ FT_SHORT, 1, true },
{ FT_SHORT, 1, true },
{ FT_FLOAT, 1, true },
@@ -572,7 +572,7 @@ struct AreaTriggerMeta
{ FT_BYTE, 1, true },
};
- static constexpr DB2Meta Instance{ 1354401, 1, 15, 15, 0xE8FBF624, Fields, 2 };
+ static constexpr DB2Meta Instance{ 1354401, 1, 15, 15, 0x755974EC, Fields, 2 };
};
struct AreaTriggerActionSetMeta
@@ -2087,11 +2087,11 @@ struct ChrCreateClassAnimTargetInfoMeta
{
{ FT_INT, 1, false },
{ FT_INT, 1, true },
- { FT_INT, 1, true },
+ { FT_BYTE, 1, true },
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 3671169, 0, 4, 3, 0x7DF65661, Fields, 3 };
+ static constexpr DB2Meta Instance{ 3671169, 0, 4, 3, 0x9CC6607E, Fields, 3 };
};
struct ChrCustClientChoiceConversionMeta
@@ -2106,6 +2106,16 @@ struct ChrCustClientChoiceConversionMeta
static constexpr DB2Meta Instance{ 3590348, -1, 3, 2, 0xF1AE177C, Fields, 2 };
};
+struct ChrCustGeoComponentLinkMeta
+{
+ static constexpr DB2MetaField Fields[1] =
+ {
+ { FT_INT, 1, true },
+ };
+
+ static constexpr DB2Meta Instance{ 5387095, -1, 1, 1, 0xB7E1E35F, Fields, -1 };
+};
+
struct ChrCustItemGeoModifyMeta
{
static constexpr DB2MetaField Fields[3] =
@@ -2212,20 +2222,21 @@ struct ChrCustomizationConversionMeta
struct ChrCustomizationDisplayInfoMeta
{
- static constexpr DB2MetaField Fields[4] =
+ static constexpr DB2MetaField Fields[5] =
{
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_FLOAT, 1, true },
{ FT_FLOAT, 1, true },
+ { FT_FLOAT, 1, true },
};
- static constexpr DB2Meta Instance{ 3593032, -1, 4, 4, 0x7CD43881, Fields, -1 };
+ static constexpr DB2Meta Instance{ 3593032, -1, 5, 5, 0x5C04D385, Fields, -1 };
};
struct ChrCustomizationElementMeta
{
- static constexpr DB2MetaField Fields[12] =
+ static constexpr DB2MetaField Fields[13] =
{
{ FT_INT, 1, true },
{ FT_INT, 1, true },
@@ -2239,9 +2250,10 @@ struct ChrCustomizationElementMeta
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
+ { FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 3512765, -1, 12, 12, 0xE040533A, Fields, -1 };
+ static constexpr DB2Meta Instance{ 3512765, -1, 13, 13, 0x79DFED35, Fields, -1 };
};
struct ChrCustomizationGeosetMeta
@@ -2890,6 +2902,21 @@ struct ConditionalContentTuningMeta
static constexpr DB2Meta Instance{ 3501965, -1, 4, 3, 0x8DF8B6EC, Fields, 3 };
};
+struct ConditionalItemAppearanceMeta
+{
+ static constexpr DB2MetaField Fields[6] =
+ {
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ };
+
+ static constexpr DB2Meta Instance{ 5345180, -1, 6, 5, 0x46A8294C, Fields, 5 };
+};
+
struct ConfigurationWarningMeta
{
static constexpr DB2MetaField Fields[2] =
@@ -3018,10 +3045,11 @@ struct ContributionStyleContainerMeta
struct ConversationLineMeta
{
- static constexpr DB2MetaField Fields[8] =
+ static constexpr DB2MetaField Fields[9] =
{
{ FT_INT, 1, false },
{ FT_INT, 1, false },
+ { FT_INT, 1, false },
{ FT_INT, 1, true },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
@@ -3030,7 +3058,7 @@ struct ConversationLineMeta
{ FT_BYTE, 1, false },
};
- static constexpr DB2Meta Instance{ 1260801, -1, 8, 8, 0x9EE67C1B, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1260801, -1, 9, 9, 0xD199D7B9, Fields, -1 };
};
struct CorruptionEffectsMeta
@@ -3257,7 +3285,7 @@ struct CreatureDifficultyTreasureMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 4044373, -1, 3, 2, 0x248ECDA6, Fields, 2 };
+ static constexpr DB2Meta Instance{ 4044373, -1, 3, 2, 0x69361BEA, Fields, 2 };
};
struct CreatureDispXUiCameraMeta
@@ -3729,11 +3757,11 @@ struct CurvePointMeta
{ FT_FLOAT, 2, true },
{ FT_FLOAT, 2, true },
{ FT_INT, 1, false },
- { FT_INT, 1, true },
+ { FT_INT, 1, false },
{ FT_BYTE, 1, false },
};
- static constexpr DB2Meta Instance{ 892586, 2, 5, 5, 0x32694505, Fields, 3 };
+ static constexpr DB2Meta Instance{ 892586, 2, 5, 5, 0x861A11A0, Fields, 3 };
};
struct DeathThudLookupsMeta
@@ -5442,7 +5470,7 @@ struct GlobalColorMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 4328468, -1, 2, 2, 0x2566517B, Fields, -1 };
+ static constexpr DB2Meta Instance{ 4328468, -1, 2, 2, 0x70FE4450, Fields, -1 };
};
struct GlobalCurveMeta
@@ -5604,7 +5632,7 @@ struct GossipXUIDisplayInfoMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 3622253, -1, 4, 4, 0xB59290B4, Fields, -1 };
+ static constexpr DB2Meta Instance{ 3622253, -1, 4, 4, 0x30595578, Fields, -1 };
};
struct GradientEffectMeta
@@ -6217,7 +6245,7 @@ struct ItemBonusSeasonBonusListGroupMeta
struct ItemBonusSeasonUpgradeCostMeta
{
- static constexpr DB2MetaField Fields[7] =
+ static constexpr DB2MetaField Fields[8] =
{
{ FT_STRING, 1, true },
{ FT_INT, 1, false },
@@ -6226,9 +6254,10 @@ struct ItemBonusSeasonUpgradeCostMeta
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
+ { FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 5155641, 1, 7, 7, 0xCFA99EBB, Fields, 4 };
+ static constexpr DB2Meta Instance{ 5155641, 1, 8, 8, 0x76231EF7, Fields, 5 };
};
struct ItemBonusSequenceSpellMeta
@@ -6559,6 +6588,17 @@ struct ItemFixupMeta
static constexpr DB2Meta Instance{ 5152256, -1, 1, 1, 0x31DF97E4, Fields, -1 };
};
+struct ItemFixupActionMeta
+{
+ static constexpr DB2MetaField Fields[2] =
+ {
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ };
+
+ static constexpr DB2Meta Instance{ 5475699, -1, 2, 1, 0x3B964A51, Fields, 1 };
+};
+
struct ItemGroupIlvlScalingEntryMeta
{
static constexpr DB2MetaField Fields[5] =
@@ -7896,7 +7936,7 @@ struct MapMeta
{ FT_INT, 3, true },
};
- static constexpr DB2Meta Instance{ 1349477, -1, 24, 24, 0x43E626E4, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1349477, -1, 24, 24, 0x15542FE8, Fields, -1 };
};
struct MapCelestialBodyMeta
@@ -8150,7 +8190,7 @@ struct ModifiedCraftingReagentItemMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 3386487, -1, 6, 6, 0x5F7E56EC, Fields, -1 };
+ static constexpr DB2Meta Instance{ 3386487, -1, 6, 6, 0x705BAAB0, Fields, -1 };
};
struct ModifiedCraftingReagentSlotMeta
@@ -8208,7 +8248,7 @@ struct MountMeta
{ FT_STRING, 1, true },
{ FT_INT, 1, false },
{ FT_SHORT, 1, false },
- { FT_SHORT, 1, false },
+ { FT_INT, 1, true },
{ FT_BYTE, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, false },
@@ -8218,14 +8258,14 @@ struct MountMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 921760, 3, 13, 13, 0x7A9CE26C, Fields, -1 };
+ static constexpr DB2Meta Instance{ 921760, 3, 13, 13, 0x9A3BFE1E, Fields, -1 };
};
struct MountCapabilityMeta
{
static constexpr DB2MetaField Fields[9] =
{
- { FT_BYTE, 1, false },
+ { FT_INT, 1, true },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
{ FT_INT, 1, false },
@@ -8236,7 +8276,7 @@ struct MountCapabilityMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 1114709, -1, 9, 9, 0x7620F729, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1114709, -1, 9, 9, 0xF662BA9A, Fields, -1 };
};
struct MountEquipmentMeta
@@ -8298,7 +8338,7 @@ struct MountXSpellVisualKitPickerMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 3989477, -1, 5, 4, 0x253A6DD0, Fields, 4 };
+ static constexpr DB2Meta Instance{ 3989477, -1, 5, 4, 0xD9F7D5F2, Fields, 4 };
};
struct MovieMeta
@@ -8309,10 +8349,10 @@ struct MovieMeta
{ FT_BYTE, 1, false },
{ FT_INT, 1, false },
{ FT_INT, 1, false },
- { FT_INT, 1, true },
+ { FT_INT, 1, false },
};
- static constexpr DB2Meta Instance{ 1332556, -1, 5, 5, 0x214C1925, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1332556, -1, 5, 5, 0x6C52E628, Fields, -1 };
};
struct MovieFileDataMeta
@@ -8371,6 +8411,18 @@ struct MultiTransitionPropertiesMeta
static constexpr DB2Meta Instance{ 1965589, -1, 5, 5, 0x20221E9D, Fields, -1 };
};
+struct MusicOverrideMeta
+{
+ static constexpr DB2MetaField Fields[3] =
+ {
+ { FT_SHORT, 1, false },
+ { FT_SHORT, 1, false },
+ { FT_BYTE, 1, false },
+ };
+
+ static constexpr DB2Meta Instance{ 5161908, -1, 3, 3, 0xEE5D12BD, Fields, -1 };
+};
+
struct MythicPlusSeasonMeta
{
static constexpr DB2MetaField Fields[4] =
@@ -8386,15 +8438,16 @@ struct MythicPlusSeasonMeta
struct MythicPlusSeasonRewardLevelsMeta
{
- static constexpr DB2MetaField Fields[4] =
+ static constexpr DB2MetaField Fields[5] =
{
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
+ { FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 2123783, -1, 4, 3, 0x2ABB5E15, Fields, 3 };
+ static constexpr DB2Meta Instance{ 2123783, -1, 5, 5, 0xA1A30565, Fields, 0 };
};
struct MythicPlusSeasonTrackedAffixMeta
@@ -8932,6 +8985,18 @@ struct PerksActivityXTagMeta
static constexpr DB2Meta Instance{ 4694318, 0, 3, 2, 0x5254EC49, Fields, 2 };
};
+struct PerksUIThemeMeta
+{
+ static constexpr DB2MetaField Fields[3] =
+ {
+ { FT_INT, 1, false },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ };
+
+ static constexpr DB2Meta Instance{ 5389878, 0, 3, 3, 0x10119030, Fields, -1 };
+};
+
struct PerksVendorCategoryMeta
{
static constexpr DB2MetaField Fields[4] =
@@ -8947,7 +9012,7 @@ struct PerksVendorCategoryMeta
struct PerksVendorItemMeta
{
- static constexpr DB2MetaField Fields[8] =
+ static constexpr DB2MetaField Fields[9] =
{
{ FT_INT, 1, false },
{ FT_INT, 1, true },
@@ -8957,22 +9022,34 @@ struct PerksVendorItemMeta
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
+ { FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 4281311, 0, 8, 8, 0x451B856E, Fields, -1 };
+ static constexpr DB2Meta Instance{ 4281311, 0, 9, 9, 0x80A50418, Fields, -1 };
};
-struct PerksVendorItemUIInfoMeta
+struct PerksVendorItemUIGroupMeta
{
- static constexpr DB2MetaField Fields[4] =
+ static constexpr DB2MetaField Fields[3] =
{
+ { FT_STRING, 1, true },
{ FT_INT, 1, false },
{ FT_INT, 1, true },
+ };
+
+ static constexpr DB2Meta Instance{ 5386256, 1, 3, 3, 0x3C22481A, Fields, -1 };
+};
+
+struct PerksVendorItemUIInfoMeta
+{
+ static constexpr DB2MetaField Fields[3] =
+ {
+ { FT_INT, 1, false },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 4281312, 0, 4, 4, 0xF86315E9, Fields, -1 };
+ static constexpr DB2Meta Instance{ 4281312, 0, 3, 3, 0x6D14E9E7, Fields, -1 };
};
struct PerksVendorItemXIntervalMeta
@@ -8990,10 +9067,10 @@ struct PhaseMeta
{
static constexpr DB2MetaField Fields[1] =
{
- { FT_SHORT, 1, false },
+ { FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 1348558, -1, 1, 1, 0x2BE7B349, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1348558, -1, 1, 1, 0x3CC972C6, Fields, -1 };
};
struct PhaseShiftZoneSoundsMeta
@@ -9004,7 +9081,7 @@ struct PhaseShiftZoneSoundsMeta
{ FT_BYTE, 1, false },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
- { FT_BYTE, 1, false },
+ { FT_INT, 1, true },
{ FT_INT, 1, false },
{ FT_INT, 1, false },
{ FT_SHORT, 1, false },
@@ -9015,7 +9092,7 @@ struct PhaseShiftZoneSoundsMeta
{ FT_BYTE, 1, false },
};
- static constexpr DB2Meta Instance{ 1267336, -1, 13, 13, 0x48F50F33, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1267336, -1, 13, 13, 0x846C026E, Fields, -1 };
};
struct PhaseXPhaseGroupMeta
@@ -9084,7 +9161,7 @@ struct PlayerConditionMeta
{ FT_INT, 1, true },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
- { FT_BYTE, 1, false },
+ { FT_INT, 1, true },
{ FT_SHORT, 1, false },
{ FT_INT, 1, false },
{ FT_INT, 1, true },
@@ -9133,7 +9210,7 @@ struct PlayerConditionMeta
{ FT_SHORT, 4, false },
};
- static constexpr DB2Meta Instance{ 1045411, -1, 84, 84, 0x4FD5055D, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1045411, -1, 84, 84, 0xEE0F1EDC, Fields, -1 };
};
struct PositionerMeta
@@ -10596,12 +10673,12 @@ struct SoundEmittersMeta
{ FT_BYTE, 1, false },
{ FT_SHORT, 1, false },
{ FT_INT, 1, false },
- { FT_BYTE, 1, false },
+ { FT_INT, 1, true },
{ FT_BYTE, 1, false },
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 1092316, 3, 12, 11, 0xA4A5BBC4, Fields, 11 };
+ static constexpr DB2Meta Instance{ 1092316, 3, 12, 11, 0xDCEA9A09, Fields, 11 };
};
struct SoundEnvelopeMeta
@@ -11834,6 +11911,7 @@ struct SpellShapeshiftFormMeta
static constexpr DB2MetaField Fields[10] =
{
{ FT_STRING, 1, true },
+ { FT_INT, 1, false },
{ FT_BYTE, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
@@ -11841,11 +11919,10 @@ struct SpellShapeshiftFormMeta
{ FT_SHORT, 1, true },
{ FT_FLOAT, 1, true },
{ FT_SHORT, 1, false },
- { FT_INT, 4, false },
{ FT_INT, 8, false },
};
- static constexpr DB2Meta Instance{ 1280618, -1, 10, 10, 0xBFE8FFA1, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1280618, -1, 10, 10, 0x887ACBCE, Fields, -1 };
};
struct SpellSpecialUnitEffectMeta
@@ -13572,15 +13649,16 @@ struct UiQuestDetailsThemeMeta
struct UiTextureAtlasMeta
{
- static constexpr DB2MetaField Fields[4] =
+ static constexpr DB2MetaField Fields[5] =
{
+ { FT_INT, 1, false },
{ FT_INT, 1, true },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
{ FT_BYTE, 1, false },
};
- static constexpr DB2Meta Instance{ 897470, -1, 4, 4, 0xA63B3475, Fields, -1 };
+ static constexpr DB2Meta Instance{ 897470, 0, 5, 5, 0x84691E24, Fields, -1 };
};
struct UiTextureAtlasElementMeta
@@ -13594,6 +13672,22 @@ struct UiTextureAtlasElementMeta
static constexpr DB2Meta Instance{ 1989276, 1, 2, 2, 0x402AB955, Fields, -1 };
};
+struct UiTextureAtlasElementSliceDataMeta
+{
+ static constexpr DB2MetaField Fields[7] =
+ {
+ { FT_INT, 1, false },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_BYTE, 1, false },
+ };
+
+ static constexpr DB2Meta Instance{ 5319042, 0, 7, 7, 0x105CAB2E, Fields, -1 };
+};
+
struct UiTextureAtlasMemberMeta
{
static constexpr DB2MetaField Fields[12] =
@@ -13678,7 +13772,7 @@ struct UiWidgetDataSourceMeta
{ FT_INT, 1, true },
};
- static constexpr DB2Meta Instance{ 1983640, -1, 4, 3, 0x183FA098, Fields, 3 };
+ static constexpr DB2Meta Instance{ 1983640, -1, 4, 3, 0xF2B11731, Fields, 3 };
};
struct UiWidgetMapMeta
@@ -14277,6 +14371,18 @@ struct WeatherXParticulateMeta
static constexpr DB2Meta Instance{ 1965591, -1, 2, 1, 0xD6E739FE, Fields, 1 };
};
+struct WeeklyRewardChestActivityTierMeta
+{
+ static constexpr DB2MetaField Fields[3] =
+ {
+ { FT_INT, 1, false },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ };
+
+ static constexpr DB2Meta Instance{ 5390446, 0, 3, 3, 0x4265F6DC, Fields, -1 };
+};
+
struct WeeklyRewardChestThresholdMeta
{
static constexpr DB2MetaField Fields[3] =
@@ -14321,17 +14427,18 @@ struct WorldBossLockoutMeta
struct WorldChunkSoundsMeta
{
- static constexpr DB2MetaField Fields[6] =
+ static constexpr DB2MetaField Fields[7] =
{
{ FT_SHORT, 1, false },
{ FT_INT, 1, true },
+ { FT_INT, 1, true },
{ FT_BYTE, 1, false },
{ FT_BYTE, 1, false },
{ FT_BYTE, 1, false },
{ FT_BYTE, 1, false },
};
- static constexpr DB2Meta Instance{ 1267069, -1, 6, 6, 0x967E93B7, Fields, -1 };
+ static constexpr DB2Meta Instance{ 1267069, -1, 7, 7, 0x589C31E5, Fields, -1 };
};
struct WorldEffectMeta
@@ -14361,6 +14468,19 @@ struct WorldElapsedTimerMeta
static constexpr DB2Meta Instance{ 1135240, -1, 3, 3, 0x30FF7138, Fields, -1 };
};
+struct WorldLayerMapSetMeta
+{
+ static constexpr DB2MetaField Fields[4] =
+ {
+ { FT_STRING_NOT_LOCALIZED, 1, true },
+ { FT_STRING_NOT_LOCALIZED, 1, true },
+ { FT_INT, 1, false },
+ { FT_INT, 1, true },
+ };
+
+ static constexpr DB2Meta Instance{ 4550228, 2, 4, 4, 0x64C69433, Fields, -1 };
+};
+
struct WorldMapOverlayMeta
{
static constexpr DB2MetaField Fields[13] =
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index 6de4f4b423e..6b882eb1bcd 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -274,6 +274,7 @@ DB2Storage<SceneScriptEntry> sSceneScriptStore("SceneScript.d
DB2Storage<SceneScriptGlobalTextEntry> sSceneScriptGlobalTextStore("SceneScriptGlobalText.db2", &SceneScriptGlobalTextLoadInfo::Instance);
DB2Storage<SceneScriptPackageEntry> sSceneScriptPackageStore("SceneScriptPackage.db2", &SceneScriptPackageLoadInfo::Instance);
DB2Storage<SceneScriptTextEntry> sSceneScriptTextStore("SceneScriptText.db2", &SceneScriptTextLoadInfo::Instance);
+DB2Storage<ServerMessagesEntry> sServerMessagesStore("ServerMessages.db2", &ServerMessagesLoadInfo::Instance);
DB2Storage<SkillLineEntry> sSkillLineStore("SkillLine.db2", &SkillLineLoadInfo::Instance);
DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore("SkillLineAbility.db2", &SkillLineAbilityLoadInfo::Instance);
DB2Storage<SkillLineXTraitTreeEntry> sSkillLineXTraitTreeStore("SkillLineXTraitTree.db2", &SkillLineXTraitTreeLoadInfo::Instance);
@@ -869,6 +870,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sSceneScriptGlobalTextStore);
LOAD_DB2(sSceneScriptPackageStore);
LOAD_DB2(sSceneScriptTextStore);
+ LOAD_DB2(sServerMessagesStore);
LOAD_DB2(sSkillLineStore);
LOAD_DB2(sSkillLineAbilityStore);
LOAD_DB2(sSkillLineXTraitTreeStore);
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index ad4f829aa61..a8f40b74d48 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -213,6 +213,7 @@ TC_GAME_API extern DB2Storage<ScenarioEntry> sScenarioSto
TC_GAME_API extern DB2Storage<ScenarioStepEntry> sScenarioStepStore;
TC_GAME_API extern DB2Storage<SkillLineEntry> sSkillLineStore;
TC_GAME_API extern DB2Storage<SceneScriptPackageEntry> sSceneScriptPackageStore;
+TC_GAME_API extern DB2Storage<ServerMessagesEntry> sServerMessagesStore;
TC_GAME_API extern DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore;
TC_GAME_API extern DB2Storage<SkillLineXTraitTreeEntry> sSkillLineXTraitTreeStore;
TC_GAME_API extern DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore;
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index 18b16e9d51b..a63d5c4e82d 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -165,7 +165,7 @@ struct AreaTriggerEntry
DBCPosition3D Pos;
uint32 ID;
int16 ContinentID;
- int8 PhaseUseFlags;
+ int32 PhaseUseFlags;
int16 PhaseID;
int16 PhaseGroupID;
float Radius;
@@ -702,6 +702,7 @@ struct ChrCustomizationDisplayInfoEntry
int32 DisplayID;
float BarberShopMinCameraDistance;
float BarberShopHeightOffset;
+ float BarberShopCameraZoomOffset;
};
struct ChrCustomizationElementEntry
@@ -719,6 +720,7 @@ struct ChrCustomizationElementEntry
int32 ChrCustomizationVoiceID;
int32 AnimKitID;
int32 ParticleColorID;
+ int32 ChrCustGeoComponentLinkID;
};
struct ChrCustomizationOptionEntry
@@ -963,6 +965,7 @@ struct ConversationLineEntry
{
uint32 ID;
uint32 BroadcastTextID;
+ uint32 Unused1020;
uint32 SpellVisualKitID;
int32 AdditionalDuration;
uint16 NextConversationLineID;
@@ -1423,7 +1426,7 @@ struct CurvePointEntry
DBCPosition2D Pos;
DBCPosition2D PreSLSquishPos;
uint32 ID;
- int32 CurveID;
+ uint32 CurveID;
uint8 OrderIndex;
};
@@ -2849,7 +2852,7 @@ struct MountEntry
LocalizedString Description;
uint32 ID;
uint16 MountTypeID;
- uint16 Flags;
+ int32 Flags;
int8 SourceTypeEnum;
int32 SourceSpellID;
uint32 PlayerConditionID;
@@ -2864,7 +2867,7 @@ struct MountEntry
struct MountCapabilityEntry
{
uint32 ID;
- uint8 Flags;
+ int32 Flags;
uint16 ReqRidingSkill;
uint16 ReqAreaID;
uint32 ReqSpellAuraID;
@@ -2898,7 +2901,7 @@ struct MovieEntry
uint8 KeyID;
uint32 AudioFileDataID;
uint32 SubtitleFileDataID;
- int32 SubtitleFileFormat;
+ uint32 SubtitleFileFormat;
};
struct MythicPlusSeasonEntry
@@ -2966,7 +2969,7 @@ struct ParagonReputationEntry
struct PhaseEntry
{
uint32 ID;
- uint16 Flags;
+ int32 Flags;
EnumFlag<PhaseEntryFlags> GetFlags() const { return static_cast<PhaseEntryFlags>(Flags); }
};
@@ -3018,7 +3021,7 @@ struct PlayerConditionEntry
int32 MaxAvgItemLevel;
uint16 MinAvgEquippedItemLevel;
uint16 MaxAvgEquippedItemLevel;
- uint8 PhaseUseFlags;
+ int32 PhaseUseFlags;
uint16 PhaseID;
uint32 PhaseGroupID;
int32 Flags;
@@ -3339,6 +3342,12 @@ struct SceneScriptTextEntry
char const* Script;
};
+struct ServerMessagesEntry
+{
+ uint32 ID;
+ LocalizedString Text;
+};
+
struct SkillLineEntry
{
LocalizedString DisplayName;
@@ -3825,6 +3834,7 @@ struct SpellShapeshiftFormEntry
{
uint32 ID;
LocalizedString Name;
+ uint32 CreatureDisplayID;
int8 CreatureType;
int32 Flags;
int32 AttackIconFileID;
@@ -3832,7 +3842,6 @@ struct SpellShapeshiftFormEntry
int16 CombatRoundTime;
float DamageVariance;
uint16 MountTypeID;
- std::array<uint32, 4> CreatureDisplayID;
std::array<uint32, MAX_SHAPESHIFT_SPELLS> PresetSpellID;
EnumFlag<SpellShapeshiftFormFlags> GetFlags() const { return static_cast<SpellShapeshiftFormFlags>(Flags); }
@@ -4348,7 +4357,7 @@ struct UiMapEntry
uint32 ID;
int32 ParentUiMapID;
int32 Flags;
- uint8 System;
+ int8 System;
uint8 Type;
int32 BountySetID;
uint32 BountyDisplayLocation;
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 83ef2bf8075..6689d13eb48 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -497,7 +497,7 @@ enum class CriteriaFlags : uint8
DEFINE_ENUM_FLAG(CriteriaFlags);
-enum class CriteriaType : uint8
+enum class CriteriaType : int16
{
KillCreature = 0, // Kill NPC "{Creature}"
WinBattleground = 1, // Win battleground "{Map}"
@@ -744,7 +744,9 @@ enum class CriteriaType : uint8
PerksProgramMonthComplete = 249, /*NYI*/
CompleteTrackingQuest = 250, /*NYI*/
- Count
+
+ GainLevels = 253, // Gain levels
+ Count = 257
};
enum class CriteriaTreeFlags : uint16
@@ -1686,6 +1688,11 @@ enum class ModifierTreeType : int32
PlayerHasCompletedQuestWithLabel = 372, /*NYI*/ // Player has previously completed quest with {QuestLabel}
LegacyLootIsEnabled = 373, /*NYI*/
PlayerZPositionBelow = 374,
+ PlayerWeaponHighWatermarkAboveOrEqual = 375, /*NYI*/
+ PlayerHeadHighWatermarkAboveOrEqual = 376, /*NYI*/
+ PlayerHasDisplayedCurrencyLessThan = 377, /*NYI*/ // Player has {CurrencyTypes} less than {#Amount} (value visible in ui is taken into account, not raw value)
+
+ PlayerIsOnMapWithExpansion = 380, // Player is on map that has {ExpansionID}
};
enum class ModifierTreeOperator : int8
@@ -1714,7 +1721,7 @@ enum MountFlags
MOUNT_FLAG_HIDE_IF_UNKNOWN = 0x40
};
-enum class PhaseEntryFlags : uint16
+enum class PhaseEntryFlags : int32
{
ReadOnly = 0x001,
InternalPhase = 0x002,
@@ -1768,7 +1775,7 @@ enum class PlayerInteractionType : int32
Registrar = 11,
Vendor = 12,
PetitionVendor = 13,
- TabardVendor = 14,
+ GuildTabardVendor = 14,
TalentMaster = 15,
SpecializationMaster = 16,
MailInfo = 17,
@@ -1818,7 +1825,8 @@ enum class PlayerInteractionType : int32
TraitSystem = 61,
BarbersChoice = 62,
JailersTowerBuffs = 63,
- MajorFactionRenown = 64
+ MajorFactionRenown = 64,
+ PersonalTabardVendor = 65
};
enum class PowerTypeFlags : int16
diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp
index 087fb812e08..9ed3043e877 100644
--- a/src/server/game/Entities/Conversation/Conversation.cpp
+++ b/src/server/game/Entities/Conversation/Conversation.cpp
@@ -192,17 +192,16 @@ void Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry,
if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_CONVERSATION_LINE, line->Id, creator))
continue;
- lines.emplace_back();
+ ConversationLineEntry const* convoLine = sConversationLineStore.LookupEntry(line->Id); // never null for conversationTemplate->Lines
- UF::ConversationLine& lineField = lines.back();
+ UF::ConversationLine& lineField = lines.emplace_back();
lineField.ConversationLineID = line->Id;
+ lineField.BroadcastTextID = convoLine->BroadcastTextID;
lineField.UiCameraID = line->UiCameraID;
lineField.ActorIndex = line->ActorIdx;
lineField.Flags = line->Flags;
lineField.ChatType = line->ChatType;
- ConversationLineEntry const* convoLine = sConversationLineStore.LookupEntry(line->Id); // never null for conversationTemplate->Lines
-
for (LocaleConstant locale = LOCALE_enUS; locale < TOTAL_LOCALES; locale = LocaleConstant(locale + 1))
{
if (locale == LOCALE_none)
diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h
index d69f9373b05..72aa91aae39 100644
--- a/src/server/game/Entities/Creature/GossipDef.h
+++ b/src/server/game/Entities/Creature/GossipDef.h
@@ -41,7 +41,7 @@ enum class GossipOptionNpc : uint8
Binder = 5, // Golden interaction wheel
Banker = 6, // Brown bag (with gold coin in lower corner)
PetitionVendor = 7, // White chat bubble (with "..." inside)
- TabardVendor = 8, // White tabard
+ GuildTabardVendor = 8, // White tabard
Battlemaster = 9, // Two crossed swords
Auctioneer = 10, // Stack of gold coins
TalentMaster = 11, // White chat bubble
@@ -87,6 +87,7 @@ enum class GossipOptionNpc : uint8
TraitSystem = 51,
BarbersChoice = 52,
MajorFactionRenown = 53,
+ PersonalTabardVendor = 54,
Count
};
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index dd13e001442..2a4402603e9 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -860,6 +860,7 @@ void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const*
{
data << int32(ItemID);
data << int32(SecondaryItemModifiedAppearanceID);
+ data << int32(ConditionalItemAppearanceID);
data << uint16(ItemAppearanceModID);
data << uint16(ItemVisual);
}
@@ -870,7 +871,7 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con
if (ignoreChangesMask)
changesMask.SetAll();
- data.WriteBits(changesMask.GetBlock(0), 5);
+ data.WriteBits(changesMask.GetBlock(0), 6);
data.FlushBits();
if (changesMask[0])
@@ -885,10 +886,14 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con
}
if (changesMask[3])
{
- data << uint16(ItemAppearanceModID);
+ data << int32(ConditionalItemAppearanceID);
}
if (changesMask[4])
{
+ data << uint16(ItemAppearanceModID);
+ }
+ if (changesMask[5])
+ {
data << uint16(ItemVisual);
}
}
@@ -898,6 +903,7 @@ void VisibleItem::ClearChangesMask()
{
Base::ClearChangesMask(ItemID);
Base::ClearChangesMask(SecondaryItemModifiedAppearanceID);
+ Base::ClearChangesMask(ConditionalItemAppearanceID);
Base::ClearChangesMask(ItemAppearanceModID);
Base::ClearChangesMask(ItemVisual);
_changesMask.ResetAll();
@@ -2119,10 +2125,120 @@ bool CTROptions::operator==(CTROptions const& right) const
&& ExpansionLevelMask == right.ExpansionLevelMask;
}
+void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ for (uint32 i = 0; i < 5; ++i)
+ {
+ data.WriteBits(Name[i].size(), 10);
+ }
+ data.FlushBits();
+ for (uint32 i = 0; i < 5; ++i)
+ {
+ data.WriteString(Name[i]);
+ }
+ data.FlushBits();
+}
+
+void DeclinedNames::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlocksMask(0), 1);
+ if (changesMask.GetBlock(0))
+ data.WriteBits(changesMask.GetBlock(0), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ for (uint32 i = 0; i < 5; ++i)
+ {
+ if (changesMask[1 + i])
+ {
+ data.WriteBits(Name[i].size(), 10);
+ }
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ for (uint32 i = 0; i < 5; ++i)
+ {
+ if (changesMask[1 + i])
+ {
+ data.WriteString(Name[i]);
+ }
+ }
+ }
+ data.FlushBits();
+}
+
+void DeclinedNames::ClearChangesMask()
+{
+ Base::ClearChangesMask(Name);
+ _changesMask.ResetAll();
+}
+
+void CustomTabardInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int32(EmblemStyle);
+ data << int32(EmblemColor);
+ data << int32(BorderStyle);
+ data << int32(BorderColor);
+ data << int32(BackgroundColor);
+}
+
+void CustomTabardInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 6);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(EmblemStyle);
+ }
+ if (changesMask[2])
+ {
+ data << int32(EmblemColor);
+ }
+ if (changesMask[3])
+ {
+ data << int32(BorderStyle);
+ }
+ if (changesMask[4])
+ {
+ data << int32(BorderColor);
+ }
+ if (changesMask[5])
+ {
+ data << int32(BackgroundColor);
+ }
+ }
+}
+
+void CustomTabardInfo::ClearChangesMask()
+{
+ Base::ClearChangesMask(EmblemStyle);
+ Base::ClearChangesMask(EmblemColor);
+ Base::ClearChangesMask(BorderStyle);
+ Base::ClearChangesMask(BorderColor);
+ Base::ClearChangesMask(BackgroundColor);
+ _changesMask.ResetAll();
+}
+
void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
data << DuelArbiter;
data << WowAccount;
+ data << BnetAccount;
+ data << uint64(GuildClubMemberID);
data << LootTargetGUID;
data << uint32(PlayerFlags);
data << uint32(PlayerFlagsEx);
@@ -2130,6 +2246,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data << uint32(GuildDeleteDate);
data << int32(GuildLevel);
data << uint32(Customizations.size());
+ data << uint32(QaCustomizations.size());
for (uint32 i = 0; i < 2; ++i)
{
data << uint8(PartyType[i]);
@@ -2168,7 +2285,6 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data << int32(Field_B0);
data << int32(Field_B4);
data << int32(CurrentBattlePetSpeciesID);
- data << field_138;
CtrOptions->WriteCreate(data, owner, receiver);
data << int32(CovenantID);
data << int32(SoulbindID);
@@ -2177,10 +2293,15 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
{
data << uint32(Field_3120[i]);
}
+ PersonalTabard->WriteCreate(data, owner, receiver);
for (uint32 i = 0; i < Customizations.size(); ++i)
{
Customizations[i].WriteCreate(data, owner, receiver);
}
+ for (uint32 i = 0; i < QaCustomizations.size(); ++i)
+ {
+ QaCustomizations[i].WriteCreate(data, owner, receiver);
+ }
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
{
for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
@@ -2196,18 +2317,26 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
{
data << int32(VisualItemReplacements[i]);
}
+ data.FlushBits();
+ data.WriteBits(Name->size(), 6);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
{
data.WriteBit(HasQuestSession);
}
data.WriteBit(HasLevelLink);
+ data.WriteBits(DeclinedNames.has_value(), 1);
data << DungeonScore;
+ data.WriteString(Name);
+ if (DeclinedNames.has_value())
+ {
+ DeclinedNames->WriteCreate(data, owner, receiver);
+ }
data.FlushBits();
}
void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFE000000u, 0xFFFFFFFFu, 0x000000FFu });
+ Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -2215,12 +2344,12 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
- allowedMaskForTarget |= { 0x00000012u, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x01FFFFFFu, 0x00000000u, 0x00000000u };
+ allowedMaskForTarget |= { 0x00000022u, 0xFFFFC000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x3FFFFFFFu, 0x00000000u, 0x00000000u };
}
void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
- Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFE000000u, 0xFFFFFFFFu, 0x000000FFu });
+ Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
@@ -2253,18 +2382,25 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
if (changesMask[4])
{
if (!ignoreNestedChangesMask)
+ QaCustomizations.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(QaCustomizations.size(), data);
+ }
+ if (changesMask[5])
+ {
+ if (!ignoreNestedChangesMask)
QuestSessionQuestLog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(QuestSessionQuestLog.size(), data);
}
- if (changesMask[5])
+ if (changesMask[6])
{
if (!ignoreNestedChangesMask)
ArenaCooldowns.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ArenaCooldowns.size(), data);
}
- if (changesMask[6])
+ if (changesMask[7])
{
if (!ignoreNestedChangesMask)
VisualItemReplacements.WriteUpdateMask(data);
@@ -2287,6 +2423,16 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
if (changesMask[4])
{
+ for (uint32 i = 0; i < QaCustomizations.size(); ++i)
+ {
+ if (QaCustomizations.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ QaCustomizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[5])
+ {
for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i)
{
if (QuestSessionQuestLog.HasChanged(i) || ignoreNestedChangesMask)
@@ -2298,7 +2444,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[5])
+ if (changesMask[6])
{
for (uint32 i = 0; i < ArenaCooldowns.size(); ++i)
{
@@ -2308,7 +2454,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[6])
+ if (changesMask[7])
{
for (uint32 i = 0; i < VisualItemReplacements.size(); ++i)
{
@@ -2318,145 +2464,170 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[7])
- {
- data << DuelArbiter;
- }
if (changesMask[8])
{
- data << WowAccount;
+ data << DuelArbiter;
}
if (changesMask[9])
{
- data << LootTargetGUID;
+ data << WowAccount;
}
if (changesMask[10])
{
- data << uint32(PlayerFlags);
+ data << BnetAccount;
}
if (changesMask[11])
{
- data << uint32(PlayerFlagsEx);
+ data << uint64(GuildClubMemberID);
}
if (changesMask[12])
{
- data << uint32(GuildRankID);
+ data << LootTargetGUID;
}
if (changesMask[13])
{
- data << uint32(GuildDeleteDate);
+ data << uint32(PlayerFlags);
}
if (changesMask[14])
{
- data << int32(GuildLevel);
+ data << uint32(PlayerFlagsEx);
}
if (changesMask[15])
{
- data << uint8(NativeSex);
+ data << uint32(GuildRankID);
}
if (changesMask[16])
{
- data << uint8(Inebriation);
+ data << uint32(GuildDeleteDate);
}
if (changesMask[17])
{
- data << uint8(PvpTitle);
+ data << int32(GuildLevel);
}
if (changesMask[18])
{
- data << uint8(ArenaFaction);
+ data << uint8(NativeSex);
}
if (changesMask[19])
{
- data << uint32(DuelTeam);
+ data << uint8(Inebriation);
}
if (changesMask[20])
{
- data << int32(GuildTimeStamp);
+ data << uint8(PvpTitle);
}
if (changesMask[21])
{
- data << int32(PlayerTitle);
+ data << uint8(ArenaFaction);
}
if (changesMask[22])
{
- data << int32(FakeInebriation);
+ data << uint32(DuelTeam);
}
if (changesMask[23])
{
- data << uint32(VirtualPlayerRealm);
+ data << int32(GuildTimeStamp);
}
if (changesMask[24])
{
- data << uint32(CurrentSpecID);
+ data << int32(PlayerTitle);
}
if (changesMask[25])
{
- data << int32(TaxiMountAnimKitID);
+ data << int32(FakeInebriation);
}
if (changesMask[26])
{
- data << uint8(CurrentBattlePetBreedQuality);
+ data << uint32(VirtualPlayerRealm);
}
if (changesMask[27])
{
- data << int32(HonorLevel);
+ data << uint32(CurrentSpecID);
}
if (changesMask[28])
{
- data << int64(LogoutTime);
+ data << int32(TaxiMountAnimKitID);
}
if (changesMask[29])
{
- data << int32(Field_B0);
+ data << uint8(CurrentBattlePetBreedQuality);
}
if (changesMask[30])
{
- data << int32(Field_B4);
+ data << int32(HonorLevel);
}
if (changesMask[31])
{
- data << int32(CurrentBattlePetSpeciesID);
+ data << int64(LogoutTime);
}
}
if (changesMask[32])
{
- if (changesMask[33])
+ if (changesMask[34])
{
- data << field_138;
+ data << int32(Field_B0);
}
- if (changesMask[34])
+ if (changesMask[35])
+ {
+ data << int32(Field_B4);
+ }
+ if (changesMask[36])
+ {
+ data << int32(CurrentBattlePetSpeciesID);
+ }
+ if (changesMask[37])
{
CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[35])
+ if (changesMask[38])
{
data << int32(CovenantID);
}
- if (changesMask[36])
+ if (changesMask[39])
{
data << int32(SoulbindID);
}
- if (changesMask[37])
+ if (changesMask[42])
+ {
+ PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (changesMask[33])
+ {
+ data.WriteBits(Name->size(), 32);
+ }
+ data.WriteBits(DeclinedNames.has_value(), 1);
+ data.FlushBits();
+ if (changesMask[40])
{
data << DungeonScore;
}
+ if (changesMask[33])
+ {
+ data.WriteString(Name);
+ }
+ if (changesMask[41])
+ {
+ if (DeclinedNames.has_value())
+ {
+ DeclinedNames->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
}
- if (changesMask[38])
+ if (changesMask[43])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[39 + i])
+ if (changesMask[44 + i])
{
data << uint8(PartyType[i]);
}
}
}
- if (changesMask[41])
+ if (changesMask[46])
{
for (uint32 i = 0; i < 175; ++i)
{
- if (changesMask[42 + i])
+ if (changesMask[47 + i])
{
if (noQuestLogChangesMask)
QuestLog[i].WriteCreate(data, owner, receiver);
@@ -2465,31 +2636,31 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[217])
+ if (changesMask[222])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[218 + i])
+ if (changesMask[223 + i])
{
VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[237])
+ if (changesMask[242])
{
for (uint32 i = 0; i < 6; ++i)
{
- if (changesMask[238 + i])
+ if (changesMask[243 + i])
{
data << float(AvgItemLevel[i]);
}
}
}
- if (changesMask[244])
+ if (changesMask[249])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[245 + i])
+ if (changesMask[250 + i])
{
data << uint32(Field_3120[i]);
}
@@ -2503,11 +2674,14 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(HasQuestSession);
Base::ClearChangesMask(HasLevelLink);
Base::ClearChangesMask(Customizations);
+ Base::ClearChangesMask(QaCustomizations);
Base::ClearChangesMask(QuestSessionQuestLog);
Base::ClearChangesMask(ArenaCooldowns);
Base::ClearChangesMask(VisualItemReplacements);
Base::ClearChangesMask(DuelArbiter);
Base::ClearChangesMask(WowAccount);
+ Base::ClearChangesMask(BnetAccount);
+ Base::ClearChangesMask(GuildClubMemberID);
Base::ClearChangesMask(LootTargetGUID);
Base::ClearChangesMask(PlayerFlags);
Base::ClearChangesMask(PlayerFlagsEx);
@@ -2528,14 +2702,16 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(CurrentBattlePetBreedQuality);
Base::ClearChangesMask(HonorLevel);
Base::ClearChangesMask(LogoutTime);
+ Base::ClearChangesMask(Name);
Base::ClearChangesMask(Field_B0);
Base::ClearChangesMask(Field_B4);
Base::ClearChangesMask(CurrentBattlePetSpeciesID);
- Base::ClearChangesMask(field_138);
Base::ClearChangesMask(CtrOptions);
Base::ClearChangesMask(CovenantID);
Base::ClearChangesMask(SoulbindID);
Base::ClearChangesMask(DungeonScore);
+ Base::ClearChangesMask(DeclinedNames);
+ Base::ClearChangesMask(PersonalTabard);
Base::ClearChangesMask(PartyType);
Base::ClearChangesMask(QuestLog);
Base::ClearChangesMask(VisibleItems);
@@ -3648,14 +3824,28 @@ void PersonalCraftingOrderCount::WriteCreate(ByteBuffer& data, Player const* own
void PersonalCraftingOrderCount::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
{
- data << int32(ProfessionID);
- data << uint32(Count);
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 2);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ data << int32(ProfessionID);
+ }
+ if (changesMask[1])
+ {
+ data << uint32(Count);
+ }
}
-bool PersonalCraftingOrderCount::operator==(PersonalCraftingOrderCount const& right) const
+void PersonalCraftingOrderCount::ClearChangesMask()
{
- return ProfessionID == right.ProfessionID
- && Count == right.Count;
+ Base::ClearChangesMask(ProfessionID);
+ Base::ClearChangesMask(Count);
+ _changesMask.ResetAll();
}
void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
@@ -3987,8 +4177,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << int32(OverrideSpellsID);
data << uint16(LootSpecID);
data << uint32(OverrideZonePVPType);
- data << BnetAccount;
- data << uint64(GuildClubMemberID);
for (uint32 i = 0; i < 5; ++i)
{
data << uint32(BagSlotFlags[i]);
@@ -5105,118 +5293,98 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[112])
{
- data << BnetAccount;
- }
- if (changesMask[113])
- {
- data << uint64(GuildClubMemberID);
- }
- if (changesMask[114])
- {
data << int32(Honor);
}
- if (changesMask[115])
+ if (changesMask[113])
{
data << int32(HonorNextLevel);
}
- if (changesMask[116])
+ if (changesMask[114])
{
data << int32(PerksProgramCurrency);
}
- if (changesMask[117])
+ if (changesMask[115])
{
data << uint8(NumBankSlots);
}
- if (changesMask[122])
+ if (changesMask[120])
{
data << int32(UiChromieTimeExpansionID);
}
- if (changesMask[123])
+ if (changesMask[121])
{
data << int32(TransportServerTime);
}
- if (changesMask[124])
+ if (changesMask[122])
{
data << uint32(WeeklyRewardsPeriodSinceOrigin);
}
- if (changesMask[125])
+ if (changesMask[123])
{
data << int16(DEBUGSoulbindConduitRank);
}
- if (changesMask[127])
+ if (changesMask[125])
{
data << uint32(ActiveCombatTraitConfigID);
}
- if (changesMask[128])
+ if (changesMask[126])
{
data << int32(ItemUpgradeHighOnehandWeaponItemID);
}
- if (changesMask[129])
+ if (changesMask[127])
{
data << int32(ItemUpgradeHighFingerItemID);
}
- if (changesMask[130])
+ if (changesMask[128])
{
data << float(ItemUpgradeHighFingerWatermark);
}
- if (changesMask[131])
+ if (changesMask[129])
{
data << int32(ItemUpgradeHighTrinketItemID);
}
- if (changesMask[132])
+ if (changesMask[130])
{
data << float(ItemUpgradeHighTrinketWatermark);
}
- if (changesMask[133])
+ if (changesMask[131])
{
data << uint64(LootHistoryInstanceID);
}
- }
- if (changesMask[134])
- {
- if (changesMask[136])
+ if (changesMask[133])
{
data << uint8(RequiredMountCapabilityFlags);
}
- }
- if (changesMask[102])
- {
data.WriteBits(QuestSession.has_value(), 1);
- }
- if (changesMask[134])
- {
data.WriteBits(PetStable.has_value(), 1);
}
data.FlushBits();
if (changesMask[102])
{
- if (changesMask[118])
+ if (changesMask[116])
{
ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[120])
+ if (changesMask[118])
{
if (QuestSession.has_value())
{
QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[119])
+ if (changesMask[117])
{
data << FrozenPerksVendorItem;
}
- if (changesMask[121])
+ if (changesMask[119])
{
Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[126])
+ if (changesMask[124])
{
data << DungeonScore;
}
- }
- if (changesMask[134])
- {
- if (changesMask[135])
+ if (changesMask[132])
{
if (PetStable.has_value())
{
@@ -5224,151 +5392,151 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[137])
+ if (changesMask[134])
{
for (uint32 i = 0; i < 227; ++i)
{
- if (changesMask[138 + i])
+ if (changesMask[135 + i])
{
data << InvSlots[i];
}
}
}
- if (changesMask[365])
+ if (changesMask[362])
{
for (uint32 i = 0; i < 240; ++i)
{
- if (changesMask[366 + i])
+ if (changesMask[363 + i])
{
data << uint64(ExploredZones[i]);
}
}
}
- if (changesMask[606])
+ if (changesMask[603])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[607 + i])
+ if (changesMask[604 + i])
{
RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[609])
+ if (changesMask[606])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[610 + i])
+ if (changesMask[607 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[617 + i])
+ if (changesMask[614 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[624 + i])
+ if (changesMask[621 + i])
{
data << float(ModDamageDonePercent[i]);
}
- if (changesMask[631 + i])
+ if (changesMask[628 + i])
{
data << float(ModHealingDonePercent[i]);
}
}
}
- if (changesMask[638])
+ if (changesMask[635])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[639 + i])
+ if (changesMask[636 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[642 + i])
+ if (changesMask[639 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[645])
+ if (changesMask[642])
{
for (uint32 i = 0; i < 12; ++i)
{
- if (changesMask[646 + i])
+ if (changesMask[643 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[658 + i])
+ if (changesMask[655 + i])
{
data << int64(BuybackTimestamp[i]);
}
}
}
- if (changesMask[670])
+ if (changesMask[667])
{
for (uint32 i = 0; i < 32; ++i)
{
- if (changesMask[671 + i])
+ if (changesMask[668 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[703])
+ if (changesMask[700])
{
for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[704 + i])
+ if (changesMask[701 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[708])
+ if (changesMask[705])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[709 + i])
+ if (changesMask[706 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[711])
+ if (changesMask[708])
{
for (uint32 i = 0; i < 5; ++i)
{
- if (changesMask[712 + i])
+ if (changesMask[709 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[717])
+ if (changesMask[714])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[718 + i])
+ if (changesMask[715 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[725])
+ if (changesMask[722])
{
for (uint32 i = 0; i < 875; ++i)
{
- if (changesMask[726 + i])
+ if (changesMask[723 + i])
{
data << uint64(QuestCompleted[i]);
}
}
}
- if (changesMask[1601])
+ if (changesMask[1598])
{
for (uint32 i = 0; i < 17; ++i)
{
- if (changesMask[1602 + i])
+ if (changesMask[1599 + i])
{
data << float(ItemUpgradeHighWatermark[i]);
}
@@ -5484,8 +5652,6 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(OverrideSpellsID);
Base::ClearChangesMask(LootSpecID);
Base::ClearChangesMask(OverrideZonePVPType);
- Base::ClearChangesMask(BnetAccount);
- Base::ClearChangesMask(GuildClubMemberID);
Base::ClearChangesMask(Honor);
Base::ClearChangesMask(HonorNextLevel);
Base::ClearChangesMask(PerksProgramCurrency);
@@ -6290,6 +6456,7 @@ void SceneObjectData::ClearChangesMask()
void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << int32(ConversationLineID);
+ data << int32(BroadcastTextID);
data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, owner, receiver));
data << int32(UiCameraID);
data << uint8(ActorIndex);
@@ -6300,6 +6467,7 @@ void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner,
void ConversationLine::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const
{
data << int32(ConversationLineID);
+ data << int32(BroadcastTextID);
data << uint32(ViewerDependentValue<StartTimeTag>::GetValue(this, owner, receiver));
data << int32(UiCameraID);
data << uint8(ActorIndex);
@@ -6310,6 +6478,7 @@ void ConversationLine::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Con
bool ConversationLine::operator==(ConversationLine const& right) const
{
return ConversationLineID == right.ConversationLineID
+ && BroadcastTextID == right.BroadcastTextID
&& StartTime == right.StartTime
&& UiCameraID == right.UiCameraID
&& ActorIndex == right.ActorIndex
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 1b5fe5782ce..96eb02620b3 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -233,12 +233,13 @@ struct UnitChannel : public IsUpdateFieldStructureTag
bool operator!=(UnitChannel const& right) const { return !(*this == right); }
};
-struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<5>
+struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<6>
{
UpdateField<int32, 0, 1> ItemID;
UpdateField<int32, 0, 2> SecondaryItemModifiedAppearanceID;
- UpdateField<uint16, 0, 3> ItemAppearanceModID;
- UpdateField<uint16, 0, 4> ItemVisual;
+ UpdateField<int32, 0, 3> ConditionalItemAppearanceID;
+ UpdateField<uint16, 0, 4> ItemAppearanceModID;
+ UpdateField<uint16, 0, 5> ItemVisual;
void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const;
@@ -462,49 +463,76 @@ struct CTROptions : public IsUpdateFieldStructureTag
bool operator!=(CTROptions const& right) const { return !(*this == right); }
};
-struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<264>
+struct DeclinedNames : public IsUpdateFieldStructureTag, public HasChangesMask<6>
+{
+ UpdateFieldArray<std::string, 5, 0, 1> Name;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct CustomTabardInfo : public IsUpdateFieldStructureTag, public HasChangesMask<6>
+{
+ UpdateField<int32, 0, 1> EmblemStyle;
+ UpdateField<int32, 0, 2> EmblemColor;
+ UpdateField<int32, 0, 3> BorderStyle;
+ UpdateField<int32, 0, 4> BorderColor;
+ UpdateField<int32, 0, 5> BackgroundColor;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<269>
{
UpdateField<bool, 0, 1> HasQuestSession;
UpdateField<bool, 0, 2> HasLevelLink;
DynamicUpdateField<UF::ChrCustomizationChoice, 0, 3> Customizations;
- DynamicUpdateField<UF::QuestLog, 0, 4> QuestSessionQuestLog;
- DynamicUpdateField<UF::ArenaCooldown, 0, 5> ArenaCooldowns;
- DynamicUpdateField<int32, 0, 6> VisualItemReplacements;
- UpdateField<ObjectGuid, 0, 7> DuelArbiter;
- UpdateField<ObjectGuid, 0, 8> WowAccount;
- UpdateField<ObjectGuid, 0, 9> LootTargetGUID;
- UpdateField<uint32, 0, 10> PlayerFlags;
- UpdateField<uint32, 0, 11> PlayerFlagsEx;
- UpdateField<uint32, 0, 12> GuildRankID;
- UpdateField<uint32, 0, 13> GuildDeleteDate;
- UpdateField<int32, 0, 14> GuildLevel;
- UpdateField<uint8, 0, 15> NativeSex;
- UpdateField<uint8, 0, 16> Inebriation;
- UpdateField<uint8, 0, 17> PvpTitle;
- UpdateField<uint8, 0, 18> ArenaFaction;
- UpdateField<uint32, 0, 19> DuelTeam;
- UpdateField<int32, 0, 20> GuildTimeStamp;
- UpdateField<int32, 0, 21> PlayerTitle;
- UpdateField<int32, 0, 22> FakeInebriation;
- UpdateField<uint32, 0, 23> VirtualPlayerRealm;
- UpdateField<uint32, 0, 24> CurrentSpecID;
- UpdateField<int32, 0, 25> TaxiMountAnimKitID;
- UpdateField<uint8, 0, 26> CurrentBattlePetBreedQuality;
- UpdateField<int32, 0, 27> HonorLevel;
- UpdateField<int64, 0, 28> LogoutTime;
- UpdateField<int32, 0, 29> Field_B0;
- UpdateField<int32, 0, 30> Field_B4;
- UpdateField<int32, 0, 31> CurrentBattlePetSpeciesID;
- UpdateField<ObjectGuid, 32, 33> field_138;
- UpdateField<UF::CTROptions, 32, 34> CtrOptions;
- UpdateField<int32, 32, 35> CovenantID;
- UpdateField<int32, 32, 36> SoulbindID;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 37> DungeonScore;
- UpdateFieldArray<uint8, 2, 38, 39> PartyType;
- UpdateFieldArray<UF::QuestLog, 175, 41, 42> QuestLog;
- UpdateFieldArray<UF::VisibleItem, 19, 217, 218> VisibleItems;
- UpdateFieldArray<float, 6, 237, 238> AvgItemLevel;
- UpdateFieldArray<uint32, 19, 244, 245> Field_3120;
+ DynamicUpdateField<UF::ChrCustomizationChoice, 0, 4> QaCustomizations;
+ DynamicUpdateField<UF::QuestLog, 0, 5> QuestSessionQuestLog;
+ DynamicUpdateField<UF::ArenaCooldown, 0, 6> ArenaCooldowns;
+ DynamicUpdateField<int32, 0, 7> VisualItemReplacements;
+ UpdateField<ObjectGuid, 0, 8> DuelArbiter;
+ UpdateField<ObjectGuid, 0, 9> WowAccount;
+ UpdateField<ObjectGuid, 0, 10> BnetAccount;
+ UpdateField<uint64, 0, 11> GuildClubMemberID;
+ UpdateField<ObjectGuid, 0, 12> LootTargetGUID;
+ UpdateField<uint32, 0, 13> PlayerFlags;
+ UpdateField<uint32, 0, 14> PlayerFlagsEx;
+ UpdateField<uint32, 0, 15> GuildRankID;
+ UpdateField<uint32, 0, 16> GuildDeleteDate;
+ UpdateField<int32, 0, 17> GuildLevel;
+ UpdateField<uint8, 0, 18> NativeSex;
+ UpdateField<uint8, 0, 19> Inebriation;
+ UpdateField<uint8, 0, 20> PvpTitle;
+ UpdateField<uint8, 0, 21> ArenaFaction;
+ UpdateField<uint32, 0, 22> DuelTeam;
+ UpdateField<int32, 0, 23> GuildTimeStamp;
+ UpdateField<int32, 0, 24> PlayerTitle;
+ UpdateField<int32, 0, 25> FakeInebriation;
+ UpdateField<uint32, 0, 26> VirtualPlayerRealm;
+ UpdateField<uint32, 0, 27> CurrentSpecID;
+ UpdateField<int32, 0, 28> TaxiMountAnimKitID;
+ UpdateField<uint8, 0, 29> CurrentBattlePetBreedQuality;
+ UpdateField<int32, 0, 30> HonorLevel;
+ UpdateField<int64, 0, 31> LogoutTime;
+ UpdateField<std::string, 32, 33> Name;
+ UpdateField<int32, 32, 34> Field_B0;
+ UpdateField<int32, 32, 35> Field_B4;
+ UpdateField<int32, 32, 36> CurrentBattlePetSpeciesID;
+ UpdateField<UF::CTROptions, 32, 37> CtrOptions;
+ UpdateField<int32, 32, 38> CovenantID;
+ UpdateField<int32, 32, 39> SoulbindID;
+ UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 40> DungeonScore;
+ OptionalUpdateField<UF::DeclinedNames, 32, 41> DeclinedNames;
+ UpdateField<UF::CustomTabardInfo, 32, 42> PersonalTabard;
+ UpdateFieldArray<uint8, 2, 43, 44> PartyType;
+ UpdateFieldArray<UF::QuestLog, 175, 46, 47> QuestLog;
+ UpdateFieldArray<UF::VisibleItem, 19, 222, 223> VisibleItems;
+ UpdateFieldArray<float, 6, 242, 243> AvgItemLevel;
+ UpdateFieldArray<uint32, 19, 249, 250> Field_3120;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
@@ -770,15 +798,14 @@ struct CraftingOrder : public IsUpdateFieldStructureTag, public HasChangesMask<4
void ClearChangesMask();
};
-struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag
+struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag, public HasChangesMask<3>
{
- int32 ProfessionID;
- uint32 Count;
+ UpdateField<int32, 0, 1> ProfessionID;
+ UpdateField<uint32, 0, 2> Count;
void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
- bool operator==(PersonalCraftingOrderCount const& right) const;
- bool operator!=(PersonalCraftingOrderCount const& right) const { return !(*this == right); }
+ void ClearChangesMask();
};
struct CategoryCooldownMod : public IsUpdateFieldStructureTag
@@ -849,7 +876,7 @@ struct Research : public IsUpdateFieldStructureTag
bool operator!=(Research const& right) const { return !(*this == right); }
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1619>
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1616>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BackpackSellJunkDisabled;
@@ -956,48 +983,46 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<int32, 102, 109> OverrideSpellsID;
UpdateField<uint16, 102, 110> LootSpecID;
UpdateField<uint32, 102, 111> OverrideZonePVPType;
- UpdateField<ObjectGuid, 102, 112> BnetAccount;
- UpdateField<uint64, 102, 113> GuildClubMemberID;
- UpdateField<int32, 102, 114> Honor;
- UpdateField<int32, 102, 115> HonorNextLevel;
- UpdateField<int32, 102, 116> PerksProgramCurrency;
- UpdateField<uint8, 102, 117> NumBankSlots;
- UpdateField<UF::ResearchHistory, 102, 118> ResearchHistory;
- UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 119> FrozenPerksVendorItem;
- UpdateField<UF::ActivePlayerUnk901, 102, 121> Field_1410;
- OptionalUpdateField<UF::QuestSession, 102, 120> QuestSession;
- UpdateField<int32, 102, 122> UiChromieTimeExpansionID;
- UpdateField<int32, 102, 123> TransportServerTime;
- UpdateField<uint32, 102, 124> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
- UpdateField<int16, 102, 125> DEBUGSoulbindConduitRank;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 126> DungeonScore;
- UpdateField<uint32, 102, 127> ActiveCombatTraitConfigID;
- UpdateField<int32, 102, 128> ItemUpgradeHighOnehandWeaponItemID;
- UpdateField<int32, 102, 129> ItemUpgradeHighFingerItemID;
- UpdateField<float, 102, 130> ItemUpgradeHighFingerWatermark;
- UpdateField<int32, 102, 131> ItemUpgradeHighTrinketItemID;
- UpdateField<float, 102, 132> ItemUpgradeHighTrinketWatermark;
- UpdateField<uint64, 102, 133> LootHistoryInstanceID;
- OptionalUpdateField<UF::StableInfo, 134, 135> PetStable;
- UpdateField<uint8, 134, 136> RequiredMountCapabilityFlags;
- UpdateFieldArray<ObjectGuid, 227, 137, 138> InvSlots;
- UpdateFieldArray<uint64, 240, 365, 366> ExploredZones;
- UpdateFieldArray<UF::RestInfo, 2, 606, 607> RestInfo;
- UpdateFieldArray<int32, 7, 609, 610> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 609, 617> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 609, 624> ModDamageDonePercent;
- UpdateFieldArray<float, 7, 609, 631> ModHealingDonePercent;
- UpdateFieldArray<float, 3, 638, 639> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 638, 642> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 645, 646> BuybackPrice;
- UpdateFieldArray<int64, 12, 645, 658> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 670, 671> CombatRatings;
- UpdateFieldArray<uint32, 4, 703, 704> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 708, 709> ProfessionSkillLine;
- UpdateFieldArray<uint32, 5, 711, 712> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 717, 718> BankBagSlotFlags;
- UpdateFieldArray<uint64, 875, 725, 726> QuestCompleted;
- UpdateFieldArray<float, 17, 1601, 1602> ItemUpgradeHighWatermark;
+ UpdateField<int32, 102, 112> Honor;
+ UpdateField<int32, 102, 113> HonorNextLevel;
+ UpdateField<int32, 102, 114> PerksProgramCurrency;
+ UpdateField<uint8, 102, 115> NumBankSlots;
+ UpdateField<UF::ResearchHistory, 102, 116> ResearchHistory;
+ UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 117> FrozenPerksVendorItem;
+ UpdateField<UF::ActivePlayerUnk901, 102, 119> Field_1410;
+ OptionalUpdateField<UF::QuestSession, 102, 118> QuestSession;
+ UpdateField<int32, 102, 120> UiChromieTimeExpansionID;
+ UpdateField<int32, 102, 121> TransportServerTime;
+ UpdateField<uint32, 102, 122> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
+ UpdateField<int16, 102, 123> DEBUGSoulbindConduitRank;
+ UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 124> DungeonScore;
+ UpdateField<uint32, 102, 125> ActiveCombatTraitConfigID;
+ UpdateField<int32, 102, 126> ItemUpgradeHighOnehandWeaponItemID;
+ UpdateField<int32, 102, 127> ItemUpgradeHighFingerItemID;
+ UpdateField<float, 102, 128> ItemUpgradeHighFingerWatermark;
+ UpdateField<int32, 102, 129> ItemUpgradeHighTrinketItemID;
+ UpdateField<float, 102, 130> ItemUpgradeHighTrinketWatermark;
+ UpdateField<uint64, 102, 131> LootHistoryInstanceID;
+ OptionalUpdateField<UF::StableInfo, 102, 132> PetStable;
+ UpdateField<uint8, 102, 133> RequiredMountCapabilityFlags;
+ UpdateFieldArray<ObjectGuid, 227, 134, 135> InvSlots;
+ UpdateFieldArray<uint64, 240, 362, 363> ExploredZones;
+ UpdateFieldArray<UF::RestInfo, 2, 603, 604> RestInfo;
+ UpdateFieldArray<int32, 7, 606, 607> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 606, 614> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 606, 621> ModDamageDonePercent;
+ UpdateFieldArray<float, 7, 606, 628> ModHealingDonePercent;
+ UpdateFieldArray<float, 3, 635, 636> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 635, 639> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 642, 643> BuybackPrice;
+ UpdateFieldArray<int64, 12, 642, 655> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 667, 668> CombatRatings;
+ UpdateFieldArray<uint32, 4, 700, 701> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 705, 706> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 5, 708, 709> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 714, 715> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 875, 722, 723> QuestCompleted;
+ UpdateFieldArray<float, 17, 1598, 1599> ItemUpgradeHighWatermark;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
@@ -1151,6 +1176,7 @@ struct SceneObjectData : public IsUpdateFieldStructureTag, public HasChangesMask
struct ConversationLine : public IsUpdateFieldStructureTag
{
int32 ConversationLineID;
+ int32 BroadcastTextID;
uint32 StartTime;
struct StartTimeTag : ViewerDependentValueTag<uint32> {};
int32 UiCameraID;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index aa8c5596d8c..e587dd7e389 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -2411,6 +2411,8 @@ void Player::GiveLevel(uint8 level)
StartCriteria(CriteriaStartEvent::ReachLevel, level);
UpdateCriteria(CriteriaType::ReachLevel);
UpdateCriteria(CriteriaType::ActivelyReachLevel, level);
+ if (level > oldLevel)
+ UpdateCriteria(CriteriaType::GainLevels, level - oldLevel);
PushQuests();
@@ -14079,11 +14081,12 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId, bool showQues
case GossipOptionNpc::Binder:
case GossipOptionNpc::Banker:
case GossipOptionNpc::PetitionVendor:
- case GossipOptionNpc::TabardVendor:
+ case GossipOptionNpc::GuildTabardVendor:
case GossipOptionNpc::Auctioneer:
case GossipOptionNpc::Mailbox:
case GossipOptionNpc::Transmogrify:
case GossipOptionNpc::AzeriteRespec:
+ case GossipOptionNpc::PersonalTabardVendor:
break; // No checks
case GossipOptionNpc::CemeterySelect:
canTalk = false; // Deprecated
@@ -14302,7 +14305,7 @@ void Player::OnGossipSelect(WorldObject* source, int32 gossipOptionId, uint32 me
{
PlayerInteractionType::None, PlayerInteractionType::Vendor, PlayerInteractionType::TaxiNode,
PlayerInteractionType::Trainer, PlayerInteractionType::SpiritHealer, PlayerInteractionType::Binder,
- PlayerInteractionType::Banker, PlayerInteractionType::PetitionVendor, PlayerInteractionType::TabardVendor,
+ PlayerInteractionType::Banker, PlayerInteractionType::PetitionVendor, PlayerInteractionType::GuildTabardVendor,
PlayerInteractionType::BattleMaster, PlayerInteractionType::Auctioneer, PlayerInteractionType::TalentMaster,
PlayerInteractionType::StableMaster, PlayerInteractionType::None, PlayerInteractionType::GuildBanker,
PlayerInteractionType::None, PlayerInteractionType::None, PlayerInteractionType::None,
@@ -14317,7 +14320,8 @@ void Player::OnGossipSelect(WorldObject* source, int32 gossipOptionId, uint32 me
PlayerInteractionType::LegendaryCrafting, PlayerInteractionType::NewPlayerGuide, PlayerInteractionType::LegendaryCrafting,
PlayerInteractionType::Renown, PlayerInteractionType::BlackMarketAuctioneer, PlayerInteractionType::PerksProgramVendor,
PlayerInteractionType::ProfessionsCraftingOrder, PlayerInteractionType::Professions, PlayerInteractionType::ProfessionsCustomerOrder,
- PlayerInteractionType::TraitSystem, PlayerInteractionType::BarbersChoice, PlayerInteractionType::MajorFactionRenown
+ PlayerInteractionType::TraitSystem, PlayerInteractionType::BarbersChoice, PlayerInteractionType::MajorFactionRenown,
+ PlayerInteractionType::PersonalTabardVendor
};
PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[AsUnderlyingType(gossipOptionNpc)];
@@ -17218,9 +17222,9 @@ void Player::_LoadDeclinedNames(PreparedQueryResult result)
if (!result)
return;
- m_declinedname = std::make_unique<DeclinedName>();
+ auto declinedNames = m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::DeclinedNames, 0);
for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
- m_declinedname->name[i] = (*result)[i].GetString();
+ SetUpdateFieldValue(declinedNames.ModifyValue(&UF::DeclinedNames::Name, i), (*result)[i].GetString());
}
void Player::_LoadArenaTeamInfo(PreparedQueryResult result)
@@ -17435,7 +17439,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
// "resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, summonedPetNumber, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, "
// "totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, "
// "health, power1, power2, power3, power4, power5, power6, power7, power8, power9, power10, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, "
- // "raidDifficulty, legacyRaidDifficulty, fishingSteps, honor, honorLevel, honorRestState, honorRestBonus, numRespecs "
+ // "raidDifficulty, legacyRaidDifficulty, fishingSteps, honor, honorLevel, honorRestState, honorRestBonus, numRespecs, "
+ // "personalTabardEmblemStyle, personalTabardEmblemColor, personalTabardBorderStyle, personalTabardBorderColor, personalTabardBackgroundColor "
// "FROM characters c LEFT JOIN character_fishingsteps cfs ON c.guid = cfs.guid WHERE c.guid = ?", CONNECTION_ASYNC);
ObjectGuid::LowType guid;
@@ -17504,8 +17509,13 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
PlayerRestState honorRestState;
float honorRestBonus;
uint8 numRespecs;
+ int32 personalTabardEmblemStyle;
+ int32 personalTabardEmblemColor;
+ int32 personalTabardBorderStyle;
+ int32 personalTabardBorderColor;
+ int32 personalTabardBackgroundColor;
- PlayerLoadData(Field* fields)
+ explicit PlayerLoadData(Field const* fields)
{
std::size_t i = 0;
guid = fields[i++].GetUInt64();
@@ -17575,6 +17585,11 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
honorRestState = PlayerRestState(fields[i++].GetUInt8());
honorRestBonus = fields[i++].GetFloat();
numRespecs = fields[i++].GetUInt8();
+ personalTabardEmblemStyle = fields[i++].GetInt32();
+ personalTabardEmblemColor = fields[i++].GetInt32();
+ personalTabardBorderStyle = fields[i++].GetInt32();
+ personalTabardBorderColor = fields[i++].GetInt32();
+ personalTabardBackgroundColor = fields[i++].GetInt32();
}
} fields(result->Fetch());
@@ -17608,8 +17623,10 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
return false;
}
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Name), m_name);
+
SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::WowAccount), GetSession()->GetAccountGUID());
- SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BnetAccount), GetSession()->GetBattlenetAccountGUID());
+ SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::BnetAccount), GetSession()->GetBattlenetAccountGUID());
if (!IsValidGender(fields.gender))
{
@@ -18186,6 +18203,9 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol
}
}
+ SetPersonalTabard(fields.personalTabardEmblemStyle, fields.personalTabardEmblemColor, fields.personalTabardBorderStyle,
+ fields.personalTabardBorderColor, fields.personalTabardBackgroundColor);
+
TC_LOG_DEBUG("entities.player.loading", "Player::LoadFromDB: The value of player '{}' after load item and aura is: ", m_name);
outDebugValues();
@@ -22244,6 +22264,16 @@ void Player::RemovePetitionsAndSigns(ObjectGuid guid)
sPetitionMgr->RemovePetitionsByOwner(guid);
}
+void Player::SetPersonalTabard(uint32 style, uint32 color, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor)
+{
+ auto personalTabard = m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PersonalTabard);
+ SetUpdateFieldValue(personalTabard.ModifyValue(&UF::CustomTabardInfo::EmblemStyle), style);
+ SetUpdateFieldValue(personalTabard.ModifyValue(&UF::CustomTabardInfo::EmblemColor), color);
+ SetUpdateFieldValue(personalTabard.ModifyValue(&UF::CustomTabardInfo::BorderStyle), borderStyle);
+ SetUpdateFieldValue(personalTabard.ModifyValue(&UF::CustomTabardInfo::BorderColor), borderColor);
+ SetUpdateFieldValue(personalTabard.ModifyValue(&UF::CustomTabardInfo::BackgroundColor), backgroundColor);
+}
+
void Player::LeaveAllArenaTeams(ObjectGuid guid)
{
CharacterCacheEntry const* characterInfo = sCharacterCache->GetCharacterCacheByGuid(guid);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 6709fa70617..9f80a9af8c7 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -117,6 +117,7 @@ namespace WorldPackets
namespace Character
{
struct CharacterCreateInfo;
+ struct CustomTabardInfo;
}
namespace Movement
@@ -1984,6 +1985,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
Guild const* GetGuild() const;
ObjectGuid::LowType GetGuildIdInvited() const { return m_GuildIdInvited; }
static void RemovePetitionsAndSigns(ObjectGuid guid);
+ void SetPersonalTabard(uint32 style, uint32 color, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor);
// Arena Team
void SetInArenaTeam(uint32 ArenaTeamId, uint8 slot, uint8 type);
@@ -2625,7 +2627,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool isAllowedToLoot(Creature const* creature) const;
- DeclinedName const* GetDeclinedNames() const { return m_declinedname.get(); }
+ UF::DeclinedNames const* GetDeclinedNames() const { return m_playerData->DeclinedNames.has_value() ? &*m_playerData->DeclinedNames : nullptr; }
uint8 GetRunesState() const;
uint32 GetRuneCooldown(uint8 index) const { return m_runes->Cooldown[index]; }
uint32 GetRuneBaseCooldown() const;
@@ -3110,7 +3112,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
WorldLocation m_recall_location;
uint32 m_recall_instanceId;
- std::unique_ptr<DeclinedName> m_declinedname;
std::unique_ptr<Runes> m_runes;
EquipmentSetContainer _equipmentSets;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 9c0a9c42bfa..d16798ec6a5 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12072,27 +12072,11 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const
}
}
- uint32 modelid = 0;
SpellShapeshiftFormEntry const* formEntry = sSpellShapeshiftFormStore.LookupEntry(form);
- if (formEntry && formEntry->CreatureDisplayID[0])
- {
- // Take the alliance modelid as default
- if (GetTypeId() != TYPEID_PLAYER)
- return formEntry->CreatureDisplayID[0];
- else
- {
- if (Player::TeamForRace(GetRace()) == ALLIANCE)
- modelid = formEntry->CreatureDisplayID[0];
- else
- modelid = formEntry->CreatureDisplayID[1];
+ if (formEntry && formEntry->CreatureDisplayID)
+ return formEntry->CreatureDisplayID;
- // If the player is horde but there are no values for the horde modelid - take the alliance modelid
- if (!modelid && Player::TeamForRace(GetRace()) == HORDE)
- modelid = formEntry->CreatureDisplayID[0];
- }
- }
-
- return modelid;
+ return 0;
}
void Unit::JumpTo(float speedXY, float speedZ, float angle, Optional<Position> dest)
@@ -13821,3 +13805,9 @@ std::string Unit::GetDebugInfo() const
return sstr.str();
}
+
+DeclinedName::DeclinedName(UF::DeclinedNames const& uf)
+{
+ for (std::size_t i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
+ name[i] = uf.Name[i];
+}
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index a1f727f14ce..92d23e7a8a9 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -22,6 +22,11 @@
#include "EnumFlag.h"
#include <string>
+namespace UF
+{
+struct DeclinedNames;
+}
+
#define MIN_MELEE_REACH 2.0f
#define NOMINAL_MELEE_RANGE 5.0f
#define MELEE_RANGE (NOMINAL_MELEE_RANGE - MIN_MELEE_REACH * 2) //center to center for players
@@ -342,6 +347,7 @@ enum NPCFlags2 : uint32
UNIT_NPC_FLAG_2_AZERITE_RESPEC = 0x00004000, // TITLE is azerite respec
UNIT_NPC_FLAG_2_ISLANDS_QUEUE = 0x00008000, // TITLE is islands queue
UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION = 0x00010000,
+ UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER= 0x00200000, // TITLE is personal tabard designer
};
DEFINE_ENUM_FLAG(NPCFlags2);
@@ -469,8 +475,11 @@ enum HitInfo
#define MAX_DECLINED_NAME_CASES 5
-struct DeclinedName
+struct TC_GAME_API DeclinedName
{
+ DeclinedName() = default;
+ DeclinedName(UF::DeclinedNames const& uf);
+
std::string name[MAX_DECLINED_NAME_CASES];
};
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 227fee420bf..fd94688423e 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -738,12 +738,11 @@ void EmblemInfo::ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet)
m_backgroundColor = packet.Bg;
}
-bool EmblemInfo::ValidateEmblemColors() const
+bool EmblemInfo::ValidateEmblemColors(uint32 /*style*/, uint32 color, uint32 /*borderStyle*/, uint32 borderColor, uint32 backgroundColor)
{
- return sGuildColorBackgroundStore.LookupEntry(m_backgroundColor) &&
- sGuildColorBorderStore.LookupEntry(m_borderColor) &&
- sGuildColorEmblemStore.LookupEntry(m_color);
-
+ return sGuildColorBackgroundStore.LookupEntry(backgroundColor) &&
+ sGuildColorBorderStore.LookupEntry(borderColor) &&
+ sGuildColorEmblemStore.LookupEntry(color);
}
bool EmblemInfo::LoadFromDB(Field* fields)
diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h
index eb33be36bcb..bdbd05503c4 100644
--- a/src/server/game/Guilds/Guild.h
+++ b/src/server/game/Guilds/Guild.h
@@ -256,7 +256,11 @@ class TC_GAME_API EmblemInfo
bool LoadFromDB(Field* fields);
void SaveToDB(ObjectGuid::LowType guildId) const;
void ReadPacket(WorldPackets::Guild::SaveGuildEmblem& packet);
- bool ValidateEmblemColors() const;
+ bool ValidateEmblemColors() const
+ {
+ return ValidateEmblemColors(m_style, m_color, m_borderStyle, m_borderColor, m_backgroundColor);
+ }
+ static bool ValidateEmblemColors(uint32 style, uint32 color, uint32 borderStyle, uint32 borderColor, uint32 backgroundColor);
uint32 GetStyle() const { return m_style; }
uint32 GetColor() const { return m_color; }
diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp
index 87ce5123100..e03cd9c51b1 100644
--- a/src/server/game/Handlers/BattleGroundHandler.cpp
+++ b/src/server/game/Handlers/BattleGroundHandler.cpp
@@ -636,14 +636,17 @@ void WorldSession::HandleRequestRatedPvpInfo(WorldPackets::Battleground::Request
void WorldSession::HandleGetPVPOptionsEnabled(WorldPackets::Battleground::GetPVPOptionsEnabled& /*getPvPOptionsEnabled*/)
{
- // This packet is completely irrelevant, it triggers PVP_TYPES_ENABLED lua event but that is not handled in interface code as of 6.1.2
WorldPackets::Battleground::PVPOptionsEnabled pvpOptionsEnabled;
+ pvpOptionsEnabled.RatedBattlegrounds = false;
+ pvpOptionsEnabled.PugBattlegrounds = true;
+ pvpOptionsEnabled.WargameBattlegrounds = false;
pvpOptionsEnabled.WargameArenas = false;
pvpOptionsEnabled.RatedArenas = false;
- pvpOptionsEnabled.WargameBattlegrounds = false;
pvpOptionsEnabled.ArenaSkirmish = false;
- pvpOptionsEnabled.PugBattlegrounds = true;
- pvpOptionsEnabled.RatedBattlegrounds = false;
+ pvpOptionsEnabled.SoloShuffle = false;
+ pvpOptionsEnabled.RatedSoloShuffle = false;
+ pvpOptionsEnabled.BattlegroundBlitz = false;
+ pvpOptionsEnabled.RatedBattlegroundBlitz = false;
SendPacket(pvpOptionsEnabled.Write());
}
diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp
index 346cc303315..209babfec10 100644
--- a/src/server/game/Handlers/CalendarHandler.cpp
+++ b/src/server/game/Handlers/CalendarHandler.cpp
@@ -61,9 +61,9 @@ void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGet
packet.ServerTime = currTime;
CalendarInviteStore playerInvites = sCalendarMgr->GetPlayerInvites(guid);
- for (auto const& invite : playerInvites)
+ for (CalendarInvite const* invite : playerInvites)
{
- WorldPackets::Calendar::CalendarSendCalendarInviteInfo inviteInfo;
+ WorldPackets::Calendar::CalendarSendCalendarInviteInfo& inviteInfo = packet.Invites.emplace_back();
inviteInfo.EventID = invite->GetEventId();
inviteInfo.InviteID = invite->GetInviteId();
inviteInfo.InviterGuid = invite->GetSenderGUID();
@@ -71,14 +71,12 @@ void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGet
inviteInfo.Moderator = invite->GetRank();
if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(invite->GetEventId()))
inviteInfo.InviteType = calendarEvent->IsGuildEvent() && calendarEvent->GetGuildId() == _player->GetGuildId();
-
- packet.Invites.push_back(inviteInfo);
}
CalendarEventStore playerEvents = sCalendarMgr->GetPlayerEvents(guid);
- for (auto const& event : playerEvents)
+ for (CalendarEvent const* event : playerEvents)
{
- WorldPackets::Calendar::CalendarSendCalendarEventInfo eventInfo;
+ WorldPackets::Calendar::CalendarSendCalendarEventInfo& eventInfo = packet.Events.emplace_back();
eventInfo.EventID = event->GetEventId();
eventInfo.Date = event->GetDate();
eventInfo.EventClubID = event->GetGuildId();
@@ -87,20 +85,15 @@ void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGet
eventInfo.Flags = event->GetFlags();
eventInfo.OwnerGuid = event->GetOwnerGUID();
eventInfo.TextureID = event->GetTextureId();
-
- packet.Events.push_back(eventInfo);
}
for (InstanceLock const* lock : sInstanceLockMgr.GetInstanceLocksForPlayer(_player->GetGUID()))
{
- WorldPackets::Calendar::CalendarSendCalendarRaidLockoutInfo lockoutInfo;
-
+ WorldPackets::Calendar::CalendarSendCalendarRaidLockoutInfo& lockoutInfo = packet.RaidLockouts.emplace_back();
lockoutInfo.MapID = lock->GetMapId();
lockoutInfo.DifficultyID = lock->GetDifficultyId();
lockoutInfo.ExpireTime = int32(std::max(std::chrono::duration_cast<Seconds>(lock->GetEffectiveExpiryTime() - GameTime::GetSystemTime()).count(), SI64LIT(0)));
lockoutInfo.InstanceID = lock->GetInstanceId();
-
- packet.RaidLockouts.push_back(lockoutInfo);
}
SendPacket(packet.Write());
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 1472ce1fea0..d499ba13c11 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -403,10 +403,7 @@ void WorldSession::HandleCharEnum(CharacterDatabaseQueryHolder const& holder)
do
{
Field* fields = customizationsResult->Fetch();
- std::vector<UF::ChrCustomizationChoice>& customizationsForCharacter = customizations[fields[0].GetUInt64()];
-
- customizationsForCharacter.emplace_back();
- UF::ChrCustomizationChoice& choice = customizationsForCharacter.back();
+ UF::ChrCustomizationChoice& choice = customizations[fields[0].GetUInt64()].emplace_back();
choice.ChrCustomizationOptionID = fields[1].GetUInt32();
choice.ChrCustomizationChoiceID = fields[2].GetUInt32();
@@ -457,8 +454,6 @@ void WorldSession::HandleCharEnum(CharacterDatabaseQueryHolder const& holder)
while (result->NextRow() && charEnum.Characters.size() < MAX_CHARACTERS_PER_REALM);
}
- charEnum.IsAlliedRacesCreationAllowed = CanAccessAlliedRaces();
-
for (std::pair<uint8 const, RaceUnlockRequirement> const& requirement : sObjectMgr->GetRaceUnlockRequirements())
{
WorldPackets::Character::EnumCharactersResult::RaceUnlock raceUnlock;
@@ -1166,9 +1161,8 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder)
// Send MOTD
{
- WorldPackets::System::MOTD motd;
- motd.Text = &sWorld->GetMotd();
- SendPacket(motd.Write());
+ for (std::string const& motdLine : sWorld->GetMotd())
+ sWorld->SendServerMessage(SERVER_MSG_STRING, motdLine, pCurrChar);
}
SendSetTimeZoneInformation();
@@ -2797,6 +2791,29 @@ void WorldSession::HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCha
}));
}
+void WorldSession::HandleSavePersonalEmblem(WorldPackets::Character::SavePersonalEmblem const& savePersonalEmblem)
+{
+ if (!_player->GetNPCIfCanInteractWith(savePersonalEmblem.Vendor, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER))
+ {
+ SendPacket(WorldPackets::Character::PlayerSavePersonalEmblem(ERR_GUILDEMBLEM_INVALIDVENDOR).Write());
+ return;
+ }
+
+ if (!EmblemInfo::ValidateEmblemColors(savePersonalEmblem.PersonalTabard.EmblemStyle, savePersonalEmblem.PersonalTabard.EmblemColor,
+ savePersonalEmblem.PersonalTabard.BorderStyle, savePersonalEmblem.PersonalTabard.BorderColor,
+ savePersonalEmblem.PersonalTabard.BackgroundColor))
+ {
+ SendPacket(WorldPackets::Character::PlayerSavePersonalEmblem(ERR_GUILDEMBLEM_INVALID_TABARD_COLORS).Write());
+ return;
+ }
+
+ _player->SetPersonalTabard(savePersonalEmblem.PersonalTabard.EmblemStyle, savePersonalEmblem.PersonalTabard.EmblemColor,
+ savePersonalEmblem.PersonalTabard.BorderStyle, savePersonalEmblem.PersonalTabard.BorderColor,
+ savePersonalEmblem.PersonalTabard.BackgroundColor);
+
+ SendPacket(WorldPackets::Character::PlayerSavePersonalEmblem(ERR_GUILDEMBLEM_SUCCESS).Write());
+}
+
void WorldSession::SendCharCreate(ResponseCodes result, ObjectGuid const& guid /*= ObjectGuid::Empty*/)
{
WorldPackets::Character::CreateChar response;
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 0e23cc32c53..b8a0b8aa7ac 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -39,27 +39,48 @@
#include "Trainer.h"
#include "WorldPacket.h"
-void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& packet)
+enum class TabardVendorType : int32
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE);
+ Guild = 0,
+ Personal = 1,
+};
+
+void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::TabardVendorActivate const& tabardVendorActivate)
+{
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(tabardVendorActivate.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
- TC_LOG_DEBUG("network", "WORLD: HandleTabardVendorActivateOpcode - {} not found or you can not interact with him.", packet.Unit.ToString());
+ TC_LOG_DEBUG("network", "WORLD: HandleTabardVendorActivateOpcode - {} not found or you can not interact with him.", tabardVendorActivate.Vendor.ToString());
return;
}
+ TabardVendorType type = TabardVendorType(tabardVendorActivate.Type);
+ if (type != TabardVendorType::Guild && type != TabardVendorType::Personal)
+ return;
+
// remove fake death
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
- SendTabardVendorActivate(packet.Unit);
+ SendTabardVendorActivate(tabardVendorActivate.Vendor, TabardVendorType(tabardVendorActivate.Type));
}
-void WorldSession::SendTabardVendorActivate(ObjectGuid guid)
+void WorldSession::SendTabardVendorActivate(ObjectGuid guid, TabardVendorType type)
{
WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
npcInteraction.Npc = guid;
- npcInteraction.InteractionType = PlayerInteractionType::TabardVendor;
+ npcInteraction.InteractionType = [&]
+ {
+ switch (type)
+ {
+ case TabardVendorType::Guild:
+ return PlayerInteractionType::GuildTabardVendor;
+ case TabardVendorType::Personal:
+ return PlayerInteractionType::PersonalTabardVendor;
+ default:
+ ABORT_MSG("Unsupported tabard vendor type %d", AsUnderlyingType(type));
+ }
+ }();
npcInteraction.Success = true;
SendPacket(npcInteraction.Write());
}
diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h
index 2235fc1c6f9..3239de145ec 100644
--- a/src/server/game/Instances/InstanceScript.h
+++ b/src/server/game/Instances/InstanceScript.h
@@ -47,7 +47,7 @@ class Player;
class Unit;
struct DungeonEncounterEntry;
struct InstanceSpawnGroupInfo;
-enum class CriteriaType : uint8;
+enum class CriteriaType : int16;
enum class CriteriaStartEvent : uint8;
enum Difficulty : uint8;
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index dd891e78e2e..71dd99198c4 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -7757,293 +7757,295 @@ enum class GameError : uint32
ERR_ARENA_TEAM_PARTY_SIZE = 836,
ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 837,
ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 838,
- ERR_SOLO_SHUFFLE_MIN_ITEM_LEVEL = 839,
+ ERR_SOLO_MIN_ITEM_LEVEL = 839,
ERR_PVP_PLAYER_ABANDONED = 840,
- ERR_QUEST_FORCE_REMOVED_S = 841,
- ERR_ATTACK_NO_ACTIONS = 842,
- ERR_IN_RANDOM_BG = 843,
- ERR_IN_NON_RANDOM_BG = 844,
- ERR_BN_FRIEND_SELF = 845,
- ERR_BN_FRIEND_ALREADY = 846,
- ERR_BN_FRIEND_BLOCKED = 847,
- ERR_BN_FRIEND_LIST_FULL = 848,
- ERR_BN_FRIEND_REQUEST_SENT = 849,
- ERR_BN_BROADCAST_THROTTLE = 850,
- ERR_BG_DEVELOPER_ONLY = 851,
- ERR_CURRENCY_SPELL_SLOT_MISMATCH = 852,
- ERR_CURRENCY_NOT_TRADABLE = 853,
- ERR_REQUIRES_EXPANSION_S = 854,
- ERR_QUEST_FAILED_SPELL = 855,
- ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 856,
- ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 857,
- ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 858,
- ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 859,
- ERR_TALENT_FAILED_UNKNOWN = 860,
- ERR_TALENT_FAILED_IN_COMBAT = 861,
- ERR_TALENT_FAILED_IN_PVP_MATCH = 862,
- ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 863,
- ERR_WARGAME_REQUEST_FAILURE = 864,
- ERR_RANK_REQUIRES_AUTHENTICATOR = 865,
- ERR_GUILD_BANK_VOUCHER_FAILED = 866,
- ERR_WARGAME_REQUEST_SENT = 867,
- ERR_REQUIRES_ACHIEVEMENT_I = 868,
- ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 869,
- ERR_CANT_BUY_QUANTITY = 870,
- ERR_ITEM_IS_BATTLE_PAY_LOCKED = 871,
- ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 872,
- ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 873,
- ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 874,
- ERR_INSUFF_TRACKED_CURRENCY_IS = 875,
- ERR_NOT_ON_TOURNAMENT_REALM = 876,
- ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 877,
- ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 878,
- ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 879,
- ERR_CANT_DO_THAT_IN_A_GROUP = 880,
- ERR_GUILD_LEADER_REPLACED = 881,
- ERR_TRANSMOGRIFY_CANT_EQUIP = 882,
- ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 883,
- ERR_TRANSMOGRIFY_NOT_SOULBOUND = 884,
- ERR_TRANSMOGRIFY_INVALID_SOURCE = 885,
- ERR_TRANSMOGRIFY_INVALID_DESTINATION = 886,
- ERR_TRANSMOGRIFY_MISMATCH = 887,
- ERR_TRANSMOGRIFY_LEGENDARY = 888,
- ERR_TRANSMOGRIFY_SAME_ITEM = 889,
- ERR_TRANSMOGRIFY_SAME_APPEARANCE = 890,
- ERR_TRANSMOGRIFY_NOT_EQUIPPED = 891,
- ERR_VOID_DEPOSIT_FULL = 892,
- ERR_VOID_WITHDRAW_FULL = 893,
- ERR_VOID_STORAGE_WRAPPED = 894,
- ERR_VOID_STORAGE_STACKABLE = 895,
- ERR_VOID_STORAGE_UNBOUND = 896,
- ERR_VOID_STORAGE_REPAIR = 897,
- ERR_VOID_STORAGE_CHARGES = 898,
- ERR_VOID_STORAGE_QUEST = 899,
- ERR_VOID_STORAGE_CONJURED = 900,
- ERR_VOID_STORAGE_MAIL = 901,
- ERR_VOID_STORAGE_BAG = 902,
- ERR_VOID_TRANSFER_STORAGE_FULL = 903,
- ERR_VOID_TRANSFER_INV_FULL = 904,
- ERR_VOID_TRANSFER_INTERNAL_ERROR = 905,
- ERR_VOID_TRANSFER_ITEM_INVALID = 906,
- ERR_DIFFICULTY_DISABLED_IN_LFG = 907,
- ERR_VOID_STORAGE_UNIQUE = 908,
- ERR_VOID_STORAGE_LOOT = 909,
- ERR_VOID_STORAGE_HOLIDAY = 910,
- ERR_VOID_STORAGE_DURATION = 911,
- ERR_VOID_STORAGE_LOAD_FAILED = 912,
- ERR_VOID_STORAGE_INVALID_ITEM = 913,
- ERR_PARENTAL_CONTROLS_CHAT_MUTED = 914,
- ERR_SOR_START_EXPERIENCE_INCOMPLETE = 915,
- ERR_SOR_INVALID_EMAIL = 916,
- ERR_SOR_INVALID_COMMENT = 917,
- ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 918,
- ERR_CHALLENGE_MODE_RESET_KEYSTONE = 919,
- ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 920,
- ERR_REPORT_SUBMITTED_SUCCESSFULLY = 921,
- ERR_REPORT_SUBMISSION_FAILED = 922,
- ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 923,
- ERR_BUG_SUBMITTED_SUCCESSFULLY = 924,
- ERR_CHALLENGE_MODE_ENABLED = 925,
- ERR_CHALLENGE_MODE_DISABLED = 926,
- ERR_PETBATTLE_CREATE_FAILED = 927,
- ERR_PETBATTLE_NOT_HERE = 928,
- ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 929,
- ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 930,
- ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 931,
- ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 932,
- ERR_PETBATTLE_NOT_WHILE_DEAD = 933,
- ERR_PETBATTLE_NOT_WHILE_FLYING = 934,
- ERR_PETBATTLE_TARGET_INVALID = 935,
- ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 936,
- ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 937,
- ERR_PETBATTLE_NOT_A_TRAINER = 938,
- ERR_PETBATTLE_DECLINED = 939,
- ERR_PETBATTLE_IN_BATTLE = 940,
- ERR_PETBATTLE_INVALID_LOADOUT = 941,
- ERR_PETBATTLE_ALL_PETS_DEAD = 942,
- ERR_PETBATTLE_NO_PETS_IN_SLOTS = 943,
- ERR_PETBATTLE_NO_ACCOUNT_LOCK = 944,
- ERR_PETBATTLE_WILD_PET_TAPPED = 945,
- ERR_PETBATTLE_RESTRICTED_ACCOUNT = 946,
- ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 947,
- ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 948,
- ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 949,
- ERR_CANT_HAVE_MORE_PETS = 950,
- ERR_PVP_MAP_NOT_FOUND = 951,
- ERR_PVP_MAP_NOT_SET = 952,
- ERR_PETBATTLE_QUEUE_QUEUED = 953,
- ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 954,
- ERR_PETBATTLE_QUEUE_JOIN_FAILED = 955,
- ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 956,
- ERR_PETBATTLE_QUEUE_REMOVED = 957,
- ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 958,
- ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 959,
- ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 960,
- ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 961,
- ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 962,
- ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 963,
- ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 964,
- ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 965,
- ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 966,
- ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 967,
- ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 968,
- ERR_PETBATTLE_QUEUE_SLOT_DEAD = 969,
- ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 970,
- ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 971,
- ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 972,
- ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 973,
- ERR_HAS_RESTRICTION = 974,
- ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 975,
- ERR_ITEM_UPGRADE_NO_PATH = 976,
- ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 977,
- ERR_BONUS_ROLL_EMPTY = 978,
- ERR_CHALLENGE_MODE_FULL = 979,
- ERR_CHALLENGE_MODE_IN_PROGRESS = 980,
- ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 981,
- ERR_BATTLETAG_FRIEND_NOT_FOUND = 982,
- ERR_BATTLETAG_FRIEND_NOT_VALID = 983,
- ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 984,
- ERR_BATTLETAG_FRIEND_THROTTLED = 985,
- ERR_BATTLETAG_FRIEND_SUCCESS = 986,
- ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 987,
- ERR_PETBATTLE_INTERNAL = 988,
- ERR_CANT_CAGE_PET_YET = 989,
- ERR_NO_LOOT_IN_CHALLENGE_MODE = 990,
- ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 991,
- ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 992,
- ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 993,
- ERR_RECRUIT_A_FRIEND_FAILED = 994,
- ERR_SET_LOOT_PERSONAL = 995,
- ERR_SET_LOOT_METHOD_FAILED_COMBAT = 996,
- ERR_REAGENT_BANK_FULL = 997,
- ERR_REAGENT_BANK_LOCKED = 998,
- ERR_GARRISON_BUILDING_EXISTS = 999,
- ERR_GARRISON_INVALID_PLOT = 1000,
- ERR_GARRISON_INVALID_BUILDINGID = 1001,
- ERR_GARRISON_INVALID_PLOT_BUILDING = 1002,
- ERR_GARRISON_REQUIRES_BLUEPRINT = 1003,
- ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1004,
- ERR_GARRISON_NOT_ENOUGH_GOLD = 1005,
- ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1006,
- ERR_ALREADY_USING_LFG_LIST = 1007,
- ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1008,
- ERR_TOY_USE_LIMIT_REACHED = 1009,
- ERR_TOY_ALREADY_KNOWN = 1010,
- ERR_TRANSMOG_SET_ALREADY_KNOWN = 1011,
- ERR_NOT_ENOUGH_CURRENCY = 1012,
- ERR_SPEC_IS_DISABLED = 1013,
- ERR_FEATURE_RESTRICTED_TRIAL = 1014,
- ERR_CANT_BE_OBLITERATED = 1015,
- ERR_CANT_BE_SCRAPPED = 1016,
- ERR_CANT_BE_RECRAFTED = 1017,
- ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1018,
- ERR_MUST_EQUIP_ARTIFACT = 1019,
- ERR_CANT_DO_THAT_RIGHT_NOW = 1020,
- ERR_AFFECTING_COMBAT = 1021,
- ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1022,
- ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1023,
- ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1024,
- ERR_MOVIE_RECORDING_WARNING_PERF = 1025,
- ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1026,
- ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1027,
- ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1028,
- ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1029,
- ERR_NO_CHALLENGE_MODE_REWARD = 1030,
- ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1031,
- ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1032,
- ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1033,
- ERR_TALENT_FAILED_REST_AREA = 1034,
- ERR_CANNOT_ABANDON_LAST_PET = 1035,
- ERR_TEST_CVAR_SET_SSS = 1036,
- ERR_QUEST_TURN_IN_FAIL_REASON = 1037,
- ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1038,
- ERR_TALENT_GRANTED_BY_AURA = 1039,
- ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1040,
- ERR_GLYPH_TARGET_NOT_AVAILABLE = 1041,
- ERR_PVP_WARMODE_TOGGLE_ON = 1042,
- ERR_PVP_WARMODE_TOGGLE_OFF = 1043,
- ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1044,
- ERR_SPELL_FAILED_CANT_FLY_HERE = 1045,
- ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1046,
- ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1047,
- ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1048,
- ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1049,
- ERR_VOICE_CHAT_SERVICE_LOST = 1050,
- ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1051,
- ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1052,
- ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1053,
- ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1054,
- ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1055,
- ERR_VOICE_CHAT_PLAYER_SILENCED = 1056,
- ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1057,
- ERR_VOICE_CHAT_DISABLED = 1058,
- ERR_NO_PVP_REWARD = 1059,
- ERR_CLAIMED_PVP_REWARD = 1060,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1061,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1062,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1063,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1064,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1065,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1066,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1067,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1068,
- ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1069,
- ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1070,
- ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1071,
- ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1072,
- ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1073,
- ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1074,
- ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1075,
- ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1076,
- ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1077,
- ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1078,
- ERR_SOCKETING_REQUIRES_TINKER_GEM = 1079,
- ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1080,
- ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1081,
- ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1082,
- ERR_LEVEL_LINKING_RESULT_LINKED = 1083,
- ERR_LEVEL_LINKING_RESULT_UNLINKED = 1084,
- ERR_CLUB_FINDER_ERROR_POST_CLUB = 1085,
- ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1086,
- ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1087,
- ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1088,
- ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1089,
- ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1090,
- ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1091,
- ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1092,
- ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1093,
- ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1094,
- ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1095,
- ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1096,
- ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1097,
- ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1098,
- ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1099,
- ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1100,
- ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1101,
- ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1102,
- ERR_SOULBIND_INVALID_CONDUIT = 1103,
- ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1104,
- ERR_SOULBIND_INVALID_TALENT = 1105,
- ERR_SOULBIND_DUPLICATE_CONDUIT = 1106,
- ERR_ACTIVATE_SOULBIND_S = 1107,
- ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1108,
- ERR_CANT_USE_PROFANITY = 1109,
- ERR_NOT_IN_PET_BATTLE = 1110,
- ERR_NOT_IN_NPE = 1111,
- ERR_NO_SPEC = 1112,
- ERR_NO_DOMINATIONSHARD_OVERWRITE = 1113,
- ERR_USE_WEEKLY_REWARDS_DISABLED = 1114,
- ERR_CROSS_FACTION_GROUP_JOINED = 1115,
- ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1116,
- ERR_EQUIPABLESPELLS_SLOTS_FULL = 1117,
- ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1118,
- ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1119,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1120,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1121,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1122,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1123,
- ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1124,
- ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1125,
+ ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 841,
+ ERR_QUEST_FORCE_REMOVED_S = 842,
+ ERR_ATTACK_NO_ACTIONS = 843,
+ ERR_IN_RANDOM_BG = 844,
+ ERR_IN_NON_RANDOM_BG = 845,
+ ERR_BN_FRIEND_SELF = 846,
+ ERR_BN_FRIEND_ALREADY = 847,
+ ERR_BN_FRIEND_BLOCKED = 848,
+ ERR_BN_FRIEND_LIST_FULL = 849,
+ ERR_BN_FRIEND_REQUEST_SENT = 850,
+ ERR_BN_BROADCAST_THROTTLE = 851,
+ ERR_BG_DEVELOPER_ONLY = 852,
+ ERR_CURRENCY_SPELL_SLOT_MISMATCH = 853,
+ ERR_CURRENCY_NOT_TRADABLE = 854,
+ ERR_REQUIRES_EXPANSION_S = 855,
+ ERR_QUEST_FAILED_SPELL = 856,
+ ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 857,
+ ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 858,
+ ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 859,
+ ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 860,
+ ERR_TALENT_FAILED_UNKNOWN = 861,
+ ERR_TALENT_FAILED_IN_COMBAT = 862,
+ ERR_TALENT_FAILED_IN_PVP_MATCH = 863,
+ ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 864,
+ ERR_WARGAME_REQUEST_FAILURE = 865,
+ ERR_RANK_REQUIRES_AUTHENTICATOR = 866,
+ ERR_GUILD_BANK_VOUCHER_FAILED = 867,
+ ERR_WARGAME_REQUEST_SENT = 868,
+ ERR_REQUIRES_ACHIEVEMENT_I = 869,
+ ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 870,
+ ERR_CANT_BUY_QUANTITY = 871,
+ ERR_ITEM_IS_BATTLE_PAY_LOCKED = 872,
+ ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 873,
+ ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 874,
+ ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 875,
+ ERR_INSUFF_TRACKED_CURRENCY_IS = 876,
+ ERR_NOT_ON_TOURNAMENT_REALM = 877,
+ ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 878,
+ ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 879,
+ ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 880,
+ ERR_CANT_DO_THAT_IN_A_GROUP = 881,
+ ERR_GUILD_LEADER_REPLACED = 882,
+ ERR_TRANSMOGRIFY_CANT_EQUIP = 883,
+ ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 884,
+ ERR_TRANSMOGRIFY_NOT_SOULBOUND = 885,
+ ERR_TRANSMOGRIFY_INVALID_SOURCE = 886,
+ ERR_TRANSMOGRIFY_INVALID_DESTINATION = 887,
+ ERR_TRANSMOGRIFY_MISMATCH = 888,
+ ERR_TRANSMOGRIFY_LEGENDARY = 889,
+ ERR_TRANSMOGRIFY_SAME_ITEM = 890,
+ ERR_TRANSMOGRIFY_SAME_APPEARANCE = 891,
+ ERR_TRANSMOGRIFY_NOT_EQUIPPED = 892,
+ ERR_VOID_DEPOSIT_FULL = 893,
+ ERR_VOID_WITHDRAW_FULL = 894,
+ ERR_VOID_STORAGE_WRAPPED = 895,
+ ERR_VOID_STORAGE_STACKABLE = 896,
+ ERR_VOID_STORAGE_UNBOUND = 897,
+ ERR_VOID_STORAGE_REPAIR = 898,
+ ERR_VOID_STORAGE_CHARGES = 899,
+ ERR_VOID_STORAGE_QUEST = 900,
+ ERR_VOID_STORAGE_CONJURED = 901,
+ ERR_VOID_STORAGE_MAIL = 902,
+ ERR_VOID_STORAGE_BAG = 903,
+ ERR_VOID_TRANSFER_STORAGE_FULL = 904,
+ ERR_VOID_TRANSFER_INV_FULL = 905,
+ ERR_VOID_TRANSFER_INTERNAL_ERROR = 906,
+ ERR_VOID_TRANSFER_ITEM_INVALID = 907,
+ ERR_DIFFICULTY_DISABLED_IN_LFG = 908,
+ ERR_VOID_STORAGE_UNIQUE = 909,
+ ERR_VOID_STORAGE_LOOT = 910,
+ ERR_VOID_STORAGE_HOLIDAY = 911,
+ ERR_VOID_STORAGE_DURATION = 912,
+ ERR_VOID_STORAGE_LOAD_FAILED = 913,
+ ERR_VOID_STORAGE_INVALID_ITEM = 914,
+ ERR_PARENTAL_CONTROLS_CHAT_MUTED = 915,
+ ERR_SOR_START_EXPERIENCE_INCOMPLETE = 916,
+ ERR_SOR_INVALID_EMAIL = 917,
+ ERR_SOR_INVALID_COMMENT = 918,
+ ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 919,
+ ERR_CHALLENGE_MODE_RESET_KEYSTONE = 920,
+ ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 921,
+ ERR_REPORT_SUBMITTED_SUCCESSFULLY = 922,
+ ERR_REPORT_SUBMISSION_FAILED = 923,
+ ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 924,
+ ERR_BUG_SUBMITTED_SUCCESSFULLY = 925,
+ ERR_CHALLENGE_MODE_ENABLED = 926,
+ ERR_CHALLENGE_MODE_DISABLED = 927,
+ ERR_PETBATTLE_CREATE_FAILED = 928,
+ ERR_PETBATTLE_NOT_HERE = 929,
+ ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 930,
+ ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 931,
+ ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 932,
+ ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 933,
+ ERR_PETBATTLE_NOT_WHILE_DEAD = 934,
+ ERR_PETBATTLE_NOT_WHILE_FLYING = 935,
+ ERR_PETBATTLE_TARGET_INVALID = 936,
+ ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 937,
+ ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 938,
+ ERR_PETBATTLE_NOT_A_TRAINER = 939,
+ ERR_PETBATTLE_DECLINED = 940,
+ ERR_PETBATTLE_IN_BATTLE = 941,
+ ERR_PETBATTLE_INVALID_LOADOUT = 942,
+ ERR_PETBATTLE_ALL_PETS_DEAD = 943,
+ ERR_PETBATTLE_NO_PETS_IN_SLOTS = 944,
+ ERR_PETBATTLE_NO_ACCOUNT_LOCK = 945,
+ ERR_PETBATTLE_WILD_PET_TAPPED = 946,
+ ERR_PETBATTLE_RESTRICTED_ACCOUNT = 947,
+ ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 948,
+ ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 949,
+ ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 950,
+ ERR_CANT_HAVE_MORE_PETS = 951,
+ ERR_PVP_MAP_NOT_FOUND = 952,
+ ERR_PVP_MAP_NOT_SET = 953,
+ ERR_PETBATTLE_QUEUE_QUEUED = 954,
+ ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 955,
+ ERR_PETBATTLE_QUEUE_JOIN_FAILED = 956,
+ ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 957,
+ ERR_PETBATTLE_QUEUE_REMOVED = 958,
+ ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 959,
+ ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 960,
+ ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 961,
+ ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 962,
+ ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 963,
+ ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 964,
+ ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 965,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 966,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 967,
+ ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 968,
+ ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 969,
+ ERR_PETBATTLE_QUEUE_SLOT_DEAD = 970,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 971,
+ ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 972,
+ ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 973,
+ ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 974,
+ ERR_HAS_RESTRICTION = 975,
+ ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 976,
+ ERR_ITEM_UPGRADE_NO_PATH = 977,
+ ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 978,
+ ERR_BONUS_ROLL_EMPTY = 979,
+ ERR_CHALLENGE_MODE_FULL = 980,
+ ERR_CHALLENGE_MODE_IN_PROGRESS = 981,
+ ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 982,
+ ERR_BATTLETAG_FRIEND_NOT_FOUND = 983,
+ ERR_BATTLETAG_FRIEND_NOT_VALID = 984,
+ ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 985,
+ ERR_BATTLETAG_FRIEND_THROTTLED = 986,
+ ERR_BATTLETAG_FRIEND_SUCCESS = 987,
+ ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 988,
+ ERR_PETBATTLE_INTERNAL = 989,
+ ERR_CANT_CAGE_PET_YET = 990,
+ ERR_NO_LOOT_IN_CHALLENGE_MODE = 991,
+ ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 992,
+ ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 993,
+ ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 994,
+ ERR_RECRUIT_A_FRIEND_FAILED = 995,
+ ERR_SET_LOOT_PERSONAL = 996,
+ ERR_SET_LOOT_METHOD_FAILED_COMBAT = 997,
+ ERR_REAGENT_BANK_FULL = 998,
+ ERR_REAGENT_BANK_LOCKED = 999,
+ ERR_GARRISON_BUILDING_EXISTS = 1000,
+ ERR_GARRISON_INVALID_PLOT = 1001,
+ ERR_GARRISON_INVALID_BUILDINGID = 1002,
+ ERR_GARRISON_INVALID_PLOT_BUILDING = 1003,
+ ERR_GARRISON_REQUIRES_BLUEPRINT = 1004,
+ ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1005,
+ ERR_GARRISON_NOT_ENOUGH_GOLD = 1006,
+ ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1007,
+ ERR_ALREADY_USING_LFG_LIST = 1008,
+ ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1009,
+ ERR_TOY_USE_LIMIT_REACHED = 1010,
+ ERR_TOY_ALREADY_KNOWN = 1011,
+ ERR_TRANSMOG_SET_ALREADY_KNOWN = 1012,
+ ERR_NOT_ENOUGH_CURRENCY = 1013,
+ ERR_SPEC_IS_DISABLED = 1014,
+ ERR_FEATURE_RESTRICTED_TRIAL = 1015,
+ ERR_CANT_BE_OBLITERATED = 1016,
+ ERR_CANT_BE_SCRAPPED = 1017,
+ ERR_CANT_BE_RECRAFTED = 1018,
+ ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1019,
+ ERR_MUST_EQUIP_ARTIFACT = 1020,
+ ERR_CANT_DO_THAT_RIGHT_NOW = 1021,
+ ERR_AFFECTING_COMBAT = 1022,
+ ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1023,
+ ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1024,
+ ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1025,
+ ERR_MOVIE_RECORDING_WARNING_PERF = 1026,
+ ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1027,
+ ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1028,
+ ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1029,
+ ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1030,
+ ERR_NO_CHALLENGE_MODE_REWARD = 1031,
+ ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1032,
+ ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1033,
+ ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1034,
+ ERR_TALENT_FAILED_REST_AREA = 1035,
+ ERR_CANNOT_ABANDON_LAST_PET = 1036,
+ ERR_TEST_CVAR_SET_SSS = 1037,
+ ERR_QUEST_TURN_IN_FAIL_REASON = 1038,
+ ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1039,
+ ERR_TALENT_GRANTED_BY_AURA = 1040,
+ ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1041,
+ ERR_GLYPH_TARGET_NOT_AVAILABLE = 1042,
+ ERR_PVP_WARMODE_TOGGLE_ON = 1043,
+ ERR_PVP_WARMODE_TOGGLE_OFF = 1044,
+ ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1045,
+ ERR_SPELL_FAILED_CANT_FLY_HERE = 1046,
+ ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1047,
+ ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1048,
+ ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1049,
+ ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1050,
+ ERR_VOICE_CHAT_SERVICE_LOST = 1051,
+ ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1052,
+ ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1053,
+ ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1054,
+ ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1055,
+ ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1056,
+ ERR_VOICE_CHAT_PLAYER_SILENCED = 1057,
+ ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1058,
+ ERR_VOICE_CHAT_DISABLED = 1059,
+ ERR_NO_PVP_REWARD = 1060,
+ ERR_CLAIMED_PVP_REWARD = 1061,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1062,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1063,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1064,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1065,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1066,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1067,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1068,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1069,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1070,
+ ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1071,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1072,
+ ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1073,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1074,
+ ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1075,
+ ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1076,
+ ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1077,
+ ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1078,
+ ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1079,
+ ERR_SOCKETING_REQUIRES_TINKER_GEM = 1080,
+ ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1081,
+ ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1082,
+ ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1083,
+ ERR_LEVEL_LINKING_RESULT_LINKED = 1084,
+ ERR_LEVEL_LINKING_RESULT_UNLINKED = 1085,
+ ERR_CLUB_FINDER_ERROR_POST_CLUB = 1086,
+ ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1087,
+ ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1088,
+ ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1089,
+ ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1090,
+ ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1091,
+ ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1092,
+ ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1093,
+ ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1094,
+ ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1095,
+ ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1096,
+ ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1097,
+ ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1098,
+ ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1099,
+ ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1100,
+ ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1101,
+ ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1102,
+ ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1103,
+ ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1104,
+ ERR_SOULBIND_INVALID_CONDUIT = 1105,
+ ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1106,
+ ERR_SOULBIND_INVALID_TALENT = 1107,
+ ERR_SOULBIND_DUPLICATE_CONDUIT = 1108,
+ ERR_ACTIVATE_SOULBIND_S = 1109,
+ ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1110,
+ ERR_CANT_USE_PROFANITY = 1111,
+ ERR_NOT_IN_PET_BATTLE = 1112,
+ ERR_NOT_IN_NPE = 1113,
+ ERR_NO_SPEC = 1114,
+ ERR_NO_DOMINATIONSHARD_OVERWRITE = 1115,
+ ERR_USE_WEEKLY_REWARDS_DISABLED = 1116,
+ ERR_CROSS_FACTION_GROUP_JOINED = 1117,
+ ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1118,
+ ERR_EQUIPABLESPELLS_SLOTS_FULL = 1119,
+ ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1120,
+ ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1121,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1122,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1123,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1124,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1125,
+ ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1126,
+ ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1127,
};
enum class MountResult : uint32
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp
index 4d89381d542..5b583ee11f7 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.cpp
+++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp
@@ -263,6 +263,10 @@ WorldPacket const* WorldPackets::Battleground::PVPOptionsEnabled::Write()
_worldPacket.WriteBit(WargameArenas);
_worldPacket.WriteBit(RatedArenas);
_worldPacket.WriteBit(ArenaSkirmish);
+ _worldPacket.WriteBit(SoloShuffle);
+ _worldPacket.WriteBit(RatedSoloShuffle);
+ _worldPacket.WriteBit(BattlegroundBlitz);
+ _worldPacket.WriteBit(RatedBattlegroundBlitz);
_worldPacket.FlushBits();
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h
index 05edc095f7e..9c96c76f66f 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.h
+++ b/src/server/game/Server/Packets/BattlegroundPackets.h
@@ -323,12 +323,16 @@ namespace WorldPackets
WorldPacket const* Write() override;
+ bool RatedBattlegrounds = false;
+ bool PugBattlegrounds = false;
+ bool WargameBattlegrounds = false;
bool WargameArenas = false;
bool RatedArenas = false;
- bool WargameBattlegrounds = false;
bool ArenaSkirmish = false;
- bool PugBattlegrounds = false;
- bool RatedBattlegrounds = false;
+ bool SoloShuffle = false;
+ bool RatedSoloShuffle = false;
+ bool BattlegroundBlitz = false;
+ bool RatedBattlegroundBlitz = false; // solo rbg
};
class RequestBattlefieldStatus final : public ClientPacket
diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp
index 1e42362a480..27a67d416a3 100644
--- a/src/server/game/Server/Packets/CalendarPackets.cpp
+++ b/src/server/game/Server/Packets/CalendarPackets.cpp
@@ -52,6 +52,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Calendar::CalendarSendCal
data << uint8(inviteInfo.Moderator);
data << uint8(inviteInfo.InviteType);
data << inviteInfo.InviterGuid;
+ data.WriteBit(inviteInfo.IgnoreFriendAndGuildRestriction);
+ data.FlushBits();
return data;
}
@@ -265,13 +267,13 @@ WorldPacket const* WorldPackets::Calendar::CalendarSendCalendar::Write()
_worldPacket << uint32(Events.size());
_worldPacket << uint32(RaidLockouts.size());
- for (auto const& invite : Invites)
- _worldPacket << invite;
-
- for (auto const& lockout : RaidLockouts)
+ for (CalendarSendCalendarRaidLockoutInfo const& lockout : RaidLockouts)
_worldPacket << lockout;
- for (auto const& event : Events)
+ for (CalendarSendCalendarInviteInfo const& invite : Invites)
+ _worldPacket << invite;
+
+ for (CalendarSendCalendarEventInfo const& event : Events)
_worldPacket << event;
return &_worldPacket;
diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h
index 4b45b13952c..7ef1a4976f8 100644
--- a/src/server/game/Server/Packets/CalendarPackets.h
+++ b/src/server/game/Server/Packets/CalendarPackets.h
@@ -167,6 +167,7 @@ namespace WorldPackets
uint8 Status = 0;
uint8 Moderator = 0;
uint8 InviteType = 0;
+ bool IgnoreFriendAndGuildRestriction = false;
};
struct CalendarSendCalendarRaidLockoutInfo
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index 35a68f07ecc..2a14e107077 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -46,7 +46,7 @@ namespace WorldPackets
{
namespace Character
{
-void SortCustomizations(Array<ChrCustomizationChoice, 125>& customizations)
+void SortCustomizations(Array<ChrCustomizationChoice, 250>& customizations)
{
auto first = customizations.begin();
auto last = customizations.end();
@@ -60,6 +60,28 @@ void SortCustomizations(Array<ChrCustomizationChoice, 125>& customizations)
}
}
+ByteBuffer& operator<<(ByteBuffer& data, CustomTabardInfo const& customTabardInfo)
+{
+ data << int32(customTabardInfo.EmblemStyle);
+ data << int32(customTabardInfo.EmblemColor);
+ data << int32(customTabardInfo.BorderStyle);
+ data << int32(customTabardInfo.BorderColor);
+ data << int32(customTabardInfo.BackgroundColor);
+
+ return data;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, CustomTabardInfo& customTabardInfo)
+{
+ data >> customTabardInfo.EmblemStyle;
+ data >> customTabardInfo.EmblemColor;
+ data >> customTabardInfo.BorderStyle;
+ data >> customTabardInfo.BorderColor;
+ data >> customTabardInfo.BackgroundColor;
+
+ return data;
+}
+
EnumCharacters::EnumCharacters(WorldPacket&& packet) : ClientPacket(std::move(packet))
{
ASSERT(GetOpcode() == CMSG_ENUM_CHARACTERS || GetOpcode() == CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT);
@@ -73,8 +95,12 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field* 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 23
- // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, character_declinedname.genitive"
+ // 18 19 20 21 22
+ // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, "
+ // 23 24 25 26 27
+ // "characters.personalTabardEmblemStyle, characters.personalTabardEmblemColor, characters.personalTabardBorderStyle, characters.personalTabardBorderColor, characters.personalTabardBackgroundColor "
+ // 28
+ // "character_declinedname.genitive"
Guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
Name = fields[1].GetString();
@@ -104,7 +130,7 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field* fields)
if (fields[18].GetUInt64())
Flags |= CHARACTER_FLAG_LOCKED_BY_BILLING;
- if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && !fields[23].GetString().empty())
+ if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && !fields[28].GetString().empty())
Flags |= CHARACTER_FLAG_DECLINED;
if (atLoginFlags & AT_LOGIN_CUSTOMIZE)
@@ -141,6 +167,12 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field* fields)
LastLoginVersion = fields[22].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();
+
constexpr std::size_t equipmentFieldsPerSlot = 5;
for (std::size_t slot = 0; slot < VisualItems.size() && (slot + 1) * equipmentFieldsPerSlot <= equipment.size(); ++slot)
@@ -202,6 +234,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo con
data << uint32(charInfo.MailSenders.size());
data << uint32(charInfo.MailSenderTypes.size());
data << uint32(charInfo.OverrideSelectScreenFileDataID);
+ data << charInfo.PersonalTabard;
for (ChrCustomizationChoice const& customization : charInfo.Customizations)
data << customization;
@@ -213,6 +246,8 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo con
data.WriteBit(charInfo.FirstLogin);
data.WriteBit(charInfo.BoostInProgress);
data.WriteBits(charInfo.unkWod61x, 5);
+ data.WriteBit(charInfo.RpeResetAvailable);
+ data.WriteBit(charInfo.RpeResetQuestClearAvailable);
for (std::string const& str : charInfo.MailSenders)
data.WriteBits(str.length() + 1, 6);
@@ -234,6 +269,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceUnlock const&
data.WriteBit(raceUnlock.HasExpansion);
data.WriteBit(raceUnlock.HasAchievement);
data.WriteBit(raceUnlock.HasHeritageArmor);
+ data.WriteBit(raceUnlock.IsLocked);
data.FlushBits();
return data;
@@ -266,7 +302,6 @@ WorldPacket const* EnumCharactersResult::Write()
_worldPacket.WriteBit(IsNewPlayer);
_worldPacket.WriteBit(IsTrialAccountRestricted);
_worldPacket.WriteBit(DisabledClassesMask.has_value());
- _worldPacket.WriteBit(IsAlliedRacesCreationAllowed);
_worldPacket << uint32(Characters.size());
_worldPacket << int32(MaxCharacterLevel);
_worldPacket << uint32(RaceUnlockData.size());
@@ -663,5 +698,18 @@ WorldPacket const * SetPlayerDeclinedNamesResult::Write()
return &_worldPacket;
}
+
+void SavePersonalEmblem::Read()
+{
+ _worldPacket >> Vendor;
+ _worldPacket >> PersonalTabard;
+}
+
+WorldPacket const* PlayerSavePersonalEmblem::Write()
+{
+ _worldPacket << int32(Error);
+
+ return &_worldPacket;
+}
}
}
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index f3d72d1e011..61096bb5ed7 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -60,7 +60,7 @@ namespace WorldPackets
uint8 Race = RACE_NONE;
uint8 Class = CLASS_NONE;
uint8 Sex = GENDER_NONE;
- Array<ChrCustomizationChoice, 125> Customizations;
+ Array<ChrCustomizationChoice, 250> Customizations;
Optional<int32> TemplateSet;
bool IsTrialBoost = false;
bool UseNPE = false;
@@ -81,7 +81,7 @@ namespace WorldPackets
ObjectGuid CharGUID;
uint8 SexID = GENDER_NONE;
std::string CharName;
- Array<ChrCustomizationChoice, 125> Customizations;
+ Array<ChrCustomizationChoice, 250> Customizations;
};
struct CharRaceOrFactionChangeInfo
@@ -92,7 +92,7 @@ namespace WorldPackets
ObjectGuid Guid;
bool FactionChange = false;
std::string Name;
- Array<ChrCustomizationChoice, 125> Customizations;
+ Array<ChrCustomizationChoice, 250> Customizations;
};
struct CharacterUndeleteInfo
@@ -105,6 +105,15 @@ namespace WorldPackets
std::string Name;
};
+ struct CustomTabardInfo
+ {
+ int32 EmblemStyle = -1;
+ int32 EmblemColor = -1;
+ int32 BorderStyle = -1;
+ int32 BorderColor = -1;
+ int32 BackgroundColor = -1;
+ };
+
class EnumCharactersResult final : public ServerPacket
{
public:
@@ -163,6 +172,9 @@ namespace WorldPackets
std::array<VisualItemInfo, 35> VisualItems = { };
std::vector<std::string> MailSenders;
std::vector<uint32> MailSenderTypes;
+ bool RpeResetAvailable = false;
+ bool RpeResetQuestClearAvailable = false;
+ CustomTabardInfo PersonalTabard;
};
struct RaceUnlock
@@ -171,6 +183,7 @@ namespace WorldPackets
bool HasExpansion = false;
bool HasAchievement = false;
bool HasHeritageArmor = false;
+ bool IsLocked = false;
};
struct UnlockedConditionalAppearance
@@ -201,7 +214,6 @@ namespace WorldPackets
bool IsNewPlayerRestricted = false; ///< forbids using level boost and class trials
bool IsNewPlayer = false; ///< forbids hero classes and allied races
bool IsTrialAccountRestricted = false;
- bool IsAlliedRacesCreationAllowed = false;
int32 MaxCharacterLevel = 1;
Optional<uint32> DisabledClassesMask;
@@ -366,7 +378,7 @@ namespace WorldPackets
std::string Name;
uint8 SexID = 0;
uint8 RaceID = RACE_NONE;
- Array<ChrCustomizationChoice, 125> const* Customizations = nullptr;
+ Array<ChrCustomizationChoice, 250> const* Customizations = nullptr;
};
class CharFactionChangeResult final : public ServerPacket
@@ -637,7 +649,7 @@ namespace WorldPackets
void Read() override;
uint8 NewSex = 0;
- Array<ChrCustomizationChoice, 125> Customizations;
+ Array<ChrCustomizationChoice, 250> Customizations;
int32 CustomizedRace = 0;
int32 CustomizedChrModelID = 0;
};
@@ -691,7 +703,7 @@ namespace WorldPackets
void Read() override;
- uint8 FactionIndex = 0;
+ uint16 FactionIndex = 0;
};
class SetFactionNotAtWar final : public ClientPacket
@@ -701,7 +713,7 @@ namespace WorldPackets
void Read() override;
- uint8 FactionIndex = 0;
+ uint16 FactionIndex = 0;
};
class SetFactionInactive final : public ClientPacket
@@ -745,7 +757,7 @@ namespace WorldPackets
ObjectGuid CharGUID;
std::string CharName;
uint8 SexID = 0;
- Array<ChrCustomizationChoice, 125> const& Customizations;
+ Array<ChrCustomizationChoice, 250> const& Customizations;
};
class CharCustomizeFailure final : public ServerPacket
@@ -780,6 +792,27 @@ namespace WorldPackets
ObjectGuid Player;
int32 ResultCode = 0;
};
+
+ class SavePersonalEmblem final : public ClientPacket
+ {
+ public:
+ SavePersonalEmblem(WorldPacket&& packet) : ClientPacket(CMSG_SAVE_PERSONAL_EMBLEM, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Vendor;
+ CustomTabardInfo PersonalTabard;
+ };
+
+ class PlayerSavePersonalEmblem final : public ServerPacket
+ {
+ public:
+ explicit PlayerSavePersonalEmblem(int32 error) : ServerPacket(SMSG_PLAYER_SAVE_PERSONAL_EMBLEM, 4), Error(error) { }
+
+ WorldPacket const* Write() override;
+
+ int32 Error;
+ };
}
}
diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h
index 8f03d8aa4b5..d6c9b22b9ef 100644
--- a/src/server/game/Server/Packets/ChatPackets.h
+++ b/src/server/game/Server/Packets/ChatPackets.h
@@ -259,7 +259,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
int32 MessageID = 0;
- std::string StringParam;
+ std::string_view StringParam;
};
class ChatRegisterAddonPrefixes final : public ClientPacket
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index 5b5b4b19571..1efaee4582d 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -66,6 +66,7 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write()
_worldPacket.WriteBit(FirstCraftOperationID.has_value());
_worldPacket.WriteBit(NextRechargeTime.has_value());
_worldPacket.WriteBit(RechargeCycleStartTime.has_value());
+ _worldPacket.WriteBit(OverflownCurrencyID.has_value());
_worldPacket.FlushBits();
if (WeeklyQuantity)
@@ -98,6 +99,9 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write()
if (RechargeCycleStartTime)
_worldPacket << *RechargeCycleStartTime;
+ if (OverflownCurrencyID)
+ _worldPacket << int32(*OverflownCurrencyID);
+
return &_worldPacket;
}
@@ -434,7 +438,7 @@ WorldPacket const* WorldPackets::Misc::EnableBarberShop::Write()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Misc::PhaseShiftDataPhase const& phaseShiftDataPhase)
{
- data << uint16(phaseShiftDataPhase.PhaseFlags);
+ data << uint32(phaseShiftDataPhase.PhaseFlags);
data << uint16(phaseShiftDataPhase.Id);
return data;
}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index a064d06633b..a75462f235c 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -115,6 +115,7 @@ namespace WorldPackets
Optional<uint32> FirstCraftOperationID;
Optional<Timestamp<>> NextRechargeTime;
Optional<Timestamp<>> RechargeCycleStartTime;
+ Optional<int32> OverflownCurrencyID; // what currency was originally changed but couldn't be incremented because of a cap
bool SuppressChatLog = false;
};
@@ -558,7 +559,7 @@ namespace WorldPackets
struct PhaseShiftDataPhase
{
- uint16 PhaseFlags = 0;
+ uint32 PhaseFlags = 0;
uint16 Id = 0;
};
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 02833e95525..49e7c7f9f92 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -356,7 +356,6 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline
ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementMonsterSpline const& movementMonsterSpline)
{
data << movementMonsterSpline.ID;
- data << movementMonsterSpline.Destination;
data.WriteBit(movementMonsterSpline.CrzTeleport);
data.WriteBits(movementMonsterSpline.StopDistanceTolerance, 3);
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 5e186a041ba..77cc00d71c7 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -139,7 +139,6 @@ namespace WorldPackets
struct MovementMonsterSpline
{
uint32 ID = 0;
- TaggedPosition<Position::XYZ> Destination;
bool CrzTeleport = false;
uint8 StopDistanceTolerance = 0; // Determines how far from spline destination the mover is allowed to stop in place 0, 0, 3.0, 2.76, numeric_limits<float>::max, 1.1, float(INT_MAX); default before this field existed was distance 3.0 (index 2)
MovementSpline Move;
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index e7b4c3b2f11..ec32ed95325 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -234,6 +234,12 @@ void SpiritHealerActivate::Read()
_worldPacket >> Healer;
}
+void TabardVendorActivate::Read()
+{
+ _worldPacket >> Vendor;
+ _worldPacket >> Type;
+}
+
void TrainerBuySpell::Read()
{
_worldPacket >> TrainerGUID;
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index 7d0369c7070..6aba0696f26 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -235,6 +235,17 @@ namespace WorldPackets
ObjectGuid Healer;
};
+ class TabardVendorActivate final : public ClientPacket
+ {
+ public:
+ TabardVendorActivate(WorldPacket&& packet) : ClientPacket(CMSG_TABARD_VENDOR_ACTIVATE, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Vendor;
+ int32 Type = 0;
+ };
+
class TrainerBuySpell final : public ClientPacket
{
public:
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index ac9fbd7d0d7..d02dfa1bd6f 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -142,7 +142,7 @@ void WorldPackets::Party::RequestPartyMemberStats::Read()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyMemberPhase const& phase)
{
- data << uint16(phase.Flags);
+ data << uint32(phase.Flags);
data << uint16(phase.Id);
return data;
diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h
index 15b5f85de1f..a865f1f1e7c 100644
--- a/src/server/game/Server/Packets/PartyPackets.h
+++ b/src/server/game/Server/Packets/PartyPackets.h
@@ -144,7 +144,7 @@ namespace WorldPackets
struct PartyMemberPhase
{
- uint16 Flags = 0u;
+ uint32 Flags = 0u;
uint16 Id = 0u;
};
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index ef02dfe1c74..513a7bffb45 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -177,7 +177,7 @@ bool PlayerGuidLookupData::Initialize(ObjectGuid const& guid, Player const* play
ClassID = player->GetClass();
Level = player->GetLevel();
- if (DeclinedName const* names = player->GetDeclinedNames())
+ if (UF::DeclinedNames const* names = player->GetDeclinedNames())
DeclinedNames = *names;
}
else
diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h
index 84fe8f001e8..31fe7a62a9f 100644
--- a/src/server/game/Server/Packets/ReputationPackets.h
+++ b/src/server/game/Server/Packets/ReputationPackets.h
@@ -25,7 +25,7 @@ namespace WorldPackets
{
namespace Reputation
{
- static constexpr uint16 FactionCount = 443;
+ static constexpr uint16 FactionCount = 1000;
class InitializeFactions final : public ServerPacket
{
diff --git a/src/server/game/Server/Packets/SocialPackets.cpp b/src/server/game/Server/Packets/SocialPackets.cpp
index 09ac59d4128..7e7d7e188e5 100644
--- a/src/server/game/Server/Packets/SocialPackets.cpp
+++ b/src/server/game/Server/Packets/SocialPackets.cpp
@@ -111,7 +111,7 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Social::QualifiedGUID& qG
void WorldPackets::Social::AddFriend::Read()
{
uint32 nameLength = _worldPacket.ReadBits(9);
- uint32 noteslength = _worldPacket.ReadBits(10);
+ uint32 noteslength = _worldPacket.ReadBits(9);
Name = _worldPacket.ReadString(nameLength);
Notes = _worldPacket.ReadString(noteslength);
}
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index 5f4d0f3b6c2..1849327538b 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -16,7 +16,6 @@
*/
#include "SystemPackets.h"
-#include "Errors.h"
namespace WorldPackets::System
{
@@ -130,9 +129,14 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket.WriteBit(ChatDisabledByPlayer);
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator);
_worldPacket.WriteBit(AddonsDisabled);
- _worldPacket.WriteBit(Unused1000);
+ _worldPacket.WriteBit(WarGamesEnabled);
_worldPacket.WriteBit(ContentTrackingEnabled);
_worldPacket.WriteBit(IsSellAllJunkEnabled);
+ _worldPacket.WriteBit(IsGroupFinderEnabled);
+ _worldPacket.WriteBit(IsLFDEnabled);
+
+ _worldPacket.WriteBit(IsLFREnabled);
+ _worldPacket.WriteBit(IsPremadeGroupEnabled);
_worldPacket.FlushBits();
@@ -258,22 +262,6 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
return &_worldPacket;
}
-WorldPacket const* MOTD::Write()
-{
- ASSERT(Text);
- _worldPacket.WriteBits(Text->size(), 4);
- _worldPacket.FlushBits();
-
- for (std::string const& line : *Text)
- {
- _worldPacket.WriteBits(line.length(), 7);
- _worldPacket.FlushBits();
- _worldPacket.WriteString(line);
- }
-
- return &_worldPacket;
-}
-
WorldPacket const* SetTimeZoneInformation::Write()
{
_worldPacket.WriteBits(ServerTimeTZ.length(), 7);
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index 5cf3f149159..5c173e7d3ac 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -157,9 +157,13 @@ namespace WorldPackets
bool ChatDisabledByPlayer = false;
bool LFGListCustomRequiresAuthenticator = false;
bool AddonsDisabled = false;
- bool Unused1000 = false;
+ bool WarGamesEnabled = false; // classic only
bool ContentTrackingEnabled = false;
bool IsSellAllJunkEnabled = false;
+ bool IsGroupFinderEnabled = true; // classic only
+ bool IsLFDEnabled = true; // classic only
+ bool IsLFREnabled = true; // classic only
+ bool IsPremadeGroupEnabled = true; // classic only
SocialQueueConfig QuickJoinConfig;
SquelchInfo Squelch;
@@ -223,16 +227,6 @@ namespace WorldPackets
Optional<std::string> RealmHiddenAlert;
};
- class MOTD final : public ServerPacket
- {
- public:
- MOTD() : ServerPacket(SMSG_MOTD) { }
-
- WorldPacket const* Write() override;
-
- std::vector<std::string> const* Text = nullptr;
- };
-
class SetTimeZoneInformation final : public ServerPacket
{
public:
diff --git a/src/server/game/Server/Packets/WhoPackets.cpp b/src/server/game/Server/Packets/WhoPackets.cpp
index ad1404fb8c0..418ea67c4f4 100644
--- a/src/server/game/Server/Packets/WhoPackets.cpp
+++ b/src/server/game/Server/Packets/WhoPackets.cpp
@@ -88,9 +88,11 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Who::WhoRequest& request)
void WorldPackets::Who::WhoRequestPkt::Read()
{
Areas.resize(_worldPacket.ReadBits(4));
+ IsFromAddOn = _worldPacket.ReadBit();
_worldPacket >> Request;
_worldPacket >> RequestID;
+ _worldPacket >> Origin;
for (size_t i = 0; i < Areas.size(); ++i)
_worldPacket >> Areas[i];
diff --git a/src/server/game/Server/Packets/WhoPackets.h b/src/server/game/Server/Packets/WhoPackets.h
index 4b242d5e3b9..9f4d2ddf172 100644
--- a/src/server/game/Server/Packets/WhoPackets.h
+++ b/src/server/game/Server/Packets/WhoPackets.h
@@ -85,6 +85,8 @@ namespace WorldPackets
WhoRequest Request;
uint32 RequestID = 0;
+ uint8 Origin = 0; // 1 = Social, 2 = Chat, 3 = Item
+ bool IsFromAddOn = false;
Array<int32, 10> Areas;
};
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index ac853aed657..1926a556e3f 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -838,6 +838,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_SAVE_ACCOUNT_DATA_EXPORT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SAVE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleEquipmentSetSave);
DEFINE_HANDLER(CMSG_SAVE_GUILD_EMBLEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSaveGuildEmblem);
+ DEFINE_HANDLER(CMSG_SAVE_PERSONAL_EMBLEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSavePersonalEmblem);
DEFINE_HANDLER(CMSG_SCENE_PLAYBACK_CANCELED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleScenePlaybackCanceled);
DEFINE_HANDLER(CMSG_SCENE_PLAYBACK_COMPLETE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleScenePlaybackComplete);
DEFINE_HANDLER(CMSG_SCENE_TRIGGER_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSceneTriggerEvent);
@@ -1339,6 +1340,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FISH_ESCAPED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FISH_NOT_HOOKED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FLIGHT_SPLINE_SYNC, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_FLUSH_COMBAT_LOG_FILE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCED_DEATH_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_ANIM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_ANIMATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1632,7 +1634,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MIRROR_IMAGE_CREATURE_DATA, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MISSILE_CANCEL, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MODIFY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOTD, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOUNT_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVEMENT_ENFORCEMENT_ALERT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ADD_IMPULSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
@@ -1780,7 +1781,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PERKS_PROGRAM_DISABLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PERKS_PROGRAM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_PERKS_PROGRAM_VENDOR_PENDING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PERKS_PROGRAM_VENDOR_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_ALREADY_SIGNED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PETITION_RENAME_GUILD_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1831,6 +1831,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_GUILD_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_PERSONAL_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SHOW_ARROW_CALLOUT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SHOW_PARTY_POSE_UI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1925,7 +1926,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READY_CHECK_STARTED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_OK, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_LOOKUP_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
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);
@@ -1994,6 +1994,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_FIRST_ACHIEVEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_TIME_OFFSET, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_COMBAT_LOG_FILE_FLUSH, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ANIM_TIER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index a79e261590d..3365afbd902 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -44,14 +44,14 @@ enum OpcodeMisc : uint16
enum OpcodeClient : uint16
{
- CMSG_ABANDON_NPE_RESPONSE = 0x33F1,
+ CMSG_ABANDON_NPE_RESPONSE = 0x33F2,
CMSG_ACCEPT_GUILD_INVITE = 0x35FD,
- CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x339C,
+ CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x339D,
CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3745,
CMSG_ACCEPT_TRADE = 0x315A,
CMSG_ACCEPT_WARGAME_INVITE = 0x35E0,
CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3734,
- CMSG_ACTIVATE_SOULBIND = 0x33E0,
+ CMSG_ACTIVATE_SOULBIND = 0x33E1,
CMSG_ACTIVATE_TAXI = 0x34B2,
CMSG_ADDON_LIST = 0x35D8,
CMSG_ADD_ACCOUNT_COSMETIC = 0x32B6,
@@ -60,8 +60,8 @@ enum OpcodeClient : uint16
CMSG_ADD_IGNORE = 0x36D2,
CMSG_ADD_TOY = 0x32B5,
CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3202,
- CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E3,
- CMSG_ADVENTURE_MAP_START_QUEST = 0x336F,
+ CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E4,
+ CMSG_ADVENTURE_MAP_START_QUEST = 0x3370,
CMSG_ALTER_APPEARANCE = 0x3504,
CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B7,
CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B8,
@@ -101,15 +101,15 @@ enum OpcodeClient : uint16
CMSG_AUTO_GUILD_BANK_ITEM = 0x34BE,
CMSG_AUTO_STORE_BAG_ITEM = 0x399B,
CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x34C7,
- CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3398,
- CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x337A,
- CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x339A,
- CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3399,
+ CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3399,
+ CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x337B,
+ CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x339B,
+ CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x339A,
CMSG_BANKER_ACTIVATE = 0x34BA,
CMSG_BATTLEFIELD_LEAVE = 0x3172,
CMSG_BATTLEFIELD_LIST = 0x317D,
CMSG_BATTLEFIELD_PORT = 0x3539,
- CMSG_BATTLEMASTER_HELLO = 0x32D2,
+ CMSG_BATTLEMASTER_HELLO = 0x32D3,
CMSG_BATTLEMASTER_JOIN = 0x3531,
CMSG_BATTLEMASTER_JOIN_ARENA = 0x3532,
CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3537,
@@ -144,7 +144,7 @@ enum OpcodeClient : uint16
CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3541,
CMSG_BLACK_MARKET_OPEN = 0x353F,
CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3540,
- CMSG_BONUS_ROLL = 0x339B,
+ CMSG_BONUS_ROLL = 0x339C,
CMSG_BUG_REPORT = 0x3685,
CMSG_BUSY_TRADE = 0x3158,
CMSG_BUY_BACK_ITEM = 0x34AB,
@@ -182,9 +182,9 @@ enum OpcodeClient : uint16
CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3706,
CMSG_CAST_SPELL = 0x32B9,
CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x308F,
- CMSG_CHANGE_BAG_SLOT_FLAG = 0x3353,
- CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3354,
- CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3334,
+ CMSG_CHANGE_BAG_SLOT_FLAG = 0x3354,
+ CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3355,
+ CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3335,
CMSG_CHANGE_REALM_TICKET = 0x36F8,
CMSG_CHANGE_SUB_GROUP = 0x364C,
CMSG_CHARACTER_CHECK_UPGRADE = 0x36C4,
@@ -234,14 +234,14 @@ enum OpcodeClient : uint16
CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3645,
CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3258,
CMSG_CHOICE_RESPONSE = 0x32C1,
- CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33DF,
- CMSG_CLAIM_WEEKLY_REWARD = 0x33BB,
- CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3418,
+ CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33E0,
+ CMSG_CLAIM_WEEKLY_REWARD = 0x33BC,
+ CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x341A,
CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3212,
- CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x341A,
- CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3417,
- CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3416,
- CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x341B,
+ CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x341C,
+ CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3419,
+ CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3418,
+ CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x341D,
CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3211,
CMSG_CLEAR_NEW_APPEARANCE = 0x3129,
CMSG_CLEAR_RAID_MARKER = 0x31A5,
@@ -249,8 +249,8 @@ enum OpcodeClient : uint16
CMSG_CLIENT_PORT_GRAVEYARD = 0x353B,
CMSG_CLOSE_INTERACTION = 0x3499,
CMSG_CLOSE_QUEST_CHOICE = 0x32C2,
- CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E7,
- CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x341C,
+ CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E8,
+ CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x341E,
CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371D,
CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371B,
CMSG_CLUB_FINDER_POST = 0x3718,
@@ -285,33 +285,33 @@ enum OpcodeClient : uint16
CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E6,
CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36EA,
CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36EB,
- CMSG_CONTENT_TRACKING_START_TRACKING = 0x342C,
- CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x342D,
- CMSG_CONTRIBUTION_CONTRIBUTE = 0x356D,
- CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356E,
+ CMSG_CONTENT_TRACKING_START_TRACKING = 0x342E,
+ CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x342F,
+ CMSG_CONTRIBUTION_CONTRIBUTE = 0x356E,
+ CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356F,
CMSG_CONVERSATION_CINEMATIC_READY = 0x355B,
CMSG_CONVERSATION_LINE_STARTED = 0x355A,
CMSG_CONVERT_RAID = 0x364E,
- CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x3581,
- CMSG_CRAFTING_ORDER_CANCEL = 0x358C,
- CMSG_CRAFTING_ORDER_CLAIM = 0x3589,
- CMSG_CRAFTING_ORDER_CREATE = 0x3586,
- CMSG_CRAFTING_ORDER_FULFILL = 0x358B,
- CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x3588,
- CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x3587,
- CMSG_CRAFTING_ORDER_REJECT = 0x358D,
- CMSG_CRAFTING_ORDER_RELEASE = 0x358A,
- CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x358E,
- CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x358F,
+ CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x3582,
+ CMSG_CRAFTING_ORDER_CANCEL = 0x358D,
+ CMSG_CRAFTING_ORDER_CLAIM = 0x358A,
+ CMSG_CRAFTING_ORDER_CREATE = 0x3587,
+ CMSG_CRAFTING_ORDER_FULFILL = 0x358C,
+ CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x3589,
+ CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x3588,
+ CMSG_CRAFTING_ORDER_REJECT = 0x358E,
+ CMSG_CRAFTING_ORDER_RELEASE = 0x358B,
+ CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x358F,
+ CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x3590,
CMSG_CREATE_CHARACTER = 0x3644,
- CMSG_CREATE_SHIPMENT = 0x331F,
+ CMSG_CREATE_SHIPMENT = 0x3320,
CMSG_DB_QUERY_BULK = 0x35E4,
CMSG_DECLINE_GUILD_INVITES = 0x352E,
CMSG_DECLINE_PETITION = 0x3548,
CMSG_DELETE_EQUIPMENT_SET = 0x351A,
CMSG_DEL_FRIEND = 0x36CF,
CMSG_DEL_IGNORE = 0x36D3,
- CMSG_DEPOSIT_REAGENT_BANK = 0x335D,
+ CMSG_DEPOSIT_REAGENT_BANK = 0x335E,
CMSG_DESTROY_ITEM = 0x32AF,
CMSG_DF_BOOT_PLAYER_VOTE = 0x3617,
CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3609,
@@ -342,51 +342,51 @@ enum OpcodeClient : uint16
CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B0,
CMSG_GAME_OBJ_REPORT_USE = 0x34FE,
CMSG_GAME_OBJ_USE = 0x34FD,
- CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x331A,
- CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x3300,
- CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32ED,
- CMSG_GARRISON_CHECK_UPGRADEABLE = 0x334F,
- CMSG_GARRISON_COMPLETE_MISSION = 0x3341,
- CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x331B,
- CMSG_GARRISON_GENERATE_RECRUITS = 0x3303,
- CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3312,
- CMSG_GARRISON_GET_MAP_DATA = 0x3319,
- CMSG_GARRISON_GET_MISSION_REWARD = 0x3373,
- CMSG_GARRISON_LEARN_TALENT = 0x330E,
- CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3343,
- CMSG_GARRISON_PURCHASE_BUILDING = 0x32E9,
- CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3305,
- CMSG_GARRISON_REMOVE_FOLLOWER = 0x3338,
- CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x3301,
- CMSG_GARRISON_RENAME_FOLLOWER = 0x3302,
- CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32E8,
- CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x331D,
- CMSG_GARRISON_RESEARCH_TALENT = 0x3306,
- CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32EA,
- CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32FE,
- CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32F6,
- CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3304,
- CMSG_GARRISON_SOCKET_TALENT = 0x33F4,
- CMSG_GARRISON_START_MISSION = 0x3340,
- CMSG_GARRISON_SWAP_BUILDINGS = 0x32EE,
+ CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x331B,
+ CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x3301,
+ CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32EE,
+ CMSG_GARRISON_CHECK_UPGRADEABLE = 0x3350,
+ CMSG_GARRISON_COMPLETE_MISSION = 0x3342,
+ CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x331C,
+ CMSG_GARRISON_GENERATE_RECRUITS = 0x3304,
+ CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3313,
+ CMSG_GARRISON_GET_MAP_DATA = 0x331A,
+ CMSG_GARRISON_GET_MISSION_REWARD = 0x3374,
+ CMSG_GARRISON_LEARN_TALENT = 0x330F,
+ CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3344,
+ CMSG_GARRISON_PURCHASE_BUILDING = 0x32EA,
+ CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3306,
+ CMSG_GARRISON_REMOVE_FOLLOWER = 0x3339,
+ CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x3302,
+ CMSG_GARRISON_RENAME_FOLLOWER = 0x3303,
+ CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32E9,
+ CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x331E,
+ CMSG_GARRISON_RESEARCH_TALENT = 0x3307,
+ CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32EB,
+ CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32FF,
+ CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32F7,
+ CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3305,
+ CMSG_GARRISON_SOCKET_TALENT = 0x33F5,
+ CMSG_GARRISON_START_MISSION = 0x3341,
+ CMSG_GARRISON_SWAP_BUILDINGS = 0x32EF,
CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7,
CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B4,
CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3733,
- CMSG_GET_GARRISON_INFO = 0x32E3,
+ CMSG_GET_GARRISON_INFO = 0x32E4,
CMSG_GET_ITEM_PURCHASE_DATA = 0x3543,
- CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x331E,
+ CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x331F,
CMSG_GET_MIRROR_IMAGE_DATA = 0x32B3,
CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE,
CMSG_GET_RAF_ACCOUNT_INFO = 0x3721,
CMSG_GET_REMAINING_GAME_TIME = 0x36E9,
- CMSG_GET_TROPHY_LIST = 0x3331,
+ CMSG_GET_TROPHY_LIST = 0x3332,
CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DD,
CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36EE,
CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36EF,
CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3690,
CMSG_GM_TICKET_GET_CASE_STATUS = 0x368F,
CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368E,
- CMSG_GOSSIP_REFRESH_OPTIONS = 0x3580,
+ CMSG_GOSSIP_REFRESH_OPTIONS = 0x3581,
CMSG_GOSSIP_SELECT_OPTION = 0x349A,
CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308D,
CMSG_GUILD_ADD_RANK = 0x3065,
@@ -439,16 +439,16 @@ enum OpcodeClient : uint16
CMSG_INITIATE_TRADE = 0x3156,
CMSG_INSPECT = 0x353D,
CMSG_INSTANCE_LOCK_RESPONSE = 0x351B,
- CMSG_ISLAND_QUEUE = 0x33B7,
+ CMSG_ISLAND_QUEUE = 0x33B8,
CMSG_ITEM_PURCHASE_REFUND = 0x3544,
- CMSG_ITEM_TEXT_QUERY = 0x3350,
+ CMSG_ITEM_TEXT_QUERY = 0x3351,
CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DD,
CMSG_JOIN_RATED_BATTLEGROUND = 0x3178,
CMSG_KEEP_ALIVE = 0x367F,
CMSG_KEYBOUND_OVERRIDE = 0x322F,
CMSG_LATENCY_REPORT = 0x3771,
- CMSG_LEARN_PVP_TALENTS = 0x356C,
- CMSG_LEARN_TALENTS = 0x356A,
+ CMSG_LEARN_PVP_TALENTS = 0x356D,
+ CMSG_LEARN_TALENTS = 0x356B,
CMSG_LEAVE_GROUP = 0x3649,
CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31DE,
CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360E,
@@ -457,17 +457,17 @@ enum OpcodeClient : uint16
CMSG_LFG_LIST_GET_STATUS = 0x360C,
CMSG_LFG_LIST_INVITE_APPLICANT = 0x3611,
CMSG_LFG_LIST_INVITE_RESPONSE = 0x3612,
- CMSG_LFG_LIST_JOIN = 0x3396,
+ CMSG_LFG_LIST_JOIN = 0x3397,
CMSG_LFG_LIST_LEAVE = 0x360B,
CMSG_LFG_LIST_SEARCH = 0x360D,
- CMSG_LFG_LIST_UPDATE_REQUEST = 0x3397,
+ CMSG_LFG_LIST_UPDATE_REQUEST = 0x3398,
CMSG_LIST_INVENTORY = 0x34A7,
CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B7,
CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B6,
CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B5,
CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B8,
CMSG_LOADING_SCREEN_NOTIFY = 0x35F8,
- CMSG_LOAD_SELECTED_TROPHY = 0x3332,
+ CMSG_LOAD_SELECTED_TROPHY = 0x3333,
CMSG_LOGOUT_CANCEL = 0x34E7,
CMSG_LOGOUT_INSTANT = 0x34E8,
CMSG_LOGOUT_REQUEST = 0x34E5,
@@ -591,12 +591,12 @@ enum OpcodeClient : uint16
CMSG_NEXT_CINEMATIC_CAMERA = 0x3558,
CMSG_OBJECT_UPDATE_FAILED = 0x317F,
CMSG_OBJECT_UPDATE_RESCUED = 0x3180,
- CMSG_OFFER_PETITION = 0x33DE,
+ CMSG_OFFER_PETITION = 0x33DF,
CMSG_OPENING_CINEMATIC = 0x3557,
- CMSG_OPEN_ITEM = 0x3351,
- CMSG_OPEN_MISSION_NPC = 0x3314,
- CMSG_OPEN_SHIPMENT_NPC = 0x331C,
- CMSG_OPEN_TRADESKILL_NPC = 0x3327,
+ CMSG_OPEN_ITEM = 0x3352,
+ CMSG_OPEN_MISSION_NPC = 0x3315,
+ CMSG_OPEN_SHIPMENT_NPC = 0x331D,
+ CMSG_OPEN_TRADESKILL_NPC = 0x3328,
CMSG_OPT_OUT_OF_LOOT = 0x3505,
CMSG_OVERRIDE_SCREEN_FLASH = 0x352F,
CMSG_PARTY_INVITE = 0x3603,
@@ -604,10 +604,10 @@ enum OpcodeClient : uint16
CMSG_PARTY_UNINVITE = 0x3647,
CMSG_PERFORM_ITEM_INTERACTION = 0x323B,
CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x3135,
- CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3407,
- CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3408,
- CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3409,
- CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3406,
+ CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3409,
+ CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x340A,
+ CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x340B,
+ CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3408,
CMSG_PETITION_BUY = 0x34D0,
CMSG_PETITION_RENAME_GUILD = 0x36C7,
CMSG_PETITION_SHOW_LIST = 0x34CF,
@@ -657,7 +657,7 @@ enum OpcodeClient : uint16
CMSG_QUERY_REALM_NAME = 0x3689,
CMSG_QUERY_SCENARIO_POI = 0x3656,
CMSG_QUERY_TIME = 0x34E4,
- CMSG_QUERY_TREASURE_PICKER = 0x3376,
+ CMSG_QUERY_TREASURE_PICKER = 0x3377,
CMSG_QUERY_VOID_STORAGE = 0x31A1,
CMSG_QUEST_CONFIRM_ACCEPT = 0x34A4,
CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349E,
@@ -669,12 +669,12 @@ enum OpcodeClient : uint16
CMSG_QUEST_GIVER_REQUEST_REWARD = 0x34A1,
CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x34A3,
CMSG_QUEST_GIVER_STATUS_QUERY = 0x34A2,
- CMSG_QUEST_GIVER_STATUS_TRACKED_QUERY = 0x3591,
+ CMSG_QUEST_GIVER_STATUS_TRACKED_QUERY = 0x3592,
CMSG_QUEST_LOG_REMOVE_QUEST = 0x3542,
CMSG_QUEST_POI_QUERY = 0x36AE,
CMSG_QUEST_PUSH_RESULT = 0x34A6,
- CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33CF,
- CMSG_QUEST_SESSION_REQUEST_START = 0x33CE,
+ CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33D0,
+ CMSG_QUEST_SESSION_REQUEST_START = 0x33CF,
CMSG_QUEST_SESSION_REQUEST_STOP = 0x372C,
CMSG_QUEUED_MESSAGES_END = 0x376C,
CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3704,
@@ -688,34 +688,34 @@ enum OpcodeClient : uint16
CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3723,
CMSG_RANDOM_ROLL = 0x3654,
CMSG_READY_CHECK_RESPONSE = 0x3635,
- CMSG_READ_ITEM = 0x3352,
+ CMSG_READ_ITEM = 0x3353,
CMSG_RECLAIM_CORPSE = 0x34EA,
- CMSG_REMOVE_NEW_ITEM = 0x3379,
+ CMSG_REMOVE_NEW_ITEM = 0x337A,
CMSG_REMOVE_RAF_RECRUIT = 0x3725,
CMSG_REORDER_CHARACTERS = 0x35E9,
CMSG_REPAIR_ITEM = 0x34FB,
- CMSG_REPLACE_TROPHY = 0x3333,
+ CMSG_REPLACE_TROPHY = 0x3334,
CMSG_REPOP_REQUEST = 0x353A,
CMSG_REPORT_CLIENT_VARIABLES = 0x36FE,
CMSG_REPORT_ENABLED_ADDONS = 0x36FD,
CMSG_REPORT_FROZEN_WHILE_LOADING_MAP = 0x36A6,
CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FF,
CMSG_REPORT_PVP_PLAYER_AFK = 0x3503,
- CMSG_REPORT_SERVER_LAG = 0x33C7,
- CMSG_REPORT_STUCK_IN_COMBAT = 0x33C8,
+ CMSG_REPORT_SERVER_LAG = 0x33C8,
+ CMSG_REPORT_STUCK_IN_COMBAT = 0x33C9,
CMSG_REQUEST_ACCOUNT_DATA = 0x3694,
- CMSG_REQUEST_AREA_POI_UPDATE = 0x3378,
+ CMSG_REQUEST_AREA_POI_UPDATE = 0x3379,
CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC,
CMSG_REQUEST_CEMETERY_LIST = 0x3176,
CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368B,
- CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32D5,
- CMSG_REQUEST_COVENANT_CALLINGS = 0x33B9,
+ CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32D6,
+ CMSG_REQUEST_COVENANT_CALLINGS = 0x33BA,
CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353E,
CMSG_REQUEST_FORCED_REACTIONS = 0x320C,
- CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F3,
+ CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F4,
CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A7,
CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A6,
- CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C9,
+ CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33CA,
CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32C4,
CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3206,
CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3207,
@@ -733,19 +733,20 @@ enum OpcodeClient : uint16
CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x324A,
CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3249,
CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x324B,
- CMSG_REQUEST_WEEKLY_REWARDS = 0x33BC,
- CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3377,
+ CMSG_REQUEST_WEEKLY_REWARDS = 0x33BD,
+ CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3378,
CMSG_RESET_CHALLENGE_MODE = 0x3204,
CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3205,
CMSG_RESET_INSTANCES = 0x3668,
CMSG_RESURRECT_RESPONSE = 0x3683,
- CMSG_REVERT_MONUMENT_APPEARANCE = 0x3335,
+ CMSG_REVERT_MONUMENT_APPEARANCE = 0x3336,
CMSG_RIDE_VEHICLE_INTERACT = 0x324C,
CMSG_RPE_RESET_CHARACTER = 0x374F,
CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3749,
CMSG_SAVE_CUF_PROFILES = 0x318A,
CMSG_SAVE_EQUIPMENT_SET = 0x3519,
CMSG_SAVE_GUILD_EMBLEM = 0x32C8,
+ CMSG_SAVE_PERSONAL_EMBLEM = 0x32C9,
CMSG_SCENE_PLAYBACK_CANCELED = 0x322C,
CMSG_SCENE_PLAYBACK_COMPLETE = 0x322B,
CMSG_SCENE_TRIGGER_EVENT = 0x322D,
@@ -755,19 +756,19 @@ enum OpcodeClient : uint16
CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F7,
CMSG_SEND_CONTACT_LIST = 0x36CD,
CMSG_SEND_MAIL = 0x35FA,
- CMSG_SEND_PING_UNIT = 0x342F,
- CMSG_SEND_PING_WORLD_POINT = 0x3430,
+ CMSG_SEND_PING_UNIT = 0x3432,
+ CMSG_SEND_PING_WORLD_POINT = 0x3433,
CMSG_SEND_TEXT_EMOTE = 0x348E,
CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369B,
CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3232,
CMSG_SET_ACTION_BAR_TOGGLES = 0x3546,
CMSG_SET_ACTION_BUTTON = 0x3636,
CMSG_SET_ACTIVE_MOVER = 0x3A3C,
- CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32D6,
+ CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32D7,
CMSG_SET_ASSISTANT_LEADER = 0x364F,
- CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3355,
- CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x3356,
- CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3357,
+ CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3356,
+ CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x3357,
+ CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3358,
CMSG_SET_CONTACT_NOTES = 0x36D0,
CMSG_SET_CURRENCY_FLAGS = 0x3168,
CMSG_SET_DIFFICULTY_ID = 0x322E,
@@ -779,7 +780,7 @@ enum OpcodeClient : uint16
CMSG_SET_FACTION_INACTIVE = 0x34EF,
CMSG_SET_FACTION_NOT_AT_WAR = 0x34EE,
CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B8,
- CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3359,
+ CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x335A,
CMSG_SET_LOOT_METHOD = 0x3648,
CMSG_SET_LOOT_SPECIALIZATION = 0x3553,
CMSG_SET_PARTY_ASSIGNMENT = 0x3651,
@@ -787,30 +788,30 @@ enum OpcodeClient : uint16
CMSG_SET_PET_SLOT = 0x3167,
CMSG_SET_PLAYER_DECLINED_NAMES = 0x3688,
CMSG_SET_PREFERRED_CEMETERY = 0x3177,
- CMSG_SET_PVP = 0x32CC,
+ CMSG_SET_PVP = 0x32CD,
CMSG_SET_RAID_DIFFICULTY = 0x36D9,
CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x361A,
CMSG_SET_ROLE = 0x35D9,
CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3686,
CMSG_SET_SELECTION = 0x353C,
CMSG_SET_SHEATHED = 0x348F,
- CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3358,
+ CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3359,
CMSG_SET_TAXI_BENCHMARK_MODE = 0x3502,
CMSG_SET_TITLE = 0x3299,
CMSG_SET_TRADE_CURRENCY = 0x3160,
CMSG_SET_TRADE_GOLD = 0x315F,
CMSG_SET_TRADE_ITEM = 0x315D,
- CMSG_SET_USING_PARTY_GARRISON = 0x3316,
- CMSG_SET_WAR_MODE = 0x32CD,
+ CMSG_SET_USING_PARTY_GARRISON = 0x3317,
+ CMSG_SET_WAR_MODE = 0x32CE,
CMSG_SET_WATCHED_FACTION = 0x34F0,
CMSG_SHOW_TRADE_SKILL = 0x36C0,
CMSG_SIGN_PETITION = 0x3547,
CMSG_SILENCE_PARTY_TALKER = 0x3652,
CMSG_SOCIAL_CONTRACT_REQUEST = 0x3744,
CMSG_SOCKET_GEMS = 0x34FA,
- CMSG_SORT_BAGS = 0x335A,
- CMSG_SORT_BANK_BAGS = 0x335B,
- CMSG_SORT_REAGENT_BANK_BAGS = 0x335C,
+ CMSG_SORT_BAGS = 0x335B,
+ CMSG_SORT_BANK_BAGS = 0x335C,
+ CMSG_SORT_REAGENT_BANK_BAGS = 0x335D,
CMSG_SPAWN_TRACKING_UPDATE = 0x32AE,
CMSG_SPELL_CLICK = 0x349B,
CMSG_SPELL_EMPOWER_RELEASE = 0x3280,
@@ -826,7 +827,7 @@ enum OpcodeClient : uint16
CMSG_START_WAR_GAME = 0x35DE,
CMSG_STORE_GUILD_BANK_ITEM = 0x34BF,
CMSG_SUBMIT_USER_FEEDBACK = 0x3693,
- CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E8,
+ CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E9,
CMSG_SUMMON_RESPONSE = 0x366A,
CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3646,
CMSG_SURRENDER_ARENA = 0x3173,
@@ -838,7 +839,7 @@ enum OpcodeClient : uint16
CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x34C0,
CMSG_SWAP_SUB_GROUPS = 0x364D,
CMSG_SWAP_VOID_ITEM = 0x31A3,
- CMSG_TABARD_VENDOR_ACTIVATE = 0x32C9,
+ CMSG_TABARD_VENDOR_ACTIVATE = 0x32CA,
CMSG_TALK_TO_GOSSIP = 0x3498,
CMSG_TAXI_NODE_STATUS_QUERY = 0x34AF,
CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34B1,
@@ -848,18 +849,18 @@ enum OpcodeClient : uint16
CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3F,
CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3E,
CMSG_TOGGLE_DIFFICULTY = 0x3657,
- CMSG_TOGGLE_PVP = 0x32CB,
+ CMSG_TOGGLE_PVP = 0x32CC,
CMSG_TOTEM_DESTROYED = 0x3507,
CMSG_TOY_CLEAR_FANFARE = 0x3128,
- CMSG_TRADE_SKILL_SET_FAVORITE = 0x3375,
+ CMSG_TRADE_SKILL_SET_FAVORITE = 0x3376,
CMSG_TRAINER_BUY_SPELL = 0x34B5,
CMSG_TRAINER_LIST = 0x34B4,
- CMSG_TRAITS_COMMIT_CONFIG = 0x3410,
- CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x340E,
+ CMSG_TRAITS_COMMIT_CONFIG = 0x3412,
+ CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3410,
CMSG_TRANSMOGRIFY_ITEMS = 0x3196,
CMSG_TURN_IN_PETITION = 0x3549,
CMSG_TUTORIAL = 0x36DA,
- CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B8,
+ CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B9,
CMSG_UNACCEPT_TRADE = 0x315B,
CMSG_UNDELETE_CHARACTER = 0x36DC,
CMSG_UNLEARN_SKILL = 0x34F4,
@@ -869,13 +870,13 @@ enum OpcodeClient : uint16
CMSG_UPDATE_ACCOUNT_DATA = 0x3695,
CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32BB,
CMSG_UPDATE_CLIENT_SETTINGS = 0x3664,
- CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3328,
+ CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3329,
CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A43,
CMSG_UPDATE_RAID_TARGET = 0x3650,
CMSG_UPDATE_SPELL_VISUAL = 0x32BA,
CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F1,
- CMSG_UPGRADE_GARRISON = 0x32DE,
- CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E6,
+ CMSG_UPGRADE_GARRISON = 0x32DF,
+ CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E7,
CMSG_USED_FOLLOW = 0x3185,
CMSG_USE_CRITTER_ITEM = 0x3252,
CMSG_USE_EQUIPMENT_SET = 0x3995,
@@ -901,32 +902,32 @@ enum OpcodeServer : uint16
SMSG_ABORT_NEW_WORLD = 0x2597,
SMSG_ACCOUNT_COSMETIC_ADDED = 0x2876,
SMSG_ACCOUNT_CRITERIA_UPDATE = 0x285C,
- SMSG_ACCOUNT_DATA_TIMES = 0x2704,
- SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28B3,
+ SMSG_ACCOUNT_DATA_TIMES = 0x2705,
+ SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28B2,
SMSG_ACCOUNT_MOUNT_REMOVED = 0x25AE,
SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AD,
SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2875,
SMSG_ACCOUNT_TOY_UPDATE = 0x25AF,
SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B3,
SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B2,
- SMSG_ACHIEVEMENT_DELETED = 0x26E2,
- SMSG_ACHIEVEMENT_EARNED = 0x263F,
+ SMSG_ACHIEVEMENT_DELETED = 0x26E3,
+ SMSG_ACHIEVEMENT_EARNED = 0x2640,
SMSG_ACTIVATE_ESSENCE_FAILED = 0x3015,
SMSG_ACTIVATE_SOULBIND_FAILED = 0x3017,
- SMSG_ACTIVATE_TAXI_REPLY = 0x2679,
- SMSG_ACTIVE_GLYPHS = 0x2C54,
- SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2740,
- SMSG_ADDON_LIST_REQUEST = 0x263E,
- SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x2639,
+ SMSG_ACTIVATE_TAXI_REPLY = 0x267A,
+ SMSG_ACTIVE_GLYPHS = 0x2C56,
+ SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2741,
+ SMSG_ADDON_LIST_REQUEST = 0x263F,
+ SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263A,
SMSG_ADD_ITEM_PASSIVE = 0x25A9,
- SMSG_ADD_LOSS_OF_CONTROL = 0x266D,
- SMSG_ADD_RUNE_POWER = 0x26B3,
+ SMSG_ADD_LOSS_OF_CONTROL = 0x266E,
+ SMSG_ADD_RUNE_POWER = 0x26B4,
SMSG_ADJUST_SPLINE_DURATION = 0x25CF,
SMSG_ADVANCED_COMBAT_LOG = 0x2872,
SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x286C,
- SMSG_AE_LOOT_TARGETS = 0x2614,
- SMSG_AE_LOOT_TARGET_ACK = 0x2615,
- SMSG_AI_REACTION = 0x26B0,
+ SMSG_AE_LOOT_TARGETS = 0x2615,
+ SMSG_AE_LOOT_TARGET_ACK = 0x2616,
+ SMSG_AI_REACTION = 0x26B1,
SMSG_ALLIED_RACE_DETAILS = 0x27F0,
SMSG_ALL_ACCOUNT_CRITERIA = 0x2571,
SMSG_ALL_ACHIEVEMENT_DATA = 0x2570,
@@ -934,21 +935,21 @@ enum OpcodeServer : uint16
SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2849,
SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2586,
SMSG_AREA_POI_UPDATE_RESPONSE = 0x3010,
- SMSG_AREA_SPIRIT_HEALER_TIME = 0x2739,
+ SMSG_AREA_SPIRIT_HEALER_TIME = 0x273A,
SMSG_AREA_TRIGGER_DENIED = 0x2903,
SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x2900,
- SMSG_AREA_TRIGGER_NO_CORPSE = 0x2710,
+ SMSG_AREA_TRIGGER_NO_CORPSE = 0x2711,
SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FE,
SMSG_AREA_TRIGGER_RE_PATH = 0x28FD,
SMSG_AREA_TRIGGER_RE_SHAPE = 0x2902,
SMSG_AREA_TRIGGER_UNATTACH = 0x2901,
SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x28FF,
- SMSG_ARENA_CLEAR_OPPONENTS = 0x2645,
- SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262E,
- SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2644,
- SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279B,
- SMSG_ARTIFACT_FORGE_ERROR = 0x2799,
- SMSG_ARTIFACT_RESPEC_PROMPT = 0x279A,
+ SMSG_ARENA_CLEAR_OPPONENTS = 0x2646,
+ SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262F,
+ SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2645,
+ SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279C,
+ SMSG_ARTIFACT_FORGE_ERROR = 0x279A,
+ SMSG_ARTIFACT_RESPEC_PROMPT = 0x279B,
SMSG_ARTIFACT_XP_GAIN = 0x27E3,
SMSG_ATTACKER_STATE_UPDATE = 0x294E,
SMSG_ATTACK_START = 0x2939,
@@ -958,29 +959,29 @@ enum OpcodeServer : uint16
SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27CC,
SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27CB,
SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27CA,
- SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26ED,
- SMSG_AUCTION_COMMAND_RESULT = 0x26EA,
- SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2893,
+ SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26EE,
+ SMSG_AUCTION_COMMAND_RESULT = 0x26EB,
+ SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2892,
SMSG_AUCTION_FAVORITE_LIST = 0x2863,
SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x285A,
- SMSG_AUCTION_HELLO_RESPONSE = 0x26E8,
+ SMSG_AUCTION_HELLO_RESPONSE = 0x26E9,
SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2859,
SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2856,
SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2857,
SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2858,
- SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26EC,
- SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26EE,
- SMSG_AUCTION_REPLICATE_RESPONSE = 0x26E9,
- SMSG_AUCTION_WON_NOTIFICATION = 0x26EB,
- SMSG_AURA_POINTS_DEPLETED = 0x2C20,
- SMSG_AURA_UPDATE = 0x2C1F,
+ SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26ED,
+ SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26EF,
+ SMSG_AUCTION_REPLICATE_RESPONSE = 0x26EA,
+ SMSG_AUCTION_WON_NOTIFICATION = 0x26EC,
+ SMSG_AURA_POINTS_DEPLETED = 0x2C22,
+ SMSG_AURA_UPDATE = 0x2C21,
SMSG_AUTH_CHALLENGE = 0x3048,
SMSG_AUTH_FAILED = 0x256C,
SMSG_AUTH_RESPONSE = 0x256D,
SMSG_AVAILABLE_HOTFIXES = 0x290F,
- SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x2898,
+ SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x2897,
SMSG_BAG_CLEANUP_FINISHED = 0x2DA7,
- SMSG_BARBER_SHOP_RESULT = 0x26B8,
+ SMSG_BARBER_SHOP_RESULT = 0x26B9,
SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x283A,
SMSG_BATTLEFIELD_LIST = 0x2927,
SMSG_BATTLEFIELD_PORT_DENIED = 0x292D,
@@ -997,33 +998,33 @@ enum OpcodeServer : uint16
SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C,
SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928,
SMSG_BATTLEGROUND_POINTS = 0x294A,
- SMSG_BATTLENET_CHALLENGE_ABORT = 0x2783,
- SMSG_BATTLENET_CHALLENGE_START = 0x2782,
+ SMSG_BATTLENET_CHALLENGE_ABORT = 0x2784,
+ SMSG_BATTLENET_CHALLENGE_START = 0x2783,
SMSG_BATTLENET_NOTIFICATION = 0x27FC,
SMSG_BATTLENET_RESPONSE = 0x27FB,
SMSG_BATTLE_NET_CONNECTION_STATUS = 0x27FD,
- SMSG_BATTLE_PAY_ACK_FAILED = 0x277D,
- SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2772,
- SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2773,
- SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x277C,
- SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2770,
- SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x276F,
+ SMSG_BATTLE_PAY_ACK_FAILED = 0x277E,
+ SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2773,
+ SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2774,
+ SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x277D,
+ SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2771,
+ SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2770,
SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x287B,
- SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x276D,
- SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x276E,
- SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x276C,
- SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276A,
- SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x276B,
- SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2771,
- SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x277B,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x276E,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x276F,
+ SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x276D,
+ SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276B,
+ SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x276C,
+ SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2772,
+ SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x277C,
SMSG_BATTLE_PAY_START_CHECKOUT = 0x2818,
- SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2779,
- SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2778,
+ SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x277A,
+ SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2779,
SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x280C,
SMSG_BATTLE_PETS_HEALED = 0x25F1,
- SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2674,
+ SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2675,
SMSG_BATTLE_PET_DELETED = 0x25EE,
- SMSG_BATTLE_PET_ERROR = 0x2634,
+ SMSG_BATTLE_PET_ERROR = 0x2635,
SMSG_BATTLE_PET_JOURNAL = 0x25ED,
SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25EB,
SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25EC,
@@ -1032,56 +1033,56 @@ enum OpcodeServer : uint16
SMSG_BATTLE_PET_TRAP_LEVEL = 0x25E9,
SMSG_BATTLE_PET_UPDATES = 0x25E8,
SMSG_BIND_POINT_UPDATE = 0x257D,
- SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2624,
- SMSG_BLACK_MARKET_OUTBID = 0x2625,
- SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2623,
- SMSG_BLACK_MARKET_WON = 0x2626,
- SMSG_BONUS_ROLL_EMPTY = 0x2641,
+ SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2625,
+ SMSG_BLACK_MARKET_OUTBID = 0x2626,
+ SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2624,
+ SMSG_BLACK_MARKET_WON = 0x2627,
+ SMSG_BONUS_ROLL_EMPTY = 0x2642,
SMSG_BOSS_KILL = 0x294D,
SMSG_BREAK_TARGET = 0x2938,
SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC,
SMSG_BROADCAST_SUMMON_CAST = 0x283C,
SMSG_BROADCAST_SUMMON_RESPONSE = 0x283D,
- SMSG_BUY_FAILED = 0x26C1,
- SMSG_BUY_SUCCEEDED = 0x26C0,
+ SMSG_BUY_FAILED = 0x26C2,
+ SMSG_BUY_SUCCEEDED = 0x26C1,
SMSG_CACHE_INFO = 0x291D,
SMSG_CACHE_VERSION = 0x291C,
- SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x2699,
- SMSG_CALENDAR_COMMAND_RESULT = 0x269A,
- SMSG_CALENDAR_COMMUNITY_INVITE = 0x2689,
- SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2691,
- SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2692,
- SMSG_CALENDAR_INVITE_ADDED = 0x268A,
- SMSG_CALENDAR_INVITE_ALERT = 0x268E,
- SMSG_CALENDAR_INVITE_NOTES = 0x2693,
- SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2694,
- SMSG_CALENDAR_INVITE_REMOVED = 0x268B,
- SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2690,
- SMSG_CALENDAR_INVITE_STATUS = 0x268C,
- SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x268F,
- SMSG_CALENDAR_MODERATOR_STATUS = 0x268D,
- SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2695,
- SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2696,
- SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2697,
- SMSG_CALENDAR_SEND_CALENDAR = 0x2687,
- SMSG_CALENDAR_SEND_EVENT = 0x2688,
- SMSG_CALENDAR_SEND_NUM_PENDING = 0x2698,
- SMSG_CAMERA_EFFECT = 0x271F,
- SMSG_CANCEL_AUTO_REPEAT = 0x26D8,
+ SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x269A,
+ SMSG_CALENDAR_COMMAND_RESULT = 0x269B,
+ SMSG_CALENDAR_COMMUNITY_INVITE = 0x268A,
+ SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2692,
+ SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2693,
+ SMSG_CALENDAR_INVITE_ADDED = 0x268B,
+ SMSG_CALENDAR_INVITE_ALERT = 0x268F,
+ SMSG_CALENDAR_INVITE_NOTES = 0x2694,
+ SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2695,
+ SMSG_CALENDAR_INVITE_REMOVED = 0x268C,
+ SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2691,
+ SMSG_CALENDAR_INVITE_STATUS = 0x268D,
+ SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2690,
+ SMSG_CALENDAR_MODERATOR_STATUS = 0x268E,
+ SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2696,
+ SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2697,
+ SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2698,
+ SMSG_CALENDAR_SEND_CALENDAR = 0x2688,
+ SMSG_CALENDAR_SEND_EVENT = 0x2689,
+ SMSG_CALENDAR_SEND_NUM_PENDING = 0x2699,
+ SMSG_CAMERA_EFFECT = 0x2720,
+ SMSG_CANCEL_AUTO_REPEAT = 0x26D9,
SMSG_CANCEL_COMBAT = 0x2947,
- SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46,
+ SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C48,
SMSG_CANCEL_PING_PIN = 0x25A2,
SMSG_CANCEL_PRELOAD_WORLD = 0x2595,
- SMSG_CANCEL_SCENE = 0x2633,
- SMSG_CANCEL_SPELL_VISUAL = 0x2C44,
- SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48,
+ SMSG_CANCEL_SCENE = 0x2634,
+ SMSG_CANCEL_SPELL_VISUAL = 0x2C46,
+ SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C4A,
SMSG_CAN_DUEL_RESULT = 0x2943,
SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x280B,
SMSG_CAPTURE_POINT_REMOVED = 0x292A,
- SMSG_CAST_FAILED = 0x2C57,
+ SMSG_CAST_FAILED = 0x2C59,
SMSG_CHAIN_MISSILE_BOUNCE = 0x25C7,
SMSG_CHALLENGE_MODE_COMPLETE = 0x2608,
- SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260C,
+ SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260D,
SMSG_CHALLENGE_MODE_RESET = 0x2607,
SMSG_CHALLENGE_MODE_START = 0x2605,
SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2606,
@@ -1091,17 +1092,17 @@ enum OpcodeServer : uint16
SMSG_CHANNEL_NOTIFY = 0x2BC1,
SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC2,
SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC3,
- SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B6,
- SMSG_CHARACTER_LOGIN_FAILED = 0x26FF,
- SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2781,
- SMSG_CHARACTER_RENAME_RESULT = 0x275C,
- SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B5,
- SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B4,
- SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27B7,
- SMSG_CHARACTER_UPGRADE_STARTED = 0x27B3,
- SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26DC,
- SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26DD,
- SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A0,
+ SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B7,
+ SMSG_CHARACTER_LOGIN_FAILED = 0x2700,
+ SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2782,
+ SMSG_CHARACTER_RENAME_RESULT = 0x275D,
+ SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B6,
+ SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B5,
+ SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27B8,
+ SMSG_CHARACTER_UPGRADE_STARTED = 0x27B4,
+ SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26DD,
+ SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26DE,
+ SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A1,
SMSG_CHAT = 0x2BAD,
SMSG_CHAT_AUTO_RESPONDED = 0x2BB8,
SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x2BCB,
@@ -1121,94 +1122,94 @@ enum OpcodeServer : uint16
SMSG_CHECK_WARGAME_ENTRY = 0x258F,
SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2866,
SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x284D,
- SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C24,
+ SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C26,
SMSG_CLEAR_BOSS_EMOTES = 0x25BA,
- SMSG_CLEAR_COOLDOWN = 0x26B5,
- SMSG_CLEAR_COOLDOWNS = 0x2C23,
+ SMSG_CLEAR_COOLDOWN = 0x26B6,
+ SMSG_CLEAR_COOLDOWNS = 0x2C25,
SMSG_CLEAR_RESURRECT = 0x257F,
- SMSG_CLEAR_SPELL_CHARGES = 0x2C25,
+ SMSG_CLEAR_SPELL_CHARGES = 0x2C27,
SMSG_CLEAR_TARGET = 0x2944,
SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1,
- SMSG_CLOSE_ARTIFACT_FORGE = 0x2798,
+ SMSG_CLOSE_ARTIFACT_FORGE = 0x2799,
SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2845,
SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2848,
SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2846,
SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2843,
SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2847,
SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2844,
- SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x288A,
- SMSG_COIN_REMOVED = 0x2613,
+ SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x2889,
+ SMSG_COIN_REMOVED = 0x2614,
SMSG_COMBAT_EVENT_FAILED = 0x293B,
- SMSG_COMMENTATOR_MAP_INFO = 0x2701,
- SMSG_COMMENTATOR_PLAYER_INFO = 0x2702,
- SMSG_COMMENTATOR_STATE_CHANGED = 0x2700,
+ SMSG_COMMENTATOR_MAP_INFO = 0x2702,
+ SMSG_COMMENTATOR_PLAYER_INFO = 0x2703,
+ SMSG_COMMENTATOR_STATE_CHANGED = 0x2701,
SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27C7,
SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D3,
SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27C9,
SMSG_COMMERCE_TOKEN_UPDATE = 0x27C8,
- SMSG_COMPLAINT_RESULT = 0x26A7,
- SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2791,
+ SMSG_COMPLAINT_RESULT = 0x26A8,
+ SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2792,
SMSG_CONFIRM_PARTY_INVITE = 0x280A,
SMSG_CONNECT_TO = 0x304D,
- SMSG_CONQUEST_FORMULA_CONSTANTS = 0x277E,
- SMSG_CONSOLE_WRITE = 0x2631,
+ SMSG_CONQUEST_FORMULA_CONSTANTS = 0x277F,
+ SMSG_CONSOLE_WRITE = 0x2632,
SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27CF,
SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27CE,
SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27CD,
SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D1,
SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D2,
- SMSG_CONTACT_LIST = 0x277F,
+ SMSG_CONTACT_LIST = 0x2780,
SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2811,
- SMSG_CONTROL_UPDATE = 0x2643,
+ SMSG_CONTROL_UPDATE = 0x2644,
SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x286F,
- SMSG_COOLDOWN_CHEAT = 0x2732,
- SMSG_COOLDOWN_EVENT = 0x26B4,
- SMSG_CORPSE_LOCATION = 0x264B,
- SMSG_CORPSE_RECLAIM_DELAY = 0x2743,
- SMSG_CORPSE_TRANSPORT_QUERY = 0x270C,
+ SMSG_COOLDOWN_CHEAT = 0x2733,
+ SMSG_COOLDOWN_EVENT = 0x26B5,
+ SMSG_CORPSE_LOCATION = 0x264C,
+ SMSG_CORPSE_RECLAIM_DELAY = 0x2744,
+ SMSG_CORPSE_TRANSPORT_QUERY = 0x270D,
SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3,
SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F3,
SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2870,
- SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x28A6,
- SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x28A2,
- SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x289E,
- SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x28A0,
- SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x289C,
- SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x28A1,
- SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x289D,
- SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x28A4,
- SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x289F,
- SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x28A7,
- SMSG_CRAFT_ENCHANT_RESULT = 0x28A5,
- SMSG_CREATE_CHAR = 0x26FB,
- SMSG_CREATE_SHIPMENT_RESPONSE = 0x2790,
- SMSG_CREATOR_VISUALS_OVERRIDE = 0x28AA,
- SMSG_CRITERIA_DELETED = 0x26E1,
- SMSG_CRITERIA_UPDATE = 0x26DB,
- SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BC,
+ SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x28A5,
+ SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x28A1,
+ SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x289D,
+ SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x289F,
+ SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x289B,
+ SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x28A0,
+ SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x289C,
+ SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x28A3,
+ SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x289E,
+ SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x28A6,
+ SMSG_CRAFT_ENCHANT_RESULT = 0x28A4,
+ SMSG_CREATE_CHAR = 0x26FC,
+ SMSG_CREATE_SHIPMENT_RESPONSE = 0x2791,
+ SMSG_CREATOR_VISUALS_OVERRIDE = 0x28A9,
+ SMSG_CRITERIA_DELETED = 0x26E2,
+ SMSG_CRITERIA_UPDATE = 0x26DC,
+ SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BD,
SMSG_CUSTOM_LOAD_SCREEN = 0x25CA,
SMSG_DAILY_QUESTS_RESET = 0x2A80,
- SMSG_DAMAGE_CALC_LOG = 0x2C63,
+ SMSG_DAMAGE_CALC_LOG = 0x2C65,
SMSG_DB_REPLY = 0x290E,
- SMSG_DEATH_RELEASE_LOC = 0x26CE,
- SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2651,
+ SMSG_DEATH_RELEASE_LOC = 0x26CF,
+ SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2652,
SMSG_DEFENSE_MESSAGE = 0x2BB6,
- SMSG_DELETE_CHAR = 0x26FC,
+ SMSG_DELETE_CHAR = 0x26FD,
SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980,
- SMSG_DESTROY_ARENA_UNIT = 0x273B,
- SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F3,
+ SMSG_DESTROY_ARENA_UNIT = 0x273C,
+ SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F4,
SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x2589,
SMSG_DISENCHANT_CREDIT = 0x25A6,
SMSG_DISMOUNT_RESULT = 0x257C,
- SMSG_DISPEL_FAILED = 0x2C2D,
+ SMSG_DISPEL_FAILED = 0x2C2F,
SMSG_DISPLAY_GAME_ERROR = 0x259C,
SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC,
- SMSG_DISPLAY_PROMOTION = 0x2648,
+ SMSG_DISPLAY_PROMOTION = 0x2649,
SMSG_DISPLAY_QUEST_POPUP = 0x2A9E,
SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2874,
- SMSG_DISPLAY_TOAST = 0x2620,
+ SMSG_DISPLAY_TOAST = 0x2621,
SMSG_DISPLAY_WORLD_TEXT = 0x27E4,
- SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x2C62,
+ SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x2C64,
SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25DF,
SMSG_DROP_NEW_CONNECTION = 0x304C,
SMSG_DUEL_ARRANGED = 0x293D,
@@ -1218,51 +1219,52 @@ enum OpcodeServer : uint16
SMSG_DUEL_OUT_OF_BOUNDS = 0x293E,
SMSG_DUEL_REQUESTED = 0x293C,
SMSG_DUEL_WINNER = 0x2942,
- SMSG_DURABILITY_DAMAGE_DEATH = 0x273E,
- SMSG_EMOTE = 0x27BD,
- SMSG_ENABLE_BARBER_SHOP = 0x26B7,
- SMSG_ENCHANTMENT_LOG = 0x270D,
- SMSG_ENCOUNTER_END = 0x2777,
- SMSG_ENCOUNTER_START = 0x2776,
- SMSG_END_LIGHTNING_STORM = 0x26A4,
- SMSG_ENSURE_WORLD_LOADED = 0x2884,
+ SMSG_DURABILITY_DAMAGE_DEATH = 0x273F,
+ SMSG_EMOTE = 0x27BE,
+ SMSG_ENABLE_BARBER_SHOP = 0x26B8,
+ SMSG_ENCHANTMENT_LOG = 0x270E,
+ SMSG_ENCOUNTER_END = 0x2778,
+ SMSG_ENCOUNTER_START = 0x2777,
+ SMSG_END_LIGHTNING_STORM = 0x26A5,
+ SMSG_ENSURE_WORLD_LOADED = 0x2883,
SMSG_ENTER_ENCRYPTED_MODE = 0x3049,
SMSG_ENUM_CHARACTERS_RESULT = 0x2583,
SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27E9,
SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C1E,
- SMSG_EQUIPMENT_SET_ID = 0x26AD,
+ SMSG_EQUIPMENT_SET_ID = 0x26AE,
SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1,
- SMSG_EXPLORATION_EXPERIENCE = 0x2758,
+ SMSG_EXPLORATION_EXPERIENCE = 0x2759,
SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x286D,
- SMSG_FACTION_BONUS_INFO = 0x271E,
+ SMSG_FACTION_BONUS_INFO = 0x271F,
SMSG_FAILED_PLAYER_CONDITION = 0x2FFA,
SMSG_FAILED_QUEST_TURN_IN = 0x2807,
SMSG_FEATURE_SYSTEM_STATUS = 0x25BE,
SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25BF,
- SMSG_FEIGN_DEATH_RESISTED = 0x273D,
- SMSG_FISH_ESCAPED = 0x26CB,
- SMSG_FISH_NOT_HOOKED = 0x26CA,
+ SMSG_FEIGN_DEATH_RESISTED = 0x273E,
+ SMSG_FISH_ESCAPED = 0x26CC,
+ SMSG_FISH_NOT_HOOKED = 0x26CB,
SMSG_FLIGHT_SPLINE_SYNC = 0x2E2B,
- SMSG_FORCED_DEATH_UPDATE = 0x26CF,
- SMSG_FORCE_ANIM = 0x274A,
- SMSG_FORCE_ANIMATIONS = 0x274B,
- SMSG_FORCE_OBJECT_RELINK = 0x2647,
+ SMSG_FLUSH_COMBAT_LOG_FILE = 0x2C20,
+ SMSG_FORCED_DEATH_UPDATE = 0x26D0,
+ SMSG_FORCE_ANIM = 0x274B,
+ SMSG_FORCE_ANIMATIONS = 0x274C,
+ SMSG_FORCE_OBJECT_RELINK = 0x2648,
SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x25B1,
- SMSG_FRIEND_STATUS = 0x2780,
+ SMSG_FRIEND_STATUS = 0x2781,
SMSG_GAIN_MAW_POWER = 0x27D8,
SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C2,
SMSG_GAME_OBJECT_BASE = 0x281E,
- SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2888,
+ SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2887,
SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C3,
SMSG_GAME_OBJECT_DESPAWN = 0x25C4,
- SMSG_GAME_OBJECT_INTERACTION = 0x2887,
- SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B,
- SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A,
- SMSG_GAME_OBJECT_RESET_STATE = 0x2718,
+ SMSG_GAME_OBJECT_INTERACTION = 0x2886,
+ SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4D,
+ SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4C,
+ SMSG_GAME_OBJECT_RESET_STATE = 0x2719,
SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27FA,
- SMSG_GAME_SPEED_SET = 0x267D,
- SMSG_GAME_TIME_SET = 0x2706,
- SMSG_GAME_TIME_UPDATE = 0x2705,
+ SMSG_GAME_SPEED_SET = 0x267E,
+ SMSG_GAME_TIME_SET = 0x2707,
+ SMSG_GAME_TIME_UPDATE = 0x2706,
SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982,
SMSG_GARRISON_ADD_EVENT = 0x29A6,
SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974,
@@ -1335,35 +1337,35 @@ enum OpcodeServer : uint16
SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D,
SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2585,
SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2812,
- SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275A,
+ SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275B,
SMSG_GET_GARRISON_INFO_RESULT = 0x295E,
- SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2793,
- SMSG_GET_REALM_HIDDEN_RESULT = 0x28B8,
+ SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2794,
+ SMSG_GET_REALM_HIDDEN_RESULT = 0x28B7,
SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D0,
- SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BB,
- SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2792,
- SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x278E,
- SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BA,
+ SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BC,
+ SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2793,
+ SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x278F,
+ SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BB,
SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E5,
SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E6,
SMSG_GM_PLAYER_INFO = 0x3005,
SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB,
- SMSG_GM_TICKET_CASE_STATUS = 0x269F,
- SMSG_GM_TICKET_SYSTEM_STATUS = 0x269E,
- SMSG_GOD_MODE = 0x26F6,
+ SMSG_GM_TICKET_CASE_STATUS = 0x26A0,
+ SMSG_GM_TICKET_SYSTEM_STATUS = 0x269F,
+ SMSG_GOD_MODE = 0x26F7,
SMSG_GOSSIP_COMPLETE = 0x2A97,
SMSG_GOSSIP_MESSAGE = 0x2A98,
SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA7,
- SMSG_GOSSIP_POI = 0x278B,
+ SMSG_GOSSIP_POI = 0x278C,
SMSG_GOSSIP_QUEST_UPDATE = 0x2A99,
SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6,
SMSG_GROUP_ACTION_THROTTLED = 0x258D,
- SMSG_GROUP_AUTO_KICK = 0x2788,
- SMSG_GROUP_DECLINE = 0x2784,
- SMSG_GROUP_DESTROYED = 0x2787,
- SMSG_GROUP_NEW_LEADER = 0x2629,
- SMSG_GROUP_REQUEST_DECLINE = 0x2785,
- SMSG_GROUP_UNINVITE = 0x2786,
+ SMSG_GROUP_AUTO_KICK = 0x2789,
+ SMSG_GROUP_DECLINE = 0x2785,
+ SMSG_GROUP_DESTROYED = 0x2788,
+ SMSG_GROUP_NEW_LEADER = 0x262A,
+ SMSG_GROUP_REQUEST_DECLINE = 0x2786,
+ SMSG_GROUP_UNINVITE = 0x2787,
SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5,
SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4,
SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7,
@@ -1417,59 +1419,59 @@ enum OpcodeServer : uint16
SMSG_GUILD_ROSTER = 0x29BB,
SMSG_GUILD_ROSTER_UPDATE = 0x29BC,
SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9,
- SMSG_HEALTH_UPDATE = 0x26CC,
- SMSG_HIGHEST_THREAT_UPDATE = 0x26D4,
+ SMSG_HEALTH_UPDATE = 0x26CD,
+ SMSG_HIGHEST_THREAT_UPDATE = 0x26D5,
SMSG_HOTFIX_CONNECT = 0x2911,
SMSG_HOTFIX_MESSAGE = 0x2910,
- SMSG_INITIALIZE_FACTIONS = 0x271D,
+ SMSG_INITIALIZE_FACTIONS = 0x271E,
SMSG_INITIAL_SETUP = 0x2580,
- SMSG_INIT_WORLD_STATES = 0x273F,
- SMSG_INSPECT_RESULT = 0x262D,
- SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A6,
- SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A5,
- SMSG_INSTANCE_ENCOUNTER_END = 0x27AE,
- SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A4,
- SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B0,
- SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27AF,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27A9,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27A8,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27AD,
- SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B1,
- SMSG_INSTANCE_ENCOUNTER_START = 0x27AA,
- SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27A7,
- SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27AC,
- SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AB,
- SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F4,
- SMSG_INSTANCE_INFO = 0x2630,
- SMSG_INSTANCE_RESET = 0x2682,
- SMSG_INSTANCE_RESET_FAILED = 0x2683,
- SMSG_INSTANCE_SAVE_CREATED = 0x2775,
- SMSG_INTERRUPT_POWER_REGEN = 0x2C59,
+ SMSG_INIT_WORLD_STATES = 0x2740,
+ SMSG_INSPECT_RESULT = 0x262E,
+ SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A7,
+ SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A6,
+ SMSG_INSTANCE_ENCOUNTER_END = 0x27AF,
+ SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A5,
+ SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B1,
+ SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B0,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27AA,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27A9,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27AE,
+ SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B2,
+ SMSG_INSTANCE_ENCOUNTER_START = 0x27AB,
+ SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27A8,
+ SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27AD,
+ SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AC,
+ SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F5,
+ SMSG_INSTANCE_INFO = 0x2631,
+ SMSG_INSTANCE_RESET = 0x2683,
+ SMSG_INSTANCE_RESET_FAILED = 0x2684,
+ SMSG_INSTANCE_SAVE_CREATED = 0x2776,
+ SMSG_INTERRUPT_POWER_REGEN = 0x2C5B,
SMSG_INVALIDATE_PAGE_TEXT = 0x2918,
SMSG_INVALIDATE_PLAYER = 0x2FFF,
- SMSG_INVALID_PROMOTION_CODE = 0x274C,
+ SMSG_INVALID_PROMOTION_CODE = 0x274D,
SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5,
SMSG_INVENTORY_FIXUP_COMPLETE = 0x2809,
SMSG_INVENTORY_FULL_OVERFLOW = 0x281A,
- SMSG_ISLAND_AZERITE_GAIN = 0x2755,
- SMSG_ISLAND_COMPLETE = 0x2756,
+ SMSG_ISLAND_AZERITE_GAIN = 0x2756,
+ SMSG_ISLAND_COMPLETE = 0x2757,
SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84,
- SMSG_ITEM_CHANGED = 0x26E5,
- SMSG_ITEM_COOLDOWN = 0x27BC,
- SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x274E,
+ SMSG_ITEM_CHANGED = 0x26E6,
+ SMSG_ITEM_COOLDOWN = 0x27BD,
+ SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x274F,
SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259B,
SMSG_ITEM_INTERACTION_COMPLETE = 0x2865,
SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x2599,
- SMSG_ITEM_PUSH_RESULT = 0x261F,
- SMSG_ITEM_TIME_UPDATE = 0x274D,
- SMSG_KICK_REASON = 0x2685,
+ SMSG_ITEM_PUSH_RESULT = 0x2620,
+ SMSG_ITEM_TIME_UPDATE = 0x274E,
+ SMSG_KICK_REASON = 0x2686,
SMSG_LATENCY_REPORT_PING = 0x2877,
- SMSG_LEARNED_SPELLS = 0x2C4D,
+ SMSG_LEARNED_SPELLS = 0x2C4F,
SMSG_LEARN_PVP_TALENT_FAILED = 0x25D3,
SMSG_LEARN_TALENT_FAILED = 0x25D2,
SMSG_LEGACY_LOOT_RULES = 0x281F,
SMSG_LEVEL_LINKING_RESULT = 0x284B,
- SMSG_LEVEL_UP_INFO = 0x26E3,
+ SMSG_LEVEL_UP_INFO = 0x26E4,
SMSG_LFG_BOOT_PLAYER = 0x2A35,
SMSG_LFG_DISABLED = 0x2A33,
SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B,
@@ -1497,46 +1499,45 @@ enum OpcodeServer : uint16
SMSG_LFG_SLOT_INVALID = 0x2A30,
SMSG_LFG_TELEPORT_DENIED = 0x2A32,
SMSG_LFG_UPDATE_STATUS = 0x2A24,
- SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2767,
- SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2766,
- SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275B,
- SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2768,
+ SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2768,
+ SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2767,
+ SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275C,
+ SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2769,
SMSG_LOAD_CUF_PROFILES = 0x25BB,
- SMSG_LOAD_EQUIPMENT_SET = 0x2708,
- SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x288C,
- SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x288D,
- SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x288E,
- SMSG_LOGIN_SET_TIME_SPEED = 0x2707,
+ SMSG_LOAD_EQUIPMENT_SET = 0x2709,
+ SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x288B,
+ SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x288C,
+ SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x288D,
+ SMSG_LOGIN_SET_TIME_SPEED = 0x2708,
SMSG_LOGIN_VERIFY_WORLD = 0x2596,
- SMSG_LOGOUT_CANCEL_ACK = 0x2681,
- SMSG_LOGOUT_COMPLETE = 0x2680,
- SMSG_LOGOUT_RESPONSE = 0x267F,
- SMSG_LOG_XP_GAIN = 0x26DF,
- SMSG_LOOT_ALL_PASSED = 0x261D,
- SMSG_LOOT_LIST = 0x273A,
- SMSG_LOOT_MONEY_NOTIFY = 0x2618,
- SMSG_LOOT_RELEASE = 0x2617,
- SMSG_LOOT_RELEASE_ALL = 0x2616,
- SMSG_LOOT_REMOVED = 0x2612,
- SMSG_LOOT_RESPONSE = 0x2611,
- SMSG_LOOT_ROLL = 0x261A,
- SMSG_LOOT_ROLLS_COMPLETE = 0x261C,
- SMSG_LOOT_ROLL_WON = 0x261E,
- SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x266C,
- SMSG_MAIL_COMMAND_RESULT = 0x2637,
- SMSG_MAIL_LIST_RESULT = 0x274F,
- SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2750,
+ SMSG_LOGOUT_CANCEL_ACK = 0x2682,
+ SMSG_LOGOUT_COMPLETE = 0x2681,
+ SMSG_LOGOUT_RESPONSE = 0x2680,
+ SMSG_LOG_XP_GAIN = 0x26E0,
+ SMSG_LOOT_ALL_PASSED = 0x261E,
+ SMSG_LOOT_LIST = 0x273B,
+ SMSG_LOOT_MONEY_NOTIFY = 0x2619,
+ SMSG_LOOT_RELEASE = 0x2618,
+ SMSG_LOOT_RELEASE_ALL = 0x2617,
+ SMSG_LOOT_REMOVED = 0x2613,
+ SMSG_LOOT_RESPONSE = 0x2612,
+ SMSG_LOOT_ROLL = 0x261B,
+ SMSG_LOOT_ROLLS_COMPLETE = 0x261D,
+ SMSG_LOOT_ROLL_WON = 0x261F,
+ SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x266D,
+ SMSG_MAIL_COMMAND_RESULT = 0x2638,
+ SMSG_MAIL_LIST_RESULT = 0x2750,
+ SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2751,
SMSG_MAP_OBJECTIVES_INIT = 0x294C,
SMSG_MAP_OBJ_EVENTS = 0x25C5,
- SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261B,
- SMSG_MEETING_STONE_FAILED = 0x288F,
+ SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261C,
+ SMSG_MEETING_STONE_FAILED = 0x288E,
SMSG_MESSAGE_BOX = 0x2576,
- SMSG_MINIMAP_PING = 0x26C9,
+ SMSG_MINIMAP_PING = 0x26CA,
SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14,
SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13,
SMSG_MISSILE_CANCEL = 0x25C6,
- SMSG_MODIFY_COOLDOWN = 0x275D,
- SMSG_MOTD = 0x2BAF,
+ SMSG_MODIFY_COOLDOWN = 0x275E,
SMSG_MOUNT_RESULT = 0x257B,
SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x283B,
SMSG_MOVE_ADD_IMPULSE = 0x2E32,
@@ -1650,51 +1651,50 @@ enum OpcodeServer : uint16
SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D4,
SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x2609,
SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260B,
- SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260E,
+ SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260F,
SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260A,
SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DA,
- SMSG_NEW_DATA_BUILD = 0x28B7,
- SMSG_NEW_TAXI_PATH = 0x267A,
+ SMSG_NEW_DATA_BUILD = 0x28B6,
+ SMSG_NEW_TAXI_PATH = 0x267B,
SMSG_NEW_WORLD = 0x2593,
- SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43,
- SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A6,
+ SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C45,
+ SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A7,
SMSG_NOTIFY_MONEY = 0x2598,
- SMSG_NOTIFY_RECEIVED_MAIL = 0x2638,
- SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2886,
- SMSG_OFFER_PETITION_ERROR = 0x26B1,
- SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E0,
+ SMSG_NOTIFY_RECEIVED_MAIL = 0x2639,
+ SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2885,
+ SMSG_OFFER_PETITION_ERROR = 0x26B2,
+ SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E1,
SMSG_ON_MONSTER_MOVE = 0x2DD4,
- SMSG_OPEN_ARTIFACT_FORGE = 0x2797,
+ SMSG_OPEN_ARTIFACT_FORGE = 0x2798,
SMSG_OPEN_CONTAINER = 0x2DA6,
SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31,
- SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x278F,
- SMSG_OVERRIDE_LIGHT = 0x26B6,
- SMSG_PAGE_TEXT = 0x2713,
- SMSG_PARTY_COMMAND_RESULT = 0x2789,
+ SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2790,
+ SMSG_OVERRIDE_LIGHT = 0x26B7,
+ SMSG_PAGE_TEXT = 0x2714,
+ SMSG_PARTY_COMMAND_RESULT = 0x278A,
SMSG_PARTY_INVITE = 0x25BC,
- SMSG_PARTY_KILL_LOG = 0x2753,
- SMSG_PARTY_MEMBER_FULL_STATE = 0x2752,
- SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2751,
+ SMSG_PARTY_KILL_LOG = 0x2754,
+ SMSG_PARTY_MEMBER_FULL_STATE = 0x2753,
+ SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2752,
SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x286B,
SMSG_PARTY_UPDATE = 0x25F2,
SMSG_PAST_TIME_EVENTS = 0x25C1,
- SMSG_PAUSE_MIRROR_TIMER = 0x270A,
- SMSG_PENDING_RAID_LOCK = 0x26F2,
- SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2882,
+ SMSG_PAUSE_MIRROR_TIMER = 0x270B,
+ SMSG_PENDING_RAID_LOCK = 0x26F3,
+ SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2881,
SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x287D,
- SMSG_PERKS_PROGRAM_DISABLED = 0x2883,
- SMSG_PERKS_PROGRAM_RESULT = 0x287F,
- SMSG_PERKS_PROGRAM_VENDOR_PENDING = 0x287E,
+ SMSG_PERKS_PROGRAM_DISABLED = 0x2882,
+ SMSG_PERKS_PROGRAM_RESULT = 0x287E,
SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x287C,
SMSG_PETITION_ALREADY_SIGNED = 0x259E,
SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA,
- SMSG_PETITION_SHOW_LIST = 0x26B9,
- SMSG_PETITION_SHOW_SIGNATURES = 0x26BA,
- SMSG_PETITION_SIGN_RESULTS = 0x2745,
- SMSG_PET_ACTION_FEEDBACK = 0x2742,
- SMSG_PET_ACTION_SOUND = 0x269C,
+ SMSG_PETITION_SHOW_LIST = 0x26BA,
+ SMSG_PETITION_SHOW_SIGNATURES = 0x26BB,
+ SMSG_PETITION_SIGN_RESULTS = 0x2746,
+ SMSG_PET_ACTION_FEEDBACK = 0x2743,
+ SMSG_PET_ACTION_SOUND = 0x269D,
SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2600,
- SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2671,
+ SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2672,
SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25F9,
SMSG_PET_BATTLE_FINAL_ROUND = 0x25FE,
SMSG_PET_BATTLE_FINISHED = 0x25FF,
@@ -1702,27 +1702,27 @@ enum OpcodeServer : uint16
SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25FA,
SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2601,
SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F8,
- SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2635,
- SMSG_PET_BATTLE_QUEUE_STATUS = 0x2636,
+ SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2636,
+ SMSG_PET_BATTLE_QUEUE_STATUS = 0x2637,
SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FD,
SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F7,
SMSG_PET_BATTLE_ROUND_RESULT = 0x25FC,
SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EA,
- SMSG_PET_CAST_FAILED = 0x2C58,
- SMSG_PET_CLEAR_SPELLS = 0x2C21,
- SMSG_PET_DISMISS_SOUND = 0x269D,
- SMSG_PET_GOD_MODE = 0x2677,
- SMSG_PET_GUIDS = 0x26FE,
- SMSG_PET_LEARNED_SPELLS = 0x2C4F,
+ SMSG_PET_CAST_FAILED = 0x2C5A,
+ SMSG_PET_CLEAR_SPELLS = 0x2C23,
+ SMSG_PET_DISMISS_SOUND = 0x269E,
+ SMSG_PET_GOD_MODE = 0x2678,
+ SMSG_PET_GUIDS = 0x26FF,
+ SMSG_PET_LEARNED_SPELLS = 0x2C51,
SMSG_PET_MODE = 0x2588,
- SMSG_PET_NAME_INVALID = 0x26BE,
+ SMSG_PET_NAME_INVALID = 0x26BF,
SMSG_PET_NEWLY_TAMED = 0x2587,
- SMSG_PET_SPELLS_MESSAGE = 0x2C22,
+ SMSG_PET_SPELLS_MESSAGE = 0x2C24,
SMSG_PET_STABLE_RESULT = 0x2592,
- SMSG_PET_TAME_FAILURE = 0x26AE,
- SMSG_PET_UNLEARNED_SPELLS = 0x2C50,
+ SMSG_PET_TAME_FAILURE = 0x26AF,
+ SMSG_PET_UNLEARNED_SPELLS = 0x2C52,
SMSG_PHASE_SHIFT_CHANGE = 0x2578,
- SMSG_PLAYED_TIME = 0x26D0,
+ SMSG_PLAYED_TIME = 0x26D1,
SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x3022,
SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3014,
SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3013,
@@ -1735,6 +1735,7 @@ enum OpcodeServer : uint16
SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x3009,
SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x300E,
SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F9,
+ SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x3023,
SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x3020,
SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x301E,
SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x301F,
@@ -1742,26 +1743,26 @@ enum OpcodeServer : uint16
SMSG_PLAYER_SKINNED = 0x3006,
SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300D,
SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300C,
- SMSG_PLAY_MUSIC = 0x2762,
- SMSG_PLAY_OBJECT_SOUND = 0x2763,
- SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272A,
- SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47,
- SMSG_PLAY_SCENE = 0x2632,
- SMSG_PLAY_SOUND = 0x2761,
- SMSG_PLAY_SPEAKERBOT_SOUND = 0x2764,
- SMSG_PLAY_SPELL_VISUAL = 0x2C45,
- SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49,
- SMSG_PLAY_TIME_WARNING = 0x26F8,
+ SMSG_PLAY_MUSIC = 0x2763,
+ SMSG_PLAY_OBJECT_SOUND = 0x2764,
+ SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272B,
+ SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C49,
+ SMSG_PLAY_SCENE = 0x2633,
+ SMSG_PLAY_SOUND = 0x2762,
+ SMSG_PLAY_SPEAKERBOT_SOUND = 0x2765,
+ SMSG_PLAY_SPELL_VISUAL = 0x2C47,
+ SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C4B,
+ SMSG_PLAY_TIME_WARNING = 0x26F9,
SMSG_PONG = 0x304E,
- SMSG_POWER_UPDATE = 0x26CD,
+ SMSG_POWER_UPDATE = 0x26CE,
SMSG_PRELOAD_CHILD_MAP = 0x2579,
SMSG_PRELOAD_WORLD = 0x2594,
SMSG_PREPOPULATE_NAME_CACHE = 0x283E,
- SMSG_PRE_RESSURECT = 0x2760,
+ SMSG_PRE_RESSURECT = 0x2761,
SMSG_PRINT_NOTIFICATION = 0x25C9,
- SMSG_PROC_RESIST = 0x2754,
+ SMSG_PROC_RESIST = 0x2755,
SMSG_PROFESSION_GOSSIP = 0x27F5,
- SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51,
+ SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C53,
SMSG_PVP_CREDIT = 0x2946,
SMSG_PVP_MATCH_COMPLETE = 0x2951,
SMSG_PVP_MATCH_INITIALIZE = 0x2952,
@@ -1785,7 +1786,7 @@ enum OpcodeServer : uint16
SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3002,
SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A96,
SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x29E6,
- SMSG_QUERY_TIME_RESPONSE = 0x26DE,
+ SMSG_QUERY_TIME_RESPONSE = 0x26DF,
SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81,
SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F,
SMSG_QUEST_FORCE_REMOVED = 0x2A9C,
@@ -1817,53 +1818,52 @@ enum OpcodeServer : uint16
SMSG_QUEUE_SUMMARY_UPDATE = 0x2808,
SMSG_RAF_ACCOUNT_INFO = 0x284C,
SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x285D,
- SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B4,
- SMSG_RAID_DIFFICULTY_SET = 0x27A1,
- SMSG_RAID_GROUP_ONLY = 0x27A3,
+ SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B3,
+ SMSG_RAID_DIFFICULTY_SET = 0x27A2,
+ SMSG_RAID_GROUP_ONLY = 0x27A4,
SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4,
SMSG_RAID_MARKERS_CHANGED = 0x259F,
- SMSG_RANDOM_ROLL = 0x262C,
+ SMSG_RANDOM_ROLL = 0x262D,
SMSG_RATED_PVP_INFO = 0x2931,
SMSG_READY_CHECK_COMPLETED = 0x25F6,
SMSG_READY_CHECK_RESPONSE = 0x25F5,
SMSG_READY_CHECK_STARTED = 0x25F4,
- SMSG_READ_ITEM_RESULT_FAILED = 0x279D,
- SMSG_READ_ITEM_RESULT_OK = 0x2794,
- SMSG_REALM_LOOKUP_INFO = 0x27C0,
+ SMSG_READ_ITEM_RESULT_FAILED = 0x279E,
+ SMSG_READ_ITEM_RESULT_OK = 0x2795,
SMSG_REALM_QUERY_RESPONSE = 0x2913,
- SMSG_REATTACH_RESURRECT = 0x2744,
+ SMSG_REATTACH_RESURRECT = 0x2745,
SMSG_RECEIVE_PING_UNIT = 0x25A0,
SMSG_RECEIVE_PING_WORLD_POINT = 0x25A1,
- SMSG_RECRAFT_ITEM_RESULT = 0x28A3,
- SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BB,
- SMSG_REFRESH_COMPONENT = 0x264D,
- SMSG_REFRESH_SPELL_HISTORY = 0x2C29,
+ SMSG_RECRAFT_ITEM_RESULT = 0x28A2,
+ SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BC,
+ SMSG_REFRESH_COMPONENT = 0x264E,
+ SMSG_REFRESH_SPELL_HISTORY = 0x2C2B,
SMSG_REMOVE_ITEM_PASSIVE = 0x25AA,
- SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C52,
- SMSG_REPLACE_TROPHY_RESPONSE = 0x27B9,
+ SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C54,
+ SMSG_REPLACE_TROPHY_RESPONSE = 0x27BA,
SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001,
SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x258E,
SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2936,
SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2937,
SMSG_RESET_COMPRESSION_CONTEXT = 0x304F,
- SMSG_RESET_FAILED_NOTIFY = 0x26B2,
- SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28A9,
+ SMSG_RESET_FAILED_NOTIFY = 0x26B3,
+ SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28A8,
SMSG_RESET_QUEST_POI = 0x2AA0,
SMSG_RESET_RANGED_COMBAT_TIMER = 0x2945,
SMSG_RESET_WEEKLY_CURRENCY = 0x2575,
- SMSG_RESPEC_WIPE_CONFIRM = 0x260F,
+ SMSG_RESPEC_WIPE_CONFIRM = 0x2610,
SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572,
- SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x2880,
- SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2881,
- SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C61,
+ SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x287F,
+ SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2880,
+ SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C63,
SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B8,
- SMSG_RESUME_CAST = 0x2C3B,
- SMSG_RESUME_CAST_BAR = 0x2C3E,
+ SMSG_RESUME_CAST = 0x2C3D,
+ SMSG_RESUME_CAST_BAR = 0x2C40,
SMSG_RESUME_COMMS = 0x304B,
SMSG_RESUME_TOKEN = 0x25A8,
SMSG_RESURRECT_REQUEST = 0x257E,
- SMSG_RESYNC_RUNES = 0x2C5F,
- SMSG_RETURNING_PLAYER_PROMPT = 0x279C,
+ SMSG_RESYNC_RUNES = 0x2C61,
+ SMSG_RETURNING_PLAYER_PROMPT = 0x279D,
SMSG_RETURN_APPLICANT_LIST = 0x2842,
SMSG_RETURN_RECRUITING_CLUBS = 0x2841,
SMSG_ROLE_CHANGED_INFORM = 0x258A,
@@ -1872,12 +1872,12 @@ enum OpcodeServer : uint16
SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F4,
SMSG_RUNE_REGEN_DEBUG = 0x25B5,
SMSG_SCENARIO_COMPLETED = 0x27E2,
- SMSG_SCENARIO_POIS = 0x262F,
- SMSG_SCENARIO_PROGRESS_UPDATE = 0x2628,
+ SMSG_SCENARIO_POIS = 0x2630,
+ SMSG_SCENARIO_PROGRESS_UPDATE = 0x2629,
SMSG_SCENARIO_SHOW_CRITERIA = 0x27F8,
- SMSG_SCENARIO_STATE = 0x2627,
+ SMSG_SCENARIO_STATE = 0x2628,
SMSG_SCENARIO_UI_UPDATE = 0x27F7,
- SMSG_SCENARIO_VACATE = 0x279E,
+ SMSG_SCENARIO_VACATE = 0x279F,
SMSG_SCENE_OBJECT_EVENT = 0x25E0,
SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E5,
SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E6,
@@ -1885,163 +1885,164 @@ enum OpcodeServer : uint16
SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25E1,
SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E4,
SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E3,
- SMSG_SCRIPT_CAST = 0x2C56,
+ SMSG_SCRIPT_CAST = 0x2C58,
SMSG_SEASON_INFO = 0x25C0,
- SMSG_SELL_RESPONSE = 0x26BF,
+ SMSG_SELL_RESPONSE = 0x26C0,
SMSG_SEND_ITEM_PASSIVES = 0x25AB,
- SMSG_SEND_KNOWN_SPELLS = 0x2C27,
- SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262A,
- SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262B,
- SMSG_SEND_SPELL_CHARGES = 0x2C2A,
- SMSG_SEND_SPELL_HISTORY = 0x2C28,
- SMSG_SEND_UNLEARN_SPELLS = 0x2C2B,
- SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264A,
- SMSG_SERVER_TIME = 0x267E,
- SMSG_SERVER_TIME_OFFSET = 0x270E,
+ SMSG_SEND_KNOWN_SPELLS = 0x2C29,
+ SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262B,
+ SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262C,
+ SMSG_SEND_SPELL_CHARGES = 0x2C2C,
+ SMSG_SEND_SPELL_HISTORY = 0x2C2A,
+ SMSG_SEND_UNLEARN_SPELLS = 0x2C2D,
+ SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264B,
+ SMSG_SERVER_TIME = 0x267F,
+ SMSG_SERVER_TIME_OFFSET = 0x270F,
+ SMSG_SETUP_COMBAT_LOG_FILE_FLUSH = 0x2C1F,
SMSG_SETUP_CURRENCY = 0x2573,
- SMSG_SET_AI_ANIM_KIT = 0x2729,
- SMSG_SET_ANIM_TIER = 0x272D,
+ SMSG_SET_AI_ANIM_KIT = 0x272A,
+ SMSG_SET_ANIM_TIER = 0x272E,
SMSG_SET_CHR_UPGRADE_TIER = 0x25DD,
SMSG_SET_CURRENCY = 0x2574,
SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E,
- SMSG_SET_DUNGEON_DIFFICULTY = 0x26A0,
- SMSG_SET_FACTION_AT_WAR = 0x26FA,
- SMSG_SET_FACTION_NOT_VISIBLE = 0x2724,
- SMSG_SET_FACTION_STANDING = 0x2725,
- SMSG_SET_FACTION_VISIBLE = 0x2723,
- SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36,
- SMSG_SET_FORCED_REACTIONS = 0x2717,
+ SMSG_SET_DUNGEON_DIFFICULTY = 0x26A1,
+ SMSG_SET_FACTION_AT_WAR = 0x26FB,
+ SMSG_SET_FACTION_NOT_VISIBLE = 0x2725,
+ SMSG_SET_FACTION_STANDING = 0x2726,
+ SMSG_SET_FACTION_VISIBLE = 0x2724,
+ SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C38,
+ SMSG_SET_FORCED_REACTIONS = 0x2718,
SMSG_SET_ITEM_PURCHASE_DATA = 0x259A,
SMSG_SET_LOOT_METHOD_FAILED = 0x27C6,
SMSG_SET_MAX_WEEKLY_QUANTITY = 0x259D,
- SMSG_SET_MELEE_ANIM_KIT = 0x272C,
- SMSG_SET_MOVEMENT_ANIM_KIT = 0x272B,
- SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37,
- SMSG_SET_PET_SPECIALIZATION = 0x2621,
+ SMSG_SET_MELEE_ANIM_KIT = 0x272D,
+ SMSG_SET_MOVEMENT_ANIM_KIT = 0x272C,
+ SMSG_SET_PCT_SPELL_MODIFIER = 0x2C39,
+ SMSG_SET_PET_SPECIALIZATION = 0x2622,
SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3003,
SMSG_SET_PLAY_HOVER_ANIM = 0x25B9,
- SMSG_SET_PROFICIENCY = 0x272E,
+ SMSG_SET_PROFICIENCY = 0x272F,
SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2855,
SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2998,
- SMSG_SET_SPELL_CHARGES = 0x2C26,
- SMSG_SET_TIME_ZONE_INFORMATION = 0x2673,
- SMSG_SET_VEHICLE_REC_ID = 0x26F1,
- SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2885,
+ SMSG_SET_SPELL_CHARGES = 0x2C28,
+ SMSG_SET_TIME_ZONE_INFORMATION = 0x2674,
+ SMSG_SET_VEHICLE_REC_ID = 0x26F2,
+ SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2884,
SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2999,
SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25D9,
SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95,
- SMSG_SHOW_TAXI_NODES = 0x26C8,
- SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2769,
- SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x2890,
- SMSG_SOCKET_GEMS_FAILURE = 0x2721,
- SMSG_SOCKET_GEMS_SUCCESS = 0x2720,
- SMSG_SPECIAL_MOUNT_ANIM = 0x269B,
- SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2712,
+ SMSG_SHOW_TAXI_NODES = 0x26C9,
+ SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x276A,
+ SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x288F,
+ SMSG_SOCKET_GEMS_FAILURE = 0x2722,
+ SMSG_SOCKET_GEMS_SUCCESS = 0x2721,
+ SMSG_SPECIAL_MOUNT_ANIM = 0x269C,
+ SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2713,
SMSG_SPELL_ABSORB_LOG = 0x2C1C,
SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C16,
- SMSG_SPELL_CHANNEL_START = 0x2C31,
- SMSG_SPELL_CHANNEL_UPDATE = 0x2C32,
+ SMSG_SPELL_CHANNEL_START = 0x2C33,
+ SMSG_SPELL_CHANNEL_UPDATE = 0x2C34,
SMSG_SPELL_COOLDOWN = 0x2C15,
- SMSG_SPELL_DAMAGE_SHIELD = 0x2C2E,
- SMSG_SPELL_DELAYED = 0x2C3F,
+ SMSG_SPELL_DAMAGE_SHIELD = 0x2C30,
+ SMSG_SPELL_DELAYED = 0x2C41,
SMSG_SPELL_DISPELL_LOG = 0x2C17,
- SMSG_SPELL_EMPOWER_SET_STAGE = 0x2C35,
- SMSG_SPELL_EMPOWER_START = 0x2C33,
- SMSG_SPELL_EMPOWER_UPDATE = 0x2C34,
+ SMSG_SPELL_EMPOWER_SET_STAGE = 0x2C37,
+ SMSG_SPELL_EMPOWER_START = 0x2C35,
+ SMSG_SPELL_EMPOWER_UPDATE = 0x2C36,
SMSG_SPELL_ENERGIZE_LOG = 0x2C19,
- SMSG_SPELL_EXECUTE_LOG = 0x2C40,
- SMSG_SPELL_FAILED_OTHER = 0x2C55,
- SMSG_SPELL_FAILURE = 0x2C53,
- SMSG_SPELL_FAILURE_MESSAGE = 0x2C5A,
- SMSG_SPELL_GO = 0x2C39,
+ SMSG_SPELL_EXECUTE_LOG = 0x2C42,
+ SMSG_SPELL_FAILED_OTHER = 0x2C57,
+ SMSG_SPELL_FAILURE = 0x2C55,
+ SMSG_SPELL_FAILURE_MESSAGE = 0x2C5C,
+ SMSG_SPELL_GO = 0x2C3B,
SMSG_SPELL_HEAL_ABSORB_LOG = 0x2C1B,
SMSG_SPELL_HEAL_LOG = 0x2C1A,
- SMSG_SPELL_INSTAKILL_LOG = 0x2C30,
+ SMSG_SPELL_INSTAKILL_LOG = 0x2C32,
SMSG_SPELL_INTERRUPT_LOG = 0x2C1D,
- SMSG_SPELL_MISS_LOG = 0x2C41,
- SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x2C2F,
- SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x2C2C,
+ SMSG_SPELL_MISS_LOG = 0x2C43,
+ SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x2C31,
+ SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x2C2E,
SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C18,
- SMSG_SPELL_PREPARE = 0x2C38,
- SMSG_SPELL_START = 0x2C3A,
+ SMSG_SPELL_PREPARE = 0x2C3A,
+ SMSG_SPELL_START = 0x2C3C,
SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CB,
SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2867,
- SMSG_STAND_STATE_UPDATE = 0x2716,
+ SMSG_STAND_STATE_UPDATE = 0x2717,
SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D1,
SMSG_START_ELAPSED_TIMER = 0x2602,
SMSG_START_ELAPSED_TIMERS = 0x2604,
- SMSG_START_LIGHTNING_STORM = 0x26A3,
- SMSG_START_LOOT_ROLL = 0x2619,
- SMSG_START_MIRROR_TIMER = 0x2709,
+ SMSG_START_LIGHTNING_STORM = 0x26A4,
+ SMSG_START_LOOT_ROLL = 0x261A,
+ SMSG_START_MIRROR_TIMER = 0x270A,
SMSG_START_TIMER = 0x25A4,
SMSG_STOP_ELAPSED_TIMER = 0x2603,
- SMSG_STOP_MIRROR_TIMER = 0x270B,
- SMSG_STOP_SPEAKERBOT_SOUND = 0x2765,
+ SMSG_STOP_MIRROR_TIMER = 0x270C,
+ SMSG_STOP_SPEAKERBOT_SOUND = 0x2766,
SMSG_STOP_TIMER = 0x25A5,
SMSG_STREAMING_MOVIES = 0x25A3,
- SMSG_SUGGEST_INVITE_INFORM = 0x278A,
- SMSG_SUMMON_CANCEL = 0x26AC,
+ SMSG_SUGGEST_INVITE_INFORM = 0x278B,
+ SMSG_SUMMON_CANCEL = 0x26AD,
SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258C,
- SMSG_SUMMON_REQUEST = 0x271B,
- SMSG_SUPERCEDED_SPELLS = 0x2C4C,
+ SMSG_SUMMON_REQUEST = 0x271C,
+ SMSG_SUPERCEDED_SPELLS = 0x2C4E,
SMSG_SUSPEND_COMMS = 0x304A,
SMSG_SUSPEND_TOKEN = 0x25A7,
SMSG_SYNC_WOW_ENTITLEMENTS = 0x285F,
- SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2711,
- SMSG_TAXI_NODE_STATUS = 0x2678,
- SMSG_TEXT_EMOTE = 0x2676,
- SMSG_THREAT_CLEAR = 0x26D7,
- SMSG_THREAT_REMOVE = 0x26D6,
- SMSG_THREAT_UPDATE = 0x26D5,
+ SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2712,
+ SMSG_TAXI_NODE_STATUS = 0x2679,
+ SMSG_TEXT_EMOTE = 0x2677,
+ SMSG_THREAT_CLEAR = 0x26D8,
+ SMSG_THREAT_REMOVE = 0x26D7,
+ SMSG_THREAT_UPDATE = 0x26D6,
SMSG_TIME_ADJUSTMENT = 0x2DD3,
SMSG_TIME_SYNC_REQUEST = 0x2DD2,
- SMSG_TITLE_EARNED = 0x26D2,
- SMSG_TITLE_LOST = 0x26D3,
- SMSG_TOTEM_CREATED = 0x26C2,
- SMSG_TOTEM_DURATION_CHANGED = 0x26C4,
- SMSG_TOTEM_MOVED = 0x26C5,
- SMSG_TOTEM_REMOVED = 0x26C3,
+ SMSG_TITLE_EARNED = 0x26D3,
+ SMSG_TITLE_LOST = 0x26D4,
+ SMSG_TOTEM_CREATED = 0x26C3,
+ SMSG_TOTEM_DURATION_CHANGED = 0x26C5,
+ SMSG_TOTEM_MOVED = 0x26C6,
+ SMSG_TOTEM_REMOVED = 0x26C4,
SMSG_TRADE_STATUS = 0x2582,
SMSG_TRADE_UPDATED = 0x2581,
- SMSG_TRAINER_BUY_FAILED = 0x26DA,
- SMSG_TRAINER_LIST = 0x26D9,
+ SMSG_TRAINER_BUY_FAILED = 0x26DB,
+ SMSG_TRAINER_LIST = 0x26DA,
SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D0,
- SMSG_TRANSFER_ABORTED = 0x26FD,
+ SMSG_TRANSFER_ABORTED = 0x26FE,
SMSG_TRANSFER_PENDING = 0x25CC,
SMSG_TREASURE_PICKER_RESPONSE = 0x291F,
- SMSG_TRIGGER_CINEMATIC = 0x27BE,
- SMSG_TRIGGER_MOVIE = 0x26C6,
- SMSG_TURN_IN_PETITION_RESULT = 0x2747,
- SMSG_TUTORIAL_FLAGS = 0x27B2,
+ SMSG_TRIGGER_CINEMATIC = 0x27BF,
+ SMSG_TRIGGER_MOVIE = 0x26C7,
+ SMSG_TURN_IN_PETITION_RESULT = 0x2748,
+ SMSG_TUTORIAL_FLAGS = 0x27B3,
SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2,
SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C1,
SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C2,
- SMSG_UNLEARNED_SPELLS = 0x2C4E,
+ SMSG_UNLEARNED_SPELLS = 0x2C50,
SMSG_UNLOAD_CHILD_MAP = 0x257A,
SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2879,
- SMSG_UPDATE_ACCOUNT_DATA = 0x2703,
+ SMSG_UPDATE_ACCOUNT_DATA = 0x2704,
SMSG_UPDATE_ACTION_BUTTONS = 0x25DE,
SMSG_UPDATE_BNET_SESSION_KEY = 0x2819,
SMSG_UPDATE_CAPTURE_POINT = 0x2929,
SMSG_UPDATE_CELESTIAL_BODY = 0x2815,
- SMSG_UPDATE_CHARACTER_FLAGS = 0x27B8,
- SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x275F,
- SMSG_UPDATE_COOLDOWN = 0x275E,
+ SMSG_UPDATE_CHARACTER_FLAGS = 0x27B9,
+ SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2760,
+ SMSG_UPDATE_COOLDOWN = 0x275F,
SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2996,
SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F,
- SMSG_UPDATE_EXPANSION_LEVEL = 0x2642,
+ SMSG_UPDATE_EXPANSION_LEVEL = 0x2643,
SMSG_UPDATE_GAME_TIME_STATE = 0x281C,
- SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A5,
- SMSG_UPDATE_LAST_INSTANCE = 0x2684,
- SMSG_UPDATE_OBJECT = 0x27BF,
+ SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A6,
+ SMSG_UPDATE_LAST_INSTANCE = 0x2685,
+ SMSG_UPDATE_OBJECT = 0x27C0,
SMSG_UPDATE_PRIMARY_SPEC = 0x25D6,
SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F3,
SMSG_UPDATE_TALENT_DATA = 0x25D5,
- SMSG_UPDATE_WORLD_STATE = 0x2741,
+ SMSG_UPDATE_WORLD_STATE = 0x2742,
SMSG_USERLIST_ADD = 0x2BB9,
SMSG_USERLIST_REMOVE = 0x2BBA,
SMSG_USERLIST_UPDATE = 0x2BBB,
- SMSG_USE_EQUIPMENT_SET_RESULT = 0x2748,
+ SMSG_USE_EQUIPMENT_SET_RESULT = 0x2749,
SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2810,
SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x280E,
SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x280D,
@@ -2062,22 +2063,22 @@ enum OpcodeServer : uint16
SMSG_WARDEN3_DATA = 0x2577,
SMSG_WARDEN3_DISABLED = 0x2817,
SMSG_WARDEN3_ENABLED = 0x2816,
- SMSG_WARFRONT_COMPLETE = 0x2757,
+ SMSG_WARFRONT_COMPLETE = 0x2758,
SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x2934,
SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2933,
- SMSG_WEATHER = 0x26A2,
+ SMSG_WEATHER = 0x26A3,
SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x286A,
SMSG_WEEKLY_REWARDS_RESULT = 0x2868,
SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2869,
SMSG_WHO = 0x2BAE,
- SMSG_WHO_IS = 0x26A1,
+ SMSG_WHO_IS = 0x26A2,
SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x281B,
SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x300F,
SMSG_WORLD_SERVER_INFO = 0x25AC,
SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2860,
- SMSG_XP_AWARDED_FROM_CURRENCY = 0x28A8,
+ SMSG_XP_AWARDED_FROM_CURRENCY = 0x28A7,
SMSG_XP_GAIN_ABORTED = 0x25C8,
- SMSG_XP_GAIN_ENABLED = 0x27A2,
+ SMSG_XP_GAIN_ENABLED = 0x27A3,
SMSG_ZONE_UNDER_ATTACK = 0x2BB5,
// Opcodes that are not generated automatically
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index fd89dd9c16f..a2ffeac9577 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -66,6 +66,7 @@ enum class AuctionCommand : int8;
enum class AuctionResult : int8;
enum InventoryResult : uint8;
enum class StableResult : uint8;
+enum class TabardVendorType : int32;
namespace BattlePets
{
@@ -268,6 +269,7 @@ namespace WorldPackets
class SetFactionInactive;
class SetWatchedFaction;
class SetPlayerDeclinedNames;
+ class SavePersonalEmblem;
enum class LoginFailureReason : uint8;
}
@@ -545,6 +547,7 @@ namespace WorldPackets
class Hello;
class GossipSelectOption;
class SpiritHealerActivate;
+ class TabardVendorActivate;
class TrainerBuySpell;
class RequestStabledPets;
class SetPetSlot;
@@ -1056,7 +1059,7 @@ class TC_GAME_API WorldSession
void SendShowBank(ObjectGuid guid);
bool CanOpenMailBox(ObjectGuid guid);
void SendShowMailBox(ObjectGuid guid);
- void SendTabardVendorActivate(ObjectGuid guid);
+ void SendTabardVendorActivate(ObjectGuid guid, TabardVendorType type);
void SendSpiritResurrect();
void SendBindPoint(Creature* npc);
void SendOpenTransmogrifier(ObjectGuid const& guid);
@@ -1201,6 +1204,7 @@ class TC_GAME_API WorldSession
void HandleGetUndeleteCooldownStatus(WorldPackets::Character::GetUndeleteCharacterCooldownStatus& /*getCooldown*/);
void HandleUndeleteCooldownStatusCallback(PreparedQueryResult result);
void HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCharacter& undeleteInfo);
+ void HandleSavePersonalEmblem(WorldPackets::Character::SavePersonalEmblem const& savePersonalEmblem);
bool MeetsChrCustomizationReq(ChrCustomizationReqEntry const* req, Races race, Classes playerClass,
bool checkRequiredDependentChoices, Trinity::IteratorPair<UF::ChrCustomizationChoice const*> selectedChoices) const;
bool ValidateAppearance(Races race, Classes playerClass, Gender gender,
@@ -1401,7 +1405,7 @@ class TC_GAME_API WorldSession
void SendActivateTaxiReply(ActivateTaxiReply reply);
void HandleTaxiRequestEarlyLanding(WorldPackets::Taxi::TaxiRequestEarlyLanding& taxiRequestEarlyLanding);
- void HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& packet);
+ void HandleTabardVendorActivateOpcode(WorldPackets::NPC::TabardVendorActivate const& tabardVendorActivate);
void HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet);
void HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet);
void HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpell& packet);
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 08a064b51eb..2fe40981c7a 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -635,6 +635,7 @@ enum AuraType : uint32
SPELL_AURA_MOD_REQUIRED_MOUNT_CAPABILITY_FLAGS = 541,
SPELL_AURA_542 = 542,
SPELL_AURA_543 = 543,
+ SPELL_AURA_544 = 544,
TOTAL_AURAS
};
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index f33d2313a63..b5da0699a0e 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -611,6 +611,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleModRequiredMountCapabilityFlags, //541 SPELL_AURA_MOD_REQUIRED_MOUNT_CAPABILITY_FLAGS
&AuraEffect::HandleNULL, //542
&AuraEffect::HandleNULL, //543
+ &AuraEffect::HandleNULL, //544
};
AuraEffect::AuraEffect(Aura* base, SpellEffectInfo const& spellEfffectInfo, int32 const* baseAmount, Unit* caster) :
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index c7d020f20ec..87c4f3a93d2 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -3365,11 +3365,15 @@ uint32 World::ShutdownCancel()
}
/// Send a server message to the user(s)
-void World::SendServerMessage(ServerMessageType messageID, std::string stringParam /*= ""*/, Player* player /*= nullptr*/)
+void World::SendServerMessage(ServerMessageType messageID, std::string_view stringParam /*= {}*/, Player const* player /*= nullptr*/)
{
+ ServerMessagesEntry const* serverMessage = sServerMessagesStore.LookupEntry(messageID);
+ if (!serverMessage)
+ return;
+
WorldPackets::Chat::ChatServerMessage chatServerMessage;
chatServerMessage.MessageID = int32(messageID);
- if (messageID <= SERVER_MSG_STRING)
+ if (strstr(serverMessage->Text[player->GetSession()->GetSessionDbcLocale()], "%s"))
chatServerMessage.StringParam = stringParam;
if (player)
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 7281cff64b1..ffc41ac0bce 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -643,7 +643,7 @@ class TC_GAME_API World
void SendWorldText(uint32 string_id, ...);
void SendGlobalText(char const* text, WorldSession* self);
void SendGMText(uint32 string_id, ...);
- void SendServerMessage(ServerMessageType messageID, std::string stringParam = "", Player* player = nullptr);
+ void SendServerMessage(ServerMessageType messageID, std::string_view stringParam = {}, Player const* player = nullptr);
void SendGlobalMessage(WorldPacket const* packet, WorldSession* self = nullptr, uint32 team = 0);
void SendGlobalGMMessage(WorldPacket const* packet, WorldSession* self = nullptr, uint32 team = 0);
bool SendZoneMessage(uint32 zone, WorldPacket const* packet, WorldSession* self = nullptr, uint32 team = 0);
diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h
index 3cb50dea4c9..747d5774301 100644
--- a/src/tools/map_extractor/loadlib/DBFilesClientList.h
+++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h
@@ -162,6 +162,7 @@ DB2FileInfo const DBFilesClientList[] =
{ 3671168, "ChrCreateClassAnimTarget.db2" },
{ 3671169, "ChrCreateClassAnimTargetInfo.db2" },
{ 3590348, "ChrCustClientChoiceConversion.db2" },
+ { 5387095, "ChrCustGeoComponentLink.db2" },
{ 3952714, "ChrCustItemGeoModify.db2" },
{ 1611874, "ChrCustomization.db2" },
{ 3460181, "ChrCustomizationBoneSet.db2" },
@@ -214,6 +215,7 @@ DB2FileInfo const DBFilesClientList[] =
{ 1278239, "ComponentTextureFileData.db2" },
{ 5211412, "ConditionalChrModel.db2" },
{ 3501965, "ConditionalContentTuning.db2" },
+ { 5345180, "ConditionalItemAppearance.db2" },
{ 1709409, "ConfigurationWarning.db2" },
{ 4668112, "ContentRestrictionRule.db2" },
{ 4281307, "ContentRestrictionRuleSet.db2" },
@@ -459,6 +461,7 @@ DB2FileInfo const DBFilesClientList[] =
{ 801681, "ItemExtendedCost.db2" },
{ 2358574, "ItemFallbackVisual.db2" },
{ 5152256, "ItemFixup.db2" },
+ { 5475699, "ItemFixupAction.db2" },
{ 5015219, "ItemGroupIlvlScalingEntry.db2" },
{ 1283023, "ItemGroupSounds.db2" },
{ 1588911, "ItemLevelSelector.db2" },
@@ -578,6 +581,7 @@ DB2FileInfo const DBFilesClientList[] =
{ 1339819, "MovieVariation.db2" },
{ 1965592, "MultiStateProperties.db2" },
{ 1965589, "MultiTransitionProperties.db2" },
+ { 5161908, "MusicOverride.db2" },
{ 2400282, "MythicPlusSeason.db2" },
{ 2123783, "MythicPlusSeasonRewardLevels.db2" },
{ 4067473, "MythicPlusSeasonTrackedAffix.db2" },
@@ -623,8 +627,10 @@ DB2FileInfo const DBFilesClientList[] =
{ 5330797, "PerksActivityXHolidays.db2" },
{ 4519781, "PerksActivityXInterval.db2" },
{ 4694318, "PerksActivityXTag.db2" },
+ { 5389878, "PerksUITheme.db2" },
{ 4281310, "PerksVendorCategory.db2" },
{ 4281311, "PerksVendorItem.db2" },
+ { 5386256, "PerksVendorItemUIGroup.db2" },
{ 4281312, "PerksVendorItemUIInfo.db2" },
{ 4872513, "PerksVendorItemXInterval.db2" },
{ 1348558, "Phase.db2" },
@@ -926,6 +932,7 @@ DB2FileInfo const DBFilesClientList[] =
{ 3448518, "UiQuestDetailsTheme.db2" },
{ 897470, "UiTextureAtlas.db2" },
{ 1989276, "UiTextureAtlasElement.db2" },
+ { 5319042, "UiTextureAtlasElementSliceData.db2" },
{ 897532, "UiTextureAtlasMember.db2" },
{ 939159, "UiTextureKit.db2" },
{ 4737221, "UiWeeklyReward.db2" },
@@ -967,12 +974,14 @@ DB2FileInfo const DBFilesClientList[] =
{ 1239842, "WeaponTrailParam.db2" },
{ 1343311, "Weather.db2" },
{ 1965591, "WeatherXParticulate.db2" },
+ { 5390446, "WeeklyRewardChestActivityTier.db2" },
{ 3580962, "WeeklyRewardChestThreshold.db2" },
{ 943871, "WindSettings.db2" },
{ 975279, "WorldBossLockout.db2" },
{ 1267069, "WorldChunkSounds.db2" },
{ 1343312, "WorldEffect.db2" },
{ 1135240, "WorldElapsedTimer.db2" },
+ { 4550228, "WorldLayerMapSet.db2" },
{ 1134579, "WorldMapOverlay.db2" },
{ 1957212, "WorldMapOverlayTile.db2" },
{ 4680120, "WorldShadow.db2" },