aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-10-26 11:17:33 +0200
committerShauren <shauren.trinity@gmail.com>2019-10-27 00:12:41 +0200
commitee2e49429f4383732b4e0f39b493470b9c1dd10c (patch)
tree4204060b24b0469268971b8f1a45084eb0aee26b
parent28eda522b1bef6d354d5a6b54fc0864ea503121a (diff)
Core/PacketIO: Update opcodes and packet structures to 8.2.5
-rw-r--r--sql/updates/characters/master/2019_10_26_00_characters.sql25
-rw-r--r--sql/updates/world/master/2019_10_26_00_world.sql1
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.h4
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.h13
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundBFG.h10
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.h2
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.h4
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp19
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.h12
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundTP.h10
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.h4
-rw-r--r--src/server/game/Chat/Channels/Channel.cpp7
-rw-r--r--src/server/game/Chat/Channels/Channel.h5
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp67
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.h5
-rw-r--r--src/server/game/Entities/Creature/GossipDef.cpp1
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.cpp1
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h2
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.h1
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp706
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h414
-rw-r--r--src/server/game/Entities/Player/Player.cpp12
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp6
-rw-r--r--src/server/game/Guilds/Guild.cpp2
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp21
-rw-r--r--src/server/game/Handlers/LFGHandler.cpp1
-rw-r--r--src/server/game/Quests/QuestDef.cpp23
-rw-r--r--src/server/game/Quests/QuestDef.h2
-rw-r--r--src/server/game/Server/Packets/AchievementPackets.cpp5
-rw-r--r--src/server/game/Server/Packets/AchievementPackets.h1
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.cpp11
-rw-r--r--src/server/game/Server/Packets/BattlegroundPackets.h11
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/ChannelPackets.h1
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.cpp80
-rw-r--r--src/server/game/Server/Packets/CharacterPackets.h40
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp7
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h6
-rw-r--r--src/server/game/Server/Packets/HotfixPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/HotfixPackets.h1
-rw-r--r--src/server/game/Server/Packets/LFGPackets.cpp1
-rw-r--r--src/server/game/Server/Packets/LFGPackets.h1
-rw-r--r--src/server/game/Server/Packets/QuestPackets.cpp3
-rw-r--r--src/server/game/Server/Packets/QuestPackets.h2
-rw-r--r--src/server/game/Server/Packets/SystemPackets.cpp16
-rw-r--r--src/server/game/Server/Packets/SystemPackets.h19
-rw-r--r--src/server/game/Server/Packets/TicketPackets.cpp85
-rw-r--r--src/server/game/Server/Packets/TicketPackets.h35
-rw-r--r--src/server/game/Server/Packets/TransmogrificationPackets.cpp4
-rw-r--r--src/server/game/Server/Packets/TransmogrificationPackets.h1
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp38
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h1539
-rw-r--r--src/server/game/Server/WorldSocket.cpp2
53 files changed, 1913 insertions, 1380 deletions
diff --git a/sql/updates/characters/master/2019_10_26_00_characters.sql b/sql/updates/characters/master/2019_10_26_00_characters.sql
new file mode 100644
index 00000000000..37de4489e91
--- /dev/null
+++ b/sql/updates/characters/master/2019_10_26_00_characters.sql
@@ -0,0 +1,25 @@
+UPDATE `characters` SET `equipmentCache`=CONCAT(
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -70), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -67), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -64), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -61), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -58), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -55), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -52), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -49), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -46), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -43), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -40), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -37), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -34), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -31), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -28), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -25), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -22), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -19), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -16), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -13), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -10), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -7), ' ', 2), ' 0 0 '),
+CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -4), ' ', 2), ' 0 0 ')
+) WHERE LENGTH(`equipmentCache`) > 0;
diff --git a/sql/updates/world/master/2019_10_26_00_world.sql b/sql/updates/world/master/2019_10_26_00_world.sql
new file mode 100644
index 00000000000..8694c61224a
--- /dev/null
+++ b/sql/updates/world/master/2019_10_26_00_world.sql
@@ -0,0 +1 @@
+ALTER TABLE `quest_template` ADD `QuestSessionBonus` int(11) NOT NULL DEFAULT '0' AFTER `ManagedWorldStateID`;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
index 0d02b1672db..28e48e863c4 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h
@@ -298,8 +298,8 @@ struct BattlegroundABScore final : public BattlegroundScore
{
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
- playerData.Stats.push_back(BasesAssaulted);
- playerData.Stats.push_back(BasesDefended);
+ playerData.Stats.emplace_back(AB_OBJECTIVE_ASSAULT_BASE, BasesAssaulted);
+ playerData.Stats.emplace_back(AB_OBJECTIVE_DEFEND_BASE, BasesDefended);
}
uint32 GetAttr1() const final override { return BasesAssaulted; }
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
index 0a81545b3b4..de02b2ba094 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h
@@ -1486,7 +1486,8 @@ enum BG_AV_Objectives
AV_OBJECTIVE_ASSAULT_TOWER = 61,
AV_OBJECTIVE_ASSAULT_GRAVEYARD = 63,
AV_OBJECTIVE_DEFEND_TOWER = 64,
- AV_OBJECTIVE_DEFEND_GRAVEYARD = 65
+ AV_OBJECTIVE_DEFEND_GRAVEYARD = 65,
+ AV_OBJECTIVE_SECONDARY_OBJECTIVE= 82
};
struct StaticNodeInfo
@@ -1601,11 +1602,11 @@ struct BattlegroundAVScore final : public BattlegroundScore
{
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
- playerData.Stats.push_back(GraveyardsAssaulted);
- playerData.Stats.push_back(GraveyardsDefended);
- playerData.Stats.push_back(TowersAssaulted);
- playerData.Stats.push_back(TowersDefended);
- playerData.Stats.push_back(MinesCaptured);
+ playerData.Stats.emplace_back(AV_OBJECTIVE_ASSAULT_GRAVEYARD, GraveyardsAssaulted);
+ playerData.Stats.emplace_back(AV_OBJECTIVE_DEFEND_GRAVEYARD, GraveyardsDefended);
+ playerData.Stats.emplace_back(AV_OBJECTIVE_ASSAULT_TOWER, TowersAssaulted);
+ playerData.Stats.emplace_back(AV_OBJECTIVE_DEFEND_TOWER, TowersDefended);
+ playerData.Stats.emplace_back(AV_OBJECTIVE_SECONDARY_OBJECTIVE, MinesCaptured);
}
uint32 GetAttr1() const final override { return GraveyardsAssaulted; }
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundBFG.h b/src/server/game/Battlegrounds/Zones/BattlegroundBFG.h
index fd99cb55d82..d5f1d1cc338 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundBFG.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundBFG.h
@@ -21,6 +21,12 @@
#include "Battleground.h"
#include "BattlegroundScore.h"
+enum BG_BFG_Objectives
+{
+ BFG_OBJECTIVE_BASES_ASSAULTED = 370,
+ BFG_OBJECTIVE_BASES_DEFENDED = 371
+};
+
class BattlegroundBFGScore final : public BattlegroundScore
{
protected:
@@ -46,8 +52,8 @@ class BattlegroundBFGScore final : public BattlegroundScore
{
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
- playerData.Stats.push_back(BasesAssaulted);
- playerData.Stats.push_back(BasesDefended);
+ playerData.Stats.emplace_back(BFG_OBJECTIVE_BASES_ASSAULTED, BasesAssaulted);
+ playerData.Stats.emplace_back(BFG_OBJECTIVE_BASES_DEFENDED, BasesDefended);
}
uint32 GetAttr1() const final override { return BasesAssaulted; }
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
index e1a046be401..d673f1595cc 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h
@@ -381,7 +381,7 @@ struct BattlegroundEYScore final : public BattlegroundScore
{
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
- playerData.Stats.push_back(FlagCaptures);
+ playerData.Stats.emplace_back(EY_OBJECTIVE_CAPTURE_FLAG, FlagCaptures);
}
uint32 GetAttr1() const final override { return FlagCaptures; }
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
index 7622f22d67b..4360d2adef3 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.h
@@ -941,8 +941,8 @@ struct BattlegroundICScore final : public BattlegroundScore
{
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
- playerData.Stats.push_back(BasesAssaulted);
- playerData.Stats.push_back(BasesDefended);
+ playerData.Stats.emplace_back(IC_OBJECTIVE_ASSAULT_BASE, BasesAssaulted);
+ playerData.Stats.emplace_back(IC_OBJECTIVE_DEFEND_BASE, BasesDefended);
}
uint32 GetAttr1() const final override { return BasesAssaulted; }
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index 1093ea178cb..12b0a9dad20 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -1064,3 +1064,22 @@ bool BattlegroundSA::IsSpellAllowed(uint32 spellId, Player const* /*player*/) co
return true;
}
+
+bool BattlegroundSA::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor /*= true*/)
+{
+ if (!Battleground::UpdatePlayerScore(player, type, value, doAddHonor))
+ return false;
+
+ switch (type)
+ {
+ case SCORE_DESTROYED_DEMOLISHER:
+ player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, BG_SA_DEMOLISHERS_DESTROYED);
+ break;
+ case SCORE_DESTROYED_WALL:
+ player->UpdateCriteria(CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE, BG_SA_GATES_DESTROYED);
+ break;
+ default:
+ break;
+ }
+ return true;
+}
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
index f5578d57028..724f5611085 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.h
@@ -302,6 +302,12 @@ enum BG_SA_Objects
BG_SA_MAXOBJ = BG_SA_BOMB+68
};
+enum BG_SA_Objectives
+{
+ BG_SA_GATES_DESTROYED = 231,
+ BG_SA_DEMOLISHERS_DESTROYED = 232
+};
+
Position const BG_SA_ObjSpawnlocs[BG_SA_MAXOBJ] =
{
{ 1411.57f, 108.163f, 28.692f, 5.441f },
@@ -544,8 +550,8 @@ struct BattlegroundSAScore final : public BattlegroundScore
{
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
- playerData.Stats.push_back(DemolishersDestroyed);
- playerData.Stats.push_back(GatesDestroyed);
+ playerData.Stats.emplace_back(BG_SA_DEMOLISHERS_DESTROYED, DemolishersDestroyed);
+ playerData.Stats.emplace_back(BG_SA_GATES_DESTROYED, GatesDestroyed);
}
uint32 GetAttr1() const final override { return DemolishersDestroyed; }
@@ -615,6 +621,8 @@ class BattlegroundSA : public Battleground
// Control Phase Shift
bool IsSpellAllowed(uint32 spellId, Player const* player) const override;
+ bool UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor = true) override;
+
private:
/**
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundTP.h b/src/server/game/Battlegrounds/Zones/BattlegroundTP.h
index 33fc27d3647..4a5188d4306 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundTP.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundTP.h
@@ -21,6 +21,12 @@
#include "Battleground.h"
#include "BattlegroundScore.h"
+enum BG_TP_Objectives
+{
+ BG_TP_FLAG_CAPTURES = 290,
+ BG_TP_FLAG_RETURNS = 291
+};
+
class BattlegroundTPScore final : public BattlegroundScore
{
protected:
@@ -46,8 +52,8 @@ class BattlegroundTPScore final : public BattlegroundScore
{
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
- playerData.Stats.push_back(FlagCaptures);
- playerData.Stats.push_back(FlagReturns);
+ playerData.Stats.emplace_back(BG_TP_FLAG_CAPTURES, FlagCaptures);
+ playerData.Stats.emplace_back(BG_TP_FLAG_RETURNS, FlagReturns);
}
uint32 GetAttr1() const final override { return FlagCaptures; }
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
index 4e8bcf47833..16d87a3a5ba 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h
@@ -197,8 +197,8 @@ struct BattlegroundWGScore final : public BattlegroundScore
{
BattlegroundScore::BuildPvPLogPlayerDataPacket(playerData);
- playerData.Stats.push_back(FlagCaptures);
- playerData.Stats.push_back(FlagReturns);
+ playerData.Stats.emplace_back(WS_OBJECTIVE_CAPTURE_FLAG, FlagCaptures);
+ playerData.Stats.emplace_back(WS_OBJECTIVE_RETURN_FLAG, FlagReturns);
}
uint32 GetAttr1() const final override { return FlagCaptures; }
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp
index 781ffd0b2ea..3131f2b15d9 100644
--- a/src/server/game/Chat/Channels/Channel.cpp
+++ b/src/server/game/Chat/Channels/Channel.cpp
@@ -35,7 +35,7 @@
#include "WorldSession.h"
#include <sstream>
-Channel::Channel(uint32 channelId, uint32 team /*= 0*/, AreaTableEntry const* zoneEntry /*= nullptr*/) :
+Channel::Channel(ObjectGuid const& guid, uint32 channelId, uint32 team /*= 0*/, AreaTableEntry const* zoneEntry /*= nullptr*/) :
_announceEnabled(false), // no join/leave announces
_ownershipEnabled(false), // no ownership handout
_persistentChannel(false),
@@ -43,6 +43,7 @@ Channel::Channel(uint32 channelId, uint32 team /*= 0*/, AreaTableEntry const* zo
_channelFlags(CHANNEL_FLAG_GENERAL), // for all built-in channels
_channelId(channelId),
_channelTeam(team),
+ _channelGuid(guid),
_zoneEntry(zoneEntry)
{
ChatChannelsEntry const* channelEntry = sChatChannelsStore.AssertEntry(channelId);
@@ -58,7 +59,7 @@ Channel::Channel(uint32 channelId, uint32 team /*= 0*/, AreaTableEntry const* zo
_channelFlags |= CHANNEL_FLAG_NOT_LFG;
}
-Channel::Channel(std::string const& name, uint32 team /*= 0*/) :
+Channel::Channel(ObjectGuid const& guid, std::string const& name, uint32 team /*= 0*/) :
_announceEnabled(true),
_ownershipEnabled(true),
_persistentChannel(false),
@@ -66,6 +67,7 @@ Channel::Channel(std::string const& name, uint32 team /*= 0*/) :
_channelFlags(CHANNEL_FLAG_CUSTOM),
_channelId(0),
_channelTeam(team),
+ _channelGuid(guid),
_channelName(name),
_zoneEntry(nullptr)
{
@@ -251,6 +253,7 @@ void Channel::JoinChannel(Player* player, std::string const& pass)
//notify->InstanceID = 0;
notify->_ChannelFlags = _channelFlags;
notify->_Channel = GetName(localeIdx);
+ notify->ChannelGUID = _channelGuid;
return notify;
};
diff --git a/src/server/game/Chat/Channels/Channel.h b/src/server/game/Chat/Channels/Channel.h
index 3604958c20c..e94e18e51c4 100644
--- a/src/server/game/Chat/Channels/Channel.h
+++ b/src/server/game/Chat/Channels/Channel.h
@@ -172,8 +172,8 @@ class TC_GAME_API Channel
};
public:
- Channel(uint32 channelId, uint32 team = 0, AreaTableEntry const* zoneEntry = nullptr); // built-in channel ctor
- Channel(std::string const& name, uint32 team = 0); // custom player channel ctor
+ Channel(ObjectGuid const& guid, uint32 channelId, uint32 team = 0, AreaTableEntry const* zoneEntry = nullptr); // built-in channel ctor
+ Channel(ObjectGuid const& guid, std::string const& name, uint32 team = 0); // custom player channel ctor
static void GetChannelName(std::string& channelName, uint32 channelId, LocaleConstant locale, AreaTableEntry const* zoneEntry);
std::string GetName(LocaleConstant locale = DEFAULT_LOCALE) const;
@@ -269,6 +269,7 @@ class TC_GAME_API Channel
uint8 _channelFlags;
uint32 _channelId;
uint32 _channelTeam;
+ ObjectGuid _channelGuid;
ObjectGuid _ownerGuid;
std::string _channelName;
std::string _channelPassword;
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 26db8fa5b98..ed84917602a 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -21,6 +21,7 @@
#include "ChannelPackets.h"
#include "DB2Stores.h"
#include "Player.h"
+#include "Realm.h"
#include "World.h"
#include "WorldSession.h"
@@ -77,18 +78,13 @@ Channel* ChannelMgr::GetJoinChannel(uint32 channelId, std::string const& name, A
{
if (channelId) // builtin
{
- ChatChannelsEntry const* channelEntry = sChatChannelsStore.AssertEntry(channelId);
- uint32 zoneId = zoneEntry ? zoneEntry->ID : 0;
- if (channelEntry->Flags & (CHANNEL_DBC_FLAG_GLOBAL | CHANNEL_DBC_FLAG_CITY_ONLY))
- zoneId = 0;
-
- std::pair<uint32, uint32> key = std::make_pair(channelId, zoneId);
- auto itr = _channels.find(key);
+ ObjectGuid channelGuid = CreateBuiltinChannelGuid(channelId, zoneEntry);
+ auto itr = _channels.find(channelGuid);
if (itr != _channels.end())
return itr->second;
- Channel* newChannel = new Channel(channelId, _team, zoneEntry);
- _channels[key] = newChannel;
+ Channel* newChannel = new Channel(channelGuid, channelId, _team, zoneEntry);
+ _channels[channelGuid] = newChannel;
return newChannel;
}
else // custom
@@ -103,7 +99,7 @@ Channel* ChannelMgr::GetJoinChannel(uint32 channelId, std::string const& name, A
if (itr != _customChannels.end())
return itr->second;
- Channel* newChannel = new Channel(name, _team);
+ Channel* newChannel = new Channel(CreateCustomChannelGuid(), name, _team);
_customChannels[channelName] = newChannel;
return newChannel;
}
@@ -114,13 +110,7 @@ Channel* ChannelMgr::GetChannel(uint32 channelId, std::string const& name, Playe
Channel* result = nullptr;
if (channelId) // builtin
{
- ChatChannelsEntry const* channelEntry = sChatChannelsStore.AssertEntry(channelId);
- uint32 zoneId = zoneEntry ? zoneEntry->ID : 0;
- if (channelEntry->Flags & (CHANNEL_DBC_FLAG_GLOBAL | CHANNEL_DBC_FLAG_CITY_ONLY))
- zoneId = 0;
-
- std::pair<uint32, uint32> key = std::make_pair(channelId, zoneId);
- auto itr = _channels.find(key);
+ auto itr = _channels.find(CreateBuiltinChannelGuid(channelId, zoneEntry));
if (itr != _channels.end())
result = itr->second;
}
@@ -169,13 +159,7 @@ void ChannelMgr::LeftChannel(std::string const& name)
void ChannelMgr::LeftChannel(uint32 channelId, AreaTableEntry const* zoneEntry)
{
- ChatChannelsEntry const* channelEntry = sChatChannelsStore.AssertEntry(channelId);
- uint32 zoneId = zoneEntry ? zoneEntry->ID : 0;
- if (channelEntry->Flags & (CHANNEL_DBC_FLAG_GLOBAL | CHANNEL_DBC_FLAG_CITY_ONLY))
- zoneId = 0;
-
- std::pair<uint32, uint32> key = std::make_pair(channelId, zoneId);
- auto itr = _channels.find(key);
+ auto itr = _channels.find(CreateBuiltinChannelGuid(channelId, zoneEntry));
if (itr == _channels.end())
return;
@@ -194,3 +178,38 @@ void ChannelMgr::SendNotOnChannelNotify(Player const* player, std::string const&
notify._Channel = name;
player->SendDirectMessage(notify.Write());
}
+
+ObjectGuid ChannelMgr::CreateCustomChannelGuid()
+{
+ uint64 high = 0;
+ high |= uint64(HighGuid::ChatChannel) << 58;
+ high |= uint64(realm.Id.Realm) << 42;
+ high |= uint64(_team == ALLIANCE ? 3 : 5) << 4;
+
+ ObjectGuid channelGuid;
+ channelGuid.SetRawValue(high, _guidGenerator.Generate());
+ return channelGuid;
+}
+
+ObjectGuid ChannelMgr::CreateBuiltinChannelGuid(uint32 channelId, AreaTableEntry const* zoneEntry /*= nullptr*/) const
+{
+
+ ChatChannelsEntry const* channelEntry = sChatChannelsStore.AssertEntry(channelId);
+ uint32 zoneId = zoneEntry ? zoneEntry->ID : 0;
+ if (channelEntry->Flags & (CHANNEL_DBC_FLAG_GLOBAL | CHANNEL_DBC_FLAG_CITY_ONLY))
+ zoneId = 0;
+
+ uint64 high = 0;
+ high |= uint64(HighGuid::ChatChannel) << 58;
+ high |= uint64(realm.Id.Realm) << 42;
+ high |= uint64(1) << 25; // built-in
+ if (channelEntry->Flags & CHANNEL_DBC_FLAG_CITY_ONLY2)
+ high |= uint64(1) << 24; // trade
+
+ high |= uint64(zoneId) << 10;
+ high |= uint64(_team == ALLIANCE ? 3 : 5) << 4;
+
+ ObjectGuid channelGuid;
+ channelGuid.SetRawValue(high, channelId);
+ return channelGuid;
+}
diff --git a/src/server/game/Chat/Channels/ChannelMgr.h b/src/server/game/Chat/Channels/ChannelMgr.h
index 09bed7da3b9..2f9907705b2 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.h
+++ b/src/server/game/Chat/Channels/ChannelMgr.h
@@ -30,7 +30,7 @@ struct AreaTableEntry;
class TC_GAME_API ChannelMgr
{
typedef std::unordered_map<std::wstring, Channel*> CustomChannelContainer; // custom channels only differ in name
- typedef std::unordered_map<std::pair<uint32 /*channelId*/, uint32 /*zoneId*/>, Channel*> BuiltinChannelContainer; // identify builtin (DBC) channels by zoneId instead, since name changes by client locale
+ typedef std::unordered_map<ObjectGuid, Channel*> BuiltinChannelContainer;
protected:
explicit ChannelMgr(uint32 team) : _team(team) { }
@@ -49,8 +49,11 @@ class TC_GAME_API ChannelMgr
CustomChannelContainer _customChannels;
BuiltinChannelContainer _channels;
uint32 const _team;
+ ObjectGuidGenerator<HighGuid::ChatChannel> _guidGenerator;
static void SendNotOnChannelNotify(Player const* player, std::string const& name);
+ ObjectGuid CreateCustomChannelGuid();
+ ObjectGuid CreateBuiltinChannelGuid(uint32 channelId, AreaTableEntry const* zoneEntry = nullptr) const;
};
#endif
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp
index ef9d465dc6e..de9cb55e1b0 100644
--- a/src/server/game/Entities/Creature/GossipDef.cpp
+++ b/src/server/game/Entities/Creature/GossipDef.cpp
@@ -443,6 +443,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU
packet.PortraitGiver = quest->GetQuestGiverPortrait();
packet.PortraitGiverMount = quest->GetQuestGiverPortraitMount();
packet.PortraitTurnIn = quest->GetQuestTurnInPortrait();
+ packet.QuestSessionBonus = 0; //quest->GetQuestSessionBonus(); // this is only sent while quest session is active
packet.AutoLaunched = autoLaunched;
packet.DisplayPopup = displayPopup;
packet.QuestFlags[0] = quest->GetFlags() & (sWorld->getBoolConfig(CONFIG_QUEST_IGNORE_AUTO_ACCEPT) ? ~QUEST_FLAGS_AUTO_ACCEPT : ~0);
diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp
index 4689e841ade..f4d96c130e0 100644
--- a/src/server/game/Entities/Object/ObjectGuid.cpp
+++ b/src/server/game/Entities/Object/ObjectGuid.cpp
@@ -90,6 +90,7 @@ namespace
SET_GUID_NAME(ClientSession);
SET_GUID_NAME(Cast);
SET_GUID_NAME(ClientConnection);
+ SET_GUID_NAME(ClubFinder);
#undef SET_GUID_NAME
}
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index 3ac339345d6..f5a17c3788f 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -118,6 +118,7 @@ enum class HighGuid
ClientSession = 46,
Cast = 47,
ClientConnection = 48,
+ ClubFinder = 49,
Count,
};
@@ -171,6 +172,7 @@ GUID_TRAIT_GLOBAL(HighGuid::CommerceObj)
GUID_TRAIT_GLOBAL(HighGuid::ClientSession)
GUID_TRAIT_REALM_SPECIFIC(HighGuid::Player)
GUID_TRAIT_REALM_SPECIFIC(HighGuid::Item) // This is not exactly correct, there are 2 more unknown parts in highguid: (high >> 10 & 0xFF), (high >> 18 & 0xFFFFFF)
+GUID_TRAIT_REALM_SPECIFIC(HighGuid::ChatChannel)
GUID_TRAIT_REALM_SPECIFIC(HighGuid::Guild)
GUID_TRAIT_MAP_SPECIFIC(HighGuid::WorldTransaction)
GUID_TRAIT_MAP_SPECIFIC(HighGuid::Conversation)
diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h
index aaed95d4469..952bc97370f 100644
--- a/src/server/game/Entities/Object/Updates/UpdateField.h
+++ b/src/server/game/Entities/Object/Updates/UpdateField.h
@@ -19,6 +19,7 @@
#define UpdateField_h__
#include "ObjectGuid.h"
+#include "Optional.h"
#include "UpdateMask.h"
#include <algorithm>
#include <vector>
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index abedd992089..c9c7dcd3191 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -68,7 +68,7 @@ void ObjectData::ClearChangesMask()
_changesMask.ResetAll();
}
-void ItemEnchantment::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void ItemEnchantment::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << int32(ID);
data << uint32(Duration);
@@ -76,7 +76,7 @@ void ItemEnchantment::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
data << uint16(Inactive);
}
-void ItemEnchantment::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void ItemEnchantment::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
UpdateMask<5> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 5);
@@ -112,21 +112,21 @@ void ItemEnchantment::ClearChangesMask()
_changesMask.ResetAll();
}
-void ArtifactPower::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void ArtifactPower::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << int16(ArtifactPowerID);
data << uint8(PurchasedRank);
data << uint8(CurrentRankWithBonus);
}
-void ArtifactPower::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void ArtifactPower::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << int16(ArtifactPowerID);
data << uint8(PurchasedRank);
data << uint8(CurrentRankWithBonus);
}
-void SocketedGem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void SocketedGem::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << int32(ItemID);
for (std::size_t i = 0; i < 16; ++i)
@@ -136,7 +136,7 @@ void SocketedGem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> f
data << uint8(Context);
}
-void SocketedGem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void SocketedGem::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
UpdateMask<20> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlocksMask(0), 1);
@@ -198,7 +198,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << uint32(DynamicFlags);
for (std::size_t i = 0; i < 13; ++i)
{
- Enchantment[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Enchantment[i].WriteCreate(data, owner, receiver);
}
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
{
@@ -229,11 +229,11 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
}
for (std::size_t i = 0; i < ArtifactPowers.size(); ++i)
{
- ArtifactPowers[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ ArtifactPowers[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < Gems.size(); ++i)
{
- Gems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Gems[i].WriteCreate(data, owner, receiver);
}
}
@@ -303,7 +303,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask,
{
if (ArtifactPowers.HasChanged(i))
{
- ArtifactPowers[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ArtifactPowers[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -313,7 +313,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask,
{
if (Gems.HasChanged(i))
{
- Gems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ Gems[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -394,7 +394,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask,
{
if (changesMask[27 + i])
{
- Enchantment[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ Enchantment[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -504,19 +504,19 @@ void AzeriteEmpoweredItemData::ClearChangesMask()
_changesMask.ResetAll();
}
-void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << uint32(AzeriteEssenceID);
data << uint32(Rank);
}
-void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << uint32(AzeriteEssenceID);
data << uint32(Rank);
}
-void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
for (std::size_t i = 0; i < 3; ++i)
{
@@ -527,7 +527,7 @@ void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, EnumClassFlag<Update
data.FlushBits();
}
-void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
UpdateMask<7> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlocksMask(0), 1);
@@ -575,14 +575,14 @@ void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
data << uint32(Level);
data << uint32(AuraLevel);
data << uint32(KnowledgeLevel);
- data << uint32(DEBUGknowledgeWeek);
+ data << int32(DEBUGknowledgeWeek);
}
data << uint32(UnlockedEssences.size());
data << uint32(SelectedEssences.size());
data << uint32(UnlockedEssenceMilestones.size());
for (std::size_t i = 0; i < UnlockedEssences.size(); ++i)
{
- UnlockedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ UnlockedEssences[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < UnlockedEssenceMilestones.size(); ++i)
{
@@ -590,7 +590,7 @@ void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
}
for (std::size_t i = 0; i < SelectedEssences.size(); ++i)
{
- SelectedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ SelectedEssences[i].WriteCreate(data, owner, receiver);
}
}
@@ -635,7 +635,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes
{
if (UnlockedEssences.HasChanged(i))
{
- UnlockedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ UnlockedEssences[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -655,7 +655,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes
{
if (SelectedEssences.HasChanged(i))
{
- SelectedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ SelectedEssences[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -677,7 +677,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes
}
if (changesMask[8])
{
- data << uint32(DEBUGknowledgeWeek);
+ data << int32(DEBUGknowledgeWeek);
}
}
}
@@ -695,26 +695,26 @@ void AzeriteItemData::ClearChangesMask()
_changesMask.ResetAll();
}
-void UnitChannel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void UnitChannel::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(SpellXSpellVisualID);
}
-void UnitChannel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void UnitChannel::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(SpellXSpellVisualID);
}
-void VisibleItem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(ItemID);
data << uint16(ItemAppearanceModID);
data << uint16(ItemVisual);
}
-void VisibleItem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void VisibleItem::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
UpdateMask<4> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 4);
@@ -745,13 +745,13 @@ void VisibleItem::ClearChangesMask()
_changesMask.ResetAll();
}
-void PassiveSpellHistory::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void PassiveSpellHistory::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(AuraSpellID);
}
-void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(AuraSpellID);
@@ -787,7 +787,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << Target;
data << BattlePetCompanionGUID;
data << uint64(BattlePetDBID);
- ChannelData->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ ChannelData->WriteCreate(data, owner, receiver);
data << uint32(SummonedByHomeRealm);
data << uint8(Race);
data << uint8(ClassId);
@@ -822,7 +822,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(FactionTemplate, owner, receiver));
for (std::size_t i = 0; i < 3; ++i)
{
- VirtualItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ VirtualItems[i].WriteCreate(data, owner, receiver);
}
data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver));
data << uint32(Flags2);
@@ -940,7 +940,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << uint32(ChannelObjects.size());
for (std::size_t i = 0; i < PassiveSpells.size(); ++i)
{
- PassiveSpells[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ PassiveSpells[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < WorldEffects.size(); ++i)
{
@@ -1012,7 +1012,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask,
{
if (PassiveSpells.HasChanged(i))
{
- PassiveSpells[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ PassiveSpells[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -1102,7 +1102,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask,
}
if (changesMask[21])
{
- ChannelData->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ChannelData->WriteUpdate(data, owner, receiver);
}
if (changesMask[22])
{
@@ -1508,7 +1508,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask,
{
if (changesMask[143 + i])
{
- VirtualItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ VirtualItems[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -1693,21 +1693,22 @@ void UnitData::ClearChangesMask()
_changesMask.ResetAll();
}
-void QuestLog::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(QuestID);
data << uint32(StateFlags);
data << uint32(EndTime);
data << uint32(AcceptTime);
+ data << uint32(Field_10);
for (std::size_t i = 0; i < 24; ++i)
{
data << int16(ObjectiveProgress[i]);
}
}
-void QuestLog::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void QuestLog::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
- UpdateMask<30> const& changesMask = _changesMask;
+ UpdateMask<31> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlocksMask(0), 1);
if (changesMask.GetBlock(0))
data.WriteBits(changesMask.GetBlock(0), 32);
@@ -1731,12 +1732,16 @@ void QuestLog::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
{
data << uint32(AcceptTime);
}
+ if (changesMask[5])
+ {
+ data << uint32(Field_10);
+ }
}
- if (changesMask[5])
+ if (changesMask[6])
{
for (std::size_t i = 0; i < 24; ++i)
{
- if (changesMask[6 + i])
+ if (changesMask[7 + i])
{
data << int16(ObjectiveProgress[i]);
}
@@ -1750,11 +1755,12 @@ void QuestLog::ClearChangesMask()
Base::ClearChangesMask(StateFlags);
Base::ClearChangesMask(EndTime);
Base::ClearChangesMask(AcceptTime);
+ Base::ClearChangesMask(Field_10);
Base::ClearChangesMask(ObjectiveProgress);
_changesMask.ResetAll();
}
-void ArenaCooldown::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(Charges);
@@ -1765,7 +1771,7 @@ void ArenaCooldown::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag>
data << uint8(MaxCharges);
}
-void ArenaCooldown::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void ArenaCooldown::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
UpdateMask<8> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 8);
@@ -1844,14 +1850,15 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi
data << int32(GuildTimeStamp);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
{
- for (std::size_t i = 0; i < 100; ++i)
+ for (std::size_t i = 0; i < 125; ++i)
{
- QuestLog[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ QuestLog[i].WriteCreate(data, owner, receiver);
}
+ data << uint32(QuestSessionQuestLog.size());
}
for (std::size_t i = 0; i < 19; ++i)
{
- VisibleItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ VisibleItems[i].WriteCreate(data, owner, receiver);
}
data << int32(PlayerTitle);
data << int32(FakeInebriation);
@@ -1867,213 +1874,272 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi
data << uint32(ArenaCooldowns.size());
data << int32(Field_B0);
data << int32(Field_B4);
+ data << Field_F8;
+ data << int32(Field_108);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
+ {
+ for (std::size_t i = 0; i < QuestSessionQuestLog.size(); ++i)
+ {
+ QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
+ }
+ }
for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i)
{
- ArenaCooldowns[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ ArenaCooldowns[i].WriteCreate(data, owner, receiver);
+ }
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
+ {
+ data.WriteBit(HasQuestSession);
}
+ data.WriteBit(HasLevelLink);
+ data.FlushBits();
}
void PlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- UpdateMask<161> allowedMaskForTarget({ 0xFFFFFFFFu, 0x00000007u, 0x00000000u, 0x00000000u, 0xFFFFFF00u, 0x00000001u });
+ UpdateMask<192> allowedMaskForTarget({ 0xFFFFFFF5u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFF80u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver);
}
-void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
+void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
- allowedMaskForTarget |= { 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x000000FFu, 0x00000000u };
+ allowedMaskForTarget |= { 0x0000000Au, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000007Fu };
}
-void PlayerData::WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void PlayerData::WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
data.WriteBits(changesMask.GetBlocksMask(0), 6);
for (std::size_t i = 0; i < 6; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
+ bool hasQuestLogDynamicChangesMask = data.WriteBit(IsQuestLogDynamicChangesMask());
if (changesMask[0])
{
if (changesMask[1])
{
+ data.WriteBit(HasQuestSession);
+ }
+ if (changesMask[2])
+ {
+ data.WriteBit(HasLevelLink);
+ }
+ if (changesMask[3])
+ {
+ QuestSessionQuestLog.WriteUpdateMask(data);
+ }
+ if (changesMask[4])
+ {
ArenaCooldowns.WriteUpdateMask(data);
}
}
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[1])
+ if (changesMask[3])
+ {
+ for (std::size_t i = 0; i < QuestSessionQuestLog.size(); ++i)
+ {
+ if (QuestSessionQuestLog.HasChanged(i))
+ {
+ if (hasQuestLogDynamicChangesMask)
+ QuestSessionQuestLog[i].WriteUpdate(data, owner, receiver);
+ else
+ QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[4])
{
for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i)
{
if (ArenaCooldowns.HasChanged(i))
{
- ArenaCooldowns[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ArenaCooldowns[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[2])
+ if (changesMask[5])
{
data << DuelArbiter;
}
- if (changesMask[3])
+ if (changesMask[6])
{
data << WowAccount;
}
- if (changesMask[4])
+ if (changesMask[7])
{
data << LootTargetGUID;
}
- if (changesMask[5])
+ if (changesMask[8])
{
data << uint32(PlayerFlags);
}
- if (changesMask[6])
+ if (changesMask[9])
{
data << uint32(PlayerFlagsEx);
}
- if (changesMask[7])
+ if (changesMask[10])
{
data << uint32(GuildRankID);
}
- if (changesMask[8])
+ if (changesMask[11])
{
data << uint32(GuildDeleteDate);
}
- if (changesMask[9])
+ if (changesMask[12])
{
data << int32(GuildLevel);
}
- if (changesMask[10])
+ if (changesMask[13])
{
data << uint8(SkinID);
}
- if (changesMask[11])
+ if (changesMask[14])
{
data << uint8(FaceID);
}
- if (changesMask[12])
+ if (changesMask[15])
{
data << uint8(HairStyleID);
}
- if (changesMask[13])
+ if (changesMask[16])
{
data << uint8(HairColorID);
}
- if (changesMask[14])
+ if (changesMask[17])
{
data << uint8(FacialHairStyleID);
}
- if (changesMask[15])
+ if (changesMask[18])
{
data << uint8(PartyType);
}
- if (changesMask[16])
+ if (changesMask[19])
{
data << uint8(NativeSex);
}
- if (changesMask[17])
+ if (changesMask[20])
{
data << uint8(Inebriation);
}
- if (changesMask[18])
+ if (changesMask[21])
{
data << uint8(PvpTitle);
}
- if (changesMask[19])
+ if (changesMask[22])
{
data << uint8(ArenaFaction);
}
- if (changesMask[20])
+ if (changesMask[23])
{
data << uint32(DuelTeam);
}
- if (changesMask[21])
+ if (changesMask[24])
{
data << int32(GuildTimeStamp);
}
- if (changesMask[22])
+ if (changesMask[25])
{
data << int32(PlayerTitle);
}
- if (changesMask[23])
+ if (changesMask[26])
{
data << int32(FakeInebriation);
}
- if (changesMask[24])
+ if (changesMask[27])
{
data << uint32(VirtualPlayerRealm);
}
- if (changesMask[25])
+ if (changesMask[28])
{
data << uint32(CurrentSpecID);
}
- if (changesMask[26])
+ if (changesMask[29])
{
data << int32(TaxiMountAnimKitID);
}
- if (changesMask[27])
+ if (changesMask[30])
{
data << uint8(CurrentBattlePetBreedQuality);
}
- if (changesMask[28])
+ if (changesMask[31])
{
data << int32(HonorLevel);
}
- if (changesMask[29])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
{
data << int32(Field_B0);
}
- if (changesMask[30])
+ if (changesMask[34])
{
data << int32(Field_B4);
}
+ if (changesMask[35])
+ {
+ data << Field_F8;
+ }
+ if (changesMask[36])
+ {
+ data << int32(Field_108);
+ }
}
- if (changesMask[31])
+ if (changesMask[37])
{
for (std::size_t i = 0; i < 3; ++i)
{
- if (changesMask[32 + i])
+ if (changesMask[38 + i])
{
data << uint8(CustomDisplayOption[i]);
}
}
}
- if (changesMask[35])
+ if (changesMask[41])
{
- for (std::size_t i = 0; i < 100; ++i)
+ for (std::size_t i = 0; i < 125; ++i)
{
- if (changesMask[36 + i])
+ if (changesMask[42 + i])
{
- QuestLog[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ if (hasQuestLogDynamicChangesMask)
+ QuestLog[i].WriteUpdate(data, owner, receiver);
+ else
+ QuestLog[i].WriteCreate(data, owner, receiver);
}
}
}
- if (changesMask[136])
+ if (changesMask[167])
{
for (std::size_t i = 0; i < 19; ++i)
{
- if (changesMask[137 + i])
+ if (changesMask[168 + i])
{
- VisibleItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ VisibleItems[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[156])
+ if (changesMask[187])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[157 + i])
+ if (changesMask[188 + i])
{
data << float(AvgItemLevel[i]);
}
}
}
+ data.FlushBits();
}
void PlayerData::ClearChangesMask()
{
+ Base::ClearChangesMask(HasQuestSession);
+ Base::ClearChangesMask(HasLevelLink);
+ Base::ClearChangesMask(QuestSessionQuestLog);
Base::ClearChangesMask(ArenaCooldowns);
Base::ClearChangesMask(DuelArbiter);
Base::ClearChangesMask(WowAccount);
@@ -2104,6 +2170,8 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(HonorLevel);
Base::ClearChangesMask(Field_B0);
Base::ClearChangesMask(Field_B4);
+ Base::ClearChangesMask(Field_F8);
+ Base::ClearChangesMask(Field_108);
Base::ClearChangesMask(CustomDisplayOption);
Base::ClearChangesMask(QuestLog);
Base::ClearChangesMask(VisibleItems);
@@ -2111,7 +2179,7 @@ void PlayerData::ClearChangesMask()
_changesMask.ResetAll();
}
-void SkillInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SkillInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
for (std::size_t i = 0; i < 256; ++i)
{
@@ -2125,7 +2193,7 @@ void SkillInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fie
}
}
-void SkillInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SkillInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
UpdateMask<1793> const& changesMask = _changesMask;
for (std::size_t i = 0; i < 1; ++i)
@@ -2184,13 +2252,13 @@ void SkillInfo::ClearChangesMask()
_changesMask.ResetAll();
}
-void RestInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void RestInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << uint32(Threshold);
data << uint8(StateID);
}
-void RestInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void RestInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
UpdateMask<3> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 3);
@@ -2216,7 +2284,7 @@ void RestInfo::ClearChangesMask()
_changesMask.ResetAll();
}
-void PVPInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void PVPInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << uint32(Field_0);
data << uint32(Field_4);
@@ -2230,7 +2298,7 @@ void PVPInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> field
data.FlushBits();
}
-void PVPInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void PVPInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
UpdateMask<10> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 10);
@@ -2292,7 +2360,7 @@ void PVPInfo::ClearChangesMask()
_changesMask.ResetAll();
}
-void CharacterRestriction::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void CharacterRestriction::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(Field_0);
data << int32(Field_4);
@@ -2301,7 +2369,7 @@ void CharacterRestriction::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFie
data.FlushBits();
}
-void CharacterRestriction::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void CharacterRestriction::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(Field_0);
data << int32(Field_4);
@@ -2310,44 +2378,120 @@ void CharacterRestriction::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFie
data.FlushBits();
}
-void SpellPctModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SpellPctModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ModIndex);
data << float(ModifierValue);
data << int32(LabelID);
}
-void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ModIndex);
data << float(ModifierValue);
data << int32(LabelID);
}
-void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ModIndex);
data << int32(ModifierValue);
data << int32(LabelID);
}
-void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ModIndex);
data << int32(ModifierValue);
data << int32(LabelID);
}
-void Research::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int16(ResearchProjectID);
}
-void Research::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void Research::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int16(ResearchProjectID);
}
+void ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int32(QuestID);
+ data << uint32(ReplayTime);
+}
+
+void ReplayedQuest::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<3> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 3);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(QuestID);
+ }
+ if (changesMask[2])
+ {
+ data << uint32(ReplayTime);
+ }
+ }
+}
+
+void ReplayedQuest::ClearChangesMask()
+{
+ Base::ClearChangesMask(QuestID);
+ Base::ClearChangesMask(ReplayTime);
+ _changesMask.ResetAll();
+}
+
+void QuestSession::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << Owner;
+ for (std::size_t i = 0; i < 875; ++i)
+ {
+ data << uint64(QuestCompleted[i]);
+ }
+}
+
+void QuestSession::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<878> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlocksMask(0), 28);
+ for (std::size_t i = 0; i < 28; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << Owner;
+ }
+ }
+ if (changesMask[2])
+ {
+ for (std::size_t i = 0; i < 875; ++i)
+ {
+ if (changesMask[3 + i])
+ {
+ data << uint64(QuestCompleted[i]);
+ }
+ }
+ }
+}
+
+void QuestSession::ClearChangesMask()
+{
+ Base::ClearChangesMask(Owner);
+ Base::ClearChangesMask(QuestCompleted);
+ _changesMask.ResetAll();
+}
+
void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
for (std::size_t i = 0; i < 195; ++i)
@@ -2361,7 +2505,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << int32(XP);
data << int32(NextLevelXP);
data << int32(TrialXP);
- Skill->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Skill->WriteCreate(data, owner, receiver);
data << int32(CharacterPoints);
data << int32(MaxTalentTiers);
data << int32(TrackCreatureMask);
@@ -2398,7 +2542,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
}
for (std::size_t i = 0; i < 2; ++i)
{
- RestInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ RestInfo[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < 7; ++i)
{
@@ -2502,9 +2646,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << uint32(Research[i].size());
for (std::size_t j = 0; j < Research[i].size(); ++j)
{
- Research[i][j].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Research[i][j].WriteCreate(data, owner, receiver);
}
}
+ data << uint32(ReplayedQuests.size());
+ data << uint32(DisabledSpells.size());
for (std::size_t i = 0; i < KnownTitles.size(); ++i)
{
data << uint64(KnownTitles[i]);
@@ -2555,30 +2701,43 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
}
for (std::size_t i = 0; i < SpellPctModByLabel.size(); ++i)
{
- SpellPctModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ SpellPctModByLabel[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < SpellFlatModByLabel.size(); ++i)
{
- SpellFlatModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ SpellFlatModByLabel[i].WriteCreate(data, owner, receiver);
+ }
+ for (std::size_t i = 0; i < ReplayedQuests.size(); ++i)
+ {
+ ReplayedQuests[i].WriteCreate(data, owner, receiver);
+ }
+ for (std::size_t i = 0; i < DisabledSpells.size(); ++i)
+ {
+ data << int32(DisabledSpells[i]);
}
for (std::size_t i = 0; i < 6; ++i)
{
- PvpInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ PvpInfo[i].WriteCreate(data, owner, receiver);
}
data.WriteBit(BackpackAutoSortDisabled);
data.WriteBit(BankAutoSortDisabled);
data.WriteBit(SortBagsRightToLeft);
data.WriteBit(InsertItemsLeftToRight);
+ data.WriteBit(QuestSession.is_initialized());
for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i)
{
- CharacterRestrictions[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ CharacterRestrictions[i].WriteCreate(data, owner, receiver);
+ }
+ if (QuestSession.is_initialized())
+ {
+ QuestSession->WriteCreate(data, owner, receiver);
}
data.FlushBits();
}
void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- UpdateMask<1487> const& changesMask = _changesMask;
+ UpdateMask<1490> const& changesMask = _changesMask;
for (std::size_t i = 0; i < 1; ++i)
data << uint32(changesMask.GetBlocksMask(i));
data.WriteBits(changesMask.GetBlocksMask(1), 15);
@@ -2665,33 +2824,45 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
SpellFlatModByLabel.WriteUpdateMask(data);
}
}
- if (changesMask[20])
+ if (changesMask[22])
{
for (std::size_t i = 0; i < 1; ++i)
{
- if (changesMask[21 + i])
+ if (changesMask[23 + i])
{
Research[i].WriteUpdateMask(data);
}
}
}
- data.FlushBits();
- if (changesMask[20])
+ if (changesMask[22])
{
for (std::size_t i = 0; i < 1; ++i)
{
- if (changesMask[21 + i])
+ if (changesMask[23 + i])
{
for (std::size_t j = 0; j < Research[i].size(); ++j)
{
if (Research[i].HasChanged(j))
{
- Research[i][j].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ Research[i][j].WriteUpdate(data, owner, receiver);
}
}
}
}
}
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[20])
+ {
+ ReplayedQuests.WriteUpdateMask(data);
+ }
+ if (changesMask[21])
+ {
+ DisabledSpells.WriteUpdateMask(data);
+ }
+ }
+ data.FlushBits();
if (changesMask[0])
{
if (changesMask[5])
@@ -2820,7 +2991,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
{
if (SpellPctModByLabel.HasChanged(i))
{
- SpellPctModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ SpellPctModByLabel[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -2830,487 +3001,519 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
{
if (SpellFlatModByLabel.HasChanged(i))
{
- SpellFlatModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ SpellFlatModByLabel[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[17])
+ if (changesMask[20])
{
- for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i)
+ for (std::size_t i = 0; i < ReplayedQuests.size(); ++i)
{
- if (CharacterRestrictions.HasChanged(i))
+ if (ReplayedQuests.HasChanged(i))
{
- CharacterRestrictions[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ReplayedQuests[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[22])
+ if (changesMask[21])
{
- data << FarsightObject;
+ for (std::size_t i = 0; i < DisabledSpells.size(); ++i)
+ {
+ if (DisabledSpells.HasChanged(i))
+ {
+ data << int32(DisabledSpells[i]);
+ }
+ }
}
- if (changesMask[23])
+ if (changesMask[17])
{
- data << SummonedBattlePetGUID;
+ for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i)
+ {
+ if (CharacterRestrictions.HasChanged(i))
+ {
+ CharacterRestrictions[i].WriteUpdate(data, owner, receiver);
+ }
+ }
}
if (changesMask[24])
{
- data << uint64(Coinage);
+ data << FarsightObject;
}
if (changesMask[25])
{
- data << int32(XP);
+ data << SummonedBattlePetGUID;
}
if (changesMask[26])
{
- data << int32(NextLevelXP);
+ data << uint64(Coinage);
}
if (changesMask[27])
{
- data << int32(TrialXP);
+ data << int32(XP);
}
if (changesMask[28])
{
- Skill->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ data << int32(NextLevelXP);
}
if (changesMask[29])
{
- data << int32(CharacterPoints);
+ data << int32(TrialXP);
}
if (changesMask[30])
{
- data << int32(MaxTalentTiers);
+ Skill->WriteUpdate(data, owner, receiver);
}
if (changesMask[31])
{
- data << int32(TrackCreatureMask);
+ data << int32(CharacterPoints);
}
if (changesMask[32])
{
- data << float(MainhandExpertise);
+ data << int32(MaxTalentTiers);
}
if (changesMask[33])
{
- data << float(OffhandExpertise);
+ data << int32(TrackCreatureMask);
}
}
if (changesMask[34])
{
if (changesMask[35])
{
- data << float(RangedExpertise);
+ data << float(MainhandExpertise);
}
if (changesMask[36])
{
- data << float(CombatRatingExpertise);
+ data << float(OffhandExpertise);
}
if (changesMask[37])
{
- data << float(BlockPercentage);
+ data << float(RangedExpertise);
}
if (changesMask[38])
{
- data << float(DodgePercentage);
+ data << float(CombatRatingExpertise);
}
if (changesMask[39])
{
- data << float(DodgePercentageFromAttribute);
+ data << float(BlockPercentage);
}
if (changesMask[40])
{
- data << float(ParryPercentage);
+ data << float(DodgePercentage);
}
if (changesMask[41])
{
- data << float(ParryPercentageFromAttribute);
+ data << float(DodgePercentageFromAttribute);
}
if (changesMask[42])
{
- data << float(CritPercentage);
+ data << float(ParryPercentage);
}
if (changesMask[43])
{
- data << float(RangedCritPercentage);
+ data << float(ParryPercentageFromAttribute);
}
if (changesMask[44])
{
- data << float(OffhandCritPercentage);
+ data << float(CritPercentage);
}
if (changesMask[45])
{
- data << float(SpellCritPercentage);
+ data << float(RangedCritPercentage);
}
if (changesMask[46])
{
- data << int32(ShieldBlock);
+ data << float(OffhandCritPercentage);
}
if (changesMask[47])
{
- data << float(ShieldBlockCritPercentage);
+ data << float(SpellCritPercentage);
}
if (changesMask[48])
{
- data << float(Mastery);
+ data << int32(ShieldBlock);
}
if (changesMask[49])
{
- data << float(Speed);
+ data << float(ShieldBlockCritPercentage);
}
if (changesMask[50])
{
- data << float(Avoidance);
+ data << float(Mastery);
}
if (changesMask[51])
{
- data << float(Sturdiness);
+ data << float(Speed);
}
if (changesMask[52])
{
- data << int32(Versatility);
+ data << float(Avoidance);
}
if (changesMask[53])
{
- data << float(VersatilityBonus);
+ data << float(Sturdiness);
}
if (changesMask[54])
{
- data << float(PvpPowerDamage);
+ data << int32(Versatility);
}
if (changesMask[55])
{
- data << float(PvpPowerHealing);
+ data << float(VersatilityBonus);
}
if (changesMask[56])
{
- data << int32(ModHealingDonePos);
+ data << float(PvpPowerDamage);
}
if (changesMask[57])
{
- data << float(ModHealingPercent);
+ data << float(PvpPowerHealing);
}
if (changesMask[58])
{
- data << float(ModHealingDonePercent);
+ data << int32(ModHealingDonePos);
}
if (changesMask[59])
{
- data << float(ModPeriodicHealingDonePercent);
+ data << float(ModHealingPercent);
}
if (changesMask[60])
{
- data << float(ModSpellPowerPercent);
+ data << float(ModHealingDonePercent);
}
if (changesMask[61])
{
- data << float(ModResiliencePercent);
+ data << float(ModPeriodicHealingDonePercent);
}
if (changesMask[62])
{
- data << float(OverrideSpellPowerByAPPercent);
+ data << float(ModSpellPowerPercent);
}
if (changesMask[63])
{
- data << float(OverrideAPBySpellPowerPercent);
+ data << float(ModResiliencePercent);
}
if (changesMask[64])
{
- data << int32(ModTargetResistance);
+ data << float(OverrideSpellPowerByAPPercent);
}
if (changesMask[65])
{
- data << int32(ModTargetPhysicalResistance);
+ data << float(OverrideAPBySpellPowerPercent);
}
}
if (changesMask[66])
{
if (changesMask[67])
{
- data << int32(LocalFlags);
+ data << int32(ModTargetResistance);
}
if (changesMask[68])
{
- data << uint8(GrantableLevels);
+ data << int32(ModTargetPhysicalResistance);
}
if (changesMask[69])
{
- data << uint8(MultiActionBars);
+ data << int32(LocalFlags);
}
if (changesMask[70])
{
- data << uint8(LifetimeMaxRank);
+ data << uint8(GrantableLevels);
}
if (changesMask[71])
{
- data << uint8(NumRespecs);
+ data << uint8(MultiActionBars);
}
if (changesMask[72])
{
- data << uint32(PvpMedals);
+ data << uint8(LifetimeMaxRank);
}
if (changesMask[73])
{
- data << uint16(TodayHonorableKills);
+ data << uint8(NumRespecs);
}
if (changesMask[74])
{
- data << uint16(YesterdayHonorableKills);
+ data << uint32(PvpMedals);
}
if (changesMask[75])
{
- data << uint32(LifetimeHonorableKills);
+ data << uint16(TodayHonorableKills);
}
if (changesMask[76])
{
- data << int32(WatchedFactionIndex);
+ data << uint16(YesterdayHonorableKills);
}
if (changesMask[77])
{
- data << int32(MaxLevel);
+ data << uint32(LifetimeHonorableKills);
}
if (changesMask[78])
{
- data << int32(ScalingPlayerLevelDelta);
+ data << int32(WatchedFactionIndex);
}
if (changesMask[79])
{
- data << int32(MaxCreatureScalingLevel);
+ data << int32(MaxLevel);
}
if (changesMask[80])
{
- data << int32(PetSpellPower);
+ data << int32(ScalingPlayerLevelDelta);
}
if (changesMask[81])
{
- data << float(UiHitModifier);
+ data << int32(MaxCreatureScalingLevel);
}
if (changesMask[82])
{
- data << float(UiSpellHitModifier);
+ data << int32(PetSpellPower);
}
if (changesMask[83])
{
- data << int32(HomeRealmTimeOffset);
+ data << float(UiHitModifier);
}
if (changesMask[84])
{
- data << float(ModPetHaste);
+ data << float(UiSpellHitModifier);
}
if (changesMask[85])
{
- data << uint8(LocalRegenFlags);
+ data << int32(HomeRealmTimeOffset);
}
if (changesMask[86])
{
- data << uint8(AuraVision);
+ data << float(ModPetHaste);
}
if (changesMask[87])
{
- data << uint8(NumBackpackSlots);
+ data << uint8(LocalRegenFlags);
}
if (changesMask[88])
{
- data << int32(OverrideSpellsID);
+ data << uint8(AuraVision);
}
if (changesMask[89])
{
- data << int32(LfgBonusFactionID);
+ data << uint8(NumBackpackSlots);
}
if (changesMask[90])
{
- data << uint16(LootSpecID);
+ data << int32(OverrideSpellsID);
}
if (changesMask[91])
{
- data << uint32(OverrideZonePVPType);
+ data << int32(LfgBonusFactionID);
}
if (changesMask[92])
{
- data << int32(Honor);
+ data << uint16(LootSpecID);
}
if (changesMask[93])
{
- data << int32(HonorNextLevel);
+ data << uint32(OverrideZonePVPType);
}
if (changesMask[94])
{
- data << int32(PvpRewardAchieved);
+ data << int32(Honor);
}
if (changesMask[95])
{
- data << int32(PvpTierMaxFromWins);
+ data << int32(HonorNextLevel);
}
if (changesMask[96])
{
- data << int32(PvpLastWeeksRewardAchieved);
+ data << int32(PvpRewardAchieved);
}
if (changesMask[97])
{
- data << int32(PvpLastWeeksTierMaxFromWins);
+ data << int32(PvpTierMaxFromWins);
}
}
if (changesMask[98])
{
if (changesMask[99])
{
- data << int32(PvpLastWeeksRewardClaimed);
+ data << int32(PvpLastWeeksRewardAchieved);
}
if (changesMask[100])
{
+ data << int32(PvpLastWeeksTierMaxFromWins);
+ }
+ if (changesMask[101])
+ {
+ data << int32(PvpLastWeeksRewardClaimed);
+ }
+ if (changesMask[102])
+ {
data << uint8(NumBankSlots);
}
}
- if (changesMask[101])
+ data.FlushBits();
+ if (changesMask[98])
+ {
+ data.WriteBit(QuestSession.is_initialized());
+ if (changesMask[103])
+ {
+ if (QuestSession.is_initialized())
+ {
+ QuestSession->WriteUpdate(data, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[104])
{
for (std::size_t i = 0; i < 195; ++i)
{
- if (changesMask[102 + i])
+ if (changesMask[105 + i])
{
data << InvSlots[i];
}
}
}
- if (changesMask[297])
+ if (changesMask[300])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[298 + i])
+ if (changesMask[301 + i])
{
data << uint32(TrackResourceMask[i]);
}
}
}
- if (changesMask[300])
+ if (changesMask[303])
{
for (std::size_t i = 0; i < 192; ++i)
{
- if (changesMask[301 + i])
+ if (changesMask[304 + i])
{
data << uint64(ExploredZones[i]);
}
}
}
- if (changesMask[493])
+ if (changesMask[496])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[494 + i])
+ if (changesMask[497 + i])
{
- RestInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ RestInfo[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[496])
+ if (changesMask[499])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[497 + i])
+ if (changesMask[500 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[504 + i])
+ if (changesMask[507 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[511 + i])
+ if (changesMask[514 + i])
{
data << float(ModDamageDonePercent[i]);
}
}
}
- if (changesMask[518])
+ if (changesMask[521])
{
for (std::size_t i = 0; i < 3; ++i)
{
- if (changesMask[519 + i])
+ if (changesMask[522 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[522 + i])
+ if (changesMask[525 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[525])
+ if (changesMask[528])
{
for (std::size_t i = 0; i < 12; ++i)
{
- if (changesMask[526 + i])
+ if (changesMask[529 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[538 + i])
+ if (changesMask[541 + i])
{
data << uint32(BuybackTimestamp[i]);
}
}
}
- if (changesMask[550])
+ if (changesMask[553])
{
for (std::size_t i = 0; i < 32; ++i)
{
- if (changesMask[551 + i])
+ if (changesMask[554 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[590])
+ if (changesMask[593])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[591 + i])
+ if (changesMask[594 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[595])
+ if (changesMask[598])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[596 + i])
+ if (changesMask[599 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[598])
+ if (changesMask[601])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[599 + i])
+ if (changesMask[602 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[603])
+ if (changesMask[606])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[604 + i])
+ if (changesMask[607 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[611])
+ if (changesMask[614])
{
for (std::size_t i = 0; i < 875; ++i)
{
- if (changesMask[612 + i])
+ if (changesMask[615 + i])
{
data << uint64(QuestCompleted[i]);
}
}
}
- if (changesMask[583])
+ if (changesMask[586])
{
for (std::size_t i = 0; i < 6; ++i)
{
- if (changesMask[584 + i])
+ if (changesMask[587 + i])
{
- PvpInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ PvpInfo[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -3338,6 +3541,8 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(SelfResSpells);
Base::ClearChangesMask(SpellPctModByLabel);
Base::ClearChangesMask(SpellFlatModByLabel);
+ Base::ClearChangesMask(ReplayedQuests);
+ Base::ClearChangesMask(DisabledSpells);
Base::ClearChangesMask(CharacterRestrictions);
Base::ClearChangesMask(FarsightObject);
Base::ClearChangesMask(SummonedBattlePetGUID);
@@ -3415,6 +3620,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins);
Base::ClearChangesMask(PvpLastWeeksRewardClaimed);
Base::ClearChangesMask(NumBankSlots);
+ Base::ClearChangesMask(QuestSession);
Base::ClearChangesMask(InvSlots);
Base::ClearChangesMask(TrackResourceMask);
Base::ClearChangesMask(ExploredZones);
@@ -3804,7 +4010,7 @@ void CorpseData::ClearChangesMask()
_changesMask.ResetAll();
}
-void ScaleCurve::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
+void ScaleCurve::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
{
data << uint32(StartTimeOffset);
for (std::size_t i = 0; i < 2; ++i)
@@ -3816,7 +4022,7 @@ void ScaleCurve::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi
data.FlushBits();
}
-void ScaleCurve::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
+void ScaleCurve::WriteUpdate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
{
UpdateMask<7> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 7);
@@ -3864,7 +4070,7 @@ void ScaleCurve::ClearChangesMask()
void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
{
- OverrideScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ OverrideScaleCurve->WriteCreate(data, owner, receiver);
data << Caster;
data << uint32(Duration);
data << uint32(TimeToTarget);
@@ -3876,7 +4082,7 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
data << float(BoundsRadius2D);
data << uint32(DecalPropertiesID);
data << CreatingEffectGUID;
- ExtraScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ ExtraScaleCurve->WriteCreate(data, owner, receiver);
}
void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
@@ -3889,7 +4095,7 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
{
if (changesMask[1])
{
- OverrideScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ OverrideScaleCurve->WriteUpdate(data, owner, receiver);
}
if (changesMask[3])
{
@@ -3937,7 +4143,7 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
}
if (changesMask[2])
{
- ExtraScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ExtraScaleCurve->WriteUpdate(data, owner, receiver);
}
}
}
@@ -4004,7 +4210,7 @@ void SceneObjectData::ClearChangesMask()
_changesMask.ResetAll();
}
-void ConversationLine::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << int32(ConversationLineID);
data << uint32(StartTime);
@@ -4013,7 +4219,7 @@ void ConversationLine::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << uint8(Flags);
}
-void ConversationLine::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+void ConversationLine::WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << int32(ConversationLineID);
data << uint32(StartTime);
@@ -4022,7 +4228,7 @@ void ConversationLine::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << uint8(Flags);
}
-void ConversationActor::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+void ConversationActor::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << uint32(CreatureID);
data << uint32(CreatureDisplayInfoID);
@@ -4032,7 +4238,7 @@ void ConversationActor::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldF
data.FlushBits();
}
-void ConversationActor::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+void ConversationActor::WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << uint32(CreatureID);
data << uint32(CreatureDisplayInfoID);
@@ -4049,12 +4255,12 @@ void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << uint32(Field_1C);
for (std::size_t i = 0; i < Lines->size(); ++i)
{
- (*Lines)[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ (*Lines)[i].WriteCreate(data, owner, receiver);
}
data << uint32(Actors.size());
for (std::size_t i = 0; i < Actors.size(); ++i)
{
- Actors[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Actors[i].WriteCreate(data, owner, receiver);
}
}
@@ -4070,7 +4276,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data.WriteBits(Lines->size(), 32);
for (std::size_t i = 0; i < Lines->size(); ++i)
{
- (*Lines)[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ (*Lines)[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -4091,7 +4297,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
{
if (Actors.HasChanged(i))
{
- Actors[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ Actors[i].WriteUpdate(data, owner, receiver);
}
}
}
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 148cc41e842..b519b79a625 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -58,8 +58,8 @@ struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask
UpdateField<int16, 0, 3> Charges;
UpdateField<uint16, 0, 4> Inactive;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -69,8 +69,8 @@ struct ArtifactPower : public IsUpdateFieldStructureTag
uint8 PurchasedRank;
uint8 CurrentRankWithBonus;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
};
struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20>
@@ -79,8 +79,8 @@ struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20>
UpdateField<uint8, 0, 2> Context;
UpdateFieldArray<uint16, 16, 3, 4> BonusListIDs;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -88,8 +88,8 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40>
{
UpdateField<std::vector<int32>, 0, 1> BonusListIDs;
DynamicUpdateField<int32, 0, 2> Modifiers;
- DynamicUpdateField<ArtifactPower, 0, 3> ArtifactPowers;
- DynamicUpdateField<SocketedGem, 0, 4> Gems;
+ DynamicUpdateField<UF::ArtifactPower, 0, 3> ArtifactPowers;
+ DynamicUpdateField<UF::SocketedGem, 0, 4> Gems;
UpdateField<ObjectGuid, 0, 5> Owner;
UpdateField<ObjectGuid, 0, 6> ContainedIn;
UpdateField<ObjectGuid, 0, 7> Creator;
@@ -106,7 +106,7 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40>
UpdateField<uint8, 0, 18> ItemAppearanceModID;
UpdateField<uint32, 0, 19> Field_130;
UpdateFieldArray<int32, 5, 20, 21> SpellCharges;
- UpdateFieldArray<ItemEnchantment, 13, 26, 27> Enchantment;
+ UpdateFieldArray<UF::ItemEnchantment, 13, 26, 27> Enchantment;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
@@ -139,8 +139,8 @@ struct UnlockedAzeriteEssence : public IsUpdateFieldStructureTag
uint32 AzeriteEssenceID;
uint32 Rank;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
};
struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasChangesMask<7>
@@ -149,21 +149,21 @@ struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasCha
UpdateField<uint32, 0, 2> Enabled;
UpdateFieldArray<uint32, 3, 3, 4> AzeriteEssenceID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
void ClearChangesMask();
};
struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<9>
{
- DynamicUpdateField<UnlockedAzeriteEssence, 0, 1> UnlockedEssences;
+ DynamicUpdateField<UF::UnlockedAzeriteEssence, 0, 1> UnlockedEssences;
DynamicUpdateField<uint32, 0, 3> UnlockedEssenceMilestones;
- DynamicUpdateField<SelectedAzeriteEssences, 0, 2> SelectedEssences;
+ DynamicUpdateField<UF::SelectedAzeriteEssences, 0, 2> SelectedEssences;
UpdateField<uint64, 0, 4> Xp;
UpdateField<uint32, 0, 5> Level;
UpdateField<uint32, 0, 6> AuraLevel;
UpdateField<uint32, 0, 7> KnowledgeLevel;
- UpdateField<uint32, 0, 8> DEBUGknowledgeWeek;
+ UpdateField<int32, 0, 8> DEBUGknowledgeWeek;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
@@ -177,8 +177,8 @@ struct UnitChannel : public IsUpdateFieldStructureTag
int32 SpellID;
int32 SpellXSpellVisualID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
};
struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4>
@@ -187,8 +187,8 @@ struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4>
UpdateField<uint16, 0, 2> ItemAppearanceModID;
UpdateField<uint16, 0, 3> ItemVisual;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -197,14 +197,14 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag
int32 SpellID;
int32 AuraSpellID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
};
struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
{
UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
- DynamicUpdateField<PassiveSpellHistory, 0, 2> PassiveSpells;
+ DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells;
DynamicUpdateField<int32, 0, 3> WorldEffects;
DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects;
UpdateField<int32, 0, 5> DisplayID;
@@ -224,7 +224,7 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
UpdateField<ObjectGuid, 0, 18> Target;
UpdateField<ObjectGuid, 0, 19> BattlePetCompanionGUID;
UpdateField<uint64, 0, 20> BattlePetDBID;
- UpdateField<UnitChannel, 0, 21> ChannelData;
+ UpdateField<UF::UnitChannel, 0, 21> ChannelData;
UpdateField<uint32, 0, 22> SummonedByHomeRealm;
UpdateField<uint8, 0, 23> Race;
UpdateField<uint8, 0, 24> ClassId;
@@ -324,7 +324,7 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
UpdateFieldArray<int32, 6, 117, 124> MaxPower;
UpdateFieldArray<float, 6, 117, 130> PowerRegenFlatModifier;
UpdateFieldArray<float, 6, 117, 136> PowerRegenInterruptedFlatModifier;
- UpdateFieldArray<VisibleItem, 3, 142, 143> VirtualItems;
+ UpdateFieldArray<UF::VisibleItem, 3, 142, 143> VirtualItems;
UpdateFieldArray<uint32, 2, 146, 147> AttackRoundBaseTime;
UpdateFieldArray<int32, 4, 149, 150> Stats;
UpdateFieldArray<int32, 4, 149, 154> StatPosBuff;
@@ -341,16 +341,17 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
void ClearChangesMask();
};
-struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30>
+struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<31>
{
UpdateField<int32, 0, 1> QuestID;
UpdateField<uint32, 0, 2> StateFlags;
UpdateField<uint32, 0, 3> EndTime;
UpdateField<uint32, 0, 4> AcceptTime;
- UpdateFieldArray<int16, 24, 5, 6> ObjectiveProgress;
+ UpdateField<uint32, 0, 5> Field_10;
+ UpdateFieldArray<int16, 24, 6, 7> ObjectiveProgress;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -364,53 +365,59 @@ struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8
UpdateField<uint32, 0, 6> NextChargeTime;
UpdateField<uint8, 0, 7> MaxCharges;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
-struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<161>
-{
- DynamicUpdateField<ArenaCooldown, 0, 1> ArenaCooldowns;
- UpdateField<ObjectGuid, 0, 2> DuelArbiter;
- UpdateField<ObjectGuid, 0, 3> WowAccount;
- UpdateField<ObjectGuid, 0, 4> LootTargetGUID;
- UpdateField<uint32, 0, 5> PlayerFlags;
- UpdateField<uint32, 0, 6> PlayerFlagsEx;
- UpdateField<uint32, 0, 7> GuildRankID;
- UpdateField<uint32, 0, 8> GuildDeleteDate;
- UpdateField<int32, 0, 9> GuildLevel;
- UpdateField<uint8, 0, 10> SkinID;
- UpdateField<uint8, 0, 11> FaceID;
- UpdateField<uint8, 0, 12> HairStyleID;
- UpdateField<uint8, 0, 13> HairColorID;
- UpdateField<uint8, 0, 14> FacialHairStyleID;
- UpdateField<uint8, 0, 15> PartyType;
- UpdateField<uint8, 0, 16> NativeSex;
- UpdateField<uint8, 0, 17> Inebriation;
- UpdateField<uint8, 0, 18> PvpTitle;
- UpdateField<uint8, 0, 19> ArenaFaction;
- UpdateField<uint32, 0, 20> DuelTeam;
- UpdateField<int32, 0, 21> GuildTimeStamp;
- UpdateField<int32, 0, 22> PlayerTitle;
- UpdateField<int32, 0, 23> FakeInebriation;
- UpdateField<uint32, 0, 24> VirtualPlayerRealm;
- UpdateField<uint32, 0, 25> CurrentSpecID;
- UpdateField<int32, 0, 26> TaxiMountAnimKitID;
- UpdateField<uint8, 0, 27> CurrentBattlePetBreedQuality;
- UpdateField<int32, 0, 28> HonorLevel;
- UpdateField<int32, 0, 29> Field_B0;
- UpdateField<int32, 0, 30> Field_B4;
- UpdateFieldArray<uint8, 3, 31, 32> CustomDisplayOption;
- UpdateFieldArray<QuestLog, 100, 35, 36> QuestLog;
- UpdateFieldArray<VisibleItem, 19, 136, 137> VisibleItems;
- UpdateFieldArray<float, 4, 156, 157> AvgItemLevel;
+struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<192>
+{
+ UpdateField<bool, 0, 1> HasQuestSession;
+ UpdateField<bool, 0, 2> HasLevelLink;
+ DynamicUpdateField<UF::QuestLog, 0, 3> QuestSessionQuestLog;
+ DynamicUpdateField<UF::ArenaCooldown, 0, 4> ArenaCooldowns;
+ UpdateField<ObjectGuid, 0, 5> DuelArbiter;
+ UpdateField<ObjectGuid, 0, 6> WowAccount;
+ UpdateField<ObjectGuid, 0, 7> LootTargetGUID;
+ UpdateField<uint32, 0, 8> PlayerFlags;
+ UpdateField<uint32, 0, 9> PlayerFlagsEx;
+ UpdateField<uint32, 0, 10> GuildRankID;
+ UpdateField<uint32, 0, 11> GuildDeleteDate;
+ UpdateField<int32, 0, 12> GuildLevel;
+ UpdateField<uint8, 0, 13> SkinID;
+ UpdateField<uint8, 0, 14> FaceID;
+ UpdateField<uint8, 0, 15> HairStyleID;
+ UpdateField<uint8, 0, 16> HairColorID;
+ UpdateField<uint8, 0, 17> FacialHairStyleID;
+ UpdateField<uint8, 0, 18> PartyType;
+ UpdateField<uint8, 0, 19> NativeSex;
+ UpdateField<uint8, 0, 20> Inebriation;
+ UpdateField<uint8, 0, 21> PvpTitle;
+ UpdateField<uint8, 0, 22> ArenaFaction;
+ UpdateField<uint32, 0, 23> DuelTeam;
+ UpdateField<int32, 0, 24> GuildTimeStamp;
+ UpdateField<int32, 0, 25> PlayerTitle;
+ UpdateField<int32, 0, 26> FakeInebriation;
+ UpdateField<uint32, 0, 27> VirtualPlayerRealm;
+ UpdateField<uint32, 0, 28> CurrentSpecID;
+ UpdateField<int32, 0, 29> TaxiMountAnimKitID;
+ UpdateField<uint8, 0, 30> CurrentBattlePetBreedQuality;
+ UpdateField<int32, 0, 31> HonorLevel;
+ UpdateField<int32, 32, 33> Field_B0;
+ UpdateField<int32, 32, 34> Field_B4;
+ UpdateField<ObjectGuid, 32, 35> Field_F8;
+ UpdateField<int32, 32, 36> Field_108;
+ UpdateFieldArray<uint8, 3, 37, 38> CustomDisplayOption;
+ UpdateFieldArray<UF::QuestLog, 125, 41, 42> QuestLog;
+ UpdateFieldArray<UF::VisibleItem, 19, 167, 168> VisibleItems;
+ UpdateFieldArray<float, 4, 187, 188> AvgItemLevel;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
- void WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
+ void WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
+ bool IsQuestLogDynamicChangesMask() const { return false; } // bandwidth savings aren't worth the cpu time
};
struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793>
@@ -423,8 +430,8 @@ struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793>
UpdateFieldArray<int16, 256, 0, 1281> SkillTempBonus;
UpdateFieldArray<uint16, 256, 0, 1537> SkillPermBonus;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -433,8 +440,8 @@ struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
UpdateField<uint32, 0, 1> Threshold;
UpdateField<uint8, 0, 2> StateID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -450,8 +457,8 @@ struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10>
UpdateField<uint32, 0, 8> PvpTierID;
UpdateField<uint32, 0, 9> Field_20;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -462,8 +469,8 @@ struct CharacterRestriction : public IsUpdateFieldStructureTag
int32 Field_8;
uint32 Type;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
};
struct SpellPctModByLabel : public IsUpdateFieldStructureTag
@@ -472,8 +479,8 @@ struct SpellPctModByLabel : public IsUpdateFieldStructureTag
float ModifierValue;
int32 LabelID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
};
struct SpellFlatModByLabel : public IsUpdateFieldStructureTag
@@ -482,25 +489,45 @@ struct SpellFlatModByLabel : public IsUpdateFieldStructureTag
int32 ModifierValue;
int32 LabelID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
};
struct Research : public IsUpdateFieldStructureTag
{
int16 ResearchProjectID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1487>
+struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3>
+{
+ UpdateField<int32, 0, 1> QuestID;
+ UpdateField<uint32, 0, 2> ReplayTime;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct QuestSession : public IsUpdateFieldStructureTag, public HasChangesMask<878>
+{
+ UpdateField<ObjectGuid, 0, 1> Owner;
+ UpdateFieldArray<uint64, 875, 2, 3> QuestCompleted;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1490>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BankAutoSortDisabled;
UpdateField<bool, 0, 3> SortBagsRightToLeft;
UpdateField<bool, 0, 4> InsertItemsLeftToRight;
- UpdateFieldArray<DynamicUpdateField<Research, -1, -1>, 1, 20, 21> Research;
+ UpdateFieldArray<DynamicUpdateField<UF::Research, -1, -1>, 1, 22, 23> Research;
DynamicUpdateField<uint64, 0, 5> KnownTitles;
DynamicUpdateField<uint16, 0, 6> ResearchSites;
DynamicUpdateField<uint32, 0, 7> ResearchSiteProgress;
@@ -513,103 +540,106 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
DynamicUpdateField<uint32, 0, 14> Transmog;
DynamicUpdateField<int32, 0, 15> ConditionalTransmog;
DynamicUpdateField<int32, 0, 16> SelfResSpells;
- DynamicUpdateField<SpellPctModByLabel, 0, 18> SpellPctModByLabel;
- DynamicUpdateField<SpellFlatModByLabel, 0, 19> SpellFlatModByLabel;
- DynamicUpdateField<CharacterRestriction, 0, 17> CharacterRestrictions;
- UpdateField<ObjectGuid, 0, 22> FarsightObject;
- UpdateField<ObjectGuid, 0, 23> SummonedBattlePetGUID;
- UpdateField<uint64, 0, 24> Coinage;
- UpdateField<int32, 0, 25> XP;
- UpdateField<int32, 0, 26> NextLevelXP;
- UpdateField<int32, 0, 27> TrialXP;
- UpdateField<SkillInfo, 0, 28> Skill;
- UpdateField<int32, 0, 29> CharacterPoints;
- UpdateField<int32, 0, 30> MaxTalentTiers;
- UpdateField<int32, 0, 31> TrackCreatureMask;
- UpdateField<float, 0, 32> MainhandExpertise;
- UpdateField<float, 0, 33> OffhandExpertise;
- UpdateField<float, 34, 35> RangedExpertise;
- UpdateField<float, 34, 36> CombatRatingExpertise;
- UpdateField<float, 34, 37> BlockPercentage;
- UpdateField<float, 34, 38> DodgePercentage;
- UpdateField<float, 34, 39> DodgePercentageFromAttribute;
- UpdateField<float, 34, 40> ParryPercentage;
- UpdateField<float, 34, 41> ParryPercentageFromAttribute;
- UpdateField<float, 34, 42> CritPercentage;
- UpdateField<float, 34, 43> RangedCritPercentage;
- UpdateField<float, 34, 44> OffhandCritPercentage;
- UpdateField<float, 34, 45> SpellCritPercentage;
- UpdateField<int32, 34, 46> ShieldBlock;
- UpdateField<float, 34, 47> ShieldBlockCritPercentage;
- UpdateField<float, 34, 48> Mastery;
- UpdateField<float, 34, 49> Speed;
- UpdateField<float, 34, 50> Avoidance;
- UpdateField<float, 34, 51> Sturdiness;
- UpdateField<int32, 34, 52> Versatility;
- UpdateField<float, 34, 53> VersatilityBonus;
- UpdateField<float, 34, 54> PvpPowerDamage;
- UpdateField<float, 34, 55> PvpPowerHealing;
- UpdateField<int32, 34, 56> ModHealingDonePos;
- UpdateField<float, 34, 57> ModHealingPercent;
- UpdateField<float, 34, 58> ModHealingDonePercent;
- UpdateField<float, 34, 59> ModPeriodicHealingDonePercent;
- UpdateField<float, 34, 60> ModSpellPowerPercent;
- UpdateField<float, 34, 61> ModResiliencePercent;
- UpdateField<float, 34, 62> OverrideSpellPowerByAPPercent;
- UpdateField<float, 34, 63> OverrideAPBySpellPowerPercent;
- UpdateField<int32, 34, 64> ModTargetResistance;
- UpdateField<int32, 34, 65> ModTargetPhysicalResistance;
- UpdateField<int32, 66, 67> LocalFlags;
- UpdateField<uint8, 66, 68> GrantableLevels;
- UpdateField<uint8, 66, 69> MultiActionBars;
- UpdateField<uint8, 66, 70> LifetimeMaxRank;
- UpdateField<uint8, 66, 71> NumRespecs;
- UpdateField<uint32, 66, 72> PvpMedals;
- UpdateField<uint16, 66, 73> TodayHonorableKills;
- UpdateField<uint16, 66, 74> YesterdayHonorableKills;
- UpdateField<uint32, 66, 75> LifetimeHonorableKills;
- UpdateField<int32, 66, 76> WatchedFactionIndex;
- UpdateField<int32, 66, 77> MaxLevel;
- UpdateField<int32, 66, 78> ScalingPlayerLevelDelta;
- UpdateField<int32, 66, 79> MaxCreatureScalingLevel;
- UpdateField<int32, 66, 80> PetSpellPower;
- UpdateField<float, 66, 81> UiHitModifier;
- UpdateField<float, 66, 82> UiSpellHitModifier;
- UpdateField<int32, 66, 83> HomeRealmTimeOffset;
- UpdateField<float, 66, 84> ModPetHaste;
- UpdateField<uint8, 66, 85> LocalRegenFlags;
- UpdateField<uint8, 66, 86> AuraVision;
- UpdateField<uint8, 66, 87> NumBackpackSlots;
- UpdateField<int32, 66, 88> OverrideSpellsID;
- UpdateField<int32, 66, 89> LfgBonusFactionID;
- UpdateField<uint16, 66, 90> LootSpecID;
- UpdateField<uint32, 66, 91> OverrideZonePVPType;
- UpdateField<int32, 66, 92> Honor;
- UpdateField<int32, 66, 93> HonorNextLevel;
- UpdateField<int32, 66, 94> PvpRewardAchieved;
- UpdateField<int32, 66, 95> PvpTierMaxFromWins;
- UpdateField<int32, 66, 96> PvpLastWeeksRewardAchieved;
- UpdateField<int32, 66, 97> PvpLastWeeksTierMaxFromWins;
- UpdateField<int32, 98, 99> PvpLastWeeksRewardClaimed;
- UpdateField<uint8, 98, 100> NumBankSlots;
- UpdateFieldArray<ObjectGuid, 195, 101, 102> InvSlots;
- UpdateFieldArray<uint32, 2, 297, 298> TrackResourceMask;
- UpdateFieldArray<uint64, 192, 300, 301> ExploredZones;
- UpdateFieldArray<RestInfo, 2, 493, 494> RestInfo;
- UpdateFieldArray<int32, 7, 496, 497> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 496, 504> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 496, 511> ModDamageDonePercent;
- UpdateFieldArray<float, 3, 518, 519> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 518, 522> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 525, 526> BuybackPrice;
- UpdateFieldArray<uint32, 12, 525, 538> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 550, 551> CombatRatings;
- UpdateFieldArray<PVPInfo, 6, 583, 584> PvpInfo;
- UpdateFieldArray<uint32, 4, 590, 591> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 595, 596> ProfessionSkillLine;
- UpdateFieldArray<uint32, 4, 598, 599> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 603, 604> BankBagSlotFlags;
- UpdateFieldArray<uint64, 875, 611, 612> QuestCompleted;
+ DynamicUpdateField<UF::SpellPctModByLabel, 0, 18> SpellPctModByLabel;
+ DynamicUpdateField<UF::SpellFlatModByLabel, 0, 19> SpellFlatModByLabel;
+ DynamicUpdateField<UF::ReplayedQuest, 0, 20> ReplayedQuests;
+ DynamicUpdateField<int32, 0, 21> DisabledSpells;
+ DynamicUpdateField<UF::CharacterRestriction, 0, 17> CharacterRestrictions;
+ UpdateField<ObjectGuid, 0, 24> FarsightObject;
+ UpdateField<ObjectGuid, 0, 25> SummonedBattlePetGUID;
+ UpdateField<uint64, 0, 26> Coinage;
+ UpdateField<int32, 0, 27> XP;
+ UpdateField<int32, 0, 28> NextLevelXP;
+ UpdateField<int32, 0, 29> TrialXP;
+ UpdateField<UF::SkillInfo, 0, 30> Skill;
+ UpdateField<int32, 0, 31> CharacterPoints;
+ UpdateField<int32, 0, 32> MaxTalentTiers;
+ UpdateField<int32, 0, 33> TrackCreatureMask;
+ UpdateField<float, 34, 35> MainhandExpertise;
+ UpdateField<float, 34, 36> OffhandExpertise;
+ UpdateField<float, 34, 37> RangedExpertise;
+ UpdateField<float, 34, 38> CombatRatingExpertise;
+ UpdateField<float, 34, 39> BlockPercentage;
+ UpdateField<float, 34, 40> DodgePercentage;
+ UpdateField<float, 34, 41> DodgePercentageFromAttribute;
+ UpdateField<float, 34, 42> ParryPercentage;
+ UpdateField<float, 34, 43> ParryPercentageFromAttribute;
+ UpdateField<float, 34, 44> CritPercentage;
+ UpdateField<float, 34, 45> RangedCritPercentage;
+ UpdateField<float, 34, 46> OffhandCritPercentage;
+ UpdateField<float, 34, 47> SpellCritPercentage;
+ UpdateField<int32, 34, 48> ShieldBlock;
+ UpdateField<float, 34, 49> ShieldBlockCritPercentage;
+ UpdateField<float, 34, 50> Mastery;
+ UpdateField<float, 34, 51> Speed;
+ UpdateField<float, 34, 52> Avoidance;
+ UpdateField<float, 34, 53> Sturdiness;
+ UpdateField<int32, 34, 54> Versatility;
+ UpdateField<float, 34, 55> VersatilityBonus;
+ UpdateField<float, 34, 56> PvpPowerDamage;
+ UpdateField<float, 34, 57> PvpPowerHealing;
+ UpdateField<int32, 34, 58> ModHealingDonePos;
+ UpdateField<float, 34, 59> ModHealingPercent;
+ UpdateField<float, 34, 60> ModHealingDonePercent;
+ UpdateField<float, 34, 61> ModPeriodicHealingDonePercent;
+ UpdateField<float, 34, 62> ModSpellPowerPercent;
+ UpdateField<float, 34, 63> ModResiliencePercent;
+ UpdateField<float, 34, 64> OverrideSpellPowerByAPPercent;
+ UpdateField<float, 34, 65> OverrideAPBySpellPowerPercent;
+ UpdateField<int32, 66, 67> ModTargetResistance;
+ UpdateField<int32, 66, 68> ModTargetPhysicalResistance;
+ UpdateField<int32, 66, 69> LocalFlags;
+ UpdateField<uint8, 66, 70> GrantableLevels;
+ UpdateField<uint8, 66, 71> MultiActionBars;
+ UpdateField<uint8, 66, 72> LifetimeMaxRank;
+ UpdateField<uint8, 66, 73> NumRespecs;
+ UpdateField<uint32, 66, 74> PvpMedals;
+ UpdateField<uint16, 66, 75> TodayHonorableKills;
+ UpdateField<uint16, 66, 76> YesterdayHonorableKills;
+ UpdateField<uint32, 66, 77> LifetimeHonorableKills;
+ UpdateField<int32, 66, 78> WatchedFactionIndex;
+ UpdateField<int32, 66, 79> MaxLevel;
+ UpdateField<int32, 66, 80> ScalingPlayerLevelDelta;
+ UpdateField<int32, 66, 81> MaxCreatureScalingLevel;
+ UpdateField<int32, 66, 82> PetSpellPower;
+ UpdateField<float, 66, 83> UiHitModifier;
+ UpdateField<float, 66, 84> UiSpellHitModifier;
+ UpdateField<int32, 66, 85> HomeRealmTimeOffset;
+ UpdateField<float, 66, 86> ModPetHaste;
+ UpdateField<uint8, 66, 87> LocalRegenFlags;
+ UpdateField<uint8, 66, 88> AuraVision;
+ UpdateField<uint8, 66, 89> NumBackpackSlots;
+ UpdateField<int32, 66, 90> OverrideSpellsID;
+ UpdateField<int32, 66, 91> LfgBonusFactionID;
+ UpdateField<uint16, 66, 92> LootSpecID;
+ UpdateField<uint32, 66, 93> OverrideZonePVPType;
+ UpdateField<int32, 66, 94> Honor;
+ UpdateField<int32, 66, 95> HonorNextLevel;
+ UpdateField<int32, 66, 96> PvpRewardAchieved;
+ UpdateField<int32, 66, 97> PvpTierMaxFromWins;
+ UpdateField<int32, 98, 99> PvpLastWeeksRewardAchieved;
+ UpdateField<int32, 98, 100> PvpLastWeeksTierMaxFromWins;
+ UpdateField<int32, 98, 101> PvpLastWeeksRewardClaimed;
+ UpdateField<uint8, 98, 102> NumBankSlots;
+ OptionalUpdateField<UF::QuestSession, 98, 103> QuestSession;
+ UpdateFieldArray<ObjectGuid, 195, 104, 105> InvSlots;
+ UpdateFieldArray<uint32, 2, 300, 301> TrackResourceMask;
+ UpdateFieldArray<uint64, 192, 303, 304> ExploredZones;
+ UpdateFieldArray<UF::RestInfo, 2, 496, 497> RestInfo;
+ UpdateFieldArray<int32, 7, 499, 500> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 499, 507> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 499, 514> ModDamageDonePercent;
+ UpdateFieldArray<float, 3, 521, 522> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 521, 525> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 528, 529> BuybackPrice;
+ UpdateFieldArray<uint32, 12, 528, 541> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 553, 554> CombatRatings;
+ UpdateFieldArray<UF::PVPInfo, 6, 586, 587> PvpInfo;
+ UpdateFieldArray<uint32, 4, 593, 594> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 598, 599> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 4, 601, 602> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 606, 607> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 875, 614, 615> QuestCompleted;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
@@ -692,15 +722,15 @@ struct ScaleCurve : public IsUpdateFieldStructureTag, public HasChangesMask<7>
UpdateField<uint32, 0, 3> ParameterCurve;
UpdateFieldArray<TaggedPosition<Position::XY>, 2, 4, 5> Points;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
void ClearChangesMask();
};
struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<14>
{
- UpdateField<ScaleCurve, 0, 1> OverrideScaleCurve;
- UpdateField<ScaleCurve, 0, 2> ExtraScaleCurve;
+ UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve;
+ UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve;
UpdateField<ObjectGuid, 0, 3> Caster;
UpdateField<uint32, 0, 4> Duration;
UpdateField<uint32, 0, 5> TimeToTarget;
@@ -738,8 +768,8 @@ struct ConversationLine : public IsUpdateFieldStructureTag
uint8 ActorIndex;
uint8 Flags;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
};
struct ConversationActor : public IsUpdateFieldStructureTag
@@ -750,14 +780,14 @@ struct ConversationActor : public IsUpdateFieldStructureTag
int32 Field_18;
uint32 Type;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
};
struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<5>
{
- UpdateField<std::vector<ConversationLine>, 0, 1> Lines;
- DynamicUpdateField<ConversationActor, 0, 2> Actors;
+ UpdateField<std::vector<UF::ConversationLine>, 0, 1> Lines;
+ DynamicUpdateField<UF::ConversationActor, 0, 2> Actors;
UpdateField<int32, 0, 3> LastLineEndTime;
UpdateField<uint32, 0, 4> Field_1C;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 3d2acb15a7c..6b1d82452d7 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -20062,16 +20062,16 @@ void Player::SaveToDB(bool create /*=false*/)
{
if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
{
- ss << item->GetTemplate()->GetInventoryType() << ' ' << item->GetDisplayId(this) << ' ';
+ ss << uint32(item->GetTemplate()->GetInventoryType()) << ' ' << item->GetDisplayId(this) << ' ';
if (SpellItemEnchantmentEntry const* enchant = sSpellItemEnchantmentStore.LookupEntry(item->GetVisibleEnchantmentId(this)))
ss << enchant->ItemVisual;
else
ss << '0';
- ss << ' ';
+ ss << ' ' << uint32(sItemStore.AssertEntry(item->GetVisibleEntry(this))->SubclassID) << ' ';
}
else
- ss << "0 0 0 ";
+ ss << "0 0 0 0 ";
}
stmt->setString(index++, ss.str());
@@ -20212,16 +20212,16 @@ void Player::SaveToDB(bool create /*=false*/)
{
if (Item* item = GetItemByPos(INVENTORY_SLOT_BAG_0, i))
{
- ss << item->GetTemplate()->GetInventoryType() << ' ' << item->GetDisplayId(this) << ' ';
+ ss << uint32(item->GetTemplate()->GetInventoryType()) << ' ' << item->GetDisplayId(this) << ' ';
if (SpellItemEnchantmentEntry const* enchant = sSpellItemEnchantmentStore.LookupEntry(item->GetVisibleEnchantmentId(this)))
ss << enchant->ItemVisual;
else
ss << '0';
- ss << ' ';
+ ss << ' ' << uint32(sItemStore.AssertEntry(item->GetVisibleEntry(this))->SubclassID) << ' ';
}
else
- ss << "0 0 0 ";
+ ss << "0 0 0 0 ";
}
stmt->setString(index++, ss.str());
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index f17e852fa9e..ac4120e5632 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -3907,9 +3907,9 @@ void ObjectMgr::LoadQuests()
"RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, "
//96 97 98 99 100 101 102 103
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, "
- //104 105 106 107 108 109 110 111
- "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, "
- //112 113 114 115 116 117 118 119 120
+ //104 105 106 107 108 109 110 111 112
+ "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, QuestSessionBonus, "
+ //113 114 115 116 117 118 119 120 121
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog"
" FROM quest_template");
if (!result)
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 18419eae7ea..2cbae0cd21b 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -1399,7 +1399,7 @@ void Guild::SendGuildRankInfo(WorldSession* session) const
WorldPackets::Guild::GuildRankData rankData;
- rankData.RankID = uint32(rankInfo->GetId());
+ rankData.RankID = rankInfo->GetId();
rankData.RankOrder = uint32(i);
rankData.Flags = rankInfo->GetRights();
rankData.WithdrawGoldLimit = (rankInfo->GetId() == GR_GUILDMASTER ? (-1) : int32(rankInfo->GetBankMoneyPerDay() / GOLD));
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 4861bbdeeb8..f42212f2aba 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -314,20 +314,24 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
TC_LOG_INFO("network", "Loading char guid %s from account %u.", charInfo.Guid.ToString().c_str(), GetAccountId());
- if (!Player::ValidateAppearance(charInfo.Race, charInfo.Class, charInfo.Sex, charInfo.HairStyle, charInfo.HairColor, charInfo.Face, charInfo.FacialHair, charInfo.Skin, charInfo.CustomDisplay))
+ if (!Player::ValidateAppearance(charInfo.RaceID, charInfo.ClassID, charInfo.SexID, charInfo.HairStyle, charInfo.HairColor, charInfo.FaceID, charInfo.FacialHair, charInfo.SkinID, charInfo.CustomDisplay))
{
TC_LOG_ERROR("entities.player.loading", "Player %s has wrong Appearance values (Hair/Skin/Color), forcing recustomize", charInfo.Guid.ToString().c_str());
// Make sure customization always works properly - send all zeroes instead
- charInfo.Skin = 0, charInfo.Face = 0, charInfo.HairStyle = 0, charInfo.HairColor = 0, charInfo.FacialHair = 0;
+ charInfo.SkinID = 0;
+ charInfo.FaceID = 0;
+ charInfo.HairStyle = 0;
+ charInfo.HairColor = 0;
+ charInfo.FacialHair = 0;
- if (!(charInfo.CustomizationFlag == CHAR_CUSTOMIZE_FLAG_CUSTOMIZE))
+ if (!(charInfo.Flags2 == CHAR_CUSTOMIZE_FLAG_CUSTOMIZE))
{
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG);
stmt->setUInt16(0, uint16(AT_LOGIN_CUSTOMIZE));
stmt->setUInt64(1, charInfo.Guid.GetCounter());
CharacterDatabase.Execute(stmt);
- charInfo.CustomizationFlag = CHAR_CUSTOMIZE_FLAG_CUSTOMIZE;
+ charInfo.Flags2 = CHAR_CUSTOMIZE_FLAG_CUSTOMIZE;
}
}
@@ -336,9 +340,9 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
_legitCharacters.insert(charInfo.Guid);
if (!sCharacterCache->HasCharacterCacheEntry(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet.
- sCharacterCache->AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.Sex, charInfo.Race, charInfo.Class, charInfo.Level, false);
+ sCharacterCache->AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.SexID, charInfo.RaceID, charInfo.ClassID, charInfo.ExperienceLevel, false);
- if (charInfo.Class == CLASS_DEMON_HUNTER)
+ if (charInfo.ClassID == CLASS_DEMON_HUNTER)
demonHunterCount++;
if (demonHunterCount >= sWorld->getIntConfig(CONFIG_DEMON_HUNTERS_PER_REALM) && !canAlwaysCreateDemonHunter)
@@ -346,7 +350,7 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result)
else
charEnum.HasDemonHunterOnRealm = false;
- charEnum.MaxCharacterLevel = std::max<int32>(charEnum.MaxCharacterLevel, charInfo.Level);
+ charEnum.MaxCharacterLevel = std::max<int32>(charEnum.MaxCharacterLevel, charInfo.ExperienceLevel);
}
while (result->NextRow());
}
@@ -402,7 +406,7 @@ void WorldSession::HandleCharUndeleteEnum(PreparedQueryResult result)
TC_LOG_INFO("network", "Loading undeleted char guid %s from account %u.", charInfo.Guid.ToString().c_str(), GetAccountId());
if (!sCharacterCache->HasCharacterCacheEntry(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet.
- sCharacterCache->AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.Sex, charInfo.Race, charInfo.Class, charInfo.Level, true);
+ sCharacterCache->AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.SexID, charInfo.RaceID, charInfo.ClassID, charInfo.ExperienceLevel, true);
charEnum.Characters.emplace_back(charInfo);
}
@@ -1152,7 +1156,6 @@ void WorldSession::SendFeatureSystemStatus()
features.CfgRealmID = 2;
features.CfgRealmRecID = 0;
features.TokenPollTimeSeconds = 300;
- features.TokenRedeemIndex = 0;
features.VoiceEnabled = false;
features.BrowserEnabled = false; // Has to be false, otherwise client will crash if "Customer Support" is opened
diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp
index 54a84e9e66a..3ad77877823 100644
--- a/src/server/game/Handlers/LFGHandler.cpp
+++ b/src/server/game/Handlers/LFGHandler.cpp
@@ -277,6 +277,7 @@ void WorldSession::SendLfgUpdateStatus(lfg::LfgUpdateData const& updateData, boo
lfgUpdateStatus.Joined = join;
lfgUpdateStatus.LfgJoined = updateData.updateType != lfg::LFG_UPDATETYPE_REMOVED_FROM_QUEUE;
lfgUpdateStatus.Queued = queued;
+ lfgUpdateStatus.QueueMapID = sLFGMgr->GetDungeonMapId(_player->GetGUID());
SendPacket(lfgUpdateStatus.Write());
}
diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp
index bca194591fe..fd79dfadd4e 100644
--- a/src/server/game/Quests/QuestDef.cpp
+++ b/src/server/game/Quests/QuestDef.cpp
@@ -128,16 +128,17 @@ Quest::Quest(Field* questRecord)
TreasurePickerID = questRecord[109].GetInt32();
Expansion = questRecord[110].GetInt32();
ManagedWorldStateID = questRecord[111].GetInt32();
-
- LogTitle = questRecord[112].GetString();
- LogDescription = questRecord[113].GetString();
- QuestDescription = questRecord[114].GetString();
- AreaDescription = questRecord[115].GetString();
- PortraitGiverText = questRecord[116].GetString();
- PortraitGiverName = questRecord[117].GetString();
- PortraitTurnInText = questRecord[118].GetString();
- PortraitTurnInName = questRecord[119].GetString();
- QuestCompletionLog = questRecord[120].GetString();
+ QuestSessionBonus = questRecord[112].GetInt32();
+
+ LogTitle = questRecord[113].GetString();
+ LogDescription = questRecord[114].GetString();
+ QuestDescription = questRecord[115].GetString();
+ AreaDescription = questRecord[116].GetString();
+ PortraitGiverText = questRecord[117].GetString();
+ PortraitGiverName = questRecord[118].GetString();
+ PortraitTurnInText = questRecord[119].GetString();
+ PortraitTurnInName = questRecord[120].GetString();
+ QuestCompletionLog = questRecord[121].GetString();
for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i)
{
@@ -547,6 +548,8 @@ WorldPacket Quest::BuildQueryData(LocaleConstant loc) const
response.Info.AllowableRaces = GetAllowableRaces();
response.Info.TreasurePickerID = GetTreasurePickerId();
response.Info.Expansion = GetExpansion();
+ response.Info.ManagedWorldStateID = GetManagedWorldStateId();
+ response.Info.QuestSessionBonus = 0; //GetQuestSessionBonus(); // this is only sent while quest session is active
for (QuestObjective const& questObjective : GetObjectives())
{
diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h
index e4eb5eadc15..2e9bf8878ac 100644
--- a/src/server/game/Quests/QuestDef.h
+++ b/src/server/game/Quests/QuestDef.h
@@ -443,6 +443,7 @@ class TC_GAME_API Quest
int32 GetTreasurePickerId() const { return TreasurePickerID; }
int32 GetExpansion() const { return Expansion; }
int32 GetManagedWorldStateId() const { return ManagedWorldStateID; }
+ int32 GetQuestSessionBonus() const { return QuestSessionBonus; }
uint32 GetQuestGiverPortrait() const { return QuestGiverPortrait; }
int32 GetQuestGiverPortraitMount() const { return QuestGiverPortraitMount; }
uint32 GetQuestTurnInPortrait() const { return QuestTurnInPortrait; }
@@ -545,6 +546,7 @@ class TC_GAME_API Quest
int32 TreasurePickerID;
int32 Expansion;
int32 ManagedWorldStateID;
+ int32 QuestSessionBonus;
QuestObjectives Objectives;
std::string LogTitle;
std::string LogDescription;
diff --git a/src/server/game/Server/Packets/AchievementPackets.cpp b/src/server/game/Server/Packets/AchievementPackets.cpp
index b991d41fe20..2cfe1c35780 100644
--- a/src/server/game/Server/Packets/AchievementPackets.cpp
+++ b/src/server/game/Server/Packets/AchievementPackets.cpp
@@ -36,7 +36,12 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Achievement::CriteriaProg
data << uint32(criteria.TimeFromStart);
data << uint32(criteria.TimeFromCreate);
data.WriteBits(criteria.Flags, 4);
+ data.WriteBit(criteria.RafAcceptanceID.is_initialized());
data.FlushBits();
+
+ if (criteria.RafAcceptanceID)
+ data << uint64(*criteria.RafAcceptanceID);
+
return data;
}
diff --git a/src/server/game/Server/Packets/AchievementPackets.h b/src/server/game/Server/Packets/AchievementPackets.h
index 88199f2aaad..9e2d174182d 100644
--- a/src/server/game/Server/Packets/AchievementPackets.h
+++ b/src/server/game/Server/Packets/AchievementPackets.h
@@ -43,6 +43,7 @@ namespace WorldPackets
time_t Date = time_t(0);
uint32 TimeFromStart = 0;
uint32 TimeFromCreate = 0;
+ Optional<uint64> RafAcceptanceID;
};
struct AllAchievements
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp
index 3c66cbc4853..2f00637e50d 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.cpp
+++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp
@@ -64,6 +64,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData:
return data;
}
+ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData::PVPMatchPlayerPVPStat const& pvpStat)
+{
+ data << int32(pvpStat.PvpStatID);
+ data << int32(pvpStat.PvpStatValue);
+ return data;
+}
+
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData::PVPMatchPlayerStatistics const& playerData)
{
data << playerData.PlayerGUID;
@@ -77,8 +84,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData:
data << int32(playerData.Class);
data << int32(playerData.CreatureID);
data << int32(playerData.HonorLevel);
- if (!playerData.Stats.empty())
- data.append(playerData.Stats.data(), playerData.Stats.size());
+ for (WorldPackets::Battleground::PVPLogData::PVPMatchPlayerPVPStat const& pvpStat : playerData.Stats)
+ data << pvpStat;
data.WriteBit(playerData.Faction != 0);
data.WriteBit(playerData.IsInWorld);
diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h
index d7084704b41..9f874005a3f 100644
--- a/src/server/game/Server/Packets/BattlegroundPackets.h
+++ b/src/server/game/Server/Packets/BattlegroundPackets.h
@@ -110,6 +110,15 @@ namespace WorldPackets
uint32 ContributionPoints = 0;
};
+ struct PVPMatchPlayerPVPStat
+ {
+ PVPMatchPlayerPVPStat() : PvpStatID(0), PvpStatValue(0) { }
+ PVPMatchPlayerPVPStat(int32 pvpStatID, int32 pvpStatValue) : PvpStatID(pvpStatID), PvpStatValue(pvpStatValue) { }
+
+ int32 PvpStatID;
+ int32 PvpStatValue;
+ };
+
struct PVPMatchPlayerStatistics
{
ObjectGuid PlayerGUID;
@@ -123,7 +132,7 @@ namespace WorldPackets
Optional<int32> RatingChange;
Optional<uint32> PreMatchMMR;
Optional<int32> MmrChange;
- std::vector<int32> Stats;
+ std::vector<PVPMatchPlayerPVPStat> Stats;
int32 PrimaryTalentTree = 0;
int32 Sex = 0;
int32 Race = 0;
diff --git a/src/server/game/Server/Packets/ChannelPackets.cpp b/src/server/game/Server/Packets/ChannelPackets.cpp
index e9ce0b17b4a..2123c524580 100644
--- a/src/server/game/Server/Packets/ChannelPackets.cpp
+++ b/src/server/game/Server/Packets/ChannelPackets.cpp
@@ -69,6 +69,7 @@ WorldPacket const* WorldPackets::Channel::ChannelNotifyJoined::Write()
_worldPacket << uint32(_ChannelFlags);
_worldPacket << int32(ChatChannelID);
_worldPacket << uint64(InstanceID);
+ _worldPacket << ChannelGUID;
_worldPacket.WriteString(_Channel);
_worldPacket.WriteString(ChannelWelcomeMsg);
diff --git a/src/server/game/Server/Packets/ChannelPackets.h b/src/server/game/Server/Packets/ChannelPackets.h
index 5df0cb9e5eb..07ec57c3c80 100644
--- a/src/server/game/Server/Packets/ChannelPackets.h
+++ b/src/server/game/Server/Packets/ChannelPackets.h
@@ -80,6 +80,7 @@ namespace WorldPackets
int32 InstanceID = 0;
uint32 _ChannelFlags = 0; ///< @see enum ChannelFlags
std::string _Channel; ///< Channel Name
+ ObjectGuid ChannelGUID;
};
class ChannelNotifyLeft final : public ServerPacket
diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp
index 981ac12d226..9a909f1b890 100644
--- a/src/server/game/Server/Packets/CharacterPackets.cpp
+++ b/src/server/game/Server/Packets/CharacterPackets.cpp
@@ -42,24 +42,24 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
Guid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64());
Name = fields[1].GetString();
- Race = fields[2].GetUInt8();
- Class = fields[3].GetUInt8();
- Sex = fields[4].GetUInt8();
- Skin = fields[5].GetUInt8();
- Face = fields[6].GetUInt8();
+ RaceID = fields[2].GetUInt8();
+ ClassID = fields[3].GetUInt8();
+ SexID = fields[4].GetUInt8();
+ SkinID = fields[5].GetUInt8();
+ FaceID = fields[6].GetUInt8();
HairStyle = fields[7].GetUInt8();
HairColor = fields[8].GetUInt8();
FacialHair = fields[9].GetUInt8();
CustomDisplay[0] = fields[10].GetUInt8();
CustomDisplay[1] = fields[11].GetUInt8();
CustomDisplay[2] = fields[12].GetUInt8();
- Level = fields[13].GetUInt8();
- ZoneId = int32(fields[14].GetUInt16());
- MapId = int32(fields[15].GetUInt16());
- PreLoadPosition = Position(fields[16].GetFloat(), fields[17].GetFloat(), fields[18].GetFloat());
+ ExperienceLevel = fields[13].GetUInt8();
+ ZoneID = int32(fields[14].GetUInt16());
+ MapID = int32(fields[15].GetUInt16());
+ PreloadPos = Position(fields[16].GetFloat(), fields[17].GetFloat(), fields[18].GetFloat());
if (ObjectGuid::LowType guildId = fields[19].GetUInt64())
- GuildGuid = ObjectGuid::Create<HighGuid::Guild>(guildId);
+ GuildGUID = ObjectGuid::Create<HighGuid::Guild>(guildId);
uint32 playerFlags = fields[20].GetUInt32();
uint32 atLoginFlags = fields[21].GetUInt16();
@@ -80,24 +80,24 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
Flags |= CHARACTER_FLAG_DECLINED;
if (atLoginFlags & AT_LOGIN_CUSTOMIZE)
- CustomizationFlag = CHAR_CUSTOMIZE_FLAG_CUSTOMIZE;
+ Flags2 = CHAR_CUSTOMIZE_FLAG_CUSTOMIZE;
else if (atLoginFlags & AT_LOGIN_CHANGE_FACTION)
- CustomizationFlag = CHAR_CUSTOMIZE_FLAG_FACTION;
+ Flags2 = CHAR_CUSTOMIZE_FLAG_FACTION;
else if (atLoginFlags & AT_LOGIN_CHANGE_RACE)
- CustomizationFlag = CHAR_CUSTOMIZE_FLAG_RACE;
+ 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
- if (!(playerFlags & PLAYER_FLAGS_GHOST) && (Class == CLASS_WARLOCK || Class == CLASS_HUNTER || Class == CLASS_DEATH_KNIGHT))
+ if (!(playerFlags & PLAYER_FLAGS_GHOST) && (ClassID == CLASS_WARLOCK || ClassID == CLASS_HUNTER || ClassID == CLASS_DEATH_KNIGHT))
{
if (CreatureTemplate const* creatureInfo = sObjectMgr->GetCreatureTemplate(fields[22].GetUInt32()))
{
- Pet.CreatureDisplayId = fields[23].GetUInt32();
- Pet.Level = fields[24].GetUInt16();
- Pet.CreatureFamily = creatureInfo->family;
+ PetCreatureDisplayID = fields[23].GetUInt32();
+ PetExperienceLevel = fields[24].GetUInt16();
+ PetCreatureFamilyID = creatureInfo->family;
}
}
@@ -108,25 +108,27 @@ WorldPackets::Character::EnumCharactersResult::CharacterInfo::CharacterInfo(Fiel
Tokenizer equipment(fields[25].GetString(), ' ');
ListPosition = fields[27].GetUInt8();
LastPlayedTime = fields[28].GetUInt32();
- if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(Class, fields[29].GetUInt8()))
+ if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(ClassID, fields[29].GetUInt8()))
SpecID = spec->ID;
LastLoginVersion = fields[30].GetUInt32();
for (uint8 slot = 0; slot < INVENTORY_SLOT_BAG_END; ++slot)
{
- uint32 visualBase = slot * 3;
- VisualItems[slot].InventoryType = Player::GetUInt32ValueFromArray(equipment, visualBase);
- VisualItems[slot].DisplayId = Player::GetUInt32ValueFromArray(equipment, visualBase + 1);
- VisualItems[slot].DisplayEnchantId = Player::GetUInt32ValueFromArray(equipment, visualBase + 2);
+ uint32 visualBase = slot * 4;
+ VisualItems[slot].InvType = Player::GetUInt32ValueFromArray(equipment, visualBase);
+ VisualItems[slot].DisplayID = Player::GetUInt32ValueFromArray(equipment, visualBase + 1);
+ VisualItems[slot].DisplayEnchantID = Player::GetUInt32ValueFromArray(equipment, visualBase + 2);
+ VisualItems[slot].DisplayEnchantID = Player::GetUInt32ValueFromArray(equipment, visualBase + 3);
}
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::CharacterInfo::VisualItemInfo const& visualItem)
{
- data << uint32(visualItem.DisplayId);
- data << uint32(visualItem.DisplayEnchantId);
- data << uint8(visualItem.InventoryType);
+ data << uint32(visualItem.DisplayID);
+ data << uint32(visualItem.DisplayEnchantID);
+ data << uint8(visualItem.InvType);
+ data << uint8(visualItem.Subclass);
return data;
}
@@ -136,26 +138,26 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharacters
data << charInfo.Guid;
data << uint64(charInfo.GuildClubMemberID);
data << uint8(charInfo.ListPosition);
- data << uint8(charInfo.Race);
- data << uint8(charInfo.Class);
- data << uint8(charInfo.Sex);
- data << uint8(charInfo.Skin);
- data << uint8(charInfo.Face);
+ data << uint8(charInfo.RaceID);
+ data << uint8(charInfo.ClassID);
+ data << uint8(charInfo.SexID);
+ data << uint8(charInfo.SkinID);
+ data << uint8(charInfo.FaceID);
data << uint8(charInfo.HairStyle);
data << uint8(charInfo.HairColor);
data << uint8(charInfo.FacialHair);
data.append(charInfo.CustomDisplay.data(), charInfo.CustomDisplay.size());
- data << uint8(charInfo.Level);
- data << int32(charInfo.ZoneId);
- data << int32(charInfo.MapId);
- data << charInfo.PreLoadPosition;
- data << charInfo.GuildGuid;
+ data << uint8(charInfo.ExperienceLevel);
+ data << int32(charInfo.ZoneID);
+ data << int32(charInfo.MapID);
+ data << charInfo.PreloadPos;
+ data << charInfo.GuildGUID;
data << uint32(charInfo.Flags);
- data << uint32(charInfo.CustomizationFlag);
+ data << uint32(charInfo.Flags2);
data << uint32(charInfo.Flags3);
- data << uint32(charInfo.Pet.CreatureDisplayId);
- data << uint32(charInfo.Pet.Level);
- data << uint32(charInfo.Pet.CreatureFamily);
+ data << uint32(charInfo.PetCreatureDisplayID);
+ data << uint32(charInfo.PetExperienceLevel);
+ data << uint32(charInfo.PetCreatureFamilyID);
data << uint32(charInfo.ProfessionIds[0]);
data << uint32(charInfo.ProfessionIds[1]);
diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h
index 90f460b298d..3e6e36f0a74 100644
--- a/src/server/game/Server/Packets/CharacterPackets.h
+++ b/src/server/game/Server/Packets/CharacterPackets.h
@@ -125,22 +125,22 @@ namespace WorldPackets
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
- uint8 Race = 0;
- uint8 Class = 0;
- uint8 Sex = 0;
- uint8 Skin = 0;
- uint8 Face = 0;
+ uint8 RaceID = 0;
+ uint8 ClassID = 0;
+ uint8 SexID = 0;
+ uint8 SkinID = 0;
+ uint8 FaceID = 0;
uint8 HairStyle = 0;
uint8 HairColor = 0;
uint8 FacialHair = 0;
std::array<uint8, PLAYER_CUSTOM_DISPLAY_SIZE> CustomDisplay = { };
- uint8 Level = 0;
- int32 ZoneId = 0;
- int32 MapId = 0;
- TaggedPosition<Position::XYZ> PreLoadPosition;
- ObjectGuid GuildGuid;
+ uint8 ExperienceLevel = 0;
+ int32 ZoneID = 0;
+ int32 MapID = 0;
+ TaggedPosition<Position::XYZ> PreloadPos;
+ ObjectGuid GuildGUID;
uint32 Flags = 0; ///< Character flag @see enum CharacterFlags
- uint32 CustomizationFlag = 0; ///< Character customization flags @see enum CharacterCustomizeFlags
+ uint32 Flags2 = 0; ///< Character customization flags @see enum CharacterCustomizeFlags
uint32 Flags3 = 0; ///< Character flags 3 @todo research
uint32 Flags4 = 0;
bool FirstLogin = false;
@@ -148,23 +148,21 @@ namespace WorldPackets
uint32 LastPlayedTime = 0;
uint16 SpecID = 0;
uint32 Unknown703 = 0;
- uint32 LastLoginVersion = 0;
+ uint32 LastLoginVersion = 0;
- struct PetInfo
- {
- uint32 CreatureDisplayId = 0; ///< PetCreatureDisplayID
- uint32 Level = 0; ///< PetExperienceLevel
- uint32 CreatureFamily = 0; ///< PetCreatureFamilyID
- } Pet;
+ uint32 PetCreatureDisplayID = 0;
+ uint32 PetExperienceLevel = 0;
+ uint32 PetCreatureFamilyID = 0;
bool BoostInProgress = false; ///< @todo
int32 ProfessionIds[2] = { }; ///< @todo
struct VisualItemInfo
{
- uint32 DisplayId = 0;
- uint32 DisplayEnchantId = 0;
- uint8 InventoryType = 0;
+ uint32 DisplayID = 0;
+ uint32 DisplayEnchantID = 0;
+ uint8 InvType = 0;
+ uint8 Subclass = 0;
};
std::array<VisualItemInfo, 23> VisualItems = { };
diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp
index 20fb6f40ae0..b82d9b1c777 100644
--- a/src/server/game/Server/Packets/GuildPackets.cpp
+++ b/src/server/game/Server/Packets/GuildPackets.cpp
@@ -303,7 +303,6 @@ void WorldPackets::Guild::GuildSetRankPermissions::Read()
_worldPacket >> RankID;
_worldPacket >> RankOrder;
_worldPacket >> Flags;
- _worldPacket >> OldFlags;
_worldPacket >> WithdrawGoldLimit;
for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++)
@@ -316,6 +315,8 @@ void WorldPackets::Guild::GuildSetRankPermissions::Read()
uint32 rankNameLen = _worldPacket.ReadBits(7);
RankName = _worldPacket.ReadString(rankNameLen);
+
+ _worldPacket >> OldFlags;
}
WorldPacket const* WorldPackets::Guild::GuildEventNewLeader::Write()
@@ -359,8 +360,8 @@ WorldPacket const* WorldPackets::Guild::GuildEventTabTextChanged::Write()
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData)
{
- data << uint32(rankData.RankID);
- data << uint32(rankData.RankOrder);
+ data << uint8(rankData.RankID);
+ data << int32(rankData.RankOrder);
data << uint32(rankData.Flags);
data << uint32(rankData.WithdrawGoldLimit);
diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h
index 9a3b70df911..e285a940f9e 100644
--- a/src/server/game/Server/Packets/GuildPackets.h
+++ b/src/server/game/Server/Packets/GuildPackets.h
@@ -431,7 +431,7 @@ namespace WorldPackets
void Read() override;
- int32 RankID = 0;
+ uint8 RankID = 0;
int32 RankOrder = 0;
uint32 WithdrawGoldLimit = 0;
uint32 Flags = 0;
@@ -485,8 +485,8 @@ namespace WorldPackets
struct GuildRankData
{
- uint32 RankID = 0;
- uint32 RankOrder = 0;
+ uint8 RankID = 0;
+ int32 RankOrder = 0;
uint32 Flags = 0;
uint32 WithdrawGoldLimit = 0;
std::string RankName;
diff --git a/src/server/game/Server/Packets/HotfixPackets.cpp b/src/server/game/Server/Packets/HotfixPackets.cpp
index cf147b91031..2aa841b24c4 100644
--- a/src/server/game/Server/Packets/HotfixPackets.cpp
+++ b/src/server/game/Server/Packets/HotfixPackets.cpp
@@ -26,10 +26,7 @@ void WorldPackets::Hotfix::DBQueryBulk::Read()
Queries.resize(count);
for (uint32 i = 0; i < count; ++i)
- {
- _worldPacket >> Queries[i].GUID;
_worldPacket >> Queries[i].RecordID;
- }
}
WorldPacket const* WorldPackets::Hotfix::DBReply::Write()
diff --git a/src/server/game/Server/Packets/HotfixPackets.h b/src/server/game/Server/Packets/HotfixPackets.h
index 100b51a5fb2..ca1502bfe49 100644
--- a/src/server/game/Server/Packets/HotfixPackets.h
+++ b/src/server/game/Server/Packets/HotfixPackets.h
@@ -33,7 +33,6 @@ namespace WorldPackets
public:
struct DBQueryRecord
{
- ObjectGuid GUID;
uint32 RecordID = 0;
};
diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp
index 2a7707d06d0..54a5f820665 100644
--- a/src/server/game/Server/Packets/LFGPackets.cpp
+++ b/src/server/game/Server/Packets/LFGPackets.cpp
@@ -197,6 +197,7 @@ WorldPacket const* WorldPackets::LFG::LFGUpdateStatus::Write()
_worldPacket << uint32(Slots.size());
_worldPacket << uint32(RequestedRoles);
_worldPacket << uint32(SuspendedPlayers.size());
+ _worldPacket << uint32(QueueMapID);
for (uint32 slot : Slots)
_worldPacket << uint32(slot);
diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h
index b98f1d66334..8a1f0b40f60 100644
--- a/src/server/game/Server/Packets/LFGPackets.h
+++ b/src/server/game/Server/Packets/LFGPackets.h
@@ -227,6 +227,7 @@ namespace WorldPackets
std::vector<uint32> Slots;
uint32 RequestedRoles = 0;
std::vector<ObjectGuid> SuspendedPlayers;
+ uint32 QueueMapID = 0;
bool NotifyUI = false;
bool IsParty = false;
bool Joined = false;
diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp
index 0078bb8910d..f8d05f18923 100644
--- a/src/server/game/Server/Packets/QuestPackets.cpp
+++ b/src/server/game/Server/Packets/QuestPackets.cpp
@@ -147,6 +147,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write()
_worldPacket << int32(Info.TreasurePickerID);
_worldPacket << int32(Info.Expansion);
_worldPacket << int32(Info.ManagedWorldStateID);
+ _worldPacket << int32(Info.QuestSessionBonus);
_worldPacket.WriteBits(Info.LogTitle.size(), 9);
_worldPacket.WriteBits(Info.LogDescription.size(), 12);
@@ -373,6 +374,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write()
_worldPacket << uint32(DescEmotes.size());
_worldPacket << uint32(Objectives.size());
_worldPacket << int32(QuestStartItemID);
+ _worldPacket << int32(QuestSessionBonus);
for (int32 spell : LearnSpells)
_worldPacket << int32(spell);
@@ -399,6 +401,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write()
_worldPacket.WriteBits(PortraitTurnInText.size(), 10);
_worldPacket.WriteBits(PortraitTurnInName.size(), 8);
_worldPacket.WriteBit(AutoLaunched);
+ _worldPacket.WriteBit(false); // unused in client
_worldPacket.WriteBit(StartCheat);
_worldPacket.WriteBit(DisplayPopup);
_worldPacket.FlushBits();
diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h
index fd9ac659cae..1f3133b8c54 100644
--- a/src/server/game/Server/Packets/QuestPackets.h
+++ b/src/server/game/Server/Packets/QuestPackets.h
@@ -163,6 +163,7 @@ namespace WorldPackets
int32 TreasurePickerID = 0;
int32 Expansion = 0;
int32 ManagedWorldStateID = 0;
+ int32 QuestSessionBonus = 0;
std::vector<QuestObjective> Objectives;
int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { };
int32 RewardAmount[QUEST_REWARD_ITEM_COUNT] = { };
@@ -372,6 +373,7 @@ namespace WorldPackets
int32 PortraitGiver = 0;
int32 PortraitGiverMount = 0;
int32 QuestStartItemID = 0;
+ int32 QuestSessionBonus = 0;
std::string PortraitGiverText;
std::string PortraitGiverName;
std::string PortraitTurnInText;
diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp
index 5e4d8b362fb..5c9d1aa1337 100644
--- a/src/server/game/Server/Packets/SystemPackets.cpp
+++ b/src/server/game/Server/Packets/SystemPackets.cpp
@@ -28,11 +28,15 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket << uint32(CfgRealmID);
_worldPacket << int32(CfgRealmRecID);
+ _worldPacket << uint32(RAFSystem.MaxRecruits);
+ _worldPacket << uint32(RAFSystem.MaxRecruitMonths);
+ _worldPacket << uint32(RAFSystem.MaxRecruitmentUses);
+ _worldPacket << uint32(RAFSystem.DaysInCycle);
+
_worldPacket << uint32(TwitterPostThrottleLimit);
_worldPacket << uint32(TwitterPostThrottleCooldown);
_worldPacket << uint32(TokenPollTimeSeconds);
- _worldPacket << uint32(TokenRedeemIndex);
_worldPacket << int64(TokenBalanceAmount);
_worldPacket << uint32(BpayStoreProductDeliveryDelay);
@@ -49,7 +53,8 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket.WriteBit(ItemRestorationButtonEnabled);
_worldPacket.WriteBit(BrowserEnabled);
_worldPacket.WriteBit(SessionAlert.is_initialized());
- _worldPacket.WriteBit(RecruitAFriendSendingEnabled);
+ _worldPacket.WriteBit(RAFSystem.Enabled);
+ _worldPacket.WriteBit(RAFSystem.RecruitingEnabled);
_worldPacket.WriteBit(CharUndeleteEnabled);
_worldPacket.WriteBit(RestrictedAccount);
_worldPacket.WriteBit(CommerceSystemEnabled);
@@ -69,6 +74,9 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write()
_worldPacket.WriteBit(ClubsPresenceUpdateEnabled);
_worldPacket.WriteBit(VoiceChatDisabledByParentalControl);
_worldPacket.WriteBit(VoiceChatMutedByParentalControl);
+ _worldPacket.WriteBit(QuestSessionEnabled);
+ _worldPacket.WriteBit(Unused825);
+ _worldPacket.WriteBit(ClubFinderEnabled);
_worldPacket.FlushBits();
@@ -146,7 +154,6 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatusGlueScreen::Write()
_worldPacket.WriteBit(IsExpansionPreorderInStore);
_worldPacket.WriteBit(KioskModeEnabled);
_worldPacket.WriteBit(CompetitiveModeEnabled);
- _worldPacket.WriteBit(false); // not accessed in handler
_worldPacket.WriteBit(TrialBoostEnabled);
_worldPacket.WriteBit(TokenBalanceEnabled);
_worldPacket.WriteBit(LiveRegionCharacterListEnabled);
@@ -154,8 +161,7 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatusGlueScreen::Write()
_worldPacket.WriteBit(LiveRegionAccountCopyEnabled);
_worldPacket.FlushBits();
- _worldPacket << int32(TokenPollTimeSeconds);
- _worldPacket << int32(TokenRedeemIndex);
+ _worldPacket << uint32(TokenPollTimeSeconds);
_worldPacket << int64(TokenBalanceAmount);
_worldPacket << int32(MaxCharactersPerRealm);
_worldPacket << uint32(BpayStoreProductDeliveryDelay);
diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h
index 17b404032dc..e693f7719b2 100644
--- a/src/server/game/Server/Packets/SystemPackets.h
+++ b/src/server/game/Server/Packets/SystemPackets.h
@@ -88,6 +88,16 @@ namespace WorldPackets
ObjectGuid GuildGuid;
};
+ struct RafSystemFeatureInfo
+ {
+ bool Enabled = false;
+ bool RecruitingEnabled = false;
+ uint32 MaxRecruits = 0;
+ uint32 MaxRecruitMonths = 0;
+ uint32 MaxRecruitmentUses = 0;
+ uint32 DaysInCycle = 0;
+ };
+
FeatureSystemStatus() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS, 48) { }
WorldPacket const* Write() override;
@@ -95,7 +105,6 @@ namespace WorldPackets
bool VoiceEnabled = false;
bool BrowserEnabled = false;
bool BpayStoreAvailable = false;
- bool RecruitAFriendSendingEnabled = false;
bool BpayStoreEnabled = false;
Optional<SessionAlertConfig> SessionAlert;
uint32 ScrollOfResurrectionMaxRequestsPerDay = 0;
@@ -108,7 +117,6 @@ namespace WorldPackets
uint32 TwitterPostThrottleLimit = 0; ///< Number of twitter posts the client can send before they start being throttled
uint32 TwitterPostThrottleCooldown = 0; ///< Time in seconds the client has to wait before posting again after hitting post limit
uint32 TokenPollTimeSeconds = 0;
- uint32 TokenRedeemIndex = 0;
int64 TokenBalanceAmount = 0;
uint32 BpayStoreProductDeliveryDelay = 0;
uint32 ClubsPresenceUpdateTimer = 0;
@@ -133,10 +141,14 @@ namespace WorldPackets
bool ClubsPresenceUpdateEnabled = false;
bool VoiceChatDisabledByParentalControl = false;
bool VoiceChatMutedByParentalControl = false;
+ bool QuestSessionEnabled = false;
+ bool Unused825 = false;
+ bool ClubFinderEnabled = false;
Optional<std::vector<uint8>> RaceClassExpansionLevels;
SocialQueueConfig QuickJoinConfig;
VoiceChatProxySettings VoiceChatManagerSettings;
+ RafSystemFeatureInfo RAFSystem;
};
class FeatureSystemStatusGlueScreen final : public ServerPacket
@@ -161,8 +173,7 @@ namespace WorldPackets
bool LiveRegionCharacterListEnabled = false; // NYI
bool LiveRegionCharacterCopyEnabled = false; // NYI
bool LiveRegionAccountCopyEnabled = false; // NYI
- int32 TokenPollTimeSeconds = 0; // NYI
- int32 TokenRedeemIndex = 0; // NYI
+ uint32 TokenPollTimeSeconds = 0; // NYI
int64 TokenBalanceAmount = 0; // NYI
int32 MaxCharactersPerRealm = 0;
uint32 BpayStoreProductDeliveryDelay = 0; // NYI
diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp
index 26fcf88111c..52d5c1199dc 100644
--- a/src/server/game/Server/Packets/TicketPackets.cpp
+++ b/src/server/game/Server/Packets/TicketPackets.cpp
@@ -76,12 +76,6 @@ void WorldPackets::Ticket::SupportTicketSubmitSuggestion::Read()
Note = _worldPacket.ReadString(_worldPacket.ReadBits(10));
}
-WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketChatLine::SupportTicketChatLine(ByteBuffer& data)
-{
- data >> Timestamp;
- Text = data.ReadString(data.ReadBits(12));
-}
-
WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketChatLine::SupportTicketChatLine(uint32 timestamp, std::string const& text) :
Timestamp(timestamp), Text(text)
{ }
@@ -94,6 +88,11 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubm
return data;
}
+WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketChatLine::SupportTicketChatLine(ByteBuffer& data)
+{
+ data >> *this;
+}
+
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketChatLog& chatlog)
{
uint32 linesCount = data.read<uint32>();
@@ -109,6 +108,58 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubm
return data;
}
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketHorusChatLine& line)
+{
+ data >> line.Timestamp;
+ data >> line.AuthorGUID;
+
+ bool hasClubID = data.ReadBit();
+ bool hasChannelGUID = data.ReadBit();
+ bool hasRealmAddress = data.ReadBit();
+ bool hasSlashCmd = data.ReadBit();
+ uint32 textLength = data.ReadBits(12);
+
+ if (hasClubID)
+ line.ClubID = data.read<uint64>();
+
+ if (hasChannelGUID)
+ {
+ line.ChannelGUID = boost::in_place();
+ data >> *line.ChannelGUID;
+ }
+
+ if (hasRealmAddress)
+ {
+ line.RealmAddress = boost::in_place();
+ data >> line.RealmAddress->VirtualRealmAddress;
+ data >> line.RealmAddress->field_4;
+ data >> line.RealmAddress->field_6;
+ }
+
+ if (hasSlashCmd)
+ line.SlashCmd = data.read<int32>();
+
+ line.Text = data.ReadString(textLength);
+
+ return data;
+}
+
+WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketHorusChatLine::SupportTicketHorusChatLine(ByteBuffer& data)
+{
+ data >> *this;
+}
+
+ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketHorusChatLog& chatlog)
+{
+ uint32 linesCount = data.read<uint32>();
+ data.ResetBitPos();
+
+ for (uint32 i = 0; i < linesCount; i++)
+ chatlog.Lines.emplace_back(data);
+
+ return data;
+}
+
ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketMailInfo>& mail)
{
mail = boost::in_place();
@@ -187,6 +238,18 @@ ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Ticket::SupportT
return data;
}
+ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Ticket::SupportTicketSubmitComplaint::SupportTicketClubFinderResult>& clubInfo)
+{
+ clubInfo = boost::in_place();
+
+ data >> clubInfo->ClubFinderPostingID;
+ data >> clubInfo->ClubID;
+ data >> clubInfo->ClubFinderGUID;
+ clubInfo->ClubName = data.ReadString(data.ReadBits(12));
+
+ return data;
+}
+
void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
{
_worldPacket >> Header;
@@ -202,6 +265,7 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
bool hasLFGListSearchResult = _worldPacket.ReadBit();
bool hasLFGListApplicant = _worldPacket.ReadBit();
bool hasClubMessage = _worldPacket.ReadBit();
+ bool hasClubFinderResult = _worldPacket.ReadBit();
_worldPacket.ResetBitPos();
@@ -212,11 +276,13 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
_worldPacket.ResetBitPos();
}
- if (hasMailInfo)
- _worldPacket >> MailInfo;
+ _worldPacket >> HorusChatLog;
Note = _worldPacket.ReadString(noteLength);
+ if (hasMailInfo)
+ _worldPacket >> MailInfo;
+
if (hasCalendarInfo)
_worldPacket >> CalenderInfo;
@@ -231,6 +297,9 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read()
if (hasLFGListApplicant)
_worldPacket >> LFGListApplicant;
+
+ if (hasClubFinderResult)
+ _worldPacket >> ClubFinderResult;
}
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Ticket::Complaint::ComplaintOffender& complaintOffender)
diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h
index 0c17c8d0b52..219ad895a33 100644
--- a/src/server/game/Server/Packets/TicketPackets.h
+++ b/src/server/game/Server/Packets/TicketPackets.h
@@ -132,6 +132,31 @@ namespace WorldPackets
Optional<uint32> ReportLineIndex;
};
+ struct SupportTicketHorusChatLine
+ {
+ SupportTicketHorusChatLine(ByteBuffer& data);
+
+ struct SenderRealm
+ {
+ uint32 VirtualRealmAddress;
+ uint16 field_4;
+ uint8 field_6;
+ };
+
+ int32 Timestamp;
+ ObjectGuid AuthorGUID;
+ Optional<uint64> ClubID;
+ Optional<ObjectGuid> ChannelGUID;
+ Optional<SenderRealm> RealmAddress;
+ Optional<int32> SlashCmd;
+ std::string Text;
+ };
+
+ struct SupportTicketHorusChatLog
+ {
+ std::vector<SupportTicketHorusChatLine> Lines;
+ };
+
struct SupportTicketMailInfo
{
int32 MailID = 0;
@@ -183,6 +208,14 @@ namespace WorldPackets
bool IsPlayerUsingVoice = false;
};
+ struct SupportTicketClubFinderResult
+ {
+ uint64 ClubFinderPostingID;
+ uint64 ClubID;
+ ObjectGuid ClubFinderGUID;
+ std::string ClubName;
+ };
+
SupportTicketSubmitComplaint(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, std::move(packet)) { }
void Read() override;
@@ -191,6 +224,7 @@ namespace WorldPackets
SupportTicketChatLog ChatLog;
ObjectGuid TargetCharacterGUID;
uint8 ComplaintType = 0;
+ SupportTicketHorusChatLog HorusChatLog;
std::string Note;
Optional<SupportTicketMailInfo> MailInfo;
Optional<SupportTicketCalendarEventInfo> CalenderInfo;
@@ -199,6 +233,7 @@ namespace WorldPackets
Optional<SupportTicketLFGListSearchResult> LFGListSearchResult;
Optional<SupportTicketLFGListApplicant> LFGListApplicant;
Optional<SupportTicketCommunityMessage> CommunityMessage;
+ Optional<SupportTicketClubFinderResult> ClubFinderResult;
};
class Complaint final : public ClientPacket
diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.cpp b/src/server/game/Server/Packets/TransmogrificationPackets.cpp
index 879b08c4229..331795e3291 100644
--- a/src/server/game/Server/Packets/TransmogrificationPackets.cpp
+++ b/src/server/game/Server/Packets/TransmogrificationPackets.cpp
@@ -41,9 +41,13 @@ WorldPacket const* WorldPackets::Transmogrification::TransmogCollectionUpdate::W
_worldPacket.WriteBit(IsFullUpdate);
_worldPacket.WriteBit(IsSetFavorite);
_worldPacket << uint32(FavoriteAppearances.size());
+ _worldPacket << uint32(NewAppearances.size());
if (!FavoriteAppearances.empty())
_worldPacket.append(FavoriteAppearances.data(), FavoriteAppearances.size());
+ if (!NewAppearances.empty())
+ _worldPacket.append(NewAppearances.data(), NewAppearances.size());
+
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.h b/src/server/game/Server/Packets/TransmogrificationPackets.h
index f7545b03194..8c391a9a55b 100644
--- a/src/server/game/Server/Packets/TransmogrificationPackets.h
+++ b/src/server/game/Server/Packets/TransmogrificationPackets.h
@@ -60,6 +60,7 @@ namespace WorldPackets
bool IsFullUpdate = false;
bool IsSetFavorite = false;
std::vector<uint32> FavoriteAppearances;
+ std::vector<uint32> NewAppearances;
};
class OpenTransmogrifier final : public ServerPacket
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 0cf5e036ac4..95776767b4f 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -145,7 +145,7 @@ void OpcodeTable::Initialize()
ValidateAndSetClientOpcode<decltype(handler), handler>(opcode, #opcode, status, processing)
DEFINE_HANDLER(CMSG_ACCEPT_GUILD_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildAcceptInvite);
- DEFINE_HANDLER(CMSG_ACCEPT_LEVEL_GRANT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptGrantLevel);
+ //DEFINE_HANDLER(CMSG_ACCEPT_LEVEL_GRANT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAcceptGrantLevel);
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_ACTIVATE_TAXI, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleActivateTaxiOpcode);
@@ -320,9 +320,9 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_CHAT_REPORT_FILTERED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHAT_REPORT_IGNORED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatIgnoredOpcode);
DEFINE_HANDLER(CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUnregisterAllAddonPrefixesOpcode);
- DEFINE_HANDLER(CMSG_CHECK_RAF_EMAIL_ENABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHOICE_RESPONSE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandlePlayerChoiceResponse);
+ DEFINE_HANDLER(CMSG_CLEAR_NEW_APPEARANCE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CLEAR_RAID_MARKER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleClearRaidMarker);
DEFINE_HANDLER(CMSG_CLEAR_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleClearTradeItemOpcode);
DEFINE_HANDLER(CMSG_CLIENT_PORT_GRAVEYARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePortGraveyard);
@@ -335,6 +335,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CLUB_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_COLLECTION_ITEM_SET_FAVORITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCollectionItemSetFavorite);
@@ -423,6 +424,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_GET_ITEM_PURCHASE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetItemPurchaseData);
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_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);
@@ -430,7 +432,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_GM_TICKET_GET_CASE_STATUS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGMTicketGetCaseStatusOpcode);
DEFINE_HANDLER(CMSG_GM_TICKET_GET_SYSTEM_STATUS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGMTicketSystemStatusOpcode);
DEFINE_HANDLER(CMSG_GOSSIP_SELECT_OPTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGossipSelectOptionOpcode);
- DEFINE_HANDLER(CMSG_GRANT_LEVEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGrantLevel);
+ //DEFINE_HANDLER(CMSG_GRANT_LEVEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGrantLevel);
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);
@@ -457,7 +459,6 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_GUILD_GET_ROSTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildGetRoster);
DEFINE_HANDLER(CMSG_GUILD_INVITE_BY_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildInviteByName);
DEFINE_HANDLER(CMSG_GUILD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildLeave);
- DEFINE_HANDLER(CMSG_GUILD_MEMBER_SEND_SOR_REQUEST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GUILD_NEWS_UPDATE_STICKY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildNewsUpdateSticky);
DEFINE_HANDLER(CMSG_GUILD_OFFICER_REMOVE_MEMBER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildOfficerRemoveMember);
DEFINE_HANDLER(CMSG_GUILD_PERMISSIONS_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildPermissionsQuery);
@@ -681,20 +682,28 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_QUEST_LOG_REMOVE_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestLogRemoveQuest);
DEFINE_HANDLER(CMSG_QUEST_POI_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestPOIQuery);
DEFINE_HANDLER(CMSG_QUEST_PUSH_RESULT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestPushResult);
+ DEFINE_HANDLER(CMSG_QUEST_SESSION_BEGIN_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_QUEST_SESSION_REQUEST_START, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_QUEST_SESSION_REQUEST_STOP, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_QUEUED_MESSAGES_END, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_QUICK_JOIN_REQUEST_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_QUICK_JOIN_RESPOND_TO_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_RAF_CLAIM_ACTIVITY_REWARD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_RAF_CLAIM_NEXT_REWARD, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_RAF_GENERATE_RECRUITMENT_LINK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_RAF_UPDATE_RECRUITMENT_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_RANDOM_ROLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomRollOpcode);
DEFINE_HANDLER(CMSG_READY_CHECK_RESPONSE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleReadyCheckResponseOpcode);
DEFINE_HANDLER(CMSG_READ_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReadItem);
DEFINE_HANDLER(CMSG_RECLAIM_CORPSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleReclaimCorpse);
- DEFINE_HANDLER(CMSG_RECRUIT_A_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REDEEM_WOW_TOKEN_CONFIRM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REDEEM_WOW_TOKEN_START, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REMOVE_NEW_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRemoveNewItem);
+ DEFINE_HANDLER(CMSG_REMOVE_RAF_RECRUIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_REORDER_CHARACTERS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleReorderCharacters);
DEFINE_HANDLER(CMSG_REPAIR_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRepairItemOpcode);
DEFINE_HANDLER(CMSG_REPLACE_TROPHY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -753,7 +762,6 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_SELL_WOW_TOKEN_START, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SEND_CONTACT_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleContactListOpcode);
DEFINE_HANDLER(CMSG_SEND_MAIL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendMail);
- DEFINE_HANDLER(CMSG_SEND_SOR_REQUEST_VIA_ADDRESS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_SEND_TEXT_EMOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTextEmoteOpcode);
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);
@@ -938,6 +946,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AURA_POINTS_DEPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AURA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_CHALLENGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AVAILABLE_HOTFIXES, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_EQUIPPED_STATUS_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1115,6 +1124,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_APPLICATIONS_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_CLUBS_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_CLUBS_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_COMMAND_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_COIN_REMOVED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMBAT_EVENT_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_COMMENTATOR_MAP_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
@@ -1173,6 +1183,8 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENCHANTMENT_LOG, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
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_ENTITLEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENTITLEMENT_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENUM_CHARACTERS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_ENVIRONMENTAL_DAMAGE_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_EQUIPMENT_SET_ID, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1368,6 +1380,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARNED_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARN_PVP_TALENTS_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEARN_TALENTS_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEVEL_LINKING_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEVEL_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LEVEL_UP_INFO, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_LFG_BOOT_PLAYER, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1612,7 +1625,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRE_RESSURECT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRINT_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROC_RESIST, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROPOSE_LEVEL_GRANT, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ //DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROPOSE_LEVEL_GRANT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PUSH_SPELL_TO_ACTION_BAR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_CREDIT, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_LOG_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1651,6 +1664,9 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_POI_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_POI_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_PUSH_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_SESSION_MEMBER_CONFIRM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_SESSION_MEMBER_START_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_SESSION_NOTIFICATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_SPAWN_TRACKING_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_CREDIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
@@ -1659,7 +1675,10 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_COMPLETE_BY_SPELL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_UPDATE_FAILED_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAF_EMAIL_ENABLED_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUICK_JOIN_CONFIRM_REQUEST_INVITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAF_ACCOUNT_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAF_ACTIVITY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAF_INFO_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_DIFFICULTY_SET, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_GROUP_ONLY, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_INSTANCE_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM);
@@ -1673,8 +1692,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_READ_ITEM_RESULT_OK, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_LOOKUP_INFORMATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REALM_QUERY_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_RECRUIT_A_FRIEND_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_EXPIRED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_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);
@@ -1764,7 +1781,6 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SHOW_TRADE_SKILL_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SOCKET_GEMS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SOCKET_GEMS_FAILURE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_SOR_START_EXPERIENCE_INCOMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SORT_BAGS_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPECIALIZATION_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_SPECIAL_MOUNT_ANIM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index 4b6015d4934..18409f48070 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -46,18 +46,17 @@ enum OpcodeMisc : uint16
enum OpcodeClient : uint16
{
CMSG_ACCEPT_GUILD_INVITE = 0x35FD,
- CMSG_ACCEPT_LEVEL_GRANT = 0x34FA,
CMSG_ACCEPT_TRADE = 0x315A,
CMSG_ACCEPT_WARGAME_INVITE = 0x35E1,
CMSG_ACTIVATE_TAXI = 0x34AB,
CMSG_ADDON_LIST = 0x35D8,
CMSG_ADD_BATTLENET_FRIEND = 0x365C,
- CMSG_ADD_FRIEND = 0x36D5,
- CMSG_ADD_IGNORE = 0x36D9,
- CMSG_ADD_TOY = 0x329A,
+ CMSG_ADD_FRIEND = 0x36D2,
+ CMSG_ADD_IGNORE = 0x36D6,
+ CMSG_ADD_TOY = 0x329B,
CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3204,
- CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x3341,
- CMSG_ADVENTURE_MAP_POI_QUERY = 0x3248,
+ CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x3342,
+ CMSG_ADVENTURE_MAP_POI_QUERY = 0x3249,
CMSG_ALTER_APPEARANCE = 0x34F6,
CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B0,
CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B1,
@@ -65,8 +64,8 @@ enum OpcodeClient : uint16
CMSG_ARTIFACT_ADD_POWER = 0x31A9,
CMSG_ARTIFACT_SET_APPEARANCE = 0x31AB,
CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x320C,
- CMSG_ATTACK_STOP = 0x3257,
- CMSG_ATTACK_SWING = 0x3256,
+ CMSG_ATTACK_STOP = 0x3258,
+ CMSG_ATTACK_SWING = 0x3257,
CMSG_AUCTION_HELLO_REQUEST = 0x34CB,
CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x34D1,
CMSG_AUCTION_LIST_ITEMS = 0x34CE,
@@ -85,39 +84,39 @@ enum OpcodeClient : uint16
CMSG_AUTO_EQUIP_ITEM = 0x399A,
CMSG_AUTO_EQUIP_ITEM_SLOT = 0x399F,
CMSG_AUTO_STORE_BAG_ITEM = 0x399B,
- CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x335F,
- CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x334B,
- CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3361,
- CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3360,
+ CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x3360,
+ CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x334C,
+ CMSG_AZERITE_ESSENCE_ACTIVATE_ESSENCE = 0x3362,
+ CMSG_AZERITE_ESSENCE_UNLOCK_MILESTONE = 0x3361,
CMSG_BANKER_ACTIVATE = 0x34B3,
CMSG_BATTLEFIELD_LEAVE = 0x3173,
CMSG_BATTLEFIELD_LIST = 0x317E,
- CMSG_BATTLEFIELD_PORT = 0x3527,
- CMSG_BATTLEMASTER_HELLO = 0x32B2,
- CMSG_BATTLEMASTER_JOIN = 0x3522,
- CMSG_BATTLEMASTER_JOIN_ARENA = 0x3523,
- CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3525,
- CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3524,
- CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D8,
- CMSG_BATTLENET_REQUEST = 0x36FC,
- CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x3700,
- CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36D0,
- CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3719,
- CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CF,
- CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C6,
- CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BE,
- CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BF,
- CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x3712,
- CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C9,
- CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C7,
- CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x370F,
- CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x370E,
- CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x3710,
- CMSG_BATTLE_PAY_START_PURCHASE = 0x36F8,
- CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F9,
- CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C8,
- CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x3711,
- CMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x36F7,
+ CMSG_BATTLEFIELD_PORT = 0x3526,
+ CMSG_BATTLEMASTER_HELLO = 0x32B3,
+ CMSG_BATTLEMASTER_JOIN = 0x3521,
+ CMSG_BATTLEMASTER_JOIN_ARENA = 0x3522,
+ CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3524,
+ CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3523,
+ CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D5,
+ CMSG_BATTLENET_REQUEST = 0x36F9,
+ CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36FE,
+ CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CF,
+ CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3717,
+ CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CE,
+ CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C5,
+ CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BD,
+ CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BE,
+ CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x3710,
+ CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C8,
+ CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C6,
+ CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x370D,
+ CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x370C,
+ CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x370E,
+ CMSG_BATTLE_PAY_START_PURCHASE = 0x36F5,
+ CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F6,
+ CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C7,
+ CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x370F,
+ CMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x36F4,
CMSG_BATTLE_PET_CLEAR_FANFARE = 0x312C,
CMSG_BATTLE_PET_DELETE_PET = 0x3625,
CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3626,
@@ -131,18 +130,18 @@ enum OpcodeClient : uint16
CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31E1,
CMSG_BEGIN_TRADE = 0x3157,
CMSG_BINDER_ACTIVATE = 0x34B2,
- CMSG_BLACK_MARKET_BID_ON_ITEM = 0x352F,
- CMSG_BLACK_MARKET_OPEN = 0x352D,
- CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x352E,
- CMSG_BONUS_ROLL = 0x3362,
+ CMSG_BLACK_MARKET_BID_ON_ITEM = 0x352E,
+ CMSG_BLACK_MARKET_OPEN = 0x352C,
+ CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x352D,
+ CMSG_BONUS_ROLL = 0x3363,
CMSG_BUG_REPORT = 0x3688,
CMSG_BUSY_TRADE = 0x3158,
CMSG_BUY_BACK_ITEM = 0x34A4,
CMSG_BUY_BANK_SLOT = 0x34B4,
CMSG_BUY_ITEM = 0x34A3,
CMSG_BUY_REAGENT_BANK = 0x34B5,
- CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36F1,
- CMSG_BUY_WOW_TOKEN_START = 0x36F0,
+ CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36EE,
+ CMSG_BUY_WOW_TOKEN_START = 0x36ED,
CMSG_CAGE_BATTLE_PET = 0x31F3,
CMSG_CALENDAR_ADD_EVENT = 0x367F,
CMSG_CALENDAR_COMMUNITY_FILTER = 0x3673,
@@ -161,25 +160,25 @@ enum OpcodeClient : uint16
CMSG_CALENDAR_UPDATE_EVENT = 0x3680,
CMSG_CANCEL_AURA = 0x31AD,
CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34E8,
- CMSG_CANCEL_CAST = 0x32A0,
- CMSG_CANCEL_CHANNELLING = 0x326C,
- CMSG_CANCEL_GROWTH_AURA = 0x3271,
+ CMSG_CANCEL_CAST = 0x32A1,
+ CMSG_CANCEL_CHANNELLING = 0x326D,
+ CMSG_CANCEL_GROWTH_AURA = 0x3272,
CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3214,
CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AC,
- CMSG_CANCEL_MOUNT_AURA = 0x3282,
+ CMSG_CANCEL_MOUNT_AURA = 0x3283,
CMSG_CANCEL_QUEUED_SPELL = 0x317F,
CMSG_CANCEL_TEMP_ENCHANTMENT = 0x34F3,
CMSG_CANCEL_TRADE = 0x315C,
CMSG_CAN_DUEL = 0x3664,
- CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x370D,
- CMSG_CAST_SPELL = 0x329D,
+ CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x370B,
+ CMSG_CAST_SPELL = 0x329E,
CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x3090,
CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS = 0x308F,
- CMSG_CHANGE_BAG_SLOT_FLAG = 0x3323,
- CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3324,
- CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3305,
+ CMSG_CHANGE_BAG_SLOT_FLAG = 0x3324,
+ CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3325,
+ CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3306,
CMSG_CHANGE_SUB_GROUP = 0x364E,
- CMSG_CHARACTER_RENAME_REQUEST = 0x36C4,
+ CMSG_CHARACTER_RENAME_REQUEST = 0x36C3,
CMSG_CHAR_CUSTOMIZE = 0x3693,
CMSG_CHAR_DELETE = 0x36A0,
CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3699,
@@ -219,23 +218,24 @@ enum OpcodeClient : uint16
CMSG_CHAT_REPORT_FILTERED = 0x37CC,
CMSG_CHAT_REPORT_IGNORED = 0x37CB,
CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE,
- CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36D1,
- CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EF,
- CMSG_CHOICE_RESPONSE = 0x32A2,
+ CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EC,
+ CMSG_CHOICE_RESPONSE = 0x32A3,
+ CMSG_CLEAR_NEW_APPEARANCE = 0x312F,
CMSG_CLEAR_RAID_MARKER = 0x31A5,
CMSG_CLEAR_TRADE_ITEM = 0x315E,
- CMSG_CLIENT_PORT_GRAVEYARD = 0x3529,
+ CMSG_CLIENT_PORT_GRAVEYARD = 0x3528,
CMSG_CLOSE_INTERACTION = 0x3493,
- CMSG_CLOSE_QUEST_CHOICE = 0x32A3,
- CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x3723,
- CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x3721,
- CMSG_CLUB_FINDER_POST = 0x371E,
- CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x3727,
- CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x371F,
- CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x3720,
- CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x3726,
- CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x3722,
- CMSG_CLUB_INVITE = 0x36FF,
+ CMSG_CLOSE_QUEST_CHOICE = 0x32A4,
+ CMSG_CLUB_FINDER_APPLICATION_RESPONSE = 0x3721,
+ CMSG_CLUB_FINDER_GET_APPLICANTS_LIST = 0x371F,
+ CMSG_CLUB_FINDER_POST = 0x371C,
+ CMSG_CLUB_FINDER_REQUEST_CLUBS_DATA = 0x3723,
+ CMSG_CLUB_FINDER_REQUEST_CLUBS_LIST = 0x371D,
+ CMSG_CLUB_FINDER_REQUEST_MEMBERSHIP_TO_CLUB = 0x371E,
+ CMSG_CLUB_FINDER_REQUEST_PENDING_CLUBS_LIST = 0x3722,
+ CMSG_CLUB_FINDER_REQUEST_SUBSCRIBED_CLUB_POSTING_IDS = 0x3724,
+ CMSG_CLUB_FINDER_RESPOND_TO_APPLICANT = 0x3720,
+ CMSG_CLUB_INVITE = 0x36FD,
CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3634,
CMSG_COMMENTATOR_ENABLE = 0x35F1,
CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F5,
@@ -245,25 +245,25 @@ enum OpcodeClient : uint16
CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F3,
CMSG_COMMENTATOR_START_WARGAME = 0x35F0,
CMSG_COMPLAINT = 0x366E,
- CMSG_COMPLETE_CINEMATIC = 0x3547,
+ CMSG_COMPLETE_CINEMATIC = 0x3546,
CMSG_COMPLETE_MOVIE = 0x34DE,
CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AA,
CMSG_CONFIRM_RESPEC_WIPE = 0x320E,
CMSG_CONNECT_TO_FAILED = 0x35D4,
- CMSG_CONTRIBUTION_CONTRIBUTE = 0x3557,
- CMSG_CONTRIBUTION_GET_STATE = 0x3558,
- CMSG_CONVERSATION_LINE_STARTED = 0x3548,
+ CMSG_CONTRIBUTION_CONTRIBUTE = 0x3556,
+ CMSG_CONTRIBUTION_GET_STATE = 0x3557,
+ CMSG_CONVERSATION_LINE_STARTED = 0x3547,
CMSG_CONVERT_RAID = 0x3650,
CMSG_CREATE_CHARACTER = 0x3645,
- CMSG_CREATE_SHIPMENT = 0x32F1,
+ CMSG_CREATE_SHIPMENT = 0x32F2,
CMSG_DB_QUERY_BULK = 0x35E5,
- CMSG_DECLINE_GUILD_INVITES = 0x3520,
- CMSG_DECLINE_PETITION = 0x3536,
- CMSG_DELETE_EQUIPMENT_SET = 0x350D,
- CMSG_DEL_FRIEND = 0x36D6,
- CMSG_DEL_IGNORE = 0x36DA,
- CMSG_DEPOSIT_REAGENT_BANK = 0x332C,
- CMSG_DESTROY_ITEM = 0x3294,
+ CMSG_DECLINE_GUILD_INVITES = 0x351F,
+ CMSG_DECLINE_PETITION = 0x3535,
+ CMSG_DELETE_EQUIPMENT_SET = 0x350C,
+ CMSG_DEL_FRIEND = 0x36D3,
+ CMSG_DEL_IGNORE = 0x36D7,
+ CMSG_DEPOSIT_REAGENT_BANK = 0x332D,
+ CMSG_DESTROY_ITEM = 0x3295,
CMSG_DF_BOOT_PLAYER_VOTE = 0x3616,
CMSG_DF_GET_JOIN_STATUS = 0x3614,
CMSG_DF_GET_SYSTEM_INFO = 0x3613,
@@ -274,62 +274,62 @@ enum OpcodeClient : uint16
CMSG_DF_SET_ROLES = 0x3615,
CMSG_DF_TELEPORT = 0x3617,
CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A3C,
- CMSG_DISMISS_CRITTER = 0x34FC,
+ CMSG_DISMISS_CRITTER = 0x34FA,
CMSG_DO_MASTER_LOOT_ROLL = 0x3213,
CMSG_DO_READY_CHECK = 0x3635,
CMSG_DUEL_RESPONSE = 0x34E3,
- CMSG_EJECT_PASSENGER = 0x323D,
- CMSG_EMOTE = 0x3543,
+ CMSG_EJECT_PASSENGER = 0x323E,
+ CMSG_EMOTE = 0x3542,
CMSG_ENABLE_ENCRYPTION_ACK = 0x3767,
CMSG_ENABLE_NAGLE = 0x376B,
CMSG_ENABLE_TAXI_NODE = 0x34A9,
- CMSG_ENGINE_SURVEY = 0x36E9,
+ CMSG_ENGINE_SURVEY = 0x36E6,
CMSG_ENUM_CHARACTERS = 0x35E9,
- CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36E3,
+ CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36E0,
CMSG_FAR_SIGHT = 0x34E9,
CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B1,
CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31B0,
CMSG_GAME_OBJ_REPORT_USE = 0x34F0,
CMSG_GAME_OBJ_USE = 0x34EF,
- CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32DC,
- CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32CD,
- CMSG_GARRISON_CHECK_UPGRADEABLE = 0x331F,
- CMSG_GARRISON_COMPLETE_MISSION = 0x3312,
- CMSG_GARRISON_GENERATE_RECRUITS = 0x32DF,
- CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32ED,
- CMSG_GARRISON_GET_MISSION_REWARD = 0x3345,
- CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3314,
- CMSG_GARRISON_PURCHASE_BUILDING = 0x32C9,
- CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32E1,
- CMSG_GARRISON_REMOVE_FOLLOWER = 0x3309,
- CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32DD,
- CMSG_GARRISON_RENAME_FOLLOWER = 0x32DE,
- CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32C8,
- CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32E6,
- CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32F0,
- CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32EF,
- CMSG_GARRISON_RESEARCH_TALENT = 0x32E2,
- CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32CA,
- CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32DA,
- CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32D6,
- CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32E0,
- CMSG_GARRISON_START_MISSION = 0x3311,
- CMSG_GARRISON_SWAP_BUILDINGS = 0x32CE,
+ CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32DD,
+ CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32CE,
+ CMSG_GARRISON_CHECK_UPGRADEABLE = 0x3320,
+ CMSG_GARRISON_COMPLETE_MISSION = 0x3313,
+ CMSG_GARRISON_GENERATE_RECRUITS = 0x32E0,
+ CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32EE,
+ CMSG_GARRISON_GET_MISSION_REWARD = 0x3346,
+ CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3315,
+ CMSG_GARRISON_PURCHASE_BUILDING = 0x32CA,
+ CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32E2,
+ CMSG_GARRISON_REMOVE_FOLLOWER = 0x330A,
+ CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32DE,
+ CMSG_GARRISON_RENAME_FOLLOWER = 0x32DF,
+ CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32C9,
+ CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32E7,
+ CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32F1,
+ CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32F0,
+ CMSG_GARRISON_RESEARCH_TALENT = 0x32E3,
+ CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32CB,
+ CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32DB,
+ CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32D7,
+ CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32E1,
+ CMSG_GARRISON_START_MISSION = 0x3312,
+ CMSG_GARRISON_SWAP_BUILDINGS = 0x32CF,
CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E8,
- CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36BA,
+ CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B9,
CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3685,
- CMSG_GET_GARRISON_INFO = 0x32C3,
- CMSG_GET_ITEM_PURCHASE_DATA = 0x3531,
- CMSG_GET_MIRROR_IMAGE_DATA = 0x3298,
+ CMSG_GET_GARRISON_INFO = 0x32C4,
+ CMSG_GET_ITEM_PURCHASE_DATA = 0x3530,
+ CMSG_GET_MIRROR_IMAGE_DATA = 0x3299,
CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EF,
- CMSG_GET_REMAINING_GAME_TIME = 0x36F2,
- CMSG_GET_TROPHY_LIST = 0x3302,
- CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E5,
+ CMSG_GET_RAF_ACCOUNT_INFO = 0x3725,
+ CMSG_GET_REMAINING_GAME_TIME = 0x36EF,
+ CMSG_GET_TROPHY_LIST = 0x3303,
+ CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E2,
CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3697,
CMSG_GM_TICKET_GET_CASE_STATUS = 0x3696,
CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3695,
CMSG_GOSSIP_SELECT_OPTION = 0x3494,
- CMSG_GRANT_LEVEL = 0x34F8,
CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308E,
CMSG_GUILD_ADD_RANK = 0x3065,
CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x3060,
@@ -356,7 +356,6 @@ enum OpcodeClient : uint16
CMSG_GUILD_GET_ROSTER = 0x3074,
CMSG_GUILD_INVITE_BY_NAME = 0x3607,
CMSG_GUILD_LEAVE = 0x3063,
- CMSG_GUILD_MEMBER_SEND_SOR_REQUEST = 0x308D,
CMSG_GUILD_NEWS_UPDATE_STICKY = 0x306F,
CMSG_GUILD_OFFICER_REMOVE_MEMBER = 0x3064,
CMSG_GUILD_PERMISSIONS_QUERY = 0x3085,
@@ -368,28 +367,28 @@ enum OpcodeClient : uint16
CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3089,
CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x3070,
CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3071,
- CMSG_GUILD_SET_GUILD_MASTER = 0x36CB,
+ CMSG_GUILD_SET_GUILD_MASTER = 0x36CA,
CMSG_GUILD_SET_MEMBER_NOTE = 0x3073,
CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3068,
CMSG_GUILD_SHIFT_RANK = 0x3067,
CMSG_GUILD_UPDATE_INFO_TEXT = 0x3076,
CMSG_GUILD_UPDATE_MOTD_TEXT = 0x3075,
- CMSG_HEARTH_AND_RESURRECT = 0x3509,
+ CMSG_HEARTH_AND_RESURRECT = 0x3508,
CMSG_HOTFIX_REQUEST = 0x35E6,
CMSG_IGNORE_TRADE = 0x3159,
CMSG_INITIATE_ROLE_POLL = 0x35DA,
CMSG_INITIATE_TRADE = 0x3156,
- CMSG_INSPECT = 0x352B,
- CMSG_INSTANCE_LOCK_RESPONSE = 0x350E,
- CMSG_ISLAND_QUEUE = 0x338E,
- CMSG_ITEM_PURCHASE_REFUND = 0x3532,
- CMSG_ITEM_TEXT_QUERY = 0x3320,
+ CMSG_INSPECT = 0x352A,
+ CMSG_INSTANCE_LOCK_RESPONSE = 0x350D,
+ CMSG_ISLAND_QUEUE = 0x3390,
+ CMSG_ITEM_PURCHASE_REFUND = 0x3531,
+ CMSG_ITEM_TEXT_QUERY = 0x3321,
CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DF,
CMSG_JOIN_RATED_BATTLEGROUND = 0x3178,
CMSG_KEEP_ALIVE = 0x3681,
- CMSG_KEYBOUND_OVERRIDE = 0x3225,
- CMSG_LEARN_PVP_TALENTS = 0x3556,
- CMSG_LEARN_TALENTS = 0x3554,
+ CMSG_KEYBOUND_OVERRIDE = 0x3226,
+ CMSG_LEARN_PVP_TALENTS = 0x3555,
+ CMSG_LEARN_TALENTS = 0x3553,
CMSG_LEAVE_GROUP = 0x364B,
CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31E0,
CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360D,
@@ -398,10 +397,10 @@ enum OpcodeClient : uint16
CMSG_LFG_LIST_GET_STATUS = 0x360B,
CMSG_LFG_LIST_INVITE_APPLICANT = 0x3610,
CMSG_LFG_LIST_INVITE_RESPONSE = 0x3611,
- CMSG_LFG_LIST_JOIN = 0x335D,
+ CMSG_LFG_LIST_JOIN = 0x335E,
CMSG_LFG_LIST_LEAVE = 0x360A,
CMSG_LFG_LIST_SEARCH = 0x360C,
- CMSG_LFG_LIST_UPDATE_REQUEST = 0x335E,
+ CMSG_LFG_LIST_UPDATE_REQUEST = 0x335F,
CMSG_LF_GUILD_ADD_RECRUIT = 0x361C,
CMSG_LF_GUILD_BROWSE = 0x361E,
CMSG_LF_GUILD_DECLINE_RECRUIT = 0x3079,
@@ -411,11 +410,11 @@ enum OpcodeClient : uint16
CMSG_LF_GUILD_REMOVE_RECRUIT = 0x307B,
CMSG_LF_GUILD_SET_GUILD_POST = 0x361D,
CMSG_LIST_INVENTORY = 0x34A1,
- CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36BD,
- CMSG_LIVE_REGION_CHARACTER_COPY = 0x36BC,
- CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36BB,
+ CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36BC,
+ CMSG_LIVE_REGION_CHARACTER_COPY = 0x36BB,
+ CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36BA,
CMSG_LOADING_SCREEN_NOTIFY = 0x35F9,
- CMSG_LOAD_SELECTED_TROPHY = 0x3303,
+ CMSG_LOAD_SELECTED_TROPHY = 0x3304,
CMSG_LOGOUT_CANCEL = 0x34D9,
CMSG_LOGOUT_INSTANT = 0x34DA,
CMSG_LOGOUT_REQUEST = 0x34D7,
@@ -427,21 +426,21 @@ enum OpcodeClient : uint16
CMSG_LOOT_ROLL = 0x3216,
CMSG_LOOT_UNIT = 0x320F,
CMSG_LOW_LEVEL_RAID1 = 0x36A4,
- CMSG_LOW_LEVEL_RAID2 = 0x3515,
- CMSG_MAIL_CREATE_TEXT_ITEM = 0x353D,
- CMSG_MAIL_DELETE = 0x3227,
- CMSG_MAIL_GET_LIST = 0x3538,
- CMSG_MAIL_MARK_AS_READ = 0x353C,
+ CMSG_LOW_LEVEL_RAID2 = 0x3514,
+ CMSG_MAIL_CREATE_TEXT_ITEM = 0x353C,
+ CMSG_MAIL_DELETE = 0x3228,
+ CMSG_MAIL_GET_LIST = 0x3537,
+ CMSG_MAIL_MARK_AS_READ = 0x353B,
CMSG_MAIL_RETURN_TO_SENDER = 0x3657,
- CMSG_MAIL_TAKE_ITEM = 0x353A,
- CMSG_MAIL_TAKE_MONEY = 0x3539,
+ CMSG_MAIL_TAKE_ITEM = 0x3539,
+ CMSG_MAIL_TAKE_MONEY = 0x3538,
CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x322A,
CMSG_MASTER_LOOT_ITEM = 0x3212,
CMSG_MINIMAP_PING = 0x364D,
CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318A,
CMSG_MOUNT_CLEAR_FANFARE = 0x312D,
CMSG_MOUNT_SET_FAVORITE = 0x3633,
- CMSG_MOUNT_SPECIAL_ANIM = 0x3283,
+ CMSG_MOUNT_SPECIAL_ANIM = 0x3284,
CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A12,
CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2C,
CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A31,
@@ -507,28 +506,28 @@ enum OpcodeClient : uint16
CMSG_MOVE_UPDATE_FALL_SPEED = 0x3A17,
CMSG_MOVE_WATER_WALK_ACK = 0x3A1A,
CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D5,
- CMSG_NEXT_CINEMATIC_CAMERA = 0x3546,
+ CMSG_NEXT_CINEMATIC_CAMERA = 0x3545,
CMSG_OBJECT_UPDATE_FAILED = 0x3180,
CMSG_OBJECT_UPDATE_RESCUED = 0x3181,
- CMSG_OFFER_PETITION = 0x36B3,
- CMSG_OPENING_CINEMATIC = 0x3545,
- CMSG_OPEN_ITEM = 0x3321,
- CMSG_OPEN_MISSION_NPC = 0x32E8,
- CMSG_OPEN_SHIPMENT_NPC = 0x32EE,
- CMSG_OPEN_TRADESKILL_NPC = 0x32F9,
+ CMSG_OFFER_PETITION = 0x36B2,
+ CMSG_OPENING_CINEMATIC = 0x3544,
+ CMSG_OPEN_ITEM = 0x3322,
+ CMSG_OPEN_MISSION_NPC = 0x32E9,
+ CMSG_OPEN_SHIPMENT_NPC = 0x32EF,
+ CMSG_OPEN_TRADESKILL_NPC = 0x32FA,
CMSG_OPT_OUT_OF_LOOT = 0x34F7,
CMSG_PARTY_INVITE = 0x3603,
CMSG_PARTY_INVITE_RESPONSE = 0x3604,
CMSG_PARTY_UNINVITE = 0x3649,
CMSG_PETITION_BUY = 0x34C9,
- CMSG_PETITION_RENAME_GUILD = 0x36CC,
+ CMSG_PETITION_RENAME_GUILD = 0x36CB,
CMSG_PETITION_SHOW_LIST = 0x34C8,
CMSG_PETITION_SHOW_SIGNATURES = 0x34CA,
CMSG_PET_ABANDON = 0x348D,
CMSG_PET_ACTION = 0x348B,
CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E4,
CMSG_PET_BATTLE_INPUT = 0x3642,
- CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3226,
+ CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3227,
CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E3,
CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3643,
CMSG_PET_BATTLE_REQUEST_PVP = 0x31DD,
@@ -537,7 +536,7 @@ enum OpcodeClient : uint16
CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E5,
CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31DC,
CMSG_PET_CANCEL_AURA = 0x348E,
- CMSG_PET_CAST_SPELL = 0x329C,
+ CMSG_PET_CAST_SPELL = 0x329D,
CMSG_PET_RENAME = 0x3687,
CMSG_PET_SET_ACTION = 0x348A,
CMSG_PET_SPELL_AUTOCAST = 0x348F,
@@ -546,28 +545,28 @@ enum OpcodeClient : uint16
CMSG_PLAYER_LOGIN = 0x35EB,
CMSG_PUSH_QUEST_TO_PARTY = 0x349F,
CMSG_PVP_LOG_DATA = 0x317B,
- CMSG_QUERY_BATTLE_PET_NAME = 0x3278,
+ CMSG_QUERY_BATTLE_PET_NAME = 0x3279,
CMSG_QUERY_COMMUNITY_NAME = 0x368E,
CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3662,
CMSG_QUERY_CORPSE_TRANSPORT = 0x3663,
CMSG_QUERY_COUNTDOWN_TIMER = 0x31A8,
- CMSG_QUERY_CREATURE = 0x3272,
- CMSG_QUERY_GAME_OBJECT = 0x3273,
- CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3279,
+ CMSG_QUERY_CREATURE = 0x3273,
+ CMSG_QUERY_GAME_OBJECT = 0x3274,
+ CMSG_QUERY_GARRISON_CREATURE_NAME = 0x327A,
CMSG_QUERY_GUILD_INFO = 0x3691,
- CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3503,
- CMSG_QUERY_NEXT_MAIL_TIME = 0x353B,
- CMSG_QUERY_NPC_TEXT = 0x3274,
- CMSG_QUERY_PAGE_TEXT = 0x3276,
- CMSG_QUERY_PETITION = 0x327A,
- CMSG_QUERY_PET_NAME = 0x3277,
+ CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3501,
+ CMSG_QUERY_NEXT_MAIL_TIME = 0x353A,
+ CMSG_QUERY_NPC_TEXT = 0x3275,
+ CMSG_QUERY_PAGE_TEXT = 0x3277,
+ CMSG_QUERY_PETITION = 0x327B,
+ CMSG_QUERY_PET_NAME = 0x3278,
CMSG_QUERY_PLAYER_NAME = 0x368D,
CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3175,
- CMSG_QUERY_QUEST_INFO = 0x3275,
+ CMSG_QUERY_QUEST_INFO = 0x3276,
CMSG_QUERY_REALM_NAME = 0x3690,
CMSG_QUERY_SCENARIO_POI = 0x3658,
CMSG_QUERY_TIME = 0x34D6,
- CMSG_QUERY_TREASURE_PICKER = 0x3347,
+ CMSG_QUERY_TREASURE_PICKER = 0x3348,
CMSG_QUERY_VOID_STORAGE = 0x31A1,
CMSG_QUEST_CONFIRM_ACCEPT = 0x349E,
CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x3498,
@@ -578,136 +577,143 @@ enum OpcodeClient : uint16
CMSG_QUEST_GIVER_REQUEST_REWARD = 0x349B,
CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x349D,
CMSG_QUEST_GIVER_STATUS_QUERY = 0x349C,
- CMSG_QUEST_LOG_REMOVE_QUEST = 0x3530,
- CMSG_QUEST_POI_QUERY = 0x36B4,
+ CMSG_QUEST_LOG_REMOVE_QUEST = 0x352F,
+ CMSG_QUEST_POI_QUERY = 0x36B3,
CMSG_QUEST_PUSH_RESULT = 0x34A0,
+ CMSG_QUEST_SESSION_BEGIN_RESPONSE = 0x339F,
+ CMSG_QUEST_SESSION_REQUEST_START = 0x339E,
+ CMSG_QUEST_SESSION_REQUEST_STOP = 0x3730,
CMSG_QUEUED_MESSAGES_END = 0x376C,
- CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x370C,
- CMSG_QUICK_JOIN_REQUEST_INVITE = 0x370B,
- CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x370A,
- CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3709,
- CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36EA,
+ CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x370A,
+ CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3709,
+ CMSG_QUICK_JOIN_REQUEST_INVITE_WITH_CONFIRMATION = 0x3735,
+ CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3708,
+ CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3707,
+ CMSG_RAF_CLAIM_ACTIVITY_REWARD = 0x3505,
+ CMSG_RAF_CLAIM_NEXT_REWARD = 0x3726,
+ CMSG_RAF_GENERATE_RECRUITMENT_LINK = 0x3728,
+ CMSG_RAF_UPDATE_RECRUITMENT_INFO = 0x3727,
+ CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E7,
CMSG_RANDOM_ROLL = 0x3656,
CMSG_READY_CHECK_RESPONSE = 0x3636,
- CMSG_READ_ITEM = 0x3322,
+ CMSG_READ_ITEM = 0x3323,
CMSG_RECLAIM_CORPSE = 0x34DC,
- CMSG_RECRUIT_A_FRIEND = 0x36D2,
- CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36F4,
- CMSG_REDEEM_WOW_TOKEN_START = 0x36F3,
- CMSG_REMOVE_NEW_ITEM = 0x334A,
+ CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36F1,
+ CMSG_REDEEM_WOW_TOKEN_START = 0x36F0,
+ CMSG_REMOVE_NEW_ITEM = 0x334B,
+ CMSG_REMOVE_RAF_RECRUIT = 0x3729,
CMSG_REORDER_CHARACTERS = 0x35EA,
CMSG_REPAIR_ITEM = 0x34ED,
- CMSG_REPLACE_TROPHY = 0x3304,
- CMSG_REPOP_REQUEST = 0x3528,
- CMSG_REPORT_CLIENT_VARIABLES = 0x3706,
- CMSG_REPORT_ENABLED_ADDONS = 0x3705,
- CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3707,
+ CMSG_REPLACE_TROPHY = 0x3305,
+ CMSG_REPOP_REQUEST = 0x3527,
+ CMSG_REPORT_CLIENT_VARIABLES = 0x3704,
+ CMSG_REPORT_ENABLED_ADDONS = 0x3703,
+ CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3705,
CMSG_REPORT_PVP_PLAYER_AFK = 0x34F5,
- CMSG_REPORT_SERVER_LAG = 0x3394,
+ CMSG_REPORT_SERVER_LAG = 0x3396,
CMSG_REQUEST_ACCOUNT_DATA = 0x369A,
- CMSG_REQUEST_AREA_POI_UPDATE = 0x3349,
+ CMSG_REQUEST_AREA_POI_UPDATE = 0x334A,
CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DD,
CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317D,
CMSG_REQUEST_CEMETERY_LIST = 0x3176,
CMSG_REQUEST_CHALLENGE_MODE_AFFIXES = 0x3208,
CMSG_REQUEST_CHARACTER_GUILD_FOLLOW_INFO = 0x3692,
- CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32B5,
- CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x352C,
+ CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32B6,
+ CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x352B,
CMSG_REQUEST_FORCED_REACTIONS = 0x320A,
CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A7,
CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A6,
- CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32A5,
+ CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32A6,
CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F8,
CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3655,
CMSG_REQUEST_PET_INFO = 0x3490,
- CMSG_REQUEST_PLAYED_TIME = 0x327D,
+ CMSG_REQUEST_PLAYED_TIME = 0x327E,
CMSG_REQUEST_PVP_BRAWL_INFO = 0x3195,
CMSG_REQUEST_PVP_REWARDS = 0x3194,
- CMSG_REQUEST_QUEST_LINES_FOR_MAP = 0x338F,
- CMSG_REQUEST_RAID_INFO = 0x36CD,
+ CMSG_REQUEST_QUEST_LINES_FOR_MAP = 0x3391,
+ CMSG_REQUEST_RAID_INFO = 0x36CC,
CMSG_REQUEST_RATED_BATTLEFIELD_INFO = 0x35E4,
CMSG_REQUEST_REALM_GUILD_MASTER_INFO = 0x309B,
CMSG_REQUEST_RESEARCH_HISTORY = 0x3167,
CMSG_REQUEST_STABLED_PETS = 0x3491,
- CMSG_REQUEST_VEHICLE_EXIT = 0x3238,
- CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x323A,
- CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3239,
- CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x323B,
- CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3348,
- CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36EC,
+ CMSG_REQUEST_VEHICLE_EXIT = 0x3239,
+ CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x323B,
+ CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x323A,
+ CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x323C,
+ CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3349,
+ CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36E9,
CMSG_RESET_CHALLENGE_MODE = 0x3206,
CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3207,
CMSG_RESET_INSTANCES = 0x366A,
CMSG_RESURRECT_RESPONSE = 0x3686,
- CMSG_REVERT_MONUMENT_APPEARANCE = 0x3306,
- CMSG_RIDE_VEHICLE_INTERACT = 0x323C,
+ CMSG_REVERT_MONUMENT_APPEARANCE = 0x3307,
+ CMSG_RIDE_VEHICLE_INTERACT = 0x323D,
CMSG_SAVE_CUF_PROFILES = 0x318B,
- CMSG_SAVE_EQUIPMENT_SET = 0x350C,
- CMSG_SAVE_GUILD_EMBLEM = 0x32A9,
- CMSG_SCENE_PLAYBACK_CANCELED = 0x3222,
- CMSG_SCENE_PLAYBACK_COMPLETE = 0x3221,
- CMSG_SCENE_TRIGGER_EVENT = 0x3223,
- CMSG_SELF_RES = 0x3533,
+ CMSG_SAVE_EQUIPMENT_SET = 0x350B,
+ CMSG_SAVE_GUILD_EMBLEM = 0x32AA,
+ CMSG_SCENE_PLAYBACK_CANCELED = 0x3223,
+ CMSG_SCENE_PLAYBACK_COMPLETE = 0x3222,
+ CMSG_SCENE_TRIGGER_EVENT = 0x3224,
+ CMSG_SELF_RES = 0x3532,
CMSG_SELL_ITEM = 0x34A2,
- CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36EE,
- CMSG_SELL_WOW_TOKEN_START = 0x36ED,
- CMSG_SEND_CONTACT_LIST = 0x36D4,
+ CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36EB,
+ CMSG_SELL_WOW_TOKEN_START = 0x36EA,
+ CMSG_SEND_CONTACT_LIST = 0x36D1,
CMSG_SEND_MAIL = 0x35FB,
- CMSG_SEND_SOR_REQUEST_VIA_ADDRESS = 0x3621,
CMSG_SEND_TEXT_EMOTE = 0x3488,
- CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3228,
- CMSG_SET_ACTION_BAR_TOGGLES = 0x3534,
+ CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3229,
+ CMSG_SET_ACTION_BAR_TOGGLES = 0x3533,
CMSG_SET_ACTION_BUTTON = 0x3637,
CMSG_SET_ACTIVE_MOVER = 0x3A37,
- CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32B6,
+ CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32B7,
CMSG_SET_ASSISTANT_LEADER = 0x3651,
- CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3325,
- CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3326,
- CMSG_SET_CONTACT_NOTES = 0x36D7,
+ CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3326,
+ CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3327,
+ CMSG_SET_CONTACT_NOTES = 0x36D4,
CMSG_SET_CURRENCY_FLAGS = 0x3169,
- CMSG_SET_DIFFICULTY_ID = 0x3224,
+ CMSG_SET_DIFFICULTY_ID = 0x3225,
CMSG_SET_DUNGEON_DIFFICULTY = 0x3684,
CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3618,
CMSG_SET_FACTION_AT_WAR = 0x34DF,
CMSG_SET_FACTION_INACTIVE = 0x34E1,
CMSG_SET_FACTION_NOT_AT_WAR = 0x34E0,
CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B9,
- CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3328,
- CMSG_SET_LFG_BONUS_FACTION_ID = 0x32A4,
+ CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3329,
+ CMSG_SET_LFG_BONUS_FACTION_ID = 0x32A5,
CMSG_SET_LOOT_METHOD = 0x364A,
- CMSG_SET_LOOT_SPECIALIZATION = 0x3541,
+ CMSG_SET_LOOT_SPECIALIZATION = 0x3540,
CMSG_SET_PARTY_ASSIGNMENT = 0x3653,
CMSG_SET_PARTY_LEADER = 0x364C,
CMSG_SET_PET_SLOT = 0x3168,
CMSG_SET_PLAYER_DECLINED_NAMES = 0x368C,
CMSG_SET_PREFERRED_CEMETERY = 0x3177,
- CMSG_SET_PVP = 0x32AD,
- CMSG_SET_RAID_DIFFICULTY = 0x36E1,
+ CMSG_SET_PVP = 0x32AE,
+ CMSG_SET_RAID_DIFFICULTY = 0x36DE,
CMSG_SET_ROLE = 0x35D9,
CMSG_SET_SAVED_INSTANCE_EXTEND = 0x368A,
- CMSG_SET_SELECTION = 0x352A,
+ CMSG_SET_SELECTION = 0x3529,
CMSG_SET_SHEATHED = 0x3489,
- CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3327,
+ CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3328,
CMSG_SET_TAXI_BENCHMARK_MODE = 0x34F4,
- CMSG_SET_TITLE = 0x3281,
+ CMSG_SET_TITLE = 0x3282,
CMSG_SET_TRADE_CURRENCY = 0x3160,
CMSG_SET_TRADE_GOLD = 0x315F,
CMSG_SET_TRADE_ITEM = 0x315D,
- CMSG_SET_USING_PARTY_GARRISON = 0x32EA,
- CMSG_SET_WAR_MODE = 0x32AE,
+ CMSG_SET_USING_PARTY_GARRISON = 0x32EB,
+ CMSG_SET_WAR_MODE = 0x32AF,
CMSG_SET_WATCHED_FACTION = 0x34E2,
- CMSG_SHOW_TRADE_SKILL = 0x36C5,
- CMSG_SIGN_PETITION = 0x3535,
+ CMSG_SHOW_TRADE_SKILL = 0x36C4,
+ CMSG_SIGN_PETITION = 0x3534,
CMSG_SILENCE_PARTY_TALKER = 0x3654,
CMSG_SOCKET_GEMS = 0x34EC,
- CMSG_SORT_BAGS = 0x3329,
- CMSG_SORT_BANK_BAGS = 0x332A,
- CMSG_SORT_REAGENT_BANK_BAGS = 0x332B,
+ CMSG_SORT_BAGS = 0x332A,
+ CMSG_SORT_BANK_BAGS = 0x332B,
+ CMSG_SORT_REAGENT_BANK_BAGS = 0x332C,
CMSG_SPELL_CLICK = 0x3495,
CMSG_SPIRIT_HEALER_ACTIVATE = 0x34AF,
CMSG_SPLIT_ITEM = 0x399E,
CMSG_STAND_STATE_CHANGE = 0x3189,
- CMSG_START_CHALLENGE_MODE = 0x354C,
+ CMSG_START_CHALLENGE_MODE = 0x354B,
CMSG_START_SPECTATOR_WAR_GAME = 0x35E0,
CMSG_START_WAR_GAME = 0x35DF,
CMSG_SUMMON_RESPONSE = 0x366C,
@@ -721,7 +727,7 @@ enum OpcodeClient : uint16
CMSG_SWAP_ITEM = 0x399C,
CMSG_SWAP_SUB_GROUPS = 0x364F,
CMSG_SWAP_VOID_ITEM = 0x31A3,
- CMSG_TABARD_VENDOR_ACTIVATE = 0x32AA,
+ CMSG_TABARD_VENDOR_ACTIVATE = 0x32AB,
CMSG_TALK_TO_GOSSIP = 0x3492,
CMSG_TAXI_NODE_STATUS_QUERY = 0x34A8,
CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34AA,
@@ -731,43 +737,43 @@ enum OpcodeClient : uint16
CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3A,
CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A39,
CMSG_TOGGLE_DIFFICULTY = 0x3659,
- CMSG_TOGGLE_PVP = 0x32AC,
- CMSG_TOTEM_DESTROYED = 0x34FB,
+ CMSG_TOGGLE_PVP = 0x32AD,
+ CMSG_TOTEM_DESTROYED = 0x34F9,
CMSG_TOY_CLEAR_FANFARE = 0x312E,
- CMSG_TRADE_SKILL_SET_FAVORITE = 0x3346,
+ CMSG_TRADE_SKILL_SET_FAVORITE = 0x3347,
CMSG_TRAINER_BUY_SPELL = 0x34AE,
CMSG_TRAINER_LIST = 0x34AD,
CMSG_TRANSMOGRIFY_ITEMS = 0x3196,
- CMSG_TURN_IN_PETITION = 0x3537,
- CMSG_TUTORIAL = 0x36E2,
+ CMSG_TURN_IN_PETITION = 0x3536,
+ CMSG_TUTORIAL = 0x36DF,
CMSG_TWITTER_CHECK_STATUS = 0x312A,
CMSG_TWITTER_CONNECT = 0x3127,
CMSG_TWITTER_DISCONNECT = 0x312B,
- CMSG_TWITTER_POST = 0x332D,
+ CMSG_TWITTER_POST = 0x332E,
CMSG_UI_TIME_REQUEST = 0x369F,
CMSG_UNACCEPT_TRADE = 0x315B,
- CMSG_UNDELETE_CHARACTER = 0x36E4,
+ CMSG_UNDELETE_CHARACTER = 0x36E1,
CMSG_UNLEARN_SKILL = 0x34E6,
CMSG_UNLEARN_SPECIALIZATION = 0x31A4,
CMSG_UNLOCK_VOID_STORAGE = 0x31A0,
CMSG_UPDATE_ACCOUNT_DATA = 0x369B,
- CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x329F,
+ CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x32A0,
CMSG_UPDATE_CLIENT_SETTINGS = 0x3666,
CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A3E,
CMSG_UPDATE_RAID_TARGET = 0x3652,
- CMSG_UPDATE_SPELL_VISUAL = 0x329E,
- CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36FA,
- CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F5,
- CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36EB,
- CMSG_UPGRADE_GARRISON = 0x32BE,
+ CMSG_UPDATE_SPELL_VISUAL = 0x329F,
+ CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F7,
+ CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F2,
+ CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36E8,
+ CMSG_UPGRADE_GARRISON = 0x32BF,
CMSG_USED_FOLLOW = 0x3186,
- CMSG_USE_CRITTER_ITEM = 0x3242,
+ CMSG_USE_CRITTER_ITEM = 0x3243,
CMSG_USE_EQUIPMENT_SET = 0x3995,
- CMSG_USE_ITEM = 0x3299,
- CMSG_USE_TOY = 0x329B,
+ CMSG_USE_ITEM = 0x329A,
+ CMSG_USE_TOY = 0x329C,
CMSG_VIOLENCE_LEVEL = 0x3184,
- CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3715,
- CMSG_VOICE_CHAT_LOGIN = 0x3714,
+ CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3713,
+ CMSG_VOICE_CHAT_LOGIN = 0x3712,
CMSG_VOID_STORAGE_TRANSFER = 0x31A2,
CMSG_WARDEN_DATA = 0x35ED,
CMSG_WHO = 0x3683,
@@ -775,157 +781,160 @@ enum OpcodeClient : uint16
CMSG_WORLD_PORT_RESPONSE = 0x35FA,
CMSG_WRAP_ITEM = 0x3994,
+ CMSG_ACCEPT_LEVEL_GRANT = 0xBADD,
CMSG_BF_MGR_ENTRY_INVITE_RESPONSE = 0xBADD,
CMSG_BF_MGR_QUEUE_INVITE_RESPONSE = 0xBADD,
CMSG_BF_MGR_QUEUE_EXIT_REQUEST = 0xBADD,
+ CMSG_GRANT_LEVEL = 0xBADD,
};
enum OpcodeServer : uint16
{
- SMSG_ABORT_NEW_WORLD = 0x25AE,
- SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2655,
- SMSG_ACCOUNT_DATA_TIMES = 0x2753,
- SMSG_ACCOUNT_MOUNT_UPDATE = 0x25C3,
- SMSG_ACCOUNT_TOYS_UPDATE = 0x25C4,
- SMSG_ACHIEVEMENT_DELETED = 0x2728,
+ SMSG_ABORT_NEW_WORLD = 0x25AF,
+ SMSG_ACCOUNT_CRITERIA_UPDATE = 0x28C1,
+ SMSG_ACCOUNT_DATA_TIMES = 0x2752,
+ SMSG_ACCOUNT_MOUNT_UPDATE = 0x25C4,
+ SMSG_ACCOUNT_TOYS_UPDATE = 0x25C5,
+ SMSG_ACHIEVEMENT_DELETED = 0x2727,
SMSG_ACHIEVEMENT_EARNED = 0x2663,
SMSG_ACTIVATE_TAXI_REPLY = 0x26AC,
SMSG_ACTIVE_GLYPHS = 0x2C53,
SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265D,
- SMSG_ADD_ITEM_PASSIVE = 0x25BF,
+ SMSG_ADD_ITEM_PASSIVE = 0x25C0,
SMSG_ADD_LOSS_OF_CONTROL = 0x269C,
SMSG_ADD_RUNE_POWER = 0x26EB,
- SMSG_ADJUST_SPLINE_DURATION = 0x25E8,
- SMSG_ADVENTURE_MAP_POI_QUERY_RESPONSE = 0x2847,
- SMSG_AE_LOOT_TARGETS = 0x262E,
- SMSG_AE_LOOT_TARGET_ACK = 0x262F,
+ SMSG_ADJUST_SPLINE_DURATION = 0x25E9,
+ SMSG_ADVENTURE_MAP_POI_QUERY_RESPONSE = 0x2843,
+ SMSG_AE_LOOT_TARGETS = 0x262F,
+ SMSG_AE_LOOT_TARGET_ACK = 0x2630,
SMSG_AI_REACTION = 0x26E8,
- SMSG_ALL_ACCOUNT_CRITERIA = 0x2570,
- SMSG_ALL_ACHIEVEMENT_DATA = 0x256F,
+ SMSG_ALL_ACCOUNT_CRITERIA = 0x2571,
+ SMSG_ALL_ACHIEVEMENT_DATA = 0x2570,
SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8,
- SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2587,
- SMSG_AREA_POI_UPDATE = 0x2854,
- SMSG_AREA_SPIRIT_HEALER_TIME = 0x278B,
+ SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2588,
+ SMSG_AREA_POI_UPDATE = 0x2850,
+ SMSG_AREA_SPIRIT_HEALER_TIME = 0x2789,
SMSG_AREA_TRIGGER_DENIED = 0x26A3,
- SMSG_AREA_TRIGGER_NO_CORPSE = 0x275F,
- SMSG_AREA_TRIGGER_PLAY_VISUAL_EVENT = 0x2640,
- SMSG_AREA_TRIGGER_RE_PATH = 0x263E,
- SMSG_AREA_TRIGGER_RE_SHAPE = 0x2643,
- SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x2651,
- SMSG_ARENA_MATCH_END = 0x28AC,
- SMSG_ARENA_MATCH_START = 0x28AB,
+ SMSG_AREA_TRIGGER_NO_CORPSE = 0x275E,
+ SMSG_AREA_TRIGGER_PLAY_VISUAL_EVENT = 0x2641,
+ SMSG_AREA_TRIGGER_RE_PATH = 0x263F,
+ SMSG_AREA_TRIGGER_RE_SHAPE = 0x2644,
+ SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x2652,
+ SMSG_ARENA_MATCH_END = 0x28A8,
+ SMSG_ARENA_MATCH_START = 0x28A7,
SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2668,
- SMSG_ARTIFACT_FORGE_OPENED = 0x27EF,
- SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27F2,
- SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27F3,
- SMSG_ARTIFACT_XP_GAIN = 0x2837,
- SMSG_ATTACKER_STATE_UPDATE = 0x27DC,
+ SMSG_ARTIFACT_FORGE_OPENED = 0x27EB,
+ SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27EE,
+ SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27EF,
+ SMSG_ARTIFACT_XP_GAIN = 0x2833,
+ SMSG_ATTACKER_STATE_UPDATE = 0x27D8,
SMSG_ATTACK_START = 0x2670,
SMSG_ATTACK_STOP = 0x2671,
- SMSG_ATTACK_SWING_ERROR = 0x273D,
- SMSG_ATTACK_SWING_LANDED_LOG = 0x273E,
- SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2732,
- SMSG_AUCTION_COMMAND_RESULT = 0x272F,
- SMSG_AUCTION_HELLO_RESPONSE = 0x272D,
- SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x2736,
- SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2734,
- SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x2735,
- SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x2737,
- SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2731,
- SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2733,
- SMSG_AUCTION_REPLICATE_RESPONSE = 0x272E,
- SMSG_AUCTION_WON_NOTIFICATION = 0x2730,
+ SMSG_ATTACK_SWING_ERROR = 0x273C,
+ SMSG_ATTACK_SWING_LANDED_LOG = 0x273D,
+ SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2731,
+ SMSG_AUCTION_COMMAND_RESULT = 0x272E,
+ SMSG_AUCTION_HELLO_RESPONSE = 0x272C,
+ SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x2735,
+ SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2733,
+ SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x2734,
+ SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x2736,
+ SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2730,
+ SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2732,
+ SMSG_AUCTION_REPLICATE_RESPONSE = 0x272D,
+ SMSG_AUCTION_WON_NOTIFICATION = 0x272F,
SMSG_AURA_POINTS_DEPLETED = 0x2C23,
SMSG_AURA_UPDATE = 0x2C22,
SMSG_AUTH_CHALLENGE = 0x3048,
- SMSG_AUTH_RESPONSE = 0x256C,
- SMSG_AVAILABLE_HOTFIXES = 0x25A2,
- SMSG_AZERITE_EMPOWERED_ITEM_EQUIPPED_STATUS_CHANGED = 0x2876,
- SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN = 0x2841,
- SMSG_AZERITE_ESSENCE_FORGE_CLOSE = 0x2879,
- SMSG_AZERITE_ESSENCE_FORGE_OPENED = 0x2878,
- SMSG_AZERITE_ESSENCE_SELECTION_RESULT = 0x2877,
- SMSG_AZERITE_XP_GAIN = 0x2875,
+ SMSG_AUTH_ERROR = 0x256C,
+ SMSG_AUTH_RESPONSE = 0x256D,
+ SMSG_AVAILABLE_HOTFIXES = 0x25A3,
+ SMSG_AZERITE_EMPOWERED_ITEM_EQUIPPED_STATUS_CHANGED = 0x2872,
+ SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN = 0x283D,
+ SMSG_AZERITE_ESSENCE_FORGE_CLOSE = 0x2875,
+ SMSG_AZERITE_ESSENCE_FORGE_OPENED = 0x2874,
+ SMSG_AZERITE_ESSENCE_SELECTION_RESULT = 0x2873,
+ SMSG_AZERITE_XP_GAIN = 0x2871,
SMSG_BAN_REASON = 0x26B8,
SMSG_BARBER_SHOP_RESULT = 0x26F1,
- SMSG_BATTLEFIELD_LIST = 0x2595,
- SMSG_BATTLEFIELD_PORT_DENIED = 0x259B,
- SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2591,
- SMSG_BATTLEFIELD_STATUS_FAILED = 0x2594,
- SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x2590,
- SMSG_BATTLEFIELD_STATUS_NONE = 0x2593,
- SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2592,
- SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x25A6,
- SMSG_BATTLEGROUND_INFO_THROTTLED = 0x259C,
- SMSG_BATTLEGROUND_INIT = 0x27AA,
- SMSG_BATTLEGROUND_PLAYER_JOINED = 0x2599,
- SMSG_BATTLEGROUND_PLAYER_LEFT = 0x259A,
- SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2596,
- SMSG_BATTLEGROUND_POINTS = 0x27A9,
- SMSG_BATTLENET_CHALLENGE_ABORT = 0x27DB,
- SMSG_BATTLENET_CHALLENGE_START = 0x27DA,
- SMSG_BATTLENET_NOTIFICATION = 0x284F,
- SMSG_BATTLENET_REALM_LIST_TICKET = 0x2851,
- SMSG_BATTLENET_RESPONSE = 0x284E,
- SMSG_BATTLENET_SET_SESSION_STATE = 0x2850,
- SMSG_BATTLENET_UPDATE_SESSION_KEY = 0x286F,
- SMSG_BATTLE_PAY_ACK_FAILED = 0x27D3,
- SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27C8,
- SMSG_BATTLE_PAY_BUNDLE_PRICE_UPDATE = 0x2862,
- SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27D2,
- SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27C6,
- SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27C5,
- SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27C4,
- SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27C2,
- SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27C0,
- SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27C1,
- SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27C7,
- SMSG_BATTLE_PAY_OPEN_CHECKOUT_RESULT = 0x2868,
- SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27D1,
- SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27CF,
- SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27CE,
- SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x2871,
- SMSG_BATTLE_PAY_TOY_DELIVERED = 0x27C9,
- SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x2866,
- SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27C3,
- SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x283A,
- SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS = 0x2864,
+ SMSG_BATTLEFIELD_LIST = 0x2596,
+ SMSG_BATTLEFIELD_PORT_DENIED = 0x259C,
+ SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2592,
+ SMSG_BATTLEFIELD_STATUS_FAILED = 0x2595,
+ SMSG_BATTLEFIELD_STATUS_NEED_CONFIRMATION = 0x2591,
+ SMSG_BATTLEFIELD_STATUS_NONE = 0x2594,
+ SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2593,
+ SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x25A7,
+ SMSG_BATTLEGROUND_INFO_THROTTLED = 0x259D,
+ SMSG_BATTLEGROUND_INIT = 0x27A7,
+ SMSG_BATTLEGROUND_PLAYER_JOINED = 0x259A,
+ SMSG_BATTLEGROUND_PLAYER_LEFT = 0x259B,
+ SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2597,
+ SMSG_BATTLEGROUND_POINTS = 0x27A6,
+ SMSG_BATTLENET_CHALLENGE_ABORT = 0x27D7,
+ SMSG_BATTLENET_CHALLENGE_START = 0x27D6,
+ SMSG_BATTLENET_NOTIFICATION = 0x284B,
+ SMSG_BATTLENET_REALM_LIST_TICKET = 0x284D,
+ SMSG_BATTLENET_RESPONSE = 0x284A,
+ SMSG_BATTLENET_SET_SESSION_STATE = 0x284C,
+ SMSG_BATTLENET_UPDATE_SESSION_KEY = 0x286B,
+ SMSG_BATTLE_PAY_ACK_FAILED = 0x27D1,
+ SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27C5,
+ SMSG_BATTLE_PAY_BUNDLE_PRICE_UPDATE = 0x285E,
+ SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27D0,
+ SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27C3,
+ SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27C2,
+ SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27C1,
+ SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27BF,
+ SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27BD,
+ SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27BE,
+ SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27C4,
+ SMSG_BATTLE_PAY_OPEN_CHECKOUT_RESULT = 0x2864,
+ SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27CF,
+ SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27CD,
+ SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27CC,
+ SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x286D,
+ SMSG_BATTLE_PAY_TOY_DELIVERED = 0x27C6,
+ SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x2862,
+ SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27C0,
+ SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2836,
+ SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS = 0x2860,
SMSG_BATTLE_PAY_VAS_GUILD_FOLLOW_INFO = 0x29E7,
SMSG_BATTLE_PAY_VAS_GUILD_MASTER_LIST = 0x29E6,
- SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x283D,
- SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x283E,
- SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x283C,
- SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x283B,
- SMSG_BATTLE_PAY_VAS_TRANSFER_QUEUE_STATUS = 0x2863,
- SMSG_BATTLE_PETS_HEALED = 0x260A,
+ SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x2839,
+ SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x283A,
+ SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x2838,
+ SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x2837,
+ SMSG_BATTLE_PAY_VAS_TRANSFER_QUEUE_STATUS = 0x285F,
+ SMSG_BATTLE_PETS_HEALED = 0x260B,
SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A6,
- SMSG_BATTLE_PET_DELETED = 0x2607,
+ SMSG_BATTLE_PET_DELETED = 0x2608,
SMSG_BATTLE_PET_ERROR = 0x2658,
- SMSG_BATTLE_PET_JOURNAL = 0x2606,
- SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2604,
- SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2605,
- SMSG_BATTLE_PET_LICENSE_CHANGED = 0x260B,
- SMSG_BATTLE_PET_MAX_COUNT_CHANGED = 0x2602,
- SMSG_BATTLE_PET_RESTORED = 0x2609,
- SMSG_BATTLE_PET_REVOKED = 0x2608,
- SMSG_BATTLE_PET_TRAP_LEVEL = 0x2601,
- SMSG_BATTLE_PET_UPDATES = 0x2600,
- SMSG_BINDER_CONFIRM = 0x2743,
- SMSG_BIND_POINT_UPDATE = 0x257C,
- SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2647,
- SMSG_BLACK_MARKET_OPEN_RESULT = 0x2645,
- SMSG_BLACK_MARKET_OUTBID = 0x2648,
- SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2646,
- SMSG_BLACK_MARKET_WON = 0x2649,
+ SMSG_BATTLE_PET_JOURNAL = 0x2607,
+ SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2605,
+ SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2606,
+ SMSG_BATTLE_PET_LICENSE_CHANGED = 0x260C,
+ SMSG_BATTLE_PET_MAX_COUNT_CHANGED = 0x2603,
+ SMSG_BATTLE_PET_RESTORED = 0x260A,
+ SMSG_BATTLE_PET_REVOKED = 0x2609,
+ SMSG_BATTLE_PET_TRAP_LEVEL = 0x2602,
+ SMSG_BATTLE_PET_UPDATES = 0x2601,
+ SMSG_BINDER_CONFIRM = 0x2742,
+ SMSG_BIND_POINT_UPDATE = 0x257D,
+ SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2648,
+ SMSG_BLACK_MARKET_OPEN_RESULT = 0x2646,
+ SMSG_BLACK_MARKET_OUTBID = 0x2649,
+ SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2647,
+ SMSG_BLACK_MARKET_WON = 0x264A,
SMSG_BONUS_ROLL_EMPTY = 0x2665,
- SMSG_BONUS_ROLL_FAILED = 0x287C,
- SMSG_BOSS_KILL_CREDIT = 0x27CD,
+ SMSG_BONUS_ROLL_FAILED = 0x2878,
+ SMSG_BOSS_KILL_CREDIT = 0x27CB,
SMSG_BREAK_TARGET = 0x266F,
SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC,
SMSG_BUY_FAILED = 0x26FA,
SMSG_BUY_SUCCEEDED = 0x26F9,
- SMSG_CACHE_INFO = 0x274D,
- SMSG_CACHE_VERSION = 0x274C,
+ SMSG_CACHE_INFO = 0x274C,
+ SMSG_CACHE_VERSION = 0x274B,
SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26CC,
SMSG_CALENDAR_COMMAND_RESULT = 0x26CD,
SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26BC,
@@ -946,9 +955,9 @@ enum OpcodeServer : uint16
SMSG_CALENDAR_SEND_CALENDAR = 0x26BA,
SMSG_CALENDAR_SEND_EVENT = 0x26BB,
SMSG_CALENDAR_SEND_NUM_PENDING = 0x26CB,
- SMSG_CAMERA_EFFECT = 0x2770,
- SMSG_CANCEL_AUTO_REPEAT = 0x271C,
- SMSG_CANCEL_COMBAT = 0x273B,
+ SMSG_CAMERA_EFFECT = 0x276E,
+ SMSG_CANCEL_AUTO_REPEAT = 0x271B,
+ SMSG_CANCEL_COMBAT = 0x273A,
SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46,
SMSG_CANCEL_SCENE = 0x2657,
SMSG_CANCEL_SPELL_VISUAL = 0x2C44,
@@ -956,35 +965,35 @@ enum OpcodeServer : uint16
SMSG_CAN_DUEL_RESULT = 0x267A,
SMSG_CAST_FAILED = 0x2C56,
SMSG_CATEGORY_COOLDOWN = 0x2C16,
- SMSG_CHALLENGE_MODE_AFFIXES = 0x2624,
- SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x2623,
- SMSG_CHALLENGE_MODE_COMPLETE = 0x2621,
- SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2627,
- SMSG_CHALLENGE_MODE_NEW_PLAYER_SEASON_RECORD = 0x2628,
- SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2625,
- SMSG_CHALLENGE_MODE_RESET = 0x2620,
- SMSG_CHALLENGE_MODE_REWARDS = 0x2622,
- SMSG_CHALLENGE_MODE_START = 0x261E,
- SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x261F,
- SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x273F,
+ SMSG_CHALLENGE_MODE_AFFIXES = 0x2625,
+ SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x2624,
+ SMSG_CHALLENGE_MODE_COMPLETE = 0x2622,
+ SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2628,
+ SMSG_CHALLENGE_MODE_NEW_PLAYER_SEASON_RECORD = 0x2629,
+ SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2626,
+ SMSG_CHALLENGE_MODE_RESET = 0x2621,
+ SMSG_CHALLENGE_MODE_REWARDS = 0x2623,
+ SMSG_CHALLENGE_MODE_START = 0x261F,
+ SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x2620,
+ SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x273E,
SMSG_CHANNEL_LIST = 0x2BC3,
SMSG_CHANNEL_NOTIFY = 0x2BC0,
SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1,
SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2,
- SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x280D,
- SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x2870,
- SMSG_CHARACTER_ITEM_FIXUP = 0x285F,
- SMSG_CHARACTER_LOGIN_FAILED = 0x274E,
- SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27D9,
- SMSG_CHARACTER_RENAME_RESULT = 0x27B2,
- SMSG_CHARACTER_UPGRADE_COMPLETE = 0x280C,
- SMSG_CHARACTER_UPGRADE_QUEUED = 0x280B,
- SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F5,
- SMSG_CHARACTER_UPGRADE_STARTED = 0x280A,
- SMSG_CHARACTER_UPGRADE_UNREVOKE_RESULT = 0x280E,
- SMSG_CHAR_CUSTOMIZE = 0x2723,
- SMSG_CHAR_CUSTOMIZE_FAILED = 0x2722,
- SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27F7,
+ SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x2809,
+ SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x286C,
+ SMSG_CHARACTER_ITEM_FIXUP = 0x285B,
+ SMSG_CHARACTER_LOGIN_FAILED = 0x274D,
+ SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27D5,
+ SMSG_CHARACTER_RENAME_RESULT = 0x27AF,
+ SMSG_CHARACTER_UPGRADE_COMPLETE = 0x2808,
+ SMSG_CHARACTER_UPGRADE_QUEUED = 0x2807,
+ SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F6,
+ SMSG_CHARACTER_UPGRADE_STARTED = 0x2806,
+ SMSG_CHARACTER_UPGRADE_UNREVOKE_RESULT = 0x280A,
+ SMSG_CHAR_CUSTOMIZE = 0x2722,
+ SMSG_CHAR_CUSTOMIZE_FAILED = 0x2721,
+ SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27F3,
SMSG_CHAT = 0x2BAD,
SMSG_CHAT_AUTO_RESPONDED = 0x2BB8,
SMSG_CHAT_DOWN = 0x2BBD,
@@ -997,62 +1006,63 @@ enum OpcodeServer : uint16
SMSG_CHAT_RESTRICTED = 0x2BB3,
SMSG_CHAT_SERVER_MESSAGE = 0x2BC4,
SMSG_CHEAT_IGNORE_DIMISHING_RETURNS = 0x2C12,
- SMSG_CHECK_WARGAME_ENTRY = 0x259F,
+ SMSG_CHECK_WARGAME_ENTRY = 0x25A0,
SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27,
- SMSG_CLEAR_BOSS_EMOTES = 0x25CD,
+ SMSG_CLEAR_BOSS_EMOTES = 0x25CE,
SMSG_CLEAR_COOLDOWN = 0x26ED,
SMSG_CLEAR_COOLDOWNS = 0x2C26,
SMSG_CLEAR_LOSS_OF_CONTROL = 0x269E,
SMSG_CLEAR_SPELL_CHARGES = 0x2C28,
SMSG_CLEAR_TARGET = 0x26E4,
- SMSG_CLUB_FINDER_APPLICANTS_LIST = 0x28B3,
- SMSG_CLUB_FINDER_APPLICATIONS = 0x28B4,
- SMSG_CLUB_FINDER_APPLICATIONS_CHANGED = 0x28B5,
- SMSG_CLUB_FINDER_CLUBS_DATA = 0x28B6,
- SMSG_CLUB_FINDER_CLUBS_LIST = 0x28B2,
- SMSG_COIN_REMOVED = 0x262D,
+ SMSG_CLUB_FINDER_APPLICANTS_LIST = 0x28AF,
+ SMSG_CLUB_FINDER_APPLICATIONS = 0x28B0,
+ SMSG_CLUB_FINDER_APPLICATIONS_CHANGED = 0x28B1,
+ SMSG_CLUB_FINDER_CLUBS_DATA = 0x28B3,
+ SMSG_CLUB_FINDER_CLUBS_LIST = 0x28AE,
+ SMSG_CLUB_FINDER_COMMAND_RESULT = 0x28B2,
+ SMSG_COIN_REMOVED = 0x262E,
SMSG_COMBAT_EVENT_FAILED = 0x2672,
- SMSG_COMMENTATOR_MAP_INFO = 0x2750,
- SMSG_COMMENTATOR_PLAYER_INFO = 0x2751,
- SMSG_COMMENTATOR_STATE_CHANGED = 0x274F,
+ SMSG_COMMENTATOR_MAP_INFO = 0x274F,
+ SMSG_COMMENTATOR_PLAYER_INFO = 0x2750,
+ SMSG_COMMENTATOR_STATE_CHANGED = 0x274E,
SMSG_COMPLAINT_RESULT = 0x26DB,
- SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27EB,
+ SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27E7,
SMSG_CONNECT_TO = 0x304D,
- SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27D4,
- SMSG_CONSOLE_WRITE = 0x2654,
- SMSG_CONTACT_LIST = 0x27D7,
- SMSG_CONTRIBUTION_COLLECTOR_STATE = 0x2867,
+ SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27D2,
+ SMSG_CONSOLE_WRITE = 0x2655,
+ SMSG_CONTACT_LIST = 0x27D3,
+ SMSG_CONTRIBUTION_COLLECTOR_STATE = 0x2863,
SMSG_CONTROL_UPDATE = 0x2667,
- SMSG_COOLDOWN_CHEAT = 0x2784,
+ SMSG_COOLDOWN_CHEAT = 0x2782,
SMSG_COOLDOWN_EVENT = 0x26EC,
SMSG_CORPSE_LOCATION = 0x266E,
- SMSG_CORPSE_RECLAIM_DELAY = 0x2797,
- SMSG_CORPSE_TRANSPORT_QUERY = 0x275B,
- SMSG_CREATE_CHAR = 0x2748,
- SMSG_CREATE_SHIPMENT_RESPONSE = 0x27EA,
- SMSG_CRITERIA_DELETED = 0x2727,
- SMSG_CRITERIA_UPDATE = 0x2721,
+ SMSG_CORPSE_RECLAIM_DELAY = 0x2794,
+ SMSG_CORPSE_TRANSPORT_QUERY = 0x275A,
+ SMSG_CREATE_CHAR = 0x2747,
+ SMSG_CREATE_SHIPMENT_RESPONSE = 0x27E6,
+ SMSG_CRITERIA_DELETED = 0x2726,
+ SMSG_CRITERIA_UPDATE = 0x2720,
SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26F5,
- SMSG_CUSTOM_LOAD_SCREEN = 0x25E3,
+ SMSG_CUSTOM_LOAD_SCREEN = 0x25E4,
SMSG_DAILY_QUESTS_RESET = 0x2A80,
- SMSG_DAMAGE_CALC_LOG = 0x2815,
- SMSG_DB_REPLY = 0x25A1,
+ SMSG_DAMAGE_CALC_LOG = 0x2811,
+ SMSG_DB_REPLY = 0x25A2,
SMSG_DEATH_RELEASE_LOC = 0x2710,
SMSG_DEFENSE_MESSAGE = 0x2BB6,
- SMSG_DELETE_CHAR = 0x2749,
- SMSG_DESTROY_ARENA_UNIT = 0x278D,
- SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x273C,
- SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258B,
- SMSG_DISENCHANT_CREDIT = 0x25BC,
+ SMSG_DELETE_CHAR = 0x2748,
+ SMSG_DESTROY_ARENA_UNIT = 0x278B,
+ SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x273B,
+ SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258C,
+ SMSG_DISENCHANT_CREDIT = 0x25BD,
SMSG_DISMOUNT = 0x26E3,
- SMSG_DISMOUNT_RESULT = 0x257B,
+ SMSG_DISMOUNT_RESULT = 0x257C,
SMSG_DISPEL_FAILED = 0x2C30,
- SMSG_DISPLAY_GAME_ERROR = 0x25B5,
+ SMSG_DISPLAY_GAME_ERROR = 0x25B6,
SMSG_DISPLAY_PLAYER_CHOICE = 0x26A7,
SMSG_DISPLAY_PROMOTION = 0x266B,
SMSG_DISPLAY_QUEST_POPUP = 0x2A9D,
- SMSG_DISPLAY_TOAST = 0x263A,
- SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F7,
+ SMSG_DISPLAY_TOAST = 0x263B,
+ SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F8,
SMSG_DROP_NEW_CONNECTION = 0x304C,
SMSG_DUEL_COMPLETE = 0x2678,
SMSG_DUEL_COUNTDOWN = 0x2677,
@@ -1061,43 +1071,45 @@ enum OpcodeServer : uint16
SMSG_DUEL_OUT_OF_BOUNDS = 0x2675,
SMSG_DUEL_REQUESTED = 0x2673,
SMSG_DUEL_WINNER = 0x2679,
- SMSG_DURABILITY_DAMAGE_DEATH = 0x2793,
- SMSG_EMOTE = 0x2816,
+ SMSG_DURABILITY_DAMAGE_DEATH = 0x2790,
+ SMSG_EMOTE = 0x2812,
SMSG_ENABLE_BARBER_SHOP = 0x26F0,
SMSG_ENABLE_ENCRYPTION = 0x3049,
- SMSG_ENCHANTMENT_LOG = 0x275C,
- SMSG_ENCOUNTER_END = 0x27CC,
- SMSG_ENCOUNTER_START = 0x27CB,
- SMSG_ENUM_CHARACTERS_RESULT = 0x2583,
+ SMSG_ENCHANTMENT_LOG = 0x275B,
+ SMSG_ENCOUNTER_END = 0x27CA,
+ SMSG_ENCOUNTER_START = 0x27C9,
+ SMSG_ENTITLEMENTS = 0x28C4,
+ SMSG_ENTITLEMENT_NOTIFICATION = 0x28C5,
+ SMSG_ENUM_CHARACTERS_RESULT = 0x2584,
SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21,
SMSG_EQUIPMENT_SET_ID = 0x26E5,
SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1,
- SMSG_EXPLORATION_EXPERIENCE = 0x27AF,
- SMSG_FACTION_BONUS_INFO = 0x276F,
- SMSG_FAILED_PLAYER_CONDITION = 0x25E2,
- SMSG_FEATURE_SYSTEM_STATUS = 0x25D1,
- SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25D2,
- SMSG_FEIGN_DEATH_RESISTED = 0x2790,
+ SMSG_EXPLORATION_EXPERIENCE = 0x27AC,
+ SMSG_FACTION_BONUS_INFO = 0x276D,
+ SMSG_FAILED_PLAYER_CONDITION = 0x25E3,
+ SMSG_FEATURE_SYSTEM_STATUS = 0x25D2,
+ SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25D3,
+ SMSG_FEIGN_DEATH_RESISTED = 0x278E,
SMSG_FISH_ESCAPED = 0x2703,
SMSG_FISH_NOT_HOOKED = 0x2702,
SMSG_FLIGHT_SPLINE_SYNC = 0x2DF7,
SMSG_FORCED_DEATH_UPDATE = 0x2711,
- SMSG_FORCE_ANIM = 0x279E,
+ SMSG_FORCE_ANIM = 0x279B,
SMSG_FORCE_OBJECT_RELINK = 0x266A,
- SMSG_FRIEND_STATUS = 0x27D8,
+ SMSG_FRIEND_STATUS = 0x27D4,
SMSG_GAME_EVENT_DEBUG_INITIALIZE = 0x2680,
- SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25D6,
- SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25D7,
- SMSG_GAME_OBJECT_DESPAWN = 0x25D8,
- SMSG_GAME_OBJECT_MULTI_TRANSITION = 0x287A,
+ SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25D7,
+ SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25D8,
+ SMSG_GAME_OBJECT_DESPAWN = 0x25D9,
+ SMSG_GAME_OBJECT_MULTI_TRANSITION = 0x2876,
SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B,
SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A,
- SMSG_GAME_OBJECT_RESET_STATE = 0x2766,
- SMSG_GAME_OBJECT_SET_STATE = 0x284D,
- SMSG_GAME_OBJECT_UI_ACTION = 0x2763,
+ SMSG_GAME_OBJECT_RESET_STATE = 0x2765,
+ SMSG_GAME_OBJECT_SET_STATE = 0x2849,
+ SMSG_GAME_OBJECT_UI_ACTION = 0x2762,
SMSG_GAME_SPEED_SET = 0x26B0,
- SMSG_GAME_TIME_SET = 0x2755,
- SMSG_GAME_TIME_UPDATE = 0x2754,
+ SMSG_GAME_TIME_SET = 0x2754,
+ SMSG_GAME_TIME_UPDATE = 0x2753,
SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2902,
SMSG_GARRISON_ADD_MISSION_RESULT = 0x2906,
SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x2918,
@@ -1116,7 +1128,7 @@ enum OpcodeServer : uint16
SMSG_GARRISON_FOLLOWER_CHANGED_STATUS = 0x2915,
SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x2912,
SMSG_GARRISON_IS_UPGRADEABLE_RESULT = 0x2929,
- SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27ED,
+ SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27E9,
SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x28F7,
SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x28F5,
SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x2905,
@@ -1146,28 +1158,28 @@ enum OpcodeServer : uint16
SMSG_GARRISON_START_MISSION_RESULT = 0x2907,
SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x28F8,
SMSG_GARRISON_UPGRADE_RESULT = 0x28FD,
- SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2584,
- SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27B0,
+ SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2585,
+ SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27AD,
SMSG_GET_DISPLAYED_TROPHY_LIST_RESPONSE = 0x2928,
SMSG_GET_GARRISON_INFO_RESULT = 0x28F0,
- SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27EC,
- SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27E8,
- SMSG_GET_TROPHY_LIST_RESPONSE = 0x2811,
- SMSG_GM_PLAYER_INFO = 0x2783,
- SMSG_GM_REQUEST_PLAYER_INFO = 0x25EE,
+ SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27E8,
+ SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27E4,
+ SMSG_GET_TROPHY_LIST_RESPONSE = 0x280D,
+ SMSG_GM_PLAYER_INFO = 0x2781,
+ SMSG_GM_REQUEST_PLAYER_INFO = 0x25EF,
SMSG_GM_TICKET_CASE_STATUS = 0x26D2,
SMSG_GM_TICKET_SYSTEM_STATUS = 0x26D1,
- SMSG_GOD_MODE = 0x2742,
+ SMSG_GOD_MODE = 0x2741,
SMSG_GOSSIP_COMPLETE = 0x2A96,
SMSG_GOSSIP_MESSAGE = 0x2A97,
- SMSG_GOSSIP_POI = 0x27E5,
+ SMSG_GOSSIP_POI = 0x27E1,
SMSG_GOSSIP_TEXT_UPDATE = 0x2A98,
- SMSG_GROUP_ACTION_THROTTLED = 0x259D,
- SMSG_GROUP_DECLINE = 0x27E0,
- SMSG_GROUP_DESTROYED = 0x27E2,
- SMSG_GROUP_INVITE_CONFIRMATION = 0x2860,
- SMSG_GROUP_NEW_LEADER = 0x264C,
- SMSG_GROUP_UNINVITE = 0x27E1,
+ SMSG_GROUP_ACTION_THROTTLED = 0x259E,
+ SMSG_GROUP_DECLINE = 0x27DC,
+ SMSG_GROUP_DESTROYED = 0x27DE,
+ SMSG_GROUP_INVITE_CONFIRMATION = 0x285C,
+ SMSG_GROUP_NEW_LEADER = 0x264D,
+ SMSG_GROUP_UNINVITE = 0x27DD,
SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5,
SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4,
SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7,
@@ -1223,62 +1235,68 @@ enum OpcodeServer : uint16
SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9,
SMSG_HEALTH_UPDATE = 0x2706,
SMSG_HIGHEST_THREAT_UPDATE = 0x2717,
- SMSG_HOTFIX_MESSAGE = 0x25A3,
- SMSG_HOTFIX_RESPONSE = 0x25A4,
- SMSG_INCOMING_SUMMON_COMPLETED = 0x28AE,
- SMSG_INCOMING_SUMMON_PENDING = 0x28AD,
- SMSG_INITIALIZE_FACTIONS = 0x276E,
- SMSG_INITIAL_SETUP = 0x2580,
- SMSG_INIT_WORLD_STATES = 0x2794,
- SMSG_INSPECT_RESULT = 0x2650,
- SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27FD,
- SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27FC,
- SMSG_INSTANCE_ENCOUNTER_END = 0x2805,
- SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27FB,
- SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x2807,
- SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x2806,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x2800,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27FF,
- SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x2804,
- SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x2808,
- SMSG_INSTANCE_ENCOUNTER_SET_ALLOWING_RELEASE = 0x2803,
- SMSG_INSTANCE_ENCOUNTER_SET_SUPPRESSING_RELEASE = 0x2802,
- SMSG_INSTANCE_ENCOUNTER_START = 0x2801,
- SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27FE,
- SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x2740,
- SMSG_INSTANCE_INFO = 0x2653,
+ SMSG_HOTFIX_MESSAGE = 0x25A4,
+ SMSG_HOTFIX_RESPONSE = 0x25A5,
+ SMSG_INCOMING_SUMMON_COMPLETED = 0x28AA,
+ SMSG_INCOMING_SUMMON_PENDING = 0x28A9,
+ SMSG_INITIALIZE_FACTIONS = 0x276C,
+ SMSG_INITIAL_SETUP = 0x2581,
+ SMSG_INIT_WORLD_STATES = 0x2791,
+ SMSG_INSPECT_RESULT = 0x2651,
+ SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27F9,
+ SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27F8,
+ SMSG_INSTANCE_ENCOUNTER_END = 0x2801,
+ SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27F7,
+ SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x2803,
+ SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x2802,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27FC,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27FB,
+ SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x2800,
+ SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x2804,
+ SMSG_INSTANCE_ENCOUNTER_SET_ALLOWING_RELEASE = 0x27FF,
+ SMSG_INSTANCE_ENCOUNTER_SET_SUPPRESSING_RELEASE = 0x27FE,
+ SMSG_INSTANCE_ENCOUNTER_START = 0x27FD,
+ SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27FA,
+ SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x273F,
+ SMSG_INSTANCE_INFO = 0x2654,
SMSG_INSTANCE_RESET = 0x26B5,
SMSG_INSTANCE_RESET_FAILED = 0x26B6,
- SMSG_INSTANCE_SAVE_CREATED = 0x27CA,
+ SMSG_INSTANCE_SAVE_CREATED = 0x27C8,
SMSG_INVALIDATE_PAGE_TEXT = 0x270C,
SMSG_INVALIDATE_PLAYER = 0x26DA,
- SMSG_INVALID_PROMOTION_CODE = 0x279F,
- SMSG_INVENTORY_CHANGE_FAILURE = 0x276C,
- SMSG_ISLAND_AZERITE_XP_GAIN = 0x27AC,
- SMSG_ISLAND_COMPLETED = 0x27AD,
- SMSG_ISLAND_OPEN_QUEUE_NPC = 0x2842,
+ SMSG_INVALID_PROMOTION_CODE = 0x279C,
+ SMSG_INVENTORY_CHANGE_FAILURE = 0x276A,
+ SMSG_ISLAND_AZERITE_XP_GAIN = 0x27A9,
+ SMSG_ISLAND_COMPLETED = 0x27AA,
+ SMSG_ISLAND_OPEN_QUEUE_NPC = 0x283E,
SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A83,
- SMSG_ITEM_CHANGED = 0x272A,
- SMSG_ITEM_COOLDOWN = 0x2814,
- SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x27A1,
- SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25B2,
- SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25B0,
- SMSG_ITEM_PUSH_RESULT = 0x2639,
- SMSG_ITEM_TIME_UPDATE = 0x27A0,
- SMSG_KICK_REASON = 0x2839,
+ SMSG_ITEM_CHANGED = 0x2729,
+ SMSG_ITEM_COOLDOWN = 0x2810,
+ SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x279E,
+ SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25B3,
+ SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25B1,
+ SMSG_ITEM_PUSH_RESULT = 0x263A,
+ SMSG_ITEM_TIME_UPDATE = 0x279D,
+ SMSG_KICK_REASON = 0x2835,
SMSG_LEARNED_SPELLS = 0x2C4D,
- SMSG_LEARN_PVP_TALENTS_FAILED = 0x25EA,
- SMSG_LEARN_TALENTS_FAILED = 0x25E9,
- SMSG_LEVEL_UPDATE = 0x2588,
- SMSG_LEVEL_UP_INFO = 0x2729,
+ SMSG_LEARN_PVP_TALENTS_FAILED = 0x25EB,
+ SMSG_LEARN_TALENTS_FAILED = 0x25EA,
+ SMSG_LEVEL_LINKING_RESULT = 0x28B8,
+ SMSG_LEVEL_UPDATE = 0x2589,
+ SMSG_LEVEL_UP_INFO = 0x2728,
SMSG_LFG_BOOT_PLAYER = 0x2A35,
SMSG_LFG_DISABLED = 0x2A33,
SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x2A25,
SMSG_LFG_JOIN_RESULT = 0x2A1C,
+ SMSG_LFG_LIST_APPLICANT_LIST_UPDATE = 0x2A2B,
+ SMSG_LFG_LIST_APPLICATION_STATUS_UPDATE = 0x2A28,
+ SMSG_LFG_LIST_APPLY_TO_GROUP_RESULT = 0x2A29,
SMSG_LFG_LIST_JOIN_RESULT = 0x2A1D,
SMSG_LFG_LIST_SEARCH_RESULTS = 0x2A1E,
+ SMSG_LFG_LIST_SEARCH_RESULTS_UPDATE = 0x2A2C,
SMSG_LFG_LIST_SEARCH_STATUS = 0x2A1F,
SMSG_LFG_LIST_UPDATE_BLACKLIST = 0x2A2A,
+ SMSG_LFG_LIST_UPDATE_EXPIRATION = 0x2A27,
SMSG_LFG_LIST_UPDATE_STATUS = 0x2A26,
SMSG_LFG_OFFER_CONTINUE = 0x2A34,
SMSG_LFG_PARTY_INFO = 0x2A36,
@@ -1301,50 +1319,50 @@ enum OpcodeServer : uint16
SMSG_LF_GUILD_RECRUITS = 0x29CF,
SMSG_LIGHTNING_STORM_END = 0x26D7,
SMSG_LIGHTNING_STORM_START = 0x26D6,
- SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27BE,
- SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27BC,
- SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27B1,
- SMSG_LOAD_CUF_PROFILES = 0x25CE,
- SMSG_LOAD_EQUIPMENT_SET = 0x2757,
- SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x2812,
- SMSG_LOGIN_SET_TIME_SPEED = 0x2756,
- SMSG_LOGIN_VERIFY_WORLD = 0x25AD,
+ SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27BB,
+ SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27B9,
+ SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27AE,
+ SMSG_LOAD_CUF_PROFILES = 0x25CF,
+ SMSG_LOAD_EQUIPMENT_SET = 0x2756,
+ SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x280E,
+ SMSG_LOGIN_SET_TIME_SPEED = 0x2755,
+ SMSG_LOGIN_VERIFY_WORLD = 0x25AE,
SMSG_LOGOUT_CANCEL_ACK = 0x26B4,
SMSG_LOGOUT_COMPLETE = 0x26B3,
SMSG_LOGOUT_RESPONSE = 0x26B2,
- SMSG_LOG_XP_GAIN = 0x2725,
- SMSG_LOOT_ALL_PASSED = 0x2637,
- SMSG_LOOT_LEGACY_RULES_IN_EFFECT = 0x287B,
- SMSG_LOOT_LIST = 0x278C,
- SMSG_LOOT_MONEY_NOTIFY = 0x2632,
- SMSG_LOOT_RELEASE = 0x2631,
- SMSG_LOOT_RELEASE_ALL = 0x2630,
- SMSG_LOOT_REMOVED = 0x262C,
- SMSG_LOOT_RESPONSE = 0x262B,
- SMSG_LOOT_ROLL = 0x2634,
- SMSG_LOOT_ROLLS_COMPLETE = 0x2636,
- SMSG_LOOT_ROLL_WON = 0x2638,
+ SMSG_LOG_XP_GAIN = 0x2724,
+ SMSG_LOOT_ALL_PASSED = 0x2638,
+ SMSG_LOOT_LEGACY_RULES_IN_EFFECT = 0x2877,
+ SMSG_LOOT_LIST = 0x278A,
+ SMSG_LOOT_MONEY_NOTIFY = 0x2633,
+ SMSG_LOOT_RELEASE = 0x2632,
+ SMSG_LOOT_RELEASE_ALL = 0x2631,
+ SMSG_LOOT_REMOVED = 0x262D,
+ SMSG_LOOT_RESPONSE = 0x262C,
+ SMSG_LOOT_ROLL = 0x2635,
+ SMSG_LOOT_ROLLS_COMPLETE = 0x2637,
+ SMSG_LOOT_ROLL_WON = 0x2639,
SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x269B,
SMSG_MAIL_COMMAND_RESULT = 0x265B,
- SMSG_MAIL_LIST_RESULT = 0x27A2,
- SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x27A3,
- SMSG_MAP_OBJECTIVES_INIT = 0x27AB,
- SMSG_MAP_OBJECTIVE_ADD = 0x2597,
- SMSG_MAP_OBJECTIVE_REMOVE = 0x2598,
- SMSG_MAP_OBJ_EVENTS = 0x25D9,
- SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2635,
- SMSG_MESSAGE_BOX = 0x2575,
+ SMSG_MAIL_LIST_RESULT = 0x279F,
+ SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x27A0,
+ SMSG_MAP_OBJECTIVES_INIT = 0x27A8,
+ SMSG_MAP_OBJECTIVE_ADD = 0x2598,
+ SMSG_MAP_OBJECTIVE_REMOVE = 0x2599,
+ SMSG_MAP_OBJ_EVENTS = 0x25DA,
+ SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2636,
+ SMSG_MESSAGE_BOX = 0x2576,
SMSG_MINIMAP_PING = 0x2701,
SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14,
SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13,
- SMSG_MISSILE_CANCEL = 0x25DA,
- SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27B5,
- SMSG_MODIFY_COOLDOWN = 0x27B3,
- SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27B4,
- SMSG_MODIFY_PARTY_RANGE = 0x278F,
+ SMSG_MISSILE_CANCEL = 0x25DB,
+ SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27B2,
+ SMSG_MODIFY_COOLDOWN = 0x27B0,
+ SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27B1,
+ SMSG_MODIFY_PARTY_RANGE = 0x278D,
SMSG_MOTD = 0x2BAF,
- SMSG_MOUNT_EQUIPMENT_APPLY_RESULT = 0x28B7,
- SMSG_MOUNT_RESULT = 0x257A,
+ SMSG_MOUNT_EQUIPMENT_APPLY_RESULT = 0x28B6,
+ SMSG_MOUNT_RESULT = 0x257B,
SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2DE1,
SMSG_MOVE_DISABLE_COLLISION = 0x2DDD,
SMSG_MOVE_DISABLE_DOUBLE_JUMP = 0x2DCB,
@@ -1429,112 +1447,111 @@ enum OpcodeServer : uint16
SMSG_MOVE_UPDATE_TELEPORT = 0x2DAF,
SMSG_MOVE_UPDATE_TURN_RATE = 0x2DAB,
SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DA6,
- SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25F2,
+ SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25F3,
SMSG_NEW_TAXI_PATH = 0x26AD,
- SMSG_NEW_WORLD = 0x25AC,
+ SMSG_NEW_WORLD = 0x25AD,
SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43,
SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D9,
- SMSG_NOTIFY_MONEY = 0x25AF,
+ SMSG_NOTIFY_MONEY = 0x25B0,
SMSG_NOTIFY_RECEIVED_MAIL = 0x265C,
SMSG_OFFER_PETITION_ERROR = 0x26E9,
- SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x2726,
+ SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x2725,
SMSG_ON_MONSTER_MOVE = 0x2DA2,
- SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER = 0x2843,
- SMSG_OPEN_CONTAINER = 0x276D,
+ SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER = 0x283F,
+ SMSG_OPEN_CONTAINER = 0x276B,
SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31,
- SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27E7,
- SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27E9,
- SMSG_OPEN_TRANSMOGRIFIER = 0x2840,
+ SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27E3,
+ SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27E5,
+ SMSG_OPEN_TRANSMOGRIFIER = 0x283C,
SMSG_OVERRIDE_LIGHT = 0x26EF,
- SMSG_PAGE_TEXT = 0x2762,
- SMSG_PARTY_COMMAND_RESULT = 0x27E4,
- SMSG_PARTY_INVITE = 0x25CF,
- SMSG_PARTY_KILL_LOG = 0x27A7,
- SMSG_PARTY_MEMBER_STATE = 0x27A5,
- SMSG_PARTY_MEMBER_STATE_UPDATE = 0x27A4,
- SMSG_PARTY_UPDATE = 0x260C,
- SMSG_PAUSE_MIRROR_TIMER = 0x2759,
- SMSG_PENDING_RAID_LOCK = 0x273A,
- SMSG_PETITION_ALREADY_SIGNED = 0x25B8,
+ SMSG_PAGE_TEXT = 0x2761,
+ SMSG_PARTY_COMMAND_RESULT = 0x27E0,
+ SMSG_PARTY_INVITE = 0x25D0,
+ SMSG_PARTY_KILL_LOG = 0x27A4,
+ SMSG_PARTY_MEMBER_STATE = 0x27A2,
+ SMSG_PARTY_MEMBER_STATE_UPDATE = 0x27A1,
+ SMSG_PARTY_UPDATE = 0x260D,
+ SMSG_PAUSE_MIRROR_TIMER = 0x2758,
+ SMSG_PENDING_RAID_LOCK = 0x2739,
+ SMSG_PETITION_ALREADY_SIGNED = 0x25B9,
SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29FA,
SMSG_PETITION_SHOW_LIST = 0x26F2,
SMSG_PETITION_SHOW_SIGNATURES = 0x26F3,
- SMSG_PETITION_SIGN_RESULTS = 0x2799,
- SMSG_PET_ACTION_FEEDBACK = 0x2796,
+ SMSG_PETITION_SIGN_RESULTS = 0x2796,
+ SMSG_PET_ACTION_FEEDBACK = 0x2793,
SMSG_PET_ACTION_SOUND = 0x26CF,
- SMSG_PET_ADDED = 0x25A9,
- SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2619,
+ SMSG_PET_ADDED = 0x25AA,
+ SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x261A,
SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x26A2,
- SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x2612,
- SMSG_PET_BATTLE_FINAL_ROUND = 0x2617,
- SMSG_PET_BATTLE_FINISHED = 0x2618,
- SMSG_PET_BATTLE_FIRST_ROUND = 0x2614,
- SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2613,
- SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x261A,
- SMSG_PET_BATTLE_PVP_CHALLENGE = 0x2611,
+ SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x2613,
+ SMSG_PET_BATTLE_FINAL_ROUND = 0x2618,
+ SMSG_PET_BATTLE_FINISHED = 0x2619,
+ SMSG_PET_BATTLE_FIRST_ROUND = 0x2615,
+ SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2614,
+ SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x261B,
+ SMSG_PET_BATTLE_PVP_CHALLENGE = 0x2612,
SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2659,
SMSG_PET_BATTLE_QUEUE_STATUS = 0x265A,
- SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2616,
- SMSG_PET_BATTLE_REQUEST_FAILED = 0x2610,
- SMSG_PET_BATTLE_ROUND_RESULT = 0x2615,
- SMSG_PET_BATTLE_SLOT_UPDATES = 0x2603,
+ SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2617,
+ SMSG_PET_BATTLE_REQUEST_FAILED = 0x2611,
+ SMSG_PET_BATTLE_ROUND_RESULT = 0x2616,
+ SMSG_PET_BATTLE_SLOT_UPDATES = 0x2604,
SMSG_PET_CAST_FAILED = 0x2C57,
SMSG_PET_CLEAR_SPELLS = 0x2C24,
SMSG_PET_DISMISS_SOUND = 0x26D0,
SMSG_PET_GOD_MODE = 0x26AA,
- SMSG_PET_GUIDS = 0x274B,
+ SMSG_PET_GUIDS = 0x274A,
SMSG_PET_LEARNED_SPELLS = 0x2C4F,
- SMSG_PET_MODE = 0x258A,
+ SMSG_PET_MODE = 0x258B,
SMSG_PET_NAME_INVALID = 0x26F7,
- SMSG_PET_SLOT_UPDATED = 0x2589,
+ SMSG_PET_SLOT_UPDATED = 0x258A,
SMSG_PET_SPELLS_MESSAGE = 0x2C25,
- SMSG_PET_STABLE_LIST = 0x25AA,
- SMSG_PET_STABLE_RESULT = 0x25AB,
+ SMSG_PET_STABLE_LIST = 0x25AB,
+ SMSG_PET_STABLE_RESULT = 0x25AC,
SMSG_PET_TAME_FAILURE = 0x26E6,
SMSG_PET_UNLEARNED_SPELLS = 0x2C50,
- SMSG_PHASE_SHIFT_CHANGE = 0x2577,
+ SMSG_PHASE_SHIFT_CHANGE = 0x2578,
SMSG_PLAYED_TIME = 0x2713,
- SMSG_PLAYER_BOUND = 0x257D,
+ SMSG_PLAYER_BOUND = 0x257E,
SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F9,
- SMSG_PLAYER_SKINNED = 0x2791,
- SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x27A6,
- SMSG_PLAY_MUSIC = 0x27B8,
- SMSG_PLAY_OBJECT_SOUND = 0x27B9,
- SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x277B,
+ SMSG_PLAYER_SKINNED = 0x278F,
+ SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x27A3,
+ SMSG_PLAY_MUSIC = 0x27B5,
+ SMSG_PLAY_OBJECT_SOUND = 0x27B6,
+ SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2779,
SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47,
SMSG_PLAY_SCENE = 0x2656,
- SMSG_PLAY_SOUND = 0x27B7,
- SMSG_PLAY_SPEAKERBOT_SOUND = 0x27BA,
+ SMSG_PLAY_SOUND = 0x27B4,
+ SMSG_PLAY_SPEAKERBOT_SOUND = 0x27B7,
SMSG_PLAY_SPELL_VISUAL = 0x2C45,
SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49,
- SMSG_PLAY_TIME_WARNING = 0x2744,
+ SMSG_PLAY_TIME_WARNING = 0x2743,
SMSG_PONG = 0x304E,
SMSG_POWER_UPDATE = 0x2707,
- SMSG_PRE_RESSURECT = 0x27B6,
- SMSG_PRINT_NOTIFICATION = 0x25E1,
- SMSG_PROC_RESIST = 0x27A8,
- SMSG_PROPOSE_LEVEL_GRANT = 0x271B,
+ SMSG_PRE_RESSURECT = 0x27B3,
+ SMSG_PRINT_NOTIFICATION = 0x25E2,
+ SMSG_PROC_RESIST = 0x27A5,
SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51,
- SMSG_PVP_CREDIT = 0x2720,
- SMSG_PVP_LOG_DATA = 0x25B3,
- SMSG_PVP_MATCH_START = 0x28B1,
- SMSG_PVP_OPTIONS_ENABLED = 0x25B6,
- SMSG_PVP_SEASON = 0x25D3,
+ SMSG_PVP_CREDIT = 0x271F,
+ SMSG_PVP_LOG_DATA = 0x25B4,
+ SMSG_PVP_MATCH_START = 0x28AD,
+ SMSG_PVP_OPTIONS_ENABLED = 0x25B7,
+ SMSG_PVP_SEASON = 0x25D4,
SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x270E,
SMSG_QUERY_COMMUNITY_NAME_RESPONSE = 0x270A,
SMSG_QUERY_CREATURE_RESPONSE = 0x2704,
SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2705,
SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE = 0x292B,
SMSG_QUERY_GUILD_INFO_RESPONSE = 0x29E5,
- SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x2813,
+ SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x280F,
SMSG_QUERY_NPC_TEXT_RESPONSE = 0x2708,
SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x270B,
SMSG_QUERY_PETITION_RESPONSE = 0x270F,
SMSG_QUERY_PET_NAME_RESPONSE = 0x270D,
SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x2709,
SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A95,
- SMSG_QUERY_TIME_RESPONSE = 0x2724,
- SMSG_QUERY_TREASURE_PICKER_RESPONSE = 0x2852,
+ SMSG_QUERY_TIME_RESPONSE = 0x2723,
+ SMSG_QUERY_TREASURE_PICKER_RESPONSE = 0x284E,
SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81,
SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8E,
SMSG_QUEST_FORCE_REMOVED = 0x2A9B,
@@ -1544,7 +1561,7 @@ enum OpcodeServer : uint16
SMSG_QUEST_GIVER_QUEST_DETAILS = 0x2A91,
SMSG_QUEST_GIVER_QUEST_FAILED = 0x2A85,
SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x2A99,
- SMSG_QUEST_GIVER_QUEST_TURN_IN_FAILURE = 0x285D,
+ SMSG_QUEST_GIVER_QUEST_TURN_IN_FAILURE = 0x2859,
SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x2A92,
SMSG_QUEST_GIVER_STATUS = 0x2A9A,
SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x2A90,
@@ -1552,6 +1569,9 @@ enum OpcodeServer : uint16
SMSG_QUEST_POI_CHANGED = 0x2A9F,
SMSG_QUEST_POI_QUERY_RESPONSE = 0x2A9C,
SMSG_QUEST_PUSH_RESULT = 0x2A8F,
+ SMSG_QUEST_SESSION_MEMBER_CONFIRM = 0x28BC,
+ SMSG_QUEST_SESSION_MEMBER_START_RESPONSE = 0x28BD,
+ SMSG_QUEST_SESSION_NOTIFICATION = 0x28BB,
SMSG_QUEST_SPAWN_TRACKING_UPDATE = 0x2A9E,
SMSG_QUEST_UPDATE_ADD_CREDIT = 0x2A8B,
SMSG_QUEST_UPDATE_ADD_CREDIT_SIMPLE = 0x2A8C,
@@ -1560,116 +1580,116 @@ enum OpcodeServer : uint16
SMSG_QUEST_UPDATE_COMPLETE_BY_SPELL = 0x2A87,
SMSG_QUEST_UPDATE_FAILED = 0x2A89,
SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8A,
- SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27D5,
- SMSG_RAID_DIFFICULTY_SET = 0x27F8,
- SMSG_RAID_GROUP_ONLY = 0x27FA,
+ SMSG_QUICK_JOIN_CONFIRM_REQUEST_INVITE = 0x28C6,
+ SMSG_RAF_ACCOUNT_INFO = 0x28B9,
+ SMSG_RAF_ACTIVITY = 0x28C2,
+ SMSG_RAF_INFO_UPDATE = 0x28BA,
+ SMSG_RAID_DIFFICULTY_SET = 0x27F4,
+ SMSG_RAID_GROUP_ONLY = 0x27F6,
SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4,
- SMSG_RAID_MARKERS_CHANGED = 0x25B9,
- SMSG_RANDOM_ROLL = 0x264F,
- SMSG_RATED_BATTLEFIELD_INFO = 0x25A7,
- SMSG_READY_CHECK_COMPLETED = 0x260F,
- SMSG_READY_CHECK_RESPONSE = 0x260E,
- SMSG_READY_CHECK_STARTED = 0x260D,
- SMSG_READ_ITEM_RESULT_FAILED = 0x27F4,
- SMSG_READ_ITEM_RESULT_OK = 0x27EE,
- SMSG_REALM_LOOKUP_INFORMATION = 0x2819,
+ SMSG_RAID_MARKERS_CHANGED = 0x25BA,
+ SMSG_RANDOM_ROLL = 0x2650,
+ SMSG_RATED_BATTLEFIELD_INFO = 0x25A8,
+ SMSG_READY_CHECK_COMPLETED = 0x2610,
+ SMSG_READY_CHECK_RESPONSE = 0x260F,
+ SMSG_READY_CHECK_STARTED = 0x260E,
+ SMSG_READ_ITEM_RESULT_FAILED = 0x27F0,
+ SMSG_READ_ITEM_RESULT_OK = 0x27EA,
+ SMSG_REALM_LOOKUP_INFORMATION = 0x2815,
SMSG_REALM_QUERY_RESPONSE = 0x26EE,
- SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27D6,
- SMSG_REFER_A_FRIEND_EXPIRED = 0x276B,
SMSG_REFER_A_FRIEND_FAILURE = 0x26F4,
SMSG_REFRESH_COMPONENT = 0x267C,
SMSG_REFRESH_SPELL_HISTORY = 0x2C2C,
- SMSG_REMOVE_ITEM_PASSIVE = 0x25C0,
+ SMSG_REMOVE_ITEM_PASSIVE = 0x25C1,
SMSG_REMOVE_LOSS_OF_CONTROL = 0x269D,
- SMSG_REPLACE_TROPHY_RESPONSE = 0x2810,
+ SMSG_REPLACE_TROPHY_RESPONSE = 0x280C,
SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26E2,
SMSG_REQUEST_ADDON_LIST = 0x2662,
- SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x259E,
- SMSG_REQUEST_PVP_BRAWL_INFO_RESPONSE = 0x25D5,
- SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x25D4,
- SMSG_RESEARCH_COMPLETE = 0x2586,
+ SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x259F,
+ SMSG_REQUEST_PVP_BRAWL_INFO_RESPONSE = 0x25D6,
+ SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x25D5,
+ SMSG_RESEARCH_COMPLETE = 0x2587,
SMSG_RESET_COMPRESSION_CONTEXT = 0x304F,
SMSG_RESET_FAILED_NOTIFY = 0x26EA,
- SMSG_RESET_RANGED_COMBAT_TIMER = 0x271D,
- SMSG_RESET_WEEKLY_CURRENCY = 0x2574,
- SMSG_RESPEC_WIPE_CONFIRM = 0x2629,
- SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2571,
+ SMSG_RESET_RANGED_COMBAT_TIMER = 0x271C,
+ SMSG_RESET_WEEKLY_CURRENCY = 0x2575,
+ SMSG_RESPEC_WIPE_CONFIRM = 0x262A,
+ SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2572,
SMSG_RESUME_CAST_BAR = 0x2C3E,
SMSG_RESUME_COMMS = 0x304B,
- SMSG_RESUME_TOKEN = 0x25BE,
- SMSG_RESURRECT_CLEAR_DATA = 0x257F,
- SMSG_RESURRECT_REQUEST = 0x257E,
- SMSG_RESYNC_RUNES = 0x2747,
- SMSG_ROLE_CHANGED_INFORM = 0x258D,
+ SMSG_RESUME_TOKEN = 0x25BF,
+ SMSG_RESURRECT_CLEAR_DATA = 0x2580,
+ SMSG_RESURRECT_REQUEST = 0x257F,
+ SMSG_RESYNC_RUNES = 0x2746,
+ SMSG_ROLE_CHANGED_INFORM = 0x258E,
SMSG_ROLE_CHOSEN = 0x2A39,
- SMSG_ROLE_POLL_INFORM = 0x258E,
- SMSG_RUNE_REGEN_DEBUG = 0x25C8,
- SMSG_SCENARIO_BOOT = 0x27F5,
- SMSG_SCENARIO_COMPLETED = 0x2836,
- SMSG_SCENARIO_POIS = 0x2652,
- SMSG_SCENARIO_PROGRESS_UPDATE = 0x264B,
- SMSG_SCENARIO_SET_SHOULD_SHOW_CRITERIA = 0x2846,
- SMSG_SCENARIO_SPELL_UPDATE = 0x2845,
- SMSG_SCENARIO_STATE = 0x264A,
- SMSG_SCENE_OBJECT_EVENT = 0x25F8,
- SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FD,
- SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FE,
- SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25FA,
- SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25F9,
- SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25FC,
- SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25FB,
+ SMSG_ROLE_POLL_INFORM = 0x258F,
+ SMSG_RUNE_REGEN_DEBUG = 0x25C9,
+ SMSG_SCENARIO_BOOT = 0x27F1,
+ SMSG_SCENARIO_COMPLETED = 0x2832,
+ SMSG_SCENARIO_POIS = 0x2653,
+ SMSG_SCENARIO_PROGRESS_UPDATE = 0x264C,
+ SMSG_SCENARIO_SET_SHOULD_SHOW_CRITERIA = 0x2842,
+ SMSG_SCENARIO_SPELL_UPDATE = 0x2841,
+ SMSG_SCENARIO_STATE = 0x264B,
+ SMSG_SCENE_OBJECT_EVENT = 0x25F9,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FE,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FF,
+ SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25FB,
+ SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25FA,
+ SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25FD,
+ SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25FC,
SMSG_SCRIPT_CAST = 0x2C55,
SMSG_SELL_RESPONSE = 0x26F8,
- SMSG_SEND_ITEM_PASSIVES = 0x25C1,
+ SMSG_SEND_ITEM_PASSIVES = 0x25C2,
SMSG_SEND_KNOWN_SPELLS = 0x2C2A,
- SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264D,
- SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264E,
+ SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264E,
+ SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264F,
SMSG_SEND_SPELL_CHARGES = 0x2C2D,
SMSG_SEND_SPELL_HISTORY = 0x2C2B,
SMSG_SEND_UNLEARN_SPELLS = 0x2C2E,
SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266D,
SMSG_SERVER_TIME = 0x26B1,
- SMSG_SETUP_CURRENCY = 0x2572,
- SMSG_SETUP_RESEARCH_HISTORY = 0x2585,
- SMSG_SET_AI_ANIM_KIT = 0x277A,
- SMSG_SET_ALL_TASK_PROGRESS = 0x27DE,
- SMSG_SET_ANIM_TIER = 0x277E,
- SMSG_SET_CURRENCY = 0x2573,
+ SMSG_SETUP_CURRENCY = 0x2573,
+ SMSG_SETUP_RESEARCH_HISTORY = 0x2586,
+ SMSG_SET_AI_ANIM_KIT = 0x2778,
+ SMSG_SET_ALL_TASK_PROGRESS = 0x27DA,
+ SMSG_SET_ANIM_TIER = 0x277C,
+ SMSG_SET_CURRENCY = 0x2574,
SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E,
SMSG_SET_DUNGEON_DIFFICULTY = 0x26D3,
- SMSG_SET_FACTION_AT_WAR = 0x2746,
- SMSG_SET_FACTION_NOT_VISIBLE = 0x2775,
- SMSG_SET_FACTION_STANDING = 0x2776,
- SMSG_SET_FACTION_VISIBLE = 0x2774,
+ SMSG_SET_FACTION_AT_WAR = 0x2745,
+ SMSG_SET_FACTION_NOT_VISIBLE = 0x2773,
+ SMSG_SET_FACTION_STANDING = 0x2774,
+ SMSG_SET_FACTION_VISIBLE = 0x2772,
SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36,
- SMSG_SET_FORCED_REACTIONS = 0x2765,
- SMSG_SET_ITEM_PURCHASE_DATA = 0x25B1,
- SMSG_SET_LOOT_METHOD_FAILED = 0x281F,
- SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25B7,
- SMSG_SET_MELEE_ANIM_KIT = 0x277D,
- SMSG_SET_MOVEMENT_ANIM_KIT = 0x277C,
+ SMSG_SET_FORCED_REACTIONS = 0x2764,
+ SMSG_SET_ITEM_PURCHASE_DATA = 0x25B2,
+ SMSG_SET_LOOT_METHOD_FAILED = 0x281B,
+ SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25B8,
+ SMSG_SET_MELEE_ANIM_KIT = 0x277B,
+ SMSG_SET_MOVEMENT_ANIM_KIT = 0x277A,
SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37,
- SMSG_SET_PET_SPECIALIZATION = 0x2644,
+ SMSG_SET_PET_SPECIALIZATION = 0x2645,
SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2712,
- SMSG_SET_PLAY_HOVER_ANIM = 0x25CC,
- SMSG_SET_PROFICIENCY = 0x277F,
+ SMSG_SET_PLAY_HOVER_ANIM = 0x25CD,
+ SMSG_SET_PROFICIENCY = 0x277D,
SMSG_SET_SPELL_CHARGES = 0x2C29,
- SMSG_SET_TASK_COMPLETE = 0x27DF,
+ SMSG_SET_TASK_COMPLETE = 0x27DB,
SMSG_SET_TIME_ZONE_INFORMATION = 0x26A5,
- SMSG_SET_VEHICLE_REC_ID = 0x2739,
- SMSG_SHOW_ADVENTURE_MAP = 0x283F,
+ SMSG_SET_VEHICLE_REC_ID = 0x2738,
+ SMSG_SHOW_ADVENTURE_MAP = 0x283B,
SMSG_SHOW_BANK = 0x26AE,
- SMSG_SHOW_MAILBOX = 0x27F6,
- SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25F1,
+ SMSG_SHOW_MAILBOX = 0x27F2,
+ SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25F2,
SMSG_SHOW_TAXI_NODES = 0x2700,
- SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27BF,
- SMSG_SOCKET_GEMS = 0x2771,
- SMSG_SOCKET_GEMS_FAILURE = 0x2772,
- SMSG_SORT_BAGS_RESULT = 0x282D,
- SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25F3,
- SMSG_SPECIALIZATION_CHANGED = 0x25ED,
+ SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27BC,
+ SMSG_SOCKET_GEMS = 0x276F,
+ SMSG_SOCKET_GEMS_FAILURE = 0x2770,
+ SMSG_SORT_BAGS_RESULT = 0x2829,
+ SMSG_SPECIALIZATION_CHANGED = 0x25EE,
SMSG_SPECIAL_MOUNT_ANIM = 0x26CE,
- SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2761,
+ SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2760,
SMSG_SPELL_ABSORB_LOG = 0x2C1F,
SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17,
SMSG_SPELL_CHANNEL_START = 0x2C34,
@@ -1694,24 +1714,24 @@ enum OpcodeServer : uint16
SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C1B,
SMSG_SPELL_PREPARE = 0x2C38,
SMSG_SPELL_START = 0x2C3A,
- SMSG_SPIRIT_HEALER_CONFIRM = 0x275E,
- SMSG_STAND_STATE_UPDATE = 0x2764,
- SMSG_START_ELAPSED_TIMER = 0x261B,
- SMSG_START_ELAPSED_TIMERS = 0x261D,
- SMSG_START_LOOT_ROLL = 0x2633,
- SMSG_START_MIRROR_TIMER = 0x2758,
- SMSG_START_TIMER = 0x25BB,
- SMSG_STOP_ELAPSED_TIMER = 0x261C,
- SMSG_STOP_MIRROR_TIMER = 0x275A,
- SMSG_STOP_SPEAKERBOT_SOUND = 0x27BB,
- SMSG_STREAMING_MOVIES = 0x25BA,
+ SMSG_SPIRIT_HEALER_CONFIRM = 0x275D,
+ SMSG_STAND_STATE_UPDATE = 0x2763,
+ SMSG_START_ELAPSED_TIMER = 0x261C,
+ SMSG_START_ELAPSED_TIMERS = 0x261E,
+ SMSG_START_LOOT_ROLL = 0x2634,
+ SMSG_START_MIRROR_TIMER = 0x2757,
+ SMSG_START_TIMER = 0x25BC,
+ SMSG_STOP_ELAPSED_TIMER = 0x261D,
+ SMSG_STOP_MIRROR_TIMER = 0x2759,
+ SMSG_STOP_SPEAKERBOT_SOUND = 0x27B8,
+ SMSG_STREAMING_MOVIES = 0x25BB,
SMSG_SUMMON_CANCEL = 0x26E1,
- SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258F,
- SMSG_SUMMON_REQUEST = 0x2769,
+ SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x2590,
+ SMSG_SUMMON_REQUEST = 0x2768,
SMSG_SUPERCEDED_SPELLS = 0x2C4C,
SMSG_SUSPEND_COMMS = 0x304A,
- SMSG_SUSPEND_TOKEN = 0x25BD,
- SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2760,
+ SMSG_SUSPEND_TOKEN = 0x25BE,
+ SMSG_TALENTS_INVOLUNTARILY_RESET = 0x275F,
SMSG_TAXI_NODE_STATUS = 0x26AB,
SMSG_TEXT_EMOTE = 0x26A9,
SMSG_THREAT_CLEAR = 0x271A,
@@ -1724,77 +1744,77 @@ enum OpcodeServer : uint16
SMSG_TOTEM_CREATED = 0x26FB,
SMSG_TOTEM_DURATION_CHANGED = 0x26FC,
SMSG_TOTEM_MOVED = 0x26FD,
- SMSG_TRADE_STATUS = 0x2582,
- SMSG_TRADE_UPDATED = 0x2581,
- SMSG_TRAINER_BUY_FAILED = 0x271F,
- SMSG_TRAINER_LIST = 0x271E,
- SMSG_TRANSFER_ABORTED = 0x274A,
- SMSG_TRANSFER_PENDING = 0x25E5,
- SMSG_TRANSMOG_COLLECTION_UPDATE = 0x25C6,
- SMSG_TRANSMOG_SET_COLLECTION_UPDATE = 0x25C7,
- SMSG_TRIGGER_CINEMATIC = 0x2817,
+ SMSG_TRADE_STATUS = 0x2583,
+ SMSG_TRADE_UPDATED = 0x2582,
+ SMSG_TRAINER_BUY_FAILED = 0x271E,
+ SMSG_TRAINER_LIST = 0x271D,
+ SMSG_TRANSFER_ABORTED = 0x2749,
+ SMSG_TRANSFER_PENDING = 0x25E6,
+ SMSG_TRANSMOG_COLLECTION_UPDATE = 0x25C7,
+ SMSG_TRANSMOG_SET_COLLECTION_UPDATE = 0x25C8,
+ SMSG_TRIGGER_CINEMATIC = 0x2813,
SMSG_TRIGGER_MOVIE = 0x26FE,
- SMSG_TURN_IN_PETITION_RESULT = 0x279B,
- SMSG_TUTORIAL_FLAGS = 0x2809,
- SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x284C,
- SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x284B,
+ SMSG_TURN_IN_PETITION_RESULT = 0x2798,
+ SMSG_TUTORIAL_FLAGS = 0x2805,
+ SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x2848,
+ SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x2847,
SMSG_TWITTER_STATUS = 0x2FFD,
- SMSG_UI_TIME = 0x275D,
- SMSG_UNDELETE_CHARACTER_RESPONSE = 0x281A,
- SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x281B,
+ SMSG_UI_TIME = 0x275C,
+ SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2816,
+ SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x2817,
SMSG_UNLEARNED_SPELLS = 0x2C4E,
- SMSG_UPDATE_ACCOUNT_DATA = 0x2752,
- SMSG_UPDATE_ACTION_BUTTONS = 0x25F6,
- SMSG_UPDATE_CELESTIAL_BODY = 0x286B,
- SMSG_UPDATE_CHARACTER_FLAGS = 0x280F,
+ SMSG_UPDATE_ACCOUNT_DATA = 0x2751,
+ SMSG_UPDATE_ACTION_BUTTONS = 0x25F7,
+ SMSG_UPDATE_CELESTIAL_BODY = 0x2867,
+ SMSG_UPDATE_CHARACTER_FLAGS = 0x280B,
SMSG_UPDATE_EXPANSION_LEVEL = 0x2666,
- SMSG_UPDATE_GAME_TIME_STATE = 0x2872,
+ SMSG_UPDATE_GAME_TIME_STATE = 0x286E,
SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D8,
SMSG_UPDATE_LAST_INSTANCE = 0x26B7,
- SMSG_UPDATE_OBJECT = 0x2818,
- SMSG_UPDATE_TALENT_DATA = 0x25EC,
- SMSG_UPDATE_TASK_PROGRESS = 0x27DD,
+ SMSG_UPDATE_OBJECT = 0x2814,
+ SMSG_UPDATE_TALENT_DATA = 0x25ED,
+ SMSG_UPDATE_TASK_PROGRESS = 0x27D9,
SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19,
- SMSG_UPDATE_WORLD_STATE = 0x2795,
+ SMSG_UPDATE_WORLD_STATE = 0x2792,
SMSG_USERLIST_ADD = 0x2BB9,
SMSG_USERLIST_REMOVE = 0x2BBA,
SMSG_USERLIST_UPDATE = 0x2BBB,
- SMSG_USE_EQUIPMENT_SET_RESULT = 0x279C,
- SMSG_VENDOR_INVENTORY = 0x25CA,
- SMSG_VIGNETTE_UPDATE = 0x27BD,
- SMSG_VOID_ITEM_SWAP_RESPONSE = 0x25DF,
- SMSG_VOID_STORAGE_CONTENTS = 0x25DC,
- SMSG_VOID_STORAGE_FAILED = 0x25DB,
- SMSG_VOID_STORAGE_TRANSFER_CHANGES = 0x25DD,
- SMSG_VOID_TRANSFER_RESULT = 0x25DE,
- SMSG_WAIT_QUEUE_FINISH = 0x256E,
- SMSG_WAIT_QUEUE_UPDATE = 0x256D,
- SMSG_WARDEN_DATA = 0x2576,
- SMSG_WARFRONT_COMPLETED = 0x27AE,
- SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x25B4,
+ SMSG_USE_EQUIPMENT_SET_RESULT = 0x2799,
+ SMSG_VENDOR_INVENTORY = 0x25CB,
+ SMSG_VIGNETTE_UPDATE = 0x27BA,
+ SMSG_VOID_ITEM_SWAP_RESPONSE = 0x25E0,
+ SMSG_VOID_STORAGE_CONTENTS = 0x25DD,
+ SMSG_VOID_STORAGE_FAILED = 0x25DC,
+ SMSG_VOID_STORAGE_TRANSFER_CHANGES = 0x25DE,
+ SMSG_VOID_TRANSFER_RESULT = 0x25DF,
+ SMSG_WAIT_QUEUE_FINISH = 0x256F,
+ SMSG_WAIT_QUEUE_UPDATE = 0x256E,
+ SMSG_WARDEN_DATA = 0x2577,
+ SMSG_WARFRONT_COMPLETED = 0x27AB,
+ SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x25B5,
SMSG_WEATHER = 0x26D5,
SMSG_WEEKLY_SPELL_USAGE = 0x2C18,
SMSG_WHO = 0x2BAE,
SMSG_WHO_IS = 0x26D4,
- SMSG_WORLD_QUEST_UPDATE = 0x2853,
- SMSG_WORLD_SERVER_INFO = 0x25C2,
- SMSG_WORLD_TEXT = 0x2838,
- SMSG_WOW_TOKEN_AUCTION_SOLD = 0x2825,
- SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x2827,
- SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x2828,
- SMSG_WOW_TOKEN_CAN_REDEEM_FOR_BALANCE_RESULT = 0x2861,
- SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x2826,
- SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x2820,
- SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x2821,
- SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x2822,
- SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2829,
- SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x282A,
- SMSG_WOW_TOKEN_REDEEM_RESULT = 0x282B,
- SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x2823,
- SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x2824,
- SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x282C,
- SMSG_XP_GAIN_ABORTED = 0x25E0,
- SMSG_XP_GAIN_ENABLED = 0x27F9,
+ SMSG_WORLD_QUEST_UPDATE = 0x284F,
+ SMSG_WORLD_SERVER_INFO = 0x25C3,
+ SMSG_WORLD_TEXT = 0x2834,
+ SMSG_WOW_TOKEN_AUCTION_SOLD = 0x2821,
+ SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x2823,
+ SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x2824,
+ SMSG_WOW_TOKEN_CAN_REDEEM_FOR_BALANCE_RESULT = 0x285D,
+ SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x2822,
+ SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x281C,
+ SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x281D,
+ SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x281E,
+ SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2825,
+ SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2826,
+ SMSG_WOW_TOKEN_REDEEM_RESULT = 0x2827,
+ SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x281F,
+ SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x2820,
+ SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x2828,
+ SMSG_XP_GAIN_ABORTED = 0x25E1,
+ SMSG_XP_GAIN_ENABLED = 0x27F5,
SMSG_ZONE_UNDER_ATTACK = 0x2BB5,
// Opcodes that are not generated automatically
@@ -1810,6 +1830,7 @@ enum OpcodeServer : uint16
SMSG_BF_MGR_ENTRY_INVITE = 0xBADD,
SMSG_BF_MGR_QUEUE_INVITE = 0xBADD,
SMSG_BF_MGR_QUEUE_REQUEST_RESPONSE = 0xBADD,
+ SMSG_PROPOSE_LEVEL_GRANT = 0xBADD,
};
inline bool IsInstanceOnlyOpcode(uint32 opcode)
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 8e3cc797258..f17e8e11317 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -69,7 +69,7 @@ uint8 const WorldSocket::SessionKeySeed[16] = { 0x58, 0xCB, 0xCF, 0x40, 0xFE, 0x
uint8 const WorldSocket::ContinuedSessionSeed[16] = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F };
uint8 const WorldSocket::EncryptionKeySeed[16] = { 0xE9, 0x75, 0x3C, 0x50, 0x90, 0x93, 0x61, 0xDA, 0x3B, 0x07, 0xEE, 0xFA, 0xFF, 0x9D, 0x41, 0xB8 };
-uint8 const ClientTypeSeed_Wn64[16] = { 0x79, 0x73, 0xA8, 0xD5, 0x4B, 0xDB, 0x8B, 0x79, 0x8D, 0x92, 0x97, 0xB0, 0x96, 0xE7, 0x71, 0xEF };
+uint8 const ClientTypeSeed_Wn64[16] = { 0x21, 0xF5, 0xA6, 0xFC, 0x7A, 0xD8, 0x9F, 0xBF, 0x41, 0x1F, 0xDA, 0x8B, 0x87, 0x38, 0x18, 0x6A };
uint8 const ClientTypeSeed_Mc64[16] = { 0x34, 0x1C, 0xFE, 0xFE, 0x3D, 0x72, 0xAC, 0xA9, 0xA4, 0x40, 0x7D, 0xC5, 0x35, 0xDE, 0xD6, 0x6A };
WorldSocket::WorldSocket(tcp::socket&& socket) : Socket(std::move(socket)),