diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-10-26 11:17:33 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-10-27 00:12:41 +0200 |
commit | ee2e49429f4383732b4e0f39b493470b9c1dd10c (patch) | |
tree | 4204060b24b0469268971b8f1a45084eb0aee26b /src/server | |
parent | 28eda522b1bef6d354d5a6b54fc0864ea503121a (diff) |
Core/PacketIO: Update opcodes and packet structures to 8.2.5
Diffstat (limited to 'src/server')
51 files changed, 1887 insertions, 1380 deletions
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)), |