aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
committerShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
commite59eef5432c7b70679d33f4911c88d0f7d75fd39 (patch)
treefe9bce9c82496589facec3719b3f2943d8295e76
parent7fb9168d57f378075b0f6692ea7ad822c1d8e43d (diff)
Core/PacketIO: Updated to 11.0.0
-rw-r--r--sql/base/characters_database.sql4
-rw-r--r--sql/updates/characters/master/2024_07_31_00_characters.sql5
-rw-r--r--sql/updates/world/master/2024_07_31_00_world.sql15
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp3
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.h1
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.cpp2
-rw-r--r--src/server/game/AuctionHouse/AuctionHouseMgr.h11
-rw-r--r--src/server/game/DataStores/DBCEnums.h5
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp4
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp2
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp14
-rw-r--r--src/server/game/Entities/Creature/GossipDef.h8
-rw-r--r--src/server/game/Entities/GameObject/GameObjectData.h108
-rw-r--r--src/server/game/Entities/Item/Container/Bag.h4
-rw-r--r--src/server/game/Entities/Item/ItemDefines.h8
-rw-r--r--src/server/game/Entities/Object/Object.cpp2
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.h53
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp1472
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h737
-rw-r--r--src/server/game/Entities/Object/Updates/ViewerDependentValues.h36
-rw-r--r--src/server/game/Entities/Player/Player.cpp71
-rw-r--r--src/server/game/Entities/Player/Player.h21
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp41
-rw-r--r--src/server/game/Entities/Unit/Unit.h23
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h2
-rw-r--r--src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp6
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp35
-rw-r--r--src/server/game/Globals/ObjectMgr.h1
-rw-r--r--src/server/game/Groups/Group.cpp20
-rw-r--r--src/server/game/Groups/Group.h16
-rw-r--r--src/server/game/Groups/GroupMgr.cpp4
-rw-r--r--src/server/game/Guilds/Guild.cpp1
-rw-r--r--src/server/game/Handlers/BankHandler.cpp41
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp2
-rw-r--r--src/server/game/Handlers/GroupHandler.cpp24
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp7
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp1
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2272
-rw-r--r--src/server/game/Quests/QuestDef.cpp24
-rw-r--r--src/server/game/Quests/QuestDef.h97
-rw-r--r--src/server/game/Reputation/ReputationMgr.cpp9
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/AreaTriggerPackets.h1
-rw-r--r--src/server/game/Server/Packets/AuctionHousePackets.cpp38
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/AzeritePackets.cpp4
-rw-r--r--src/server/game/Server/Packets/AzeritePackets.h2
-rw-r--r--src/server/game/Server/Packets/BankPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/BankPackets.h14
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.cpp9
-rw-r--r--src/server/game/Server/Packets/CalendarPackets.h11
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp139
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h60
-rw-r--r--src/server/game/Server/Packets/CombatLogPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.cpp6
-rw-r--r--src/server/game/Server/Packets/CombatLogPacketsCommon.h4
-rw-r--r--src/server/game/Server/Packets/CombatPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/CombatPackets.h2
-rw-r--r--src/server/game/Server/Packets/CraftingPacketsCommon.cpp5
-rw-r--r--src/server/game/Server/Packets/CraftingPacketsCommon.h5
-rw-r--r--src/server/game/Server/Packets/EquipmentSetPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/EquipmentSetPackets.h2
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.cpp24
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.h30
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h5
-rw-r--r--src/server/game/Server/Packets/InstancePackets.cpp4
-rw-r--r--src/server/game/Server/Packets/InstancePackets.h4
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h15
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.cpp4
-rw-r--r--src/server/game/Server/Packets/MovementPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/MovementPackets.h1
-rw-r--r--src/server/game/Server/Packets/NPCPackets.cpp8
-rw-r--r--src/server/game/Server/Packets/NPCPackets.h7
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/PartyPackets.h6
-rw-r--r--src/server/game/Server/Packets/QueryPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp71
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h32
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.cpp35
-rw-r--r--src/server/game/Server/Packets/ReputationPackets.h20
-rw-r--r--src/server/game/Server/Packets/ScenePackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ScenePackets.h1
-rw-r--r--src/server/game/Server/Packets/SocialPackets.cpp2
-rw-r--r--src/server/game/Server/Packets/SocialPackets.h2
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h2
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp22
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h12
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.cpp55
-rw-r--r--src/server/game/Server/Packets/TraitPacketsCommon.h14
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp34
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h2499
-rw-r--r--src/server/game/Server/WorldSession.h34
-rw-r--r--src/server/game/Server/WorldSocket.cpp2
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp2
-rw-r--r--src/server/scripts/Commands/cs_modify.cpp2
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp5
99 files changed, 4971 insertions, 3542 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 54948e86426..ac36c3a6462 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -2312,6 +2312,7 @@ CREATE TABLE `groups` (
`raidDifficulty` tinyint unsigned NOT NULL DEFAULT '14',
`legacyRaidDifficulty` tinyint unsigned NOT NULL DEFAULT '3',
`masterLooterGuid` bigint unsigned NOT NULL,
+ `pingRestriction` tinying NOT NULL,
PRIMARY KEY (`guid`),
KEY `leaderGuid` (`leaderGuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Groups';
@@ -3741,7 +3742,8 @@ INSERT INTO `updates` VALUES
('2024_04_09_00_characters.sql','07AC79B4E489B1CD073852EC57D12939C2A1D4B1','ARCHIVED','2024-04-09 12:54:11',0),
('2024_04_12_00_characters.sql','043E023F998DA77170C9D2D0162CAA340290B215','ARCHIVED','2024-04-12 00:23:51',0),
('2024_04_28_00_characters.sql','F80F476704BE535B5DCB0BCEBDD56024FCFBBAA2','ARCHIVED','2024-04-28 19:26:58',0),
-('2024_05_11_00_characters.sql','A65765D87C1BA181561A6517040DC1A3A8103B71','ARCHIVED','2024-05-11 03:06:52',0);
+('2024_05_11_00_characters.sql','A65765D87C1BA181561A6517040DC1A3A8103B71','ARCHIVED','2024-05-11 03:06:52',0),
+('2024_07_31_00_characters.sql','F7E7AE0B8077CB9A1EA0AE4F49693BB05A742AC3','RELEASED','2024-07-31 16:18:36',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/characters/master/2024_07_31_00_characters.sql b/sql/updates/characters/master/2024_07_31_00_characters.sql
new file mode 100644
index 00000000000..1411b4697dc
--- /dev/null
+++ b/sql/updates/characters/master/2024_07_31_00_characters.sql
@@ -0,0 +1,5 @@
+ALTER TABLE `groups` ADD `pingRestriction` tinyint AFTER `masterLooterGuid`;
+
+UPDATE `groups` SET `pingRestriction`=0;
+
+ALTER TABLE `groups` MODIFY `pingRestriction` tinyint NOT NULL;
diff --git a/sql/updates/world/master/2024_07_31_00_world.sql b/sql/updates/world/master/2024_07_31_00_world.sql
new file mode 100644
index 00000000000..6d7c72832de
--- /dev/null
+++ b/sql/updates/world/master/2024_07_31_00_world.sql
@@ -0,0 +1,15 @@
+ALTER TABLE `gossip_menu_addon` ADD `LfgDungeonsID` int NOT NULL DEFAULT '0' AFTER `FriendshipFactionID`;
+
+DROP TABLE IF EXISTS `quest_treasure_pickers`;
+CREATE TABLE `quest_treasure_pickers` (
+ `QuestID` int unsigned NOT NULL,
+ `TreasurePickerID` int NOT NULL,
+ `OrderIndex` int NOT NULL DEFAULT '0',
+ PRIMARY KEY (`QuestID`,`TreasurePickerID`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+
+INSERT INTO `quest_treasure_pickers` SELECT `ID`, `TreasurePickerID`, 0 FROM `quest_template` WHERE `TreasurePickerID` <> 0;
+
+ALTER TABLE `quest_template`
+ ADD `ResetByScheduler` tinyint NOT NULL DEFAULT '0' AFTER `QuestCompletionLog`,
+ DROP `TreasurePickerID`;
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index ff970015a02..147e8faa0d0 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -501,7 +501,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_CHARACTER_CUSTOMIZATION, "INSERT INTO character_customizations (guid, chrCustomizationOptionID, chrCustomizationChoiceID) VALUES (?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHARACTER_CUSTOMIZATIONS, "DELETE FROM character_customizations WHERE guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_INS_GROUP, "INSERT INTO `groups` (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_INS_GROUP, "INSERT INTO `groups` (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid, pingRestriction) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_GROUP_LEADER, "UPDATE `groups` SET leaderGuid = ? WHERE guid = ?", CONNECTION_ASYNC);
@@ -511,6 +511,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_UPD_GROUP_DIFFICULTY, "UPDATE `groups` SET difficulty = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_GROUP_RAID_DIFFICULTY, "UPDATE `groups` SET raidDifficulty = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_GROUP_LEGACY_RAID_DIFFICULTY, "UPDATE `groups` SET legacyRaidDifficulty = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_UPD_GROUP_PING_RESTRICTION, "UPDATE `groups` SET pingRestriction = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_INVALID_SPELL_SPELLS, "DELETE FROM character_spell WHERE spell = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_DELETE_INFO, "UPDATE characters SET deleteInfos_Name = name, deleteInfos_Account = account, deleteDate = UNIX_TIMESTAMP(), name = '', account = 0 WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_UPD_RESTORE_DELETE_INFO, "UPDATE characters SET name = ?, account = ?, deleteDate = NULL, deleteInfos_Name = NULL, deleteInfos_Account = NULL WHERE deleteDate IS NOT NULL AND guid = ?", CONNECTION_ASYNC);
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h
index 4ae174c7ddb..fd781a223da 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.h
+++ b/src/server/database/Database/Implementation/CharacterDatabase.h
@@ -382,6 +382,7 @@ enum CharacterDatabaseStatements : uint32
CHAR_UPD_GROUP_DIFFICULTY,
CHAR_UPD_GROUP_RAID_DIFFICULTY,
CHAR_UPD_GROUP_LEGACY_RAID_DIFFICULTY,
+ CHAR_UPD_GROUP_PING_RESTRICTION,
CHAR_DEL_INVALID_SPELL_SPELLS,
CHAR_UPD_DELETE_INFO,
CHAR_UPD_RESTORE_DELETE_INFO,
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
index 0634d60af82..0cf8f1f9b33 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp
@@ -322,6 +322,8 @@ private:
return int64(left->BidAmount) - int64(right->BidAmount);
case AuctionHouseSortOrder::Buyout:
return int64(left->BuyoutOrUnitPrice) - int64(right->BuyoutOrUnitPrice);
+ case AuctionHouseSortOrder::TimeRemaining:
+ return (left->EndTime - right->EndTime).count();
default:
break;
}
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h
index bdaa0516339..f6354060022 100644
--- a/src/server/game/AuctionHouse/AuctionHouseMgr.h
+++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h
@@ -116,11 +116,12 @@ DEFINE_ENUM_FLAG(AuctionHouseFilterMask);
enum class AuctionHouseSortOrder : uint8
{
- Price = 0,
- Name = 1,
- Level = 2,
- Bid = 3,
- Buyout = 4
+ Price = 0,
+ Name = 1,
+ Level = 2,
+ Bid = 3,
+ Buyout = 4,
+ TimeRemaining = 5
};
enum class AuctionHouseBrowseMode : uint8
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index e1edf02d3c3..fb433ce27d0 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -1892,7 +1892,10 @@ enum class PlayerInteractionType : int32
BarbersChoice = 62,
JailersTowerBuffs = 63,
MajorFactionRenown = 64,
- PersonalTabardVendor = 65
+ PersonalTabardVendor = 65,
+ ForgeMaster = 66,
+ CharacterBanker = 67,
+ AccountBanker = 68,
};
enum class PowerTypeFlags : int16
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 84f3c8541cf..03d6e9dcfd5 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -78,8 +78,8 @@ void LFGMgr::_LoadFromDB(Field* fields, ObjectGuid guid)
SetLeader(guid, ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()));
- uint32 dungeon = fields[18].GetUInt32();
- uint8 state = fields[19].GetUInt8();
+ uint32 dungeon = fields[19].GetUInt32();
+ uint8 state = fields[20].GetUInt8();
if (!dungeon || !state)
return;
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 9b3a159e2f7..205b4440041 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -1450,7 +1450,7 @@ void Creature::SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDiffic
CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId);
uint32 displayId = GetNativeDisplayId();
- uint64 spawnNpcFlags = (uint64(m_unitData->NpcFlags[1]) << 32) | m_unitData->NpcFlags[0];
+ uint64 spawnNpcFlags = (uint64(GetNpcFlags2()) << 32) | GetNpcFlags();
Optional<uint64> npcflag;
Optional<uint32> unitFlags;
Optional<uint32> unitFlags2;
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index 142b379770c..818bff310e0 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -246,7 +246,10 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
packet.GossipGUID = objectGUID;
packet.GossipID = _gossipMenu.GetMenuId();
if (GossipMenuAddon const* addon = sObjectMgr->GetGossipMenuAddon(packet.GossipID))
+ {
packet.FriendshipFactionID = addon->FriendshipFactionID;
+ packet.LfgDungeonsID = addon->LfgDungeonsID;
+ }
if (NpcText const* text = sObjectMgr->GetNpcText(titleTextId))
packet.BroadcastTextID = Trinity::Containers::SelectRandomWeightedContainerElement(text->Data, [](NpcTextData const& data) { return data.Probability; })->BroadcastTextID;
@@ -283,8 +286,11 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, ObjectGuid objectGUID)
text.QuestType = item.QuestIcon;
text.QuestFlags[0] = quest->GetFlags();
text.QuestFlags[1] = quest->GetFlagsEx();
+ text.QuestFlags[2] = quest->GetFlagsEx2();
text.Repeatable = quest->IsTurnIn() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly();
+ text.ResetByScheduler = quest->IsResetByScheduler();
text.Important = quest->IsImportant();
+ text.Meta = quest->IsMeta();
text.QuestTitle = quest->GetLogTitle();
LocaleConstant localeConstant = _session->GetSessionDbLocaleIndex();
@@ -411,8 +417,11 @@ void PlayerMenu::SendQuestGiverQuestListMessage(Object* questgiver)
text.QuestType = questMenuItem.QuestIcon;
text.QuestFlags[0] = quest->GetFlags();
text.QuestFlags[1] = quest->GetFlagsEx();
+ text.QuestFlags[2] = quest->GetFlagsEx2();
text.Repeatable = quest->IsTurnIn() && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly();
+ text.ResetByScheduler = quest->IsResetByScheduler();
text.Important = quest->IsImportant();
+ text.Meta = quest->IsMeta();
text.QuestTitle = quest->GetLogTitle();
LocaleConstant localeConstant = _session->GetSessionDbLocaleIndex();
@@ -478,6 +487,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
packet.PortraitGiverMount = quest->GetQuestGiverPortraitMount();
packet.PortraitGiverModelSceneID = quest->GetQuestGiverPortraitModelSceneId();
packet.PortraitTurnIn = quest->GetQuestTurnInPortrait();
+ packet.QuestInfoID = quest->GetQuestInfoID();
packet.QuestSessionBonus = 0; //quest->GetQuestSessionBonus(); // this is only sent while quest session is active
packet.AutoLaunched = autoLaunched;
packet.DisplayPopup = displayPopup;
@@ -510,9 +520,9 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
for (uint32 i = 0; i < objs.size(); ++i)
{
packet.Objectives[i].ID = objs[i].ID;
+ packet.Objectives[i].Type = objs[i].Type;
packet.Objectives[i].ObjectID = objs[i].ObjectID;
packet.Objectives[i].Amount = objs[i].Amount;
- packet.Objectives[i].Type = objs[i].Type;
}
_session->SendPacket(packet.Write());
@@ -582,6 +592,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI
offer.QuestID = quest->GetQuestId();
offer.AutoLaunched = autoLaunched;
offer.SuggestedPartyMembers = quest->GetSuggestedPlayers();
+ offer.QuestInfoID = quest->GetQuestInfoID();
for (uint32 i = 0; i < QUEST_EMOTE_COUNT && quest->OfferRewardEmote[i]; ++i)
offer.Emotes.emplace_back(quest->OfferRewardEmote[i], quest->OfferRewardEmoteDelay[i]);
@@ -656,6 +667,7 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, ObjectGuid npcGU
packet.QuestFlags[1] = quest->GetFlagsEx();
packet.QuestFlags[2] = quest->GetFlagsEx2();
packet.SuggestPartyMembers = quest->GetSuggestedPlayers();
+ packet.QuestInfoID = quest->GetQuestInfoID();
// incomplete: FD
// incomplete quest with item objective but item objective is complete DD
diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h
index 72aa91aae39..e97c1cca3d9 100644
--- a/src/server/game/Entities/Creature/GossipDef.h
+++ b/src/server/game/Entities/Creature/GossipDef.h
@@ -88,6 +88,9 @@ enum class GossipOptionNpc : uint8
BarbersChoice = 52,
MajorFactionRenown = 53,
PersonalTabardVendor = 54,
+ ForgeMaster = 55,
+ CharacterBanker = 56,
+ AccountBanker = 57,
Count
};
@@ -108,8 +111,9 @@ enum class GossipOptionRewardType : uint8
enum class GossipOptionFlags : int32
{
- None = 0x0,
- QuestLabelPrepend = 0x1
+ None = 0x0,
+ QuestLabelPrepend = 0x1,
+ HideOptionIDFromClient = 0x2
};
struct GossipMenuItem
diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h
index ebf67292ced..a69813ea53e 100644
--- a/src/server/game/Entities/GameObject/GameObjectData.h
+++ b/src/server/game/Entities/GameObject/GameObjectData.h
@@ -65,7 +65,7 @@ struct GameObjectTemplate
uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
uint32 InfiniteAOI; // 10 Infinite AOI, enum { false, true, }; Default: false
uint32 NotLOSBlocking; // 11 Not LOS Blocking, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 12 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Collisionupdatedelayafteropen; // 13 Collision update delay(ms) after open, int, Min value: 0, Max value: 2147483647, Default value: 0
} door;
// 1 GAMEOBJECT_TYPE_BUTTON
@@ -81,7 +81,7 @@ struct GameObjectTemplate
uint32 closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0
uint32 requireLOS; // 8 require LOS, enum { false, true, }; Default: false
uint32 conditionID1; // 9 conditionID1, References: PlayerCondition, NoValue = 0
- uint32 InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 10 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} button;
// 2 GAMEOBJECT_TYPE_QUESTGIVER
struct
@@ -98,7 +98,7 @@ struct GameObjectTemplate
uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
uint32 conditionID1; // 10 conditionID1, References: PlayerCondition, NoValue = 0
uint32 NeverUsableWhileMounted; // 11 Never Usable While Mounted, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 12 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} questgiver;
// 3 GAMEOBJECT_TYPE_CHEST
struct
@@ -112,7 +112,7 @@ struct GameObjectTemplate
uint32 triggeredEvent; // 6 triggeredEvent, References: GameEvents, NoValue = 0
uint32 linkedTrap; // 7 linkedTrap, References: GameObjects, NoValue = 0
uint32 questID; // 8 questID, References: QuestV2, NoValue = 0
- uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 requireLOS; // 10 require LOS, enum { false, true, }; Default: false
uint32 leaveLoot; // 11 leaveLoot, enum { false, true, }; Default: false
uint32 notInCombat; // 12 notInCombat, enum { false, true, }; Default: false
@@ -121,9 +121,9 @@ struct GameObjectTemplate
uint32 usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false
uint32 floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false
uint32 conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0
- int32 Unused; // 18 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
+ int32 xpLevel; // 18 xpLevel, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
uint32 xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp
- uint32 Unused2; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0
+ uint32 Unused; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0
uint32 GroupXP; // 21 Group XP, enum { false, true, }; Default: false
uint32 DamageImmuneOK; // 22 Damage Immune OK, enum { false, true, }; Default: false
uint32 trivialSkillLow; // 23 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0
@@ -142,7 +142,7 @@ struct GameObjectTemplate
// 4 GAMEOBJECT_TYPE_BINDER
struct
{
- uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} binder;
// 5 GAMEOBJECT_TYPE_GENERIC
struct
@@ -156,7 +156,7 @@ struct GameObjectTemplate
uint32 conditionID1; // 6 conditionID1, References: PlayerCondition, NoValue = 0
uint32 LargeAOI; // 7 Large AOI, enum { false, true, }; Default: false
uint32 UseGarrisonOwnerGuildColors; // 8 Use Garrison Owner Guild Colors, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} generic;
// 6 GAMEOBJECT_TYPE_TRAP
struct
@@ -182,7 +182,7 @@ struct GameObjectTemplate
uint32 requireLOS; // 18 require LOS, enum { false, true, }; Default: false
uint32 TriggerCondition; // 19 Trigger Condition, References: PlayerCondition, NoValue = 0
uint32 Checkallunits; // 20 Check all units (spawned traps only check players), enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 21 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 21 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} trap;
// 7 GAMEOBJECT_TYPE_CHAIR
struct
@@ -192,7 +192,7 @@ struct GameObjectTemplate
uint32 onlyCreatorUse; // 2 onlyCreatorUse, enum { false, true, }; Default: false
uint32 triggeredEvent; // 3 triggeredEvent, References: GameEvents, NoValue = 0
uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
- uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} chair;
// 8 GAMEOBJECT_TYPE_SPELL_FOCUS
struct
@@ -206,7 +206,7 @@ struct GameObjectTemplate
uint32 floatingTooltip; // 6 floatingTooltip, enum { false, true, }; Default: false
uint32 floatOnWater; // 7 floatOnWater, enum { false, true, }; Default: false
uint32 conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0
- uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 gossipID; // 10 gossipID, References: Gossip, NoValue = 0
uint32 spellFocusType2; // 11 spellFocusType 2, References: SpellFocusObject, NoValue = 0
uint32 spellFocusType3; // 12 spellFocusType 3, References: SpellFocusObject, NoValue = 0
@@ -224,7 +224,7 @@ struct GameObjectTemplate
uint32 allowMounted; // 3 allowMounted, enum { false, true, }; Default: false
uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
uint32 NeverUsableWhileMounted; // 5 Never Usable While Mounted, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} text;
// 10 GAMEOBJECT_TYPE_GOOBER
struct
@@ -262,7 +262,7 @@ struct GameObjectTemplate
uint32 SyncAnimationtoObjectLifetime; // 30 Sync Animation to Object Lifetime (global track only), enum { false, true, }; Default: false
uint32 NoFuzzyHit; // 31 No Fuzzy Hit, enum { false, true, }; Default: false
uint32 LargeAOI; // 32 Large AOI, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 33 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 33 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} goober;
// 11 GAMEOBJECT_TYPE_TRANSPORT
struct
@@ -291,7 +291,7 @@ struct GameObjectTemplate
uint32 Reached10thfloor; // 21 Reached 10th floor, References: GameEvents, NoValue = 0
uint32 onlychargeheightcheck; // 22 only charge height check. (yards), int, Min value: 0, Max value: 65535, Default value: 0
uint32 onlychargetimecheck; // 23 only charge time check, int, Min value: 0, Max value: 65535, Default value: 0
- uint32 InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 24 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} transport;
// 12 GAMEOBJECT_TYPE_AREADAMAGE
struct
@@ -304,7 +304,7 @@ struct GameObjectTemplate
uint32 autoClose; // 5 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 openTextID; // 6 openTextID, References: BroadcastText, NoValue = 0
uint32 closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0
- uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} areaDamage;
// 13 GAMEOBJECT_TYPE_CAMERA
struct
@@ -314,7 +314,7 @@ struct GameObjectTemplate
uint32 eventID; // 2 eventID, References: GameEvents, NoValue = 0
uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
uint32 conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
- uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} camera;
// 14 GAMEOBJECT_TYPE_MAP_OBJECT
struct
@@ -334,19 +334,19 @@ struct GameObjectTemplate
uint32 allowstopping; // 8 allow stopping, enum { false, true, }; Default: false
uint32 InitStopped; // 9 Init Stopped, enum { false, true, }; Default: false
uint32 TrueInfiniteAOI; // 10 True Infinite AOI (programmer only!), enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 11 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Allowareaexplorationwhileonthistransport;// 12 Allow area exploration while on this transport, enum { false, true, }; Default: false
} moTransport;
// 16 GAMEOBJECT_TYPE_DUEL_ARBITER
struct
{
- uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Willthisduelgountilaplayerdies; // 1 Will this duel go until a player dies?, enum { false, true, }; Default: false
} duelFlag;
// 17 GAMEOBJECT_TYPE_FISHINGNODE
struct
{
- uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} fishingNode;
// 18 GAMEOBJECT_TYPE_RITUAL
struct
@@ -360,14 +360,14 @@ struct GameObjectTemplate
uint32 castersGrouped; // 6 castersGrouped, enum { false, true, }; Default: true
uint32 ritualNoTargetCheck; // 7 ritualNoTargetCheck, enum { false, true, }; Default: true
uint32 conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0
- uint32 InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Allowunfriendlycrossfactionpartymemberstocollaborateonaritual;// 10 Allow unfriendly cross faction party members to collaborate on a ritual, enum { false, true, }; Default: false
} ritual;
// 19 GAMEOBJECT_TYPE_MAILBOX
struct
{
uint32 conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0
- uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} mailbox;
// 20 GAMEOBJECT_TYPE_DO_NOT_USE
struct
@@ -379,7 +379,7 @@ struct GameObjectTemplate
uint32 creatureID; // 0 creatureID, References: Creature, NoValue = 0
uint32 charges; // 1 charges, int, Min value: 0, Max value: 65535, Default value: 1
uint32 Preferonlyifinlineofsight; // 2 Prefer only if in line of sight (expensive), enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} guardPost;
// 22 GAMEOBJECT_TYPE_SPELLCASTER
struct
@@ -392,7 +392,7 @@ struct GameObjectTemplate
uint32 conditionID1; // 5 conditionID1, References: PlayerCondition, NoValue = 0
uint32 playerCast; // 6 playerCast, enum { false, true, }; Default: false
uint32 NeverUsableWhileMounted; // 7 Never Usable While Mounted, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} spellCaster;
// 23 GAMEOBJECT_TYPE_MEETINGSTONE
struct
@@ -400,7 +400,7 @@ struct GameObjectTemplate
uint32 Unused; // 0 Unused, int, Min value: 0, Max value: 65535, Default value: 1
uint32 Unused2; // 1 Unused, int, Min value: 1, Max value: 65535, Default value: 60
uint32 areaID; // 2 areaID, References: AreaTable, NoValue = 0
- uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Preventmeetingstonefromtargetinganunfriendlypartymemberoutsideofinstances;// 4 Prevent meeting stone from targeting an unfriendly party member outside of instances, enum { false, true, }; Default: false
} meetingStone;
// 24 GAMEOBJECT_TYPE_FLAGSTAND
@@ -419,7 +419,7 @@ struct GameObjectTemplate
uint32 GiganticAOI; // 10 Gigantic AOI, enum { false, true, }; Default: false
uint32 InfiniteAOI; // 11 Infinite AOI, enum { false, true, }; Default: false
uint32 cooldown; // 12 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000
- uint32 InteractRadiusOverride; // 13 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 13 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} flagStand;
// 25 GAMEOBJECT_TYPE_FISHINGHOLE
struct
@@ -429,7 +429,7 @@ struct GameObjectTemplate
uint32 minRestock; // 2 minRestock, int, Min value: 0, Max value: 65535, Default value: 0
uint32 maxRestock; // 3 maxRestock, int, Min value: 0, Max value: 65535, Default value: 0
uint32 open; // 4 open, References: Lock_, NoValue = 0
- uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} fishingHole;
// 26 GAMEOBJECT_TYPE_FLAGDROP
struct
@@ -444,7 +444,7 @@ struct GameObjectTemplate
uint32 GiganticAOI; // 7 Gigantic AOI, enum { false, true, }; Default: false
uint32 InfiniteAOI; // 8 Infinite AOI, enum { false, true, }; Default: false
uint32 cooldown; // 9 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000
- uint32 InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 10 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} flagDrop;
// 27 GAMEOBJECT_TYPE_MINI_GAME
struct
@@ -485,7 +485,7 @@ struct GameObjectTemplate
uint32 UncontestedTime; // 25 Uncontested Time, int, Min value: 0, Max value: 65535, Default value: 0
uint32 FrequentHeartbeat; // 26 Frequent Heartbeat, enum { false, true, }; Default: false
uint32 EnablingWorldStateExpression; // 27 Enabling World State Expression, References: WorldStateExpression, NoValue = 0
- uint32 InteractRadiusOverride; // 28 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 28 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} controlZone;
// 30 GAMEOBJECT_TYPE_AURA_GENERATOR
struct
@@ -497,7 +497,7 @@ struct GameObjectTemplate
uint32 auraID2; // 4 auraID2, References: Spell, NoValue = 0
uint32 conditionID2; // 5 conditionID2, References: PlayerCondition, NoValue = 0
uint32 serverOnly; // 6 serverOnly, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 7 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} auraGenerator;
// 31 GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
struct
@@ -513,7 +513,7 @@ struct GameObjectTemplate
uint32 LargeAOI; // 8 Large AOI, enum { false, true, }; Default: false
uint32 GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
uint32 Legacy; // 10 Legacy, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 11 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} dungeonDifficulty;
// 32 GAMEOBJECT_TYPE_BARBER_CHAIR
struct
@@ -521,7 +521,7 @@ struct GameObjectTemplate
uint32 chairheight; // 0 chairheight, int, Min value: 0, Max value: 2, Default value: 1
int32 HeightOffset; // 1 Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0
uint32 SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0
- uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 CustomizationScope; // 4 Customization Scope, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Preventteleportingtheplayeroutofthebarbershopchair;// 5 Prevent teleporting the player out of the barbershop chair, enum { false, true, }; Default: false
} barberChair;
@@ -555,13 +555,13 @@ struct GameObjectTemplate
int32 Thexoffsetofthedestructiblenameplateifitisenabled;// 24 The x offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
int32 Theyoffsetofthedestructiblenameplateifitisenabled;// 25 The y offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
int32 Thezoffsetofthedestructiblenameplateifitisenabled;// 26 The z offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
- uint32 InteractRadiusOverride; // 27 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 27 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} destructibleBuilding;
// 34 GAMEOBJECT_TYPE_GUILD_BANK
struct
{
uint32 conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0
- uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} guildbank;
// 35 GAMEOBJECT_TYPE_TRAPDOOR
struct
@@ -574,7 +574,7 @@ struct GameObjectTemplate
uint32 GiganticAOI; // 5 Gigantic AOI, enum { false, true, }; Default: false
uint32 InfiniteAOI; // 6 Infinite AOI, enum { false, true, }; Default: false
uint32 DoorisOpaque; // 7 Door is Opaque (Disable portal on close), enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} trapdoor;
// 36 GAMEOBJECT_TYPE_NEW_FLAG
struct
@@ -593,27 +593,27 @@ struct GameObjectTemplate
uint32 worldState1; // 11 worldState1, References: WorldState, NoValue = 0
uint32 ReturnonDefenderInteract; // 12 Return on Defender Interact, enum { false, true, }; Default: false
uint32 SpawnVignette; // 13 Spawn Vignette, References: vignette, NoValue = 0
- uint32 InteractRadiusOverride; // 14 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 14 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} newflag;
// 37 GAMEOBJECT_TYPE_NEW_FLAG_DROP
struct
{
uint32 open; // 0 open, References: Lock_, NoValue = 0
uint32 SpawnVignette; // 1 Spawn Vignette, References: vignette, NoValue = 0
- uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} newflagdrop;
// 38 GAMEOBJECT_TYPE_GARRISON_BUILDING
struct
{
int32 SpawnMap; // 0 Spawn Map, References: Map, NoValue = -1
- uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} garrisonBuilding;
// 39 GAMEOBJECT_TYPE_GARRISON_PLOT
struct
{
uint32 PlotInstance; // 0 Plot Instance, References: GarrPlotInstance, NoValue = 0
int32 SpawnMap; // 1 Spawn Map, References: Map, NoValue = -1
- uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} garrisonPlot;
// 40 GAMEOBJECT_TYPE_CLIENT_CREATURE
struct
@@ -653,7 +653,7 @@ struct GameObjectTemplate
uint32 SpellVisual4; // 20 Spell Visual 4, References: SpellVisual, NoValue = 0
uint32 SpellVisual5; // 21 Spell Visual 5, References: SpellVisual, NoValue = 0
uint32 SpawnVignette; // 22 Spawn Vignette, References: vignette, NoValue = 0
- uint32 InteractRadiusOverride; // 23 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 23 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} capturePoint;
// 43 GAMEOBJECT_TYPE_PHASEABLE_MO
struct
@@ -662,14 +662,14 @@ struct GameObjectTemplate
int32 AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0
uint32 DoodadSetA; // 2 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 DoodadSetB; // 3 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0
- uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} phaseableMO;
// 44 GAMEOBJECT_TYPE_GARRISON_MONUMENT
struct
{
uint32 TrophyTypeID; // 0 Trophy Type ID, References: TrophyType, NoValue = 0
uint32 TrophyInstanceID; // 1 Trophy Instance ID, References: TrophyInstance, NoValue = 0
- uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} garrisonMonument;
// 45 GAMEOBJECT_TYPE_GARRISON_SHIPMENT
struct
@@ -677,13 +677,13 @@ struct GameObjectTemplate
uint32 ShipmentContainer; // 0 Shipment Container, References: CharShipmentContainer, NoValue = 0
uint32 GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false
uint32 LargeAOI; // 2 Large AOI, enum { false, true, }; Default: false
- uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} garrisonShipment;
// 46 GAMEOBJECT_TYPE_GARRISON_MONUMENT_PLAQUE
struct
{
uint32 TrophyInstanceID; // 0 Trophy Instance ID, References: TrophyInstance, NoValue = 0
- uint32 InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} garrisonMonumentPlaque;
// 47 GAMEOBJECT_TYPE_ITEM_FORGE
struct
@@ -694,7 +694,7 @@ struct GameObjectTemplate
uint32 CameraMode; // 3 Camera Mode, References: CameraMode, NoValue = 0
uint32 FadeRegionRadius; // 4 Fade Region Radius, int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge, Soulbind Forge, Anima Reservoir, }; Default: Relic Forge
- uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 GarrTalentTreeID; // 7 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0
} itemForge;
// 48 GAMEOBJECT_TYPE_UI_LINK
@@ -705,13 +705,13 @@ struct GameObjectTemplate
uint32 GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false
uint32 spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0
uint32 radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10
- uint32 InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 ItemInteractionID; // 6 Item Interaction ID, References: UiItemInteraction, NoValue = 0
} UILink;
// 49 GAMEOBJECT_TYPE_KEYSTONE_RECEPTACLE
struct
{
- uint32 InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} KeystoneReceptacle;
// 50 GAMEOBJECT_TYPE_GATHERING_NODE
struct
@@ -740,7 +740,7 @@ struct GameObjectTemplate
uint32 PlayOpenAnimationonOpening; // 21 Play Open Animation on Opening, enum { false, true, }; Default: false
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 InteractRadiusOverride; // 24 Interact Radius Override (Yards * 100), 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
@@ -750,7 +750,7 @@ struct GameObjectTemplate
uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0
uint32 open; // 2 open, References: Lock_, NoValue = 0
uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
- uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} challengeModeReward;
// 52 GAMEOBJECT_TYPE_MULTI
struct
@@ -772,7 +772,7 @@ struct GameObjectTemplate
uint32 DoodadSetC; // 3 Doodad Set C, int, Min value: 0, Max value: 2147483647, Default value: 0
int32 SpawnMap; // 4 Spawn Map, References: Map, NoValue = -1
int32 AreaNameSet; // 5 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0
- uint32 InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} siegeableMO;
// 55 GAMEOBJECT_TYPE_PVP_REWARD
struct
@@ -781,7 +781,7 @@ struct GameObjectTemplate
uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0
uint32 open; // 2 open, References: Lock_, NoValue = 0
uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
- uint32 InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} pvpReward;
// 56 GAMEOBJECT_TYPE_PLAYER_CHOICE_CHEST
struct
@@ -793,7 +793,7 @@ struct GameObjectTemplate
uint32 MawPowerFilter; // 4 Maw Power Filter, References: MawPowerFilter, NoValue = 0
uint32 Script; // 5 Script, References: SpellScript, NoValue = 0
uint32 SpellVisual1; // 6 Spell Visual 1, References: SpellVisual, NoValue = 0
- uint32 InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 7 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 Dontupdateplayerinteractability; // 8 Don't update player interactability, enum { false, true, }; Default: false
} playerChoiceChest;
// 57 GAMEOBJECT_TYPE_LEGENDARY_FORGE
@@ -801,21 +801,21 @@ struct GameObjectTemplate
{
uint32 PlayerChoice; // 0 Player Choice, References: PlayerChoice, NoValue = 0
uint32 CustomItemBonusFilter; // 1 Custom Item Bonus Filter, References: CustomItemBonusFilter, NoValue = 0
- uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} legendaryForge;
// 58 GAMEOBJECT_TYPE_GARR_TALENT_TREE
struct
{
uint32 UiMapID; // 0 Ui Map ID, References: UiMap, NoValue = 0
uint32 GarrTalentTreeID; // 1 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0
- uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
} garrTalentTree;
// 59 GAMEOBJECT_TYPE_WEEKLY_REWARD_CHEST
struct
{
uint32 WhenAvailable; // 0 When Available, References: GameObjectDisplayInfo, NoValue = 0
uint32 open; // 1 open, References: Lock_, NoValue = 0
- uint32 InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
+ uint32 InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
uint32 ExpansionLevel; // 3 Expansion Level, int, Min value: 0, Max value: 2147483647, Default value: 0
} weeklyRewardChest;
// 60 GAMEOBJECT_TYPE_CLIENT_MODEL
diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h
index 6ade3bdf974..acd69e9a265 100644
--- a/src/server/game/Entities/Item/Container/Bag.h
+++ b/src/server/game/Entities/Item/Container/Bag.h
@@ -18,8 +18,8 @@
#ifndef TRINITY_BAG_H
#define TRINITY_BAG_H
-// Maximum 36 Slots ((CONTAINER_END - CONTAINER_FIELD_SLOT_1)/2
-#define MAX_BAG_SIZE 36 // 2.0.12
+// Maximum 98 Slots ((CONTAINER_END - CONTAINER_FIELD_SLOT_1)/2
+#define MAX_BAG_SIZE 98 // 11.0.0
#include "Item.h"
diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h
index 0632c1e113d..85a7a558e2a 100644
--- a/src/server/game/Entities/Item/ItemDefines.h
+++ b/src/server/game/Entities/Item/ItemDefines.h
@@ -142,6 +142,7 @@ enum InventoryResult : uint8
EQUIP_ERR_SLOT_ONLY_REAGENTBAG = 116,// Only Reagent Bags can be placed in the reagent bag slot.
EQUIP_ERR_REAGENTBAG_ITEM_TYPE = 117,// Only Reagents can be placed in Reagent Bags.
EQUIP_ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 118,// Items that can be refunded can't be bulk sold.
+ EQUIP_ERR_NO_SOULBOUND_ITEM_IN_ACCOUNT_BANK = 119,// Soulbound items cannot be stored in the Warband Bank.
};
// EnumUtils: DESCRIBE THIS
@@ -287,4 +288,11 @@ enum class AzeriteEssenceActivateResult : uint32
NotEquipped = 12
};
+enum class BankType : int8
+{
+ Character = 0,
+ Guild = 1,
+ Account = 2
+};
+
#endif // ItemDefines_h__
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index fd868cfc649..03d1948444c 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -663,7 +663,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
// *data << int32(Players[i].Pets[j].Power);
// *data << int32(Players[i].Pets[j].Speed);
// *data << int32(Players[i].Pets[j].NpcTeamMemberID);
- // *data << uint16(Players[i].Pets[j].BreedQuality);
+ // *data << uint8(Players[i].Pets[j].BreedQuality);
// *data << uint16(Players[i].Pets[j].StatusFlags);
// *data << int8(Players[i].Pets[j].Slot);
diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h
index fdad7e0d18e..a845123c3ee 100644
--- a/src/server/game/Entities/Object/Updates/UpdateField.h
+++ b/src/server/game/Entities/Object/Updates/UpdateField.h
@@ -53,7 +53,7 @@ namespace UF
template<typename T, std::size_t Size>
class UpdateFieldArrayBase;
- template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
class UpdateFieldArray;
template<typename T>
@@ -268,7 +268,7 @@ namespace UF
return { (_value.*field)._value };
}
- template<typename V, std::size_t Size, uint32 Bit, uint32 FirstElementBit, typename U = T>
+ template<typename V, std::size_t Size, uint32 Bit, int32 FirstElementBit, typename U = T>
std::enable_if_t<std::is_base_of_v<HasChangesMaskTag, U>,
std::conditional_t<std::is_base_of_v<IsUpdateFieldStructureTag, V>,
MutableFieldReference<V, PublicSet>,
@@ -278,10 +278,13 @@ namespace UF
ModifyValue(UpdateFieldArray<V, Size, Bit, FirstElementBit>(T::* field), uint32 index)
{
_value._changesMask.Set(Bit);
- if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, V>)
- _value._changesMask.Set(FirstElementBit + index);
- else
- _value._changesMask.Set(FirstElementBit);
+ if constexpr (FirstElementBit >= 0)
+ {
+ if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, V>)
+ _value._changesMask.Set(FirstElementBit + index);
+ else
+ _value._changesMask.Set(FirstElementBit);
+ }
return { (_value.*field)._values[index] };
}
@@ -469,7 +472,7 @@ namespace UF
template<typename T, int32 BlockBit, uint32 Bit>
friend class UpdateField;
- template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
friend class UpdateFieldArray;
template<typename T, int32 BlockBit, uint32 Bit>
@@ -486,7 +489,7 @@ namespace UF
return { (static_cast<Derived*>(this)->*field)._value };
}
- template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename Derived, typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
MutableFieldReference<T, false> ModifyValue(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::* field), uint32 index)
{
MarkChanged(field, index);
@@ -534,16 +537,19 @@ namespace UF
_changesMask.Set(Bit);
}
- template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename Derived, typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
void MarkChanged(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::*), uint32 index)
{
static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask");
_changesMask.Set(Bit);
- if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>)
- _changesMask.Set(FirstElementBit + index);
- else
- _changesMask.Set(FirstElementBit);
+ if constexpr (FirstElementBit >= 0)
+ {
+ if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>)
+ _changesMask.Set(FirstElementBit + index);
+ else
+ _changesMask.Set(FirstElementBit);
+ }
}
template<typename Derived, typename T, int32 BlockBit, uint32 Bit>
@@ -576,15 +582,18 @@ namespace UF
_changesMask.Reset(Bit);
}
- template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename Derived, typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
void ClearChanged(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::*), uint32 index)
{
static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask");
- if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>)
- _changesMask.Reset(FirstElementBit + index);
- else
- _changesMask.Reset(FirstElementBit);
+ if constexpr (FirstElementBit >= 0)
+ {
+ if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>)
+ _changesMask.Reset(FirstElementBit + index);
+ else
+ _changesMask.Reset(FirstElementBit);
+ }
}
template<typename Derived, typename T, int32 BlockBit, uint32 Bit>
@@ -620,16 +629,16 @@ namespace UF
field._value.ClearChangesMask();
}
- template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field)
{
ClearChangesMask(field, std::disjunction<std::is_base_of<HasChangesMaskTag, T>, std::is_base_of<IsUpdateFieldHolderTag, T>>{});
}
- template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>&, std::false_type) { }
- template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field, std::true_type)
{
for (uint32 i = 0; i < Size; ++i)
@@ -804,7 +813,7 @@ namespace UF
return sizeof(typename T::value_type);
}
- template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit>
+ template<typename T, std::size_t Size, uint32 Bit, int32 FirstElementBit>
class UpdateFieldArray : public UpdateFieldArrayBase<T, Size>
{
};
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index fa0453e412d..8b54351c6c3 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -126,20 +126,20 @@ void ItemEnchantment::ClearChangesMask()
void ItemMod::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
- data << int32(Value);
data << uint8(Type);
+ data << int32(Value);
}
void ItemMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const
{
- data << int32(Value);
data << uint8(Type);
+ data << int32(Value);
}
bool ItemMod::operator==(ItemMod const& right) const
{
- return Value == right.Value
- && Type == right.Type;
+ return Type == right.Type
+ && Value == right.Value;
}
void ItemModList::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
@@ -286,7 +286,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << uint32(MaxDurability);
}
data << uint32(CreatePlayedTime);
- data << int32(Context);
+ data << uint8(Context);
data << int64(CreateTime);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
{
@@ -424,7 +424,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
}
if (changesMask[13])
{
- data << int32(Context);
+ data << uint8(Context);
}
if (changesMask[14])
{
@@ -506,7 +506,7 @@ void ItemData::ClearChangesMask()
void ContainerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const
{
- for (uint32 i = 0; i < 36; ++i)
+ for (uint32 i = 0; i < 98; ++i)
{
data << Slots[i];
}
@@ -520,8 +520,8 @@ void ContainerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fiel
void ContainerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Bag const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlocksMask(0), 2);
- for (uint32 i = 0; i < 2; ++i)
+ data.WriteBits(changesMask.GetBlocksMask(0), 4);
+ for (uint32 i = 0; i < 4; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -535,7 +535,7 @@ void ContainerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool
}
if (changesMask[2])
{
- for (uint32 i = 0; i < 36; ++i)
+ for (uint32 i = 0; i < 98; ++i)
{
if (changesMask[3 + i])
{
@@ -930,10 +930,8 @@ bool PassiveSpellHistory::operator==(PassiveSpellHistory const& right) const
void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
{
data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
- for (uint32 i = 0; i < 2; ++i)
- {
- data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver));
- }
+ data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, owner, receiver));
+ data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, owner, receiver));
data << uint32(StateSpellVisualID);
data << uint32(StateAnimID);
data << uint32(StateAnimKitID);
@@ -1093,8 +1091,8 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << float(MinRangedDamage);
data << float(MaxRangedDamage);
data << float(ManaCostMultiplier);
- data << float(MaxHealthModifier);
}
+ data << float(MaxHealthModifier);
data << float(HoverHeight);
data << int32(MinItemLevelCutoff);
data << int32(MinItemLevel);
@@ -1116,10 +1114,12 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << uint32(ChannelObjects.size());
data << int32(FlightCapabilityID);
data << float(GlideEventSpeedDivisor);
- data << uint32(Field_308);
- data << uint32(Field_30C);
+ data << uint32(MaxHealthModifierFlatNeg);
+ data << uint32(MaxHealthModifierFlatPos);
data << uint32(SilencedSchoolMask);
data << uint32(CurrentAreaID);
+ data << float(Field_31C);
+ data << float(Field_320);
data << NameplateAttachToGUID;
for (uint32 i = 0; i < PassiveSpells.size(); ++i)
{
@@ -1133,11 +1133,13 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
{
data << ChannelObjects[i];
}
+ data.WriteBit(Field_314);
+ data.FlushBits();
}
void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
{
- Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xF0FFBFFFu, 0x000F7FFFu, 0xFFFFFF01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u });
+ Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x87FDFFFFu, 0x007BFFFFu, 0xFFFFFC01u, 0x03FFFFFFu, 0x001FC000u, 0x00000000u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -1145,16 +1147,16 @@ void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
- allowedMaskForTarget |= std::array<uint32, 7>{ 0x00002000u, 0x0F004000u, 0xFFF08000u, 0x000000FEu, 0xFF800004u, 0xFFFC07FFu, 0x01FFFFFFu };
+ allowedMaskForTarget |= std::array<uint32, 7>{ 0x00010000u, 0x78020000u, 0xFF840000u, 0x000003FEu, 0xFC000020u, 0xFFE03FFFu, 0x0FFFFFFFu };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
- allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFF800004u, 0x000007FFu, 0x00000000u };
+ allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFC000020u, 0x00003FFFu, 0x00000000u };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
- allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x0F000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u };
+ allowedMaskForTarget |= std::array<uint32, 7>{ 0x00000000u, 0x78000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00003FC0u };
}
void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
- Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xF0FFBFFFu, 0x000F7FFFu, 0xFFFFFF01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u });
+ Mask allowedMaskForTarget({ 0xFFFEFFFFu, 0x87FDFFFFu, 0x007BFFFFu, 0xFFFFFC01u, 0x03FFFFFFu, 0x001FC000u, 0x00000000u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
@@ -1170,6 +1172,10 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
{
if (changesMask[1])
{
+ data.WriteBit(Field_314);
+ }
+ if (changesMask[2])
+ {
data.WriteBits(StateWorldEffectIDs->size(), 32);
for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i)
{
@@ -1180,21 +1186,21 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[2])
+ if (changesMask[3])
{
if (!ignoreNestedChangesMask)
PassiveSpells.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(PassiveSpells.size(), data);
}
- if (changesMask[3])
+ if (changesMask[4])
{
if (!ignoreNestedChangesMask)
WorldEffects.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(WorldEffects.size(), data);
}
- if (changesMask[4])
+ if (changesMask[5])
{
if (!ignoreNestedChangesMask)
ChannelObjects.WriteUpdateMask(data);
@@ -1205,7 +1211,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[2])
+ if (changesMask[3])
{
for (uint32 i = 0; i < PassiveSpells.size(); ++i)
{
@@ -1215,7 +1221,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
}
}
}
- if (changesMask[3])
+ if (changesMask[4])
{
for (uint32 i = 0; i < WorldEffects.size(); ++i)
{
@@ -1225,7 +1231,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
}
}
}
- if (changesMask[4])
+ if (changesMask[5])
{
for (uint32 i = 0; i < ChannelObjects.size(); ++i)
{
@@ -1235,593 +1241,606 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
}
}
}
- if (changesMask[5])
- {
- data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
- }
if (changesMask[6])
{
- data << uint32(StateSpellVisualID);
+ data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver));
}
if (changesMask[7])
{
- data << uint32(StateAnimID);
+ data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, owner, receiver));
}
if (changesMask[8])
{
- data << uint32(StateAnimKitID);
+ data << uint32(ViewerDependentValue<NpcFlags2Tag>::GetValue(this, owner, receiver));
}
if (changesMask[9])
{
- data << uint32(StateWorldEffectsQuestObjectiveID);
+ data << uint32(StateSpellVisualID);
}
if (changesMask[10])
{
- data << int32(SpellOverrideNameID);
+ data << uint32(StateAnimID);
}
if (changesMask[11])
{
- data << Charm;
+ data << uint32(StateAnimKitID);
}
if (changesMask[12])
{
- data << Summon;
+ data << uint32(StateWorldEffectsQuestObjectiveID);
}
if (changesMask[13])
{
- data << Critter;
+ data << int32(SpellOverrideNameID);
}
if (changesMask[14])
{
- data << CharmedBy;
+ data << Charm;
}
if (changesMask[15])
{
- data << SummonedBy;
+ data << Summon;
}
if (changesMask[16])
{
- data << CreatedBy;
+ data << Critter;
}
if (changesMask[17])
{
- data << DemonCreator;
+ data << CharmedBy;
}
if (changesMask[18])
{
- data << LookAtControllerTarget;
+ data << SummonedBy;
}
if (changesMask[19])
{
- data << Target;
+ data << CreatedBy;
}
if (changesMask[20])
{
- data << BattlePetCompanionGUID;
+ data << DemonCreator;
}
if (changesMask[21])
{
- data << uint64(BattlePetDBID);
+ data << LookAtControllerTarget;
}
if (changesMask[22])
{
- ChannelData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << Target;
}
if (changesMask[23])
{
- data << int8(SpellEmpowerStage);
+ data << BattlePetCompanionGUID;
}
if (changesMask[24])
{
- data << uint32(SummonedByHomeRealm);
+ data << uint64(BattlePetDBID);
}
if (changesMask[25])
{
- data << uint8(Race);
+ ChannelData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
if (changesMask[26])
{
- data << uint8(ClassId);
+ data << int8(SpellEmpowerStage);
}
if (changesMask[27])
{
- data << uint8(PlayerClassId);
+ data << uint32(SummonedByHomeRealm);
}
if (changesMask[28])
{
- data << uint8(Sex);
+ data << uint8(Race);
}
if (changesMask[29])
{
- data << uint8(DisplayPower);
+ data << uint8(ClassId);
}
if (changesMask[30])
{
- data << uint32(OverrideDisplayPowerID);
+ data << uint8(PlayerClassId);
}
if (changesMask[31])
{
- data << int64(Health);
+ data << uint8(Sex);
}
}
if (changesMask[32])
{
if (changesMask[33])
{
- data << int64(MaxHealth);
+ data << uint8(DisplayPower);
}
if (changesMask[34])
{
- data << int32(Level);
+ data << uint32(OverrideDisplayPowerID);
}
if (changesMask[35])
{
- data << int32(EffectiveLevel);
+ data << int64(Health);
}
if (changesMask[36])
{
- data << int32(ContentTuningID);
+ data << int64(MaxHealth);
}
if (changesMask[37])
{
- data << int32(ScalingLevelMin);
+ data << int32(Level);
}
if (changesMask[38])
{
- data << int32(ScalingLevelMax);
+ data << int32(EffectiveLevel);
}
if (changesMask[39])
{
- data << int32(ScalingLevelDelta);
+ data << int32(ContentTuningID);
}
if (changesMask[40])
{
- data << int32(ScalingFactionGroup);
+ data << int32(ScalingLevelMin);
}
if (changesMask[41])
{
- data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver));
+ data << int32(ScalingLevelMax);
}
if (changesMask[42])
{
- data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
+ data << int32(ScalingLevelDelta);
}
if (changesMask[43])
{
- data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, owner, receiver));
+ data << int32(ScalingFactionGroup);
}
if (changesMask[44])
{
- data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver));
+ data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver));
}
if (changesMask[45])
{
- data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver));
+ data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver));
}
if (changesMask[46])
{
- data << uint32(RangedAttackRoundBaseTime);
+ data << uint32(ViewerDependentValue<Flags2Tag>::GetValue(this, owner, receiver));
}
if (changesMask[47])
{
- data << float(BoundingRadius);
+ data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver));
}
if (changesMask[48])
{
- data << float(CombatReach);
+ data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver));
}
if (changesMask[49])
{
- data << float(DisplayScale);
+ data << uint32(RangedAttackRoundBaseTime);
}
if (changesMask[50])
{
- data << int32(CreatureFamily);
+ data << float(BoundingRadius);
}
if (changesMask[51])
{
- data << int32(CreatureType);
+ data << float(CombatReach);
}
if (changesMask[52])
{
- data << int32(NativeDisplayID);
+ data << float(DisplayScale);
}
if (changesMask[53])
{
- data << float(NativeXDisplayScale);
+ data << int32(CreatureFamily);
}
if (changesMask[54])
{
- data << int32(MountDisplayID);
+ data << int32(CreatureType);
}
if (changesMask[55])
{
- data << int32(CosmeticMountDisplayID);
+ data << int32(NativeDisplayID);
}
if (changesMask[56])
{
- data << float(MinDamage);
+ data << float(NativeXDisplayScale);
}
if (changesMask[57])
{
- data << float(MaxDamage);
+ data << int32(MountDisplayID);
}
if (changesMask[58])
{
- data << float(MinOffHandDamage);
+ data << int32(CosmeticMountDisplayID);
}
if (changesMask[59])
{
- data << float(MaxOffHandDamage);
+ data << float(MinDamage);
}
if (changesMask[60])
{
- data << uint8(StandState);
+ data << float(MaxDamage);
}
if (changesMask[61])
{
- data << uint8(PetTalentPoints);
+ data << float(MinOffHandDamage);
}
if (changesMask[62])
{
- data << uint8(VisFlags);
+ data << float(MaxOffHandDamage);
}
if (changesMask[63])
{
- data << uint8(AnimTier);
+ data << uint8(StandState);
}
}
if (changesMask[64])
{
if (changesMask[65])
{
- data << uint32(PetNumber);
+ data << uint8(PetTalentPoints);
}
if (changesMask[66])
{
- data << uint32(PetNameTimestamp);
+ data << uint8(VisFlags);
}
if (changesMask[67])
{
- data << uint32(PetExperience);
+ data << uint8(AnimTier);
}
if (changesMask[68])
{
- data << uint32(PetNextLevelExperience);
+ data << uint32(PetNumber);
}
if (changesMask[69])
{
- data << float(ModCastingSpeed);
+ data << uint32(PetNameTimestamp);
}
if (changesMask[70])
{
- data << float(ModCastingSpeedNeg);
+ data << uint32(PetExperience);
}
if (changesMask[71])
{
- data << float(ModSpellHaste);
+ data << uint32(PetNextLevelExperience);
}
if (changesMask[72])
{
- data << float(ModHaste);
+ data << float(ModCastingSpeed);
}
if (changesMask[73])
{
- data << float(ModRangedHaste);
+ data << float(ModCastingSpeedNeg);
}
if (changesMask[74])
{
- data << float(ModHasteRegen);
+ data << float(ModSpellHaste);
}
if (changesMask[75])
{
- data << float(ModTimeRate);
+ data << float(ModHaste);
}
if (changesMask[76])
{
- data << int32(CreatedBySpell);
+ data << float(ModRangedHaste);
}
if (changesMask[77])
{
- data << int32(EmoteState);
+ data << float(ModHasteRegen);
}
if (changesMask[78])
{
- data << int32(BaseMana);
+ data << float(ModTimeRate);
}
if (changesMask[79])
{
- data << int32(BaseHealth);
+ data << int32(CreatedBySpell);
}
if (changesMask[80])
{
- data << uint8(SheatheState);
+ data << int32(EmoteState);
}
if (changesMask[81])
{
- data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver));
+ data << int32(BaseMana);
}
if (changesMask[82])
{
- data << uint8(PetFlags);
+ data << int32(BaseHealth);
}
if (changesMask[83])
{
- data << uint8(ShapeshiftForm);
+ data << uint8(SheatheState);
}
if (changesMask[84])
{
- data << int32(AttackPower);
+ data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver));
}
if (changesMask[85])
{
- data << int32(AttackPowerModPos);
+ data << uint8(PetFlags);
}
if (changesMask[86])
{
- data << int32(AttackPowerModNeg);
+ data << uint8(ShapeshiftForm);
}
if (changesMask[87])
{
- data << float(AttackPowerMultiplier);
+ data << int32(AttackPower);
}
if (changesMask[88])
{
- data << int32(AttackPowerModSupport);
+ data << int32(AttackPowerModPos);
}
if (changesMask[89])
{
- data << int32(RangedAttackPower);
+ data << int32(AttackPowerModNeg);
}
if (changesMask[90])
{
- data << int32(RangedAttackPowerModPos);
+ data << float(AttackPowerMultiplier);
}
if (changesMask[91])
{
- data << int32(RangedAttackPowerModNeg);
+ data << int32(AttackPowerModSupport);
}
if (changesMask[92])
{
- data << float(RangedAttackPowerMultiplier);
+ data << int32(RangedAttackPower);
}
if (changesMask[93])
{
- data << int32(RangedAttackPowerModSupport);
+ data << int32(RangedAttackPowerModPos);
}
if (changesMask[94])
{
- data << int32(MainHandWeaponAttackPower);
+ data << int32(RangedAttackPowerModNeg);
}
if (changesMask[95])
{
- data << int32(OffHandWeaponAttackPower);
+ data << float(RangedAttackPowerMultiplier);
}
}
if (changesMask[96])
{
if (changesMask[97])
{
- data << int32(RangedWeaponAttackPower);
+ data << int32(RangedAttackPowerModSupport);
}
if (changesMask[98])
{
- data << int32(SetAttackSpeedAura);
+ data << int32(MainHandWeaponAttackPower);
}
if (changesMask[99])
{
- data << float(Lifesteal);
+ data << int32(OffHandWeaponAttackPower);
}
if (changesMask[100])
{
- data << float(MinRangedDamage);
+ data << int32(RangedWeaponAttackPower);
}
if (changesMask[101])
{
- data << float(MaxRangedDamage);
+ data << int32(SetAttackSpeedAura);
}
if (changesMask[102])
{
- data << float(ManaCostMultiplier);
+ data << float(Lifesteal);
}
if (changesMask[103])
{
- data << float(MaxHealthModifier);
+ data << float(MinRangedDamage);
}
if (changesMask[104])
{
- data << float(HoverHeight);
+ data << float(MaxRangedDamage);
}
if (changesMask[105])
{
- data << int32(MinItemLevelCutoff);
+ data << float(ManaCostMultiplier);
}
if (changesMask[106])
{
- data << int32(MinItemLevel);
+ data << float(MaxHealthModifier);
}
if (changesMask[107])
{
- data << int32(MaxItemLevel);
+ data << float(HoverHeight);
}
if (changesMask[108])
{
- data << int32(AzeriteItemLevel);
+ data << int32(MinItemLevelCutoff);
}
if (changesMask[109])
{
- data << int32(WildBattlePetLevel);
+ data << int32(MinItemLevel);
}
if (changesMask[110])
{
- data << int32(BattlePetCompanionExperience);
+ data << int32(MaxItemLevel);
}
if (changesMask[111])
{
- data << uint32(BattlePetCompanionNameTimestamp);
+ data << int32(AzeriteItemLevel);
}
if (changesMask[112])
{
- data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
+ data << int32(WildBattlePetLevel);
}
if (changesMask[113])
{
- data << int32(ScaleDuration);
+ data << int32(BattlePetCompanionExperience);
}
if (changesMask[114])
{
- data << int32(LooksLikeMountID);
+ data << uint32(BattlePetCompanionNameTimestamp);
}
if (changesMask[115])
{
- data << int32(LooksLikeCreatureID);
+ data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver));
}
if (changesMask[116])
{
- data << int32(LookAtControllerID);
+ data << int32(ScaleDuration);
}
if (changesMask[117])
{
- data << int32(PerksVendorItemID);
+ data << int32(LooksLikeMountID);
}
if (changesMask[118])
{
- data << int32(TaxiNodesID);
+ data << int32(LooksLikeCreatureID);
}
if (changesMask[119])
{
- data << GuildGUID;
+ data << int32(LookAtControllerID);
}
if (changesMask[120])
{
- data << int32(FlightCapabilityID);
+ data << int32(PerksVendorItemID);
}
if (changesMask[121])
{
- data << float(GlideEventSpeedDivisor);
+ data << int32(TaxiNodesID);
}
if (changesMask[122])
{
- data << uint32(Field_308);
+ data << GuildGUID;
}
if (changesMask[123])
{
- data << uint32(Field_30C);
+ data << int32(FlightCapabilityID);
}
if (changesMask[124])
{
- data << uint32(SilencedSchoolMask);
+ data << float(GlideEventSpeedDivisor);
}
if (changesMask[125])
{
- data << uint32(CurrentAreaID);
+ data << uint32(MaxHealthModifierFlatNeg);
}
if (changesMask[126])
{
- data << NameplateAttachToGUID;
+ data << uint32(MaxHealthModifierFlatPos);
+ }
+ if (changesMask[127])
+ {
+ data << uint32(SilencedSchoolMask);
}
}
- if (changesMask[127])
+ if (changesMask[128])
{
- for (uint32 i = 0; i < 2; ++i)
+ if (changesMask[129])
{
- if (changesMask[128 + i])
- {
- data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver));
- }
+ data << uint32(CurrentAreaID);
+ }
+ if (changesMask[130])
+ {
+ data << float(Field_31C);
+ }
+ if (changesMask[131])
+ {
+ data << float(Field_320);
+ }
+ if (changesMask[132])
+ {
+ data << NameplateAttachToGUID;
}
}
- if (changesMask[130])
+ if (changesMask[133])
{
for (uint32 i = 0; i < 10; ++i)
{
- if (changesMask[131 + i])
+ if (changesMask[134 + i])
{
data << int32(Power[i]);
}
- if (changesMask[141 + i])
+ if (changesMask[144 + i])
{
data << int32(MaxPower[i]);
}
- if (changesMask[151 + i])
+ if (changesMask[154 + i])
{
data << float(PowerRegenFlatModifier[i]);
}
- if (changesMask[161 + i])
+ if (changesMask[164 + i])
{
data << float(PowerRegenInterruptedFlatModifier[i]);
}
}
}
- if (changesMask[171])
+ if (changesMask[174])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[172 + i])
+ if (changesMask[175 + i])
{
VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[175])
+ if (changesMask[178])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[176 + i])
+ if (changesMask[179 + i])
{
data << uint32(AttackRoundBaseTime[i]);
}
}
}
- if (changesMask[178])
+ if (changesMask[181])
{
for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[179 + i])
+ if (changesMask[182 + i])
{
data << int32(Stats[i]);
}
- if (changesMask[183 + i])
+ if (changesMask[186 + i])
{
data << int32(StatPosBuff[i]);
}
- if (changesMask[187 + i])
+ if (changesMask[190 + i])
{
data << int32(StatNegBuff[i]);
}
- if (changesMask[191 + i])
+ if (changesMask[194 + i])
{
data << int32(StatSupportBuff[i]);
}
}
}
- if (changesMask[195])
+ if (changesMask[198])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[196 + i])
+ if (changesMask[199 + i])
{
data << int32(Resistances[i]);
}
- if (changesMask[203 + i])
+ if (changesMask[206 + i])
{
data << int32(BonusResistanceMods[i]);
}
- if (changesMask[210 + i])
+ if (changesMask[213 + i])
{
data << int32(ManaCostModifier[i]);
}
}
}
+ data.FlushBits();
}
void UnitData::ClearChangesMask()
{
+ Base::ClearChangesMask(Field_314);
Base::ClearChangesMask(StateWorldEffectIDs);
Base::ClearChangesMask(PassiveSpells);
Base::ClearChangesMask(WorldEffects);
Base::ClearChangesMask(ChannelObjects);
Base::ClearChangesMask(DisplayID);
+ Base::ClearChangesMask(NpcFlags);
+ Base::ClearChangesMask(NpcFlags2);
Base::ClearChangesMask(StateSpellVisualID);
Base::ClearChangesMask(StateAnimID);
Base::ClearChangesMask(StateAnimKitID);
@@ -1935,12 +1954,13 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(GuildGUID);
Base::ClearChangesMask(FlightCapabilityID);
Base::ClearChangesMask(GlideEventSpeedDivisor);
- Base::ClearChangesMask(Field_308);
- Base::ClearChangesMask(Field_30C);
+ Base::ClearChangesMask(MaxHealthModifierFlatNeg);
+ Base::ClearChangesMask(MaxHealthModifierFlatPos);
Base::ClearChangesMask(SilencedSchoolMask);
Base::ClearChangesMask(CurrentAreaID);
+ Base::ClearChangesMask(Field_31C);
+ Base::ClearChangesMask(Field_320);
Base::ClearChangesMask(NameplateAttachToGUID);
- Base::ClearChangesMask(NpcFlags);
Base::ClearChangesMask(Power);
Base::ClearChangesMask(MaxPower);
Base::ClearChangesMask(PowerRegenFlatModifier);
@@ -2885,6 +2905,93 @@ void SkillInfo::ClearChangesMask()
_changesMask.ResetAll();
}
+void BitVectors::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ for (uint32 i = 0; i < 11; ++i)
+ {
+ data << uint32(Values[i].size());
+ for (uint32 j = 0; j < Values[i].size(); ++j)
+ {
+ data << uint64(Values[i][j]);
+ }
+ }
+}
+
+void BitVectors::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 1);
+
+ if (changesMask[0])
+ {
+ for (uint32 i = 0; i < 11; ++i)
+ {
+ if (!ignoreChangesMask)
+ Values[i].WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(Values[i].size(), data);
+ }
+ }
+ if (changesMask[0])
+ {
+ for (uint32 i = 0; i < 11; ++i)
+ {
+ for (uint32 j = 0; j < Values[i].size(); ++j)
+ {
+ if (Values[i].HasChanged(j) || ignoreChangesMask)
+ {
+ data << uint64(Values[i][j]);
+ }
+ }
+ }
+ }
+ data.FlushBits();
+}
+
+void BitVectors::ClearChangesMask()
+{
+ Base::ClearChangesMask(Values);
+ _changesMask.ResetAll();
+}
+
+void PlayerDataElement::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data.WriteBits(Type, 1);
+ if (Type == 1)
+ {
+ data << float(FloatValue);
+ }
+ if (Type == 0)
+ {
+ data << int64(Int64Value);
+ }
+ data.FlushBits();
+}
+
+void PlayerDataElement::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ data.WriteBits(Type, 1);
+ if (Type == 1)
+ {
+ data << float(FloatValue);
+ }
+ if (Type == 0)
+ {
+ data << int64(Int64Value);
+ }
+ data.FlushBits();
+}
+
+bool PlayerDataElement::operator==(PlayerDataElement const& right) const
+{
+ return Type == right.Type
+ && FloatValue == right.FloatValue
+ && Int64Value == right.Int64Value;
+}
+
void RestInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << uint32(Threshold);
@@ -3418,11 +3525,44 @@ bool TraitEntry::operator==(TraitEntry const& right) const
&& GrantedRanks == right.GrantedRanks;
}
+void TraitSubTreeCache::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int32(TraitSubTreeID);
+ data << uint32(Entries.size());
+ for (uint32 i = 0; i < Entries.size(); ++i)
+ {
+ Entries[i].WriteCreate(data, owner, receiver);
+ }
+ data.WriteBits(Active, 1);
+ data.FlushBits();
+}
+
+void TraitSubTreeCache::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ data << int32(TraitSubTreeID);
+ data << uint32(Entries.size());
+ for (uint32 i = 0; i < Entries.size(); ++i)
+ {
+ Entries[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
+ }
+ data.FlushBits();
+ data.WriteBits(Active, 1);
+ data.FlushBits();
+}
+
+bool TraitSubTreeCache::operator==(TraitSubTreeCache const& right) const
+{
+ return Entries == right.Entries
+ && TraitSubTreeID == right.TraitSubTreeID
+ && Active == right.Active;
+}
+
void TraitConfig::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ID);
data << int32(Type);
data << uint32(Entries.size());
+ data << uint32(SubTrees.size());
if (Type == 2)
{
data << int32(SkillLineID);
@@ -3442,6 +3582,10 @@ void TraitConfig::WriteCreate(ByteBuffer& data, Player const* owner, Player cons
Entries[i].WriteCreate(data, owner, receiver);
}
data.WriteBits(Name->size(), 9);
+ for (uint32 i = 0; i < SubTrees.size(); ++i)
+ {
+ SubTrees[i].WriteCreate(data, owner, receiver);
+ }
data.WriteString(Name);
data.FlushBits();
}
@@ -3452,7 +3596,7 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c
if (ignoreChangesMask)
changesMask.SetAll();
- data.WriteBits(changesMask.GetBlock(0), 12);
+ data.WriteBits(changesMask.GetBlock(0), 14);
if (changesMask[0])
{
@@ -3463,6 +3607,13 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c
else
WriteCompleteDynamicFieldUpdateMask(Entries.size(), data);
}
+ if (changesMask[2])
+ {
+ if (!ignoreChangesMask)
+ SubTrees.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(SubTrees.size(), data);
+ }
}
data.FlushBits();
if (changesMask[0])
@@ -3479,47 +3630,60 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c
}
if (changesMask[2])
{
+ for (uint32 i = 0; i < SubTrees.size(); ++i)
+ {
+ if (SubTrees.HasChanged(i) || ignoreChangesMask)
+ {
+ SubTrees[i].WriteUpdate(data, ignoreChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[3])
+ {
data << int32(ID);
}
}
if (changesMask[4])
{
- if (changesMask[5])
+ if (changesMask[6])
{
data << int32(Type);
}
- if (changesMask[6])
+ if (changesMask[7])
{
if (Type == 2)
{
data << int32(SkillLineID);
}
}
- if (changesMask[7])
+ }
+ if (changesMask[8])
+ {
+ if (changesMask[9])
{
if (Type == 1)
{
data << int32(ChrSpecializationID);
}
}
- }
- if (changesMask[8])
- {
- if (changesMask[9])
+ if (changesMask[10])
{
if (Type == 1)
{
data << int32(CombatConfigFlags);
}
}
- if (changesMask[10])
+ if (changesMask[11])
{
if (Type == 1)
{
data << int32(LocalIdentifier);
}
}
- if (changesMask[11])
+ }
+ if (changesMask[12])
+ {
+ if (changesMask[13])
{
if (Type == 3)
{
@@ -3527,9 +3691,9 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c
}
}
}
- if (changesMask[0])
+ if (changesMask[4])
{
- if (changesMask[3])
+ if (changesMask[5])
{
data.WriteBits(Name->size(), 9);
data.WriteString(Name);
@@ -3541,6 +3705,7 @@ void TraitConfig::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player c
void TraitConfig::ClearChangesMask()
{
Base::ClearChangesMask(Entries);
+ Base::ClearChangesMask(SubTrees);
Base::ClearChangesMask(ID);
Base::ClearChangesMask(Name);
Base::ClearChangesMask(Type);
@@ -3624,6 +3789,70 @@ void CraftingOrderItem::ClearChangesMask()
_changesMask.ResetAll();
}
+void CraftingOrderCustomer::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << CustomerGUID;
+ data << CustomerAccountGUID;
+}
+
+void CraftingOrderCustomer::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 2);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ data << CustomerGUID;
+ }
+ if (changesMask[1])
+ {
+ data << CustomerAccountGUID;
+ }
+}
+
+void CraftingOrderCustomer::ClearChangesMask()
+{
+ Base::ClearChangesMask(CustomerGUID);
+ Base::ClearChangesMask(CustomerAccountGUID);
+ _changesMask.ResetAll();
+}
+
+void CraftingOrderNpcCustomer::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int64(NpcCraftingOrderCustomerID);
+ data << int32(Field_8);
+}
+
+void CraftingOrderNpcCustomer::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 2);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ data << int64(NpcCraftingOrderCustomerID);
+ }
+ if (changesMask[1])
+ {
+ data << int32(Field_8);
+ }
+}
+
+void CraftingOrderNpcCustomer::ClearChangesMask()
+{
+ Base::ClearChangesMask(NpcCraftingOrderCustomerID);
+ Base::ClearChangesMask(Field_8);
+ _changesMask.ResetAll();
+}
+
void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(Field_0);
@@ -3637,12 +3866,14 @@ void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Playe
data << int64(TipAmount);
data << int64(ConsortiumCut);
data << uint32(Flags);
- data << CustomerGUID;
- data << CustomerAccountGUID;
data << CrafterGUID;
data << PersonalCrafterGUID;
+ data << int32(NpcCraftingOrderSetID);
+ data << int32(NpcTreasureID);
data << uint32(Reagents.size());
data.WriteBits(CustomerNotes->size(), 10);
+ data.WriteBits(Customer.has_value(), 1);
+ data.WriteBits(NpcCustomer.has_value(), 1);
data.WriteBits(OutputItem.has_value(), 1);
data.WriteBits(OutputItemData.has_value(), 1);
data.FlushBits();
@@ -3651,6 +3882,14 @@ void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Playe
Reagents[i].WriteCreate(data, owner, receiver);
}
data.WriteString(CustomerNotes);
+ if (Customer.has_value())
+ {
+ Customer->WriteCreate(data, owner, receiver);
+ }
+ if (NpcCustomer.has_value())
+ {
+ NpcCustomer->WriteCreate(data, owner, receiver);
+ }
if (OutputItem.has_value())
{
OutputItem->WriteCreate(data, owner, receiver);
@@ -3668,7 +3907,7 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl
if (ignoreChangesMask)
changesMask.SetAll();
- data.WriteBits(changesMask.GetBlock(0), 24);
+ data.WriteBits(changesMask.GetBlock(0), 26);
if (changesMask[0])
{
@@ -3705,13 +3944,13 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl
{
data << int32(SkillLineAbilityID);
}
- }
- if (changesMask[5])
- {
- if (changesMask[6])
+ if (changesMask[5])
{
data << uint8(OrderState);
}
+ }
+ if (changesMask[6])
+ {
if (changesMask[7])
{
data << uint8(OrderType);
@@ -3724,17 +3963,17 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl
{
data << int64(ExpirationTime);
}
- }
- if (changesMask[10])
- {
- if (changesMask[11])
+ if (changesMask[10])
{
data << int64(ClaimEndTime);
}
- if (changesMask[12])
+ if (changesMask[11])
{
data << int64(TipAmount);
}
+ }
+ if (changesMask[12])
+ {
if (changesMask[13])
{
data << int64(ConsortiumCut);
@@ -3743,44 +3982,68 @@ void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Pl
{
data << uint32(Flags);
}
- }
- if (changesMask[15])
- {
+ if (changesMask[15])
+ {
+ data << CrafterGUID;
+ }
if (changesMask[16])
{
- data << CustomerGUID;
+ data << PersonalCrafterGUID;
}
if (changesMask[17])
{
- data << CustomerAccountGUID;
+ data << int32(NpcCraftingOrderSetID);
}
- if (changesMask[18])
+ }
+ if (changesMask[18])
+ {
+ if (changesMask[19])
{
- data << CrafterGUID;
+ data << int32(NpcTreasureID);
}
- if (changesMask[19])
+ if (changesMask[20])
{
- data << PersonalCrafterGUID;
+ data.WriteBits(CustomerNotes->size(), 10);
}
+ data.WriteBits(Customer.has_value(), 1);
+ data.WriteBits(NpcCustomer.has_value(), 1);
+ data.WriteBits(OutputItem.has_value(), 1);
}
- if (changesMask[20])
+ if (changesMask[24])
{
- if (changesMask[21])
+ data.WriteBits(OutputItemData.has_value(), 1);
+ }
+ if (changesMask[18])
+ {
+ if (changesMask[20])
{
- data.WriteBits(CustomerNotes->size(), 10);
data.WriteString(CustomerNotes);
}
- data.WriteBits(OutputItem.has_value(), 1);
- data.WriteBits(OutputItemData.has_value(), 1);
- data.FlushBits();
+ if (changesMask[21])
+ {
+ if (Customer.has_value())
+ {
+ Customer->WriteUpdate(data, ignoreChangesMask, owner, receiver);
+ }
+ }
if (changesMask[22])
{
+ if (NpcCustomer.has_value())
+ {
+ NpcCustomer->WriteUpdate(data, ignoreChangesMask, owner, receiver);
+ }
+ }
+ if (changesMask[23])
+ {
if (OutputItem.has_value())
{
OutputItem->WriteUpdate(data, ignoreChangesMask, owner, receiver);
}
}
- if (changesMask[23])
+ }
+ if (changesMask[24])
+ {
+ if (changesMask[25])
{
if (OutputItemData.has_value())
{
@@ -3805,11 +4068,13 @@ void CraftingOrderData::ClearChangesMask()
Base::ClearChangesMask(TipAmount);
Base::ClearChangesMask(ConsortiumCut);
Base::ClearChangesMask(Flags);
- Base::ClearChangesMask(CustomerGUID);
- Base::ClearChangesMask(CustomerAccountGUID);
Base::ClearChangesMask(CrafterGUID);
Base::ClearChangesMask(PersonalCrafterGUID);
+ Base::ClearChangesMask(NpcCraftingOrderSetID);
+ Base::ClearChangesMask(NpcTreasureID);
Base::ClearChangesMask(CustomerNotes);
+ Base::ClearChangesMask(Customer);
+ Base::ClearChangesMask(NpcCustomer);
Base::ClearChangesMask(OutputItem);
Base::ClearChangesMask(OutputItemData);
_changesMask.ResetAll();
@@ -3937,6 +4202,50 @@ void PersonalCraftingOrderCount::ClearChangesMask()
_changesMask.ResetAll();
}
+void NPCCraftingOrderInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << uint64(Field_0);
+ data << int32(Field_8);
+ data << int32(Field_C);
+ data << int32(Field_10);
+}
+
+void NPCCraftingOrderInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 4);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ data << uint64(Field_0);
+ }
+ if (changesMask[1])
+ {
+ data << int32(Field_8);
+ }
+ if (changesMask[2])
+ {
+ data << int32(Field_C);
+ }
+ if (changesMask[3])
+ {
+ data << int32(Field_10);
+ }
+}
+
+void NPCCraftingOrderInfo::ClearChangesMask()
+{
+ Base::ClearChangesMask(Field_0);
+ Base::ClearChangesMask(Field_8);
+ Base::ClearChangesMask(Field_C);
+ Base::ClearChangesMask(Field_10);
+ _changesMask.ResetAll();
+}
+
void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(SpellCategoryID);
@@ -4138,6 +4447,134 @@ void CollectableSourceTrackedData::ClearChangesMask()
_changesMask.ResetAll();
}
+void BankTabSettings::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data.WriteBits(Name->size(), 7);
+ data.WriteBits(Icon->size(), 9);
+ data.WriteBits(Description->size(), 14);
+ data << int32(DepositFlags);
+ data.WriteString(Name);
+ data.WriteString(Icon);
+ data.WriteString(Description);
+ data.FlushBits();
+}
+
+void BankTabSettings::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 4);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ data.WriteBits(Name->size(), 7);
+ }
+ if (changesMask[1])
+ {
+ data.WriteBits(Icon->size(), 9);
+ }
+ if (changesMask[2])
+ {
+ data.WriteBits(Description->size(), 14);
+ }
+ if (changesMask[3])
+ {
+ data << int32(DepositFlags);
+ }
+ if (changesMask[0])
+ {
+ data.WriteString(Name);
+ }
+ if (changesMask[1])
+ {
+ data.WriteString(Icon);
+ }
+ if (changesMask[2])
+ {
+ data.WriteString(Description);
+ }
+ data.FlushBits();
+}
+
+void BankTabSettings::ClearChangesMask()
+{
+ Base::ClearChangesMask(Name);
+ Base::ClearChangesMask(Icon);
+ Base::ClearChangesMask(Description);
+ Base::ClearChangesMask(DepositFlags);
+ _changesMask.ResetAll();
+}
+
+void WalkInData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int32(MapID);
+ data << int64(Field_8);
+ data << Field_18;
+ data.WriteBits(Type, 1);
+ data.FlushBits();
+}
+
+void WalkInData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ data << int32(MapID);
+ data << int64(Field_8);
+ data << Field_18;
+ data.WriteBits(Type, 1);
+ data.FlushBits();
+}
+
+bool WalkInData::operator==(WalkInData const& right) const
+{
+ return MapID == right.MapID
+ && Field_8 == right.Field_8
+ && Type == right.Type
+ && Field_18 == right.Field_18;
+}
+
+void DelveData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int32(Field_0);
+ data << int64(Field_8);
+ data << int32(Field_10);
+ data << int32(SpellID);
+ data << uint32(Owners.size());
+ for (uint32 i = 0; i < Owners.size(); ++i)
+ {
+ data << Owners[i];
+ }
+ data.WriteBits(Started, 1);
+ data.FlushBits();
+}
+
+void DelveData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ data.FlushBits();
+ data << int32(Field_0);
+ data << int64(Field_8);
+ data << int32(Field_10);
+ data << int32(SpellID);
+ data << uint32(Owners.size());
+ for (uint32 i = 0; i < Owners.size(); ++i)
+ {
+ data << Owners[i];
+ }
+ data.WriteBits(Started, 1);
+ data.FlushBits();
+}
+
+bool DelveData::operator==(DelveData const& right) const
+{
+ return Owners == right.Owners
+ && Field_0 == right.Field_0
+ && Field_8 == right.Field_8
+ && Field_10 == right.Field_10
+ && SpellID == right.SpellID
+ && Started == right.Started;
+}
+
void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int16(ResearchProjectID);
@@ -4155,7 +4592,7 @@ bool Research::operator==(Research const& right) const
void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- for (uint32 i = 0; i < 227; ++i)
+ for (uint32 i = 0; i < 232; ++i)
{
data << InvSlots[i];
}
@@ -4163,6 +4600,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << SummonedBattlePetGUID;
data << uint32(KnownTitles.size());
data << uint64(Coinage);
+ data << uint64(AccountBankCoinage);
data << int32(XP);
data << int32(NextLevelXP);
data << int32(TrialXP);
@@ -4193,14 +4631,9 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << float(VersatilityBonus);
data << float(PvpPowerDamage);
data << float(PvpPowerHealing);
- for (uint32 i = 0; i < 9; ++i)
- {
- data << uint32(DataFlags[i].size());
- for (uint32 j = 0; j < DataFlags[i].size(); ++j)
- {
- data << uint64(DataFlags[i][j]);
- }
- }
+ BitVectors->WriteCreate(data, owner, receiver);
+ data << uint32(CharacterDataElements.size());
+ data << uint32(AccountDataElements.size());
for (uint32 i = 0; i < 2; ++i)
{
RestInfo[i].WriteCreate(data, owner, receiver);
@@ -4278,7 +4711,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
data << uint32(BankBagSlotFlags[i]);
}
- for (uint32 i = 0; i < 950; ++i)
+ for (uint32 i = 0; i < 960; ++i)
{
data << uint64(QuestCompleted[i]);
}
@@ -4286,6 +4719,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << int32(HonorNextLevel);
data << int32(PerksProgramCurrency);
data << uint8(NumBankSlots);
+ data << uint8(NumAccountBankTabs);
for (uint32 i = 0; i < 1; ++i)
{
data << uint32(ResearchSites[i].size());
@@ -4333,6 +4767,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << uint32(ActiveCombatTraitConfigID);
data << uint32(CraftingOrders.size());
data << uint32(PersonalCraftingOrderCounts.size());
+ data << uint32(NpcCraftingOrders.size());
data << uint32(CategoryCooldownMods.size());
data << uint32(WeeklySpellUses.size());
for (uint32 i = 0; i < 17; ++i)
@@ -4431,6 +4866,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver);
}
+ for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
+ {
+ NpcCraftingOrders[i].WriteCreate(data, owner, receiver);
+ }
for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
{
CategoryCooldownMods[i].WriteCreate(data, owner, receiver);
@@ -4452,6 +4891,9 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data.WriteBit(HasPerksProgramPendingReward);
data.WriteBits(QuestSession.has_value(), 1);
data.WriteBits(PetStable.has_value(), 1);
+ data.WriteBits(AccountBankTabSettings.size(), 3);
+ data.WriteBits(WalkInData.has_value(), 1);
+ data.WriteBits(DelveData.has_value(), 1);
data.FlushBits();
ResearchHistory->WriteCreate(data, owner, receiver);
if (QuestSession.has_value())
@@ -4461,6 +4903,14 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << FrozenPerksVendorItem;
Field_1410->WriteCreate(data, owner, receiver);
data << DungeonScore;
+ for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
+ {
+ CharacterDataElements[i].WriteCreate(data, owner, receiver);
+ }
+ for (uint32 i = 0; i < AccountDataElements.size(); ++i)
+ {
+ AccountDataElements[i].WriteCreate(data, owner, receiver);
+ }
for (uint32 i = 0; i < PvpInfo.size(); ++i)
{
PvpInfo[i].WriteCreate(data, owner, receiver);
@@ -4481,6 +4931,18 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
PetStable->WriteCreate(data, owner, receiver);
}
+ for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
+ {
+ AccountBankTabSettings[i].WriteCreate(data, owner, receiver);
+ }
+ if (WalkInData.has_value())
+ {
+ WalkInData->WriteCreate(data, owner, receiver);
+ }
+ if (DelveData.has_value())
+ {
+ DelveData->WriteCreate(data, owner, receiver);
+ }
data.FlushBits();
}
@@ -4493,8 +4955,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), 14);
- for (uint32 i = 0; i < 46; ++i)
+ data.WriteBits(changesMask.GetBlocksMask(1), 15);
+ for (uint32 i = 0; i < 47; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -4531,39 +4993,21 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
else
WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data);
}
- }
- if (changesMask[36])
- {
- for (uint32 i = 0; i < 9; ++i)
+ if (changesMask[8])
{
- if (changesMask[37])
- {
- if (!ignoreNestedChangesMask)
- DataFlags[i].WriteUpdateMask(data);
- else
- WriteCompleteDynamicFieldUpdateMask(DataFlags[i].size(), data);
- }
+ if (!ignoreNestedChangesMask)
+ CharacterDataElements.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(CharacterDataElements.size(), data);
}
- }
- if (changesMask[36])
- {
- for (uint32 i = 0; i < 9; ++i)
+ if (changesMask[9])
{
- if (changesMask[37])
- {
- for (uint32 j = 0; j < DataFlags[i].size(); ++j)
- {
- if (DataFlags[i].HasChanged(j) || ignoreNestedChangesMask)
- {
- data << uint64(DataFlags[i][j]);
- }
- }
- }
+ if (!ignoreNestedChangesMask)
+ AccountDataElements.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(AccountDataElements.size(), data);
}
- }
- if (changesMask[0])
- {
- if (changesMask[8])
+ if (changesMask[10])
{
if (!ignoreNestedChangesMask)
PvpInfo.WriteUpdateMask(data);
@@ -4571,11 +5015,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data);
}
}
- if (changesMask[38])
+ if (changesMask[40])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[39])
+ if (changesMask[41])
{
if (!ignoreNestedChangesMask)
ResearchSites[i].WriteUpdateMask(data);
@@ -4584,11 +5028,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[40])
+ if (changesMask[42])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[41])
+ if (changesMask[43])
{
if (!ignoreNestedChangesMask)
ResearchSiteProgress[i].WriteUpdateMask(data);
@@ -4597,11 +5041,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[42])
+ if (changesMask[44])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[43])
+ if (changesMask[45])
{
if (!ignoreNestedChangesMask)
Research[i].WriteUpdateMask(data);
@@ -4610,11 +5054,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[38])
+ if (changesMask[40])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[39])
+ if (changesMask[41])
{
for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
{
@@ -4626,11 +5070,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[40])
+ if (changesMask[42])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[41])
+ if (changesMask[43])
{
for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
{
@@ -4642,11 +5086,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[42])
+ if (changesMask[44])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[43])
+ if (changesMask[45])
{
for (uint32 j = 0; j < Research[i].size(); ++j)
{
@@ -4661,185 +5105,192 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[9])
+ if (changesMask[11])
{
if (!ignoreNestedChangesMask)
DailyQuestsCompleted.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.size(), data);
}
- if (changesMask[10])
+ if (changesMask[12])
{
if (!ignoreNestedChangesMask)
AvailableQuestLineXQuestIDs.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data);
}
- if (changesMask[11])
+ if (changesMask[13])
{
if (!ignoreNestedChangesMask)
Heirlooms.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data);
}
- if (changesMask[12])
+ if (changesMask[14])
{
if (!ignoreNestedChangesMask)
HeirloomFlags.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data);
}
- if (changesMask[13])
+ if (changesMask[15])
{
if (!ignoreNestedChangesMask)
Toys.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Toys.size(), data);
}
- if (changesMask[14])
+ if (changesMask[16])
{
if (!ignoreNestedChangesMask)
ToyFlags.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data);
}
- if (changesMask[15])
+ if (changesMask[17])
{
if (!ignoreNestedChangesMask)
Transmog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data);
}
- if (changesMask[16])
+ if (changesMask[18])
{
if (!ignoreNestedChangesMask)
ConditionalTransmog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data);
}
- if (changesMask[17])
+ if (changesMask[19])
{
if (!ignoreNestedChangesMask)
SelfResSpells.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data);
}
- if (changesMask[18])
+ if (changesMask[20])
{
if (!ignoreNestedChangesMask)
RuneforgePowers.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data);
}
- if (changesMask[19])
+ if (changesMask[21])
{
if (!ignoreNestedChangesMask)
TransmogIllusions.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data);
}
- if (changesMask[20])
+ if (changesMask[22])
{
if (!ignoreNestedChangesMask)
CharacterRestrictions.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data);
}
- if (changesMask[21])
+ if (changesMask[23])
{
if (!ignoreNestedChangesMask)
SpellPctModByLabel.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data);
}
- if (changesMask[22])
+ if (changesMask[24])
{
if (!ignoreNestedChangesMask)
SpellFlatModByLabel.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data);
}
- if (changesMask[23])
+ if (changesMask[25])
{
if (!ignoreNestedChangesMask)
MawPowers.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data);
}
- if (changesMask[24])
+ if (changesMask[26])
{
if (!ignoreNestedChangesMask)
MultiFloorExploration.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data);
}
- if (changesMask[25])
+ if (changesMask[27])
{
if (!ignoreNestedChangesMask)
RecipeProgression.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data);
}
- if (changesMask[26])
+ if (changesMask[28])
{
if (!ignoreNestedChangesMask)
ReplayedQuests.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data);
}
- if (changesMask[27])
+ if (changesMask[29])
{
if (!ignoreNestedChangesMask)
TaskQuests.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data);
}
- if (changesMask[28])
+ if (changesMask[30])
{
if (!ignoreNestedChangesMask)
DisabledSpells.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data);
}
- if (changesMask[29])
+ if (changesMask[31])
{
if (!ignoreNestedChangesMask)
TraitConfigs.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data);
}
- if (changesMask[30])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
{
if (!ignoreNestedChangesMask)
CraftingOrders.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data);
}
- if (changesMask[31])
+ if (changesMask[34])
{
if (!ignoreNestedChangesMask)
PersonalCraftingOrderCounts.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data);
}
- }
- if (changesMask[32])
- {
- if (changesMask[33])
+ if (changesMask[35])
+ {
+ if (!ignoreNestedChangesMask)
+ NpcCraftingOrders.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(NpcCraftingOrders.size(), data);
+ }
+ if (changesMask[36])
{
if (!ignoreNestedChangesMask)
CategoryCooldownMods.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data);
}
- if (changesMask[34])
+ if (changesMask[37])
{
if (!ignoreNestedChangesMask)
WeeklySpellUses.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data);
}
- if (changesMask[35])
+ if (changesMask[38])
{
if (!ignoreNestedChangesMask)
TrackedCollectableSources.WriteUpdateMask(data);
@@ -4860,7 +5311,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[9])
+ if (changesMask[11])
{
for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
{
@@ -4870,7 +5321,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[10])
+ if (changesMask[12])
{
for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
{
@@ -4880,7 +5331,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[11])
+ if (changesMask[13])
{
for (uint32 i = 0; i < Heirlooms.size(); ++i)
{
@@ -4890,7 +5341,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[12])
+ if (changesMask[14])
{
for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
{
@@ -4900,7 +5351,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[13])
+ if (changesMask[15])
{
for (uint32 i = 0; i < Toys.size(); ++i)
{
@@ -4910,7 +5361,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[14])
+ if (changesMask[16])
{
for (uint32 i = 0; i < ToyFlags.size(); ++i)
{
@@ -4920,7 +5371,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[15])
+ if (changesMask[17])
{
for (uint32 i = 0; i < Transmog.size(); ++i)
{
@@ -4930,7 +5381,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[16])
+ if (changesMask[18])
{
for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
{
@@ -4940,7 +5391,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[17])
+ if (changesMask[19])
{
for (uint32 i = 0; i < SelfResSpells.size(); ++i)
{
@@ -4950,7 +5401,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[18])
+ if (changesMask[20])
{
for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
{
@@ -4960,7 +5411,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[19])
+ if (changesMask[21])
{
for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
{
@@ -4970,7 +5421,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[21])
+ if (changesMask[23])
{
for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
{
@@ -4980,7 +5431,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[22])
+ if (changesMask[24])
{
for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
{
@@ -4990,7 +5441,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[23])
+ if (changesMask[25])
{
for (uint32 i = 0; i < MawPowers.size(); ++i)
{
@@ -5000,7 +5451,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[24])
+ if (changesMask[26])
{
for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
{
@@ -5010,7 +5461,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[25])
+ if (changesMask[27])
{
for (uint32 i = 0; i < RecipeProgression.size(); ++i)
{
@@ -5020,7 +5471,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[26])
+ if (changesMask[28])
{
for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
{
@@ -5030,7 +5481,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[27])
+ if (changesMask[29])
{
for (uint32 i = 0; i < TaskQuests.size(); ++i)
{
@@ -5040,7 +5491,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[28])
+ if (changesMask[30])
{
for (uint32 i = 0; i < DisabledSpells.size(); ++i)
{
@@ -5050,7 +5501,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[31])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[34])
{
for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
{
@@ -5060,10 +5514,17 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- }
- if (changesMask[32])
- {
- if (changesMask[33])
+ if (changesMask[35])
+ {
+ for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
+ {
+ if (NpcCraftingOrders.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ NpcCraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[36])
{
for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
{
@@ -5073,7 +5534,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[34])
+ if (changesMask[37])
{
for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
{
@@ -5083,7 +5544,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[35])
+ if (changesMask[38])
{
for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
{
@@ -5093,11 +5554,38 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
+ if (changesMask[39])
+ {
+ if (!ignoreNestedChangesMask)
+ AccountBankTabSettings.WriteUpdateMask(data, 3);
+ else
+ WriteCompleteDynamicFieldUpdateMask(AccountBankTabSettings.size(), data, 3);
+ }
}
if (changesMask[0])
{
if (changesMask[8])
{
+ for (uint32 i = 0; i < CharacterDataElements.size(); ++i)
+ {
+ if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[9])
+ {
+ for (uint32 i = 0; i < AccountDataElements.size(); ++i)
+ {
+ if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[10])
+ {
for (uint32 i = 0; i < PvpInfo.size(); ++i)
{
if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask)
@@ -5106,7 +5594,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[20])
+ if (changesMask[22])
{
for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
{
@@ -5116,7 +5604,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[29])
+ if (changesMask[31])
{
for (uint32 i = 0; i < TraitConfigs.size(); ++i)
{
@@ -5126,7 +5614,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[30])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
{
for (uint32 i = 0; i < CraftingOrders.size(); ++i)
{
@@ -5136,533 +5627,574 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- }
- if (changesMask[32])
- {
- if (changesMask[44])
+ if (changesMask[39])
+ {
+ for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
+ {
+ if (AccountBankTabSettings.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ AccountBankTabSettings[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[46])
{
data << FarsightObject;
}
- if (changesMask[45])
+ if (changesMask[47])
{
data << SummonedBattlePetGUID;
}
- if (changesMask[46])
+ if (changesMask[48])
{
data << uint64(Coinage);
}
- if (changesMask[47])
+ if (changesMask[49])
+ {
+ data << uint64(AccountBankCoinage);
+ }
+ if (changesMask[50])
{
data << int32(XP);
}
- if (changesMask[48])
+ if (changesMask[51])
{
data << int32(NextLevelXP);
}
- if (changesMask[49])
+ if (changesMask[52])
{
data << int32(TrialXP);
}
- if (changesMask[50])
+ if (changesMask[53])
{
Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[51])
+ if (changesMask[54])
{
data << int32(CharacterPoints);
}
- if (changesMask[52])
+ if (changesMask[55])
{
data << int32(MaxTalentTiers);
}
- if (changesMask[53])
+ if (changesMask[56])
{
data << uint32(TrackCreatureMask);
}
- if (changesMask[54])
+ if (changesMask[57])
{
data << float(MainhandExpertise);
}
- if (changesMask[55])
+ if (changesMask[58])
{
data << float(OffhandExpertise);
}
- if (changesMask[56])
+ if (changesMask[59])
{
data << float(RangedExpertise);
}
- if (changesMask[57])
+ if (changesMask[60])
{
data << float(CombatRatingExpertise);
}
- if (changesMask[58])
+ if (changesMask[61])
{
data << float(BlockPercentage);
}
- if (changesMask[59])
+ if (changesMask[62])
{
data << float(DodgePercentage);
}
- if (changesMask[60])
+ if (changesMask[63])
{
data << float(DodgePercentageFromAttribute);
}
- if (changesMask[61])
+ if (changesMask[64])
{
data << float(ParryPercentage);
}
- if (changesMask[62])
+ if (changesMask[65])
{
data << float(ParryPercentageFromAttribute);
}
- if (changesMask[63])
+ if (changesMask[66])
{
data << float(CritPercentage);
}
- if (changesMask[64])
+ if (changesMask[67])
{
data << float(RangedCritPercentage);
}
- if (changesMask[65])
+ if (changesMask[68])
{
data << float(OffhandCritPercentage);
}
- if (changesMask[66])
+ if (changesMask[69])
{
data << float(SpellCritPercentage);
}
- if (changesMask[67])
+ }
+ if (changesMask[70])
+ {
+ if (changesMask[71])
{
data << int32(ShieldBlock);
}
- if (changesMask[68])
+ if (changesMask[72])
{
data << float(ShieldBlockCritPercentage);
}
- if (changesMask[69])
+ if (changesMask[73])
{
data << float(Mastery);
}
- if (changesMask[70])
+ if (changesMask[74])
{
data << float(Speed);
}
- if (changesMask[71])
+ if (changesMask[75])
{
data << float(Avoidance);
}
- }
- if (changesMask[72])
- {
- if (changesMask[73])
+ if (changesMask[76])
{
data << float(Sturdiness);
}
- if (changesMask[74])
+ if (changesMask[77])
{
data << int32(Versatility);
}
- if (changesMask[75])
+ if (changesMask[78])
{
data << float(VersatilityBonus);
}
- if (changesMask[76])
+ if (changesMask[79])
{
data << float(PvpPowerDamage);
}
- if (changesMask[77])
+ if (changesMask[80])
{
data << float(PvpPowerHealing);
}
- if (changesMask[78])
+ if (changesMask[81])
+ {
+ BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ if (changesMask[82])
{
data << int32(ModHealingDonePos);
}
- if (changesMask[79])
+ if (changesMask[83])
{
data << float(ModHealingPercent);
}
- if (changesMask[80])
+ if (changesMask[84])
{
data << float(ModPeriodicHealingDonePercent);
}
- if (changesMask[81])
+ if (changesMask[85])
{
data << float(ModSpellPowerPercent);
}
- if (changesMask[82])
+ if (changesMask[86])
{
data << float(ModResiliencePercent);
}
- if (changesMask[83])
+ if (changesMask[87])
{
data << float(OverrideSpellPowerByAPPercent);
}
- if (changesMask[84])
+ if (changesMask[88])
{
data << float(OverrideAPBySpellPowerPercent);
}
- if (changesMask[85])
+ if (changesMask[89])
{
data << int32(ModTargetResistance);
}
- if (changesMask[86])
+ if (changesMask[90])
{
data << int32(ModTargetPhysicalResistance);
}
- if (changesMask[87])
+ if (changesMask[91])
{
data << uint32(LocalFlags);
}
- if (changesMask[88])
+ if (changesMask[92])
{
data << uint8(GrantableLevels);
}
- if (changesMask[89])
+ if (changesMask[93])
{
data << uint8(MultiActionBars);
}
- if (changesMask[90])
+ if (changesMask[94])
{
data << uint8(LifetimeMaxRank);
}
- if (changesMask[91])
+ if (changesMask[95])
{
data << uint8(NumRespecs);
}
- if (changesMask[92])
+ if (changesMask[96])
{
data << uint32(PvpMedals);
}
- if (changesMask[93])
+ if (changesMask[97])
{
data << uint16(TodayHonorableKills);
}
- if (changesMask[94])
+ if (changesMask[98])
{
data << uint16(YesterdayHonorableKills);
}
- if (changesMask[95])
+ if (changesMask[99])
{
data << uint32(LifetimeHonorableKills);
}
- if (changesMask[96])
+ if (changesMask[100])
{
data << int32(WatchedFactionIndex);
}
- if (changesMask[97])
+ if (changesMask[101])
{
data << int32(MaxLevel);
}
- if (changesMask[98])
+ }
+ if (changesMask[102])
+ {
+ if (changesMask[103])
{
data << int32(ScalingPlayerLevelDelta);
}
- if (changesMask[99])
+ if (changesMask[104])
{
data << int32(MaxCreatureScalingLevel);
}
- if (changesMask[100])
+ if (changesMask[105])
{
data << int32(PetSpellPower);
}
- if (changesMask[101])
+ if (changesMask[106])
{
data << float(UiHitModifier);
}
- if (changesMask[102])
+ if (changesMask[107])
{
data << float(UiSpellHitModifier);
}
- if (changesMask[103])
+ if (changesMask[108])
{
data << int32(HomeRealmTimeOffset);
}
- }
- if (changesMask[104])
- {
- if (changesMask[105])
+ if (changesMask[109])
{
data << float(ModPetHaste);
}
- if (changesMask[106])
+ if (changesMask[110])
{
data << int8(JailersTowerLevelMax);
}
- if (changesMask[107])
+ if (changesMask[111])
{
data << int8(JailersTowerLevel);
}
- if (changesMask[108])
+ if (changesMask[112])
{
data << uint8(LocalRegenFlags);
}
- if (changesMask[109])
+ if (changesMask[113])
{
data << uint8(AuraVision);
}
- if (changesMask[110])
+ if (changesMask[114])
{
data << uint8(NumBackpackSlots);
}
- if (changesMask[111])
+ if (changesMask[115])
{
data << int32(OverrideSpellsID);
}
- if (changesMask[112])
+ if (changesMask[116])
{
data << uint16(LootSpecID);
}
- if (changesMask[113])
+ if (changesMask[117])
{
data << uint32(OverrideZonePVPType);
}
- if (changesMask[114])
+ if (changesMask[118])
{
data << int32(Honor);
}
- if (changesMask[115])
+ if (changesMask[119])
{
data << int32(HonorNextLevel);
}
- if (changesMask[116])
+ if (changesMask[120])
{
data << int32(PerksProgramCurrency);
}
- if (changesMask[117])
+ if (changesMask[121])
{
data << uint8(NumBankSlots);
}
if (changesMask[122])
{
+ data << uint8(NumAccountBankTabs);
+ }
+ if (changesMask[127])
+ {
data << int32(UiChromieTimeExpansionID);
}
- if (changesMask[123])
+ if (changesMask[128])
{
data << int32(TimerunningSeasonID);
}
- if (changesMask[124])
+ if (changesMask[129])
{
data << int32(TransportServerTime);
}
- if (changesMask[125])
+ if (changesMask[130])
{
data << uint32(WeeklyRewardsPeriodSinceOrigin);
}
- if (changesMask[126])
+ if (changesMask[131])
{
data << int16(DEBUGSoulbindConduitRank);
}
- if (changesMask[128])
+ if (changesMask[133])
{
data << uint32(ActiveCombatTraitConfigID);
}
- if (changesMask[129])
+ }
+ if (changesMask[134])
+ {
+ if (changesMask[135])
{
data << int32(ItemUpgradeHighOnehandWeaponItemID);
}
- if (changesMask[130])
+ if (changesMask[136])
{
data << int32(ItemUpgradeHighFingerItemID);
}
- if (changesMask[131])
+ if (changesMask[137])
{
data << float(ItemUpgradeHighFingerWatermark);
}
- if (changesMask[132])
+ if (changesMask[138])
{
data << int32(ItemUpgradeHighTrinketItemID);
}
- if (changesMask[133])
+ if (changesMask[139])
{
data << float(ItemUpgradeHighTrinketWatermark);
}
- if (changesMask[134])
+ if (changesMask[140])
{
data << uint64(LootHistoryInstanceID);
}
- }
- if (changesMask[136])
- {
- if (changesMask[137])
+ if (changesMask[142])
{
data << uint8(RequiredMountCapabilityFlags);
}
}
- if (changesMask[104])
+ if (changesMask[102])
{
data.WriteBits(QuestSession.has_value(), 1);
+ }
+ if (changesMask[134])
+ {
data.WriteBits(PetStable.has_value(), 1);
+ data.WriteBits(WalkInData.has_value(), 1);
+ data.WriteBits(DelveData.has_value(), 1);
}
data.FlushBits();
- if (changesMask[104])
+ if (changesMask[102])
{
- if (changesMask[118])
+ if (changesMask[123])
{
ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[120])
+ if (changesMask[125])
{
if (QuestSession.has_value())
{
QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[119])
+ if (changesMask[124])
{
data << FrozenPerksVendorItem;
}
- if (changesMask[121])
+ if (changesMask[126])
{
Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[127])
+ if (changesMask[132])
{
data << DungeonScore;
}
- if (changesMask[135])
+ }
+ if (changesMask[134])
+ {
+ if (changesMask[141])
{
if (PetStable.has_value())
{
PetStable->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
+ if (changesMask[143])
+ {
+ if (WalkInData.has_value())
+ {
+ WalkInData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
+ if (changesMask[144])
+ {
+ if (DelveData.has_value())
+ {
+ DelveData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
+ }
}
- if (changesMask[138])
+ if (changesMask[145])
{
- for (uint32 i = 0; i < 227; ++i)
+ for (uint32 i = 0; i < 232; ++i)
{
- if (changesMask[139 + i])
+ if (changesMask[146 + i])
{
data << InvSlots[i];
}
}
}
- if (changesMask[366])
+ if (changesMask[378])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[367 + i])
+ if (changesMask[379 + i])
{
RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[369])
+ if (changesMask[381])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[370 + i])
+ if (changesMask[382 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[377 + i])
+ if (changesMask[389 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[384 + i])
+ if (changesMask[396 + i])
{
data << float(ModDamageDonePercent[i]);
}
- if (changesMask[391 + i])
+ if (changesMask[403 + i])
{
data << float(ModHealingDonePercent[i]);
}
}
}
- if (changesMask[398])
+ if (changesMask[410])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[399 + i])
+ if (changesMask[411 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[402 + i])
+ if (changesMask[414 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[405])
+ if (changesMask[417])
{
for (uint32 i = 0; i < 12; ++i)
{
- if (changesMask[406 + i])
+ if (changesMask[418 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[418 + i])
+ if (changesMask[430 + i])
{
data << int64(BuybackTimestamp[i]);
}
}
}
- if (changesMask[430])
+ if (changesMask[442])
{
for (uint32 i = 0; i < 32; ++i)
{
- if (changesMask[431 + i])
+ if (changesMask[443 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[463])
+ if (changesMask[475])
{
for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[464 + i])
+ if (changesMask[476 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[468])
+ if (changesMask[480])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[469 + i])
+ if (changesMask[481 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[471])
+ if (changesMask[483])
{
for (uint32 i = 0; i < 5; ++i)
{
- if (changesMask[472 + i])
+ if (changesMask[484 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[477])
+ if (changesMask[489])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[478 + i])
+ if (changesMask[490 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[485])
+ if (changesMask[497])
{
- for (uint32 i = 0; i < 950; ++i)
+ for (uint32 i = 0; i < 960; ++i)
{
- if (changesMask[486 + i])
+ if (changesMask[498 + i])
{
data << uint64(QuestCompleted[i]);
}
}
}
- if (changesMask[1436])
+ if (changesMask[1458])
{
for (uint32 i = 0; i < 17; ++i)
{
- if (changesMask[1437 + i])
+ if (changesMask[1459 + i])
{
data << float(ItemUpgradeHighWatermark[i]);
}
@@ -5679,7 +6211,6 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(SortBagsRightToLeft);
Base::ClearChangesMask(InsertItemsLeftToRight);
Base::ClearChangesMask(HasPerksProgramPendingReward);
- Base::ClearChangesMask(DataFlags);
Base::ClearChangesMask(ResearchSites);
Base::ClearChangesMask(ResearchSiteProgress);
Base::ClearChangesMask(Research);
@@ -5704,16 +6235,21 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(TaskQuests);
Base::ClearChangesMask(DisabledSpells);
Base::ClearChangesMask(PersonalCraftingOrderCounts);
+ Base::ClearChangesMask(NpcCraftingOrders);
Base::ClearChangesMask(CategoryCooldownMods);
Base::ClearChangesMask(WeeklySpellUses);
Base::ClearChangesMask(TrackedCollectableSources);
+ Base::ClearChangesMask(CharacterDataElements);
+ Base::ClearChangesMask(AccountDataElements);
Base::ClearChangesMask(PvpInfo);
Base::ClearChangesMask(CharacterRestrictions);
Base::ClearChangesMask(TraitConfigs);
Base::ClearChangesMask(CraftingOrders);
+ Base::ClearChangesMask(AccountBankTabSettings);
Base::ClearChangesMask(FarsightObject);
Base::ClearChangesMask(SummonedBattlePetGUID);
Base::ClearChangesMask(Coinage);
+ Base::ClearChangesMask(AccountBankCoinage);
Base::ClearChangesMask(XP);
Base::ClearChangesMask(NextLevelXP);
Base::ClearChangesMask(TrialXP);
@@ -5744,6 +6280,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(VersatilityBonus);
Base::ClearChangesMask(PvpPowerDamage);
Base::ClearChangesMask(PvpPowerHealing);
+ Base::ClearChangesMask(BitVectors);
Base::ClearChangesMask(ModHealingDonePos);
Base::ClearChangesMask(ModHealingPercent);
Base::ClearChangesMask(ModPeriodicHealingDonePercent);
@@ -5783,6 +6320,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(HonorNextLevel);
Base::ClearChangesMask(PerksProgramCurrency);
Base::ClearChangesMask(NumBankSlots);
+ Base::ClearChangesMask(NumAccountBankTabs);
Base::ClearChangesMask(ResearchHistory);
Base::ClearChangesMask(FrozenPerksVendorItem);
Base::ClearChangesMask(Field_1410);
@@ -5802,6 +6340,8 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(LootHistoryInstanceID);
Base::ClearChangesMask(PetStable);
Base::ClearChangesMask(RequiredMountCapabilityFlags);
+ Base::ClearChangesMask(WalkInData);
+ Base::ClearChangesMask(DelveData);
Base::ClearChangesMask(InvSlots);
Base::ClearChangesMask(RestInfo);
Base::ClearChangesMask(ModDamageDonePos);
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 0abb78c5711..43b1c60d9a9 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -74,8 +74,8 @@ struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask
struct ItemMod : public IsUpdateFieldStructureTag
{
- int32 Value;
uint8 Type;
+ int32 Value;
void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const;
@@ -129,7 +129,7 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41>
UpdateField<uint32, 0, 10> Durability;
UpdateField<uint32, 0, 11> MaxDurability;
UpdateField<uint32, 0, 12> CreatePlayedTime;
- UpdateField<int32, 0, 13> Context;
+ UpdateField<uint8, 0, 13> Context;
UpdateField<int64, 0, 14> CreateTime;
UpdateField<uint64, 0, 15> ArtifactXP;
UpdateField<uint8, 0, 16> ItemAppearanceModID;
@@ -148,10 +148,10 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41>
void ClearChangesMask();
};
-struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<39>
+struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<101>
{
UpdateField<uint32, 0, 1> NumSlots;
- UpdateFieldArray<ObjectGuid, 36, 2, 3> Slots;
+ UpdateFieldArray<ObjectGuid, 98, 2, 3> Slots;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const;
@@ -257,154 +257,159 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag
bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); }
};
-struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<217>
+struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<220>
{
- UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
- DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells;
- DynamicUpdateField<int32, 0, 3> WorldEffects;
- DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects;
- UpdateField<int32, 0, 5> DisplayID;
+ UpdateField<bool, 0, 1> Field_314;
+ UpdateField<std::vector<uint32>, 0, 2> StateWorldEffectIDs;
+ DynamicUpdateField<UF::PassiveSpellHistory, 0, 3> PassiveSpells;
+ DynamicUpdateField<int32, 0, 4> WorldEffects;
+ DynamicUpdateField<ObjectGuid, 0, 5> ChannelObjects;
+ UpdateField<int32, 0, 6> DisplayID;
struct DisplayIDTag : ViewerDependentValueTag<int32> {};
- UpdateField<uint32, 0, 6> StateSpellVisualID;
- UpdateField<uint32, 0, 7> StateAnimID;
- UpdateField<uint32, 0, 8> StateAnimKitID;
- UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID;
- UpdateField<int32, 0, 10> SpellOverrideNameID;
- UpdateField<ObjectGuid, 0, 11> Charm;
- UpdateField<ObjectGuid, 0, 12> Summon;
- UpdateField<ObjectGuid, 0, 13> Critter;
- UpdateField<ObjectGuid, 0, 14> CharmedBy;
- UpdateField<ObjectGuid, 0, 15> SummonedBy;
- UpdateField<ObjectGuid, 0, 16> CreatedBy;
- UpdateField<ObjectGuid, 0, 17> DemonCreator;
- UpdateField<ObjectGuid, 0, 18> LookAtControllerTarget;
- UpdateField<ObjectGuid, 0, 19> Target;
- UpdateField<ObjectGuid, 0, 20> BattlePetCompanionGUID;
- UpdateField<uint64, 0, 21> BattlePetDBID;
- UpdateField<UF::UnitChannel, 0, 22> ChannelData;
- UpdateField<int8, 0, 23> SpellEmpowerStage;
- UpdateField<uint32, 0, 24> SummonedByHomeRealm;
- UpdateField<uint8, 0, 25> Race;
- UpdateField<uint8, 0, 26> ClassId;
- UpdateField<uint8, 0, 27> PlayerClassId;
- UpdateField<uint8, 0, 28> Sex;
- UpdateField<uint8, 0, 29> DisplayPower;
- UpdateField<uint32, 0, 30> OverrideDisplayPowerID;
- UpdateField<int64, 0, 31> Health;
- UpdateField<int64, 32, 33> MaxHealth;
- UpdateField<int32, 32, 34> Level;
- UpdateField<int32, 32, 35> EffectiveLevel;
- UpdateField<int32, 32, 36> ContentTuningID;
- UpdateField<int32, 32, 37> ScalingLevelMin;
- UpdateField<int32, 32, 38> ScalingLevelMax;
- UpdateField<int32, 32, 39> ScalingLevelDelta;
- UpdateField<int32, 32, 40> ScalingFactionGroup;
- UpdateField<int32, 32, 41> FactionTemplate;
+ UpdateField<uint32, 0, 7> NpcFlags;
+ struct NpcFlagsTag : ViewerDependentValueTag<uint32> {};
+ UpdateField<uint32, 0, 8> NpcFlags2;
+ struct NpcFlags2Tag : ViewerDependentValueTag<uint32> {};
+ UpdateField<uint32, 0, 9> StateSpellVisualID;
+ UpdateField<uint32, 0, 10> StateAnimID;
+ UpdateField<uint32, 0, 11> StateAnimKitID;
+ UpdateField<uint32, 0, 12> StateWorldEffectsQuestObjectiveID;
+ UpdateField<int32, 0, 13> SpellOverrideNameID;
+ UpdateField<ObjectGuid, 0, 14> Charm;
+ UpdateField<ObjectGuid, 0, 15> Summon;
+ UpdateField<ObjectGuid, 0, 16> Critter;
+ UpdateField<ObjectGuid, 0, 17> CharmedBy;
+ UpdateField<ObjectGuid, 0, 18> SummonedBy;
+ UpdateField<ObjectGuid, 0, 19> CreatedBy;
+ UpdateField<ObjectGuid, 0, 20> DemonCreator;
+ UpdateField<ObjectGuid, 0, 21> LookAtControllerTarget;
+ UpdateField<ObjectGuid, 0, 22> Target;
+ UpdateField<ObjectGuid, 0, 23> BattlePetCompanionGUID;
+ UpdateField<uint64, 0, 24> BattlePetDBID;
+ UpdateField<UF::UnitChannel, 0, 25> ChannelData;
+ UpdateField<int8, 0, 26> SpellEmpowerStage;
+ UpdateField<uint32, 0, 27> SummonedByHomeRealm;
+ UpdateField<uint8, 0, 28> Race;
+ UpdateField<uint8, 0, 29> ClassId;
+ UpdateField<uint8, 0, 30> PlayerClassId;
+ UpdateField<uint8, 0, 31> Sex;
+ UpdateField<uint8, 32, 33> DisplayPower;
+ UpdateField<uint32, 32, 34> OverrideDisplayPowerID;
+ UpdateField<int64, 32, 35> Health;
+ UpdateField<int64, 32, 36> MaxHealth;
+ UpdateField<int32, 32, 37> Level;
+ UpdateField<int32, 32, 38> EffectiveLevel;
+ UpdateField<int32, 32, 39> ContentTuningID;
+ UpdateField<int32, 32, 40> ScalingLevelMin;
+ UpdateField<int32, 32, 41> ScalingLevelMax;
+ UpdateField<int32, 32, 42> ScalingLevelDelta;
+ UpdateField<int32, 32, 43> ScalingFactionGroup;
+ UpdateField<int32, 32, 44> FactionTemplate;
struct FactionTemplateTag : ViewerDependentValueTag<int32> {};
- UpdateField<uint32, 32, 42> Flags;
+ UpdateField<uint32, 32, 45> Flags;
struct FlagsTag : ViewerDependentValueTag<uint32> {};
- UpdateField<uint32, 32, 43> Flags2;
+ UpdateField<uint32, 32, 46> Flags2;
struct Flags2Tag : ViewerDependentValueTag<uint32> {};
- UpdateField<uint32, 32, 44> Flags3;
+ UpdateField<uint32, 32, 47> Flags3;
struct Flags3Tag : ViewerDependentValueTag<uint32> {};
- UpdateField<uint32, 32, 45> AuraState;
+ UpdateField<uint32, 32, 48> AuraState;
struct AuraStateTag : ViewerDependentValueTag<uint32> {};
- UpdateField<uint32, 32, 46> RangedAttackRoundBaseTime;
- UpdateField<float, 32, 47> BoundingRadius;
- UpdateField<float, 32, 48> CombatReach;
- UpdateField<float, 32, 49> DisplayScale;
- UpdateField<int32, 32, 50> CreatureFamily;
- UpdateField<int32, 32, 51> CreatureType;
- UpdateField<int32, 32, 52> NativeDisplayID;
- UpdateField<float, 32, 53> NativeXDisplayScale;
- UpdateField<int32, 32, 54> MountDisplayID;
- UpdateField<int32, 32, 55> CosmeticMountDisplayID;
- UpdateField<float, 32, 56> MinDamage;
- UpdateField<float, 32, 57> MaxDamage;
- UpdateField<float, 32, 58> MinOffHandDamage;
- UpdateField<float, 32, 59> MaxOffHandDamage;
- UpdateField<uint8, 32, 60> StandState;
- UpdateField<uint8, 32, 61> PetTalentPoints;
- UpdateField<uint8, 32, 62> VisFlags;
- UpdateField<uint8, 32, 63> AnimTier;
- UpdateField<uint32, 64, 65> PetNumber;
- UpdateField<uint32, 64, 66> PetNameTimestamp;
- UpdateField<uint32, 64, 67> PetExperience;
- UpdateField<uint32, 64, 68> PetNextLevelExperience;
- UpdateField<float, 64, 69> ModCastingSpeed;
- UpdateField<float, 64, 70> ModCastingSpeedNeg;
- UpdateField<float, 64, 71> ModSpellHaste;
- UpdateField<float, 64, 72> ModHaste;
- UpdateField<float, 64, 73> ModRangedHaste;
- UpdateField<float, 64, 74> ModHasteRegen;
- UpdateField<float, 64, 75> ModTimeRate;
- UpdateField<int32, 64, 76> CreatedBySpell;
- UpdateField<int32, 64, 77> EmoteState;
- UpdateField<int32, 64, 78> BaseMana;
- UpdateField<int32, 64, 79> BaseHealth;
- UpdateField<uint8, 64, 80> SheatheState;
- UpdateField<uint8, 64, 81> PvpFlags;
+ UpdateField<uint32, 32, 49> RangedAttackRoundBaseTime;
+ UpdateField<float, 32, 50> BoundingRadius;
+ UpdateField<float, 32, 51> CombatReach;
+ UpdateField<float, 32, 52> DisplayScale;
+ UpdateField<int32, 32, 53> CreatureFamily;
+ UpdateField<int32, 32, 54> CreatureType;
+ UpdateField<int32, 32, 55> NativeDisplayID;
+ UpdateField<float, 32, 56> NativeXDisplayScale;
+ UpdateField<int32, 32, 57> MountDisplayID;
+ UpdateField<int32, 32, 58> CosmeticMountDisplayID;
+ UpdateField<float, 32, 59> MinDamage;
+ UpdateField<float, 32, 60> MaxDamage;
+ UpdateField<float, 32, 61> MinOffHandDamage;
+ UpdateField<float, 32, 62> MaxOffHandDamage;
+ UpdateField<uint8, 32, 63> StandState;
+ UpdateField<uint8, 64, 65> PetTalentPoints;
+ UpdateField<uint8, 64, 66> VisFlags;
+ UpdateField<uint8, 64, 67> AnimTier;
+ UpdateField<uint32, 64, 68> PetNumber;
+ UpdateField<uint32, 64, 69> PetNameTimestamp;
+ UpdateField<uint32, 64, 70> PetExperience;
+ UpdateField<uint32, 64, 71> PetNextLevelExperience;
+ UpdateField<float, 64, 72> ModCastingSpeed;
+ UpdateField<float, 64, 73> ModCastingSpeedNeg;
+ UpdateField<float, 64, 74> ModSpellHaste;
+ UpdateField<float, 64, 75> ModHaste;
+ UpdateField<float, 64, 76> ModRangedHaste;
+ UpdateField<float, 64, 77> ModHasteRegen;
+ UpdateField<float, 64, 78> ModTimeRate;
+ UpdateField<int32, 64, 79> CreatedBySpell;
+ UpdateField<int32, 64, 80> EmoteState;
+ UpdateField<int32, 64, 81> BaseMana;
+ UpdateField<int32, 64, 82> BaseHealth;
+ UpdateField<uint8, 64, 83> SheatheState;
+ UpdateField<uint8, 64, 84> PvpFlags;
struct PvpFlagsTag : ViewerDependentValueTag<uint8> {};
- UpdateField<uint8, 64, 82> PetFlags;
- UpdateField<uint8, 64, 83> ShapeshiftForm;
- UpdateField<int32, 64, 84> AttackPower;
- UpdateField<int32, 64, 85> AttackPowerModPos;
- UpdateField<int32, 64, 86> AttackPowerModNeg;
- UpdateField<float, 64, 87> AttackPowerMultiplier;
- UpdateField<int32, 64, 88> AttackPowerModSupport;
- UpdateField<int32, 64, 89> RangedAttackPower;
- UpdateField<int32, 64, 90> RangedAttackPowerModPos;
- UpdateField<int32, 64, 91> RangedAttackPowerModNeg;
- UpdateField<float, 64, 92> RangedAttackPowerMultiplier;
- UpdateField<int32, 64, 93> RangedAttackPowerModSupport;
- UpdateField<int32, 64, 94> MainHandWeaponAttackPower;
- UpdateField<int32, 64, 95> OffHandWeaponAttackPower;
- UpdateField<int32, 96, 97> RangedWeaponAttackPower;
- UpdateField<int32, 96, 98> SetAttackSpeedAura;
- UpdateField<float, 96, 99> Lifesteal;
- UpdateField<float, 96, 100> MinRangedDamage;
- UpdateField<float, 96, 101> MaxRangedDamage;
- UpdateField<float, 96, 102> ManaCostMultiplier;
- UpdateField<float, 96, 103> MaxHealthModifier;
- UpdateField<float, 96, 104> HoverHeight;
- UpdateField<int32, 96, 105> MinItemLevelCutoff;
- UpdateField<int32, 96, 106> MinItemLevel;
- UpdateField<int32, 96, 107> MaxItemLevel;
- UpdateField<int32, 96, 108> AzeriteItemLevel;
- UpdateField<int32, 96, 109> WildBattlePetLevel;
- UpdateField<int32, 96, 110> BattlePetCompanionExperience;
- UpdateField<uint32, 96, 111> BattlePetCompanionNameTimestamp;
- UpdateField<int32, 96, 112> InteractSpellID;
+ UpdateField<uint8, 64, 85> PetFlags;
+ UpdateField<uint8, 64, 86> ShapeshiftForm;
+ UpdateField<int32, 64, 87> AttackPower;
+ UpdateField<int32, 64, 88> AttackPowerModPos;
+ UpdateField<int32, 64, 89> AttackPowerModNeg;
+ UpdateField<float, 64, 90> AttackPowerMultiplier;
+ UpdateField<int32, 64, 91> AttackPowerModSupport;
+ UpdateField<int32, 64, 92> RangedAttackPower;
+ UpdateField<int32, 64, 93> RangedAttackPowerModPos;
+ UpdateField<int32, 64, 94> RangedAttackPowerModNeg;
+ UpdateField<float, 64, 95> RangedAttackPowerMultiplier;
+ UpdateField<int32, 96, 97> RangedAttackPowerModSupport;
+ UpdateField<int32, 96, 98> MainHandWeaponAttackPower;
+ UpdateField<int32, 96, 99> OffHandWeaponAttackPower;
+ UpdateField<int32, 96, 100> RangedWeaponAttackPower;
+ UpdateField<int32, 96, 101> SetAttackSpeedAura;
+ UpdateField<float, 96, 102> Lifesteal;
+ UpdateField<float, 96, 103> MinRangedDamage;
+ UpdateField<float, 96, 104> MaxRangedDamage;
+ UpdateField<float, 96, 105> ManaCostMultiplier;
+ UpdateField<float, 96, 106> MaxHealthModifier;
+ UpdateField<float, 96, 107> HoverHeight;
+ UpdateField<int32, 96, 108> MinItemLevelCutoff;
+ UpdateField<int32, 96, 109> MinItemLevel;
+ UpdateField<int32, 96, 110> MaxItemLevel;
+ UpdateField<int32, 96, 111> AzeriteItemLevel;
+ UpdateField<int32, 96, 112> WildBattlePetLevel;
+ UpdateField<int32, 96, 113> BattlePetCompanionExperience;
+ UpdateField<uint32, 96, 114> BattlePetCompanionNameTimestamp;
+ UpdateField<int32, 96, 115> InteractSpellID;
struct InteractSpellIDTag : ViewerDependentValueTag<int32> {};
- UpdateField<int32, 96, 113> ScaleDuration;
- UpdateField<int32, 96, 114> LooksLikeMountID;
- UpdateField<int32, 96, 115> LooksLikeCreatureID;
- UpdateField<int32, 96, 116> LookAtControllerID;
- UpdateField<int32, 96, 117> PerksVendorItemID;
- UpdateField<int32, 96, 118> TaxiNodesID;
- UpdateField<ObjectGuid, 96, 119> GuildGUID;
- UpdateField<int32, 96, 120> FlightCapabilityID;
- UpdateField<float, 96, 121> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use
- UpdateField<uint32, 96, 122> Field_308;
- UpdateField<uint32, 96, 123> Field_30C;
- UpdateField<uint32, 96, 124> SilencedSchoolMask;
- UpdateField<uint32, 96, 125> CurrentAreaID;
- UpdateField<ObjectGuid, 96, 126> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object
- UpdateFieldArray<uint32, 2, 127, 128> NpcFlags;
- struct NpcFlagsTag : ViewerDependentValueTag<uint32> {};
- UpdateFieldArray<int32, 10, 130, 131> Power;
- UpdateFieldArray<int32, 10, 130, 141> MaxPower;
- UpdateFieldArray<float, 10, 130, 151> PowerRegenFlatModifier;
- UpdateFieldArray<float, 10, 130, 161> PowerRegenInterruptedFlatModifier;
- UpdateFieldArray<UF::VisibleItem, 3, 171, 172> VirtualItems;
- UpdateFieldArray<uint32, 2, 175, 176> AttackRoundBaseTime;
- UpdateFieldArray<int32, 4, 178, 179> Stats;
- UpdateFieldArray<int32, 4, 178, 183> StatPosBuff;
- UpdateFieldArray<int32, 4, 178, 187> StatNegBuff;
- UpdateFieldArray<int32, 4, 178, 191> StatSupportBuff;
- UpdateFieldArray<int32, 7, 195, 196> Resistances;
- UpdateFieldArray<int32, 7, 195, 203> BonusResistanceMods;
- UpdateFieldArray<int32, 7, 195, 210> ManaCostModifier;
+ UpdateField<int32, 96, 116> ScaleDuration;
+ UpdateField<int32, 96, 117> LooksLikeMountID;
+ UpdateField<int32, 96, 118> LooksLikeCreatureID;
+ UpdateField<int32, 96, 119> LookAtControllerID;
+ UpdateField<int32, 96, 120> PerksVendorItemID;
+ UpdateField<int32, 96, 121> TaxiNodesID;
+ UpdateField<ObjectGuid, 96, 122> GuildGUID;
+ UpdateField<int32, 96, 123> FlightCapabilityID;
+ UpdateField<float, 96, 124> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use
+ UpdateField<uint32, 96, 125> MaxHealthModifierFlatNeg;
+ UpdateField<uint32, 96, 126> MaxHealthModifierFlatPos;
+ UpdateField<uint32, 96, 127> SilencedSchoolMask;
+ UpdateField<uint32, 128, 129> CurrentAreaID;
+ UpdateField<float, 128, 130> Field_31C;
+ UpdateField<float, 128, 131> Field_320; // Soft targeting related? When UnitFlags3 & 0x40000000 is set, increases some range check using CombatReach by this amount
+ UpdateField<ObjectGuid, 128, 132> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object
+ UpdateFieldArray<int32, 10, 133, 134> Power;
+ UpdateFieldArray<int32, 10, 133, 144> MaxPower;
+ UpdateFieldArray<float, 10, 133, 154> PowerRegenFlatModifier;
+ UpdateFieldArray<float, 10, 133, 164> PowerRegenInterruptedFlatModifier;
+ UpdateFieldArray<UF::VisibleItem, 3, 174, 175> VirtualItems;
+ UpdateFieldArray<uint32, 2, 178, 179> AttackRoundBaseTime;
+ UpdateFieldArray<int32, 4, 181, 182> Stats;
+ UpdateFieldArray<int32, 4, 181, 186> StatPosBuff;
+ UpdateFieldArray<int32, 4, 181, 190> StatNegBuff;
+ UpdateFieldArray<int32, 4, 181, 194> StatSupportBuff;
+ UpdateFieldArray<int32, 7, 198, 199> Resistances;
+ UpdateFieldArray<int32, 7, 198, 206> BonusResistanceMods;
+ UpdateFieldArray<int32, 7, 198, 213> 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;
@@ -574,6 +579,27 @@ struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793>
void ClearChangesMask();
};
+struct BitVectors : public IsUpdateFieldStructureTag, public HasChangesMask<1>
+{
+ UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 11, 0, -1> Values;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct PlayerDataElement : public IsUpdateFieldStructureTag
+{
+ uint32 Type;
+ float FloatValue;
+ int64 Int64Value;
+
+ 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==(PlayerDataElement const& right) const;
+ bool operator!=(PlayerDataElement const& right) const { return !(*this == right); }
+};
+
struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
{
UpdateField<uint32, 0, 1> Threshold;
@@ -743,17 +769,30 @@ struct TraitEntry : public IsUpdateFieldStructureTag
bool operator!=(TraitEntry const& right) const { return !(*this == right); }
};
-struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<12>
+struct TraitSubTreeCache : public IsUpdateFieldStructureTag
+{
+ std::vector<UF::TraitEntry> Entries;
+ int32 TraitSubTreeID;
+ uint32 Active;
+
+ 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==(TraitSubTreeCache const& right) const;
+ bool operator!=(TraitSubTreeCache const& right) const { return !(*this == right); }
+};
+
+struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<14>
{
DynamicUpdateField<UF::TraitEntry, 0, 1> Entries;
- UpdateField<int32, 0, 2> ID;
- UpdateField<std::string, 0, 3> Name;
- UpdateField<int32, 4, 5> Type;
- UpdateField<int32, 4, 6> SkillLineID;
- UpdateField<int32, 4, 7> ChrSpecializationID;
- UpdateField<int32, 8, 9> CombatConfigFlags;
- UpdateField<int32, 8, 10> LocalIdentifier;
- UpdateField<int32, 8, 11> TraitSystemID;
+ DynamicUpdateField<UF::TraitSubTreeCache, 0, 2> SubTrees;
+ UpdateField<int32, 0, 3> ID;
+ UpdateField<std::string, 4, 5> Name;
+ UpdateField<int32, 4, 6> Type;
+ UpdateField<int32, 4, 7> SkillLineID;
+ UpdateField<int32, 8, 9> ChrSpecializationID;
+ UpdateField<int32, 8, 10> CombatConfigFlags;
+ UpdateField<int32, 8, 11> LocalIdentifier;
+ UpdateField<int32, 12, 13> TraitSystemID;
void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
@@ -775,27 +814,49 @@ struct CraftingOrderItem : public IsUpdateFieldStructureTag, public HasChangesMa
void ClearChangesMask();
};
-struct CraftingOrderData : public IsUpdateFieldStructureTag, public HasChangesMask<24>
+struct CraftingOrderCustomer : public IsUpdateFieldStructureTag, public HasChangesMask<2>
+{
+ UpdateField<ObjectGuid, -1, 0> CustomerGUID;
+ UpdateField<ObjectGuid, -1, 1> CustomerAccountGUID;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct CraftingOrderNpcCustomer : public IsUpdateFieldStructureTag, public HasChangesMask<2>
+{
+ UpdateField<int64, -1, 0> NpcCraftingOrderCustomerID;
+ UpdateField<int32, -1, 1> Field_8;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct CraftingOrderData : public IsUpdateFieldStructureTag, public HasChangesMask<26>
{
DynamicUpdateField<UF::CraftingOrderItem, 0, 1> Reagents;
UpdateField<int32, 0, 2> Field_0;
UpdateField<uint64, 0, 3> OrderID;
UpdateField<int32, 0, 4> SkillLineAbilityID;
- UpdateField<uint8, 5, 6> OrderState;
- UpdateField<uint8, 5, 7> OrderType;
- UpdateField<uint8, 5, 8> MinQuality;
- UpdateField<int64, 5, 9> ExpirationTime;
- UpdateField<int64, 10, 11> ClaimEndTime;
- UpdateField<int64, 10, 12> TipAmount;
- UpdateField<int64, 10, 13> ConsortiumCut;
- UpdateField<uint32, 10, 14> Flags;
- UpdateField<ObjectGuid, 15, 16> CustomerGUID;
- UpdateField<ObjectGuid, 15, 17> CustomerAccountGUID;
- UpdateField<ObjectGuid, 15, 18> CrafterGUID;
- UpdateField<ObjectGuid, 15, 19> PersonalCrafterGUID;
- UpdateField<std::string, 20, 21> CustomerNotes;
- OptionalUpdateField<UF::CraftingOrderItem, 20, 22> OutputItem;
- OptionalUpdateField<WorldPackets::Item::ItemInstance, 20, 23> OutputItemData;
+ UpdateField<uint8, 0, 5> OrderState;
+ UpdateField<uint8, 6, 7> OrderType;
+ UpdateField<uint8, 6, 8> MinQuality;
+ UpdateField<int64, 6, 9> ExpirationTime;
+ UpdateField<int64, 6, 10> ClaimEndTime;
+ UpdateField<int64, 6, 11> TipAmount;
+ UpdateField<int64, 12, 13> ConsortiumCut;
+ UpdateField<uint32, 12, 14> Flags;
+ UpdateField<ObjectGuid, 12, 15> CrafterGUID;
+ UpdateField<ObjectGuid, 12, 16> PersonalCrafterGUID;
+ UpdateField<int32, 12, 17> NpcCraftingOrderSetID;
+ UpdateField<int32, 18, 19> NpcTreasureID;
+ UpdateField<std::string, 18, 20> CustomerNotes;
+ OptionalUpdateField<UF::CraftingOrderCustomer, 18, 21> Customer;
+ OptionalUpdateField<UF::CraftingOrderNpcCustomer, 18, 22> NpcCustomer;
+ OptionalUpdateField<UF::CraftingOrderItem, 18, 23> OutputItem;
+ OptionalUpdateField<WorldPackets::Item::ItemInstance, 24, 25> OutputItemData;
void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
@@ -824,6 +885,18 @@ struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag, public Has
void ClearChangesMask();
};
+struct NPCCraftingOrderInfo : public IsUpdateFieldStructureTag, public HasChangesMask<4>
+{
+ UpdateField<uint64, -1, 0> Field_0;
+ UpdateField<int32, -1, 1> Field_8;
+ UpdateField<int32, -1, 2> Field_C;
+ UpdateField<int32, -1, 3> Field_10;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
struct CategoryCooldownMod : public IsUpdateFieldStructureTag
{
int32 SpellCategoryID;
@@ -882,6 +955,46 @@ struct CollectableSourceTrackedData : public IsUpdateFieldStructureTag, public H
void ClearChangesMask();
};
+struct BankTabSettings : public IsUpdateFieldStructureTag, public HasChangesMask<4>
+{
+ UpdateField<std::string, -1, 0> Name;
+ UpdateField<std::string, -1, 1> Icon;
+ UpdateField<std::string, -1, 2> Description;
+ UpdateField<int32, -1, 3> DepositFlags;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct WalkInData : public IsUpdateFieldStructureTag
+{
+ int32 MapID;
+ int64 Field_8;
+ uint32 Type;
+ ObjectGuid Field_18;
+
+ 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==(WalkInData const& right) const;
+ bool operator!=(WalkInData const& right) const { return !(*this == right); }
+};
+
+struct DelveData : public IsUpdateFieldStructureTag
+{
+ std::vector<ObjectGuid> Owners;
+ int32 Field_0;
+ int64 Field_8;
+ int32 Field_10;
+ int32 SpellID;
+ uint32 Started; // Restricts rewards to players in m_owners if set to true. Intended to prevent rewarwding players that join in-progress delve?
+
+ 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==(DelveData const& right) const;
+ bool operator!=(DelveData const& right) const { return !(*this == right); }
+};
+
struct Research : public IsUpdateFieldStructureTag
{
int16 ResearchProjectID;
@@ -892,7 +1005,7 @@ struct Research : public IsUpdateFieldStructureTag
bool operator!=(Research const& right) const { return !(*this == right); }
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1454>
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1476>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BackpackSellJunkDisabled;
@@ -900,146 +1013,154 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<bool, 0, 4> SortBagsRightToLeft;
UpdateField<bool, 0, 5> InsertItemsLeftToRight;
UpdateField<bool, 0, 6> HasPerksProgramPendingReward;
- UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 9, 36, 37> DataFlags;
- UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 38, 39> ResearchSites;
- UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 40, 41> ResearchSiteProgress;
- UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 42, 43> Research;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 40, 41> ResearchSites;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 42, 43> ResearchSiteProgress;
+ UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 44, 45> Research;
DynamicUpdateField<uint64, 0, 7> KnownTitles;
- DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted;
- DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs;
- DynamicUpdateField<int32, 0, 11> Heirlooms;
- DynamicUpdateField<uint32, 0, 12> HeirloomFlags;
- DynamicUpdateField<int32, 0, 13> Toys;
- DynamicUpdateField<uint32, 0, 14> ToyFlags;
- DynamicUpdateField<uint32, 0, 15> Transmog;
- DynamicUpdateField<int32, 0, 16> ConditionalTransmog;
- DynamicUpdateField<int32, 0, 17> SelfResSpells;
- DynamicUpdateField<uint32, 0, 18> RuneforgePowers;
- DynamicUpdateField<uint32, 0, 19> TransmogIllusions;
- DynamicUpdateField<UF::SpellPctModByLabel, 0, 21> SpellPctModByLabel;
- DynamicUpdateField<UF::SpellFlatModByLabel, 0, 22> SpellFlatModByLabel;
- DynamicUpdateField<UF::MawPower, 0, 23> MawPowers;
- DynamicUpdateField<UF::MultiFloorExplore, 0, 24> MultiFloorExploration;
- DynamicUpdateField<UF::RecipeProgressionInfo, 0, 25> RecipeProgression;
- DynamicUpdateField<UF::ReplayedQuest, 0, 26> ReplayedQuests;
- DynamicUpdateField<UF::QuestLog, 0, 27> TaskQuests;
- 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::CollectableSourceTrackedData, 32, 35> TrackedCollectableSources;
- DynamicUpdateField<UF::PVPInfo, 0, 8> PvpInfo;
- DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions;
- DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs;
- DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders;
- UpdateField<ObjectGuid, 32, 44> FarsightObject;
- UpdateField<ObjectGuid, 32, 45> SummonedBattlePetGUID;
- UpdateField<uint64, 32, 46> Coinage;
- UpdateField<int32, 32, 47> XP;
- UpdateField<int32, 32, 48> NextLevelXP;
- UpdateField<int32, 32, 49> TrialXP;
- UpdateField<UF::SkillInfo, 32, 50> Skill;
- UpdateField<int32, 32, 51> CharacterPoints;
- UpdateField<int32, 32, 52> MaxTalentTiers;
- UpdateField<uint32, 32, 53> TrackCreatureMask;
- UpdateField<float, 32, 54> MainhandExpertise;
- UpdateField<float, 32, 55> OffhandExpertise;
- UpdateField<float, 32, 56> RangedExpertise;
- UpdateField<float, 32, 57> CombatRatingExpertise;
- UpdateField<float, 32, 58> BlockPercentage;
- UpdateField<float, 32, 59> DodgePercentage;
- UpdateField<float, 32, 60> DodgePercentageFromAttribute;
- UpdateField<float, 32, 61> ParryPercentage;
- UpdateField<float, 32, 62> ParryPercentageFromAttribute;
- UpdateField<float, 32, 63> CritPercentage;
- UpdateField<float, 32, 64> RangedCritPercentage;
- UpdateField<float, 32, 65> OffhandCritPercentage;
- UpdateField<float, 32, 66> SpellCritPercentage;
- UpdateField<int32, 32, 67> ShieldBlock;
- UpdateField<float, 32, 68> ShieldBlockCritPercentage;
- UpdateField<float, 32, 69> Mastery;
- UpdateField<float, 32, 70> Speed;
- UpdateField<float, 32, 71> Avoidance;
- UpdateField<float, 72, 73> Sturdiness;
- UpdateField<int32, 72, 74> Versatility;
- UpdateField<float, 72, 75> VersatilityBonus;
- UpdateField<float, 72, 76> PvpPowerDamage;
- UpdateField<float, 72, 77> PvpPowerHealing;
- UpdateField<int32, 72, 78> ModHealingDonePos;
- UpdateField<float, 72, 79> ModHealingPercent;
- UpdateField<float, 72, 80> ModPeriodicHealingDonePercent;
- UpdateField<float, 72, 81> ModSpellPowerPercent;
- UpdateField<float, 72, 82> ModResiliencePercent;
- UpdateField<float, 72, 83> OverrideSpellPowerByAPPercent;
- UpdateField<float, 72, 84> OverrideAPBySpellPowerPercent;
- UpdateField<int32, 72, 85> ModTargetResistance;
- UpdateField<int32, 72, 86> ModTargetPhysicalResistance;
- UpdateField<uint32, 72, 87> LocalFlags;
- UpdateField<uint8, 72, 88> GrantableLevels;
- UpdateField<uint8, 72, 89> MultiActionBars;
- UpdateField<uint8, 72, 90> LifetimeMaxRank;
- UpdateField<uint8, 72, 91> NumRespecs;
- UpdateField<uint32, 72, 92> PvpMedals;
- UpdateField<uint16, 72, 93> TodayHonorableKills;
- UpdateField<uint16, 72, 94> YesterdayHonorableKills;
- UpdateField<uint32, 72, 95> LifetimeHonorableKills;
- UpdateField<int32, 72, 96> WatchedFactionIndex;
- UpdateField<int32, 72, 97> MaxLevel;
- UpdateField<int32, 72, 98> ScalingPlayerLevelDelta;
- UpdateField<int32, 72, 99> MaxCreatureScalingLevel;
- UpdateField<int32, 72, 100> PetSpellPower;
- UpdateField<float, 72, 101> UiHitModifier;
- UpdateField<float, 72, 102> UiSpellHitModifier;
- UpdateField<int32, 72, 103> HomeRealmTimeOffset;
- UpdateField<float, 104, 105> ModPetHaste;
- UpdateField<int8, 104, 106> JailersTowerLevelMax;
- UpdateField<int8, 104, 107> JailersTowerLevel;
- UpdateField<uint8, 104, 108> LocalRegenFlags;
- UpdateField<uint8, 104, 109> AuraVision;
- UpdateField<uint8, 104, 110> NumBackpackSlots;
- UpdateField<int32, 104, 111> OverrideSpellsID;
- UpdateField<uint16, 104, 112> LootSpecID;
- UpdateField<uint32, 104, 113> OverrideZonePVPType;
- UpdateField<int32, 104, 114> Honor;
- UpdateField<int32, 104, 115> HonorNextLevel;
- UpdateField<int32, 104, 116> PerksProgramCurrency;
- UpdateField<uint8, 104, 117> NumBankSlots;
- UpdateField<UF::ResearchHistory, 104, 118> ResearchHistory;
- UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 104, 119> FrozenPerksVendorItem;
- UpdateField<UF::ActivePlayerUnk901, 104, 121> Field_1410;
- OptionalUpdateField<UF::QuestSession, 104, 120> QuestSession;
- UpdateField<int32, 104, 122> UiChromieTimeExpansionID;
- UpdateField<int32, 104, 123> TimerunningSeasonID;
- UpdateField<int32, 104, 124> TransportServerTime;
- UpdateField<uint32, 104, 125> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
- UpdateField<int16, 104, 126> DEBUGSoulbindConduitRank;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 104, 127> DungeonScore;
- UpdateField<uint32, 104, 128> ActiveCombatTraitConfigID;
- UpdateField<int32, 104, 129> ItemUpgradeHighOnehandWeaponItemID;
- UpdateField<int32, 104, 130> ItemUpgradeHighFingerItemID;
- UpdateField<float, 104, 131> ItemUpgradeHighFingerWatermark;
- UpdateField<int32, 104, 132> ItemUpgradeHighTrinketItemID;
- UpdateField<float, 104, 133> ItemUpgradeHighTrinketWatermark;
- UpdateField<uint64, 104, 134> LootHistoryInstanceID;
- OptionalUpdateField<UF::StableInfo, 104, 135> PetStable;
- UpdateField<uint8, 136, 137> RequiredMountCapabilityFlags;
- UpdateFieldArray<ObjectGuid, 227, 138, 139> InvSlots;
- UpdateFieldArray<UF::RestInfo, 2, 366, 367> RestInfo;
- UpdateFieldArray<int32, 7, 369, 370> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 369, 377> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 369, 384> ModDamageDonePercent;
- UpdateFieldArray<float, 7, 369, 391> ModHealingDonePercent;
- UpdateFieldArray<float, 3, 398, 399> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 398, 402> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 405, 406> BuybackPrice;
- UpdateFieldArray<int64, 12, 405, 418> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 430, 431> CombatRatings;
- UpdateFieldArray<uint32, 4, 463, 464> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 468, 469> ProfessionSkillLine;
- UpdateFieldArray<uint32, 5, 471, 472> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 477, 478> BankBagSlotFlags;
- UpdateFieldArray<uint64, 950, 485, 486> QuestCompleted;
- UpdateFieldArray<float, 17, 1436, 1437> ItemUpgradeHighWatermark;
+ DynamicUpdateField<int32, 0, 11> DailyQuestsCompleted;
+ DynamicUpdateField<int32, 0, 12> AvailableQuestLineXQuestIDs;
+ DynamicUpdateField<int32, 0, 13> Heirlooms;
+ DynamicUpdateField<uint32, 0, 14> HeirloomFlags;
+ DynamicUpdateField<int32, 0, 15> Toys;
+ DynamicUpdateField<uint32, 0, 16> ToyFlags;
+ DynamicUpdateField<uint32, 0, 17> Transmog;
+ DynamicUpdateField<int32, 0, 18> ConditionalTransmog;
+ DynamicUpdateField<int32, 0, 19> SelfResSpells;
+ DynamicUpdateField<uint32, 0, 20> RuneforgePowers;
+ DynamicUpdateField<uint32, 0, 21> TransmogIllusions;
+ DynamicUpdateField<UF::SpellPctModByLabel, 0, 23> SpellPctModByLabel;
+ DynamicUpdateField<UF::SpellFlatModByLabel, 0, 24> SpellFlatModByLabel;
+ DynamicUpdateField<UF::MawPower, 0, 25> MawPowers;
+ DynamicUpdateField<UF::MultiFloorExplore, 0, 26> MultiFloorExploration;
+ DynamicUpdateField<UF::RecipeProgressionInfo, 0, 27> RecipeProgression;
+ DynamicUpdateField<UF::ReplayedQuest, 0, 28> ReplayedQuests;
+ DynamicUpdateField<UF::QuestLog, 0, 29> TaskQuests;
+ DynamicUpdateField<int32, 0, 30> DisabledSpells;
+ DynamicUpdateField<UF::PersonalCraftingOrderCount, 32, 34> PersonalCraftingOrderCounts;
+ DynamicUpdateField<UF::NPCCraftingOrderInfo, 32, 35> NpcCraftingOrders;
+ DynamicUpdateField<UF::CategoryCooldownMod, 32, 36> CategoryCooldownMods;
+ DynamicUpdateField<UF::WeeklySpellUse, 32, 37> WeeklySpellUses;
+ DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 38> TrackedCollectableSources;
+ DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements;
+ DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements;
+ DynamicUpdateField<UF::PVPInfo, 0, 10> PvpInfo;
+ DynamicUpdateField<UF::CharacterRestriction, 0, 22> CharacterRestrictions;
+ DynamicUpdateField<UF::TraitConfig, 0, 31> TraitConfigs;
+ DynamicUpdateField<UF::CraftingOrder, 32, 33> CraftingOrders;
+ DynamicUpdateField<UF::BankTabSettings, 32, 39> AccountBankTabSettings;
+ UpdateField<ObjectGuid, 32, 46> FarsightObject;
+ UpdateField<ObjectGuid, 32, 47> SummonedBattlePetGUID;
+ UpdateField<uint64, 32, 48> Coinage;
+ UpdateField<uint64, 32, 49> AccountBankCoinage;
+ UpdateField<int32, 32, 50> XP;
+ UpdateField<int32, 32, 51> NextLevelXP;
+ UpdateField<int32, 32, 52> TrialXP;
+ UpdateField<UF::SkillInfo, 32, 53> Skill;
+ UpdateField<int32, 32, 54> CharacterPoints;
+ UpdateField<int32, 32, 55> MaxTalentTiers;
+ UpdateField<uint32, 32, 56> TrackCreatureMask;
+ UpdateField<float, 32, 57> MainhandExpertise;
+ UpdateField<float, 32, 58> OffhandExpertise;
+ UpdateField<float, 32, 59> RangedExpertise;
+ UpdateField<float, 32, 60> CombatRatingExpertise;
+ UpdateField<float, 32, 61> BlockPercentage;
+ UpdateField<float, 32, 62> DodgePercentage;
+ UpdateField<float, 32, 63> DodgePercentageFromAttribute;
+ UpdateField<float, 32, 64> ParryPercentage;
+ UpdateField<float, 32, 65> ParryPercentageFromAttribute;
+ UpdateField<float, 32, 66> CritPercentage;
+ UpdateField<float, 32, 67> RangedCritPercentage;
+ UpdateField<float, 32, 68> OffhandCritPercentage;
+ UpdateField<float, 32, 69> SpellCritPercentage;
+ UpdateField<int32, 70, 71> ShieldBlock;
+ UpdateField<float, 70, 72> ShieldBlockCritPercentage;
+ UpdateField<float, 70, 73> Mastery;
+ UpdateField<float, 70, 74> Speed;
+ UpdateField<float, 70, 75> Avoidance;
+ UpdateField<float, 70, 76> Sturdiness;
+ UpdateField<int32, 70, 77> Versatility;
+ UpdateField<float, 70, 78> VersatilityBonus;
+ UpdateField<float, 70, 79> PvpPowerDamage;
+ UpdateField<float, 70, 80> PvpPowerHealing;
+ UpdateField<UF::BitVectors, 70, 81> BitVectors;
+ UpdateField<int32, 70, 82> ModHealingDonePos;
+ UpdateField<float, 70, 83> ModHealingPercent;
+ UpdateField<float, 70, 84> ModPeriodicHealingDonePercent;
+ UpdateField<float, 70, 85> ModSpellPowerPercent;
+ UpdateField<float, 70, 86> ModResiliencePercent;
+ UpdateField<float, 70, 87> OverrideSpellPowerByAPPercent;
+ UpdateField<float, 70, 88> OverrideAPBySpellPowerPercent;
+ UpdateField<int32, 70, 89> ModTargetResistance;
+ UpdateField<int32, 70, 90> ModTargetPhysicalResistance;
+ UpdateField<uint32, 70, 91> LocalFlags;
+ UpdateField<uint8, 70, 92> GrantableLevels;
+ UpdateField<uint8, 70, 93> MultiActionBars;
+ UpdateField<uint8, 70, 94> LifetimeMaxRank;
+ UpdateField<uint8, 70, 95> NumRespecs;
+ UpdateField<uint32, 70, 96> PvpMedals;
+ UpdateField<uint16, 70, 97> TodayHonorableKills;
+ UpdateField<uint16, 70, 98> YesterdayHonorableKills;
+ UpdateField<uint32, 70, 99> LifetimeHonorableKills;
+ UpdateField<int32, 70, 100> WatchedFactionIndex;
+ UpdateField<int32, 70, 101> MaxLevel;
+ UpdateField<int32, 102, 103> ScalingPlayerLevelDelta;
+ UpdateField<int32, 102, 104> MaxCreatureScalingLevel;
+ UpdateField<int32, 102, 105> PetSpellPower;
+ UpdateField<float, 102, 106> UiHitModifier;
+ UpdateField<float, 102, 107> UiSpellHitModifier;
+ UpdateField<int32, 102, 108> HomeRealmTimeOffset;
+ UpdateField<float, 102, 109> ModPetHaste;
+ UpdateField<int8, 102, 110> JailersTowerLevelMax;
+ UpdateField<int8, 102, 111> JailersTowerLevel;
+ UpdateField<uint8, 102, 112> LocalRegenFlags;
+ UpdateField<uint8, 102, 113> AuraVision;
+ UpdateField<uint8, 102, 114> NumBackpackSlots;
+ UpdateField<int32, 102, 115> OverrideSpellsID;
+ UpdateField<uint16, 102, 116> LootSpecID;
+ UpdateField<uint32, 102, 117> OverrideZonePVPType;
+ UpdateField<int32, 102, 118> Honor;
+ UpdateField<int32, 102, 119> HonorNextLevel;
+ UpdateField<int32, 102, 120> PerksProgramCurrency;
+ UpdateField<uint8, 102, 121> NumBankSlots;
+ UpdateField<uint8, 102, 122> NumAccountBankTabs;
+ UpdateField<UF::ResearchHistory, 102, 123> ResearchHistory;
+ UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 124> FrozenPerksVendorItem;
+ UpdateField<UF::ActivePlayerUnk901, 102, 126> Field_1410;
+ OptionalUpdateField<UF::QuestSession, 102, 125> QuestSession;
+ UpdateField<int32, 102, 127> UiChromieTimeExpansionID;
+ UpdateField<int32, 102, 128> TimerunningSeasonID;
+ UpdateField<int32, 102, 129> TransportServerTime;
+ UpdateField<uint32, 102, 130> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
+ UpdateField<int16, 102, 131> DEBUGSoulbindConduitRank;
+ UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 132> DungeonScore;
+ UpdateField<uint32, 102, 133> ActiveCombatTraitConfigID;
+ UpdateField<int32, 134, 135> ItemUpgradeHighOnehandWeaponItemID;
+ UpdateField<int32, 134, 136> ItemUpgradeHighFingerItemID;
+ UpdateField<float, 134, 137> ItemUpgradeHighFingerWatermark;
+ UpdateField<int32, 134, 138> ItemUpgradeHighTrinketItemID;
+ UpdateField<float, 134, 139> ItemUpgradeHighTrinketWatermark;
+ UpdateField<uint64, 134, 140> LootHistoryInstanceID;
+ OptionalUpdateField<UF::StableInfo, 134, 141> PetStable;
+ UpdateField<uint8, 134, 142> RequiredMountCapabilityFlags;
+ OptionalUpdateField<UF::WalkInData, 134, 143> WalkInData;
+ OptionalUpdateField<UF::DelveData, 134, 144> DelveData;
+ UpdateFieldArray<ObjectGuid, 232, 145, 146> InvSlots;
+ UpdateFieldArray<UF::RestInfo, 2, 378, 379> RestInfo;
+ UpdateFieldArray<int32, 7, 381, 382> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 381, 389> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 381, 396> ModDamageDonePercent;
+ UpdateFieldArray<float, 7, 381, 403> ModHealingDonePercent;
+ UpdateFieldArray<float, 3, 410, 411> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 410, 414> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 417, 418> BuybackPrice;
+ UpdateFieldArray<int64, 12, 417, 430> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 442, 443> CombatRatings;
+ UpdateFieldArray<uint32, 4, 475, 476> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 480, 481> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 5, 483, 484> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 489, 490> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 960, 497, 498> QuestCompleted;
+ UpdateFieldArray<float, 17, 1458, 1459> 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;
diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h
index 68d393e9804..9e3461af947 100644
--- a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h
+++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h
@@ -313,7 +313,7 @@ public:
static value_type GetValue(UF::UnitData const* unitData, Unit const* unit, Player const* receiver)
{
value_type interactSpellId = unitData->InteractSpellID;
- if (unitData->NpcFlags[0] & UNIT_NPC_FLAG_SPELLCLICK && !interactSpellId)
+ if (unitData->NpcFlags & UNIT_NPC_FLAG_SPELLCLICK && !interactSpellId)
{
// this field is not set if there are multiple available spellclick spells
auto clickBounds = sObjectMgr->GetSpellClickInfoMapBounds(unit->GetEntry());
@@ -340,9 +340,9 @@ class ViewerDependentValue<UF::UnitData::NpcFlagsTag>
public:
using value_type = UF::UnitData::NpcFlagsTag::value_type;
- static value_type GetValue(UF::UnitData const* unitData, uint32 i, Unit const* unit, Player const* receiver)
+ static value_type GetValue(UF::UnitData const* unitData, Unit const* unit, Player const* receiver)
{
- value_type npcFlag = unitData->NpcFlags[i];
+ value_type npcFlag = unitData->NpcFlags;
if (npcFlag)
{
if ((!unit->IsInteractionAllowedInCombat() && unit->IsInCombat())
@@ -350,14 +350,11 @@ public:
npcFlag = 0;
else if (Creature const* creature = unit->ToCreature())
{
- if (i == 0)
- {
- if (!receiver->CanSeeGossipOn(creature))
- npcFlag &= ~(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
+ if (!receiver->CanSeeGossipOn(creature))
+ npcFlag &= ~(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER);
- if (!receiver->CanSeeSpellClickOn(creature))
- npcFlag &= ~UNIT_NPC_FLAG_SPELLCLICK;
- }
+ if (!receiver->CanSeeSpellClickOn(creature))
+ npcFlag &= ~UNIT_NPC_FLAG_SPELLCLICK;
}
}
return npcFlag;
@@ -365,6 +362,25 @@ public:
};
template<>
+class ViewerDependentValue<UF::UnitData::NpcFlags2Tag>
+{
+public:
+ using value_type = UF::UnitData::NpcFlags2Tag::value_type;
+
+ static value_type GetValue(UF::UnitData const* unitData, Unit const* unit, Player const* receiver)
+ {
+ value_type npcFlag = unitData->NpcFlags2;
+ if (npcFlag)
+ {
+ if ((!unit->IsInteractionAllowedInCombat() && unit->IsInCombat())
+ || (!unit->IsInteractionAllowedWhileHostile() && unit->IsHostileTo(receiver)))
+ npcFlag = 0;
+ }
+ return npcFlag;
+ }
+};
+
+template<>
class ViewerDependentValue<UF::GameObjectData::FlagsTag>
{
public:
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 55ad4d6a98f..32343bbe64d 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -216,6 +216,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this)
m_bCanDelayTeleport = false;
m_bHasDelayedTeleport = false;
m_teleport_options = TELE_TO_NONE;
+ m_newWorldCounter = 0;
m_trade = nullptr;
@@ -1488,6 +1489,8 @@ bool Player::TeleportTo(TeleportLocation const& teleportLocation, TeleportToOpti
if (!GetSession()->PlayerLogout())
{
+ ++m_newWorldCounter;
+
WorldPackets::Movement::SuspendToken suspendToken;
suspendToken.SequenceIndex = m_movementCounter; // not incrementing
suspendToken.Reason = options & TELE_TO_SEAMLESS ? 2 : 1;
@@ -6370,8 +6373,8 @@ void Player::CheckAreaExplore()
uint32 offset = areaEntry->AreaBit / PLAYER_EXPLORED_ZONES_BITS;
uint64 val = UI64LIT(1) << (areaEntry->AreaBit % PLAYER_EXPLORED_ZONES_BITS);
- if (offset >= m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size()
- || !(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][offset] & val))
+ if (offset >= m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size()
+ || !(m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][offset] & val))
{
AddExploredZones(offset, val);
@@ -6423,7 +6426,8 @@ void Player::AddExploredZones(uint32 pos, uint64 mask)
{
SetUpdateFieldFlagValue(m_values
.ModifyValue(&Player::m_activePlayerData)
- .ModifyValue(&UF::ActivePlayerData::DataFlags, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX)
+ .ModifyValue(&UF::ActivePlayerData::BitVectors)
+ .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX)
.ModifyValue(pos), mask);
}
@@ -6431,7 +6435,8 @@ void Player::RemoveExploredZones(uint32 pos, uint64 mask)
{
RemoveUpdateFieldFlagValue(m_values
.ModifyValue(&Player::m_activePlayerData)
- .ModifyValue(&UF::ActivePlayerData::DataFlags, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX)
+ .ModifyValue(&UF::ActivePlayerData::BitVectors)
+ .ModifyValue(&UF::BitVectors::Values, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX)
.ModifyValue(pos), mask);
}
@@ -6445,11 +6450,11 @@ bool Player::HasExploredZone(uint32 areaId) const
return false;
size_t playerIndexOffset = size_t(area->AreaBit) / PLAYER_EXPLORED_ZONES_BITS;
- if (playerIndexOffset >= m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size())
+ if (playerIndexOffset >= m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size())
return false;
uint64 mask = uint64(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS);
- return (m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][playerIndexOffset] & mask) != 0;
+ return (m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][playerIndexOffset] & mask) != 0;
}
void Player::CheckOutdoorsAuraRequirements()
@@ -13891,6 +13896,9 @@ void Player::SendNewItem(Item* item, uint32 quantity, bool pushed, bool created,
packet.QuestLogItemID = item->GetTemplate()->QuestLogItemId;
packet.Quantity = quantity;
packet.QuantityInInventory = GetItemCount(item->GetEntry());
+ if (QuestObjective const* questObjective = GetQuestObjectiveForItem(item->GetEntry(), false))
+ packet.QuantityInQuestLog = GetQuestObjectiveData(*questObjective);
+
packet.BattlePetSpeciesID = item->GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID);
packet.BattlePetBreedID = item->GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA) & 0xFFFFFF;
packet.BattlePetBreedQuality = (item->GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA) >> 24) & 0xFF;
@@ -14225,7 +14233,8 @@ void Player::OnGossipSelect(WorldObject* source, int32 gossipOptionId, uint32 me
PlayerInteractionType::Renown, PlayerInteractionType::BlackMarketAuctioneer, PlayerInteractionType::PerksProgramVendor,
PlayerInteractionType::ProfessionsCraftingOrder, PlayerInteractionType::Professions, PlayerInteractionType::ProfessionsCustomerOrder,
PlayerInteractionType::TraitSystem, PlayerInteractionType::BarbersChoice, PlayerInteractionType::MajorFactionRenown,
- PlayerInteractionType::PersonalTabardVendor
+ PlayerInteractionType::PersonalTabardVendor, PlayerInteractionType::ForgeMaster, PlayerInteractionType::CharacterBanker,
+ PlayerInteractionType::AccountBanker
};
PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[AsUnderlyingType(gossipOptionNpc)];
@@ -16167,20 +16176,28 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object const* questgiver) const
case QUEST_STATUS_COMPLETE:
if (quest->IsImportant())
result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::ImportantQuestRewardCompleteNoPOI : QuestGiverStatus::ImportantQuestRewardCompletePOI;
+ else if (quest->IsMeta())
+ result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::MetaQuestRewardCompleteNoPOI : QuestGiverStatus::MetaQuestRewardCompletePOI;
else if (quest->GetQuestTag() == QuestTagType::CovenantCalling)
result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::CovenantCallingRewardCompleteNoPOI : QuestGiverStatus::CovenantCallingRewardCompletePOI;
else if (quest->HasFlagEx(QUEST_FLAGS_EX_LEGENDARY))
result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::LegendaryRewardCompleteNoPOI : QuestGiverStatus::LegendaryRewardCompletePOI;
+ else if (quest->IsDailyOrWeekly())
+ result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::RepeatableRewardCompleteNoPOI : QuestGiverStatus::RepeatableRewardCompletePOI;
else
result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::RewardCompleteNoPOI : QuestGiverStatus::RewardCompletePOI;
break;
case QUEST_STATUS_INCOMPLETE:
if (quest->IsImportant())
result |= QuestGiverStatus::ImportantReward;
+ else if (quest->IsMeta())
+ result |= QuestGiverStatus::MetaReward;
else if (quest->GetQuestTag() == QuestTagType::CovenantCalling)
result |= QuestGiverStatus::CovenantCallingReward;
else if (quest->HasFlagEx(QUEST_FLAGS_EX_LEGENDARY))
result |= QuestGiverStatus::LegendaryReward;
+ else if (quest->IsDailyOrWeekly())
+ result |= QuestGiverStatus::RepeatableReward;
else
result |= QuestGiverStatus::Reward;
break;
@@ -16188,12 +16205,17 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object const* questgiver) const
break;
}
- if (quest->IsTurnIn() && CanTakeQuest(quest, false) && quest->IsRepeatable() && !quest->IsDailyOrWeekly() && !quest->IsMonthly())
+ if (quest->IsTurnIn() && CanTakeQuest(quest, false))
{
- if (GetLevel() > (GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF)))
- result |= QuestGiverStatus::RepeatableTurnin;
+ if (quest->IsRepeatable())
+ {
+ if (GetLevel() > (GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF)))
+ result |= QuestGiverStatus::RepeatableTurnin;
+ else
+ result |= QuestGiverStatus::TrivialRepeatableTurnin;
+ }
else
- result |= QuestGiverStatus::TrivialRepeatableTurnin;
+ result |= quest->HasFlag(QUEST_FLAGS_HIDE_REWARD_POI) ? QuestGiverStatus::RewardCompleteNoPOI : QuestGiverStatus::RewardCompletePOI;
}
}
@@ -16215,12 +16237,14 @@ QuestGiverStatus Player::GetQuestDialogStatus(Object const* questgiver) const
bool isTrivial = GetLevel() > (GetQuestLevel(quest) + sWorld->getIntConfig(CONFIG_QUEST_LOW_LEVEL_HIDE_DIFF));
if (quest->IsImportant())
result |= isTrivial ? QuestGiverStatus::TrivialImportantQuest : QuestGiverStatus::ImportantQuest;
+ else if (quest->IsMeta())
+ result |= isTrivial ? QuestGiverStatus::TrivialMetaQuest : QuestGiverStatus::MetaQuest;
else if (quest->GetQuestTag() == QuestTagType::CovenantCalling)
result |= QuestGiverStatus::CovenantCallingQuest;
else if (quest->HasFlagEx(QUEST_FLAGS_EX_LEGENDARY))
result |= isTrivial ? QuestGiverStatus::TrivialLegendaryQuest : QuestGiverStatus::LegendaryQuest;
- else if (quest->IsDaily())
- result |= isTrivial ? QuestGiverStatus::TrivialDailyQuest : QuestGiverStatus::DailyQuest;
+ else if (quest->IsDailyOrWeekly())
+ result |= isTrivial ? QuestGiverStatus::TrivialRepeatableQuest : QuestGiverStatus::RepeatableQuest;
else
result |= isTrivial ? QuestGiverStatus::Trivial : QuestGiverStatus::Quest;
}
@@ -20067,10 +20091,10 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
stmt->setUInt32(index++, GetLootSpecId());
ss.str("");
- for (size_t i = 0; i < m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i)
+ for (size_t i = 0; i < m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i)
{
- ss << uint32(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' ';
- ss << uint32((m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' ';
+ ss << uint32(m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' ';
+ ss << uint32((m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' ';
}
stmt->setString(index++, ss.str());
@@ -20224,10 +20248,10 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
stmt->setUInt32(index++, GetLootSpecId());
ss.str("");
- for (size_t i = 0; i < m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i)
+ for (size_t i = 0; i < m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i)
{
- ss << uint32(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' ';
- ss << uint32((m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' ';
+ ss << uint32(m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' ';
+ ss << uint32((m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' ';
}
stmt->setString(index++, ss.str());
@@ -25361,9 +25385,10 @@ void Player::UpdateVisibleObjectInteractions(bool allUnits, bool onlySpellClicks
{
UF::ObjectData::Base objMask;
UF::UnitData::Base unitMask;
- for (uint32 i = 0; i < creature->m_unitData->NpcFlags.size(); ++i)
- if (creature->m_unitData->NpcFlags[i])
- unitMask.MarkChanged(&UF::UnitData::NpcFlags, i);
+ if (creature->m_unitData->NpcFlags)
+ unitMask.MarkChanged(&UF::UnitData::NpcFlags);
+ if (creature->m_unitData->NpcFlags2)
+ unitMask.MarkChanged(&UF::UnitData::NpcFlags2);
if (objMask.GetChangesMask().IsAnySet() || unitMask.GetChangesMask().IsAnySet())
creature->BuildValuesUpdateForPlayerWithMask(&udata, objMask.GetChangesMask(), unitMask.GetChangesMask(), this);
@@ -25384,7 +25409,7 @@ void Player::UpdateVisibleObjectInteractions(bool allUnits, bool onlySpellClicks
{
UF::ObjectData::Base objMask;
UF::UnitData::Base unitMask;
- unitMask.MarkChanged(&UF::UnitData::NpcFlags, 0); // NpcFlags[0] has UNIT_NPC_FLAG_SPELLCLICK
+ unitMask.MarkChanged(&UF::UnitData::NpcFlags); // NpcFlags has UNIT_NPC_FLAG_SPELLCLICK
creature->BuildValuesUpdateForPlayerWithMask(&udata, objMask.GetChangesMask(), unitMask.GetChangesMask(), this);
break;
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index b3d3d9c7466..f83e54de2bc 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -146,7 +146,7 @@ enum PlayerSkillsConstants
enum PlayerDataFlagConstants
{
- PLAYER_EXPLORED_ZONES_BITS = UF::size_of_value_type<decltype(UF::ActivePlayerData::DataFlags)::value_type>() * 8,
+ PLAYER_EXPLORED_ZONES_BITS = UF::size_of_value_type<decltype(UF::BitVectors::Values)::value_type>() * 8,
PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX = 1,
PLAYER_DATA_FLAG_CHARACTER_DATA_INDEX = 2,
@@ -638,7 +638,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 = 227,
+ PLAYER_SLOT_END = 232,
PLAYER_SLOTS_COUNT = (PLAYER_SLOT_END - PLAYER_SLOT_START)
};
@@ -761,6 +761,12 @@ enum EquipableSpellSlots
EQUIPABLE_SPELL_WEAPON_SLOT4 = 226,
};
+enum AccountBankBagSlots
+{
+ ACCOUNT_BANK_SLOT_BAG_START = 227,
+ ACCOUNT_BANK_SLOT_BAG_END = 232
+};
+
struct ItemPosCount
{
ItemPosCount(uint16 _pos, uint32 _count) : pos(_pos), count(_count) { }
@@ -811,11 +817,10 @@ enum NewWorldReason
enum InstanceResetWarningType
{
- RAID_INSTANCE_WARNING_HOURS = 1, // WARNING! %s is scheduled to reset in %d hour(s).
- RAID_INSTANCE_WARNING_MIN = 2, // WARNING! %s is scheduled to reset in %d minute(s)!
- RAID_INSTANCE_WARNING_MIN_SOON = 3, // WARNING! %s is scheduled to reset in %d minute(s). Please exit the zone or you will be returned to your bind location!
- RAID_INSTANCE_WELCOME = 4, // Welcome to %s. This raid instance is scheduled to reset in %s.
- RAID_INSTANCE_EXPIRED = 5
+ RAID_INSTANCE_WELCOME = 1, // Welcome to %s. Instance locks are scheduled to expire in %s.
+ RAID_INSTANCE_EXPIRED = 2, // Your instance lock for %s has expired.
+ RAID_INSTANCE_WELCOME_DAILY = 3, // Welcome to %s. The daily reset is scheduled to occur in %s and will reset this instance.
+ RAID_INSTANCE_WARNING_TIME = 4, // any GlobalStrings tag that has 1 formattable argument, like DELVES_INSTANCE_RESET_WARNING
};
// PLAYER_FIELD_ARENA_TEAM_INFO_1_1 offsets
@@ -2294,6 +2299,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
TeleportLocation& GetTeleportDest() { return m_teleport_dest; }
uint32 GetTeleportOptions() const { return m_teleport_options; }
+ int32 GetNewWorldCounter() const { return m_newWorldCounter; }
bool IsBeingTeleported() const { return IsBeingTeleportedNear() || IsBeingTeleportedFar(); }
bool IsBeingTeleportedNear() const { return mSemaphoreTeleport_Near; }
bool IsBeingTeleportedFar() const { return mSemaphoreTeleport_Far; }
@@ -3251,6 +3257,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
// Current teleport data
TeleportLocation m_teleport_dest;
TeleportToOptions m_teleport_options;
+ int32 m_newWorldCounter;
bool mSemaphoreTeleport_Near;
bool mSemaphoreTeleport_Far;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index cc2d0f96875..6c0d491b8ea 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -8885,9 +8885,10 @@ void Unit::SetInteractionAllowedInCombat(bool interactionAllowed)
void Unit::UpdateNearbyPlayersInteractions()
{
- for (uint32 i = 0; i < m_unitData->NpcFlags.size(); ++i)
- if (m_unitData->NpcFlags[i])
- ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, i));
+ if (m_unitData->NpcFlags)
+ ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags));
+ if (m_unitData->NpcFlags2)
+ ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2));
}
//======================================================================
@@ -13176,6 +13177,40 @@ bool Unit::SetCollision(bool disable)
return true;
}
+bool Unit::SetEnableFullSpeedTurning(bool enable)
+{
+ if (GetTypeId() != TYPEID_PLAYER)
+ return false;
+
+ if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING))
+ return false;
+
+ if (enable)
+ AddExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING);
+ else
+ RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING);
+
+ static constexpr OpcodeServer fullSpeedTurningOpcodeTable[2] =
+ {
+ SMSG_MOVE_DISABLE_FULL_SPEED_TURNING,
+ SMSG_MOVE_ENABLE_FULL_SPEED_TURNING
+ };
+
+ if (Player* playerMover = Unit::ToPlayer(GetUnitBeingMoved()))
+ {
+ WorldPackets::Movement::MoveSetFlag packet(fullSpeedTurningOpcodeTable[enable]);
+ packet.MoverGUID = GetGUID();
+ packet.SequenceIndex = m_movementCounter++;
+ playerMover->SendDirectMessage(packet.Write());
+
+ WorldPackets::Movement::MoveUpdate moveUpdate;
+ moveUpdate.Status = &m_movementInfo;
+ SendMessageToSet(moveUpdate.Write(), playerMover);
+ }
+
+ return true;
+}
+
bool Unit::SetCanTransitionBetweenSwimAndFly(bool enable)
{
if (GetTypeId() != TYPEID_PLAYER)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 41d48b70cdf..3adc53fcaaa 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -983,17 +983,17 @@ class TC_GAME_API Unit : public WorldObject
MeleeHitOutcome RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType) const;
- NPCFlags GetNpcFlags() const { return NPCFlags(m_unitData->NpcFlags[0]); }
- bool HasNpcFlag(NPCFlags flags) const { return (m_unitData->NpcFlags[0] & flags) != 0; }
- void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); }
- void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); }
- void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); }
-
- NPCFlags2 GetNpcFlags2() const { return NPCFlags2(m_unitData->NpcFlags[1]); }
- bool HasNpcFlag2(NPCFlags2 flags) const { return (m_unitData->NpcFlags[1] & flags) != 0; }
- void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); }
- void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); }
- void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); }
+ NPCFlags GetNpcFlags() const { return NPCFlags(*m_unitData->NpcFlags); }
+ bool HasNpcFlag(NPCFlags flags) const { return (m_unitData->NpcFlags & flags) != 0; }
+ void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); }
+ void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); }
+ void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); }
+
+ NPCFlags2 GetNpcFlags2() const { return NPCFlags2(*m_unitData->NpcFlags2); }
+ bool HasNpcFlag2(NPCFlags2 flags) const { return (m_unitData->NpcFlags2 & flags) != 0; }
+ void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); }
+ void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); }
+ void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); }
bool IsVendor() const { return HasNpcFlag(UNIT_NPC_FLAG_VENDOR); }
bool IsTrainer() const { return HasNpcFlag(UNIT_NPC_FLAG_TRAINER); }
@@ -1149,6 +1149,7 @@ class TC_GAME_API Unit : public WorldObject
bool SetFeatherFall(bool enable);
bool SetHover(bool enable, bool updateAnimTier = true);
bool SetCollision(bool disable);
+ bool SetEnableFullSpeedTurning(bool enable);
bool SetCanTransitionBetweenSwimAndFly(bool enable);
bool SetCanTurnWhileFalling(bool enable);
bool SetCanDoubleJump(bool enable);
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index f19ef29ada0..432a998f9b6 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -296,7 +296,7 @@ enum NPCFlags : uint32
UNIT_NPC_FLAG_NONE = 0x00000000,
UNIT_NPC_FLAG_GOSSIP = 0x00000001, // TITLE has gossip menu DESCRIPTION 100%
UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // TITLE is quest giver DESCRIPTION 100%
- UNIT_NPC_FLAG_UNK1 = 0x00000004,
+ UNIT_NPC_FLAG_ACCOUNT_BANKER = 0x00000004, // TITLE is account banker
UNIT_NPC_FLAG_UNK2 = 0x00000008,
UNIT_NPC_FLAG_TRAINER = 0x00000010, // TITLE is trainer DESCRIPTION 100%
UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // TITLE is class trainer DESCRIPTION 100%
diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
index af0544234ff..a5fa869ebc2 100644
--- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
+++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
@@ -421,7 +421,7 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags>::ToString(NPCFlags value)
case UNIT_NPC_FLAG_NONE: return { "UNIT_NPC_FLAG_NONE", "UNIT_NPC_FLAG_NONE", "" };
case UNIT_NPC_FLAG_GOSSIP: return { "UNIT_NPC_FLAG_GOSSIP", "has gossip menu", "100%" };
case UNIT_NPC_FLAG_QUESTGIVER: return { "UNIT_NPC_FLAG_QUESTGIVER", "is quest giver", "100%" };
- case UNIT_NPC_FLAG_UNK1: return { "UNIT_NPC_FLAG_UNK1", "UNIT_NPC_FLAG_UNK1", "" };
+ case UNIT_NPC_FLAG_ACCOUNT_BANKER: return { "UNIT_NPC_FLAG_ACCOUNT_BANKER", "UNIT_NPC_FLAG_ACCOUNT_BANKER", "" };
case UNIT_NPC_FLAG_UNK2: return { "UNIT_NPC_FLAG_UNK2", "UNIT_NPC_FLAG_UNK2", "" };
case UNIT_NPC_FLAG_TRAINER: return { "UNIT_NPC_FLAG_TRAINER", "is trainer", "100%" };
case UNIT_NPC_FLAG_TRAINER_CLASS: return { "UNIT_NPC_FLAG_TRAINER_CLASS", "is class trainer", "100%" };
@@ -466,7 +466,7 @@ TC_API_EXPORT NPCFlags EnumUtils<NPCFlags>::FromIndex(size_t index)
case 0: return UNIT_NPC_FLAG_NONE;
case 1: return UNIT_NPC_FLAG_GOSSIP;
case 2: return UNIT_NPC_FLAG_QUESTGIVER;
- case 3: return UNIT_NPC_FLAG_UNK1;
+ case 3: return UNIT_NPC_FLAG_ACCOUNT_BANKER;
case 4: return UNIT_NPC_FLAG_UNK2;
case 5: return UNIT_NPC_FLAG_TRAINER;
case 6: return UNIT_NPC_FLAG_TRAINER_CLASS;
@@ -508,7 +508,7 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags>::ToIndex(NPCFlags value)
case UNIT_NPC_FLAG_NONE: return 0;
case UNIT_NPC_FLAG_GOSSIP: return 1;
case UNIT_NPC_FLAG_QUESTGIVER: return 2;
- case UNIT_NPC_FLAG_UNK1: return 3;
+ case UNIT_NPC_FLAG_ACCOUNT_BANKER: return 3;
case UNIT_NPC_FLAG_UNK2: return 4;
case UNIT_NPC_FLAG_TRAINER: return 5;
case UNIT_NPC_FLAG_TRAINER_CLASS: return 6;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 8b7411634f9..673a1678fe0 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -4535,7 +4535,7 @@ void ObjectMgr::LoadQuests()
//90 91 92 93 94 95 96 97
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, "
//98 99 100 101 102 103 104 105 106
- "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, QuestSessionBonus, "
+ "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, ResetByScheduler, Expansion, ManagedWorldStateID, QuestSessionBonus, "
//107 108 109 110 111 112 113 114 115
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog "
"FROM quest_template");
@@ -4615,7 +4615,10 @@ void ObjectMgr::LoadQuests()
{ "QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale", "quest_offer_reward_conditional", "ORDER BY OrderIndex", "conditional reward", &Quest::LoadConditionalConditionalOfferRewardText },
// 0 1 2 3 4
- { "QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale", "quest_completion_log_conditional", "ORDER BY OrderIndex", "conditional completion log", &Quest::LoadConditionalConditionalQuestCompletionLog }
+ { "QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale", "quest_completion_log_conditional", "ORDER BY OrderIndex", "conditional completion log", &Quest::LoadConditionalConditionalQuestCompletionLog },
+
+ // 0 1
+ { "QuestID, TreasurePickerID", "quest_treasure_pickers", "ORDER BY OrderIndex", "treasure pickers", &Quest::LoadTreasurePickers }
};
for (QuestLoaderHelper const& loader : QuestLoaderHelpers)
@@ -9769,8 +9772,8 @@ void ObjectMgr::LoadGossipMenuAddon()
_gossipMenuAddonStore.clear();
- // 0 1
- QueryResult result = WorldDatabase.Query("SELECT MenuID, FriendshipFactionID FROM gossip_menu_addon");
+ // 0 1 2
+ QueryResult result = WorldDatabase.Query("SELECT MenuID, FriendshipFactionID, LfgDungeonsID FROM gossip_menu_addon");
if (!result)
{
@@ -9785,20 +9788,30 @@ void ObjectMgr::LoadGossipMenuAddon()
uint32 menuID = fields[0].GetUInt32();
GossipMenuAddon& addon = _gossipMenuAddonStore[menuID];
addon.FriendshipFactionID = fields[1].GetInt32();
+ addon.LfgDungeonsID = fields[2].GetInt32();
- if (FactionEntry const* faction = sFactionStore.LookupEntry(addon.FriendshipFactionID))
+ if (addon.FriendshipFactionID)
{
- if (!sFriendshipReputationStore.LookupEntry(faction->FriendshipRepID))
+ if (FactionEntry const* faction = sFactionStore.LookupEntry(addon.FriendshipFactionID))
+ {
+ if (!sFriendshipReputationStore.LookupEntry(faction->FriendshipRepID))
+ {
+ TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using FriendshipFactionID {} referencing non-existing FriendshipRepID {}",
+ menuID, addon.FriendshipFactionID, faction->FriendshipRepID);
+ addon.FriendshipFactionID = 0;
+ }
+ }
+ else
{
- TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using FriendshipFactionID {} referencing non-existing FriendshipRepID {}",
- menuID, addon.FriendshipFactionID, faction->FriendshipRepID);
+ TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using non-existing FriendshipFactionID {}", menuID, addon.FriendshipFactionID);
addon.FriendshipFactionID = 0;
}
}
- else
+
+ if (addon.LfgDungeonsID && sLFGDungeonsStore.LookupEntry(addon.LfgDungeonsID))
{
- TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using non-existing FriendshipFactionID {}", menuID, addon.FriendshipFactionID);
- addon.FriendshipFactionID = 0;
+ TC_LOG_ERROR("sql.sql", "Table gossip_menu_addon: ID {} is using non-existing LfgDungeonsID {}", menuID, addon.LfgDungeonsID);
+ addon.LfgDungeonsID = 0;
}
} while (result->NextRow());
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index adc1dde5dc8..9a0423daa8c 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -779,6 +779,7 @@ struct GossipMenus
struct GossipMenuAddon
{
int32 FriendshipFactionID;
+ int32 LfgDungeonsID;
};
typedef std::multimap<uint32, GossipMenus> GossipMenusContainer;
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 289c4dc39ea..14d94305ba6 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -198,6 +198,7 @@ bool Group::Create(Player* leader)
stmt->setUInt32(index++, uint8(m_raidDifficulty));
stmt->setUInt32(index++, uint8(m_legacyRaidDifficulty));
stmt->setUInt64(index++, m_masterLooterGuid.GetCounter());
+ stmt->setInt8(index++, int8(m_pingRestriction));
CharacterDatabase.Execute(stmt);
@@ -243,6 +244,8 @@ void Group::LoadGroupFromDB(Field* fields)
m_masterLooterGuid = ObjectGuid::Create<HighGuid::Player>(fields[16].GetUInt64());
+ m_pingRestriction = RestrictPingsTo(fields[18].GetInt8());
+
if (m_groupFlags & GROUP_FLAG_LFG)
sLFGMgr->_LoadFromDB(fields, GetGUID());
}
@@ -867,6 +870,8 @@ void Group::SendUpdateToPlayer(ObjectGuid playerGUID, MemberSlot const* slot) co
partyUpdate.SequenceNum = player->NextGroupUpdateSequenceNumber(m_groupCategory);
+ partyUpdate.PingRestriction = m_pingRestriction;
+
partyUpdate.MyIndex = -1;
uint8 index = 0;
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr, ++index)
@@ -1899,23 +1904,20 @@ void Group::SetEveryoneIsAssistant(bool apply)
SendUpdate();
}
-bool Group::IsRestrictPingsToAssistants() const
+RestrictPingsTo Group::GetRestrictPings() const
{
- return (m_groupFlags & GROUP_FLAG_RESTRICT_PINGS) != 0;
+ return m_pingRestriction;
}
-void Group::SetRestrictPingsToAssistants(bool restrictPingsToAssistants)
+void Group::SetRestrictPingsTo(RestrictPingsTo restrictTo)
{
- if (restrictPingsToAssistants)
- m_groupFlags = GroupFlags(m_groupFlags | GROUP_FLAG_RESTRICT_PINGS);
- else
- m_groupFlags = GroupFlags(m_groupFlags & ~GROUP_FLAG_RESTRICT_PINGS);
+ m_pingRestriction = restrictTo;
if (!isBGGroup() && !isBFGroup())
{
- CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_TYPE);
+ CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GROUP_PING_RESTRICTION);
- stmt->setUInt16(0, m_groupFlags);
+ stmt->setInt8(0, int8(m_pingRestriction));
stmt->setUInt32(1, m_dbStoreId);
CharacterDatabase.Execute(stmt);
diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h
index 8ba2f36e3c3..98f22523d2f 100644
--- a/src/server/game/Groups/Group.h
+++ b/src/server/game/Groups/Group.h
@@ -103,7 +103,7 @@ enum GroupFlags : uint16
GROUP_FLAG_EVERYONE_ASSISTANT = 0x040, // Script_IsEveryoneAssistant()
GROUP_FLAG_GUILD_GROUP = 0x100,
GROUP_FLAG_CROSS_FACTION = 0x200,
- GROUP_FLAG_RESTRICT_PINGS = 0x400, // C_PartyInfo::Script_GetRestrictPings()
+ GROUP_FLAG_RESTRICT_PINGS = 0x400, // deprecated
GROUP_MASK_BGRAID = GROUP_FLAG_FAKE_RAID | GROUP_FLAG_RAID,
};
@@ -191,6 +191,14 @@ enum class PingSubjectType : uint8
Max
};
+enum class RestrictPingsTo : int32
+{
+ None = 0,
+ Lead = 1,
+ Assist = 2,
+ TankHealer = 3,
+};
+
/** request member stats checken **/
/// @todo uninvite people that not accepted invite
class TC_GAME_API Group
@@ -260,8 +268,8 @@ class TC_GAME_API Group
void SetLfgRoles(ObjectGuid guid, uint8 roles);
uint8 GetLfgRoles(ObjectGuid guid) const;
void SetEveryoneIsAssistant(bool apply);
- bool IsRestrictPingsToAssistants() const;
- void SetRestrictPingsToAssistants(bool restrictPingsToAssistants);
+ RestrictPingsTo GetRestrictPings() const;
+ void SetRestrictPingsTo(RestrictPingsTo restrictTo);
// Update
void UpdateReadyCheck(uint32 diff);
@@ -451,6 +459,8 @@ class TC_GAME_API Group
std::array<std::unique_ptr<CountdownInfo>, 3> m_countdowns;
+ RestrictPingsTo m_pingRestriction;
+
struct NoopGroupDeleter { void operator()(Group*) const { /*noop - not managed*/ } };
Trinity::unique_trackable_ptr<Group> m_scriptRef;
};
diff --git a/src/server/game/Groups/GroupMgr.cpp b/src/server/game/Groups/GroupMgr.cpp
index d36e7f64a6c..2e4d018c0c7 100644
--- a/src/server/game/Groups/GroupMgr.cpp
+++ b/src/server/game/Groups/GroupMgr.cpp
@@ -140,8 +140,8 @@ void GroupMgr::LoadGroups()
// 0 1 2 3 4 5 6 7 8 9
QueryResult result = CharacterDatabase.Query("SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6"
- // 10 11 12 13 14 15 16 17 18 19
- ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC");
+ // 10 11 12 13 14 15 16 17 18 19 20
+ ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, g.pingRestriction, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC");
if (!result)
{
TC_LOG_INFO("server.loading", ">> Loaded 0 group definitions. DB table `groups` is empty!");
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 9e104a051d1..ca914c06eb0 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -2479,7 +2479,6 @@ void Guild::SendEventPresenceChanged(WorldSession* session, bool loggedOn, bool
eventPacket.Name = player->GetName();
eventPacket.VirtualRealmAddress = GetVirtualRealmAddress();
eventPacket.LoggedOn = loggedOn;
- eventPacket.Mobile = false;
if (broadcast)
BroadcastPacket(eventPacket.Write());
diff --git a/src/server/game/Handlers/BankHandler.cpp b/src/server/game/Handlers/BankHandler.cpp
index 5e515cf623a..4e3c065c17c 100644
--- a/src/server/game/Handlers/BankHandler.cpp
+++ b/src/server/game/Handlers/BankHandler.cpp
@@ -15,14 +15,15 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include "WorldSession.h"
#include "BankPackets.h"
-#include "Item.h"
+#include "Creature.h"
#include "DB2Stores.h"
#include "GossipDef.h"
+#include "Item.h"
#include "Log.h"
#include "NPCPackets.h"
#include "Player.h"
-#include "WorldSession.h"
void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& packet)
{
@@ -34,6 +35,9 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa
return;
}
+ if (packet.BankType != BankType::Character)
+ return;
+
Item* item = _player->GetItemByPos(packet.Bag, packet.Slot);
if (!item)
return;
@@ -57,22 +61,43 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa
_player->BankItem(dest, item, true);
}
-void WorldSession::HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet)
+void WorldSession::HandleBankerActivateOpcode(WorldPackets::Bank::BankerActivate const& bankerActivate)
{
- Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE);
+ if (bankerActivate.InteractionType != PlayerInteractionType::Banker)
+ return;
+
+ Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(bankerActivate.Banker, UNIT_NPC_FLAG_ACCOUNT_BANKER | UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE);
if (!unit)
{
- TC_LOG_ERROR("network", "WORLD: HandleBankerActivateOpcode - {} not found or you can not interact with him.", packet.Unit.ToString());
+ TC_LOG_ERROR("network", "WORLD: HandleBankerActivateOpcode - {} not found or you can not interact with him.", bankerActivate.Banker);
return;
}
+ switch (bankerActivate.InteractionType)
+ {
+ case PlayerInteractionType::Banker:
+ if (!unit->HasNpcFlag(UNIT_NPC_FLAG_ACCOUNT_BANKER) || !unit->HasNpcFlag(UNIT_NPC_FLAG_BANKER))
+ return;
+ break;
+ case PlayerInteractionType::CharacterBanker:
+ if (!unit->HasNpcFlag(UNIT_NPC_FLAG_BANKER))
+ return;
+ break;
+ case PlayerInteractionType::AccountBanker:
+ if (!unit->HasNpcFlag(UNIT_NPC_FLAG_ACCOUNT_BANKER))
+ return;
+ break;
+ default:
+ break;
+ }
+
// remove fake death
if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))
GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH);
// set currentBankerGUID for other bank action
- SendShowBank(packet.Unit);
+ SendShowBank(bankerActivate.Banker, bankerActivate.InteractionType);
}
void WorldSession::HandleAutoStoreBankItemOpcode(WorldPackets::Bank::AutoStoreBankItem& packet)
@@ -297,13 +322,13 @@ void WorldSession::HandleAutoStoreBankReagentOpcode(WorldPackets::Bank::AutoStor
}
}
-void WorldSession::SendShowBank(ObjectGuid guid)
+void WorldSession::SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType)
{
_player->PlayerTalkClass->GetInteractionData().Reset();
_player->PlayerTalkClass->GetInteractionData().SourceGuid = guid;
WorldPackets::NPC::NPCInteractionOpenResult npcInteraction;
npcInteraction.Npc = guid;
- npcInteraction.InteractionType = PlayerInteractionType::Banker;
+ npcInteraction.InteractionType = interactionType;
npcInteraction.Success = true;
SendPacket(npcInteraction.Write());
}
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index e876cada3fd..d2bc7f3887b 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -416,7 +416,7 @@ void WorldSession::HandleCharEnum(CharacterDatabaseQueryHolder const& holder)
{
charEnum.Characters.emplace_back(result->Fetch());
- WorldPackets::Character::EnumCharactersResult::CharacterInfo& charInfo = charEnum.Characters.back();
+ WorldPackets::Character::EnumCharactersResult::CharacterInfoBasic& charInfo = charEnum.Characters.back().Basic;
if (std::vector<UF::ChrCustomizationChoice>* customizationsForChar = Trinity::Containers::MapGetValuePtr(customizations, charInfo.Guid.GetCounter()))
charInfo.Customizations = std::move(*customizationsForChar);
diff --git a/src/server/game/Handlers/GroupHandler.cpp b/src/server/game/Handlers/GroupHandler.cpp
index f9ad1daa6f1..a1cc44531c2 100644
--- a/src/server/game/Handlers/GroupHandler.cpp
+++ b/src/server/game/Handlers/GroupHandler.cpp
@@ -20,6 +20,7 @@
#include "DatabaseEnv.h"
#include "Group.h"
#include "GroupMgr.h"
+#include "LFG.h"
#include "Log.h"
#include "Loot.h"
#include "MiscPackets.h"
@@ -664,8 +665,24 @@ bool CanSendPing(Player const& player, PingSubjectType type, Group const*& group
if (!group)
return false;
- if (group->IsRestrictPingsToAssistants() && !group->IsLeader(player.GetGUID()) && !group->IsAssistant(player.GetGUID()))
- return false;
+ if (group->IsLeader(player.GetGUID()))
+ return true;
+
+ switch (group->GetRestrictPings())
+ {
+ case RestrictPingsTo::None:
+ return true;
+ case RestrictPingsTo::Lead:
+ return false;
+ case RestrictPingsTo::Assist:
+ if (!group->IsAssistant(player.GetGUID()))
+ return false;
+ break;
+ case RestrictPingsTo::TankHealer:
+ if (!(group->GetLfgRoles(player.GetGUID()) & (lfg::PLAYER_ROLE_TANK | lfg::PLAYER_ROLE_HEALER)))
+ return false;
+ break;
+ }
return true;
}
@@ -680,7 +697,7 @@ void WorldSession::HandleSetRestrictPingsToAssistants(WorldPackets::Party::SetRe
if (!group->IsLeader(GetPlayer()->GetGUID()))
return;
- group->SetRestrictPingsToAssistants(setRestrictPingsToAssistants.RestrictPingsToAssistants);
+ group->SetRestrictPingsTo(setRestrictPingsToAssistants.RestrictTo);
}
void WorldSession::HandleSendPingUnit(WorldPackets::Party::SendPingUnit const& pingUnit)
@@ -725,6 +742,7 @@ void WorldSession::HandleSendPingWorldPoint(WorldPackets::Party::SendPingWorldPo
broadcastPingWorldPoint.Point = pingWorldPoint.Point;
broadcastPingWorldPoint.Type = pingWorldPoint.Type;
broadcastPingWorldPoint.PinFrameID = pingWorldPoint.PinFrameID;
+ broadcastPingWorldPoint.Transport = pingWorldPoint.Transport;
broadcastPingWorldPoint.Write();
for (GroupReference const* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index e166d69ac48..a91a069b6fa 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -1220,6 +1220,13 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC
_player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
}
+void WorldSession::HandleSortAccountBankBags(WorldPackets::Item::SortAccountBankBags& /*sortAccountBankBags*/)
+{
+ // TODO: Implement sorting
+ // Placeholder to prevent completely locking out bags clientside
+ SendPacket(WorldPackets::Item::BagCleanupFinished().Write());
+}
+
void WorldSession::HandleSortBags(WorldPackets::Item::SortBags& /*sortBags*/)
{
// TODO: Implement sorting
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
index 97f9cda44c8..f37958be579 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -265,6 +265,7 @@ void WorldSession::HandleSuspendTokenResponse(WorldPackets::Movement::SuspendTok
packet.MapID = loc.Location.GetMapId();
packet.Loc.Pos = loc.Location;
packet.Reason = !_player->IsBeingTeleportedSeamlessly() ? NEW_WORLD_NORMAL : NEW_WORLD_SEAMLESS;
+ packet.Counter = _player->GetNewWorldCounter();
SendPacket(packet.Write());
if (_player->IsBeingTeleportedSeamlessly())
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 9047a9c83ac..5d085cf0e95 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -1824,7 +1824,8 @@ enum SpellCastResult : int32
SPELL_FAILED_CANT_FLY_HERE = 318,
SPELL_FAILED_DRAGONRIDING_RIDING_REQUIREMENT = 319,
SPELL_FAILED_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 320,
- SPELL_FAILED_UNKNOWN = 321,
+ SPELL_FAILED_ITEM_CREATION_DISABLED_FOR_EVENT = 321,
+ SPELL_FAILED_UNKNOWN = 322,
// ok cast value - here in case a future version removes SPELL_FAILED_SUCCESS and we need to use a custom value (not sent to client either way)
SPELL_CAST_OK = SPELL_FAILED_SUCCESS // SKIP
@@ -2466,8 +2467,48 @@ enum SpellCustomErrors
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_THIS_PLAYER_IS_NOT_OPPOSITE_FACTION = 1002, // This player is not of the opposite faction.
+ SPELL_CUSTOM_ERROR_THIS_PLAYER_ALREADY_HAS_THIS_MOUNT = 1003, // This player already has this mount.
+ SPELL_CUSTOM_ERROR_YOUR_TARGET_IS_IN_WAR_MODE = 1004, // Your target is in War Mode.
+ SPELL_CUSTOM_ERROR_COOLDOWN_RESET = 1005, // Cooldown Reset
+ SPELL_CUSTOM_ERROR_SOIL_NUTRIENTS_MUST_REPLENISH = 1006, // The nutrients of this soil must replenish before further growth.
+ SPELL_CUSTOM_ERROR_TARGET_ALREADY_HAD_SOME_FEATHERS_PLUCKED = 1007, // The target has already had some feathers plucked. It would be rude to take more.
+ SPELL_CUSTOM_ERROR_THIS_CREATURE_HAS_ALREADY_BEEN_ATTUNED_WITH = 1008, // This creature has already been attuned with recently.
+ SPELL_CUSTOM_ERROR_YOU_ALREADY_HAVE_SOME_MULCH_PREPARED = 1009, // You already have some mulch prepared. Use your current mulch first.
+ SPELL_CUSTOM_ERROR_YOU_DONT_KNOW_HOW_TO_GATHER_THIS = 1010, // You don't know how to gather this.
+ SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_ANY_ITEMS_OF_THIS_TYPE = 1011, // You don't have any items of this type.
+ SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_ANY_RADIANT_REMNANTS = 1012, // You don't have any Radiant Remnants.
+ SPELL_CUSTOM_ERROR_TARGETS_RING_IS_ALREADY_BOUND_TO_ANOTHER_PLAYER = 1013, // Your target's ring is already bound to another player.
+ SPELL_CUSTOM_ERROR_TARGET_IS_NOT_WEARING_THIS_RING = 1014, // Your target is not also wearing this ring.
+ SPELL_CUSTOM_ERROR_CAN_ONLY_BE_USED_ON_SOCKETABLE_PVP_TWW_ITEMS = 1015, // Can only be used on socket eligible PvP items from the War Within expansion.
+ SPELL_CUSTOM_ERROR_HARVESTBOTS_ALREADY_ACTIVE = 1016, // Harvestbots already active.
+ SPELL_CUSTOM_ERROR_AIRSHIP_DAUNTLESS_IS_ALREADY_ACTIVE = 1017, // The Airship Dauntless is already active.
+ SPELL_CUSTOM_ERROR_CANNOT_SWAP_SPELLS_ON_COOLDOWN_IN_COMBAT = 1026, // You cannot swap spells on cooldown while in combat.
+ SPELL_CUSTOM_ERROR_MUST_EQUIP_CLOAK_OF_INFINITE_POTENTIAL = 1027, // You must first equip the Cloak of Infinite Potential.
+ SPELL_CUSTOM_ERROR_INSUFFICIENT_BRONZE = 1028, // You have insufficient Bronze to make this trade.
+ SPELL_CUSTOM_ERROR_REQUIRES_SKYRIDING = 1029, // Requires Skyriding
+ SPELL_CUSTOM_ERROR_YOU_ALREADY_OVERLOADED_THIS_GATHERING_NODE = 1030, // You have already overloaded this gathering node.
+ SPELL_CUSTOM_ERROR_YOU_DONT_KNOW_HOW_TO_OVERLOAD_THIS_NODE = 1031, // You do not know how to Overload this gathering node.
+ SPELL_CUSTOM_ERROR_TIMERUNNERS_CANNOT_TELEPORT_OUT_OF_PANDARIA = 1032, // Timerunners cannot teleport outside of Pandaria.
+ SPELL_CUSTOM_ERROR_SPECIALIZE_FURTHER_FOR_THESE_NOTES = 1033, // Specialize further or improve your hasty handwriting to make sense of these notes.
+ SPELL_CUSTOM_ERROR_THERE_IS_NOTHING_LEFT_TO_INVENT = 1034, // There is nothing left to invent and you cannot be convinced otherwise.
+ SPELL_CUSTOM_ERROR_PLAYER_IN_PARTY_DOESNT_HAVE_THIS_TIER_UNLOCKED = 1035, // A player in your party does not have this tier unlocked
+ SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_ANY_RADIANT_ECHOES = 1036, // You don't have any Radiant Echoes.
+ SPELL_CUSTOM_ERROR_REQUIRES_TWW_PATHFINDER_UNLOCKED = 1037, // Requires The War Within Pathfinder Unlocked to use in this area.
+ SPELL_CUSTOM_ERROR_CAN_ONLY_BE_USED_WHILE_IN_COMBAT = 1039, // Can only be used while in combat.
+ SPELL_CUSTOM_ERROR_NOT_HIGH_ENOUGH_LEVEL_TO_ENTER_A_DELVE = 1040, // You are not high enough level to enter a Delve.
+ SPELL_CUSTOM_ERROR_WONDROUS_WISDOMBALL_IS_NONRESPONSIVE = 1041, // For some reason the Wondrous Wisdomball is nonresponsive.
+ SPELL_CUSTOM_ERROR_YOU_ALREADY_HAVE_THIS_CURIO_IN_YOUR_COLLECTION = 1042, // You already have this curio in your collection.
+ SPELL_CUSTOM_ERROR_ALREADY_HAVE_IDENTIFIED_PROTOTYPE = 1043, // You must choose what to do with your current prototype before identifying new ones.
+ SPELL_CUSTOM_ERROR_YOU_ALREADY_USED_KHAZ_ALGAR_CONTRACT = 1044, // You have already used a Khaz Algar Contract this week.
+ SPELL_CUSTOM_ERROR_YOU_ALREADY_REVEALED_ALL_TODAY_PACT_LOCATIONS = 1051, // You have revealed or completed all of today's Pact locations.
+ SPELL_CUSTOM_ERROR_TIMERUNNERS_CANNOT_CAST_THIS_SPELL = 1053, // Timerunners cannot cast this spell.
+ SPELL_CUSTOM_ERROR_THIS_EMBLEM_HAS_NO_MAGIC_STORED = 2001, // The emblem has no magic stored.
SPELL_CUSTOM_ERROR_YOU_MUST_BE_IN_VISAGE_FORM = 2222, // You must be in visage form to do this.
+ SPELL_CUSTOM_ERROR_A_TRIAL_IS_BEING_UNDERGONE_NEARBY = 2223, // A Trial is already being undergone nearby.
+ SPELL_CUSTOM_ERROR_YOU_CANNOT_USE_VANTUS_RUNE_IN_STORY_MODE = 2224, // You cannot use a Vantus Rune in Story Mode.
SPELL_CUSTOM_ERROR_TOO_CLOSE_TO_ANOTHER_MOLTEN_RITUAL = 2424, // You can't begin a molten ritual this close to another one.
+ SPELL_CUSTOM_ERROR_EARTHEN_CANNOT_CONSUME_REGULAR_FOOD_OR_DRINK = 2425, // Earthen cannot consume traditional food or drink.
};
enum StealthType
@@ -7033,1107 +7074,1134 @@ enum class GameError : uint32
ERR_ONLY_ONE_QUIVER = 35,
ERR_NO_BANK_SLOT = 36,
ERR_NO_BANK_HERE = 37,
- ERR_ITEM_LOCKED = 38,
- ERR_2HANDED_EQUIPPED = 39,
- ERR_VENDOR_NOT_INTERESTED = 40,
- ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE = 41,
- ERR_VENDOR_HATES_YOU = 42,
- ERR_VENDOR_SOLD_OUT = 43,
- ERR_VENDOR_TOO_FAR = 44,
- ERR_VENDOR_DOESNT_BUY = 45,
- ERR_NOT_ENOUGH_MONEY = 46,
- ERR_RECEIVE_ITEM_S = 47,
- ERR_DROP_BOUND_ITEM = 48,
- ERR_TRADE_BOUND_ITEM = 49,
- ERR_TRADE_QUEST_ITEM = 50,
- ERR_TRADE_TEMP_ENCHANT_BOUND = 51,
- ERR_TRADE_GROUND_ITEM = 52,
- ERR_TRADE_BAG = 53,
- ERR_TRADE_FACTION_SPECIFIC = 54,
- ERR_SPELL_FAILED_S = 55,
- ERR_ITEM_COOLDOWN = 56,
- ERR_POTION_COOLDOWN = 57,
- ERR_FOOD_COOLDOWN = 58,
- ERR_SPELL_COOLDOWN = 59,
- ERR_ABILITY_COOLDOWN = 60,
- ERR_SPELL_ALREADY_KNOWN_S = 61,
- ERR_PET_SPELL_ALREADY_KNOWN_S = 62,
- ERR_PROFICIENCY_GAINED_S = 63,
- ERR_SKILL_GAINED_S = 64,
- ERR_SKILL_UP_SI = 65,
- ERR_LEARN_SPELL_S = 66,
- ERR_LEARN_ABILITY_S = 67,
- ERR_LEARN_PASSIVE_S = 68,
- ERR_LEARN_RECIPE_S = 69,
- ERR_PROFESSIONS_RECIPE_DISCOVERY_S = 70,
- ERR_LEARN_COMPANION_S = 71,
- ERR_LEARN_MOUNT_S = 72,
- ERR_LEARN_TOY_S = 73,
- ERR_LEARN_HEIRLOOM_S = 74,
- ERR_LEARN_TRANSMOG_S = 75,
- ERR_COMPLETED_TRANSMOG_SET_S = 76,
- ERR_APPEARANCE_ALREADY_LEARNED = 77,
- ERR_REVOKE_TRANSMOG_S = 78,
- ERR_INVITE_PLAYER_S = 79,
- ERR_SUGGEST_INVITE_PLAYER_S = 80,
- ERR_INFORM_SUGGEST_INVITE_S = 81,
- ERR_INFORM_SUGGEST_INVITE_SS = 82,
- ERR_REQUEST_JOIN_PLAYER_S = 83,
- ERR_INVITE_SELF = 84,
- ERR_INVITED_TO_GROUP_SS = 85,
- ERR_INVITED_ALREADY_IN_GROUP_SS = 86,
- ERR_ALREADY_IN_GROUP_S = 87,
- ERR_REQUESTED_INVITE_TO_GROUP_SS = 88,
- ERR_CROSS_REALM_RAID_INVITE = 89,
- ERR_PLAYER_BUSY_S = 90,
- ERR_NEW_LEADER_S = 91,
- ERR_NEW_LEADER_YOU = 92,
- ERR_NEW_GUIDE_S = 93,
- ERR_NEW_GUIDE_YOU = 94,
- ERR_LEFT_GROUP_S = 95,
- ERR_LEFT_GROUP_YOU = 96,
- ERR_GROUP_DISBANDED = 97,
- ERR_DECLINE_GROUP_S = 98,
- ERR_DECLINE_GROUP_REQUEST_S = 99,
- ERR_JOINED_GROUP_S = 100,
- ERR_UNINVITE_YOU = 101,
- ERR_BAD_PLAYER_NAME_S = 102,
- ERR_NOT_IN_GROUP = 103,
- ERR_TARGET_NOT_IN_GROUP_S = 104,
- ERR_TARGET_NOT_IN_INSTANCE_S = 105,
- ERR_NOT_IN_INSTANCE_GROUP = 106,
- ERR_GROUP_FULL = 107,
- ERR_NOT_LEADER = 108,
- ERR_PLAYER_DIED_S = 109,
- ERR_GUILD_CREATE_S = 110,
- ERR_GUILD_INVITE_S = 111,
- ERR_INVITED_TO_GUILD_SSS = 112,
- ERR_ALREADY_IN_GUILD_S = 113,
- ERR_ALREADY_INVITED_TO_GUILD_S = 114,
- ERR_INVITED_TO_GUILD = 115,
- ERR_ALREADY_IN_GUILD = 116,
- ERR_GUILD_ACCEPT = 117,
- ERR_GUILD_DECLINE_S = 118,
- ERR_GUILD_DECLINE_AUTO_S = 119,
- ERR_GUILD_PERMISSIONS = 120,
- ERR_GUILD_JOIN_S = 121,
- ERR_GUILD_FOUNDER_S = 122,
- ERR_GUILD_PROMOTE_SSS = 123,
- ERR_GUILD_DEMOTE_SS = 124,
- ERR_GUILD_DEMOTE_SSS = 125,
- ERR_GUILD_INVITE_SELF = 126,
- ERR_GUILD_QUIT_S = 127,
- ERR_GUILD_LEAVE_S = 128,
- ERR_GUILD_REMOVE_SS = 129,
- ERR_GUILD_REMOVE_SELF = 130,
- ERR_GUILD_DISBAND_S = 131,
- ERR_GUILD_DISBAND_SELF = 132,
- ERR_GUILD_LEADER_S = 133,
- ERR_GUILD_LEADER_SELF = 134,
- ERR_GUILD_PLAYER_NOT_FOUND_S = 135,
- ERR_GUILD_PLAYER_NOT_IN_GUILD_S = 136,
- ERR_GUILD_PLAYER_NOT_IN_GUILD = 137,
- ERR_GUILD_BANK_NOT_AVAILABLE = 138,
- ERR_GUILD_CANT_PROMOTE_S = 139,
- ERR_GUILD_CANT_DEMOTE_S = 140,
- ERR_GUILD_NOT_IN_A_GUILD = 141,
- ERR_GUILD_INTERNAL = 142,
- ERR_GUILD_LEADER_IS_S = 143,
- ERR_GUILD_LEADER_CHANGED_SS = 144,
- ERR_GUILD_DISBANDED = 145,
- ERR_GUILD_NOT_ALLIED = 146,
- ERR_GUILD_NEW_LEADER_NOT_ALLIED = 147,
- ERR_GUILD_LEADER_LEAVE = 148,
- ERR_GUILD_RANKS_LOCKED = 149,
- ERR_GUILD_RANK_IN_USE = 150,
- ERR_GUILD_RANK_TOO_HIGH_S = 151,
- ERR_GUILD_RANK_TOO_LOW_S = 152,
- ERR_GUILD_NAME_EXISTS_S = 153,
- ERR_GUILD_WITHDRAW_LIMIT = 154,
- ERR_GUILD_NOT_ENOUGH_MONEY = 155,
- ERR_GUILD_TOO_MUCH_MONEY = 156,
- ERR_GUILD_BANK_CONJURED_ITEM = 157,
- ERR_GUILD_BANK_EQUIPPED_ITEM = 158,
- ERR_GUILD_BANK_BOUND_ITEM = 159,
- ERR_GUILD_BANK_QUEST_ITEM = 160,
- ERR_GUILD_BANK_WRAPPED_ITEM = 161,
- ERR_GUILD_BANK_FULL = 162,
- ERR_GUILD_BANK_WRONG_TAB = 163,
- ERR_NO_GUILD_CHARTER = 164,
- ERR_OUT_OF_RANGE = 165,
- ERR_PLAYER_DEAD = 166,
- ERR_CLIENT_LOCKED_OUT = 167,
- ERR_CLIENT_ON_TRANSPORT = 168,
- ERR_KILLED_BY_S = 169,
- ERR_LOOT_LOCKED = 170,
- ERR_LOOT_TOO_FAR = 171,
- ERR_LOOT_DIDNT_KILL = 172,
- ERR_LOOT_BAD_FACING = 173,
- ERR_LOOT_NOTSTANDING = 174,
- ERR_LOOT_STUNNED = 175,
- ERR_LOOT_NO_UI = 176,
- ERR_LOOT_WHILE_INVULNERABLE = 177,
- ERR_NO_LOOT = 178,
- ERR_QUEST_ACCEPTED_S = 179,
- ERR_QUEST_COMPLETE_S = 180,
- ERR_QUEST_FAILED_S = 181,
- ERR_QUEST_FAILED_BAG_FULL_S = 182,
- ERR_QUEST_FAILED_MAX_COUNT_S = 183,
- ERR_QUEST_FAILED_LOW_LEVEL = 184,
- ERR_QUEST_FAILED_MISSING_ITEMS = 185,
- ERR_QUEST_FAILED_WRONG_RACE = 186,
- ERR_QUEST_FAILED_NOT_ENOUGH_MONEY = 187,
- ERR_QUEST_FAILED_EXPANSION = 188,
- ERR_QUEST_ONLY_ONE_TIMED = 189,
- ERR_QUEST_NEED_PREREQS = 190,
- ERR_QUEST_NEED_PREREQS_CUSTOM = 191,
- ERR_QUEST_ALREADY_ON = 192,
- ERR_QUEST_ALREADY_DONE = 193,
- ERR_QUEST_ALREADY_DONE_DAILY = 194,
- ERR_QUEST_HAS_IN_PROGRESS = 195,
- ERR_QUEST_REWARD_EXP_I = 196,
- ERR_QUEST_REWARD_MONEY_S = 197,
- ERR_QUEST_MUST_CHOOSE = 198,
- ERR_QUEST_LOG_FULL = 199,
- ERR_COMBAT_DAMAGE_SSI = 200,
- ERR_INSPECT_S = 201,
- ERR_CANT_USE_ITEM = 202,
- ERR_CANT_USE_ITEM_IN_ARENA = 203,
- ERR_CANT_USE_ITEM_IN_RATED_BATTLEGROUND = 204,
- ERR_MUST_EQUIP_ITEM = 205,
- ERR_PASSIVE_ABILITY = 206,
- ERR_2HSKILLNOTFOUND = 207,
- ERR_NO_ATTACK_TARGET = 208,
- ERR_INVALID_ATTACK_TARGET = 209,
- ERR_ATTACK_PVP_TARGET_WHILE_UNFLAGGED = 210,
- ERR_ATTACK_STUNNED = 211,
- ERR_ATTACK_PACIFIED = 212,
- ERR_ATTACK_MOUNTED = 213,
- ERR_ATTACK_FLEEING = 214,
- ERR_ATTACK_CONFUSED = 215,
- ERR_ATTACK_CHARMED = 216,
- ERR_ATTACK_DEAD = 217,
- ERR_ATTACK_PREVENTED_BY_MECHANIC_S = 218,
- ERR_ATTACK_CHANNEL = 219,
- ERR_TAXISAMENODE = 220,
- ERR_TAXINOSUCHPATH = 221,
- ERR_TAXIUNSPECIFIEDSERVERERROR = 222,
- ERR_TAXINOTENOUGHMONEY = 223,
- ERR_TAXITOOFARAWAY = 224,
- ERR_TAXINOVENDORNEARBY = 225,
- ERR_TAXINOTVISITED = 226,
- ERR_TAXIPLAYERBUSY = 227,
- ERR_TAXIPLAYERALREADYMOUNTED = 228,
- ERR_TAXIPLAYERSHAPESHIFTED = 229,
- ERR_TAXIPLAYERMOVING = 230,
- ERR_TAXINOPATHS = 231,
- ERR_TAXINOTELIGIBLE = 232,
- ERR_TAXINOTSTANDING = 233,
- ERR_TAXIINCOMBAT = 234,
- ERR_NO_REPLY_TARGET = 235,
- ERR_GENERIC_NO_TARGET = 236,
- ERR_INITIATE_TRADE_S = 237,
- ERR_TRADE_REQUEST_S = 238,
- ERR_TRADE_BLOCKED_S = 239,
- ERR_TRADE_TARGET_DEAD = 240,
- ERR_TRADE_TOO_FAR = 241,
- ERR_TRADE_CANCELLED = 242,
- ERR_TRADE_COMPLETE = 243,
- ERR_TRADE_BAG_FULL = 244,
- ERR_TRADE_TARGET_BAG_FULL = 245,
- ERR_TRADE_MAX_COUNT_EXCEEDED = 246,
- ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED = 247,
- ERR_INVENTORY_TRADE_TOO_MANY_UNIQUE_ITEM = 248,
- ERR_ALREADY_TRADING = 249,
- ERR_MOUNT_INVALIDMOUNTEE = 250,
- ERR_MOUNT_TOOFARAWAY = 251,
- ERR_MOUNT_ALREADYMOUNTED = 252,
- ERR_MOUNT_NOTMOUNTABLE = 253,
- ERR_MOUNT_NOTYOURPET = 254,
- ERR_MOUNT_OTHER = 255,
- ERR_MOUNT_LOOTING = 256,
- ERR_MOUNT_RACECANTMOUNT = 257,
- ERR_MOUNT_SHAPESHIFTED = 258,
- ERR_MOUNT_NO_FAVORITES = 259,
- ERR_MOUNT_NO_MOUNTS = 260,
- ERR_DISMOUNT_NOPET = 261,
- ERR_DISMOUNT_NOTMOUNTED = 262,
- ERR_DISMOUNT_NOTYOURPET = 263,
- ERR_SPELL_FAILED_TOTEMS = 264,
- ERR_SPELL_FAILED_REAGENTS = 265,
- ERR_SPELL_FAILED_REAGENTS_GENERIC = 266,
- ERR_SPELL_FAILED_OPTIONAL_REAGENTS = 267,
- ERR_CANT_TRADE_GOLD = 268,
- ERR_SPELL_FAILED_EQUIPPED_ITEM = 269,
- ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S = 270,
- ERR_SPELL_FAILED_SHAPESHIFT_FORM_S = 271,
- ERR_SPELL_FAILED_ANOTHER_IN_PROGRESS = 272,
- ERR_BADATTACKFACING = 273,
- ERR_BADATTACKPOS = 274,
- ERR_CHEST_IN_USE = 275,
- ERR_USE_CANT_OPEN = 276,
- ERR_USE_LOCKED = 277,
- ERR_DOOR_LOCKED = 278,
- ERR_BUTTON_LOCKED = 279,
- ERR_USE_LOCKED_WITH_ITEM_S = 280,
- ERR_USE_LOCKED_WITH_SPELL_S = 281,
- ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI = 282,
- ERR_USE_TOO_FAR = 283,
- ERR_USE_BAD_ANGLE = 284,
- ERR_USE_OBJECT_MOVING = 285,
- ERR_USE_SPELL_FOCUS = 286,
- ERR_USE_DESTROYED = 287,
- ERR_SET_LOOT_FREEFORALL = 288,
- ERR_SET_LOOT_ROUNDROBIN = 289,
- ERR_SET_LOOT_MASTER = 290,
- ERR_SET_LOOT_GROUP = 291,
- ERR_SET_LOOT_THRESHOLD_S = 292,
- ERR_NEW_LOOT_MASTER_S = 293,
- ERR_SPECIFY_MASTER_LOOTER = 294,
- ERR_LOOT_SPEC_CHANGED_S = 295,
- ERR_TAME_FAILED = 296,
- ERR_CHAT_WHILE_DEAD = 297,
- ERR_CHAT_PLAYER_NOT_FOUND_S = 298,
- ERR_NEWTAXIPATH = 299,
- ERR_NO_PET = 300,
- ERR_NOTYOURPET = 301,
- ERR_PET_NOT_RENAMEABLE = 302,
- ERR_QUEST_OBJECTIVE_COMPLETE_S = 303,
- ERR_QUEST_UNKNOWN_COMPLETE = 304,
- ERR_QUEST_ADD_KILL_SII = 305,
- ERR_QUEST_ADD_FOUND_SII = 306,
- ERR_QUEST_ADD_ITEM_SII = 307,
- ERR_QUEST_ADD_PLAYER_KILL_SII = 308,
- ERR_CANNOTCREATEDIRECTORY = 309,
- ERR_CANNOTCREATEFILE = 310,
- ERR_PLAYER_WRONG_FACTION = 311,
- ERR_PLAYER_IS_NEUTRAL = 312,
- ERR_BANKSLOT_FAILED_TOO_MANY = 313,
- ERR_BANKSLOT_INSUFFICIENT_FUNDS = 314,
- ERR_BANKSLOT_NOTBANKER = 315,
- ERR_FRIEND_DB_ERROR = 316,
- ERR_FRIEND_LIST_FULL = 317,
- ERR_FRIEND_ADDED_S = 318,
- ERR_BATTLETAG_FRIEND_ADDED_S = 319,
- ERR_FRIEND_ONLINE_SS = 320,
- ERR_FRIEND_OFFLINE_S = 321,
- ERR_FRIEND_NOT_FOUND = 322,
- ERR_FRIEND_WRONG_FACTION = 323,
- ERR_FRIEND_REMOVED_S = 324,
- ERR_BATTLETAG_FRIEND_REMOVED_S = 325,
- ERR_FRIEND_ERROR = 326,
- ERR_FRIEND_ALREADY_S = 327,
- ERR_FRIEND_SELF = 328,
- ERR_FRIEND_DELETED = 329,
- ERR_IGNORE_FULL = 330,
- ERR_IGNORE_SELF = 331,
- ERR_IGNORE_NOT_FOUND = 332,
- ERR_IGNORE_ALREADY_S = 333,
- ERR_IGNORE_ADDED_S = 334,
- ERR_IGNORE_REMOVED_S = 335,
- ERR_IGNORE_AMBIGUOUS = 336,
- ERR_IGNORE_DELETED = 337,
- ERR_ONLY_ONE_BOLT = 338,
- ERR_ONLY_ONE_AMMO = 339,
- ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 340,
- ERR_WRONG_BAG_TYPE_SUBCLASS = 341,
- ERR_CANT_WRAP_STACKABLE = 342,
- ERR_CANT_WRAP_EQUIPPED = 343,
- ERR_CANT_WRAP_WRAPPED = 344,
- ERR_CANT_WRAP_BOUND = 345,
- ERR_CANT_WRAP_UNIQUE = 346,
- ERR_CANT_WRAP_BAGS = 347,
- ERR_OUT_OF_MANA = 348,
- ERR_OUT_OF_RAGE = 349,
- ERR_OUT_OF_FOCUS = 350,
- ERR_OUT_OF_ENERGY = 351,
- ERR_OUT_OF_CHI = 352,
- ERR_OUT_OF_HEALTH = 353,
- ERR_OUT_OF_RUNES = 354,
- ERR_OUT_OF_RUNIC_POWER = 355,
- ERR_OUT_OF_SOUL_SHARDS = 356,
- ERR_OUT_OF_LUNAR_POWER = 357,
- ERR_OUT_OF_HOLY_POWER = 358,
- ERR_OUT_OF_MAELSTROM = 359,
- ERR_OUT_OF_COMBO_POINTS = 360,
- ERR_OUT_OF_INSANITY = 361,
- ERR_OUT_OF_ESSENCE = 362,
- ERR_OUT_OF_ARCANE_CHARGES = 363,
- ERR_OUT_OF_FURY = 364,
- ERR_OUT_OF_PAIN = 365,
- ERR_OUT_OF_POWER_DISPLAY = 366,
- ERR_LOOT_GONE = 367,
- ERR_MOUNT_FORCEDDISMOUNT = 368,
- ERR_AUTOFOLLOW_TOO_FAR = 369,
- ERR_UNIT_NOT_FOUND = 370,
- ERR_INVALID_FOLLOW_TARGET = 371,
- ERR_INVALID_FOLLOW_PVP_COMBAT = 372,
- ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 373,
- ERR_INVALID_INSPECT_TARGET = 374,
- ERR_GUILDEMBLEM_SUCCESS = 375,
- ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 376,
- ERR_GUILDEMBLEM_NOGUILD = 377,
- ERR_GUILDEMBLEM_NOTGUILDMASTER = 378,
- ERR_GUILDEMBLEM_NOTENOUGHMONEY = 379,
- ERR_GUILDEMBLEM_INVALIDVENDOR = 380,
- ERR_EMBLEMERROR_NOTABARDGEOSET = 381,
- ERR_SPELL_OUT_OF_RANGE = 382,
- ERR_COMMAND_NEEDS_TARGET = 383,
- ERR_NOAMMO_S = 384,
- ERR_TOOBUSYTOFOLLOW = 385,
- ERR_DUEL_REQUESTED = 386,
- ERR_DUEL_CANCELLED = 387,
- ERR_DEATHBINDALREADYBOUND = 388,
- ERR_DEATHBIND_SUCCESS_S = 389,
- ERR_NOEMOTEWHILERUNNING = 390,
- ERR_ZONE_EXPLORED = 391,
- ERR_ZONE_EXPLORED_XP = 392,
- ERR_INVALID_ITEM_TARGET = 393,
- ERR_INVALID_QUEST_TARGET = 394,
- ERR_IGNORING_YOU_S = 395,
- ERR_FISH_NOT_HOOKED = 396,
- ERR_FISH_ESCAPED = 397,
- ERR_SPELL_FAILED_NOTUNSHEATHED = 398,
- ERR_PETITION_OFFERED_S = 399,
- ERR_PETITION_SIGNED = 400,
- ERR_PETITION_SIGNED_S = 401,
- ERR_PETITION_DECLINED_S = 402,
- ERR_PETITION_ALREADY_SIGNED = 403,
- ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 404,
- ERR_PETITION_ALREADY_SIGNED_OTHER = 405,
- ERR_PETITION_IN_GUILD = 406,
- ERR_PETITION_CREATOR = 407,
- ERR_PETITION_NOT_ENOUGH_SIGNATURES = 408,
- ERR_PETITION_NOT_SAME_SERVER = 409,
- ERR_PETITION_FULL = 410,
- ERR_PETITION_ALREADY_SIGNED_BY_S = 411,
- ERR_GUILD_NAME_INVALID = 412,
- ERR_SPELL_UNLEARNED_S = 413,
- ERR_PET_SPELL_ROOTED = 414,
- ERR_PET_SPELL_AFFECTING_COMBAT = 415,
- ERR_PET_SPELL_OUT_OF_RANGE = 416,
- ERR_PET_SPELL_NOT_BEHIND = 417,
- ERR_PET_SPELL_TARGETS_DEAD = 418,
- ERR_PET_SPELL_DEAD = 419,
- ERR_PET_SPELL_NOPATH = 420,
- ERR_ITEM_CANT_BE_DESTROYED = 421,
- ERR_TICKET_ALREADY_EXISTS = 422,
- ERR_TICKET_CREATE_ERROR = 423,
- ERR_TICKET_UPDATE_ERROR = 424,
- ERR_TICKET_DB_ERROR = 425,
- ERR_TICKET_NO_TEXT = 426,
- ERR_TICKET_TEXT_TOO_LONG = 427,
- ERR_OBJECT_IS_BUSY = 428,
- ERR_EXHAUSTION_WELLRESTED = 429,
- ERR_EXHAUSTION_RESTED = 430,
- ERR_EXHAUSTION_NORMAL = 431,
- ERR_EXHAUSTION_TIRED = 432,
- ERR_EXHAUSTION_EXHAUSTED = 433,
- ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 434,
- ERR_CANT_INTERACT_SHAPESHIFTED = 435,
- ERR_REALM_NOT_FOUND = 436,
- ERR_MAIL_QUEST_ITEM = 437,
- ERR_MAIL_BOUND_ITEM = 438,
- ERR_MAIL_CONJURED_ITEM = 439,
- ERR_MAIL_BAG = 440,
- ERR_MAIL_TO_SELF = 441,
- ERR_MAIL_TARGET_NOT_FOUND = 442,
- ERR_MAIL_DATABASE_ERROR = 443,
- ERR_MAIL_DELETE_ITEM_ERROR = 444,
- ERR_MAIL_WRAPPED_COD = 445,
- ERR_MAIL_CANT_SEND_REALM = 446,
- ERR_MAIL_TEMP_RETURN_OUTAGE = 447,
- ERR_MAIL_RECEPIENT_CANT_RECEIVE_MAIL = 448,
- ERR_MAIL_SENT = 449,
- ERR_MAIL_TARGET_IS_TRIAL = 450,
- ERR_NOT_HAPPY_ENOUGH = 451,
- ERR_USE_CANT_IMMUNE = 452,
- ERR_CANT_BE_DISENCHANTED = 453,
- ERR_CANT_USE_DISARMED = 454,
- ERR_AUCTION_DATABASE_ERROR = 455,
- ERR_AUCTION_HIGHER_BID = 456,
- ERR_AUCTION_ALREADY_BID = 457,
- ERR_AUCTION_OUTBID_S = 458,
- ERR_AUCTION_WON_S = 459,
- ERR_AUCTION_REMOVED_S = 460,
- ERR_AUCTION_BID_PLACED = 461,
- ERR_LOGOUT_FAILED = 462,
- ERR_QUEST_PUSH_SUCCESS_S = 463,
- ERR_QUEST_PUSH_INVALID_S = 464,
- ERR_QUEST_PUSH_INVALID_TO_RECIPIENT_S = 465,
- ERR_QUEST_PUSH_ACCEPTED_S = 466,
- ERR_QUEST_PUSH_DECLINED_S = 467,
- ERR_QUEST_PUSH_BUSY_S = 468,
- ERR_QUEST_PUSH_DEAD_S = 469,
- ERR_QUEST_PUSH_DEAD_TO_RECIPIENT_S = 470,
- ERR_QUEST_PUSH_LOG_FULL_S = 471,
- ERR_QUEST_PUSH_LOG_FULL_TO_RECIPIENT_S = 472,
- ERR_QUEST_PUSH_ONQUEST_S = 473,
- ERR_QUEST_PUSH_ONQUEST_TO_RECIPIENT_S = 474,
- ERR_QUEST_PUSH_ALREADY_DONE_S = 475,
- ERR_QUEST_PUSH_ALREADY_DONE_TO_RECIPIENT_S = 476,
- ERR_QUEST_PUSH_NOT_DAILY_S = 477,
- ERR_QUEST_PUSH_TIMER_EXPIRED_S = 478,
- ERR_QUEST_PUSH_NOT_IN_PARTY_S = 479,
- ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 480,
- ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_TO_RECIPIENT_S = 481,
- ERR_QUEST_PUSH_NOT_ALLOWED_S = 482,
- ERR_QUEST_PUSH_PREREQUISITE_S = 483,
- ERR_QUEST_PUSH_PREREQUISITE_TO_RECIPIENT_S = 484,
- ERR_QUEST_PUSH_LOW_LEVEL_S = 485,
- ERR_QUEST_PUSH_LOW_LEVEL_TO_RECIPIENT_S = 486,
- ERR_QUEST_PUSH_HIGH_LEVEL_S = 487,
- ERR_QUEST_PUSH_HIGH_LEVEL_TO_RECIPIENT_S = 488,
- ERR_QUEST_PUSH_CLASS_S = 489,
- ERR_QUEST_PUSH_CLASS_TO_RECIPIENT_S = 490,
- ERR_QUEST_PUSH_RACE_S = 491,
- ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 492,
- ERR_QUEST_PUSH_LOW_FACTION_S = 493,
- ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 494,
- ERR_QUEST_PUSH_HIGH_FACTION_S = 495,
- ERR_QUEST_PUSH_HIGH_FACTION_TO_RECIPIENT_S = 496,
- ERR_QUEST_PUSH_EXPANSION_S = 497,
- ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 498,
- ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 499,
- ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 500,
- ERR_QUEST_PUSH_WRONG_COVENANT_S = 501,
- ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 502,
- ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 503,
- ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 504,
- ERR_QUEST_PUSH_WRONG_FACTION_S = 505,
- ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 506,
- ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 507,
- ERR_RAID_GROUP_LOWLEVEL = 508,
- ERR_RAID_GROUP_ONLY = 509,
- ERR_RAID_GROUP_FULL = 510,
- ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 511,
- ERR_CORPSE_IS_NOT_IN_INSTANCE = 512,
- ERR_PVP_KILL_HONORABLE = 513,
- ERR_PVP_KILL_DISHONORABLE = 514,
- ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 515,
- ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 516,
- ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 517,
- ERR_AUTOLOOT_MONEY_S = 518,
- ERR_GENERIC_STUNNED = 519,
- ERR_GENERIC_THROTTLE = 520,
- ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 521,
- ERR_TARGET_STUNNED = 522,
- ERR_MUST_REPAIR_DURABILITY = 523,
- ERR_RAID_YOU_JOINED = 524,
- ERR_RAID_YOU_LEFT = 525,
- ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 526,
- ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 527,
- ERR_RAID_MEMBER_ADDED_S = 528,
- ERR_RAID_MEMBER_REMOVED_S = 529,
- ERR_INSTANCE_GROUP_ADDED_S = 530,
- ERR_INSTANCE_GROUP_REMOVED_S = 531,
- ERR_CLICK_ON_ITEM_TO_FEED = 532,
- ERR_TOO_MANY_CHAT_CHANNELS = 533,
- ERR_LOOT_ROLL_PENDING = 534,
- ERR_LOOT_PLAYER_NOT_FOUND = 535,
- ERR_NOT_IN_RAID = 536,
- ERR_LOGGING_OUT = 537,
- ERR_TARGET_LOGGING_OUT = 538,
- ERR_NOT_WHILE_MOUNTED = 539,
- ERR_NOT_WHILE_SHAPESHIFTED = 540,
- ERR_NOT_IN_COMBAT = 541,
- ERR_NOT_WHILE_DISARMED = 542,
- ERR_PET_BROKEN = 543,
- ERR_TALENT_WIPE_ERROR = 544,
- ERR_SPEC_WIPE_ERROR = 545,
- ERR_GLYPH_WIPE_ERROR = 546,
- ERR_PET_SPEC_WIPE_ERROR = 547,
- ERR_FEIGN_DEATH_RESISTED = 548,
- ERR_MEETING_STONE_IN_QUEUE_S = 549,
- ERR_MEETING_STONE_LEFT_QUEUE_S = 550,
- ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 551,
- ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 552,
- ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 553,
- ERR_MEETING_STONE_SUCCESS = 554,
- ERR_MEETING_STONE_IN_PROGRESS = 555,
- ERR_MEETING_STONE_MEMBER_ADDED_S = 556,
- ERR_MEETING_STONE_GROUP_FULL = 557,
- ERR_MEETING_STONE_NOT_LEADER = 558,
- ERR_MEETING_STONE_INVALID_LEVEL = 559,
- ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 560,
- ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 561,
- ERR_MEETING_STONE_MUST_BE_LEADER = 562,
- ERR_MEETING_STONE_NO_RAID_GROUP = 563,
- ERR_MEETING_STONE_NEED_PARTY = 564,
- ERR_MEETING_STONE_NOT_FOUND = 565,
- ERR_MEETING_STONE_TARGET_IN_VEHICLE = 566,
- ERR_GUILDEMBLEM_SAME = 567,
- ERR_EQUIP_TRADE_ITEM = 568,
- ERR_PVP_TOGGLE_ON = 569,
- ERR_PVP_TOGGLE_OFF = 570,
- ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 571,
- ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 572,
- ERR_GROUP_JOIN_BATTLEGROUND_S = 573,
- ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 574,
- ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 575,
- ERR_SOLO_JOIN_BATTLEGROUND_S = 576,
- ERR_JOIN_SINGLE_SCENARIO_S = 577,
- ERR_BATTLEGROUND_TOO_MANY_QUEUES = 578,
- ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 579,
- ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 580,
- ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 581,
- ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 582,
- ERR_ALREADY_IN_ARENA_TEAM_S = 583,
- ERR_INVALID_PROMOTION_CODE = 584,
- ERR_BG_PLAYER_JOINED_SS = 585,
- ERR_BG_PLAYER_LEFT_S = 586,
- ERR_RESTRICTED_ACCOUNT = 587,
- ERR_RESTRICTED_ACCOUNT_TRIAL = 588,
- ERR_PLAY_TIME_EXCEEDED = 589,
- ERR_APPROACHING_PARTIAL_PLAY_TIME = 590,
- ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 591,
- ERR_APPROACHING_NO_PLAY_TIME = 592,
- ERR_APPROACHING_NO_PLAY_TIME_2 = 593,
- ERR_UNHEALTHY_TIME = 594,
- ERR_CHAT_RESTRICTED_TRIAL = 595,
- ERR_CHAT_THROTTLED = 596,
- ERR_MAIL_REACHED_CAP = 597,
- ERR_INVALID_RAID_TARGET = 598,
- ERR_RAID_LEADER_READY_CHECK_START_S = 599,
- ERR_READY_CHECK_IN_PROGRESS = 600,
- ERR_READY_CHECK_THROTTLED = 601,
- ERR_DUNGEON_DIFFICULTY_FAILED = 602,
- ERR_DUNGEON_DIFFICULTY_CHANGED_S = 603,
- ERR_TRADE_WRONG_REALM = 604,
- ERR_TRADE_NOT_ON_TAPLIST = 605,
- ERR_CHAT_PLAYER_AMBIGUOUS_S = 606,
- ERR_LOOT_CANT_LOOT_THAT_NOW = 607,
- ERR_LOOT_MASTER_INV_FULL = 608,
- ERR_LOOT_MASTER_UNIQUE_ITEM = 609,
- ERR_LOOT_MASTER_OTHER = 610,
- ERR_FILTERING_YOU_S = 611,
- ERR_USE_PREVENTED_BY_MECHANIC_S = 612,
- ERR_ITEM_UNIQUE_EQUIPPABLE = 613,
- ERR_LFG_LEADER_IS_LFM_S = 614,
- ERR_LFG_PENDING = 615,
- ERR_CANT_SPEAK_LANGAGE = 616,
- ERR_VENDOR_MISSING_TURNINS = 617,
- ERR_BATTLEGROUND_NOT_IN_TEAM = 618,
- ERR_NOT_IN_BATTLEGROUND = 619,
- ERR_NOT_ENOUGH_HONOR_POINTS = 620,
- ERR_NOT_ENOUGH_ARENA_POINTS = 621,
- ERR_SOCKETING_REQUIRES_META_GEM = 622,
- ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 623,
- ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 624,
- ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 625,
- ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 626,
- ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 627,
- ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 628,
- ERR_ITEM_MAX_COUNT_SOCKETED = 629,
- ERR_SYSTEM_DISABLED = 630,
- ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 631,
- ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 632,
- ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 633,
- ERR_USER_SQUELCHED = 634,
- ERR_ACCOUNT_SILENCED = 635,
- ERR_PARTY_MEMBER_SILENCED = 636,
- ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 637,
- ERR_TOO_MUCH_GOLD = 638,
- ERR_NOT_BARBER_SITTING = 639,
- ERR_QUEST_FAILED_CAIS = 640,
- ERR_INVITE_RESTRICTED_TRIAL = 641,
- ERR_VOICE_IGNORE_FULL = 642,
- ERR_VOICE_IGNORE_SELF = 643,
- ERR_VOICE_IGNORE_NOT_FOUND = 644,
- ERR_VOICE_IGNORE_ALREADY_S = 645,
- ERR_VOICE_IGNORE_ADDED_S = 646,
- ERR_VOICE_IGNORE_REMOVED_S = 647,
- ERR_VOICE_IGNORE_AMBIGUOUS = 648,
- ERR_VOICE_IGNORE_DELETED = 649,
- ERR_UNKNOWN_MACRO_OPTION_S = 650,
- ERR_NOT_DURING_ARENA_MATCH = 651,
- ERR_NOT_IN_RATED_BATTLEGROUND = 652,
- ERR_PLAYER_SILENCED = 653,
- ERR_PLAYER_UNSILENCED = 654,
- ERR_COMSAT_DISCONNECT = 655,
- ERR_COMSAT_RECONNECT_ATTEMPT = 656,
- ERR_COMSAT_CONNECT_FAIL = 657,
- ERR_MAIL_INVALID_ATTACHMENT_SLOT = 658,
- ERR_MAIL_TOO_MANY_ATTACHMENTS = 659,
- ERR_MAIL_INVALID_ATTACHMENT = 660,
- ERR_MAIL_ATTACHMENT_EXPIRED = 661,
- ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 662,
- ERR_PROFANE_CHAT_NAME = 663,
- ERR_PLAYER_SILENCED_ECHO = 664,
- ERR_PLAYER_UNSILENCED_ECHO = 665,
- ERR_LOOT_CANT_LOOT_THAT = 666,
- ERR_ARENA_EXPIRED_CAIS = 667,
- ERR_GROUP_ACTION_THROTTLED = 668,
- ERR_ALREADY_PICKPOCKETED = 669,
- ERR_NAME_INVALID = 670,
- ERR_NAME_NO_NAME = 671,
- ERR_NAME_TOO_SHORT = 672,
- ERR_NAME_TOO_LONG = 673,
- ERR_NAME_MIXED_LANGUAGES = 674,
- ERR_NAME_PROFANE = 675,
- ERR_NAME_RESERVED = 676,
- ERR_NAME_THREE_CONSECUTIVE = 677,
- ERR_NAME_INVALID_SPACE = 678,
- ERR_NAME_CONSECUTIVE_SPACES = 679,
- ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 680,
- ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 681,
- ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 682,
- ERR_RECRUIT_A_FRIEND_NOT_LINKED = 683,
- ERR_RECRUIT_A_FRIEND_NOT_NOW = 684,
- ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 685,
- ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 686,
- ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 687,
- ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 688,
- ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 689,
- ERR_NOT_SAME_ACCOUNT = 690,
- ERR_BAD_ON_USE_ENCHANT = 691,
- ERR_TRADE_SELF = 692,
- ERR_TOO_MANY_SOCKETS = 693,
- ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 694,
- ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 695,
- ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 696,
- ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 697,
- ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 698,
- ERR_ITEM_INVENTORY_FULL_SATCHEL = 699,
- ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 700,
- ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 701,
- ERR_PURCHASE_LEVEL_TOO_LOW = 702,
- ERR_GROUP_SWAP_FAILED = 703,
- ERR_INVITE_IN_COMBAT = 704,
- ERR_INVALID_GLYPH_SLOT = 705,
- ERR_GENERIC_NO_VALID_TARGETS = 706,
- ERR_CALENDAR_EVENT_ALERT_S = 707,
- ERR_PET_LEARN_SPELL_S = 708,
- ERR_PET_LEARN_ABILITY_S = 709,
- ERR_PET_SPELL_UNLEARNED_S = 710,
- ERR_INVITE_UNKNOWN_REALM = 711,
- ERR_INVITE_NO_PARTY_SERVER = 712,
- ERR_INVITE_PARTY_BUSY = 713,
- ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 714,
- ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 715,
- ERR_PARTY_TARGET_AMBIGUOUS = 716,
- ERR_PARTY_LFG_INVITE_RAID_LOCKED = 717,
- ERR_PARTY_LFG_BOOT_LIMIT = 718,
- ERR_PARTY_LFG_BOOT_COOLDOWN_S = 719,
- ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 720,
- ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 721,
- ERR_PARTY_LFG_BOOT_IN_PROGRESS = 722,
- ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 723,
- ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 724,
- ERR_PARTY_LFG_BOOT_VOTE_FAILED = 725,
- ERR_PARTY_LFG_BOOT_DISALLOWED_BY_MAP = 726,
- ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 727,
- ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 728,
- ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 729,
- ERR_PARTY_PRIVATE_GROUP_ONLY = 730,
- ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 731,
- ERR_PARTY_TIME_RUNNING_SEASON_ID_MUST_MATCH = 732,
- ERR_RAID_DISALLOWED_BY_LEVEL = 733,
- ERR_RAID_DISALLOWED_BY_CROSS_REALM = 734,
- ERR_PARTY_ROLE_NOT_AVAILABLE = 735,
- ERR_JOIN_LFG_OBJECT_FAILED = 736,
- ERR_LFG_REMOVED_LEVELUP = 737,
- ERR_LFG_REMOVED_XP_TOGGLE = 738,
- ERR_LFG_REMOVED_FACTION_CHANGE = 739,
- ERR_BATTLEGROUND_INFO_THROTTLED = 740,
- ERR_BATTLEGROUND_ALREADY_IN = 741,
- ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 742,
- ERR_ARENA_TEAM_PERMISSIONS = 743,
- ERR_NOT_WHILE_FALLING = 744,
- ERR_NOT_WHILE_MOVING = 745,
- ERR_NOT_WHILE_FATIGUED = 746,
- ERR_MAX_SOCKETS = 747,
- ERR_MULTI_CAST_ACTION_TOTEM_S = 748,
- ERR_BATTLEGROUND_JOIN_LEVELUP = 749,
- ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 750,
- ERR_BATTLEGROUND_JOIN_XP_GAIN = 751,
- ERR_BATTLEGROUND_JOIN_MERCENARY = 752,
- ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 753,
- ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 754,
- ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 755,
- ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 756,
- ERR_RAID_DIFFICULTY_FAILED = 757,
- ERR_RAID_DIFFICULTY_CHANGED_S = 758,
- ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 759,
- ERR_RAID_LOCKOUT_CHANGED_S = 760,
- ERR_RAID_CONVERTED_TO_PARTY = 761,
- ERR_PARTY_CONVERTED_TO_RAID = 762,
- ERR_PLAYER_DIFFICULTY_CHANGED_S = 763,
- ERR_GMRESPONSE_DB_ERROR = 764,
- ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 765,
- ERR_ARENA_JOIN_RANGE_INDEX = 766,
- ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 767,
- ERR_BATTLEGROUND_JOIN_FAILED = 768,
- ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 769,
- ERR_BATTLEGROUND_JOIN_RESPEC = 770,
- ERR_BATTLEGROUND_INVITATION_DECLINED = 771,
- ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 772,
- ERR_BATTLEGROUND_JOIN_TIMED_OUT = 773,
- ERR_BATTLEGROUND_DUPE_QUEUE = 774,
- ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 775,
- ERR_IN_BATTLEGROUND_RESPEC = 776,
- ERR_MAIL_LIMITED_DURATION_ITEM = 777,
- ERR_YELL_RESTRICTED_TRIAL = 778,
- ERR_CHAT_RAID_RESTRICTED_TRIAL = 779,
- ERR_LFG_ROLE_CHECK_FAILED = 780,
- ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 781,
- ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 782,
- ERR_LFG_READY_CHECK_FAILED = 783,
- ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 784,
- ERR_LFG_GROUP_FULL = 785,
- ERR_LFG_NO_LFG_OBJECT = 786,
- ERR_LFG_NO_SLOTS_PLAYER = 787,
- ERR_LFG_NO_SLOTS_PARTY = 788,
- ERR_LFG_NO_SPEC = 789,
- ERR_LFG_MISMATCHED_SLOTS = 790,
- ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 791,
- ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 792,
- ERR_LFG_MEMBERS_NOT_PRESENT = 793,
- ERR_LFG_GET_INFO_TIMEOUT = 794,
- ERR_LFG_INVALID_SLOT = 795,
- ERR_LFG_DESERTER_PLAYER = 796,
- ERR_LFG_DESERTER_PARTY = 797,
- ERR_LFG_DEAD = 798,
- ERR_LFG_RANDOM_COOLDOWN_PLAYER = 799,
- ERR_LFG_RANDOM_COOLDOWN_PARTY = 800,
- ERR_LFG_TOO_MANY_MEMBERS = 801,
- ERR_LFG_TOO_FEW_MEMBERS = 802,
- ERR_LFG_PROPOSAL_FAILED = 803,
- ERR_LFG_PROPOSAL_DECLINED_SELF = 804,
- ERR_LFG_PROPOSAL_DECLINED_PARTY = 805,
- ERR_LFG_NO_SLOTS_SELECTED = 806,
- ERR_LFG_NO_ROLES_SELECTED = 807,
- ERR_LFG_ROLE_CHECK_INITIATED = 808,
- ERR_LFG_READY_CHECK_INITIATED = 809,
- ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 810,
- ERR_LFG_PLAYER_DECLINED_READY_CHECK = 811,
- ERR_LFG_JOINED_QUEUE = 812,
- ERR_LFG_JOINED_FLEX_QUEUE = 813,
- ERR_LFG_JOINED_RF_QUEUE = 814,
- ERR_LFG_JOINED_SCENARIO_QUEUE = 815,
- ERR_LFG_JOINED_WORLD_PVP_QUEUE = 816,
- ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 817,
- ERR_LFG_JOINED_LIST = 818,
- ERR_LFG_LEFT_QUEUE = 819,
- ERR_LFG_LEFT_LIST = 820,
- ERR_LFG_ROLE_CHECK_ABORTED = 821,
- ERR_LFG_READY_CHECK_ABORTED = 822,
- ERR_LFG_CANT_USE_BATTLEGROUND = 823,
- ERR_LFG_CANT_USE_DUNGEONS = 824,
- ERR_LFG_REASON_TOO_MANY_LFG = 825,
- ERR_LFG_FARM_LIMIT = 826,
- ERR_LFG_NO_CROSS_FACTION_PARTIES = 827,
- ERR_INVALID_TELEPORT_LOCATION = 828,
- ERR_TOO_FAR_TO_INTERACT = 829,
- ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 830,
- ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 831,
- ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 832,
- ERR_DIFFICULTY_CHANGE_WORLDSTATE = 833,
- ERR_DIFFICULTY_CHANGE_ENCOUNTER = 834,
- ERR_DIFFICULTY_CHANGE_COMBAT = 835,
- ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 836,
- ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 837,
- ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 838,
- ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 839,
- ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 840,
- ERR_ARENA_TEAM_PARTY_SIZE = 841,
- ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 842,
- ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 843,
- ERR_SOLO_MIN_ITEM_LEVEL = 844,
- ERR_PVP_PLAYER_ABANDONED = 845,
- ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 846,
- ERR_QUEST_FORCE_REMOVED_S = 847,
- ERR_ATTACK_NO_ACTIONS = 848,
- ERR_IN_RANDOM_BG = 849,
- ERR_IN_NON_RANDOM_BG = 850,
- ERR_BN_FRIEND_SELF = 851,
- ERR_BN_FRIEND_ALREADY = 852,
- ERR_BN_FRIEND_BLOCKED = 853,
- ERR_BN_FRIEND_LIST_FULL = 854,
- ERR_BN_FRIEND_REQUEST_SENT = 855,
- ERR_BN_BROADCAST_THROTTLE = 856,
- ERR_BG_DEVELOPER_ONLY = 857,
- ERR_CURRENCY_SPELL_SLOT_MISMATCH = 858,
- ERR_CURRENCY_NOT_TRADABLE = 859,
- ERR_REQUIRES_EXPANSION_S = 860,
- ERR_QUEST_FAILED_SPELL = 861,
- ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 862,
- ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 863,
- ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 864,
- ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 865,
- ERR_TALENT_FAILED_UNKNOWN = 866,
- ERR_TALENT_FAILED_IN_COMBAT = 867,
- ERR_TALENT_FAILED_IN_PVP_MATCH = 868,
- ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 869,
- ERR_WARGAME_REQUEST_FAILURE = 870,
- ERR_RANK_REQUIRES_AUTHENTICATOR = 871,
- ERR_GUILD_BANK_VOUCHER_FAILED = 872,
- ERR_WARGAME_REQUEST_SENT = 873,
- ERR_REQUIRES_ACHIEVEMENT_I = 874,
- ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 875,
- ERR_CANT_BUY_QUANTITY = 876,
- ERR_ITEM_IS_BATTLE_PAY_LOCKED = 877,
- ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 878,
- ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 879,
- ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 880,
- ERR_INSUFF_TRACKED_CURRENCY_IS = 881,
- ERR_NOT_ON_TOURNAMENT_REALM = 882,
- ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 883,
- ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 884,
- ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 885,
- ERR_CANT_DO_THAT_IN_A_GROUP = 886,
- ERR_GUILD_LEADER_REPLACED = 887,
- ERR_TRANSMOGRIFY_CANT_EQUIP = 888,
- ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 889,
- ERR_TRANSMOGRIFY_NOT_SOULBOUND = 890,
- ERR_TRANSMOGRIFY_INVALID_SOURCE = 891,
- ERR_TRANSMOGRIFY_INVALID_DESTINATION = 892,
- ERR_TRANSMOGRIFY_MISMATCH = 893,
- ERR_TRANSMOGRIFY_LEGENDARY = 894,
- ERR_TRANSMOGRIFY_SAME_ITEM = 895,
- ERR_TRANSMOGRIFY_SAME_APPEARANCE = 896,
- ERR_TRANSMOGRIFY_NOT_EQUIPPED = 897,
- ERR_VOID_DEPOSIT_FULL = 898,
- ERR_VOID_WITHDRAW_FULL = 899,
- ERR_VOID_STORAGE_WRAPPED = 900,
- ERR_VOID_STORAGE_STACKABLE = 901,
- ERR_VOID_STORAGE_UNBOUND = 902,
- ERR_VOID_STORAGE_REPAIR = 903,
- ERR_VOID_STORAGE_CHARGES = 904,
- ERR_VOID_STORAGE_QUEST = 905,
- ERR_VOID_STORAGE_CONJURED = 906,
- ERR_VOID_STORAGE_MAIL = 907,
- ERR_VOID_STORAGE_BAG = 908,
- ERR_VOID_TRANSFER_STORAGE_FULL = 909,
- ERR_VOID_TRANSFER_INV_FULL = 910,
- ERR_VOID_TRANSFER_INTERNAL_ERROR = 911,
- ERR_VOID_TRANSFER_ITEM_INVALID = 912,
- ERR_DIFFICULTY_DISABLED_IN_LFG = 913,
- ERR_VOID_STORAGE_UNIQUE = 914,
- ERR_VOID_STORAGE_LOOT = 915,
- ERR_VOID_STORAGE_HOLIDAY = 916,
- ERR_VOID_STORAGE_DURATION = 917,
- ERR_VOID_STORAGE_LOAD_FAILED = 918,
- ERR_VOID_STORAGE_INVALID_ITEM = 919,
- ERR_PARENTAL_CONTROLS_CHAT_MUTED = 920,
- ERR_SOR_START_EXPERIENCE_INCOMPLETE = 921,
- ERR_SOR_INVALID_EMAIL = 922,
- ERR_SOR_INVALID_COMMENT = 923,
- ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 924,
- ERR_CHALLENGE_MODE_RESET_KEYSTONE = 925,
- ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 926,
- ERR_REPORT_SUBMITTED_SUCCESSFULLY = 927,
- ERR_REPORT_SUBMISSION_FAILED = 928,
- ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 929,
- ERR_BUG_SUBMITTED_SUCCESSFULLY = 930,
- ERR_CHALLENGE_MODE_ENABLED = 931,
- ERR_CHALLENGE_MODE_DISABLED = 932,
- ERR_PETBATTLE_CREATE_FAILED = 933,
- ERR_PETBATTLE_NOT_HERE = 934,
- ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 935,
- ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 936,
- ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 937,
- ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 938,
- ERR_PETBATTLE_NOT_WHILE_DEAD = 939,
- ERR_PETBATTLE_NOT_WHILE_FLYING = 940,
- ERR_PETBATTLE_TARGET_INVALID = 941,
- ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 942,
- ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 943,
- ERR_PETBATTLE_NOT_A_TRAINER = 944,
- ERR_PETBATTLE_DECLINED = 945,
- ERR_PETBATTLE_IN_BATTLE = 946,
- ERR_PETBATTLE_INVALID_LOADOUT = 947,
- ERR_PETBATTLE_ALL_PETS_DEAD = 948,
- ERR_PETBATTLE_NO_PETS_IN_SLOTS = 949,
- ERR_PETBATTLE_NO_ACCOUNT_LOCK = 950,
- ERR_PETBATTLE_WILD_PET_TAPPED = 951,
- ERR_PETBATTLE_RESTRICTED_ACCOUNT = 952,
- ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 953,
- ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 954,
- ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 955,
- ERR_CANT_HAVE_MORE_PETS = 956,
- ERR_PVP_MAP_NOT_FOUND = 957,
- ERR_PVP_MAP_NOT_SET = 958,
- ERR_PETBATTLE_QUEUE_QUEUED = 959,
- ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 960,
- ERR_PETBATTLE_QUEUE_JOIN_FAILED = 961,
- ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 962,
- ERR_PETBATTLE_QUEUE_REMOVED = 963,
- ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 964,
- ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 965,
- ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 966,
- ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 967,
- ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 968,
- ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 969,
- ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 970,
- ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 971,
- ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 972,
- ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 973,
- ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 974,
- ERR_PETBATTLE_QUEUE_SLOT_DEAD = 975,
- ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 976,
- ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 977,
- ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 978,
- ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 979,
- ERR_HAS_RESTRICTION = 980,
- ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 981,
- ERR_ITEM_UPGRADE_NO_PATH = 982,
- ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 983,
- ERR_BONUS_ROLL_EMPTY = 984,
- ERR_CHALLENGE_MODE_FULL = 985,
- ERR_CHALLENGE_MODE_IN_PROGRESS = 986,
- ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 987,
- ERR_BATTLETAG_FRIEND_NOT_FOUND = 988,
- ERR_BATTLETAG_FRIEND_NOT_VALID = 989,
- ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 990,
- ERR_BATTLETAG_FRIEND_THROTTLED = 991,
- ERR_BATTLETAG_FRIEND_SUCCESS = 992,
- ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 993,
- ERR_PETBATTLE_INTERNAL = 994,
- ERR_CANT_CAGE_PET_YET = 995,
- ERR_NO_LOOT_IN_CHALLENGE_MODE = 996,
- ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 997,
- ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 998,
- ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 999,
- ERR_RECRUIT_A_FRIEND_FAILED = 1000,
- ERR_SET_LOOT_PERSONAL = 1001,
- ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1002,
- ERR_REAGENT_BANK_FULL = 1003,
- ERR_REAGENT_BANK_LOCKED = 1004,
- ERR_GARRISON_BUILDING_EXISTS = 1005,
- ERR_GARRISON_INVALID_PLOT = 1006,
- ERR_GARRISON_INVALID_BUILDINGID = 1007,
- ERR_GARRISON_INVALID_PLOT_BUILDING = 1008,
- ERR_GARRISON_REQUIRES_BLUEPRINT = 1009,
- ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1010,
- ERR_GARRISON_NOT_ENOUGH_GOLD = 1011,
- ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1012,
- ERR_ALREADY_USING_LFG_LIST = 1013,
- ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1014,
- ERR_TOY_USE_LIMIT_REACHED = 1015,
- ERR_TOY_ALREADY_KNOWN = 1016,
- ERR_TRANSMOG_SET_ALREADY_KNOWN = 1017,
- ERR_NOT_ENOUGH_CURRENCY = 1018,
- ERR_SPEC_IS_DISABLED = 1019,
- ERR_FEATURE_RESTRICTED_TRIAL = 1020,
- ERR_CANT_BE_OBLITERATED = 1021,
- ERR_CANT_BE_SCRAPPED = 1022,
- ERR_CANT_BE_RECRAFTED = 1023,
- ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1024,
- ERR_MUST_EQUIP_ARTIFACT = 1025,
- ERR_CANT_DO_THAT_RIGHT_NOW = 1026,
- ERR_AFFECTING_COMBAT = 1027,
- ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1028,
- ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1029,
- ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1030,
- ERR_MOVIE_RECORDING_WARNING_PERF = 1031,
- ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1032,
- ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1033,
- ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1034,
- ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1035,
- ERR_NO_CHALLENGE_MODE_REWARD = 1036,
- ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1037,
- ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1038,
- ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1039,
- ERR_TALENT_FAILED_REST_AREA = 1040,
- ERR_CANNOT_ABANDON_LAST_PET = 1041,
- ERR_TEST_CVAR_SET_SSS = 1042,
- ERR_QUEST_TURN_IN_FAIL_REASON = 1043,
- ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1044,
- ERR_TALENT_GRANTED_BY_AURA = 1045,
- ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1046,
- ERR_GLYPH_TARGET_NOT_AVAILABLE = 1047,
- ERR_PVP_WARMODE_TOGGLE_ON = 1048,
- ERR_PVP_WARMODE_TOGGLE_OFF = 1049,
- ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1050,
- ERR_SPELL_FAILED_CANT_FLY_HERE = 1051,
- ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1052,
- ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1053,
- ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1054,
- ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1055,
- ERR_VOICE_CHAT_SERVICE_LOST = 1056,
- ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1057,
- ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1058,
- ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1059,
- ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1060,
- ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1061,
- ERR_VOICE_CHAT_PLAYER_SILENCED = 1062,
- ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1063,
- ERR_VOICE_CHAT_DISABLED = 1064,
- ERR_NO_PVP_REWARD = 1065,
- ERR_CLAIMED_PVP_REWARD = 1066,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1067,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1068,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1069,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1070,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1071,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1072,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1073,
- ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1074,
- ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1075,
- ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1076,
- ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1077,
- ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1078,
- ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1079,
- ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1080,
- ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1081,
- ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1082,
- ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1083,
- ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1084,
- ERR_SOCKETING_REQUIRES_TINKER_GEM = 1085,
- ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1086,
- ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1087,
- ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1088,
- ERR_LEVEL_LINKING_RESULT_LINKED = 1089,
- ERR_LEVEL_LINKING_RESULT_UNLINKED = 1090,
- ERR_CLUB_FINDER_ERROR_POST_CLUB = 1091,
- ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1092,
- ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1093,
- ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1094,
- ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1095,
- ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1096,
- ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1097,
- ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1098,
- ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1099,
- ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1100,
- ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1101,
- ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1102,
- ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1103,
- ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1104,
- ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1105,
- ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1106,
- ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1107,
- ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1108,
- ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1109,
- ERR_SOULBIND_INVALID_CONDUIT = 1110,
- ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1111,
- ERR_SOULBIND_INVALID_TALENT = 1112,
- ERR_SOULBIND_DUPLICATE_CONDUIT = 1113,
- ERR_ACTIVATE_SOULBIND_S = 1114,
- ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1115,
- ERR_CANT_USE_PROFANITY = 1116,
- ERR_NOT_IN_PET_BATTLE = 1117,
- ERR_NOT_IN_NPE = 1118,
- ERR_NO_SPEC = 1119,
- ERR_NO_DOMINATIONSHARD_OVERWRITE = 1120,
- ERR_USE_WEEKLY_REWARDS_DISABLED = 1121,
- ERR_CROSS_FACTION_GROUP_JOINED = 1122,
- ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1123,
- ERR_EQUIPABLESPELLS_SLOTS_FULL = 1124,
- ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1125,
- ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1126,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1127,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1128,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1129,
- ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1130,
- ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1131,
- ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1132,
- ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1133,
- ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1134,
- ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1135,
- ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1136,
- ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1137,
- ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1138,
+ ERR_NO_ACCOUNT_BANK_HERE = 38,
+ ERR_ITEM_LOCKED = 39,
+ ERR_2HANDED_EQUIPPED = 40,
+ ERR_VENDOR_NOT_INTERESTED = 41,
+ ERR_VENDOR_REFUSE_SCRAPPABLE_AZERITE = 42,
+ ERR_VENDOR_HATES_YOU = 43,
+ ERR_VENDOR_SOLD_OUT = 44,
+ ERR_VENDOR_TOO_FAR = 45,
+ ERR_VENDOR_DOESNT_BUY = 46,
+ ERR_NOT_ENOUGH_MONEY = 47,
+ ERR_RECEIVE_ITEM_S = 48,
+ ERR_DROP_BOUND_ITEM = 49,
+ ERR_TRADE_BOUND_ITEM = 50,
+ ERR_TRADE_QUEST_ITEM = 51,
+ ERR_TRADE_TEMP_ENCHANT_BOUND = 52,
+ ERR_TRADE_GROUND_ITEM = 53,
+ ERR_TRADE_BAG = 54,
+ ERR_TRADE_FACTION_SPECIFIC = 55,
+ ERR_SPELL_FAILED_S = 56,
+ ERR_ITEM_COOLDOWN = 57,
+ ERR_POTION_COOLDOWN = 58,
+ ERR_FOOD_COOLDOWN = 59,
+ ERR_SPELL_COOLDOWN = 60,
+ ERR_ABILITY_COOLDOWN = 61,
+ ERR_SPELL_ALREADY_KNOWN_S = 62,
+ ERR_PET_SPELL_ALREADY_KNOWN_S = 63,
+ ERR_PROFICIENCY_GAINED_S = 64,
+ ERR_SKILL_GAINED_S = 65,
+ ERR_SKILL_UP_SI = 66,
+ ERR_LEARN_SPELL_S = 67,
+ ERR_LEARN_ABILITY_S = 68,
+ ERR_LEARN_PASSIVE_S = 69,
+ ERR_LEARN_RECIPE_S = 70,
+ ERR_PROFESSIONS_RECIPE_DISCOVERY_S = 71,
+ ERR_LEARN_COMPANION_S = 72,
+ ERR_LEARN_MOUNT_S = 73,
+ ERR_LEARN_TOY_S = 74,
+ ERR_LEARN_HEIRLOOM_S = 75,
+ ERR_LEARN_TRANSMOG_S = 76,
+ ERR_COMPLETED_TRANSMOG_SET_S = 77,
+ ERR_APPEARANCE_ALREADY_LEARNED = 78,
+ ERR_REVOKE_TRANSMOG_S = 79,
+ ERR_INVITE_PLAYER_S = 80,
+ ERR_SUGGEST_INVITE_PLAYER_S = 81,
+ ERR_INFORM_SUGGEST_INVITE_S = 82,
+ ERR_INFORM_SUGGEST_INVITE_SS = 83,
+ ERR_REQUEST_JOIN_PLAYER_S = 84,
+ ERR_INVITE_SELF = 85,
+ ERR_INVITED_TO_GROUP_SS = 86,
+ ERR_INVITED_ALREADY_IN_GROUP_SS = 87,
+ ERR_ALREADY_IN_GROUP_S = 88,
+ ERR_REQUESTED_INVITE_TO_GROUP_SS = 89,
+ ERR_CROSS_REALM_RAID_INVITE = 90,
+ ERR_PLAYER_BUSY_S = 91,
+ ERR_NEW_LEADER_S = 92,
+ ERR_NEW_LEADER_YOU = 93,
+ ERR_NEW_GUIDE_S = 94,
+ ERR_NEW_GUIDE_YOU = 95,
+ ERR_LEFT_GROUP_S = 96,
+ ERR_LEFT_GROUP_YOU = 97,
+ ERR_GROUP_DISBANDED = 98,
+ ERR_DECLINE_GROUP_S = 99,
+ ERR_DECLINE_GROUP_REQUEST_S = 100,
+ ERR_JOINED_GROUP_S = 101,
+ ERR_UNINVITE_YOU = 102,
+ ERR_BAD_PLAYER_NAME_S = 103,
+ ERR_NOT_IN_GROUP = 104,
+ ERR_TARGET_NOT_IN_GROUP_S = 105,
+ ERR_TARGET_NOT_IN_INSTANCE_S = 106,
+ ERR_NOT_IN_INSTANCE_GROUP = 107,
+ ERR_GROUP_FULL = 108,
+ ERR_NOT_LEADER = 109,
+ ERR_PLAYER_DIED_S = 110,
+ ERR_GUILD_CREATE_S = 111,
+ ERR_GUILD_INVITE_S = 112,
+ ERR_INVITED_TO_GUILD_SSS = 113,
+ ERR_ALREADY_IN_GUILD_S = 114,
+ ERR_ALREADY_INVITED_TO_GUILD_S = 115,
+ ERR_INVITED_TO_GUILD = 116,
+ ERR_ALREADY_IN_GUILD = 117,
+ ERR_GUILD_ACCEPT = 118,
+ ERR_GUILD_DECLINE_S = 119,
+ ERR_GUILD_DECLINE_AUTO_S = 120,
+ ERR_GUILD_PERMISSIONS = 121,
+ ERR_GUILD_JOIN_S = 122,
+ ERR_GUILD_FOUNDER_S = 123,
+ ERR_GUILD_PROMOTE_SSS = 124,
+ ERR_GUILD_DEMOTE_SS = 125,
+ ERR_GUILD_DEMOTE_SSS = 126,
+ ERR_GUILD_INVITE_SELF = 127,
+ ERR_GUILD_QUIT_S = 128,
+ ERR_GUILD_LEAVE_S = 129,
+ ERR_GUILD_REMOVE_SS = 130,
+ ERR_GUILD_REMOVE_SELF = 131,
+ ERR_GUILD_DISBAND_S = 132,
+ ERR_GUILD_DISBAND_SELF = 133,
+ ERR_GUILD_LEADER_S = 134,
+ ERR_GUILD_LEADER_SELF = 135,
+ ERR_GUILD_PLAYER_NOT_FOUND_S = 136,
+ ERR_GUILD_PLAYER_NOT_IN_GUILD_S = 137,
+ ERR_GUILD_PLAYER_NOT_IN_GUILD = 138,
+ ERR_GUILD_BANK_NOT_AVAILABLE = 139,
+ ERR_GUILD_CANT_PROMOTE_S = 140,
+ ERR_GUILD_CANT_DEMOTE_S = 141,
+ ERR_GUILD_NOT_IN_A_GUILD = 142,
+ ERR_GUILD_INTERNAL = 143,
+ ERR_GUILD_LEADER_IS_S = 144,
+ ERR_GUILD_LEADER_CHANGED_SS = 145,
+ ERR_GUILD_DISBANDED = 146,
+ ERR_GUILD_NOT_ALLIED = 147,
+ ERR_GUILD_NEW_LEADER_NOT_ALLIED = 148,
+ ERR_GUILD_LEADER_LEAVE = 149,
+ ERR_GUILD_RANKS_LOCKED = 150,
+ ERR_GUILD_RANK_IN_USE = 151,
+ ERR_GUILD_RANK_TOO_HIGH_S = 152,
+ ERR_GUILD_RANK_TOO_LOW_S = 153,
+ ERR_GUILD_NAME_EXISTS_S = 154,
+ ERR_GUILD_WITHDRAW_LIMIT = 155,
+ ERR_GUILD_NOT_ENOUGH_MONEY = 156,
+ ERR_GUILD_TOO_MUCH_MONEY = 157,
+ ERR_GUILD_BANK_CONJURED_ITEM = 158,
+ ERR_GUILD_BANK_EQUIPPED_ITEM = 159,
+ ERR_GUILD_BANK_BOUND_ITEM = 160,
+ ERR_GUILD_BANK_QUEST_ITEM = 161,
+ ERR_GUILD_BANK_WRAPPED_ITEM = 162,
+ ERR_GUILD_BANK_FULL = 163,
+ ERR_GUILD_BANK_WRONG_TAB = 164,
+ ERR_GUILD_NEW_LEADER_WRONG_REALM = 165,
+ ERR_NO_GUILD_CHARTER = 166,
+ ERR_OUT_OF_RANGE = 167,
+ ERR_PLAYER_DEAD = 168,
+ ERR_CLIENT_LOCKED_OUT = 169,
+ ERR_CLIENT_ON_TRANSPORT = 170,
+ ERR_KILLED_BY_S = 171,
+ ERR_LOOT_LOCKED = 172,
+ ERR_LOOT_TOO_FAR = 173,
+ ERR_LOOT_DIDNT_KILL = 174,
+ ERR_LOOT_BAD_FACING = 175,
+ ERR_LOOT_NOTSTANDING = 176,
+ ERR_LOOT_STUNNED = 177,
+ ERR_LOOT_NO_UI = 178,
+ ERR_LOOT_WHILE_INVULNERABLE = 179,
+ ERR_NO_LOOT = 180,
+ ERR_QUEST_ACCEPTED_S = 181,
+ ERR_QUEST_COMPLETE_S = 182,
+ ERR_QUEST_FAILED_S = 183,
+ ERR_QUEST_FAILED_BAG_FULL_S = 184,
+ ERR_QUEST_FAILED_MAX_COUNT_S = 185,
+ ERR_QUEST_FAILED_LOW_LEVEL = 186,
+ ERR_QUEST_FAILED_MISSING_ITEMS = 187,
+ ERR_QUEST_FAILED_WRONG_RACE = 188,
+ ERR_QUEST_FAILED_NOT_ENOUGH_MONEY = 189,
+ ERR_QUEST_FAILED_EXPANSION = 190,
+ ERR_QUEST_ONLY_ONE_TIMED = 191,
+ ERR_QUEST_NEED_PREREQS = 192,
+ ERR_QUEST_NEED_PREREQS_CUSTOM = 193,
+ ERR_QUEST_ALREADY_ON = 194,
+ ERR_QUEST_ALREADY_DONE = 195,
+ ERR_QUEST_ALREADY_DONE_DAILY = 196,
+ ERR_QUEST_HAS_IN_PROGRESS = 197,
+ ERR_QUEST_REWARD_EXP_I = 198,
+ ERR_QUEST_REWARD_MONEY_S = 199,
+ ERR_QUEST_MUST_CHOOSE = 200,
+ ERR_QUEST_LOG_FULL = 201,
+ ERR_COMBAT_DAMAGE_SSI = 202,
+ ERR_INSPECT_S = 203,
+ ERR_CANT_USE_ITEM = 204,
+ ERR_CANT_USE_ITEM_IN_ARENA = 205,
+ ERR_CANT_USE_ITEM_IN_RATED_BATTLEGROUND = 206,
+ ERR_MUST_EQUIP_ITEM = 207,
+ ERR_PASSIVE_ABILITY = 208,
+ ERR_2HSKILLNOTFOUND = 209,
+ ERR_NO_ATTACK_TARGET = 210,
+ ERR_INVALID_ATTACK_TARGET = 211,
+ ERR_ATTACK_PVP_TARGET_WHILE_UNFLAGGED = 212,
+ ERR_ATTACK_STUNNED = 213,
+ ERR_ATTACK_PACIFIED = 214,
+ ERR_ATTACK_MOUNTED = 215,
+ ERR_ATTACK_FLEEING = 216,
+ ERR_ATTACK_CONFUSED = 217,
+ ERR_ATTACK_CHARMED = 218,
+ ERR_ATTACK_DEAD = 219,
+ ERR_ATTACK_PREVENTED_BY_MECHANIC_S = 220,
+ ERR_ATTACK_CHANNEL = 221,
+ ERR_TAXISAMENODE = 222,
+ ERR_TAXINOSUCHPATH = 223,
+ ERR_TAXIUNSPECIFIEDSERVERERROR = 224,
+ ERR_TAXINOTENOUGHMONEY = 225,
+ ERR_TAXITOOFARAWAY = 226,
+ ERR_TAXINOVENDORNEARBY = 227,
+ ERR_TAXINOTVISITED = 228,
+ ERR_TAXIPLAYERBUSY = 229,
+ ERR_TAXIPLAYERALREADYMOUNTED = 230,
+ ERR_TAXIPLAYERSHAPESHIFTED = 231,
+ ERR_TAXIPLAYERMOVING = 232,
+ ERR_TAXINOPATHS = 233,
+ ERR_TAXINOTELIGIBLE = 234,
+ ERR_TAXINOTSTANDING = 235,
+ ERR_TAXIINCOMBAT = 236,
+ ERR_NO_REPLY_TARGET = 237,
+ ERR_GENERIC_NO_TARGET = 238,
+ ERR_INITIATE_TRADE_S = 239,
+ ERR_TRADE_REQUEST_S = 240,
+ ERR_TRADE_BLOCKED_S = 241,
+ ERR_TRADE_TARGET_DEAD = 242,
+ ERR_TRADE_TOO_FAR = 243,
+ ERR_TRADE_CANCELLED = 244,
+ ERR_TRADE_COMPLETE = 245,
+ ERR_TRADE_BAG_FULL = 246,
+ ERR_TRADE_TARGET_BAG_FULL = 247,
+ ERR_TRADE_MAX_COUNT_EXCEEDED = 248,
+ ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED = 249,
+ ERR_INVENTORY_TRADE_TOO_MANY_UNIQUE_ITEM = 250,
+ ERR_ALREADY_TRADING = 251,
+ ERR_MOUNT_INVALIDMOUNTEE = 252,
+ ERR_MOUNT_TOOFARAWAY = 253,
+ ERR_MOUNT_ALREADYMOUNTED = 254,
+ ERR_MOUNT_NOTMOUNTABLE = 255,
+ ERR_MOUNT_NOTYOURPET = 256,
+ ERR_MOUNT_OTHER = 257,
+ ERR_MOUNT_LOOTING = 258,
+ ERR_MOUNT_RACECANTMOUNT = 259,
+ ERR_MOUNT_SHAPESHIFTED = 260,
+ ERR_MOUNT_NO_FAVORITES = 261,
+ ERR_MOUNT_NO_MOUNTS = 262,
+ ERR_DISMOUNT_NOPET = 263,
+ ERR_DISMOUNT_NOTMOUNTED = 264,
+ ERR_DISMOUNT_NOTYOURPET = 265,
+ ERR_SPELL_FAILED_TOTEMS = 266,
+ ERR_SPELL_FAILED_REAGENTS = 267,
+ ERR_SPELL_FAILED_REAGENTS_GENERIC = 268,
+ ERR_SPELL_FAILED_OPTIONAL_REAGENTS = 269,
+ ERR_CANT_TRADE_GOLD = 270,
+ ERR_SPELL_FAILED_EQUIPPED_ITEM = 271,
+ ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S = 272,
+ ERR_SPELL_FAILED_SHAPESHIFT_FORM_S = 273,
+ ERR_SPELL_FAILED_ANOTHER_IN_PROGRESS = 274,
+ ERR_BADATTACKFACING = 275,
+ ERR_BADATTACKPOS = 276,
+ ERR_CHEST_IN_USE = 277,
+ ERR_USE_CANT_OPEN = 278,
+ ERR_USE_LOCKED = 279,
+ ERR_DOOR_LOCKED = 280,
+ ERR_BUTTON_LOCKED = 281,
+ ERR_USE_LOCKED_WITH_ITEM_S = 282,
+ ERR_USE_LOCKED_WITH_SPELL_S = 283,
+ ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI = 284,
+ ERR_USE_TOO_FAR = 285,
+ ERR_USE_BAD_ANGLE = 286,
+ ERR_USE_OBJECT_MOVING = 287,
+ ERR_USE_SPELL_FOCUS = 288,
+ ERR_USE_DESTROYED = 289,
+ ERR_SET_LOOT_FREEFORALL = 290,
+ ERR_SET_LOOT_ROUNDROBIN = 291,
+ ERR_SET_LOOT_MASTER = 292,
+ ERR_SET_LOOT_GROUP = 293,
+ ERR_SET_LOOT_THRESHOLD_S = 294,
+ ERR_NEW_LOOT_MASTER_S = 295,
+ ERR_SPECIFY_MASTER_LOOTER = 296,
+ ERR_LOOT_SPEC_CHANGED_S = 297,
+ ERR_TAME_FAILED = 298,
+ ERR_CHAT_WHILE_DEAD = 299,
+ ERR_CHAT_PLAYER_NOT_FOUND_S = 300,
+ ERR_NEWTAXIPATH = 301,
+ ERR_NO_PET = 302,
+ ERR_NOTYOURPET = 303,
+ ERR_PET_NOT_RENAMEABLE = 304,
+ ERR_QUEST_OBJECTIVE_COMPLETE_S = 305,
+ ERR_QUEST_UNKNOWN_COMPLETE = 306,
+ ERR_QUEST_ADD_KILL_SII = 307,
+ ERR_QUEST_ADD_FOUND_SII = 308,
+ ERR_QUEST_ADD_ITEM_SII = 309,
+ ERR_QUEST_ADD_PLAYER_KILL_SII = 310,
+ ERR_CANNOTCREATEDIRECTORY = 311,
+ ERR_CANNOTCREATEFILE = 312,
+ ERR_PLAYER_WRONG_FACTION = 313,
+ ERR_PLAYER_IS_NEUTRAL = 314,
+ ERR_BANKSLOT_FAILED_TOO_MANY = 315,
+ ERR_BANKSLOT_INSUFFICIENT_FUNDS = 316,
+ ERR_BANKSLOT_NOTBANKER = 317,
+ ERR_FRIEND_DB_ERROR = 318,
+ ERR_FRIEND_LIST_FULL = 319,
+ ERR_FRIEND_ADDED_S = 320,
+ ERR_BATTLETAG_FRIEND_ADDED_S = 321,
+ ERR_FRIEND_ONLINE_SS = 322,
+ ERR_FRIEND_OFFLINE_S = 323,
+ ERR_FRIEND_NOT_FOUND = 324,
+ ERR_FRIEND_WRONG_FACTION = 325,
+ ERR_FRIEND_REMOVED_S = 326,
+ ERR_BATTLETAG_FRIEND_REMOVED_S = 327,
+ ERR_FRIEND_ERROR = 328,
+ ERR_FRIEND_ALREADY_S = 329,
+ ERR_FRIEND_SELF = 330,
+ ERR_FRIEND_DELETED = 331,
+ ERR_IGNORE_FULL = 332,
+ ERR_IGNORE_SELF = 333,
+ ERR_IGNORE_NOT_FOUND = 334,
+ ERR_IGNORE_ALREADY_S = 335,
+ ERR_IGNORE_ADDED_S = 336,
+ ERR_IGNORE_REMOVED_S = 337,
+ ERR_IGNORE_AMBIGUOUS = 338,
+ ERR_IGNORE_DELETED = 339,
+ ERR_ONLY_ONE_BOLT = 340,
+ ERR_ONLY_ONE_AMMO = 341,
+ ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 342,
+ ERR_WRONG_BAG_TYPE_SUBCLASS = 343,
+ ERR_CANT_WRAP_STACKABLE = 344,
+ ERR_CANT_WRAP_EQUIPPED = 345,
+ ERR_CANT_WRAP_WRAPPED = 346,
+ ERR_CANT_WRAP_BOUND = 347,
+ ERR_CANT_WRAP_UNIQUE = 348,
+ ERR_CANT_WRAP_BAGS = 349,
+ ERR_OUT_OF_MANA = 350,
+ ERR_OUT_OF_RAGE = 351,
+ ERR_OUT_OF_FOCUS = 352,
+ ERR_OUT_OF_ENERGY = 353,
+ ERR_OUT_OF_CHI = 354,
+ ERR_OUT_OF_HEALTH = 355,
+ ERR_OUT_OF_RUNES = 356,
+ ERR_OUT_OF_RUNIC_POWER = 357,
+ ERR_OUT_OF_SOUL_SHARDS = 358,
+ ERR_OUT_OF_LUNAR_POWER = 359,
+ ERR_OUT_OF_HOLY_POWER = 360,
+ ERR_OUT_OF_MAELSTROM = 361,
+ ERR_OUT_OF_COMBO_POINTS = 362,
+ ERR_OUT_OF_INSANITY = 363,
+ ERR_OUT_OF_ESSENCE = 364,
+ ERR_OUT_OF_ARCANE_CHARGES = 365,
+ ERR_OUT_OF_FURY = 366,
+ ERR_OUT_OF_PAIN = 367,
+ ERR_OUT_OF_POWER_DISPLAY = 368,
+ ERR_LOOT_GONE = 369,
+ ERR_MOUNT_FORCEDDISMOUNT = 370,
+ ERR_AUTOFOLLOW_TOO_FAR = 371,
+ ERR_UNIT_NOT_FOUND = 372,
+ ERR_INVALID_FOLLOW_TARGET = 373,
+ ERR_INVALID_FOLLOW_PVP_COMBAT = 374,
+ ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 375,
+ ERR_INVALID_INSPECT_TARGET = 376,
+ ERR_GUILDEMBLEM_SUCCESS = 377,
+ ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 378,
+ ERR_GUILDEMBLEM_NOGUILD = 379,
+ ERR_GUILDEMBLEM_NOTGUILDMASTER = 380,
+ ERR_GUILDEMBLEM_NOTENOUGHMONEY = 381,
+ ERR_GUILDEMBLEM_INVALIDVENDOR = 382,
+ ERR_EMBLEMERROR_NOTABARDGEOSET = 383,
+ ERR_SPELL_OUT_OF_RANGE = 384,
+ ERR_COMMAND_NEEDS_TARGET = 385,
+ ERR_NOAMMO_S = 386,
+ ERR_TOOBUSYTOFOLLOW = 387,
+ ERR_DUEL_REQUESTED = 388,
+ ERR_DUEL_CANCELLED = 389,
+ ERR_DEATHBINDALREADYBOUND = 390,
+ ERR_DEATHBIND_SUCCESS_S = 391,
+ ERR_NOEMOTEWHILERUNNING = 392,
+ ERR_ZONE_EXPLORED = 393,
+ ERR_ZONE_EXPLORED_XP = 394,
+ ERR_INVALID_ITEM_TARGET = 395,
+ ERR_INVALID_QUEST_TARGET = 396,
+ ERR_IGNORING_YOU_S = 397,
+ ERR_FISH_NOT_HOOKED = 398,
+ ERR_FISH_ESCAPED = 399,
+ ERR_SPELL_FAILED_NOTUNSHEATHED = 400,
+ ERR_PETITION_OFFERED_S = 401,
+ ERR_PETITION_SIGNED = 402,
+ ERR_PETITION_SIGNED_S = 403,
+ ERR_PETITION_DECLINED_S = 404,
+ ERR_PETITION_ALREADY_SIGNED = 405,
+ ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 406,
+ ERR_PETITION_ALREADY_SIGNED_OTHER = 407,
+ ERR_PETITION_IN_GUILD = 408,
+ ERR_PETITION_CREATOR = 409,
+ ERR_PETITION_NOT_ENOUGH_SIGNATURES = 410,
+ ERR_PETITION_NOT_SAME_SERVER = 411,
+ ERR_PETITION_FULL = 412,
+ ERR_PETITION_ALREADY_SIGNED_BY_S = 413,
+ ERR_GUILD_NAME_INVALID = 414,
+ ERR_SPELL_UNLEARNED_S = 415,
+ ERR_PET_SPELL_ROOTED = 416,
+ ERR_PET_SPELL_AFFECTING_COMBAT = 417,
+ ERR_PET_SPELL_OUT_OF_RANGE = 418,
+ ERR_PET_SPELL_NOT_BEHIND = 419,
+ ERR_PET_SPELL_TARGETS_DEAD = 420,
+ ERR_PET_SPELL_DEAD = 421,
+ ERR_PET_SPELL_NOPATH = 422,
+ ERR_ITEM_CANT_BE_DESTROYED = 423,
+ ERR_TICKET_ALREADY_EXISTS = 424,
+ ERR_TICKET_CREATE_ERROR = 425,
+ ERR_TICKET_UPDATE_ERROR = 426,
+ ERR_TICKET_DB_ERROR = 427,
+ ERR_TICKET_NO_TEXT = 428,
+ ERR_TICKET_TEXT_TOO_LONG = 429,
+ ERR_OBJECT_IS_BUSY = 430,
+ ERR_EXHAUSTION_WELLRESTED = 431,
+ ERR_EXHAUSTION_RESTED = 432,
+ ERR_EXHAUSTION_NORMAL = 433,
+ ERR_EXHAUSTION_TIRED = 434,
+ ERR_EXHAUSTION_EXHAUSTED = 435,
+ ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 436,
+ ERR_CANT_INTERACT_SHAPESHIFTED = 437,
+ ERR_REALM_NOT_FOUND = 438,
+ ERR_MAIL_QUEST_ITEM = 439,
+ ERR_MAIL_BOUND_ITEM = 440,
+ ERR_MAIL_CONJURED_ITEM = 441,
+ ERR_MAIL_BAG = 442,
+ ERR_MAIL_TO_SELF = 443,
+ ERR_MAIL_TARGET_NOT_FOUND = 444,
+ ERR_MAIL_DATABASE_ERROR = 445,
+ ERR_MAIL_DELETE_ITEM_ERROR = 446,
+ ERR_MAIL_WRAPPED_COD = 447,
+ ERR_MAIL_CANT_SEND_REALM = 448,
+ ERR_MAIL_TEMP_RETURN_OUTAGE = 449,
+ ERR_MAIL_RECEPIENT_CANT_RECEIVE_MAIL = 450,
+ ERR_MAIL_SENT = 451,
+ ERR_MAIL_TARGET_IS_TRIAL = 452,
+ ERR_NOT_HAPPY_ENOUGH = 453,
+ ERR_USE_CANT_IMMUNE = 454,
+ ERR_CANT_BE_DISENCHANTED = 455,
+ ERR_CANT_USE_DISARMED = 456,
+ ERR_AUCTION_DATABASE_ERROR = 457,
+ ERR_AUCTION_HIGHER_BID = 458,
+ ERR_AUCTION_ALREADY_BID = 459,
+ ERR_AUCTION_OUTBID_S = 460,
+ ERR_AUCTION_WON_S = 461,
+ ERR_AUCTION_REMOVED_S = 462,
+ ERR_AUCTION_BID_PLACED = 463,
+ ERR_LOGOUT_FAILED = 464,
+ ERR_QUEST_PUSH_SUCCESS_S = 465,
+ ERR_QUEST_PUSH_INVALID_S = 466,
+ ERR_QUEST_PUSH_INVALID_TO_RECIPIENT_S = 467,
+ ERR_QUEST_PUSH_ACCEPTED_S = 468,
+ ERR_QUEST_PUSH_DECLINED_S = 469,
+ ERR_QUEST_PUSH_BUSY_S = 470,
+ ERR_QUEST_PUSH_DEAD_S = 471,
+ ERR_QUEST_PUSH_DEAD_TO_RECIPIENT_S = 472,
+ ERR_QUEST_PUSH_LOG_FULL_S = 473,
+ ERR_QUEST_PUSH_LOG_FULL_TO_RECIPIENT_S = 474,
+ ERR_QUEST_PUSH_ONQUEST_S = 475,
+ ERR_QUEST_PUSH_ONQUEST_TO_RECIPIENT_S = 476,
+ ERR_QUEST_PUSH_ALREADY_DONE_S = 477,
+ ERR_QUEST_PUSH_ALREADY_DONE_TO_RECIPIENT_S = 478,
+ ERR_QUEST_PUSH_NOT_DAILY_S = 479,
+ ERR_QUEST_PUSH_TIMER_EXPIRED_S = 480,
+ ERR_QUEST_PUSH_NOT_IN_PARTY_S = 481,
+ ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 482,
+ ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_TO_RECIPIENT_S = 483,
+ ERR_QUEST_PUSH_NOT_ALLOWED_S = 484,
+ ERR_QUEST_PUSH_PREREQUISITE_S = 485,
+ ERR_QUEST_PUSH_PREREQUISITE_TO_RECIPIENT_S = 486,
+ ERR_QUEST_PUSH_LOW_LEVEL_S = 487,
+ ERR_QUEST_PUSH_LOW_LEVEL_TO_RECIPIENT_S = 488,
+ ERR_QUEST_PUSH_HIGH_LEVEL_S = 489,
+ ERR_QUEST_PUSH_HIGH_LEVEL_TO_RECIPIENT_S = 490,
+ ERR_QUEST_PUSH_CLASS_S = 491,
+ ERR_QUEST_PUSH_CLASS_TO_RECIPIENT_S = 492,
+ ERR_QUEST_PUSH_RACE_S = 493,
+ ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 494,
+ ERR_QUEST_PUSH_LOW_FACTION_S = 495,
+ ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 496,
+ ERR_QUEST_PUSH_HIGH_FACTION_S = 497,
+ ERR_QUEST_PUSH_HIGH_FACTION_TO_RECIPIENT_S = 498,
+ ERR_QUEST_PUSH_EXPANSION_S = 499,
+ ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 500,
+ ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 501,
+ ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 502,
+ ERR_QUEST_PUSH_WRONG_COVENANT_S = 503,
+ ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 504,
+ ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 505,
+ ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 506,
+ ERR_QUEST_PUSH_WRONG_FACTION_S = 507,
+ ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 508,
+ ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 509,
+ ERR_RAID_GROUP_LOWLEVEL = 510,
+ ERR_RAID_GROUP_ONLY = 511,
+ ERR_RAID_GROUP_FULL = 512,
+ ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 513,
+ ERR_CORPSE_IS_NOT_IN_INSTANCE = 514,
+ ERR_PVP_KILL_HONORABLE = 515,
+ ERR_PVP_KILL_DISHONORABLE = 516,
+ ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 517,
+ ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 518,
+ ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 519,
+ ERR_AUTOLOOT_MONEY_S = 520,
+ ERR_GENERIC_STUNNED = 521,
+ ERR_GENERIC_THROTTLE = 522,
+ ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 523,
+ ERR_TARGET_STUNNED = 524,
+ ERR_MUST_REPAIR_DURABILITY = 525,
+ ERR_RAID_YOU_JOINED = 526,
+ ERR_RAID_YOU_LEFT = 527,
+ ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 528,
+ ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 529,
+ ERR_RAID_MEMBER_ADDED_S = 530,
+ ERR_RAID_MEMBER_REMOVED_S = 531,
+ ERR_INSTANCE_GROUP_ADDED_S = 532,
+ ERR_INSTANCE_GROUP_REMOVED_S = 533,
+ ERR_CLICK_ON_ITEM_TO_FEED = 534,
+ ERR_TOO_MANY_CHAT_CHANNELS = 535,
+ ERR_LOOT_ROLL_PENDING = 536,
+ ERR_LOOT_PLAYER_NOT_FOUND = 537,
+ ERR_NOT_IN_RAID = 538,
+ ERR_LOGGING_OUT = 539,
+ ERR_TARGET_LOGGING_OUT = 540,
+ ERR_NOT_WHILE_MOUNTED = 541,
+ ERR_NOT_WHILE_SHAPESHIFTED = 542,
+ ERR_NOT_IN_COMBAT = 543,
+ ERR_NOT_WHILE_DISARMED = 544,
+ ERR_PET_BROKEN = 545,
+ ERR_TALENT_WIPE_ERROR = 546,
+ ERR_SPEC_WIPE_ERROR = 547,
+ ERR_GLYPH_WIPE_ERROR = 548,
+ ERR_PET_SPEC_WIPE_ERROR = 549,
+ ERR_FEIGN_DEATH_RESISTED = 550,
+ ERR_MEETING_STONE_IN_QUEUE_S = 551,
+ ERR_MEETING_STONE_LEFT_QUEUE_S = 552,
+ ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 553,
+ ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 554,
+ ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 555,
+ ERR_MEETING_STONE_SUCCESS = 556,
+ ERR_MEETING_STONE_IN_PROGRESS = 557,
+ ERR_MEETING_STONE_MEMBER_ADDED_S = 558,
+ ERR_MEETING_STONE_GROUP_FULL = 559,
+ ERR_MEETING_STONE_NOT_LEADER = 560,
+ ERR_MEETING_STONE_INVALID_LEVEL = 561,
+ ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 562,
+ ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 563,
+ ERR_MEETING_STONE_MUST_BE_LEADER = 564,
+ ERR_MEETING_STONE_NO_RAID_GROUP = 565,
+ ERR_MEETING_STONE_NEED_PARTY = 566,
+ ERR_MEETING_STONE_NOT_FOUND = 567,
+ ERR_MEETING_STONE_TARGET_IN_VEHICLE = 568,
+ ERR_GUILDEMBLEM_SAME = 569,
+ ERR_EQUIP_TRADE_ITEM = 570,
+ ERR_PVP_TOGGLE_ON = 571,
+ ERR_PVP_TOGGLE_OFF = 572,
+ ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 573,
+ ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 574,
+ ERR_GROUP_JOIN_BATTLEGROUND_S = 575,
+ ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 576,
+ ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 577,
+ ERR_SOLO_JOIN_BATTLEGROUND_S = 578,
+ ERR_JOIN_SINGLE_SCENARIO_S = 579,
+ ERR_BATTLEGROUND_TOO_MANY_QUEUES = 580,
+ ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 581,
+ ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 582,
+ ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 583,
+ ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 584,
+ ERR_ALREADY_IN_ARENA_TEAM_S = 585,
+ ERR_INVALID_PROMOTION_CODE = 586,
+ ERR_BG_PLAYER_JOINED_SS = 587,
+ ERR_BG_PLAYER_LEFT_S = 588,
+ ERR_RESTRICTED_ACCOUNT = 589,
+ ERR_RESTRICTED_ACCOUNT_TRIAL = 590,
+ ERR_NOT_ENOUGH_PURCHASED_GAME_TIME = 591,
+ ERR_PLAY_TIME_EXCEEDED = 592,
+ ERR_APPROACHING_PARTIAL_PLAY_TIME = 593,
+ ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 594,
+ ERR_APPROACHING_NO_PLAY_TIME = 595,
+ ERR_APPROACHING_NO_PLAY_TIME_2 = 596,
+ ERR_UNHEALTHY_TIME = 597,
+ ERR_CHAT_RESTRICTED_TRIAL = 598,
+ ERR_CHAT_THROTTLED = 599,
+ ERR_MAIL_REACHED_CAP = 600,
+ ERR_INVALID_RAID_TARGET = 601,
+ ERR_RAID_LEADER_READY_CHECK_START_S = 602,
+ ERR_READY_CHECK_IN_PROGRESS = 603,
+ ERR_READY_CHECK_THROTTLED = 604,
+ ERR_DUNGEON_DIFFICULTY_FAILED = 605,
+ ERR_DUNGEON_DIFFICULTY_CHANGED_S = 606,
+ ERR_TRADE_WRONG_REALM = 607,
+ ERR_TRADE_NOT_ON_TAPLIST = 608,
+ ERR_CHAT_PLAYER_AMBIGUOUS_S = 609,
+ ERR_LOOT_CANT_LOOT_THAT_NOW = 610,
+ ERR_LOOT_MASTER_INV_FULL = 611,
+ ERR_LOOT_MASTER_UNIQUE_ITEM = 612,
+ ERR_LOOT_MASTER_OTHER = 613,
+ ERR_FILTERING_YOU_S = 614,
+ ERR_USE_PREVENTED_BY_MECHANIC_S = 615,
+ ERR_ITEM_UNIQUE_EQUIPPABLE = 616,
+ ERR_LFG_LEADER_IS_LFM_S = 617,
+ ERR_LFG_PENDING = 618,
+ ERR_CANT_SPEAK_LANGAGE = 619,
+ ERR_VENDOR_MISSING_TURNINS = 620,
+ ERR_BATTLEGROUND_NOT_IN_TEAM = 621,
+ ERR_NOT_IN_BATTLEGROUND = 622,
+ ERR_NOT_ENOUGH_HONOR_POINTS = 623,
+ ERR_NOT_ENOUGH_ARENA_POINTS = 624,
+ ERR_SOCKETING_REQUIRES_META_GEM = 625,
+ ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 626,
+ ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 627,
+ ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 628,
+ ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 629,
+ ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 630,
+ ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 631,
+ ERR_ITEM_MAX_COUNT_SOCKETED = 632,
+ ERR_SYSTEM_DISABLED = 633,
+ ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 634,
+ ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 635,
+ ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 636,
+ ERR_USER_SQUELCHED = 637,
+ ERR_ACCOUNT_SILENCED = 638,
+ ERR_PARTY_MEMBER_SILENCED = 639,
+ ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 640,
+ ERR_TOO_MUCH_GOLD = 641,
+ ERR_NOT_BARBER_SITTING = 642,
+ ERR_QUEST_FAILED_CAIS = 643,
+ ERR_INVITE_RESTRICTED_TRIAL = 644,
+ ERR_VOICE_IGNORE_FULL = 645,
+ ERR_VOICE_IGNORE_SELF = 646,
+ ERR_VOICE_IGNORE_NOT_FOUND = 647,
+ ERR_VOICE_IGNORE_ALREADY_S = 648,
+ ERR_VOICE_IGNORE_ADDED_S = 649,
+ ERR_VOICE_IGNORE_REMOVED_S = 650,
+ ERR_VOICE_IGNORE_AMBIGUOUS = 651,
+ ERR_VOICE_IGNORE_DELETED = 652,
+ ERR_UNKNOWN_MACRO_OPTION_S = 653,
+ ERR_NOT_DURING_ARENA_MATCH = 654,
+ ERR_NOT_IN_RATED_BATTLEGROUND = 655,
+ ERR_PLAYER_SILENCED = 656,
+ ERR_PLAYER_UNSILENCED = 657,
+ ERR_COMSAT_DISCONNECT = 658,
+ ERR_COMSAT_RECONNECT_ATTEMPT = 659,
+ ERR_COMSAT_CONNECT_FAIL = 660,
+ ERR_MAIL_INVALID_ATTACHMENT_SLOT = 661,
+ ERR_MAIL_TOO_MANY_ATTACHMENTS = 662,
+ ERR_MAIL_INVALID_ATTACHMENT = 663,
+ ERR_MAIL_ATTACHMENT_EXPIRED = 664,
+ ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 665,
+ ERR_PROFANE_CHAT_NAME = 666,
+ ERR_PLAYER_SILENCED_ECHO = 667,
+ ERR_PLAYER_UNSILENCED_ECHO = 668,
+ ERR_LOOT_CANT_LOOT_THAT = 669,
+ ERR_ARENA_EXPIRED_CAIS = 670,
+ ERR_GROUP_ACTION_THROTTLED = 671,
+ ERR_ALREADY_PICKPOCKETED = 672,
+ ERR_NAME_INVALID = 673,
+ ERR_NAME_NO_NAME = 674,
+ ERR_NAME_TOO_SHORT = 675,
+ ERR_NAME_TOO_LONG = 676,
+ ERR_NAME_MIXED_LANGUAGES = 677,
+ ERR_NAME_PROFANE = 678,
+ ERR_NAME_RESERVED = 679,
+ ERR_NAME_THREE_CONSECUTIVE = 680,
+ ERR_NAME_INVALID_SPACE = 681,
+ ERR_NAME_CONSECUTIVE_SPACES = 682,
+ ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 683,
+ ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 684,
+ ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 685,
+ ERR_RECRUIT_A_FRIEND_NOT_LINKED = 686,
+ ERR_RECRUIT_A_FRIEND_NOT_NOW = 687,
+ ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 688,
+ ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 689,
+ ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 690,
+ ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 691,
+ ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 692,
+ ERR_NOT_SAME_ACCOUNT = 693,
+ ERR_BAD_ON_USE_ENCHANT = 694,
+ ERR_TRADE_SELF = 695,
+ ERR_TOO_MANY_SOCKETS = 696,
+ ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 697,
+ ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 698,
+ ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 699,
+ ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 700,
+ ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 701,
+ ERR_ITEM_INVENTORY_FULL_SATCHEL = 702,
+ ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 703,
+ ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 704,
+ ERR_PURCHASE_LEVEL_TOO_LOW = 705,
+ ERR_GROUP_SWAP_FAILED = 706,
+ ERR_INVITE_IN_COMBAT = 707,
+ ERR_INVALID_GLYPH_SLOT = 708,
+ ERR_GENERIC_NO_VALID_TARGETS = 709,
+ ERR_CALENDAR_EVENT_ALERT_S = 710,
+ ERR_PET_LEARN_SPELL_S = 711,
+ ERR_PET_LEARN_ABILITY_S = 712,
+ ERR_PET_SPELL_UNLEARNED_S = 713,
+ ERR_INVITE_UNKNOWN_REALM = 714,
+ ERR_INVITE_NO_PARTY_SERVER = 715,
+ ERR_INVITE_PARTY_BUSY = 716,
+ ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 717,
+ ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 718,
+ ERR_PARTY_TARGET_AMBIGUOUS = 719,
+ ERR_PARTY_LFG_INVITE_RAID_LOCKED = 720,
+ ERR_PARTY_LFG_BOOT_LIMIT = 721,
+ ERR_PARTY_LFG_BOOT_COOLDOWN_S = 722,
+ ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 723,
+ ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 724,
+ ERR_PARTY_LFG_BOOT_IN_PROGRESS = 725,
+ ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 726,
+ ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 727,
+ ERR_PARTY_LFG_BOOT_VOTE_FAILED = 728,
+ ERR_PARTY_LFG_BOOT_DISALLOWED_BY_MAP = 729,
+ ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 730,
+ ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 731,
+ ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 732,
+ ERR_PARTY_PRIVATE_GROUP_ONLY = 733,
+ ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 734,
+ ERR_PARTY_TIME_RUNNING_SEASON_ID_MUST_MATCH = 735,
+ ERR_RAID_DISALLOWED_BY_LEVEL = 736,
+ ERR_RAID_DISALLOWED_BY_CROSS_REALM = 737,
+ ERR_PARTY_ROLE_NOT_AVAILABLE = 738,
+ ERR_JOIN_LFG_OBJECT_FAILED = 739,
+ ERR_LFG_REMOVED_LEVELUP = 740,
+ ERR_LFG_REMOVED_XP_TOGGLE = 741,
+ ERR_LFG_REMOVED_FACTION_CHANGE = 742,
+ ERR_BATTLEGROUND_INFO_THROTTLED = 743,
+ ERR_BATTLEGROUND_ALREADY_IN = 744,
+ ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 745,
+ ERR_ARENA_TEAM_PERMISSIONS = 746,
+ ERR_NOT_WHILE_FALLING = 747,
+ ERR_NOT_WHILE_MOVING = 748,
+ ERR_NOT_WHILE_FATIGUED = 749,
+ ERR_MAX_SOCKETS = 750,
+ ERR_MULTI_CAST_ACTION_TOTEM_S = 751,
+ ERR_BATTLEGROUND_JOIN_LEVELUP = 752,
+ ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 753,
+ ERR_BATTLEGROUND_JOIN_XP_GAIN = 754,
+ ERR_BATTLEGROUND_JOIN_MERCENARY = 755,
+ ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 756,
+ ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 757,
+ ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 758,
+ ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 759,
+ ERR_RAID_DIFFICULTY_FAILED = 760,
+ ERR_RAID_DIFFICULTY_CHANGED_S = 761,
+ ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 762,
+ ERR_RAID_LOCKOUT_CHANGED_S = 763,
+ ERR_RAID_CONVERTED_TO_PARTY = 764,
+ ERR_PARTY_CONVERTED_TO_RAID = 765,
+ ERR_PLAYER_DIFFICULTY_CHANGED_S = 766,
+ ERR_GMRESPONSE_DB_ERROR = 767,
+ ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 768,
+ ERR_ARENA_JOIN_RANGE_INDEX = 769,
+ ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 770,
+ ERR_BATTLEGROUND_JOIN_FAILED = 771,
+ ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 772,
+ ERR_BATTLEGROUND_JOIN_RESPEC = 773,
+ ERR_BATTLEGROUND_INVITATION_DECLINED = 774,
+ ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 775,
+ ERR_BATTLEGROUND_JOIN_TIMED_OUT = 776,
+ ERR_BATTLEGROUND_DUPE_QUEUE = 777,
+ ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 778,
+ ERR_IN_BATTLEGROUND_RESPEC = 779,
+ ERR_MAIL_LIMITED_DURATION_ITEM = 780,
+ ERR_YELL_RESTRICTED_TRIAL = 781,
+ ERR_CHAT_RAID_RESTRICTED_TRIAL = 782,
+ ERR_LFG_ROLE_CHECK_FAILED = 783,
+ ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 784,
+ ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 785,
+ ERR_LFG_READY_CHECK_FAILED = 786,
+ ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 787,
+ ERR_LFG_GROUP_FULL = 788,
+ ERR_LFG_NO_LFG_OBJECT = 789,
+ ERR_LFG_NO_SLOTS_PLAYER = 790,
+ ERR_LFG_NO_SLOTS_PARTY = 791,
+ ERR_LFG_NO_SPEC = 792,
+ ERR_LFG_MISMATCHED_SLOTS = 793,
+ ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 794,
+ ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 795,
+ ERR_LFG_MEMBERS_NOT_PRESENT = 796,
+ ERR_LFG_GET_INFO_TIMEOUT = 797,
+ ERR_LFG_INVALID_SLOT = 798,
+ ERR_LFG_DESERTER_PLAYER = 799,
+ ERR_LFG_DESERTER_PARTY = 800,
+ ERR_LFG_DEAD = 801,
+ ERR_LFG_RANDOM_COOLDOWN_PLAYER = 802,
+ ERR_LFG_RANDOM_COOLDOWN_PARTY = 803,
+ ERR_LFG_TOO_MANY_MEMBERS = 804,
+ ERR_LFG_TOO_FEW_MEMBERS = 805,
+ ERR_LFG_PROPOSAL_FAILED = 806,
+ ERR_LFG_PROPOSAL_DECLINED_SELF = 807,
+ ERR_LFG_PROPOSAL_DECLINED_PARTY = 808,
+ ERR_LFG_NO_SLOTS_SELECTED = 809,
+ ERR_LFG_NO_ROLES_SELECTED = 810,
+ ERR_LFG_ROLE_CHECK_INITIATED = 811,
+ ERR_LFG_READY_CHECK_INITIATED = 812,
+ ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 813,
+ ERR_LFG_PLAYER_DECLINED_READY_CHECK = 814,
+ ERR_LFG_JOINED_QUEUE = 815,
+ ERR_LFG_JOINED_FLEX_QUEUE = 816,
+ ERR_LFG_JOINED_RF_QUEUE = 817,
+ ERR_LFG_JOINED_SCENARIO_QUEUE = 818,
+ ERR_LFG_JOINED_WORLD_PVP_QUEUE = 819,
+ ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 820,
+ ERR_LFG_JOINED_LIST = 821,
+ ERR_LFG_LEFT_QUEUE = 822,
+ ERR_LFG_LEFT_LIST = 823,
+ ERR_LFG_ROLE_CHECK_ABORTED = 824,
+ ERR_LFG_READY_CHECK_ABORTED = 825,
+ ERR_LFG_CANT_USE_BATTLEGROUND = 826,
+ ERR_LFG_CANT_USE_DUNGEONS = 827,
+ ERR_LFG_REASON_TOO_MANY_LFG = 828,
+ ERR_LFG_FARM_LIMIT = 829,
+ ERR_LFG_NO_CROSS_FACTION_PARTIES = 830,
+ ERR_INVALID_TELEPORT_LOCATION = 831,
+ ERR_TOO_FAR_TO_INTERACT = 832,
+ ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 833,
+ ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 834,
+ ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 835,
+ ERR_DIFFICULTY_CHANGE_WORLDSTATE = 836,
+ ERR_DIFFICULTY_CHANGE_ENCOUNTER = 837,
+ ERR_DIFFICULTY_CHANGE_COMBAT = 838,
+ ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 839,
+ ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 840,
+ ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 841,
+ ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 842,
+ ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 843,
+ ERR_ARENA_TEAM_PARTY_SIZE = 844,
+ ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 845,
+ ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 846,
+ ERR_SOLO_RBG_WARGAME_GROUP_SIZE = 847,
+ ERR_SOLO_RBG_WARGAME_GROUP_COMP = 848,
+ ERR_SOLO_MIN_ITEM_LEVEL = 849,
+ ERR_PVP_PLAYER_ABANDONED = 850,
+ ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 851,
+ ERR_QUEST_FORCE_REMOVED_S = 852,
+ ERR_ATTACK_NO_ACTIONS = 853,
+ ERR_IN_RANDOM_BG = 854,
+ ERR_IN_NON_RANDOM_BG = 855,
+ ERR_BN_FRIEND_SELF = 856,
+ ERR_BN_FRIEND_ALREADY = 857,
+ ERR_BN_FRIEND_BLOCKED = 858,
+ ERR_BN_FRIEND_LIST_FULL = 859,
+ ERR_BN_FRIEND_REQUEST_SENT = 860,
+ ERR_BN_BROADCAST_THROTTLE = 861,
+ ERR_BG_DEVELOPER_ONLY = 862,
+ ERR_CURRENCY_SPELL_SLOT_MISMATCH = 863,
+ ERR_CURRENCY_NOT_TRADABLE = 864,
+ ERR_REQUIRES_EXPANSION_S = 865,
+ ERR_QUEST_FAILED_SPELL = 866,
+ ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 867,
+ ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 868,
+ ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 869,
+ ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 870,
+ ERR_TALENT_FAILED_UNKNOWN = 871,
+ ERR_TALENT_FAILED_IN_COMBAT = 872,
+ ERR_TALENT_FAILED_IN_PVP_MATCH = 873,
+ ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 874,
+ ERR_WARGAME_REQUEST_FAILURE = 875,
+ ERR_RANK_REQUIRES_AUTHENTICATOR = 876,
+ ERR_GUILD_BANK_VOUCHER_FAILED = 877,
+ ERR_WARGAME_REQUEST_SENT = 878,
+ ERR_REQUIRES_ACHIEVEMENT_I = 879,
+ ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 880,
+ ERR_CANT_BUY_QUANTITY = 881,
+ ERR_ITEM_IS_BATTLE_PAY_LOCKED = 882,
+ ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 883,
+ ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 884,
+ ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 885,
+ ERR_INSUFF_TRACKED_CURRENCY_IS = 886,
+ ERR_NOT_ON_TOURNAMENT_REALM = 887,
+ ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 888,
+ ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 889,
+ ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 890,
+ ERR_CANT_DO_THAT_IN_A_GROUP = 891,
+ ERR_GUILD_LEADER_REPLACED = 892,
+ ERR_TRANSMOGRIFY_CANT_EQUIP = 893,
+ ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 894,
+ ERR_TRANSMOGRIFY_NOT_SOULBOUND = 895,
+ ERR_TRANSMOGRIFY_INVALID_SOURCE = 896,
+ ERR_TRANSMOGRIFY_INVALID_DESTINATION = 897,
+ ERR_TRANSMOGRIFY_MISMATCH = 898,
+ ERR_TRANSMOGRIFY_LEGENDARY = 899,
+ ERR_TRANSMOGRIFY_SAME_ITEM = 900,
+ ERR_TRANSMOGRIFY_SAME_APPEARANCE = 901,
+ ERR_TRANSMOGRIFY_NOT_EQUIPPED = 902,
+ ERR_VOID_DEPOSIT_FULL = 903,
+ ERR_VOID_WITHDRAW_FULL = 904,
+ ERR_VOID_STORAGE_WRAPPED = 905,
+ ERR_VOID_STORAGE_STACKABLE = 906,
+ ERR_VOID_STORAGE_UNBOUND = 907,
+ ERR_VOID_STORAGE_REPAIR = 908,
+ ERR_VOID_STORAGE_CHARGES = 909,
+ ERR_VOID_STORAGE_QUEST = 910,
+ ERR_VOID_STORAGE_CONJURED = 911,
+ ERR_VOID_STORAGE_MAIL = 912,
+ ERR_VOID_STORAGE_BAG = 913,
+ ERR_VOID_TRANSFER_STORAGE_FULL = 914,
+ ERR_VOID_TRANSFER_INV_FULL = 915,
+ ERR_VOID_TRANSFER_INTERNAL_ERROR = 916,
+ ERR_VOID_TRANSFER_ITEM_INVALID = 917,
+ ERR_DIFFICULTY_DISABLED_IN_LFG = 918,
+ ERR_VOID_STORAGE_UNIQUE = 919,
+ ERR_VOID_STORAGE_LOOT = 920,
+ ERR_VOID_STORAGE_HOLIDAY = 921,
+ ERR_VOID_STORAGE_DURATION = 922,
+ ERR_VOID_STORAGE_LOAD_FAILED = 923,
+ ERR_VOID_STORAGE_INVALID_ITEM = 924,
+ ERR_VOID_STORAGE_ACCOUNT_ITEM = 925,
+ ERR_PARENTAL_CONTROLS_CHAT_MUTED = 926,
+ ERR_SOR_START_EXPERIENCE_INCOMPLETE = 927,
+ ERR_SOR_INVALID_EMAIL = 928,
+ ERR_SOR_INVALID_COMMENT = 929,
+ ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 930,
+ ERR_CHALLENGE_MODE_RESET_KEYSTONE = 931,
+ ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 932,
+ ERR_REPORT_SUBMITTED_SUCCESSFULLY = 933,
+ ERR_REPORT_SUBMISSION_FAILED = 934,
+ ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 935,
+ ERR_BUG_SUBMITTED_SUCCESSFULLY = 936,
+ ERR_CHALLENGE_MODE_ENABLED = 937,
+ ERR_CHALLENGE_MODE_DISABLED = 938,
+ ERR_PETBATTLE_CREATE_FAILED = 939,
+ ERR_PETBATTLE_NOT_HERE = 940,
+ ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 941,
+ ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 942,
+ ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 943,
+ ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 944,
+ ERR_PETBATTLE_NOT_WHILE_DEAD = 945,
+ ERR_PETBATTLE_NOT_WHILE_FLYING = 946,
+ ERR_PETBATTLE_TARGET_INVALID = 947,
+ ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 948,
+ ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 949,
+ ERR_PETBATTLE_NOT_A_TRAINER = 950,
+ ERR_PETBATTLE_DECLINED = 951,
+ ERR_PETBATTLE_IN_BATTLE = 952,
+ ERR_PETBATTLE_INVALID_LOADOUT = 953,
+ ERR_PETBATTLE_ALL_PETS_DEAD = 954,
+ ERR_PETBATTLE_NO_PETS_IN_SLOTS = 955,
+ ERR_PETBATTLE_NO_ACCOUNT_LOCK = 956,
+ ERR_PETBATTLE_WILD_PET_TAPPED = 957,
+ ERR_PETBATTLE_RESTRICTED_ACCOUNT = 958,
+ ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 959,
+ ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 960,
+ ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 961,
+ ERR_CANT_HAVE_MORE_PETS = 962,
+ ERR_PVP_MAP_NOT_FOUND = 963,
+ ERR_PVP_MAP_NOT_SET = 964,
+ ERR_PETBATTLE_QUEUE_QUEUED = 965,
+ ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 966,
+ ERR_PETBATTLE_QUEUE_JOIN_FAILED = 967,
+ ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 968,
+ ERR_PETBATTLE_QUEUE_REMOVED = 969,
+ ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 970,
+ ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 971,
+ ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 972,
+ ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 973,
+ ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 974,
+ ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 975,
+ ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 976,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 977,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 978,
+ ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 979,
+ ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 980,
+ ERR_PETBATTLE_QUEUE_SLOT_DEAD = 981,
+ ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 982,
+ ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 983,
+ ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 984,
+ ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 985,
+ ERR_HAS_RESTRICTION = 986,
+ ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 987,
+ ERR_ITEM_UPGRADE_NO_PATH = 988,
+ ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 989,
+ ERR_BONUS_ROLL_EMPTY = 990,
+ ERR_CHALLENGE_MODE_FULL = 991,
+ ERR_CHALLENGE_MODE_IN_PROGRESS = 992,
+ ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 993,
+ ERR_BATTLETAG_FRIEND_NOT_FOUND = 994,
+ ERR_BATTLETAG_FRIEND_NOT_VALID = 995,
+ ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 996,
+ ERR_BATTLETAG_FRIEND_THROTTLED = 997,
+ ERR_BATTLETAG_FRIEND_SUCCESS = 998,
+ ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 999,
+ ERR_PETBATTLE_INTERNAL = 1000,
+ ERR_CANT_CAGE_PET_YET = 1001,
+ ERR_NO_LOOT_IN_CHALLENGE_MODE = 1002,
+ ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 1003,
+ ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 1004,
+ ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 1005,
+ ERR_RECRUIT_A_FRIEND_FAILED = 1006,
+ ERR_SET_LOOT_PERSONAL = 1007,
+ ERR_SET_LOOT_METHOD_FAILED_COMBAT = 1008,
+ ERR_REAGENT_BANK_FULL = 1009,
+ ERR_REAGENT_BANK_LOCKED = 1010,
+ ERR_GARRISON_BUILDING_EXISTS = 1011,
+ ERR_GARRISON_INVALID_PLOT = 1012,
+ ERR_GARRISON_INVALID_BUILDINGID = 1013,
+ ERR_GARRISON_INVALID_PLOT_BUILDING = 1014,
+ ERR_GARRISON_REQUIRES_BLUEPRINT = 1015,
+ ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1016,
+ ERR_GARRISON_NOT_ENOUGH_GOLD = 1017,
+ ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1018,
+ ERR_ALREADY_USING_LFG_LIST = 1019,
+ ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1020,
+ ERR_TOY_USE_LIMIT_REACHED = 1021,
+ ERR_TOY_ALREADY_KNOWN = 1022,
+ ERR_TRANSMOG_SET_ALREADY_KNOWN = 1023,
+ ERR_NOT_ENOUGH_CURRENCY = 1024,
+ ERR_SPEC_IS_DISABLED = 1025,
+ ERR_FEATURE_RESTRICTED_TRIAL = 1026,
+ ERR_CANT_BE_OBLITERATED = 1027,
+ ERR_CANT_BE_SCRAPPED = 1028,
+ ERR_CANT_BE_RECRAFTED = 1029,
+ ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1030,
+ ERR_MUST_EQUIP_ARTIFACT = 1031,
+ ERR_CANT_DO_THAT_RIGHT_NOW = 1032,
+ ERR_AFFECTING_COMBAT = 1033,
+ ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1034,
+ ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1035,
+ ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1036,
+ ERR_MOVIE_RECORDING_WARNING_PERF = 1037,
+ ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1038,
+ ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1039,
+ ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1040,
+ ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1041,
+ ERR_NO_CHALLENGE_MODE_REWARD = 1042,
+ ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1043,
+ ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1044,
+ ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1045,
+ ERR_TALENT_FAILED_REST_AREA = 1046,
+ ERR_CANNOT_ABANDON_LAST_PET = 1047,
+ ERR_TEST_CVAR_SET_SSS = 1048,
+ ERR_QUEST_TURN_IN_FAIL_REASON = 1049,
+ ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1050,
+ ERR_TALENT_GRANTED_BY_AURA = 1051,
+ ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1052,
+ ERR_GLYPH_TARGET_NOT_AVAILABLE = 1053,
+ ERR_PVP_WARMODE_TOGGLE_ON = 1054,
+ ERR_PVP_WARMODE_TOGGLE_OFF = 1055,
+ ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1056,
+ ERR_SPELL_FAILED_CANT_FLY_HERE = 1057,
+ ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1058,
+ ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1059,
+ ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1060,
+ ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1061,
+ ERR_VOICE_CHAT_SERVICE_LOST = 1062,
+ ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1063,
+ ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1064,
+ ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1065,
+ ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1066,
+ ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1067,
+ ERR_VOICE_CHAT_PLAYER_SILENCED = 1068,
+ ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1069,
+ ERR_VOICE_CHAT_DISABLED = 1070,
+ ERR_NO_PVP_REWARD = 1071,
+ ERR_CLAIMED_PVP_REWARD = 1072,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1073,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1074,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1075,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1076,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1077,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1078,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1079,
+ ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1080,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1081,
+ ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1082,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1083,
+ ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1084,
+ ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1085,
+ ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1086,
+ ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1087,
+ ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1088,
+ ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1089,
+ ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1090,
+ ERR_SOCKETING_REQUIRES_TINKER_GEM = 1091,
+ ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1092,
+ ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1093,
+ ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1094,
+ ERR_SOCKETING_REQUIRES_FRAGRANCE_GEM = 1095,
+ ERR_SOCKETING_FRAGRANCE_GEM_ONLY_IN_FRAGRANCESLOT = 1096,
+ ERR_LEVEL_LINKING_RESULT_LINKED = 1097,
+ ERR_LEVEL_LINKING_RESULT_UNLINKED = 1098,
+ ERR_CLUB_FINDER_ERROR_POST_CLUB = 1099,
+ ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1100,
+ ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1101,
+ ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1102,
+ ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1103,
+ ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1104,
+ ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1105,
+ ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1106,
+ ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1107,
+ ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1108,
+ ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1109,
+ ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1110,
+ ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1111,
+ ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1112,
+ ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1113,
+ ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1114,
+ ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1115,
+ ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1116,
+ ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1117,
+ ERR_SOULBIND_INVALID_CONDUIT = 1118,
+ ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1119,
+ ERR_SOULBIND_INVALID_TALENT = 1120,
+ ERR_SOULBIND_DUPLICATE_CONDUIT = 1121,
+ ERR_ACTIVATE_SOULBIND_S = 1122,
+ ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1123,
+ ERR_CANT_USE_PROFANITY = 1124,
+ ERR_NOT_IN_PET_BATTLE = 1125,
+ ERR_NOT_IN_NPE = 1126,
+ ERR_NO_SPEC = 1127,
+ ERR_NO_DOMINATIONSHARD_OVERWRITE = 1128,
+ ERR_USE_WEEKLY_REWARDS_DISABLED = 1129,
+ ERR_CROSS_FACTION_GROUP_JOINED = 1130,
+ ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1131,
+ ERR_EQUIPABLESPELLS_SLOTS_FULL = 1132,
+ ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1133,
+ ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1134,
+ ERR_NO_SOULBOUND_ITEM_IN_ACCOUNT_BANK = 1135,
+ ERR_NO_REFUNDABLE_ITEM_IN_ACCOUNT_BANK = 1136,
+ ERR_CANT_DELETE_IN_ACCOUNT_BANK = 1137,
+ ERR_NO_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1138,
+ ERR_NO_OPEN_IMMEDIATE_CONTAINER_IN_ACCOUNT_BANK = 1139,
+ ERR_NO_ACCOUNT_INVENTORY_LOCK = 1140,
+ ERR_TOO_MANY_ACCOUNT_BANK_TABS = 1141,
+ ERR_ACCOUNT_BANK_TAB_NOT_UNLOCKED = 1142,
+ ERR_BANK_TAB_INVALID_NAME = 1143,
+ ERR_BANK_TAB_INVALID_TEXT = 1144,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1145,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1146,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1147,
+ ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1148,
+ ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1149,
+ ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1150,
+ ERR_TARGET_IS_SELF_FOUND_CANNOT_TRADE = 1151,
+ ERR_PLAYER_IS_SELF_FOUND_CANNOT_TRADE = 1152,
+ ERR_MAIL_RECEPIENT_IS_SELF_FOUND_CANNOT_RECEIVE_MAIL = 1153,
+ ERR_PLAYER_IS_SELF_FOUND_CANNOT_SEND_MAIL = 1154,
+ ERR_PLAYER_IS_SELF_FOUND_CANNOT_USE_AUCTION_HOUSE = 1155,
+ ERR_MAIL_TARGET_CANNOT_RECEIVE_MAIL = 1156,
+ ERR_REMIX_INVALID_TRANSFER_REQUEST = 1157,
+ ERR_CURRENCY_TRANSFER_INVALID_CHARACTER = 1158,
+ ERR_CURRENCY_TRANSFER_INVALID_CURRENCY = 1159,
+ ERR_CURRENCY_TRANSFER_INSUFFICIENT_CURRENCY = 1160,
+ ERR_CURRENCY_TRANSFER_MAX_QUANTITY = 1161,
+ ERR_CURRENCY_TRANSFER_NO_VALID_SOURCE = 1162,
+ ERR_CURRENCY_TRANSFER_CHARACTER_LOGGED_IN = 1163,
+ ERR_CURRENCY_TRANSFER_SERVER_ERROR = 1164,
+ ERR_CURRENCY_TRANSFER_UNMET_REQUIREMENTS = 1165,
};
enum class MountResult : uint32
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index cfe33834173..8faef90d6dc 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -115,7 +115,7 @@ Quest::Quest(Field* questRecord)
_areaGroupID = questRecord[100].GetUInt32();
_limitTime = questRecord[101].GetInt64();
_allowableRaces.RawValue = questRecord[102].GetUInt64();
- _treasurePickerID = questRecord[103].GetInt32();
+ _resetByScheduler = questRecord[103].GetBool();
_expansion = questRecord[104].GetInt32();
_managedWorldStateID = questRecord[105].GetInt32();
_questSessionBonus = questRecord[106].GetInt32();
@@ -398,6 +398,11 @@ void Quest::LoadConditionalConditionalQuestCompletionLog(Field* fields)
ObjectMgr::AddLocaleString(fields[3].GetStringView(), locale, text.Text);
}
+void Quest::LoadTreasurePickers(Field* fields)
+{
+ _treasurePickerID.push_back(fields[1].GetInt32());
+}
+
uint32 Quest::XPValue(Player const* player) const
{
return XPValue(player, GetContentTuningId(), _rewardXPDifficulty, _rewardXPMultiplier, _expansion);
@@ -487,6 +492,14 @@ bool Quest::IsImportant() const
return false;
}
+bool Quest::IsMeta() const
+{
+ if (QuestInfoEntry const* questInfo = sQuestInfoStore.LookupEntry(GetQuestInfoID()))
+ return (questInfo->Modifiers & 0x800) != 0;
+
+ return false;
+}
+
void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player* player) const
{
rewards.ChoiceItemCount = GetRewChoiceItemsCount();
@@ -521,8 +534,8 @@ void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player
for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
{
- rewards.ItemID[i] = RewardItemId[i];
- rewards.ItemQty[i] = RewardItemCount[i];
+ rewards.Items[i].ItemID = RewardItemId[i];
+ rewards.Items[i].ItemQty = RewardItemCount[i];
}
for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i)
@@ -535,8 +548,8 @@ void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player
for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
{
- rewards.CurrencyID[i] = RewardCurrencyId[i];
- rewards.CurrencyQty[i] = RewardCurrencyCount[i];
+ rewards.Currencies[i].CurrencyID = RewardCurrencyId[i];
+ rewards.Currencies[i].CurrencyQty = RewardCurrencyCount[i];
}
}
@@ -779,6 +792,7 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc, Player* player) const
response.Info.CompleteSoundKitID = GetSoundTurnIn();
response.Info.AreaGroupID = GetAreaGroupID();
response.Info.TimeAllowed = GetLimitTime();
+ response.Info.ResetByScheduler = IsResetByScheduler();
response.Write();
response.ShrinkToFit();
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index 39fc4862638..3d34b4d2565 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -154,39 +154,53 @@ enum QuestStatus : uint8
enum class QuestGiverStatus : uint64
{
- None = 0x000000000,
- Future = 0x000000002,
- Trivial = 0x000000004,
- TrivialRepeatableTurnin = 0x000000008,
- TrivialDailyQuest = 0x000000010,
- Reward = 0x000000020,
- JourneyReward = 0x000000040,
- CovenantCallingReward = 0x000000080,
- RepeatableTurnin = 0x000000100,
- DailyQuest = 0x000000200,
- Quest = 0x000000400,
- RewardCompleteNoPOI = 0x000000800,
- RewardCompletePOI = 0x000001000,
- LegendaryQuest = 0x000002000,
- LegendaryRewardCompleteNoPOI = 0x000004000,
- LegendaryRewardCompletePOI = 0x000008000,
- JourneyQuest = 0x000010000,
- JourneyRewardCompleteNoPOI = 0x000020000,
- JourneyRewardCompletePOI = 0x000040000,
- CovenantCallingQuest = 0x000080000,
- CovenantCallingRewardCompleteNoPOI = 0x000100000,
- CovenantCallingRewardCompletePOI = 0x000200000,
- TrivialLegendaryQuest = 0x000400000,
- FutureLegendaryQuest = 0x000800000,
- LegendaryReward = 0x001000000,
- ImportantReward = 0x002000000,
- ImportantQuest = 0x004000000,
- TrivialImportantQuest = 0x008000000,
- FutureImportantQuest = 0x010000000,
- ImportantQuestRewardCompleteNoPOI = 0x020000000,
- ImportantQuestRewardCompletePOI = 0x040000000,
- TrivialJourneyQuest = 0x080000000,
- FutureJourneyQuest = 0x100000000,
+ None = 0x000000000000,
+ Future = 0x000000000002,
+ FutureJourneyQuest = 0x000000000004,
+ FutureLegendaryQuest = 0x000000000008,
+ FutureImportantQuest = 0x000000000010,
+ TrivialRepeatableTurnin = 0x000000000020,
+ Trivial = 0x000000000040,
+ TrivialDailyQuest = 0x000000000080,
+ TrivialRepeatableQuest = 0x000000000100,
+ TrivialMetaQuest = 0x000000000200,
+ TrivialJourneyQuest = 0x000000000400,
+ TrivialLegendaryQuest = 0x000000000800,
+ TrivialImportantQuest = 0x000000001000,
+ Reward = 0x000000002000,
+ RepeatableReward = 0x000000004000,
+ MetaReward = 0x000000008000,
+ JourneyReward = 0x000000010000,
+ CovenantCallingReward = 0x000000020000,
+ LegendaryReward = 0x000000040000,
+ ImportantReward = 0x000000080000,
+ RepeatableTurnin = 0x000000100000,
+ QuestAccountCompleted = 0x000000200000,
+ Quest = 0x000000400000,
+ DailyQuest = 0x000000800000,
+ RepeatableQuest = 0x000001000000,
+ MetaQuest = 0x000002000000,
+ CovenantCallingQuest = 0x000004000000,
+ JourneyQuestAccountCompleted = 0x000008000000,
+ JourneyQuest = 0x000010000000,
+ LegendaryQuestAccountCompleted = 0x000020000000,
+ LegendaryQuest = 0x000040000000,
+ ImportantQuestAccountCompleted = 0x000080000000,
+ ImportantQuest = 0x000100000000,
+ RewardCompleteNoPOI = 0x000200000000,
+ RewardCompletePOI = 0x000400000000,
+ RepeatableRewardCompleteNoPOI = 0x000800000000,
+ RepeatableRewardCompletePOI = 0x001000000000,
+ MetaQuestRewardCompleteNoPOI = 0x002000000000,
+ MetaQuestRewardCompletePOI = 0x004000000000,
+ CovenantCallingRewardCompleteNoPOI = 0x008000000000,
+ CovenantCallingRewardCompletePOI = 0x010000000000,
+ JourneyRewardCompleteNoPOI = 0x020000000000,
+ JourneyRewardCompletePOI = 0x040000000000,
+ LegendaryRewardCompleteNoPOI = 0x080000000000,
+ LegendaryRewardCompletePOI = 0x100000000000,
+ ImportantQuestRewardCompleteNoPOI = 0x200000000000,
+ ImportantQuestRewardCompletePOI = 0x400000000000,
};
DEFINE_ENUM_FLAG(QuestGiverStatus);
@@ -292,6 +306,8 @@ enum QuestFlagsEx2 : uint32
QUEST_FLAGS_EX2_IGNORE_SOULBOUND_ITEMS = 0x00200000,
QUEST_FLAGS_EX2_DONT_DEFER_START_EFFECTS = 0x00400000,
QUEST_FLAGS_EX2_HIDE_REQUIRED_ITEMS_PRE_TURN_IN = 0x00800000,
+
+ QUEST_FLAGS_EX2_ABANDON_ON_DISABLE = 0x04000000,
};
enum QuestSpecialFlags
@@ -390,6 +406,13 @@ enum class QuestCompleteSpellType : uint32
Max
};
+enum class QuestRewardContextFlags : int32
+{
+ None = 0x0,
+ FirstCompletionBonus = 0x1,
+ RepeatCompletionBonus = 0x2
+};
+
struct QuestGreeting
{
uint16 EmoteType;
@@ -560,6 +583,7 @@ class TC_GAME_API Quest
void LoadConditionalConditionalRequestItemsText(Field* fields);
void LoadConditionalConditionalOfferRewardText(Field* fields);
void LoadConditionalConditionalQuestCompletionLog(Field* fields);
+ void LoadTreasurePickers(Field* fields);
uint32 XPValue(Player const* player) const;
static uint32 XPValue(Player const* player, uint32 contentTuningId, uint32 xpDifficulty, float xpMultiplier = 1.0f, int32 expansion = -1);
@@ -568,6 +592,7 @@ class TC_GAME_API Quest
uint32 GetMaxMoneyReward() const;
Optional<QuestTagType> GetQuestTag() const;
bool IsImportant() const;
+ bool IsMeta() const;
bool HasFlag(QuestFlags flag) const { return (_flags & uint32(flag)) != 0; }
bool HasFlagEx(QuestFlagsEx flag) const { return (_flagsEx & uint32(flag)) != 0; }
@@ -666,7 +691,7 @@ class TC_GAME_API Quest
uint32 GetRewardSkillId() const { return _rewardSkillId; }
uint32 GetRewardSkillPoints() const { return _rewardSkillPoints; }
uint32 GetRewardReputationMask() const { return _rewardReputationMask; }
- int32 GetTreasurePickerId() const { return _treasurePickerID; }
+ std::vector<int32> const& GetTreasurePickerId() const { return _treasurePickerID; }
int32 GetExpansion() const { return _expansion; }
int32 GetManagedWorldStateId() const { return _managedWorldStateID; }
int32 GetQuestSessionBonus() const { return _questSessionBonus; }
@@ -685,6 +710,7 @@ class TC_GAME_API Quest
bool IsPushedToPartyOnAccept() const { return HasSpecialFlag(QUEST_SPECIAL_FLAGS_AUTO_PUSH_TO_PARTY); }
uint32 CalculateHonorGain(uint8 level) const;
bool CanIncreaseRewardedQuestCounters() const;
+ bool IsResetByScheduler() const { return _resetByScheduler; }
// multiple values
std::vector<QuestRewardDisplaySpell> RewardDisplaySpell;
@@ -777,7 +803,7 @@ class TC_GAME_API Quest
uint32 _areaGroupID = 0;
int64 _limitTime = 0;
Trinity::RaceMask<uint64> _allowableRaces;
- int32 _treasurePickerID = 0;
+ std::vector<int32> _treasurePickerID;
int32 _expansion = 0;
int32 _managedWorldStateID = 0;
int32 _questSessionBonus = 0;
@@ -790,6 +816,7 @@ class TC_GAME_API Quest
std::string _portraitTurnInText;
std::string _portraitTurnInName;
std::string _questCompletionLog;
+ bool _resetByScheduler;
// quest_description_conditional
std::vector<QuestConditionalText> _conditionalQuestDescription;
diff --git a/src/server/game/Reputation/ReputationMgr.cpp b/src/server/game/Reputation/ReputationMgr.cpp
index be7ca6a728f..576a111dec1 100644
--- a/src/server/game/Reputation/ReputationMgr.cpp
+++ b/src/server/game/Reputation/ReputationMgr.cpp
@@ -372,9 +372,14 @@ void ReputationMgr::SendInitialReputations()
for (FactionStateList::iterator itr = _factions.begin(); itr != _factions.end(); ++itr)
{
- initFactions.FactionFlags[itr->first] = itr->second.Flags.AsUnderlyingType();
- initFactions.FactionStandings[itr->first] = itr->second.Standing;
+ WorldPackets::Reputation::FactionData& factionData = initFactions.Factions.emplace_back();
+ factionData.FactionID = itr->second.ID;
+ factionData.Flags = itr->second.Flags.AsUnderlyingType();
+ factionData.Standing = itr->second.Standing;
/// @todo faction bonus
+ WorldPackets::Reputation::FactionBonusData& bonus = initFactions.Bonuses.emplace_back();
+ bonus.FactionID = itr->second.ID;
+ bonus.FactionHasBonus = false;
itr->second.needSend = false;
}
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
index ae6dfddb134..c03ddb7d058 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp
@@ -82,6 +82,7 @@ WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerDenied::Write()
WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerRePath::Write()
{
_worldPacket << TriggerGUID;
+ _worldPacket << Unused_1100;
_worldPacket.WriteBit(AreaTriggerSpline.has_value());
_worldPacket.WriteBit(AreaTriggerOrbit.has_value());
diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h
index 2af22e72d2c..1186b772b60 100644
--- a/src/server/game/Server/Packets/AreaTriggerPackets.h
+++ b/src/server/game/Server/Packets/AreaTriggerPackets.h
@@ -82,6 +82,7 @@ namespace WorldPackets
Optional<AreaTriggerOrbitInfo> AreaTriggerOrbit;
Optional<AreaTriggerMovementScriptInfo> AreaTriggerMovementScript;
ObjectGuid TriggerGUID;
+ ObjectGuid Unused_1100;
};
class AreaTriggerPlaySpellVisual final : public ServerPacket
diff --git a/src/server/game/Server/Packets/AuctionHousePackets.cpp b/src/server/game/Server/Packets/AuctionHousePackets.cpp
index ed6aea45f77..3ede64d39c0 100644
--- a/src/server/game/Server/Packets/AuctionHousePackets.cpp
+++ b/src/server/game/Server/Packets/AuctionHousePackets.cpp
@@ -99,7 +99,7 @@ ByteBuffer& operator>>(ByteBuffer& data, AuctionListFilterClass& filterClass)
ByteBuffer& operator>>(ByteBuffer& data, AuctionSortDef& sortDef)
{
data.ResetBitPos();
- data >> Bits<4>(sortDef.SortOrder);
+ data >> As<uint8>(sortDef.SortOrder);
data >> Bits<1>(sortDef.ReverseSort);
return data;
@@ -302,15 +302,15 @@ void AuctionBrowseQuery::Read()
ItemClassFilters.resize(_worldPacket.ReadBits(3));
Sorts.resize(_worldPacket.ReadBits(2));
- for (AuctionSortDef& sortDef : Sorts)
- _worldPacket >> sortDef;
-
if (TaintedBy)
_worldPacket >> *TaintedBy;
Name = _worldPacket.ReadString(nameLength);
for (AuctionListFilterClass& filterClass : ItemClassFilters)
_worldPacket >> filterClass;
+
+ for (AuctionSortDef& sortDef : Sorts)
+ _worldPacket >> sortDef;
}
void AuctionCancelCommoditiesPurchase::Read()
@@ -351,14 +351,14 @@ void AuctionListBiddedItems::Read()
AuctionIDs.resize(_worldPacket.ReadBits(7));
Sorts.resize(_worldPacket.ReadBits(2));
- for (AuctionSortDef& sortDef : Sorts)
- _worldPacket >> sortDef;
-
if (TaintedBy)
_worldPacket >> *TaintedBy;
for (uint32& auctionID : AuctionIDs)
_worldPacket >> auctionID;
+
+ for (AuctionSortDef& sortDef : Sorts)
+ _worldPacket >> sortDef;
}
void AuctionListBucketsByBucketKeys::Read()
@@ -371,14 +371,14 @@ void AuctionListBucketsByBucketKeys::Read()
BucketKeys.resize(_worldPacket.ReadBits(7));
Sorts.resize(_worldPacket.ReadBits(2));
- for (AuctionSortDef& sortDef : Sorts)
- _worldPacket >> sortDef;
-
if (TaintedBy)
_worldPacket >> *TaintedBy;
for (AuctionBucketKey& bucketKey : BucketKeys)
_worldPacket >> bucketKey;
+
+ for (AuctionSortDef& sortDef : Sorts)
+ _worldPacket >> sortDef;
}
void AuctionListItemsByBucketKey::Read()
@@ -392,13 +392,13 @@ void AuctionListItemsByBucketKey::Read()
Sorts.resize(_worldPacket.ReadBits(2));
- for (AuctionSortDef& sortDef : Sorts)
- _worldPacket >> sortDef;
-
_worldPacket >> BucketKey;
if (TaintedBy)
_worldPacket >> *TaintedBy;
+
+ for (AuctionSortDef& sortDef : Sorts)
+ _worldPacket >> sortDef;
}
void AuctionListItemsByItemID::Read()
@@ -413,11 +413,11 @@ void AuctionListItemsByItemID::Read()
Sorts.resize(_worldPacket.ReadBits(2));
- for (AuctionSortDef& sortDef : Sorts)
- _worldPacket >> sortDef;
-
if (TaintedBy)
_worldPacket >> *TaintedBy;
+
+ for (AuctionSortDef& sortDef : Sorts)
+ _worldPacket >> sortDef;
}
void AuctionListOwnedItems::Read()
@@ -430,11 +430,11 @@ void AuctionListOwnedItems::Read()
Sorts.resize(_worldPacket.ReadBits(2));
- for (AuctionSortDef& sortDef : Sorts)
- _worldPacket >> sortDef;
-
if (TaintedBy)
_worldPacket >> *TaintedBy;
+
+ for (AuctionSortDef& sortDef : Sorts)
+ _worldPacket >> sortDef;
}
void AuctionPlaceBid::Read()
diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp
index 5ae68849569..4a948e6ca35 100644
--- a/src/server/game/Server/Packets/AuthenticationPackets.cpp
+++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp
@@ -327,8 +327,8 @@ void WorldPackets::Auth::AuthContinuedSession::Read()
void WorldPackets::Auth::ConnectToFailed::Read()
{
- _worldPacket >> As<uint32>(Serial);
_worldPacket >> Con;
+ _worldPacket >> As<uint32>(Serial);
}
bool WorldPackets::Auth::EnterEncryptedMode::InitializeEncryption()
diff --git a/src/server/game/Server/Packets/AzeritePackets.cpp b/src/server/game/Server/Packets/AzeritePackets.cpp
index 87406b757dc..bbaf9668d01 100644
--- a/src/server/game/Server/Packets/AzeritePackets.cpp
+++ b/src/server/game/Server/Packets/AzeritePackets.cpp
@@ -56,10 +56,10 @@ void WorldPackets::Azerite::AzeriteEmpoweredItemViewed::Read()
void WorldPackets::Azerite::AzeriteEmpoweredItemSelectPower::Read()
{
- _worldPacket >> Tier;
- _worldPacket >> AzeritePowerID;
_worldPacket >> ContainerSlot;
_worldPacket >> Slot;
+ _worldPacket >> Tier;
+ _worldPacket >> AzeritePowerID;
}
WorldPacket const* WorldPackets::Azerite::PlayerAzeriteItemEquippedStatusChanged::Write()
diff --git a/src/server/game/Server/Packets/AzeritePackets.h b/src/server/game/Server/Packets/AzeritePackets.h
index 0a0204c61e7..4d76a83884e 100644
--- a/src/server/game/Server/Packets/AzeritePackets.h
+++ b/src/server/game/Server/Packets/AzeritePackets.h
@@ -89,7 +89,7 @@ namespace WorldPackets
void Read() override;
- int32 Tier = 0;
+ uint8 Tier = 0;
int32 AzeritePowerID = 0;
uint8 ContainerSlot = 0;
uint8 Slot = 0;
diff --git a/src/server/game/Server/Packets/BankPackets.cpp b/src/server/game/Server/Packets/BankPackets.cpp
index 63f9300c31d..74f24cb7519 100644
--- a/src/server/game/Server/Packets/BankPackets.cpp
+++ b/src/server/game/Server/Packets/BankPackets.cpp
@@ -16,10 +16,12 @@
*/
#include "BankPackets.h"
+#include "DBCEnums.h"
void WorldPackets::Bank::AutoBankItem::Read()
{
_worldPacket >> Inv
+ >> As<int8>(BankType)
>> Bag
>> Slot;
}
@@ -54,3 +56,9 @@ void WorldPackets::Bank::ReagentBank::Read()
{
_worldPacket >> Banker;
}
+
+void WorldPackets::Bank::BankerActivate::Read()
+{
+ _worldPacket >> Banker;
+ _worldPacket >> As<int32>(InteractionType);
+}
diff --git a/src/server/game/Server/Packets/BankPackets.h b/src/server/game/Server/Packets/BankPackets.h
index f43f672bc95..f81a1c02bfe 100644
--- a/src/server/game/Server/Packets/BankPackets.h
+++ b/src/server/game/Server/Packets/BankPackets.h
@@ -22,6 +22,8 @@
#include "ItemPacketsCommon.h"
#include "ObjectGuid.h"
+enum class PlayerInteractionType : int32;
+
namespace WorldPackets
{
namespace Bank
@@ -34,6 +36,7 @@ namespace WorldPackets
void Read() override;
WorldPackets::Item::InvUpdate Inv;
+ ::BankType BankType = ::BankType::Character;
uint8 Bag = 0;
uint8 Slot = 0;
};
@@ -95,6 +98,17 @@ namespace WorldPackets
ObjectGuid Banker;
};
+
+ class BankerActivate final : public ClientPacket
+ {
+ public:
+ explicit BankerActivate(WorldPacket&& packet) : ClientPacket(CMSG_BANKER_ACTIVATE, std::move(packet)) { }
+
+ void Read() override;
+
+ ObjectGuid Banker;
+ PlayerInteractionType InteractionType = { };
+ };
}
}
#endif // BankPackets_h__
diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp
index 07cb5393c06..8d1dd199bb4 100644
--- a/src/server/game/Server/Packets/CalendarPackets.cpp
+++ b/src/server/game/Server/Packets/CalendarPackets.cpp
@@ -22,7 +22,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Calendar::CalendarSendCal
data << uint64(eventInfo.EventID);
data << uint8(eventInfo.EventType);
data << eventInfo.Date;
- data << uint32(eventInfo.Flags);
+ data << uint16(eventInfo.Flags);
data << int32(eventInfo.TextureID);
data << uint64(eventInfo.EventClubID);
data << eventInfo.OwnerGuid;
@@ -285,7 +285,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarSendEvent::Write()
_worldPacket << uint64(EventID);
_worldPacket << uint8(GetEventType);
_worldPacket << int32(TextureID);
- _worldPacket << uint32(Flags);
+ _worldPacket << uint16(Flags);
_worldPacket << Date;
_worldPacket << LockDate;
_worldPacket << uint64(EventClubID);
@@ -307,7 +307,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarInviteAlert::Write()
{
_worldPacket << uint64(EventID);
_worldPacket << Date;
- _worldPacket << uint32(Flags);
+ _worldPacket << uint16(Flags);
_worldPacket << uint8(EventType);
_worldPacket << int32(TextureID);
_worldPacket << uint64(EventClubID);
@@ -320,6 +320,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarInviteAlert::Write()
_worldPacket << OwnerGuid;
_worldPacket << BitsSize<8>(EventName);
+ _worldPacket << Bits<1>(Unknown_1100);
_worldPacket.FlushBits();
_worldPacket.WriteString(EventName);
@@ -383,7 +384,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventUpdatedAlert::Write()
_worldPacket << OriginalDate;
_worldPacket << Date;
_worldPacket << LockDate;
- _worldPacket << uint32(Flags);
+ _worldPacket << uint16(Flags);
_worldPacket << uint32(TextureID);
_worldPacket << uint8(EventType);
diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h
index e76b4162f02..1d1ae538fac 100644
--- a/src/server/game/Server/Packets/CalendarPackets.h
+++ b/src/server/game/Server/Packets/CalendarPackets.h
@@ -103,7 +103,7 @@ namespace WorldPackets
uint8 EventType = 0;
uint32 TextureID = 0;
WowTime Time;
- uint32 Flags = 0;
+ uint16 Flags = 0;
};
class CalendarUpdateEvent final : public ClientPacket
@@ -185,7 +185,7 @@ namespace WorldPackets
std::string EventName;
uint8 EventType = 0;
WowTime Date;
- uint32 Flags = 0;
+ uint16 Flags = 0;
int32 TextureID = 0;
uint64 EventClubID = 0;
ObjectGuid OwnerGuid;
@@ -228,7 +228,7 @@ namespace WorldPackets
uint64 EventID = 0;
WowTime Date;
WowTime LockDate;
- uint32 Flags = 0;
+ uint16 Flags = 0;
int32 TextureID = 0;
uint8 GetEventType = 0;
uint8 EventType = 0;
@@ -249,13 +249,14 @@ namespace WorldPackets
ObjectGuid InvitedByGuid;
uint64 InviteID = 0;
uint64 EventID = 0;
- uint32 Flags = 0;
+ uint16 Flags = 0;
WowTime Date;
int32 TextureID = 0;
uint8 Status = 0;
uint8 EventType = 0;
uint8 ModeratorStatus = 0;
std::string EventName;
+ bool Unknown_1100 = false;
};
class CalendarInvite final : public ClientPacket
@@ -358,7 +359,7 @@ namespace WorldPackets
uint64 EventClubID = 0;
uint64 EventID = 0;
WowTime Date;
- uint32 Flags = 0;
+ uint16 Flags = 0;
WowTime LockDate;
WowTime OriginalDate;
int32 TextureID = 0;
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index 5dd7ba275cf..1fd503aa176 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -79,7 +79,7 @@ EnumCharacters::EnumCharacters(WorldPacket&& packet) : ClientPacket(std::move(pa
ASSERT(GetOpcode() == CMSG_ENUM_CHARACTERS || GetOpcode() == CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT);
}
-EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields)
+EnumCharactersResult::CharacterInfoBasic::CharacterInfoBasic(Field const* fields)
{
// 0 1 2 3 4 5
// "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.level, "
@@ -95,6 +95,7 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields)
// "character_declinedname.genitive"
Guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
+ VirtualRealmAddress = GetVirtualRealmAddress();
GuildClubMemberID = ::Battlenet::Services::Clubs::CreateClubMemberId(Guid);
Name = fields[1].GetString();
RaceID = fields[2].GetUInt8();
@@ -137,7 +138,6 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields)
Flags2 = CHAR_CUSTOMIZE_FLAG_RACE;
Flags3 = 0;
- Flags4 = 0;
FirstLogin = (atLoginFlags & AT_LOGIN_FIRST) != 0;
// show pet at selection character in character list only for non-ghost character
@@ -151,7 +151,6 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields)
}
}
- BoostInProgress = false;
ProfessionIds[0] = 0;
ProfessionIds[1] = 0;
@@ -182,80 +181,114 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields)
}
}
-ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo::VisualItemInfo const& visualItem)
+ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasic::VisualItemInfo const& visualItem)
{
data << uint32(visualItem.DisplayID);
- data << uint32(visualItem.DisplayEnchantID);
- data << int32(visualItem.SecondaryItemModifiedAppearanceID);
data << uint8(visualItem.InvType);
+ data << uint32(visualItem.DisplayEnchantID);
data << uint8(visualItem.Subclass);
+ data << int32(visualItem.SecondaryItemModifiedAppearanceID);
+ data << uint32(visualItem.ItemID);
return data;
}
-ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo const& charInfo)
+ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasic const& charInfo)
{
- ASSERT(charInfo.MailSenders.size() == charInfo.MailSenderTypes.size());
-
data << charInfo.Guid;
- data << uint64(charInfo.GuildClubMemberID);
+ data << uint32(charInfo.VirtualRealmAddress);
data << uint8(charInfo.ListPosition);
data << uint8(charInfo.RaceID);
- data << uint8(charInfo.ClassID);
data << uint8(charInfo.SexID);
+ data << uint8(charInfo.ClassID);
+ data << int16(charInfo.SpecID);
data << uint32(charInfo.Customizations.size());
data << uint8(charInfo.ExperienceLevel);
- data << int32(charInfo.ZoneID);
data << int32(charInfo.MapID);
+ data << int32(charInfo.ZoneID);
data << charInfo.PreloadPos;
+ data << uint64(charInfo.GuildClubMemberID);
data << charInfo.GuildGUID;
data << uint32(charInfo.Flags);
data << uint32(charInfo.Flags2);
data << uint32(charInfo.Flags3);
+ data << uint8(charInfo.unkWod61x);
+
data << uint32(charInfo.PetCreatureDisplayID);
data << uint32(charInfo.PetExperienceLevel);
data << uint32(charInfo.PetCreatureFamilyID);
- data << uint32(charInfo.ProfessionIds[0]);
- data << uint32(charInfo.ProfessionIds[1]);
-
- for (EnumCharactersResult::CharacterInfo::VisualItemInfo const& visualItem : charInfo.VisualItems)
+ for (EnumCharactersResult::CharacterInfoBasic::VisualItemInfo const& visualItem : charInfo.VisualItems)
data << visualItem;
- data << charInfo.LastPlayedTime;
- data << int16(charInfo.SpecID);
data << int32(charInfo.Unknown703);
+ data << charInfo.LastPlayedTime;
data << int32(charInfo.LastLoginVersion);
- data << uint32(charInfo.Flags4);
- data << uint32(charInfo.MailSenders.size());
- data << uint32(charInfo.MailSenderTypes.size());
- data << uint32(charInfo.OverrideSelectScreenFileDataID);
data << charInfo.PersonalTabard;
+
+ data << uint32(charInfo.ProfessionIds[0]);
+ data << uint32(charInfo.ProfessionIds[1]);
+
data << int32(charInfo.TimerunningSeasonID);
+ data << uint32(charInfo.OverrideSelectScreenFileDataID);
for (ChrCustomizationChoice const& customization : charInfo.Customizations)
data << customization;
- if (!charInfo.MailSenderTypes.empty())
- data.append(charInfo.MailSenderTypes.data(), charInfo.MailSenderTypes.size());
-
data << BitsSize<6>(charInfo.Name);
data << Bits<1>(charInfo.FirstLogin);
- data << Bits<1>(charInfo.BoostInProgress);
- data << Bits<5>(charInfo.unkWod61x);
- data << Bits<1>(charInfo.RpeResetAvailable);
- data << Bits<1>(charInfo.RpeResetQuestClearAvailable);
- for (std::string const& str : charInfo.MailSenders)
+ data.FlushBits();
+
+ data.WriteString(charInfo.Name);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterRestrictionAndMailData const& restrictionsAndMails)
+{
+ ASSERT(restrictionsAndMails.MailSenders.size() == restrictionsAndMails.MailSenderTypes.size());
+
+ data << Bits<1>(restrictionsAndMails.BoostInProgress);
+ data << Bits<1>(restrictionsAndMails.RpeResetAvailable);
+ data << Bits<1>(restrictionsAndMails.RpeResetQuestClearAvailable);
+ data.FlushBits();
+
+ data << uint32(restrictionsAndMails.Flags4);
+ data << uint32(restrictionsAndMails.MailSenders.size());
+ data << uint32(restrictionsAndMails.MailSenderTypes.size());
+
+ if (!restrictionsAndMails.MailSenderTypes.empty())
+ data.append(restrictionsAndMails.MailSenderTypes.data(), restrictionsAndMails.MailSenderTypes.size());
+
+ for (std::string const& str : restrictionsAndMails.MailSenders)
data << Bits<6>(str.length() + 1);
data.FlushBits();
- for (std::string const& str : charInfo.MailSenders)
+ for (std::string const& str : restrictionsAndMails.MailSenders)
if (!str.empty())
data << str;
- data.WriteString(charInfo.Name);
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo const& charInfo)
+{
+ data << charInfo.Basic;
+ data << charInfo.RestrictionsAndMails;
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RegionwideCharacterListEntry const& charInfo)
+{
+ data << charInfo.Basic;
+ data << uint64(charInfo.Money);
+ data << float(charInfo.CurrentSeasonMythicPlusOverallScore);
+ data << int32(charInfo.CurrentSeasonBestPvpRating);
+ data << int8(charInfo.PvpRatingBracket);
+ data << int16(charInfo.PvpRatingAssociatedSpecID);
return data;
}
@@ -289,22 +322,57 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceLimitDisableI
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WarbandGroupMember const& warbandGroupMember)
+{
+ data << int32(warbandGroupMember.WarbandScenePlacementID);
+ data << int32(warbandGroupMember.Type);
+ if (warbandGroupMember.Type == 0)
+ data << warbandGroupMember.Guid;
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, WarbandGroup const& warbandGroup)
+{
+ data << uint64(warbandGroup.GroupID);
+ data << uint8(warbandGroup.Unknown_1100);
+ data << int32(warbandGroup.Flags);
+ data << uint32(warbandGroup.Members.size());
+
+ for (WarbandGroupMember const& member : warbandGroup.Members)
+ data << member;
+
+ return data;
+}
+
+EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields) : Basic(fields)
+{
+}
+
+EnumCharactersResult::RegionwideCharacterListEntry::RegionwideCharacterListEntry(Field const* fields) : Basic(fields)
+{
+}
+
WorldPacket const* EnumCharactersResult::Write()
{
_worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock));
_worldPacket << Bits<1>(Success);
+ _worldPacket << Bits<1>(Realmless);
_worldPacket << Bits<1>(IsDeletedCharacters);
_worldPacket << Bits<1>(IsNewPlayerRestrictionSkipped);
_worldPacket << Bits<1>(IsNewPlayerRestricted);
_worldPacket << Bits<1>(IsNewPlayer);
_worldPacket << Bits<1>(IsTrialAccountRestricted);
_worldPacket << OptionalInit(DisabledClassesMask);
+ _worldPacket << Bits<1>(DontCreateCharacterDisplays);
_worldPacket << uint32(Characters.size());
+ _worldPacket << uint32(RegionwideCharacters.size());
_worldPacket << int32(MaxCharacterLevel);
_worldPacket << uint32(RaceUnlockData.size());
_worldPacket << uint32(UnlockedConditionalAppearances.size());
_worldPacket << uint32(RaceLimitDisables.size());
+ _worldPacket << uint32(WarbandGroups.size());
if (DisabledClassesMask)
_worldPacket << uint32(*DisabledClassesMask);
@@ -315,9 +383,15 @@ WorldPacket const* EnumCharactersResult::Write()
for (RaceLimitDisableInfo const& raceLimitDisableInfo : RaceLimitDisables)
_worldPacket << raceLimitDisableInfo;
+ for (WarbandGroup const& warbandGroup : WarbandGroups)
+ _worldPacket << warbandGroup;
+
for (CharacterInfo const& charInfo : Characters)
_worldPacket << charInfo;
+ for (RegionwideCharacterListEntry const& charInfo : RegionwideCharacters)
+ _worldPacket << charInfo;
+
for (RaceUnlock const& raceUnlock : RaceUnlockData)
_worldPacket << raceUnlock;
@@ -590,6 +664,7 @@ void AlterApperance::Read()
_worldPacket >> NewSex;
_worldPacket >> CustomizedRace;
_worldPacket >> CustomizedChrModelID;
+ _worldPacket >> UnalteredVisualRaceID;
for (ChrCustomizationChoice& customization : Customizations)
_worldPacket >> customization;
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index 89d4312a6fc..e061ce3f7fa 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -116,10 +116,25 @@ namespace WorldPackets
int32 BackgroundColor = -1;
};
+ struct WarbandGroupMember
+ {
+ int32 WarbandScenePlacementID = 0;
+ int32 Type = 0;
+ ObjectGuid Guid;
+ };
+
+ struct WarbandGroup
+ {
+ uint64 GroupID = 0;
+ uint8 Unknown_1100 = 0;
+ int32 Flags = 0; ///< enum WarbandGroupFlags { Collapsed = 1 }
+ std::vector<WarbandGroupMember> Members;
+ };
+
class EnumCharactersResult final : public ServerPacket
{
public:
- struct CharacterInfo
+ struct CharacterInfoBasic
{
/**
* @fn void WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Field* fields);
@@ -128,9 +143,10 @@ namespace WorldPackets
*
* @param fields Field set of CharacterDatabaseStatements::CHAR_SEL_ENUM
*/
- CharacterInfo(Field const* fields);
+ CharacterInfoBasic(Field const* fields);
ObjectGuid Guid;
+ uint32 VirtualRealmAddress = 0;
uint64 GuildClubMemberID = 0; ///< same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known)
std::string Name;
uint8 ListPosition = 0; ///< Order of the characters in list
@@ -146,7 +162,6 @@ namespace WorldPackets
uint32 Flags = 0; ///< Character flag @see enum CharacterFlags
uint32 Flags2 = 0; ///< Character customization flags @see enum CharacterCustomizeFlags
uint32 Flags3 = 0; ///< Character flags 3 @todo research
- uint32 Flags4 = 0;
bool FirstLogin = false;
uint8 unkWod61x = 0;
Timestamp<> LastPlayedTime;
@@ -160,7 +175,6 @@ namespace WorldPackets
uint32 PetExperienceLevel = 0;
uint32 PetCreatureFamilyID = 0;
- bool BoostInProgress = false; ///< @todo
int32 ProfessionIds[2] = { }; ///< @todo
struct VisualItemInfo
@@ -170,14 +184,41 @@ namespace WorldPackets
int32 SecondaryItemModifiedAppearanceID = 0; // also -1 is some special value
uint8 InvType = 0;
uint8 Subclass = 0;
+ uint32 ItemID = 0;
};
std::array<VisualItemInfo, 19> VisualItems = { };
+ CustomTabardInfo PersonalTabard;
+ };
+
+ struct CharacterRestrictionAndMailData
+ {
+ bool BoostInProgress = false; ///< @todo
+ uint32 Flags4 = 0;
std::vector<std::string> MailSenders;
std::vector<uint32> MailSenderTypes;
bool RpeResetAvailable = false;
bool RpeResetQuestClearAvailable = false;
- CustomTabardInfo PersonalTabard;
+ };
+
+ struct CharacterInfo
+ {
+ CharacterInfo(Field const* fields);
+
+ CharacterInfoBasic Basic;
+ CharacterRestrictionAndMailData RestrictionsAndMails;
+ };
+
+ struct RegionwideCharacterListEntry
+ {
+ RegionwideCharacterListEntry(Field const* fields);
+
+ CharacterInfoBasic Basic;
+ uint64 Money = 0;
+ float CurrentSeasonMythicPlusOverallScore = 0.0f;
+ uint32 CurrentSeasonBestPvpRating = 0;
+ int8 PvpRatingBracket = 0;
+ int16 PvpRatingAssociatedSpecID = 0;
};
struct RaceUnlock
@@ -212,20 +253,24 @@ namespace WorldPackets
WorldPacket const* Write() override;
- bool Success = false; ///<
+ bool Success = false;
+ bool Realmless = false;
bool IsDeletedCharacters = false; ///< used for character undelete list
bool IsNewPlayerRestrictionSkipped = false; ///< allows client to skip new player restrictions
bool IsNewPlayerRestricted = false; ///< forbids using level boost and class trials
bool IsNewPlayer = false; ///< forbids hero classes and allied races
bool IsTrialAccountRestricted = false;
+ bool DontCreateCharacterDisplays = false;
int32 MaxCharacterLevel = 1;
Optional<uint32> DisabledClassesMask;
std::vector<CharacterInfo> Characters; ///< all characters on the list
- std::vector<RaceUnlock> RaceUnlockData; ///<
+ std::vector<RegionwideCharacterListEntry> RegionwideCharacters;
+ std::vector<RaceUnlock> RaceUnlockData;
std::vector<UnlockedConditionalAppearance> UnlockedConditionalAppearances;
std::vector<RaceLimitDisableInfo> RaceLimitDisables;
+ std::vector<WarbandGroup> WarbandGroups;
};
class CheckCharacterNameAvailability final : public ClientPacket
@@ -656,6 +701,7 @@ namespace WorldPackets
Array<ChrCustomizationChoice, 250> Customizations;
int32 CustomizedRace = 0;
int32 CustomizedChrModelID = 0;
+ int32 UnalteredVisualRaceID = 0;
};
class BarberShopResult final : public ServerPacket
diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp
index 9ba99eb837e..6a7e93a32fa 100644
--- a/src/server/game/Server/Packets/CombatLogPackets.cpp
+++ b/src/server/game/Server/Packets/CombatLogPackets.cpp
@@ -110,7 +110,7 @@ WorldPacket const* SpellExecuteLog::Write()
{
*this << powerDrainTarget.Victim;
*this << uint32(powerDrainTarget.Points);
- *this << uint32(powerDrainTarget.PowerType);
+ *this << int8(powerDrainTarget.PowerType);
*this << float(powerDrainTarget.Amplitude);
}
}
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
index 11b66971073..3be80ecc4ce 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp
@@ -49,13 +49,13 @@ void SpellCastLogData::Initialize(Spell const* spell)
bool primaryPowerAdded = false;
for (SpellPowerCost const& cost : spell->GetPowerCost())
{
- PowerData.emplace_back(int32(cost.Power), unitCaster->GetPower(Powers(cost.Power)), int32(cost.Amount));
+ PowerData.emplace_back(int8(cost.Power), unitCaster->GetPower(Powers(cost.Power)), int32(cost.Amount));
if (cost.Power == primaryPowerType)
primaryPowerAdded = true;
}
if (!primaryPowerAdded)
- PowerData.emplace(PowerData.begin(), int32(primaryPowerType), unitCaster->GetPower(primaryPowerType), 0);
+ PowerData.emplace(PowerData.begin(), int8(primaryPowerType), unitCaster->GetPower(primaryPowerType), 0);
}
}
@@ -165,7 +165,7 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastLogData const& spellCastLogDat
for (SpellLogPowerData const& powerData : spellCastLogData.PowerData)
{
- data << int32(powerData.PowerType);
+ data << int8(powerData.PowerType);
data << int32(powerData.Amount);
data << int32(powerData.Cost);
}
diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
index 084d3851555..feda3b7afda 100644
--- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h
+++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h
@@ -30,9 +30,9 @@ namespace WorldPackets
{
struct SpellLogPowerData
{
- SpellLogPowerData(int32 powerType, int32 amount, int32 cost) : PowerType(powerType), Amount(amount), Cost(cost) { }
+ SpellLogPowerData(int8 powerType, int32 amount, int32 cost) : PowerType(powerType), Amount(amount), Cost(cost) { }
- int32 PowerType = 0;
+ int8 PowerType = 0;
int32 Amount = 0;
int32 Cost = 0;
};
diff --git a/src/server/game/Server/Packets/CombatPackets.cpp b/src/server/game/Server/Packets/CombatPackets.cpp
index 33dd2c9a64a..51de6ecde50 100644
--- a/src/server/game/Server/Packets/CombatPackets.cpp
+++ b/src/server/game/Server/Packets/CombatPackets.cpp
@@ -107,8 +107,8 @@ WorldPacket const* WorldPackets::Combat::PowerUpdate::Write()
_worldPacket << uint32(Powers.size());
for (PowerUpdatePower const& power : Powers)
{
- _worldPacket << int32(power.Power);
_worldPacket << uint8(power.PowerType);
+ _worldPacket << int32(power.Power);
}
return &_worldPacket;
@@ -116,7 +116,7 @@ WorldPacket const* WorldPackets::Combat::PowerUpdate::Write()
WorldPacket const* WorldPackets::Combat::InterruptPowerRegen::Write()
{
- _worldPacket << int32(PowerType);
+ _worldPacket << int8(PowerType);
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/CombatPackets.h b/src/server/game/Server/Packets/CombatPackets.h
index 27dc7ec44ad..42424d8f18b 100644
--- a/src/server/game/Server/Packets/CombatPackets.h
+++ b/src/server/game/Server/Packets/CombatPackets.h
@@ -163,7 +163,7 @@ namespace WorldPackets
class InterruptPowerRegen final : public ServerPacket
{
public:
- explicit InterruptPowerRegen(Powers powerType) : ServerPacket(SMSG_INTERRUPT_POWER_REGEN, 4), PowerType(powerType) { }
+ explicit InterruptPowerRegen(Powers powerType) : ServerPacket(SMSG_INTERRUPT_POWER_REGEN, 1), PowerType(powerType) { }
WorldPacket const* Write() override;
diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp
index d5518dda79e..ee03eedbb75 100644
--- a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp
@@ -44,6 +44,9 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData)
data << craftingData.ItemGUID;
data << int32(craftingData.Quantity);
data << int32(craftingData.EnchantID);
+ data << int32(craftingData.ConcentrationCurrencyID);
+ data << int32(craftingData.ConcentrationSpent);
+ data << int32(craftingData.IngenuityRefund);
for (SpellReducedReagent const& spellReducedReagent : craftingData.ResourcesReturned)
data << spellReducedReagent;
@@ -52,6 +55,8 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData)
data << Bits<1>(craftingData.field_29);
data << Bits<1>(craftingData.field_2A);
data << Bits<1>(craftingData.BonusCraft);
+ data << Bits<1>(craftingData.HasIngenuityProc);
+ data << Bits<1>(craftingData.ApplyConcentration);
data.FlushBits();
data << craftingData.OldItem;
diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.h b/src/server/game/Server/Packets/CraftingPacketsCommon.h
index 9426662d460..2182a28627b 100644
--- a/src/server/game/Server/Packets/CraftingPacketsCommon.h
+++ b/src/server/game/Server/Packets/CraftingPacketsCommon.h
@@ -52,6 +52,11 @@ struct CraftingData
Item::ItemInstance OldItem;
Item::ItemInstance NewItem;
int32 EnchantID = 0;
+ int32 ConcentrationCurrencyID = 0;
+ int32 ConcentrationSpent = 0;
+ int32 IngenuityRefund = 0;
+ bool HasIngenuityProc = false;
+ bool ApplyConcentration = false;
};
ByteBuffer& operator<<(ByteBuffer& data, SpellReducedReagent const& spellReducedReagent);
diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.cpp b/src/server/game/Server/Packets/EquipmentSetPackets.cpp
index 7d7fa640b9a..f8423393343 100644
--- a/src/server/game/Server/Packets/EquipmentSetPackets.cpp
+++ b/src/server/game/Server/Packets/EquipmentSetPackets.cpp
@@ -19,9 +19,9 @@
WorldPacket const* WorldPackets::EquipmentSet::EquipmentSetID::Write()
{
- _worldPacket << uint64(GUID);
_worldPacket << int32(Type);
_worldPacket << uint32(SetID);
+ _worldPacket << uint64(GUID);
return &_worldPacket;
}
@@ -119,8 +119,8 @@ void WorldPackets::EquipmentSet::UseEquipmentSet::Read()
WorldPacket const* WorldPackets::EquipmentSet::UseEquipmentSetResult::Write()
{
+ _worldPacket << int32(Reason);
_worldPacket << uint64(GUID);
- _worldPacket << uint8(Reason);
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.h b/src/server/game/Server/Packets/EquipmentSetPackets.h
index a36c95829e0..ed4165b4236 100644
--- a/src/server/game/Server/Packets/EquipmentSetPackets.h
+++ b/src/server/game/Server/Packets/EquipmentSetPackets.h
@@ -94,7 +94,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint64 GUID = 0; ///< Set Identifier
- uint8 Reason = 0;
+ int32 Reason = 0;
};
}
}
diff --git a/src/server/game/Server/Packets/GarrisonPackets.cpp b/src/server/game/Server/Packets/GarrisonPackets.cpp
index c3212ea899c..20f14eaa47e 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.cpp
+++ b/src/server/game/Server/Packets/GarrisonPackets.cpp
@@ -41,7 +41,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonPlotInfo const& plotInfo)
{
data << uint32(plotInfo.GarrPlotInstanceID);
data << plotInfo.PlotPos;
- data << uint32(plotInfo.PlotType);
+ data << uint8(plotInfo.PlotType);
return data;
}
@@ -232,7 +232,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison)
ASSERT(garrison.Missions.size() == garrison.MissionOvermaxRewards.size());
ASSERT(garrison.Missions.size() == garrison.CanStartMission.size());
- data << int32(garrison.GarrTypeID);
+ data << uint8(garrison.GarrTypeID);
data << int32(garrison.GarrSiteID);
data << int32(garrison.GarrSiteLevelID);
data << uint32(garrison.Buildings.size());
@@ -310,7 +310,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison)
ByteBuffer& operator<<(ByteBuffer& data, FollowerSoftCapInfo const& followerSoftCapInfo)
{
- data << int32(followerSoftCapInfo.GarrFollowerTypeID);
+ data << uint8(followerSoftCapInfo.GarrFollowerTypeID);
data << uint32(followerSoftCapInfo.Count);
return data;
}
@@ -365,7 +365,7 @@ void GarrisonPurchaseBuilding::Read()
WorldPacket const* GarrisonPlaceBuildingResult::Write()
{
- _worldPacket << int32(GarrTypeID);
+ _worldPacket << uint8(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << BuildingInfo;
_worldPacket.WriteBit(PlayActivationCinematic);
@@ -382,7 +382,7 @@ void GarrisonCancelConstruction::Read()
WorldPacket const* GarrisonBuildingRemoved::Write()
{
- _worldPacket << int32(GarrTypeID);
+ _worldPacket << uint8(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << uint32(GarrPlotInstanceID);
_worldPacket << uint32(GarrBuildingID);
@@ -392,7 +392,7 @@ WorldPacket const* GarrisonBuildingRemoved::Write()
WorldPacket const* GarrisonLearnBlueprintResult::Write()
{
- _worldPacket << int32(GarrTypeID);
+ _worldPacket << uint8(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << uint32(BuildingID);
@@ -401,7 +401,7 @@ WorldPacket const* GarrisonLearnBlueprintResult::Write()
WorldPacket const* GarrisonUnlearnBlueprintResult::Write()
{
- _worldPacket << int32(GarrTypeID);
+ _worldPacket << uint8(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << uint32(BuildingID);
@@ -410,7 +410,7 @@ WorldPacket const* GarrisonUnlearnBlueprintResult::Write()
WorldPacket const* GarrisonRequestBlueprintAndSpecializationDataResult::Write()
{
- _worldPacket << int32(GarrTypeID);
+ _worldPacket << uint8(GarrTypeID);
_worldPacket << uint32(BlueprintsKnown ? BlueprintsKnown->size() : 0);
_worldPacket << uint32(SpecializationsKnown ? SpecializationsKnown->size() : 0);
if (BlueprintsKnown)
@@ -443,7 +443,7 @@ WorldPacket const* GarrisonMapDataResponse::Write()
WorldPacket const* GarrisonPlotPlaced::Write()
{
- _worldPacket << int32(GarrTypeID);
+ _worldPacket << uint8(GarrTypeID);
_worldPacket << *PlotInfo;
return &_worldPacket;
@@ -458,7 +458,7 @@ WorldPacket const* GarrisonPlotRemoved::Write()
WorldPacket const* GarrisonAddFollowerResult::Write()
{
- _worldPacket << int32(GarrTypeID);
+ _worldPacket << uint8(GarrTypeID);
_worldPacket << uint32(Result);
_worldPacket << Follower;
@@ -467,9 +467,9 @@ WorldPacket const* GarrisonAddFollowerResult::Write()
WorldPacket const* GarrisonRemoveFollowerResult::Write()
{
- _worldPacket << uint64(FollowerDBID);
- _worldPacket << int32(GarrTypeID);
+ _worldPacket << uint8(GarrTypeID);
_worldPacket << uint32(Result);
+ _worldPacket << uint64(FollowerDBID);
_worldPacket << uint32(Destroyed);
return &_worldPacket;
diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h
index 983982842f8..4053c784582 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.h
+++ b/src/server/game/Server/Packets/GarrisonPackets.h
@@ -68,7 +68,7 @@ namespace WorldPackets
{
uint32 GarrPlotInstanceID = 0;
TaggedPosition<Position::XYZO> PlotPos;
- uint32 PlotType = 0;
+ uint8 PlotType = 0;
};
struct GarrisonBuildingInfo
@@ -197,7 +197,7 @@ namespace WorldPackets
struct GarrisonInfo
{
- int32 GarrTypeID = 0;
+ uint8 GarrTypeID = 0;
uint32 GarrSiteID = 0;
uint32 GarrSiteLevelID = 0;
uint32 NumFollowerActivationsRemaining = 0;
@@ -221,7 +221,7 @@ namespace WorldPackets
struct FollowerSoftCapInfo
{
- int32 GarrFollowerTypeID;
+ uint8 GarrFollowerTypeID;
uint32 Count;
};
@@ -281,7 +281,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int32 GarrTypeID = 0;
+ uint8 GarrTypeID = 0;
uint32 Result = 0;
GarrisonBuildingInfo BuildingInfo;
bool PlayActivationCinematic = false;
@@ -305,7 +305,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int32 GarrTypeID = 0;
+ uint8 GarrTypeID = 0;
uint32 Result = 0;
uint32 GarrPlotInstanceID = 0;
uint32 GarrBuildingID = 0;
@@ -318,7 +318,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int32 GarrTypeID = 0;
+ uint8 GarrTypeID = 0;
uint32 BuildingID = 0;
uint32 Result = 0;
};
@@ -330,9 +330,9 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int32 GarrTypeID = 0;
- uint32 BuildingID = 0;
+ uint8 GarrTypeID = 0;
uint32 Result = 0;
+ uint32 BuildingID = 0;
};
class GarrisonRequestBlueprintAndSpecializationData final : public ClientPacket
@@ -350,9 +350,9 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int32 GarrTypeID = 0;
- std::unordered_set<uint32> const* SpecializationsKnown = nullptr;
+ uint8 GarrTypeID = 0;
std::unordered_set<uint32> const* BlueprintsKnown = nullptr;
+ std::unordered_set<uint32> const* SpecializationsKnown = nullptr;
};
class GarrisonGetMapData final : public ClientPacket
@@ -389,7 +389,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int32 GarrTypeID = 0;
+ uint8 GarrTypeID = 0;
GarrisonPlotInfo* PlotInfo = nullptr;
};
@@ -410,7 +410,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
- int32 GarrTypeID = 0;
+ uint8 GarrTypeID = 0;
GarrisonFollower Follower;
uint32 Result = 0;
};
@@ -418,13 +418,13 @@ namespace WorldPackets
class GarrisonRemoveFollowerResult final : public ServerPacket
{
public:
- GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 8 + 4 + 4 + 4) { }
+ GarrisonRemoveFollowerResult() : ServerPacket(SMSG_GARRISON_REMOVE_FOLLOWER_RESULT, 1 + 4 + 8 + 4) { }
WorldPacket const* Write() override;
- uint64 FollowerDBID = 0;
- int32 GarrTypeID = 0;
+ uint8 GarrTypeID = 0;
uint32 Result = 0;
+ uint64 FollowerDBID = 0;
uint32 Destroyed = 0;
};
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 88c971c8ae7..db54693206f 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -109,6 +109,11 @@ WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write()
return &_worldPacket;
}
+void WorldPackets::Guild::AcceptGuildInvite::Read()
+{
+ _worldPacket >> GuildGuid;
+}
+
void WorldPackets::Guild::DeclineGuildInvites::Read()
{
Allow = _worldPacket.ReadBit();
@@ -214,7 +219,6 @@ WorldPacket const* WorldPackets::Guild::GuildEventPresenceChange::Write()
_worldPacket.WriteBits(Name.length(), 6);
_worldPacket.WriteBit(LoggedOn);
- _worldPacket.WriteBit(Mobile);
_worldPacket.FlushBits();
_worldPacket.WriteString(Name);
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index 31f9c6ba62d..f78d582c83f 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -173,7 +173,9 @@ namespace WorldPackets
public:
AcceptGuildInvite(WorldPacket&& packet) : ClientPacket(CMSG_ACCEPT_GUILD_INVITE, std::move(packet)) { }
- void Read() override { }
+ void Read() override;
+
+ ObjectGuid GuildGuid;
};
class GuildDeclineInvitation final : public ClientPacket
@@ -250,7 +252,6 @@ namespace WorldPackets
ObjectGuid Guid;
uint32 VirtualRealmAddress = 0;
std::string Name;
- bool Mobile = false;
bool LoggedOn = false;
};
diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp
index 41e73128573..86caa86b6ee 100644
--- a/src/server/game/Server/Packets/InstancePackets.cpp
+++ b/src/server/game/Server/Packets/InstancePackets.cpp
@@ -108,9 +108,11 @@ WorldPacket const* WorldPackets::Instance::PendingRaidLock::Write()
WorldPacket const* WorldPackets::Instance::RaidInstanceMessage::Write()
{
- _worldPacket << uint8(Type);
+ _worldPacket << int32(Type);
_worldPacket << uint32(MapID);
_worldPacket << uint32(DifficultyID);
+ _worldPacket << int32(TimeLeft);
+ _worldPacket << BitsSize<8>(WarningMessage);
_worldPacket << Bits<1>(Locked);
_worldPacket << Bits<1>(Extended);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h
index 86f6838946f..ab980ca148f 100644
--- a/src/server/game/Server/Packets/InstancePackets.h
+++ b/src/server/game/Server/Packets/InstancePackets.h
@@ -157,9 +157,11 @@ namespace WorldPackets
WorldPacket const* Write() override;
- uint8 Type = 0;
+ int32 Type = 0;
uint32 MapID = 0;
uint32 DifficultyID = 0;
+ int32 TimeLeft = 0;
+ std::string_view WarningMessage; // GlobalStrings tag
bool Locked = false;
bool Extended = false;
};
diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp
index 7dc3dc23138..5dccbe3e1c9 100644
--- a/src/server/game/Server/Packets/ItemPackets.cpp
+++ b/src/server/game/Server/Packets/ItemPackets.cpp
@@ -254,10 +254,11 @@ WorldPacket const* WorldPackets::Item::ItemPushResult::Write()
_worldPacket << int32(QuestLogItemID);
_worldPacket << int32(Quantity);
_worldPacket << int32(QuantityInInventory);
+ _worldPacket << int32(QuantityInQuestLog);
_worldPacket << int32(DungeonEncounterID);
_worldPacket << int32(BattlePetSpeciesID);
_worldPacket << int32(BattlePetBreedID);
- _worldPacket << uint32(BattlePetBreedQuality);
+ _worldPacket << uint8(BattlePetBreedQuality);
_worldPacket << int32(BattlePetLevel);
_worldPacket << ItemGUID;
_worldPacket << uint32(Toasts.size());
diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h
index 60287883441..e1b33cc99db 100644
--- a/src/server/game/Server/Packets/ItemPackets.h
+++ b/src/server/game/Server/Packets/ItemPackets.h
@@ -347,10 +347,11 @@ namespace WorldPackets
// only set if different than real ID (similar to CreatureTemplate.KillCredit)
int32 Quantity = 0;
int32 QuantityInInventory = 0;
+ int32 QuantityInQuestLog = 0;
int32 DungeonEncounterID = 0;
int32 BattlePetSpeciesID = 0;
int32 BattlePetBreedID = 0;
- uint32 BattlePetBreedQuality = 0;
+ uint8 BattlePetBreedQuality = 0;
int32 BattlePetLevel = 0;
ObjectGuid ItemGUID;
std::vector<UiEventToast> Toasts;
@@ -488,6 +489,14 @@ namespace WorldPackets
ObjectGuid Item;
};
+ class SortAccountBankBags final : public ClientPacket
+ {
+ public:
+ explicit SortAccountBankBags(WorldPacket&& packet) : ClientPacket(CMSG_SORT_ACCOUNT_BANK_BAGS, std::move(packet)) { }
+
+ void Read() override { }
+ };
+
class SortBags final : public ClientPacket
{
public:
@@ -545,7 +554,7 @@ namespace WorldPackets
void Read() override;
- uint32 BagIndex = 0;
+ uint8 BagIndex = 0;
BagSlotFlags FlagToChange = { };
bool On = false;
};
@@ -557,7 +566,7 @@ namespace WorldPackets
void Read() override;
- uint32 BagIndex = 0;
+ uint8 BagIndex = 0;
BagSlotFlags FlagToChange = { };
bool On = false;
};
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
index e68a6f35dca..9fdc43bc91b 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
@@ -163,16 +163,16 @@ ByteBuffer& operator>>(ByteBuffer& data, ItemBonuses& itemBonusInstanceData)
ByteBuffer& operator<<(ByteBuffer& data, ItemMod const& itemMod)
{
- data << int32(itemMod.Value);
data << uint8(itemMod.Type);
+ data << int32(itemMod.Value);
return data;
}
ByteBuffer& operator>>(ByteBuffer& data, ItemMod& itemMod)
{
- data >> itemMod.Value;
data >> As<uint8>(itemMod.Type);
+ data >> itemMod.Value;
return data;
}
diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp
index 895c12fb704..242a0c0594b 100644
--- a/src/server/game/Server/Packets/MovementPackets.cpp
+++ b/src/server/game/Server/Packets/MovementPackets.cpp
@@ -691,6 +691,7 @@ WorldPacket const* WorldPackets::Movement::NewWorld::Write()
_worldPacket << Loc;
_worldPacket << uint32(Reason);
_worldPacket << MovementOffset;
+ _worldPacket << int32(Counter);
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h
index 77cc00d71c7..ed05e244c19 100644
--- a/src/server/game/Server/Packets/MovementPackets.h
+++ b/src/server/game/Server/Packets/MovementPackets.h
@@ -283,6 +283,7 @@ namespace WorldPackets
uint32 Reason = 0;
TeleportLocation Loc;
TaggedPosition<Position::XYZ> MovementOffset; // Adjusts all pending movement events by this offset
+ int32 Counter = 0;
};
class WorldPortResponse final : public ClientPacket
diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp
index 4a81fef3f0b..7ba4257f4f1 100644
--- a/src/server/game/Server/Packets/NPCPackets.cpp
+++ b/src/server/game/Server/Packets/NPCPackets.cpp
@@ -51,6 +51,7 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption
data << Bits<2>(gossipOption.Status);
data << OptionalInit(gossipOption.SpellID);
data << OptionalInit(gossipOption.OverrideIconID);
+ data << Bits<8>(gossipOption.FailureDescription.length() + 1);
data.FlushBits();
data << gossipOption.Treasure;
@@ -64,6 +65,9 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption
if (gossipOption.OverrideIconID)
data << int32(*gossipOption.OverrideIconID);
+ if (!gossipOption.FailureDescription.empty())
+ data << gossipOption.FailureDescription;
+
return data;
}
@@ -74,9 +78,12 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText)
data << int32(gossipText.QuestType);
data << int32(gossipText.QuestFlags[0]);
data << int32(gossipText.QuestFlags[1]);
+ data << int32(gossipText.QuestFlags[2]);
data << Bits<1>(gossipText.Repeatable);
+ data << Bits<1>(gossipText.ResetByScheduler);
data << Bits<1>(gossipText.Important);
+ data << Bits<1>(gossipText.Meta);
data << BitsSize<9>(gossipText.QuestTitle);
data.FlushBits();
@@ -104,6 +111,7 @@ WorldPacket const* GossipMessage::Write()
{
_worldPacket << GossipGUID;
_worldPacket << int32(GossipID);
+ _worldPacket << int32(LfgDungeonsID);
_worldPacket << int32(FriendshipFactionID);
_worldPacket << uint32(GossipOptions.size());
_worldPacket << uint32(GossipText.size());
diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h
index 79b2bd45625..41b96bfc763 100644
--- a/src/server/game/Server/Packets/NPCPackets.h
+++ b/src/server/game/Server/Packets/NPCPackets.h
@@ -34,7 +34,6 @@ namespace WorldPackets
{
namespace NPC
{
- // CMSG_BANKER_ACTIVATE
// CMSG_BINDER_ACTIVATE
// CMSG_BINDER_CONFIRM
// CMSG_GOSSIP_HELLO
@@ -90,6 +89,7 @@ namespace WorldPackets
TreasureLootList Treasure;
Optional<int32> SpellID;
Optional<int32> OverrideIconID;
+ std::string FailureDescription;
};
struct ClientGossipText
@@ -98,9 +98,11 @@ namespace WorldPackets
int32 ContentTuningID = 0;
int32 QuestType = 0;
bool Repeatable = false;
+ bool ResetByScheduler = false;
bool Important = false;
+ bool Meta = false;
std::string QuestTitle;
- std::array<int32, 2> QuestFlags = { };
+ std::array<int32, 3> QuestFlags = { };
};
ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText);
@@ -119,6 +121,7 @@ namespace WorldPackets
Optional<int32> TextID; // in classic variants this still holds npc_text id
Optional<int32> BroadcastTextID;
int32 GossipID = 0;
+ int32 LfgDungeonsID = 0;
};
class GossipSelectOption final : public ClientPacket
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index fc8365dd507..5b7e79a164b 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -508,6 +508,7 @@ WorldPacket const* WorldPackets::Party::PartyUpdate::Write()
_worldPacket << uint32(SequenceNum);
_worldPacket << LeaderGUID;
_worldPacket << uint8(LeaderFactionGroup);
+ _worldPacket << int32(PingRestriction);
_worldPacket << uint32(PlayerList.size());
_worldPacket.WriteBit(LfgInfos.has_value());
_worldPacket.WriteBit(LootSettings.has_value());
@@ -736,7 +737,7 @@ WorldPacket const* WorldPackets::Party::BroadcastSummonResponse::Write()
void WorldPackets::Party::SetRestrictPingsToAssistants::Read()
{
_worldPacket >> OptionalInit(PartyIndex);
- _worldPacket >> Bits<1>(RestrictPingsToAssistants);
+ _worldPacket >> As<int32>(RestrictTo);
if (PartyIndex)
_worldPacket >> PartyIndex.emplace();
}
@@ -764,8 +765,9 @@ void WorldPackets::Party::SendPingWorldPoint::Read()
_worldPacket >> SenderGUID;
_worldPacket >> MapID;
_worldPacket >> Point;
- _worldPacket >> As<uint8>(Type);
+ _worldPacket >> As<int32>(Type);
_worldPacket >> PinFrameID;
+ _worldPacket >> Transport;
}
WorldPacket const* WorldPackets::Party::ReceivePingWorldPoint::Write()
@@ -775,6 +777,7 @@ WorldPacket const* WorldPackets::Party::ReceivePingWorldPoint::Write()
_worldPacket << Point;
_worldPacket << uint8(Type);
_worldPacket << PinFrameID;
+ _worldPacket << Transport;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h
index a865f1f1e7c..1adaa3d33dd 100644
--- a/src/server/game/Server/Packets/PartyPackets.h
+++ b/src/server/game/Server/Packets/PartyPackets.h
@@ -561,6 +561,8 @@ namespace WorldPackets
int32 MyIndex = 0;
int32 SequenceNum = 0;
+ RestrictPingsTo PingRestriction = RestrictPingsTo::None;
+
std::vector<PartyPlayerInfo> PlayerList;
Optional<PartyLFGInfo> LfgInfos;
@@ -674,7 +676,7 @@ namespace WorldPackets
void Read() override;
Optional<uint8> PartyIndex;
- bool RestrictPingsToAssistants = false;
+ RestrictPingsTo RestrictTo = RestrictPingsTo::None;
};
class SendPingUnit final : public ClientPacket
@@ -715,6 +717,7 @@ namespace WorldPackets
TaggedPosition<Position::XYZ> Point;
PingSubjectType Type = PingSubjectType::Max;
uint32 PinFrameID = 0;
+ ObjectGuid Transport;
};
class ReceivePingWorldPoint final : public ServerPacket
@@ -729,6 +732,7 @@ namespace WorldPackets
TaggedPosition<Position::XYZ> Point;
PingSubjectType Type = PingSubjectType::Max;
uint32 PinFrameID = 0;
+ ObjectGuid Transport;
};
class CancelPingPin final : public ServerPacket
diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp
index 72bde99ff5d..3e1f6aefd51 100644
--- a/src/server/game/Server/Packets/QueryPackets.cpp
+++ b/src/server/game/Server/Packets/QueryPackets.cpp
@@ -374,9 +374,9 @@ WorldPacket const* CorpseLocation::Write()
_worldPacket << Player;
_worldPacket << ActualMapID;
- _worldPacket << Position;
_worldPacket << MapID;
_worldPacket << Transport;
+ _worldPacket << Position;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 1d8dc537de5..d1f31ccc7a7 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -182,7 +182,7 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << uint32(Info.Objectives.size());
_worldPacket << uint64(Info.AllowableRaces.RawValue);
- _worldPacket << int32(Info.TreasurePickerID);
+ _worldPacket << uint32(Info.TreasurePickerID.size());
_worldPacket << int32(Info.Expansion);
_worldPacket << int32(Info.ManagedWorldStateID);
_worldPacket << int32(Info.QuestSessionBonus);
@@ -194,6 +194,9 @@ WorldPacket const* QueryQuestInfoResponse::Write()
for (QuestCompleteDisplaySpell const& rewardDisplaySpell : Info.RewardDisplaySpell)
_worldPacket << rewardDisplaySpell;
+ if (!Info.TreasurePickerID.empty())
+ _worldPacket.append(Info.TreasurePickerID.data(), Info.TreasurePickerID.size());
+
_worldPacket << BitsSize<9>(Info.LogTitle);
_worldPacket << BitsSize<12>(Info.LogDescription);
_worldPacket << BitsSize<12>(Info.QuestDescription);
@@ -204,12 +207,13 @@ WorldPacket const* QueryQuestInfoResponse::Write()
_worldPacket << BitsSize<8>(Info.PortraitTurnInName);
_worldPacket << BitsSize<11>(Info.QuestCompletionLog);
_worldPacket << Bits<1>(Info.ReadyForTranslation);
+ _worldPacket << Bits<1>(Info.ResetByScheduler);
_worldPacket.FlushBits();
for (QuestObjective const& questObjective : Info.Objectives)
{
_worldPacket << uint32(questObjective.ID);
- _worldPacket << uint8(questObjective.Type);
+ _worldPacket << int32(questObjective.Type);
_worldPacket << int8(questObjective.StorageIndex);
_worldPacket << int32(questObjective.ObjectID);
_worldPacket << int32(questObjective.Amount);
@@ -276,11 +280,26 @@ WorldPacket const* QuestUpdateAddPvPCredit::Write()
return &_worldPacket;
}
+ByteBuffer& operator<<(ByteBuffer& data, QuestRewardItem const& questRewardItem)
+{
+ data << int32(questRewardItem.ItemID);
+ data << int32(questRewardItem.ItemQty);
+ data << OptionalInit(questRewardItem.ContextFlags);
+ data.FlushBits();
+ if (questRewardItem.ContextFlags)
+ data << As<int32>(*questRewardItem.ContextFlags);
+
+ return data;
+}
+
ByteBuffer& operator<<(ByteBuffer& data, QuestChoiceItem const& questChoiceItem)
{
data << Bits<2>(questChoiceItem.LootItemType);
+ data << OptionalInit(questChoiceItem.ContextFlags);
data << questChoiceItem.Item;
data << int32(questChoiceItem.Quantity);
+ if (questChoiceItem.ContextFlags)
+ data << As<int32>(*questChoiceItem.ContextFlags);
return data;
}
@@ -289,23 +308,35 @@ ByteBuffer& operator>>(ByteBuffer& data, QuestChoiceItem& questChoiceItem)
{
data.ResetBitPos();
data >> Bits<2>(questChoiceItem.LootItemType);
+ data >> OptionalInit(questChoiceItem.ContextFlags);
data >> questChoiceItem.Item;
data >> questChoiceItem.Quantity;
+ if (questChoiceItem.ContextFlags)
+ data >> As<int32>(*questChoiceItem.ContextFlags);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, QuestRewardCurrency const& questRewardCurrency)
+{
+ data << int32(questRewardCurrency.CurrencyID);
+ data << int32(questRewardCurrency.CurrencyQty);
+ data << int32(questRewardCurrency.BonusQty);
+ data << OptionalInit(questRewardCurrency.ContextFlags);
+ data.FlushBits();
+ if (questRewardCurrency.ContextFlags)
+ data << As<int32>(*questRewardCurrency.ContextFlags);
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, QuestRewards const& questRewards)
{
+ for (QuestRewardItem const& item : questRewards.Items)
+ data << item;
+
data << int32(questRewards.ChoiceItemCount);
data << int32(questRewards.ItemCount);
-
- for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i)
- {
- data << int32(questRewards.ItemID[i]);
- data << int32(questRewards.ItemQty[i]);
- }
-
data << int32(questRewards.Money);
data << int32(questRewards.XP);
data << int64(questRewards.ArtifactXP);
@@ -326,22 +357,21 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestRewards const& questRewards)
data << int32(questRewards.SpellCompletionID);
- for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i)
- {
- data << int32(questRewards.CurrencyID[i]);
- data << int32(questRewards.CurrencyQty[i]);
- }
-
data << int32(questRewards.SkillLineID);
data << int32(questRewards.NumSkillUps);
- data << int32(questRewards.TreasurePickerID);
+ data << uint32(questRewards.TreasurePickerID.size());
+ if (!questRewards.TreasurePickerID.empty())
+ data.append(questRewards.TreasurePickerID.data(), questRewards.TreasurePickerID.size());
- for (QuestChoiceItem const& choiceItem : questRewards.ChoiceItems)
- data << choiceItem;
+ for (QuestRewardCurrency const& currency : questRewards.Currencies)
+ data << currency;
data << Bits<1>(questRewards.IsBoostSpell);
data.FlushBits();
+ for (QuestChoiceItem const& choiceItem : questRewards.ChoiceItems)
+ data << choiceItem;
+
return data;
}
@@ -354,6 +384,7 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestGiverOfferReward const& offer)
data << int32(offer.QuestFlags[1]); // FlagsEx
data << int32(offer.QuestFlags[2]); // FlagsEx2
data << int32(offer.SuggestedPartyMembers);
+ data << int32(offer.QuestInfoID);
data << int32(offer.Emotes.size());
for (QuestDescEmote const& emote : offer.Emotes)
{
@@ -456,6 +487,7 @@ WorldPacket const* QuestGiverQuestDetails::Write()
_worldPacket << uint32(DescEmotes.size());
_worldPacket << uint32(Objectives.size());
_worldPacket << int32(QuestStartItemID);
+ _worldPacket << int32(QuestInfoID);
_worldPacket << int32(QuestSessionBonus);
_worldPacket << int32(QuestGiverCreatureID);
_worldPacket << uint32(ConditionalDescriptionText.size());
@@ -472,9 +504,9 @@ WorldPacket const* QuestGiverQuestDetails::Write()
for (QuestObjectiveSimple const& obj : Objectives)
{
_worldPacket << int32(obj.ID);
+ _worldPacket << int32(obj.Type);
_worldPacket << int32(obj.ObjectID);
_worldPacket << int32(obj.Amount);
- _worldPacket << uint8(obj.Type);
}
_worldPacket << BitsSize<9>(QuestTitle);
@@ -521,6 +553,7 @@ WorldPacket const* QuestGiverRequestItems::Write()
_worldPacket << int32(Collect.size());
_worldPacket << int32(Currency.size());
_worldPacket << int32(StatusFlags);
+ _worldPacket << int32(QuestInfoID);
for (QuestObjectiveCollect const& obj : Collect)
{
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index a6c89c0cd69..f119eac4e31 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -185,7 +185,7 @@ namespace WorldPackets
int32 CompleteSoundKitID = 0;
int32 AreaGroupID = 0;
int64 TimeAllowed = 0;
- int32 TreasurePickerID = 0;
+ std::span<int32 const> TreasurePickerID;
int32 Expansion = 0;
int32 ManagedWorldStateID = 0;
int32 QuestSessionBonus = 0;
@@ -205,6 +205,7 @@ namespace WorldPackets
int32 RewardCurrencyID[QUEST_REWARD_CURRENCY_COUNT] = { };
int32 RewardCurrencyQty[QUEST_REWARD_CURRENCY_COUNT] = { };
bool ReadyForTranslation = false;
+ bool ResetByScheduler = false;
};
class QueryQuestInfoResponse final : public ServerPacket
@@ -257,11 +258,27 @@ namespace WorldPackets
uint16 Count = 0;
};
+ struct QuestRewardItem
+ {
+ int32 ItemID = 0;
+ int32 ItemQty = 0;
+ Optional<QuestRewardContextFlags> ContextFlags;
+ };
+
struct QuestChoiceItem
{
::LootItemType LootItemType = ::LootItemType::Item;
Item::ItemInstance Item;
int32 Quantity = 0;
+ Optional<QuestRewardContextFlags> ContextFlags;
+ };
+
+ struct QuestRewardCurrency
+ {
+ int32 CurrencyID = 0;
+ int32 CurrencyQty = 0;
+ int32 BonusQty = 0;
+ Optional<QuestRewardContextFlags> ContextFlags;
};
struct QuestRewards
@@ -279,16 +296,14 @@ namespace WorldPackets
int32 SpellCompletionID = 0;
int32 SkillLineID = 0;
int32 NumSkillUps = 0;
- int32 TreasurePickerID = 0;
+ std::span<int32 const> TreasurePickerID;
std::array<QuestChoiceItem, QUEST_REWARD_CHOICES_COUNT> ChoiceItems = { };
- std::array<int32, QUEST_REWARD_ITEM_COUNT> ItemID = { };
- std::array<int32, QUEST_REWARD_ITEM_COUNT> ItemQty = { };
+ std::array<QuestRewardItem, QUEST_REWARD_ITEM_COUNT> Items = { };
std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionID = { };
std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionValue = { };
std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionOverride = { };
std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionCapIn = { };
- std::array<int32, QUEST_REWARD_CURRENCY_COUNT> CurrencyID = { };
- std::array<int32, QUEST_REWARD_CURRENCY_COUNT> CurrencyQty = { };
+ std::array<QuestRewardCurrency, QUEST_REWARD_CURRENCY_COUNT> Currencies = { };
bool IsBoostSpell = false;
};
@@ -309,6 +324,7 @@ namespace WorldPackets
QuestRewards Rewards;
std::vector<QuestDescEmote> Emotes;
std::array<int32, 3> QuestFlags = { };
+ int32 QuestInfoID = 0;
};
class QuestGiverOfferRewardMessage final : public ServerPacket
@@ -390,9 +406,9 @@ namespace WorldPackets
struct QuestObjectiveSimple
{
int32 ID = 0;
+ int32 Type = 0;
int32 ObjectID = 0;
int32 Amount = 0;
- uint8 Type = 0;
};
class QuestGiverQuestDetails final : public ServerPacket
@@ -417,6 +433,7 @@ namespace WorldPackets
int32 PortraitGiverMount = 0;
int32 PortraitGiverModelSceneID = 0;
int32 QuestStartItemID = 0;
+ int32 QuestInfoID = 0;
int32 QuestSessionBonus = 0;
int32 QuestGiverCreatureID = 0;
std::string PortraitGiverText;
@@ -466,6 +483,7 @@ namespace WorldPackets
std::vector<QuestObjectiveCollect> Collect;
std::vector<QuestCurrency> Currency;
int32 StatusFlags = 0;
+ int32 QuestInfoID = 0;
uint32 QuestFlags[3] = { };
std::string QuestTitle;
std::string CompletionText;
diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp
index aff39c3bbde..fece28f80b7 100644
--- a/src/server/game/Server/Packets/ReputationPackets.cpp
+++ b/src/server/game/Server/Packets/ReputationPackets.cpp
@@ -18,18 +18,37 @@
#include "ReputationPackets.h"
#include "PacketUtilities.h"
+namespace WorldPackets::Reputation
+{
+ByteBuffer& operator<<(ByteBuffer& data, FactionData const& factionData)
+{
+ data << int32(factionData.FactionID);
+ data << uint16(factionData.Flags);
+ data << int32(factionData.Standing);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, FactionBonusData const& factionBonusData)
+{
+ data << int32(factionBonusData.FactionID);
+ data << Bits<1>(factionBonusData.FactionHasBonus);
+ data.FlushBits();
+
+ return data;
+}
+}
+
WorldPacket const* WorldPackets::Reputation::InitializeFactions::Write()
{
- for (uint16 i = 0; i < FactionCount; ++i)
- {
- _worldPacket << uint16(FactionFlags[i]);
- _worldPacket << int32(FactionStandings[i]);
- }
+ _worldPacket << uint32(Factions.size());
+ _worldPacket << uint32(Bonuses.size());
- for (uint16 i = 0; i < FactionCount; ++i)
- _worldPacket.WriteBit(FactionHasBonus[i]);
+ for (FactionData const& faction : Factions)
+ _worldPacket << faction;
- _worldPacket.FlushBits();
+ for (FactionBonusData const& bonus : Bonuses)
+ _worldPacket << bonus;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h
index c38c4235914..98b0146e9b4 100644
--- a/src/server/game/Server/Packets/ReputationPackets.h
+++ b/src/server/game/Server/Packets/ReputationPackets.h
@@ -25,18 +25,28 @@ namespace WorldPackets
{
namespace Reputation
{
- static constexpr uint16 FactionCount = 1000;
+ struct FactionData
+ {
+ int32 FactionID = 0;
+ uint16 Flags = 0;
+ int32 Standing = 0;
+ };
+
+ struct FactionBonusData
+ {
+ int32 FactionID = 0;
+ bool FactionHasBonus = false;
+ };
class InitializeFactions final : public ServerPacket
{
public:
- InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, FactionCount * (4 + 2) + FactionCount / 8) { }
+ InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, 0x1000) { }
WorldPacket const* Write() override;
- std::array<int32, FactionCount> FactionStandings = { };
- std::array<bool, FactionCount> FactionHasBonus = { }; ///< @todo: implement faction bonus
- std::array<uint16, FactionCount> FactionFlags = { }; ///< @see enum FactionFlags
+ std::vector<FactionData> Factions;
+ std::vector<FactionBonusData> Bonuses;
};
class RequestForcedReactions final : public ClientPacket
diff --git a/src/server/game/Server/Packets/ScenePackets.cpp b/src/server/game/Server/Packets/ScenePackets.cpp
index 98ead11342e..bab779d2fb0 100644
--- a/src/server/game/Server/Packets/ScenePackets.cpp
+++ b/src/server/game/Server/Packets/ScenePackets.cpp
@@ -26,6 +26,7 @@ WorldPacket const* WorldPackets::Scenes::PlayScene::Write()
_worldPacket << int32(SceneScriptPackageID);
_worldPacket << TransportGUID;
_worldPacket << Location;
+ _worldPacket << int32(MovieID);
_worldPacket << Bits<1>(Encrypted);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/ScenePackets.h b/src/server/game/Server/Packets/ScenePackets.h
index af33a9e68ab..f5c091d6803 100644
--- a/src/server/game/Server/Packets/ScenePackets.h
+++ b/src/server/game/Server/Packets/ScenePackets.h
@@ -37,6 +37,7 @@ namespace WorldPackets
uint32 PlaybackFlags = 0;
uint32 SceneInstanceID = 0;
int32 SceneScriptPackageID = 0;
+ int32 MovieID = 0;
ObjectGuid TransportGUID;
TaggedPosition<Position::XYZO> Location;
bool Encrypted = false;
diff --git a/src/server/game/Server/Packets/SocialPackets.cpp b/src/server/game/Server/Packets/SocialPackets.cpp
index 7e7d7e188e5..839a9ea91f0 100644
--- a/src/server/game/Server/Packets/SocialPackets.cpp
+++ b/src/server/game/Server/Packets/SocialPackets.cpp
@@ -50,7 +50,6 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Social::ContactInfo const
data << uint32(contact.Level);
data << uint32(contact.ClassID);
data.WriteBits(contact.Notes.length(), 10);
- data.WriteBit(contact.Mobile);
data.FlushBits();
data.WriteString(contact.Notes);
@@ -93,7 +92,6 @@ WorldPacket const* WorldPackets::Social::FriendStatus::Write()
_worldPacket << uint32(Level);
_worldPacket << uint32(ClassID);
_worldPacket.WriteBits(Notes.length(), 10);
- _worldPacket.WriteBit(Mobile);
_worldPacket.FlushBits();
_worldPacket.WriteString(Notes);
diff --git a/src/server/game/Server/Packets/SocialPackets.h b/src/server/game/Server/Packets/SocialPackets.h
index 3007cb3800b..9ee43e163b1 100644
--- a/src/server/game/Server/Packets/SocialPackets.h
+++ b/src/server/game/Server/Packets/SocialPackets.h
@@ -53,7 +53,6 @@ namespace WorldPackets
uint32 AreaID = 0;
uint32 Level = 0;
uint32 ClassID = CLASS_NONE;
- bool Mobile = false;
};
class ContactList final : public ServerPacket
@@ -85,7 +84,6 @@ namespace WorldPackets
uint32 Level = 0;
uint32 AreaID = 0;
uint8 FriendResult = 0; ///< @see enum FriendsResult
- bool Mobile = false;
};
struct QualifiedGUID
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index e4a06ff214f..486ac112d34 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -225,6 +225,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request)
request.OptionalCurrencies.resize(buffer.read<uint32>());
request.OptionalReagents.resize(buffer.read<uint32>());
request.RemovedModifications.resize(buffer.read<uint32>());
+ buffer >> request.CraftingFlags;
for (SpellExtraCurrencyCost& optionalCurrency : request.OptionalCurrencies)
buffer >> optionalCurrency;
@@ -339,8 +340,8 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellHitStatus const& spellHitStatus)
ByteBuffer& operator<<(ByteBuffer& data, SpellPowerData const& spellPowerData)
{
- data << int32(spellPowerData.Cost);
data << int8(spellPowerData.Type);
+ data << int32(spellPowerData.Cost);
return data;
}
@@ -750,6 +751,7 @@ WorldPacket const* PlayOrphanSpellVisual::Write()
_worldPacket << SourceRotation;
_worldPacket << TargetLocation;
_worldPacket << Target;
+ _worldPacket << TargetTransport;
_worldPacket << int32(SpellVisualID);
_worldPacket << float(TravelSpeed);
_worldPacket << float(LaunchDelay);
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 42c58e35772..c5efa757a5a 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -251,6 +251,7 @@ namespace WorldPackets
Array<SpellCraftingReagent, 6> RemovedModifications;
Array<SpellExtraCurrencyCost, 5 /*MAX_ITEM_EXT_COST_CURRENCIES*/> OptionalCurrencies;
Optional<uint64> CraftingOrderID;
+ uint8 CraftingFlags = 0; // 1 = ApplyConcentration
ObjectGuid CraftingNPC;
int32 Misc[2] = { };
};
@@ -713,6 +714,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid Target; // Exclusive with TargetLocation
+ ObjectGuid TargetTransport;
TaggedPosition<Position::XYZ> SourceLocation;
int32 SpellVisualID = 0;
bool SpeedAsTime = false;
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index 3e0bee090bb..c14bc777465 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -82,6 +82,8 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << int32(ActiveSeason);
_worldPacket << uint32(GameRuleValues.size());
+ _worldPacket << int32(ActiveTimerunningSeasonID);
+ _worldPacket << int32(RemainingTimerunningSeasonSeconds);
_worldPacket << int16(MaxPlayerNameQueriesPerPacket);
_worldPacket << int16(PlayerNameQueryTelemetryInterval);
@@ -134,19 +136,25 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << Bits<1>(ChatDisabledByPlayer);
_worldPacket << Bits<1>(LFGListCustomRequiresAuthenticator);
_worldPacket << Bits<1>(AddonsDisabled);
+ _worldPacket << Bits<1>(TimerunningEnabled);
_worldPacket << Bits<1>(WarGamesEnabled);
_worldPacket << Bits<1>(ContentTrackingEnabled);
_worldPacket << Bits<1>(IsSellAllJunkEnabled);
- _worldPacket << Bits<1>(IsGroupFinderEnabled);
+ _worldPacket << Bits<1>(IsGroupFinderEnabled);
_worldPacket << Bits<1>(IsLFDEnabled);
_worldPacket << Bits<1>(IsLFREnabled);
_worldPacket << Bits<1>(IsPremadeGroupEnabled);
_worldPacket << Bits<1>(CanShowSetRoleButton);
_worldPacket << Bits<1>(false); // unused 10.2.7
- _worldPacket << Bits<1>(false); // unused 10.2.7
+ _worldPacket << Bits<1>(GuildEventsEditsEnabled);
+ _worldPacket << Bits<1>(GuildTradeSkillsEnabled);
_worldPacket << BitsSize<7>(Unknown1027);
+ _worldPacket << Bits<1>(BNSendWhisperUseV2Services);
+
+ _worldPacket << Bits<1>(BNSendGameDataUseV2Services);
+ _worldPacket << Bits<1>(IsAccountCurrencyTransferEnabled);
_worldPacket.FlushBits();
@@ -213,10 +221,11 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << Bits<1>(IsBoostEnabled);
_worldPacket << Bits<1>(TrialBoostEnabled);
_worldPacket << Bits<1>(TokenBalanceEnabled);
+ _worldPacket << Bits<1>(PaidCharacterTransfersBetweenBnetAccountsEnabled);
_worldPacket << Bits<1>(LiveRegionCharacterListEnabled);
_worldPacket << Bits<1>(LiveRegionCharacterCopyEnabled);
- _worldPacket << Bits<1>(LiveRegionAccountCopyEnabled);
+ _worldPacket << Bits<1>(LiveRegionAccountCopyEnabled);
_worldPacket << Bits<1>(LiveRegionKeyBindingsCopyEnabled);
_worldPacket << Bits<1>(Unknown901CheckoutRelated);
_worldPacket << Bits<1>(false); // unused, 10.0.2
@@ -224,14 +233,19 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
_worldPacket << Bits<1>(IsNameReservationEnabled);
_worldPacket << OptionalInit(LaunchETA);
_worldPacket << Bits<1>(TimerunningEnabled);
- _worldPacket << Bits<1>(AddonsDisabled);
+ _worldPacket << Bits<1>(AddonsDisabled);
_worldPacket << Bits<1>(Unused1000);
_worldPacket << Bits<1>(AccountSaveDataExportEnabled);
_worldPacket << Bits<1>(AccountLockedByExport);
_worldPacket << Bits<11>(RealmHiddenAlert.length() + 1);
+ _worldPacket << Bits<1>(BNSendWhisperUseV2Services);
+
+ _worldPacket << Bits<1>(BNSendGameDataUseV2Services);
+ _worldPacket << Bits<1>(CharacterSelectListModeRealmless);
+
_worldPacket.FlushBits();
if (EuropaTicketSystemStatus)
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index 4a326f33206..8c1ff5f18e5 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -165,6 +165,7 @@ namespace WorldPackets
bool ChatDisabledByPlayer = false;
bool LFGListCustomRequiresAuthenticator = false;
bool AddonsDisabled = false;
+ bool TimerunningEnabled = false;
bool WarGamesEnabled = false; // classic only
bool ContentTrackingEnabled = false;
bool IsSellAllJunkEnabled = false;
@@ -173,11 +174,18 @@ namespace WorldPackets
bool IsLFREnabled = true; // classic only
bool IsPremadeGroupEnabled = true; // classic only
bool CanShowSetRoleButton = true;
+ bool GuildEventsEditsEnabled = true;
+ bool GuildTradeSkillsEnabled = true;
+ bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService
+ bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService
+ bool IsAccountCurrencyTransferEnabled = false;
SocialQueueConfig QuickJoinConfig;
SquelchInfo Squelch;
RafSystemFeatureInfo RAFSystem;
std::vector<GameRuleValuePair> GameRuleValues;
+ int32 ActiveTimerunningSeasonID = 0;
+ int32 RemainingTimerunningSeasonSeconds = 0;
std::string Unknown1027; // related to movement lua functions used by keybinds
AddonChatThrottleParams AddonChatThrottle;
};
@@ -208,6 +216,7 @@ namespace WorldPackets
bool IsBoostEnabled = false; // classic only
bool TrialBoostEnabled = false; // NYI
bool TokenBalanceEnabled = false; // NYI
+ bool PaidCharacterTransfersBetweenBnetAccountsEnabled = false;
bool LiveRegionCharacterListEnabled = false; // NYI
bool LiveRegionCharacterCopyEnabled = false; // NYI
bool LiveRegionAccountCopyEnabled = false; // NYI
@@ -219,6 +228,9 @@ namespace WorldPackets
bool Unused1000 = false;
bool AccountSaveDataExportEnabled = false;
bool AccountLockedByExport = false;
+ bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService
+ bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService
+ bool CharacterSelectListModeRealmless = false;
Optional<EuropaTicketConfig> EuropaTicketSystemStatus;
std::vector<int32> LiveRegionCharacterCopySourceRegions;
uint32 TokenPollTimeSeconds = 0; // NYI
diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.cpp b/src/server/game/Server/Packets/TraitPacketsCommon.cpp
index aa8d6ca5e6f..0d3158ef4b9 100644
--- a/src/server/game/Server/Packets/TraitPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/TraitPacketsCommon.cpp
@@ -31,6 +31,16 @@ TraitEntry::TraitEntry(UF::TraitEntry const& ufEntry)
GrantedRanks = ufEntry.GrantedRanks;
}
+TraitSubTreeCache::TraitSubTreeCache() = default;
+
+TraitSubTreeCache::TraitSubTreeCache(UF::TraitSubTreeCache const& ufSubTreeCache)
+{
+ TraitSubTreeID = ufSubTreeCache.TraitSubTreeID;
+ for (UF::TraitEntry const& ufEntry : ufSubTreeCache.Entries)
+ Entries.emplace_back(ufEntry);
+ Active = ufSubTreeCache.Active;
+}
+
TraitConfig::TraitConfig() = default;
TraitConfig::TraitConfig(UF::TraitConfig const& ufConfig)
@@ -67,6 +77,35 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry)
return data;
}
+ByteBuffer& operator>>(ByteBuffer& data, TraitSubTreeCache& traitSubTreeCache)
+{
+ data >> traitSubTreeCache.TraitSubTreeID;
+ uint32 entriesSize = data.read<uint32>();
+ if (entriesSize > 100)
+ throw PacketArrayMaxCapacityException(entriesSize, 100);
+
+ for (TraitEntry& traitEntry : traitSubTreeCache.Entries)
+ data >> traitEntry;
+
+ data >> Bits<1>(traitSubTreeCache.Active);
+
+ return data;
+}
+
+ByteBuffer& operator<<(ByteBuffer& data, TraitSubTreeCache const& traitSubTreeCache)
+{
+ data << int32(traitSubTreeCache.TraitSubTreeID);
+ data << uint32(traitSubTreeCache.Entries.size());
+
+ for (TraitEntry const& traitEntry : traitSubTreeCache.Entries)
+ data << traitEntry;
+
+ data << Bits<1>(traitSubTreeCache.Active);
+ data.FlushBits();
+
+ return data;
+}
+
ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig)
{
data >> traitConfig.ID;
@@ -76,6 +115,13 @@ ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig)
throw PacketArrayMaxCapacityException(entriesSize, 100);
traitConfig.Entries.resize(entriesSize);
+
+ uint32 subtreesSize = data.read<uint32>();
+ if (subtreesSize > 10)
+ throw PacketArrayMaxCapacityException(subtreesSize, 10);
+
+ traitConfig.SubTrees.resize(subtreesSize);
+
switch (traitConfig.Type)
{
case TraitConfigType::Combat:
@@ -97,6 +143,10 @@ ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig)
data >> traitEntry;
uint32 nameLength = data.ReadBits(9);
+
+ for (TraitSubTreeCache& traitSubTreeCache : traitConfig.SubTrees)
+ data >> traitSubTreeCache;
+
traitConfig.Name = data.ReadString(nameLength, false);
return data;
@@ -107,6 +157,7 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig)
data << int32(traitConfig.ID);
data << int32(traitConfig.Type);
data << uint32(traitConfig.Entries.size());
+ data << uint32(traitConfig.SubTrees.size());
switch (traitConfig.Type)
{
case TraitConfigType::Combat:
@@ -128,6 +179,10 @@ ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig)
data << traitEntry;
data.WriteBits(traitConfig.Name.length(), 9);
+
+ for (TraitSubTreeCache const& traitSubTreeCache : traitConfig.SubTrees)
+ data << traitSubTreeCache;
+
data.FlushBits();
data.WriteString(static_cast<std::string const&>(traitConfig.Name));
diff --git a/src/server/game/Server/Packets/TraitPacketsCommon.h b/src/server/game/Server/Packets/TraitPacketsCommon.h
index b6d143e7baf..8cf075bc7a8 100644
--- a/src/server/game/Server/Packets/TraitPacketsCommon.h
+++ b/src/server/game/Server/Packets/TraitPacketsCommon.h
@@ -27,6 +27,7 @@ namespace UF
{
struct TraitConfig;
struct TraitEntry;
+struct TraitSubTreeCache;
}
namespace WorldPackets::Traits
@@ -42,6 +43,16 @@ struct TraitEntry
int32 GrantedRanks = 0;
};
+struct TraitSubTreeCache
+{
+ TraitSubTreeCache();
+ explicit TraitSubTreeCache(UF::TraitSubTreeCache const& ufSubTreeCache);
+
+ int32 TraitSubTreeID = 0;
+ std::vector<TraitEntry> Entries;
+ bool Active = false;
+};
+
struct TraitConfig
{
TraitConfig();
@@ -55,11 +66,14 @@ struct TraitConfig
int32 SkillLineID = 0;
int32 TraitSystemID = 0;
std::vector<TraitEntry> Entries;
+ std::vector<TraitSubTreeCache> SubTrees;
String<259> Name;
};
ByteBuffer& operator>>(ByteBuffer& data, TraitEntry& traitEntry);
ByteBuffer& operator<<(ByteBuffer& data, TraitEntry const& traitEntry);
+ByteBuffer& operator>>(ByteBuffer& data, TraitSubTreeCache& traitSubTreeCache);
+ByteBuffer& operator<<(ByteBuffer& data, TraitSubTreeCache const& traitSubTreeCache);
ByteBuffer& operator>>(ByteBuffer& data, TraitConfig& traitConfig);
ByteBuffer& operator<<(ByteBuffer& data, TraitConfig const& traitConfig);
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index d8de9ca04d1..9df1813dc0c 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -146,6 +146,8 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_ACCEPT_SOCIAL_CONTRACT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_ACCEPT_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptTradeOpcode);
DEFINE_HANDLER(CMSG_ACCEPT_WARGAME_INVITE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_ACCOUNT_BANK_DEPOSIT_MONEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_ACCOUNT_BANK_WITHDRAW_MONEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_ACTIVATE_SOULBIND, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_ACTIVATE_TAXI, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleActivateTaxiOpcode);
@@ -192,6 +194,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_AUTOBANK_REAGENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoBankReagentOpcode);
DEFINE_HANDLER(CMSG_AUTOSTORE_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAutoStoreBankItemOpcode);
DEFINE_HANDLER(CMSG_AUTOSTORE_BANK_REAGENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBankReagentOpcode);
+ DEFINE_HANDLER(CMSG_AUTO_DEPOSIT_ACCOUNT_BANK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAutoEquipItemOpcode);
DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM_SLOT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAutoEquipItemSlotOpcode);
DEFINE_HANDLER(CMSG_AUTO_GUILD_BANK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoGuildBankItem);
@@ -209,6 +212,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinOpcode);
DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_ARENA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlemasterJoinArena);
DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_BRAWL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_SKIRMISH, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BATTLENET_CHALLENGE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -243,6 +247,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_BONUS_ROLL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BUG_REPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBugReportOpcode);
DEFINE_HANDLER(CMSG_BUSY_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBusyTradeOpcode);
+ DEFINE_HANDLER(CMSG_BUY_ACCOUNT_BANK_TAB, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BUY_BACK_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBuybackItem);
DEFINE_HANDLER(CMSG_BUY_BANK_SLOT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBuyBankSlotOpcode);
DEFINE_HANDLER(CMSG_BUY_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleBuyItemOpcode);
@@ -389,6 +394,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CONVERSATION_CINEMATIC_READY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CONVERSATION_LINE_STARTED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConversationLineStarted);
+ DEFINE_HANDLER(CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CONVERT_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConvertRaidOpcode);
DEFINE_HANDLER(CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CRAFTING_ORDER_CANCEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -407,6 +413,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_DECLINE_GUILD_INVITES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDeclineGuildInvites);
DEFINE_HANDLER(CMSG_DECLINE_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDeclinePetition);
DEFINE_HANDLER(CMSG_DELETE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDeleteEquipmentSet);
+ DEFINE_HANDLER(CMSG_DELVE_TELEPORT_OUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_DEL_FRIEND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDelFriendOpcode);
DEFINE_HANDLER(CMSG_DEL_IGNORE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleDelIgnoreOpcode);
DEFINE_HANDLER(CMSG_DEPOSIT_REAGENT_BANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReagentBankDepositOpcode);
@@ -476,6 +483,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_GET_MIRROR_IMAGE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMirrorImageDataRequest);
DEFINE_HANDLER(CMSG_GET_PVP_OPTIONS_ENABLED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGetPVPOptionsEnabled);
DEFINE_HANDLER(CMSG_GET_RAF_ACCOUNT_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_REMAINING_GAME_TIME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_TROPHY_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleGetUndeleteCooldownStatus);
@@ -489,7 +497,6 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_GUILD_ADD_BATTLENET_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GUILD_ADD_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAddRank);
DEFINE_HANDLER(CMSG_GUILD_ASSIGN_MEMBER_RANK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAssignRank);
- DEFINE_HANDLER(CMSG_GUILD_AUTO_DECLINE_INVITATION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GUILD_BANK_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankActivate);
DEFINE_HANDLER(CMSG_GUILD_BANK_BUY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankBuyTab);
DEFINE_HANDLER(CMSG_GUILD_BANK_DEPOSIT_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankDepositMoney);
@@ -614,6 +621,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_MOVE_DISMISS_VEHICLE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveDismissVehicle);
DEFINE_HANDLER(CMSG_MOVE_DOUBLE_JUMP, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
DEFINE_HANDLER(CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
+ DEFINE_HANDLER(CMSG_MOVE_ENABLE_FULL_SPEED_TURNING_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage);
DEFINE_HANDLER(CMSG_MOVE_FALL_LAND, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
DEFINE_HANDLER(CMSG_MOVE_FALL_RESET, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes);
@@ -642,7 +650,6 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_MOVE_REMOVE_INERTIA_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCES, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRemoveMovementForceAck);
- DEFINE_HANDLER(CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLY, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL);
@@ -807,7 +814,6 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_REPOP_REQUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepopRequest);
DEFINE_HANDLER(CMSG_REPORT_CLIENT_VARIABLES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REPORT_ENABLED_ADDONS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_REPORT_FROZEN_WHILE_LOADING_MAP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REPORT_PVP_PLAYER_AFK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReportPvPAFK);
DEFINE_HANDLER(CMSG_REPORT_SERVER_LAG, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -819,6 +825,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_COVENANT_CALLINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_CROWD_CONTROL_SPELL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_FORCED_REACTIONS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestForcedReactionsOpcode);
DEFINE_HANDLER(CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REQUEST_GUILD_PARTY_STATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildRequestPartyState);
@@ -858,6 +865,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_SCENE_PLAYBACK_CANCELED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleScenePlaybackCanceled);
DEFINE_HANDLER(CMSG_SCENE_PLAYBACK_COMPLETE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleScenePlaybackComplete);
DEFINE_HANDLER(CMSG_SCENE_TRIGGER_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSceneTriggerEvent);
+ DEFINE_HANDLER(CMSG_SEAMLESS_TRANSFER_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SELF_RES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSelfResOpcode);
DEFINE_HANDLER(CMSG_SELL_ALL_JUNK_ITEMS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SELL_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSellItemOpcode);
@@ -868,6 +876,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_SEND_PING_WORLD_POINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendPingWorldPoint);
DEFINE_HANDLER(CMSG_SEND_TEXT_EMOTE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTextEmoteOpcode);
DEFINE_HANDLER(CMSG_SERVER_TIME_OFFSET_REQUEST, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleServerTimeOffsetRequest);
+ DEFINE_HANDLER(CMSG_SETUP_WARBAND_GROUPS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SET_ACHIEVEMENTS_HIDDEN, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SET_ACTION_BAR_TOGGLES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionBarToggles);
DEFINE_HANDLER(CMSG_SET_ACTION_BUTTON, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetActionButtonOpcode);
@@ -918,6 +927,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_SILENCE_PARTY_TALKER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SOCIAL_CONTRACT_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleSocialContractRequest);
DEFINE_HANDLER(CMSG_SOCKET_GEMS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSocketGems);
+ DEFINE_HANDLER(CMSG_SORT_ACCOUNT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortAccountBankBags);
DEFINE_HANDLER(CMSG_SORT_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortBags);
DEFINE_HANDLER(CMSG_SORT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortBankBags);
DEFINE_HANDLER(CMSG_SORT_REAGENT_BANK_BAGS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSortReagentBankBags);
@@ -967,6 +977,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_TRAINER_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTrainerListOpcode);
DEFINE_HANDLER(CMSG_TRAITS_COMMIT_CONFIG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleTraitsCommitConfig);
DEFINE_HANDLER(CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_TRANSMOGRIFY_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTransmogrifyItems);
DEFINE_HANDLER(CMSG_TURN_IN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTurnInPetition);
DEFINE_HANDLER(CMSG_TUTORIAL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTutorialFlag);
@@ -977,6 +988,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_UNLEARN_SPECIALIZATION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_UNLOCK_VOID_STORAGE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleVoidStorageUnlock);
DEFINE_HANDLER(CMSG_UPDATE_AADC_STATUS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChatUpdateAADCStatus);
+ DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateAccountData);
DEFINE_HANDLER(CMSG_UPDATE_AREA_TRIGGER_VISUAL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_UPDATE_CLIENT_SETTINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -1017,6 +1029,8 @@ void OpcodeTable::InitializeServerOpcodes()
ValidateAndSetServerOpcode(opcode, #opcode, status, con)
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ABORT_NEW_WORLD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CONVERSION_STATE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
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);
@@ -1198,6 +1212,7 @@ void OpcodeTable::InitializeServerOpcodes()
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_CAS_REFRESH_REMOTE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
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);
@@ -1227,6 +1242,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_DOWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_IGNORED_ACCOUNT_MUTED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_IS_DOWN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_NOT_IN_GUILD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_NOT_IN_PARTY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_PLAYER_AMBIGUOUS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHAT_PLAYER_NOTFOUND, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1294,6 +1310,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_CREATE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_FULFILL_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_NPC_REWARD_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_REJECT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_RELEASE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRAFTING_ORDER_UPDATE_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1304,6 +1321,8 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRITERIA_DELETED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CROSSED_INEBRIATION_THRESHOLD, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CURRENCY_TRANSFER_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CURRENCY_TRANSFER_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CUSTOM_LOAD_SCREEN, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DAILY_QUESTS_RESET, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_DAMAGE_CALC_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1343,7 +1362,6 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCOUNTER_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_END_LIGHTNING_STORM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENSURE_WORLD_LOADED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENTER_ENCRYPTED_MODE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENUM_CHARACTERS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1368,6 +1386,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_ANIMATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_OBJECT_RELINK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_RANDOM_TRANSMOG_TOAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_SPAWN_TRACKING_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_FRIEND_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAIN_MAW_POWER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1537,6 +1556,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_ROSTER_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_SEND_RANK_CHANGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_HARDCORE_DEATH_ALERT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HEALTH_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HIGHEST_THREAT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_HOTFIX_CONNECT, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1664,11 +1684,13 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_APPLY_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_DOUBLE_JUMP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_FULL_SPEED_TURNING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_INERTIA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_GRAVITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_COLLISION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_DOUBLE_JUMP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_FULL_SPEED_TURNING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_INERTIA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_GRAVITY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1957,6 +1979,8 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_COMPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_SPELL_HISTORY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_REGIONWIDE_CHARACTER_MAIL_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REMOVE_ITEM_PASSIVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REMOVE_SPELL_FROM_ACTION_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REPLACE_TROPHY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -2048,6 +2072,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_VEHICLE_REC_ID, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHADOWLANDS_CAPACITANCE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHIPMENT_FACTION_UPDATE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_DELVES_DISPLAY_UI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_QUEST_COMPLETION_TEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_TAXI_NODES, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -2115,6 +2140,7 @@ void OpcodeTable::InitializeServerOpcodes()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_THREAT_CLEAR, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_THREAT_REMOVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_THREAT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_TIMERUNNING_SEASON_ENDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TIME_ADJUSTMENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TIME_SYNC_REQUEST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_TITLE_EARNED, STATUS_NEVER, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index ff4ecf3df72..e6dbc884121 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -48,35 +48,37 @@ constexpr uint16 UNKNOWN_OPCODE = 0xBADD; // special marker value for uninitia
enum OpcodeClient : uint16
{
- CMSG_ABANDON_NPE_RESPONSE = 0x33F2,
+ CMSG_ABANDON_NPE_RESPONSE = 0x33E9,
CMSG_ACCEPT_GUILD_INVITE = 0x35FD,
- CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x339D,
- CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3742,
+ CMSG_ACCEPT_RETURNING_PLAYER_PROMPT = 0x33AA,
+ CMSG_ACCEPT_SOCIAL_CONTRACT = 0x3744,
CMSG_ACCEPT_TRADE = 0x315A,
CMSG_ACCEPT_WARGAME_INVITE = 0x35E0,
- CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3731,
- CMSG_ACTIVATE_SOULBIND = 0x33E1,
+ CMSG_ACCOUNT_BANK_DEPOSIT_MONEY = 0x342B,
+ CMSG_ACCOUNT_BANK_WITHDRAW_MONEY = 0x342C,
+ CMSG_ACCOUNT_NOTIFICATION_ACKNOWLEDGED = 0x3733,
+ CMSG_ACTIVATE_SOULBIND = 0x33D8,
CMSG_ACTIVATE_TAXI = 0x34B3,
CMSG_ADDON_LIST = 0x35D8,
- CMSG_ADD_ACCOUNT_COSMETIC = 0x32B7,
- CMSG_ADD_BATTLENET_FRIEND = 0x3657,
- CMSG_ADD_FRIEND = 0x36CB,
- CMSG_ADD_IGNORE = 0x36CF,
- CMSG_ADD_TOY = 0x32B6,
- CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3203,
- CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33E4,
- CMSG_ADVENTURE_MAP_START_QUEST = 0x3370,
- CMSG_ALTER_APPEARANCE = 0x3505,
+ CMSG_ADD_ACCOUNT_COSMETIC = 0x32C2,
+ CMSG_ADD_BATTLENET_FRIEND = 0x3658,
+ CMSG_ADD_FRIEND = 0x36CD,
+ CMSG_ADD_IGNORE = 0x36D1,
+ CMSG_ADD_TOY = 0x32C1,
+ CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3206,
+ CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = 0x33DB,
+ CMSG_ADVENTURE_MAP_START_QUEST = 0x337D,
+ CMSG_ALTER_APPEARANCE = 0x3504,
CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B8,
CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B9,
- CMSG_AREA_TRIGGER = 0x31D7,
+ CMSG_AREA_TRIGGER = 0x31D9,
CMSG_ARTIFACT_ADD_POWER = 0x31AA,
CMSG_ARTIFACT_SET_APPEARANCE = 0x31AC,
- CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x320F,
- CMSG_ATTACK_STOP = 0x3268,
- CMSG_ATTACK_SWING = 0x3267,
- CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E1,
- CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E2,
+ CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3212,
+ CMSG_ATTACK_STOP = 0x3270,
+ CMSG_ATTACK_SWING = 0x326F,
+ CMSG_AUCTIONABLE_TOKEN_SELL = 0x36E3,
+ CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE = 0x36E4,
CMSG_AUCTION_BROWSE_QUERY = 0x34D8,
CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = 0x34E0,
CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = 0x34DF,
@@ -90,114 +92,117 @@ enum OpcodeClient : uint16
CMSG_AUCTION_PLACE_BID = 0x34D7,
CMSG_AUCTION_REMOVE_ITEM = 0x34D5,
CMSG_AUCTION_REPLICATE_ITEMS = 0x34D6,
- CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3733,
+ CMSG_AUCTION_REQUEST_FAVORITE_LIST = 0x3735,
CMSG_AUCTION_SELL_COMMODITY = 0x34E1,
CMSG_AUCTION_SELL_ITEM = 0x34D4,
- CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3732,
+ CMSG_AUCTION_SET_FAVORITE_ITEM = 0x3734,
CMSG_AUTH_CONTINUED_SESSION = 0x377A,
CMSG_AUTH_SESSION = 0x3779,
CMSG_AUTOBANK_ITEM = 0x3997,
CMSG_AUTOBANK_REAGENT = 0x3999,
CMSG_AUTOSTORE_BANK_ITEM = 0x3996,
CMSG_AUTOSTORE_BANK_REAGENT = 0x3998,
+ CMSG_AUTO_DEPOSIT_ACCOUNT_BANK = 0x3436,
CMSG_AUTO_EQUIP_ITEM = 0x399A,
CMSG_AUTO_EQUIP_ITEM_SLOT = 0x399F,
CMSG_AUTO_GUILD_BANK_ITEM = 0x34BF,
CMSG_AUTO_STORE_BAG_ITEM = 0x399B,
CMSG_AUTO_STORE_GUILD_BANK_ITEM = 0x34C8,
- CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3399,
- CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x337B,
- CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x339B,
- CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x339A,
+ CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x33A6,
+ CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3388,
+ CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x33A8,
+ CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x33A7,
CMSG_BANKER_ACTIVATE = 0x34BB,
CMSG_BATTLEFIELD_LEAVE = 0x3173,
CMSG_BATTLEFIELD_LIST = 0x317E,
CMSG_BATTLEFIELD_PORT = 0x353A,
- CMSG_BATTLEMASTER_HELLO = 0x32D4,
- CMSG_BATTLEMASTER_JOIN = 0x3532,
- CMSG_BATTLEMASTER_JOIN_ARENA = 0x3533,
+ CMSG_BATTLEMASTER_HELLO = 0x32DF,
+ CMSG_BATTLEMASTER_JOIN = 0x3531,
+ CMSG_BATTLEMASTER_JOIN_ARENA = 0x3532,
CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3538,
- CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3534,
+ CMSG_BATTLEMASTER_JOIN_RATED_BG_BLITZ = 0x3534,
+ CMSG_BATTLEMASTER_JOIN_RATED_SOLO_SHUFFLE = 0x3533,
CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3535,
- CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36CE,
- CMSG_BATTLENET_REQUEST = 0x36F0,
- CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36C8,
- CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x370F,
- CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C7,
- CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36BE,
- CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS = 0x3736,
- CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36B6,
- CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36B7,
- CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x3708,
- CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3704,
- CMSG_BATTLE_PAY_START_PURCHASE = 0x36C6,
- CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36ED,
+ 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 = 0x3622,
- CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3623,
- CMSG_BATTLE_PET_MODIFY_NAME = 0x3625,
- CMSG_BATTLE_PET_REQUEST_JOURNAL = 0x3621,
- CMSG_BATTLE_PET_REQUEST_JOURNAL_LOCK = 0x3620,
- CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362A,
- CMSG_BATTLE_PET_SET_FLAGS = 0x362D,
- CMSG_BATTLE_PET_SUMMON = 0x3626,
- CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31E1,
- CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E0,
+ 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 = 0x31E3,
+ CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E2,
CMSG_BEGIN_TRADE = 0x3157,
CMSG_BINDER_ACTIVATE = 0x34BA,
CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3542,
CMSG_BLACK_MARKET_OPEN = 0x3540,
CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3541,
- CMSG_BONUS_ROLL = 0x339C,
- CMSG_BUG_REPORT = 0x3682,
+ CMSG_BONUS_ROLL = 0x33A9,
+ CMSG_BUG_REPORT = 0x3683,
CMSG_BUSY_TRADE = 0x3158,
+ CMSG_BUY_ACCOUNT_BANK_TAB = 0x3597,
CMSG_BUY_BACK_ITEM = 0x34AC,
CMSG_BUY_BANK_SLOT = 0x34BC,
CMSG_BUY_ITEM = 0x34AB,
CMSG_BUY_REAGENT_BANK = 0x34BD,
- CMSG_CAGE_BATTLE_PET = 0x31F3,
- CMSG_CALENDAR_ADD_EVENT = 0x367A,
- CMSG_CALENDAR_COMMUNITY_INVITE = 0x366E,
- CMSG_CALENDAR_COMPLAIN = 0x3676,
- CMSG_CALENDAR_COPY_EVENT = 0x3675,
- CMSG_CALENDAR_EVENT_SIGN_UP = 0x3678,
- CMSG_CALENDAR_GET = 0x366C,
- CMSG_CALENDAR_GET_EVENT = 0x366D,
- CMSG_CALENDAR_GET_NUM_PENDING = 0x3677,
- CMSG_CALENDAR_INVITE = 0x366F,
- CMSG_CALENDAR_MODERATOR_STATUS = 0x3673,
- CMSG_CALENDAR_REMOVE_EVENT = 0x3674,
- CMSG_CALENDAR_REMOVE_INVITE = 0x3670,
- CMSG_CALENDAR_RSVP = 0x3671,
- CMSG_CALENDAR_STATUS = 0x3672,
- CMSG_CALENDAR_UPDATE_EVENT = 0x367B,
+ CMSG_CAGE_BATTLE_PET = 0x31F6,
+ 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 = 0x31AE,
- CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F7,
- CMSG_CANCEL_CAST = 0x32BD,
- CMSG_CANCEL_CHANNELLING = 0x3280,
- CMSG_CANCEL_GROWTH_AURA = 0x3288,
- CMSG_CANCEL_MASTER_LOOT_ROLL = 0x321B,
+ CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34F6,
+ CMSG_CANCEL_CAST = 0x32C8,
+ CMSG_CANCEL_CHANNELLING = 0x3289,
+ CMSG_CANCEL_GROWTH_AURA = 0x3291,
+ CMSG_CANCEL_MASTER_LOOT_ROLL = 0x321E,
CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AD,
- CMSG_CANCEL_MOUNT_AURA = 0x329B,
+ CMSG_CANCEL_MOUNT_AURA = 0x32A4,
CMSG_CANCEL_QUEUED_SPELL = 0x317F,
- CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3502,
+ CMSG_CANCEL_TEMP_ENCHANTMENT = 0x3501,
CMSG_CANCEL_TRADE = 0x315C,
- CMSG_CAN_DUEL = 0x365F,
- CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3703,
- CMSG_CAST_SPELL = 0x32BA,
+ CMSG_CAN_DUEL = 0x3660,
+ CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE = 0x3705,
+ CMSG_CAST_SPELL = 0x32C5,
CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x305E,
- CMSG_CHANGE_BAG_SLOT_FLAG = 0x3354,
- CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3355,
- CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3335,
- CMSG_CHANGE_REALM_TICKET = 0x36F5,
- CMSG_CHANGE_SUB_GROUP = 0x3649,
- CMSG_CHARACTER_CHECK_UPGRADE = 0x36C1,
- CMSG_CHARACTER_RENAME_REQUEST = 0x36BC,
- CMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_REQUEST = 0x36BF,
- CMSG_CHARACTER_UPGRADE_START = 0x36C0,
- CMSG_CHAR_CUSTOMIZE = 0x3689,
- CMSG_CHAR_DELETE = 0x3699,
- CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x368F,
+ CMSG_CHANGE_BAG_SLOT_FLAG = 0x3361,
+ CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3362,
+ CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3342,
+ CMSG_CHANGE_REALM_TICKET = 0x36F7,
+ CMSG_CHANGE_SUB_GROUP = 0x364A,
+ 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 = 0x368A,
+ CMSG_CHAR_DELETE = 0x369B,
+ CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3690,
CMSG_CHAT_ADDON_MESSAGE = 0x3802,
CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x3803,
CMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_REQUEST = 0x380A,
@@ -237,298 +242,301 @@ enum OpcodeClient : uint16
CMSG_CHAT_REPORT_FILTERED = 0x37E0,
CMSG_CHAT_REPORT_IGNORED = 0x37DF,
CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37E2,
- CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3642,
- CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3259,
- CMSG_CHOICE_RESPONSE = 0x32C2,
- CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33E0,
- CMSG_CLAIM_WEEKLY_REWARD = 0x33BC,
- CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x341B,
- CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3213,
- CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x341D,
- CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x341A,
- CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x3419,
- CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x341E,
- CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3212,
+ CMSG_CHECK_CHARACTER_NAME_AVAILABILITY = 0x3643,
+ CMSG_CHECK_IS_ADVENTURE_MAP_POI_VALID = 0x3261,
+ CMSG_CHOICE_RESPONSE = 0x32CD,
+ CMSG_CHROMIE_TIME_SELECT_EXPANSION = 0x33D7,
+ CMSG_CLAIM_WEEKLY_REWARD = 0x33B4,
+ CMSG_CLASS_TALENTS_DELETE_CONFIG = 0x3410,
+ CMSG_CLASS_TALENTS_NOTIFY_EMPTY_CONFIG = 0x3216,
+ CMSG_CLASS_TALENTS_NOTIFY_VALIDATION_FAILED = 0x3412,
+ CMSG_CLASS_TALENTS_RENAME_CONFIG = 0x340F,
+ CMSG_CLASS_TALENTS_REQUEST_NEW_CONFIG = 0x340E,
+ CMSG_CLASS_TALENTS_SET_STARTER_BUILD_ACTIVE = 0x3413,
+ CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = 0x3215,
CMSG_CLEAR_NEW_APPEARANCE = 0x3129,
CMSG_CLEAR_RAID_MARKER = 0x31A6,
CMSG_CLEAR_TRADE_ITEM = 0x315E,
CMSG_CLIENT_PORT_GRAVEYARD = 0x353C,
CMSG_CLOSE_INTERACTION = 0x349A,
- CMSG_CLOSE_QUEST_CHOICE = 0x32C3,
- CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33E8,
- CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x341F,
- CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x371A,
- CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x3718,
- CMSG_CLUB_FINDER_POST = 0x3715,
- CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x371C,
- CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x3716,
- CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3717,
- CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x371B,
- CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x371D,
- CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x3719,
- CMSG_CLUB_FINDER_WHISPER_APPLICANT_REQUEST = 0x3739,
- CMSG_CLUB_PRESENCE_SUBSCRIBE = 0x36F2,
- CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3630,
+ CMSG_CLOSE_QUEST_CHOICE = 0x32CE,
+ CMSG_CLOSE_RUNEFORGE_INTERACTION = 0x33DF,
+ CMSG_CLOSE_TRAIT_SYSTEM_INTERACTION = 0x3414,
+ 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 = 0x3631,
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 = 0x3737,
+ CMSG_COMMENTATOR_SPECTATE = 0x3739,
CMSG_COMMENTATOR_START_WARGAME = 0x35EF,
- CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36DF,
- CMSG_COMMERCE_TOKEN_GET_LOG = 0x36E9,
- CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E0,
- CMSG_COMPLAINT = 0x3669,
+ CMSG_COMMERCE_TOKEN_GET_COUNT = 0x36E1,
+ CMSG_COMMERCE_TOKEN_GET_LOG = 0x36EB,
+ CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE = 0x36E2,
+ CMSG_COMPLAINT = 0x366A,
CMSG_COMPLETE_CINEMATIC = 0x355A,
- CMSG_COMPLETE_MOVIE = 0x34ED,
+ CMSG_COMPLETE_MOVIE = 0x34EC,
CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AB,
- CMSG_CONFIRM_RESPEC_WIPE = 0x3215,
+ CMSG_CONFIRM_RESPEC_WIPE = 0x3218,
CMSG_CONNECT_TO_FAILED = 0x35D4,
- CMSG_CONSUMABLE_TOKEN_BUY = 0x36E4,
- CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE = 0x36E5,
- CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY = 0x36E3,
- CMSG_CONSUMABLE_TOKEN_REDEEM = 0x36E7,
- CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION = 0x36E8,
- CMSG_CONTENT_TRACKING_START_TRACKING = 0x342F,
- CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x3430,
+ 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_CONTENT_TRACKING_START_TRACKING = 0x3424,
+ CMSG_CONTENT_TRACKING_STOP_TRACKING = 0x3425,
CMSG_CONTRIBUTION_CONTRIBUTE = 0x356F,
CMSG_CONTRIBUTION_LAST_UPDATE_REQUEST = 0x3570,
CMSG_CONVERSATION_CINEMATIC_READY = 0x355C,
CMSG_CONVERSATION_LINE_STARTED = 0x355B,
- CMSG_CONVERT_RAID = 0x364B,
+ CMSG_CONVERT_ITEM_TO_BIND_TO_ACCOUNT = 0x3435,
+ CMSG_CONVERT_RAID = 0x364C,
CMSG_COVENANT_RENOWN_REQUEST_CATCHUP_STATE = 0x3583,
- CMSG_CRAFTING_ORDER_CANCEL = 0x358E,
- CMSG_CRAFTING_ORDER_CLAIM = 0x358B,
+ CMSG_CRAFTING_ORDER_CANCEL = 0x358F,
+ CMSG_CRAFTING_ORDER_CLAIM = 0x358C,
CMSG_CRAFTING_ORDER_CREATE = 0x3588,
- CMSG_CRAFTING_ORDER_FULFILL = 0x358D,
+ CMSG_CRAFTING_ORDER_FULFILL = 0x358E,
CMSG_CRAFTING_ORDER_LIST_CRAFTER_ORDERS = 0x358A,
CMSG_CRAFTING_ORDER_LIST_MY_ORDERS = 0x3589,
- CMSG_CRAFTING_ORDER_REJECT = 0x358F,
- CMSG_CRAFTING_ORDER_RELEASE = 0x358C,
- CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x3590,
- CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x3591,
- CMSG_CREATE_CHARACTER = 0x3641,
- CMSG_CREATE_SHIPMENT = 0x3320,
+ CMSG_CRAFTING_ORDER_REJECT = 0x3590,
+ CMSG_CRAFTING_ORDER_RELEASE = 0x358D,
+ CMSG_CRAFTING_ORDER_REPORT_PLAYER = 0x3591,
+ CMSG_CRAFTING_ORDER_UPDATE_IGNORE_LIST = 0x3592,
+ CMSG_CREATE_CHARACTER = 0x3642,
+ CMSG_CREATE_SHIPMENT = 0x332B,
CMSG_DB_QUERY_BULK = 0x35E4,
- CMSG_DECLINE_GUILD_INVITES = 0x352F,
+ CMSG_DECLINE_GUILD_INVITES = 0x352E,
CMSG_DECLINE_PETITION = 0x3549,
- CMSG_DELETE_EQUIPMENT_SET = 0x351B,
- CMSG_DEL_FRIEND = 0x36CC,
- CMSG_DEL_IGNORE = 0x36D0,
- CMSG_DEPOSIT_REAGENT_BANK = 0x335E,
- CMSG_DESTROY_ITEM = 0x32B0,
- 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 = 0x361B,
- CMSG_DF_SET_ROLES = 0x3616,
- CMSG_DF_TELEPORT = 0x3618,
- CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A41,
- CMSG_DISMISS_CRITTER = 0x3509,
- CMSG_DO_COUNTDOWN = 0x3714,
- CMSG_DO_MASTER_LOOT_ROLL = 0x321A,
- CMSG_DO_READY_CHECK = 0x3631,
- CMSG_DUEL_RESPONSE = 0x34F2,
- CMSG_EJECT_PASSENGER = 0x324E,
+ CMSG_DELETE_EQUIPMENT_SET = 0x351A,
+ CMSG_DELVE_TELEPORT_OUT = 0x359E,
+ CMSG_DEL_FRIEND = 0x36CE,
+ CMSG_DEL_IGNORE = 0x36D2,
+ CMSG_DEPOSIT_REAGENT_BANK = 0x336B,
+ CMSG_DESTROY_ITEM = 0x32BB,
+ CMSG_DF_BOOT_PLAYER_VOTE = 0x3618,
+ CMSG_DF_CONFIRM_EXPAND_SEARCH = 0x360A,
+ CMSG_DF_GET_JOIN_STATUS = 0x3616,
+ CMSG_DF_GET_SYSTEM_INFO = 0x3615,
+ CMSG_DF_JOIN = 0x360B,
+ CMSG_DF_LEAVE = 0x3614,
+ CMSG_DF_PROPOSAL_RESPONSE = 0x3609,
+ CMSG_DF_READY_CHECK_RESPONSE = 0x361C,
+ CMSG_DF_SET_ROLES = 0x3617,
+ CMSG_DF_TELEPORT = 0x3619,
+ CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A42,
+ CMSG_DISMISS_CRITTER = 0x3508,
+ CMSG_DO_COUNTDOWN = 0x3716,
+ CMSG_DO_MASTER_LOOT_ROLL = 0x321D,
+ CMSG_DO_READY_CHECK = 0x3632,
+ CMSG_DUEL_RESPONSE = 0x34F1,
+ CMSG_EJECT_PASSENGER = 0x3256,
CMSG_EMOTE = 0x3556,
CMSG_ENABLE_NAGLE = 0x377F,
CMSG_ENABLE_TAXI_NODE = 0x34B1,
- CMSG_ENGINE_SURVEY = 0x36DE,
+ CMSG_ENGINE_SURVEY = 0x36E0,
CMSG_ENTER_ENCRYPTED_MODE_ACK = 0x377B,
CMSG_ENUM_CHARACTERS = 0x35E8,
- CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36D8,
- CMSG_FAR_SIGHT = 0x34F8,
+ CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DA,
+ CMSG_FAR_SIGHT = 0x34F7,
CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B2,
CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B1,
- CMSG_GAME_OBJ_REPORT_USE = 0x34FF,
- CMSG_GAME_OBJ_USE = 0x34FE,
- CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x331B,
- CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x3301,
- CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32EE,
- CMSG_GARRISON_CHECK_UPGRADEABLE = 0x3350,
- CMSG_GARRISON_COMPLETE_MISSION = 0x3342,
- CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x331C,
- CMSG_GARRISON_GENERATE_RECRUITS = 0x3304,
- CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x3313,
- CMSG_GARRISON_GET_MAP_DATA = 0x331A,
- CMSG_GARRISON_GET_MISSION_REWARD = 0x3374,
- CMSG_GARRISON_LEARN_TALENT = 0x330F,
- CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3344,
- CMSG_GARRISON_PURCHASE_BUILDING = 0x32EA,
- CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3306,
- CMSG_GARRISON_REMOVE_FOLLOWER = 0x3339,
- CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x3302,
- CMSG_GARRISON_RENAME_FOLLOWER = 0x3303,
- CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32E9,
- CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x331E,
- CMSG_GARRISON_RESEARCH_TALENT = 0x3307,
- CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32EB,
- CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32FF,
- CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32F7,
- CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3305,
- CMSG_GARRISON_SOCKET_TALENT = 0x33F5,
- CMSG_GARRISON_START_MISSION = 0x3341,
- CMSG_GARRISON_SWAP_BUILDINGS = 0x32EF,
+ CMSG_GAME_OBJ_REPORT_USE = 0x34FE,
+ CMSG_GAME_OBJ_USE = 0x34FD,
+ CMSG_GARRISON_ADD_FOLLOWER_HEALTH = 0x3326,
+ CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x330C,
+ CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32F9,
+ CMSG_GARRISON_CHECK_UPGRADEABLE = 0x335D,
+ CMSG_GARRISON_COMPLETE_MISSION = 0x334F,
+ CMSG_GARRISON_FULLY_HEAL_ALL_FOLLOWERS = 0x3327,
+ CMSG_GARRISON_GENERATE_RECRUITS = 0x330F,
+ CMSG_GARRISON_GET_CLASS_SPEC_CATEGORY_INFO = 0x331E,
+ CMSG_GARRISON_GET_MAP_DATA = 0x3325,
+ CMSG_GARRISON_GET_MISSION_REWARD = 0x3381,
+ CMSG_GARRISON_LEARN_TALENT = 0x331A,
+ CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3351,
+ CMSG_GARRISON_PURCHASE_BUILDING = 0x32F5,
+ CMSG_GARRISON_RECRUIT_FOLLOWER = 0x3311,
+ CMSG_GARRISON_REMOVE_FOLLOWER = 0x3346,
+ CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x330D,
+ CMSG_GARRISON_RENAME_FOLLOWER = 0x330E,
+ CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32F4,
+ CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x3329,
+ CMSG_GARRISON_RESEARCH_TALENT = 0x3312,
+ CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32F6,
+ CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x330A,
+ CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x3302,
+ CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x3310,
+ CMSG_GARRISON_SOCKET_TALENT = 0x33EC,
+ CMSG_GARRISON_START_MISSION = 0x334E,
+ CMSG_GARRISON_SWAP_BUILDINGS = 0x32FA,
CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7,
- CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B1,
- CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3730,
- CMSG_GET_GARRISON_INFO = 0x32E4,
+ CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B3,
+ CMSG_GET_ACCOUNT_NOTIFICATIONS = 0x3732,
+ CMSG_GET_GARRISON_INFO = 0x32EF,
CMSG_GET_ITEM_PURCHASE_DATA = 0x3544,
- CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x331F,
- CMSG_GET_MIRROR_IMAGE_DATA = 0x32B4,
+ CMSG_GET_LANDING_PAGE_SHIPMENTS = 0x332A,
+ CMSG_GET_MIRROR_IMAGE_DATA = 0x32BF,
CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE,
- CMSG_GET_RAF_ACCOUNT_INFO = 0x371E,
- CMSG_GET_REMAINING_GAME_TIME = 0x36E6,
- CMSG_GET_TROPHY_LIST = 0x3332,
- CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DA,
- CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST = 0x36EB,
- CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST = 0x36EC,
- CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x368D,
- CMSG_GM_TICKET_GET_CASE_STATUS = 0x368C,
- CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368B,
+ CMSG_GET_RAF_ACCOUNT_INFO = 0x3720,
+ CMSG_GET_REGIONWIDE_CHARACTER_RESTRICTION_AND_MAIL_DATA = 0x375E,
+ CMSG_GET_REMAINING_GAME_TIME = 0x36E8,
+ CMSG_GET_TROPHY_LIST = 0x333F,
+ 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 = 0x368E,
+ CMSG_GM_TICKET_GET_CASE_STATUS = 0x368D,
+ CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x368C,
CMSG_GOSSIP_REFRESH_OPTIONS = 0x3582,
CMSG_GOSSIP_SELECT_OPTION = 0x349B,
- CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x5036,
- CMSG_GUILD_ADD_RANK = 0x501B,
+ CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x5034,
+ CMSG_GUILD_ADD_RANK = 0x5019,
CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x5016,
- CMSG_GUILD_AUTO_DECLINE_INVITATION = 0x5018,
CMSG_GUILD_BANK_ACTIVATE = 0x34BE,
CMSG_GUILD_BANK_BUY_TAB = 0x34CC,
CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x34CE,
- CMSG_GUILD_BANK_LOG_QUERY = 0x502F,
+ CMSG_GUILD_BANK_LOG_QUERY = 0x502D,
CMSG_GUILD_BANK_QUERY_TAB = 0x34CB,
- CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x5030,
- CMSG_GUILD_BANK_SET_TAB_TEXT = 0x5033,
- CMSG_GUILD_BANK_TEXT_QUERY = 0x5034,
+ CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x502E,
+ CMSG_GUILD_BANK_SET_TAB_TEXT = 0x5031,
+ CMSG_GUILD_BANK_TEXT_QUERY = 0x5032,
CMSG_GUILD_BANK_UPDATE_TAB = 0x34CD,
CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x34CF,
- CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x502D,
- CMSG_GUILD_CHANGE_NAME_REQUEST = 0x502E,
- CMSG_GUILD_DECLINE_INVITATION = 0x5017,
- CMSG_GUILD_DELETE = 0x501F,
- CMSG_GUILD_DELETE_RANK = 0x501C,
+ CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x502B,
+ CMSG_GUILD_CHANGE_NAME_REQUEST = 0x502C,
+ CMSG_GUILD_DECLINE_INVITATION = 0x35FE,
+ CMSG_GUILD_DELETE = 0x501D,
+ CMSG_GUILD_DELETE_RANK = 0x501A,
CMSG_GUILD_DEMOTE_MEMBER = 0x5015,
- CMSG_GUILD_EVENT_LOG_QUERY = 0x5032,
- CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x5028,
- CMSG_GUILD_GET_RANKS = 0x5024,
- CMSG_GUILD_GET_ROSTER = 0x502A,
- CMSG_GUILD_INVITE_BY_NAME = 0x3607,
- CMSG_GUILD_LEAVE = 0x5019,
- CMSG_GUILD_NEWS_UPDATE_STICKY = 0x5025,
- CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x501A,
- CMSG_GUILD_PERMISSIONS_QUERY = 0x5031,
+ CMSG_GUILD_EVENT_LOG_QUERY = 0x5030,
+ CMSG_GUILD_GET_ACHIEVEMENT_MEMBERS = 0x5026,
+ CMSG_GUILD_GET_RANKS = 0x5022,
+ CMSG_GUILD_GET_ROSTER = 0x5028,
+ CMSG_GUILD_INVITE_BY_NAME = 0x3608,
+ CMSG_GUILD_LEAVE = 0x5017,
+ CMSG_GUILD_NEWS_UPDATE_STICKY = 0x5023,
+ CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x5018,
+ CMSG_GUILD_PERMISSIONS_QUERY = 0x502F,
CMSG_GUILD_PROMOTE_MEMBER = 0x5014,
- CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE = 0x5022,
- CMSG_GUILD_QUERY_MEMBER_RECIPES = 0x5020,
- CMSG_GUILD_QUERY_NEWS = 0x5023,
- CMSG_GUILD_QUERY_RECIPES = 0x5021,
- CMSG_GUILD_REPLACE_GUILD_MASTER = 0x5035,
- CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x5026,
- CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x5027,
- CMSG_GUILD_SET_GUILD_MASTER = 0x36C3,
- CMSG_GUILD_SET_MEMBER_NOTE = 0x5029,
- CMSG_GUILD_SET_RANK_PERMISSIONS = 0x501E,
- CMSG_GUILD_SHIFT_RANK = 0x501D,
- CMSG_GUILD_UPDATE_INFO_TEXT = 0x502C,
- CMSG_GUILD_UPDATE_MOTD_TEXT = 0x502B,
- CMSG_HEARTH_AND_RESURRECT = 0x3517,
- CMSG_HIDE_QUEST_CHOICE = 0x32C4,
+ CMSG_GUILD_QUERY_MEMBERS_FOR_RECIPE = 0x5020,
+ CMSG_GUILD_QUERY_MEMBER_RECIPES = 0x501E,
+ CMSG_GUILD_QUERY_NEWS = 0x5021,
+ CMSG_GUILD_QUERY_RECIPES = 0x501F,
+ CMSG_GUILD_REPLACE_GUILD_MASTER = 0x5033,
+ CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x5024,
+ CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x5025,
+ CMSG_GUILD_SET_GUILD_MASTER = 0x36C5,
+ CMSG_GUILD_SET_MEMBER_NOTE = 0x5027,
+ CMSG_GUILD_SET_RANK_PERMISSIONS = 0x501C,
+ CMSG_GUILD_SHIFT_RANK = 0x501B,
+ CMSG_GUILD_UPDATE_INFO_TEXT = 0x502A,
+ CMSG_GUILD_UPDATE_MOTD_TEXT = 0x5029,
+ CMSG_HEARTH_AND_RESURRECT = 0x3516,
+ CMSG_HIDE_QUEST_CHOICE = 0x32CF,
CMSG_HOTFIX_REQUEST = 0x35E5,
CMSG_IGNORE_TRADE = 0x3159,
CMSG_INITIATE_ROLE_POLL = 0x35DA,
CMSG_INITIATE_TRADE = 0x3156,
CMSG_INSPECT = 0x353E,
- CMSG_INSTANCE_LOCK_RESPONSE = 0x351C,
- CMSG_ISLAND_QUEUE = 0x33B8,
+ CMSG_INSTANCE_LOCK_RESPONSE = 0x351B,
+ CMSG_ISLAND_QUEUE = 0x33B0,
CMSG_ITEM_PURCHASE_REFUND = 0x3545,
- CMSG_ITEM_TEXT_QUERY = 0x3351,
- CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DE,
+ CMSG_ITEM_TEXT_QUERY = 0x335E,
+ CMSG_JOIN_PET_BATTLE_QUEUE = 0x31E0,
CMSG_JOIN_RATED_BATTLEGROUND = 0x3179,
- CMSG_KEEP_ALIVE = 0x367C,
- CMSG_KEYBOUND_OVERRIDE = 0x3230,
+ CMSG_KEEP_ALIVE = 0x367D,
+ CMSG_KEYBOUND_OVERRIDE = 0x3233,
CMSG_LATENCY_REPORT = 0x3785,
CMSG_LEARN_PVP_TALENTS = 0x356E,
CMSG_LEARN_TALENTS = 0x356C,
- CMSG_LEAVE_GROUP = 0x3646,
- 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 = 0x3397,
- CMSG_LFG_LIST_LEAVE = 0x360B,
- CMSG_LFG_LIST_SEARCH = 0x360D,
- CMSG_LFG_LIST_UPDATE_REQUEST = 0x3398,
+ CMSG_LEAVE_GROUP = 0x3647,
+ CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E1,
+ CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360F,
+ CMSG_LFG_LIST_CANCEL_APPLICATION = 0x3610,
+ CMSG_LFG_LIST_DECLINE_APPLICANT = 0x3611,
+ CMSG_LFG_LIST_GET_STATUS = 0x360D,
+ CMSG_LFG_LIST_INVITE_APPLICANT = 0x3612,
+ CMSG_LFG_LIST_INVITE_RESPONSE = 0x3613,
+ CMSG_LFG_LIST_JOIN = 0x33A4,
+ CMSG_LFG_LIST_LEAVE = 0x360C,
+ CMSG_LFG_LIST_SEARCH = 0x360E,
+ CMSG_LFG_LIST_UPDATE_REQUEST = 0x33A5,
CMSG_LIST_INVENTORY = 0x34A8,
- CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B4,
- CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B3,
- CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B2,
- CMSG_LIVE_REGION_KEY_BINDINGS_COPY = 0x36B5,
+ 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 = 0x3333,
- CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x373B,
- CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x3749,
- CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x373E,
- CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x373A,
- CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x373D,
- CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x373C,
- CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x373F,
- CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x3740,
- CMSG_LOGOUT_CANCEL = 0x34E8,
- CMSG_LOGOUT_INSTANT = 0x34E9,
- CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x3595,
+ CMSG_LOAD_SELECTED_TROPHY = 0x3340,
+ CMSG_LOBBY_MATCHMAKER_ACCEPT_PARTY_INVITE = 0x373D,
+ CMSG_LOBBY_MATCHMAKER_CREATE_CHARACTER = 0x374B,
+ CMSG_LOBBY_MATCHMAKER_LEAVE_PARTY = 0x3740,
+ CMSG_LOBBY_MATCHMAKER_PARTY_INVITE = 0x373C,
+ CMSG_LOBBY_MATCHMAKER_PARTY_UNINVITE = 0x373F,
+ CMSG_LOBBY_MATCHMAKER_REJECT_PARTY_INVITE = 0x373E,
+ CMSG_LOBBY_MATCHMAKER_SET_PARTY_PLAYLIST_ENTRY = 0x3741,
+ CMSG_LOBBY_MATCHMAKER_SET_PLAYER_READY = 0x3742,
+ CMSG_LOGOUT_CANCEL = 0x34E7,
+ CMSG_LOGOUT_INSTANT = 0x34E8,
+ CMSG_LOGOUT_LOBBY_MATCHMAKER = 0x3596,
CMSG_LOGOUT_REQUEST = 0x34E6,
CMSG_LOG_DISCONNECT = 0x377D,
CMSG_LOG_STREAMING_ERROR = 0x3781,
- CMSG_LOOT_ITEM = 0x3218,
- CMSG_LOOT_MONEY = 0x3217,
- CMSG_LOOT_RELEASE = 0x321C,
- CMSG_LOOT_ROLL = 0x321D,
- CMSG_LOOT_UNIT = 0x3216,
- CMSG_LOW_LEVEL_RAID1 = 0x369D,
- CMSG_LOW_LEVEL_RAID2 = 0x3523,
+ CMSG_LOOT_ITEM = 0x321B,
+ CMSG_LOOT_MONEY = 0x321A,
+ CMSG_LOOT_RELEASE = 0x321F,
+ CMSG_LOOT_ROLL = 0x3220,
+ CMSG_LOOT_UNIT = 0x3219,
+ CMSG_LOW_LEVEL_RAID1 = 0x369F,
+ CMSG_LOW_LEVEL_RAID2 = 0x3522,
CMSG_MAIL_CREATE_TEXT_ITEM = 0x3550,
- CMSG_MAIL_DELETE = 0x3232,
+ CMSG_MAIL_DELETE = 0x3235,
CMSG_MAIL_GET_LIST = 0x354B,
CMSG_MAIL_MARK_AS_READ = 0x354F,
- CMSG_MAIL_RETURN_TO_SENDER = 0x3652,
+ CMSG_MAIL_RETURN_TO_SENDER = 0x3653,
CMSG_MAIL_TAKE_ITEM = 0x354D,
CMSG_MAIL_TAKE_MONEY = 0x354C,
- CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3234,
- CMSG_MASTER_LOOT_ITEM = 0x3219,
+ CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3237,
+ CMSG_MASTER_LOOT_ITEM = 0x321C,
CMSG_MERGE_GUILD_BANK_ITEM_WITH_GUILD_BANK_ITEM = 0x34C9,
CMSG_MERGE_GUILD_BANK_ITEM_WITH_ITEM = 0x34C6,
CMSG_MERGE_ITEM_WITH_GUILD_BANK_ITEM = 0x34C4,
- CMSG_MINIMAP_PING = 0x3648,
+ CMSG_MINIMAP_PING = 0x3649,
CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318A,
CMSG_MOUNT_CLEAR_FANFARE = 0x3127,
- CMSG_MOUNT_SET_FAVORITE = 0x362F,
- CMSG_MOUNT_SPECIAL_ANIM = 0x329C,
- CMSG_MOVE_ADD_IMPULSE_ACK = 0x3A50,
- CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4E,
+ CMSG_MOUNT_SET_FAVORITE = 0x3630,
+ CMSG_MOUNT_SPECIAL_ANIM = 0x32A5,
+ CMSG_MOVE_ADD_IMPULSE_ACK = 0x3A51,
+ CMSG_MOVE_APPLY_INERTIA_ACK = 0x3A4F,
CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A15,
- CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2F,
- CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A34,
- CMSG_MOVE_COLLISION_DISABLE_ACK = 0x3A39,
- CMSG_MOVE_COLLISION_ENABLE_ACK = 0x3A3A,
- CMSG_MOVE_DISMISS_VEHICLE = 0x3A33,
+ CMSG_MOVE_CHANGE_TRANSPORT = 0x3A30,
+ CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A35,
+ CMSG_MOVE_COLLISION_DISABLE_ACK = 0x3A3A,
+ CMSG_MOVE_COLLISION_ENABLE_ACK = 0x3A3B,
+ CMSG_MOVE_DISMISS_VEHICLE = 0x3A34,
CMSG_MOVE_DOUBLE_JUMP = 0x39EB,
CMSG_MOVE_ENABLE_DOUBLE_JUMP_ACK = 0x3A1E,
+ CMSG_MOVE_ENABLE_FULL_SPEED_TURNING_ACK = 0x3A65,
CMSG_MOVE_ENABLE_SWIM_TO_FLY_TRANS_ACK = 0x3A24,
CMSG_MOVE_FALL_LAND = 0x39FB,
CMSG_MOVE_FALL_RESET = 0x3A19,
CMSG_MOVE_FEATHER_FALL_ACK = 0x3A1C,
- CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2E,
- CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2D,
- CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A32,
+ CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2F,
+ CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2E,
+ CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A33,
CMSG_MOVE_FORCE_ROOT_ACK = 0x3A0E,
CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A0C,
CMSG_MOVE_FORCE_RUN_SPEED_CHANGE_ACK = 0x3A0B,
@@ -537,52 +545,51 @@ enum OpcodeClient : uint16
CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK = 0x3A23,
CMSG_MOVE_FORCE_UNROOT_ACK = 0x3A0F,
CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK = 0x3A21,
- CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3A35,
- CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3A36,
+ CMSG_MOVE_GRAVITY_DISABLE_ACK = 0x3A36,
+ CMSG_MOVE_GRAVITY_ENABLE_ACK = 0x3A37,
CMSG_MOVE_GUILD_BANK_ITEM = 0x34C3,
CMSG_MOVE_HEARTBEAT = 0x3A10,
CMSG_MOVE_HOVER_ACK = 0x3A13,
- CMSG_MOVE_INERTIA_DISABLE_ACK = 0x3A37,
- CMSG_MOVE_INERTIA_ENABLE_ACK = 0x3A38,
- CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x3A46,
+ CMSG_MOVE_INERTIA_DISABLE_ACK = 0x3A38,
+ CMSG_MOVE_INERTIA_ENABLE_ACK = 0x3A39,
+ CMSG_MOVE_INIT_ACTIVE_MOVER_COMPLETE = 0x3A47,
CMSG_MOVE_JUMP = 0x39EA,
CMSG_MOVE_KNOCK_BACK_ACK = 0x3A12,
- CMSG_MOVE_REMOVE_INERTIA_ACK = 0x3A4F,
+ CMSG_MOVE_REMOVE_INERTIA_ACK = 0x3A50,
CMSG_MOVE_REMOVE_MOVEMENT_FORCES = 0x3A17,
CMSG_MOVE_REMOVE_MOVEMENT_FORCE_ACK = 0x3A16,
- CMSG_MOVE_SEAMLESS_TRANSFER_COMPLETE = 0x3A44,
- CMSG_MOVE_SET_ADV_FLY = 0x3A52,
- CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x3A58,
- CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x3A53,
- CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x3A59,
- CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x3A56,
- CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x3A57,
- CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x3A60,
- CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x3A55,
- CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x3A54,
- CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x3A5E,
- CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x3A5A,
- CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x3A5B,
- CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x3A5D,
- CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x3A5C,
- CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x3A51,
+ CMSG_MOVE_SET_ADV_FLY = 0x3A53,
+ CMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED_ACK = 0x3A59,
+ CMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION_ACK = 0x3A54,
+ CMSG_MOVE_SET_ADV_FLYING_BANKING_RATE_ACK = 0x3A5A,
+ CMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD_ACK = 0x3A57,
+ CMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT_ACK = 0x3A58,
+ CMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT_ACK = 0x3A61,
+ CMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT_ACK = 0x3A56,
+ CMSG_MOVE_SET_ADV_FLYING_MAX_VEL_ACK = 0x3A55,
+ CMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION_ACK = 0x3A5F,
+ CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN_ACK = 0x3A5B,
+ CMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP_ACK = 0x3A5C,
+ CMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION_ACK = 0x3A5E,
+ CMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD_ACK = 0x3A5D,
+ CMSG_MOVE_SET_CAN_ADV_FLY_ACK = 0x3A52,
CMSG_MOVE_SET_CAN_FLY_ACK = 0x3A27,
CMSG_MOVE_SET_CAN_TURN_WHILE_FALLING_ACK = 0x3A25,
- CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A3B,
+ CMSG_MOVE_SET_COLLISION_HEIGHT_ACK = 0x3A3C,
CMSG_MOVE_SET_FACING = 0x3A09,
- CMSG_MOVE_SET_FACING_HEARTBEAT = 0x3A5F,
- CMSG_MOVE_SET_FLY = 0x3A28,
+ CMSG_MOVE_SET_FACING_HEARTBEAT = 0x3A60,
+ CMSG_MOVE_SET_FLY = 0x3A29,
CMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES_ACK = 0x3A26,
- CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A42,
+ CMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE_ACK = 0x3A43,
CMSG_MOVE_SET_PITCH = 0x3A0A,
CMSG_MOVE_SET_RUN_MODE = 0x39F2,
CMSG_MOVE_SET_TURN_RATE_CHEAT = 0x3A06,
CMSG_MOVE_SET_VEHICLE_REC_ID_ACK = 0x3A14,
CMSG_MOVE_SET_WALK_MODE = 0x39F3,
CMSG_MOVE_SPLINE_DONE = 0x3A18,
- CMSG_MOVE_START_ASCEND = 0x3A29,
+ CMSG_MOVE_START_ASCEND = 0x3A2A,
CMSG_MOVE_START_BACKWARD = 0x39E5,
- CMSG_MOVE_START_DESCEND = 0x3A30,
+ CMSG_MOVE_START_DESCEND = 0x3A31,
CMSG_MOVE_START_FORWARD = 0x39E4,
CMSG_MOVE_START_PITCH_DOWN = 0x39F0,
CMSG_MOVE_START_PITCH_UP = 0x39EF,
@@ -592,7 +599,7 @@ enum OpcodeClient : uint16
CMSG_MOVE_START_TURN_LEFT = 0x39EC,
CMSG_MOVE_START_TURN_RIGHT = 0x39ED,
CMSG_MOVE_STOP = 0x39E6,
- CMSG_MOVE_STOP_ASCEND = 0x3A2A,
+ CMSG_MOVE_STOP_ASCEND = 0x3A2B,
CMSG_MOVE_STOP_PITCH = 0x39F1,
CMSG_MOVE_STOP_STRAFE = 0x39E9,
CMSG_MOVE_STOP_SWIM = 0x39FD,
@@ -602,48 +609,48 @@ enum OpcodeClient : uint16
CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A1A,
CMSG_MOVE_WATER_WALK_ACK = 0x3A1D,
CMSG_MYTHIC_PLUS_REQUEST_MAP_STATS = 0x305D,
- CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D4,
+ CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D6,
CMSG_NEXT_CINEMATIC_CAMERA = 0x3559,
CMSG_OBJECT_UPDATE_FAILED = 0x3180,
CMSG_OBJECT_UPDATE_RESCUED = 0x3181,
- CMSG_OFFER_PETITION = 0x33DF,
+ CMSG_OFFER_PETITION = 0x33D6,
CMSG_OPENING_CINEMATIC = 0x3558,
- CMSG_OPEN_ITEM = 0x3352,
- CMSG_OPEN_MISSION_NPC = 0x3315,
- CMSG_OPEN_SHIPMENT_NPC = 0x331D,
- CMSG_OPEN_TRADESKILL_NPC = 0x3328,
- CMSG_OPT_OUT_OF_LOOT = 0x3506,
- CMSG_OVERRIDE_SCREEN_FLASH = 0x3530,
- CMSG_PARTY_INVITE = 0x3603,
- CMSG_PARTY_INVITE_RESPONSE = 0x3605,
- CMSG_PARTY_UNINVITE = 0x3644,
- CMSG_PERFORM_ITEM_INTERACTION = 0x323C,
- CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x3408,
+ CMSG_OPEN_ITEM = 0x335F,
+ CMSG_OPEN_MISSION_NPC = 0x3320,
+ CMSG_OPEN_SHIPMENT_NPC = 0x3328,
+ CMSG_OPEN_TRADESKILL_NPC = 0x3333,
+ CMSG_OPT_OUT_OF_LOOT = 0x3505,
+ CMSG_OVERRIDE_SCREEN_FLASH = 0x352F,
+ CMSG_PARTY_INVITE = 0x3604,
+ CMSG_PARTY_INVITE_RESPONSE = 0x3606,
+ CMSG_PARTY_UNINVITE = 0x3645,
+ CMSG_PERFORM_ITEM_INTERACTION = 0x323F,
+ CMSG_PERKS_PROGRAM_ITEMS_REFRESHED = 0x33FE,
CMSG_PERKS_PROGRAM_REQUEST_PENDING_REWARDS = 0x3135,
- CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x340A,
- CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x340B,
- CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x340C,
- CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x3409,
+ CMSG_PERKS_PROGRAM_REQUEST_PURCHASE = 0x3400,
+ CMSG_PERKS_PROGRAM_REQUEST_REFUND = 0x3401,
+ CMSG_PERKS_PROGRAM_SET_FROZEN_VENDOR_ITEM = 0x3402,
+ CMSG_PERKS_PROGRAM_STATUS_REQUEST = 0x33FF,
CMSG_PETITION_BUY = 0x34D1,
- CMSG_PETITION_RENAME_GUILD = 0x36C4,
+ CMSG_PETITION_RENAME_GUILD = 0x36C6,
CMSG_PETITION_SHOW_LIST = 0x34D0,
CMSG_PETITION_SHOW_SIGNATURES = 0x34D2,
CMSG_PET_ABANDON = 0x3493,
CMSG_PET_ABANDON_BY_NUMBER = 0x3494,
CMSG_PET_ACTION = 0x3491,
- CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E3,
- CMSG_PET_BATTLE_INPUT = 0x363E,
- CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3231,
- CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E2,
- CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x363F,
- 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_BATTLE_FINAL_NOTIFY = 0x31E5,
+ CMSG_PET_BATTLE_INPUT = 0x363F,
+ CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3234,
+ CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E4,
+ CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3640,
+ CMSG_PET_BATTLE_REQUEST_PVP = 0x31DE,
+ CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DF,
+ CMSG_PET_BATTLE_REQUEST_WILD = 0x31DC,
+ CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E6,
+ CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DD,
CMSG_PET_CANCEL_AURA = 0x3495,
- CMSG_PET_CAST_SPELL = 0x32B9,
- CMSG_PET_RENAME = 0x3681,
+ CMSG_PET_CAST_SPELL = 0x32C4,
+ CMSG_PET_RENAME = 0x3682,
CMSG_PET_SET_ACTION = 0x3490,
CMSG_PET_SPELL_AUTOCAST = 0x3496,
CMSG_PET_STOP_ATTACK = 0x3492,
@@ -651,30 +658,30 @@ enum OpcodeClient : uint16
CMSG_PLAYER_LOGIN = 0x35EA,
CMSG_PUSH_QUEST_TO_PARTY = 0x34A6,
CMSG_PVP_LOG_DATA = 0x317C,
- CMSG_QUERY_BATTLE_PET_NAME = 0x328F,
- CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365D,
- CMSG_QUERY_CORPSE_TRANSPORT = 0x365E,
+ CMSG_QUERY_BATTLE_PET_NAME = 0x3298,
+ CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x365E,
+ CMSG_QUERY_CORPSE_TRANSPORT = 0x365F,
CMSG_QUERY_COUNTDOWN_TIMER = 0x31A9,
- CMSG_QUERY_CREATURE = 0x3289,
- CMSG_QUERY_GAME_OBJECT = 0x328A,
- CMSG_QUERY_GARRISON_PET_NAME = 0x3290,
- CMSG_QUERY_GUILD_INFO = 0x3687,
- CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3510,
+ CMSG_QUERY_CREATURE = 0x3292,
+ CMSG_QUERY_GAME_OBJECT = 0x3293,
+ CMSG_QUERY_GARRISON_PET_NAME = 0x3299,
+ CMSG_QUERY_GUILD_INFO = 0x3688,
+ CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x350F,
CMSG_QUERY_NEXT_MAIL_TIME = 0x354E,
- CMSG_QUERY_NPC_TEXT = 0x328B,
- CMSG_QUERY_PAGE_TEXT = 0x328D,
- CMSG_QUERY_PETITION = 0x3291,
- CMSG_QUERY_PET_NAME = 0x328E,
+ CMSG_QUERY_NPC_TEXT = 0x3294,
+ CMSG_QUERY_PAGE_TEXT = 0x3296,
+ CMSG_QUERY_PETITION = 0x329A,
+ CMSG_QUERY_PET_NAME = 0x3297,
CMSG_QUERY_PLAYER_NAMES = 0x3786,
CMSG_QUERY_PLAYER_NAMES_FOR_COMMUNITY = 0x3784,
CMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID = 0x3783,
CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3175,
- CMSG_QUERY_QUEST_INFO = 0x328C,
+ CMSG_QUERY_QUEST_INFO = 0x3295,
CMSG_QUERY_QUEST_ITEM_USABILITY = 0x3176,
- CMSG_QUERY_REALM_NAME = 0x3686,
- CMSG_QUERY_SCENARIO_POI = 0x3653,
+ CMSG_QUERY_REALM_NAME = 0x3687,
+ CMSG_QUERY_SCENARIO_POI = 0x3654,
CMSG_QUERY_TIME = 0x34E5,
- CMSG_QUERY_TREASURE_PICKER = 0x3377,
+ CMSG_QUERY_TREASURE_PICKER = 0x3384,
CMSG_QUERY_VOID_STORAGE = 0x31A2,
CMSG_QUEST_CONFIRM_ACCEPT = 0x34A5,
CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349F,
@@ -686,154 +693,157 @@ enum OpcodeClient : uint16
CMSG_QUEST_GIVER_REQUEST_REWARD = 0x34A2,
CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x34A4,
CMSG_QUEST_GIVER_STATUS_QUERY = 0x34A3,
- CMSG_QUEST_GIVER_STATUS_TRACKED_QUERY = 0x3593,
+ CMSG_QUEST_GIVER_STATUS_TRACKED_QUERY = 0x3594,
CMSG_QUEST_LOG_REMOVE_QUEST = 0x3543,
- CMSG_QUEST_POI_QUERY = 0x36AB,
+ CMSG_QUEST_POI_QUERY = 0x36AD,
CMSG_QUEST_PUSH_RESULT = 0x34A7,
- CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33D0,
- CMSG_QUEST_SESSION_REQUEST_START = 0x33CF,
- CMSG_QUEST_SESSION_REQUEST_STOP = 0x3729,
+ CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x33C8,
+ CMSG_QUEST_SESSION_REQUEST_START = 0x33C7,
+ CMSG_QUEST_SESSION_REQUEST_STOP = 0x372B,
CMSG_QUEUED_MESSAGES_END = 0x3780,
- CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3701,
- CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3700,
- CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x372E,
- CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x36FF,
- CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x36FE,
- CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3514,
- CMSG_RAF_CLAIM_NEXT_REWARD = 0x371F,
- CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3721,
- CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3720,
- CMSG_RANDOM_ROLL = 0x3651,
- CMSG_READY_CHECK_RESPONSE = 0x3632,
- CMSG_READ_ITEM = 0x3353,
- CMSG_RECLAIM_CORPSE = 0x34EB,
- CMSG_REMOVE_NEW_ITEM = 0x337A,
- CMSG_REMOVE_RAF_RECRUIT = 0x3722,
+ 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 = 0x3513,
+ CMSG_RAF_CLAIM_NEXT_REWARD = 0x3721,
+ CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3723,
+ CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3722,
+ CMSG_RANDOM_ROLL = 0x3652,
+ CMSG_READY_CHECK_RESPONSE = 0x3633,
+ CMSG_READ_ITEM = 0x3360,
+ CMSG_RECLAIM_CORPSE = 0x34EA,
+ CMSG_REMOVE_NEW_ITEM = 0x3387,
+ CMSG_REMOVE_RAF_RECRUIT = 0x3724,
CMSG_REORDER_CHARACTERS = 0x35E9,
- CMSG_REPAIR_ITEM = 0x34FC,
- CMSG_REPLACE_TROPHY = 0x3334,
+ CMSG_REPAIR_ITEM = 0x34FB,
+ CMSG_REPLACE_TROPHY = 0x3341,
CMSG_REPOP_REQUEST = 0x353B,
- CMSG_REPORT_CLIENT_VARIABLES = 0x36FB,
- CMSG_REPORT_ENABLED_ADDONS = 0x36FA,
- CMSG_REPORT_FROZEN_WHILE_LOADING_MAP = 0x36A3,
- CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FC,
- CMSG_REPORT_PVP_PLAYER_AFK = 0x3504,
- CMSG_REPORT_SERVER_LAG = 0x33C8,
- CMSG_REPORT_STUCK_IN_COMBAT = 0x33C9,
- CMSG_REQUEST_ACCOUNT_DATA = 0x3691,
- CMSG_REQUEST_AREA_POI_UPDATE = 0x3379,
+ CMSG_REPORT_CLIENT_VARIABLES = 0x36FD,
+ CMSG_REPORT_ENABLED_ADDONS = 0x36FC,
+ CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x36FE,
+ CMSG_REPORT_PVP_PLAYER_AFK = 0x3503,
+ CMSG_REPORT_SERVER_LAG = 0x33C0,
+ CMSG_REPORT_STUCK_IN_COMBAT = 0x33C1,
+ CMSG_REQUEST_ACCOUNT_DATA = 0x3693,
+ CMSG_REQUEST_AREA_POI_UPDATE = 0x3386,
CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC,
CMSG_REQUEST_CEMETERY_LIST = 0x3177,
- CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3688,
- CMSG_REQUEST_COVENANT_CALLINGS = 0x33BA,
+ CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3689,
+ CMSG_REQUEST_COVENANT_CALLINGS = 0x33B2,
CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x353F,
- CMSG_REQUEST_FORCED_REACTIONS = 0x320D,
- CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33F4,
+ CMSG_REQUEST_CURRENCY_DATA_FOR_ACCOUNT_CHARACTERS = 0x313C,
+ CMSG_REQUEST_FORCED_REACTIONS = 0x3210,
+ CMSG_REQUEST_GARRISON_TALENT_WORLD_QUEST_UNLOCKS = 0x33EB,
CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A8,
CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A7,
- CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33CA,
- CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32C5,
- CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x3207,
- CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x3208,
+ CMSG_REQUEST_LATEST_SPLASH_SCREEN = 0x33C2,
+ CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32D0,
+ CMSG_REQUEST_MYTHIC_PLUS_AFFIXES = 0x320A,
+ CMSG_REQUEST_MYTHIC_PLUS_SEASON_DATA = 0x320B,
CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7,
- CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3650,
+ CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3651,
CMSG_REQUEST_PET_INFO = 0x3497,
- CMSG_REQUEST_PLAYED_TIME = 0x3294,
+ CMSG_REQUEST_PLAYED_TIME = 0x329D,
CMSG_REQUEST_PVP_REWARDS = 0x3195,
- CMSG_REQUEST_RAID_INFO = 0x36C5,
+ CMSG_REQUEST_RAID_INFO = 0x36C7,
CMSG_REQUEST_RATED_PVP_INFO = 0x35E3,
- CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x5037,
+ CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x3761,
CMSG_REQUEST_SCHEDULED_PVP_INFO = 0x3196,
CMSG_REQUEST_STABLED_PETS = 0x3498,
- CMSG_REQUEST_VEHICLE_EXIT = 0x3249,
- CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x324B,
- CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x324A,
- CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x324C,
- CMSG_REQUEST_WEEKLY_REWARDS = 0x33BD,
- CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3378,
- CMSG_RESET_CHALLENGE_MODE = 0x3205,
- CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3206,
- CMSG_RESET_INSTANCES = 0x3665,
- CMSG_RESURRECT_RESPONSE = 0x3680,
- CMSG_REVERT_MONUMENT_APPEARANCE = 0x3336,
- CMSG_RIDE_VEHICLE_INTERACT = 0x324D,
- CMSG_RPE_RESET_CHARACTER = 0x374C,
- CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3746,
+ CMSG_REQUEST_VEHICLE_EXIT = 0x3251,
+ CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3253,
+ CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3252,
+ CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3254,
+ CMSG_REQUEST_WEEKLY_REWARDS = 0x33B5,
+ CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3385,
+ CMSG_RESET_CHALLENGE_MODE = 0x3208,
+ CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3209,
+ CMSG_RESET_INSTANCES = 0x3666,
+ CMSG_RESURRECT_RESPONSE = 0x3681,
+ CMSG_REVERT_MONUMENT_APPEARANCE = 0x3343,
+ CMSG_RIDE_VEHICLE_INTERACT = 0x3255,
+ CMSG_RPE_RESET_CHARACTER = 0x374E,
+ CMSG_SAVE_ACCOUNT_DATA_EXPORT = 0x3748,
CMSG_SAVE_CUF_PROFILES = 0x318B,
- CMSG_SAVE_EQUIPMENT_SET = 0x351A,
- CMSG_SAVE_GUILD_EMBLEM = 0x32C9,
- CMSG_SAVE_PERSONAL_EMBLEM = 0x32CA,
- CMSG_SCENE_PLAYBACK_CANCELED = 0x322D,
- CMSG_SCENE_PLAYBACK_COMPLETE = 0x322C,
- CMSG_SCENE_TRIGGER_EVENT = 0x322E,
+ CMSG_SAVE_EQUIPMENT_SET = 0x3519,
+ CMSG_SAVE_GUILD_EMBLEM = 0x32D4,
+ CMSG_SAVE_PERSONAL_EMBLEM = 0x32D5,
+ CMSG_SCENE_PLAYBACK_CANCELED = 0x3230,
+ CMSG_SCENE_PLAYBACK_COMPLETE = 0x322F,
+ CMSG_SCENE_TRIGGER_EVENT = 0x3231,
+ CMSG_SEAMLESS_TRANSFER_COMPLETE = 0x3427,
CMSG_SELF_RES = 0x3546,
CMSG_SELL_ALL_JUNK_ITEMS = 0x34AA,
CMSG_SELL_ITEM = 0x34A9,
- CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F4,
- CMSG_SEND_CONTACT_LIST = 0x36CA,
+ CMSG_SEND_CHARACTER_CLUB_INVITATION = 0x36F6,
+ CMSG_SEND_CONTACT_LIST = 0x36CC,
CMSG_SEND_MAIL = 0x35FA,
- CMSG_SEND_PING_UNIT = 0x3433,
- CMSG_SEND_PING_WORLD_POINT = 0x3434,
+ CMSG_SEND_PING_UNIT = 0x3429,
+ CMSG_SEND_PING_WORLD_POINT = 0x342A,
CMSG_SEND_TEXT_EMOTE = 0x348E,
- CMSG_SERVER_TIME_OFFSET_REQUEST = 0x3698,
- CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3233,
+ CMSG_SERVER_TIME_OFFSET_REQUEST = 0x369A,
+ CMSG_SETUP_WARBAND_GROUPS = 0x375C,
+ CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3236,
CMSG_SET_ACTION_BAR_TOGGLES = 0x3547,
- CMSG_SET_ACTION_BUTTON = 0x3633,
- CMSG_SET_ACTIVE_MOVER = 0x3A3C,
- CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32D7,
- CMSG_SET_ASSISTANT_LEADER = 0x364C,
- CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3356,
- CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x3357,
- CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3358,
- CMSG_SET_CONTACT_NOTES = 0x36CD,
+ CMSG_SET_ACTION_BUTTON = 0x3634,
+ CMSG_SET_ACTIVE_MOVER = 0x3A3D,
+ CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32E2,
+ CMSG_SET_ASSISTANT_LEADER = 0x364D,
+ CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3363,
+ CMSG_SET_BACKPACK_SELL_JUNK_DISABLED = 0x3364,
+ CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3365,
+ CMSG_SET_CONTACT_NOTES = 0x36CF,
CMSG_SET_CURRENCY_FLAGS = 0x3169,
- CMSG_SET_DIFFICULTY_ID = 0x322F,
- CMSG_SET_DUNGEON_DIFFICULTY = 0x367F,
- CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x3283,
- CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3619,
- CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3702,
- CMSG_SET_FACTION_AT_WAR = 0x34EE,
- CMSG_SET_FACTION_INACTIVE = 0x34F0,
- CMSG_SET_FACTION_NOT_AT_WAR = 0x34EF,
+ CMSG_SET_DIFFICULTY_ID = 0x3232,
+ CMSG_SET_DUNGEON_DIFFICULTY = 0x3680,
+ CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT = 0x328C,
+ CMSG_SET_EVERYONE_IS_ASSISTANT = 0x361A,
+ CMSG_SET_EXCLUDED_CHAT_CENSOR_SOURCES = 0x3704,
+ CMSG_SET_FACTION_AT_WAR = 0x34ED,
+ CMSG_SET_FACTION_INACTIVE = 0x34EF,
+ CMSG_SET_FACTION_NOT_AT_WAR = 0x34EE,
CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B9,
- CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x335A,
- CMSG_SET_LOOT_METHOD = 0x3645,
+ CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3367,
+ CMSG_SET_LOOT_METHOD = 0x3646,
CMSG_SET_LOOT_SPECIALIZATION = 0x3554,
- CMSG_SET_PARTY_ASSIGNMENT = 0x364E,
- CMSG_SET_PARTY_LEADER = 0x3647,
+ CMSG_SET_PARTY_ASSIGNMENT = 0x364F,
+ CMSG_SET_PARTY_LEADER = 0x3648,
CMSG_SET_PET_FAVORITE = 0x3168,
CMSG_SET_PET_SLOT = 0x3167,
- CMSG_SET_PLAYER_DECLINED_NAMES = 0x3685,
+ CMSG_SET_PLAYER_DECLINED_NAMES = 0x3686,
CMSG_SET_PREFERRED_CEMETERY = 0x3178,
- CMSG_SET_PVP = 0x32CE,
- CMSG_SET_RAID_DIFFICULTY = 0x36D6,
- CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x361A,
+ CMSG_SET_PVP = 0x32D9,
+ CMSG_SET_RAID_DIFFICULTY = 0x36D8,
+ CMSG_SET_RESTRICT_PINGS_TO_ASSISTANTS = 0x361B,
CMSG_SET_ROLE = 0x35D9,
- CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3683,
+ CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3684,
CMSG_SET_SELECTION = 0x353D,
CMSG_SET_SHEATHED = 0x348F,
- CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3359,
- CMSG_SET_TAXI_BENCHMARK_MODE = 0x3503,
- CMSG_SET_TITLE = 0x329A,
+ CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3366,
+ CMSG_SET_TAXI_BENCHMARK_MODE = 0x3502,
+ CMSG_SET_TITLE = 0x32A3,
CMSG_SET_TRADE_CURRENCY = 0x3160,
CMSG_SET_TRADE_GOLD = 0x315F,
CMSG_SET_TRADE_ITEM = 0x315D,
- CMSG_SET_USING_PARTY_GARRISON = 0x3317,
- CMSG_SET_WAR_MODE = 0x32CF,
- CMSG_SET_WATCHED_FACTION = 0x34F1,
- CMSG_SHOW_TRADE_SKILL = 0x36BD,
+ CMSG_SET_USING_PARTY_GARRISON = 0x3322,
+ CMSG_SET_WAR_MODE = 0x32DA,
+ CMSG_SET_WATCHED_FACTION = 0x34F0,
+ CMSG_SHOW_TRADE_SKILL = 0x36BF,
CMSG_SIGN_PETITION = 0x3548,
- CMSG_SILENCE_PARTY_TALKER = 0x364F,
- CMSG_SOCIAL_CONTRACT_REQUEST = 0x3741,
- CMSG_SOCKET_GEMS = 0x34FB,
- CMSG_SORT_BAGS = 0x335B,
- CMSG_SORT_BANK_BAGS = 0x335C,
- CMSG_SORT_REAGENT_BANK_BAGS = 0x335D,
- CMSG_SPAWN_TRACKING_UPDATE = 0x32AF,
- CMSG_SPECTATE_CHANGE = 0x342B,
+ CMSG_SILENCE_PARTY_TALKER = 0x3650,
+ CMSG_SOCIAL_CONTRACT_REQUEST = 0x3743,
+ CMSG_SOCKET_GEMS = 0x34FA,
+ CMSG_SORT_ACCOUNT_BANK_BAGS = 0x342D,
+ CMSG_SORT_BAGS = 0x3368,
+ CMSG_SORT_BANK_BAGS = 0x3369,
+ CMSG_SORT_REAGENT_BANK_BAGS = 0x336A,
+ CMSG_SPAWN_TRACKING_UPDATE = 0x32B8,
+ CMSG_SPECTATE_CHANGE = 0x3420,
CMSG_SPELL_CLICK = 0x349C,
- CMSG_SPELL_EMPOWER_RELEASE = 0x3281,
- CMSG_SPELL_EMPOWER_RESTART = 0x3282,
+ CMSG_SPELL_EMPOWER_RELEASE = 0x328A,
+ CMSG_SPELL_EMPOWER_RESTART = 0x328B,
CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B7,
CMSG_SPLIT_GUILD_BANK_ITEM = 0x34CA,
CMSG_SPLIT_GUILD_BANK_ITEM_TO_INVENTORY = 0x34C7,
@@ -844,10 +854,10 @@ enum OpcodeClient : uint16
CMSG_START_SPECTATOR_WAR_GAME = 0x35DF,
CMSG_START_WAR_GAME = 0x35DE,
CMSG_STORE_GUILD_BANK_ITEM = 0x34C0,
- CMSG_SUBMIT_USER_FEEDBACK = 0x3690,
- CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E9,
- CMSG_SUMMON_RESPONSE = 0x3667,
- CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3643,
+ CMSG_SUBMIT_USER_FEEDBACK = 0x3692,
+ CMSG_SUBSCRIPTION_INTERSTITIAL_RESPONSE = 0x33E0,
+ CMSG_SUMMON_RESPONSE = 0x3668,
+ CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644,
CMSG_SURRENDER_ARENA = 0x3174,
CMSG_SUSPEND_COMMS_ACK = 0x3778,
CMSG_SUSPEND_TOKEN_RESPONSE = 0x377E,
@@ -855,153 +865,157 @@ enum OpcodeClient : uint16
CMSG_SWAP_INV_ITEM = 0x399D,
CMSG_SWAP_ITEM = 0x399C,
CMSG_SWAP_ITEM_WITH_GUILD_BANK_ITEM = 0x34C1,
- CMSG_SWAP_SUB_GROUPS = 0x364A,
+ CMSG_SWAP_SUB_GROUPS = 0x364B,
CMSG_SWAP_VOID_ITEM = 0x31A4,
- CMSG_TABARD_VENDOR_ACTIVATE = 0x32CB,
+ CMSG_TABARD_VENDOR_ACTIVATE = 0x32D6,
CMSG_TALK_TO_GOSSIP = 0x3499,
CMSG_TAXI_NODE_STATUS_QUERY = 0x34B0,
CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34B2,
CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34B4,
- CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A40,
- CMSG_TIME_SYNC_RESPONSE = 0x3A3D,
- CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3F,
- CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3E,
- CMSG_TOGGLE_DIFFICULTY = 0x3654,
- CMSG_TOGGLE_PVP = 0x32CD,
- CMSG_TOTEM_DESTROYED = 0x3508,
+ CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A41,
+ CMSG_TIME_SYNC_RESPONSE = 0x3A3E,
+ CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A40,
+ CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A3F,
+ CMSG_TOGGLE_DIFFICULTY = 0x3655,
+ CMSG_TOGGLE_PVP = 0x32D8,
+ CMSG_TOTEM_DESTROYED = 0x3507,
CMSG_TOY_CLEAR_FANFARE = 0x3128,
- CMSG_TRADE_SKILL_SET_FAVORITE = 0x3376,
+ CMSG_TRADE_SKILL_SET_FAVORITE = 0x3383,
CMSG_TRAINER_BUY_SPELL = 0x34B6,
CMSG_TRAINER_LIST = 0x34B5,
- CMSG_TRAITS_COMMIT_CONFIG = 0x3413,
- CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3411,
+ CMSG_TRAITS_COMMIT_CONFIG = 0x3408,
+ CMSG_TRAITS_TALENT_TEST_UNLEARN_SPELLS = 0x3406,
+ CMSG_TRANSFER_CURRENCY_FROM_ACCOUNT_CHARACTER = 0x3437,
CMSG_TRANSMOGRIFY_ITEMS = 0x3197,
CMSG_TURN_IN_PETITION = 0x354A,
- CMSG_TUTORIAL = 0x36D7,
- CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B9,
+ CMSG_TUTORIAL = 0x36D9,
+ CMSG_UI_MAP_QUEST_LINES_REQUEST = 0x33B1,
CMSG_UNACCEPT_TRADE = 0x315B,
- CMSG_UNDELETE_CHARACTER = 0x36D9,
- CMSG_UNLEARN_SKILL = 0x34F5,
+ CMSG_UNDELETE_CHARACTER = 0x36DB,
+ CMSG_UNLEARN_SKILL = 0x34F4,
CMSG_UNLEARN_SPECIALIZATION = 0x31A5,
CMSG_UNLOCK_VOID_STORAGE = 0x31A1,
- CMSG_UPDATE_AADC_STATUS = 0x3735,
- CMSG_UPDATE_ACCOUNT_DATA = 0x3692,
- CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32BC,
- CMSG_UPDATE_CLIENT_SETTINGS = 0x3661,
- CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3329,
- CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A43,
- CMSG_UPDATE_RAID_TARGET = 0x364D,
- CMSG_UPDATE_SPELL_VISUAL = 0x32BB,
- CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36EE,
- CMSG_UPGRADE_GARRISON = 0x32DF,
- CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33E7,
+ CMSG_UPDATE_AADC_STATUS = 0x3737,
+ CMSG_UPDATE_ACCOUNT_BANK_TAB_SETTINGS = 0x359D,
+ CMSG_UPDATE_ACCOUNT_DATA = 0x3694,
+ CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32C7,
+ CMSG_UPDATE_CLIENT_SETTINGS = 0x3662,
+ CMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x3334,
+ CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A44,
+ CMSG_UPDATE_RAID_TARGET = 0x364E,
+ CMSG_UPDATE_SPELL_VISUAL = 0x32C6,
+ CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F0,
+ CMSG_UPGRADE_GARRISON = 0x32EA,
+ CMSG_UPGRADE_RUNEFORGE_LEGENDARY = 0x33DE,
CMSG_USED_FOLLOW = 0x3186,
- CMSG_USE_CRITTER_ITEM = 0x3253,
+ CMSG_USE_CRITTER_ITEM = 0x325B,
CMSG_USE_EQUIPMENT_SET = 0x3995,
- CMSG_USE_ITEM = 0x32B5,
- CMSG_USE_TOY = 0x32B8,
- CMSG_VAS_CHECK_TRANSFER_OK = 0x3707,
- CMSG_VAS_GET_QUEUE_MINUTES = 0x3706,
- CMSG_VAS_GET_SERVICE_STATUS = 0x3705,
+ CMSG_USE_ITEM = 0x32C0,
+ CMSG_USE_TOY = 0x32C3,
+ 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 = 0x370B,
- CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x370C,
- CMSG_VOICE_CHAT_LOGIN = 0x370A,
+ 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 = 0x367E,
- CMSG_WHO_IS = 0x367D,
- CMSG_WORLD_LOOT_OBJECT_CLICK = 0x342E,
+ CMSG_WHO = 0x367F,
+ CMSG_WHO_IS = 0x367E,
+ CMSG_WORLD_LOOT_OBJECT_CLICK = 0x3423,
CMSG_WORLD_PORT_RESPONSE = 0x35F9,
CMSG_WRAP_ITEM = 0x3994,
};
enum OpcodeServer : uint16
{
- SMSG_ABORT_NEW_WORLD = 0x2599,
- SMSG_ACCOUNT_COSMETIC_ADDED = 0x2879,
- SMSG_ACCOUNT_CRITERIA_UPDATE = 0x285F,
- SMSG_ACCOUNT_DATA_TIMES = 0x2709,
- SMSG_ACCOUNT_EXPORT_RESPONSE = 0x28B6,
- SMSG_ACCOUNT_MOUNT_REMOVED = 0x25B0,
- SMSG_ACCOUNT_MOUNT_UPDATE = 0x25AF,
- SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2878,
- SMSG_ACCOUNT_TOY_UPDATE = 0x25B1,
- SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B5,
- SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B4,
- SMSG_ACHIEVEMENT_DELETED = 0x26E7,
- SMSG_ACHIEVEMENT_EARNED = 0x2642,
- SMSG_ACTIVATE_ESSENCE_FAILED = 0x3015,
- SMSG_ACTIVATE_SOULBIND_FAILED = 0x3017,
- SMSG_ACTIVATE_TAXI_REPLY = 0x267E,
+ SMSG_ABORT_NEW_WORLD = 0x259B,
+ SMSG_ACCOUNT_CHARACTER_CURRENCY_LISTS = 0x28A1,
+ SMSG_ACCOUNT_CONVERSION_STATE_UPDATE = 0x28A6,
+ SMSG_ACCOUNT_COSMETIC_ADDED = 0x2864,
+ SMSG_ACCOUNT_CRITERIA_UPDATE = 0x284B,
+ SMSG_ACCOUNT_DATA_TIMES = 0x270C,
+ SMSG_ACCOUNT_EXPORT_RESPONSE = 0x2892,
+ SMSG_ACCOUNT_MOUNT_REMOVED = 0x25B2,
+ SMSG_ACCOUNT_MOUNT_UPDATE = 0x25B1,
+ SMSG_ACCOUNT_NOTIFICATIONS_RESPONSE = 0x2863,
+ SMSG_ACCOUNT_TOY_UPDATE = 0x25B3,
+ SMSG_ACCOUNT_TRANSMOG_SET_FAVORITES_UPDATE = 0x25B7,
+ SMSG_ACCOUNT_TRANSMOG_UPDATE = 0x25B6,
+ SMSG_ACHIEVEMENT_DELETED = 0x26EA,
+ SMSG_ACHIEVEMENT_EARNED = 0x2644,
+ SMSG_ACTIVATE_ESSENCE_FAILED = 0x3017,
+ SMSG_ACTIVATE_SOULBIND_FAILED = 0x3019,
+ SMSG_ACTIVATE_TAXI_REPLY = 0x2681,
SMSG_ACTIVE_GLYPHS = 0x2C56,
- SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2745,
- SMSG_ADDON_LIST_REQUEST = 0x2641,
- SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263C,
- SMSG_ADD_ITEM_PASSIVE = 0x25AB,
- SMSG_ADD_LOSS_OF_CONTROL = 0x2672,
- SMSG_ADD_RUNE_POWER = 0x26B8,
- SMSG_ADJUST_SPLINE_DURATION = 0x25D1,
- SMSG_ADVANCED_COMBAT_LOG = 0x2875,
- SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x286F,
- SMSG_AE_LOOT_TARGETS = 0x2617,
- SMSG_AE_LOOT_TARGET_ACK = 0x2618,
- SMSG_AI_REACTION = 0x26B5,
- SMSG_ALLIED_RACE_DETAILS = 0x27F3,
+ SMSG_ACTIVE_SCHEDULED_WORLD_STATE_INFO = 0x2748,
+ SMSG_ADDON_LIST_REQUEST = 0x2643,
+ SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x263E,
+ SMSG_ADD_ITEM_PASSIVE = 0x25AD,
+ SMSG_ADD_LOSS_OF_CONTROL = 0x2674,
+ SMSG_ADD_RUNE_POWER = 0x26BB,
+ SMSG_ADJUST_SPLINE_DURATION = 0x25D3,
+ SMSG_ADVANCED_COMBAT_LOG = 0x2860,
+ SMSG_ADVENTURE_JOURNAL_DATA_RESPONSE = 0x285B,
+ SMSG_AE_LOOT_TARGETS = 0x2619,
+ SMSG_AE_LOOT_TARGET_ACK = 0x261A,
+ SMSG_AI_REACTION = 0x26B8,
+ SMSG_ALLIED_RACE_DETAILS = 0x27F6,
SMSG_ALL_ACCOUNT_CRITERIA = 0x2571,
SMSG_ALL_ACHIEVEMENT_DATA = 0x2570,
SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8,
- SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x284C,
- SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2587,
+ SMSG_APPLY_MOUNT_EQUIPMENT_RESULT = 0x2839,
+ SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2589,
SMSG_AREA_POI_UPDATE_RESPONSE = 0x3010,
- SMSG_AREA_SPIRIT_HEALER_TIME = 0x273E,
+ SMSG_AREA_SPIRIT_HEALER_TIME = 0x2741,
SMSG_AREA_TRIGGER_DENIED = 0x2903,
SMSG_AREA_TRIGGER_FORCE_SET_POSITION_AND_FACING = 0x2900,
- SMSG_AREA_TRIGGER_NO_CORPSE = 0x2715,
+ SMSG_AREA_TRIGGER_NO_CORPSE = 0x2718,
SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = 0x28FE,
SMSG_AREA_TRIGGER_RE_PATH = 0x28FD,
SMSG_AREA_TRIGGER_RE_SHAPE = 0x2902,
SMSG_AREA_TRIGGER_UNATTACH = 0x2901,
SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = 0x28FF,
- SMSG_ARENA_CLEAR_OPPONENTS = 0x2648,
- SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x2631,
- SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2647,
- SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x279F,
- SMSG_ARTIFACT_FORGE_ERROR = 0x279D,
- SMSG_ARTIFACT_RESPEC_PROMPT = 0x279E,
- SMSG_ARTIFACT_XP_GAIN = 0x27E6,
+ SMSG_ARENA_CLEAR_OPPONENTS = 0x264A,
+ SMSG_ARENA_CROWD_CONTROL_SPELL_RESULT = 0x2633,
+ SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2649,
+ SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = 0x27A2,
+ SMSG_ARTIFACT_FORGE_ERROR = 0x27A0,
+ SMSG_ARTIFACT_RESPEC_PROMPT = 0x27A1,
+ SMSG_ARTIFACT_XP_GAIN = 0x27E9,
SMSG_ATTACKER_STATE_UPDATE = 0x294E,
SMSG_ATTACK_START = 0x2939,
SMSG_ATTACK_STOP = 0x293A,
SMSG_ATTACK_SWING_ERROR = 0x2948,
SMSG_ATTACK_SWING_LANDED_LOG = 0x2949,
- SMSG_AUCTIONABLE_TOKEN_AUCTION_SOLD = 0x27CF,
- SMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE_RESPONSE = 0x27CE,
- SMSG_AUCTIONABLE_TOKEN_SELL_CONFIRM_REQUIRED = 0x27CD,
- SMSG_AUCTION_CLOSED_NOTIFICATION = 0x26F2,
- SMSG_AUCTION_COMMAND_RESULT = 0x26EF,
- SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x2896,
- SMSG_AUCTION_FAVORITE_LIST = 0x2866,
- SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x285D,
- SMSG_AUCTION_HELLO_RESPONSE = 0x26ED,
- SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x285C,
- SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2859,
- SMSG_AUCTION_LIST_ITEMS_RESULT = 0x285A,
- SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x285B,
- SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26F1,
- SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26F3,
- SMSG_AUCTION_REPLICATE_RESPONSE = 0x26EE,
- SMSG_AUCTION_WON_NOTIFICATION = 0x26F0,
+ 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 = 0x26F5,
+ SMSG_AUCTION_COMMAND_RESULT = 0x26F2,
+ SMSG_AUCTION_DISABLE_NEW_POSTINGS = 0x287F,
+ SMSG_AUCTION_FAVORITE_LIST = 0x2852,
+ SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = 0x284A,
+ SMSG_AUCTION_HELLO_RESPONSE = 0x26F0,
+ SMSG_AUCTION_LIST_BIDDED_ITEMS_RESULT = 0x2849,
+ SMSG_AUCTION_LIST_BUCKETS_RESULT = 0x2846,
+ SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2847,
+ SMSG_AUCTION_LIST_OWNED_ITEMS_RESULT = 0x2848,
+ SMSG_AUCTION_OUTBID_NOTIFICATION = 0x26F4,
+ SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x26F6,
+ SMSG_AUCTION_REPLICATE_RESPONSE = 0x26F1,
+ SMSG_AUCTION_WON_NOTIFICATION = 0x26F3,
SMSG_AURA_POINTS_DEPLETED = 0x2C22,
SMSG_AURA_UPDATE = 0x2C21,
SMSG_AUTH_CHALLENGE = 0x3048,
SMSG_AUTH_FAILED = 0x256C,
SMSG_AUTH_RESPONSE = 0x256D,
SMSG_AVAILABLE_HOTFIXES = 0x290F,
- SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x289B,
+ SMSG_BACKPACK_DEFAULT_SIZE_CHANGED = 0x2880,
SMSG_BAG_CLEANUP_FINISHED = 0x2DA7,
- SMSG_BARBER_SHOP_RESULT = 0x26BD,
- SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x283D,
+ SMSG_BARBER_SHOP_RESULT = 0x26C0,
+ SMSG_BATCH_PRESENCE_SUBSCRIPTION = 0x282A,
SMSG_BATTLEFIELD_LIST = 0x2927,
SMSG_BATTLEFIELD_PORT_DENIED = 0x292D,
SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2923,
@@ -1017,117 +1031,119 @@ enum OpcodeServer : uint16
SMSG_BATTLEGROUND_PLAYER_LEFT = 0x292C,
SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2928,
SMSG_BATTLEGROUND_POINTS = 0x294A,
- SMSG_BATTLENET_CHALLENGE_ABORT = 0x2787,
- SMSG_BATTLENET_CHALLENGE_START = 0x2786,
- SMSG_BATTLENET_NOTIFICATION = 0x27FF,
- SMSG_BATTLENET_RESPONSE = 0x27FE,
- SMSG_BATTLE_NET_CONNECTION_STATUS = 0x2800,
- SMSG_BATTLE_PAY_ACK_FAILED = 0x2782,
- SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x2777,
- SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x2778,
- SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2781,
- SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2775,
- SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2774,
- SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x287E,
- SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2772,
- SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2773,
- SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2771,
- SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x276F,
- SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2770,
- SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2776,
- SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2780,
- SMSG_BATTLE_PAY_START_CHECKOUT = 0x281B,
- SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x277E,
- SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x277D,
- SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x280F,
- SMSG_BATTLE_PETS_HEALED = 0x25F3,
- SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x2679,
- SMSG_BATTLE_PET_DELETED = 0x25F0,
- SMSG_BATTLE_PET_ERROR = 0x2637,
- SMSG_BATTLE_PET_JOURNAL = 0x25EF,
- SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25ED,
- SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25EE,
- SMSG_BATTLE_PET_RESTORED = 0x25F2,
- SMSG_BATTLE_PET_REVOKED = 0x25F1,
- SMSG_BATTLE_PET_TRAP_LEVEL = 0x25EB,
- SMSG_BATTLE_PET_UPDATES = 0x25EA,
+ SMSG_BATTLENET_CHALLENGE_ABORT = 0x278A,
+ SMSG_BATTLENET_CHALLENGE_START = 0x2789,
+ SMSG_BATTLENET_NOTIFICATION = 0x2802,
+ SMSG_BATTLENET_RESPONSE = 0x2801,
+ SMSG_BATTLE_NET_CONNECTION_STATUS = 0x2803,
+ SMSG_BATTLE_PAY_ACK_FAILED = 0x2785,
+ SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x277A,
+ SMSG_BATTLE_PAY_COLLECTION_ITEM_DELIVERED = 0x277B,
+ SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x2784,
+ SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x2778,
+ SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x2777,
+ SMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS_RESPONSE = 0x2869,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UNREVOKED = 0x2775,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x2776,
+ SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x2774,
+ SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x2772,
+ SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x2773,
+ SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x2779,
+ SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x2783,
+ SMSG_BATTLE_PAY_START_CHECKOUT = 0x281E,
+ SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x2781,
+ SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x2780,
+ SMSG_BATTLE_PAY_VALIDATE_PURCHASE_RESPONSE = 0x2812,
+ SMSG_BATTLE_PETS_HEALED = 0x25F5,
+ SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x267C,
+ SMSG_BATTLE_PET_DELETED = 0x25F2,
+ SMSG_BATTLE_PET_ERROR = 0x2639,
+ SMSG_BATTLE_PET_JOURNAL = 0x25F1,
+ SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x25EF,
+ SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x25F0,
+ SMSG_BATTLE_PET_RESTORED = 0x25F4,
+ SMSG_BATTLE_PET_REVOKED = 0x25F3,
+ SMSG_BATTLE_PET_TRAP_LEVEL = 0x25ED,
+ SMSG_BATTLE_PET_UPDATES = 0x25EC,
SMSG_BIND_POINT_UPDATE = 0x257D,
- SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2627,
- SMSG_BLACK_MARKET_OUTBID = 0x2628,
- SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2626,
- SMSG_BLACK_MARKET_WON = 0x2629,
- SMSG_BONUS_ROLL_EMPTY = 0x2644,
+ SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2629,
+ SMSG_BLACK_MARKET_OUTBID = 0x262A,
+ SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2628,
+ SMSG_BLACK_MARKET_WON = 0x262B,
+ SMSG_BONUS_ROLL_EMPTY = 0x2646,
SMSG_BOSS_KILL = 0x294D,
SMSG_BREAK_TARGET = 0x2938,
SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC,
- SMSG_BROADCAST_SUMMON_CAST = 0x283F,
- SMSG_BROADCAST_SUMMON_RESPONSE = 0x2840,
- SMSG_BUY_FAILED = 0x26C6,
- SMSG_BUY_SUCCEEDED = 0x26C5,
+ SMSG_BROADCAST_SUMMON_CAST = 0x282C,
+ SMSG_BROADCAST_SUMMON_RESPONSE = 0x282D,
+ SMSG_BUY_FAILED = 0x26C9,
+ SMSG_BUY_SUCCEEDED = 0x26C8,
SMSG_CACHE_INFO = 0x291D,
SMSG_CACHE_VERSION = 0x291C,
- SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x269E,
- SMSG_CALENDAR_COMMAND_RESULT = 0x269F,
- SMSG_CALENDAR_COMMUNITY_INVITE = 0x268E,
- SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2696,
- SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x2697,
- SMSG_CALENDAR_INVITE_ADDED = 0x268F,
- SMSG_CALENDAR_INVITE_ALERT = 0x2693,
- SMSG_CALENDAR_INVITE_NOTES = 0x2698,
- SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x2699,
- SMSG_CALENDAR_INVITE_REMOVED = 0x2690,
- SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2695,
- SMSG_CALENDAR_INVITE_STATUS = 0x2691,
- SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2694,
- SMSG_CALENDAR_MODERATOR_STATUS = 0x2692,
- SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x269A,
- SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x269B,
- SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x269C,
- SMSG_CALENDAR_SEND_CALENDAR = 0x268C,
- SMSG_CALENDAR_SEND_EVENT = 0x268D,
- SMSG_CALENDAR_SEND_NUM_PENDING = 0x269D,
- SMSG_CAMERA_EFFECT = 0x2724,
- SMSG_CANCEL_AUTO_REPEAT = 0x26DD,
+ SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26A1,
+ SMSG_CALENDAR_COMMAND_RESULT = 0x26A2,
+ SMSG_CALENDAR_COMMUNITY_INVITE = 0x2691,
+ SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x2699,
+ SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x269A,
+ SMSG_CALENDAR_INVITE_ADDED = 0x2692,
+ SMSG_CALENDAR_INVITE_ALERT = 0x2696,
+ SMSG_CALENDAR_INVITE_NOTES = 0x269B,
+ SMSG_CALENDAR_INVITE_NOTES_ALERT = 0x269C,
+ SMSG_CALENDAR_INVITE_REMOVED = 0x2693,
+ SMSG_CALENDAR_INVITE_REMOVED_ALERT = 0x2698,
+ SMSG_CALENDAR_INVITE_STATUS = 0x2694,
+ SMSG_CALENDAR_INVITE_STATUS_ALERT = 0x2697,
+ SMSG_CALENDAR_MODERATOR_STATUS = 0x2695,
+ SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x269D,
+ SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x269E,
+ SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x269F,
+ SMSG_CALENDAR_SEND_CALENDAR = 0x268F,
+ SMSG_CALENDAR_SEND_EVENT = 0x2690,
+ SMSG_CALENDAR_SEND_NUM_PENDING = 0x26A0,
+ SMSG_CAMERA_EFFECT = 0x2727,
+ SMSG_CANCEL_AUTO_REPEAT = 0x26E0,
SMSG_CANCEL_COMBAT = 0x2947,
SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C48,
- SMSG_CANCEL_PING_PIN = 0x25A4,
- SMSG_CANCEL_PRELOAD_WORLD = 0x2597,
- SMSG_CANCEL_SCENE = 0x2636,
+ SMSG_CANCEL_PING_PIN = 0x25A6,
+ SMSG_CANCEL_PRELOAD_WORLD = 0x2599,
+ SMSG_CANCEL_SCENE = 0x2638,
SMSG_CANCEL_SPELL_VISUAL = 0x2C46,
SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C4A,
SMSG_CAN_DUEL_RESULT = 0x2943,
- SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x280E,
+ SMSG_CAN_REDEEM_TOKEN_FOR_BALANCE_RESPONSE = 0x2811,
SMSG_CAPTURE_POINT_REMOVED = 0x292A,
SMSG_CAST_FAILED = 0x2C59,
- SMSG_CHAIN_MISSILE_BOUNCE = 0x25C9,
- SMSG_CHALLENGE_MODE_COMPLETE = 0x260A,
- SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x260F,
- SMSG_CHALLENGE_MODE_RESET = 0x2609,
- SMSG_CHALLENGE_MODE_START = 0x2607,
- SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2608,
+ SMSG_CAS_REFRESH_REMOTE_DATA = 0x267A,
+ SMSG_CHAIN_MISSILE_BOUNCE = 0x25CB,
+ SMSG_CHALLENGE_MODE_COMPLETE = 0x260C,
+ SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2611,
+ SMSG_CHALLENGE_MODE_RESET = 0x260B,
+ SMSG_CHALLENGE_MODE_START = 0x2609,
+ SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x260A,
SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x3004,
- SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x2801,
+ SMSG_CHANGE_REALM_TICKET_RESPONSE = 0x2804,
SMSG_CHANNEL_LIST = 0x2BC4,
SMSG_CHANNEL_NOTIFY = 0x2BC1,
SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC2,
SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC3,
- SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27BA,
- SMSG_CHARACTER_LOGIN_FAILED = 0x2704,
- SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2785,
- SMSG_CHARACTER_RENAME_RESULT = 0x2761,
- SMSG_CHARACTER_UPGRADE_ABORTED = 0x27B9,
- SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27B8,
- SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27BB,
- SMSG_CHARACTER_UPGRADE_STARTED = 0x27B7,
- SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26E1,
- SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26E2,
- SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A4,
+ SMSG_CHARACTER_CHECK_UPGRADE_RESULT = 0x27BD,
+ SMSG_CHARACTER_LOGIN_FAILED = 0x2707,
+ SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x2788,
+ SMSG_CHARACTER_RENAME_RESULT = 0x2764,
+ SMSG_CHARACTER_UPGRADE_ABORTED = 0x27BC,
+ SMSG_CHARACTER_UPGRADE_COMPLETE = 0x27BB,
+ SMSG_CHARACTER_UPGRADE_MANUAL_UNREVOKE_RESULT = 0x27BE,
+ SMSG_CHARACTER_UPGRADE_STARTED = 0x27BA,
+ SMSG_CHAR_CUSTOMIZE_FAILURE = 0x26E4,
+ SMSG_CHAR_CUSTOMIZE_SUCCESS = 0x26E5,
+ SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27A7,
SMSG_CHAT = 0x2BAD,
SMSG_CHAT_AUTO_RESPONDED = 0x2BB8,
SMSG_CHAT_CAN_LOCAL_WHISPER_TARGET_RESPONSE = 0x2BCB,
SMSG_CHAT_DOWN = 0x2BBE,
SMSG_CHAT_IGNORED_ACCOUNT_MUTED = 0x2BAC,
SMSG_CHAT_IS_DOWN = 0x2BBF,
+ SMSG_CHAT_NOT_IN_GUILD = 0x2BCC,
SMSG_CHAT_NOT_IN_PARTY = 0x2BB2,
SMSG_CHAT_PLAYER_AMBIGUOUS = 0x2BB0,
SMSG_CHAT_PLAYER_NOTFOUND = 0x2BB7,
@@ -1136,99 +1152,102 @@ enum OpcodeServer : uint16
SMSG_CHAT_RESTRICTED = 0x2BB3,
SMSG_CHAT_SERVER_MESSAGE = 0x2BC5,
SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x2C12,
- SMSG_CHECK_ABANDON_NPE = 0x3018,
- SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2585,
- SMSG_CHECK_WARGAME_ENTRY = 0x2591,
- SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2869,
- SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x2850,
+ SMSG_CHECK_ABANDON_NPE = 0x301A,
+ SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT = 0x2587,
+ SMSG_CHECK_WARGAME_ENTRY = 0x2593,
+ SMSG_CHROMIE_TIME_SELECT_EXPANSION_SUCCESS = 0x2855,
+ SMSG_CLAIM_RAF_REWARD_RESPONSE = 0x283D,
SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C26,
- SMSG_CLEAR_BOSS_EMOTES = 0x25BC,
- SMSG_CLEAR_COOLDOWN = 0x26BA,
+ SMSG_CLEAR_BOSS_EMOTES = 0x25BE,
+ SMSG_CLEAR_COOLDOWN = 0x26BD,
SMSG_CLEAR_COOLDOWNS = 0x2C25,
SMSG_CLEAR_RESURRECT = 0x257F,
SMSG_CLEAR_SPELL_CHARGES = 0x2C27,
SMSG_CLEAR_TARGET = 0x2944,
- SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA1,
- SMSG_CLOSE_ARTIFACT_FORGE = 0x279C,
- SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2848,
- SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x284B,
- SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2849,
- SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2846,
- SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x284A,
- SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2847,
- SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x288C,
- SMSG_COIN_REMOVED = 0x2616,
+ SMSG_CLEAR_TREASURE_PICKER_CACHE = 0x2AA2,
+ SMSG_CLOSE_ARTIFACT_FORGE = 0x279F,
+ SMSG_CLUB_FINDER_ERROR_MESSAGE = 0x2835,
+ SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = 0x2838,
+ SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = 0x2836,
+ SMSG_CLUB_FINDER_RESPONSE_CHARACTER_APPLICATION_LIST = 0x2833,
+ SMSG_CLUB_FINDER_RESPONSE_POST_RECRUITMENT_MESSAGE = 0x2837,
+ SMSG_CLUB_FINDER_UPDATE_APPLICATIONS = 0x2834,
+ SMSG_CLUB_FINDER_WHISPER_APPLICANT_RESPONSE = 0x2875,
+ SMSG_COIN_REMOVED = 0x2618,
SMSG_COMBAT_EVENT_FAILED = 0x293B,
- SMSG_COMMENTATOR_MAP_INFO = 0x2706,
- SMSG_COMMENTATOR_PLAYER_INFO = 0x2707,
- SMSG_COMMENTATOR_STATE_CHANGED = 0x2705,
- SMSG_COMMERCE_TOKEN_GET_COUNT_RESPONSE = 0x27CA,
- SMSG_COMMERCE_TOKEN_GET_LOG_RESPONSE = 0x27D6,
- SMSG_COMMERCE_TOKEN_GET_MARKET_PRICE_RESPONSE = 0x27CC,
- SMSG_COMMERCE_TOKEN_UPDATE = 0x27CB,
- SMSG_COMPLAINT_RESULT = 0x26AC,
- SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2795,
- SMSG_CONFIRM_PARTY_INVITE = 0x280D,
+ SMSG_COMMENTATOR_MAP_INFO = 0x2709,
+ SMSG_COMMENTATOR_PLAYER_INFO = 0x270A,
+ SMSG_COMMENTATOR_STATE_CHANGED = 0x2708,
+ 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 = 0x26AF,
+ SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x2798,
+ SMSG_CONFIRM_PARTY_INVITE = 0x2810,
SMSG_CONNECT_TO = 0x304D,
- SMSG_CONSOLE_WRITE = 0x2634,
- SMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE_RESPONSE = 0x27D2,
- SMSG_CONSUMABLE_TOKEN_BUY_CHOICE_REQUIRED = 0x27D1,
- SMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY_RESPONSE = 0x27D0,
- SMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRM_REQUIRED = 0x27D4,
- SMSG_CONSUMABLE_TOKEN_REDEEM_RESPONSE = 0x27D5,
- SMSG_CONTACT_LIST = 0x2783,
- SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2814,
- SMSG_CONTROL_UPDATE = 0x2646,
- SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x2872,
- SMSG_COOLDOWN_CHEAT = 0x2737,
- SMSG_COOLDOWN_EVENT = 0x26B9,
- SMSG_CORPSE_LOCATION = 0x264E,
- SMSG_CORPSE_RECLAIM_DELAY = 0x2748,
- SMSG_CORPSE_TRANSPORT_QUERY = 0x2711,
- SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA3,
- SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F6,
- SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x2873,
- 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 = 0x2700,
- SMSG_CREATE_SHIPMENT_RESPONSE = 0x2794,
- SMSG_CREATOR_VISUALS_OVERRIDE = 0x28AD,
- SMSG_CRITERIA_DELETED = 0x26E6,
- SMSG_CRITERIA_UPDATE = 0x26E0,
- SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26C1,
- SMSG_CUSTOM_LOAD_SCREEN = 0x25CC,
+ SMSG_CONSOLE_WRITE = 0x2636,
+ 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 = 0x2786,
+ SMSG_CONTRIBUTION_LAST_UPDATE_RESPONSE = 0x2817,
+ SMSG_CONTROL_UPDATE = 0x2648,
+ SMSG_CONVERT_ITEMS_TO_CURRENCY_VALUE = 0x285E,
+ SMSG_COOLDOWN_CHEAT = 0x273A,
+ SMSG_COOLDOWN_EVENT = 0x26BC,
+ SMSG_CORPSE_LOCATION = 0x2650,
+ SMSG_CORPSE_RECLAIM_DELAY = 0x274B,
+ SMSG_CORPSE_TRANSPORT_QUERY = 0x2714,
+ SMSG_COVENANT_CALLINGS_AVAILABILITY_RESPONSE = 0x2AA4,
+ SMSG_COVENANT_PREVIEW_OPEN_NPC = 0x27F9,
+ SMSG_COVENANT_RENOWN_SEND_CATCHUP_STATE = 0x285F,
+ SMSG_CRAFTING_HOUSE_HELLO_RESPONSE = 0x288C,
+ SMSG_CRAFTING_ORDER_CANCEL_RESULT = 0x2888,
+ SMSG_CRAFTING_ORDER_CLAIM_RESULT = 0x2884,
+ SMSG_CRAFTING_ORDER_CRAFT_RESULT = 0x2886,
+ SMSG_CRAFTING_ORDER_CREATE_RESULT = 0x2882,
+ SMSG_CRAFTING_ORDER_FULFILL_RESULT = 0x2887,
+ SMSG_CRAFTING_ORDER_LIST_ORDERS_RESPONSE = 0x2883,
+ SMSG_CRAFTING_ORDER_NPC_REWARD_INFO = 0x288E,
+ SMSG_CRAFTING_ORDER_REJECT_RESULT = 0x288A,
+ SMSG_CRAFTING_ORDER_RELEASE_RESULT = 0x2885,
+ SMSG_CRAFTING_ORDER_UPDATE_STATE = 0x288D,
+ SMSG_CRAFT_ENCHANT_RESULT = 0x288B,
+ SMSG_CREATE_CHAR = 0x2703,
+ SMSG_CREATE_SHIPMENT_RESPONSE = 0x2797,
+ SMSG_CREATOR_VISUALS_OVERRIDE = 0x2891,
+ SMSG_CRITERIA_DELETED = 0x26E9,
+ SMSG_CRITERIA_UPDATE = 0x26E3,
+ SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26C4,
+ SMSG_CURRENCY_TRANSFER_LOG = 0x28A3,
+ SMSG_CURRENCY_TRANSFER_RESULT = 0x28A2,
+ SMSG_CUSTOM_LOAD_SCREEN = 0x25CE,
SMSG_DAILY_QUESTS_RESET = 0x2A80,
SMSG_DAMAGE_CALC_LOG = 0x2C65,
SMSG_DB_REPLY = 0x290E,
- SMSG_DEATH_RELEASE_LOC = 0x26D3,
- SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2656,
+ SMSG_DEATH_RELEASE_LOC = 0x26D6,
+ SMSG_DEBUG_MENU_MANAGER_FULL_UPDATE = 0x2658,
SMSG_DEFENSE_MESSAGE = 0x2BB6,
- SMSG_DELETE_CHAR = 0x2701,
+ SMSG_DELETE_CHAR = 0x2704,
SMSG_DELETE_EXPIRED_MISSIONS_RESULT = 0x2980,
- SMSG_DESTROY_ARENA_UNIT = 0x2740,
- SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26F8,
- SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258A,
- SMSG_DISENCHANT_CREDIT = 0x25A8,
+ SMSG_DESTROY_ARENA_UNIT = 0x2743,
+ SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x26FB,
+ SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258C,
+ SMSG_DISENCHANT_CREDIT = 0x25AA,
SMSG_DISMOUNT_RESULT = 0x257C,
SMSG_DISPEL_FAILED = 0x2C2F,
- SMSG_DISPLAY_GAME_ERROR = 0x259E,
+ SMSG_DISPLAY_GAME_ERROR = 0x25A0,
SMSG_DISPLAY_PLAYER_CHOICE = 0x2FFC,
- SMSG_DISPLAY_PROMOTION = 0x264B,
+ SMSG_DISPLAY_PROMOTION = 0x264D,
SMSG_DISPLAY_QUEST_POPUP = 0x2A9E,
- SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2877,
- SMSG_DISPLAY_TOAST = 0x2623,
- SMSG_DISPLAY_WORLD_TEXT = 0x27E7,
+ SMSG_DISPLAY_SOULBIND_UPDATE_MESSAGE = 0x2862,
+ SMSG_DISPLAY_TOAST = 0x2625,
+ SMSG_DISPLAY_WORLD_TEXT = 0x27EA,
SMSG_DISPLAY_WORLD_TEXT_ON_TARGET = 0x2C64,
- SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25E1,
+ SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25E3,
SMSG_DROP_NEW_CONNECTION = 0x304C,
SMSG_DUEL_ARRANGED = 0x293D,
SMSG_DUEL_COMPLETE = 0x2941,
@@ -1237,53 +1256,53 @@ enum OpcodeServer : uint16
SMSG_DUEL_OUT_OF_BOUNDS = 0x293E,
SMSG_DUEL_REQUESTED = 0x293C,
SMSG_DUEL_WINNER = 0x2942,
- SMSG_DURABILITY_DAMAGE_DEATH = 0x2743,
- SMSG_EMOTE = 0x27C1,
- SMSG_ENABLE_BARBER_SHOP = 0x26BC,
- SMSG_ENCHANTMENT_LOG = 0x2712,
- SMSG_ENCOUNTER_END = 0x277C,
- SMSG_ENCOUNTER_START = 0x277B,
- SMSG_END_LIGHTNING_STORM = 0x26A9,
- SMSG_ENSURE_WORLD_LOADED = 0x2886,
+ SMSG_DURABILITY_DAMAGE_DEATH = 0x2746,
+ SMSG_EMOTE = 0x27C4,
+ SMSG_ENABLE_BARBER_SHOP = 0x26BF,
+ SMSG_ENCHANTMENT_LOG = 0x2715,
+ SMSG_ENCOUNTER_END = 0x277F,
+ SMSG_ENCOUNTER_START = 0x277E,
+ SMSG_END_LIGHTNING_STORM = 0x26AC,
SMSG_ENTER_ENCRYPTED_MODE = 0x3049,
SMSG_ENUM_CHARACTERS_RESULT = 0x2584,
- SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27EC,
+ SMSG_ENUM_VAS_PURCHASE_STATES_RESPONSE = 0x27EF,
SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C1E,
- SMSG_EQUIPMENT_SET_ID = 0x26B2,
+ SMSG_EQUIPMENT_SET_ID = 0x26B5,
SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1,
- SMSG_EXPLORATION_EXPERIENCE = 0x275D,
- SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x2870,
- SMSG_FACTION_BONUS_INFO = 0x2723,
+ SMSG_EXPLORATION_EXPERIENCE = 0x2760,
+ SMSG_EXTERNAL_TRANSACTION_ID_GENERATED = 0x285C,
+ SMSG_FACTION_BONUS_INFO = 0x2726,
SMSG_FAILED_PLAYER_CONDITION = 0x2FFA,
- SMSG_FAILED_QUEST_TURN_IN = 0x280A,
- SMSG_FEATURE_SYSTEM_STATUS = 0x25C0,
- SMSG_FEATURE_SYSTEM_STATUS2 = 0x28C1,
- SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25C1,
- SMSG_FEIGN_DEATH_RESISTED = 0x2742,
- SMSG_FISH_ESCAPED = 0x26D0,
- SMSG_FISH_NOT_HOOKED = 0x26CF,
- SMSG_FLIGHT_SPLINE_SYNC = 0x2E2B,
+ SMSG_FAILED_QUEST_TURN_IN = 0x280D,
+ SMSG_FEATURE_SYSTEM_STATUS = 0x25C2,
+ SMSG_FEATURE_SYSTEM_STATUS2 = 0x28A0,
+ SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25C3,
+ SMSG_FEIGN_DEATH_RESISTED = 0x2745,
+ SMSG_FISH_ESCAPED = 0x26D3,
+ SMSG_FISH_NOT_HOOKED = 0x26D2,
+ SMSG_FLIGHT_SPLINE_SYNC = 0x2E2D,
SMSG_FLUSH_COMBAT_LOG_FILE = 0x2C20,
- SMSG_FORCED_DEATH_UPDATE = 0x26D4,
- SMSG_FORCE_ANIM = 0x274F,
- SMSG_FORCE_ANIMATIONS = 0x2750,
- SMSG_FORCE_OBJECT_RELINK = 0x264A,
- SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x25B3,
- SMSG_FRIEND_STATUS = 0x2784,
- SMSG_GAIN_MAW_POWER = 0x27DB,
- SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C4,
- SMSG_GAME_OBJECT_BASE = 0x2821,
- SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x288A,
- SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C5,
- SMSG_GAME_OBJECT_DESPAWN = 0x25C6,
- SMSG_GAME_OBJECT_INTERACTION = 0x2889,
+ SMSG_FORCED_DEATH_UPDATE = 0x26D7,
+ SMSG_FORCE_ANIM = 0x2752,
+ SMSG_FORCE_ANIMATIONS = 0x2753,
+ SMSG_FORCE_OBJECT_RELINK = 0x264C,
+ SMSG_FORCE_RANDOM_TRANSMOG_TOAST = 0x25B5,
+ SMSG_FORCE_SPAWN_TRACKING_UPDATE = 0x2AA1,
+ SMSG_FRIEND_STATUS = 0x2787,
+ SMSG_GAIN_MAW_POWER = 0x27DE,
+ SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25C6,
+ SMSG_GAME_OBJECT_BASE = 0x2824,
+ SMSG_GAME_OBJECT_CLOSE_INTERACTION = 0x2874,
+ SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25C7,
+ SMSG_GAME_OBJECT_DESPAWN = 0x25C8,
+ SMSG_GAME_OBJECT_INTERACTION = 0x2873,
SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4D,
SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4C,
- SMSG_GAME_OBJECT_RESET_STATE = 0x271D,
- SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x27FD,
- SMSG_GAME_SPEED_SET = 0x2682,
- SMSG_GAME_TIME_SET = 0x270B,
- SMSG_GAME_TIME_UPDATE = 0x270A,
+ SMSG_GAME_OBJECT_RESET_STATE = 0x2720,
+ SMSG_GAME_OBJECT_SET_STATE_LOCAL = 0x2800,
+ SMSG_GAME_SPEED_SET = 0x2685,
+ SMSG_GAME_TIME_SET = 0x270E,
+ SMSG_GAME_TIME_UPDATE = 0x270D,
SMSG_GARRISON_ACTIVATE_MISSION_BONUS_ABILITY = 0x2982,
SMSG_GARRISON_ADD_EVENT = 0x29A6,
SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2974,
@@ -1354,37 +1373,37 @@ enum OpcodeServer : uint16
SMSG_GARRISON_UPDATE_MISSION_CHEAT_RESULT = 0x29AE,
SMSG_GARRISON_UPGRADE_RESULT = 0x296B,
SMSG_GARRISON_USE_RECALL_PORTAL_RESULT = 0x297D,
- SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2586,
- SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2815,
- SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x275F,
+ SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2588,
+ SMSG_GENERATE_SSO_TOKEN_RESPONSE = 0x2818,
+ SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2762,
SMSG_GET_GARRISON_INFO_RESULT = 0x295E,
- SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x2797,
- SMSG_GET_REALM_HIDDEN_RESULT = 0x28BB,
- SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D3,
- SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27BF,
- SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2796,
- SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2792,
- SMSG_GET_TROPHY_LIST_RESPONSE = 0x27BE,
- SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27E8,
- SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27E9,
+ SMSG_GET_LANDING_PAGE_SHIPMENTS_RESPONSE = 0x279A,
+ SMSG_GET_REALM_HIDDEN_RESULT = 0x2897,
+ SMSG_GET_REMAINING_GAME_TIME_RESPONSE = 0x27D6,
+ SMSG_GET_SELECTED_TROPHY_ID_RESPONSE = 0x27C2,
+ SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x2799,
+ SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x2795,
+ SMSG_GET_TROPHY_LIST_RESPONSE = 0x27C1,
+ SMSG_GET_VAS_ACCOUNT_CHARACTER_LIST_RESULT = 0x27EB,
+ SMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST_RESULT = 0x27EC,
SMSG_GM_PLAYER_INFO = 0x3005,
SMSG_GM_REQUEST_PLAYER_INFO = 0x2FFB,
- SMSG_GM_TICKET_CASE_STATUS = 0x26A4,
- SMSG_GM_TICKET_SYSTEM_STATUS = 0x26A3,
- SMSG_GOD_MODE = 0x26FB,
+ SMSG_GM_TICKET_CASE_STATUS = 0x26A7,
+ SMSG_GM_TICKET_SYSTEM_STATUS = 0x26A6,
+ SMSG_GOD_MODE = 0x26FE,
SMSG_GOSSIP_COMPLETE = 0x2A97,
SMSG_GOSSIP_MESSAGE = 0x2A98,
- SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA7,
- SMSG_GOSSIP_POI = 0x278F,
+ SMSG_GOSSIP_OPTION_NPC_INTERACTION = 0x2AA8,
+ SMSG_GOSSIP_POI = 0x2792,
SMSG_GOSSIP_QUEST_UPDATE = 0x2A99,
- SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA6,
- SMSG_GROUP_ACTION_THROTTLED = 0x258E,
- SMSG_GROUP_AUTO_KICK = 0x278C,
- SMSG_GROUP_DECLINE = 0x2788,
- SMSG_GROUP_DESTROYED = 0x278B,
- SMSG_GROUP_NEW_LEADER = 0x262C,
- SMSG_GROUP_REQUEST_DECLINE = 0x2789,
- SMSG_GROUP_UNINVITE = 0x278A,
+ SMSG_GOSSIP_REFRESH_OPTIONS = 0x2AA7,
+ SMSG_GROUP_ACTION_THROTTLED = 0x2590,
+ SMSG_GROUP_AUTO_KICK = 0x278F,
+ SMSG_GROUP_DECLINE = 0x278B,
+ SMSG_GROUP_DESTROYED = 0x278E,
+ SMSG_GROUP_NEW_LEADER = 0x262E,
+ SMSG_GROUP_REQUEST_DECLINE = 0x278C,
+ SMSG_GROUP_UNINVITE = 0x278D,
SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C6,
SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C5,
SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C8,
@@ -1415,6 +1434,7 @@ enum OpcodeServer : uint16
SMSG_GUILD_EVENT_TAB_MODIFIED = 0x29F6,
SMSG_GUILD_EVENT_TAB_TEXT_CHANGED = 0x29F7,
SMSG_GUILD_FLAGGED_FOR_RENAME = 0x29DD,
+ SMSG_GUILD_HARDCORE_MEMBER_DEATH = 0x29BD,
SMSG_GUILD_INVITE = 0x29CB,
SMSG_GUILD_INVITE_DECLINED = 0x29E9,
SMSG_GUILD_INVITE_EXPIRED = 0x29EA,
@@ -1438,59 +1458,60 @@ enum OpcodeServer : uint16
SMSG_GUILD_ROSTER = 0x29BB,
SMSG_GUILD_ROSTER_UPDATE = 0x29BC,
SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9,
- SMSG_HEALTH_UPDATE = 0x26D1,
- SMSG_HIGHEST_THREAT_UPDATE = 0x26D9,
+ SMSG_HARDCORE_DEATH_ALERT = 0x289F,
+ SMSG_HEALTH_UPDATE = 0x26D4,
+ SMSG_HIGHEST_THREAT_UPDATE = 0x26DC,
SMSG_HOTFIX_CONNECT = 0x2911,
SMSG_HOTFIX_MESSAGE = 0x2910,
- SMSG_INITIALIZE_FACTIONS = 0x2722,
+ SMSG_INITIALIZE_FACTIONS = 0x2725,
SMSG_INITIAL_SETUP = 0x2580,
- SMSG_INIT_WORLD_STATES = 0x2744,
- SMSG_INSPECT_RESULT = 0x2630,
- SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27AA,
- SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27A9,
- SMSG_INSTANCE_ENCOUNTER_END = 0x27B2,
- SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27A8,
- SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B4,
- SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B3,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27AD,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27AC,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B1,
- SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B5,
- SMSG_INSTANCE_ENCOUNTER_START = 0x27AE,
- SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27AB,
- SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27B0,
- SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27AF,
- SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26F9,
- SMSG_INSTANCE_INFO = 0x2633,
- SMSG_INSTANCE_RESET = 0x2687,
- SMSG_INSTANCE_RESET_FAILED = 0x2688,
- SMSG_INSTANCE_SAVE_CREATED = 0x277A,
+ SMSG_INIT_WORLD_STATES = 0x2747,
+ SMSG_INSPECT_RESULT = 0x2632,
+ SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27AD,
+ SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27AC,
+ SMSG_INSTANCE_ENCOUNTER_END = 0x27B5,
+ SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27AB,
+ SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27B7,
+ SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27B6,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27B0,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27AF,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27B4,
+ SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27B8,
+ SMSG_INSTANCE_ENCOUNTER_START = 0x27B1,
+ SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27AE,
+ SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS = 0x27B3,
+ SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE = 0x27B2,
+ SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x26FC,
+ SMSG_INSTANCE_INFO = 0x2635,
+ SMSG_INSTANCE_RESET = 0x268A,
+ SMSG_INSTANCE_RESET_FAILED = 0x268B,
+ SMSG_INSTANCE_SAVE_CREATED = 0x277D,
SMSG_INTERRUPT_POWER_REGEN = 0x2C5B,
SMSG_INVALIDATE_PAGE_TEXT = 0x2918,
SMSG_INVALIDATE_PLAYER = 0x2FFF,
- SMSG_INVALID_PROMOTION_CODE = 0x2751,
+ SMSG_INVALID_PROMOTION_CODE = 0x2754,
SMSG_INVENTORY_CHANGE_FAILURE = 0x2DA5,
- SMSG_INVENTORY_FIXUP_COMPLETE = 0x280C,
- SMSG_INVENTORY_FULL_OVERFLOW = 0x281D,
- SMSG_ISLAND_AZERITE_GAIN = 0x275A,
- SMSG_ISLAND_COMPLETE = 0x275B,
+ SMSG_INVENTORY_FIXUP_COMPLETE = 0x280F,
+ SMSG_INVENTORY_FULL_OVERFLOW = 0x2820,
+ SMSG_ISLAND_AZERITE_GAIN = 0x275D,
+ SMSG_ISLAND_COMPLETE = 0x275E,
SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A84,
- SMSG_ITEM_CHANGED = 0x26EA,
- SMSG_ITEM_COOLDOWN = 0x27C0,
- SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2753,
- SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259D,
- SMSG_ITEM_INTERACTION_COMPLETE = 0x2868,
- SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259B,
- SMSG_ITEM_PUSH_RESULT = 0x2622,
- SMSG_ITEM_TIME_UPDATE = 0x2752,
- SMSG_KICK_REASON = 0x268A,
- SMSG_LATENCY_REPORT_PING = 0x287A,
+ SMSG_ITEM_CHANGED = 0x26ED,
+ SMSG_ITEM_COOLDOWN = 0x27C3,
+ SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2756,
+ SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x259F,
+ SMSG_ITEM_INTERACTION_COMPLETE = 0x2854,
+ SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x259D,
+ SMSG_ITEM_PUSH_RESULT = 0x2624,
+ SMSG_ITEM_TIME_UPDATE = 0x2755,
+ SMSG_KICK_REASON = 0x268D,
+ SMSG_LATENCY_REPORT_PING = 0x2865,
SMSG_LEARNED_SPELLS = 0x2C4F,
- SMSG_LEARN_PVP_TALENT_FAILED = 0x25D5,
- SMSG_LEARN_TALENT_FAILED = 0x25D4,
- SMSG_LEGACY_LOOT_RULES = 0x2822,
- SMSG_LEVEL_LINKING_RESULT = 0x284E,
- SMSG_LEVEL_UP_INFO = 0x26E8,
+ SMSG_LEARN_PVP_TALENT_FAILED = 0x25D7,
+ SMSG_LEARN_TALENT_FAILED = 0x25D6,
+ SMSG_LEGACY_LOOT_RULES = 0x2825,
+ SMSG_LEVEL_LINKING_RESULT = 0x283B,
+ SMSG_LEVEL_UP_INFO = 0x26EB,
SMSG_LFG_BOOT_PLAYER = 0x2A35,
SMSG_LFG_DISABLED = 0x2A33,
SMSG_LFG_EXPAND_SEARCH_PROMPT = 0x2A3B,
@@ -1518,89 +1539,91 @@ enum OpcodeServer : uint16
SMSG_LFG_SLOT_INVALID = 0x2A30,
SMSG_LFG_TELEPORT_DENIED = 0x2A32,
SMSG_LFG_UPDATE_STATUS = 0x2A24,
- SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x276C,
- SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x276B,
- SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2760,
- SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x276D,
- SMSG_LOAD_CUF_PROFILES = 0x25BD,
- SMSG_LOAD_EQUIPMENT_SET = 0x270D,
- SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x288D,
- SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x288E,
- SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x288F,
- SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x2890,
- SMSG_LOGIN_SET_TIME_SPEED = 0x270C,
- SMSG_LOGIN_VERIFY_WORLD = 0x2598,
- SMSG_LOGOUT_CANCEL_ACK = 0x2686,
- SMSG_LOGOUT_COMPLETE = 0x2685,
- SMSG_LOGOUT_RESPONSE = 0x2684,
- SMSG_LOG_XP_GAIN = 0x26E4,
- SMSG_LOOT_ALL_PASSED = 0x2620,
- SMSG_LOOT_LIST = 0x273F,
- SMSG_LOOT_MONEY_NOTIFY = 0x261B,
- SMSG_LOOT_RELEASE = 0x261A,
- SMSG_LOOT_RELEASE_ALL = 0x2619,
- SMSG_LOOT_REMOVED = 0x2615,
- SMSG_LOOT_RESPONSE = 0x2614,
- SMSG_LOOT_ROLL = 0x261D,
- SMSG_LOOT_ROLLS_COMPLETE = 0x261F,
- SMSG_LOOT_ROLL_WON = 0x2621,
- SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2671,
- SMSG_MAIL_COMMAND_RESULT = 0x263A,
- SMSG_MAIL_LIST_RESULT = 0x2754,
- SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2755,
+ SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x276F,
+ SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x276E,
+ SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x2763,
+ SMSG_LIVE_REGION_KEY_BINDINGS_COPY_RESULT = 0x2770,
+ SMSG_LOAD_CUF_PROFILES = 0x25BF,
+ SMSG_LOAD_EQUIPMENT_SET = 0x2710,
+ SMSG_LOBBY_MATCHMAKER_LOBBY_ACQUIRED_SERVER = 0x2876,
+ SMSG_LOBBY_MATCHMAKER_PARTY_INFO = 0x2877,
+ SMSG_LOBBY_MATCHMAKER_PARTY_INVITE_REJECTED = 0x2878,
+ SMSG_LOBBY_MATCHMAKER_RECEIVE_INVITE = 0x2879,
+ SMSG_LOGIN_SET_TIME_SPEED = 0x270F,
+ SMSG_LOGIN_VERIFY_WORLD = 0x259A,
+ SMSG_LOGOUT_CANCEL_ACK = 0x2689,
+ SMSG_LOGOUT_COMPLETE = 0x2688,
+ SMSG_LOGOUT_RESPONSE = 0x2687,
+ SMSG_LOG_XP_GAIN = 0x26E7,
+ SMSG_LOOT_ALL_PASSED = 0x2622,
+ SMSG_LOOT_LIST = 0x2742,
+ SMSG_LOOT_MONEY_NOTIFY = 0x261D,
+ SMSG_LOOT_RELEASE = 0x261C,
+ SMSG_LOOT_RELEASE_ALL = 0x261B,
+ SMSG_LOOT_REMOVED = 0x2617,
+ SMSG_LOOT_RESPONSE = 0x2616,
+ SMSG_LOOT_ROLL = 0x261F,
+ SMSG_LOOT_ROLLS_COMPLETE = 0x2621,
+ SMSG_LOOT_ROLL_WON = 0x2623,
+ SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2673,
+ SMSG_MAIL_COMMAND_RESULT = 0x263C,
+ SMSG_MAIL_LIST_RESULT = 0x2757,
+ SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2758,
SMSG_MAP_OBJECTIVES_INIT = 0x294C,
- SMSG_MAP_OBJ_EVENTS = 0x25C7,
- SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x261E,
- SMSG_MEETING_STONE_FAILED = 0x2891,
+ SMSG_MAP_OBJ_EVENTS = 0x25C9,
+ SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2620,
+ SMSG_MEETING_STONE_FAILED = 0x287A,
SMSG_MESSAGE_BOX = 0x2576,
- SMSG_MINIMAP_PING = 0x26CE,
+ SMSG_MINIMAP_PING = 0x26D1,
SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14,
SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13,
- SMSG_MISSILE_CANCEL = 0x25C8,
- SMSG_MODIFY_COOLDOWN = 0x2762,
+ SMSG_MISSILE_CANCEL = 0x25CA,
+ SMSG_MODIFY_COOLDOWN = 0x2765,
SMSG_MOUNT_RESULT = 0x257B,
- SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x283E,
- SMSG_MOVE_ADD_IMPULSE = 0x2E32,
- SMSG_MOVE_APPLY_INERTIA = 0x2E2E,
- SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E15,
- SMSG_MOVE_DISABLE_COLLISION = 0x2E11,
+ SMSG_MOVEMENT_ENFORCEMENT_ALERT = 0x282B,
+ SMSG_MOVE_ADD_IMPULSE = 0x2E34,
+ SMSG_MOVE_APPLY_INERTIA = 0x2E30,
+ SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2E17,
+ SMSG_MOVE_DISABLE_COLLISION = 0x2E13,
SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x2DFD,
- SMSG_MOVE_DISABLE_GRAVITY = 0x2E0D,
- SMSG_MOVE_DISABLE_INERTIA = 0x2E0F,
- SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2E0C,
- SMSG_MOVE_ENABLE_COLLISION = 0x2E12,
+ SMSG_MOVE_DISABLE_FULL_SPEED_TURNING = 0x2E47,
+ SMSG_MOVE_DISABLE_GRAVITY = 0x2E0F,
+ SMSG_MOVE_DISABLE_INERTIA = 0x2E11,
+ SMSG_MOVE_DISABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2E0E,
+ SMSG_MOVE_ENABLE_COLLISION = 0x2E14,
SMSG_MOVE_ENABLE_DOUBLE_JUMP = 0x2DFC,
- SMSG_MOVE_ENABLE_GRAVITY = 0x2E0E,
- SMSG_MOVE_ENABLE_INERTIA = 0x2E10,
- SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2E0B,
+ SMSG_MOVE_ENABLE_FULL_SPEED_TURNING = 0x2E46,
+ SMSG_MOVE_ENABLE_GRAVITY = 0x2E10,
+ SMSG_MOVE_ENABLE_INERTIA = 0x2E12,
+ SMSG_MOVE_ENABLE_TRANSITION_BETWEEN_SWIM_AND_FLY = 0x2E0D,
SMSG_MOVE_KNOCK_BACK = 0x2E03,
- SMSG_MOVE_REMOVE_INERTIA = 0x2E2F,
- SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x2E16,
+ SMSG_MOVE_REMOVE_INERTIA = 0x2E31,
+ SMSG_MOVE_REMOVE_MOVEMENT_FORCE = 0x2E18,
SMSG_MOVE_ROOT = 0x2DF9,
SMSG_MOVE_SET_ACTIVE_MOVER = 0x2DD5,
- SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x2E3B,
- SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x2E36,
- SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x2E3C,
- SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x2E39,
- SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x2E3A,
- SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x2E42,
- SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x2E38,
- SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x2E37,
- SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x2E41,
- SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x2E3D,
- SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x2E3E,
- SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x2E40,
- SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x2E3F,
- SMSG_MOVE_SET_CAN_ADV_FLY = 0x2E34,
+ SMSG_MOVE_SET_ADV_FLYING_ADD_IMPULSE_MAX_SPEED = 0x2E3D,
+ SMSG_MOVE_SET_ADV_FLYING_AIR_FRICTION = 0x2E38,
+ SMSG_MOVE_SET_ADV_FLYING_BANKING_RATE = 0x2E3E,
+ SMSG_MOVE_SET_ADV_FLYING_DOUBLE_JUMP_VEL_MOD = 0x2E3B,
+ SMSG_MOVE_SET_ADV_FLYING_GLIDE_START_MIN_HEIGHT = 0x2E3C,
+ SMSG_MOVE_SET_ADV_FLYING_LAUNCH_SPEED_COEFFICIENT = 0x2E44,
+ SMSG_MOVE_SET_ADV_FLYING_LIFT_COEFFICIENT = 0x2E3A,
+ SMSG_MOVE_SET_ADV_FLYING_MAX_VEL = 0x2E39,
+ SMSG_MOVE_SET_ADV_FLYING_OVER_MAX_DECELERATION = 0x2E43,
+ SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_DOWN = 0x2E3F,
+ SMSG_MOVE_SET_ADV_FLYING_PITCHING_RATE_UP = 0x2E40,
+ SMSG_MOVE_SET_ADV_FLYING_SURFACE_FRICTION = 0x2E42,
+ SMSG_MOVE_SET_ADV_FLYING_TURN_VELOCITY_THRESHOLD = 0x2E41,
+ SMSG_MOVE_SET_CAN_ADV_FLY = 0x2E36,
SMSG_MOVE_SET_CAN_FLY = 0x2E05,
- SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x2E07,
- SMSG_MOVE_SET_COLLISION_HEIGHT = 0x2E13,
- SMSG_MOVE_SET_COMPOUND_STATE = 0x2E17,
+ SMSG_MOVE_SET_CAN_TURN_WHILE_FALLING = 0x2E09,
+ SMSG_MOVE_SET_COLLISION_HEIGHT = 0x2E15,
+ SMSG_MOVE_SET_COMPOUND_STATE = 0x2E19,
SMSG_MOVE_SET_FEATHER_FALL = 0x2DFF,
SMSG_MOVE_SET_FLIGHT_BACK_SPEED = 0x2DF5,
SMSG_MOVE_SET_FLIGHT_SPEED = 0x2DF4,
SMSG_MOVE_SET_HOVERING = 0x2E01,
- SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x2E09,
+ SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x2E0B,
SMSG_MOVE_SET_LAND_WALK = 0x2DFE,
SMSG_MOVE_SET_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x2DE6,
SMSG_MOVE_SET_NORMAL_FALL = 0x2E00,
@@ -1610,47 +1633,47 @@ enum OpcodeServer : uint16
SMSG_MOVE_SET_SWIM_BACK_SPEED = 0x2DF3,
SMSG_MOVE_SET_SWIM_SPEED = 0x2DF2,
SMSG_MOVE_SET_TURN_RATE = 0x2DF7,
- SMSG_MOVE_SET_VEHICLE_REC_ID = 0x2E14,
+ SMSG_MOVE_SET_VEHICLE_REC_ID = 0x2E16,
SMSG_MOVE_SET_WALK_SPEED = 0x2DF6,
SMSG_MOVE_SET_WATER_WALK = 0x2DFB,
- SMSG_MOVE_SKIP_TIME = 0x2E18,
- SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x2E1D,
- SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x2E1B,
- SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x2E1E,
- SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x2E1C,
- SMSG_MOVE_SPLINE_ROOT = 0x2E19,
- SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x2E1F,
+ SMSG_MOVE_SKIP_TIME = 0x2E1A,
+ SMSG_MOVE_SPLINE_DISABLE_COLLISION = 0x2E1F,
+ SMSG_MOVE_SPLINE_DISABLE_GRAVITY = 0x2E1D,
+ SMSG_MOVE_SPLINE_ENABLE_COLLISION = 0x2E20,
+ SMSG_MOVE_SPLINE_ENABLE_GRAVITY = 0x2E1E,
+ SMSG_MOVE_SPLINE_ROOT = 0x2E1B,
+ SMSG_MOVE_SPLINE_SET_FEATHER_FALL = 0x2E21,
SMSG_MOVE_SPLINE_SET_FLIGHT_BACK_SPEED = 0x2DEC,
SMSG_MOVE_SPLINE_SET_FLIGHT_SPEED = 0x2DEB,
- SMSG_MOVE_SPLINE_SET_FLYING = 0x2E29,
- SMSG_MOVE_SPLINE_SET_HOVER = 0x2E21,
- SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x2E24,
- SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x2E20,
+ SMSG_MOVE_SPLINE_SET_FLYING = 0x2E2B,
+ SMSG_MOVE_SPLINE_SET_HOVER = 0x2E23,
+ SMSG_MOVE_SPLINE_SET_LAND_WALK = 0x2E26,
+ SMSG_MOVE_SPLINE_SET_NORMAL_FALL = 0x2E22,
SMSG_MOVE_SPLINE_SET_PITCH_RATE = 0x2DEF,
SMSG_MOVE_SPLINE_SET_RUN_BACK_SPEED = 0x2DE8,
- SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x2E27,
+ SMSG_MOVE_SPLINE_SET_RUN_MODE = 0x2E29,
SMSG_MOVE_SPLINE_SET_RUN_SPEED = 0x2DE7,
SMSG_MOVE_SPLINE_SET_SWIM_BACK_SPEED = 0x2DEA,
SMSG_MOVE_SPLINE_SET_SWIM_SPEED = 0x2DE9,
SMSG_MOVE_SPLINE_SET_TURN_RATE = 0x2DEE,
- SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x2E28,
+ SMSG_MOVE_SPLINE_SET_WALK_MODE = 0x2E2A,
SMSG_MOVE_SPLINE_SET_WALK_SPEED = 0x2DED,
- SMSG_MOVE_SPLINE_SET_WATER_WALK = 0x2E23,
- SMSG_MOVE_SPLINE_START_SWIM = 0x2E25,
- SMSG_MOVE_SPLINE_STOP_SWIM = 0x2E26,
- SMSG_MOVE_SPLINE_UNROOT = 0x2E1A,
- SMSG_MOVE_SPLINE_UNSET_FLYING = 0x2E2A,
- SMSG_MOVE_SPLINE_UNSET_HOVER = 0x2E22,
+ SMSG_MOVE_SPLINE_SET_WATER_WALK = 0x2E25,
+ SMSG_MOVE_SPLINE_START_SWIM = 0x2E27,
+ SMSG_MOVE_SPLINE_STOP_SWIM = 0x2E28,
+ SMSG_MOVE_SPLINE_UNROOT = 0x2E1C,
+ SMSG_MOVE_SPLINE_UNSET_FLYING = 0x2E2C,
+ SMSG_MOVE_SPLINE_UNSET_HOVER = 0x2E24,
SMSG_MOVE_TELEPORT = 0x2E04,
SMSG_MOVE_UNROOT = 0x2DFA,
- SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x2E35,
+ SMSG_MOVE_UNSET_CAN_ADV_FLY = 0x2E37,
SMSG_MOVE_UNSET_CAN_FLY = 0x2E06,
- SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x2E08,
+ SMSG_MOVE_UNSET_CAN_TURN_WHILE_FALLING = 0x2E0A,
SMSG_MOVE_UNSET_HOVERING = 0x2E02,
- SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x2E0A,
+ SMSG_MOVE_UNSET_IGNORE_MOVEMENT_FORCES = 0x2E0C,
SMSG_MOVE_UPDATE = 0x2DE0,
- SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x2E33,
- SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x2E30,
+ SMSG_MOVE_UPDATE_ADD_IMPULSE = 0x2E35,
+ SMSG_MOVE_UPDATE_APPLY_INERTIA = 0x2E32,
SMSG_MOVE_UPDATE_APPLY_MOVEMENT_FORCE = 0x2DE4,
SMSG_MOVE_UPDATE_COLLISION_HEIGHT = 0x2DDF,
SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x2DDC,
@@ -1658,7 +1681,7 @@ enum OpcodeServer : uint16
SMSG_MOVE_UPDATE_KNOCK_BACK = 0x2DE2,
SMSG_MOVE_UPDATE_MOD_MOVEMENT_FORCE_MAGNITUDE = 0x2DE3,
SMSG_MOVE_UPDATE_PITCH_RATE = 0x2DDE,
- SMSG_MOVE_UPDATE_REMOVE_INERTIA = 0x2E31,
+ SMSG_MOVE_UPDATE_REMOVE_INERTIA = 0x2E33,
SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x2DE5,
SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x2DD7,
SMSG_MOVE_UPDATE_RUN_SPEED = 0x2DD6,
@@ -1667,121 +1690,121 @@ 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 = 0x27D8,
- SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27D7,
- SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x260B,
- SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260D,
- SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x2611,
- SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260C,
- SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DC,
- SMSG_NEW_DATA_BUILD = 0x28BA,
- SMSG_NEW_TAXI_PATH = 0x267F,
- SMSG_NEW_WORLD = 0x2595,
+ SMSG_MULTI_FLOOR_LEAVE_FLOOR = 0x27DB,
+ SMSG_MULTI_FLOOR_NEW_FLOOR = 0x27DA,
+ SMSG_MYTHIC_PLUS_ALL_MAP_STATS = 0x260D,
+ SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = 0x260F,
+ SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = 0x2613,
+ SMSG_MYTHIC_PLUS_SEASON_DATA = 0x260E,
+ SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25DE,
+ SMSG_NEW_DATA_BUILD = 0x2896,
+ SMSG_NEW_TAXI_PATH = 0x2682,
+ SMSG_NEW_WORLD = 0x2597,
SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C45,
- SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26AB,
- SMSG_NOTIFY_MONEY = 0x259A,
- SMSG_NOTIFY_RECEIVED_MAIL = 0x263B,
- SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2888,
- SMSG_OFFER_PETITION_ERROR = 0x26B6,
- SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E5,
+ SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26AE,
+ SMSG_NOTIFY_MONEY = 0x259C,
+ SMSG_NOTIFY_RECEIVED_MAIL = 0x263D,
+ SMSG_NPC_INTERACTION_OPEN_RESULT = 0x2872,
+ SMSG_OFFER_PETITION_ERROR = 0x26B9,
+ SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x26E8,
SMSG_ON_MONSTER_MOVE = 0x2DD4,
- SMSG_OPEN_ARTIFACT_FORGE = 0x279B,
+ SMSG_OPEN_ARTIFACT_FORGE = 0x279E,
SMSG_OPEN_CONTAINER = 0x2DA6,
SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31,
- SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2793,
- SMSG_OVERRIDE_LIGHT = 0x26BB,
- SMSG_PAGE_TEXT = 0x2718,
- SMSG_PARTY_COMMAND_RESULT = 0x278D,
- SMSG_PARTY_INVITE = 0x25BE,
- SMSG_PARTY_KILL_LOG = 0x2758,
- SMSG_PARTY_MEMBER_FULL_STATE = 0x2757,
- SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2756,
- SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x286E,
- SMSG_PARTY_UPDATE = 0x25F4,
- SMSG_PAST_TIME_EVENTS = 0x25C3,
- SMSG_PAUSE_MIRROR_TIMER = 0x270F,
- SMSG_PENDING_RAID_LOCK = 0x26F7,
- SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x2884,
- SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x2880,
- SMSG_PERKS_PROGRAM_DISABLED = 0x2885,
- SMSG_PERKS_PROGRAM_RESULT = 0x2881,
- SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x287F,
- SMSG_PETITION_ALREADY_SIGNED = 0x25A0,
+ SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x2796,
+ SMSG_OVERRIDE_LIGHT = 0x26BE,
+ SMSG_PAGE_TEXT = 0x271B,
+ SMSG_PARTY_COMMAND_RESULT = 0x2790,
+ SMSG_PARTY_INVITE = 0x25C0,
+ SMSG_PARTY_KILL_LOG = 0x275B,
+ SMSG_PARTY_MEMBER_FULL_STATE = 0x275A,
+ SMSG_PARTY_MEMBER_PARTIAL_STATE = 0x2759,
+ SMSG_PARTY_NOTIFY_LFG_LEADER_CHANGE = 0x285A,
+ SMSG_PARTY_UPDATE = 0x25F6,
+ SMSG_PAST_TIME_EVENTS = 0x25C5,
+ SMSG_PAUSE_MIRROR_TIMER = 0x2712,
+ SMSG_PENDING_RAID_LOCK = 0x26FA,
+ SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = 0x286F,
+ SMSG_PERKS_PROGRAM_ACTIVITY_UPDATE = 0x286B,
+ SMSG_PERKS_PROGRAM_DISABLED = 0x2870,
+ SMSG_PERKS_PROGRAM_RESULT = 0x286C,
+ SMSG_PERKS_PROGRAM_VENDOR_UPDATE = 0x286A,
+ SMSG_PETITION_ALREADY_SIGNED = 0x25A2,
SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FB,
- SMSG_PETITION_SHOW_LIST = 0x26BE,
- SMSG_PETITION_SHOW_SIGNATURES = 0x26BF,
- SMSG_PETITION_SIGN_RESULTS = 0x274A,
- SMSG_PET_ACTION_FEEDBACK = 0x2747,
- SMSG_PET_ACTION_SOUND = 0x26A1,
- SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2602,
- SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2676,
- 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 = 0x2638,
- SMSG_PET_BATTLE_QUEUE_STATUS = 0x2639,
- SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x25FF,
- SMSG_PET_BATTLE_REQUEST_FAILED = 0x25F9,
- SMSG_PET_BATTLE_ROUND_RESULT = 0x25FE,
- SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EC,
+ SMSG_PETITION_SHOW_LIST = 0x26C1,
+ SMSG_PETITION_SHOW_SIGNATURES = 0x26C2,
+ SMSG_PETITION_SIGN_RESULTS = 0x274D,
+ SMSG_PET_ACTION_FEEDBACK = 0x274A,
+ SMSG_PET_ACTION_SOUND = 0x26A4,
+ SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2604,
+ SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x2678,
+ SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x25FD,
+ SMSG_PET_BATTLE_FINAL_ROUND = 0x2602,
+ SMSG_PET_BATTLE_FINISHED = 0x2603,
+ SMSG_PET_BATTLE_FIRST_ROUND = 0x25FF,
+ SMSG_PET_BATTLE_INITIAL_UPDATE = 0x25FE,
+ SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2605,
+ SMSG_PET_BATTLE_PVP_CHALLENGE = 0x25FC,
+ SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x263A,
+ SMSG_PET_BATTLE_QUEUE_STATUS = 0x263B,
+ SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2601,
+ SMSG_PET_BATTLE_REQUEST_FAILED = 0x25FB,
+ SMSG_PET_BATTLE_ROUND_RESULT = 0x2600,
+ SMSG_PET_BATTLE_SLOT_UPDATES = 0x25EE,
SMSG_PET_CAST_FAILED = 0x2C5A,
SMSG_PET_CLEAR_SPELLS = 0x2C23,
- SMSG_PET_DISMISS_SOUND = 0x26A2,
- SMSG_PET_GOD_MODE = 0x267C,
- SMSG_PET_GUIDS = 0x2703,
+ SMSG_PET_DISMISS_SOUND = 0x26A5,
+ SMSG_PET_GOD_MODE = 0x267F,
+ SMSG_PET_GUIDS = 0x2706,
SMSG_PET_LEARNED_SPELLS = 0x2C51,
- SMSG_PET_MODE = 0x2589,
- SMSG_PET_NAME_INVALID = 0x26C3,
- SMSG_PET_NEWLY_TAMED = 0x2588,
+ SMSG_PET_MODE = 0x258B,
+ SMSG_PET_NAME_INVALID = 0x26C6,
+ SMSG_PET_NEWLY_TAMED = 0x258A,
SMSG_PET_SPELLS_MESSAGE = 0x2C24,
- SMSG_PET_STABLE_RESULT = 0x2594,
- SMSG_PET_TAME_FAILURE = 0x26B3,
+ SMSG_PET_STABLE_RESULT = 0x2596,
+ SMSG_PET_TAME_FAILURE = 0x26B6,
SMSG_PET_UNLEARNED_SPELLS = 0x2C52,
SMSG_PHASE_SHIFT_CHANGE = 0x2578,
- SMSG_PLAYED_TIME = 0x26D5,
- 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,
+ SMSG_PLAYED_TIME = 0x26D8,
+ SMSG_PLAYER_ACKOWLEDGE_ARROW_CALLOUT = 0x3024,
+ SMSG_PLAYER_AZERITE_ITEM_EQUIPPED_STATUS_CHANGED = 0x3016,
+ SMSG_PLAYER_AZERITE_ITEM_GAINS = 0x3015,
+ SMSG_PLAYER_BONUS_ROLL_FAILED = 0x3018,
SMSG_PLAYER_BOUND = 0x2FF8,
SMSG_PLAYER_CHOICE_CLEAR = 0x2FFE,
SMSG_PLAYER_CHOICE_DISPLAY_ERROR = 0x2FFD,
SMSG_PLAYER_CONDITION_RESULT = 0x300A,
- SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x3021,
+ SMSG_PLAYER_HIDE_ARROW_CALLOUT = 0x3023,
SMSG_PLAYER_IS_ADVENTURE_MAP_POI_VALID = 0x3009,
SMSG_PLAYER_OPEN_SUBSCRIPTION_INTERSTITIAL = 0x300E,
SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29FA,
- SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x3023,
- SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x3020,
- SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x301E,
- SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x301F,
- SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x3019,
+ SMSG_PLAYER_SAVE_PERSONAL_EMBLEM = 0x3025,
+ SMSG_PLAYER_SHOW_ARROW_CALLOUT = 0x3022,
+ SMSG_PLAYER_SHOW_GENERIC_WIDGET_DISPLAY = 0x3020,
+ SMSG_PLAYER_SHOW_PARTY_POSE_UI = 0x3021,
+ SMSG_PLAYER_SHOW_UI_EVENT_TOAST = 0x301B,
SMSG_PLAYER_SKINNED = 0x3006,
SMSG_PLAYER_TUTORIAL_HIGHLIGHT_SPELL = 0x300D,
SMSG_PLAYER_TUTORIAL_UNHIGHLIGHT_SPELL = 0x300C,
- SMSG_PLAY_MUSIC = 0x2767,
- SMSG_PLAY_OBJECT_SOUND = 0x2768,
- SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x272F,
+ SMSG_PLAY_MUSIC = 0x276A,
+ SMSG_PLAY_OBJECT_SOUND = 0x276B,
+ SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2732,
SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C49,
- SMSG_PLAY_SCENE = 0x2635,
- SMSG_PLAY_SOUND = 0x2766,
- SMSG_PLAY_SPEAKERBOT_SOUND = 0x2769,
+ SMSG_PLAY_SCENE = 0x2637,
+ SMSG_PLAY_SOUND = 0x2769,
+ SMSG_PLAY_SPEAKERBOT_SOUND = 0x276C,
SMSG_PLAY_SPELL_VISUAL = 0x2C47,
SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C4B,
- SMSG_PLAY_TIME_WARNING = 0x26FD,
+ SMSG_PLAY_TIME_WARNING = 0x2700,
SMSG_PONG = 0x304E,
- SMSG_POWER_UPDATE = 0x26D2,
+ SMSG_POWER_UPDATE = 0x26D5,
SMSG_PRELOAD_CHILD_MAP = 0x2579,
- SMSG_PRELOAD_WORLD = 0x2596,
- SMSG_PREPOPULATE_NAME_CACHE = 0x2841,
- SMSG_PRE_RESSURECT = 0x2765,
- SMSG_PRINT_NOTIFICATION = 0x25CB,
- SMSG_PROC_RESIST = 0x2759,
- SMSG_PROFESSION_GOSSIP = 0x27F8,
+ SMSG_PRELOAD_WORLD = 0x2598,
+ SMSG_PREPOPULATE_NAME_CACHE = 0x282E,
+ SMSG_PRE_RESSURECT = 0x2768,
+ SMSG_PRINT_NOTIFICATION = 0x25CD,
+ SMSG_PROC_RESIST = 0x275C,
+ SMSG_PROFESSION_GOSSIP = 0x27FB,
SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C53,
SMSG_PVP_CREDIT = 0x2946,
SMSG_PVP_MATCH_COMPLETE = 0x2951,
@@ -1790,7 +1813,7 @@ enum OpcodeServer : uint16
SMSG_PVP_MATCH_START = 0x294F,
SMSG_PVP_MATCH_STATISTICS = 0x2932,
SMSG_PVP_OPTIONS_ENABLED = 0x2935,
- SMSG_PVP_TIER_RECORD = 0x287B,
+ SMSG_PVP_TIER_RECORD = 0x2866,
SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x291A,
SMSG_QUERY_CREATURE_RESPONSE = 0x2914,
SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2915,
@@ -1802,11 +1825,11 @@ enum OpcodeServer : uint16
SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2917,
SMSG_QUERY_PETITION_RESPONSE = 0x291B,
SMSG_QUERY_PET_NAME_RESPONSE = 0x2919,
- SMSG_QUERY_PLAYER_NAMES_RESPONSE = 0x301B,
+ SMSG_QUERY_PLAYER_NAMES_RESPONSE = 0x301D,
SMSG_QUERY_PLAYER_NAME_BY_COMMUNITY_ID_RESPONSE = 0x3002,
SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A96,
SMSG_QUERY_REALM_GUILD_MASTER_INFO_RESPONSE = 0x29E7,
- SMSG_QUERY_TIME_RESPONSE = 0x26E3,
+ SMSG_QUERY_TIME_RESPONSE = 0x26E6,
SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81,
SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8F,
SMSG_QUEST_FORCE_REMOVED = 0x2A9C,
@@ -1825,141 +1848,144 @@ 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 = 0x2864,
- SMSG_QUEST_SESSION_READY_CHECK = 0x2852,
- SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2853,
- SMSG_QUEST_SESSION_RESULT = 0x2851,
+ SMSG_QUEST_SESSION_INFO_RESPONSE = 0x2850,
+ SMSG_QUEST_SESSION_READY_CHECK = 0x283F,
+ SMSG_QUEST_SESSION_READY_CHECK_RESPONSE = 0x2840,
+ SMSG_QUEST_SESSION_RESULT = 0x283E,
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 = 0x280B,
- SMSG_RAF_ACCOUNT_INFO = 0x284F,
- SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x2860,
- SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x28B7,
- SMSG_RAID_DIFFICULTY_SET = 0x27A5,
- SMSG_RAID_GROUP_ONLY = 0x27A7,
+ SMSG_QUEUE_SUMMARY_UPDATE = 0x280E,
+ SMSG_RAF_ACCOUNT_INFO = 0x283C,
+ SMSG_RAF_ACTIVITY_STATE_CHANGED = 0x284C,
+ SMSG_RAF_DEBUG_FRIEND_MONTHS = 0x2893,
+ SMSG_RAID_DIFFICULTY_SET = 0x27A8,
+ SMSG_RAID_GROUP_ONLY = 0x27AA,
SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4,
- SMSG_RAID_MARKERS_CHANGED = 0x25A1,
- SMSG_RANDOM_ROLL = 0x262F,
+ SMSG_RAID_MARKERS_CHANGED = 0x25A3,
+ SMSG_RANDOM_ROLL = 0x2631,
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 = 0x27A1,
- SMSG_READ_ITEM_RESULT_OK = 0x2798,
+ SMSG_READY_CHECK_COMPLETED = 0x25FA,
+ SMSG_READY_CHECK_RESPONSE = 0x25F9,
+ SMSG_READY_CHECK_STARTED = 0x25F8,
+ SMSG_READ_ITEM_RESULT_FAILED = 0x27A4,
+ SMSG_READ_ITEM_RESULT_OK = 0x279B,
SMSG_REALM_QUERY_RESPONSE = 0x2913,
- SMSG_REATTACH_RESURRECT = 0x2749,
- SMSG_RECEIVE_PING_UNIT = 0x25A2,
- SMSG_RECEIVE_PING_WORLD_POINT = 0x25A3,
- SMSG_RECRAFT_ITEM_RESULT = 0x28A6,
- SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26C0,
- SMSG_REFRESH_COMPONENT = 0x2650,
+ SMSG_REATTACH_RESURRECT = 0x274C,
+ SMSG_RECEIVE_PING_UNIT = 0x25A4,
+ SMSG_RECEIVE_PING_WORLD_POINT = 0x25A5,
+ SMSG_RECRAFT_ITEM_RESULT = 0x2889,
+ SMSG_RECRUIT_A_FRIEND_FAILURE = 0x26C3,
+ SMSG_REFRESH_COMPONENT = 0x2652,
SMSG_REFRESH_SPELL_HISTORY = 0x2C2B,
- SMSG_REMOVE_ITEM_PASSIVE = 0x25AC,
+ SMSG_REGIONWIDE_CHARACTER_MAIL_DATA = 0x2586,
+ SMSG_REGIONWIDE_CHARACTER_RESTRICTIONS_DATA = 0x2585,
+ SMSG_REMOVE_ITEM_PASSIVE = 0x25AE,
SMSG_REMOVE_SPELL_FROM_ACTION_BAR = 0x2C54,
- SMSG_REPLACE_TROPHY_RESPONSE = 0x27BD,
+ SMSG_REPLACE_TROPHY_RESPONSE = 0x27C0,
SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x3001,
- SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x258F,
+ SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x2591,
SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x2936,
SMSG_REQUEST_SCHEDULED_PVP_INFO_RESPONSE = 0x2937,
SMSG_RESET_COMPRESSION_CONTEXT = 0x304F,
- SMSG_RESET_FAILED_NOTIFY = 0x26B7,
- SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x28AC,
+ SMSG_RESET_FAILED_NOTIFY = 0x26BA,
+ SMSG_RESET_LAST_LOADED_CONFIG_CVARS = 0x2890,
SMSG_RESET_QUEST_POI = 0x2AA0,
SMSG_RESET_RANGED_COMBAT_TIMER = 0x2945,
SMSG_RESET_WEEKLY_CURRENCY = 0x2575,
- SMSG_RESPEC_WIPE_CONFIRM = 0x2612,
+ SMSG_RESPEC_WIPE_CONFIRM = 0x2614,
SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572,
- SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x2882,
- SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x2883,
+ SMSG_RESPONSE_PERK_PENDING_REWARDS = 0x286D,
+ SMSG_RESPONSE_PERK_RECENT_PURCHASES = 0x286E,
SMSG_RESTART_GLOBAL_COOLDOWN = 0x2C63,
- SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25BA,
+ SMSG_RESTRICTED_ACCOUNT_WARNING = 0x25BC,
SMSG_RESUME_CAST = 0x2C3D,
SMSG_RESUME_CAST_BAR = 0x2C40,
SMSG_RESUME_COMMS = 0x304B,
- SMSG_RESUME_TOKEN = 0x25AA,
+ SMSG_RESUME_TOKEN = 0x25AC,
SMSG_RESURRECT_REQUEST = 0x257E,
SMSG_RESYNC_RUNES = 0x2C61,
- SMSG_RETURNING_PLAYER_PROMPT = 0x27A0,
- SMSG_RETURN_APPLICANT_LIST = 0x2845,
- SMSG_RETURN_RECRUITING_CLUBS = 0x2844,
- SMSG_ROLE_CHANGED_INFORM = 0x258B,
+ SMSG_RETURNING_PLAYER_PROMPT = 0x27A3,
+ SMSG_RETURN_APPLICANT_LIST = 0x2832,
+ SMSG_RETURN_RECRUITING_CLUBS = 0x2831,
+ SMSG_ROLE_CHANGED_INFORM = 0x258D,
SMSG_ROLE_CHOSEN = 0x2A39,
- SMSG_ROLE_POLL_INFORM = 0x258C,
- SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27F7,
- SMSG_RUNE_REGEN_DEBUG = 0x25B7,
- SMSG_SCENARIO_COMPLETED = 0x27E5,
- SMSG_SCENARIO_POIS = 0x2632,
- SMSG_SCENARIO_PROGRESS_UPDATE = 0x262B,
- SMSG_SCENARIO_SHOW_CRITERIA = 0x27FB,
- SMSG_SCENARIO_STATE = 0x262A,
- SMSG_SCENARIO_UI_UPDATE = 0x27FA,
- SMSG_SCENARIO_VACATE = 0x27A2,
- SMSG_SCENE_OBJECT_EVENT = 0x25E2,
- SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E7,
- SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25E8,
- SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25E4,
- SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25E3,
- SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E6,
- SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E5,
+ SMSG_ROLE_POLL_INFORM = 0x258E,
+ SMSG_RUNEFORGE_LEGENDARY_CRAFTING_OPEN_NPC = 0x27FA,
+ SMSG_RUNE_REGEN_DEBUG = 0x25B9,
+ SMSG_SCENARIO_COMPLETED = 0x27E8,
+ SMSG_SCENARIO_POIS = 0x2634,
+ SMSG_SCENARIO_PROGRESS_UPDATE = 0x262D,
+ SMSG_SCENARIO_SHOW_CRITERIA = 0x27FE,
+ SMSG_SCENARIO_STATE = 0x262C,
+ SMSG_SCENARIO_UI_UPDATE = 0x27FD,
+ SMSG_SCENARIO_VACATE = 0x27A5,
+ SMSG_SCENE_OBJECT_EVENT = 0x25E4,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25E9,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25EA,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25E6,
+ SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25E5,
+ SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25E8,
+ SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25E7,
SMSG_SCRIPT_CAST = 0x2C58,
- SMSG_SEASON_INFO = 0x25C2,
- SMSG_SELL_RESPONSE = 0x26C4,
- SMSG_SEND_ITEM_PASSIVES = 0x25AD,
+ SMSG_SEASON_INFO = 0x25C4,
+ SMSG_SELL_RESPONSE = 0x26C7,
+ SMSG_SEND_ITEM_PASSIVES = 0x25AF,
SMSG_SEND_KNOWN_SPELLS = 0x2C29,
- SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262D,
- SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x262E,
+ SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x262F,
+ SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x2630,
SMSG_SEND_SPELL_CHARGES = 0x2C2C,
SMSG_SEND_SPELL_HISTORY = 0x2C2A,
SMSG_SEND_UNLEARN_SPELLS = 0x2C2D,
- SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264D,
- SMSG_SERVER_TIME = 0x2683,
- SMSG_SERVER_TIME_OFFSET = 0x2713,
+ SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x264F,
+ SMSG_SERVER_TIME = 0x2686,
+ SMSG_SERVER_TIME_OFFSET = 0x2716,
SMSG_SETUP_COMBAT_LOG_FILE_FLUSH = 0x2C1F,
SMSG_SETUP_CURRENCY = 0x2573,
- SMSG_SET_AI_ANIM_KIT = 0x272E,
- SMSG_SET_ANIM_TIER = 0x2732,
- SMSG_SET_CHR_UPGRADE_TIER = 0x25DF,
+ SMSG_SET_AI_ANIM_KIT = 0x2731,
+ SMSG_SET_ANIM_TIER = 0x2735,
+ SMSG_SET_CHR_UPGRADE_TIER = 0x25E1,
SMSG_SET_CURRENCY = 0x2574,
SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E,
- SMSG_SET_DUNGEON_DIFFICULTY = 0x26A5,
- SMSG_SET_FACTION_AT_WAR = 0x26FF,
- SMSG_SET_FACTION_NOT_VISIBLE = 0x2729,
- SMSG_SET_FACTION_STANDING = 0x272A,
- SMSG_SET_FACTION_VISIBLE = 0x2728,
+ SMSG_SET_DUNGEON_DIFFICULTY = 0x26A8,
+ SMSG_SET_FACTION_AT_WAR = 0x2702,
+ SMSG_SET_FACTION_NOT_VISIBLE = 0x272C,
+ SMSG_SET_FACTION_STANDING = 0x272D,
+ SMSG_SET_FACTION_VISIBLE = 0x272B,
SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C38,
- SMSG_SET_FORCED_REACTIONS = 0x271C,
- SMSG_SET_ITEM_PURCHASE_DATA = 0x259C,
- SMSG_SET_LOOT_METHOD_FAILED = 0x27C9,
- SMSG_SET_MAX_WEEKLY_QUANTITY = 0x259F,
- SMSG_SET_MELEE_ANIM_KIT = 0x2731,
- SMSG_SET_MOVEMENT_ANIM_KIT = 0x2730,
+ SMSG_SET_FORCED_REACTIONS = 0x271F,
+ SMSG_SET_ITEM_PURCHASE_DATA = 0x259E,
+ SMSG_SET_LOOT_METHOD_FAILED = 0x27CC,
+ SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25A1,
+ SMSG_SET_MELEE_ANIM_KIT = 0x2734,
+ SMSG_SET_MOVEMENT_ANIM_KIT = 0x2733,
SMSG_SET_PCT_SPELL_MODIFIER = 0x2C39,
- SMSG_SET_PET_SPECIALIZATION = 0x2624,
+ SMSG_SET_PET_SPECIALIZATION = 0x2626,
SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x3003,
- SMSG_SET_PLAY_HOVER_ANIM = 0x25BB,
- SMSG_SET_PROFICIENCY = 0x2733,
- SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2858,
+ SMSG_SET_PLAY_HOVER_ANIM = 0x25BD,
+ SMSG_SET_PROFICIENCY = 0x2736,
+ SMSG_SET_QUEST_REPLAY_COOLDOWN_OVERRIDE = 0x2845,
SMSG_SET_SHIPMENT_READY_RESPONSE = 0x2998,
SMSG_SET_SPELL_CHARGES = 0x2C28,
- SMSG_SET_TIME_ZONE_INFORMATION = 0x2678,
- SMSG_SET_VEHICLE_REC_ID = 0x26F6,
- SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2887,
+ SMSG_SET_TIME_ZONE_INFORMATION = 0x267B,
+ SMSG_SET_VEHICLE_REC_ID = 0x26F9,
+ SMSG_SHADOWLANDS_CAPACITANCE_UPDATE = 0x2871,
SMSG_SHIPMENT_FACTION_UPDATE_RESULT = 0x2999,
- SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25DB,
+ SMSG_SHOW_DELVES_DISPLAY_UI = 0x28A7,
+ SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25DD,
SMSG_SHOW_QUEST_COMPLETION_TEXT = 0x2A95,
- SMSG_SHOW_TAXI_NODES = 0x26CD,
- SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x276E,
- SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x2892,
- SMSG_SOCKET_GEMS_FAILURE = 0x2726,
- SMSG_SOCKET_GEMS_SUCCESS = 0x2725,
- SMSG_SPECIAL_MOUNT_ANIM = 0x26A0,
- SMSG_SPECTATE_END = 0x28B9,
- SMSG_SPECTATE_PLAYER = 0x28B8,
- SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2717,
+ SMSG_SHOW_TAXI_NODES = 0x26D0,
+ SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x2771,
+ SMSG_SOCIAL_CONTRACT_REQUEST_RESPONSE = 0x287B,
+ SMSG_SOCKET_GEMS_FAILURE = 0x2729,
+ SMSG_SOCKET_GEMS_SUCCESS = 0x2728,
+ SMSG_SPECIAL_MOUNT_ANIM = 0x26A3,
+ SMSG_SPECTATE_END = 0x2895,
+ SMSG_SPECTATE_PLAYER = 0x2894,
+ SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x271A,
SMSG_SPELL_ABSORB_LOG = 0x2C1C,
SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C16,
SMSG_SPELL_CHANNEL_START = 0x2C33,
@@ -1987,94 +2013,95 @@ enum OpcodeServer : uint16
SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C18,
SMSG_SPELL_PREPARE = 0x2C3A,
SMSG_SPELL_START = 0x2C3C,
- SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CD,
- SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x286A,
- SMSG_STAND_STATE_UPDATE = 0x271B,
- SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D3,
- SMSG_START_ELAPSED_TIMER = 0x2604,
- SMSG_START_ELAPSED_TIMERS = 0x2606,
- SMSG_START_LIGHTNING_STORM = 0x26A8,
- SMSG_START_LOOT_ROLL = 0x261C,
- SMSG_START_MIRROR_TIMER = 0x270E,
- SMSG_START_TIMER = 0x25A6,
- SMSG_STOP_ELAPSED_TIMER = 0x2605,
- SMSG_STOP_MIRROR_TIMER = 0x2710,
- SMSG_STOP_SPEAKERBOT_SOUND = 0x276A,
- SMSG_STOP_TIMER = 0x25A7,
- SMSG_STREAMING_MOVIES = 0x25A5,
- SMSG_SUGGEST_INVITE_INFORM = 0x278E,
- SMSG_SUMMON_CANCEL = 0x26B1,
- SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258D,
- SMSG_SUMMON_REQUEST = 0x2720,
+ SMSG_SPELL_VISUAL_LOAD_SCREEN = 0x25CF,
+ SMSG_SPLASH_SCREEN_SHOW_LATEST = 0x2856,
+ SMSG_STAND_STATE_UPDATE = 0x271E,
+ SMSG_STARTER_BUILD_ACTIVATE_FAILED = 0x25D5,
+ SMSG_START_ELAPSED_TIMER = 0x2606,
+ SMSG_START_ELAPSED_TIMERS = 0x2608,
+ SMSG_START_LIGHTNING_STORM = 0x26AB,
+ SMSG_START_LOOT_ROLL = 0x261E,
+ SMSG_START_MIRROR_TIMER = 0x2711,
+ SMSG_START_TIMER = 0x25A8,
+ SMSG_STOP_ELAPSED_TIMER = 0x2607,
+ SMSG_STOP_MIRROR_TIMER = 0x2713,
+ SMSG_STOP_SPEAKERBOT_SOUND = 0x276D,
+ SMSG_STOP_TIMER = 0x25A9,
+ SMSG_STREAMING_MOVIES = 0x25A7,
+ SMSG_SUGGEST_INVITE_INFORM = 0x2791,
+ SMSG_SUMMON_CANCEL = 0x26B4,
+ SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258F,
+ SMSG_SUMMON_REQUEST = 0x2723,
SMSG_SUPERCEDED_SPELLS = 0x2C4E,
SMSG_SUSPEND_COMMS = 0x304A,
- SMSG_SUSPEND_TOKEN = 0x25A9,
- SMSG_SYNC_WOW_ENTITLEMENTS = 0x2862,
- SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2716,
- SMSG_TAXI_NODE_STATUS = 0x267D,
- SMSG_TEXT_EMOTE = 0x267B,
- SMSG_THREAT_CLEAR = 0x26DC,
- SMSG_THREAT_REMOVE = 0x26DB,
- SMSG_THREAT_UPDATE = 0x26DA,
+ SMSG_SUSPEND_TOKEN = 0x25AB,
+ SMSG_SYNC_WOW_ENTITLEMENTS = 0x284E,
+ SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2719,
+ SMSG_TAXI_NODE_STATUS = 0x2680,
+ SMSG_TEXT_EMOTE = 0x267E,
+ SMSG_THREAT_CLEAR = 0x26DF,
+ SMSG_THREAT_REMOVE = 0x26DE,
+ SMSG_THREAT_UPDATE = 0x26DD,
+ SMSG_TIMERUNNING_SEASON_ENDED = 0x28AA,
SMSG_TIME_ADJUSTMENT = 0x2DD3,
SMSG_TIME_SYNC_REQUEST = 0x2DD2,
- SMSG_TITLE_EARNED = 0x26D7,
- SMSG_TITLE_LOST = 0x26D8,
- SMSG_TOTEM_CREATED = 0x26C7,
- SMSG_TOTEM_DURATION_CHANGED = 0x26C9,
- SMSG_TOTEM_MOVED = 0x26CA,
- SMSG_TOTEM_REMOVED = 0x26C8,
+ SMSG_TITLE_EARNED = 0x26DA,
+ SMSG_TITLE_LOST = 0x26DB,
+ SMSG_TOTEM_CREATED = 0x26CA,
+ SMSG_TOTEM_DURATION_CHANGED = 0x26CC,
+ SMSG_TOTEM_MOVED = 0x26CD,
+ SMSG_TOTEM_REMOVED = 0x26CB,
SMSG_TRADE_STATUS = 0x2583,
SMSG_TRADE_UPDATED = 0x2582,
- SMSG_TRAINER_BUY_FAILED = 0x26DF,
- SMSG_TRAINER_LIST = 0x26DE,
- SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D2,
- SMSG_TRANSFER_ABORTED = 0x2702,
- SMSG_TRANSFER_PENDING = 0x25CE,
+ SMSG_TRAINER_BUY_FAILED = 0x26E2,
+ SMSG_TRAINER_LIST = 0x26E1,
+ SMSG_TRAIT_CONFIG_COMMIT_FAILED = 0x25D4,
+ SMSG_TRANSFER_ABORTED = 0x2705,
+ SMSG_TRANSFER_PENDING = 0x25D0,
SMSG_TREASURE_PICKER_RESPONSE = 0x291F,
- SMSG_TRIGGER_CINEMATIC = 0x27C2,
- SMSG_TRIGGER_MOVIE = 0x26CB,
- SMSG_TURN_IN_PETITION_RESULT = 0x274C,
- SMSG_TUTORIAL_FLAGS = 0x27B6,
- SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA2,
- SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C4,
- SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C5,
+ SMSG_TRIGGER_CINEMATIC = 0x27C5,
+ SMSG_TRIGGER_MOVIE = 0x26CE,
+ SMSG_TURN_IN_PETITION_RESULT = 0x274F,
+ SMSG_TUTORIAL_FLAGS = 0x27B9,
+ SMSG_UI_MAP_QUEST_LINES_RESPONSE = 0x2AA3,
+ SMSG_UNDELETE_CHARACTER_RESPONSE = 0x27C7,
+ SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x27C8,
SMSG_UNLEARNED_SPELLS = 0x2C50,
SMSG_UNLOAD_CHILD_MAP = 0x257A,
- SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x287C,
- SMSG_UPDATE_ACCOUNT_DATA = 0x2708,
- SMSG_UPDATE_ACTION_BUTTONS = 0x25E0,
- SMSG_UPDATE_BNET_SESSION_KEY = 0x281C,
+ SMSG_UPDATE_AADC_STATUS_RESPONSE = 0x2867,
+ SMSG_UPDATE_ACCOUNT_DATA = 0x270B,
+ SMSG_UPDATE_ACTION_BUTTONS = 0x25E2,
+ SMSG_UPDATE_BNET_SESSION_KEY = 0x281F,
SMSG_UPDATE_CAPTURE_POINT = 0x2929,
- SMSG_UPDATE_CELESTIAL_BODY = 0x2818,
- SMSG_UPDATE_CHARACTER_FLAGS = 0x27BC,
- SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2764,
- SMSG_UPDATE_COOLDOWN = 0x2763,
+ SMSG_UPDATE_CELESTIAL_BODY = 0x281B,
+ SMSG_UPDATE_CHARACTER_FLAGS = 0x27BF,
+ SMSG_UPDATE_CHARGE_CATEGORY_COOLDOWN = 0x2767,
+ SMSG_UPDATE_COOLDOWN = 0x2766,
SMSG_UPDATE_CRAFTING_NPC_RECIPES = 0x2996,
SMSG_UPDATE_DAILY_MISSION_COUNTER = 0x297F,
- SMSG_UPDATE_EXPANSION_LEVEL = 0x2645,
- SMSG_UPDATE_GAME_TIME_STATE = 0x281F,
- SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26AA,
- SMSG_UPDATE_LAST_INSTANCE = 0x2689,
- SMSG_UPDATE_OBJECT = 0x27C3,
- SMSG_UPDATE_PRIMARY_SPEC = 0x25D8,
- SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F5,
- SMSG_UPDATE_TALENT_DATA = 0x25D7,
- SMSG_UPDATE_WORLD_STATE = 0x2746,
+ SMSG_UPDATE_EXPANSION_LEVEL = 0x2647,
+ SMSG_UPDATE_GAME_TIME_STATE = 0x2822,
+ SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26AD,
+ SMSG_UPDATE_LAST_INSTANCE = 0x268C,
+ SMSG_UPDATE_OBJECT = 0x27C6,
+ SMSG_UPDATE_PRIMARY_SPEC = 0x25DA,
+ SMSG_UPDATE_RECENT_PLAYER_GUIDS = 0x25F7,
+ SMSG_UPDATE_TALENT_DATA = 0x25D9,
+ SMSG_UPDATE_WORLD_STATE = 0x2749,
SMSG_USERLIST_ADD = 0x2BB9,
SMSG_USERLIST_REMOVE = 0x2BBA,
SMSG_USERLIST_UPDATE = 0x2BBB,
- SMSG_USE_EQUIPMENT_SET_RESULT = 0x274D,
- SMSG_VAS_CHECK_TRANSFER_OK_RESPONSE = 0x2813,
- SMSG_VAS_GET_QUEUE_MINUTES_RESPONSE = 0x2811,
- SMSG_VAS_GET_SERVICE_STATUS_RESPONSE = 0x2810,
- SMSG_VAS_PURCHASE_COMPLETE = 0x27EB,
- SMSG_VAS_PURCHASE_STATE_UPDATE = 0x27EA,
- SMSG_VENDOR_INVENTORY = 0x25B9,
+ SMSG_USE_EQUIPMENT_SET_RESULT = 0x2750,
+ 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_VENDOR_INVENTORY = 0x25BB,
SMSG_VIGNETTE_UPDATE = 0x3008,
- SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x2817,
- SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2876,
- SMSG_VOICE_LOGIN_RESPONSE = 0x2816,
+ SMSG_VOICE_CHANNEL_INFO_RESPONSE = 0x281A,
+ SMSG_VOICE_CHANNEL_STT_TOKEN_RESPONSE = 0x2861,
+ SMSG_VOICE_LOGIN_RESPONSE = 0x2819,
SMSG_VOID_ITEM_SWAP_RESPONSE = 0x2DA4,
SMSG_VOID_STORAGE_CONTENTS = 0x2DA1,
SMSG_VOID_STORAGE_FAILED = 0x2DA0,
@@ -2083,28 +2110,28 @@ enum OpcodeServer : uint16
SMSG_WAIT_QUEUE_FINISH = 0x256F,
SMSG_WAIT_QUEUE_UPDATE = 0x256E,
SMSG_WARDEN3_DATA = 0x2577,
- SMSG_WARDEN3_DISABLED = 0x281A,
- SMSG_WARDEN3_ENABLED = 0x2819,
- SMSG_WARFRONT_COMPLETE = 0x275C,
+ SMSG_WARDEN3_DISABLED = 0x281D,
+ SMSG_WARDEN3_ENABLED = 0x281C,
+ SMSG_WARFRONT_COMPLETE = 0x275F,
SMSG_WARGAME_REQUEST_OPPONENT_RESPONSE = 0x2934,
SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x2933,
- SMSG_WEATHER = 0x26A7,
- SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x286D,
- SMSG_WEEKLY_REWARDS_RESULT = 0x286B,
- SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x286C,
+ SMSG_WEATHER = 0x26AA,
+ SMSG_WEEKLY_REWARDS_PROGRESS_RESULT = 0x2859,
+ SMSG_WEEKLY_REWARDS_RESULT = 0x2857,
+ SMSG_WEEKLY_REWARD_CLAIM_RESULT = 0x2858,
SMSG_WHO = 0x2BAE,
- SMSG_WHO_IS = 0x26A6,
- SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x281E,
+ SMSG_WHO_IS = 0x26A9,
+ SMSG_WILL_BE_KICKED_FOR_ADDED_SUBSCRIPTION_TIME = 0x2821,
SMSG_WORLD_QUEST_UPDATE_RESPONSE = 0x300F,
- SMSG_WORLD_SERVER_INFO = 0x25AE,
- SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x2863,
- SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x2893,
- SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x2894,
- SMSG_WOW_LABS_PARTY_ERROR = 0x289C,
- SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x2895,
- SMSG_XP_AWARDED_FROM_CURRENCY = 0x28AB,
- SMSG_XP_GAIN_ABORTED = 0x25CA,
- SMSG_XP_GAIN_ENABLED = 0x27A6,
+ SMSG_WORLD_SERVER_INFO = 0x25B0,
+ SMSG_WOW_ENTITLEMENT_NOTIFICATION = 0x284F,
+ SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_END = 0x287C,
+ SMSG_WOW_LABS_NOTIFY_PLAYERS_MATCH_STATE_CHANGED = 0x287D,
+ SMSG_WOW_LABS_PARTY_ERROR = 0x2881,
+ SMSG_WOW_LABS_SET_PREDICTION_CIRCLE = 0x287E,
+ SMSG_XP_AWARDED_FROM_CURRENCY = 0x288F,
+ SMSG_XP_GAIN_ABORTED = 0x25CC,
+ SMSG_XP_GAIN_ENABLED = 0x27A9,
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 fb344305d75..fb05eeeb24a 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -65,6 +65,7 @@ struct Petition;
struct Position;
enum class AuctionCommand : int8;
enum class AuctionResult : int8;
+enum class PlayerInteractionType : int32;
enum InventoryResult : uint8;
enum class StableResult : uint8;
enum class TabardVendorType : int32;
@@ -170,6 +171,7 @@ namespace WorldPackets
class AutoBankReagent;
class AutoStoreBankReagent;
class ReagentBank;
+ class BankerActivate;
}
namespace Battleground
@@ -447,6 +449,7 @@ namespace WorldPackets
class CancelTempEnchantment;
class UseCritterItem;
class SocketGems;
+ class SortAccountBankBags;
class SortBags;
class SortBankBags;
class SortReagentBankBags;
@@ -860,14 +863,14 @@ namespace pb = google::protobuf;
enum AccountDataType
{
- GLOBAL_CONFIG_CACHE = 0, // 0x01 g
- PER_CHARACTER_CONFIG_CACHE = 1, // 0x02 p
- GLOBAL_BINDINGS_CACHE = 2, // 0x04 g
- PER_CHARACTER_BINDINGS_CACHE = 3, // 0x08 p
- GLOBAL_MACROS_CACHE = 4, // 0x10 g
- PER_CHARACTER_MACROS_CACHE = 5, // 0x20 p
- PER_CHARACTER_LAYOUT_CACHE = 6, // 0x40 p
- PER_CHARACTER_CHAT_CACHE = 7, // 0x80 p
+ GLOBAL_CONFIG_CACHE = 0,
+ PER_CHARACTER_CONFIG_CACHE = 1,
+ GLOBAL_BINDINGS_CACHE = 2,
+ PER_CHARACTER_BINDINGS_CACHE = 3,
+ GLOBAL_MACROS_CACHE = 4,
+ PER_CHARACTER_MACROS_CACHE = 5,
+ PER_CHARACTER_LAYOUT_CACHE = 6,
+ PER_CHARACTER_CHAT_CACHE = 7,
GLOBAL_TTS_CACHE = 8,
PER_CHARACTER_TTS_CACHE = 9,
GLOBAL_FLAGGED_CACHE = 10,
@@ -875,13 +878,15 @@ enum AccountDataType
PER_CHARACTER_CLICK_BINDINGS_CACHE = 12,
GLOBAL_EDIT_MODE_CACHE = 13,
PER_CHARACTER_EDIT_MODE_CACHE = 14,
+ GLOBAL_FRONTEND_CHAT_SETTINGS = 15,
+ GLOBAL_CHARACTER_LIST_ORDER = 16
};
-#define NUM_ACCOUNT_DATA_TYPES 15
+#define NUM_ACCOUNT_DATA_TYPES 17
-#define ALL_ACCOUNT_DATA_CACHE_MASK 0x7FFF
-#define GLOBAL_CACHE_MASK 0x2515
-#define PER_CHARACTER_CACHE_MASK 0x5AEA
+#define ALL_ACCOUNT_DATA_CACHE_MASK 0x0001FFFFu
+#define GLOBAL_CACHE_MASK 0x0001A515u
+#define PER_CHARACTER_CACHE_MASK 0x00005AEAu
struct AccountData
{
@@ -1070,7 +1075,7 @@ class TC_GAME_API WorldSession
void SendTrainerList(Creature* npc, uint32 trainerId);
void SendListInventory(ObjectGuid guid);
- void SendShowBank(ObjectGuid guid);
+ void SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType);
bool CanOpenMailBox(ObjectGuid guid);
void SendShowMailBox(ObjectGuid guid);
void SendTabardVendorActivate(ObjectGuid guid, TabardVendorType type);
@@ -1422,7 +1427,7 @@ class TC_GAME_API WorldSession
void HandleTaxiRequestEarlyLanding(WorldPackets::Taxi::TaxiRequestEarlyLanding& taxiRequestEarlyLanding);
void HandleTabardVendorActivateOpcode(WorldPackets::NPC::TabardVendorActivate const& tabardVendorActivate);
- void HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet);
+ void HandleBankerActivateOpcode(WorldPackets::Bank::BankerActivate const& bankerActivate);
void HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet);
void HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpell& packet);
void HandlePetitionShowList(WorldPackets::Petition::PetitionShowList& packet);
@@ -1683,6 +1688,7 @@ class TC_GAME_API WorldSession
// Socket gem
void HandleSocketGems(WorldPackets::Item::SocketGems& socketGems);
+ void HandleSortAccountBankBags(WorldPackets::Item::SortAccountBankBags& sortBankBags);
void HandleSortBags(WorldPackets::Item::SortBags& sortBags);
void HandleSortBankBags(WorldPackets::Item::SortBankBags& sortBankBags);
void HandleSortReagentBankBags(WorldPackets::Item::SortReagentBankBags& sortReagentBankBags);
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 6aa746ebef7..688c8c5aed0 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -151,7 +151,7 @@ void WorldSocket::InitializeHandler(boost::system::error_code const& error, std:
try
{
ByteBuffer buffer(std::move(_packetBuffer));
- std::string initializer = buffer.ReadString(ClientConnectionInitialize.length());
+ std::string initializer(buffer.ReadString(ClientConnectionInitialize.length()));
if (initializer != ClientConnectionInitialize)
{
CloseSocket();
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index 0369c8a807c..fde76603bff 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1545,7 +1545,7 @@ public:
static bool HandleBankCommand(ChatHandler* handler)
{
- handler->GetSession()->SendShowBank(handler->GetSession()->GetPlayer()->GetGUID());
+ handler->GetSession()->SendShowBank(handler->GetSession()->GetPlayer()->GetGUID(), PlayerInteractionType::Banker);
return true;
}
diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp
index e02e67a1d7c..edf54b96de4 100644
--- a/src/server/scripts/Commands/cs_modify.cpp
+++ b/src/server/scripts/Commands/cs_modify.cpp
@@ -225,7 +225,7 @@ public:
flag = target->m_unitData->Flags;
if (!npcflag)
- memcpy(&npcflag.emplace(), target->m_unitData->NpcFlags.begin(), sizeof(uint64));
+ npcflag = (uint64(target->GetNpcFlags2()) << 32) | target->GetNpcFlags();
if (!dyflag)
dyflag = target->m_objectData->DynamicFlags;
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 81de26149c2..f07f5de5395 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -480,8 +480,7 @@ public:
CreatureTemplate const* cInfo = target->GetCreatureTemplate();
uint32 faction = target->GetFaction();
- uint64 npcflags;
- memcpy(&npcflags, target->m_unitData->NpcFlags.begin(), sizeof(npcflags));
+ uint64 npcflags = (uint64(target->GetNpcFlags2()) << 32) | target->GetNpcFlags();
uint64 mechanicImmuneMask = 0;
if (CreatureImmunities const* immunities = SpellMgr::GetCreatureImmunities(cInfo->CreatureImmunitiesId))
mechanicImmuneMask = immunities->Mechanic.to_ullong();
@@ -550,7 +549,7 @@ public:
if (cInfo->flags_extra & flag)
handler->PSendSysMessage("%s (0x%X)", EnumUtils::ToTitle(flag), flag);
- handler->PSendSysMessage(LANG_NPCINFO_NPC_FLAGS, target->m_unitData->NpcFlags[0]);
+ handler->PSendSysMessage(LANG_NPCINFO_NPC_FLAGS, uint32(target->GetNpcFlags()));
for (NPCFlags flag : EnumUtils::Iterate<NPCFlags>())
if (target->HasNpcFlag(flag))
handler->PSendSysMessage("* %s (0x%X)", EnumUtils::ToTitle(flag), flag);