aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-10-26 11:17:33 +0200
committerShauren <shauren.trinity@gmail.com>2019-10-27 00:12:41 +0200
commitee2e49429f4383732b4e0f39b493470b9c1dd10c (patch)
tree4204060b24b0469268971b8f1a45084eb0aee26b /src/server/game/Entities/Object
parent28eda522b1bef6d354d5a6b54fc0864ea503121a (diff)
Core/PacketIO: Update opcodes and packet structures to 8.2.5
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.cpp1
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.h2
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateField.h1
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp706
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h414
5 files changed, 682 insertions, 442 deletions
diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp
index 4689e841ade..f4d96c130e0 100644
--- a/src/server/game/Entities/Object/ObjectGuid.cpp
+++ b/src/server/game/Entities/Object/ObjectGuid.cpp
@@ -90,6 +90,7 @@ namespace
SET_GUID_NAME(ClientSession);
SET_GUID_NAME(Cast);
SET_GUID_NAME(ClientConnection);
+ SET_GUID_NAME(ClubFinder);
#undef SET_GUID_NAME
}
diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h
index 3ac339345d6..f5a17c3788f 100644
--- a/src/server/game/Entities/Object/ObjectGuid.h
+++ b/src/server/game/Entities/Object/ObjectGuid.h
@@ -118,6 +118,7 @@ enum class HighGuid
ClientSession = 46,
Cast = 47,
ClientConnection = 48,
+ ClubFinder = 49,
Count,
};
@@ -171,6 +172,7 @@ GUID_TRAIT_GLOBAL(HighGuid::CommerceObj)
GUID_TRAIT_GLOBAL(HighGuid::ClientSession)
GUID_TRAIT_REALM_SPECIFIC(HighGuid::Player)
GUID_TRAIT_REALM_SPECIFIC(HighGuid::Item) // This is not exactly correct, there are 2 more unknown parts in highguid: (high >> 10 & 0xFF), (high >> 18 & 0xFFFFFF)
+GUID_TRAIT_REALM_SPECIFIC(HighGuid::ChatChannel)
GUID_TRAIT_REALM_SPECIFIC(HighGuid::Guild)
GUID_TRAIT_MAP_SPECIFIC(HighGuid::WorldTransaction)
GUID_TRAIT_MAP_SPECIFIC(HighGuid::Conversation)
diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h
index aaed95d4469..952bc97370f 100644
--- a/src/server/game/Entities/Object/Updates/UpdateField.h
+++ b/src/server/game/Entities/Object/Updates/UpdateField.h
@@ -19,6 +19,7 @@
#define UpdateField_h__
#include "ObjectGuid.h"
+#include "Optional.h"
#include "UpdateMask.h"
#include <algorithm>
#include <vector>
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index abedd992089..c9c7dcd3191 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -68,7 +68,7 @@ void ObjectData::ClearChangesMask()
_changesMask.ResetAll();
}
-void ItemEnchantment::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void ItemEnchantment::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << int32(ID);
data << uint32(Duration);
@@ -76,7 +76,7 @@ void ItemEnchantment::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
data << uint16(Inactive);
}
-void ItemEnchantment::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void ItemEnchantment::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
UpdateMask<5> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 5);
@@ -112,21 +112,21 @@ void ItemEnchantment::ClearChangesMask()
_changesMask.ResetAll();
}
-void ArtifactPower::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void ArtifactPower::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << int16(ArtifactPowerID);
data << uint8(PurchasedRank);
data << uint8(CurrentRankWithBonus);
}
-void ArtifactPower::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void ArtifactPower::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << int16(ArtifactPowerID);
data << uint8(PurchasedRank);
data << uint8(CurrentRankWithBonus);
}
-void SocketedGem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void SocketedGem::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << int32(ItemID);
for (std::size_t i = 0; i < 16; ++i)
@@ -136,7 +136,7 @@ void SocketedGem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> f
data << uint8(Context);
}
-void SocketedGem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void SocketedGem::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
UpdateMask<20> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlocksMask(0), 1);
@@ -198,7 +198,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << uint32(DynamicFlags);
for (std::size_t i = 0; i < 13; ++i)
{
- Enchantment[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Enchantment[i].WriteCreate(data, owner, receiver);
}
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
{
@@ -229,11 +229,11 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
}
for (std::size_t i = 0; i < ArtifactPowers.size(); ++i)
{
- ArtifactPowers[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ ArtifactPowers[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < Gems.size(); ++i)
{
- Gems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Gems[i].WriteCreate(data, owner, receiver);
}
}
@@ -303,7 +303,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask,
{
if (ArtifactPowers.HasChanged(i))
{
- ArtifactPowers[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ArtifactPowers[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -313,7 +313,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask,
{
if (Gems.HasChanged(i))
{
- Gems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ Gems[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -394,7 +394,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask,
{
if (changesMask[27 + i])
{
- Enchantment[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ Enchantment[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -504,19 +504,19 @@ void AzeriteEmpoweredItemData::ClearChangesMask()
_changesMask.ResetAll();
}
-void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << uint32(AzeriteEssenceID);
data << uint32(Rank);
}
-void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
data << uint32(AzeriteEssenceID);
data << uint32(Rank);
}
-void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
for (std::size_t i = 0; i < 3; ++i)
{
@@ -527,7 +527,7 @@ void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, EnumClassFlag<Update
data.FlushBits();
}
-void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const
+void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const
{
UpdateMask<7> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlocksMask(0), 1);
@@ -575,14 +575,14 @@ void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
data << uint32(Level);
data << uint32(AuraLevel);
data << uint32(KnowledgeLevel);
- data << uint32(DEBUGknowledgeWeek);
+ data << int32(DEBUGknowledgeWeek);
}
data << uint32(UnlockedEssences.size());
data << uint32(SelectedEssences.size());
data << uint32(UnlockedEssenceMilestones.size());
for (std::size_t i = 0; i < UnlockedEssences.size(); ++i)
{
- UnlockedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ UnlockedEssences[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < UnlockedEssenceMilestones.size(); ++i)
{
@@ -590,7 +590,7 @@ void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
}
for (std::size_t i = 0; i < SelectedEssences.size(); ++i)
{
- SelectedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ SelectedEssences[i].WriteCreate(data, owner, receiver);
}
}
@@ -635,7 +635,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes
{
if (UnlockedEssences.HasChanged(i))
{
- UnlockedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ UnlockedEssences[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -655,7 +655,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes
{
if (SelectedEssences.HasChanged(i))
{
- SelectedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ SelectedEssences[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -677,7 +677,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes
}
if (changesMask[8])
{
- data << uint32(DEBUGknowledgeWeek);
+ data << int32(DEBUGknowledgeWeek);
}
}
}
@@ -695,26 +695,26 @@ void AzeriteItemData::ClearChangesMask()
_changesMask.ResetAll();
}
-void UnitChannel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void UnitChannel::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(SpellXSpellVisualID);
}
-void UnitChannel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void UnitChannel::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(SpellXSpellVisualID);
}
-void VisibleItem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(ItemID);
data << uint16(ItemAppearanceModID);
data << uint16(ItemVisual);
}
-void VisibleItem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void VisibleItem::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
UpdateMask<4> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 4);
@@ -745,13 +745,13 @@ void VisibleItem::ClearChangesMask()
_changesMask.ResetAll();
}
-void PassiveSpellHistory::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void PassiveSpellHistory::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(AuraSpellID);
}
-void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(AuraSpellID);
@@ -787,7 +787,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << Target;
data << BattlePetCompanionGUID;
data << uint64(BattlePetDBID);
- ChannelData->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ ChannelData->WriteCreate(data, owner, receiver);
data << uint32(SummonedByHomeRealm);
data << uint8(Race);
data << uint8(ClassId);
@@ -822,7 +822,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(FactionTemplate, owner, receiver));
for (std::size_t i = 0; i < 3; ++i)
{
- VirtualItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ VirtualItems[i].WriteCreate(data, owner, receiver);
}
data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver));
data << uint32(Flags2);
@@ -940,7 +940,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << uint32(ChannelObjects.size());
for (std::size_t i = 0; i < PassiveSpells.size(); ++i)
{
- PassiveSpells[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ PassiveSpells[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < WorldEffects.size(); ++i)
{
@@ -1012,7 +1012,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask,
{
if (PassiveSpells.HasChanged(i))
{
- PassiveSpells[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ PassiveSpells[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -1102,7 +1102,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask,
}
if (changesMask[21])
{
- ChannelData->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ChannelData->WriteUpdate(data, owner, receiver);
}
if (changesMask[22])
{
@@ -1508,7 +1508,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask,
{
if (changesMask[143 + i])
{
- VirtualItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ VirtualItems[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -1693,21 +1693,22 @@ void UnitData::ClearChangesMask()
_changesMask.ResetAll();
}
-void QuestLog::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(QuestID);
data << uint32(StateFlags);
data << uint32(EndTime);
data << uint32(AcceptTime);
+ data << uint32(Field_10);
for (std::size_t i = 0; i < 24; ++i)
{
data << int16(ObjectiveProgress[i]);
}
}
-void QuestLog::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void QuestLog::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
- UpdateMask<30> const& changesMask = _changesMask;
+ UpdateMask<31> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlocksMask(0), 1);
if (changesMask.GetBlock(0))
data.WriteBits(changesMask.GetBlock(0), 32);
@@ -1731,12 +1732,16 @@ void QuestLog::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
{
data << uint32(AcceptTime);
}
+ if (changesMask[5])
+ {
+ data << uint32(Field_10);
+ }
}
- if (changesMask[5])
+ if (changesMask[6])
{
for (std::size_t i = 0; i < 24; ++i)
{
- if (changesMask[6 + i])
+ if (changesMask[7 + i])
{
data << int16(ObjectiveProgress[i]);
}
@@ -1750,11 +1755,12 @@ void QuestLog::ClearChangesMask()
Base::ClearChangesMask(StateFlags);
Base::ClearChangesMask(EndTime);
Base::ClearChangesMask(AcceptTime);
+ Base::ClearChangesMask(Field_10);
Base::ClearChangesMask(ObjectiveProgress);
_changesMask.ResetAll();
}
-void ArenaCooldown::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(SpellID);
data << int32(Charges);
@@ -1765,7 +1771,7 @@ void ArenaCooldown::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag>
data << uint8(MaxCharges);
}
-void ArenaCooldown::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void ArenaCooldown::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
UpdateMask<8> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 8);
@@ -1844,14 +1850,15 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi
data << int32(GuildTimeStamp);
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
{
- for (std::size_t i = 0; i < 100; ++i)
+ for (std::size_t i = 0; i < 125; ++i)
{
- QuestLog[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ QuestLog[i].WriteCreate(data, owner, receiver);
}
+ data << uint32(QuestSessionQuestLog.size());
}
for (std::size_t i = 0; i < 19; ++i)
{
- VisibleItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ VisibleItems[i].WriteCreate(data, owner, receiver);
}
data << int32(PlayerTitle);
data << int32(FakeInebriation);
@@ -1867,213 +1874,272 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi
data << uint32(ArenaCooldowns.size());
data << int32(Field_B0);
data << int32(Field_B4);
+ data << Field_F8;
+ data << int32(Field_108);
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
+ {
+ for (std::size_t i = 0; i < QuestSessionQuestLog.size(); ++i)
+ {
+ QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
+ }
+ }
for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i)
{
- ArenaCooldowns[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ ArenaCooldowns[i].WriteCreate(data, owner, receiver);
+ }
+ if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
+ {
+ data.WriteBit(HasQuestSession);
}
+ data.WriteBit(HasLevelLink);
+ data.FlushBits();
}
void PlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- UpdateMask<161> allowedMaskForTarget({ 0xFFFFFFFFu, 0x00000007u, 0x00000000u, 0x00000000u, 0xFFFFFF00u, 0x00000001u });
+ UpdateMask<192> allowedMaskForTarget({ 0xFFFFFFF5u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFF80u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver);
}
-void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
+void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
- allowedMaskForTarget |= { 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x000000FFu, 0x00000000u };
+ allowedMaskForTarget |= { 0x0000000Au, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000007Fu };
}
-void PlayerData::WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void PlayerData::WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
data.WriteBits(changesMask.GetBlocksMask(0), 6);
for (std::size_t i = 0; i < 6; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
+ bool hasQuestLogDynamicChangesMask = data.WriteBit(IsQuestLogDynamicChangesMask());
if (changesMask[0])
{
if (changesMask[1])
{
+ data.WriteBit(HasQuestSession);
+ }
+ if (changesMask[2])
+ {
+ data.WriteBit(HasLevelLink);
+ }
+ if (changesMask[3])
+ {
+ QuestSessionQuestLog.WriteUpdateMask(data);
+ }
+ if (changesMask[4])
+ {
ArenaCooldowns.WriteUpdateMask(data);
}
}
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[1])
+ if (changesMask[3])
+ {
+ for (std::size_t i = 0; i < QuestSessionQuestLog.size(); ++i)
+ {
+ if (QuestSessionQuestLog.HasChanged(i))
+ {
+ if (hasQuestLogDynamicChangesMask)
+ QuestSessionQuestLog[i].WriteUpdate(data, owner, receiver);
+ else
+ QuestSessionQuestLog[i].WriteCreate(data, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[4])
{
for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i)
{
if (ArenaCooldowns.HasChanged(i))
{
- ArenaCooldowns[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ArenaCooldowns[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[2])
+ if (changesMask[5])
{
data << DuelArbiter;
}
- if (changesMask[3])
+ if (changesMask[6])
{
data << WowAccount;
}
- if (changesMask[4])
+ if (changesMask[7])
{
data << LootTargetGUID;
}
- if (changesMask[5])
+ if (changesMask[8])
{
data << uint32(PlayerFlags);
}
- if (changesMask[6])
+ if (changesMask[9])
{
data << uint32(PlayerFlagsEx);
}
- if (changesMask[7])
+ if (changesMask[10])
{
data << uint32(GuildRankID);
}
- if (changesMask[8])
+ if (changesMask[11])
{
data << uint32(GuildDeleteDate);
}
- if (changesMask[9])
+ if (changesMask[12])
{
data << int32(GuildLevel);
}
- if (changesMask[10])
+ if (changesMask[13])
{
data << uint8(SkinID);
}
- if (changesMask[11])
+ if (changesMask[14])
{
data << uint8(FaceID);
}
- if (changesMask[12])
+ if (changesMask[15])
{
data << uint8(HairStyleID);
}
- if (changesMask[13])
+ if (changesMask[16])
{
data << uint8(HairColorID);
}
- if (changesMask[14])
+ if (changesMask[17])
{
data << uint8(FacialHairStyleID);
}
- if (changesMask[15])
+ if (changesMask[18])
{
data << uint8(PartyType);
}
- if (changesMask[16])
+ if (changesMask[19])
{
data << uint8(NativeSex);
}
- if (changesMask[17])
+ if (changesMask[20])
{
data << uint8(Inebriation);
}
- if (changesMask[18])
+ if (changesMask[21])
{
data << uint8(PvpTitle);
}
- if (changesMask[19])
+ if (changesMask[22])
{
data << uint8(ArenaFaction);
}
- if (changesMask[20])
+ if (changesMask[23])
{
data << uint32(DuelTeam);
}
- if (changesMask[21])
+ if (changesMask[24])
{
data << int32(GuildTimeStamp);
}
- if (changesMask[22])
+ if (changesMask[25])
{
data << int32(PlayerTitle);
}
- if (changesMask[23])
+ if (changesMask[26])
{
data << int32(FakeInebriation);
}
- if (changesMask[24])
+ if (changesMask[27])
{
data << uint32(VirtualPlayerRealm);
}
- if (changesMask[25])
+ if (changesMask[28])
{
data << uint32(CurrentSpecID);
}
- if (changesMask[26])
+ if (changesMask[29])
{
data << int32(TaxiMountAnimKitID);
}
- if (changesMask[27])
+ if (changesMask[30])
{
data << uint8(CurrentBattlePetBreedQuality);
}
- if (changesMask[28])
+ if (changesMask[31])
{
data << int32(HonorLevel);
}
- if (changesMask[29])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
{
data << int32(Field_B0);
}
- if (changesMask[30])
+ if (changesMask[34])
{
data << int32(Field_B4);
}
+ if (changesMask[35])
+ {
+ data << Field_F8;
+ }
+ if (changesMask[36])
+ {
+ data << int32(Field_108);
+ }
}
- if (changesMask[31])
+ if (changesMask[37])
{
for (std::size_t i = 0; i < 3; ++i)
{
- if (changesMask[32 + i])
+ if (changesMask[38 + i])
{
data << uint8(CustomDisplayOption[i]);
}
}
}
- if (changesMask[35])
+ if (changesMask[41])
{
- for (std::size_t i = 0; i < 100; ++i)
+ for (std::size_t i = 0; i < 125; ++i)
{
- if (changesMask[36 + i])
+ if (changesMask[42 + i])
{
- QuestLog[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ if (hasQuestLogDynamicChangesMask)
+ QuestLog[i].WriteUpdate(data, owner, receiver);
+ else
+ QuestLog[i].WriteCreate(data, owner, receiver);
}
}
}
- if (changesMask[136])
+ if (changesMask[167])
{
for (std::size_t i = 0; i < 19; ++i)
{
- if (changesMask[137 + i])
+ if (changesMask[168 + i])
{
- VisibleItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ VisibleItems[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[156])
+ if (changesMask[187])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[157 + i])
+ if (changesMask[188 + i])
{
data << float(AvgItemLevel[i]);
}
}
}
+ data.FlushBits();
}
void PlayerData::ClearChangesMask()
{
+ Base::ClearChangesMask(HasQuestSession);
+ Base::ClearChangesMask(HasLevelLink);
+ Base::ClearChangesMask(QuestSessionQuestLog);
Base::ClearChangesMask(ArenaCooldowns);
Base::ClearChangesMask(DuelArbiter);
Base::ClearChangesMask(WowAccount);
@@ -2104,6 +2170,8 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(HonorLevel);
Base::ClearChangesMask(Field_B0);
Base::ClearChangesMask(Field_B4);
+ Base::ClearChangesMask(Field_F8);
+ Base::ClearChangesMask(Field_108);
Base::ClearChangesMask(CustomDisplayOption);
Base::ClearChangesMask(QuestLog);
Base::ClearChangesMask(VisibleItems);
@@ -2111,7 +2179,7 @@ void PlayerData::ClearChangesMask()
_changesMask.ResetAll();
}
-void SkillInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SkillInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
for (std::size_t i = 0; i < 256; ++i)
{
@@ -2125,7 +2193,7 @@ void SkillInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fie
}
}
-void SkillInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SkillInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
UpdateMask<1793> const& changesMask = _changesMask;
for (std::size_t i = 0; i < 1; ++i)
@@ -2184,13 +2252,13 @@ void SkillInfo::ClearChangesMask()
_changesMask.ResetAll();
}
-void RestInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void RestInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << uint32(Threshold);
data << uint8(StateID);
}
-void RestInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void RestInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
UpdateMask<3> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 3);
@@ -2216,7 +2284,7 @@ void RestInfo::ClearChangesMask()
_changesMask.ResetAll();
}
-void PVPInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void PVPInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << uint32(Field_0);
data << uint32(Field_4);
@@ -2230,7 +2298,7 @@ void PVPInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> field
data.FlushBits();
}
-void PVPInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void PVPInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
UpdateMask<10> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 10);
@@ -2292,7 +2360,7 @@ void PVPInfo::ClearChangesMask()
_changesMask.ResetAll();
}
-void CharacterRestriction::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void CharacterRestriction::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(Field_0);
data << int32(Field_4);
@@ -2301,7 +2369,7 @@ void CharacterRestriction::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFie
data.FlushBits();
}
-void CharacterRestriction::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void CharacterRestriction::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(Field_0);
data << int32(Field_4);
@@ -2310,44 +2378,120 @@ void CharacterRestriction::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFie
data.FlushBits();
}
-void SpellPctModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SpellPctModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ModIndex);
data << float(ModifierValue);
data << int32(LabelID);
}
-void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ModIndex);
data << float(ModifierValue);
data << int32(LabelID);
}
-void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ModIndex);
data << int32(ModifierValue);
data << int32(LabelID);
}
-void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int32(ModIndex);
data << int32(ModifierValue);
data << int32(LabelID);
}
-void Research::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int16(ResearchProjectID);
}
-void Research::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
+void Research::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int16(ResearchProjectID);
}
+void ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int32(QuestID);
+ data << uint32(ReplayTime);
+}
+
+void ReplayedQuest::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<3> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlock(0), 3);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(QuestID);
+ }
+ if (changesMask[2])
+ {
+ data << uint32(ReplayTime);
+ }
+ }
+}
+
+void ReplayedQuest::ClearChangesMask()
+{
+ Base::ClearChangesMask(QuestID);
+ Base::ClearChangesMask(ReplayTime);
+ _changesMask.ResetAll();
+}
+
+void QuestSession::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << Owner;
+ for (std::size_t i = 0; i < 875; ++i)
+ {
+ data << uint64(QuestCompleted[i]);
+ }
+}
+
+void QuestSession::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ UpdateMask<878> const& changesMask = _changesMask;
+ data.WriteBits(changesMask.GetBlocksMask(0), 28);
+ for (std::size_t i = 0; i < 28; ++i)
+ if (changesMask.GetBlock(i))
+ data.WriteBits(changesMask.GetBlock(i), 32);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << Owner;
+ }
+ }
+ if (changesMask[2])
+ {
+ for (std::size_t i = 0; i < 875; ++i)
+ {
+ if (changesMask[3 + i])
+ {
+ data << uint64(QuestCompleted[i]);
+ }
+ }
+ }
+}
+
+void QuestSession::ClearChangesMask()
+{
+ Base::ClearChangesMask(Owner);
+ Base::ClearChangesMask(QuestCompleted);
+ _changesMask.ResetAll();
+}
+
void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
for (std::size_t i = 0; i < 195; ++i)
@@ -2361,7 +2505,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << int32(XP);
data << int32(NextLevelXP);
data << int32(TrialXP);
- Skill->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Skill->WriteCreate(data, owner, receiver);
data << int32(CharacterPoints);
data << int32(MaxTalentTiers);
data << int32(TrackCreatureMask);
@@ -2398,7 +2542,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
}
for (std::size_t i = 0; i < 2; ++i)
{
- RestInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ RestInfo[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < 7; ++i)
{
@@ -2502,9 +2646,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << uint32(Research[i].size());
for (std::size_t j = 0; j < Research[i].size(); ++j)
{
- Research[i][j].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Research[i][j].WriteCreate(data, owner, receiver);
}
}
+ data << uint32(ReplayedQuests.size());
+ data << uint32(DisabledSpells.size());
for (std::size_t i = 0; i < KnownTitles.size(); ++i)
{
data << uint64(KnownTitles[i]);
@@ -2555,30 +2701,43 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
}
for (std::size_t i = 0; i < SpellPctModByLabel.size(); ++i)
{
- SpellPctModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ SpellPctModByLabel[i].WriteCreate(data, owner, receiver);
}
for (std::size_t i = 0; i < SpellFlatModByLabel.size(); ++i)
{
- SpellFlatModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ SpellFlatModByLabel[i].WriteCreate(data, owner, receiver);
+ }
+ for (std::size_t i = 0; i < ReplayedQuests.size(); ++i)
+ {
+ ReplayedQuests[i].WriteCreate(data, owner, receiver);
+ }
+ for (std::size_t i = 0; i < DisabledSpells.size(); ++i)
+ {
+ data << int32(DisabledSpells[i]);
}
for (std::size_t i = 0; i < 6; ++i)
{
- PvpInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ PvpInfo[i].WriteCreate(data, owner, receiver);
}
data.WriteBit(BackpackAutoSortDisabled);
data.WriteBit(BankAutoSortDisabled);
data.WriteBit(SortBagsRightToLeft);
data.WriteBit(InsertItemsLeftToRight);
+ data.WriteBit(QuestSession.is_initialized());
for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i)
{
- CharacterRestrictions[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ CharacterRestrictions[i].WriteCreate(data, owner, receiver);
+ }
+ if (QuestSession.is_initialized())
+ {
+ QuestSession->WriteCreate(data, owner, receiver);
}
data.FlushBits();
}
void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- UpdateMask<1487> const& changesMask = _changesMask;
+ UpdateMask<1490> const& changesMask = _changesMask;
for (std::size_t i = 0; i < 1; ++i)
data << uint32(changesMask.GetBlocksMask(i));
data.WriteBits(changesMask.GetBlocksMask(1), 15);
@@ -2665,33 +2824,45 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
SpellFlatModByLabel.WriteUpdateMask(data);
}
}
- if (changesMask[20])
+ if (changesMask[22])
{
for (std::size_t i = 0; i < 1; ++i)
{
- if (changesMask[21 + i])
+ if (changesMask[23 + i])
{
Research[i].WriteUpdateMask(data);
}
}
}
- data.FlushBits();
- if (changesMask[20])
+ if (changesMask[22])
{
for (std::size_t i = 0; i < 1; ++i)
{
- if (changesMask[21 + i])
+ if (changesMask[23 + i])
{
for (std::size_t j = 0; j < Research[i].size(); ++j)
{
if (Research[i].HasChanged(j))
{
- Research[i][j].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ Research[i][j].WriteUpdate(data, owner, receiver);
}
}
}
}
}
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[20])
+ {
+ ReplayedQuests.WriteUpdateMask(data);
+ }
+ if (changesMask[21])
+ {
+ DisabledSpells.WriteUpdateMask(data);
+ }
+ }
+ data.FlushBits();
if (changesMask[0])
{
if (changesMask[5])
@@ -2820,7 +2991,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
{
if (SpellPctModByLabel.HasChanged(i))
{
- SpellPctModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ SpellPctModByLabel[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -2830,487 +3001,519 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
{
if (SpellFlatModByLabel.HasChanged(i))
{
- SpellFlatModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ SpellFlatModByLabel[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[17])
+ if (changesMask[20])
{
- for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i)
+ for (std::size_t i = 0; i < ReplayedQuests.size(); ++i)
{
- if (CharacterRestrictions.HasChanged(i))
+ if (ReplayedQuests.HasChanged(i))
{
- CharacterRestrictions[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ReplayedQuests[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[22])
+ if (changesMask[21])
{
- data << FarsightObject;
+ for (std::size_t i = 0; i < DisabledSpells.size(); ++i)
+ {
+ if (DisabledSpells.HasChanged(i))
+ {
+ data << int32(DisabledSpells[i]);
+ }
+ }
}
- if (changesMask[23])
+ if (changesMask[17])
{
- data << SummonedBattlePetGUID;
+ for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i)
+ {
+ if (CharacterRestrictions.HasChanged(i))
+ {
+ CharacterRestrictions[i].WriteUpdate(data, owner, receiver);
+ }
+ }
}
if (changesMask[24])
{
- data << uint64(Coinage);
+ data << FarsightObject;
}
if (changesMask[25])
{
- data << int32(XP);
+ data << SummonedBattlePetGUID;
}
if (changesMask[26])
{
- data << int32(NextLevelXP);
+ data << uint64(Coinage);
}
if (changesMask[27])
{
- data << int32(TrialXP);
+ data << int32(XP);
}
if (changesMask[28])
{
- Skill->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ data << int32(NextLevelXP);
}
if (changesMask[29])
{
- data << int32(CharacterPoints);
+ data << int32(TrialXP);
}
if (changesMask[30])
{
- data << int32(MaxTalentTiers);
+ Skill->WriteUpdate(data, owner, receiver);
}
if (changesMask[31])
{
- data << int32(TrackCreatureMask);
+ data << int32(CharacterPoints);
}
if (changesMask[32])
{
- data << float(MainhandExpertise);
+ data << int32(MaxTalentTiers);
}
if (changesMask[33])
{
- data << float(OffhandExpertise);
+ data << int32(TrackCreatureMask);
}
}
if (changesMask[34])
{
if (changesMask[35])
{
- data << float(RangedExpertise);
+ data << float(MainhandExpertise);
}
if (changesMask[36])
{
- data << float(CombatRatingExpertise);
+ data << float(OffhandExpertise);
}
if (changesMask[37])
{
- data << float(BlockPercentage);
+ data << float(RangedExpertise);
}
if (changesMask[38])
{
- data << float(DodgePercentage);
+ data << float(CombatRatingExpertise);
}
if (changesMask[39])
{
- data << float(DodgePercentageFromAttribute);
+ data << float(BlockPercentage);
}
if (changesMask[40])
{
- data << float(ParryPercentage);
+ data << float(DodgePercentage);
}
if (changesMask[41])
{
- data << float(ParryPercentageFromAttribute);
+ data << float(DodgePercentageFromAttribute);
}
if (changesMask[42])
{
- data << float(CritPercentage);
+ data << float(ParryPercentage);
}
if (changesMask[43])
{
- data << float(RangedCritPercentage);
+ data << float(ParryPercentageFromAttribute);
}
if (changesMask[44])
{
- data << float(OffhandCritPercentage);
+ data << float(CritPercentage);
}
if (changesMask[45])
{
- data << float(SpellCritPercentage);
+ data << float(RangedCritPercentage);
}
if (changesMask[46])
{
- data << int32(ShieldBlock);
+ data << float(OffhandCritPercentage);
}
if (changesMask[47])
{
- data << float(ShieldBlockCritPercentage);
+ data << float(SpellCritPercentage);
}
if (changesMask[48])
{
- data << float(Mastery);
+ data << int32(ShieldBlock);
}
if (changesMask[49])
{
- data << float(Speed);
+ data << float(ShieldBlockCritPercentage);
}
if (changesMask[50])
{
- data << float(Avoidance);
+ data << float(Mastery);
}
if (changesMask[51])
{
- data << float(Sturdiness);
+ data << float(Speed);
}
if (changesMask[52])
{
- data << int32(Versatility);
+ data << float(Avoidance);
}
if (changesMask[53])
{
- data << float(VersatilityBonus);
+ data << float(Sturdiness);
}
if (changesMask[54])
{
- data << float(PvpPowerDamage);
+ data << int32(Versatility);
}
if (changesMask[55])
{
- data << float(PvpPowerHealing);
+ data << float(VersatilityBonus);
}
if (changesMask[56])
{
- data << int32(ModHealingDonePos);
+ data << float(PvpPowerDamage);
}
if (changesMask[57])
{
- data << float(ModHealingPercent);
+ data << float(PvpPowerHealing);
}
if (changesMask[58])
{
- data << float(ModHealingDonePercent);
+ data << int32(ModHealingDonePos);
}
if (changesMask[59])
{
- data << float(ModPeriodicHealingDonePercent);
+ data << float(ModHealingPercent);
}
if (changesMask[60])
{
- data << float(ModSpellPowerPercent);
+ data << float(ModHealingDonePercent);
}
if (changesMask[61])
{
- data << float(ModResiliencePercent);
+ data << float(ModPeriodicHealingDonePercent);
}
if (changesMask[62])
{
- data << float(OverrideSpellPowerByAPPercent);
+ data << float(ModSpellPowerPercent);
}
if (changesMask[63])
{
- data << float(OverrideAPBySpellPowerPercent);
+ data << float(ModResiliencePercent);
}
if (changesMask[64])
{
- data << int32(ModTargetResistance);
+ data << float(OverrideSpellPowerByAPPercent);
}
if (changesMask[65])
{
- data << int32(ModTargetPhysicalResistance);
+ data << float(OverrideAPBySpellPowerPercent);
}
}
if (changesMask[66])
{
if (changesMask[67])
{
- data << int32(LocalFlags);
+ data << int32(ModTargetResistance);
}
if (changesMask[68])
{
- data << uint8(GrantableLevels);
+ data << int32(ModTargetPhysicalResistance);
}
if (changesMask[69])
{
- data << uint8(MultiActionBars);
+ data << int32(LocalFlags);
}
if (changesMask[70])
{
- data << uint8(LifetimeMaxRank);
+ data << uint8(GrantableLevels);
}
if (changesMask[71])
{
- data << uint8(NumRespecs);
+ data << uint8(MultiActionBars);
}
if (changesMask[72])
{
- data << uint32(PvpMedals);
+ data << uint8(LifetimeMaxRank);
}
if (changesMask[73])
{
- data << uint16(TodayHonorableKills);
+ data << uint8(NumRespecs);
}
if (changesMask[74])
{
- data << uint16(YesterdayHonorableKills);
+ data << uint32(PvpMedals);
}
if (changesMask[75])
{
- data << uint32(LifetimeHonorableKills);
+ data << uint16(TodayHonorableKills);
}
if (changesMask[76])
{
- data << int32(WatchedFactionIndex);
+ data << uint16(YesterdayHonorableKills);
}
if (changesMask[77])
{
- data << int32(MaxLevel);
+ data << uint32(LifetimeHonorableKills);
}
if (changesMask[78])
{
- data << int32(ScalingPlayerLevelDelta);
+ data << int32(WatchedFactionIndex);
}
if (changesMask[79])
{
- data << int32(MaxCreatureScalingLevel);
+ data << int32(MaxLevel);
}
if (changesMask[80])
{
- data << int32(PetSpellPower);
+ data << int32(ScalingPlayerLevelDelta);
}
if (changesMask[81])
{
- data << float(UiHitModifier);
+ data << int32(MaxCreatureScalingLevel);
}
if (changesMask[82])
{
- data << float(UiSpellHitModifier);
+ data << int32(PetSpellPower);
}
if (changesMask[83])
{
- data << int32(HomeRealmTimeOffset);
+ data << float(UiHitModifier);
}
if (changesMask[84])
{
- data << float(ModPetHaste);
+ data << float(UiSpellHitModifier);
}
if (changesMask[85])
{
- data << uint8(LocalRegenFlags);
+ data << int32(HomeRealmTimeOffset);
}
if (changesMask[86])
{
- data << uint8(AuraVision);
+ data << float(ModPetHaste);
}
if (changesMask[87])
{
- data << uint8(NumBackpackSlots);
+ data << uint8(LocalRegenFlags);
}
if (changesMask[88])
{
- data << int32(OverrideSpellsID);
+ data << uint8(AuraVision);
}
if (changesMask[89])
{
- data << int32(LfgBonusFactionID);
+ data << uint8(NumBackpackSlots);
}
if (changesMask[90])
{
- data << uint16(LootSpecID);
+ data << int32(OverrideSpellsID);
}
if (changesMask[91])
{
- data << uint32(OverrideZonePVPType);
+ data << int32(LfgBonusFactionID);
}
if (changesMask[92])
{
- data << int32(Honor);
+ data << uint16(LootSpecID);
}
if (changesMask[93])
{
- data << int32(HonorNextLevel);
+ data << uint32(OverrideZonePVPType);
}
if (changesMask[94])
{
- data << int32(PvpRewardAchieved);
+ data << int32(Honor);
}
if (changesMask[95])
{
- data << int32(PvpTierMaxFromWins);
+ data << int32(HonorNextLevel);
}
if (changesMask[96])
{
- data << int32(PvpLastWeeksRewardAchieved);
+ data << int32(PvpRewardAchieved);
}
if (changesMask[97])
{
- data << int32(PvpLastWeeksTierMaxFromWins);
+ data << int32(PvpTierMaxFromWins);
}
}
if (changesMask[98])
{
if (changesMask[99])
{
- data << int32(PvpLastWeeksRewardClaimed);
+ data << int32(PvpLastWeeksRewardAchieved);
}
if (changesMask[100])
{
+ data << int32(PvpLastWeeksTierMaxFromWins);
+ }
+ if (changesMask[101])
+ {
+ data << int32(PvpLastWeeksRewardClaimed);
+ }
+ if (changesMask[102])
+ {
data << uint8(NumBankSlots);
}
}
- if (changesMask[101])
+ data.FlushBits();
+ if (changesMask[98])
+ {
+ data.WriteBit(QuestSession.is_initialized());
+ if (changesMask[103])
+ {
+ if (QuestSession.is_initialized())
+ {
+ QuestSession->WriteUpdate(data, owner, receiver);
+ }
+ }
+ }
+ if (changesMask[104])
{
for (std::size_t i = 0; i < 195; ++i)
{
- if (changesMask[102 + i])
+ if (changesMask[105 + i])
{
data << InvSlots[i];
}
}
}
- if (changesMask[297])
+ if (changesMask[300])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[298 + i])
+ if (changesMask[301 + i])
{
data << uint32(TrackResourceMask[i]);
}
}
}
- if (changesMask[300])
+ if (changesMask[303])
{
for (std::size_t i = 0; i < 192; ++i)
{
- if (changesMask[301 + i])
+ if (changesMask[304 + i])
{
data << uint64(ExploredZones[i]);
}
}
}
- if (changesMask[493])
+ if (changesMask[496])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[494 + i])
+ if (changesMask[497 + i])
{
- RestInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ RestInfo[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[496])
+ if (changesMask[499])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[497 + i])
+ if (changesMask[500 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[504 + i])
+ if (changesMask[507 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[511 + i])
+ if (changesMask[514 + i])
{
data << float(ModDamageDonePercent[i]);
}
}
}
- if (changesMask[518])
+ if (changesMask[521])
{
for (std::size_t i = 0; i < 3; ++i)
{
- if (changesMask[519 + i])
+ if (changesMask[522 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[522 + i])
+ if (changesMask[525 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[525])
+ if (changesMask[528])
{
for (std::size_t i = 0; i < 12; ++i)
{
- if (changesMask[526 + i])
+ if (changesMask[529 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[538 + i])
+ if (changesMask[541 + i])
{
data << uint32(BuybackTimestamp[i]);
}
}
}
- if (changesMask[550])
+ if (changesMask[553])
{
for (std::size_t i = 0; i < 32; ++i)
{
- if (changesMask[551 + i])
+ if (changesMask[554 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[590])
+ if (changesMask[593])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[591 + i])
+ if (changesMask[594 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[595])
+ if (changesMask[598])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[596 + i])
+ if (changesMask[599 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[598])
+ if (changesMask[601])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[599 + i])
+ if (changesMask[602 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[603])
+ if (changesMask[606])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[604 + i])
+ if (changesMask[607 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[611])
+ if (changesMask[614])
{
for (std::size_t i = 0; i < 875; ++i)
{
- if (changesMask[612 + i])
+ if (changesMask[615 + i])
{
data << uint64(QuestCompleted[i]);
}
}
}
- if (changesMask[583])
+ if (changesMask[586])
{
for (std::size_t i = 0; i < 6; ++i)
{
- if (changesMask[584 + i])
+ if (changesMask[587 + i])
{
- PvpInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ PvpInfo[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -3338,6 +3541,8 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(SelfResSpells);
Base::ClearChangesMask(SpellPctModByLabel);
Base::ClearChangesMask(SpellFlatModByLabel);
+ Base::ClearChangesMask(ReplayedQuests);
+ Base::ClearChangesMask(DisabledSpells);
Base::ClearChangesMask(CharacterRestrictions);
Base::ClearChangesMask(FarsightObject);
Base::ClearChangesMask(SummonedBattlePetGUID);
@@ -3415,6 +3620,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins);
Base::ClearChangesMask(PvpLastWeeksRewardClaimed);
Base::ClearChangesMask(NumBankSlots);
+ Base::ClearChangesMask(QuestSession);
Base::ClearChangesMask(InvSlots);
Base::ClearChangesMask(TrackResourceMask);
Base::ClearChangesMask(ExploredZones);
@@ -3804,7 +4010,7 @@ void CorpseData::ClearChangesMask()
_changesMask.ResetAll();
}
-void ScaleCurve::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
+void ScaleCurve::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
{
data << uint32(StartTimeOffset);
for (std::size_t i = 0; i < 2; ++i)
@@ -3816,7 +4022,7 @@ void ScaleCurve::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi
data.FlushBits();
}
-void ScaleCurve::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
+void ScaleCurve::WriteUpdate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
{
UpdateMask<7> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlock(0), 7);
@@ -3864,7 +4070,7 @@ void ScaleCurve::ClearChangesMask()
void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
{
- OverrideScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ OverrideScaleCurve->WriteCreate(data, owner, receiver);
data << Caster;
data << uint32(Duration);
data << uint32(TimeToTarget);
@@ -3876,7 +4082,7 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
data << float(BoundsRadius2D);
data << uint32(DecalPropertiesID);
data << CreatingEffectGUID;
- ExtraScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ ExtraScaleCurve->WriteCreate(data, owner, receiver);
}
void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
@@ -3889,7 +4095,7 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
{
if (changesMask[1])
{
- OverrideScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ OverrideScaleCurve->WriteUpdate(data, owner, receiver);
}
if (changesMask[3])
{
@@ -3937,7 +4143,7 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla
}
if (changesMask[2])
{
- ExtraScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ ExtraScaleCurve->WriteUpdate(data, owner, receiver);
}
}
}
@@ -4004,7 +4210,7 @@ void SceneObjectData::ClearChangesMask()
_changesMask.ResetAll();
}
-void ConversationLine::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << int32(ConversationLineID);
data << uint32(StartTime);
@@ -4013,7 +4219,7 @@ void ConversationLine::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << uint8(Flags);
}
-void ConversationLine::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+void ConversationLine::WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << int32(ConversationLineID);
data << uint32(StartTime);
@@ -4022,7 +4228,7 @@ void ConversationLine::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << uint8(Flags);
}
-void ConversationActor::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+void ConversationActor::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << uint32(CreatureID);
data << uint32(CreatureDisplayInfoID);
@@ -4032,7 +4238,7 @@ void ConversationActor::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldF
data.FlushBits();
}
-void ConversationActor::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const
+void ConversationActor::WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const
{
data << uint32(CreatureID);
data << uint32(CreatureDisplayInfoID);
@@ -4049,12 +4255,12 @@ void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data << uint32(Field_1C);
for (std::size_t i = 0; i < Lines->size(); ++i)
{
- (*Lines)[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ (*Lines)[i].WriteCreate(data, owner, receiver);
}
data << uint32(Actors.size());
for (std::size_t i = 0; i < Actors.size(); ++i)
{
- Actors[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver);
+ Actors[i].WriteCreate(data, owner, receiver);
}
}
@@ -4070,7 +4276,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
data.WriteBits(Lines->size(), 32);
for (std::size_t i = 0; i < Lines->size(); ++i)
{
- (*Lines)[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ (*Lines)[i].WriteUpdate(data, owner, receiver);
}
}
}
@@ -4091,7 +4297,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
{
if (Actors.HasChanged(i))
{
- Actors[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver);
+ Actors[i].WriteUpdate(data, owner, receiver);
}
}
}
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 148cc41e842..b519b79a625 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -58,8 +58,8 @@ struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask
UpdateField<int16, 0, 3> Charges;
UpdateField<uint16, 0, 4> Inactive;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -69,8 +69,8 @@ struct ArtifactPower : public IsUpdateFieldStructureTag
uint8 PurchasedRank;
uint8 CurrentRankWithBonus;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
};
struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20>
@@ -79,8 +79,8 @@ struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20>
UpdateField<uint8, 0, 2> Context;
UpdateFieldArray<uint16, 16, 3, 4> BonusListIDs;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -88,8 +88,8 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40>
{
UpdateField<std::vector<int32>, 0, 1> BonusListIDs;
DynamicUpdateField<int32, 0, 2> Modifiers;
- DynamicUpdateField<ArtifactPower, 0, 3> ArtifactPowers;
- DynamicUpdateField<SocketedGem, 0, 4> Gems;
+ DynamicUpdateField<UF::ArtifactPower, 0, 3> ArtifactPowers;
+ DynamicUpdateField<UF::SocketedGem, 0, 4> Gems;
UpdateField<ObjectGuid, 0, 5> Owner;
UpdateField<ObjectGuid, 0, 6> ContainedIn;
UpdateField<ObjectGuid, 0, 7> Creator;
@@ -106,7 +106,7 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40>
UpdateField<uint8, 0, 18> ItemAppearanceModID;
UpdateField<uint32, 0, 19> Field_130;
UpdateFieldArray<int32, 5, 20, 21> SpellCharges;
- UpdateFieldArray<ItemEnchantment, 13, 26, 27> Enchantment;
+ UpdateFieldArray<UF::ItemEnchantment, 13, 26, 27> Enchantment;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
@@ -139,8 +139,8 @@ struct UnlockedAzeriteEssence : public IsUpdateFieldStructureTag
uint32 AzeriteEssenceID;
uint32 Rank;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
};
struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasChangesMask<7>
@@ -149,21 +149,21 @@ struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasCha
UpdateField<uint32, 0, 2> Enabled;
UpdateFieldArray<uint32, 3, 3, 4> AzeriteEssenceID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const;
void ClearChangesMask();
};
struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<9>
{
- DynamicUpdateField<UnlockedAzeriteEssence, 0, 1> UnlockedEssences;
+ DynamicUpdateField<UF::UnlockedAzeriteEssence, 0, 1> UnlockedEssences;
DynamicUpdateField<uint32, 0, 3> UnlockedEssenceMilestones;
- DynamicUpdateField<SelectedAzeriteEssences, 0, 2> SelectedEssences;
+ DynamicUpdateField<UF::SelectedAzeriteEssences, 0, 2> SelectedEssences;
UpdateField<uint64, 0, 4> Xp;
UpdateField<uint32, 0, 5> Level;
UpdateField<uint32, 0, 6> AuraLevel;
UpdateField<uint32, 0, 7> KnowledgeLevel;
- UpdateField<uint32, 0, 8> DEBUGknowledgeWeek;
+ UpdateField<int32, 0, 8> DEBUGknowledgeWeek;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const;
@@ -177,8 +177,8 @@ struct UnitChannel : public IsUpdateFieldStructureTag
int32 SpellID;
int32 SpellXSpellVisualID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
};
struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4>
@@ -187,8 +187,8 @@ struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4>
UpdateField<uint16, 0, 2> ItemAppearanceModID;
UpdateField<uint16, 0, 3> ItemVisual;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -197,14 +197,14 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag
int32 SpellID;
int32 AuraSpellID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
};
struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
{
UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
- DynamicUpdateField<PassiveSpellHistory, 0, 2> PassiveSpells;
+ DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells;
DynamicUpdateField<int32, 0, 3> WorldEffects;
DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects;
UpdateField<int32, 0, 5> DisplayID;
@@ -224,7 +224,7 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
UpdateField<ObjectGuid, 0, 18> Target;
UpdateField<ObjectGuid, 0, 19> BattlePetCompanionGUID;
UpdateField<uint64, 0, 20> BattlePetDBID;
- UpdateField<UnitChannel, 0, 21> ChannelData;
+ UpdateField<UF::UnitChannel, 0, 21> ChannelData;
UpdateField<uint32, 0, 22> SummonedByHomeRealm;
UpdateField<uint8, 0, 23> Race;
UpdateField<uint8, 0, 24> ClassId;
@@ -324,7 +324,7 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
UpdateFieldArray<int32, 6, 117, 124> MaxPower;
UpdateFieldArray<float, 6, 117, 130> PowerRegenFlatModifier;
UpdateFieldArray<float, 6, 117, 136> PowerRegenInterruptedFlatModifier;
- UpdateFieldArray<VisibleItem, 3, 142, 143> VirtualItems;
+ UpdateFieldArray<UF::VisibleItem, 3, 142, 143> VirtualItems;
UpdateFieldArray<uint32, 2, 146, 147> AttackRoundBaseTime;
UpdateFieldArray<int32, 4, 149, 150> Stats;
UpdateFieldArray<int32, 4, 149, 154> StatPosBuff;
@@ -341,16 +341,17 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
void ClearChangesMask();
};
-struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30>
+struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<31>
{
UpdateField<int32, 0, 1> QuestID;
UpdateField<uint32, 0, 2> StateFlags;
UpdateField<uint32, 0, 3> EndTime;
UpdateField<uint32, 0, 4> AcceptTime;
- UpdateFieldArray<int16, 24, 5, 6> ObjectiveProgress;
+ UpdateField<uint32, 0, 5> Field_10;
+ UpdateFieldArray<int16, 24, 6, 7> ObjectiveProgress;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -364,53 +365,59 @@ struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8
UpdateField<uint32, 0, 6> NextChargeTime;
UpdateField<uint8, 0, 7> MaxCharges;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
-struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<161>
-{
- DynamicUpdateField<ArenaCooldown, 0, 1> ArenaCooldowns;
- UpdateField<ObjectGuid, 0, 2> DuelArbiter;
- UpdateField<ObjectGuid, 0, 3> WowAccount;
- UpdateField<ObjectGuid, 0, 4> LootTargetGUID;
- UpdateField<uint32, 0, 5> PlayerFlags;
- UpdateField<uint32, 0, 6> PlayerFlagsEx;
- UpdateField<uint32, 0, 7> GuildRankID;
- UpdateField<uint32, 0, 8> GuildDeleteDate;
- UpdateField<int32, 0, 9> GuildLevel;
- UpdateField<uint8, 0, 10> SkinID;
- UpdateField<uint8, 0, 11> FaceID;
- UpdateField<uint8, 0, 12> HairStyleID;
- UpdateField<uint8, 0, 13> HairColorID;
- UpdateField<uint8, 0, 14> FacialHairStyleID;
- UpdateField<uint8, 0, 15> PartyType;
- UpdateField<uint8, 0, 16> NativeSex;
- UpdateField<uint8, 0, 17> Inebriation;
- UpdateField<uint8, 0, 18> PvpTitle;
- UpdateField<uint8, 0, 19> ArenaFaction;
- UpdateField<uint32, 0, 20> DuelTeam;
- UpdateField<int32, 0, 21> GuildTimeStamp;
- UpdateField<int32, 0, 22> PlayerTitle;
- UpdateField<int32, 0, 23> FakeInebriation;
- UpdateField<uint32, 0, 24> VirtualPlayerRealm;
- UpdateField<uint32, 0, 25> CurrentSpecID;
- UpdateField<int32, 0, 26> TaxiMountAnimKitID;
- UpdateField<uint8, 0, 27> CurrentBattlePetBreedQuality;
- UpdateField<int32, 0, 28> HonorLevel;
- UpdateField<int32, 0, 29> Field_B0;
- UpdateField<int32, 0, 30> Field_B4;
- UpdateFieldArray<uint8, 3, 31, 32> CustomDisplayOption;
- UpdateFieldArray<QuestLog, 100, 35, 36> QuestLog;
- UpdateFieldArray<VisibleItem, 19, 136, 137> VisibleItems;
- UpdateFieldArray<float, 4, 156, 157> AvgItemLevel;
+struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<192>
+{
+ UpdateField<bool, 0, 1> HasQuestSession;
+ UpdateField<bool, 0, 2> HasLevelLink;
+ DynamicUpdateField<UF::QuestLog, 0, 3> QuestSessionQuestLog;
+ DynamicUpdateField<UF::ArenaCooldown, 0, 4> ArenaCooldowns;
+ UpdateField<ObjectGuid, 0, 5> DuelArbiter;
+ UpdateField<ObjectGuid, 0, 6> WowAccount;
+ UpdateField<ObjectGuid, 0, 7> LootTargetGUID;
+ UpdateField<uint32, 0, 8> PlayerFlags;
+ UpdateField<uint32, 0, 9> PlayerFlagsEx;
+ UpdateField<uint32, 0, 10> GuildRankID;
+ UpdateField<uint32, 0, 11> GuildDeleteDate;
+ UpdateField<int32, 0, 12> GuildLevel;
+ UpdateField<uint8, 0, 13> SkinID;
+ UpdateField<uint8, 0, 14> FaceID;
+ UpdateField<uint8, 0, 15> HairStyleID;
+ UpdateField<uint8, 0, 16> HairColorID;
+ UpdateField<uint8, 0, 17> FacialHairStyleID;
+ UpdateField<uint8, 0, 18> PartyType;
+ UpdateField<uint8, 0, 19> NativeSex;
+ UpdateField<uint8, 0, 20> Inebriation;
+ UpdateField<uint8, 0, 21> PvpTitle;
+ UpdateField<uint8, 0, 22> ArenaFaction;
+ UpdateField<uint32, 0, 23> DuelTeam;
+ UpdateField<int32, 0, 24> GuildTimeStamp;
+ UpdateField<int32, 0, 25> PlayerTitle;
+ UpdateField<int32, 0, 26> FakeInebriation;
+ UpdateField<uint32, 0, 27> VirtualPlayerRealm;
+ UpdateField<uint32, 0, 28> CurrentSpecID;
+ UpdateField<int32, 0, 29> TaxiMountAnimKitID;
+ UpdateField<uint8, 0, 30> CurrentBattlePetBreedQuality;
+ UpdateField<int32, 0, 31> HonorLevel;
+ UpdateField<int32, 32, 33> Field_B0;
+ UpdateField<int32, 32, 34> Field_B4;
+ UpdateField<ObjectGuid, 32, 35> Field_F8;
+ UpdateField<int32, 32, 36> Field_108;
+ UpdateFieldArray<uint8, 3, 37, 38> CustomDisplayOption;
+ UpdateFieldArray<UF::QuestLog, 125, 41, 42> QuestLog;
+ UpdateFieldArray<UF::VisibleItem, 19, 167, 168> VisibleItems;
+ UpdateFieldArray<float, 4, 187, 188> AvgItemLevel;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
- void WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
+ void WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
+ bool IsQuestLogDynamicChangesMask() const { return false; } // bandwidth savings aren't worth the cpu time
};
struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793>
@@ -423,8 +430,8 @@ struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793>
UpdateFieldArray<int16, 256, 0, 1281> SkillTempBonus;
UpdateFieldArray<uint16, 256, 0, 1537> SkillPermBonus;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -433,8 +440,8 @@ struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
UpdateField<uint32, 0, 1> Threshold;
UpdateField<uint8, 0, 2> StateID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -450,8 +457,8 @@ struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10>
UpdateField<uint32, 0, 8> PvpTierID;
UpdateField<uint32, 0, 9> Field_20;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -462,8 +469,8 @@ struct CharacterRestriction : public IsUpdateFieldStructureTag
int32 Field_8;
uint32 Type;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
};
struct SpellPctModByLabel : public IsUpdateFieldStructureTag
@@ -472,8 +479,8 @@ struct SpellPctModByLabel : public IsUpdateFieldStructureTag
float ModifierValue;
int32 LabelID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
};
struct SpellFlatModByLabel : public IsUpdateFieldStructureTag
@@ -482,25 +489,45 @@ struct SpellFlatModByLabel : public IsUpdateFieldStructureTag
int32 ModifierValue;
int32 LabelID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
};
struct Research : public IsUpdateFieldStructureTag
{
int16 ResearchProjectID;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1487>
+struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3>
+{
+ UpdateField<int32, 0, 1> QuestID;
+ UpdateField<uint32, 0, 2> ReplayTime;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct QuestSession : public IsUpdateFieldStructureTag, public HasChangesMask<878>
+{
+ UpdateField<ObjectGuid, 0, 1> Owner;
+ UpdateFieldArray<uint64, 875, 2, 3> QuestCompleted;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1490>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BankAutoSortDisabled;
UpdateField<bool, 0, 3> SortBagsRightToLeft;
UpdateField<bool, 0, 4> InsertItemsLeftToRight;
- UpdateFieldArray<DynamicUpdateField<Research, -1, -1>, 1, 20, 21> Research;
+ UpdateFieldArray<DynamicUpdateField<UF::Research, -1, -1>, 1, 22, 23> Research;
DynamicUpdateField<uint64, 0, 5> KnownTitles;
DynamicUpdateField<uint16, 0, 6> ResearchSites;
DynamicUpdateField<uint32, 0, 7> ResearchSiteProgress;
@@ -513,103 +540,106 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
DynamicUpdateField<uint32, 0, 14> Transmog;
DynamicUpdateField<int32, 0, 15> ConditionalTransmog;
DynamicUpdateField<int32, 0, 16> SelfResSpells;
- DynamicUpdateField<SpellPctModByLabel, 0, 18> SpellPctModByLabel;
- DynamicUpdateField<SpellFlatModByLabel, 0, 19> SpellFlatModByLabel;
- DynamicUpdateField<CharacterRestriction, 0, 17> CharacterRestrictions;
- UpdateField<ObjectGuid, 0, 22> FarsightObject;
- UpdateField<ObjectGuid, 0, 23> SummonedBattlePetGUID;
- UpdateField<uint64, 0, 24> Coinage;
- UpdateField<int32, 0, 25> XP;
- UpdateField<int32, 0, 26> NextLevelXP;
- UpdateField<int32, 0, 27> TrialXP;
- UpdateField<SkillInfo, 0, 28> Skill;
- UpdateField<int32, 0, 29> CharacterPoints;
- UpdateField<int32, 0, 30> MaxTalentTiers;
- UpdateField<int32, 0, 31> TrackCreatureMask;
- UpdateField<float, 0, 32> MainhandExpertise;
- UpdateField<float, 0, 33> OffhandExpertise;
- UpdateField<float, 34, 35> RangedExpertise;
- UpdateField<float, 34, 36> CombatRatingExpertise;
- UpdateField<float, 34, 37> BlockPercentage;
- UpdateField<float, 34, 38> DodgePercentage;
- UpdateField<float, 34, 39> DodgePercentageFromAttribute;
- UpdateField<float, 34, 40> ParryPercentage;
- UpdateField<float, 34, 41> ParryPercentageFromAttribute;
- UpdateField<float, 34, 42> CritPercentage;
- UpdateField<float, 34, 43> RangedCritPercentage;
- UpdateField<float, 34, 44> OffhandCritPercentage;
- UpdateField<float, 34, 45> SpellCritPercentage;
- UpdateField<int32, 34, 46> ShieldBlock;
- UpdateField<float, 34, 47> ShieldBlockCritPercentage;
- UpdateField<float, 34, 48> Mastery;
- UpdateField<float, 34, 49> Speed;
- UpdateField<float, 34, 50> Avoidance;
- UpdateField<float, 34, 51> Sturdiness;
- UpdateField<int32, 34, 52> Versatility;
- UpdateField<float, 34, 53> VersatilityBonus;
- UpdateField<float, 34, 54> PvpPowerDamage;
- UpdateField<float, 34, 55> PvpPowerHealing;
- UpdateField<int32, 34, 56> ModHealingDonePos;
- UpdateField<float, 34, 57> ModHealingPercent;
- UpdateField<float, 34, 58> ModHealingDonePercent;
- UpdateField<float, 34, 59> ModPeriodicHealingDonePercent;
- UpdateField<float, 34, 60> ModSpellPowerPercent;
- UpdateField<float, 34, 61> ModResiliencePercent;
- UpdateField<float, 34, 62> OverrideSpellPowerByAPPercent;
- UpdateField<float, 34, 63> OverrideAPBySpellPowerPercent;
- UpdateField<int32, 34, 64> ModTargetResistance;
- UpdateField<int32, 34, 65> ModTargetPhysicalResistance;
- UpdateField<int32, 66, 67> LocalFlags;
- UpdateField<uint8, 66, 68> GrantableLevels;
- UpdateField<uint8, 66, 69> MultiActionBars;
- UpdateField<uint8, 66, 70> LifetimeMaxRank;
- UpdateField<uint8, 66, 71> NumRespecs;
- UpdateField<uint32, 66, 72> PvpMedals;
- UpdateField<uint16, 66, 73> TodayHonorableKills;
- UpdateField<uint16, 66, 74> YesterdayHonorableKills;
- UpdateField<uint32, 66, 75> LifetimeHonorableKills;
- UpdateField<int32, 66, 76> WatchedFactionIndex;
- UpdateField<int32, 66, 77> MaxLevel;
- UpdateField<int32, 66, 78> ScalingPlayerLevelDelta;
- UpdateField<int32, 66, 79> MaxCreatureScalingLevel;
- UpdateField<int32, 66, 80> PetSpellPower;
- UpdateField<float, 66, 81> UiHitModifier;
- UpdateField<float, 66, 82> UiSpellHitModifier;
- UpdateField<int32, 66, 83> HomeRealmTimeOffset;
- UpdateField<float, 66, 84> ModPetHaste;
- UpdateField<uint8, 66, 85> LocalRegenFlags;
- UpdateField<uint8, 66, 86> AuraVision;
- UpdateField<uint8, 66, 87> NumBackpackSlots;
- UpdateField<int32, 66, 88> OverrideSpellsID;
- UpdateField<int32, 66, 89> LfgBonusFactionID;
- UpdateField<uint16, 66, 90> LootSpecID;
- UpdateField<uint32, 66, 91> OverrideZonePVPType;
- UpdateField<int32, 66, 92> Honor;
- UpdateField<int32, 66, 93> HonorNextLevel;
- UpdateField<int32, 66, 94> PvpRewardAchieved;
- UpdateField<int32, 66, 95> PvpTierMaxFromWins;
- UpdateField<int32, 66, 96> PvpLastWeeksRewardAchieved;
- UpdateField<int32, 66, 97> PvpLastWeeksTierMaxFromWins;
- UpdateField<int32, 98, 99> PvpLastWeeksRewardClaimed;
- UpdateField<uint8, 98, 100> NumBankSlots;
- UpdateFieldArray<ObjectGuid, 195, 101, 102> InvSlots;
- UpdateFieldArray<uint32, 2, 297, 298> TrackResourceMask;
- UpdateFieldArray<uint64, 192, 300, 301> ExploredZones;
- UpdateFieldArray<RestInfo, 2, 493, 494> RestInfo;
- UpdateFieldArray<int32, 7, 496, 497> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 496, 504> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 496, 511> ModDamageDonePercent;
- UpdateFieldArray<float, 3, 518, 519> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 518, 522> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 525, 526> BuybackPrice;
- UpdateFieldArray<uint32, 12, 525, 538> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 550, 551> CombatRatings;
- UpdateFieldArray<PVPInfo, 6, 583, 584> PvpInfo;
- UpdateFieldArray<uint32, 4, 590, 591> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 595, 596> ProfessionSkillLine;
- UpdateFieldArray<uint32, 4, 598, 599> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 603, 604> BankBagSlotFlags;
- UpdateFieldArray<uint64, 875, 611, 612> QuestCompleted;
+ DynamicUpdateField<UF::SpellPctModByLabel, 0, 18> SpellPctModByLabel;
+ DynamicUpdateField<UF::SpellFlatModByLabel, 0, 19> SpellFlatModByLabel;
+ DynamicUpdateField<UF::ReplayedQuest, 0, 20> ReplayedQuests;
+ DynamicUpdateField<int32, 0, 21> DisabledSpells;
+ DynamicUpdateField<UF::CharacterRestriction, 0, 17> CharacterRestrictions;
+ UpdateField<ObjectGuid, 0, 24> FarsightObject;
+ UpdateField<ObjectGuid, 0, 25> SummonedBattlePetGUID;
+ UpdateField<uint64, 0, 26> Coinage;
+ UpdateField<int32, 0, 27> XP;
+ UpdateField<int32, 0, 28> NextLevelXP;
+ UpdateField<int32, 0, 29> TrialXP;
+ UpdateField<UF::SkillInfo, 0, 30> Skill;
+ UpdateField<int32, 0, 31> CharacterPoints;
+ UpdateField<int32, 0, 32> MaxTalentTiers;
+ UpdateField<int32, 0, 33> TrackCreatureMask;
+ UpdateField<float, 34, 35> MainhandExpertise;
+ UpdateField<float, 34, 36> OffhandExpertise;
+ UpdateField<float, 34, 37> RangedExpertise;
+ UpdateField<float, 34, 38> CombatRatingExpertise;
+ UpdateField<float, 34, 39> BlockPercentage;
+ UpdateField<float, 34, 40> DodgePercentage;
+ UpdateField<float, 34, 41> DodgePercentageFromAttribute;
+ UpdateField<float, 34, 42> ParryPercentage;
+ UpdateField<float, 34, 43> ParryPercentageFromAttribute;
+ UpdateField<float, 34, 44> CritPercentage;
+ UpdateField<float, 34, 45> RangedCritPercentage;
+ UpdateField<float, 34, 46> OffhandCritPercentage;
+ UpdateField<float, 34, 47> SpellCritPercentage;
+ UpdateField<int32, 34, 48> ShieldBlock;
+ UpdateField<float, 34, 49> ShieldBlockCritPercentage;
+ UpdateField<float, 34, 50> Mastery;
+ UpdateField<float, 34, 51> Speed;
+ UpdateField<float, 34, 52> Avoidance;
+ UpdateField<float, 34, 53> Sturdiness;
+ UpdateField<int32, 34, 54> Versatility;
+ UpdateField<float, 34, 55> VersatilityBonus;
+ UpdateField<float, 34, 56> PvpPowerDamage;
+ UpdateField<float, 34, 57> PvpPowerHealing;
+ UpdateField<int32, 34, 58> ModHealingDonePos;
+ UpdateField<float, 34, 59> ModHealingPercent;
+ UpdateField<float, 34, 60> ModHealingDonePercent;
+ UpdateField<float, 34, 61> ModPeriodicHealingDonePercent;
+ UpdateField<float, 34, 62> ModSpellPowerPercent;
+ UpdateField<float, 34, 63> ModResiliencePercent;
+ UpdateField<float, 34, 64> OverrideSpellPowerByAPPercent;
+ UpdateField<float, 34, 65> OverrideAPBySpellPowerPercent;
+ UpdateField<int32, 66, 67> ModTargetResistance;
+ UpdateField<int32, 66, 68> ModTargetPhysicalResistance;
+ UpdateField<int32, 66, 69> LocalFlags;
+ UpdateField<uint8, 66, 70> GrantableLevels;
+ UpdateField<uint8, 66, 71> MultiActionBars;
+ UpdateField<uint8, 66, 72> LifetimeMaxRank;
+ UpdateField<uint8, 66, 73> NumRespecs;
+ UpdateField<uint32, 66, 74> PvpMedals;
+ UpdateField<uint16, 66, 75> TodayHonorableKills;
+ UpdateField<uint16, 66, 76> YesterdayHonorableKills;
+ UpdateField<uint32, 66, 77> LifetimeHonorableKills;
+ UpdateField<int32, 66, 78> WatchedFactionIndex;
+ UpdateField<int32, 66, 79> MaxLevel;
+ UpdateField<int32, 66, 80> ScalingPlayerLevelDelta;
+ UpdateField<int32, 66, 81> MaxCreatureScalingLevel;
+ UpdateField<int32, 66, 82> PetSpellPower;
+ UpdateField<float, 66, 83> UiHitModifier;
+ UpdateField<float, 66, 84> UiSpellHitModifier;
+ UpdateField<int32, 66, 85> HomeRealmTimeOffset;
+ UpdateField<float, 66, 86> ModPetHaste;
+ UpdateField<uint8, 66, 87> LocalRegenFlags;
+ UpdateField<uint8, 66, 88> AuraVision;
+ UpdateField<uint8, 66, 89> NumBackpackSlots;
+ UpdateField<int32, 66, 90> OverrideSpellsID;
+ UpdateField<int32, 66, 91> LfgBonusFactionID;
+ UpdateField<uint16, 66, 92> LootSpecID;
+ UpdateField<uint32, 66, 93> OverrideZonePVPType;
+ UpdateField<int32, 66, 94> Honor;
+ UpdateField<int32, 66, 95> HonorNextLevel;
+ UpdateField<int32, 66, 96> PvpRewardAchieved;
+ UpdateField<int32, 66, 97> PvpTierMaxFromWins;
+ UpdateField<int32, 98, 99> PvpLastWeeksRewardAchieved;
+ UpdateField<int32, 98, 100> PvpLastWeeksTierMaxFromWins;
+ UpdateField<int32, 98, 101> PvpLastWeeksRewardClaimed;
+ UpdateField<uint8, 98, 102> NumBankSlots;
+ OptionalUpdateField<UF::QuestSession, 98, 103> QuestSession;
+ UpdateFieldArray<ObjectGuid, 195, 104, 105> InvSlots;
+ UpdateFieldArray<uint32, 2, 300, 301> TrackResourceMask;
+ UpdateFieldArray<uint64, 192, 303, 304> ExploredZones;
+ UpdateFieldArray<UF::RestInfo, 2, 496, 497> RestInfo;
+ UpdateFieldArray<int32, 7, 499, 500> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 499, 507> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 499, 514> ModDamageDonePercent;
+ UpdateFieldArray<float, 3, 521, 522> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 521, 525> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 528, 529> BuybackPrice;
+ UpdateFieldArray<uint32, 12, 528, 541> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 553, 554> CombatRatings;
+ UpdateFieldArray<UF::PVPInfo, 6, 586, 587> PvpInfo;
+ UpdateFieldArray<uint32, 4, 593, 594> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 598, 599> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 4, 601, 602> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 606, 607> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 875, 614, 615> QuestCompleted;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
@@ -692,15 +722,15 @@ struct ScaleCurve : public IsUpdateFieldStructureTag, public HasChangesMask<7>
UpdateField<uint32, 0, 3> ParameterCurve;
UpdateFieldArray<TaggedPosition<Position::XY>, 2, 4, 5> Points;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
void ClearChangesMask();
};
struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<14>
{
- UpdateField<ScaleCurve, 0, 1> OverrideScaleCurve;
- UpdateField<ScaleCurve, 0, 2> ExtraScaleCurve;
+ UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve;
+ UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve;
UpdateField<ObjectGuid, 0, 3> Caster;
UpdateField<uint32, 0, 4> Duration;
UpdateField<uint32, 0, 5> TimeToTarget;
@@ -738,8 +768,8 @@ struct ConversationLine : public IsUpdateFieldStructureTag
uint8 ActorIndex;
uint8 Flags;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
};
struct ConversationActor : public IsUpdateFieldStructureTag
@@ -750,14 +780,14 @@ struct ConversationActor : public IsUpdateFieldStructureTag
int32 Field_18;
uint32 Type;
- void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
- void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
+ void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const;
};
struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<5>
{
- UpdateField<std::vector<ConversationLine>, 0, 1> Lines;
- DynamicUpdateField<ConversationActor, 0, 2> Actors;
+ UpdateField<std::vector<UF::ConversationLine>, 0, 1> Lines;
+ DynamicUpdateField<UF::ConversationActor, 0, 2> Actors;
UpdateField<int32, 0, 3> LastLineEndTime;
UpdateField<uint32, 0, 4> Field_1C;