Core/PacketIO: Update opcodes and packet structures to 8.2.5

This commit is contained in:
Shauren
2019-10-27 00:12:41 +02:00
parent 28eda522b1
commit ee2e49429f
53 changed files with 1912 additions and 1379 deletions
@@ -0,0 +1,25 @@
UPDATE `characters` SET `equipmentCache`=CONCAT(
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -70), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -67), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -64), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -61), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -58), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -55), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -52), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -49), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -46), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -43), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -40), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -37), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -34), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -31), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -28), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -25), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -22), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -19), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -16), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -13), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -10), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -7), ' ', 2), ' 0 0 '),
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -4), ' ', 2), ' 0 0 ')
) WHERE LENGTH(`equipmentCache`) > 0;
@@ -0,0 +1 @@
ALTER TABLE `quest_template` ADD `QuestSessionBonus` int(11) NOT NULL DEFAULT '0' AFTER `ManagedWorldStateID`;
@@ -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; }
@@ -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; }
@@ -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; }
@@ -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; }
@@ -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; }
@@ -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;
}
@@ -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:
/**
@@ -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; }
@@ -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; }
+5 -2
View File
@@ -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;
};
+3 -2
View File
@@ -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;
+43 -24
View File
@@ -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;
}
+4 -1
View File
@@ -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
@@ -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);
@@ -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
}
@@ -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)
@@ -19,6 +19,7 @@
#define UpdateField_h__
#include "ObjectGuid.h"
#include "Optional.h"
#include "UpdateMask.h"
#include <algorithm>
#include <vector>
File diff suppressed because it is too large Load Diff
@@ -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>
struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<192>
{
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;
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;
+6 -6
View File
@@ -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());
+3 -3
View File
@@ -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)
+1 -1
View File
@@ -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));
+12 -9
View File
@@ -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
+1
View File
@@ -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());
}
+12 -9
View File
@@ -128,16 +128,17 @@ Quest::Quest(Field* questRecord)
TreasurePickerID = questRecord[109].GetInt32();
Expansion = questRecord[110].GetInt32();
ManagedWorldStateID = questRecord[111].GetInt32();
QuestSessionBonus = questRecord[112].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();
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())
{
+2
View File
@@ -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;
@@ -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;
}
@@ -43,6 +43,7 @@ namespace WorldPackets
time_t Date = time_t(0);
uint32 TimeFromStart = 0;
uint32 TimeFromCreate = 0;
Optional<uint64> RafAcceptanceID;
};
struct AllAchievements
@@ -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);
@@ -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;
@@ -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);
@@ -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
@@ -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]);
@@ -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 = { };
@@ -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);
@@ -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;
@@ -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()
@@ -33,7 +33,6 @@ namespace WorldPackets
public:
struct DBQueryRecord
{
ObjectGuid GUID;
uint32 RecordID = 0;
};
@@ -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);
@@ -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;
@@ -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();
@@ -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;
@@ -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);
+15 -4
View File
@@ -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
@@ -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)
@@ -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
@@ -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;
}
@@ -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
+27 -11
View File
@@ -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);
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -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)),