diff options
58 files changed, 2315 insertions, 1645 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index 8dfac2b3365..0be52bedd87 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -707,7 +707,10 @@ INSERT INTO `build_info` VALUES (48966,10,0,7,NULL,NULL,'823142CA131FBB715FF55D4343E55C6D',NULL,NULL,NULL), (48999,10,0,7,NULL,NULL,'79BA6FF0F9672EEF875F64155C8B62D4',NULL,NULL,NULL), (49267,10,0,7,NULL,NULL,'EEE77EA5A216E0731ADBB41AEFB1DF31',NULL,NULL,NULL), -(49343,10,0,7,NULL,NULL,'301A0B4C0942B9B6F605B903AD6C1F60',NULL,NULL,NULL); +(49343,10,0,7,NULL,NULL,'301A0B4C0942B9B6F605B903AD6C1F60',NULL,NULL,NULL), +(49318,10,1,0,NULL,NULL,'AF439AEE62EE48B36C1725111E3D9BBF',NULL,NULL,NULL), +(49407,10,1,0,NULL,NULL,'6413820DC9885BB0693B37090CBB2F30',NULL,NULL,NULL), +(49426,10,1,0,NULL,NULL,'D85EDFBFE9A94A55E2B4510BE41C19B2',NULL,NULL,NULL); /*!40000 ALTER TABLE `build_info` ENABLE KEYS */; UNLOCK TABLES; @@ -2315,7 +2318,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 '49343', + `gamebuild` int unsigned NOT NULL DEFAULT '49426', `Region` tinyint unsigned NOT NULL DEFAULT '1', `Battlegroup` tinyint unsigned NOT NULL DEFAULT '1', PRIMARY KEY (`id`), @@ -2330,7 +2333,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,49343,1,1); +(1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,49426,1,1); /*!40000 ALTER TABLE `realmlist` ENABLE KEYS */; UNLOCK TABLES; @@ -2686,7 +2689,8 @@ INSERT INTO `updates` VALUES ('2023_04_06_00_auth.sql','FECA06F32D077B1660D9FF8204D94F5C8E4065B4','RELEASED','2023-04-06 04:18:58',0), ('2023_04_12_00_auth.sql','E28F892FCC2A923683E5EEE24E98C618A9534318','RELEASED','2023-04-12 00:26:10',0), ('2023_04_25_00_auth.sql','AF297F37715F4A4C84E84182358C26CA83B0C655','RELEASED','2023-04-25 11:14:36',0), -('2023_04_28_00_auth.sql','A686A23CE63EE116F0F100F93ABB07CD0450E937','RELEASED','2023-04-28 01:50:20',0); +('2023_04_28_00_auth.sql','A686A23CE63EE116F0F100F93ABB07CD0450E937','RELEASED','2023-04-28 01:50:20',0), +('2023_05_04_00_auth.sql','1015EC7619C1F43B9FD70C8971F883D0CBF4D002','RELEASED','2023-05-04 16:02:32',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 28744467d85..77de88e7914 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -1668,6 +1668,9 @@ CREATE TABLE `character_stats` ( `maxpower5` int unsigned NOT NULL DEFAULT '0', `maxpower6` int unsigned NOT NULL DEFAULT '0', `maxpower7` int unsigned NOT NULL DEFAULT '0', + `maxpower8` int unsigned NOT NULL DEFAULT '0', + `maxpower9` int unsigned NOT NULL DEFAULT '0', + `maxpower10` int unsigned NOT NULL DEFAULT '0', `strength` int unsigned NOT NULL DEFAULT '0', `agility` int unsigned NOT NULL DEFAULT '0', `stamina` int unsigned NOT NULL DEFAULT '0', @@ -1937,6 +1940,9 @@ CREATE TABLE `characters` ( `power5` int unsigned NOT NULL DEFAULT '0', `power6` int unsigned NOT NULL DEFAULT '0', `power7` int unsigned NOT NULL DEFAULT '0', + `power8` int unsigned NOT NULL DEFAULT '0', + `power9` int unsigned NOT NULL DEFAULT '0', + `power10` int unsigned NOT NULL DEFAULT '0', `latency` int unsigned NOT NULL DEFAULT '0', `activeTalentGroup` tinyint unsigned NOT NULL DEFAULT '0', `lootSpecId` int unsigned NOT NULL DEFAULT '0', @@ -3699,7 +3705,8 @@ INSERT INTO `updates` VALUES ('2023_01_29_00_characters.sql','24FA9E0F616BF77AC588A25A8A8699903A19A5FE','ARCHIVED','2023-01-29 16:31:12',0), ('2023_02_03_00_characters.sql','A04BA4386B3D5C60407D22CA4BF9A4A6258AA39D','ARCHIVED','2023-02-03 01:13:52',0), ('2023_02_08_00_characters.sql','C9DF607CCE99540F613F5E25E17090176C995C7C','ARCHIVED','2023-02-08 21:41:17',0), -('2023_04_02_00_characters.sql','AAC1B81AFE4716CF4DAB6BCF01D22F421BFAD253','ARCHIVED','2023-04-02 01:02:26',0); +('2023_04_02_00_characters.sql','AAC1B81AFE4716CF4DAB6BCF01D22F421BFAD253','ARCHIVED','2023-04-02 01:02:26',0), +('2023_05_04_00_characters.sql','9AC370E51507F5BD368707E90D8F6BF0FF16CA09','RELEASED','2023-05-04 16:17:31',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/auth/master/2023_05_04_00_auth.sql b/sql/updates/auth/master/2023_05_04_00_auth.sql new file mode 100644 index 00000000000..c081beddc8c --- /dev/null +++ b/sql/updates/auth/master/2023_05_04_00_auth.sql @@ -0,0 +1,9 @@ +DELETE FROM `build_info` WHERE `build` IN (49318,49407,49426); +INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`,`winAuthSeed`,`win64AuthSeed`,`mac64AuthSeed`,`winChecksumSeed`,`macChecksumSeed`) VALUES +(49318,10,1,0,NULL,NULL,'AF439AEE62EE48B36C1725111E3D9BBF',NULL,NULL,NULL), +(49407,10,1,0,NULL,NULL,'6413820DC9885BB0693B37090CBB2F30',NULL,NULL,NULL), +(49426,10,1,0,NULL,NULL,'D85EDFBFE9A94A55E2B4510BE41C19B2',NULL,NULL,NULL); + +UPDATE `realmlist` SET `gamebuild`=49426 WHERE `gamebuild`=49343; + +ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '49426'; diff --git a/sql/updates/characters/master/2023_05_04_00_characters.sql b/sql/updates/characters/master/2023_05_04_00_characters.sql new file mode 100644 index 00000000000..39c40b14220 --- /dev/null +++ b/sql/updates/characters/master/2023_05_04_00_characters.sql @@ -0,0 +1,8 @@ + +ALTER TABLE `characters` ADD `power8` int unsigned NOT NULL DEFAULT 0 AFTER `power7`; +ALTER TABLE `characters` ADD `power9` int unsigned NOT NULL DEFAULT 0 AFTER `power8`; +ALTER TABLE `characters` ADD `power10` int unsigned NOT NULL DEFAULT 0 AFTER `power9`; + +ALTER TABLE `character_stats` ADD `maxpower8` int unsigned NOT NULL DEFAULT 0 AFTER `maxpower7`; +ALTER TABLE `character_stats` ADD `maxpower9` int unsigned NOT NULL DEFAULT 0 AFTER `maxpower8`; +ALTER TABLE `character_stats` ADD `maxpower10` int unsigned NOT NULL DEFAULT 0 AFTER `maxpower9`; diff --git a/sql/updates/hotfixes/master/2023_05_04_00_hotfixes.sql b/sql/updates/hotfixes/master/2023_05_04_00_hotfixes.sql new file mode 100644 index 00000000000..d54b7a19318 --- /dev/null +++ b/sql/updates/hotfixes/master/2023_05_04_00_hotfixes.sql @@ -0,0 +1,17 @@ +ALTER TABLE `chr_customization_choice` ADD `SoundKitID` int NOT NULL DEFAULT 0 AFTER `AddedInPatch`; + +ALTER TABLE `chr_customization_element` ADD `AnimKitID` int NOT NULL DEFAULT 0 AFTER `ChrCustomizationVoiceID`; + +ALTER TABLE `content_tuning` ADD `QuestXpMultiplier` float NOT NULL DEFAULT 0 AFTER `MinItemLevel`; + +ALTER TABLE `curve_point` MODIFY `CurveID` int NOT NULL DEFAULT 0 AFTER `ID`; + +ALTER TABLE `item_bonus_tree_node` ADD `Unknown1010_1` int NOT NULL DEFAULT 0 AFTER `IblGroupPointsModSetID`; +ALTER TABLE `item_bonus_tree_node` ADD `Unknown1010_2` int NOT NULL DEFAULT 0 AFTER `Unknown1010_1`; + +ALTER TABLE `movie` ADD `SubtitleFileFormat` int NOT NULL DEFAULT 0 AFTER `SubtitleFileDataID`; + +ALTER TABLE `ui_map` MODIFY `System` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `Flags`; +ALTER TABLE `ui_map` MODIFY `Type` tinyint UNSIGNED NOT NULL DEFAULT 0 AFTER `System`; + +ALTER TABLE `vehicle` MODIFY `FlagsB` int NOT NULL DEFAULT 0 AFTER `Flags`; diff --git a/src/common/DataStores/DB2FileLoader.cpp b/src/common/DataStores/DB2FileLoader.cpp index 1997438b774..5e14920e45d 100644 --- a/src/common/DataStores/DB2FileLoader.cpp +++ b/src/common/DataStores/DB2FileLoader.cpp @@ -114,6 +114,11 @@ struct DB2IndexData std::vector<DB2IndexEntry> Entries; }; +static bool IsKnownTactId(uint64 tactId) +{ + return tactId == 0 || tactId == DUMMY_KNOWN_TACT_ID; +} + uint32 DB2FileLoadInfo::GetStringFieldCount(bool localizedOnly) const { uint32 stringFields = 0; @@ -409,7 +414,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& indexTableSize, char**& for (uint32 section = 0; section < _header->SectionCount; ++section) { DB2SectionHeader const& sectionHeader = GetSection(section); - if (sectionHeader.TactId) + if (!IsKnownTactId(sectionHeader.TactId)) { offset += recordsize * sectionHeader.RecordCount; recordIndex += sectionHeader.RecordCount; @@ -552,7 +557,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceStrings(char** indexTable, uint32 ind for (uint32 section = 0; section < _header->SectionCount; ++section) { DB2SectionHeader const& sectionHeader = GetSection(section); - if (sectionHeader.TactId) + if (!IsKnownTactId(sectionHeader.TactId)) { y += sectionHeader.RecordCount; continue; @@ -655,7 +660,7 @@ void DB2FileLoaderRegularImpl::FillParentLookup(char* dataTable, char** indexTab for (uint32 i = 0; i < _header->SectionCount; ++i) { DB2SectionHeader const& section = GetSection(i); - if (!section.TactId) + if (IsKnownTactId(section.TactId)) { for (std::size_t j = 0; j < _parentIndexes[i][0].Entries.size(); ++j) { @@ -758,7 +763,7 @@ unsigned char const* DB2FileLoaderRegularImpl::GetRawRecordData(uint32 recordNum if (recordNumber >= _header->RecordCount) return nullptr; - if (GetSection(section ? *section : GetRecordSection(recordNumber)).TactId) + if (!IsKnownTactId(GetSection(section ? *section : GetRecordSection(recordNumber)).TactId)) return nullptr; return &_data[recordNumber * _header->RecordSize]; @@ -1146,7 +1151,7 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& indexTableSize, char**& i for (uint32 section = 0; section < _header->SectionCount; ++section) { DB2SectionHeader const& sectionHeader = GetSection(section); - if (sectionHeader.TactId) + if (!IsKnownTactId(sectionHeader.TactId)) { offset += recordsize * sectionHeader.RecordCount; y += sectionHeader.RecordCount; @@ -1292,7 +1297,7 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char** indexTable, uint32 inde for (uint32 section = 0; section < _header->SectionCount; ++section) { DB2SectionHeader const& sectionHeader = GetSection(section); - if (sectionHeader.TactId) + if (!IsKnownTactId(sectionHeader.TactId)) { y += sectionHeader.RecordCount; continue; @@ -1424,7 +1429,7 @@ void DB2FileLoaderSparseImpl::FillParentLookup(char* dataTable) for (uint32 i = 0; i < _header->SectionCount; ++i) { DB2SectionHeader const& section = GetSection(i); - if (!section.TactId) + if (IsKnownTactId(section.TactId)) { for (std::size_t j = 0; j < _parentIndexes[i][0].Entries.size(); ++j) { @@ -1498,7 +1503,7 @@ unsigned char const* DB2FileLoaderSparseImpl::GetRawRecordData(uint32 recordNumb if (recordNumber >= _catalog.size()) return nullptr; - if (GetSection(section ? *section : GetRecordSection(recordNumber)).TactId) + if (!IsKnownTactId(GetSection(section ? *section : GetRecordSection(recordNumber)).TactId)) return nullptr; _source->SetPosition(_catalog[recordNumber].FileOffset); @@ -1844,7 +1849,7 @@ void DB2FileLoader::LoadHeaders(DB2FileSource* source, DB2FileLoadInfo const* lo EndianConvert(_header.PalletDataSize); EndianConvert(_header.SectionCount); - if (_header.Signature != 0x33434457) //'WDC3' + if (_header.Signature != 0x34434457) //'WDC4' throw DB2FileLoadException(Trinity::StringFormat("Incorrect file signature in {}, expected 'WDC3', got %c%c%c%c", source->GetFileName(), char(_header.Signature & 0xFF), char((_header.Signature >> 8) & 0xFF), char((_header.Signature >> 16) & 0xFF), char((_header.Signature >> 24) & 0xFF))); @@ -1867,33 +1872,6 @@ void DB2FileLoader::LoadHeaders(DB2FileSource* source, DB2FileLoadInfo const* lo if (_header.SectionCount && !source->Read(sections.get(), sizeof(DB2SectionHeader) * _header.SectionCount)) throw DB2FileLoadException(Trinity::StringFormat("Unable to read section headers from {}", source->GetFileName())); - uint32 totalCopyTableSize = 0; - uint32 totalParentLookupDataSize = 0; - for (uint32 i = 0; i < _header.SectionCount; ++i) - { - totalCopyTableSize += sections[i].CopyTableCount * sizeof(DB2RecordCopy); - totalParentLookupDataSize += sections[i].ParentLookupDataSize; - } - - if (loadInfo && !(_header.Flags & 0x1)) - { - int64 expectedFileSize = - sizeof(DB2Header) + - sizeof(DB2SectionHeader) * _header.SectionCount + - sizeof(DB2FieldEntry) * _header.FieldCount + - int64(_header.RecordSize) * _header.RecordCount + - _header.StringTableSize + - (loadInfo->Meta->IndexField == -1 ? sizeof(uint32) * _header.RecordCount : 0) + - totalCopyTableSize + - _header.ColumnMetaSize + - _header.PalletDataSize + - _header.CommonDataSize + - totalParentLookupDataSize; - - if (source->GetFileSize() != expectedFileSize) - throw DB2FileLoadException(Trinity::StringFormat("{} failed size consistency check, expected {}, got {}", source->GetFileName(), expectedFileSize, source->GetFileSize())); - } - std::unique_ptr<DB2FieldEntry[]> fieldData = std::make_unique<DB2FieldEntry[]>(_header.FieldCount); if (!source->Read(fieldData.get(), sizeof(DB2FieldEntry) * _header.FieldCount)) throw DB2FileLoadException(Trinity::StringFormat("Unable to read field information from {}", source->GetFileName())); @@ -1995,6 +1973,44 @@ void DB2FileLoader::Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo) if (section.TactId) { + uint32 encryptedIdCount; + if (!source->Read(&encryptedIdCount, sizeof(encryptedIdCount))) + throw DB2FileLoadException(Trinity::StringFormat("Unable to read number of encrypted records in {} for section {}", source->GetFileName(), i)); + + // it doesnt matter what the encrypted ids are, we have no use for them + source->SetPosition(source->GetPosition() + sizeof(uint32) * encryptedIdCount); + } + } + + if (loadInfo && !(_header.Flags & 0x1)) + { + uint32 totalCopyTableSize = 0; + uint32 totalParentLookupDataSize = 0; + for (uint32 i = 0; i < _header.SectionCount; ++i) + { + DB2SectionHeader& section = _impl->GetSection(i); + totalCopyTableSize += section.CopyTableCount * sizeof(DB2RecordCopy); + totalParentLookupDataSize += section.ParentLookupDataSize; + } + + int64 expectedFileSize = + source->GetPosition() + + int64(_header.RecordSize) * _header.RecordCount + + _header.StringTableSize + + (loadInfo->Meta->IndexField == -1 ? sizeof(uint32) * _header.RecordCount : 0) + + totalCopyTableSize + + totalParentLookupDataSize; + + if (source->GetFileSize() != expectedFileSize) + throw DB2FileLoadException(Trinity::StringFormat("{} failed size consistency check, expected {}, got {}", source->GetFileName(), expectedFileSize, source->GetFileSize())); + } + + for (uint32 i = 0; i < _header.SectionCount; ++i) + { + DB2SectionHeader& section = _impl->GetSection(i); + + if (!IsKnownTactId(section.TactId)) + { switch (source->HandleEncryptedSection(section)) { case DB2EncryptedSectionHandling::Skip: @@ -2002,7 +2018,7 @@ void DB2FileLoader::Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo) idTable.resize(idTable.size() + section.IdTableSize / sizeof(uint32)); continue; case DB2EncryptedSectionHandling::Process: - section.TactId = 0; + section.TactId = DUMMY_KNOWN_TACT_ID; break; default: break; diff --git a/src/common/DataStores/DB2FileLoader.h b/src/common/DataStores/DB2FileLoader.h index b8e8e222a8b..29e78463f38 100644 --- a/src/common/DataStores/DB2FileLoader.h +++ b/src/common/DataStores/DB2FileLoader.h @@ -66,6 +66,8 @@ struct DB2SectionHeader #pragma pack(pop) +inline constinit uint64 DUMMY_KNOWN_TACT_ID = 0x5452494E49545900; // TRINITY + struct DB2FieldMeta { bool IsSigned; diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index c609bc8a620..bef3fa0b778 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -86,8 +86,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() "position_x, position_y, position_z, map, orientation, taximask, createTime, createMode, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, " "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, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, raidDifficulty, legacyRaidDifficulty, fishingSteps, " - "honor, honorLevel, honorRestState, honorRestBonus, numRespecs " + "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 " "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); @@ -469,13 +469,13 @@ void CharacterDatabaseConnection::DoPrepareStatements() "extra_flags, summonedPetNumber, at_login, " "death_expire_time, taxi_path, totalKills, " "todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, " - "power4, power5, power6, power7, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, lastLoginBuild) VALUES " - "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC); + "power4, power5, power6, power7, power8, power9, power10, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, lastLoginBuild) VALUES " + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,inventorySlots=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?," "map=?,instance_id=?,dungeonDifficulty=?,raidDifficulty=?,legacyRaidDifficulty=?,position_x=?,position_y=?,position_z=?,orientation=?,trans_x=?,trans_y=?,trans_z=?,trans_o=?,transguid=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?," "logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,numRespecs=?,primarySpecialization=?,extra_flags=?,summonedPetNumber=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?," "totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?," - "watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,power6=?,power7=?,latency=?,activeTalentGroup=?,lootSpecId=?,exploredZones=?," + "watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,power6=?,power7=?,power8=?,power9=?,power10=?,latency=?,activeTalentGroup=?,lootSpecId=?,exploredZones=?," "equipmentCache=?,knownTitles=?,actionBars=?,online=?,honor=?,honorLevel=?,honorRestState=?,honorRestBonus=?,lastLoginBuild=? WHERE guid=?", CONNECTION_ASYNC); PrepareStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG, "UPDATE characters SET at_login = at_login | ? WHERE guid = ?", CONNECTION_ASYNC); @@ -643,9 +643,9 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_CHAR_SPELL_FAVORITE_BY_CHAR, "DELETE FROM character_spell_favorite WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_SPELL_FAVORITE, "INSERT INTO character_spell_favorite (guid, spell) VALUES (?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_STATS, "DELETE FROM character_stats WHERE guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_CHAR_STATS, "INSERT INTO character_stats (guid, maxhealth, maxpower1, maxpower2, maxpower3, maxpower4, maxpower5, maxpower6, maxpower7, strength, agility, stamina, intellect, " - "armor, resHoly, resFire, resNature, resFrost, resShadow, resArcane, blockPct, dodgePct, parryPct, critPct, rangedCritPct, spellCritPct, attackPower, rangedAttackPower, " - "spellPower, resilience) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_CHAR_STATS, "INSERT INTO character_stats (guid, maxhealth, maxpower1, maxpower2, maxpower3, maxpower4, maxpower5, maxpower6, maxpower7, maxpower8, maxpower9, maxpower10, " + "strength, agility, stamina, intellect, armor, resHoly, resFire, resNature, resFrost, resShadow, resArcane, blockPct, dodgePct, parryPct, critPct, rangedCritPct, spellCritPct, " + "attackPower, rangedAttackPower, spellPower, resilience) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_PETITION_BY_OWNER, "DELETE FROM petition WHERE ownerguid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_PETITION_SIGNATURE_BY_OWNER, "DELETE FROM petition_sign WHERE ownerguid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_CHAR_GLYPHS, "INSERT INTO character_glyphs VALUES(?, ?, ?)", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 37826e5341d..f87b13cb55d 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -342,7 +342,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ChrCustomizationChoice.db2 PrepareStatement(HOTFIX_SEL_CHR_CUSTOMIZATION_CHOICE, "SELECT Name, ID, ChrCustomizationOptionID, ChrCustomizationReqID, " - "ChrCustomizationVisReqID, SortOrder, UiOrderIndex, Flags, AddedInPatch, SwatchColor1, SwatchColor2 FROM chr_customization_choice" + "ChrCustomizationVisReqID, SortOrder, UiOrderIndex, Flags, AddedInPatch, SoundKitID, SwatchColor1, SwatchColor2 FROM chr_customization_choice" " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_CHOICE, "SELECT MAX(ID) + 1 FROM chr_customization_choice", CONNECTION_SYNCH); PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_CUSTOMIZATION_CHOICE, "SELECT ID, Name_lang FROM chr_customization_choice_locale" @@ -356,8 +356,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ChrCustomizationElement.db2 PrepareStatement(HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT ID, ChrCustomizationChoiceID, RelatedChrCustomizationChoiceID, " "ChrCustomizationGeosetID, ChrCustomizationSkinnedModelID, ChrCustomizationMaterialID, ChrCustomizationBoneSetID, " - "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID FROM chr_customization_element" - " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID" + " 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 @@ -429,7 +429,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ContentTuning.db2 PrepareStatement(HOTFIX_SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, MinLevel, MaxLevel, MinLevelType, MaxLevelType, TargetLevelDelta, " - "TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel, QuestXpMultiplier FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_CONTENT_TUNING, "SELECT MAX(ID) + 1 FROM content_tuning", CONNECTION_SYNCH); // ContentTuningXExpected.db2 @@ -828,7 +828,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() // ItemBonusTreeNode.db2 PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, ItemContext, ChildItemBonusTreeID, ChildItemBonusListID, ChildItemLevelSelectorID, " - "ChildItemBonusListGroupID, IblGroupPointsModSetID, ParentItemBonusTreeID FROM item_bonus_tree_node WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + "ChildItemBonusListGroupID, IblGroupPointsModSetID, Unknown1010_1, Unknown1010_2, ParentItemBonusTreeID FROM item_bonus_tree_node" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT MAX(ID) + 1 FROM item_bonus_tree_node", CONNECTION_SYNCH); // ItemChildEquipment.db2 @@ -1135,7 +1136,8 @@ void HotfixDatabaseConnection::DoPrepareStatements() PREPARE_MAX_ID_STMT(HOTFIX_SEL_MOUNT_X_DISPLAY, "SELECT MAX(ID) + 1 FROM mount_x_display", CONNECTION_SYNCH); // Movie.db2 - PrepareStatement(HOTFIX_SEL_MOVIE, "SELECT ID, Volume, KeyID, AudioFileDataID, SubtitleFileDataID FROM movie WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_MOVIE, "SELECT ID, Volume, KeyID, AudioFileDataID, SubtitleFileDataID, SubtitleFileFormat FROM movie" + " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_MOVIE, "SELECT MAX(ID) + 1 FROM movie", CONNECTION_SYNCH); // NameGen.db2 diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 536e1559d0a..3b641adcb95 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -361,7 +361,7 @@ bool Battlefield::HasPlayer(Player* player) const return m_players[player->GetTeamId()].find(player->GetGUID()) != m_players[player->GetTeamId()].end(); } -// Called in WorldSession::HandleBfQueueInviteResponse +// Called in Battlefield::InvitePlayerToQueue void Battlefield::PlayerAcceptInviteToQueue(Player* player) { // Add player in queue @@ -383,7 +383,7 @@ void Battlefield::PlayerAskToLeave(Player* player) player->TeleportTo(571, 5804.1499f, 624.7710f, 647.7670f, 1.6400f); } -// Called in WorldSession::HandleBfEntryInviteResponse +// Called in Battlefield::InvitePlayerToWar void Battlefield::PlayerAcceptInviteToWar(Player* player) { if (!IsWarTime()) diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 8757dfd0570..96acddf6a11 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -938,7 +938,7 @@ struct ChrClassesXPowerTypesLoadInfo struct ChrCustomizationChoiceLoadInfo { - static constexpr DB2FieldMeta Fields[11] = + static constexpr DB2FieldMeta Fields[12] = { { false, FT_STRING, "Name" }, { false, FT_INT, "ID" }, @@ -949,11 +949,12 @@ struct ChrCustomizationChoiceLoadInfo { false, FT_SHORT, "UiOrderIndex" }, { true, FT_INT, "Flags" }, { true, FT_INT, "AddedInPatch" }, + { true, FT_INT, "SoundKitID" }, { true, FT_INT, "SwatchColor1" }, { true, FT_INT, "SwatchColor2" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 11, &ChrCustomizationChoiceMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_CHOICE }; + static constexpr DB2LoadInfo Instance{ Fields, 12, &ChrCustomizationChoiceMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_CHOICE }; }; struct ChrCustomizationDisplayInfoLoadInfo @@ -972,7 +973,7 @@ struct ChrCustomizationDisplayInfoLoadInfo struct ChrCustomizationElementLoadInfo { - static constexpr DB2FieldMeta Fields[11] = + static constexpr DB2FieldMeta Fields[12] = { { false, FT_INT, "ID" }, { true, FT_INT, "ChrCustomizationChoiceID" }, @@ -985,9 +986,10 @@ struct ChrCustomizationElementLoadInfo { true, FT_INT, "ChrCustomizationDisplayInfoID" }, { true, FT_INT, "ChrCustItemGeoModifyID" }, { true, FT_INT, "ChrCustomizationVoiceID" }, + { true, FT_INT, "AnimKitID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 11, &ChrCustomizationElementMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT }; + static constexpr DB2LoadInfo Instance{ Fields, 12, &ChrCustomizationElementMeta::Instance, HOTFIX_SEL_CHR_CUSTOMIZATION_ELEMENT }; }; struct ChrCustomizationOptionLoadInfo @@ -1218,7 +1220,7 @@ struct CinematicSequencesLoadInfo struct ContentTuningLoadInfo { - static constexpr DB2FieldMeta Fields[12] = + static constexpr DB2FieldMeta Fields[13] = { { false, FT_INT, "ID" }, { true, FT_INT, "Flags" }, @@ -1232,9 +1234,10 @@ struct ContentTuningLoadInfo { true, FT_INT, "TargetLevelMin" }, { true, FT_INT, "TargetLevelMax" }, { true, FT_INT, "MinItemLevel" }, + { false, FT_FLOAT, "QuestXpMultiplier" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 12, &ContentTuningMeta::Instance, HOTFIX_SEL_CONTENT_TUNING }; + static constexpr DB2LoadInfo Instance{ Fields, 13, &ContentTuningMeta::Instance, HOTFIX_SEL_CONTENT_TUNING }; }; struct ContentTuningXExpectedLoadInfo @@ -1520,7 +1523,7 @@ struct CurvePointLoadInfo { false, FT_FLOAT, "PreSLSquishPosX" }, { false, FT_FLOAT, "PreSLSquishPosY" }, { false, FT_INT, "ID" }, - { false, FT_SHORT, "CurveID" }, + { true, FT_INT, "CurveID" }, { false, FT_BYTE, "OrderIndex" }, }; @@ -2597,7 +2600,7 @@ struct ItemBonusListLevelDeltaLoadInfo struct ItemBonusTreeNodeLoadInfo { - static constexpr DB2FieldMeta Fields[8] = + static constexpr DB2FieldMeta Fields[10] = { { false, FT_INT, "ID" }, { false, FT_BYTE, "ItemContext" }, @@ -2606,10 +2609,12 @@ struct ItemBonusTreeNodeLoadInfo { false, FT_SHORT, "ChildItemLevelSelectorID" }, { true, FT_INT, "ChildItemBonusListGroupID" }, { true, FT_INT, "IblGroupPointsModSetID" }, + { true, FT_INT, "Unknown1010_1" }, + { true, FT_INT, "Unknown1010_2" }, { false, FT_INT, "ParentItemBonusTreeID" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 8, &ItemBonusTreeNodeMeta::Instance, HOTFIX_SEL_ITEM_BONUS_TREE_NODE }; + static constexpr DB2LoadInfo Instance{ Fields, 10, &ItemBonusTreeNodeMeta::Instance, HOTFIX_SEL_ITEM_BONUS_TREE_NODE }; }; struct ItemChildEquipmentLoadInfo @@ -3690,16 +3695,17 @@ struct MountXDisplayLoadInfo struct MovieLoadInfo { - static constexpr DB2FieldMeta Fields[5] = + static constexpr DB2FieldMeta Fields[6] = { { false, FT_INT, "ID" }, { false, FT_BYTE, "Volume" }, { false, FT_BYTE, "KeyID" }, { false, FT_INT, "AudioFileDataID" }, { false, FT_INT, "SubtitleFileDataID" }, + { true, FT_INT, "SubtitleFileFormat" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 5, &MovieMeta::Instance, HOTFIX_SEL_MOVIE }; + static constexpr DB2LoadInfo Instance{ Fields, 6, &MovieMeta::Instance, HOTFIX_SEL_MOVIE }; }; struct NameGenLoadInfo @@ -5949,8 +5955,8 @@ struct UiMapLoadInfo { false, FT_INT, "ID" }, { true, FT_INT, "ParentUiMapID" }, { true, FT_INT, "Flags" }, - { false, FT_INT, "System" }, - { false, FT_INT, "Type" }, + { false, FT_BYTE, "System" }, + { false, FT_BYTE, "Type" }, { true, FT_INT, "BountySetID" }, { false, FT_INT, "BountyDisplayLocation" }, { true, FT_INT, "VisibilityPlayerConditionID" }, @@ -6125,7 +6131,7 @@ struct VehicleLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "Flags" }, - { false, FT_BYTE, "FlagsB" }, + { true, FT_INT, "FlagsB" }, { false, FT_FLOAT, "TurnSpeed" }, { false, FT_FLOAT, "PitchSpeed" }, { false, FT_FLOAT, "PitchMin" }, diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index 0c275f5c918..fda46a4ec97 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -59,6 +59,30 @@ struct Achievement_CategoryMeta static constexpr DB2Meta Instance{ 1324299, 1, 4, 4, 0xC3562871, Fields, 3 }; }; +struct ActionBarGroupMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 4572795, -1, 1, 1, 0xE490BC05, Fields, -1 }; +}; + +struct ActionBarGroupEntryMeta +{ + 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{ 4572797, -1, 5, 4, 0x40E3832D, Fields, 4 }; +}; + struct AdventureJournalMeta { static constexpr DB2MetaField Fields[22] = @@ -1279,6 +1303,24 @@ struct BeamEffectMeta static constexpr DB2Meta Instance{ 1525607, -1, 10, 10, 0xF1E61217, Fields, -1 }; }; +struct BeckonTriggerMeta +{ + static constexpr DB2MetaField Fields[9] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 3491563, -1, 9, 8, 0x7DF24A7B, Fields, 8 }; +}; + struct BoneWindModifierModelMeta { static constexpr DB2MetaField Fields[2] = @@ -1595,11 +1637,11 @@ struct CharComponentTextureLayoutsMeta { static constexpr DB2MetaField Fields[2] = { - { FT_SHORT, 1, true }, - { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1360262, -1, 2, 2, 0xB4407510, Fields, -1 }; + static constexpr DB2Meta Instance{ 1360262, -1, 2, 2, 0x7F7D8978, Fields, -1 }; }; struct CharComponentTextureSectionsMeta @@ -1721,6 +1763,22 @@ struct CharStartKitMeta static constexpr DB2Meta Instance{ 3055696, -1, 16, 15, 0x00B44453, Fields, 15 }; }; +struct CharStartOutfitMeta +{ + static constexpr DB2MetaField Fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 24, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 1237591, -1, 7, 6, 0x3CF88584, Fields, 6 }; +}; + struct CharTitlesMeta { static constexpr DB2MetaField Fields[4] = @@ -1734,6 +1792,20 @@ struct CharTitlesMeta static constexpr DB2Meta Instance{ 1349054, -1, 4, 4, 0xD7398A05, Fields, -1 }; }; +struct CharacterFaceBoneSetMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 1028733, -1, 5, 4, 0xD21C8EC2, Fields, 4 }; +}; + struct CharacterFacialHairStylesMeta { static constexpr DB2MetaField Fields[4] = @@ -2052,7 +2124,7 @@ struct ChrCustomizationCategoryMeta struct ChrCustomizationChoiceMeta { - static constexpr DB2MetaField Fields[10] = + static constexpr DB2MetaField Fields[11] = { { FT_STRING, 1, true }, { FT_INT, 1, false }, @@ -2063,10 +2135,11 @@ struct ChrCustomizationChoiceMeta { FT_SHORT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, { FT_INT, 2, true }, }; - static constexpr DB2Meta Instance{ 3450554, 1, 10, 10, 0x03A6DCB1, Fields, 2 }; + static constexpr DB2Meta Instance{ 3450554, 1, 11, 11, 0xAA548AE1, Fields, 2 }; }; struct ChrCustomizationCondModelMeta @@ -2112,7 +2185,7 @@ struct ChrCustomizationDisplayInfoMeta struct ChrCustomizationElementMeta { - static constexpr DB2MetaField Fields[10] = + static constexpr DB2MetaField Fields[11] = { { FT_INT, 1, true }, { FT_INT, 1, true }, @@ -2124,9 +2197,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, 10, 10, 0x0E39F850, Fields, -1 }; + static constexpr DB2Meta Instance{ 3512765, -1, 11, 11, 0x978B6C48, Fields, -1 }; }; struct ChrCustomizationGeosetMeta @@ -2395,7 +2469,7 @@ struct ChrRacesCreateScreenIconMeta { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 4566929, 0, 4, 4, 0xD69ECEFF, Fields, -1 }; + static constexpr DB2Meta Instance{ 4566929, 0, 4, 4, 0x892075D2, Fields, 1 }; }; struct ChrSelectBackgroundCDIMeta @@ -2685,7 +2759,7 @@ struct ContentRestrictionRuleSetMeta struct ContentTuningMeta { - static constexpr DB2MetaField Fields[11] = + static constexpr DB2MetaField Fields[12] = { { FT_INT, 1, true }, { FT_INT, 1, true }, @@ -2698,9 +2772,10 @@ struct ContentTuningMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, }; - static constexpr DB2Meta Instance{ 1962930, -1, 11, 11, 0xACA848DF, Fields, -1 }; + static constexpr DB2Meta Instance{ 1962930, -1, 12, 12, 0x3E5D4B74, Fields, -1 }; }; struct ContentTuningXExpectedMeta @@ -2954,6 +3029,17 @@ struct CraftingReagentQualityMeta static constexpr DB2Meta Instance{ 4382197, 0, 6, 5, 0xCE4DB0CC, Fields, 5 }; }; +struct CraftingReagentRequirementMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5049814, -1, 2, 1, 0x3F971F7F, Fields, 1 }; +}; + struct CreatureMeta { static constexpr DB2MetaField Fields[11] = @@ -3467,11 +3553,11 @@ struct CurvePointMeta { FT_FLOAT, 2, true }, { FT_FLOAT, 2, true }, { FT_INT, 1, false }, - { FT_SHORT, 1, false }, + { FT_INT, 1, true }, { FT_BYTE, 1, false }, }; - static constexpr DB2Meta Instance{ 892586, 2, 5, 5, 0x7B45328E, Fields, 3 }; + static constexpr DB2Meta Instance{ 892586, 2, 5, 5, 0x32694505, Fields, 3 }; }; struct DeathThudLookupsMeta @@ -3610,16 +3696,17 @@ struct DifficultyMeta struct DisplaySeasonMeta { - static constexpr DB2MetaField Fields[5] = + static constexpr DB2MetaField Fields[6] = { { FT_STRING, 1, true }, + { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 4279827, -1, 5, 5, 0xA2007E11, Fields, -1 }; + static constexpr DB2Meta Instance{ 4279827, 1, 6, 6, 0x307B0C4C, Fields, -1 }; }; struct DissolveEffectMeta @@ -4108,6 +4195,21 @@ struct GameClockDebugMeta static constexpr DB2Meta Instance{ 2922072, -1, 1, 1, 0xD30981EC, Fields, -1 }; }; +struct GameModeMeta +{ + static constexpr DB2MetaField Fields[6] = + { + { FT_STRING, 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{ 5008306, -1, 6, 6, 0x45EE0D98, Fields, -1 }; +}; + struct GameObjectAnimGroupMemberMeta { static constexpr DB2MetaField Fields[4] = @@ -5856,15 +5958,16 @@ struct ItemBonusListMeta struct ItemBonusListGroupMeta { - 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{ 3755382, -1, 4, 4, 0x63FD68EB, Fields, -1 }; + static constexpr DB2Meta Instance{ 3755382, -1, 5, 5, 0xF169B927, Fields, -1 }; }; struct ItemBonusListGroupEntryMeta @@ -5907,6 +6010,46 @@ struct ItemBonusListWarforgeLevelDeltaMeta static constexpr DB2Meta Instance{ 2924997, 1, 2, 2, 0xC6EA2151, Fields, -1 }; }; +struct ItemBonusSeasonMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5155639, 0, 2, 2, 0x7F150202, Fields, -1 }; +}; + +struct ItemBonusSeasonBonusListGroupMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5155640, 0, 4, 4, 0x284E8A83, Fields, 3 }; +}; + +struct ItemBonusSeasonUpgradeCostMeta +{ + static constexpr DB2MetaField Fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { 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 }; +}; + struct ItemBonusSequenceSpellMeta { static constexpr DB2MetaField Fields[2] = @@ -5942,7 +6085,7 @@ struct ItemBonusTreeGroupEntryMeta struct ItemBonusTreeNodeMeta { - static constexpr DB2MetaField Fields[7] = + static constexpr DB2MetaField Fields[9] = { { FT_BYTE, 1, false }, { FT_SHORT, 1, false }, @@ -5951,9 +6094,11 @@ struct ItemBonusTreeNodeMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 987134, -1, 7, 6, 0xC1AEA21E, Fields, 6 }; + static constexpr DB2Meta Instance{ 987134, -1, 9, 8, 0xF5BD96C0, Fields, 8 }; }; struct ItemChildEquipmentMeta @@ -5981,6 +6126,16 @@ struct ItemClassMeta static constexpr DB2Meta Instance{ 1140189, -1, 4, 4, 0xC21C5BEA, Fields, -1 }; }; +struct ItemConditionMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5128111, -1, 1, 1, 0xC2F7FE6F, Fields, -1 }; +}; + struct ItemContextPickerEntryMeta { static constexpr DB2MetaField Fields[7] = @@ -6211,6 +6366,30 @@ struct ItemFallbackVisualMeta static constexpr DB2Meta Instance{ 2358574, -1, 3, 3, 0xB0198BA2, Fields, -1 }; }; +struct ItemFixupMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5152256, -1, 1, 1, 0x31DF97E4, Fields, -1 }; +}; + +struct ItemGroupIlvlScalingEntryMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5015219, -1, 5, 4, 0x38E9D642, Fields, 4 }; +}; + struct ItemGroupSoundsMeta { static constexpr DB2MetaField Fields[1] = @@ -6390,6 +6569,20 @@ struct ItemRangedDisplayInfoMeta static constexpr DB2Meta Instance{ 1270315, -1, 4, 4, 0x08C2EB5B, Fields, -1 }; }; +struct ItemRecraftMeta +{ + static constexpr DB2MetaField Fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5150118, 0, 5, 4, 0xE00E7F34, Fields, 4 }; +}; + struct ItemSalvageMeta { static constexpr DB2MetaField Fields[3] = @@ -6798,14 +6991,15 @@ struct JournalTierMeta struct JournalTierXInstanceMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[4] = { { FT_SHORT, 1, false }, { FT_SHORT, 1, false }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1285009, -1, 3, 3, 0x003E6589, Fields, 0 }; + static constexpr DB2Meta Instance{ 1285009, -1, 4, 4, 0x1351FB2E, Fields, 0 }; }; struct KeychainMeta @@ -7179,6 +7373,19 @@ struct LivingWorldObjectTemplateMeta static constexpr DB2Meta Instance{ 4276965, -1, 1, 1, 0x74706E81, Fields, -1 }; }; +struct LivingWorldObjectTemplateModelMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 4276966, -1, 4, 3, 0xA5D81C93, Fields, 3 }; +}; + struct LoadingScreenSkinMeta { static constexpr DB2MetaField Fields[1] = @@ -7437,6 +7644,16 @@ struct ManifestInterfaceTOCDataMeta static constexpr DB2Meta Instance{ 1267335, -1, 1, 1, 0x1FBF8808, Fields, -1 }; }; +struct ManifestMP3Meta +{ + static constexpr DB2MetaField Fields[1] = + { + { FT_INT, 1, false }, + }; + + static constexpr DB2Meta Instance{ 1375802, 0, 1, 1, 0x6657BD0A, Fields, -1 }; +}; + struct MapMeta { static constexpr DB2MetaField Fields[24] = @@ -7694,7 +7911,7 @@ struct ModifiedCraftingCategoryMeta { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 3386486, -1, 5, 5, 0x0BD1387B, Fields, -1 }; + static constexpr DB2Meta Instance{ 3386486, -1, 5, 5, 0xB8B17FD4, Fields, -1 }; }; struct ModifiedCraftingItemMeta @@ -7736,7 +7953,7 @@ struct ModifiedCraftingReagentSlotMeta { FT_BYTE, 1, false }, }; - static constexpr DB2Meta Instance{ 3386488, 1, 6, 6, 0xFEE69CA3, Fields, -1 }; + static constexpr DB2Meta Instance{ 3386488, 1, 6, 6, 0x24D8DB66, Fields, -1 }; }; struct ModifiedCraftingSpellSlotMeta @@ -7874,15 +8091,16 @@ struct MountXSpellVisualKitPickerMeta struct MovieMeta { - static constexpr DB2MetaField Fields[4] = + static constexpr DB2MetaField Fields[5] = { { FT_BYTE, 1, false }, { FT_BYTE, 1, false }, { FT_INT, 1, false }, { FT_INT, 1, false }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1332556, -1, 4, 4, 0xA3A2FAF5, Fields, -1 }; + static constexpr DB2Meta Instance{ 1332556, -1, 5, 5, 0x214C1925, Fields, -1 }; }; struct MovieFileDataMeta @@ -7943,14 +8161,15 @@ struct MultiTransitionPropertiesMeta struct MythicPlusSeasonMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[4] = { + { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 2400282, -1, 3, 3, 0x37FBB583, Fields, -1 }; + static constexpr DB2Meta Instance{ 2400282, 0, 4, 4, 0x0FE9B9A8, Fields, -1 }; }; struct MythicPlusSeasonRewardLevelsMeta @@ -8243,14 +8462,15 @@ struct PVPScoreboardCellInfoMeta struct PVPScoreboardColumnHeaderMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[4] = { { FT_STRING, 1, true }, { FT_STRING, 1, true }, + { FT_STRING, 1, true }, { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 2992917, -1, 3, 3, 0x268E3459, Fields, -1 }; + static constexpr DB2Meta Instance{ 2992917, -1, 4, 4, 0x10110777, Fields, -1 }; }; struct PVPScoreboardLayoutMeta @@ -8414,16 +8634,18 @@ struct PathPropertyMeta struct PerksActivityMeta { - static constexpr DB2MetaField Fields[5] = + static constexpr DB2MetaField Fields[7] = { { FT_STRING, 1, true }, { FT_STRING, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 4519766, 2, 5, 5, 0x6FD48C11, Fields, -1 }; + static constexpr DB2Meta Instance{ 4519766, 2, 7, 7, 0x4FF9AFB2, Fields, -1 }; }; struct PerksActivityTagMeta @@ -9126,15 +9348,16 @@ struct QuestInfoMeta struct QuestLineMeta { - static constexpr DB2MetaField Fields[4] = + static constexpr DB2MetaField Fields[5] = { { FT_STRING, 1, true }, { FT_STRING, 1, true }, + { FT_INT, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 973430, -1, 4, 4, 0x8972E620, Fields, -1 }; + static constexpr DB2Meta Instance{ 973430, -1, 5, 5, 0xA360A782, Fields, -1 }; }; struct QuestLineXQuestMeta @@ -9179,11 +9402,12 @@ struct QuestObjectiveMeta struct QuestPOIBlobMeta { - static constexpr DB2MetaField Fields[9] = + static constexpr DB2MetaField Fields[10] = { { FT_INT, 1, false }, { FT_SHORT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, { FT_BYTE, 1, false }, { FT_INT, 1, false }, { FT_INT, 1, true }, @@ -9192,7 +9416,7 @@ struct QuestPOIBlobMeta { FT_INT, 1, false }, }; - static constexpr DB2Meta Instance{ 1251882, 0, 9, 9, 0xBD552CA4, Fields, 1 }; + static constexpr DB2Meta Instance{ 1251882, 0, 10, 10, 0x714523FD, Fields, 1 }; }; struct QuestPOIPointMeta @@ -11073,6 +11297,17 @@ struct SpellMechanicMeta static constexpr DB2Meta Instance{ 1014438, -1, 1, 1, 0x4E0C4A43, Fields, -1 }; }; +struct SpellMemorizeCostMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 3549053, -1, 2, 1, 0x6F1A6B5A, Fields, 1 }; +}; + struct SpellMiscMeta { static constexpr DB2MetaField Fields[16] = @@ -11132,7 +11367,7 @@ struct SpellMissileMotionMeta { FT_BYTE, 1, false }, }; - static constexpr DB2Meta Instance{ 897955, -1, 4, 4, 0xE98CFA44, Fields, -1 }; + static constexpr DB2Meta Instance{ 897955, -1, 4, 4, 0x65CEAA0A, Fields, -1 }; }; struct SpellNameMeta @@ -12441,6 +12676,24 @@ struct TrophyMeta static constexpr DB2Meta Instance{ 975024, -1, 4, 4, 0x72D11E6D, Fields, -1 }; }; +struct UIArrowCalloutMeta +{ + static constexpr DB2MetaField Fields[9] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5011999, 2, 9, 9, 0xC42C586B, Fields, -1 }; +}; + struct UIChromieTimeExpansionInfoMeta { static constexpr DB2MetaField Fields[11] = @@ -12595,17 +12848,21 @@ struct UIExpansionDisplayInfoIconMeta struct UIGenericWidgetDisplayMeta { - static constexpr DB2MetaField Fields[6] = + static constexpr DB2MetaField Fields[10] = { { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, { 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_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 4861207, 1, 6, 6, 0xDE7C26FF, Fields, -1 }; + static constexpr DB2Meta Instance{ 4861207, 3, 10, 10, 0x15320583, Fields, -1 }; }; struct UIModifiedInstanceMeta @@ -12808,8 +13065,8 @@ struct UiMapMeta { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, - { FT_INT, 1, false }, - { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, true }, @@ -13030,8 +13287,12 @@ struct UiModelSceneCameraMeta struct UiPartyPoseMeta { - static constexpr DB2MetaField Fields[6] = + static constexpr DB2MetaField Fields[10] = { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, @@ -13040,7 +13301,7 @@ struct UiPartyPoseMeta { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 1993323, -1, 6, 5, 0xCE023AA8, Fields, 5 }; + static constexpr DB2Meta Instance{ 1993323, 1, 10, 9, 0xF02E09B6, Fields, 9 }; }; struct UiQuestDetailsThemeMeta @@ -13314,7 +13575,7 @@ struct VehicleMeta static constexpr DB2MetaField Fields[18] = { { FT_INT, 1, true }, - { FT_BYTE, 1, false }, + { FT_INT, 1, true }, { FT_FLOAT, 1, true }, { FT_FLOAT, 1, true }, { FT_FLOAT, 1, true }, @@ -13333,7 +13594,7 @@ struct VehicleMeta { FT_SHORT, 3, false }, }; - static constexpr DB2Meta Instance{ 1368621, -1, 18, 18, 0xA0087D9F, Fields, -1 }; + static constexpr DB2Meta Instance{ 1368621, -1, 18, 18, 0xC064602E, Fields, -1 }; }; struct VehiclePOITypeMeta @@ -13417,7 +13678,7 @@ struct VehicleSeatMeta { FT_SHORT, 1, true }, }; - static constexpr DB2Meta Instance{ 1345447, -1, 61, 61, 0x50B6088F, Fields, -1 }; + static constexpr DB2Meta Instance{ 1345447, -1, 61, 61, 0x8FE8854B, Fields, -1 }; }; struct VehicleUIIndSeatMeta diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 99b13a10860..6aa2d59b967 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -1062,6 +1062,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul } } + _broadcastTextDurations.reserve(sBroadcastTextDurationStore.GetNumRows()); for (BroadcastTextDurationEntry const* broadcastTextDuration : sBroadcastTextDurationStore) _broadcastTextDurations[{ broadcastTextDuration->BroadcastTextID, CascLocaleBit(broadcastTextDuration->Locale) }] = broadcastTextDuration->Duration; @@ -3497,7 +3498,10 @@ bool ItemLevelSelectorQualityEntryComparator::Compare(ItemLevelSelectorQualityEn TaxiMask::TaxiMask() { if (sTaxiNodesStore.GetNumRows()) - _data.resize(((sTaxiNodesStore.GetNumRows() - 1) / (sizeof(value_type) * 8)) + 1, 0); + { + _data.resize(((sTaxiNodesStore.GetNumRows() - 1) / (sizeof(value_type) * 64) + 1) * 8, 0); + ASSERT((_data.size() % 8) == 0, "TaxiMask size must be aligned to a multiple of uint64"); + } } bool DB2Manager::FriendshipRepReactionEntryComparator::Compare(FriendshipRepReactionEntry const* left, FriendshipRepReactionEntry const* right) diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 410988e1ef7..387a67a8dcd 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -668,6 +668,7 @@ struct ChrCustomizationChoiceEntry uint16 UiOrderIndex; int32 Flags; int32 AddedInPatch; + int32 SoundKitID; std::array<int32, 2> SwatchColor; }; @@ -693,6 +694,7 @@ struct ChrCustomizationElementEntry int32 ChrCustomizationDisplayInfoID; int32 ChrCustItemGeoModifyID; int32 ChrCustomizationVoiceID; + int32 AnimKitID; }; struct ChrCustomizationOptionEntry @@ -877,6 +879,7 @@ struct ContentTuningEntry int32 TargetLevelMin; int32 TargetLevelMax; int32 MinItemLevel; + float QuestXpMultiplier; EnumFlag<ContentTuningFlag> GetFlags() const { return static_cast<ContentTuningFlag>(Flags); } @@ -1364,7 +1367,7 @@ struct CurvePointEntry DBCPosition2D Pos; DBCPosition2D PreSLSquishPos; uint32 ID; - uint16 CurveID; + int32 CurveID; uint8 OrderIndex; }; @@ -2101,6 +2104,8 @@ struct ItemBonusTreeNodeEntry uint16 ChildItemLevelSelectorID; int32 ChildItemBonusListGroupID; int32 IblGroupPointsModSetID; + int32 Unknown1010_1; + int32 Unknown1010_2; uint32 ParentItemBonusTreeID; }; @@ -2808,6 +2813,7 @@ struct MovieEntry uint8 KeyID; uint32 AudioFileDataID; uint32 SubtitleFileDataID; + int32 SubtitleFileFormat; }; struct NameGenEntry @@ -4222,8 +4228,8 @@ struct UiMapEntry uint32 ID; int32 ParentUiMapID; int32 Flags; - uint32 System; - uint32 Type; + uint8 System; + uint8 Type; int32 BountySetID; uint32 BountyDisplayLocation; int32 VisibilityPlayerConditionID; @@ -4331,7 +4337,7 @@ struct VehicleEntry { uint32 ID; int32 Flags; - uint8 FlagsB; + int32 FlagsB; float TurnSpeed; float PitchSpeed; float PitchMin; diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index ae75a4d5ec9..3e8645f9398 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -730,6 +730,7 @@ struct GameObjectTemplate uint32 turnpersonallootsecurityoff; // 22 turn personal loot security off, enum { false, true, }; Default: false uint32 ClearObjectVignetteonOpening; // 23 Clear Object Vignette on Opening, enum { false, true, }; Default: false uint32 InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 Overrideminimaptrackingicon; // 25 Override minimap tracking icon, References: UiTextureAtlasMember, NoValue = 0 } gatheringNode; // 51 GAMEOBJECT_TYPE_CHALLENGE_MODE_REWARD struct diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h index fea408adb30..8a0aa7d2fd9 100644 --- a/src/server/game/Entities/Item/ItemDefines.h +++ b/src/server/game/Entities/Item/ItemDefines.h @@ -257,6 +257,11 @@ enum ItemModifier : uint16 ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_7 = 50, ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_8 = 51, ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_9 = 52, + ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_10 = 53, + ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_11 = 54, + ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_12 = 55, + ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_13 = 56, + ITEM_MODIFIER_CRAFTING_REAGENT_SLOT_14 = 57, MAX_ITEM_MODIFIERS }; diff --git a/src/server/game/Entities/Object/MovementInfo.h b/src/server/game/Entities/Object/MovementInfo.h index 9e8c3909b36..768785fdfb9 100644 --- a/src/server/game/Entities/Object/MovementInfo.h +++ b/src/server/game/Entities/Object/MovementInfo.h @@ -95,6 +95,8 @@ struct MovementInfo Optional<AdvFlying> advFlying; + Optional<ObjectGuid> standingOnGameObjectGUID; + MovementInfo() : flags(0), flags2(0), flags3(0), time(0), pitch(0.0f), stepUpStartElevation(0.0f) { diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index a710e31bf71..a911aaec5ab 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -279,6 +279,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe bool HasSpline = unit->IsSplineEnabled(); bool HasInertia = unit->m_movementInfo.inertia.has_value(); bool HasAdvFlying = unit->m_movementInfo.advFlying.has_value(); + bool HasStandingOnGameObjectGUID = unit->m_movementInfo.standingOnGameObjectGUID.has_value(); *data << GetGUID(); // MoverGUID @@ -301,6 +302,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe //for (std::size_t i = 0; i < RemoveForcesIDs.size(); ++i) // *data << ObjectGuid(RemoveForcesIDs); + data->WriteBit(HasStandingOnGameObjectGUID); // HasStandingOnGameObjectGUID data->WriteBit(!unit->m_movementInfo.transport.guid.IsEmpty()); // HasTransport data->WriteBit(HasFall); // HasFall data->WriteBit(HasSpline); // HasSpline - marks that the unit uses spline movement @@ -312,6 +314,9 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe if (!unit->m_movementInfo.transport.guid.IsEmpty()) *data << unit->m_movementInfo.transport; + if (HasStandingOnGameObjectGUID) + *data << *unit->m_movementInfo.standingOnGameObjectGUID; + if (HasInertia) { *data << unit->m_movementInfo.inertia->id; @@ -842,6 +847,22 @@ void MovementInfo::OutDebug() if (flags & MOVEMENTFLAG_SPLINE_ELEVATION) TC_LOG_DEBUG("misc", "stepUpStartElevation: {}", stepUpStartElevation); + + if (inertia) + { + TC_LOG_DEBUG("misc", "inertia->id: {}", inertia->id); + TC_LOG_DEBUG("misc", "inertia->force: {}", inertia->force.ToString()); + TC_LOG_DEBUG("misc", "inertia->lifetime: {}", inertia->lifetime); + } + + if (advFlying) + { + TC_LOG_DEBUG("misc", "advFlying->forwardVelocity: {}", advFlying->forwardVelocity); + TC_LOG_DEBUG("misc", "advFlying->upVelocity: {}", advFlying->upVelocity); + } + + if (standingOnGameObjectGUID) + TC_LOG_DEBUG("misc", "standingOnGameObjectGUID: {}", standingOnGameObjectGUID->ToString()); } WorldObject::WorldObject(bool isWorldObject) : Object(), WorldLocation(), LastUsedScriptID(0), diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h index 964743fbc0e..86b2c3be09b 100644 --- a/src/server/game/Entities/Object/ObjectDefines.h +++ b/src/server/game/Entities/Object/ObjectDefines.h @@ -58,7 +58,7 @@ enum class VisibilityDistanceType : uint8 Max }; -enum TempSummonType +enum TempSummonType : uint8 { TEMPSUMMON_TIMED_OR_DEAD_DESPAWN = 1, // despawns after a specified time OR when the creature disappears TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN = 2, // despawns after a specified time OR when the creature dies diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 8d125ed74db..ebb9c34207e 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -968,14 +968,14 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << uint8(DisplayPower); data << uint32(OverrideDisplayPowerID); data << int64(Health); - for (uint32 i = 0; i < 7; ++i) + for (uint32 i = 0; i < 10; ++i) { data << int32(Power[i]); data << int32(MaxPower[i]); } if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll)) { - for (uint32 i = 0; i < 7; ++i) + for (uint32 i = 0; i < 10; ++i) { data << float(PowerRegenFlatModifier[i]); data << float(PowerRegenInterruptedFlatModifier[i]); @@ -1132,7 +1132,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFF01u, 0xF8001FFFu, 0x00000003u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFF01u, 0x0007FFFFu, 0x00003F80u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1140,16 +1140,16 @@ void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x00002000u, 0x3C010000u, 0xFFC20000u, 0x400000FEu, 0x07FFE000u, 0xFFFFFFFCu, 0x0000001Fu }; + allowedMaskForTarget |= { 0x00002000u, 0x3C010000u, 0xFFC20000u, 0x400000FEu, 0xFFF80000u, 0xFFFFC07Fu, 0x0001FFFFu }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) - allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x40000000u, 0x07FFE000u, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x40000000u, 0xFFF80000u, 0x0000007Fu, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= { 0x00000000u, 0x3C000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x007F8000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x3C000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xF8000000u, 0x00000007u }; } void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFF01u, 0xF8001FFFu, 0x00000003u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFF01u, 0x0007FFFFu, 0x00003F80u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -1712,77 +1712,77 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[126]) { - for (uint32 i = 0; i < 7; ++i) + for (uint32 i = 0; i < 10; ++i) { if (changesMask[127 + i]) { data << int32(Power[i]); } - if (changesMask[134 + i]) + if (changesMask[137 + i]) { data << int32(MaxPower[i]); } - if (changesMask[141 + i]) + if (changesMask[147 + i]) { data << float(PowerRegenFlatModifier[i]); } - if (changesMask[148 + i]) + if (changesMask[157 + i]) { data << float(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[155]) + if (changesMask[167]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[156 + i]) + if (changesMask[168 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[159]) + if (changesMask[171]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[160 + i]) + if (changesMask[172 + i]) { data << uint32(AttackRoundBaseTime[i]); } } } - if (changesMask[162]) + if (changesMask[174]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[163 + i]) + if (changesMask[175 + i]) { data << int32(Stats[i]); } - if (changesMask[167 + i]) + if (changesMask[179 + i]) { data << int32(StatPosBuff[i]); } - if (changesMask[171 + i]) + if (changesMask[183 + i]) { data << int32(StatNegBuff[i]); } } } - if (changesMask[175]) + if (changesMask[187]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[176 + i]) + if (changesMask[188 + i]) { data << int32(Resistances[i]); } - if (changesMask[183 + i]) + if (changesMask[195 + i]) { data << int32(BonusResistanceMods[i]); } - if (changesMask[190 + i]) + if (changesMask[202 + i]) { data << int32(ManaCostModifier[i]); } @@ -2146,10 +2146,15 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << uint32(ArenaCooldowns.size()); data << int32(Field_B0); data << int32(Field_B4); + data << int32(CurrentBattlePetSpeciesID); CtrOptions->WriteCreate(data, owner, receiver); data << int32(CovenantID); data << int32(SoulbindID); data << uint32(VisualItemReplacements.size()); + for (uint32 i = 0; i < 19; ++i) + { + data << uint32(Field_3120[i]); + } for (uint32 i = 0; i < Customizations.size(); ++i) { Customizations[i].WriteCreate(data, owner, receiver); @@ -2180,7 +2185,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFE00000u, 0x0000FFFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000003Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFC00000u, 0xFFFFFFFFu, 0x0000001Fu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2188,20 +2193,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFE0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x001FFFFFu, 0x00000000u }; + allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFC0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x003FFFFFu, 0x00000000u, 0x00000000u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000001Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFE00000u, 0x0000FFFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000003Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFC00000u, 0xFFFFFFFFu, 0x0000001Fu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlocksMask(0), 8); - for (uint32 i = 0; i < 8; ++i) + data.WriteBits(changesMask.GetBlocksMask(0), 9); + for (uint32 i = 0; i < 9; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -2396,26 +2401,30 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { if (changesMask[33]) { - CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(CurrentBattlePetSpeciesID); } if (changesMask[34]) { - data << int32(CovenantID); + CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[35]) { - data << int32(SoulbindID); + data << int32(CovenantID); } if (changesMask[36]) { + data << int32(SoulbindID); + } + if (changesMask[37]) + { data << DungeonScore; } } - if (changesMask[37]) + if (changesMask[38]) { for (uint32 i = 0; i < 175; ++i) { - if (changesMask[38 + i]) + if (changesMask[39 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -2424,26 +2433,36 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[213]) + if (changesMask[214]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[214 + i]) + if (changesMask[215 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[233]) + if (changesMask[234]) { for (uint32 i = 0; i < 6; ++i) { - if (changesMask[234 + i]) + if (changesMask[235 + i]) { data << float(AvgItemLevel[i]); } } } + if (changesMask[241]) + { + for (uint32 i = 0; i < 19; ++i) + { + if (changesMask[242 + i]) + { + data << uint32(Field_3120[i]); + } + } + } data.FlushBits(); } @@ -2480,6 +2499,7 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(LogoutTime); Base::ClearChangesMask(Field_B0); Base::ClearChangesMask(Field_B4); + Base::ClearChangesMask(CurrentBattlePetSpeciesID); Base::ClearChangesMask(CtrOptions); Base::ClearChangesMask(CovenantID); Base::ClearChangesMask(SoulbindID); @@ -2487,6 +2507,7 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); Base::ClearChangesMask(AvgItemLevel); + Base::ClearChangesMask(Field_3120); _changesMask.ResetAll(); } @@ -3523,9 +3544,45 @@ bool PersonalCraftingOrderCount::operator==(PersonalCraftingOrderCount const& ri && Count == right.Count; } +void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(SpellCategoryID); + data << int32(ModCooldown); +} + +void CategoryCooldownMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data << int32(SpellCategoryID); + data << int32(ModCooldown); +} + +bool CategoryCooldownMod::operator==(CategoryCooldownMod const& right) const +{ + return SpellCategoryID == right.SpellCategoryID + && ModCooldown == right.ModCooldown; +} + +void WeeklySpellUse::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(SpellCategoryID); + data << uint8(Uses); +} + +void WeeklySpellUse::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data << int32(SpellCategoryID); + data << uint8(Uses); +} + +bool WeeklySpellUse::operator==(WeeklySpellUse const& right) const +{ + return SpellCategoryID == right.SpellCategoryID + && Uses == right.Uses; +} + void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - for (uint32 i = 0; i < 218; ++i) + for (uint32 i = 0; i < 227; ++i) { data << InvSlots[i]; } @@ -3691,6 +3748,13 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << uint32(ActiveCombatTraitConfigID); data << uint32(CraftingOrders.size()); data << uint32(PersonalCraftingOrderCounts.size()); + data << uint32(CategoryCooldownMods.size()); + data << uint32(WeeklySpellUses.size()); + for (uint32 i = 0; i < 17; ++i) + { + data << float(ItemUpgradeHighWatermark[i]); + } + data << uint64(LootHistoryInstanceID); for (uint32 i = 0; i < KnownTitles.size(); ++i) { data << uint64(KnownTitles[i]); @@ -3779,6 +3843,14 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver); } + for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) + { + CategoryCooldownMods[i].WriteCreate(data, owner, receiver); + } + for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) + { + WeeklySpellUses[i].WriteCreate(data, owner, receiver); + } data.FlushBits(); data.WriteBit(BackpackAutoSortDisabled); data.WriteBit(BankAutoSortDisabled); @@ -3821,8 +3893,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { for (uint32 i = 0; i < 1; ++i) data << uint32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 18); - for (uint32 i = 0; i < 50; ++i) + data.WriteBits(changesMask.GetBlocksMask(1), 19); + for (uint32 i = 0; i < 51; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -3975,11 +4047,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data); } } - if (changesMask[32]) + if (changesMask[35]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[33 + i]) + if (changesMask[36 + i]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -4055,6 +4127,23 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data); } } + if (changesMask[32]) + { + if (changesMask[33]) + { + if (!ignoreNestedChangesMask) + CategoryCooldownMods.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data); + } + if (changesMask[34]) + { + if (!ignoreNestedChangesMask) + WeeklySpellUses.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data); + } + } data.FlushBits(); if (changesMask[0]) { @@ -4278,6 +4367,32 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } + } + if (changesMask[32]) + { + if (changesMask[33]) + { + for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) + { + if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask) + { + CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[34]) + { + for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) + { + if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask) + { + WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + } + if (changesMask[0]) + { if (changesMask[7]) { for (uint32 i = 0; i < PvpInfo.size(); ++i) @@ -4319,494 +4434,508 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[34]) + if (changesMask[32]) { - if (changesMask[35]) - { - data << FarsightObject; - } - if (changesMask[36]) - { - data << SummonedBattlePetGUID; - } if (changesMask[37]) { - data << uint64(Coinage); + data << FarsightObject; } if (changesMask[38]) { - data << int32(XP); + data << SummonedBattlePetGUID; } if (changesMask[39]) { - data << int32(NextLevelXP); + data << uint64(Coinage); } if (changesMask[40]) { - data << int32(TrialXP); + data << int32(XP); } if (changesMask[41]) { - Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(NextLevelXP); } if (changesMask[42]) { - data << int32(CharacterPoints); + data << int32(TrialXP); } if (changesMask[43]) { - data << int32(MaxTalentTiers); + Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[44]) { - data << uint32(TrackCreatureMask); + data << int32(CharacterPoints); } if (changesMask[45]) { - data << float(MainhandExpertise); + data << int32(MaxTalentTiers); } if (changesMask[46]) { - data << float(OffhandExpertise); + data << uint32(TrackCreatureMask); } if (changesMask[47]) { - data << float(RangedExpertise); + data << float(MainhandExpertise); } if (changesMask[48]) { - data << float(CombatRatingExpertise); + data << float(OffhandExpertise); } if (changesMask[49]) { - data << float(BlockPercentage); + data << float(RangedExpertise); } if (changesMask[50]) { - data << float(DodgePercentage); + data << float(CombatRatingExpertise); } if (changesMask[51]) { - data << float(DodgePercentageFromAttribute); + data << float(BlockPercentage); } if (changesMask[52]) { - data << float(ParryPercentage); + data << float(DodgePercentage); } if (changesMask[53]) { - data << float(ParryPercentageFromAttribute); + data << float(DodgePercentageFromAttribute); } if (changesMask[54]) { - data << float(CritPercentage); + data << float(ParryPercentage); } if (changesMask[55]) { - data << float(RangedCritPercentage); + data << float(ParryPercentageFromAttribute); } if (changesMask[56]) { - data << float(OffhandCritPercentage); + data << float(CritPercentage); } if (changesMask[57]) { - data << float(SpellCritPercentage); + data << float(RangedCritPercentage); } if (changesMask[58]) { - data << int32(ShieldBlock); + data << float(OffhandCritPercentage); } if (changesMask[59]) { - data << float(ShieldBlockCritPercentage); + data << float(SpellCritPercentage); } if (changesMask[60]) { - data << float(Mastery); + data << int32(ShieldBlock); } if (changesMask[61]) { - data << float(Speed); + data << float(ShieldBlockCritPercentage); } if (changesMask[62]) { - data << float(Avoidance); + data << float(Mastery); } if (changesMask[63]) { - data << float(Sturdiness); + data << float(Speed); } if (changesMask[64]) { - data << int32(Versatility); + data << float(Avoidance); } if (changesMask[65]) { - data << float(VersatilityBonus); + data << float(Sturdiness); } } if (changesMask[66]) { if (changesMask[67]) { - data << float(PvpPowerDamage); + data << int32(Versatility); } if (changesMask[68]) { - data << float(PvpPowerHealing); + data << float(VersatilityBonus); } if (changesMask[69]) { - data << int32(ModHealingDonePos); + data << float(PvpPowerDamage); } if (changesMask[70]) { - data << float(ModHealingPercent); + data << float(PvpPowerHealing); } if (changesMask[71]) { - data << float(ModPeriodicHealingDonePercent); + data << int32(ModHealingDonePos); } if (changesMask[72]) { - data << float(ModSpellPowerPercent); + data << float(ModHealingPercent); } if (changesMask[73]) { - data << float(ModResiliencePercent); + data << float(ModPeriodicHealingDonePercent); } if (changesMask[74]) { - data << float(OverrideSpellPowerByAPPercent); + data << float(ModSpellPowerPercent); } if (changesMask[75]) { - data << float(OverrideAPBySpellPowerPercent); + data << float(ModResiliencePercent); } if (changesMask[76]) { - data << int32(ModTargetResistance); + data << float(OverrideSpellPowerByAPPercent); } if (changesMask[77]) { - data << int32(ModTargetPhysicalResistance); + data << float(OverrideAPBySpellPowerPercent); } if (changesMask[78]) { - data << uint32(LocalFlags); + data << int32(ModTargetResistance); } if (changesMask[79]) { - data << uint8(GrantableLevels); + data << int32(ModTargetPhysicalResistance); } if (changesMask[80]) { - data << uint8(MultiActionBars); + data << uint32(LocalFlags); } if (changesMask[81]) { - data << uint8(LifetimeMaxRank); + data << uint8(GrantableLevels); } if (changesMask[82]) { - data << uint8(NumRespecs); + data << uint8(MultiActionBars); } if (changesMask[83]) { - data << uint32(PvpMedals); + data << uint8(LifetimeMaxRank); } if (changesMask[84]) { - data << uint16(TodayHonorableKills); + data << uint8(NumRespecs); } if (changesMask[85]) { - data << uint16(YesterdayHonorableKills); + data << uint32(PvpMedals); } if (changesMask[86]) { - data << uint32(LifetimeHonorableKills); + data << uint16(TodayHonorableKills); } if (changesMask[87]) { - data << int32(WatchedFactionIndex); + data << uint16(YesterdayHonorableKills); } if (changesMask[88]) { - data << int32(MaxLevel); + data << uint32(LifetimeHonorableKills); } if (changesMask[89]) { - data << int32(ScalingPlayerLevelDelta); + data << int32(WatchedFactionIndex); } if (changesMask[90]) { - data << int32(MaxCreatureScalingLevel); + data << int32(MaxLevel); } if (changesMask[91]) { - data << int32(PetSpellPower); + data << int32(ScalingPlayerLevelDelta); } if (changesMask[92]) { - data << float(UiHitModifier); + data << int32(MaxCreatureScalingLevel); } if (changesMask[93]) { - data << float(UiSpellHitModifier); + data << int32(PetSpellPower); } if (changesMask[94]) { - data << int32(HomeRealmTimeOffset); + data << float(UiHitModifier); } if (changesMask[95]) { - data << float(ModPetHaste); + data << float(UiSpellHitModifier); } if (changesMask[96]) { - data << int8(JailersTowerLevelMax); + data << int32(HomeRealmTimeOffset); } if (changesMask[97]) { - data << int8(JailersTowerLevel); + data << float(ModPetHaste); } } if (changesMask[98]) { if (changesMask[99]) { - data << uint8(LocalRegenFlags); + data << int8(JailersTowerLevelMax); } if (changesMask[100]) { - data << uint8(AuraVision); + data << int8(JailersTowerLevel); } if (changesMask[101]) { - data << uint8(NumBackpackSlots); + data << uint8(LocalRegenFlags); } if (changesMask[102]) { - data << int32(OverrideSpellsID); + data << uint8(AuraVision); } if (changesMask[103]) { - data << uint16(LootSpecID); + data << uint8(NumBackpackSlots); } if (changesMask[104]) { - data << uint32(OverrideZonePVPType); + data << int32(OverrideSpellsID); } if (changesMask[105]) { - data << BnetAccount; + data << uint16(LootSpecID); } if (changesMask[106]) { - data << uint64(GuildClubMemberID); + data << uint32(OverrideZonePVPType); } if (changesMask[107]) { - data << int32(Honor); + data << BnetAccount; } if (changesMask[108]) { - data << int32(HonorNextLevel); + data << uint64(GuildClubMemberID); } if (changesMask[109]) { - data << int32(PerksProgramCurrency); + data << int32(Honor); } if (changesMask[110]) { + data << int32(HonorNextLevel); + } + if (changesMask[111]) + { + data << int32(PerksProgramCurrency); + } + if (changesMask[112]) + { data << uint8(NumBankSlots); } - if (changesMask[114]) + if (changesMask[116]) { data << int32(UiChromieTimeExpansionID); } - if (changesMask[115]) + if (changesMask[117]) { data << int32(TransportServerTime); } - if (changesMask[116]) + if (changesMask[118]) { data << uint32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[117]) + if (changesMask[119]) { data << int16(DEBUGSoulbindConduitRank); } - if (changesMask[119]) + if (changesMask[121]) { data << uint32(ActiveCombatTraitConfigID); } + if (changesMask[122]) + { + data << uint64(LootHistoryInstanceID); + } } if (changesMask[98]) { data.WriteBits(QuestSession.has_value(), 1); - if (changesMask[111]) + if (changesMask[113]) { data << FrozenPerksVendorItem; } - if (changesMask[112]) + if (changesMask[114]) { if (QuestSession.has_value()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[113]) + if (changesMask[115]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[118]) + if (changesMask[120]) { data << DungeonScore; } } - if (changesMask[120]) + if (changesMask[123]) { - for (uint32 i = 0; i < 218; ++i) + for (uint32 i = 0; i < 227; ++i) { - if (changesMask[121 + i]) + if (changesMask[124 + i]) { data << InvSlots[i]; } } } - if (changesMask[339]) + if (changesMask[351]) { for (uint32 i = 0; i < 240; ++i) { - if (changesMask[340 + i]) + if (changesMask[352 + i]) { data << uint64(ExploredZones[i]); } } } - if (changesMask[580]) + if (changesMask[592]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[581 + i]) + if (changesMask[593 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[583]) + if (changesMask[595]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[584 + i]) + if (changesMask[596 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[591 + i]) + if (changesMask[603 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[598 + i]) + if (changesMask[610 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[605 + i]) + if (changesMask[617 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[612]) + if (changesMask[624]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[613 + i]) + if (changesMask[625 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[616 + i]) + if (changesMask[628 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[619]) + if (changesMask[631]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[620 + i]) + if (changesMask[632 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[632 + i]) + if (changesMask[644 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[644]) + if (changesMask[656]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[645 + i]) + if (changesMask[657 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[677]) + if (changesMask[689]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[678 + i]) + if (changesMask[690 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[682]) + if (changesMask[694]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[683 + i]) + if (changesMask[695 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[685]) + if (changesMask[697]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[686 + i]) + if (changesMask[698 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[691]) + if (changesMask[703]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[692 + i]) + if (changesMask[704 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[699]) + if (changesMask[711]) { for (uint32 i = 0; i < 875; ++i) { - if (changesMask[700 + i]) + if (changesMask[712 + i]) { data << uint64(QuestCompleted[i]); } } } + if (changesMask[1587]) + { + for (uint32 i = 0; i < 17; ++i) + { + if (changesMask[1588 + i]) + { + data << float(ItemUpgradeHighWatermark[i]); + } + } + } data.FlushBits(); } @@ -4840,6 +4969,8 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(ReplayedQuests); Base::ClearChangesMask(DisabledSpells); Base::ClearChangesMask(PersonalCraftingOrderCounts); + Base::ClearChangesMask(CategoryCooldownMods); + Base::ClearChangesMask(WeeklySpellUses); Base::ClearChangesMask(PvpInfo); Base::ClearChangesMask(CharacterRestrictions); Base::ClearChangesMask(TraitConfigs); @@ -4927,6 +5058,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(DEBUGSoulbindConduitRank); Base::ClearChangesMask(DungeonScore); Base::ClearChangesMask(ActiveCombatTraitConfigID); + Base::ClearChangesMask(LootHistoryInstanceID); Base::ClearChangesMask(InvSlots); Base::ClearChangesMask(ExploredZones); Base::ClearChangesMask(RestInfo); @@ -4944,6 +5076,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(BagSlotFlags); Base::ClearChangesMask(BankBagSlotFlags); Base::ClearChangesMask(QuestCompleted); + Base::ClearChangesMask(ItemUpgradeHighWatermark); _changesMask.ResetAll(); } @@ -5497,10 +5630,14 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi data << Field_88; data << Field_F8; ExtraScaleCurve->WriteCreate(data, owner, receiver); + data.WriteBit(Field_260); + data.WriteBit(Field_261); Field_C38->WriteCreate(data, owner, receiver); Field_C54->WriteCreate(data, owner, receiver); Field_C70->WriteCreate(data, owner, receiver); VisualAnim->WriteCreate(data, owner, receiver); + data.FlushBits(); + data.FlushBits(); } void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const @@ -5510,104 +5647,118 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlock(0), 23); + data.WriteBits(changesMask.GetBlock(0), 25); - data.FlushBits(); if (changesMask[0]) { if (changesMask[1]) { + data.WriteBit(Field_260); + } + if (changesMask[2]) + { + data.WriteBit(Field_261); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[3]) + { OverrideScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[6]) + if (changesMask[8]) { data << Caster; } - if (changesMask[7]) + if (changesMask[9]) { data << uint32(Duration); } - if (changesMask[8]) + if (changesMask[10]) { data << uint32(TimeToTarget); } - if (changesMask[9]) + if (changesMask[11]) { data << uint32(TimeToTargetScale); } - if (changesMask[10]) + if (changesMask[12]) { data << uint32(TimeToTargetExtraScale); } - if (changesMask[11]) + if (changesMask[13]) { data << uint32(Field_B0); } - if (changesMask[12]) + if (changesMask[14]) { data << int32(SpellID); } - if (changesMask[13]) + if (changesMask[15]) { data << int32(SpellForVisuals); } - if (changesMask[14]) + if (changesMask[16]) { SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[15]) + if (changesMask[17]) { data << float(BoundsRadius2D); } - if (changesMask[16]) + if (changesMask[18]) { data << uint32(DecalPropertiesID); } - if (changesMask[17]) + if (changesMask[19]) { data << CreatingEffectGUID; } - if (changesMask[18]) + if (changesMask[20]) { data << uint32(Field_80); } - if (changesMask[19]) + if (changesMask[21]) { data << uint32(Field_84); } - if (changesMask[20]) + if (changesMask[22]) { data << Field_88; } - if (changesMask[21]) + if (changesMask[23]) { data << Field_F8; } - if (changesMask[2]) + if (changesMask[4]) { ExtraScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[3]) + if (changesMask[5]) { Field_C38->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[4]) + if (changesMask[6]) { Field_C54->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[5]) + if (changesMask[7]) { Field_C70->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[22]) + if (changesMask[24]) { VisualAnim->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } + data.FlushBits(); } void AreaTriggerData::ClearChangesMask() { + Base::ClearChangesMask(Field_260); + Base::ClearChangesMask(Field_261); Base::ClearChangesMask(OverrideScaleCurve); Base::ClearChangesMask(ExtraScaleCurve); Base::ClearChangesMask(Field_C38); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index ee689dd4fa4..9af78fef00f 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -256,7 +256,7 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); } }; -struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<197> +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<209> { UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells; @@ -385,18 +385,18 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<197> UpdateField<ObjectGuid, 96, 122> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object UpdateFieldArray<uint32, 2, 123, 124> NpcFlags; struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateFieldArray<int32, 7, 126, 127> Power; - UpdateFieldArray<int32, 7, 126, 134> MaxPower; - UpdateFieldArray<float, 7, 126, 141> PowerRegenFlatModifier; - UpdateFieldArray<float, 7, 126, 148> PowerRegenInterruptedFlatModifier; - UpdateFieldArray<UF::VisibleItem, 3, 155, 156> VirtualItems; - UpdateFieldArray<uint32, 2, 159, 160> AttackRoundBaseTime; - UpdateFieldArray<int32, 4, 162, 163> Stats; - UpdateFieldArray<int32, 4, 162, 167> StatPosBuff; - UpdateFieldArray<int32, 4, 162, 171> StatNegBuff; - UpdateFieldArray<int32, 7, 175, 176> Resistances; - UpdateFieldArray<int32, 7, 175, 183> BonusResistanceMods; - UpdateFieldArray<int32, 7, 175, 190> ManaCostModifier; + UpdateFieldArray<int32, 10, 126, 127> Power; + UpdateFieldArray<int32, 10, 126, 137> MaxPower; + UpdateFieldArray<float, 10, 126, 147> PowerRegenFlatModifier; + UpdateFieldArray<float, 10, 126, 157> PowerRegenInterruptedFlatModifier; + UpdateFieldArray<UF::VisibleItem, 3, 167, 168> VirtualItems; + UpdateFieldArray<uint32, 2, 171, 172> AttackRoundBaseTime; + UpdateFieldArray<int32, 4, 174, 175> Stats; + UpdateFieldArray<int32, 4, 174, 179> StatPosBuff; + UpdateFieldArray<int32, 4, 174, 183> StatNegBuff; + UpdateFieldArray<int32, 7, 187, 188> Resistances; + UpdateFieldArray<int32, 7, 187, 195> BonusResistanceMods; + UpdateFieldArray<int32, 7, 187, 202> ManaCostModifier; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; @@ -458,7 +458,7 @@ struct CTROptions : public IsUpdateFieldStructureTag bool operator!=(CTROptions const& right) const { return !(*this == right); } }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<240> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<261> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -491,13 +491,15 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<240> UpdateField<int64, 0, 29> LogoutTime; UpdateField<int32, 0, 30> Field_B0; UpdateField<int32, 0, 31> Field_B4; - UpdateField<UF::CTROptions, 32, 33> CtrOptions; - UpdateField<int32, 32, 34> CovenantID; - UpdateField<int32, 32, 35> SoulbindID; - UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 36> DungeonScore; - UpdateFieldArray<UF::QuestLog, 175, 37, 38> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 213, 214> VisibleItems; - UpdateFieldArray<float, 6, 233, 234> AvgItemLevel; + UpdateField<int32, 32, 33> CurrentBattlePetSpeciesID; + UpdateField<UF::CTROptions, 32, 34> CtrOptions; + UpdateField<int32, 32, 35> CovenantID; + UpdateField<int32, 32, 36> SoulbindID; + UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 37> DungeonScore; + UpdateFieldArray<UF::QuestLog, 175, 38, 39> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 214, 215> VisibleItems; + UpdateFieldArray<float, 6, 234, 235> AvgItemLevel; + UpdateFieldArray<uint32, 19, 241, 242> 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; @@ -764,14 +766,36 @@ struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag bool operator!=(PersonalCraftingOrderCount const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1575> +struct CategoryCooldownMod : public IsUpdateFieldStructureTag +{ + int32 SpellCategoryID; + int32 ModCooldown; + + 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==(CategoryCooldownMod const& right) const; + bool operator!=(CategoryCooldownMod const& right) const { return !(*this == right); } +}; + +struct WeeklySpellUse : public IsUpdateFieldStructureTag +{ + int32 SpellCategoryID; + uint8 Uses; + + 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==(WeeklySpellUse const& right) const; + bool operator!=(WeeklySpellUse const& right) const { return !(*this == right); } +}; + +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1605> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BankAutoSortDisabled; UpdateField<bool, 0, 3> SortBagsRightToLeft; UpdateField<bool, 0, 4> InsertItemsLeftToRight; UpdateField<bool, 0, 5> HasPerksProgramPendingReward; - UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 32, 33> Research; + UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 35, 36> Research; DynamicUpdateField<uint64, 0, 6> KnownTitles; DynamicUpdateField<uint16, 0, 8> ResearchSites; DynamicUpdateField<uint32, 0, 9> ResearchSiteProgress; @@ -794,110 +818,114 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas DynamicUpdateField<UF::ReplayedQuest, 0, 27> ReplayedQuests; DynamicUpdateField<int32, 0, 28> DisabledSpells; DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 31> PersonalCraftingOrderCounts; + DynamicUpdateField<UF::CategoryCooldownMod, 32, 33> CategoryCooldownMods; + DynamicUpdateField<UF::WeeklySpellUse, 32, 34> WeeklySpellUses; DynamicUpdateField<UF::PVPInfo, 0, 7> PvpInfo; DynamicUpdateField<UF::CharacterRestriction, 0, 21> CharacterRestrictions; DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs; DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders; - UpdateField<ObjectGuid, 34, 35> FarsightObject; - UpdateField<ObjectGuid, 34, 36> SummonedBattlePetGUID; - UpdateField<uint64, 34, 37> Coinage; - UpdateField<int32, 34, 38> XP; - UpdateField<int32, 34, 39> NextLevelXP; - UpdateField<int32, 34, 40> TrialXP; - UpdateField<UF::SkillInfo, 34, 41> Skill; - UpdateField<int32, 34, 42> CharacterPoints; - UpdateField<int32, 34, 43> MaxTalentTiers; - UpdateField<uint32, 34, 44> TrackCreatureMask; - UpdateField<float, 34, 45> MainhandExpertise; - UpdateField<float, 34, 46> OffhandExpertise; - UpdateField<float, 34, 47> RangedExpertise; - UpdateField<float, 34, 48> CombatRatingExpertise; - UpdateField<float, 34, 49> BlockPercentage; - UpdateField<float, 34, 50> DodgePercentage; - UpdateField<float, 34, 51> DodgePercentageFromAttribute; - UpdateField<float, 34, 52> ParryPercentage; - UpdateField<float, 34, 53> ParryPercentageFromAttribute; - UpdateField<float, 34, 54> CritPercentage; - UpdateField<float, 34, 55> RangedCritPercentage; - UpdateField<float, 34, 56> OffhandCritPercentage; - UpdateField<float, 34, 57> SpellCritPercentage; - UpdateField<int32, 34, 58> ShieldBlock; - UpdateField<float, 34, 59> ShieldBlockCritPercentage; - UpdateField<float, 34, 60> Mastery; - UpdateField<float, 34, 61> Speed; - UpdateField<float, 34, 62> Avoidance; - UpdateField<float, 34, 63> Sturdiness; - UpdateField<int32, 34, 64> Versatility; - UpdateField<float, 34, 65> VersatilityBonus; - UpdateField<float, 66, 67> PvpPowerDamage; - UpdateField<float, 66, 68> PvpPowerHealing; - UpdateField<int32, 66, 69> ModHealingDonePos; - UpdateField<float, 66, 70> ModHealingPercent; - UpdateField<float, 66, 71> ModPeriodicHealingDonePercent; - UpdateField<float, 66, 72> ModSpellPowerPercent; - UpdateField<float, 66, 73> ModResiliencePercent; - UpdateField<float, 66, 74> OverrideSpellPowerByAPPercent; - UpdateField<float, 66, 75> OverrideAPBySpellPowerPercent; - UpdateField<int32, 66, 76> ModTargetResistance; - UpdateField<int32, 66, 77> ModTargetPhysicalResistance; - UpdateField<uint32, 66, 78> LocalFlags; - UpdateField<uint8, 66, 79> GrantableLevels; - UpdateField<uint8, 66, 80> MultiActionBars; - UpdateField<uint8, 66, 81> LifetimeMaxRank; - UpdateField<uint8, 66, 82> NumRespecs; - UpdateField<uint32, 66, 83> PvpMedals; - UpdateField<uint16, 66, 84> TodayHonorableKills; - UpdateField<uint16, 66, 85> YesterdayHonorableKills; - UpdateField<uint32, 66, 86> LifetimeHonorableKills; - UpdateField<int32, 66, 87> WatchedFactionIndex; - UpdateField<int32, 66, 88> MaxLevel; - UpdateField<int32, 66, 89> ScalingPlayerLevelDelta; - UpdateField<int32, 66, 90> MaxCreatureScalingLevel; - UpdateField<int32, 66, 91> PetSpellPower; - UpdateField<float, 66, 92> UiHitModifier; - UpdateField<float, 66, 93> UiSpellHitModifier; - UpdateField<int32, 66, 94> HomeRealmTimeOffset; - UpdateField<float, 66, 95> ModPetHaste; - UpdateField<int8, 66, 96> JailersTowerLevelMax; - UpdateField<int8, 66, 97> JailersTowerLevel; - UpdateField<uint8, 98, 99> LocalRegenFlags; - UpdateField<uint8, 98, 100> AuraVision; - UpdateField<uint8, 98, 101> NumBackpackSlots; - UpdateField<int32, 98, 102> OverrideSpellsID; - UpdateField<uint16, 98, 103> LootSpecID; - UpdateField<uint32, 98, 104> OverrideZonePVPType; - UpdateField<ObjectGuid, 98, 105> BnetAccount; - UpdateField<uint64, 98, 106> GuildClubMemberID; - UpdateField<int32, 98, 107> Honor; - UpdateField<int32, 98, 108> HonorNextLevel; - UpdateField<int32, 98, 109> PerksProgramCurrency; - UpdateField<uint8, 98, 110> NumBankSlots; - UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 98, 111> FrozenPerksVendorItem; - UpdateField<UF::ActivePlayerUnk901, 98, 113> Field_1410; - OptionalUpdateField<UF::QuestSession, 98, 112> QuestSession; - UpdateField<int32, 98, 114> UiChromieTimeExpansionID; - UpdateField<int32, 98, 115> TransportServerTime; - UpdateField<uint32, 98, 116> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 98, 117> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 98, 118> DungeonScore; - UpdateField<uint32, 98, 119> ActiveCombatTraitConfigID; - UpdateFieldArray<ObjectGuid, 218, 120, 121> InvSlots; - UpdateFieldArray<uint64, 240, 339, 340> ExploredZones; - UpdateFieldArray<UF::RestInfo, 2, 580, 581> RestInfo; - UpdateFieldArray<int32, 7, 583, 584> ModDamageDonePos; - UpdateFieldArray<int32, 7, 583, 591> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 583, 598> ModDamageDonePercent; - UpdateFieldArray<float, 7, 583, 605> ModHealingDonePercent; - UpdateFieldArray<float, 3, 612, 613> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 612, 616> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 619, 620> BuybackPrice; - UpdateFieldArray<int64, 12, 619, 632> BuybackTimestamp; - UpdateFieldArray<int32, 32, 644, 645> CombatRatings; - UpdateFieldArray<uint32, 4, 677, 678> NoReagentCostMask; - UpdateFieldArray<int32, 2, 682, 683> ProfessionSkillLine; - UpdateFieldArray<uint32, 5, 685, 686> BagSlotFlags; - UpdateFieldArray<uint32, 7, 691, 692> BankBagSlotFlags; - UpdateFieldArray<uint64, 875, 699, 700> QuestCompleted; + UpdateField<ObjectGuid, 32, 37> FarsightObject; + UpdateField<ObjectGuid, 32, 38> SummonedBattlePetGUID; + UpdateField<uint64, 32, 39> Coinage; + UpdateField<int32, 32, 40> XP; + UpdateField<int32, 32, 41> NextLevelXP; + UpdateField<int32, 32, 42> TrialXP; + UpdateField<UF::SkillInfo, 32, 43> Skill; + UpdateField<int32, 32, 44> CharacterPoints; + UpdateField<int32, 32, 45> MaxTalentTiers; + UpdateField<uint32, 32, 46> TrackCreatureMask; + UpdateField<float, 32, 47> MainhandExpertise; + UpdateField<float, 32, 48> OffhandExpertise; + UpdateField<float, 32, 49> RangedExpertise; + UpdateField<float, 32, 50> CombatRatingExpertise; + UpdateField<float, 32, 51> BlockPercentage; + UpdateField<float, 32, 52> DodgePercentage; + UpdateField<float, 32, 53> DodgePercentageFromAttribute; + UpdateField<float, 32, 54> ParryPercentage; + UpdateField<float, 32, 55> ParryPercentageFromAttribute; + UpdateField<float, 32, 56> CritPercentage; + UpdateField<float, 32, 57> RangedCritPercentage; + UpdateField<float, 32, 58> OffhandCritPercentage; + UpdateField<float, 32, 59> SpellCritPercentage; + UpdateField<int32, 32, 60> ShieldBlock; + UpdateField<float, 32, 61> ShieldBlockCritPercentage; + UpdateField<float, 32, 62> Mastery; + UpdateField<float, 32, 63> Speed; + UpdateField<float, 32, 64> Avoidance; + UpdateField<float, 32, 65> Sturdiness; + UpdateField<int32, 66, 67> Versatility; + UpdateField<float, 66, 68> VersatilityBonus; + UpdateField<float, 66, 69> PvpPowerDamage; + UpdateField<float, 66, 70> PvpPowerHealing; + UpdateField<int32, 66, 71> ModHealingDonePos; + UpdateField<float, 66, 72> ModHealingPercent; + UpdateField<float, 66, 73> ModPeriodicHealingDonePercent; + UpdateField<float, 66, 74> ModSpellPowerPercent; + UpdateField<float, 66, 75> ModResiliencePercent; + UpdateField<float, 66, 76> OverrideSpellPowerByAPPercent; + UpdateField<float, 66, 77> OverrideAPBySpellPowerPercent; + UpdateField<int32, 66, 78> ModTargetResistance; + UpdateField<int32, 66, 79> ModTargetPhysicalResistance; + UpdateField<uint32, 66, 80> LocalFlags; + UpdateField<uint8, 66, 81> GrantableLevels; + UpdateField<uint8, 66, 82> MultiActionBars; + UpdateField<uint8, 66, 83> LifetimeMaxRank; + UpdateField<uint8, 66, 84> NumRespecs; + UpdateField<uint32, 66, 85> PvpMedals; + UpdateField<uint16, 66, 86> TodayHonorableKills; + UpdateField<uint16, 66, 87> YesterdayHonorableKills; + UpdateField<uint32, 66, 88> LifetimeHonorableKills; + UpdateField<int32, 66, 89> WatchedFactionIndex; + UpdateField<int32, 66, 90> MaxLevel; + UpdateField<int32, 66, 91> ScalingPlayerLevelDelta; + UpdateField<int32, 66, 92> MaxCreatureScalingLevel; + UpdateField<int32, 66, 93> PetSpellPower; + UpdateField<float, 66, 94> UiHitModifier; + UpdateField<float, 66, 95> UiSpellHitModifier; + UpdateField<int32, 66, 96> HomeRealmTimeOffset; + UpdateField<float, 66, 97> ModPetHaste; + UpdateField<int8, 98, 99> JailersTowerLevelMax; + UpdateField<int8, 98, 100> JailersTowerLevel; + UpdateField<uint8, 98, 101> LocalRegenFlags; + UpdateField<uint8, 98, 102> AuraVision; + UpdateField<uint8, 98, 103> NumBackpackSlots; + UpdateField<int32, 98, 104> OverrideSpellsID; + UpdateField<uint16, 98, 105> LootSpecID; + UpdateField<uint32, 98, 106> OverrideZonePVPType; + UpdateField<ObjectGuid, 98, 107> BnetAccount; + UpdateField<uint64, 98, 108> GuildClubMemberID; + UpdateField<int32, 98, 109> Honor; + UpdateField<int32, 98, 110> HonorNextLevel; + UpdateField<int32, 98, 111> PerksProgramCurrency; + UpdateField<uint8, 98, 112> NumBankSlots; + UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 98, 113> FrozenPerksVendorItem; + UpdateField<UF::ActivePlayerUnk901, 98, 115> Field_1410; + OptionalUpdateField<UF::QuestSession, 98, 114> QuestSession; + UpdateField<int32, 98, 116> UiChromieTimeExpansionID; + UpdateField<int32, 98, 117> TransportServerTime; + UpdateField<uint32, 98, 118> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 98, 119> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 98, 120> DungeonScore; + UpdateField<uint32, 98, 121> ActiveCombatTraitConfigID; + UpdateField<uint64, 98, 122> LootHistoryInstanceID; + UpdateFieldArray<ObjectGuid, 227, 123, 124> InvSlots; + UpdateFieldArray<uint64, 240, 351, 352> ExploredZones; + UpdateFieldArray<UF::RestInfo, 2, 592, 593> RestInfo; + UpdateFieldArray<int32, 7, 595, 596> ModDamageDonePos; + UpdateFieldArray<int32, 7, 595, 603> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 595, 610> ModDamageDonePercent; + UpdateFieldArray<float, 7, 595, 617> ModHealingDonePercent; + UpdateFieldArray<float, 3, 624, 625> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 624, 628> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 631, 632> BuybackPrice; + UpdateFieldArray<int64, 12, 631, 644> BuybackTimestamp; + UpdateFieldArray<int32, 32, 656, 657> CombatRatings; + UpdateFieldArray<uint32, 4, 689, 690> NoReagentCostMask; + UpdateFieldArray<int32, 2, 694, 695> ProfessionSkillLine; + UpdateFieldArray<uint32, 5, 697, 698> BagSlotFlags; + UpdateFieldArray<uint32, 7, 703, 704> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 711, 712> QuestCompleted; + UpdateFieldArray<float, 17, 1587, 1588> 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; @@ -1001,30 +1029,32 @@ struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5> void ClearChangesMask(); }; -struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<23> +struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<25> { - UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve; - UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve; - UpdateField<UF::ScaleCurve, 0, 3> Field_C38; - UpdateField<UF::ScaleCurve, 0, 4> Field_C54; - UpdateField<UF::ScaleCurve, 0, 5> Field_C70; - UpdateField<ObjectGuid, 0, 6> Caster; - UpdateField<uint32, 0, 7> Duration; - UpdateField<uint32, 0, 8> TimeToTarget; - UpdateField<uint32, 0, 9> TimeToTargetScale; - UpdateField<uint32, 0, 10> TimeToTargetExtraScale; - UpdateField<uint32, 0, 11> Field_B0; - UpdateField<int32, 0, 12> SpellID; - UpdateField<int32, 0, 13> SpellForVisuals; - UpdateField<UF::SpellCastVisual, 0, 14> SpellVisual; - UpdateField<float, 0, 15> BoundsRadius2D; - UpdateField<uint32, 0, 16> DecalPropertiesID; - UpdateField<ObjectGuid, 0, 17> CreatingEffectGUID; - UpdateField<uint32, 0, 18> Field_80; - UpdateField<uint32, 0, 19> Field_84; - UpdateField<ObjectGuid, 0, 20> Field_88; - UpdateField<TaggedPosition<Position::XYZ>, 0, 21> Field_F8; - UpdateField<UF::VisualAnim, 0, 22> VisualAnim; + UpdateField<bool, 0, 1> Field_260; + UpdateField<bool, 0, 2> Field_261; + UpdateField<UF::ScaleCurve, 0, 3> OverrideScaleCurve; + UpdateField<UF::ScaleCurve, 0, 4> ExtraScaleCurve; + UpdateField<UF::ScaleCurve, 0, 5> Field_C38; + UpdateField<UF::ScaleCurve, 0, 6> Field_C54; + UpdateField<UF::ScaleCurve, 0, 7> Field_C70; + UpdateField<ObjectGuid, 0, 8> Caster; + UpdateField<uint32, 0, 9> Duration; + UpdateField<uint32, 0, 10> TimeToTarget; + UpdateField<uint32, 0, 11> TimeToTargetScale; + UpdateField<uint32, 0, 12> TimeToTargetExtraScale; + UpdateField<uint32, 0, 13> Field_B0; + UpdateField<int32, 0, 14> SpellID; + UpdateField<int32, 0, 15> SpellForVisuals; + UpdateField<UF::SpellCastVisual, 0, 16> SpellVisual; + UpdateField<float, 0, 17> BoundsRadius2D; + UpdateField<uint32, 0, 18> DecalPropertiesID; + UpdateField<ObjectGuid, 0, 19> CreatingEffectGUID; + UpdateField<uint32, 0, 20> Field_80; + UpdateField<uint32, 0, 21> Field_84; + UpdateField<ObjectGuid, 0, 22> Field_88; + UpdateField<TaggedPosition<Position::XYZ>, 0, 23> Field_F8; + UpdateField<UF::VisualAnim, 0, 24> VisualAnim; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 39c1e05d338..a0c68227033 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1298,9 +1298,9 @@ void Player::ToggleDND() SetPlayerFlag(PLAYER_FLAGS_DND); } -uint8 Player::GetChatFlags() const +uint16 Player::GetChatFlags() const { - uint8 tag = CHAT_FLAG_NONE; + uint16 tag = CHAT_FLAG_NONE; if (isGMChat()) tag |= CHAT_FLAG_GM; @@ -17311,8 +17311,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol // "position_x, position_y, position_z, map, orientation, taximask, createTime, createMode, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, " // "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, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, raidDifficulty, legacyRaidDifficulty, fishingSteps, " - // "honor, honorLevel, honorRestState, honorRestBonus, numRespecs " + // "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 " // "FROM characters c LEFT JOIN character_fishingsteps cfs ON c.guid = cfs.guid WHERE c.guid = ?", CONNECTION_ASYNC); ObjectGuid::LowType guid; @@ -19705,19 +19705,8 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba stmt->setUInt8(index++, GetDrunkValue()); stmt->setUInt32(index++, GetHealth()); - uint32 storedPowers = 0; - for (uint32 i = 0; i < MAX_POWERS; ++i) - { - if (GetPowerIndex(Powers(i)) != MAX_POWERS) - { - stmt->setUInt32(index++, m_unitData->Power[storedPowers]); - if (++storedPowers >= MAX_POWERS_PER_CLASS) - break; - } - } - - for (; storedPowers < MAX_POWERS_PER_CLASS; ++storedPowers) - stmt->setUInt32(index++, 0); + for (uint32 i = 0; i < MAX_POWERS_PER_CLASS; ++i) + stmt->setUInt32(index++, m_unitData->Power[i]); stmt->setUInt32(index++, GetSession()->GetLatency()); @@ -19853,19 +19842,8 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba stmt->setUInt8(index++, GetDrunkValue()); stmt->setUInt32(index++, GetHealth()); - uint32 storedPowers = 0; - for (uint32 i = 0; i < MAX_POWERS; ++i) - { - if (GetPowerIndex(Powers(i)) != MAX_POWERS) - { - stmt->setUInt32(index++, m_unitData->Power[storedPowers]); - if (++storedPowers >= MAX_POWERS_PER_CLASS) - break; - } - } - - for (; storedPowers < MAX_POWERS_PER_CLASS; ++storedPowers) - stmt->setUInt32(index++, 0); + for (uint32 i = 0; i < MAX_POWERS_PER_CLASS; ++i) + stmt->setUInt32(index++, m_unitData->Power[i]); stmt->setUInt32(index++, GetSession()->GetLatency()); @@ -28896,38 +28874,65 @@ void Player::RemoveSpecializationSpells() } } -void Player::RemoveSocial() +void Player::AddSpellCategoryCooldownMod(int32 spellCategoryId, int32 mod) { - sSocialMgr->RemovePlayerSocial(GetGUID()); - m_social = nullptr; -} + int32 categoryIndex = m_activePlayerData->CategoryCooldownMods.FindIndexIf([spellCategoryId](UF::CategoryCooldownMod const& mod) + { + return mod.SpellCategoryID == spellCategoryId; + }); -uint32 Player::GetDefaultSpecId() const -{ - return ASSERT_NOTNULL(sDB2Manager.GetDefaultChrSpecializationForClass(GetClass()))->ID; + if (categoryIndex < 0) + { + UF::CategoryCooldownMod& newMod = AddDynamicUpdateFieldValue(m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::CategoryCooldownMods)); + + newMod.SpellCategoryID = spellCategoryId; + newMod.ModCooldown = -mod; + } + else + { + SetUpdateFieldValue(m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::CategoryCooldownMods, categoryIndex) + .ModifyValue(&UF::CategoryCooldownMod::ModCooldown), m_activePlayerData->CategoryCooldownMods[categoryIndex].ModCooldown - mod); + } } -void Player::SendSpellCategoryCooldowns() const +void Player::RemoveSpellCategoryCooldownMod(int32 spellCategoryId, int32 mod) { - WorldPackets::Spells::CategoryCooldown cooldowns; - - Unit::AuraEffectList const& categoryCooldownAuras = GetAuraEffectsByType(SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN); - for (AuraEffect* aurEff : categoryCooldownAuras) + int32 categoryIndex = m_activePlayerData->CategoryCooldownMods.FindIndexIf([spellCategoryId](UF::CategoryCooldownMod const& mod) { - uint32 categoryId = aurEff->GetMiscValue(); - auto cItr = std::find_if(cooldowns.CategoryCooldowns.begin(), cooldowns.CategoryCooldowns.end(), - [categoryId](WorldPackets::Spells::CategoryCooldown::CategoryCooldownInfo const& cooldown) - { - return cooldown.Category == categoryId; - }); + return mod.SpellCategoryID == spellCategoryId; + }); - if (cItr == cooldowns.CategoryCooldowns.end()) - cooldowns.CategoryCooldowns.emplace_back(categoryId, -aurEff->GetAmount()); - else - cItr->ModCooldown -= aurEff->GetAmount(); + if (categoryIndex < 0) + return; + + if (m_activePlayerData->CategoryCooldownMods[categoryIndex].ModCooldown + mod == 0) + { + RemoveDynamicUpdateFieldValue(m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::CategoryCooldownMods), categoryIndex); + } + else + { + SetUpdateFieldValue(m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::CategoryCooldownMods, categoryIndex) + .ModifyValue(&UF::CategoryCooldownMod::ModCooldown), m_activePlayerData->CategoryCooldownMods[categoryIndex].ModCooldown + mod); } +} + +void Player::RemoveSocial() +{ + sSocialMgr->RemovePlayerSocial(GetGUID()); + m_social = nullptr; +} - SendDirectMessage(cooldowns.Write()); +uint32 Player::GetDefaultSpecId() const +{ + return ASSERT_NOTNULL(sDB2Manager.GetDefaultChrSpecializationForClass(GetClass()))->ID; } void Player::SendRaidGroupOnlyMessage(RaidGroupReason reason, int32 delay) const diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 76862cfd9e6..798925e5c85 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -647,7 +647,7 @@ enum PlayerSlots // first slot for item stored (in any way in player m_items data) PLAYER_SLOT_START = 0, // last+1 slot for item stored (in any way in player m_items data) - PLAYER_SLOT_END = 218, + PLAYER_SLOT_END = 227, PLAYER_SLOTS_COUNT = (PLAYER_SLOT_END - PLAYER_SLOT_START) }; @@ -750,6 +750,7 @@ enum ChildEquipmentSlots CHILD_EQUIPMENT_SLOT_END = 211, }; +// slots past 214 are guessed (unused in client) enum EquipableSpellSlots { EQUIPABLE_SPELL_OFFENSIVE_SLOT1 = 211, @@ -757,8 +758,17 @@ enum EquipableSpellSlots EQUIPABLE_SPELL_OFFENSIVE_SLOT3 = 213, EQUIPABLE_SPELL_OFFENSIVE_SLOT4 = 214, EQUIPABLE_SPELL_UTILITY_SLOT1 = 215, - EQUIPABLE_SPELL_DEFENSIVE_SLOT1 = 216, - EQUIPABLE_SPELL_MOBILITY_SLOT1 = 217 + EQUIPABLE_SPELL_UTILITY_SLOT2 = 216, + EQUIPABLE_SPELL_UTILITY_SLOT3 = 217, + EQUIPABLE_SPELL_UTILITY_SLOT4 = 218, + EQUIPABLE_SPELL_DEFENSIVE_SLOT1 = 219, + EQUIPABLE_SPELL_DEFENSIVE_SLOT2 = 220, + EQUIPABLE_SPELL_DEFENSIVE_SLOT3 = 221, + EQUIPABLE_SPELL_DEFENSIVE_SLOT4 = 222, + EQUIPABLE_SPELL_WEAPON_SLOT1 = 223, + EQUIPABLE_SPELL_WEAPON_SLOT2 = 224, + EQUIPABLE_SPELL_WEAPON_SLOT3 = 225, + EQUIPABLE_SPELL_WEAPON_SLOT4 = 226, }; struct ItemPosCount @@ -1171,7 +1181,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void ToggleDND(); bool isAFK() const { return HasPlayerFlag(PLAYER_FLAGS_AFK); } bool isDND() const { return HasPlayerFlag(PLAYER_FLAGS_DND); } - uint8 GetChatFlags() const; + uint16 GetChatFlags() const; std::string autoReplyMsg; int64 GetBarberShopCost(Trinity::IteratorPair<UF::ChrCustomizationChoice const*> newCustomizations) const; @@ -1819,7 +1829,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void RemoveOverrideSpell(uint32 overridenSpellId, uint32 newSpellId); void LearnSpecializationSpells(); void RemoveSpecializationSpells(); - void SendSpellCategoryCooldowns() const; + void AddSpellCategoryCooldownMod(int32 spellCategoryId, int32 mod); + void RemoveSpellCategoryCooldownMod(int32 spellCategoryId, int32 mod); void SetSpellFavorite(uint32 spellId, bool favorite); void AddStoredAuraTeleportLocation(uint32 spellId); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 25cfd6be60d..bd5a69bd878 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8862,7 +8862,14 @@ void Unit::UpdateUnitMod(UnitMods unitMod) case UNIT_MOD_DEMONIC_FURY: case UNIT_MOD_ARCANE_CHARGES: case UNIT_MOD_FURY: - case UNIT_MOD_PAIN: UpdateMaxPower(Powers(unitMod - UNIT_MOD_POWER_START)); break; + case UNIT_MOD_PAIN: + case UNIT_MOD_ESSENCE: + case UNIT_MOD_RUNE_BLOOD: + case UNIT_MOD_RUNE_FROST: + case UNIT_MOD_RUNE_UNHOLY: + case UNIT_MOD_ALTERNATE_QUEST: + case UNIT_MOD_ALTERNATE_ENCOUNTER: + case UNIT_MOD_ALTERNATE_MOUNT: UpdateMaxPower(Powers(unitMod - UNIT_MOD_POWER_START)); break; case UNIT_MOD_RESISTANCE_HOLY: case UNIT_MOD_RESISTANCE_FIRE: diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index b0de657556d..6fb9b7c0894 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -190,6 +190,12 @@ enum UnitMods UNIT_MOD_FURY, UNIT_MOD_PAIN, UNIT_MOD_ESSENCE, + UNIT_MOD_RUNE_BLOOD, + UNIT_MOD_RUNE_FROST, + UNIT_MOD_RUNE_UNHOLY, + UNIT_MOD_ALTERNATE_QUEST, + UNIT_MOD_ALTERNATE_ENCOUNTER, + UNIT_MOD_ALTERNATE_MOUNT, UNIT_MOD_ARMOR, // UNIT_MOD_ARMOR..UNIT_MOD_RESISTANCE_ARCANE must be in existed order, it's accessed by index values of SpellSchools enum. UNIT_MOD_RESISTANCE_HOLY, UNIT_MOD_RESISTANCE_FIRE, @@ -209,7 +215,7 @@ enum UnitMods UNIT_MOD_RESISTANCE_START = UNIT_MOD_ARMOR, UNIT_MOD_RESISTANCE_END = UNIT_MOD_RESISTANCE_ARCANE + 1, UNIT_MOD_POWER_START = UNIT_MOD_MANA, - UNIT_MOD_POWER_END = UNIT_MOD_ESSENCE + 1 + UNIT_MOD_POWER_END = UNIT_MOD_ALTERNATE_MOUNT + 1 }; static_assert(UNIT_MOD_POWER_END - UNIT_MOD_POWER_START == MAX_POWERS, "UnitMods powers section does not match Powers enum!"); diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index c91a2714ff5..da29e00af5b 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -679,11 +679,6 @@ void WorldSession::HandleUpdateMissileTrajectory(WorldPackets::Spells::UpdateMis HandleMovementOpcode(CMSG_MOVE_STOP, *packet.Status); } -void WorldSession::HandleRequestCategoryCooldowns(WorldPackets::Spells::RequestCategoryCooldowns& /*requestCategoryCooldowns*/) -{ - _player->SendSpellCategoryCooldowns(); -} - void WorldSession::HandleKeyboundOverride(WorldPackets::Spells::KeyboundOverride& keyboundOverride) { Player* player = GetPlayer(); diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp index 77e2775f76e..40e185463ec 100644 --- a/src/server/game/Loot/Loot.cpp +++ b/src/server/game/Loot/Loot.cpp @@ -235,6 +235,7 @@ void LootRoll::SendStartRoll() FillPacket(startLootRoll.Item); startLootRoll.Item.UIType = LOOT_SLOT_TYPE_ROLL_ONGOING; + startLootRoll.DungeonEncounterID = m_loot->GetDungeonEncounterId(); player->SendDirectMessage(startLootRoll.Write()); } @@ -256,6 +257,7 @@ void LootRoll::SendAllPassed() lootAllPassed.LootObj = m_loot->GetGUID(); FillPacket(lootAllPassed.Item); lootAllPassed.Item.UIType = LOOT_SLOT_TYPE_ALLOW_LOOT; + lootAllPassed.DungeonEncounterID = m_loot->GetDungeonEncounterId(); lootAllPassed.Write(); for (auto const& [playerGuid, roll] : m_rollVoteMap) @@ -282,6 +284,7 @@ void LootRoll::SendRoll(ObjectGuid const& targetGuid, int32 rollNumber, RollVote lootRoll.Autopassed = false; FillPacket(lootRoll.Item); lootRoll.Item.UIType = LOOT_SLOT_TYPE_ROLL_ONGOING; + lootRoll.DungeonEncounterID = m_loot->GetDungeonEncounterId(); lootRoll.Write(); for (auto const& [playerGuid, roll] : m_rollVoteMap) @@ -337,6 +340,7 @@ void LootRoll::SendLootRollWon(ObjectGuid const& targetGuid, int32 rollNumber, R lootRollWon.RollType = AsUnderlyingType(rollType); FillPacket(lootRollWon.Item); lootRollWon.Item.UIType = LOOT_SLOT_TYPE_LOCKED; + lootRollWon.DungeonEncounterID = m_loot->GetDungeonEncounterId(); lootRollWon.MainSpec = true; // offspec rolls not implemented lootRollWon.Write(); diff --git a/src/server/game/Loot/Loot.h b/src/server/game/Loot/Loot.h index b13ae06ff9d..d80bcb78ffa 100644 --- a/src/server/game/Loot/Loot.h +++ b/src/server/game/Loot/Loot.h @@ -56,7 +56,8 @@ enum RollType ROLL_NEED = 1, ROLL_GREED = 2, ROLL_DISENCHANT = 3, - MAX_ROLL_TYPE = 4 + ROLL_TRANSMOG = 4, + MAX_ROLL_TYPE = 5 }; enum class RollVote @@ -75,6 +76,7 @@ enum RollMask ROLL_FLAG_TYPE_NEED = 0x02, ROLL_FLAG_TYPE_GREED = 0x04, ROLL_FLAG_TYPE_DISENCHANT = 0x08, + ROLL_FLAG_TYPE_TRANSMOG = 0x10, ROLL_ALL_TYPE_NO_DISENCHANT = 0x07, ROLL_ALL_TYPE_MASK = 0x0F diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 874a5d6dfd5..7d19e472109 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -297,11 +297,17 @@ enum Powers : int8 POWER_FURY = 17, // TITLE Fury POWER_PAIN = 18, // TITLE Pain POWER_ESSENCE = 19, // TITLE Essence - MAX_POWERS = 20, // SKIP + POWER_RUNE_BLOOD = 20, // TITLE Blood Runes + POWER_RUNE_FROST = 21, // TITLE Frost Runes + POWER_RUNE_UNHOLY = 22, // TITLE Unholy Runes + POWER_ALTERNATE_QUEST = 23, // TITLE Alternate (Quest) + POWER_ALTERNATE_ENCOUNTER = 24, // TITLE Alternate (Encounter) + POWER_ALTERNATE_MOUNT = 25, // TITLE Alternate (Mount) + MAX_POWERS = 26, // SKIP POWER_ALL = 127 // SKIP }; -#define MAX_POWERS_PER_CLASS 7 +#define MAX_POWERS_PER_CLASS 10 // EnumUtils: DESCRIBE THIS enum SpellSchools : uint16 @@ -1435,11 +1441,19 @@ enum SpellEffectName SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG = 304, SPELL_EFFECT_305 = 305, SPELL_EFFECT_306 = 306, + SPELL_EFFECT_307 = 307, + SPELL_EFFECT_CANCEL_PRELOAD_WORLD = 308, + SPELL_EFFECT_PRELOAD_WORLD = 309, + SPELL_EFFECT_310 = 310, + SPELL_EFFECT_ENSURE_WORLD_LOADED = 311, + SPELL_EFFECT_312 = 312, + SPELL_EFFECT_CHANGE_ITEM_BONUSES_2 = 313, // MiscValue[0] = ItemBonusTreeID to preserve + SPELL_EFFECT_ADD_SOCKET_BONUS = 314, // MiscValue[0] = required ItemBonusTreeID TOTAL_SPELL_EFFECTS }; // EnumUtils: DESCRIBE THIS -enum SpellCastResult +enum SpellCastResult : int32 { SPELL_FAILED_SUCCESS = 0, SPELL_FAILED_AFFECTING_COMBAT = 1, @@ -2347,6 +2361,7 @@ enum SpellCustomErrors SPELL_CUSTOM_ERROR_YOU_CAN_ONLY_DO_THIS_WHILE_MIDAIR = 638, // You can only do this while midair. SPELL_CUSTOM_ERROR_YOU_CANNOT_DO_THAT_WHILE_AIRBORNE = 639, // You cannot do that while airborne. SPELL_CUSTOM_ERROR_POCOPOC_IS_UNAVAILABLE_ON_QUESTLINE = 640, // Pocopoc is unavailable to summon during the questline A Means to an End. + SPELL_CUSTOM_ERROR_CANNOT_CAST_THAT_WITH_AURA_OF_RECKONING_TALENT = 650, // You cannot cast that while Aura of Reckoning is talented. SPELL_CUSTOM_ERROR_REQUIRES_SULFURON_SLAMMER = 711, // Requires Sulfuron Slammer SPELL_CUSTOM_ERROR_NOT_READY_YET = 788, // Not ready yet. SPELL_CUSTOM_ERROR_QUALITY_OF_TIERED_MEDALLION_SETTING_IS_TOO_LOW = 789, // The quality of your Tiered Medallion Setting is too low to add another socket to this item. @@ -2381,8 +2396,25 @@ enum SpellCustomErrors SPELL_CUSTOM_ERROR_YOU_ARE_ALREADY_BRAVE_ENOUGH_TO_CONTINUE_WITH_YOUR_EXPERIMENTATION = 818, // You are already brave enough to continue with your experimentation. SPELL_CUSTOM_ERROR_YOU_DONT_KNOW_HOW_TO_REPAIR_THIS_ITEM = 819, // You don't know how to repair this item. SPELL_CUSTOM_ERROR_THERE_IS_NO_MORE_ROOM_ON_THAT_HANDHOLD = 820, // There is no more room on that handhold. - SPELL_CUSTOM_ERROR_YOU_MUST_UNBLOCK_THIS_SPOT_BY_COMPLETING_A_DAILY_QUest = 821, // You must unblock this spot by completing a daily quest. + SPELL_CUSTOM_ERROR_YOU_MUST_UNBLOCK_THIS_SPOT_BY_COMPLETING_A_DAILY_QUEST = 821, // You must unblock this spot by completing a daily quest. SPELL_CUSTOM_ERROR_YOU_MUST_BE_CLOSER_TO_AN_ICE_HOLE_TO_DO_THAT = 822, // You must be closer to an ice hole to do that. + SPELL_CUSTOM_ERROR_SHADOWFLAME_IS_TOO_STRONG_TO_BEAR = 823, // The shadowflame is too strong to bear. + SPELL_CUSTOM_ERROR_SOMEONE_HAS_ALREADY_OVERLOADED_THIS = 824, // Someone has already overloaded this. + SPELL_CUSTOM_ERROR_REQUIRES_NOKHUD_TRAINING_COURSE = 825, // Requires Nokhud Training Course. + SPELL_CUSTOM_ERROR_THIS_RECIPE_IS_CURRENTLY_DISABLED = 826, // This recipe is currently disabled. Please try again later. + SPELL_CUSTOM_ERROR_YOU_DO_NOT_HAVE_THE_CORRECT_BATTLE_PET_SUMMONED = 827, // You do not have the correct battle pet summoned. + SPELL_CUSTOM_ERROR_YOU_ALREADY_HAVE_AT_LEAST_ONE_CONJURED_PHIAL = 828, // You already have at least one conjured phial. + SPELL_CUSTOM_ERROR_MARKED_TOO_MANY_TREASURES_IN_THE_FORBIDDEN_REACH = 830, // You have already marked too many treasures in the Forbidden Reach. Collect a few before unsealing more Forbidden Reach treasure scrolls. + SPELL_CUSTOM_ERROR_REQUIRES_A_DJARADIN_PILLAR_SHARD = 831, // Requires a Djaradin Pillar Shard. + SPELL_CUSTOM_ERROR_REQUIRES_A_RESILIENT_STONE = 832, // Requires a Resilient Stone. + SPELL_CUSTOM_ERROR_MYRRIT_CANNOT_CARRY_ANY_MORE_MAPS = 835, // Myrrit cannot carry any more maps. Go on a dig with him! + SPELL_CUSTOM_ERROR_REQUIRES_NIFFEN_CAVE_DIVE_KEYAND_SHIELD_DISABLED = 850, // Requires Niffen Cave Dive Key and shield disabled. + SPELL_CUSTOM_ERROR_ELUSIVE_CREATURE_BAIT_WAS_RECENTLY_USED = 851, // You cannot lure anything in this area for a few minutes. Elusive Creature Bait was recently used. + SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_THE_SWIRLING_MOJO_STONE = 999, // You don't have the Swirling Mojo Stone equipped. + SPELL_CUSTOM_ERROR_YOU_MUST_BE_NEAR_A_DRAGONFLIGHT_OATHSTONE = 1000, // You must be near one of the five dragonflight oathstones in the Dragon Isles. + SPELL_CUSTOM_ERROR_CAN_ONLY_USE_THIS_ITEM_WHILE_AIRBORNE = 1001, // You can only use this item while airborne. + SPELL_CUSTOM_ERROR_YOU_MUST_BE_IN_VISAGE_FORM = 2222, // You must be in visage form to do this. + SPELL_CUSTOM_ERROR_TOO_CLOSE_TO_ANOTHER_MOLTEN_RITUAL = 2424, // You can't begin a molten ritual this close to another one. }; enum StealthType @@ -5902,7 +5934,8 @@ enum ChatFlags CHAT_FLAG_BOSS_SOUND = 0x0020, // Plays "RaidBossEmoteWarning" sound on raid boss emote/whisper CHAT_FLAG_MOBILE = 0x0040, CHAT_FLAG_GUIDE = 0x1000, - CHAT_FLAG_NEWCOMER = 0x2000 + CHAT_FLAG_NEWCOMER = 0x2000, + CHAT_FLAG_CENSORED = 0x4000 }; enum ChatLinkColors : uint32 @@ -7997,6 +8030,12 @@ enum class GameError : uint32 ERR_CROSS_FACTION_GROUP_JOINED = 1114, ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1115, ERR_EQUIPABLESPELLS_SLOTS_FULL = 1116, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1117, + ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1118, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1119, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1120, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1121, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1122, }; enum class MountResult : uint32 diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 2eb08ff9862..542bce38d3a 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -369,13 +369,17 @@ uint32 Quest::XPValue(Player const* player, uint32 contentTuningId, uint32 xpDif if (!questXp || xpDifficulty >= 10) return 0; + uint32 xp = questXp->Difficulty[xpDifficulty]; + if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(contentTuningId)) + xp = xp * contentTuning->QuestXpMultiplier; + int32 diffFactor = 2 * (questLevel - player->GetLevel()) + 12; if (diffFactor < 1) diffFactor = 1; else if (diffFactor > 10) diffFactor = 10; - uint32 xp = diffFactor * questXp->Difficulty[xpDifficulty] * xpMultiplier / 10; + xp = diffFactor * xp * xpMultiplier / 10; if (player->GetLevel() >= GetMaxLevelForExpansion(CURRENT_EXPANSION - 1) && player->GetSession()->GetExpansion() == CURRENT_EXPANSION && expansion >= 0 && expansion < CURRENT_EXPANSION) xp = uint32(xp / 9.0f); diff --git a/src/server/game/Server/Packets/BattlePetPackets.h b/src/server/game/Server/Packets/BattlePetPackets.h index afcfe50f013..164c7b51aa6 100644 --- a/src/server/game/Server/Packets/BattlePetPackets.h +++ b/src/server/game/Server/Packets/BattlePetPackets.h @@ -200,7 +200,7 @@ namespace WorldPackets void Read() override; ObjectGuid PetGuid; - uint32 Flags = 0; + uint16 Flags = 0; uint8 ControlType = 0; }; diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 921dd72cde0..08ee119117f 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -116,6 +116,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPMatchSta if (playerData.MmrChange) data << int32(*playerData.MmrChange); + if (playerData.PostMatchMMR) + data << uint32(*playerData.PostMatchMMR); + return data; } diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 06d5339f81b..28d337c7698 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -135,6 +135,7 @@ namespace WorldPackets Optional<int32> RatingChange; Optional<uint32> PreMatchMMR; Optional<int32> MmrChange; + Optional<uint32> PostMatchMMR; std::vector<PVPMatchPlayerPVPStat> Stats; int32 PrimaryTalentTree = 0; int32 Sex = 0; diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 210b22f9d18..3d84f568498 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, 72>& customizations) +void SortCustomizations(Array<ChrCustomizationChoice, 125>& customizations) { auto first = customizations.begin(); auto last = customizations.end(); diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index d82c45e87e3..2f04c0add51 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, 72> Customizations; + Array<ChrCustomizationChoice, 125> 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, 72> Customizations; + Array<ChrCustomizationChoice, 125> Customizations; }; struct CharRaceOrFactionChangeInfo @@ -92,7 +92,7 @@ namespace WorldPackets ObjectGuid Guid; bool FactionChange = false; std::string Name; - Array<ChrCustomizationChoice, 72> Customizations; + Array<ChrCustomizationChoice, 125> Customizations; }; struct CharacterUndeleteInfo @@ -366,7 +366,7 @@ namespace WorldPackets std::string Name; uint8 SexID = 0; uint8 RaceID = RACE_NONE; - Array<ChrCustomizationChoice, 72> const* Customizations = nullptr; + Array<ChrCustomizationChoice, 125> const* Customizations = nullptr; }; class CharFactionChangeResult final : public ServerPacket @@ -637,7 +637,7 @@ namespace WorldPackets void Read() override; uint8 NewSex = 0; - Array<ChrCustomizationChoice, 72> Customizations; + Array<ChrCustomizationChoice, 125> Customizations; int32 CustomizedRace = 0; }; @@ -744,7 +744,7 @@ namespace WorldPackets ObjectGuid CharGUID; std::string CharName; uint8 SexID = 0; - Array<ChrCustomizationChoice, 72> const& Customizations; + Array<ChrCustomizationChoice, 125> const& Customizations; }; class CharCustomizeFailure final : public ServerPacket diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index fccac7ce49a..48f1691564f 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -26,6 +26,18 @@ void WorldPackets::Chat::ChatMessage::Read() { _worldPacket >> Language; uint32 len = _worldPacket.ReadBits(11); + switch (GetOpcode()) + { + case CMSG_CHAT_MESSAGE_SAY: + case CMSG_CHAT_MESSAGE_PARTY: + case CMSG_CHAT_MESSAGE_RAID: + case CMSG_CHAT_MESSAGE_RAID_WARNING: + case CMSG_CHAT_MESSAGE_INSTANCE_CHAT: + IsSecure = _worldPacket.ReadBit(); + break; + default: + break; + } Text = _worldPacket.ReadString(len); } @@ -44,6 +56,9 @@ void WorldPackets::Chat::ChatMessageChannel::Read() _worldPacket >> ChannelGUID; uint32 targetLen = _worldPacket.ReadBits(9); uint32 textLen = _worldPacket.ReadBits(11); + if (_worldPacket.ReadBit()) + IsSecure = _worldPacket.ReadBit(); + Target = _worldPacket.ReadString(targetLen); Text = _worldPacket.ReadString(textLen); } @@ -95,7 +110,7 @@ void WorldPackets::Chat::ChatMessageEmote::Read() WorldPackets::Chat::Chat::Chat(Chat const& chat) : ServerPacket(SMSG_CHAT, chat._worldPacket.size()), SlashCmd(chat.SlashCmd), _Language(chat._Language), SenderGUID(chat.SenderGUID), - SenderGuildGUID(chat.SenderGuildGUID), SenderAccountGUID(chat.SenderAccountGUID), TargetGUID(chat.TargetGUID), PartyGUID(chat.PartyGUID), + SenderGuildGUID(chat.SenderGuildGUID), SenderAccountGUID(chat.SenderAccountGUID), TargetGUID(chat.TargetGUID), SenderVirtualAddress(chat.SenderVirtualAddress), TargetVirtualAddress(chat.TargetVirtualAddress), SenderName(chat.SenderName), TargetName(chat.TargetName), Prefix(chat.Prefix), _Channel(chat._Channel), ChatText(chat.ChatText), AchievementID(chat.AchievementID), _ChatFlags(chat._ChatFlags), DisplayTime(chat.DisplayTime), HideChatLog(chat.HideChatLog), FakeSenderName(chat.FakeSenderName) @@ -111,7 +126,6 @@ void WorldPackets::Chat::Chat::Initialize(ChatMsg chatType, Language language, W SenderGUID.Clear(); SenderAccountGUID.Clear(); SenderGuildGUID.Clear(); - PartyGUID.Clear(); TargetGUID.Clear(); SenderName.clear(); TargetName.clear(); @@ -147,9 +161,6 @@ void WorldPackets::Chat::Chat::SetSender(WorldObject const* sender, LocaleConsta _ChatFlags = playerSender->GetChatFlags(); SenderGuildGUID = ObjectGuid::Create<HighGuid::Guild>(playerSender->GetGuildId()); - - if (Group const* group = playerSender->GetGroup()) - PartyGUID = group->GetGUID(); } } @@ -170,9 +181,9 @@ WorldPacket const* WorldPackets::Chat::Chat::Write() _worldPacket << TargetGUID; _worldPacket << uint32(TargetVirtualAddress); _worldPacket << uint32(SenderVirtualAddress); - _worldPacket << PartyGUID; - _worldPacket << uint32(AchievementID); + _worldPacket << int32(AchievementID); _worldPacket << float(DisplayTime); + _worldPacket << int32(SpellID); _worldPacket.WriteBits(SenderName.length(), 11); _worldPacket.WriteBits(TargetName.length(), 11); _worldPacket.WriteBits(Prefix.length(), 5); diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index c4a79438d56..8f03d8aa4b5 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -49,6 +49,7 @@ namespace WorldPackets std::string Text; int32 Language = LANG_UNIVERSAL; + bool IsSecure = true; }; // CMSG_CHAT_MESSAGE_WHISPER @@ -76,6 +77,7 @@ namespace WorldPackets ObjectGuid ChannelGUID; std::string Text; std::string Target; + Optional<bool> IsSecure; }; struct ChatAddonMessageParams @@ -163,7 +165,6 @@ namespace WorldPackets ObjectGuid SenderGuildGUID; ObjectGuid SenderAccountGUID; ObjectGuid TargetGUID; - ObjectGuid PartyGUID; uint32 SenderVirtualAddress = 0; uint32 TargetVirtualAddress = 0; std::string SenderName; @@ -172,8 +173,9 @@ namespace WorldPackets std::string _Channel; ///< Channel Name std::string ChatText; uint32 AchievementID = 0; - uint8 _ChatFlags = 0; ///< @see enum ChatFlags + uint16 _ChatFlags = 0; ///< @see enum ChatFlags float DisplayTime = 0.0f; + int32 SpellID = 0; Optional<uint32> Unused_801; bool HideChatLog = false; bool FakeSenderName = false; diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index 938c77b40b3..7b2f1c71134 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -361,7 +361,7 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write() attackRoundInfo << int8(ContentTuning.TargetScalingLevelDelta); attackRoundInfo << float(ContentTuning.PlayerItemLevel); attackRoundInfo << float(ContentTuning.TargetItemLevel); - attackRoundInfo << uint16(ContentTuning.ScalingHealthItemLevelCurveID); + attackRoundInfo << uint32(ContentTuning.ScalingHealthItemLevelCurveID); attackRoundInfo << uint32(ContentTuning.Flags); attackRoundInfo << int32(ContentTuning.PlayerContentTuningID); attackRoundInfo << int32(ContentTuning.TargetContentTuningID); diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp index f0ee217503d..acaeacb9b9f 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp @@ -171,7 +171,7 @@ ByteBuffer& operator<<(ByteBuffer& data, ContentTuningParams const& contentTunin data << float(contentTuningParams.PlayerItemLevel); data << float(contentTuningParams.TargetItemLevel); data << int16(contentTuningParams.PlayerLevelDelta); - data << uint16(contentTuningParams.ScalingHealthItemLevelCurveID); + data << uint32(contentTuningParams.ScalingHealthItemLevelCurveID); data << uint8(contentTuningParams.TargetLevel); data << uint8(contentTuningParams.Expansion); data << int8(contentTuningParams.TargetScalingLevelDelta); diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h index 325338223c2..a5cd2eaa4ef 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h @@ -69,7 +69,7 @@ namespace WorldPackets int16 PlayerLevelDelta = 0; float PlayerItemLevel = 0; float TargetItemLevel = 0; - uint16 ScalingHealthItemLevelCurveID = 0; + uint32 ScalingHealthItemLevelCurveID = 0; uint8 TargetLevel = 0; uint8 Expansion = 0; int8 TargetScalingLevelDelta = 0; diff --git a/src/server/game/Server/Packets/LootPackets.cpp b/src/server/game/Server/Packets/LootPackets.cpp index 883fa6d4cea..140e8ce6d85 100644 --- a/src/server/game/Server/Packets/LootPackets.cpp +++ b/src/server/game/Server/Packets/LootPackets.cpp @@ -177,6 +177,7 @@ WorldPacket const* WorldPackets::Loot::StartLootRoll::Write() _worldPacket << uint8(ValidRolls); _worldPacket.append(LootRollIneligibleReason.data(), LootRollIneligibleReason.size()); _worldPacket << uint8(Method); + _worldPacket << int32(DungeonEncounterID); _worldPacket << Item; return &_worldPacket; @@ -188,8 +189,10 @@ WorldPacket const* WorldPackets::Loot::LootRollBroadcast::Write() _worldPacket << Player; _worldPacket << int32(Roll); _worldPacket << uint8(RollType); + _worldPacket << int32(DungeonEncounterID); _worldPacket << Item; _worldPacket.WriteBit(Autopassed); + _worldPacket.WriteBit(OffSpec); _worldPacket.FlushBits(); return &_worldPacket; @@ -201,6 +204,7 @@ WorldPacket const* WorldPackets::Loot::LootRollWon::Write() _worldPacket << Winner; _worldPacket << int32(Roll); _worldPacket << uint8(RollType); + _worldPacket << int32(DungeonEncounterID); _worldPacket << Item; _worldPacket.WriteBit(MainSpec); _worldPacket.FlushBits(); @@ -211,6 +215,7 @@ WorldPacket const* WorldPackets::Loot::LootRollWon::Write() WorldPacket const* WorldPackets::Loot::LootAllPassed::Write() { _worldPacket << LootObj; + _worldPacket << int32(DungeonEncounterID); _worldPacket << Item; return &_worldPacket; @@ -220,6 +225,7 @@ WorldPacket const* WorldPackets::Loot::LootRollsComplete::Write() { _worldPacket << LootObj; _worldPacket << uint8(LootListID); + _worldPacket << int32(DungeonEncounterID); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h index 6f6f6456f2c..b553c8275cc 100644 --- a/src/server/game/Server/Packets/LootPackets.h +++ b/src/server/game/Server/Packets/LootPackets.h @@ -228,6 +228,7 @@ namespace WorldPackets uint8 ValidRolls = 0; std::array<LootRollIneligibilityReason, 4> LootRollIneligibleReason = { }; LootItemData Item; + int32 DungeonEncounterID = 0; }; class LootRollBroadcast final : public ServerPacket @@ -243,6 +244,8 @@ namespace WorldPackets uint8 RollType = 0; LootItemData Item; bool Autopassed = false; ///< Triggers message |HlootHistory:%d|h[Loot]|h: You automatically passed on: %s because you cannot loot that item. + bool OffSpec = false; + int32 DungeonEncounterID = 0; }; class LootRollWon final : public ServerPacket @@ -258,6 +261,7 @@ namespace WorldPackets uint8 RollType = 0; LootItemData Item; bool MainSpec = false; + int32 DungeonEncounterID = 0; }; class LootAllPassed final : public ServerPacket @@ -269,6 +273,7 @@ namespace WorldPackets ObjectGuid LootObj; LootItemData Item; + int32 DungeonEncounterID = 0; }; class LootRollsComplete final : public ServerPacket @@ -280,6 +285,7 @@ namespace WorldPackets ObjectGuid LootObj; uint8 LootListID = 0; + int32 DungeonEncounterID = 0; }; class MasterLootCandidateList final : public ServerPacket diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 9f39f3334ca..9b2eedb8f90 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -64,7 +64,7 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write() _worldPacket.WriteBit(QuantityGainSource.has_value()); _worldPacket.WriteBit(QuantityLostSource.has_value()); _worldPacket.WriteBit(FirstCraftOperationID.has_value()); - _worldPacket.WriteBit(LastSpendTime.has_value()); + _worldPacket.WriteBit(NextRechargeTime.has_value()); _worldPacket.FlushBits(); if (WeeklyQuantity) @@ -91,8 +91,11 @@ WorldPacket const* WorldPackets::Misc::SetCurrency::Write() if (FirstCraftOperationID) _worldPacket << uint32(*FirstCraftOperationID); - if (LastSpendTime) - _worldPacket << *LastSpendTime; + if (NextRechargeTime) + _worldPacket << *NextRechargeTime; + + if (RechargeCycleStartTime) + _worldPacket << *RechargeCycleStartTime; return &_worldPacket; } @@ -116,7 +119,8 @@ WorldPacket const* WorldPackets::Misc::SetupCurrency::Write() _worldPacket.WriteBit(data.TrackedQuantity.has_value()); _worldPacket.WriteBit(data.MaxQuantity.has_value()); _worldPacket.WriteBit(data.TotalEarned.has_value()); - _worldPacket.WriteBit(data.LastSpendTime.has_value()); + _worldPacket.WriteBit(data.NextRechargeTime.has_value()); + _worldPacket.WriteBit(data.RechargeCycleStartTime.has_value()); _worldPacket.WriteBits(uint8(data.Flags), 5); _worldPacket.FlushBits(); @@ -130,8 +134,10 @@ WorldPacket const* WorldPackets::Misc::SetupCurrency::Write() _worldPacket << int32(*data.MaxQuantity); if (data.TotalEarned) _worldPacket << int32(*data.TotalEarned); - if (data.LastSpendTime) - _worldPacket << *data.LastSpendTime; + if (data.NextRechargeTime) + _worldPacket << *data.NextRechargeTime; + if (data.RechargeCycleStartTime) + _worldPacket << *data.RechargeCycleStartTime; } return &_worldPacket; @@ -716,10 +722,10 @@ WorldPacket const* WorldPackets::Misc::AccountMountUpdate::Write() _worldPacket.WriteBit(IsFullUpdate); _worldPacket << uint32(Mounts->size()); - for (auto const& spell : *Mounts) + for (auto [spellId, flags] : *Mounts) { - _worldPacket << int32(spell.first); - _worldPacket.WriteBits(spell.second, 2); + _worldPacket << int32(spellId); + _worldPacket.WriteBits(flags, 4); } _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 5f29600d31d..d39bcb26e0a 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -113,7 +113,8 @@ namespace WorldPackets Optional<CurrencyGainSource> QuantityGainSource; Optional<CurrencyDestroyReason> QuantityLostSource; Optional<uint32> FirstCraftOperationID; - Optional<Timestamp<>> LastSpendTime; + Optional<Timestamp<>> NextRechargeTime; + Optional<Timestamp<>> RechargeCycleStartTime; bool SuppressChatLog = false; }; @@ -139,7 +140,8 @@ namespace WorldPackets Optional<int32> TrackedQuantity; Optional<int32> MaxQuantity; Optional<int32> TotalEarned; - Optional<Timestamp<>> LastSpendTime; + Optional<Timestamp<>> NextRechargeTime; + Optional<Timestamp<>> RechargeCycleStartTime; uint8 Flags = 0; }; diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 391be953ee7..02833e95525 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -30,6 +30,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) bool hasSpline = false; // todo 6.x send this infos bool hasInertia = movementInfo.inertia.has_value(); bool hasAdvFlying = movementInfo.advFlying.has_value(); + bool hasStandingOnGameObjectGUID = movementInfo.standingOnGameObjectGUID.has_value(); data << movementInfo.guid; data << uint32(movementInfo.flags); @@ -51,6 +52,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) data << ObjectGuid; }*/ + data.WriteBit(hasStandingOnGameObjectGUID); data.WriteBit(hasTransportData); data.WriteBit(hasFallData); data.WriteBit(hasSpline); @@ -65,6 +67,9 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) if (hasTransportData) data << movementInfo.transport; + if (hasStandingOnGameObjectGUID) + data << *movementInfo.standingOnGameObjectGUID; + if (hasInertia) { data << uint32(movementInfo.inertia->id); @@ -121,6 +126,7 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo) data >> guid; } + bool hasStandingOnGameObjectGUID = data.ReadBit(); bool hasTransport = data.ReadBit(); bool hasFall = data.ReadBit(); /*hasSpline = */data.ReadBit(); // todo 6.x read this infos @@ -133,6 +139,9 @@ ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo) if (hasTransport) data >> movementInfo.transport; + if (hasStandingOnGameObjectGUID) + data >> movementInfo.standingOnGameObjectGUID.emplace(); + if (hasInertia) { movementInfo.inertia.emplace(); diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index 72c5b922bc0..ed8239331c8 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -44,21 +44,6 @@ void PetCancelAura::Read() _worldPacket >> SpellID; } -WorldPacket const* CategoryCooldown::Write() -{ - _worldPacket.reserve(4 + 8 * CategoryCooldowns.size()); - - _worldPacket << uint32(CategoryCooldowns.size()); - - for (CategoryCooldownInfo const& cooldown : CategoryCooldowns) - { - _worldPacket << uint32(cooldown.Category); - _worldPacket << int32(cooldown.ModCooldown); - } - - return &_worldPacket; -} - WorldPacket const* SendKnownSpells::Write() { _worldPacket.reserve(1 + 4 * KnownSpells.size() + 4 * FavoriteSpells.size()); @@ -165,13 +150,12 @@ WorldPacket const* AuraUpdate::Write() return &_worldPacket; } -ByteBuffer& operator>>(ByteBuffer& buffer, Optional<TargetLocation>& location) +ByteBuffer& operator>>(ByteBuffer& buffer, TargetLocation& location) { - location.emplace(); - buffer >> location->Transport; - buffer >> location->Location.m_positionX; - buffer >> location->Location.m_positionY; - buffer >> location->Location.m_positionZ; + buffer >> location.Transport; + buffer >> location.Location.m_positionX; + buffer >> location.Location.m_positionY; + buffer >> location.Location.m_positionZ; return buffer; } @@ -190,10 +174,10 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellTargetData& targetData) buffer >> targetData.Item; if (hasSrcLocation) - buffer >> targetData.SrcLocation; + buffer >> targetData.SrcLocation.emplace(); if (hasDstLocation) - buffer >> targetData.DstLocation; + buffer >> targetData.DstLocation.emplace(); if (hasOrientation) targetData.Orientation = buffer.read<float>(); @@ -242,6 +226,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request) buffer >> request.CraftingNPC; request.OptionalCurrencies.resize(buffer.read<uint32>()); request.OptionalReagents.resize(buffer.read<uint32>()); + request.RemovedModifications.resize(buffer.read<uint32>()); for (SpellExtraCurrencyCost& optionalCurrency : request.OptionalCurrencies) buffer >> optionalCurrency; @@ -258,11 +243,11 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request) for (SpellCraftingReagent& optionalReagent : request.OptionalReagents) buffer >> optionalReagent; + for (SpellCraftingReagent& optionalReagent : request.RemovedModifications) + buffer >> optionalReagent; + if (hasMoveUpdate) - { - request.MoveUpdate.emplace(); - buffer >> *request.MoveUpdate; - } + buffer >> request.MoveUpdate.emplace(); for (SpellWeight& weight : request.Weight) { @@ -997,10 +982,7 @@ void UpdateMissileTrajectory::Read() _worldPacket.ResetBitPos(); if (hasStatus) - { - Status.emplace(); - _worldPacket >> *Status; - } + _worldPacket >> Status.emplace(); } WorldPacket const* SpellDelayed::Write() diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index 3f57ea4f205..6872687f1d1 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -103,33 +103,6 @@ namespace WorldPackets uint32 SpellID = 0; }; - class RequestCategoryCooldowns final : public ClientPacket - { - public: - RequestCategoryCooldowns(WorldPacket&& packet) : ClientPacket(CMSG_REQUEST_CATEGORY_COOLDOWNS, std::move(packet)) { } - - void Read() override { } - }; - - class CategoryCooldown final : public ServerPacket - { - public: - struct CategoryCooldownInfo - { - CategoryCooldownInfo(uint32 category, int32 cooldown) - : Category(category), ModCooldown(cooldown) { } - - uint32 Category = 0; ///< SpellCategory Id - int32 ModCooldown = 0; ///< Reduced Cooldown in ms - }; - - CategoryCooldown() : ServerPacket(SMSG_CATEGORY_COOLDOWN, 4) { } - - WorldPacket const* Write() override; - - std::vector<CategoryCooldownInfo> CategoryCooldowns; - }; - class SendKnownSpells final : public ServerPacket { public: @@ -274,7 +247,8 @@ namespace WorldPackets MissileTrajectoryRequest MissileTrajectory; Optional<MovementInfo> MoveUpdate; std::vector<SpellWeight> Weight; - Array<SpellCraftingReagent, 3> OptionalReagents; + Array<SpellCraftingReagent, 6> OptionalReagents; + Array<SpellCraftingReagent, 6> RemovedModifications; Array<SpellExtraCurrencyCost, 5 /*MAX_ITEM_EXT_COST_CURRENCIES*/> OptionalCurrencies; Optional<uint64> CraftingOrderID; ObjectGuid CraftingNPC; diff --git a/src/server/game/Server/Packets/TaxiPackets.cpp b/src/server/game/Server/Packets/TaxiPackets.cpp index c0075bc111c..3fe652aa590 100644 --- a/src/server/game/Server/Packets/TaxiPackets.cpp +++ b/src/server/game/Server/Packets/TaxiPackets.cpp @@ -36,8 +36,8 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write() _worldPacket.WriteBit(WindowInfo.has_value()); _worldPacket.FlushBits(); - _worldPacket << uint32(CanLandNodes.size()); - _worldPacket << uint32(CanUseNodes.size()); + _worldPacket << uint32(CanLandNodes.size() / 8); // client reads this in uint64 blocks, size is ensured to be divisible by 8 in TaxiMask constructor + _worldPacket << uint32(CanUseNodes.size() / 8); // client reads this in uint64 blocks, size is ensured to be divisible by 8 in TaxiMask constructor if (WindowInfo.has_value()) { diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 9d76171bc53..401ee974de2 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -342,7 +342,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CLEAR_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleClearTradeItemOpcode); DEFINE_HANDLER(CMSG_CLIENT_PORT_GRAVEYARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePortGraveyard); DEFINE_HANDLER(CMSG_CLOSE_INTERACTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCloseInteraction); - DEFINE_HANDLER(CMSG_CLOSE_QUEST_CHOICE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLOSE_RUNEFORGE_INTERACTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CLUB_FINDER_APPLICATION_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -797,7 +796,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_REQUEST_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestAccountData); DEFINE_HANDLER(CMSG_REQUEST_AREA_POI_UPDATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestBattlefieldStatusOpcode); - DEFINE_HANDLER(CMSG_REQUEST_CATEGORY_COOLDOWNS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCategoryCooldowns); DEFINE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCemeteryList); DEFINE_HANDLER(CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -917,7 +915,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSupportTicketSubmitComplaint); DEFINE_HANDLER(CMSG_SURRENDER_ARENA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SUSPEND_COMMS_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_SUSPEND_TOKEN_RESPONSE, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleSuspendTokenResponse); + DEFINE_HANDLER(CMSG_SUSPEND_TOKEN_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSuspendTokenResponse); DEFINE_HANDLER(CMSG_SWAP_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSwapGuildBankItemWithGuildBankItem); DEFINE_HANDLER(CMSG_SWAP_INV_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSwapInvItemOpcode); DEFINE_HANDLER(CMSG_SWAP_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSwapItem); @@ -981,10 +979,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_WORLD_PORT_RESPONSE, STATUS_TRANSFER, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveWorldportAckOpcode); DEFINE_HANDLER(CMSG_WRAP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleWrapItem); - //DEFINE_HANDLER(CMSG_BF_MGR_ENTRY_INVITE_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBfEntryInviteResponse); - //DEFINE_HANDLER(CMSG_BF_MGR_QUEUE_EXIT_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBfQueueExitRequest); - //DEFINE_HANDLER(CMSG_BF_MGR_QUEUE_INVITE_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBfQueueInviteResponse); - #undef DEFINE_HANDLER #define DEFINE_SERVER_OPCODE_HANDLER(opcode, status, con) \ @@ -995,6 +989,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_COSMETIC_ADDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_DATA_TIMES, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_EXPORT_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HEIRLOOM_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_MOUNT_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_MOUNT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1008,6 +1003,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACTIVATE_SOULBIND_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACTIVATE_TAXI_REPLY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACTIVE_GLYPHS, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADDON_LIST_REQUEST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_BATTLENET_FRIEND_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_ITEM_PASSIVE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1034,6 +1030,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_SHAPE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_UNATTACH, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_CLEAR_OPPONENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1069,6 +1066,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AVAILABLE_HOTFIXES, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BACKPACK_DEFAULT_SIZE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BAG_CLEANUP_FINISHED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BARBER_SHOP_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATCH_PRESENCE_SUBSCRIPTION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1117,7 +1115,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_JOURNAL, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_LICENSE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_RESTORED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_REVOKED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PET_TRAP_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1169,7 +1166,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAPTURE_POINT_REMOVED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CATEGORY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAIN_MISSILE_BOUNCE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1592,6 +1588,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_CUF_PROFILES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOAD_EQUIPMENT_SET, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOBBY_MATCHMAKER_PARTY_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_SET_TIME_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGIN_VERIFY_WORLD, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_CANCEL_ACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1810,6 +1808,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PET_UNLEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PHASE_SHIFT_CHANGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYED_TIME, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_AZERITE_ITEM_GAINS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_BONUS_ROLL_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1817,10 +1816,13 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_CHOICE_CLEAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_CHOICE_DISPLAY_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_CONDITION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_HIDE_ARROW_CALLOUT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SAVE_GUILD_EMBLEM, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SHOW_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); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SHOW_UI_EVENT_TOAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_SKINNED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1899,6 +1901,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEUE_SUMMARY_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAF_ACCOUNT_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAF_ACTIVITY_STATE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAF_DEBUG_FRIEND_MONTHS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_DIFFICULTY_SET, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_GROUP_ONLY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_INSTANCE_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2095,7 +2098,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_TRIGGER_MOVIE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TURN_IN_PETITION_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_TUTORIAL_FLAGS, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_HEALING_RANGE_MODIFIED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UI_MAP_QUEST_LINES_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_CHARACTER_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2121,7 +2123,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_RECENT_PLAYER_GUIDS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TALENT_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TASK_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WORLD_STATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_ADD, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_USERLIST_REMOVE, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -2153,7 +2154,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_REWARDS_PROGRESS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_REWARDS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_REWARD_CLAIM_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHO, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WHO_IS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index a46c9bea1c5..4d8e39feb13 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -44,35 +44,35 @@ enum OpcodeMisc : uint16 enum OpcodeClient : uint16 { - CMSG_ABANDON_NPE_RESPONSE = 0x33EA, - CMSG_ACCEPT_GUILD_INVITE = 0x35FC, - CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x3395, - CMSG_ACCEPT_SOCIAL_CONTRACT = 0x373D, + CMSG_ABANDON_NPE_RESPONSE = 0x33EB, + CMSG_ACCEPT_GUILD_INVITE = 0x35FD, + CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x3396, + CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3744, CMSG_ACCEPT_TRADE = 0x315A, CMSG_ACCEPT_WARGAME_INVITE = 0x35E0, - CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3732, - CMSG_ACTIVATE_SOULBIND = 0x33D9, + CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3733, + CMSG_ACTIVATE_SOULBIND = 0x33DA, CMSG_ACTIVATE_TAXI = 0x34B1, CMSG_ADDON_LIST = 0x35D8, - CMSG_ADD_ACCOUNT_COSMETIC = 0x32B1, - CMSG_ADD_BATTLENET_FRIEND = 0x3658, - CMSG_ADD_FRIEND = 0x36CC, - CMSG_ADD_IGNORE = 0x36D0, - CMSG_ADD_TOY = 0x32B0, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3204, - CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33DC, + CMSG_ADD_ACCOUNT_COSMETIC = 0x32B0, + CMSG_ADD_BATTLENET_FRIEND = 0x3659, + CMSG_ADD_FRIEND = 0x36CD, + CMSG_ADD_IGNORE = 0x36D1, + CMSG_ADD_TOY = 0x32AF, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3203, + CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33DD, CMSG_ADVENTURE_MAP_START_QUEST = 0x3369, CMSG_ALTER_APPEARANCE = 0x3503, CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B6, CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B7, - CMSG_AREA_TRIGGER = 0x31D8, - CMSG_ARTIFACT_ADD_POWER = 0x31AB, - CMSG_ARTIFACT_SET_APPEARANCE = 0x31AD, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3210, - CMSG_ATTACK_STOP = 0x3263, - CMSG_ATTACK_SWING = 0x3262, - CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E2, - CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E3, + CMSG_AREA_TRIGGER = 0x31D7, + CMSG_ARTIFACT_ADD_POWER = 0x31AA, + CMSG_ARTIFACT_SET_APPEARANCE = 0x31AC, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x320F, + CMSG_ATTACK_STOP = 0x3262, + CMSG_ATTACK_SWING = 0x3261, + CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E3, + CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E4, CMSG_AUCTION_BROWSE_QUERY = 0x34D6, CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x34DE, CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x34DD, @@ -86,10 +86,10 @@ enum OpcodeClient : uint16 CMSG_AUCTION_PLACE_BID = 0x34D5, CMSG_AUCTION_REMOVE_ITEM = 0x34D3, CMSG_AUCTION_REPLICATE_ITEMS = 0x34D4, - CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3734, + CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3735, CMSG_AUCTION_SELL_COMMODITY = 0x34DF, CMSG_AUCTION_SELL_ITEM = 0x34D2, - CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3733, + CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3734, CMSG_AUTH_CONTINUED_SESSION = 0x3766, CMSG_AUTH_SESSION = 0x3765, CMSG_AUTOBANK_ITEM = 0x3997, @@ -101,102 +101,102 @@ enum OpcodeClient : uint16 CMSG_AUTO_GUILD_BANK_ITEM = 0x34BD, CMSG_AUTO_STORE_BAG_ITEM = 0x399B, CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x34C6, - CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3391, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3392, CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3374, - CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3393, - CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3392, + CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3394, + CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3393, CMSG_BANKER_ACTIVATE = 0x34B9, CMSG_BATTLEFIELD_LEAVE = 0x3173, - CMSG_BATTLEFIELD_LIST = 0x317F, + CMSG_BATTLEFIELD_LIST = 0x317E, CMSG_BATTLEFIELD_PORT = 0x3538, - CMSG_BATTLEMASTER_HELLO = 0x32CD, + CMSG_BATTLEMASTER_HELLO = 0x32CC, CMSG_BATTLEMASTER_JOIN = 0x3530, CMSG_BATTLEMASTER_JOIN_ARENA = 0x3531, CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3536, CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3532, CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3533, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36CF, - CMSG_BATTLENET_REQUEST = 0x36F1, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36C9, - CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3710, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C8, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36BF, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3737, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B7, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36B8, - CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x3709, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3705, - CMSG_BATTLE_PAY_START_PURCHASE = 0x36C7, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36EE, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D0, + CMSG_BATTLENET_REQUEST = 0x36F2, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CA, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3711, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C9, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C0, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3738, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B8, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36B9, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370A, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3706, + CMSG_BATTLE_PAY_START_PURCHASE = 0x36C8, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36EF, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x3126, - CMSG_BATTLE_PET_DELETE_PET = 0x3623, - CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3624, - CMSG_BATTLE_PET_MODIFY_NAME = 0x3626, - CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3622, - CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3621, - CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362B, - CMSG_BATTLE_PET_SET_FLAGS = 0x362E, - CMSG_BATTLE_PET_SUMMON = 0x3627, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E2, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E1, + CMSG_BATTLE_PET_DELETE_PET = 0x3624, + CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3625, + CMSG_BATTLE_PET_MODIFY_NAME = 0x3627, + CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3623, + CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3622, + CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362C, + CMSG_BATTLE_PET_SET_FLAGS = 0x362F, + CMSG_BATTLE_PET_SUMMON = 0x3628, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E1, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E0, CMSG_BEGIN_TRADE = 0x3157, CMSG_BINDER_ACTIVATE = 0x34B8, CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3540, CMSG_BLACK_MARKET_OPEN = 0x353E, CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x353F, - CMSG_BONUS_ROLL = 0x3394, - CMSG_BUG_REPORT = 0x3683, + CMSG_BONUS_ROLL = 0x3395, + CMSG_BUG_REPORT = 0x3684, CMSG_BUSY_TRADE = 0x3158, CMSG_BUY_BACK_ITEM = 0x34AA, CMSG_BUY_BANK_SLOT = 0x34BA, CMSG_BUY_ITEM = 0x34A9, CMSG_BUY_REAGENT_BANK = 0x34BB, - CMSG_CAGE_BATTLE_PET = 0x31F4, - CMSG_CALENDAR_ADD_EVENT = 0x367B, - CMSG_CALENDAR_COMMUNITY_INVITE = 0x366F, - CMSG_CALENDAR_COMPLAIN = 0x3677, - CMSG_CALENDAR_COPY_EVENT = 0x3676, - CMSG_CALENDAR_EVENT_SIGN_UP = 0x3679, - CMSG_CALENDAR_GET = 0x366D, - CMSG_CALENDAR_GET_EVENT = 0x366E, - CMSG_CALENDAR_GET_NUM_PENDING = 0x3678, - CMSG_CALENDAR_INVITE = 0x3670, - CMSG_CALENDAR_MODERATOR_STATUS = 0x3674, - CMSG_CALENDAR_REMOVE_EVENT = 0x3675, - CMSG_CALENDAR_REMOVE_INVITE = 0x3671, - CMSG_CALENDAR_RSVP = 0x3672, - CMSG_CALENDAR_STATUS = 0x3673, - CMSG_CALENDAR_UPDATE_EVENT = 0x367C, - CMSG_CANCEL_AURA = 0x31AF, + CMSG_CAGE_BATTLE_PET = 0x31F3, + CMSG_CALENDAR_ADD_EVENT = 0x367C, + CMSG_CALENDAR_COMMUNITY_INVITE = 0x3670, + CMSG_CALENDAR_COMPLAIN = 0x3678, + CMSG_CALENDAR_COPY_EVENT = 0x3677, + CMSG_CALENDAR_EVENT_SIGN_UP = 0x367A, + CMSG_CALENDAR_GET = 0x366E, + CMSG_CALENDAR_GET_EVENT = 0x366F, + CMSG_CALENDAR_GET_NUM_PENDING = 0x3679, + CMSG_CALENDAR_INVITE = 0x3671, + CMSG_CALENDAR_MODERATOR_STATUS = 0x3675, + CMSG_CALENDAR_REMOVE_EVENT = 0x3676, + CMSG_CALENDAR_REMOVE_INVITE = 0x3672, + CMSG_CALENDAR_RSVP = 0x3673, + CMSG_CALENDAR_STATUS = 0x3674, + CMSG_CALENDAR_UPDATE_EVENT = 0x367D, + CMSG_CANCEL_AURA = 0x31AE, CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F5, - CMSG_CANCEL_CAST = 0x32B7, - CMSG_CANCEL_CHANNELLING = 0x327B, - CMSG_CANCEL_GROWTH_AURA = 0x3283, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x321C, - CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AE, - CMSG_CANCEL_MOUNT_AURA = 0x3296, - CMSG_CANCEL_QUEUED_SPELL = 0x3180, + CMSG_CANCEL_CAST = 0x32B6, + CMSG_CANCEL_CHANNELLING = 0x327A, + CMSG_CANCEL_GROWTH_AURA = 0x3282, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x321B, + CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AD, + CMSG_CANCEL_MOUNT_AURA = 0x3295, + CMSG_CANCEL_QUEUED_SPELL = 0x317F, CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3500, CMSG_CANCEL_TRADE = 0x315C, - CMSG_CAN_DUEL = 0x3660, - CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3704, - CMSG_CAST_SPELL = 0x32B4, + CMSG_CAN_DUEL = 0x3661, + CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3705, + CMSG_CAST_SPELL = 0x32B3, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x308F, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x334E, - CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x334F, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x332F, - CMSG_CHANGE_REALM_TICKET = 0x36F6, - CMSG_CHANGE_SUB_GROUP = 0x364A, - CMSG_CHARACTER_CHECK_UPGRADE = 0x36C2, - CMSG_CHARACTER_RENAME_REQUEST = 0x36BD, - CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C0, - CMSG_CHARACTER_UPGRADE_START = 0x36C1, - CMSG_CHAR_CUSTOMIZE = 0x368A, - CMSG_CHAR_DELETE = 0x369A, - CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3690, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x334D, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x334E, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x332E, + CMSG_CHANGE_REALM_TICKET = 0x36F7, + CMSG_CHANGE_SUB_GROUP = 0x364B, + CMSG_CHARACTER_CHECK_UPGRADE = 0x36C3, + CMSG_CHARACTER_RENAME_REQUEST = 0x36BE, + CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36C1, + CMSG_CHARACTER_UPGRADE_START = 0x36C2, + CMSG_CHAR_CUSTOMIZE = 0x368B, + CMSG_CHAR_DELETE = 0x369B, + CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3691, CMSG_CHAT_ADDON_MESSAGE = 0x37EE, CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x37EF, - CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x37F4, + CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x37F6, CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E3, CMSG_CHAT_CHANNEL_BAN = 0x37E1, CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x37E6, @@ -231,65 +231,64 @@ enum OpcodeClient : uint16 CMSG_CHAT_REPORT_FILTERED = 0x37CC, CMSG_CHAT_REPORT_IGNORED = 0x37CB, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE, - CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3643, - CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3254, - CMSG_CHOICE_RESPONSE = 0x32BC, - CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33D8, - CMSG_CLAIM_WEEKLY_REWARD = 0x33B4, - CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x340F, - CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3214, - CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3411, - CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x340E, - CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x340D, - CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x3412, - CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3213, + CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3644, + CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3253, + CMSG_CHOICE_RESPONSE = 0x32BB, + CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33D9, + CMSG_CLAIM_WEEKLY_REWARD = 0x33B5, + CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3411, + CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3213, + CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3413, + CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x3410, + CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x340F, + CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x3414, + CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3212, CMSG_CLEAR_NEW_APPEARANCE = 0x3129, - CMSG_CLEAR_RAID_MARKER = 0x31A7, + CMSG_CLEAR_RAID_MARKER = 0x31A6, CMSG_CLEAR_TRADE_ITEM = 0x315E, CMSG_CLIENT_PORT_GRAVEYARD = 0x353A, CMSG_CLOSE_INTERACTION = 0x3499, - CMSG_CLOSE_QUEST_CHOICE = 0x32BD, - CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E0, - CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x3413, - CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371B, - CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x3719, - CMSG_CLUB_FINDER_POST = 0x3716, - CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371D, - CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3717, - CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3718, - CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371C, - CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x371E, - CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x371A, - CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x373A, - CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F3, - CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3631, + CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E1, + CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x3415, + CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371C, + CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371A, + CMSG_CLUB_FINDER_POST = 0x3717, + CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371E, + CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3718, + CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3719, + CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371D, + CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x371F, + CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x371B, + CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x373B, + CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F4, + CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3632, CMSG_COMMENTATOR_ENABLE = 0x35F0, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4, CMSG_COMMENTATOR_EXIT_INSTANCE = 0x35F5, CMSG_COMMENTATOR_GET_MAP_INFO = 0x35F1, CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS = 0x35F3, CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2, - CMSG_COMMENTATOR_SPECTATE = 0x3738, + CMSG_COMMENTATOR_SPECTATE = 0x3739, CMSG_COMMENTATOR_START_WARGAME = 0x35EF, - CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E0, - CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EA, - CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E1, - CMSG_COMPLAINT = 0x366A, + CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E1, + CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EB, + CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E2, + CMSG_COMPLAINT = 0x366B, CMSG_COMPLETE_CINEMATIC = 0x3558, CMSG_COMPLETE_MOVIE = 0x34EB, - CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AC, - CMSG_CONFIRM_RESPEC_WIPE = 0x3216, + CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AB, + CMSG_CONFIRM_RESPEC_WIPE = 0x3215, CMSG_CONNECT_TO_FAILED = 0x35D4, - CMSG_CONSUMABLE_TOKEN_BUY = 0x36E5, - CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E6, - CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E4, - CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36E8, - CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36E9, + CMSG_CONSUMABLE_TOKEN_BUY = 0x36E6, + CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E7, + CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E5, + CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36E9, + CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36EA, CMSG_CONTRIBUTION_CONTRIBUTE = 0x356C, CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x356D, CMSG_CONVERSATION_CINEMATIC_READY = 0x355A, CMSG_CONVERSATION_LINE_STARTED = 0x3559, - CMSG_CONVERT_RAID = 0x364C, + CMSG_CONVERT_RAID = 0x364D, CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x3580, CMSG_CRAFTING_ORDER_CANCEL = 0x358B, CMSG_CRAFTING_ORDER_CLAIM = 0x3588, @@ -300,89 +299,89 @@ enum OpcodeClient : uint16 CMSG_CRAFTING_ORDER_REJECT = 0x358C, CMSG_CRAFTING_ORDER_RELEASE = 0x3589, CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x358D, - CMSG_CREATE_CHARACTER = 0x3642, - CMSG_CREATE_SHIPMENT = 0x331A, + CMSG_CREATE_CHARACTER = 0x3643, + CMSG_CREATE_SHIPMENT = 0x3319, CMSG_DB_QUERY_BULK = 0x35E4, CMSG_DECLINE_GUILD_INVITES = 0x352D, CMSG_DECLINE_PETITION = 0x3547, CMSG_DELETE_EQUIPMENT_SET = 0x3519, - CMSG_DEL_FRIEND = 0x36CD, - CMSG_DEL_IGNORE = 0x36D1, - CMSG_DEPOSIT_REAGENT_BANK = 0x3357, - CMSG_DESTROY_ITEM = 0x32AA, - CMSG_DF_BOOT_PLAYER_VOTE = 0x3616, - CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3608, - CMSG_DF_GET_JOIN_STATUS = 0x3614, - CMSG_DF_GET_SYSTEM_INFO = 0x3613, - CMSG_DF_JOIN = 0x3609, - CMSG_DF_LEAVE = 0x3612, - CMSG_DF_PROPOSAL_RESPONSE = 0x3607, - CMSG_DF_READY_CHECK_RESPONSE = 0x3619, - CMSG_DF_SET_ROLES = 0x3615, - CMSG_DF_TELEPORT = 0x3617, + CMSG_DEL_FRIEND = 0x36CE, + CMSG_DEL_IGNORE = 0x36D2, + CMSG_DEPOSIT_REAGENT_BANK = 0x3356, + CMSG_DESTROY_ITEM = 0x32A9, + CMSG_DF_BOOT_PLAYER_VOTE = 0x3617, + CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x3609, + CMSG_DF_GET_JOIN_STATUS = 0x3615, + CMSG_DF_GET_SYSTEM_INFO = 0x3614, + CMSG_DF_JOIN = 0x360A, + CMSG_DF_LEAVE = 0x3613, + CMSG_DF_PROPOSAL_RESPONSE = 0x3608, + CMSG_DF_READY_CHECK_RESPONSE = 0x361A, + CMSG_DF_SET_ROLES = 0x3616, + CMSG_DF_TELEPORT = 0x3618, CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A41, CMSG_DISMISS_CRITTER = 0x3507, - CMSG_DO_COUNTDOWN = 0x3715, - CMSG_DO_MASTER_LOOT_ROLL = 0x321B, - CMSG_DO_READY_CHECK = 0x3632, + CMSG_DO_COUNTDOWN = 0x3716, + CMSG_DO_MASTER_LOOT_ROLL = 0x321A, + CMSG_DO_READY_CHECK = 0x3633, CMSG_DUEL_RESPONSE = 0x34F0, - CMSG_EJECT_PASSENGER = 0x3249, + CMSG_EJECT_PASSENGER = 0x3248, CMSG_EMOTE = 0x3554, CMSG_ENABLE_NAGLE = 0x376B, CMSG_ENABLE_TAXI_NODE = 0x34AF, - CMSG_ENGINE_SURVEY = 0x36DF, + CMSG_ENGINE_SURVEY = 0x36E0, CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x3767, CMSG_ENUM_CHARACTERS = 0x35E8, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36D9, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DA, CMSG_FAR_SIGHT = 0x34F6, - CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B3, - CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B2, + CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B2, + CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B1, CMSG_GAME_OBJ_REPORT_USE = 0x34FD, CMSG_GAME_OBJ_USE = 0x34FC, - CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3315, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32FB, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32E8, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x334A, - CMSG_GARRISON_COMPLETE_MISSION = 0x333C, - CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3316, - CMSG_GARRISON_GENERATE_RECRUITS = 0x32FE, - CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x330D, - CMSG_GARRISON_GET_MAP_DATA = 0x3314, + CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3314, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32FA, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32E7, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x3349, + CMSG_GARRISON_COMPLETE_MISSION = 0x333B, + CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3315, + CMSG_GARRISON_GENERATE_RECRUITS = 0x32FD, + CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x330C, + CMSG_GARRISON_GET_MAP_DATA = 0x3313, CMSG_GARRISON_GET_MISSION_REWARD = 0x336D, - CMSG_GARRISON_LEARN_TALENT = 0x3309, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x333E, - CMSG_GARRISON_PURCHASE_BUILDING = 0x32E4, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3300, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x3333, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32FC, - CMSG_GARRISON_RENAME_FOLLOWER = 0x32FD, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32E3, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3318, - CMSG_GARRISON_RESEARCH_TALENT = 0x3301, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32E5, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32F9, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32F1, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32FF, - CMSG_GARRISON_SOCKET_TALENT = 0x33ED, - CMSG_GARRISON_START_MISSION = 0x333B, - CMSG_GARRISON_SWAP_BUILDINGS = 0x32E9, + CMSG_GARRISON_LEARN_TALENT = 0x3308, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x333D, + CMSG_GARRISON_PURCHASE_BUILDING = 0x32E3, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32FF, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x3332, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32FB, + CMSG_GARRISON_RENAME_FOLLOWER = 0x32FC, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32E2, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3317, + CMSG_GARRISON_RESEARCH_TALENT = 0x3300, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32E4, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32F8, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32F0, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32FE, + CMSG_GARRISON_SOCKET_TALENT = 0x33EE, + CMSG_GARRISON_START_MISSION = 0x333A, + CMSG_GARRISON_SWAP_BUILDINGS = 0x32E8, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7, - CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B2, - CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3731, - CMSG_GET_GARRISON_INFO = 0x32DE, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B3, + CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3732, + CMSG_GET_GARRISON_INFO = 0x32DD, CMSG_GET_ITEM_PURCHASE_DATA = 0x3542, - CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3319, - CMSG_GET_MIRROR_IMAGE_DATA = 0x32AE, + CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x3318, + CMSG_GET_MIRROR_IMAGE_DATA = 0x32AD, CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE, - CMSG_GET_RAF_ACCOUNT_INFO = 0x371F, - CMSG_GET_REMAINING_GAME_TIME = 0x36E7, - CMSG_GET_TROPHY_LIST = 0x332C, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DB, - CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36EC, - CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36ED, - CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x368E, - CMSG_GM_TICKET_GET_CASE_STATUS = 0x368D, - CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368C, + CMSG_GET_RAF_ACCOUNT_INFO = 0x3720, + CMSG_GET_REMAINING_GAME_TIME = 0x36E8, + CMSG_GET_TROPHY_LIST = 0x332B, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DC, + CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36ED, + CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36EE, + CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x368F, + CMSG_GM_TICKET_GET_CASE_STATUS = 0x368E, + CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368D, CMSG_GOSSIP_REFRESH_OPTIONS = 0x357F, CMSG_GOSSIP_SELECT_OPTION = 0x349A, CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308D, @@ -409,7 +408,7 @@ enum OpcodeClient : uint16 CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x3072, CMSG_GUILD_GET_RANKS = 0x306E, CMSG_GUILD_GET_ROSTER = 0x3074, - CMSG_GUILD_INVITE_BY_NAME = 0x3606, + CMSG_GUILD_INVITE_BY_NAME = 0x3607, CMSG_GUILD_LEAVE = 0x3063, CMSG_GUILD_NEWS_UPDATE_STICKY = 0x306F, CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x3064, @@ -422,78 +421,78 @@ enum OpcodeClient : uint16 CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3089, CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x3070, CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3071, - CMSG_GUILD_SET_GUILD_MASTER = 0x36C4, + CMSG_GUILD_SET_GUILD_MASTER = 0x36C5, CMSG_GUILD_SET_MEMBER_NOTE = 0x3073, CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3068, CMSG_GUILD_SHIFT_RANK = 0x3067, CMSG_GUILD_UPDATE_INFO_TEXT = 0x3076, CMSG_GUILD_UPDATE_MOTD_TEXT = 0x3075, CMSG_HEARTH_AND_RESURRECT = 0x3515, - CMSG_HIDE_QUEST_CHOICE = 0x32BE, + CMSG_HIDE_QUEST_CHOICE = 0x32BD, CMSG_HOTFIX_REQUEST = 0x35E5, CMSG_IGNORE_TRADE = 0x3159, CMSG_INITIATE_ROLE_POLL = 0x35DA, CMSG_INITIATE_TRADE = 0x3156, CMSG_INSPECT = 0x353C, CMSG_INSTANCE_LOCK_RESPONSE = 0x351A, - CMSG_ISLAND_QUEUE = 0x33B0, + CMSG_ISLAND_QUEUE = 0x33B1, CMSG_ITEM_PURCHASE_REFUND = 0x3543, - CMSG_ITEM_TEXT_QUERY = 0x334B, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DF, + CMSG_ITEM_TEXT_QUERY = 0x334A, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DE, CMSG_JOIN_RATED_BATTLEGROUND = 0x3179, - CMSG_KEEP_ALIVE = 0x367D, - CMSG_KEYBOUND_OVERRIDE = 0x322E, + CMSG_KEEP_ALIVE = 0x367E, + CMSG_KEYBOUND_OVERRIDE = 0x322D, CMSG_LATENCY_REPORT = 0x3771, CMSG_LEARN_PVP_TALENTS = 0x356B, CMSG_LEARN_TALENTS = 0x3569, - CMSG_LEAVE_GROUP = 0x3647, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E0, - CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360D, - CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360E, - CMSG_LFG_LIST_DECLINE_APPLICANT = 0x360F, - CMSG_LFG_LIST_GET_STATUS = 0x360B, - CMSG_LFG_LIST_INVITE_APPLICANT = 0x3610, - CMSG_LFG_LIST_INVITE_RESPONSE = 0x3611, - CMSG_LFG_LIST_JOIN = 0x338F, - CMSG_LFG_LIST_LEAVE = 0x360A, - CMSG_LFG_LIST_SEARCH = 0x360C, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x3390, + CMSG_LEAVE_GROUP = 0x3648, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31DF, + CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360E, + CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360F, + CMSG_LFG_LIST_DECLINE_APPLICANT = 0x3610, + CMSG_LFG_LIST_GET_STATUS = 0x360C, + CMSG_LFG_LIST_INVITE_APPLICANT = 0x3611, + CMSG_LFG_LIST_INVITE_RESPONSE = 0x3612, + CMSG_LFG_LIST_JOIN = 0x3390, + CMSG_LFG_LIST_LEAVE = 0x360B, + CMSG_LFG_LIST_SEARCH = 0x360D, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x3391, CMSG_LIST_INVENTORY = 0x34A7, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B5, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B4, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B3, - CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B6, + CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B6, + CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B5, + CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B4, + CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B7, CMSG_LOADING_SCREEN_NOTIFY = 0x35F8, - CMSG_LOAD_SELECTED_TROPHY = 0x332D, + CMSG_LOAD_SELECTED_TROPHY = 0x332C, CMSG_LOGOUT_CANCEL = 0x34E6, CMSG_LOGOUT_INSTANT = 0x34E7, CMSG_LOGOUT_REQUEST = 0x34E4, CMSG_LOG_DISCONNECT = 0x3769, CMSG_LOG_STREAMING_ERROR = 0x376D, - CMSG_LOOT_ITEM = 0x3219, - CMSG_LOOT_MONEY = 0x3218, - CMSG_LOOT_RELEASE = 0x321D, - CMSG_LOOT_ROLL = 0x321E, - CMSG_LOOT_UNIT = 0x3217, - CMSG_LOW_LEVEL_RAID1 = 0x369E, + CMSG_LOOT_ITEM = 0x3218, + CMSG_LOOT_MONEY = 0x3217, + CMSG_LOOT_RELEASE = 0x321C, + CMSG_LOOT_ROLL = 0x321D, + CMSG_LOOT_UNIT = 0x3216, + CMSG_LOW_LEVEL_RAID1 = 0x369F, CMSG_LOW_LEVEL_RAID2 = 0x3521, CMSG_MAIL_CREATE_TEXT_ITEM = 0x354E, - CMSG_MAIL_DELETE = 0x3230, + CMSG_MAIL_DELETE = 0x322F, CMSG_MAIL_GET_LIST = 0x3549, CMSG_MAIL_MARK_AS_READ = 0x354D, - CMSG_MAIL_RETURN_TO_SENDER = 0x3653, + CMSG_MAIL_RETURN_TO_SENDER = 0x3654, CMSG_MAIL_TAKE_ITEM = 0x354B, CMSG_MAIL_TAKE_MONEY = 0x354A, - CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3232, - CMSG_MASTER_LOOT_ITEM = 0x321A, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3231, + CMSG_MASTER_LOOT_ITEM = 0x3219, CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x34C7, CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x34C4, CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x34C2, - CMSG_MINIMAP_PING = 0x3649, - CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318B, + CMSG_MINIMAP_PING = 0x364A, + CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318A, CMSG_MOUNT_CLEAR_FANFARE = 0x3127, - CMSG_MOUNT_SET_FAVORITE = 0x3630, - CMSG_MOUNT_SPECIAL_ANIM = 0x3297, + CMSG_MOUNT_SET_FAVORITE = 0x3631, + CMSG_MOUNT_SPECIAL_ANIM = 0x3296, CMSG_MOVE_ADD_IMPULSE_ACK = 0x3A50, CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4E, CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A15, @@ -584,46 +583,46 @@ enum OpcodeClient : uint16 CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A1A, CMSG_MOVE_WATER_WALK_ACK = 0x3A1D, CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x308E, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D5, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D4, CMSG_NEXT_CINEMATIC_CAMERA = 0x3557, - CMSG_OBJECT_UPDATE_FAILED = 0x3181, - CMSG_OBJECT_UPDATE_RESCUED = 0x3182, - CMSG_OFFER_PETITION = 0x33D7, + CMSG_OBJECT_UPDATE_FAILED = 0x3180, + CMSG_OBJECT_UPDATE_RESCUED = 0x3181, + CMSG_OFFER_PETITION = 0x33D8, CMSG_OPENING_CINEMATIC = 0x3556, - CMSG_OPEN_ITEM = 0x334C, - CMSG_OPEN_MISSION_NPC = 0x330F, - CMSG_OPEN_SHIPMENT_NPC = 0x3317, - CMSG_OPEN_TRADESKILL_NPC = 0x3322, + CMSG_OPEN_ITEM = 0x334B, + CMSG_OPEN_MISSION_NPC = 0x330E, + CMSG_OPEN_SHIPMENT_NPC = 0x3316, + CMSG_OPEN_TRADESKILL_NPC = 0x3321, CMSG_OPT_OUT_OF_LOOT = 0x3504, CMSG_OVERRIDE_SCREEN_FLASH = 0x352E, - CMSG_PARTY_INVITE = 0x3602, - CMSG_PARTY_INVITE_RESPONSE = 0x3604, - CMSG_PARTY_UNINVITE = 0x3645, - CMSG_PERFORM_ITEM_INTERACTION = 0x323A, + CMSG_PARTY_INVITE = 0x3603, + CMSG_PARTY_INVITE_RESPONSE = 0x3605, + CMSG_PARTY_UNINVITE = 0x3646, + CMSG_PERFORM_ITEM_INTERACTION = 0x3239, CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x3135, - CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x33FF, - CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3400, - CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3401, - CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x33FE, + CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3401, + CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3402, + CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3403, + CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3400, CMSG_PETITION_BUY = 0x34CF, - CMSG_PETITION_RENAME_GUILD = 0x36C5, + CMSG_PETITION_RENAME_GUILD = 0x36C6, CMSG_PETITION_SHOW_LIST = 0x34CE, CMSG_PETITION_SHOW_SIGNATURES = 0x34D0, CMSG_PET_ABANDON = 0x3493, CMSG_PET_ACTION = 0x3491, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E4, - CMSG_PET_BATTLE_INPUT = 0x363F, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x322F, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E3, - CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3640, - CMSG_PET_BATTLE_REQUEST_PVP = 0x31DD, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DE, - CMSG_PET_BATTLE_REQUEST_WILD = 0x31DB, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E5, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DC, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E3, + CMSG_PET_BATTLE_INPUT = 0x3640, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x322E, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E2, + CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3641, + CMSG_PET_BATTLE_REQUEST_PVP = 0x31DC, + CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DD, + CMSG_PET_BATTLE_REQUEST_WILD = 0x31DA, + CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E4, + CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DB, CMSG_PET_CANCEL_AURA = 0x3494, - CMSG_PET_CAST_SPELL = 0x32B3, - CMSG_PET_RENAME = 0x3682, + CMSG_PET_CAST_SPELL = 0x32B2, + CMSG_PET_RENAME = 0x3683, CMSG_PET_SET_ACTION = 0x3490, CMSG_PET_SPELL_AUTOCAST = 0x3495, CMSG_PET_STOP_ATTACK = 0x3492, @@ -631,31 +630,31 @@ enum OpcodeClient : uint16 CMSG_PLAYER_LOGIN = 0x35EA, CMSG_PUSH_QUEST_TO_PARTY = 0x34A5, CMSG_PVP_LOG_DATA = 0x317C, - CMSG_QUERY_BATTLE_PET_NAME = 0x328A, - CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365E, - CMSG_QUERY_CORPSE_TRANSPORT = 0x365F, - CMSG_QUERY_COUNTDOWN_TIMER = 0x31AA, - CMSG_QUERY_CREATURE = 0x3284, - CMSG_QUERY_GAME_OBJECT = 0x3285, - CMSG_QUERY_GARRISON_PET_NAME = 0x328B, - CMSG_QUERY_GUILD_INFO = 0x3688, + CMSG_QUERY_BATTLE_PET_NAME = 0x3289, + CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365F, + CMSG_QUERY_CORPSE_TRANSPORT = 0x3660, + CMSG_QUERY_COUNTDOWN_TIMER = 0x31A9, + CMSG_QUERY_CREATURE = 0x3283, + CMSG_QUERY_GAME_OBJECT = 0x3284, + CMSG_QUERY_GARRISON_PET_NAME = 0x328A, + CMSG_QUERY_GUILD_INFO = 0x3689, CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x350E, CMSG_QUERY_NEXT_MAIL_TIME = 0x354C, - CMSG_QUERY_NPC_TEXT = 0x3286, - CMSG_QUERY_PAGE_TEXT = 0x3288, - CMSG_QUERY_PETITION = 0x328C, - CMSG_QUERY_PET_NAME = 0x3289, + CMSG_QUERY_NPC_TEXT = 0x3285, + CMSG_QUERY_PAGE_TEXT = 0x3287, + CMSG_QUERY_PETITION = 0x328B, + CMSG_QUERY_PET_NAME = 0x3288, CMSG_QUERY_PLAYER_NAMES = 0x3772, CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3770, CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x376F, CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3175, - CMSG_QUERY_QUEST_INFO = 0x3287, + CMSG_QUERY_QUEST_INFO = 0x3286, CMSG_QUERY_QUEST_ITEM_USABILITY = 0x3176, - CMSG_QUERY_REALM_NAME = 0x3687, - CMSG_QUERY_SCENARIO_POI = 0x3654, + CMSG_QUERY_REALM_NAME = 0x3688, + CMSG_QUERY_SCENARIO_POI = 0x3655, CMSG_QUERY_TIME = 0x34E3, CMSG_QUERY_TREASURE_PICKER = 0x3370, - CMSG_QUERY_VOID_STORAGE = 0x31A3, + CMSG_QUERY_VOID_STORAGE = 0x31A2, CMSG_QUEST_CONFIRM_ACCEPT = 0x34A4, CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349E, CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x34A0, @@ -668,159 +667,158 @@ enum OpcodeClient : uint16 CMSG_QUEST_GIVER_STATUS_QUERY = 0x34A2, CMSG_QUEST_GIVER_STATUS_TRACKED_QUERY = 0x358F, CMSG_QUEST_LOG_REMOVE_QUEST = 0x3541, - CMSG_QUEST_POI_QUERY = 0x36AC, + CMSG_QUEST_POI_QUERY = 0x36AD, CMSG_QUEST_PUSH_RESULT = 0x34A6, - CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33C8, - CMSG_QUEST_SESSION_REQUEST_START = 0x33C7, - CMSG_QUEST_SESSION_REQUEST_STOP = 0x372A, + CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33C9, + CMSG_QUEST_SESSION_REQUEST_START = 0x33C8, + CMSG_QUEST_SESSION_REQUEST_STOP = 0x372B, CMSG_QUEUED_MESSAGES_END = 0x376C, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3702, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3701, - CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x372F, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3700, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x36FF, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3703, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3702, + CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3730, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3701, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3700, CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3512, - CMSG_RAF_CLAIM_NEXT_REWARD = 0x3720, - CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3722, - CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3721, - CMSG_RANDOM_ROLL = 0x3652, - CMSG_READY_CHECK_RESPONSE = 0x3633, - CMSG_READ_ITEM = 0x334D, + CMSG_RAF_CLAIM_NEXT_REWARD = 0x3721, + CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3723, + CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3722, + CMSG_RANDOM_ROLL = 0x3653, + CMSG_READY_CHECK_RESPONSE = 0x3634, + CMSG_READ_ITEM = 0x334C, CMSG_RECLAIM_CORPSE = 0x34E9, CMSG_REMOVE_NEW_ITEM = 0x3373, - CMSG_REMOVE_RAF_RECRUIT = 0x3723, + CMSG_REMOVE_RAF_RECRUIT = 0x3724, CMSG_REORDER_CHARACTERS = 0x35E9, CMSG_REPAIR_ITEM = 0x34FA, - CMSG_REPLACE_TROPHY = 0x332E, + CMSG_REPLACE_TROPHY = 0x332D, CMSG_REPOP_REQUEST = 0x3539, - CMSG_REPORT_CLIENT_VARIABLES = 0x36FC, - CMSG_REPORT_ENABLED_ADDONS = 0x36FB, - CMSG_REPORT_FROZEN_WHILE_LOADING_MAP = 0x36A4, - CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FD, + CMSG_REPORT_CLIENT_VARIABLES = 0x36FD, + CMSG_REPORT_ENABLED_ADDONS = 0x36FC, + CMSG_REPORT_FROZEN_WHILE_LOADING_MAP = 0x36A5, + CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FE, CMSG_REPORT_PVP_PLAYER_AFK = 0x3502, - CMSG_REPORT_SERVER_LAG = 0x33C0, - CMSG_REPORT_STUCK_IN_COMBAT = 0x33C1, - CMSG_REQUEST_ACCOUNT_DATA = 0x3692, + CMSG_REPORT_SERVER_LAG = 0x33C1, + CMSG_REPORT_STUCK_IN_COMBAT = 0x33C2, + CMSG_REQUEST_ACCOUNT_DATA = 0x3693, CMSG_REQUEST_AREA_POI_UPDATE = 0x3372, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC, - CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317E, CMSG_REQUEST_CEMETERY_LIST = 0x3177, - CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3689, - CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32D0, - CMSG_REQUEST_COVENANT_CALLINGS = 0x33B2, + CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x368A, + CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32CF, + CMSG_REQUEST_COVENANT_CALLINGS = 0x33B3, CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353D, - CMSG_REQUEST_FORCED_REACTIONS = 0x320E, - CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33EC, - CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A9, - CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A8, - CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C2, - CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32BF, - CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3208, - CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3209, + CMSG_REQUEST_FORCED_REACTIONS = 0x320D, + CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33ED, + CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A8, + CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A7, + CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C3, + CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32BE, + CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3207, + CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3208, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7, - CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3651, + CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3652, CMSG_REQUEST_PET_INFO = 0x3496, - CMSG_REQUEST_PLAYED_TIME = 0x328F, - CMSG_REQUEST_PVP_REWARDS = 0x3196, - CMSG_REQUEST_RAID_INFO = 0x36C6, + CMSG_REQUEST_PLAYED_TIME = 0x328E, + CMSG_REQUEST_PVP_REWARDS = 0x3195, + CMSG_REQUEST_RAID_INFO = 0x36C7, CMSG_REQUEST_RATED_PVP_INFO = 0x35E3, CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x309A, CMSG_REQUEST_RESEARCH_HISTORY = 0x3167, - CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3197, + CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3196, CMSG_REQUEST_STABLED_PETS = 0x3497, - CMSG_REQUEST_VEHICLE_EXIT = 0x3244, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3246, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3245, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3247, - CMSG_REQUEST_WEEKLY_REWARDS = 0x33B5, + CMSG_REQUEST_VEHICLE_EXIT = 0x3243, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3245, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3244, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3246, + CMSG_REQUEST_WEEKLY_REWARDS = 0x33B6, CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3371, - CMSG_RESET_CHALLENGE_MODE = 0x3206, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3207, - CMSG_RESET_INSTANCES = 0x3666, - CMSG_RESURRECT_RESPONSE = 0x3681, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x3330, - CMSG_RIDE_VEHICLE_INTERACT = 0x3248, - CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3741, - CMSG_SAVE_CUF_PROFILES = 0x318C, + CMSG_RESET_CHALLENGE_MODE = 0x3205, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3206, + CMSG_RESET_INSTANCES = 0x3667, + CMSG_RESURRECT_RESPONSE = 0x3682, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x332F, + CMSG_RIDE_VEHICLE_INTERACT = 0x3247, + CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3748, + CMSG_SAVE_CUF_PROFILES = 0x318B, CMSG_SAVE_EQUIPMENT_SET = 0x3518, - CMSG_SAVE_GUILD_EMBLEM = 0x32C3, - CMSG_SCENE_PLAYBACK_CANCELED = 0x322B, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x322A, - CMSG_SCENE_TRIGGER_EVENT = 0x322C, + CMSG_SAVE_GUILD_EMBLEM = 0x32C2, + CMSG_SCENE_PLAYBACK_CANCELED = 0x322A, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x3229, + CMSG_SCENE_TRIGGER_EVENT = 0x322B, CMSG_SELF_RES = 0x3544, CMSG_SELL_ITEM = 0x34A8, - CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F5, - CMSG_SEND_CONTACT_LIST = 0x36CB, + CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F6, + CMSG_SEND_CONTACT_LIST = 0x36CC, CMSG_SEND_MAIL = 0x35FA, CMSG_SEND_TEXT_EMOTE = 0x348E, - CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3699, - CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3231, + CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369A, + CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3230, CMSG_SET_ACTION_BAR_TOGGLES = 0x3545, - CMSG_SET_ACTION_BUTTON = 0x3634, + CMSG_SET_ACTION_BUTTON = 0x3635, CMSG_SET_ACTIVE_MOVER = 0x3A3C, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32D1, - CMSG_SET_ASSISTANT_LEADER = 0x364D, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3350, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3351, - CMSG_SET_CONTACT_NOTES = 0x36CE, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32D0, + CMSG_SET_ASSISTANT_LEADER = 0x364E, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x334F, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3350, + CMSG_SET_CONTACT_NOTES = 0x36CF, CMSG_SET_CURRENCY_FLAGS = 0x3169, - CMSG_SET_DIFFICULTY_ID = 0x322D, - CMSG_SET_DUNGEON_DIFFICULTY = 0x3680, - CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x327E, - CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3618, - CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3703, + CMSG_SET_DIFFICULTY_ID = 0x322C, + CMSG_SET_DUNGEON_DIFFICULTY = 0x3681, + CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x327D, + CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3619, + CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3704, CMSG_SET_FACTION_AT_WAR = 0x34EC, CMSG_SET_FACTION_INACTIVE = 0x34EE, CMSG_SET_FACTION_NOT_AT_WAR = 0x34ED, - CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31BA, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3353, - CMSG_SET_LOOT_METHOD = 0x3646, + CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B9, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3352, + CMSG_SET_LOOT_METHOD = 0x3647, CMSG_SET_LOOT_SPECIALIZATION = 0x3552, - CMSG_SET_PARTY_ASSIGNMENT = 0x364F, - CMSG_SET_PARTY_LEADER = 0x3648, + CMSG_SET_PARTY_ASSIGNMENT = 0x3650, + CMSG_SET_PARTY_LEADER = 0x3649, CMSG_SET_PET_SLOT = 0x3168, - CMSG_SET_PLAYER_DECLINED_NAMES = 0x3686, + CMSG_SET_PLAYER_DECLINED_NAMES = 0x3687, CMSG_SET_PREFERRED_CEMETERY = 0x3178, - CMSG_SET_PVP = 0x32C7, - CMSG_SET_RAID_DIFFICULTY = 0x36D7, + CMSG_SET_PVP = 0x32C6, + CMSG_SET_RAID_DIFFICULTY = 0x36D8, CMSG_SET_ROLE = 0x35D9, - CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3684, + CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3685, CMSG_SET_SELECTION = 0x353B, CMSG_SET_SHEATHED = 0x348F, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3352, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3351, CMSG_SET_TAXI_BENCHMARK_MODE = 0x3501, - CMSG_SET_TITLE = 0x3295, + CMSG_SET_TITLE = 0x3294, CMSG_SET_TRADE_CURRENCY = 0x3160, CMSG_SET_TRADE_GOLD = 0x315F, CMSG_SET_TRADE_ITEM = 0x315D, - CMSG_SET_USING_PARTY_GARRISON = 0x3311, - CMSG_SET_WAR_MODE = 0x32C8, + CMSG_SET_USING_PARTY_GARRISON = 0x3310, + CMSG_SET_WAR_MODE = 0x32C7, CMSG_SET_WATCHED_FACTION = 0x34EF, - CMSG_SHOW_TRADE_SKILL = 0x36BE, + CMSG_SHOW_TRADE_SKILL = 0x36BF, CMSG_SIGN_PETITION = 0x3546, - CMSG_SILENCE_PARTY_TALKER = 0x3650, - CMSG_SOCIAL_CONTRACT_REQUEST = 0x373C, + CMSG_SILENCE_PARTY_TALKER = 0x3651, + CMSG_SOCIAL_CONTRACT_REQUEST = 0x3743, CMSG_SOCKET_GEMS = 0x34F9, - CMSG_SORT_BAGS = 0x3354, - CMSG_SORT_BANK_BAGS = 0x3355, - CMSG_SORT_REAGENT_BANK_BAGS = 0x3356, + CMSG_SORT_BAGS = 0x3353, + CMSG_SORT_BANK_BAGS = 0x3354, + CMSG_SORT_REAGENT_BANK_BAGS = 0x3355, CMSG_SPELL_CLICK = 0x349B, - CMSG_SPELL_EMPOWER_RELEASE = 0x327C, - CMSG_SPELL_EMPOWER_RESTART = 0x327D, + CMSG_SPELL_EMPOWER_RELEASE = 0x327B, + CMSG_SPELL_EMPOWER_RESTART = 0x327C, CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B5, CMSG_SPLIT_GUILD_BANK_ITEM = 0x34C8, CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x34C5, CMSG_SPLIT_ITEM = 0x399E, CMSG_SPLIT_ITEM_TO_GUILD_BANK = 0x34C3, - CMSG_STAND_STATE_CHANGE = 0x318A, + CMSG_STAND_STATE_CHANGE = 0x3189, CMSG_START_CHALLENGE_MODE = 0x355E, CMSG_START_SPECTATOR_WAR_GAME = 0x35DF, CMSG_START_WAR_GAME = 0x35DE, CMSG_STORE_GUILD_BANK_ITEM = 0x34BE, - CMSG_SUBMIT_USER_FEEDBACK = 0x3691, - CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E1, - CMSG_SUMMON_RESPONSE = 0x3668, - CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644, + CMSG_SUBMIT_USER_FEEDBACK = 0x3692, + CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E2, + CMSG_SUMMON_RESPONSE = 0x3669, + CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3645, CMSG_SURRENDER_ARENA = 0x3174, CMSG_SUSPEND_COMMS_ACK = 0x3764, CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A, @@ -828,9 +826,9 @@ enum OpcodeClient : uint16 CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x34BF, - CMSG_SWAP_SUB_GROUPS = 0x364B, - CMSG_SWAP_VOID_ITEM = 0x31A5, - CMSG_TABARD_VENDOR_ACTIVATE = 0x32C4, + CMSG_SWAP_SUB_GROUPS = 0x364C, + CMSG_SWAP_VOID_ITEM = 0x31A4, + CMSG_TABARD_VENDOR_ACTIVATE = 0x32C3, CMSG_TALK_TO_GOSSIP = 0x3498, CMSG_TAXI_NODE_STATUS_QUERY = 0x34AE, CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34B0, @@ -839,51 +837,51 @@ enum OpcodeClient : uint16 CMSG_TIME_SYNC_RESPONSE = 0x3A3D, CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3F, CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3E, - CMSG_TOGGLE_DIFFICULTY = 0x3655, - CMSG_TOGGLE_PVP = 0x32C6, + CMSG_TOGGLE_DIFFICULTY = 0x3656, + CMSG_TOGGLE_PVP = 0x32C5, CMSG_TOTEM_DESTROYED = 0x3506, CMSG_TOY_CLEAR_FANFARE = 0x3128, CMSG_TRADE_SKILL_SET_FAVORITE = 0x336F, CMSG_TRAINER_BUY_SPELL = 0x34B4, CMSG_TRAINER_LIST = 0x34B3, - CMSG_TRAITS_COMMIT_CONFIG = 0x3407, - CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3405, - CMSG_TRANSMOGRIFY_ITEMS = 0x3198, + CMSG_TRAITS_COMMIT_CONFIG = 0x3409, + CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3407, + CMSG_TRANSMOGRIFY_ITEMS = 0x3197, CMSG_TURN_IN_PETITION = 0x3548, - CMSG_TUTORIAL = 0x36D8, - CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B1, + CMSG_TUTORIAL = 0x36D9, + CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B2, CMSG_UNACCEPT_TRADE = 0x315B, - CMSG_UNDELETE_CHARACTER = 0x36DA, + CMSG_UNDELETE_CHARACTER = 0x36DB, CMSG_UNLEARN_SKILL = 0x34F3, - CMSG_UNLEARN_SPECIALIZATION = 0x31A6, - CMSG_UNLOCK_VOID_STORAGE = 0x31A2, - CMSG_UPDATE_AADC_STATUS = 0x3736, - CMSG_UPDATE_ACCOUNT_DATA = 0x3693, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32B6, - CMSG_UPDATE_CLIENT_SETTINGS = 0x3662, - CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3323, + CMSG_UNLEARN_SPECIALIZATION = 0x31A5, + CMSG_UNLOCK_VOID_STORAGE = 0x31A1, + CMSG_UPDATE_AADC_STATUS = 0x3737, + CMSG_UPDATE_ACCOUNT_DATA = 0x3694, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32B5, + CMSG_UPDATE_CLIENT_SETTINGS = 0x3663, + CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3322, CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A43, - CMSG_UPDATE_RAID_TARGET = 0x364E, - CMSG_UPDATE_SPELL_VISUAL = 0x32B5, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36EF, - CMSG_UPGRADE_GARRISON = 0x32D9, - CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33DF, - CMSG_USED_FOLLOW = 0x3187, - CMSG_USE_CRITTER_ITEM = 0x324E, + CMSG_UPDATE_RAID_TARGET = 0x364F, + CMSG_UPDATE_SPELL_VISUAL = 0x32B4, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F0, + CMSG_UPGRADE_GARRISON = 0x32D8, + CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E0, + CMSG_USED_FOLLOW = 0x3186, + CMSG_USE_CRITTER_ITEM = 0x324D, CMSG_USE_EQUIPMENT_SET = 0x3995, - CMSG_USE_ITEM = 0x32AF, - CMSG_USE_TOY = 0x32B2, - CMSG_VAS_CHECK_TRANSFER_OK = 0x3708, - CMSG_VAS_GET_QUEUE_MINUTES = 0x3707, - CMSG_VAS_GET_SERVICE_STATUS = 0x3706, - CMSG_VIOLENCE_LEVEL = 0x3185, - CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370C, - CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370D, - CMSG_VOICE_CHAT_LOGIN = 0x370B, - CMSG_VOID_STORAGE_TRANSFER = 0x31A4, + CMSG_USE_ITEM = 0x32AE, + CMSG_USE_TOY = 0x32B1, + CMSG_VAS_CHECK_TRANSFER_OK = 0x3709, + CMSG_VAS_GET_QUEUE_MINUTES = 0x3708, + CMSG_VAS_GET_SERVICE_STATUS = 0x3707, + CMSG_VIOLENCE_LEVEL = 0x3184, + CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST = 0x370D, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370E, + CMSG_VOICE_CHAT_LOGIN = 0x370C, + CMSG_VOID_STORAGE_TRANSFER = 0x31A3, CMSG_WARDEN3_DATA = 0x35EC, - CMSG_WHO = 0x367F, - CMSG_WHO_IS = 0x367E, + CMSG_WHO = 0x3680, + CMSG_WHO_IS = 0x367F, CMSG_WORLD_PORT_RESPONSE = 0x35F9, CMSG_WRAP_ITEM = 0x3994, }; @@ -891,85 +889,89 @@ enum OpcodeClient : uint16 enum OpcodeServer : uint16 { SMSG_ABORT_NEW_WORLD = 0x259C, - SMSG_ACCOUNT_COSMETIC_ADDED = 0x287C, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2862, - SMSG_ACCOUNT_DATA_TIMES = 0x2705, + SMSG_ACCOUNT_COSMETIC_ADDED = 0x287A, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2860, + SMSG_ACCOUNT_DATA_TIMES = 0x2704, + SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28B6, SMSG_ACCOUNT_MOUNT_REMOVED = 0x25B0, SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AF, - SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x287B, + SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2879, SMSG_ACCOUNT_TOY_UPDATE = 0x25B1, SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B4, SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B3, - SMSG_ACHIEVEMENT_DELETED = 0x26E3, - SMSG_ACHIEVEMENT_EARNED = 0x2641, + SMSG_ACHIEVEMENT_DELETED = 0x26E2, + SMSG_ACHIEVEMENT_EARNED = 0x2640, SMSG_ACTIVATE_ESSENCE_FAILED = 0x3015, SMSG_ACTIVATE_SOULBIND_FAILED = 0x3017, - SMSG_ACTIVATE_TAXI_REPLY = 0x267B, - SMSG_ACTIVE_GLYPHS = 0x2C57, - SMSG_ADDON_LIST_REQUEST = 0x2640, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263B, + SMSG_ACTIVATE_TAXI_REPLY = 0x267A, + SMSG_ACTIVE_GLYPHS = 0x2C54, + SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2740, + SMSG_ADDON_LIST_REQUEST = 0x263F, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263A, SMSG_ADD_ITEM_PASSIVE = 0x25AB, - SMSG_ADD_LOSS_OF_CONTROL = 0x266F, - SMSG_ADD_RUNE_POWER = 0x26B5, + SMSG_ADD_LOSS_OF_CONTROL = 0x266E, + SMSG_ADD_RUNE_POWER = 0x26B4, SMSG_ADJUST_SPLINE_DURATION = 0x25D0, - SMSG_ADVANCED_COMBAT_LOG = 0x2878, - SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x2872, - SMSG_AE_LOOT_TARGETS = 0x2616, - SMSG_AE_LOOT_TARGET_ACK = 0x2617, - SMSG_AI_REACTION = 0x26B2, - SMSG_ALLIED_RACE_DETAILS = 0x27F6, + SMSG_ADVANCED_COMBAT_LOG = 0x2876, + SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x2870, + SMSG_AE_LOOT_TARGETS = 0x2615, + SMSG_AE_LOOT_TARGET_ACK = 0x2616, + SMSG_AI_REACTION = 0x26B1, + SMSG_ALLIED_RACE_DETAILS = 0x27F4, SMSG_ALL_ACCOUNT_CRITERIA = 0x2571, SMSG_ALL_ACHIEVEMENT_DATA = 0x2570, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, - SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x284F, + SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x284D, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2588, SMSG_AREA_POI_UPDATE_RESPONSE = 0x3010, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x273A, - SMSG_AREA_TRIGGER_DENIED = 0x2902, - SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x28FF, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x2711, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x2739, + SMSG_AREA_TRIGGER_DENIED = 0x2903, + SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x2900, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x2710, SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FE, SMSG_AREA_TRIGGER_RE_PATH = 0x28FD, - SMSG_AREA_TRIGGER_RE_SHAPE = 0x2901, - SMSG_AREA_TRIGGER_UNATTACH = 0x2900, - SMSG_ARENA_CLEAR_OPPONENTS = 0x2647, - SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x2630, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2646, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x27A0, - SMSG_ARTIFACT_FORGE_ERROR = 0x279E, - SMSG_ARTIFACT_RESPEC_PROMPT = 0x279F, - SMSG_ARTIFACT_XP_GAIN = 0x27E9, + SMSG_AREA_TRIGGER_RE_SHAPE = 0x2902, + SMSG_AREA_TRIGGER_UNATTACH = 0x2901, + SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x28FF, + SMSG_ARENA_CLEAR_OPPONENTS = 0x2646, + SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x262F, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2645, + SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279E, + SMSG_ARTIFACT_FORGE_ERROR = 0x279C, + SMSG_ARTIFACT_RESPEC_PROMPT = 0x279D, + SMSG_ARTIFACT_XP_GAIN = 0x27E7, SMSG_ATTACKER_STATE_UPDATE = 0x294D, SMSG_ATTACK_START = 0x2938, SMSG_ATTACK_STOP = 0x2939, SMSG_ATTACK_SWING_ERROR = 0x2947, SMSG_ATTACK_SWING_LANDED_LOG = 0x2948, - SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27D2, - SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27D1, - SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27D0, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26EE, - SMSG_AUCTION_COMMAND_RESULT = 0x26EB, - SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2895, - SMSG_AUCTION_FAVORITE_LIST = 0x2869, - SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x2860, - SMSG_AUCTION_HELLO_RESPONSE = 0x26E9, - SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x285F, - SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x285C, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x285D, - SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x285E, - 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 = 0x2C23, - SMSG_AURA_UPDATE = 0x2C22, + SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27D0, + SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27CF, + SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27CE, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26ED, + SMSG_AUCTION_COMMAND_RESULT = 0x26EA, + SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2896, + SMSG_AUCTION_FAVORITE_LIST = 0x2867, + SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x285E, + SMSG_AUCTION_HELLO_RESPONSE = 0x26E8, + SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x285D, + SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x285A, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x285B, + SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x285C, + 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_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_FAILED = 0x256C, SMSG_AUTH_RESPONSE = 0x256D, SMSG_AVAILABLE_HOTFIXES = 0x290F, + SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x289B, SMSG_BAG_CLEANUP_FINISHED = 0x2DA7, - SMSG_BARBER_SHOP_RESULT = 0x26BA, - SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x2840, + SMSG_BARBER_SHOP_RESULT = 0x26B9, + SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x283E, SMSG_BATTLEFIELD_LIST = 0x2927, SMSG_BATTLEFIELD_PORT_DENIED = 0x292D, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2923, @@ -985,112 +987,110 @@ enum OpcodeServer : uint16 SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928, SMSG_BATTLEGROUND_POINTS = 0x2949, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x2785, - SMSG_BATTLENET_CHALLENGE_START = 0x2784, - SMSG_BATTLENET_NOTIFICATION = 0x2802, - SMSG_BATTLENET_RESPONSE = 0x2801, - SMSG_BATTLE_NET_CONNECTION_STATUS = 0x2803, - SMSG_BATTLE_PAY_ACK_FAILED = 0x277F, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2774, - SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2775, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x277E, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2772, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2771, - SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x2881, - SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x276F, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2770, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x276E, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276C, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x276D, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2773, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x277D, - SMSG_BATTLE_PAY_START_CHECKOUT = 0x281E, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x277B, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x277A, - SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2812, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x2783, + SMSG_BATTLENET_CHALLENGE_START = 0x2782, + SMSG_BATTLENET_NOTIFICATION = 0x2800, + SMSG_BATTLENET_RESPONSE = 0x27FF, + SMSG_BATTLE_NET_CONNECTION_STATUS = 0x2801, + 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_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x287F, + 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_START_CHECKOUT = 0x281C, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2779, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2778, + SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2810, SMSG_BATTLE_PETS_HEALED = 0x25F2, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2676, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2675, SMSG_BATTLE_PET_DELETED = 0x25EF, - SMSG_BATTLE_PET_ERROR = 0x2636, + SMSG_BATTLE_PET_ERROR = 0x2635, SMSG_BATTLE_PET_JOURNAL = 0x25EE, SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25EC, SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25ED, - SMSG_BATTLE_PET_LICENSE_CHANGED = 0x25F3, SMSG_BATTLE_PET_RESTORED = 0x25F1, SMSG_BATTLE_PET_REVOKED = 0x25F0, SMSG_BATTLE_PET_TRAP_LEVEL = 0x25EA, SMSG_BATTLE_PET_UPDATES = 0x25E9, SMSG_BIND_POINT_UPDATE = 0x257D, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2626, - SMSG_BLACK_MARKET_OUTBID = 0x2627, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2625, - SMSG_BLACK_MARKET_WON = 0x2628, - SMSG_BONUS_ROLL_EMPTY = 0x2643, + 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 = 0x294C, SMSG_BREAK_TARGET = 0x2937, SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, - SMSG_BROADCAST_SUMMON_CAST = 0x2842, - SMSG_BROADCAST_SUMMON_RESPONSE = 0x2843, - SMSG_BUY_FAILED = 0x26C3, - SMSG_BUY_SUCCEEDED = 0x26C2, + SMSG_BROADCAST_SUMMON_CAST = 0x2840, + SMSG_BROADCAST_SUMMON_RESPONSE = 0x2841, + SMSG_BUY_FAILED = 0x26C2, + SMSG_BUY_SUCCEEDED = 0x26C1, SMSG_CACHE_INFO = 0x291D, SMSG_CACHE_VERSION = 0x291C, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x269B, - SMSG_CALENDAR_COMMAND_RESULT = 0x269C, - SMSG_CALENDAR_COMMUNITY_INVITE = 0x268B, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2693, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2694, - SMSG_CALENDAR_INVITE_ADDED = 0x268C, - SMSG_CALENDAR_INVITE_ALERT = 0x2690, - SMSG_CALENDAR_INVITE_NOTES = 0x2695, - SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2696, - SMSG_CALENDAR_INVITE_REMOVED = 0x268D, - SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2692, - SMSG_CALENDAR_INVITE_STATUS = 0x268E, - SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2691, - SMSG_CALENDAR_MODERATOR_STATUS = 0x268F, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x2697, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x2698, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x2699, - SMSG_CALENDAR_SEND_CALENDAR = 0x2689, - SMSG_CALENDAR_SEND_EVENT = 0x268A, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x269A, - SMSG_CAMERA_EFFECT = 0x2720, - SMSG_CANCEL_AUTO_REPEAT = 0x26D9, + 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 = 0x271F, + SMSG_CANCEL_AUTO_REPEAT = 0x26D8, SMSG_CANCEL_COMBAT = 0x2946, - SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C49, + SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46, SMSG_CANCEL_PRELOAD_WORLD = 0x259A, - SMSG_CANCEL_SCENE = 0x2635, - SMSG_CANCEL_SPELL_VISUAL = 0x2C47, - SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C4B, + SMSG_CANCEL_SCENE = 0x2634, + SMSG_CANCEL_SPELL_VISUAL = 0x2C44, + SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48, SMSG_CAN_DUEL_RESULT = 0x2942, - SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2811, + SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x280F, SMSG_CAPTURE_POINT_REMOVED = 0x292A, - SMSG_CAST_FAILED = 0x2C5A, - SMSG_CATEGORY_COOLDOWN = 0x2C16, + SMSG_CAST_FAILED = 0x2C57, SMSG_CHAIN_MISSILE_BOUNCE = 0x25C8, - SMSG_CHALLENGE_MODE_COMPLETE = 0x260A, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260E, - SMSG_CHALLENGE_MODE_RESET = 0x2609, - SMSG_CHALLENGE_MODE_START = 0x2607, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2608, + SMSG_CHALLENGE_MODE_COMPLETE = 0x2609, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260D, + SMSG_CHALLENGE_MODE_RESET = 0x2608, + SMSG_CHALLENGE_MODE_START = 0x2606, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2607, SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3004, - SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x2804, + SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x2802, SMSG_CHANNEL_LIST = 0x2BC3, SMSG_CHANNEL_NOTIFY = 0x2BC0, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2, - SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27BB, - SMSG_CHARACTER_LOGIN_FAILED = 0x2700, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2783, - SMSG_CHARACTER_RENAME_RESULT = 0x275E, - SMSG_CHARACTER_UPGRADE_ABORTED = 0x27BA, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B9, - SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27BC, - SMSG_CHARACTER_UPGRADE_STARTED = 0x27B8, - SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26DD, - SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26DE, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A5, + SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27B9, + SMSG_CHARACTER_LOGIN_FAILED = 0x26FF, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2781, + SMSG_CHARACTER_RENAME_RESULT = 0x275C, + SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B8, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B7, + SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27BA, + SMSG_CHARACTER_UPGRADE_STARTED = 0x27B6, + SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26DC, + SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26DD, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A3, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x2BCA, @@ -1108,95 +1108,95 @@ enum OpcodeServer : uint16 SMSG_CHECK_ABANDON_NPE = 0x3018, SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2584, SMSG_CHECK_WARGAME_ENTRY = 0x2592, - SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x286C, - SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x2853, - SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27, + SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x286A, + SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x2851, + SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C24, SMSG_CLEAR_BOSS_EMOTES = 0x25BB, - SMSG_CLEAR_COOLDOWN = 0x26B7, - SMSG_CLEAR_COOLDOWNS = 0x2C26, + SMSG_CLEAR_COOLDOWN = 0x26B6, + SMSG_CLEAR_COOLDOWNS = 0x2C23, SMSG_CLEAR_RESURRECT = 0x257F, - SMSG_CLEAR_SPELL_CHARGES = 0x2C28, + SMSG_CLEAR_SPELL_CHARGES = 0x2C25, SMSG_CLEAR_TARGET = 0x2943, SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1, - SMSG_CLOSE_ARTIFACT_FORGE = 0x279D, - SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x284B, - SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x284E, - SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x284C, - SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2849, - SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x284D, - SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x284A, - SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x288F, - SMSG_COIN_REMOVED = 0x2615, + SMSG_CLOSE_ARTIFACT_FORGE = 0x279B, + SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2849, + SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x284C, + SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x284A, + SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2847, + SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x284B, + SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2848, + SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x288D, + SMSG_COIN_REMOVED = 0x2614, SMSG_COMBAT_EVENT_FAILED = 0x293A, - SMSG_COMMENTATOR_MAP_INFO = 0x2702, - SMSG_COMMENTATOR_PLAYER_INFO = 0x2703, - SMSG_COMMENTATOR_STATE_CHANGED = 0x2701, - SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27CD, - SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D9, - SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27CF, - SMSG_COMMERCE_TOKEN_UPDATE = 0x27CE, - SMSG_COMPLAINT_RESULT = 0x26A9, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2796, - SMSG_CONFIRM_PARTY_INVITE = 0x2810, + SMSG_COMMENTATOR_MAP_INFO = 0x2701, + SMSG_COMMENTATOR_PLAYER_INFO = 0x2702, + SMSG_COMMENTATOR_STATE_CHANGED = 0x2700, + SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27CB, + SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D7, + SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27CD, + SMSG_COMMERCE_TOKEN_UPDATE = 0x27CC, + SMSG_COMPLAINT_RESULT = 0x26A8, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2794, + SMSG_CONFIRM_PARTY_INVITE = 0x280E, SMSG_CONNECT_TO = 0x304D, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x2780, - SMSG_CONSOLE_WRITE = 0x2633, - SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27D5, - SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27D4, - SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27D3, - SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D7, - SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D8, - SMSG_CONTACT_LIST = 0x2781, - SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2817, - SMSG_CONTROL_UPDATE = 0x2645, - SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x2875, - SMSG_COOLDOWN_CHEAT = 0x2733, - SMSG_COOLDOWN_EVENT = 0x26B6, - SMSG_CORPSE_LOCATION = 0x264D, - SMSG_CORPSE_RECLAIM_DELAY = 0x2745, - SMSG_CORPSE_TRANSPORT_QUERY = 0x270D, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x277E, + SMSG_CONSOLE_WRITE = 0x2632, + SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27D3, + SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27D2, + SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27D1, + SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D5, + SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D6, + SMSG_CONTACT_LIST = 0x277F, + SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2815, + SMSG_CONTROL_UPDATE = 0x2644, + SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x2873, + SMSG_COOLDOWN_CHEAT = 0x2732, + SMSG_COOLDOWN_EVENT = 0x26B5, + SMSG_CORPSE_LOCATION = 0x264C, + SMSG_CORPSE_RECLAIM_DELAY = 0x2743, + SMSG_CORPSE_TRANSPORT_QUERY = 0x270C, SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3, - SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F9, - SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2876, - 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 = 0x26FC, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x2795, - SMSG_CREATOR_VISUALS_OVERRIDE = 0x28AA, - SMSG_CRITERIA_DELETED = 0x26E2, - SMSG_CRITERIA_UPDATE = 0x26DC, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BE, + SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F7, + SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2874, + SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x28A9, + SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x28A5, + SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x28A1, + SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x28A3, + SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x289F, + SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x28A4, + SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x28A0, + SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x28A7, + SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x28A2, + SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x28AA, + SMSG_CRAFT_ENCHANT_RESULT = 0x28A8, + SMSG_CREATE_CHAR = 0x26FB, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x2793, + SMSG_CREATOR_VISUALS_OVERRIDE = 0x28AD, + SMSG_CRITERIA_DELETED = 0x26E1, + SMSG_CRITERIA_UPDATE = 0x26DB, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26BD, SMSG_CUSTOM_LOAD_SCREEN = 0x25CB, SMSG_DAILY_QUESTS_RESET = 0x2A80, - SMSG_DAMAGE_CALC_LOG = 0x27C2, + SMSG_DAMAGE_CALC_LOG = 0x27C0, SMSG_DB_REPLY = 0x290E, - SMSG_DEATH_RELEASE_LOC = 0x26CF, - SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2653, + SMSG_DEATH_RELEASE_LOC = 0x26CE, + SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2652, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x26FD, + SMSG_DELETE_CHAR = 0x26FC, SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980, - SMSG_DESTROY_ARENA_UNIT = 0x273C, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F4, + SMSG_DESTROY_ARENA_UNIT = 0x273B, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F3, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258C, SMSG_DISENCHANT_CREDIT = 0x25A8, SMSG_DISMOUNT_RESULT = 0x257C, - SMSG_DISPEL_FAILED = 0x2C30, + SMSG_DISPEL_FAILED = 0x2C2D, SMSG_DISPLAY_GAME_ERROR = 0x25A1, SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC, - SMSG_DISPLAY_PROMOTION = 0x264A, + SMSG_DISPLAY_PROMOTION = 0x2649, SMSG_DISPLAY_QUEST_POPUP = 0x2A9E, - SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x287A, - SMSG_DISPLAY_TOAST = 0x2622, - SMSG_DISPLAY_WORLD_TEXT = 0x27EA, + SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2878, + SMSG_DISPLAY_TOAST = 0x2621, + SMSG_DISPLAY_WORLD_TEXT = 0x27E8, SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25E0, SMSG_DROP_NEW_CONNECTION = 0x304C, SMSG_DUEL_ARRANGED = 0x293C, @@ -1206,50 +1206,50 @@ enum OpcodeServer : uint16 SMSG_DUEL_OUT_OF_BOUNDS = 0x293D, SMSG_DUEL_REQUESTED = 0x293B, SMSG_DUEL_WINNER = 0x2941, - SMSG_DURABILITY_DAMAGE_DEATH = 0x2740, - SMSG_EMOTE = 0x27C3, - SMSG_ENABLE_BARBER_SHOP = 0x26B9, - SMSG_ENCHANTMENT_LOG = 0x270E, - SMSG_ENCOUNTER_END = 0x2779, - SMSG_ENCOUNTER_START = 0x2778, - SMSG_END_LIGHTNING_STORM = 0x26A6, - SMSG_ENSURE_WORLD_LOADED = 0x2889, + SMSG_DURABILITY_DAMAGE_DEATH = 0x273E, + SMSG_EMOTE = 0x27C1, + SMSG_ENABLE_BARBER_SHOP = 0x26B8, + SMSG_ENCHANTMENT_LOG = 0x270D, + SMSG_ENCOUNTER_END = 0x2777, + SMSG_ENCOUNTER_START = 0x2776, + SMSG_END_LIGHTNING_STORM = 0x26A5, + SMSG_ENSURE_WORLD_LOADED = 0x2887, SMSG_ENTER_ENCRYPTED_MODE = 0x3049, SMSG_ENUM_CHARACTERS_RESULT = 0x2583, - SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27EF, - SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21, - SMSG_EQUIPMENT_SET_ID = 0x26AF, + SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27ED, + SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C1E, + SMSG_EQUIPMENT_SET_ID = 0x26AE, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x275A, - SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x2873, - SMSG_FACTION_BONUS_INFO = 0x271F, + SMSG_EXPLORATION_EXPERIENCE = 0x2758, + SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x2871, + SMSG_FACTION_BONUS_INFO = 0x271E, SMSG_FAILED_PLAYER_CONDITION = 0x2FFA, - SMSG_FAILED_QUEST_TURN_IN = 0x280D, + SMSG_FAILED_QUEST_TURN_IN = 0x280B, SMSG_FEATURE_SYSTEM_STATUS = 0x25BF, SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25C0, - SMSG_FEIGN_DEATH_RESISTED = 0x273F, - SMSG_FISH_ESCAPED = 0x26CC, - SMSG_FISH_NOT_HOOKED = 0x26CB, + SMSG_FEIGN_DEATH_RESISTED = 0x273D, + SMSG_FISH_ESCAPED = 0x26CB, + SMSG_FISH_NOT_HOOKED = 0x26CA, SMSG_FLIGHT_SPLINE_SYNC = 0x2E2B, - SMSG_FORCED_DEATH_UPDATE = 0x26D0, - SMSG_FORCE_ANIM = 0x274C, - SMSG_FORCE_ANIMATIONS = 0x274D, - SMSG_FORCE_OBJECT_RELINK = 0x2649, - SMSG_FRIEND_STATUS = 0x2782, - SMSG_GAIN_MAW_POWER = 0x27DE, + SMSG_FORCED_DEATH_UPDATE = 0x26CF, + SMSG_FORCE_ANIM = 0x274A, + SMSG_FORCE_ANIMATIONS = 0x274B, + SMSG_FORCE_OBJECT_RELINK = 0x2648, + SMSG_FRIEND_STATUS = 0x2780, + SMSG_GAIN_MAW_POWER = 0x27DC, SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C3, - SMSG_GAME_OBJECT_BASE = 0x2824, - SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x288D, + SMSG_GAME_OBJECT_BASE = 0x2822, + SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x288B, SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C4, SMSG_GAME_OBJECT_DESPAWN = 0x25C5, - SMSG_GAME_OBJECT_INTERACTION = 0x288C, - SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4E, - SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4D, - SMSG_GAME_OBJECT_RESET_STATE = 0x2719, - SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x2800, - SMSG_GAME_SPEED_SET = 0x267F, - SMSG_GAME_TIME_SET = 0x2707, - SMSG_GAME_TIME_UPDATE = 0x2706, + SMSG_GAME_OBJECT_INTERACTION = 0x288A, + SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B, + SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A, + SMSG_GAME_OBJECT_RESET_STATE = 0x2718, + SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27FE, + SMSG_GAME_SPEED_SET = 0x267E, + SMSG_GAME_TIME_SET = 0x2706, + SMSG_GAME_TIME_UPDATE = 0x2705, SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982, SMSG_GARRISON_ADD_EVENT = 0x29A6, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974, @@ -1321,35 +1321,35 @@ enum OpcodeServer : uint16 SMSG_GARRISON_UPGRADE_RESULT = 0x296B, SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2585, - SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2818, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275C, + SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2816, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275A, SMSG_GET_GARRISON_INFO_RESULT = 0x295E, - SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2798, - SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D6, - SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27C0, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2797, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2793, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BF, - SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27EB, - SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27EC, + SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2796, + SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D4, + SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BE, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2795, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2791, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BD, + SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E9, + SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27EA, SMSG_GM_PLAYER_INFO = 0x3005, SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB, - SMSG_GM_TICKET_CASE_STATUS = 0x26A1, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x26A0, - SMSG_GOD_MODE = 0x26F7, + SMSG_GM_TICKET_CASE_STATUS = 0x26A0, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x269F, + SMSG_GOD_MODE = 0x26F6, SMSG_GOSSIP_COMPLETE = 0x2A97, SMSG_GOSSIP_MESSAGE = 0x2A98, SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA7, - SMSG_GOSSIP_POI = 0x2790, + SMSG_GOSSIP_POI = 0x278E, SMSG_GOSSIP_QUEST_UPDATE = 0x2A99, SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6, SMSG_GROUP_ACTION_THROTTLED = 0x2590, - SMSG_GROUP_AUTO_KICK = 0x278D, - SMSG_GROUP_DECLINE = 0x2789, - SMSG_GROUP_DESTROYED = 0x278C, - SMSG_GROUP_NEW_LEADER = 0x262B, - SMSG_GROUP_REQUEST_DECLINE = 0x278A, - SMSG_GROUP_UNINVITE = 0x278B, + SMSG_GROUP_AUTO_KICK = 0x278B, + SMSG_GROUP_DECLINE = 0x2787, + SMSG_GROUP_DESTROYED = 0x278A, + SMSG_GROUP_NEW_LEADER = 0x262A, + SMSG_GROUP_REQUEST_DECLINE = 0x2788, + SMSG_GROUP_UNINVITE = 0x2789, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1403,59 +1403,59 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26CD, - SMSG_HIGHEST_THREAT_UPDATE = 0x26D5, + SMSG_HEALTH_UPDATE = 0x26CC, + SMSG_HIGHEST_THREAT_UPDATE = 0x26D4, SMSG_HOTFIX_CONNECT = 0x2911, SMSG_HOTFIX_MESSAGE = 0x2910, - SMSG_INITIALIZE_FACTIONS = 0x271E, + SMSG_INITIALIZE_FACTIONS = 0x271D, SMSG_INITIAL_SETUP = 0x2580, - SMSG_INIT_WORLD_STATES = 0x2741, - SMSG_INSPECT_RESULT = 0x262F, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27AB, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27AA, - SMSG_INSTANCE_ENCOUNTER_END = 0x27B3, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A9, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B5, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B4, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27AE, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27AD, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B2, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B6, - SMSG_INSTANCE_ENCOUNTER_START = 0x27AF, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27AC, - SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27B1, - SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27B0, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F5, - SMSG_INSTANCE_INFO = 0x2632, - SMSG_INSTANCE_RESET = 0x2684, - SMSG_INSTANCE_RESET_FAILED = 0x2685, - SMSG_INSTANCE_SAVE_CREATED = 0x2777, - SMSG_INTERRUPT_POWER_REGEN = 0x2C5C, + SMSG_INIT_WORLD_STATES = 0x273F, + SMSG_INSPECT_RESULT = 0x262E, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27A9, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A8, + SMSG_INSTANCE_ENCOUNTER_END = 0x27B1, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A7, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B3, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B2, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27AC, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27AB, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B0, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B4, + SMSG_INSTANCE_ENCOUNTER_START = 0x27AD, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27AA, + SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27AF, + SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AE, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F4, + SMSG_INSTANCE_INFO = 0x2631, + SMSG_INSTANCE_RESET = 0x2683, + SMSG_INSTANCE_RESET_FAILED = 0x2684, + SMSG_INSTANCE_SAVE_CREATED = 0x2775, + SMSG_INTERRUPT_POWER_REGEN = 0x2C59, SMSG_INVALIDATE_PAGE_TEXT = 0x2918, SMSG_INVALIDATE_PLAYER = 0x2FFF, - SMSG_INVALID_PROMOTION_CODE = 0x274E, + SMSG_INVALID_PROMOTION_CODE = 0x274C, SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5, - SMSG_INVENTORY_FIXUP_COMPLETE = 0x280F, - SMSG_INVENTORY_FULL_OVERFLOW = 0x2820, - SMSG_ISLAND_AZERITE_GAIN = 0x2757, - SMSG_ISLAND_COMPLETE = 0x2758, + SMSG_INVENTORY_FIXUP_COMPLETE = 0x280D, + SMSG_INVENTORY_FULL_OVERFLOW = 0x281E, + SMSG_ISLAND_AZERITE_GAIN = 0x2755, + SMSG_ISLAND_COMPLETE = 0x2756, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84, - SMSG_ITEM_CHANGED = 0x26E6, - SMSG_ITEM_COOLDOWN = 0x27C1, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2750, + SMSG_ITEM_CHANGED = 0x26E5, + SMSG_ITEM_COOLDOWN = 0x27BF, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x274E, SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25A0, - SMSG_ITEM_INTERACTION_COMPLETE = 0x286B, + SMSG_ITEM_INTERACTION_COMPLETE = 0x2869, SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259E, - SMSG_ITEM_PUSH_RESULT = 0x2621, - SMSG_ITEM_TIME_UPDATE = 0x274F, - SMSG_KICK_REASON = 0x2687, - SMSG_LATENCY_REPORT_PING = 0x287D, - SMSG_LEARNED_SPELLS = 0x2C50, + SMSG_ITEM_PUSH_RESULT = 0x2620, + SMSG_ITEM_TIME_UPDATE = 0x274D, + SMSG_KICK_REASON = 0x2686, + SMSG_LATENCY_REPORT_PING = 0x287B, + SMSG_LEARNED_SPELLS = 0x2C4D, SMSG_LEARN_PVP_TALENT_FAILED = 0x25D4, SMSG_LEARN_TALENT_FAILED = 0x25D3, - SMSG_LEGACY_LOOT_RULES = 0x2825, - SMSG_LEVEL_LINKING_RESULT = 0x2851, - SMSG_LEVEL_UP_INFO = 0x26E4, + SMSG_LEGACY_LOOT_RULES = 0x2823, + SMSG_LEVEL_LINKING_RESULT = 0x284F, + SMSG_LEVEL_UP_INFO = 0x26E3, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B, @@ -1483,46 +1483,48 @@ enum OpcodeServer : uint16 SMSG_LFG_SLOT_INVALID = 0x2A30, SMSG_LFG_TELEPORT_DENIED = 0x2A32, SMSG_LFG_UPDATE_STATUS = 0x2A24, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x2769, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x2768, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275D, - SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x276A, + 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_LOAD_CUF_PROFILES = 0x25BC, - SMSG_LOAD_EQUIPMENT_SET = 0x2709, - SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x2891, - SMSG_LOGIN_SET_TIME_SPEED = 0x2708, + SMSG_LOAD_EQUIPMENT_SET = 0x2708, + SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x288F, + SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x2890, + SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x2891, + SMSG_LOGIN_SET_TIME_SPEED = 0x2707, SMSG_LOGIN_VERIFY_WORLD = 0x259B, - SMSG_LOGOUT_CANCEL_ACK = 0x2683, - SMSG_LOGOUT_COMPLETE = 0x2682, - SMSG_LOGOUT_RESPONSE = 0x2681, - SMSG_LOG_XP_GAIN = 0x26E0, - SMSG_LOOT_ALL_PASSED = 0x261F, - SMSG_LOOT_LIST = 0x273B, - SMSG_LOOT_MONEY_NOTIFY = 0x261A, - SMSG_LOOT_RELEASE = 0x2619, - SMSG_LOOT_RELEASE_ALL = 0x2618, - SMSG_LOOT_REMOVED = 0x2614, - SMSG_LOOT_RESPONSE = 0x2613, - SMSG_LOOT_ROLL = 0x261C, - SMSG_LOOT_ROLLS_COMPLETE = 0x261E, - SMSG_LOOT_ROLL_WON = 0x2620, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x266E, - SMSG_MAIL_COMMAND_RESULT = 0x2639, - SMSG_MAIL_LIST_RESULT = 0x2751, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2752, + SMSG_LOGOUT_CANCEL_ACK = 0x2682, + SMSG_LOGOUT_COMPLETE = 0x2681, + SMSG_LOGOUT_RESPONSE = 0x2680, + SMSG_LOG_XP_GAIN = 0x26DF, + SMSG_LOOT_ALL_PASSED = 0x261E, + SMSG_LOOT_LIST = 0x273A, + 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 = 0x274F, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2750, SMSG_MAP_OBJECTIVES_INIT = 0x294B, SMSG_MAP_OBJ_EVENTS = 0x25C6, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261D, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261C, SMSG_MEETING_STONE_FAILED = 0x2892, SMSG_MESSAGE_BOX = 0x2576, - SMSG_MINIMAP_PING = 0x26CA, + SMSG_MINIMAP_PING = 0x26C9, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, SMSG_MISSILE_CANCEL = 0x25C7, - SMSG_MODIFY_COOLDOWN = 0x275F, + SMSG_MODIFY_COOLDOWN = 0x275D, SMSG_MOTD = 0x2BAF, SMSG_MOUNT_RESULT = 0x257B, - SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x2841, + SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x283F, SMSG_MOVE_ADD_IMPULSE = 0x2E32, SMSG_MOVE_APPLY_INERTIA = 0x2E2E, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E15, @@ -1630,84 +1632,85 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_TELEPORT = 0x2DE1, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DDD, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DD8, - SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27DB, - SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27DA, - SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x260B, - SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260D, - SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x2610, - SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260C, + SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27D9, + SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D8, + SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x260A, + SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260C, + SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x260F, + SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260B, SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DB, - SMSG_NEW_TAXI_PATH = 0x267C, + SMSG_NEW_TAXI_PATH = 0x267B, SMSG_NEW_WORLD = 0x2598, - SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C46, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A8, + SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26A7, SMSG_NOTIFY_MONEY = 0x259D, - SMSG_NOTIFY_RECEIVED_MAIL = 0x263A, - SMSG_NPC_INTERACTION_OPEN_RESULT = 0x288B, - SMSG_OFFER_PETITION_ERROR = 0x26B3, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E1, + SMSG_NOTIFY_RECEIVED_MAIL = 0x2639, + SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2889, + SMSG_OFFER_PETITION_ERROR = 0x26B2, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E0, SMSG_ON_MONSTER_MOVE = 0x2DD4, - SMSG_OPEN_ARTIFACT_FORGE = 0x279C, + SMSG_OPEN_ARTIFACT_FORGE = 0x279A, SMSG_OPEN_CONTAINER = 0x2DA6, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2794, - SMSG_OVERRIDE_LIGHT = 0x26B8, - SMSG_PAGE_TEXT = 0x2714, - SMSG_PARTY_COMMAND_RESULT = 0x278E, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2792, + SMSG_OVERRIDE_LIGHT = 0x26B7, + SMSG_PAGE_TEXT = 0x2713, + SMSG_PARTY_COMMAND_RESULT = 0x278C, SMSG_PARTY_INVITE = 0x25BD, - SMSG_PARTY_KILL_LOG = 0x2755, - SMSG_PARTY_MEMBER_FULL_STATE = 0x2754, - SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2753, - SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x2871, - SMSG_PARTY_UPDATE = 0x25F4, + SMSG_PARTY_KILL_LOG = 0x2753, + SMSG_PARTY_MEMBER_FULL_STATE = 0x2752, + SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2751, + SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x286F, + SMSG_PARTY_UPDATE = 0x25F3, SMSG_PAST_TIME_EVENTS = 0x25C2, - SMSG_PAUSE_MIRROR_TIMER = 0x270B, - SMSG_PENDING_RAID_LOCK = 0x26F3, - SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2887, - SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x2883, - SMSG_PERKS_PROGRAM_DISABLED = 0x2888, - SMSG_PERKS_PROGRAM_RESULT = 0x2884, - SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x2882, + SMSG_PAUSE_MIRROR_TIMER = 0x270A, + SMSG_PENDING_RAID_LOCK = 0x26F2, + SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2885, + SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x2881, + SMSG_PERKS_PROGRAM_DISABLED = 0x2886, + SMSG_PERKS_PROGRAM_RESULT = 0x2882, + SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x2880, SMSG_PETITION_ALREADY_SIGNED = 0x25A3, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA, - SMSG_PETITION_SHOW_LIST = 0x26BB, - SMSG_PETITION_SHOW_SIGNATURES = 0x26BC, - SMSG_PETITION_SIGN_RESULTS = 0x2747, - SMSG_PET_ACTION_FEEDBACK = 0x2744, - SMSG_PET_ACTION_SOUND = 0x269E, + SMSG_PETITION_SHOW_LIST = 0x26BA, + SMSG_PETITION_SHOW_SIGNATURES = 0x26BB, + SMSG_PETITION_SIGN_RESULTS = 0x2745, + SMSG_PET_ACTION_FEEDBACK = 0x2742, + SMSG_PET_ACTION_SOUND = 0x269D, SMSG_PET_ADDED = 0x2595, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2602, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2673, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25FB, - SMSG_PET_BATTLE_FINAL_ROUND = 0x2600, - SMSG_PET_BATTLE_FINISHED = 0x2601, - SMSG_PET_BATTLE_FIRST_ROUND = 0x25FD, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25FC, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2603, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25FA, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2637, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2638, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FF, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F9, - SMSG_PET_BATTLE_ROUND_RESULT = 0x25FE, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2601, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2672, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25FA, + SMSG_PET_BATTLE_FINAL_ROUND = 0x25FF, + SMSG_PET_BATTLE_FINISHED = 0x2600, + SMSG_PET_BATTLE_FIRST_ROUND = 0x25FC, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25FB, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2602, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25F9, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2636, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x2637, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FE, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F8, + SMSG_PET_BATTLE_ROUND_RESULT = 0x25FD, SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EB, - SMSG_PET_CAST_FAILED = 0x2C5B, - SMSG_PET_CLEAR_SPELLS = 0x2C24, - SMSG_PET_DISMISS_SOUND = 0x269F, - SMSG_PET_GOD_MODE = 0x2679, - SMSG_PET_GUIDS = 0x26FF, - SMSG_PET_LEARNED_SPELLS = 0x2C52, + SMSG_PET_CAST_FAILED = 0x2C58, + SMSG_PET_CLEAR_SPELLS = 0x2C21, + SMSG_PET_DISMISS_SOUND = 0x269E, + SMSG_PET_GOD_MODE = 0x2678, + SMSG_PET_GUIDS = 0x26FE, + SMSG_PET_LEARNED_SPELLS = 0x2C4F, SMSG_PET_MODE = 0x258B, - SMSG_PET_NAME_INVALID = 0x26C0, + SMSG_PET_NAME_INVALID = 0x26BF, SMSG_PET_NEWLY_TAMED = 0x2589, SMSG_PET_SLOT_UPDATED = 0x258A, - SMSG_PET_SPELLS_MESSAGE = 0x2C25, + SMSG_PET_SPELLS_MESSAGE = 0x2C22, SMSG_PET_STABLE_LIST = 0x2596, SMSG_PET_STABLE_RESULT = 0x2597, - SMSG_PET_TAME_FAILURE = 0x26B0, - SMSG_PET_UNLEARNED_SPELLS = 0x2C53, + SMSG_PET_TAME_FAILURE = 0x26AF, + SMSG_PET_UNLEARNED_SPELLS = 0x2C50, SMSG_PHASE_SHIFT_CHANGE = 0x2578, - SMSG_PLAYED_TIME = 0x26D1, + SMSG_PLAYED_TIME = 0x26D0, + SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x3022, SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3014, SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3013, SMSG_PLAYER_BONUS_ROLL_FAILED = 0x3016, @@ -1715,41 +1718,44 @@ enum OpcodeServer : uint16 SMSG_PLAYER_CHOICE_CLEAR = 0x2FFE, SMSG_PLAYER_CHOICE_DISPLAY_ERROR = 0x2FFD, SMSG_PLAYER_CONDITION_RESULT = 0x300A, + SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x3021, SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x3009, SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x300E, SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F9, + SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x3020, SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x301E, + SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x301F, SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x3019, SMSG_PLAYER_SKINNED = 0x3006, SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300D, SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300C, - SMSG_PLAY_MUSIC = 0x2764, - SMSG_PLAY_OBJECT_SOUND = 0x2765, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272B, - SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C4A, - SMSG_PLAY_SCENE = 0x2634, - SMSG_PLAY_SOUND = 0x2763, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x2766, - SMSG_PLAY_SPELL_VISUAL = 0x2C48, - SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C4C, - SMSG_PLAY_TIME_WARNING = 0x26F9, + 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 = 0x2633, + 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_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26CE, + SMSG_POWER_UPDATE = 0x26CD, SMSG_PRELOAD_CHILD_MAP = 0x2579, SMSG_PRELOAD_WORLD = 0x2599, - SMSG_PREPOPULATE_NAME_CACHE = 0x2844, - SMSG_PRE_RESSURECT = 0x2762, + SMSG_PREPOPULATE_NAME_CACHE = 0x2842, + SMSG_PRE_RESSURECT = 0x2760, SMSG_PRINT_NOTIFICATION = 0x25CA, - SMSG_PROC_RESIST = 0x2756, - SMSG_PROFESSION_GOSSIP = 0x27FB, - SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C54, + SMSG_PROC_RESIST = 0x2754, + SMSG_PROFESSION_GOSSIP = 0x27F9, + SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51, SMSG_PVP_CREDIT = 0x2945, SMSG_PVP_MATCH_COMPLETE = 0x294F, SMSG_PVP_MATCH_INITIALIZE = 0x2950, SMSG_PVP_MATCH_START = 0x294E, SMSG_PVP_MATCH_STATISTICS = 0x2932, SMSG_PVP_OPTIONS_ENABLED = 0x2934, - SMSG_PVP_TIER_RECORD = 0x287E, + SMSG_PVP_TIER_RECORD = 0x287C, SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x291A, SMSG_QUERY_CREATURE_RESPONSE = 0x2914, SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2915, @@ -1765,7 +1771,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 = 0x26DF, + SMSG_QUERY_TIME_RESPONSE = 0x26DE, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F, SMSG_QUEST_FORCE_REMOVED = 0x2A9C, @@ -1784,78 +1790,79 @@ enum OpcodeServer : uint16 SMSG_QUEST_POI_QUERY_RESPONSE = 0x2A9D, SMSG_QUEST_POI_UPDATE_RESPONSE = 0x2A9F, SMSG_QUEST_PUSH_RESULT = 0x2A90, - SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2867, - SMSG_QUEST_SESSION_READY_CHECK = 0x2855, - SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2856, - SMSG_QUEST_SESSION_RESULT = 0x2854, + SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2865, + SMSG_QUEST_SESSION_READY_CHECK = 0x2853, + SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2854, + SMSG_QUEST_SESSION_RESULT = 0x2852, SMSG_QUEST_UPDATE_ADD_CREDIT = 0x2A8C, SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x2A8D, SMSG_QUEST_UPDATE_ADD_PVP_CREDIT = 0x2A8E, SMSG_QUEST_UPDATE_COMPLETE = 0x2A89, SMSG_QUEST_UPDATE_FAILED = 0x2A8A, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8B, - SMSG_QUEUE_SUMMARY_UPDATE = 0x280E, - SMSG_RAF_ACCOUNT_INFO = 0x2852, - SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x2863, - SMSG_RAID_DIFFICULTY_SET = 0x27A6, - SMSG_RAID_GROUP_ONLY = 0x27A8, + SMSG_QUEUE_SUMMARY_UPDATE = 0x280C, + SMSG_RAF_ACCOUNT_INFO = 0x2850, + SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x2861, + SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B7, + SMSG_RAID_DIFFICULTY_SET = 0x27A4, + SMSG_RAID_GROUP_ONLY = 0x27A6, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, SMSG_RAID_MARKERS_CHANGED = 0x25A4, - SMSG_RANDOM_ROLL = 0x262E, + SMSG_RANDOM_ROLL = 0x262D, SMSG_RATED_PVP_INFO = 0x2931, - SMSG_READY_CHECK_COMPLETED = 0x25F8, - SMSG_READY_CHECK_RESPONSE = 0x25F7, - SMSG_READY_CHECK_STARTED = 0x25F6, - SMSG_READ_ITEM_RESULT_FAILED = 0x27A2, - SMSG_READ_ITEM_RESULT_OK = 0x2799, - SMSG_REALM_LOOKUP_INFO = 0x27C6, + SMSG_READY_CHECK_COMPLETED = 0x25F7, + SMSG_READY_CHECK_RESPONSE = 0x25F6, + SMSG_READY_CHECK_STARTED = 0x25F5, + SMSG_READ_ITEM_RESULT_FAILED = 0x27A0, + SMSG_READ_ITEM_RESULT_OK = 0x2797, + SMSG_REALM_LOOKUP_INFO = 0x27C4, SMSG_REALM_QUERY_RESPONSE = 0x2913, - SMSG_REATTACH_RESURRECT = 0x2746, - SMSG_RECRAFT_ITEM_RESULT = 0x28A3, - SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BD, - SMSG_REFRESH_COMPONENT = 0x264F, - SMSG_REFRESH_SPELL_HISTORY = 0x2C2C, + SMSG_REATTACH_RESURRECT = 0x2744, + SMSG_RECRAFT_ITEM_RESULT = 0x28A6, + SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26BC, + SMSG_REFRESH_COMPONENT = 0x264E, + SMSG_REFRESH_SPELL_HISTORY = 0x2C29, SMSG_REMOVE_ITEM_PASSIVE = 0x25AC, - SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C55, - SMSG_REPLACE_TROPHY_RESPONSE = 0x27BE, + SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C52, + SMSG_REPLACE_TROPHY_RESPONSE = 0x27BC, SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x2591, SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2935, SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2936, SMSG_RESEARCH_COMPLETE = 0x2587, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26B4, - SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28A9, + SMSG_RESET_FAILED_NOTIFY = 0x26B3, + SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28AC, SMSG_RESET_QUEST_POI = 0x2AA0, SMSG_RESET_RANGED_COMBAT_TIMER = 0x2944, SMSG_RESET_WEEKLY_CURRENCY = 0x2575, - SMSG_RESPEC_WIPE_CONFIRM = 0x2611, + SMSG_RESPEC_WIPE_CONFIRM = 0x2610, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572, - SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x2885, - SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2886, - SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C64, + SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x2883, + SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2884, + SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C61, SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25B9, - SMSG_RESUME_CAST = 0x2C3E, - SMSG_RESUME_CAST_BAR = 0x2C41, + SMSG_RESUME_CAST = 0x2C3B, + SMSG_RESUME_CAST_BAR = 0x2C3E, SMSG_RESUME_COMMS = 0x304B, SMSG_RESUME_TOKEN = 0x25AA, SMSG_RESURRECT_REQUEST = 0x257E, - SMSG_RESYNC_RUNES = 0x2C62, - SMSG_RETURNING_PLAYER_PROMPT = 0x27A1, - SMSG_RETURN_APPLICANT_LIST = 0x2848, - SMSG_RETURN_RECRUITING_CLUBS = 0x2847, + SMSG_RESYNC_RUNES = 0x2C5F, + SMSG_RETURNING_PLAYER_PROMPT = 0x279F, + SMSG_RETURN_APPLICANT_LIST = 0x2846, + SMSG_RETURN_RECRUITING_CLUBS = 0x2845, SMSG_ROLE_CHANGED_INFORM = 0x258D, SMSG_ROLE_CHOSEN = 0x2A39, SMSG_ROLE_POLL_INFORM = 0x258E, - SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27FA, + SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F8, SMSG_RUNE_REGEN_DEBUG = 0x25B6, - SMSG_SCENARIO_COMPLETED = 0x27E8, - SMSG_SCENARIO_POIS = 0x2631, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x262A, - SMSG_SCENARIO_SHOW_CRITERIA = 0x27FE, - SMSG_SCENARIO_STATE = 0x2629, - SMSG_SCENARIO_UI_UPDATE = 0x27FD, - SMSG_SCENARIO_VACATE = 0x27A3, + SMSG_SCENARIO_COMPLETED = 0x27E6, + SMSG_SCENARIO_POIS = 0x2630, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x2629, + SMSG_SCENARIO_SHOW_CRITERIA = 0x27FC, + SMSG_SCENARIO_STATE = 0x2628, + SMSG_SCENARIO_UI_UPDATE = 0x27FB, + SMSG_SCENARIO_VACATE = 0x27A1, SMSG_SCENE_OBJECT_EVENT = 0x25E1, SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E6, SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E7, @@ -1863,178 +1870,176 @@ enum OpcodeServer : uint16 SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25E2, SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E5, SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E4, - SMSG_SCRIPT_CAST = 0x2C59, + SMSG_SCRIPT_CAST = 0x2C56, SMSG_SEASON_INFO = 0x25C1, - SMSG_SELL_RESPONSE = 0x26C1, + SMSG_SELL_RESPONSE = 0x26C0, SMSG_SEND_ITEM_PASSIVES = 0x25AD, - SMSG_SEND_KNOWN_SPELLS = 0x2C2A, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262C, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262D, - SMSG_SEND_SPELL_CHARGES = 0x2C2D, - SMSG_SEND_SPELL_HISTORY = 0x2C2B, - SMSG_SEND_UNLEARN_SPELLS = 0x2C2E, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264C, - SMSG_SERVER_TIME = 0x2680, - SMSG_SERVER_TIME_OFFSET = 0x270F, + SMSG_SEND_KNOWN_SPELLS = 0x2C27, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262B, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262C, + SMSG_SEND_SPELL_CHARGES = 0x2C2A, + SMSG_SEND_SPELL_HISTORY = 0x2C28, + SMSG_SEND_UNLEARN_SPELLS = 0x2C2B, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264B, + SMSG_SERVER_TIME = 0x267F, + SMSG_SERVER_TIME_OFFSET = 0x270E, SMSG_SETUP_CURRENCY = 0x2573, SMSG_SETUP_RESEARCH_HISTORY = 0x2586, - SMSG_SET_AI_ANIM_KIT = 0x272A, - SMSG_SET_ALL_TASK_PROGRESS = 0x2787, - SMSG_SET_ANIM_TIER = 0x272E, + SMSG_SET_AI_ANIM_KIT = 0x2729, + SMSG_SET_ALL_TASK_PROGRESS = 0x2785, + SMSG_SET_ANIM_TIER = 0x272D, SMSG_SET_CHR_UPGRADE_TIER = 0x25DE, SMSG_SET_CURRENCY = 0x2574, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x26A2, - 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 = 0x2C39, - SMSG_SET_FORCED_REACTIONS = 0x2718, + SMSG_SET_DUNGEON_DIFFICULTY = 0x26A1, + 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_ITEM_PURCHASE_DATA = 0x259F, - SMSG_SET_LOOT_METHOD_FAILED = 0x27CC, + SMSG_SET_LOOT_METHOD_FAILED = 0x27CA, SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25A2, - SMSG_SET_MELEE_ANIM_KIT = 0x272D, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x272C, - SMSG_SET_PCT_SPELL_MODIFIER = 0x2C3A, - SMSG_SET_PET_SPECIALIZATION = 0x2623, + SMSG_SET_MELEE_ANIM_KIT = 0x272C, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x272B, + SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37, + SMSG_SET_PET_SPECIALIZATION = 0x2622, SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3003, SMSG_SET_PLAY_HOVER_ANIM = 0x25BA, - SMSG_SET_PROFICIENCY = 0x272F, - SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x285B, + SMSG_SET_PROFICIENCY = 0x272E, + SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2859, SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2998, - SMSG_SET_SPELL_CHARGES = 0x2C29, - SMSG_SET_TASK_COMPLETE = 0x2788, - SMSG_SET_TIME_ZONE_INFORMATION = 0x2675, - SMSG_SET_VEHICLE_REC_ID = 0x26F2, - SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x288A, + SMSG_SET_SPELL_CHARGES = 0x2C26, + SMSG_SET_TASK_COMPLETE = 0x2786, + SMSG_SET_TIME_ZONE_INFORMATION = 0x2674, + SMSG_SET_VEHICLE_REC_ID = 0x26F1, + SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2888, SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2999, SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25DA, SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95, - SMSG_SHOW_TAXI_NODES = 0x26C9, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x276B, + SMSG_SHOW_TAXI_NODES = 0x26C8, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2769, SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x2893, - SMSG_SOCKET_GEMS_FAILURE = 0x2722, - SMSG_SOCKET_GEMS_SUCCESS = 0x2721, - SMSG_SPECIAL_MOUNT_ANIM = 0x269D, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2713, - SMSG_SPELL_ABSORB_LOG = 0x2C1F, - SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17, - SMSG_SPELL_CHANNEL_START = 0x2C34, - SMSG_SPELL_CHANNEL_UPDATE = 0x2C35, + SMSG_SOCKET_GEMS_FAILURE = 0x2721, + SMSG_SOCKET_GEMS_SUCCESS = 0x2720, + SMSG_SPECIAL_MOUNT_ANIM = 0x269C, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2712, + SMSG_SPELL_ABSORB_LOG = 0x2C1C, + SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C16, + SMSG_SPELL_CHANNEL_START = 0x2C31, + SMSG_SPELL_CHANNEL_UPDATE = 0x2C32, SMSG_SPELL_COOLDOWN = 0x2C15, - SMSG_SPELL_DAMAGE_SHIELD = 0x2C31, - SMSG_SPELL_DELAYED = 0x2C42, - SMSG_SPELL_DISPELL_LOG = 0x2C1A, - SMSG_SPELL_EMPOWER_SET_STAGE = 0x2C38, - SMSG_SPELL_EMPOWER_START = 0x2C36, - SMSG_SPELL_EMPOWER_UPDATE = 0x2C37, - SMSG_SPELL_ENERGIZE_LOG = 0x2C1C, - SMSG_SPELL_EXECUTE_LOG = 0x2C43, - SMSG_SPELL_FAILED_OTHER = 0x2C58, - SMSG_SPELL_FAILURE = 0x2C56, - SMSG_SPELL_FAILURE_MESSAGE = 0x2C5D, - SMSG_SPELL_GO = 0x2C3C, - SMSG_SPELL_HEAL_ABSORB_LOG = 0x2C1E, - SMSG_SPELL_HEAL_LOG = 0x2C1D, - SMSG_SPELL_INSTAKILL_LOG = 0x2C33, - SMSG_SPELL_INTERRUPT_LOG = 0x2C20, - SMSG_SPELL_MISS_LOG = 0x2C44, - SMSG_SPELL_NON_MELEE_DAMAGE_LOG = 0x2C32, - SMSG_SPELL_OR_DAMAGE_IMMUNE = 0x2C2F, - SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C1B, - SMSG_SPELL_PREPARE = 0x2C3B, - SMSG_SPELL_START = 0x2C3D, + SMSG_SPELL_DAMAGE_SHIELD = 0x2C2E, + SMSG_SPELL_DELAYED = 0x2C3F, + SMSG_SPELL_DISPELL_LOG = 0x2C17, + SMSG_SPELL_EMPOWER_SET_STAGE = 0x2C35, + SMSG_SPELL_EMPOWER_START = 0x2C33, + SMSG_SPELL_EMPOWER_UPDATE = 0x2C34, + 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_HEAL_ABSORB_LOG = 0x2C1B, + SMSG_SPELL_HEAL_LOG = 0x2C1A, + SMSG_SPELL_INSTAKILL_LOG = 0x2C30, + 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_PERIODIC_AURA_LOG = 0x2C18, + SMSG_SPELL_PREPARE = 0x2C38, + SMSG_SPELL_START = 0x2C3A, SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CC, - SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x286D, - SMSG_STAND_STATE_UPDATE = 0x2717, + SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x286B, + SMSG_STAND_STATE_UPDATE = 0x2716, SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D2, - SMSG_START_ELAPSED_TIMER = 0x2604, - SMSG_START_ELAPSED_TIMERS = 0x2606, - SMSG_START_LIGHTNING_STORM = 0x26A5, - SMSG_START_LOOT_ROLL = 0x261B, - SMSG_START_MIRROR_TIMER = 0x270A, + SMSG_START_ELAPSED_TIMER = 0x2603, + SMSG_START_ELAPSED_TIMERS = 0x2605, + SMSG_START_LIGHTNING_STORM = 0x26A4, + SMSG_START_LOOT_ROLL = 0x261A, + SMSG_START_MIRROR_TIMER = 0x2709, SMSG_START_TIMER = 0x25A6, - SMSG_STOP_ELAPSED_TIMER = 0x2605, - SMSG_STOP_MIRROR_TIMER = 0x270C, - SMSG_STOP_SPEAKERBOT_SOUND = 0x2767, + SMSG_STOP_ELAPSED_TIMER = 0x2604, + SMSG_STOP_MIRROR_TIMER = 0x270B, + SMSG_STOP_SPEAKERBOT_SOUND = 0x2765, SMSG_STOP_TIMER = 0x25A7, SMSG_STREAMING_MOVIES = 0x25A5, - SMSG_SUGGEST_INVITE_INFORM = 0x278F, - SMSG_SUMMON_CANCEL = 0x26AE, + SMSG_SUGGEST_INVITE_INFORM = 0x278D, + SMSG_SUMMON_CANCEL = 0x26AD, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258F, - SMSG_SUMMON_REQUEST = 0x271C, - SMSG_SUPERCEDED_SPELLS = 0x2C4F, + SMSG_SUMMON_REQUEST = 0x271B, + SMSG_SUPERCEDED_SPELLS = 0x2C4C, SMSG_SUSPEND_COMMS = 0x304A, SMSG_SUSPEND_TOKEN = 0x25A9, - SMSG_SYNC_WOW_ENTITLEMENTS = 0x2865, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2712, - SMSG_TAXI_NODE_STATUS = 0x267A, - SMSG_TEXT_EMOTE = 0x2678, - SMSG_THREAT_CLEAR = 0x26D8, - SMSG_THREAT_REMOVE = 0x26D7, - SMSG_THREAT_UPDATE = 0x26D6, + SMSG_SYNC_WOW_ENTITLEMENTS = 0x2863, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2711, + SMSG_TAXI_NODE_STATUS = 0x2679, + SMSG_TEXT_EMOTE = 0x2677, + SMSG_THREAT_CLEAR = 0x26D7, + SMSG_THREAT_REMOVE = 0x26D6, + SMSG_THREAT_UPDATE = 0x26D5, SMSG_TIME_ADJUSTMENT = 0x2DD3, SMSG_TIME_SYNC_REQUEST = 0x2DD2, - SMSG_TITLE_EARNED = 0x26D3, - SMSG_TITLE_LOST = 0x26D4, - SMSG_TOTEM_CREATED = 0x26C4, - SMSG_TOTEM_DURATION_CHANGED = 0x26C5, - SMSG_TOTEM_MOVED = 0x26C6, + SMSG_TITLE_EARNED = 0x26D2, + SMSG_TITLE_LOST = 0x26D3, + SMSG_TOTEM_CREATED = 0x26C3, + SMSG_TOTEM_DURATION_CHANGED = 0x26C4, + SMSG_TOTEM_MOVED = 0x26C5, SMSG_TRADE_STATUS = 0x2582, SMSG_TRADE_UPDATED = 0x2581, - SMSG_TRAINER_BUY_FAILED = 0x26DB, - SMSG_TRAINER_LIST = 0x26DA, + SMSG_TRAINER_BUY_FAILED = 0x26DA, + SMSG_TRAINER_LIST = 0x26D9, SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D1, - SMSG_TRANSFER_ABORTED = 0x26FE, + SMSG_TRANSFER_ABORTED = 0x26FD, SMSG_TRANSFER_PENDING = 0x25CD, SMSG_TREASURE_PICKER_RESPONSE = 0x291F, - SMSG_TRIGGER_CINEMATIC = 0x27C4, - SMSG_TRIGGER_MOVIE = 0x26C7, - SMSG_TURN_IN_PETITION_RESULT = 0x2749, - SMSG_TUTORIAL_FLAGS = 0x27B7, - SMSG_UI_HEALING_RANGE_MODIFIED = 0x273E, + SMSG_TRIGGER_CINEMATIC = 0x27C2, + SMSG_TRIGGER_MOVIE = 0x26C6, + SMSG_TURN_IN_PETITION_RESULT = 0x2747, + SMSG_TUTORIAL_FLAGS = 0x27B5, SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C7, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C8, - SMSG_UNLEARNED_SPELLS = 0x2C51, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C5, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C6, + SMSG_UNLEARNED_SPELLS = 0x2C4E, SMSG_UNLOAD_CHILD_MAP = 0x257A, - SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x287F, - SMSG_UPDATE_ACCOUNT_DATA = 0x2704, + SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x287D, + SMSG_UPDATE_ACCOUNT_DATA = 0x2703, SMSG_UPDATE_ACTION_BUTTONS = 0x25DF, - SMSG_UPDATE_BNET_SESSION_KEY = 0x281F, + SMSG_UPDATE_BNET_SESSION_KEY = 0x281D, SMSG_UPDATE_CAPTURE_POINT = 0x2929, - SMSG_UPDATE_CELESTIAL_BODY = 0x281B, - SMSG_UPDATE_CHARACTER_FLAGS = 0x27BD, - SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2761, - SMSG_UPDATE_COOLDOWN = 0x2760, + SMSG_UPDATE_CELESTIAL_BODY = 0x2819, + SMSG_UPDATE_CHARACTER_FLAGS = 0x27BB, + SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x275F, + SMSG_UPDATE_COOLDOWN = 0x275E, SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2996, SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F, - SMSG_UPDATE_EXPANSION_LEVEL = 0x2644, - SMSG_UPDATE_GAME_TIME_STATE = 0x2822, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A7, - SMSG_UPDATE_LAST_INSTANCE = 0x2686, - SMSG_UPDATE_OBJECT = 0x27C5, + SMSG_UPDATE_EXPANSION_LEVEL = 0x2643, + SMSG_UPDATE_GAME_TIME_STATE = 0x2820, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26A6, + SMSG_UPDATE_LAST_INSTANCE = 0x2685, + SMSG_UPDATE_OBJECT = 0x27C3, SMSG_UPDATE_PRIMARY_SPEC = 0x25D7, - SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F5, + SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F4, SMSG_UPDATE_TALENT_DATA = 0x25D6, - SMSG_UPDATE_TASK_PROGRESS = 0x2786, - SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19, - SMSG_UPDATE_WORLD_STATE = 0x2743, + SMSG_UPDATE_TASK_PROGRESS = 0x2784, + SMSG_UPDATE_WORLD_STATE = 0x2741, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x274A, - SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2816, - SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2814, - SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2813, - SMSG_VAS_PURCHASE_COMPLETE = 0x27EE, - SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27ED, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x2748, + SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2814, + SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2812, + SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2811, + SMSG_VAS_PURCHASE_COMPLETE = 0x27EC, + SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27EB, SMSG_VENDOR_INVENTORY = 0x25B8, SMSG_VIGNETTE_UPDATE = 0x3008, - SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x281A, - SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2879, - SMSG_VOICE_LOGIN_RESPONSE = 0x2819, + SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2818, + SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2877, + SMSG_VOICE_LOGIN_RESPONSE = 0x2817, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x2DA4, SMSG_VOID_STORAGE_CONTENTS = 0x2DA1, SMSG_VOID_STORAGE_FAILED = 0x2DA0, @@ -2043,24 +2048,23 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256F, SMSG_WAIT_QUEUE_UPDATE = 0x256E, SMSG_WARDEN3_DATA = 0x2577, - SMSG_WARDEN3_DISABLED = 0x281D, - SMSG_WARDEN3_ENABLED = 0x281C, - SMSG_WARFRONT_COMPLETE = 0x2759, + SMSG_WARDEN3_DISABLED = 0x281B, + SMSG_WARDEN3_ENABLED = 0x281A, + SMSG_WARFRONT_COMPLETE = 0x2757, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2933, - SMSG_WEATHER = 0x26A4, - SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x2870, - SMSG_WEEKLY_REWARDS_RESULT = 0x286E, - SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x286F, - SMSG_WEEKLY_SPELL_USAGE = 0x2C18, + SMSG_WEATHER = 0x26A3, + SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x286E, + SMSG_WEEKLY_REWARDS_RESULT = 0x286C, + SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x286D, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x26A3, - SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2821, + SMSG_WHO_IS = 0x26A2, + SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x281F, SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x300F, SMSG_WORLD_SERVER_INFO = 0x25AE, - SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2866, - SMSG_XP_AWARDED_FROM_CURRENCY = 0x28A8, + SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2864, + SMSG_XP_AWARDED_FROM_CURRENCY = 0x28AB, SMSG_XP_GAIN_ABORTED = 0x25C9, - SMSG_XP_GAIN_ENABLED = 0x27A7, + SMSG_XP_GAIN_ENABLED = 0x27A5, 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 146f2614d07..6b31ed0edd8 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -708,7 +708,6 @@ namespace WorldPackets class CancelMountAura; class CancelModSpeedNoControlAuras; class PetCancelAura; - class RequestCategoryCooldowns; class CancelCast; class CastSpell; class PetCastSpell; @@ -1733,7 +1732,6 @@ class TC_GAME_API WorldSession void HandleViolenceLevel(WorldPackets::Misc::ViolenceLevel& violenceLevel); void HandleObjectUpdateFailedOpcode(WorldPackets::Misc::ObjectUpdateFailed& objectUpdateFailed); void HandleObjectUpdateRescuedOpcode(WorldPackets::Misc::ObjectUpdateRescued& objectUpdateRescued); - void HandleRequestCategoryCooldowns(WorldPackets::Spells::RequestCategoryCooldowns& requestCategoryCooldowns); void HandleCloseInteraction(WorldPackets::Misc::CloseInteraction& closeInteraction); void HandleConversationLineStarted(WorldPackets::Misc::ConversationLineStarted& conversationLineStarted); void HandleKeyboundOverride(WorldPackets::Spells::KeyboundOverride& keyboundOverride); diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index 466c481ff96..b4099bf51a9 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -627,6 +627,7 @@ enum AuraType : uint32 SPELL_AURA_DISABLE_NAVIGATION = 533, // disables map pins SPELL_AURA_534 = 534, SPELL_AURA_535 = 535, // related to profession equipment; NYI; MiscValue[0] = Profession (enum, not id) + SPELL_AURA_IGNORE_SPELL_CREATURE_TYPE_REQUIREMENTS = 536, TOTAL_AURAS }; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index b58ece3fd90..2a205b09882 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -603,6 +603,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNULL, //533 SPELL_AURA_DISABLE_NAVIGATION &AuraEffect::HandleNULL, //534 &AuraEffect::HandleNULL, //535 + &AuraEffect::HandleNoImmediateEffect, //536 SPELL_AURA_IGNORE_SPELL_CREATURE_TYPE_REQUIREMENTS implemented in SpellInfo::CheckTargetCreatureType }; AuraEffect::AuraEffect(Aura* base, SpellEffectInfo const& spellEfffectInfo, int32 const* baseAmount, Unit* caster) : @@ -5964,13 +5965,19 @@ void AuraEffect::HandleEnableAltPower(AuraApplication const* aurApp, uint8 mode, aurApp->GetTarget()->SetMaxPower(POWER_ALTERNATE_POWER, 0); } -void AuraEffect::HandleModSpellCategoryCooldown(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const +void AuraEffect::HandleModSpellCategoryCooldown(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & AURA_EFFECT_HANDLE_REAL)) return; - if (Player* player = aurApp->GetTarget()->ToPlayer()) - player->SendSpellCategoryCooldowns(); + Player* target = aurApp->GetTarget()->ToPlayer(); + if (!target) + return; + + if (apply) + target->AddSpellCategoryCooldownMod(GetMiscValue(), GetAmount()); + else + target->RemoveSpellCategoryCooldownMod(GetMiscValue(), GetAmount()); } void AuraEffect::HandleShowConfirmationPrompt(AuraApplication const* aurApp, uint8 mode, bool apply) const diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index faa646e3de2..9342c8956a1 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -310,7 +310,6 @@ class TC_GAME_API AuraEffect void HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraSetVehicle(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandlePreventResurrection(AuraApplication const* aurApp, uint8 mode, bool apply) const; - void HandleAbsorbOverkill(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleMastery(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraForceWeather(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleEnableAltPower(AuraApplication const* aurApp, uint8 mode, bool apply) const; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index c50847c70e2..3b2a7b6de94 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -394,6 +394,14 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF &Spell::EffectChangeActiveCombatTraitConfig, //304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG &Spell::EffectNULL, //305 SPELL_EFFECT_305 &Spell::EffectNULL, //306 SPELL_EFFECT_306 + &Spell::EffectNULL, //307 SPELL_EFFECT_307 + &Spell::EffectNULL, //308 SPELL_EFFECT_CANCEL_PRELOAD_WORLD + &Spell::EffectNULL, //309 SPELL_EFFECT_PRELOAD_WORLD + &Spell::EffectNULL, //310 SPELL_EFFECT_310 + &Spell::EffectNULL, //311 SPELL_EFFECT_ENSURE_WORLD_LOADED + &Spell::EffectNULL, //312 SPELL_EFFECT_312 + &Spell::EffectNULL, //313 SPELL_EFFECT_CHANGE_ITEM_BONUSES_2 + &Spell::EffectNULL, //314 SPELL_EFFECT_ADD_SOCKET_BONUS }; void Spell::EffectNULL() diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 1bfafeb23be..cf9c1fa9997 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1134,6 +1134,14 @@ std::array<SpellEffectInfo::StaticData, TOTAL_SPELL_EFFECTS> SpellEffectInfo::_d {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 305 SPELL_EFFECT_305 {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 306 SPELL_EFFECT_306 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 307 SPELL_EFFECT_307 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 308 SPELL_EFFECT_308 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 309 SPELL_EFFECT_309 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 310 SPELL_EFFECT_310 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 311 SPELL_EFFECT_311 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 312 SPELL_EFFECT_312 + {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_ITEM}, // 313 SPELL_EFFECT_313 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 314 SPELL_EFFECT_314 } }; SpellInfo::SpellInfo(SpellNameEntry const* spellName, ::Difficulty difficulty, SpellInfoLoadHelper const& data) @@ -2400,7 +2408,7 @@ bool SpellInfo::CheckTargetCreatureType(Unit const* target) const return true; uint32 creatureType = target->GetCreatureTypeMask(); - return !TargetCreatureType || !creatureType || (creatureType & TargetCreatureType); + return !TargetCreatureType || !creatureType || (creatureType & TargetCreatureType) || target->HasAuraType(SPELL_AURA_IGNORE_SPELL_CREATURE_TYPE_REQUIREMENTS); } SpellSchoolMask SpellInfo::GetSchoolMask() const diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index e29869123c4..ef1c02468f7 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -1218,7 +1218,7 @@ bool ExtractDB2File(uint32 fileDataId, char const* cascFileName, int locale, boo { DB2SectionHeader sectionHeader = db2.GetSectionHeader(i); if (sectionHeader.TactId && CascStorage->HasTactKey(sectionHeader.TactId)) - sectionHeader.TactId = 0; + sectionHeader.TactId = DUMMY_KNOWN_TACT_ID; posAfterHeaders += fwrite(§ionHeader, 1, sizeof(sectionHeader), output); } diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h index 6cfca9124a9..c938aedd563 100644 --- a/src/tools/map_extractor/loadlib/DBFilesClientList.h +++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h @@ -28,6 +28,8 @@ DB2FileInfo const DBFilesClientList[] = { { 1260179, "Achievement.db2" }, { 1324299, "Achievement_Category.db2" }, + { 4572795, "ActionBarGroup.db2" }, + { 4572797, "ActionBarGroupEntry.db2" }, { 1115949, "AdventureJournal.db2" }, { 1267070, "AdventureMapPOI.db2" }, { 1710672, "AlliedRace.db2" }, @@ -108,6 +110,7 @@ DB2FileInfo const DBFilesClientList[] = { 801584, "BattlePetVisual.db2" }, { 1360265, "BattlemasterList.db2" }, { 1525607, "BeamEffect.db2" }, + { 3491563, "BeckonTrigger.db2" }, { 1467254, "BoneWindModifierModel.db2" }, { 1416756, "BoneWindModifiers.db2" }, { 1983274, "BonusRoll.db2" }, @@ -136,7 +139,9 @@ DB2FileInfo const DBFilesClientList[] = { 972425, "CharShipment.db2" }, { 972405, "CharShipmentContainer.db2" }, { 3055696, "CharStartKit.db2" }, + { 1237591, "CharStartOutfit.db2" }, { 1349054, "CharTitles.db2" }, + { 1028733, "CharacterFaceBoneSet.db2" }, { 1369752, "CharacterFacialHairStyles.db2" }, { 1344281, "CharacterLoadout.db2" }, { 1302846, "CharacterLoadoutItem.db2" }, @@ -218,6 +223,7 @@ DB2FileInfo const DBFilesClientList[] = { 4373538, "CraftingQuality.db2" }, { 4541803, "CraftingReagentEffect.db2" }, { 4382197, "CraftingReagentQuality.db2" }, + { 5049814, "CraftingReagentRequirement.db2" }, { 841631, "Creature.db2" }, { 879282, "CreatureDifficulty.db2" }, { 4044373, "CreatureDifficultyTreasure.db2" }, @@ -287,6 +293,7 @@ DB2FileInfo const DBFilesClientList[] = { 1278178, "GMSurveyQuestions.db2" }, { 1283020, "GMSurveySurveys.db2" }, { 2922072, "GameClockDebug.db2" }, + { 5008306, "GameMode.db2" }, { 3565753, "GameObjectAnimGroupMember.db2" }, { 1266737, "GameObjectArtKit.db2" }, { 1302847, "GameObjectDiffAnimMap.db2" }, @@ -411,12 +418,16 @@ DB2FileInfo const DBFilesClientList[] = { 3025306, "ItemBonusListGroupEntry.db2" }, { 1320358, "ItemBonusListLevelDelta.db2" }, { 2924997, "ItemBonusListWarforgeLevelDelta.db2" }, + { 5155639, "ItemBonusSeason.db2" }, + { 5155640, "ItemBonusSeasonBonusListGroup.db2" }, + { 5155641, "ItemBonusSeasonUpgradeCost.db2" }, { 3026822, "ItemBonusSequenceSpell.db2" }, { 3055768, "ItemBonusTree.db2" }, { 4407505, "ItemBonusTreeGroupEntry.db2" }, { 987134, "ItemBonusTreeNode.db2" }, { 1247926, "ItemChildEquipment.db2" }, { 1140189, "ItemClass.db2" }, + { 5128111, "ItemCondition.db2" }, { 1405665, "ItemContextPickerEntry.db2" }, { 4337196, "ItemConversion.db2" }, { 4337197, "ItemConversionEntry.db2" }, @@ -434,6 +445,8 @@ DB2FileInfo const DBFilesClientList[] = { 969941, "ItemEffect.db2" }, { 801681, "ItemExtendedCost.db2" }, { 2358574, "ItemFallbackVisual.db2" }, + { 5152256, "ItemFixup.db2" }, + { 5015219, "ItemGroupIlvlScalingEntry.db2" }, { 1283023, "ItemGroupSounds.db2" }, { 1588911, "ItemLevelSelector.db2" }, { 1624937, "ItemLevelSelectorQuality.db2" }, @@ -449,6 +462,7 @@ DB2FileInfo const DBFilesClientList[] = { 1302240, "ItemPetFood.db2" }, { 1121231, "ItemPriceBase.db2" }, { 1270315, "ItemRangedDisplayInfo.db2" }, + { 5150118, "ItemRecraft.db2" }, { 4548446, "ItemSalvage.db2" }, { 4549058, "ItemSalvageLoot.db2" }, { 1273408, "ItemSearchName.db2" }, @@ -494,6 +508,7 @@ DB2FileInfo const DBFilesClientList[] = { 1371380, "LiquidType.db2" }, { 2261065, "LiquidTypeXTexture.db2" }, { 4276965, "LivingWorldObjectTemplate.db2" }, + { 4276966, "LivingWorldObjectTemplateModel.db2" }, { 2478235, "LoadingScreenSkin.db2" }, { 1302239, "LoadingScreenTaxiSplines.db2" }, { 1266541, "LoadingScreens.db2" }, @@ -513,6 +528,7 @@ DB2FileInfo const DBFilesClientList[] = { 1375801, "ManifestInterfaceData.db2" }, { 1375804, "ManifestInterfaceItemIcon.db2" }, { 1267335, "ManifestInterfaceTOCData.db2" }, + { 1375802, "ManifestMP3.db2" }, { 1349477, "Map.db2" }, { 1597466, "MapCelestialBody.db2" }, { 801709, "MapChallengeMode.db2" }, @@ -759,6 +775,7 @@ DB2FileInfo const DBFilesClientList[] = { 1001907, "SpellLearnSpell.db2" }, { 1140079, "SpellLevels.db2" }, { 1014438, "SpellMechanic.db2" }, + { 3549053, "SpellMemorizeCost.db2" }, { 1003144, "SpellMisc.db2" }, { 897956, "SpellMissile.db2" }, { 897955, "SpellMissileMotion.db2" }, @@ -853,6 +870,7 @@ DB2FileInfo const DBFilesClientList[] = { 1121973, "TransportPhysics.db2" }, { 1140687, "TransportRotation.db2" }, { 975024, "Trophy.db2" }, + { 5011999, "UIArrowCallout.db2" }, { 3488582, "UIChromieTimeExpansionInfo.db2" }, { 3502042, "UICovenantAbility.db2" }, { 3502043, "UICovenantPreview.db2" }, |